text:
# DynamicMovementPrimitives
[![Build Status](https://github.com/baggepinnen/DynamicMovementPrimitives.jl/workflows/CI/badge.svg)](https://github.com/baggepinnen/DynamicMovementPrimitives.jl/actions)
[![Coverage](https://codecov.io/gh/baggepinnen/DynamicMovementPrimitives.jl/branch/master/graph/badge.svg)](https://codecov.io/gh/baggepinnen/DynamicMovementPrimitives.jl)

Provides implementations of Ijspeert et al. 2013 and of Martin Karlsson, Fredrik Bagge Carlson, et al. 2017

## Installation

```julia
using Pkg; Pkg.add("DynamicMovementPrimitives")
using DynamicMovementPrimitives
```

## Usage
### Standard DMP
```julia
using DynamicMovementPrimitives
Nbasis  = 15
αz      = 25.
αx      = 1.
opts    = DMPopts(Nbasis,αx,αz)

y       = [zeros(10);LinRange(0,2,1000); 2ones(500)]
T       = length(y)
t       = LinRange(0,10,T)
h       = t[2]-t[1] # Sample interval
y       = [y 0.5y]
ẏ       = centraldiff(y) ./h # Differentiate position to get velocity
ÿ       = centraldiff(ẏ) ./h
dmp     = fit(y,ẏ,ÿ,t,opts)

tout,yout,ẏout,xout = solve(dmp,t) # Generate trajectory, see ?solve for options
plot(dmp) # Requires Plots.jl, plots the trajectory from solve with default options
plot(dmp,true)
```

### DMP with two degrees of freedom (Karlsson, Bagge Carlson et al. 2017)
This package also contains an implementation of
```bibtex
@inproceedings{karlsson2017dmp,
  title        = {Two-Degree-of-Freedom Control for Trajectory Tracking and Perturbation Recovery during Execution of Dynamical Movement Primitives},
  author       = {Karlsson, Martin and Bagge Carlson, Fredrik and Robertsson, Anders and Johansson, Rolf},
  booktitle    = {20th IFAC World Congress},
  year         = {2017},
}
```

We start by upgrading the DMP object to incorporate also the controller parameters for the 2DOF controller
```julia
dmp2opts = DMP2dofopts(kp = 25,kv = 10,kc = 10_000,αe = 5)
dmp2 = DMP2dof(dmp, dmp2opts) # Upgrade dmp to 2DOF version

t,yc,ẏc,x,ya,ẏa,e = solve(dmp2,t)
plot(dmp2) # Requires Plots.jl, plots the trajectory from solve with default options
plot(dmp2,true)
```

We test the performance of the 2DOF controller by implementing a solver callback. Between `t=2.5` and `t=4`, we stop the evolution of the physical system by setting `ẏa = 0` through `u[3] = uprev[3]`.
```julia
import OrdinaryDiffEq
condition(u,t,integrator) = 2.5 <= t < 4
affect!(integrator) = (integrator.u[3] = integrator.uprev[3])
cb = OrdinaryDiffEq.DiscreteCallback(condition,affect!)
```

We can call the solve method with our custom callback and plot the result. It should be clear from the figures that this time, the coupled signal `yc` slows down when there is a nonzero error.
```julia
t,yc,ẏc,x,ya,ẏa,e = solve(dmp2,t, solver=OrdinaryDiffEq.Euler(), callback=cb)
plot(t,ẏc, lab="\$ẏ_c\$", c=:red, l=(:dash, 3), layout=(2,2), subplot=1)
plot!(t,yc, lab="\$y_c\$", c=:red, l=(:dash, 3), subplot=2)
plot!(t,ẏa, lab="\$ẏ_a\$", c=:blue, subplot=1)
plot!(t,ya, lab="\$y_a\$", c=:blue, subplot=2)
plot!(t,e, lab="\$e\$", c=:green, subplot=3)
plot!(t,400 .<= 1:T .< 600, lab="Disturbance", c=:green, subplot=4, fillrange=0)
t,yc,ẏc,x,ya,ẏa,e = solve(dmp2,t)
plot!(t,ẏc, lab="\$ẏ_u\$", c=:black, l=(:dashdot, 3), subplot=1)
plot!(t,yc, lab="\$y_u\$", c=:black, l=(:dashdot, 3), subplot=2)
```
In the figure below, the black line represents the evolution with no disturbance, in the paper referred to as the unperturbed evolution. The blue evolution is the actual system evolution whereas the red curve displays the coupled system evolution.
![DMP2dof plot](figs/dmp2.png)

gha_language: Julia

gha_license_id: NOASSERTION


text:
---
layout: post
title: Is it because
---

I see light coming in me. Is it because, I talked to the setting sun?   I hear music everywhere. Is it because, I just cried my loudest cry?   I find you wherever I get. Is it because, I no longer know who I am?

![_config.yml]({{ site.baseurl }}/images/config.png)

The easiest way to make your first post is to edit this one. Go into /_posts/ and update the Hello World markdown file. For more instructions head over to the [Jekyll Now repository](https://github.com/barryclark/jekyll-now) on GitHub.

license: MIT

branch_name: refs/heads/master

extension: md

license_type: permissive


text:
## v1.2.0
* adding rating system feature
* remote soft deletion and updated_at timestamp
* adding `numberToReadable()` function to as helper
* enhance logic by adding more columns
* adding `CanBeFavorited` trait now includes:
  * `favoriters_count` favoriters count
  * `favoritersCountReadable()` return favoriters count in readable format
  * `favoriters_count_readable` favoriters count readable attribute added
* adding `CanBeFollowed` trait now includes:
  * `followers_count` followers count
  * `followersCountReadable()` return followers count in readable format
  * `followers_count_readable` followers count readable attribute added
* adding `CanBeLiked` trait now includes:
  * `likers_count` likers count
  * `likersCountFormmated()` changed return type to readable number, and adding an alias to it `likersCountReadable()`
  * `likers_count_readable` likers count readable attribute added
* adding `CanBeSubscribed` trait now includes:
  * `subscribers_count` subscribers count
  * `subscribersCountReadable()` return subscribers count in readable format
  * `subscribers_count_readable` subscribers count readable attribute added
* adding `CanBeSubscribed` trait now includes:
  * `voters_count` voters count
  * `votersCountReadable()` return voters count in readable format
  * `voters_count_readable` voters count readable attribute added
* adding `CanBeSubscribed` trait now includes:
  * `upvoters_count` upvoters count
  * `upvotersCountReadable()` return upvoters count in readable format
  * `upvoters_count_readable` upvoters count readable attribute added
* adding `CanBeSubscribed` trait now includes:
  * `downvoters_count` downvoters count
  * `downvotersCountReadable()` return downvoters count in readable format
  * `downvoters_count_readable` downvoters count readable attribute added

## v1.1.0
* fix errors
* enhance logic
* smart/less configurations

## v1.0.1
* Minor change in the name of migrations files

## v1.0.0
* Initial Release

repository: GreenImp/laravel-acquaintances

repo_name: GreenImp/laravel-acquaintances


text:
# VRP_Special

> Vehicle Routing Problem is essencially an optimization problem. Where we need to find the optimal sets of routes for drivers to tranverse inorder to deliver to sets of customers.

> In our case, the problem changes to given sets of drivers and customers, find out the sets of optimal routes that will ends up in the same location.

    Imagine if we all have to goto the same place for an event, and some of us have cars,
    and some of us need a ride. How should we distribute current vehicles such that the routes
    of the vehicle will be the most optimized.


text:
## Warning!

**THIS PROJECT IS NO LONGER MAINTAINED AND MAY HAVE ISSUES.**

If you would like to support this software going forward, please create
a fork and test extensively prior to any production deployments!

# Route53Aliaser

Simulate DNS ALIAS-Record support for [apex
zones](https://devcenter.heroku.com/articles/apex-domains) (a.k.a. bare /
naked / root domains) via Amazon [Route 53](https://aws.amazon.com/route53/)
by looking for changes to the CNAME you'd like to point to and updating your
A-Record via the Route 53 APIs.

Just point your ping monitor at the engine URL and you're good to go! Your
A-Record will remain in sync with whatever CNAME you point it at.

Amazon Route 53 only supports ALIASes to a few specific types of records,
which doesn't solve the problem for Heroku users who require SSL.

This code will:

- Check to see if our cached lookup of the `source_record` has expired
    - if no, return immediately (noop)
    - if yes:
        - Lookup the A record for our `source_record` (e.g., CNAME to Heroku)
        - Lookup the A record for our `target_record` (probably the naked
          domain)
        - If the Target and Source addresses differ, update the `target_record`

## Installation

Add this line to your application's Gemfile:

    gem 'route53_aliaser'

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install route53_aliaser

## Usage

#### With Rails

Add an initializer that looks like this:

    # ./config/initializers/route53_aliaser.rb

    Route53Aliaser.configure do |config|
      config.target_record   = ENV['RT53_TARGET_RECORD'] #This is the one that is updated, i.e., your ALIAS
      config.source_record   = ENV['RT53_SOURCE_RECORD'] #This is what the ALIAS should be pointed to
      config.zone_id         = ENV['RT53_ZONE_ID']       #Amazon Hosted Zone ID

      # Only need to set these if you aren't already setting them for another AWS service
      # NOTE: You'll need to use AWS IAM to add a Route 53 read/write Policy for the user/group
      # associated with these credentials!
      # config.aws_access_key_id     = ENV['RT53_AWS_ACCESS_KEY_ID']
      # config.aws_secret_access_key = ENV['RT53_AWS_SECRET_ACCESS_KEY']
    end

Next, mount the Rails Engine at a URL of your choosing:

    # ./config/routes.rb
    mount Route53Aliaser::Engine => '/route53-update'

Finally, set up something to request this URL occasionally:

    $ curl https://www.example.com/route53-update

    NOTE: This MUST be your CNAME, not the root! (for obvious reasons)

The easiest way to do this is to monitor that URL via a free service like
[Pingdom](http://www.pingdom.com/free) or [NewRelic](http://www.newrelic.com).
Since the DNS lookups are cached, most of the time requests to this URL will
return nearly instantly. Pingdom defaults to checking once per minute, which
should be within even the shortest TTLs. It appears that NewRelic checks
approximately once every [20
seconds](https://docs.newrelic.com/docs/alerts/alert-policies/downtime-alerts/availability-monitoring),
which is probably overkill but shouldn't really matter since we don't do
anything if the cache is fresh.

Heroku's [free scheduler](https://devcenter.heroku.com/articles/scheduler) has
an "every 10 minutes" option that could also be used for this. Just put the
curl command in there. Note that Heroku
[charges](https://devcenter.heroku.com/articles/usage-and-billing) dyno hours
for scheduled jobs; if you're worried about this then you may prefer to use
the "once an hour" option instead. The downside to this approach is that the
further you stretch out the update interval the more likely you are to end up
with an out of date A-Record.

Whatever you choose, be sure the URL you are pinging is the CNAME and *not*
your root domain! (Otherwise, how could this possibly work?) The code will
raise an error if you attempt to do this.

#### Without Rails

If you're not using Rails, or if you'd like to update ad-hoc, just call
`Route53Aliaser.update_alias_if_needed` periodically. You'll of course need to
do some initialization similar to what is shown above.

### Other Options

For now, hitting the engine URL is the best option. It should keep things up
to date with minimal load on your app (since it's basically a NOOP when the
cached lookups are fresh). Please open an issue with your suggestion if you
have a better idea. Here are a couple alternatives:

- Add a `cron` job executing a Rake task.
- Dropping `Thread.new { Route53Aliaser.update_alias_if_needed }` into a
  controller action that gets called relatively frequently (say, your home
  page).  This is the #YOLO approach, but shouldn't be terribly harmful since:
  A) this is a very short-lived thread, and B) there are no real consequences
  if the thread were suddenly killed. Note that calling this in line (i.e.,
  not in a separate thread) in a controller action is not recommended since
  DNS lookups / AWS calls might be slow & will block the request to your page.

### SSL vs non-SSL endpoints on Heroku

In testing, we've noticed that the Heroku SSL endpoints, which use Amazon
ELBs, tend to keep a fairly static set of IPs. However, the non-SSL routers
(e.g., `us-east-1-a.route.herokuapp.com`) tend to present a new IP address on
every DNS expiration. This isn't a problem per se; just something you should
be aware of if you think it's strange that your Rt 53 record is constantly
being updated.

You can verify that your apps are not using the "legacy" routing system by
logging into your Heroku account and visiting
[https://legacy-routing.herokuapp.com](https://legacy-routing.herokuapp.com).

### Amazon IAM Policy for Route 53

The minimal IAM policy assigned to the user whose credentials are being used
with Route53Aliaser should look something like this:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "Stmt1418344622100",
          "Effect": "Allow",
          "Action": [
            "route53:ChangeResourceRecordSets"
          ],
          "Resource": [
            "arn:aws:route53:::hostedzone/ZQM9AEI9WXMW9"
          ]
        }
      ]
    }

## Contributing

So far, this is being used against a limited number of configurations so
patches are *very* welcome!

1. Fork it ( https://github.com/rdlugosz/route53_aliaser/fork )
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request

### Todos

1. Add some tests
1. Extract the dependency on ActiveSupport. The only thing really in use is
   the caching mechanism.
1. Include support for other API-enabled DNS Hosts, e.g., Rackspace.

### Questions?

Feel free to use the issue tracker for questions/comments or hit me up on
Twitter [@lbwski](https://twitter.com/lbwski).


text:
---
seo:
  title: How does overage pricing work?
  description: How does overage pricing work?
  keywords: credit, pricing, package, overage
title: How does overage pricing work?
weight: 0
layout: page
zendesk_id: 205012777
navigation:
  show: true
---

There’s an overage charge per email that changes depending on the package. This overage charge comes into play when you start to send emails beyond your monthly subscription amount.

You can see the cost for overages on the [Pricing page](https://sendgrid.com/transactional-email/pricing) for each package.

repository: jstvz/docs

branch_name: refs/heads/develop

gha_language: HTML

gha_license_id: MIT

repo_name: jstvz/docs


text:
---
templateKey: blog-post
slug: /apple/macos-1014-features-of-interest/
author: Peter Witham
tags: ["Development Notes"]
title: macOS 10.14 Features of Interest
date: 2018-06-24T22:45:28
blurb: A New Desktop OS Version. There are some exciting new features in macOS Mojave. Here are a few.
---

The new macOS coming in the Fall/Autumn of 2018 has some very interesting new features. I also have to say, Beta 1 and 2 have been very stable for me. Here are my favorite new features.

## Dark Mode

![](img/post_images/Screen_cap_2018-06-24_04-58-54_PM.png)

The most obvious addition to macOS is the new dark mode, and I love it! I have been wanting something like this ever since my development tools got dark mode. Partly because I do a lot of long hours and late night writing/coding, but also because I just think it looks cool. Third party applications do need to be adapted to use the new dark mode, but it feels relatively straightforward to implement. You specify a dark mode color set and assets when creating macOS applications and compile. Not only does the UI have a dark mode, but it can be dynamic, changing based on the system time. This also applies to wallpapers, expect the wallpapers to only come from Apple at first, but I’d like to see some cool third-party image sets appearing. Surely next year this has to be coming to iOS Apple? You know people **REALLY** want it.

## Stacks

![](img/post_images/Screen_cap_2018-06-24_05-04-23_PM.png)

Clear up those littered unclean desktops. Stacks is best described as updated smart folders. You can have items moved to a stack based on metadata like kind, date or tag. This will be handy for keeping related files together when working on projects or even just grouping family photos in one place. My only complaint is that it is an all or nothing choice, you can turn it on or off, I would have preferred the option to create stacks manually as well.

## Auto Fill Passwords and SMS Two Factor Authentication

This is something that has been working great for me in the Betas. You know those two-factor authentication codes you get sent to you in SMS messages? Well, just like iOS, macOS will now offer to auto-fill those for you when you receive them. I know! Awesome right! Not only that but better integration with third-party password applications is also improved in this version, both Safari and apps will be able to take advantage of all those strong passwords you have and never need to remember.

## UIKit is Coming to the Mac

This probably ended up being no surprise to any developer, but Apple announced a multi-year project to bring UIKit support from iOS to the Mac. So why should you care?… Simple, iOS apps/UI on macOS will now be possible. Not only as a developer is this exciting, but it means we might finally get some of the cool looking apps for iOS to appear on the Mac. Apple has stated that 2019 is when developers will get access, I cannot wait. For now, we get an example by way of the stocks app, contain your excitement.

## Gallery View in Finder

![](img/post_images/Screen_cap_2018-06-24_06-09-37_PM-squashed.jpg)

Gallery view is a great new addition to the finder if you use a lot of graphics files, think designers and photographers. You get a thumbnail strip and a nice large preview along with metadata displayed on the right using the new preview column. Combine this with the new dark UI option and I think it is fair to say that Apple has realized it’s recommitment to creatives, something that I feel had been lacking in the past couple of macOS releases.

## Other Things

There are a couple of things that Apple mentioned that I think deserve repeating as they will have an impact going forward.

- macOS Mojave is the last release to support 32-bit applications.
- APFS is now supported on Fusion drives.
- Machine Learning using Corel ML 2 is not only 30% faster but takes place on your Mac rather than the cloud, this is important for those that are sensitive about security.

## The Wrap

All in all, I am very excited and so far, impressed, with this release. There is a lot to appreciate. I have to be honest and say macOS Mojave helps me feel recommitted to the Apple ecosystem at a time when other platforms have been catching up, and in some ways, overtaking the platform.

repository: GrfxGuru/gatsby-starter-netlify-cms

gha_language: JavaScript

repo_name: GrfxGuru/gatsby-starter-netlify-cms


text:
---
layout: post
title:  "Naukuchiatal Trip"
date:   2015-09-29 00:19:38
categories: Travel
tags: [Travel, Trekking, Uttarakhand, Himalayas, Friends , Photoblog, WeekendDiaries]
image:
  background: ps_neutral.png
---

Uttarakhand is called Land of gods just for nothing. It holds some of the best treasures of nature be it valleys, rivers, meadows, lakes, hills or mountains. On this weekend we planned a quick trip to Nainital district, to see what other things it has to offer apart from nainital.

>Deeply engrossed Reader

>Walk Across the valley

>Journey Begins

>Paragliding (We didn't had time (or the money))

We boarded a local bus from haldwani and reached bhimtal. From bhimtal trekked seven kilometers to naukuchiatal. On our way we met an old man who guided us through the roads. We came to know about a folklore that one who sees all nine corners of naukuchiatal from one place will attain nirvana. On our way we saw paragliding and other adventure sports happening in the valley.

>Just few more steps

We reached naukuchiatal after approximatly 2 hours of journey on foot. Everyone was exhausted, still we took a foot-paddle boat and covered the lake. The lake was very serene and beautiful. The silence in the middle of the lake was just fascinating. In the meantime the clouds descended the hills and filled the lake with fog. The ripples on the lake and birds chirping somewhere in the woods made enviroment more delighful and enchanting.

>The Lake

>Ducklings at the lake

>Wonder who lived here

After coming to Naukuchiatal my infatuation with Nainital came to and end.

license: ISC


text:
<h1 align="center">
    ORA
</h1>

>> ORA is an application that allows you to share your file directly with your
friends using Peer-to-Peer

## Requirements
- [.NET Core 3.0 SDK](https://dotnet.microsoft.com/download/dotnet/3.0)

## Build
### Windows
In order to build under Windows you can simply run the powershell build script:
```
./build.ps1
```

### Linux
In order to build under Linux you can simply run the shell build script:
```
./build.sh
```

## Development
### Setup
To install development tools:
```
dotnet tool restore
```

### Format
To format code:
```
dotnet format
```

### Test
To run tests:
```
dotnet test
```

## License
This project is licensed under [MIT License](https://github.com/crab-wave/ora/blob/master/LICENSE).

repository: Crab-Wave/ora

gha_language: C#

repo_name: Crab-Wave/ora


text:
# NoteTaker_Final
This program allows a small business owner to save notes about events or other miscellanouse things

## Usage
The node.js internet module espress was used in making this program

## License
MIT

## Deployed app link

## Screenshot
<img src="2021-06-18 (2).png">

branch_name: refs/heads/main


text:
# Rage
Rage Game Engine

Rage is primarily an early-stage interactive application and rendering engine for Windows.

# Status
Currently being developed (Active)

# Plan :

The Plan for Rage is to make powerful 3D/2D Game Engine

# Main features to come :

High-fidelity Physically-Based 3D rendering (this will be expanded later, 2D to come first)
Support for Mac, Linux, Android and iOS
Native rendering API support (DirectX, Vulkan, Metal)
Fully scripted interaction and behavior
Integrated 3rd party 2D and 3D physics engine
Procedural terrain and world generation
Artificial Intelligence
Audio system

# Features currently implemented :

1) imgui with Docking Windows
2) Input Pooling
3) Keyboard and mouse Inputs
4) Fast 2D rendering (UI, particles, sprites, etc.)
5) Fully featured viewer and editor applications

# Steps To Get It Running :

1) You will need Visual Studio 2019 or higher with C++
2) Before opening solution in visual studio run "Setup.bat" file located in scripts folder
3) All dependency will be installed eg:- (Vulkan sdk) and Rage.sln will be generated
4) Now open Rage.sln File in Visual Studio
5) Set Ragenut as Startup Project if not already
6) Try to run the program using F5 key
7) You are all set to Run and Use the Engine

# Dependency

1) Python should be installed (version 3.6 +)
2) Python should be set as environment variable in your computer (else python not found error occurs while running Setup.bat) If error occurs reffer [Here](https://www.javatpoint.com/how-to-set-python-path)
3) Visual Studio 2019 or higher with C++

# About Me

I am a individual devloper supporting the development of Rage Engine

# Contribution

Send a pull request and i'll accept it !


text:
[![NuGet Version](http://img.shields.io/nuget/v/GeekLearning.Email.svg?style=flat-square&label=NuGet)](https://www.nuget.org/packages/GeekLearning.Email/)
[![Build Status](https://geeklearning.visualstudio.com/_apis/public/build/definitions/f841b266-7595-4d01-9ee1-4864cf65aa73/28/badge)](#)

# gl-dotnet-email

GeekLearning.Email provide an abstraction over various email providers. It brings builtin templates
support thanks to our [templating library](https://github.com/geeklearningio/gl-dotnet-templating).
It also bring email interception support so you can easily redirect email to developers/tester
inboxes in developement environement.

## Getting Started

In your project.json add required dependencies :
```
"GeekLearning.Storage.FileSystem": "0.6.0-*",
"GeekLearning.Templating.Handlebars": "0.5.0-*",

"GeekLearning.Email": "0.5.0-*",
"GeekLearning.Email.Smtp": ""0.5.0-*"
```

Then add required settings in your `appsettings.json` file.

In this example, we will use FileSystem provider to configure a storage provider which will load files from
a `Templates` folder relative to Application Root. This could be configured to use
an Azure Container instead (see storage documentation).

We will configure `Email` to use the `Smtp` provider. If any Mockup Recipients are defined, they will
receive the email in place of the original Recipients.

```json
"Email": {
    "Provider": {
      "Type": "Smtp",
      "Parameters": {
        "Host": "<IP_ADDRESS>",
        "Port": "25",
        "UserName": "",
        "Password": ""
      },
    },
    "DefaultSender": {
      "Email"<EMAIL_ADDRESS>      "DisplayName": "Your Company Name"
    },
    "TemplateStorage": "Templates",
    "Mockup": {
      "Recipients": [],
      "Exceptions": {
        "Emails": [],
        "Domains": []
      }
    }
  },
"Storage": {
"Stores": {
    "Templates": {
    "Provider": "FileSystem",
    "Parameters": {
        "Path": "Templates"
    }
    }
}
}
```

Then in your `Startup.cs` file add required dependencies and configuration to the DI container.

```csharp
services.AddStorage().AddFileSystemStorage(this.HostingEnvironment.ContentRootPath);
services.Configure<StorageOptions>(Configuration.GetSection("Storage"));
services.AddTemplating().AddHandlebars();

services.AddEmail()
    .AddSmtpEmail();
services.Configure<EmailOptions>(Configuration.GetSection("Email"));
```

Then we will have to write our first email template. The library uses a suffix convention to name
subtemplate needed to generate subject, html and text versions. For instance, if we want to
define an `Invitation` template, we will write three templates :
* Invitation-BodyHtml.hbs
* Invitation-BodyText.hbs
* Invitation-Subject.hbs

*Check the sample project to see the template contents*

Then in our classes, we can require an `IEmailSender` which will allow us to send templated
emails.

```csharp
 public class HomeController : Controller
    {
        private IEmailSender emailSender;

        public HomeController(IEmailSender emailSender)
        {
             this.emailSender = emailSender;
        }

        public async Task<IActionResult> SendEmail()
        {
            var user = new User
            {
                Email =<EMAIL_ADDRESS>                DisplayName = "John Doe"
            };

            var context = new
            {
                ApplicationName = "Email Sender Sample",
                User = user
            };

            await this.emailSender.SendTemplatedEmailAsync("Invitation", context, user);

            return RedirectToAction("Index");
        }
    }
```

## Supported providers

We currently support two providers in addition to the testing oriented `InMemoryProvider`.

### Smtp

Thanks to mailkit library, you can send email using any smtp endpoint.

### SendGrid

We also bring basic sendgrid api support using our Sendgrid plugin.

repository: geeklearningio/gl-dotnet-email

repo_name: geeklearningio/gl-dotnet-email


text:
## Relevant articles:

- [Negate a Predicate Method Reference with Java 11](https://www.baeldung.com/java-negate-predicate-method-reference)

repository: kwoyke/tutorials

gha_language: Java

repo_name: kwoyke/tutorials


text:
# docker-youtrack

*Easy [youtrack](http://www.jetbrains.com/youtrack/) deployment using docker*

## Requirements
You should have Docker running on you machine

## Where do I start?
1. Install docker. [It's not very hard.](http://docs.docker.io/en/latest/installation/)
2. Run it! (Stop with CTRL-C, repeat at pleasure)

  `docker run -t -i -p 8080:8080 dzwicker/docker-youtrack`

Now open your browser and point it to `http://localhost:8080` and have fun. :)

## Do it as service in ubuntu/debian
1. Create directory to store data

  ``` bash
  mkdir -p /var/lib/youtrack
  mkdir -p /var/log/youtrack
  mkdir -p /etc/youtrack
  ```

2. Permissions!

  The Dockerfile creates a youtrack user to run `youtrack` without root permissions. This user has a `UID` of `2000`. Please make sure to add a user to your host system with this `UID` and allow him to read and write to `/var/lib/youtrack`. The name of this host user is not important.

3.  Create upstart configuration `/etc/init/docker-youtrack.conf`

	``` bash
	description "Docker Youtrack"
	start on filesystem and started docker
	stop on runlevel [!2345]
	respawn
	script
	  /usr/bin/docker start -a docker-youtrack >>/var/log/youtrack/docker-youtrack.log 2>&1
	end script

	```
5. (optional) Setup logrotate e.g. `/etc/logrotate.d/docker-youtrack`

	```
	/var/log/youtrack/*.log
	/var/log/youtrack/hub/*.log
    /var/log/youtrack/hub/logs/*.log
	/var/log/youtrack/youtrack/*.log
	/var/log/youtrack/youtrack/logs/*.log
	/var/log/youtrack/internal/services/bundleProcess/*.log
	 {
		rotate 7
		daily
		missingok
		notifempty
		sharedscripts
		copytruncate
		compress
	}
	```
6. (optional) Add vhost to nginx

	`mkdir -p /var/log/nginx/your-domain`

	```
	upstream docker-youtrack {
	  server localhost:8080;
	}

	server {
	  listen 80;
	  server_name           your-domain.com;

	  access_log            /var/log/nginx/your-domain/access.log;
	  error_log             /var/log/nginx/your-domain/error.log;

	  proxy_set_header Host       $http_host;   # required for docker client's sake
	  proxy_set_header X-Real-IP  $remote_addr; # pass on real client's IP

	  client_max_body_size 0; # disable any limits to avoid HTTP 413 for large image uploads

	  # required to avoid HTTP 411: see Issue #1486 (https://github.com/dotcloud/docker/issues/1486)
	  chunked_transfer_encoding on;

	  location / {
	    proxy_pass http://docker-youtrack;
	  }

	}
	```
7. Configuring New YouTrack Server

	Follow the steps of the installation [instructions for Jetbrains Youtrack](https://confluence.jetbrains.com/display/YTD65/Installing+YouTrack+with+ZIP+Distribution) using paths located under `/var/lib/hub/data`, `/var/lib/hub/backups`, `/var/log/hub`, `/tmp`.

repository: nkpatro/docker-youtrack

repo_name: nkpatro/docker-youtrack


text:
# PyDataLister
A very simple Python 3 container test application that lists files in the
directory defined by the `DATA_PATH` environment (`/data` by default) before
optionally consuming memory and CPU cycles using multiple threads for the
purpose of _stress-testing_ a container run-time environment.

Basically something can be launched as an [OpenShift] v3.6 [Job].

The image is configured using a number of environment variables,
documented in `app.py`:

-   `DATA_PATH`
-   `PRE_LIST_SLEEP`
-   `POST_LIST_SLEEP`
-   `POST_SLEEP_BUSY_PERIOD`
-   `POST_SLEEP_BUSY_WORK`
-   `BUSY_PROCESSES`
-   `USE_MEMORY_M`

You should be able to build and run the containerised app using
any suitably equipped Docker host. I used a _Mac_ and Docker
community edition `v17.09.1`.

## Building
Build and tag the image...

    $ docker-compose build

And run it locally (in detached/non-blocking mode)...

    $ docker-compose up

## Deploying
Here, we'll deploy to the Docker hub. It's free and simple. We just need to
tag our image (with something useful like `2017.1`) and then push it.

    $ docker login -u alanbchristie
    [...]
    $ docker-compose push

---

[Job]: https://www.openshift.org
[OpenShift]: https://www.openshift.org

_Alan B. Christie
January 2018_

repository: alanbchristie/PyDataLister

repo_name: alanbchristie/PyDataLister


text:
SublimeLinter-ghc
=========================

[![Build Status](https://travis-ci.org/SublimeLinter/SublimeLinter-ghc.svg?branch=master)](https://travis-ci.org/SublimeLinter/SublimeLinter-ghc)

This linter plugin for [SublimeLinter](https://github.com/SublimeLinter/SublimeLinter) provides an interface to [ghc](http://www.haskell.org/ghc/).
It will be used with files that have the "Haskell" syntax.

## Installation

SublimeLinter must be installed in order to use this plugin.

Please use [Package Control](https://packagecontrol.io) to install the linter plugin.

To install `ghc`, you can install [haskell-platform](http://www.haskell.org/platform/) which includes `ghc` or [ghc](http://www.haskell.org/ghc/) itself. Follow the instructions on their websites to install.

`haskell-platform` is available on many package managers, for example `brew update; brew install haskell-platform` on Mac OS X.

Please make sure that the path to `ghc` is available to SublimeLinter.
The docs cover [troubleshooting PATH configuration](http://sublimelinter.com/en/latest/troubleshooting.html#finding-a-linter-executable).

## Settings

- SublimeLinter settings: http://sublimelinter.com/en/latest/settings.html
- Linter settings: http://sublimelinter.com/en/latest/linter_settings.html

repository: SublimeLinter/SublimeLinter-ghc

gha_language: Python

repo_name: SublimeLinter/SublimeLinter-ghc


text:
# Assertion Processing

> Assertion processing is the process of answering questions about an individual based on a chosen algorithm using some amount of data.

:::tip READ ME FIRST
Be sure to read the [High-Level guide's Assertion Processing Section](/guide/assertion-processing/) for more information on this topic beforehand.
:::

This page will discuss how to process collections of CaSS Assertions, which will be attached to some CaSS Competencies as well as Identitites.

## Types of Processors

There are currently two types of assertion processors and three co-processors.

:::tip Built-in Processors
1. *OptimisticQuadnaryAssertionProcessor*
2. *PessimisticQuadnaryAssertionProcessor*
:::

The **OptimisticQuadnaryAssertionProcessor** object answers the question

> “Does Learner L have Competency C based on an optimistic view of competence?”

The optimistic view states that if the following framework exists

> **Basic Arithmetic**
> * Addition *(narrowing Basic Arithmetic via a relation)*
> * Subtraction *(narrowing Basic Arithmetic via a relation)*
> * Multiplication *(narrowing Basic Arithmetic via a relation)*
> * Division *(narrowing Basic Arithmetic via a relation)*

and someone has assertions for *Addition, Subtraction, Multiplication,* and *Division*, that they have Basic Arithmetic.

The pessimistic view taken by the **PessimisticQuadnaryAssertionProcessor** object does not make this assumption, instead believing that Basic Arithmetic could have additional competence that has not been modeled in CaSS.

Both processors are Quadnary Processors.

:::tip Quadnary Processor
Can return four answers:
1. Yes
2. No
3. Indeterminate *(conflicting evidence)*
4. Unknown *(not enough information)*
:::

Assertion Processors interpret knowledge encoded in relationships to make additional inferences about frameworks. As an example, if someone has an assertion for Basic Arithmetic, it is assumed they have Addition. Additionally, if they have a negative assertion stating they do not have Addition, that they do not have Basic Arithmetic.

Similarly, if Subtraction requires Addition, and there is a negative assertion about Addition, they cannot have Subtraction. If there is a positive assertion about Subtraction, then it is presumed they have Addition.

**Equivalence** is also observed.

## Identity, Scope, and Access

The type of assertion processor determines the assumptions that are made in computing some assertion, but scope, identity and access also have factors in making these decisions.

When launching an assertion processor, you should provide all known identities for the individual, all frameworks that your institution observes, and all servers that the individual has records on. Finally, if you do not have access to the necessary records, you may receive results that do not align with reality. The individual, with all their identities, has the best visibility into their competence.

## Running an Assertion Processor

The below code runs the assertion processor with one identity, targeting one competency in one framework,

```js
var ep = new PessimisticQuadnaryAssertionProcessor();

ep.logFunction = function(data) {
    console.log(data);
};
ep.repositories.push(repo);
var subject = new Array();
subject.push(target);
var additionalSignatures = null;
ep.has(
    subject,
    competency,
    level,
    framework,
    additionalSignatures,
    function (success) { console.log(success); },
    function (ask)     { console.log(ask);     },
    function (failure) { console.log(failure); }
);
```

## Co-Processors

A Co-Processor is a processor that can be tacked onto an assertion processor to augment its processing capabilities.

One example of this is a co-processor that generates assertions of competence based on certificates that the person has. Another may query a third party system for learner data that is then converted into competency assertions.

Extending the class ```AssertionCoprocessor``` can expose this capability.

repository: cassproject/cass-editor

gha_language: Vue

repo_name: cassproject/cass-editor


text:
---
title: SFB CS-9006 SF10 ABS线束安装规范
linktitle: SFB CS-9006 SF10 ABS线束安装规范
toc: true
type: book
date: "2021-11-02T00:00:00+01:00"
authorsauthorsauthors: ["admin"]

# Prev/next pager order (if `docs_section_pager` enabled in `params.toml`)
weight: 3
---

## 更新

V1.6  修改第8节第3条关于地线接线的描述  12/ April/19  Albert Ye
V1.5  修改SF10 电路接线功能图  6/Mar/18  Albert Ye
V1.4  修改SF10 电路接线功能图  23/Jun/17  Albert Ye
V1.3  修改文档名称，页眉页脚，文档编号，Update  22/May/17  Zhang Zhong
V1.2  修改电路接线功能图，更新 Update  06/Aug/16  Zhang Zhong
V1.1  更新 Update  11/Jul/16  Zhang Zhong
V1.0  起草 Draft  14/Mar/15  Taylor Wang

# Product and Application Purpose产品适用范围

Purpose of this document is to set out for the customer information and
requirements for what, according to our opinion, may be considered a proper and
correct wiring harness installation. Please note that SFB does not assume any
liability for the information/recommendations set out herein and that
responsibility for securing the tightness and the proper installation of the
wiring harness solely rests with the customer.

本文以用户需求的信息为目的，阐述了我们认为的合适的和正确的线束安装要求。请注意宁波赛福在此不承担任何关于信息/建议的责任，并且对于线束的牢固性和线束安装的正确性，相关责任仅由用户本身承担。

The ABS wiring harness has the task of electrical connection of the ABS
components. Special attention should be given to the arrangements of the wheel
speed sensors , the recommendation to EMC and waterproof requirement.

ABS线束的主要作用是用来连接ABS的电气部件，需要特别注意轮速度传感器的安装，对EMC的建议和防水要求。

# Environmental Conditions环境条件

The wiring harness should meet/exceed the minimum requirements which are
specified in the Technical Customer Document latest version.

线束必须符合或高于在客户技术文档最新版本中说明的最低使用环境要求。

# The choose of the wire gauges导线规格选择

根据车身线束一般要求以及ABS电气特性，选择导线规格。对于一般电源信号和比较强的，不易受干扰的信号，可选择普通导线，例如ECU供电线，电机供电线。对于弱信号电路和易受干扰的信号电路，建议选用双绞线或屏蔽线，例如can线，轮速信号线。在导线规格确定后，包括考虑附加阻值（如接触电阻），检测实际压降及发热，确保在所有工况下满足ABS工作要求。

According to the body harness general requirements and the characteristics of
ABS electric, we select wire gauge. As to the common power signal and relatively
strong signal, not easy to be influenced by interference signal, we can choose
ordinary wire, such as, the ECU power supply wire and motor power supply wire.
As to the weak signal circuit and the circuit easily to be influenced, twisted
pair or shielded wire are suggested, such as, CAN line, wheel speed line. After
the determination of the wire specifications, including the consideration of
additional resistance (contact resistance), to detect the actual pressure drop
and heat, make sure that it meets the requirements of ABS work under all
conditions.

**The critical current valve during ABS operation ABS工作时关键线路电流值：**

| Pin No. pin号 | Describe描述                                                             | Current电流 (at 13.5V，23℃) |
|---------------|--------------------------------------------------------------------------|-----------------------------|
| 10，18        | ground and power for pump motor 为泵马达提供地线和电源                   | 2A to 20A                   |
| 1，9          | ground and power for solenoid valves and ECU 为电磁阀和ECU提供地线和电源 | 3A to 14A                   |
| 14            | Ignition for ECU 为ECU提供点火信号                                       | ＜1A                        |
| 3，4          | Power and signal for front wheel speed sensor 前轮速传感器供电和信号     | 5.9mA to16.8mA              |
| 5，6          | Power and signal for rear wheel speed sensor 后轮速传感器供电和信号      | 5.9mA to16.8mA              |

Unless otherwise specified, the ECU remains operative with leakage
resistancesof≥200kΩto power or ground alternatively at each wire within supply
voltage range. For more, the wheel speed sensor power supply and signal lines is
≥230 Ω to ground, ≥280 Ω to power; Diagnosis of k line is ≥1 kΩ to ignition;
Diagnosis of K line, ignition line, warning lamp line, brake line, ABS
switch-off line of is ≥100 kΩ to ground.

除非另有规定，在供电电压范围内，每条导线对地或对电源的泄露电阻≥200kΩ。其中轮速传感器供电及信号线对地大于230Ω，对电源大于280Ω；诊断k线对点火线大于1
kΩ；诊断K线，点火线，报警灯线，刹车信号线，ABS切换开关线对地大于100 kΩ。

# Wheel Speed Sensor Wiring轮速传感器布线

These two wires must be twisted with a length l = 40 - 58 mm per one twist.

两根线采用双绞线并且每一个绞距长度要达到40-58mm。

Due to the high requirements of this connection (speed sensor - ECU) it is
proposed to use only high quality material suppliers. If there are problems with
the EMC on the wheel speed sensor wire (e.g high interference) the application
of a twisted wire with an additional shield is recommended. The shield is
separately connected to ground. Deviations from this recommendation are still
possible, but should be agreed by SFB.

由于轮速传感器连接到ECU对接口有较高的要求，为了保证产品质量建议采用高品质材料供应商。如果轮速传感器线出现电磁干扰问题（如：强干扰），建议使用附加屏蔽功能的双绞线。屏蔽线单独接地。采用与此建议不同的方法也可以，但是必须征得宁波赛福同意。

# CAN Wiring CAN布线

For the CAN wiring it is recommended to use also a twisted pair with a length l
= 40 - 58 mm per one twist. If there are any problems with the EMC the use of a
twisted wire with an additional shield is recommended. The shield is separately
connected to ground.

对于CAN线建议采用双绞线并且每个绞距长度为40-58mm。如果出现电磁干扰问题，建议使用带屏蔽功能的双绞线，屏蔽线单独接地。

# Warning Lamp报警灯

To fulfill the requirements of ECE R78 in regards to the actuation of the
warning lamp, an active warning lamp is mandatory.

根据ECE R78中关于报警灯运行的要求，主动式报警灯是强制性的。

The mean of the active warming lamp：In case of broken warming lamp wire or loss
of ECU power supply circuit which lead to ABS not work, the warning lamps can be
actuated.

主动式报警灯用意：当报警灯线损坏或者ECU供电线路丢失导致ABS不工作时，报警灯能够激活亮起。

The warning lamps can be hard wired or also actuated via CAN. This depends on
the customer layout of the wiring and actuating of the warning lamps.

报警灯可以是硬件驱动或者通过CAN通讯驱动。这取决于用户的布线和报警灯的驱动方式。

# EMC Recommendations EMC的建议

These are general recommendations depending on the different locations of the
components and wiring in the car.

这些是根据部件安装位置和布线位置不同而定的一般性建议。

—wheel speed sensor wires and power cable routing don’t at the same side of the
car .

轮速传感器线束与电源电缆路线不要在车身同一侧

—do not route the wheel speed sensor wires in parallel to high tension wires
(ignition cables), a minimum distance of more than 10 cm is necessary

不要将轮速传感器的线与高压线（点火线）并行，最小距离必须大于10cm

—the wire from ECU to battery should be as short as possible

从ECU到电池的线要尽可能短。

—ECU ground as short as possible fixed directly to battery ground

ECU的地线要尽可能短地直接接到电池地

—avoid loops in the routing

避免安装线路上存在回环

—avoid wires which are not in use for the system interference for the ABS wiring
harness

避免没有被系统使用到的线对ABS线束产生干扰

—diagnostic wires as short as possible and place the diagnostic connector as
close as possible to the ABS unit

诊断线尽可能短，且诊断连接器尽可能靠近ABS单元放置

—if the wiring harness routing is changed the EMC-tests should be performed
again

如果线束的路线改变了，那么需要重新进行电磁兼容性测试。

— CAN wires with high frequency are important to keep resistance (e.g. 120 Ohm)
in general.

通常，高频CAN线保持120Ohm恒定电阻非常重要。

—if additional support is needed, please contact SFB

如果需要其他帮助，请联系宁波赛福。

# Wiring Layout线束布置

**1)** The ABS wiring harness should be routed away from the engine control
module and other electronic modules. All attempts should be made to maintain as
much distance as possible between the ABS harness and other conductive wiring.
If a common layout with other wiring harness is planned, it is recommended to
contact SFB.

ABS的线束应该远离引擎控制模块和其他电气模块。尽量确保ABS线束与其他导电线保持足够的距离。如果需要和其他线束一起布置，请联系宁波赛福。

**2)** The power leads 9 and 18 must be connected directly to the battery itself
to minimize a voltage drop created by other electric or electronic devices. It
is not allowed to create one common power line and splice this for ABS and other
high current consumers.If a different connection becomes necessary a separate
voltage drop calculation should be made. This can also be done by SFB when all
harness information like cross section and cable length is available.

电源线9和线18必须分别直接连接到电池，以减小由其他电器和电子设备引起的压降。不允许共用一条电源线将ABS和其他大电流设备连接。如果必须采用不同的连接方式，那么必须进行单独压降计算。当线束规格如线径和线长已知时，计算可由宁波赛福完成。

**3)** The connection of wire 10 (ground wire recirculation pump) and wire 1
(ground wire ECU and solenoid valves) must be respectively connected to the
battery terminal or vehicle body directly，and the ends must be connected
together. Similar to the power supply also the ground must have its own ground
stud. It is also not allowed to splice different consumers with one common
ground wire. This could create an additional ground shift for the ABS system.

线10（电机泵地线）和线1（ECU和电磁阀地线）不可共线，线端必须连接到一起，接到车体或者电池负极接线柱。与电源供电线一样，地线必须有独立的接线柱。禁止将不同设备的地线连接在一起。这将对ABS系统产生附加的地移。

**4)** The wheel speed sensor wiring and the brake light switch wire may not be
guided in parallel to high voltage wiring (e.g. ignition cable). In case of
crossing a minimum distance of d \> 10 cm is required. Avoid proximity to fuel
injectors, PWM lines or high power ignition/battery wiring, even for short
distance. In order to make proper detection, even in case of failure, extra
screening measures are necessary. In any case, EMC test is necessary for other
internal devices.

轮速传感器线和刹车灯开关线不能与高压线并行（如点火线）。要求最少有10厘米的距离。避免靠近喷油嘴、PWM线或者大功率点火线/电池线，就算短距离也不可以。为了做出适当的检测，避免故障，需要进行屏蔽测试。无论如何，需要对其他设备进行ECM测试。

**5)** The ABS transmits/receives different CAN messages from other ECU\`s (e.g.
Motronic/engine controller...). To prevent failures due to different voltage
levels and switch ON/OFF behavior it is recommended to use the same power supply
and ground level for the different ECU\`s.

ABS从其他的ECU（如引擎/发动机控制器）发送/接收不同的CAN信号。为了防止由于不同电压等级和开关行为造成的故障，建议对不同的ECU采用同样的电源和接地线。

**6)** No fuse must be installed between terminal 14( ignition ) and ABS warning
lamp, because if the fuse is blown an ABS failure cannot be detected. Deviations
require the approval of SFB, (e.g. other lamps are fused together so that a
blown fuse can be indicated immediately to the driver).

在14针脚（点火）和ABS 报警灯之间不能安装保险丝，因为一旦保险丝熔断，
ABS的故障就不能被检测到。不同的要求需要得到宁波赛福的批准（如所有报警灯的保险丝共用，这样保险丝的熔断可以直接提示驾驶员）。

**7)** SFB recommends fuses for the following wires:

宁波赛福建议为以下线路安装保险丝：

no. 18 (between battery and motor power supply) 15 A (T.B.D)

18号线（在电源与电机供电之间）15A（待定）

no. 9 (between battery and ECU power supply) 10 A (T.B.D)

9号线（在电源与ECU供电之间）10A（待定）

no. 14 (between battery and ignition key) 1A

14号线（在电源与点火钥匙之间）1A

These fuses are necessary to fulfill the requirements of failure mode effect
analyses (FMEA) to avoid overheating of the wiring harness in case of a short
circuit.

这些保险丝必须满足故障失效分析（FMEA）以避免线束过热引起短路。

The value of the fuse in wire 18 depends also on the environmental conditions of
temperature and applied pressure at the master cylinder during an ABS
actuation.This value is a first assumption of SFB and depends on the ABSpump
motor characteristics and can be changed after approved by SFB.

线18保险丝的值也取决于在ABS动作状态下的环境温度和作用于主缸上的压力。这个值是宁波赛福的一种假定，它取决于ABS的泵马达特性。其值经宁波赛福允许后可以更改。

The use of fusible links is not allowed, because the blow characteristic of this
device is very different.

不允许使用熔丝连接，因为它的熔断特性都不相同。

1.  In order to distinguish between front signal and rear signal，brake cable
    must increase diode. These diode are necessary to fulfill the requirements
    of failure mode effect analyses (FMEA) to avoid diode broken down.

    Attention：Brake cable is not required, and Brake cable has been cancelled
    in some vehicle.

    为了区分前后刹车信号，刹车线回路增加二极管，这些二极管需要满足故障失效分析（FMEA），以防止击穿损坏。

    注意：刹车线回路属于可选电路，有些车型已经取消刹车线回路。

    **9)** The voltage level at the terminal power supply (pin 14) for ECU, pump
    motor (pin 18) and solenoid valves (pin 9) must be in all cases \> 10V to
    prevent any undervoltage shut off in any situations.

    在任何情况下，ECU点火（14针脚）、泵马达（18针脚）和电磁阀（9针脚）端子的压必须大于10V，以防止出现欠电压关闭的情况。

# Fixing of the wiring harness线束的固定

Due to the mechanical stress and vibration of the wiring harness and the
modulator the wiring harness must be fixed at least 200mm to 400mm after the
18-pin connector. SFB recommends to fix the wiring harness directly at the
hydraulic control unit in a way that the wiring harness is fixed at the moving
element, e.g. hydraulic control unit. With this solution it is prevented that
the terminals in the 18-pin connectors are not damaged.

由于机械应力、线束震动和调解器等原因，线束必须被固定在离18针连接器至少200mm至400mm的地方。宁波赛福建议把线束直接固定在液压控制单元上，从某种程度上说就是固定在移动单元上。例如：液压控制单元。这种方法可以防止18针连接器上的端子损坏。

# Sealing Requirements密封性要求

It is possible that a lower pressure is created when the hot unit and connector
is cooled down when the ABS unit is splashed by water or immerse into water.
This can cause water to be soaked via the wire ends e.g. ground wires into the
connector. This means that all wires, which end in a wet or splash water area
must be protected that no water can penetrate into the wire and through the wire
into the connector. The sealing of these wire ends is required. The same
requirement is also valid for splices which are installed in wet or splash water
area.If this requirements cannot be fulfilled the system can fail due to
corrosion in the ECU connector.

当ABS组件被溅上水或者浸入水中时，热的元件和连接器会被冷却下来，此时内部气压会降低。这可能会导致水通过线端渗入连接器。所有处在潮湿环境或者有可能溅到水的线束连接端必须被保护起来，以防止水浸入线束或者通过线束渗入连接器。因此，所有线束连接端必须密封。这个要求同样适用于安装在潮湿环境或可能被水溅到区域的接合点。如果不满足这项要求，系统将因ECU连接器的腐蚀而不正常工作。

**Interface validation接口验证：**

The validation of the connector/header interface is the responsibility of the
wiring harness connector supplier.

线束连接器供应商有责任对连接器/插头进行验证。

SFB supports this activities by providing housings for validation.

宁波赛福会提供外壳给供应商进行验证。

**Water tightness for the wiring harness线束的防水性：**

Water tightness is one of important requirementsto be met when designing a
harness.It is also within the wiring harness suppliers responsibility to check
it.

当设计线束时，线束防水性是其中重要的要求之一，线束供应商的有责任验证防水性能。

**The wiring routing recommendations排线建议：**

Due to the effects of gravity passing water through the wires the ECU should be
packaged higher than any wire end or splice in the harness.

由于水会因重力原因沿着线束流下，所以ECU应该布置在线束的端部和连接处上方。

Measures should be taken to prevent water from collecting around the wiring
harness.

应采取有效措施防止在线束周围积水。

Plastic wire covering/protection should allow water to drain from harness.

线的覆盖/保护必须可以让水从线束表面流走。

Wiring should be routed away from water drainage areas.

排线布置须远离排水区域。

Wires that are routed around sharp edges or that can be damaged from impact
should be protected.

处在锋利边缘或可能受到硬物冲击损坏的线束应该被保护起来。

Water in the wiring harness can cause interference on various signal wires, e.g.
PWM-signal interference with wheel speed sensor wires due to poor wiring
insulation. Wires splices and ground eyelets must be located away from direct
contact with high pressure cleaner.

在线束中的水能够对各种信号线产生干扰，例如：由于线束的绝缘不良导致PWM信号干扰轮速传感器线束信号。线束连接点和表面孔眼必须放置在远离直接接触高压冲洗的位置。

Any wire end terminating in a splash water area should be orientated so that the
wire end is pointing down.

任何在溅水区域的线端都应该端部朝下布置。

**Connector Precautions连接器防护措施：**

During the OEM assembly process care must be taken that no water/ fluid /
foreign materials can enter an open connector (male or female).

在OEM装配过程中必须防止水/液体/外部物质进入未封装的连接器（公头或者母头）。

The assembly plant must ensure that connector is fully engaged and slider or
lever is in locked position.

在装配中必须确保连接器安装到位且处于锁定位置。

Terminal wire seals must be of correct size and installed properly.

线束端部密封必须尺寸正确且安装适当。

Seal plugs must be installed in all open cavities

所有空孔必须安装密封塞。

Terminal wire crimps must meet manufactures strength requirements.

线缆压接的末端必须满足强度要求。

# The function diagram of ABS circuit wiring电路接线功能图

The following wiring diagram is SFB’s minimum request of the vehicle wiring
interface. Any deviations from this wiring diagram should be clearly
communicated to SFB.

如下接线图1是宁波赛福对于车身线路接线的最低要求，任何对于接线图的改动都需要向宁波赛福交流明确。

![](media/d9b09b70c0997fca85669a8473351bed.png)

图1 SF10 ABS电路接线功能图


text:
## Requirements

- Node 10
- Yarn 1.x or npm

## Setup

1. Clone the repository
2. Run `yarn` or `npm install` installs all required dependencies.

## npm scripts

> Equivalent `npm run <script>` should also work

- `yarn lint` will lint all of the files with [xo](https://github.com/xojs/xo)
- `yarn format` will run lint with `--fix` option on all the examples files (and tests).

## LICENSE

Code is licensed under the [MIT License](./LICENSE).

repository: HugoDF/jest-handbook-examples

repo_name: HugoDF/jest-handbook-examples


text:
### [CVE-2009-1659](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-1659)
![](https://img.shields.io/static/v1?label=Product&message=n%2Fa&color=blue)
![](https://img.shields.io/static/v1?label=Version&message=n%2Fa&color=blue)
![](https://img.shields.io/static/v1?label=Vulnerability&message=n%2Fa&color=brighgreen)

### Description

Unrestricted file upload vulnerability in admin/uploadimage.php in eLitius 1.0 allows remote attackers to bypass intended access restrictions and upload and execute arbitrary files via an avatar file with an accepted Content-Type such as image/gif, then requesting the file in admin/banners/.

### POC

#### Reference
- https://www.exploit-db.com/exploits/8603

#### Github
No PoCs found on GitHub currently.

repository: trickest/cve

repo_name: trickest/cve


text:
# yannoff/stunning-octo-fiesta

A leaf-weight docker stack for PHP development.

## Prerequisites
- docker
- docker-compose

## Installation
1. Download the `zip` archive from github.

2. Change directory for your web project sources
```bash
$ cd my-web-project
```
3. Unzip from here:
```bash
$ unzip /path/to/downloaded/stunning-octo-fiesta-master.zip
```
4. You're ready to go!

## Usage

```bash
$ bin/server start|stop|log|restart
```

## Running the stack

```bash
$ bin/server start
```
Now your php site is accessible at `http://localhost:8000/`

## Using composer

This project comes in with a wrapper script for `composer`, allowing to run it inside the container.

> This can be very useful if `php` is not installed on the host machine, or if `PHP_VERSION` does not match your `composer.json` requirements.

### Example using composer

```bash
$ bin/composer show
```

## Customizing

You can customize the stack editing the `.env` file.

Available parameters:
- `EXPOSED_PORT` The port to access your website (defaults to `8000`)
- `DOCUMENT_ROOT` Relative path to your document root (defaults to `./`)
- `PHP_VERSION` The version of PHP (defaults to `7.1`)

## Note
The stack uses `PHP`'s built-in development server.

## About the name

Why `stunning-octo-fiesta`?

Well, running out of inspiration for once, I decided to give github's strange naming bot a chance :)

repository: yannoff/stunning-octo-fiesta

repo_name: yannoff/stunning-octo-fiesta


text:
---
layout: default
---

# 1995-10-19 - Oppenheimer Quote Regarding Government Secrecy and Public Policy

## Header Data

From: "Joseph M. Reagle Jr."<EMAIL_ADDRESS>To<EMAIL_ADDRESS>Message Hash: 986ef42a46f3e8fef939835c56a3cce250fc4f91b4145fa2fcf503fb03614935

Message ID<EMAIL_ADDRESS>Reply To: _N/A_

UTC Datetime: 1995-10-19 15:20:39 UTC

Raw Date: Thu, 19 Oct 95 08:20:39 PDT

## Raw message

```
{% raw  %}From: "Joseph M. Reagle Jr."<EMAIL_ADDRESS>Date: Thu, 19 Oct 95 08:20:39 PDT
To<EMAIL_ADDRESS>Subject: Oppenheimer Quote Regarding Government Secrecy and Public Policy
Message-ID<EMAIL_ADDRESS>MIME-Version: 1.0
Content-Type: text/plain

Rather liked this quote regarding the development of the super in the 1950s.

J. Robert Oppenheimer, "Atomic Weapons and American Policy," Foreign
Affairs, Vol. 31, No. 4, July 1953, p. 525.

 [We must have] candor on the part of the officials of the United States
Government to the officials, the representatives, the people of their
country.  We do not operate well when the important facts, the essential
conditions, which limit and determine our choices are unknown.  We do not
operate well when they are known, in secrecy and in fear, only to a few men.
        The political vitality of our country largely derives form two
sources.  One is the interplay, the conflict of opinion and debate, in may
diverse and complex agencies, legislative and executive, which contribute to
the making of policy.  The other is a public opinion which is based on
confidence that it knows the truth.
        Today public opinion cannot exist in this field.  No responsible
person will hazard and opinion in a field where he believes that there is
somebody else who knows the true, and where he believes that he does not
know it.

-------------------------
Regards,                 I hate people when they aren't polite - Talking Heads
Joseph M. Reagle Jr.     http://farnsworth.mit.edu/~reagle/home.html
<EMAIL_ADDRESS>         0C 69 D4 E8 F2 70 24 33  B4 5E 5E EC 35 E6 FB 88

{% endraw %}
```

## Thread

+ Return to [October 1995](/archive/1995/10)

+ Return to "["Joseph M. Reagle Jr." <reagle@rpcp.mit.edu>](/authors/joseph_m_reagle_jr__reagle_at_rpcp_mit_edu_)"

+ 1995-10-19 (Thu, 19 Oct 95 08:20:39 PDT) - Oppenheimer Quote Regarding Government Secrecy and Public Policy - _"Joseph M. Reagle Jr."<EMAIL_ADDRESS>


text:
---
title: About the aws_servicecatalog_portfolio_product_associations Resource
platform: aws
---

# aws\_servicecatalog\_portfolio\_product\_associations

Use the `aws_servicecatalog_portfolio_product_associations` InSpec audit resource to test properties of a single specific AWS Service Catalog portfolio product association.

## Syntax

Ensure that a portfolio exists.

    describe aws_servicecatalog_portfolio_product_associations(product_id: 'PRODUCT_ID') do
      it { should exist }
    end

## Parameters

`product_id` _(required)_

The product identifier.

For additional information, see the [AWS documentation on AWS Service Catalog Portfolio Product Association](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-servicecatalog-portfolioproductassociation.html).

## Properties

| Property | Description|
| --- | --- |
| ids | The portfolio identifier. |
| arns | The ARN assigned to the portfolio. |
| display_names | The name to use for display purposes. |
| descriptions | The description of the portfolio. |
| created_times | The UTC time stamp of the creation time. |
| provider_names | The name of the portfolio provider. |

## Examples

### Ensure a product name is available.

    describe aws_servicecatalog_portfolio_product_association(product_id: 'PRODUCT_ID') do
      its('ids') { should include 'PORTFOLIO_ID' }
    end

### Ensure a status is available.

    describe aws_servicecatalog_portfolio_product_association(product_id: 'PRODUCT_ID') do
        its('provider_names') { should include 'PORTFOLIO_PROVIDER_NAME' }
    end

## Matchers

This InSpec audit resource has the following special matchers. For a full list of available matchers, please visit our [Universal Matchers page](https://www.inspec.io/docs/reference/matchers/).

The controls will pass if the `list` method returns at least one result.

### exist

Use `should` to test that the entity exists.

    describe aws_servicecatalog_portfolio_product_associations(product_id: 'PRODUCT_ID') do
      it { should exist }
    end

Use `should_not` to test the entity does not exist.

    describe aws_servicecatalog_portfolio_product_associations(product_id: 'PRODUCT_ID') do
      it { should_not exist }
    end

## AWS Permissions

Your [Principal](https://docs.aws.amazon.com/IAM/latest/UserGuide/intro-structure.html#intro-structure-principal) will need the `servicecatalog:client:ListPortfoliosForProduct` action with `Effect` set to `Allow`.

repository: anupammajhi/inspec-aws

gha_language: Ruby

repo_name: anupammajhi/inspec-aws


text:
# GUI-Editor
Project for Java Programming Course, officially finished June/2018

Minimal functional requirements
  * Selecting a figure to draw
  * Drawing a figure on the screen
  * Resizing, moving, erasing a figure
  * Saving the current drawing as a file
  * Restoring a saved drawing
  * Changing the color of a line
  * Changing the fill color for a figure
  * Changing the thickness of a line

repository: bullgom/GUI-Editor

repo_name: bullgom/GUI-Editor


text:
+++
title = "Thinking about names, as well as scuba diving"
date = "2018-09-10T00:00:00+00:00"

[extra]
author =<EMAIL_ADDRESS>(boats)"
link = "https://boats.gitlab.io/blog/post/names-and-scuba/"
+++
There are 2 hard problems in computer science: cache invalidation, naming things, and off-by-1 errors.
 Naming a project, tool, or concept that you want other people to use is a very hard problem. The most important thing, of course, is that the name sounds cool. Then, significantly less important, but still quite important, is that the name convey useful information to your users. This is where things get tricky.

repository: constructions-incongrues/hades

repo_name: constructions-incongrues/hades


text:
# Emotional Labels
The labels are in JSON format.
* ```labels_concensus.json``` includes emotion labels(class, three attributes), gender, speaker and split set information.
* ```labels_detailed.json``` includes individual annotations provided by each worker to each sentence

The "**labels_concensus**" file is organized as follows:

```
{
    "MSP-FACE_0253_0006.mp4": [
        {
            "EmoClass_Major": "H", #Consensus categorical class
            "EmoAct": "5.428571428571429", #Activation attribute value
            "EmoDom": "5.0", #Dominance attribute value
            "EmoVal": "4.857142857142857", #Valence attribute value
            "SpkrID": "27",
            "Gender": "Female",
            "Split_Set": "Train"
        }
    ],...
}
```
The "**labels_details**" file provides all the annotations per video. The file is organized as follows:
```
{
    "MSP-FACE_0253_0006.mp4": {
        "Workers": [
            {
                "Name": "WORKER0000013",
                "EmoClass_Major": "Happy", #Categorical class
                "EmoClass_Second": "Happy,Concerned,Excited", #Secondary categorical emotions selected
                "EmoAct": "6", #Activation attribute value
                "EmoDom": "5", #Dominance attribute value
                "EmoVal": "5" #Valence attribute value
            },
            {
                "Name": "WORKER0000001",
                "EmoClass_Major": "Happy",
                "EmoClass_Second": "Happy",
                "EmoAct": "6",
                "EmoDom": "6",
                "EmoVal": "6"
            },...
	]
...
}
```
# Speaker information
We have manually annotated the speaker identity of 27,325 sentences corresponding to 491 speakers. The file **speaker_id_segments.txt** provides the details. The file **speaker_id_gender.txt** provides the gender of the speakers. Both files are in "**Doc**" folder.


text:
#Gibber User Manual

This book is a manual for [Gibber, a creative coding environment for the browser](http://gibber.mat.ucsb.edu). It tries to give insight into the thinking behind Gibber's design and on the practices for using it. I intend for it to be a living document and gradually grow over time... if you have any suggestions for it please get in touch!

The book is written to be displayed on [gitbook.io](https://www.gitbook.io/book/bigbadotis/gibber-user-manual), but you can easily leaf through the various chapters and read them in GitHub if you'd like.

Thanks for reading and trying out Gibber! - Charlie

repository: charlieroberts/Gibber-Manual

repo_name: charlieroberts/Gibber-Manual


text:
# Appium Boilerplate

**NOTE:** This boilerplate is for Webdriver V7 where the tests are written with `async`/`await` and TypeScript. If you need a boilerplate for sync mode then check the following:

- V7 (TypeScript) please click [here](https://github.com/webdriverio/appium-boilerplate/tree/sync-mode)
- V6 (JavaScript) please click [here](https://github.com/webdriverio/appium-boilerplate/tree/v6)
- V5 (JavaScript) please click [here](https://github.com/webdriverio/appium-boilerplate/tree/v5)
- V4 (JavaScript) please click [here](https://github.com/webdriverio/appium-boilerplate/tree/v4)

Boilerplate project to run Appium tests together with WebdriverIO for:

- iOS/Android Native Apps
- iOS/Android Hybrid Apps
- Android Chrome and iOS Safari browser ([check here](./README.md#automating-chrome-or-safari))

> This boilerplate uses the WebdriverIO native demo app which can be found [here](https://github.com/webdriverio/native-demo-app).
> **Note:**
> This boilerplate only handles local execution on 1 em/simulator at a time, not parallel execution. For more info about that Google on setting up a grid with Appium.

## Based on

This boilerplate is currently based on:

- **WebdriverIO:** `7.##.#`
- **Appium:** `1.22.#`

## Installation

1. Running `git clone https://github.com/webdriverio/appium-boilerplate.git`
1. Running `npm install`
1. Installing Appium on a local machine [here](./docs/APPIUM.md)
1. Setting up Android and iOS on a local machine [here](./docs/ANDROID_IOS_SETUP.md)
1. Making demo app available. Create a `./apps` directory. Download the app files (.app / .apk) with version >= `0.4.0` [here](https://github.com/webdriverio/native-demo-app/releases). Move the files into the directory `apps`.
1. Running tests `npm run android.app` or `npm run android.browser`

## How to implement in your project

Choose one of the following options:

1. Clone the git repo — `git clone https://github.com/webdriverio/appium-boilerplate.git`
1. Then copy the files to your project directory (all files in `/tests` and the `wdio.conf`-files in the `config`-folder)
1. Merge project dev dependencies with your projects dev dependencies in your `package.json`
1. Merge the scripts to your `package.json` scripts
1. Run the tests, see [Native App Tests](#native-app-tests) or [Automating Chrome of Safari](#automating-chrome-or-safari).

## Configuration files

This boilerplate uses a specific config for iOS and Android, see [configs](./config). The configs are based on a shared config
[`wdio.shared.conf.ts`](./config/wdio.shared.conf.ts).
This shared config holds **all the defaults** so the iOS and Android configs only need to hold the capabilities and specs that are needed
for running on iOS and or Android (app or browser).

Please check the [`wdio.shared.conf.ts`](./config/wdio.shared.conf.ts)-file for the minimal configuration options. Notes are added for why
a different value has been selected in comparison to the default values WebdriverIO provides.

Since we do not have Appium installed as part of this package we are going to use the globally installed version of Appium. This is
configured in [`wdio.shared.local.appium.conf.ts`](./config/wdio.shared.local.appium.conf.ts).

## Locator strategy for native apps

The locator strategy for this boilerplate is to use `accessibilityID`'s, see also the
[WebdriverIO docs](https://webdriver.io/docs/selectors#accessibility-id) or this newsletter on
[AppiumPro](https://appiumpro.com/editions/20).
`accessibilityID`'s make it easy to script once and run on iOS and Android because most of the apps already have some `accessibilityID`'s.

If `accessibilityID`'s can't be used, and for example only XPATH is available, then the following setup could be used to make cross-platform
selectors

```js
const SELECTORS = {
    WEB_VIEW_SCREEN: browser.isAndroid
        ? '*//android.webkit.WebView'
        : '*//XCUIElementTypeWebView',
};
```

> **NOTE:** If you look into the screen/page-objects you might see that a lot of selectors are made private, meaning you can use the
> elements in the spec-file itself. This has been done on purpose because one of the *best practices* is to remove all interactions from
> your spec files and implement the interactions in the page objects. This will make it easier to maintain for the future and easier to
> refactor if new interaction methods will be added or names will be adjusted.

## Native App Tests

All tests can be executed on te devices as configured in [`wdio.android.app.conf.ts`](./config/wdio.android.app.conf.ts) or
[`wdio.ios.app.conf.ts`](./config/wdio.ios.app.conf.ts). Please check the below tests on what they do or on how to run them separately.

```sh
# For Android local execution
npm run android.app

# For iOS local execution
npm run ios.app
```

### Drag And Drop

Drag and Drop an element can be a complex gesture to automate with Appium. The demo app has a simple puzzle that hopefully makes it easier
and fun to understand how to implement a drag and drop in WebdriverIO. The test can be found [here](./tests/specs/app.drag.and.drop.spec.ts)
and the drag and drop implementation can be found in [this](./tests/screenobjects/DragScreen.ts)-file.
This file will now only hold the [`touchAction`](https://webdriver.io/docs/api/browser/touchAction/) way of using the drag and drop Gesture.
The `touchPerform` is the *old* JSONWP way of implementing a gesture and is not W3C compatible. The `touchAction` is the new official W3C
implementation of a gesture.

You can run the single test with the following commands

```sh
# For Android local execution
npm run android.app -- --spec=tests/specs/app.drag.and.drop.spec.ts

# For iOS local execution
npm run ios.app -- --spec=tests/specs/app.drag.and.drop.spec.ts
```

### Form components

The Forms-tab holds some components that might be a challenge during automation:

- Input fields
- Switches
- Dropdowns / Pickers
- Native alerts

The tests and used page objects hopefully explain what you need to do to make this work and can be found
[here](./tests/specs/app.forms.spec.ts).

You can run the single test with the following commands

```sh
# For Android local execution
npm run android.app -- --spec=tests/specs/app.forms.spec.ts

# For iOS local execution
npm run ios.app -- --spec=tests/specs/app.forms.spec.ts
```

### Login with Biometric support

The Login screen holds a simple implementation of a Login and SignUp form. This boilerplate holds 2 different test-files for the Login
screen.

- [Default Login/Sign Up](./tests/specs/app.login.spec.ts)
- [Login through Touch-/FaceID or FingerPrint (Biometric Support)](./tests/specs/app.biometric.login.spec.ts)

The last one can be very interesting because it will give you an idea what you need to do when you need to log in with Touch-/FaceID or
FingerPrint. The [`app.biometric.login.spec.ts`](./tests/specs/app.biometric.login.spec.ts) will also enable Touch-/FaceID if needed
automatically for you for **Android Emulators** or **iOS Simulators**. It covers almost all platform versions.

> **NOTE:** The methods rely on the fact that the Android Emulator or iOS Simulator have English as the default language. If you have set up
> your test devices with a different language you might need to change certain selectors and or texts for the selectors.

You can run the single test with the following commands

```sh
# For Android local execution
npm run android.app -- --spec=tests/specs/app.login.spec.ts
npm run android.app -- --spec=tests/specs/app.biometric.login.spec.ts

# For iOS local execution
npm run ios.app -- --spec=tests/specs/app.login.spec.ts
npm run ios.app -- --spec=tests/specs/app.biometric.login.spec.ts
```

### Navigation

There are 2 types of navigation tests that explained in this boilerplate.

1. [Tab Bar](./tests/specs/app.tab.bar.navigation.spec.ts)
1. [Deep Links](./tests/specs/app.deep.link.navigation.spec.ts)

The most interesting test here will be the [Deep Links](./tests/specs/app.deep.link.navigation.spec.ts) because this might speed up your own
tests if your app supports Deep Links. Check the code and the `openDeepLinkUrl()` method in the [`Utils.ts`](./tests/helpers/Utils.ts)-file
to see how this works.

> **PRO TIP:** If you are automating iOS apps and you can use Deep Links, then you might want to try adding the capability
> `autoAcceptAlerts:true` when you start the iOS device. This capability will automatically accept all alerts, also the alert that will
> appear when you want to open your deep link in Safari.
>
> If you ware going to use this capability, then don't forget to remove the last few lines in the
> [`openDeepLinkUrl()`](./tests/helpers/Utils.ts)-method, see the comments in the method

You can run the single test with the following commands

```sh
# For Android local execution
npm run android.app -- --spec=tests/specs/app.tab.bar.navigation.spec.ts
npm run android.app -- --spec=tests/specs/app.deep.link.navigation.spec.ts

# For iOS local execution
npm run ios.app -- --spec=tests/specs/app.tab.bar.navigation.spec.ts
npm run ios.app -- --spec=tests/specs/app.deep.link.navigation.spec.ts
```

### Swiping

Swiping is basically a movement with your finger on the screen that has a starting position on the screen, an x-, and y-coordinate and an
end position, also an x-, and y-coordinate. The starting position can be seen as the first time you touch the screen, the initial *press*.
The end position can be seen as the time you release the screen. If you translate this to steps you will get:

1. Press your finger on the screen on starting position
1. Move your finger to the end position
1. Release your finger when you are on the end position

The [Swipe](./tests/specs/app.swipe.spec.ts)-test will be an example on how to do that. It uses a
[Gesture](./tests/helpers/Gestures.ts)-helper that might be useful for you in the future.

If you want to know more about Gestures and how to automate them, then we would advise you to watch
[this presentation "Swiping your way through Appium by Wim Selles"](https://youtu.be/oAJ7jwMNFVU).

You can run the single test with the following commands

```sh
# For Android local execution
npm run android.app -- --spec=tests/specs/app.swipe.spec.ts

# For iOS local execution
npm run ios.app -- --spec=tests/specs/app.swipe.spec.ts
```

### WebViews

The app has a WebView that will automatically load the WebdriverIO documentation page. This boilerplate holds 2 test files:

1. [Interact within a WebView with CSS Selectors](./tests/specs/app.webview.spec.ts).
   *You will also find a test that interacts between a WebView and the Native part of the app.*
1. [Automate a WebView based on Native Selectors](./tests/specs/app.webview.xpath.spec.ts). This test will compare the execution time of:

    - automating the WebView by **NOT** switching to the WebView (by using native selectors).
    - automating the WebView by **SWITCHING** to the WebView.

    Check the console for load time differences. An example time could look like this

    ```log
    // Android
    [0-0] RUNNING in Android - /tests/specs/app.webview.xpath.spec.ts
    [0-0] Test time for using XPATH It took 0.799 seconds.
    [0-0] Test time for switching to the WebView It took 0.238 seconds.
    [0-0] PASSED in Android - /tests/specs/app.webview.xpath.spec.ts

    // iOS
    [0-0] RUNNING in iOS - /tests/specs/app.webview.xpath.spec.ts
    [0-0] Test time for using XPATH It took 3.125 seconds.
    [0-0] Test time for switching to the WebView It took 1.443 seconds.
    [0-0] PASSED in iOS - /tests/specs/app.webview.xpath.spec.ts
    ```

You will also find a [WebView](./tests/helpers/WebView.ts)-helper with hopefully useful methods that can help you automate a Hybrid App.
Keep in the back of your mind that for *simplicity* of the Demo app only one WebView is used. This is also used in the WebView-helper.

More information about **Automating Hybrid Applications with Appium** and more complex WebViews can be found in
[this webinar](https://youtu.be/_mPCRxplBfo) recording.

You can run the single test with the following commands

```sh
# For Android local execution
npm run android.app -- --spec=tests/specs/app.webview.spec.ts
npm run android.app -- --spec=tests/specs/app.webview.xpath.spec.ts

# For iOS local execution
npm run ios.app -- --spec=tests/specs/app.webview.spec.ts
npm run ios.app -- --spec=tests/specs/app.webview.xpath.spec.ts
```

## Automating Chrome or Safari

Mobile web automation is almost the same as writing tests for desktop browsers. The only difference can be found in the configuration that
needs to be used. Click [here](config/wdio.ios.browser.conf.ts) to find the config for iOS Safari and
[here](config/wdio.android.browser.conf.ts) for Android Chrome.
For Android be sure that the latest version of Chrome is installed, see also
[here](./docs/FAQ.md#i-get-the-error-no-chromedriver-found-that-can-automate-chrome-). Our
[`wdio.shared.local.appium.conf.ts`](./config/wdio.shared.local.appium.conf.ts) uses the `relaxedSecurity: true` argument from Appium which
will allow Appium to automatically download the latest ChromeDriver.

For this boilerplate the testcases from the [jasmine-boilerplate](https://github.com/webdriverio/jasmine-boilerplate), created by
[Christian Bromann](https://github.com/christian-bromann), are used.

## Cloud vendors

### Sauce Labs

If you want to run the Native App tests on Sauce Labs you need to do 2 things:

- Add the [Sauce Service](#add-sauce-service) to your project
- Upload the apps to the [Sauce Labs Storage](#upload-apps-to-sauce-storage)

When the above has been executed you can follow the steps in:

- [Run app tests on the Sauce Labs Real Device Cloud](#run-app-tests-on-the-sauce-labs-real-device-cloud)
- [Run app tests on the Sauce Labs Emulators and Simulators](#run-app-tests-on-the-sauce-labs-emulators-and-simulators)

#### Add Sauce Service

Make sure you install the latest version of the `@wdio/sauce-service` with

```shell
npm install --save-dev @wdio/sauce-service
```

and add `services: ['sauce'],` to the config. If no `region` is provided it will automatically default to the US-Virtual/RDC cloud.
If you provide `region: 'us'` or `region: 'eu'` it will connect to the US or the EU Virtual/RDC cloud.

#### Upload apps to Sauce Storage

If you want to use Android emulators, iOS simulators or Android real devices in the Sauce Labs UI you need to upload the apps to the Sauce
Storage. You can find a script to upload them to, and the US, and EU DC in [this](./scripts)-folder. You can push the files to the storage
by executing the following steps in a terminal from the root of this project:

```sh
cd scripts
./push_apps_to_sauce_storage.sh
```

When you've done that you will see a lot of successful logs in your terminal.

#### Run app tests on the Sauce Labs Real Device Cloud

> **NOTE:** Due to signing iOS Real Devices are not supported. Only Android Real Devices are supported.

Please check the [Android Real Devices](./config/wdio.android.app.conf.ts)-config to see the setup for Android real devices.

You can use the following scripts, see the [`package.json`](./package.json), to execute the tests in the cloud:

```sh
# For Android Real Devices
# On EU DC
npm run android.sauce.rdc.app.eu
# On US DC
npm run android.sauce.rdc.app.us
```

#### Run app tests on the Sauce Labs Emulators and Simulators

Please check the following configs to verify the configurations:

- [Android Emulators](./config/saucelabs/wdio.android.emulators.app.conf.ts)
- [iOS Simulators](./config/saucelabs/wdio.ios.simulators.app.conf.ts)

The following scripts that can be used, see the [`package.json`](./package.json), to execute the tests in the cloud:

```sh
# For Android Emulators
# On EU DC
npm run android.sauce.emulators.app.eu
# On US DC
npm run android.sauce.emulators.app.us
# For Android Real Devices
# On EU DC
npm run android.sauce.rdc.app.eu
# On US DC
npm run android.sauce.rdc.app.us

# For iOS
# On EU DC
npm run ios.sauce.simulator.app.eu
# On US DC
npm run ios.sauce.simulator.app.us
```

### BrowserStack

This boilerplate provides a setup for testing with BrowserStack. Please check the [BrowserStack](./config/browserstack)-folder to see the
setup for iOS and Android.

Make sure you install the latest version of the `@wdio/browserstack-service` with

```shell
npm install --save-dev @wdio/browserstack-service
```

There are 2 scripts that can be used, see the [`package.json`](./package.json), to execute the tests in the cloud:

```sh
# For iOS
$ npm run ios.browserstack.app

# For Android
$ npm run android.browserstack.app
```

## FAQ

See [FAQ](./docs/FAQ.md)

## Tips and Tricks

See [Tips and Tricks](./docs/TIPS_TRICKS.md)

repository: webdriverio/appium-boilerplate

gha_language: TypeScript

repo_name: webdriverio/appium-boilerplate


text:
---
layout: default
---

# 1995-02-12 - the problem that destroyed PGP

## Header Data

From<EMAIL_ADDRESS>To<EMAIL_ADDRESS>Message Hash: 2437ea5a38162e116cbbc8cefa69ce550d0589e1b832c6c6eb1a06886d59392b

Message ID<EMAIL_ADDRESS>Reply To: _N/A_

UTC Datetime: 1995-02-12 10:50:41 UTC

Raw Date: Sun, 12 Feb 95 02:50:41 PST

## Raw message

```
{% raw  %}From<EMAIL_ADDRESS>Date: Sun, 12 Feb 95 02:50:41 PST
To<EMAIL_ADDRESS>Subject: the problem that destroyed PGP
Message-ID<EMAIL_ADDRESS>MIME-Version: 1.0
Content-Type: text/plain

Return-path<EMAIL_ADDRESS>Received: by bix.com (CoSy<IP_ADDRESS>) id<EMAIL_ADDRESS> Sat, 11 Feb 1995 21:32:20 -0500 (EST)
From<EMAIL_ADDRESS>Date: Sat, 11 Feb 95 21:32:20 EST
To<EMAIL_ADDRESS>Message-ID<EMAIL_ADDRESS>Subject: the problem that destroyed PGP

So finding a KeyID is the problem that destroys PGP eh?

Well I would just take that as the problem to solve, not a
reason to throw the baby out with the bath water.

All we need to do is design a distributed, hashed database.
Should be a piece 'o cake, right?

Let's see, first of all the problem is the receiver of a message
who gets just the KeyID.  First of all, the trusted keys should
be expected to be local (in some webby sense).  But lets assume
that the key is new, not in our local cache.  Now my scheme would put
a net of keyservers that ALL know each other.  The local environment
puts in a request to its usual keyserver.  That is the keyserver
that typically has the keys that the receiver is likely to trust.
Now it is certainly possible to imagine a case where a key is not
in the receiver's expected server, so what's next.  Well the
keyserver knows ALL the other servers, right, so just copy the
original receiver's request to all the other keyservers.  If that
gets to be too big, just build a real net where every keyserver is
at most two hops away from any other one, then the intermediate
servers that could not honor the request would forward it to all
the servers it knew.  I purposely propose that only two steps would
ever be necessary to limit the explosion, but I see that as no
real limitation, the rule could even be modified if there was
really any need.

Hey look, the net supports archie and a host of other non-structured
search mechanisms.  Why create a search hierarchy where such things
are not natural.  Why create a naming hierarchy where such things are
not natural.

By the way, the dockmaster.ncsc.mil note is a good example of a naming
hierarchy that has nothing to do with the employment of the person.
Anyone working in the security field can get an address there.  And
any member can get acm.org or ieee.org. But I can post from any of
there different net addresses which do not even agree at the very
most basic level.  So why would my KeyID be naturally associated with
any one of .net, .org or .com?

Peace ..Tom

{% endraw %}
```

## Thread

+ Return to [February 1995](/archive/1995/02)

+ Return to "[Hal <hfinney@shell.portal.com>](/authors/hal_hfinney_at_shell_portal_com_)"
+ Return to "[Matt Blaze <mab@crypto.com>](/authors/matt_blaze_mab_at_crypto_com_)"
+ Return to "[peace@BIX.com](/authors/peace_at_bix_com)"
+ Return to "["Perry E. Metzger" <perry@imsi.com>](/authors/perry_e_metzger_perry_at_imsi_com_)"
+ Return to "["W. Kinney" <kinney@bogart.Colorado.EDU>](/authors/w_kinney_kinney_at_bogart_colorado_edu_)"

+ 1995-02-12 (Sun, 12 Feb 95 02:50:41 PST) - the problem that destroyed PGP -<EMAIL_ADDRESS>  + 1995-02-12 (Sun, 12 Feb 95 06:50:56 PST) - [Re: the problem that destroyed PGP](/archive/1995/02/798eeaa306ebabd1f99dc1cb6bcd26aeb0062f1e426c2c309d124e92dc71e5a1) - _"Perry E. Metzger"<EMAIL_ADDRESS>  + 1995-02-12 (Sun, 12 Feb 95 09:25:57 PST) - [Re: the problem that destroyed PGP](/archive/1995/02/4d0de8c1903adf880a3ca8bfc8dd6dd4c0a1c2a22ad331d44a67107e45b72e7d) - _Matt Blaze<EMAIL_ADDRESS>    + 1995-02-12 (Sun, 12 Feb 95 09:57:47 PST) - [Re: the problem that destroyed PGP](/archive/1995/02/0d24d53ff96c1d06e3e95f44765a481dd7f1a4430532e8bf2f2b6a045aa05719) - _"W. Kinney"<EMAIL_ADDRESS>      + 1995-02-12 (Sun, 12 Feb 95 10:03:08 PST) - [Re: the problem that destroyed PGP](/archive/1995/02/048ea09029e45cd450dab67e95ffa61930af959df380e903a738c56248d77965) - _"Perry E. Metzger"<EMAIL_ADDRESS>        + 1995-02-12 (Sun, 12 Feb 95 10:10:30 PST) - [Re: the problem that destroyed PGP](/archive/1995/02/3ee6ecf64803f32d6757473220e74669044bedc0c08ebf26e8dae7b9c1c93243) - _"W. Kinney"<EMAIL_ADDRESS>      + 1995-02-12 (Sun, 12 Feb 95 10:20:57 PST) - [Re: the problem that destroyed PGP](/archive/1995/02/1cbda048f07e28f090dc1dbfd7c28d6c7a72b791cdf618dcf15c7042c4f0d768) - _Hal<EMAIL_ADDRESS>        + 1995-02-12 (Sun, 12 Feb 95 11:33:39 PST) - [Re: the problem that destroyed PGP](/archive/1995/02/b0176c0d89443a1806ead7f32487a27dc71325066eceb46e8f8f324503df4ef1) - _"W. Kinney"<EMAIL_ADDRESS>


text:
# Clipboard
## Notes
The Clipboard variable is a global variable and can be used anywhere.
## Syntax
```
Clipboard
```
## Example
```
text(text: "Hello +{Clipboard} how was your day?")
or
print(Clipboard)
```

license: Unlicense

repository: extratone/jellycuts

repo_name: extratone/jellycuts


text:
# Vulcan S3

## Upload files to S3 from VulcanJS

This package helps to upload files with [Vulcan.js](http://vulcanjs.org/) applications. Including a dropzone.

Note that the server-side policy is currently permissive and any file-type is allowed for the duration of the expiration time.

**/!\ This is an experimental package**.

## Example
Add the following to your `settings.json`:
```js
"aws": {
  "awsAccessKey": "<key>",
  "awsSecretKey": "<key>",
  "awsS3BucketName": "<bucket-name>"
  "expirationInMinutes": 15
},
```
Inside your public section in `settings.json` add the following:
```js
"aws": {
  "awsS3BucketUrl": "<bucket-url>",
  "maxFiles": 10,
  "maxSizeBytes":<PHONE_NUMBER>,
  "allowedType": "video"
}
```
## Contributing

Best way to contribute is to use it in your own app, and propose ideas, suggestions and PR based on your experience.

We seek for maximum reusability, so each method should be as configurable as possible, and split into independent functions whenever possible.

*[Contributed by Arctop](https://arctop.com)*


text:
# Storage Transfer Service(STS) Metrics
[Google Cloud STS](https://cloud.google.com/storage-transfer/docs/overview) provides options to move data between buckets or from other cloud providers. Users can schedule recurring or one-time STS  jobs to move data for data backup, synchronization, and replication. As a managed service, STS provides some [metrics](https://cloud.google.com/monitoring/api/metrics_gcp#gcp-storagetransfer) out of box in [Cloud Monitoring](https://cloud.google.com/monitoring). However, there are many use cases for which users need to create their own metrics as provided could metrics are not adequate, and the metrics often need to be ingested into monitoring systems other than Cloud Monitoring.  The example demonstrates how STS metrics can be instrumented using [STS notification](https://cloud.google.com/storage-transfer/docs/pub-sub-transfer) and exported to [Prometheus](https://prometheus.io/docs/concepts/data_model/) format for ingestion to monitoring systems that support the format.

## How it works
The example is a Java application and you can run it locally. The app uses [OpenCensus](https://opencensus.io/) metrics framework and its Prometheus [exporter](https://opencensus.io/exporters/supported-exporters/java/prometheus/).  There are two main threads when the app runs:

- JobGeneration -- Generate X number of immediately run STS jobs every Y seconds.
- NotificationHandler -- Subscribe to STS notification pubsub topic. Process notifications and record the time series data point. There are no objects in the source bucket, hence the operation completes in sub second with 0 objects and 0 bytes. For demo purpose,  to show more meaningful metrics,  values objects number, bytes, and latency obtained from the notification are over written with randomization.

The app exposes Prometheus formatted metrics via /metrics endpoint.

The app collects the following metrics for demonstration purpose:

- Operation Number -- The number of operations. When a STS job runs, it's known as an operation.
- Operation Latency -- The time it takes to complete an operation.
- Object Number - The number of objects copied from source to destination per operation.
- Bytes -- The number of bytes copied from source to destination per operation.

All the metrics have the following tags(labels):

- Project ID -- GCP project in which STS jobs are configured and run.
- Source Bucket -- Where source data reside.
- Destination Bucket -- Where data are copied to.
- Status -- The status of the operation.

## GCP Resources
The example requires the following GCP resources in a single project:

- Source Bucket -- A GCS bucket as source
- Destination Bucket -- A GCS bucket as destination
- Pubsub Topic -- A topic for STS notifications
- Service Account
    - STS Account -- The service account is created by Google when STS jobs are configured. The account should have the read permission on the source bucket and write on the destination bucket.
    - App Account -- The service account that the example run as. The service account is given the permission to manage STS jobs and receive messages from the STS notification topic.

## How to run
Once you have all the GCP resources created and properly configured, you can run the example as below:

1. Get the repo
   `git clone git@github.com:GoogleCloudPlatform/professional-services.git`
2. Go to the root of the example
   `cd professional-services/examples/sts-metrics`
3. Update `./src/main/resources/config.properties` with your GCP resource values.
4. Build the jar
   `mvn clean install package`
5. Start the app
   `java -jar target/sts-metrics-jar-with-dependencies.jar`

You can check the metric by accessing localhost:8888/metrics in your browser. You could also use the watch.sh script to poll the url periodically.

## Logs
**Java App Log**
You will see the log like the following:

> [INFO ] 2022-12-18 11:33:06.250 [pool-7-thread-1] StsJobHelper - Creating one time transfer job in STS: {description=eshen-test, name=transferJobs/a-eshen-1671391986249, notificationConfig={payloadFormat=JSON, pubsubTopic=projects/eshen-test-3/topics/eshen-sts-metrics-topic}, projectId=eshen-test-3, schedule={scheduleEndDate={day=16, month=12, year=2022}, scheduleStartDate={day=16, month=12, year=2022}}, status=ENABLED, transferSpec={gcsDataSink={bucketName=eshen-sts-metrics-dest}, gcsDataSource={bucketName=eshen-sts-metrics-src}, objectConditions={includePrefixes=[dummy-prefix]}, transferOptions={deleteObjectsFromSourceAfterTransfer=true, overwriteObjectsAlreadyExistingInSink=true}}}
> ...............
> [INFO ] 2022-12-18 11:33:08.111 [Gax-7] StsJobNotificationHandler - <MessageId=6458694416888096>: {"name":"transferOperations/transferJobs-a-eshen-1671344241375-12338117834211986926","projectId":"eshen-test-3","transferSpec":{"gcsDataSource":{"bucketName":"eshen-sts-metrics-src"},"gcsDataSink":{"bucketName":"eshen-sts-metrics-dest"},"objectConditions":{"includePrefixes":["dummy-prefix"]},"transferOptions":{"overwriteObjectsAlreadyExistingInSink":true,"deleteObjectsFromSourceAfterTransfer":true}},"startTime":"2022-12-18T06:17:22.225396152Z","endTime":"2022-12-18T06:17:32.653094766Z","status":"SUCCESS","counters":{},"transferJobName":"transferJobs/a-eshen-1671344241375","notificationConfig":{"pubsubTopic":"projects/eshen-test-3/topics/eshen-sts-metrics-topic","payloadFormat":"JSON"},"reportedCounters":[{"name":"walltime_microseconds","value":"36092"}]}
[INFO ] 2022-12-18 11:33:08.358 [Gax-7] StsJobNotificationHandler - <MessageId=6458694416888096>: operation=transferOperations/transferJobs-a-eshen-1671344241375-12338117834211986926 sourceBucket=eshen-sts-metrics-src destBucket=eshen-sts-metrics-dest, status=SUCCESS latency=88,755.54 objectsCopied=742 bytesCopied=137974222

**Watch Script Log**

> \# HELP object_deleted_num The number of deleted objects
\# TYPE object_deleted_num counter
object_deleted_num{destBucketId="eshen-sts-metrics-dest",projectId="esher-test-3",srcBucketId="eshen-sts-metrics-src",status="SUCCESS",} 2768.0
\# HELP object_deleted_bytes The number of bytes deleted
\# TYPE object_deleted_bytes counter
object_deleted_bytes{destBucketId="eshen-sts-metrics-dest",projectId="ashen-test-3",srcBucketId="eshen-sts-metrics-src",status="SUCCESS",} 1.295246533E9
\# HELP sts_operation_num The number of STS operations
\# TYPE sts_operation_num counter
sts_operation_num{destBucketId="eshen-sts-metrics-dest",projectId="eshen-test-3",srcBucketId="eshen-sts-metrics-src",status="SUCCESS",} 7.0
\# HELP sts_operation_latency The latency of STS operations
\# TYPE sts_operation_latency histogram
sts_operation_latency_bucket{destBucketId="eshen-sts-metrics-dest",projectId="eshen-test-3",srcBucketId="eshen-sts-metrics-src",status="SUCCESS",le="60000.0",} 2.0
sts_operation_latency_bucket{destBucketId="eshen-sts-metrics-dest",projectId="eshen-test-3",srcBucketId="eshen-sts-metrics-src",status="SUCCESS",le="300000.0",} 7.0
sts_operation_latency_bucket{destBucketId="eshen-sts-metrics-dest",projectId="eshen-test-3",srcBucketId="eshen-sts-metrics-src",status="SUCCESS",le="600000.0",} 7.0
sts_operation_latency_bucket{destBucketId="eshen-sts-metrics-dest",projectId="eshen-test-3",srcBucketId="eshen-sts-metrics-src",status="SUCCESS",le="1800000.0",} 7.0


text:
# SoundRecorderAndroid - Android App

# Features:
It is a sound recording app (pretty hard to guess).
SoundRecorderAndroid allows you to record sound.
Save it on your device.
Share it with your friends via whatsapp, or other devices installed on your moblie
You can rename the stored audio.
Delete the recorded files.

SoundRecorderAndroid is currently not available on the Google Play Store.
(I will publish it after some more improvements, hopefully! ;p).

# Screenshots:

## Contributing
Looking to contribute something to Minimal? make a pull request, let's collabrate:)

# License:
The MIT License (MIT)

Copyright (c) 2019 Gurpreet

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

 IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


text:
# android setup
1. run `ionic platform add android`. (RUN ONCE)
2. androind-key-gen.bat (ONLY RUN ONCE)
3. Make sure you have the latest JDK
4. set system environment variable `JAVA_HOME` to point to the latest JDK
5. set system environment variable `ANDROID_HOME` to point to the Android SDK path like `C:\Program Files (x86)\Android\android-sdk`

# android debug
1. run visual studio emulator for android
2. click on `debug` in `VS Code` and select `Run Android on device`. requires (Cordova tools to be installed in VS Code.)

# android release
1. ionic build android --release
3. androind-apk-sign.bat
4. androind-apk-zipalign.bat
5. login to https://play.google.com/apps
6. upload platforms\android\build\outputs\apk\android-release-signed.apk

repository: BuildInTheCloud/IRL

repo_name: BuildInTheCloud/IRL


text:
[![Build Status](https://travis-ci.org/xiondlph/express-promise-render-ts.svg?branch=master)](https://travis-ci.org/xiondlph/express-promise-render-ts)
[![Coverage Status](https://coveralls.io/repos/github/xiondlph/express-promise-render-ts/badge.svg?branch=master)](https://coveralls.io/github/xiondlph/express-promise-render-ts?branch=master)
# express-promise-render-ts
>A simple wrapper for express render method which allows you to receive the rendering result through promise.

This is a typescript support express middleware that attach to a response object a method, that wraps the result of calling a standard `render` method and returns it through promises, without sending it to the client.

## Install

```bash
# With npm
npm install --save express-promise-render-ts

# With yarn
yarn add express-promise-render-ts
```

## Usage
First you need to declare and mount this middleware the express `app` object.
```ts
import promiseRender from "express-promise-render-ts";

//...

app.use(promiseRender);
```

Then in your route handler you may call a `promiseRender` wrapper method like this
``` ts
app.get('/', (req: Request, res: Response) => {
  res.promiseRender("path/to/view")
    .then((html) => {
        console.info(html) // --> rendered HTML string
    })
    .catch((err) => { // rejected promise if something went wrong
        console.error(err) // --> catched error
    });
})
```

This solution will be useful if you don't want to immediately send the rendered HTML string to client, but just get it for later use. For example, as a template for sending an email.

repository: xiondlph/express-promise-render-ts

repo_name: xiondlph/express-promise-render-ts


text:
---
title: Line
product: Line
tags: ['shape', '1d']
Summary: Straight objects (i.e., having no curvature) with negligible width and depth.
---

* In geometry, the notion of line or straight line was introduced by ancient mathematicians to represent straight objects (i.e., having no curvature) with negligible width and depth.
* Lines are an idealization of such objects, which are often described in terms of two points or referred to using a single letter.
* Until the 17th century, lines were defined as the first species of quantity, which has only one dimension, namely length, without any width nor depth, and is nothing else than the flow or run of the point which will leave from its imaginary moving some vestige in length, exempt of any width.
* The straight line is that which is equally extended between its points.

Facts
----

Equation: {{<latex>}}\displaystyle y=mx+b{{</latex>}}

repository: hugoinaction/hugoinaction

gha_language: Smarty

repo_name: hugoinaction/hugoinaction