text:
# How to update sources and issue a new release

## TL;DR

Following is the overall scheme for doing a taxonomy update.  This
example updates NCBI Taxonomy and the Open Tree curator tool taxon
additions, and gets any new directives added to
curation/adjustments.py and curation/amendments.py.

    # For builds POST-3.1 only!  See below for 3.1
    bin/configure ott3.8 ott3.7   #fill in the correct version numbers
    bin/unpack-archive ott-HEAD   #get previous OTT
    make refresh/idlist    #make 3.7 idlist from idlist-3.6 and ott3.7
    make refresh/ncbi
    make refresh/amendments
    make ott
    #**** Check for errors at this point, redo 'make ott' as needed ****
    make refresh/ott
    make store-all

You may get errors like `mv: r/ott3.0/properties.json: set owner/group (was: 501/0): Operation not permitted`.  I think these are innocuous.

## Special considerations for the OTT 3.1 build

Sometimes you want to use a saved version of a source instead of
either making a new one or using the one used in the previous OTT
build.  For OTT 3.1 there are a few of these: for genbank, irmng, and
worms.  Once these settings are used for the 3.1 build, they will be
retained for future builds.

A second 'wart' for building 3.1 is use of a newer OTT 2.10
all-identifiers list (idlist) rather than the old OTT 2.10 identifier list
that was using in building OTT 3.0.

The 3.1 build should therefore look like the following:

    bin/configure ott3.1 ott3.0
    bin/unpack-archive ott-HEAD   #get previous OTT
    bin/set-previous idlist idlist-2.10
    make refresh/idlist    #make 3.0 idlist from idlist-2.10 and ott3.0
    bin/use-version genbank-20161216
    bin/use-version irmng-20140131
    bin/use-version worms-20170604

At this point I would make sure that it is possible to build using the
same sources as ott3.0, and that the results are sensible.  If you
skip this step, then you won't be able to distinguish errors resulting
from source refreshes, vs. those resulting from problems with your
configuration or inherited from ott3.0.  There will be some
differences (you might compare the transcript.out file between
r/ott3.0 and r/ott-HEAD) due to changes in smasher since ott3.0 was
built, so don't expect byte-for-byte identity.

    bin/fetch-archive amendments bcafdea7f2e9231274cae2df2beed7d732ca46c5
    bin/use-version amendments-bcafdea7f2e9231274cae2df2beed7d732ca46c5
    make r/amendments-HEAD/resource/.made
    make ott

Having done this, it is now possible to refresh whatever sources you
like.  In the following, we update NCBI and the amendments, but it
should also be possible to update GBIF and WoRMS, and, with some work,
also SILVA.

    make refresh/amendments
    make refresh/ncbi
    make ott
    #**** Do QC at this point, redo 'make ott' as needed ****
    make refresh/ott
    make store-all

## Prerequisites

I've been doing OTT builds on a 2014 MacBook with 16G of RAM, and on a
2010 server with 40G of RAM.  With less RAM than this I think it will
be painfully slow.  It already takes over 15 minutes even with plenty
of RAM.

Software requirements:
* GNU `make`.  I've been using 3.81 and 4.0 but I don't think any
  particular version is required.
* `bash`.
* GNU `tar`.
* GNU `date`, available as `gdate`.
* `wget`.  I've been using GNU `wget` 1.18 and 1.16.
* python 2.7; I've been using 2.7.10 and 2.7.9.
* JVM/JRE/javac.  I've been using JRE build 1.8.0_05-b13 on Mac,
  openjdk 1.8.0_111 on server.  Java 1.7 ought to work but I haven't
  tried it.

Miscellaneous java libraries are retrieved from Maven Central during
the build process, so as long as you have an Internet connection, you
shouldn't have to worry about those.

## Smoke test

You can do

    make test

for a basic test.  This does not test everything needed for an OTT
build; e.g. it doesn't exercise the archiving scripts.  But it does
invoke many important parts of the infrastructure.

The outcome should be a taxonomy in the `t/tax/aster` directory.

The test taxonomy is rooted at Asterales.  It may be possible to use a
different taxon as root, e.g. Mammalia, but this hasn't been tested:

    export SELECTION=Mammalia
    export SELECTION_TAG=mml
    make test

(If you just want a subset of OTT, you can use the `Smasher` class at
the command line, or a simple python script, to select it from a
pre-built OTT.)

## Finding and fixing errors

Each invocation of `make refresh/ott` has the potential of detecting
errors, and of introducing mistakes that are not caught.

See the section [finding and fixing errors](errors.md) for more on finding
and fixing errors.

## Configuring the assembly process

Shell variables

* `FILES_URL_PREFIX`, defaults to `http://files.opentreeoflife.org` -
  this is the URL prefix used by `wget` for fetching tarballs of previous
  OTT and source versions.  If you have a local mirror (or subset) or the
  files site, you might be able to set this to a `file:` URL, but
  I suspect that wget doesn't understand `file:`.  I accessed by local
  files mirror using the local Apache
  server set up with a symbolic link from the webroot to the mirror.
* `SSH_PATH_PREFIX`, defaults to
  `files.opentreeoflife.org:files.opentreeoflife.org` - this will be
  the destination used by `scp` for storing new tarballs.
  If the value of `SSH_PATH_PREFIX` does not include a colon `:`, the files
  will copied to a local directory using `cp -p`.

`make` variables in Makefile

* `NCBI_ORIGIN_URL` - where to get `taxdump.tar.gz` in order to refresh NCBI
  Taxonomy.
* Several other similar variables for other sources.  These may need
  to be updated, as the source web sites (e.g. gbif.org) can be
  fickle.

## Getting started

The Makefile needs to know which version to build, and where to get
archived versions of any sources that are not being refreshed.  The
following command tells it the version numbers of the previous and new
versions of OTT:

    bin/configure ott3.1 ott3.0

This has the effect of reading the file `ott3.0/properties.json`,
obtaining it from the files server if it's not already present
locally, then writing `config.mk`, which is included by the main
`Makefile`.  `config.mk` encodes the knowledge of which versions of
the sources were used in building the old OTT (`ott3.0` in this case).
In addition `bin/configure` sets up a few files, directories, and
links in preparation for the upcoming build.

## Updating sources

Each source has a 'refresh' target that updates the source from the
source's origin on the web.  Each of these refresh rules is a little
different from the others, and you need to think before deciding to do
each one.

1. `make refresh/idlist` - When building version 3.1 of OTT (say), a
   version 3.0 identifier list is needed (that is, a list of all OTT
   identifiers through OTT 3.0).  This list is built by extending the
   OTT 2.10 identifier list with the new identifiers that were added
   in OTT 3.0.  So this command has to be part of every release
   sequence.

1. `make refresh/amendments` - you'll want to do this for every
   release.  This obtains the latest versions of the taxon additions
   from the `amendments` repo on github.

1. `make refresh/ncbi` - so far this has worked pretty smoothly, so it
   should be done on every release.

1. `make refresh/worms` - this is a new script to access WoRMS via
   their API.  When I ran it it took about 15 hours.  I don't
   recommend running it casually or frequently, since even though the
   script throttles its requests, the load on the WoRMS API server may
   be noticeable.

1. `make refresh/fung` - this should not be used.  Properly done, it
   would depend on new information from Paul Kirk (or some other
   authorized person associated with Index Fungorum), which we don't
   have yet, and each dump will need its own script.

1. `make refresh/gbif` - The GBIF backbone taxonomy dump changed
   format between 2013 and 2016.  This required a new preprocessing
   script to select the particular columns that are used, and to split
   off authority information.  It is quite possible that a new script
   will be needed in order to import a 2017 or later GBIF backbone.  A
   DwCA importer would certainly help here by making the import robust
   to addition or rearrangement of columns in the GBIF flat file.  But
   I don't think it will always be sufficient - e.g. it would not have
   helped with the switch from canonicalName to scientificName between
   2013 and 2016.

1. `make refresh/irmng` - This is of no use, without further work,
   since it will just get the 2014-01-31 version again from the web,
   which we already have.  The time to look at this again is when VLIZ
   decides to issue an IRMNG dump with post-2014 content.  (I believe
   they are providing partial dumps now, but I don't recommend trying
   to work with partial dumps.)  Again, a DwCA importer ought to help.

For more information on how the update process works see
[here](build-system.md).

## Using previously imported source versions

The `use-version` command lets you select an archived version other
than the one from which the previous OTT version was built.  This
differs from the `refresh/` targets in that the latter will actually
go out and get new content from the web, while `use-version` only
selects content to be loaded from the Open Tree 'files server'.

    bin/use-version genbank-20161216

## Creating a draft

    make ott

The draft taxonomy is placed in `r/ott-NEW/source/`.

## TBD: Putting a draft up on devapi

There needs to be a command for creating a draft tarball, without also
putting the tarball on the files server as a full point release.
Coming soon.

## Issuing a new release

After debugging, make the release candidate with

    make refresh/ott

To do the real release, i.e. to publish to the files server, we'll
need an OTT tarball, and tarballs for all of the sources that went
into building OTT.  The following command creates all of the tarballs
and stores them on the files server:

    make store-all

Find the tarballs as
`http://files.openetreeoflife.org/ott/ott3.1/ott3.1.tgz`,
`http://files.openetreeoflife.org/ncbi/ncbi-20170523/ncbi-20170523.tgz`,
and so on.

## And then:

1. Create release notes for the new release
2. Deploy to taxomachine, oti, otindex - some old instructions
   [here](https://github.com/OpenTreeOfLife/germinator/wiki/Deploying-a-new-taxonomy-version)
   should be useful
3. Do a new synthesis - it would be confusing to users were a new
   taxonomy deployed at the same time that an old synthetic tree was
   active.

## Note re identifiers

Smasher allocates identifiers for new non-addition OTT records above
7000000.  OTT identifiers for curator webapp additions are allocated
in the range (approximately) 6000000 to 7000000.  There is no check
for collisions, so in the unlikely event there are more than a million
additions, some kind of intervention will be needed.

repository: OpenTreeOfLife/reference-taxonomy

gha_language: Python

repo_name: OpenTreeOfLife/reference-taxonomy


text:
---
path: "/blog/post/2021-10-27_virtual_machines"
date: "2021-10-27"
title: "What Is a Virtual Machine (VM)?"
summary: "A virtual machine is an application that emulates a whole computer and runs inside your physical computer. It works as a separate independent machine, but it runs as a process on your host operating system. It’s a convenient way to dedicate a portion of your computer resources to a specific task or software."
abstract: "A virtual machine is an application that emulates a whole computer and runs inside your physical computer. It works as a separate independent machine, but it runs as a process on your host operating system. It’s a convenient way to dedicate a portion of your computer resources to a specific task or software."
author: "Joel Lord"
formattedDate: "October 27, 2021"
keywords: ["mongodb", "virtual machines", "cloud"]
banner: "machine"
originalSource: "MongoDB.com Website"
originalUrl: "https://www.mongodb.com/cloud-explained/virtual-machines"
---
What Is a Virtual Machine (VM)?
===============================

[Try Atlas Free](https://www.mongodb.com/cloud/atlas/register)

A virtual machine is an application that emulates a whole computer and runs inside your physical computer. It works as a separate independent machine, but it runs as a process on your host operating system. It's a convenient way to dedicate a portion of your computer resources to a specific task or software.

Virtual machines are used to dedicate a portion of a host's resources to a specific task. This machine will run in an isolated environment without any risks of conflicting with the host. If the guest virtual machine crashes, it can be rebooted or recovered without impacting the host.

This article will cover what virtual machines are, and when they should be used, in greater detail.

How does a virtual machine work?
--------------------------------

A virtual machine is a complete operating system and any installed applications running as a process in a physical computer. A hypervisor is used to dedicate a portion of the physical hardware to the virtual machine, allowing this guest machine to run like any other application on the host computer.

![Image showing that a host's physical resources (CPU, RAM and Storage) are shared across three VMs through a hypervisor.](https://webimages.mongodb.com/_com_assets/cms/kv9x1k4chb4pmf4ys-image2.png?auto=format%252Ccompress)

*Physical machines use a hypervisor to virtualize hardware available to virtual machines.*

The virtual machine itself runs as if it was running on its own independent hardware, and is not aware that it is running on virtualized hardware.

What are virtual machines used for?
-----------------------------------

There are many reasons to use virtual machines. On a personal computer, you can use a virtual machine to run software that requires a different operating system than the one running on the host computer. This way, a user running a laptop with a Linux OS would be able to run games built for the Windows OS.

For businesses, you can use virtual machines to perform operations that would otherwise be dangerous or risky. For example, a system administrator could try running a virtual machine with a new version of Linux to validate that the web servers used by the enterprise can run without any bugs that would cause service interruptions.

Virtual machines are prevalent in the cloud computing industry. These VMs allow system administrators to take large servers and separate them into smaller entities that cloud providers can then rent out. This has the advantage of isolating any content running in the virtual machine from the physical server. As an example, MongoDB runs tens of thousands of VMs across AWS, Azure, and Google to offer [MongoDB Atlas](https://www.mongodb.com/cloud/atlas), a database-as-a-service that comes with built-in automation and operational best practices so developers don't have to worry about managing VMs themselves.

The different types of virtual machines
---------------------------------------

Virtual machines are generally classified into two different types: system virtual machines and process virtual machines.

### System virtual machines

When people use the term "virtual machines," they're generally referring to system virtual machines, also called full virtualization VMs. A system VM is an entire operating system that runs on virtual hardware inside a host computer. You must use a hypervisor, a software that creates and runs VMs, to allocate resources to the system virtual machines.

### Process virtual machines

A process VM, or application VM, is an abstraction layer that enables code written in a specific programming language to run on any operating system. Popular examples include the [Java Virtual Machine](https://en.wikipedia.org/wiki/Java_virtual_machine) and the .NET framework, which use the [Common Language Runtime](https://en.wikipedia.org/wiki/Common_Language_Runtime).

What is virtualization?
-----------------------

Virtualization is the process of taking one or more components of a computer, such as CPUs, RAM, and storage, and tricking a piece of software into thinking those components are their physical counterparts. When discussing virtual machines, we usually refer to an entire computer being virtualized, but many components can be individually virtualized.

The different types of virtualization
-------------------------------------

Virtualization can take multiple forms but falls under five main types.

-   Software. All the computer resources such as CPU and RAM can be virtualized using a software called a hypervisor.
-   Hardware. Some hardware components have built-in capabilities to provide virtualization and workload isolation directly at the hardware level. Examples of these are the AMD-V and Intel-VT on-chip features.
-   Storage. Disk space can be split up into smaller pieces dedicated to a virtual machine. In the same vein, a server can also combine virtual storage spaces to create much larger virtual disks.
-   Network. Virtual sub-networks can be created in a software network. These networks can be used to route traffic across different resources in an extensive infrastructure.
-   Desktop. Some operating systems decouple the desktop environment and the physical hardware. By doing so, many lightweight desktops can run on a shared physical machine.

When you would use a virtual machine
------------------------------------

Virtual machines can be used whenever you need a different operating system to run an application. A mobile app developer, for example, might want to test out their application, but their computer may be running a Windows operating system. To test out the mobile app, the developer can use a virtual machine running Android OS.

Another everyday use case for virtual machines is to run software in an isolated environment. A duplicate of the production environment can be created to test out a new version of a software application in development. A QA team can then perform tests without conflicting with the actual production environment.

The pros and cons of virtual machines
-------------------------------------

Using virtual machines can provide some advantages over a physical computer. It generally does a better job at managing resources, lowering the overall costs. On the other hand, it also comes at a cost in performance.

### Advantages of virtual machines

Virtual machines are great for splitting physical resources to be used by smaller virtual computers. Instead of having computers with largely unutilized resources, it is possible to distribute the CPU and RAM across multiple virtual computers. When done properly, this can significantly reduce the cost of infrastructure.

Virtual machines can also be part of server provision programs. Because virtual machines are stored on a hard drive, it is easy to copy them to recreate identical environments over and over.

Finally, the isolation provided by the virtualization can let system administrators run riskier operations in a virtual environment that can easily be thrown away.

### Disadvantages of virtual machines

The main disadvantage of running virtual machines is the performance cost. A VM is slower than a physical machine because it needs to run a host operating system and a hypervisor in the background. This performance hit is especially true when compared to [containers](https://www.mongodb.com/compatibility/docker).

Is a virtual machine easy to set up?
------------------------------------

All major cloud providers offer virtual machines that you can use for personal or business use cases. If you are looking for a virtual machine to run a MongoDB database, [MongoDB Atlas](https://www.mongodb.com/cloud/atlas) abstracts the process of creating a dedicated cluster on virtual machines so that developers don't have to manage them.

If you would instead prefer to run a virtual machine on your personal computer, many software applications, such as [VirtualBox](https://www.virtualbox.org/), can help you set up and run virtual machines.

Summary
-------

Virtual machines can be a convenient way to manage large clusters of computers, but they also come at a certain performance cost. This is why most enterprises managing large infrastructures will use a mix of physical and virtual machines based on their use cases. If you don't want to manage your own virtual machines, [MongoDB Atlas](https://www.mongodb.com/cloud/atlas) makes it easier for you to create, run, and manage your cloud-based databases.

license: MIT

repository: joellord/blog

branch_name: refs/heads/master

extension: md

gha_language: JavaScript

gha_license_id: MIT

license_type: permissive

repo_name: joellord/blog


text:
# Bank Application Example with CQRS and Event Sourcing

## Use CQRS and Event Sourcing to Scale Read API

Powered by [NikolasMelui][nikolasmelui] using the [Nikolasmelui Nodejs Boilerplate][nikolasmelui-nodejs-boilerplate] (lightweight nodejs boilerplate using [eslint][eslint], [prettier][prettier], [lint-staged][lint-staged], [husky][husky] and [nodemon][nodemon] onboard).

## Installation

```bash
npm i
```

## Config

All necessary configs and your secrets is in the `config.js` file you need to create by copying the `config.example.js`:

```bash
cp config.example.js config.js
```

### Quick Start

Once everything is installed just run the project:

```bash
npm start
```

You can run the project in the development mode:

```bash
npm run develop
```

Or if you need to debug with an inspector:

```bash
npm run debug
```

## Makefile

All npm scripts are in the Makefile, so you can use it:

```bash
make <your_command>
```

## Husky and lint-staged onboard

The husky and lint-staged will not let you make a mistake, pre-comit and pre-push are always on guard!

## License

MIT License

Copyright (c) 2021 NikolasMelui

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.

**From developers 2 developers.**
[NikolasMelui][nikolasmelui]

[//]: # "These are reference links used in the body of this note and get stripped out when the markdown processor does its job. There is no need to format nicely because it shouldn't be seen. Thanks SO - http://stackoverflow.com/questions/4823468/store-comments-in-markdown-syntax"
[nikolasmelui]: https://github.com/NikolasMelui
[nikolasmelui-nodejs-boilerplate]: https://github.com/NikolasMelui/nikolasmelui-nodejs-boilerplate
[nodejs]: http://nodejs.org
[npm]: https://www.npmjs.com/
[eslint]: https://eslint.org/
[prettier]: https://prettier.io/
[lint-staged]: https://github.com/okonet/lint-staged
[husky]: https://github.com/typicode/husky
[nodemon]: https://www.npmjs.com/package/nodemon


text:
# Gilly
* A dead simple javascript image and video gallery library
* Version 0.01

### How to use ###
* include gilly.js and gilly.css
* gilly.show(['image path'],['youtube url'])

### To do ###
* Load images and video before fading them in. Include loading animation if loading takes too long.

repository: vivianeasley/gilly

repo_name: vivianeasley/gilly


text:
# C++98 HTTP 1.1 webserver

## Workflow
![workflow diagram](https://github.com/nsr888/webserver/blob/main/workflow_diagram.jpg?raw=true)
## Objects relationship diagram
![class diagram](https://github.com/nsr888/webserver/blob/main/objects_diagram_.jpg?raw=true)
## CGI diagram
![cgi diagram](https://github.com/nsr888/webserver/blob/main/cgi_diagram.svg?raw=true)
https://lectureswww.readthedocs.io/5.web.server/cgi.html

## Subject
* You must write a HTTP server in C++ 98
* The C++ standard must be C++ 98. Your project must compile with it.
* It must be conditionnal compliant with the rfc 7230 to 7235 (http 1.1) but you need to implement only the following headers
    * Accept-Charsets
    * Accept-Language
    * Allow
    * Authorization
    * Content-Language
    * Content-Length
    * Content-Location
    * Content-Type
    * Date
    * Host
    * Last-Modified
    * Location
    * Referer
    * Retry-After
    * Server
    * Transfer-Encoding
    * User-Agent
    * WWW-Authenticate
* You can implement all the headers if you want to
* We will consider that nginx is HTTP 1.1 compliant and may be use to compare
headers and answer behaviors
* It must be non blocking and use only 1 select for all the IO between the client and the server (listens includes).
* Select should check read and write at the same time.
* Your server should never block and client should be bounce properly if necessary
* You should never do a read operation or a write operation without going through select
* Checking the value of errno is strictly forbidden after a read or a write operation
* A request to your server should never hang forever
* You server should have default error pages if none are provided
* Your program should not leak and should never crash, (even when out of memory if all the initialisation is done)
* You can’t use fork for something else than CGI (like php or perl or ruby etc...)
* You can include and use everything in "iostream" "string" "vector" "list" "queue"
"stack" "map" "algorithm"
* Your program should have a config file in argument or use a default path

## Resources
### Core
* https://luminousmen.com/post/asynchronous-programming-blocking-and-non-blocking
* http://www.stolyarov.info/books/programming_intro/vol3 (page 227)
### HTTP Protocol
* https://ru.wikipedia.org/wiki/HTTP
* https://efim360.ru/rfc-7230-protokol-peredachi-giperteksta-http-1-1-sintaksis-soobshheniya-i-marshrutizacziya/#3-Message-Format
* https://efim360.ru/rfc-7231-protokol-peredachi-giperteksta-http-1-1-semantika-i-kontent/
### CGI
* https://habr.com/ru/post/121885/

repository: Litvinovis/webserver

branch_name: refs/heads/main

repo_name: Litvinovis/webserver


text:
# MicroProfile LRA CDI Participant Example

[MicroProfile LRA](https://github.com/eclipse/microprofile-lra) is a specification of an API that
enables loosely coupled services to coordinate long running activities in such a way as to
guarantee a globally consistent outcome without the need to take long duration locks on data.

To run the example under Unix based OS's run the maven build lifecycle verify phase:

> mvn verify

To run the example manually with a description of how it works please refer to
[the description in the lra-examples README](../README.md#running-the-cdi-participant-example)

repository: PrasadReddyM/quickstart

repo_name: PrasadReddyM/quickstart


text:
# Challenge 3 - YATM Microservice
At Tuenti, we have a degree of freedom to choose the language of different microservices. Each microservice is based on what the developer knows best and what they think is the most suitable platform for the thing they are solving. We recently discovered a microservice running on an old platform, and we want to create a docker image in order to replace it with newer instances. We were able to extract the code from the machines and we also dumped the contents, which originally looked like this:

![yatm](https://raw.githubusercontent.com/kutyel/tuenti-challenge-6/master/Challenge%203/yatm.jpg?token=AE49TePWzTgBly_hDvWCeesaB2btaNZ9ks5XMtGSwA%3D%3D)

We have also saved what the original machine was returning for those tapes, which could be useful for debugging. So we need you to help us write an interpreter for that code.

**Input**

The input will contain the machine code and the contents of the tapes in another well-known format.

**Output**

The final state for each tape, each on a different line and starting with Tape #N:

**Sample Input**
```
---
code:
  start:
    '#':
      move: right
      state: replace
  replace:
    '0':
      write: '1'
      move: right
    '1':
      state: end
    ' ':
      write: '#'
      state: end
tapes:
  1: '#001'
  2: '#0001'
  3: '#0'
  4: '#1'
...
```
**Sample Output**
```
Tape #1: #111
Tape #2: #1111
Tape #3: #1#
Tape #4: #1
```

path: /Challenge 3/readme.md


text:
# Node-Based-Binary-Search-Tree

An implementation of Set ADT Using Binary Search Tree.

# Definitions:

• A set is an unordered collection of elements with no repetition. Examples are the
set of real numbers, the set of integer numbers or the set consisting of numbers
1, 2, 30.

• For this assignment we will only be considering representing finite sets consisting
of elements which are integers. Examples: {0, 34, 78, 1000}, {4, 5, 890, 65535},
{0, 1, 2, · · · , 65534, 65535}, {} are all valid sets.

• The union of two sets, say A and B, is written as A∪B and is the set which contains
all of the elements in either A or B or both. Example: If A = {3, 8, 14, 15} and
B = {2, 8, 9, 15, 100}, then A ∪ B = {2, 3, 8, 9, 14, 15, 100} (notice that there are no
repeated elements in a set).

• The intersection of two sets A and B is written as A∩B and is the set which contains
the elements that are common to A and B. Examples: If A = {3, 8, 14, 15} and
B = {2, 8, 9, 15, 100}, then A ∩ B = {8, 15}. If A = {17, 20, 38} and B = {200},
then A ∩ B = {}, which is termed the empty set.

# Specifications:

• You have to use the Java class TNode given below, to implement the tree nodes.
Classes TNode and BSTSet must be contained in the same package.

public class TNode{
int element;
TNode left;
TNode right;
TNode(int i, TNode l, TNode r)
{ element =i; left = l; right = r; }
}//end class

• Class BSTSet must contain only a private field named root, of type TNode, which
is a reference to the root of the tree. No other fields are allowed. When the set is
empty you should have root==null.

• Class BSTSet must contain the following constructors:

- public BSTSet() - initializes the BSTSet object to represent the empty set
(an empty tree).

- public BSTSet(int[] input) - initializes the BSTSet object to represent the
set containing all elements in array input, without repetitions. For example,
if the array is: 5, 7, 4, 5, then the corresponding set is {5, 7, 4}.

• Class BSTSet must contain the following public methods:

1) public boolean isIn(int v): Returns true if integer v is an element of
this BSTSet. It returns false otherwise.

2) public void add(int v): Adds v to this BSTSet if v was not already an
element of this BSTSet. It does nothing otherwise.

3) public boolean remove(int v): Removes v from this BSTSet if v was an
element of this BSTSet and returns true. Returns false if v was not an
element of this BSTSet.

4) public BSTSet union(BSTSet s): Returns a new BSTSet which represents
the union of this BSTSet and s. This method should not modify the input
sets.

5) public BSTSet intersection(BSTSet s): Returns a new BSTSet which represents
the intersection of this BSTSet and s. This method should not modify
the input sets.

6) public int size(): Returns the number of elements in this set.

7) public void printBSTSet(): Outputs the elements of this set to the console,
in increasing order.

8) private void printBSTSet(TNode t): Outputs to the console the elements
stored in the subtree rooted in t, in increasing order.

# Test Notes:

TestBSTSet.java containsthe following test cases:

• Test1---constructor1

• Test2---constructor2---normal case

• Test3---constructor2---with repetitions

• Test4---isIn(1)---yes

• Test5---isIn(3)---no

• Test6---add(2)---with repetitions

• Test7---add(3)---without repetitions

• Test9---remove(2)

• Test10---remove(6)

• Test11---remove(30)

• Test12---union()

• Test13---union()

• Test14---intersection()

• Test15---intersection()-with empty set

• Test16---size()

• Test17---size()---empty


text:
---
path: "/safeguards/terraform/aws/ec2/allowed-availability-zones"
title: "Allowed availability zones"
id: terraform/aws/allowed-ec2-availability-zones
provisioner: default/terraform
provider: aws
description: Restrict the allowed availability zones for EC2 instances
source: https://github.com/safeguards-io/safeguards/blob/master/src/safeguards/terraform/aws/allowed-ec2-availability-zones.js
issues: https://github.com/safeguards-io/safeguards/issues/new
---

Restricts the availability zones which can be used by the EC2 Instances. Setting the availability
zone on an EC2 instance is optional; onlyl instances with the `availability_zone` attribute on
`aws_instance` will be checked.

## Variables
- `allowed` (list) - The list of allowed availability zones

## Example

This example requires that all EC2 instance are provisioned in us-east-1a... us-east-1c.

```
- name: Must use us-east-1 availability zones
  safeguard: terraform/aws/allowed-ec2-availability-zones
  settings:
    allowed:
    - us-east-1a
    - us-east-1b
    - us-east-1c
```

repository: safeguards-io/site

repo_name: safeguards-io/site


text:
# Phenotype Data Processing for Variant Prioritizers

This project consists of scripts to support the manuscript:

Parikh JR, Genetti CA et al.  *A data-driven architecture using natural language processing to improve phenotyping efficiency and accelerate genetic diagnoses of rare disorders.*

## Data Processing Pipeline
The manuscript defines a set of 3 filters (frequency, depth, and diversity) that can be applied to a set of [HPO](https://hpo.jax.org/app/) terms. These filters have been implemented in `post_process_NLP.py`.

* `pheno_pipeline_params.yaml` must be edited to reference to AWS S3 bucket and folder paths containing phenotype data and VCF files.
* `post_process_NLP.py` applies NLP term filters across a 3D space of parameters described in the manuscript and writes the filtered set of terms back to S3.

## Dockerized Exomiser
Parallel processing of our data processing for gene/variant prioritization was enabled by containerizing [Exomiser](http://exomiser.github.io/Exomiser/). The image used for our manuscript is available on Dockerhub at [jiggyjsq/exomiser:12.1.0__hg19_2003__pheno_2003](https://hub.docker.com/r/jiggyjsq/exomiser/tags?page=1&ordering=last_updated).

The following files are required to build your own image using a different version of Exomiser:
* `Dockerfile`
* `run_exomiser_job.py` is copied during the build

`ray_parallel_nlp.py` is a helper script to run dockerized Exomiser in parallel after filtered NLP term sets have been created.

## Tiered Filtering Pipeline
The manuscript describes a tiered process to help reduce the effort required for manual review of gene/variant prioritization results. `pipeline_parse_html.R` parses the HTML Exomiser reports to only keep a limited number of genes and places them in separate folders for each of the 4 steps in the tiered process.


text:
# Sentiment Analysis

Multilingual sentiment analysis for English, German, French and Italian. The machine learning model predicts whether the sentiment of a text is positive or negative.

The machine learning model was implemented with [Keras](https://keras.io) and trained with 50'000 english, 30'000 german, 50'000 french and 30'000 italian film reviews. The models are tested with [TensorFlow](https://www.tensorflow.org/) as backend.

## Accuracy of the Predictions

The measured accuracy of the predictions is 88.6% for English, 81.3% for German, 84.4% for French and 81.6% for Italian.

The model consists of an embedding layer as input, a hidden layer with 8 LSTM units and an output layer with 1 unit. The maximum length of an input text is 400 words. For the word embedding the [pre-trained word vectors](https://github.com/facebookresearch/fastText/blob/master/pretrained-vectors.md) of *FacebookResearch* were used.

## Scope of Application

The model was trained with film reviews in English, German, French and Italian. We also tested the model at random with product reviews and reader comments in those languages. The results were generally good. However, we recommend testing when using the models in new domains.

Several texts can be posted to the REST service at once for analysis. You can start the sentiment analysis service to access a [language detection](https://github.com/ipublia/language-detection) service. The service then first determines the language of the texts and then passes them on to the corresponding sentiment analysis model (see the examples below).

## Installation

The REST service was tested with [Python 3.6](https://www.python.org), [Keras 2.1](https://keras.io) and [Tensorflow 1.5](https://tensorflow.org). Run the following command to install the dependencies:

```bash
pip3 install -r ./requirements.txt
```

## Starting the REST Service

To start the REST service in a terminal:

```bash
sa-rest.py -h
Usage: sa-rest.py --model=<model> --host=<host> --port=<port>
```

model: id composed of the language and the version (examples: en_1.0.1, de_1.0.1, fr_1.0.1, it_1.0.1) of the model to load. Per default the newest versions of all models are loaded.

_Note_: The first time you start the service, the model (including the trained weights) and the tokenizer are loaded from ipublia's website (using https). They are stored in the directory ~/.ipublia/data/sentiment-analysis.

### Examples

Loads all language models in the newest version:

```bash
python3 ./src/sa-rest.py --host=<IP_ADDRESS> --port=5000
```

For French:

```bash
python3 ./src/sa-rest.py --model=fr_1.0.1 --host=<IP_ADDRESS> --port=5000
```

For German:

```bash
python3 ./src/sa-rest.py --model=en_1.0.1 --host=<IP_ADDRESS> --port=5000
```

## Querying the REST Service

Queries use the following JSON format:

```json
{
  "texts": [
    "This film is exciting from the beginning to the end! The actors are really good!",
    "This movie is boring from the beginning to the end! The actors are moderate to bad!"
  ]
}
```

### Example Call with Curl

Example of a curl call in a terminal:

```bash
curl -H "Content-Type: application/json" -X POST -d '{"texts": ["This film is exciting from the beginning to the end! The actors are really good!","This movie is boring from the beginning to the end! The actors are moderate to bad!"]}' http://<IP_ADDRESS>:5000/predict
```

The answer will look something like this:

```json
{
  "predictions": [
    {
      "lang": "en",
      "sentiment": {
        "label": "positiv",
        "probability": 0.9012099504470825
      },
      "text": "This film is exciting from the beginning to the end! The actors are really good!"
    },
    {
      "lang": "en",
      "sentiment": {
        "label": "negativ",
        "probability": 0.01829037070274353
      },
      "text": "This movie is boring from the beginning to the end! The actors are moderate to bad!"
    }
  ],
  "success": true
}

```

A probability towards 0 means *negative*, one towards 1 means *positive* sentiment.

## Starting the REST Service with Language Detection

You can start the *sentiment analysis service* to access a [language detection](https://github.com/ipublia/language-detection) service. The service then first determines the language of the texts and then passes them on to the corresponding sentiment analysis model.

To start the REST service with language detection in a terminal:

```bash
sa-rest.py -h
Usage: sa-rest.py --model=<model> --host=<host> --port=<port> --detect_lang=<url>
```

model: id composed of the language and the version (examples: en_1.0.1, de_1.0.1, fr_1.0.1, it_1.0.1) of the model to load. Per default the newest versions of all models are loaded.

detect_lang: url of the language detection service (example: http://<IP_ADDRESS>:5001/predict).

### Example

First, start a language detection service:

```bash
python3 ./src/ld-rest.py --host=<IP_ADDRESS> --port=5001
```

Then start the sentiment analysis service with a reference to the language detection service:

```bash
python3 ./src/sa-rest.py --host=<IP_ADDRESS> --port=5000 --detect_lang=http://<IP_ADDRESS>:5001/predict
```

### Example Call with Curl

Example of a curl call in a terminal (note the third text in English):

```bash
curl -H "Content-Type: application/json" -X POST -d '{"texts": ["I found this movie really hard to sit through, my attention kept wandering off the tv.","Dieser Film ist vom Anfang bis am Ende spannend! Die Schauspieler sind wirklich gut!","Dieser Film ist vom Anfang bis am Ende langweilig! Die Schauspieler sind mässig bis schlecht!","J\u0027aime ce film. Les acteurs jouent vraiment bien!","Non mi piace affatto questo film. Gli attori sono cattivi e la storia è noiosa!"]}' http://<IP_ADDRESS>:5000/predict
```

The answer will look like this:

```json
{
  "predictions": [
    {
      "lang": {
        "label": "en",
        "probability": {
          "de": 0.15291942656040192,
          "en": 0.386442095041275,
          "fr": 0.1524139940738678,
          "it": 0.15353836119174957,
          "rm": 0.1546860933303833
        }
      },
      "sentiment": {
        "label": "negativ",
        "probability": 0.44230401515960693
      },
      "text": "I found this movie really hard to sit through, my attention kept wandering off the tv."
    },
    {
      "lang": {
        "label": "de",
        "probability": {
          "de": 0.4036977291107178,
          "en": 0.1490136682987213,
          "fr": 0.1489626169204712,
          "it": 0.14897985756397247,
          "rm": 0.14934605360031128
        }
      },
      "sentiment": {
        "label": "positiv",
        "probability": 0.9132363200187683
      },
      "text": "Dieser Film ist vom Anfang bis am Ende spannend! Die Schauspieler sind wirklich gut!"
    },
    {
      "lang": {
        "label": "de",
        "probability": {
          "de": 0.40277570486068726,
          "en": 0.1491391956806183,
          "fr": 0.14907844364643097,
          "it": 0.1491205096244812,
          "rm": 0.1498860865831375
        }
      },
      "sentiment": {
        "label": "negativ",
        "probability": 0.0641002506017685
      },
      "text": "Dieser Film ist vom Anfang bis am Ende langweilig! Die Schauspieler sind mässig bis schlecht!"
    },
    {
      "lang": {
        "label": "fr",
        "probability": {
          "de": 0.14898933470249176,
          "en": 0.1492728441953659,
          "fr": 0.40348654985427856,
          "it": 0.14923687279224396,
          "rm": 0.14901447296142578
        }
      },
      "sentiment": {
        "label": "positiv",
        "probability": 0.6126847267150879
      },
      "text": "J'aime ce film. Les acteurs jouent vraiment bien!"
    },
    {
      "lang": {
        "label": "it",
        "probability": {
          "de": 0.15224331617355347,
          "en": 0.15012496709823608,
          "fr": 0.15062405169010162,
          "it": 0.39602142572402954,
          "rm": 0.15098623931407928
        }
      },
      "sentiment": {
        "label": "negativ",
        "probability": 0.20823518931865692
      },
      "text": "Non mi piace affatto questo film. Gli attori sono cattivi e la storia è noiosa!"
    }
  ],
  "success": true
}
```

repository: sarikayamehmet/sentiment-analysis

repo_name: sarikayamehmet/sentiment-analysis


text:
# Adding application dependencies for PySpark applications

## PySpark client driver ##

These packages satisfy dependencies for code running client side in the driver process. For example, library functions used to process result data from distributed jobs running on the platform.

These are [python pip dependencies](https://pypi.python.org/pypi) and are specified in the format required by [pip](https://pypi.python.org/pypi/pip). Refer to https://packaging.python.org/guides/tool-recommendations/ for more information.

Maintain this file:

```platform-salt/salt/app-packages/files/app-packages-requirements.txt```

Also ensure the PNDA mirror contains the corresponding packages.

### Updates ###

If it becomes necessary to update the installed dependencies on PNDA, run this Salt State:

```sudo salt -C 'G@hadoop:role:EDGE or G@roles:jupyter' state.sls app-packages```

## Usage ##

Use dependencies in the normal fashion, for example:

```import sharedroutines```

## PySpark executor or cluster driver ##

These packages satisfy dependencies for code running in executors on the cluster. For example, algorithms used to compute result data in distributed jobs running on the platform.

These are typically Python [eggs](https://setuptools.readthedocs.io/en/latest/formats.html).

Maintain this file:

```platform-salt/salt/app-packages/files/app-packages-hdfs.txt```

## Updates ##

Run this Salt State to stage the listed egg files at the HDFS path configured in the Pillar (see platform-salt/pillar/pnda.sls):

```sudo salt-call state.sls hdfs-sync```

Also ensure the PNDA mirror contains the corresponding packages.

### Usage ###

In your PySpark environment, use the SparkContext.addPyFile method to add any required dependencies, referencing the full HDFS path configured as mentioned above. For example:

```sc.addPyFile('hdfs:///user/deployment/app_packages/sharedroutines-0.1.egg')```

## Mirrors ##

Python pip dependencies must be deployed on the PNDA Mirror in the usual way. For more details regarding working with the PNDA Mirror, see the PNDA Guide.

Python egg files must be deployed in ```/mirror_app_packages``` on the PNDA Mirror.

repository: TharanyaS/pnda-guide

repo_name: TharanyaS/pnda-guide


text:
---
layout:     post
title:      "Bosch 4100 Router Table Insert"
subtitle:   "Adding a router to a Bosch table saw"
date:       2022-06-05
tags:       [woodworking]
author:     "Craig Davis"
header-img: "img/headers/bosch-4100-router-table.jpg"
---

I built a router table insert for my Bosch contractor table saw.
When this table saw is in its wide configuration, there's room for a small router lift.
Built properly, you retain full use of the table saw fence.

## TLDR;
![Bosch 4100 Router Table Insert](/img/posts/bosch-4100-router-table/14-complete-with-fence.jpg)
Here's the finished router table insert.

## Background

I'd been thinking about this for a while, and I searched the internet.
This isn't a new idea.

* [Julian Tracy][julian] built router table with a fence extension.
* This [Lumberjocks][lumberjocks] forum post has more discussion.
* [Commercially available unit][sauter-shop] for the European version of this saw.
* Andreas Kalt builds [a nice version of this on YouTube][youtube], it's worth watching!

## My first version

![First version of this table saw is basic plywood](/img/posts/bosch-4100-router-table/1-first-insert.jpg)

My first version of this router table was ¾" plywood that rested across the fence rails.
This worked great, but it didn't allow me to use the fence with the router lift.
The plywood also wasn't very slick.

## The plan

> __Disclaimer:__ I am not a professional.
> This is for informational purposes only.
> Please be careful with power tools.
> If you store the saw with the router in place, it's a little tippy and could fall out if you don't put the fence over it.
> Use your own judgement if you choose to build something similar.

The router lift itself then needs to be the same width as the table saw tabletop.
This will allow the fence to slide past it.
But, we need to support this router table somehow.
We could add some pins or support from below, but these could interfere with closing the saw.
Instead, we'll add steel angle iron supports to the sides of the router table.
We'll need to make some bars and pre-drill some holes.

![Space under the fence for support](/img/posts/bosch-4100-router-table/2-space-under-fence.jpg)

In the photo above, you can see enough room under the fence to place some angle iron.

![Angle iron router table support](/img/posts/bosch-4100-router-table/3-angle-iron-in-place.jpg)

I'll include some Amazon affiliate links below. Purchasing any of these items does help fund my hobbies and these posts.
These are all items that I've purchased and used - there's no sponsorships here.

## Preparing the angle iron supports

Here's some ½" angle iron underneath the fence.
There is enough room on the near side of the fence for angle iron, but the far side will need flat bar.

![Far side router table rail](/img/posts/bosch-4100-router-table/5-far-side-rail.jpg)

Both the angle iron and the flat bar are just a little too tall.
They both protrude above the top of the table.
I used a [grinder][grinder] top thin one side of the angle iron and the width of the flat bar.
I've started using these [flap discs from Pferd][flap-disc] and they are quite good.

![Trimming down the angle iron](/img/posts/bosch-4100-router-table/6-reducing-height.jpg)

After grinding, I drilled out some evenly spaced holes and [countersunk][countersink] each so that the fence would still clear the bars.
I gave it a quick scrub with a [Scotch-Brite disc][scotch], wiped with acetone and gave it a coat of black spray paint.

![Ground and drilled support bars](/img/posts/bosch-4100-router-table/7-ground-and-drilled-rails.jpg)

### Preparing the table top

For the table table, I used some 18mm pre-finished plywood and laminated a 1/8" coated hardboard to it.
One day at the local wood supply, they had a sign on a pallet of hardboard with a black plastic coating.
I'm not really sure what it's meant for, but I brought a few sheets home with me.
I've been using it for all sorts of little projects.

Here's a photo of laminating the hardboard to the plywood.
You can never have too many [clamps][clamps].

![Laminated table top](/img/posts/bosch-4100-router-table/8-laminated-table-top.jpg)

This next step is a bit of a trick.
In order to get the router top perfectly flush with the top of the table saw, I first clamped the router table to a couple of levels.
I then clamped the levels down to the table top.
This made sure that the router table was flush with the top.

![Mounting the router table](/img/posts/bosch-4100-router-table/9-mounting-flush.jpg)

With the table top held flush, we can [center punch][center-punch] for our rails to make sure we don't drift when we predrill for our screws.

![Center punching for our rails](/img/posts/bosch-4100-router-table/10-center-punching-for-rails.jpg)

The far side rail was actually a little easier - the heads of the screws didn't interfere with the bottom leg of the angle iron.

![Far side router support](/img/posts/bosch-4100-router-table/11-far-side-rail.jpg)

I didn't countersink the near side quite as much as I wanted to.
Because the screws that I had on hand had a larger head, I had to move the holes up a little bit for clearance.
If I'd countersunk more I'd have made a very thin web at the top of the holes.

![Near side router support](/img/posts/bosch-4100-router-table/12-near-side-rail.jpg)

## Adding the router lift

Here you can see the underside of my prototype router table and my [Bosch 1618 router][old-router].
It's a really great router for this application.
It's compact with great torque.
It has very little vibration and I've got both a ½ and ¼ Collet for it.
Sadly, it's no longer made.
If you can find a used one, I've seen some [rebuilt kits available][rebuild].
The new version appears to be a [Bosch MRP23EVS][new-router].
I haven't used one, but I suspect it's quite good.

For my router lift, I chose an [Incra router lift][incra-lift].
This seemed like a buy-once, cry-once item.
I can't find anything to complain about.
The magnalock inserts are nice - I've never had any problems and they work better than the twist inserts on others.
It's worth getting [Collet wrenches with offset heads][wrenches] so that you don't have to raise and lower the router as much to change bits.

![Bosch 1618 Router](/img/posts/bosch-4100-router-table/4-bosch-1618-router.jpg)

After making a hole all the way through that matched the router, I then added some simple supports for the lift.
I chose to save a few pennies and use wood supporting the router lift.
The [router corner plates][router-plates] are nice.
Maybe I'll use them on my next build.

![Adding router support](/img/posts/bosch-4100-router-table/13-adding-router-support.jpg)

## The complete unit

Here's the completed router table from above.

![Router unit from above](/img/posts/bosch-4100-router-table/15-complete-from-above.jpg)

Here it is from below.

![Router unit from below](/img/posts/bosch-4100-router-table/16-router-table-from-below.jpg)

## Bosch 4100 upgrades

I ordered some accessories for this little saw.
I think all them should come with the saw, and I think they're worth buying.
I've never seen them at a store, and in case you didn't know they exist, here they are:

* [Left side work support][left-side] for holding wider plywood. This is nice for making cabinet panels.
* [Outfeed support][outfeed] for longer stock. I like using my assembly table, but this is nice for cutting trim and longer boards.
* [Dust bag][dust-bag] is handy for times when your shop-vac isn't available.

Speaking of dust collection, I really like using an [automatic switch to turn on dust collection][dust-switch].
This switch will automatically turn on your shop vac when you turn on the saw, and it'll pause just long enough that it won't trip the breaker by having both motors startup together.

## Future upgrades

In an upcoming post, I hope to share some photos of a dust collection box for this little router table as well as a mount for switch for it.

If you've got questions about any of this, please feel free to send me an {% include email.html %}.

{% include disclosure.html %}

[julian]: http://juliantracy.com/Bosch%20Tablesaw/index.htm
[lumberjocks]: https://www.lumberjocks.com/topics/142538
[sauter-shop]: https://www.sautershop.com/router-tableplate-sauter-for-bosch-gts10xc-sa-ftp-gts10?c=16188
[youtube]: https://youtu.be/9xCyqnAJr_4
[other-approach]: https://www.exitthefastlane.com/2019/01/jobsite-table-saw-router-extension.html
[old-router]: https://www.woodmagazine.com/review/routers/fixed-base-routers/bosch-2-14-hp-fixed-base-d-handle-router-1618evs
[new-router]: https://www.amazon.com/Bosch-MRF23EVS-Electronic-Fixed-Base-Trigger-dp-B002LASDGK/dp/B002LASDGK?&linkCode=ll1&tag=there4io-20&linkId=5a25f2c3456626522445e85a9a288883&language=en_US&ref_=as_li_ss_tl
[grinder]: https://www.amazon.com/DEWALT-DWE402-2-Inch-11-Amp-Grinder/dp/B00RVZ7DNO?&linkCode=ll1&tag=there4io-20&linkId=be177ebd622ec3d8ac879ff5ff6b4be6&language=en_US&ref_=as_li_ss_tl
[flap-disc]: https://www.amazon.com/POLIFAN-Curve-Ceramic-Oxide-Radius/dp/B00BQLFN8G?&linkCode=ll1&tag=there4io-20&linkId=8fa2465a1e07fce9de85880841af78fb&language=en_US&ref_=as_li_ss_tl
[clamps]: https://www.amazon.com/IRWIN-QUICK-GRIP-1964758-One-Handed-Clamp/dp/B001DSY4QO/r?&linkCode=ll1&tag=there4io-20&linkId=4aac74e9021e4553e25b0df41b5e1dd7&language=en_US&ref_=as_li_ss_tl
[center-punch]: https://www.amazon.com/Automatic-Adjustable-Non-Slip-One-Handed-Operation/dp/B08KGF7ZFQ?th=1&linkCode=ll1&tag=there4io-20&linkId=0f1d2573d768148f5a36631ed1030b72&language=en_US&ref_=as_li_ss_tl
[incra-lift]: https://www.amazon.com/INCRA-Mast-R-Lift-II-Router-Lift/dp/B007JTYFKQ?&linkCode=ll1&tag=there4io-20&linkId=58da22547aa04b4a975f3181135dcb92&language=en_US&ref_=as_li_ss_tl
[countersink]: https://www.amazon.com/IRWIN-Metal-Countersink-Drill-1877793/dp/B00IZFHZUK?&linkCode=ll1&tag=there4io-20&linkId=5e66eb718661b00779d3ff44c718c0b9&language=en_US&ref_=as_li_ss_tl
[outfeed]: https://www.amazon.com/gp/product/B0105D9LRY?&linkCode=ll1&tag=there4io-20&linkId=9891ae43afa00387940ca7d5b7bba708&language=en_US&ref_=as_li_ss_tl
[left-side]: https://www.amazon.com/gp/product/B0105D9ME6?&linkCode=ll1&tag=there4io-20&linkId=85743df17c33b14da44b6192416f2a04&language=en_US&ref_=as_li_ss_tl
[dust-bag]: https://www.amazon.com/gp/product/B00004R9LF?&linkCode=ll1&tag=there4io-20&linkId=46d5d1ec1264244bd1ed1db931012877&language=en_US&ref_=as_li_ss_tl
[dust-switch]: https://www.amazon.com/gp/product/B096VP13FP?&linkCode=ll1&tag=there4io-20&linkId=ac7953e45091a8d80efb2672901a5fcb&language=en_US&ref_=as_li_ss_tl
[rebuild]: https://www.trueblade.com/blogs/news/rebuilding-a-bosch-1618-d-handled-router
[router-plates]: https://www.amazon.com/JessEm-Insert-Corner-Leveling-Router/dp/B01BX94SIG
[wrenches]: https://www.amazon.com/gp/product/B00N8I2GXA?&linkCode=ll1&tag=there4io-20&linkId=d71fb92c73d05bd7e5479ad5fe81362e&language=en_US&ref_=as_li_ss_tl
[scotch]: https://www.amazon.com/Scotch-Brite-Clean-Strip-Extra-Shaft/dp/B07L1CXBRZ?&linkCode=ll1&tag=there4io-20&linkId=ef5b9b08008aed3aec7513d980ba4334&language=en_US&ref_=as_li_ss_tl

extension: markdown


text:
CHANGELOG
=========

1.3
---

 * In `SlugGenerator::generate` added internal method strip out all invisible characters
 * Added `TextUtils::strModified()` that can determine whether a string has been modified or not
 * Improved slug generator. Remove quotes from Word as well.
 * Extended dictionary in foreign chars
 * Added `TextUtils::snakeCase()` to convert strings to snake case
 * Added `Math::ceiling()` to round values like in Excel ceiling function
 * Added `Math::numberFormat()` to format numbers without rounding them
 * Added `TextUtils::serial()` that generates serial numbers like XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
 * Added `TextUtils::normalizeColumn()` to convert column names like `first_name` to `First Name`
 * In `Text\SlugGenerator` added `getUniqueSlug()` method to handle uniqueness
 * In `Text\CollectionManager` added `isEmpty()` method that determines whether collection is empty
 * Added `TextUtils::uniqueString()` to generate a very unique string based on MD5
 * In `CollectionManager` added `getKeys()`
 * Added static `Math` class with utility methods
 * In TextUtils added `randomString()`
 * Added `CurrencyConvertor` tool
 * Moved internals of `TextTrimmer` into `TextUtils::trim()`
 * Added `TextUtils::getNeedlePositions()` helper to extra positions of a string to be searched

1.2
---

 * Added `TextUtils::studly()`. It can convert strings to StudlyCase
 * Added `TextUtils::trim()` shortcut
 * Added `TextUtils::sluggify()` shortcut
 * Added `TextUtils::romanize()` shortcut
 * Added `TextUtils::explodeText()` that supports dropping a text into array
 * Added `TextUtils::multiExplode()` that supports dropping a string by several delimiters

1.1
---

 * Improved slug generator

1.0
---

 * First public version


text:
# Integration and conversation patterns for unicorns

This private pet project experiments with integration and conversation patterns for microservices. The context is a technology start up business, Wild Rydes Inc., that disrupts passenger transportation by replacing old-fashioned taxi cabs with unicorns. Because unicorns come with a lot more fun and magic than taxis.

## Structure

The project is currently structured in three service families:
1. Auxiliary services (mainly preparing a fresh AWS account and preparing some common application resources)
1. Business services (services that deliver business functionality, e.g. ride booking)
1. Backoffice services (services that deliver backoffice functionality, e.g. datalake ingestion)

There are folders for each service family and within these folders, there are subfolders for each service. All services in the project are currently based on AWS SAM, so there's a `template.yaml` in every service's folder.

## Prerequisites

A local installatino of AWS CLI and AWS SAM is required. To use both tools successfully here, there is a need for an IAM user that has administrator access and whose access key is configured in `.aws/credentials`.

For deployments of AWS SAM apps, an Amazon S3 bucket is required to host the artifacts (e.g. packaged AWS SAM app, transformed AWS CloudFormation template). The `sam deploy` command creates that bucket automatically, but unfortunately only in interactive mode (`--guided`). Hence, a respective bucket needs to be created upfront and passed to the SAM command.

```bash
aws s3 mb s3://<aws-account-id>-<aws-region>-sam-cli-source-bucket --profile <profile> --region <aws-region>
```

## Deployment

In the folder for each service, there is a script `deploy.sh` that uses AWS SAM for deployment. In theory, there's also a `deploy.sh` in the root folder that traverses through the services in the correct order and deploys them, but it needs a bit more love to work reliably.

## Example values

Environment variable:

```bash
export SAM_AWS_ACCOUNT_ID=111111111111
export SAM_AWS_PROFILE=burner1
export SAM_AWS_REGION=eu-central-1
export SAM_STAGE=dev
export SAM_BUCKET_NAME=$SAM_AWS_ACCOUNT_ID-$SAM_AWS_REGION-sam-cli-source-bucket
```

Create the bucket for SAM artifacts:

```bash
aws s3 mb s3://111111111111-eu-central-1-sam-cli-source-bucket --profile burner1 --region eu-central-1
```

## Sample requests

### Sample requests for the "submit ride completion" use case:

    cd <ride-management-service-dir>
    curl -i https://<your-api-gw-base-url>/api/user/submit-ride-completion -d @events/standard-ride.json
    curl -i https://<your-api-gw-base-url>/api/user/submit-ride-completion -d @events/extraordinary-ride.json

### Sample requests for the "instant ride RFQ" use case:

    cd <ride-booking-service-dir>
    curl -i https://<your-api-gw-base-url>/api/user/submit-rfq -d @events/instant-ride-rfq.json


text:
Role Name
=========

Installs consul-template as either an upstart or systemd service.

Requirements
------------

Any pre-requisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required.

Role Variables
--------------

A description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. hostvars, group vars, etc.) should be mentioned here as well.

Dependencies
------------

Depends on ansible-consul role if consul-template needs to talk to a local Consul server.

Example Playbook
----------------

```
- hosts: consul-template-servers
  sudo: yes
  roles:
    - ansible-consul
    - ansible-consul-template
  vars:
    consul_is_ui: false
    consul_is_server: true
    consul_datacenter: "gce-us-central1-a"
    consul_bootstrap: true
    consul_bind_address: "{{ ansible_default_ipv4['address'] }}"
    use_systemd: true
    use_upstart: false
```

License
-------

Apache v2.0

Author Information
------------------

Grig Gheorghiu
http://agiletesting.blogspot.com

repository: leucos/ansible-consul-template

repo_name: leucos/ansible-consul-template


text:
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0), and this project adheres
to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [1.19.0] - 2023-02-22

### Added
Support the social provider Naver

### Fixes
Wrong consent version from profile in signup/profile editor forms

## [1.18.0] - 2022-12-12

Allow to start a step up flow during a login when mfa is required
Add dedicated field custom identifier to login views if the right option is enabled
Fix issue during validation custom identifier can now be numbers

## [1.17.0] - 2022-10-26

### Added

New field custom identifier to loginWithPassword
New field custom identifier to signup
New widget for MFA credentials listing
New widget for registering and/or removing MFA credentials
New widget for MFA step up

### Fixes

Use actual consent language in the signup payload.

## [1.16.2] - 2022-08-03

### Fixes

Upgrade identity-web-core-sdk version to 1.24.1

## [1.16.1] - 2022-07-29

### Fixes

Fix code validation in passwordless widget.

## [1.16.0] - 2022-07-27

### Changed

Upgrade identity-web-core-sdk version to 1.24.0

### Fixes

Fix consents UI in profile editor component.

## [1.15.0] - 2022-02-22

### Added

- Add ReCaptcha V3 for authentication pages: forgot-password, signup, login-with-password
- Add ReCaptcha V3 for passwordless page

## [1.14.0] - 2021-11-10

### Changed

- If the SMS feature is enabled for the account, login forms accept a phone number as the identifier.
- Version of consents can be displayed.

### Fixes

Signup field `phone_number` for `showAuth` can now be made mandatory.

## [1.13.0] - 2021-08-02

### Changed

- Upgrade minors versions of dependencies.
- Upgrade the ReachFive Core SDK version to [`1.21.0`](https://github.com/ReachFive/identity-web-core-sdk/releases/tag/v1.21.0).
- The widgets handle now the archived consents: a user cannot accept an archived consent, but he can refuse the consent in the [`showProfileEditor`](https://developer.reachfive.com/sdk-ui/showProfileEditor.html) widget.

## [1.12.0] - 2020-06-02

### Changed

Upgrade identity-web-core-sdk version to 1.20.1

## [1.11.7] - 2020-03-09

### Fixes

Fix the values of the `data-test-id` props for the `showAuth` widget.

## [1.11.6] - 2020-01-27

### Fixes

The [`returnToAfterEmailConfirmation`](https://developer.reachfive.com/sdk-ui/showAuth.html#returnToAfterEmailConfirmation) parameter is now taken into account in the 'Signup with biometrics' form.

### Changed

The Instagram social provider is removed.

## [1.11.5] - 2020-12-10

### Fixes

- Update Apple social login button style.
- Upgrade SDK Core dependency version.

### Changed

Revamp of this changelog to follow [Keep a Changelog](https://keepachangelog.com/en/1.0.0) guidelines.

## [1.11.4] - 2020-11-12

### Fixes

Temporary revert the SDK Core dependency version to solve the login with PKCE in hosted pages.

## [1.11.3] - 2020-11-10

### Fixes

- The [showAuth](https://developer.reachfive.com/sdk-ui/showAuth.html) widget can now handle signup with biometrics if
  the `allowWebAuthnSignup` option is enabled. This Features is also available on the Hosted Pages.
- The device's name is now optional in
  the [showWebAuthnDevices](https://developer.reachfive.com/sdk-ui/showWebAuthnDevices.html).

## [1.11.2] - 2020-11-04

### Added

A new check rule for password strength is now displayed on the signup view on
the [showAuth](https://developer.reachfive.com/sdk-ui/showAuth.html) widget.

## [1.11.1] - 2020-10-28

### Fixes

Revert the new check rule for password strength since the wordings are not yet deployed.

## [1.11.0] - 2020-10-28

### Added

New changes were made on the [showAuth](https://developer.reachfive.com/sdk-ui/showAuth.html) widget:

- A new check rule for password strength is now displayed on the signup view.
- The users will be notified when a password contains words contained in the given name, the family name, or the email
  address. These blacklist words will also be taken into account of the password strength.
- The validation errors will be displayed sooner on the form.

## [1.10.1] - 2020-10-19

### Fixes

Revert the latest FIDO2 signup Features since it's breaking the style of Hosted Pages.

## [1.10.0] - 2020-10-16

### Added

The [showAuth](https://developer.reachfive.com/sdk-ui/showAuth.html) widget can now handle signup with biometrics if
the `allowWebAuthnSignup` option is enabled.

## [1.9.0] - 2020-09-16

### Added

Always override account `opt-out` consents.

### Fixes

Fixes the CircleCi job to deploy a new version.

## [1.8.0] - 2020-07-22

### Added

Add custom fields types (email & phone).

## [1.7.0] - 2020-07-08

### Added

- The user can now set the device's name in
  the [showWebAuthnDevices](https://developer.reachfive.com/sdk-ui/showWebAuthnDevices.html) widget.
- The server error messages can now be overload in the `i18n` widget option.

## [1.6.0] - 2020-07-07

### Added

Display a friendly user error message on
the [showWebAuthnDevices](https://developer.reachfive.com/sdk-ui/showWebAuthnDevices.html) widget when the user wants to
add a device already registered.

## [1.5.0] - 2020-07-01

### Added

Add a new widget [showWebAuthnDevices](https://developer.reachfive.com/sdk-ui/showWebAuthnDevices.html) allowing the
management of the user’s registered FIDO2 devices.

## [1.4.1] - 2020-06-18

### Fixes

The UI SDK now uses the latest version of the Core SDK.

## [1.4.0] - 2020-06-15

### Added

Add a new `allowWebAuthnLogin` option to the [showAuth](https://developer.reachfive.com/sdk-ui/showAuth.html) widget to
allow a user to login with biometrics.

## [1.3.0] - 2020-05-29

### Fixes

Call only the validation methods when the field is required or when the value is not empty.

### Added

- Set the default value of the _Remember be_ to `false`.
- Upgrade all the dependencies.

## [1.2.1] - 2020-04-20

### Fixes

The `showRememberMe` check box now properly sets the boolean `persistent` field into `auth` options object with
the `showAuth` component.

## [1.2.0] - 2020-04-17

### Fixes

The UI SDK now uses the latest version of the Core SDK.

## [1.1.0] - 2020-04-16

### Fixes

The [showRememberMe](https://developer.reachfive.com/sdk-ui/showAuth.html#showRememberMe) option is now taken into
account.

## [1.0.1] - 2020-03-19

ReachFive UI SDK is out! 🚀

## [1.0.0-alpha.10] - 2020-02-19

### Added

Improve the UX/UI of the password policy rules validation.

## [1.0.0-alpha.9] - 2020-02-10

### Added

The _display password in clear text_ option can now be enabled on the password reset widget.

## [1.0.0-alpha.8] - 2020-02-06

### Fixes

The UI SDK uses now the latest version of the Core SDK.

## [1.0.0-alpha.7] - 2020-02-06

### Added

Add the `returnToAfterPasswordReset` parameter for reset password and the `returnToAfterEmailConfirmation` parameter for
signup.

## [1.0.0-alpha.6] - 2020-01-22

### Fixes

The bundles are no longer in the `build` folder but in the folder associated with their format (`umd`, `cjs` and `es`).

## [1.0.0-alpha.5] - 2020-01-21

### Fixes

Passwords in the French dictionary were considered good enough while they weren't.

## [1.0.0-alpha.4] - 2020-01-15

### Added

- French weak passwords are now rejected by the password strength policies.
- A UMD bundle is now generated at the build process. It will allow deploying the UI SDK on [unpkg](https://unpkg.com).

## [1.0.0-alpha.3] - 2020-01-07

### Added

- Implement continuous integration pipelines set up with CircleCI (see
  the [CircleCI configuration file](.circleci/config.yml) for more details).
- The widgets labels are now translated in the language specified in the client's configuration.

### Fixes

The eye icon is now correctly displayed in the Auth widget.

## [1.0.0-alpha.2] - 2019-11-06

### Added

- A `data-testid` attribute was added to most of the HTML elements.
- Handle the errors returned at the creation of a password non-compliant to the account's password policy.

## [1.0.0-alpha.1] - 2019-10-21

First version of the SDK Web UI.

[Unreleased]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.19.0...HEAD

[1.19.0]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.18.0...v1.19.0

[1.18.0]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.17.0...v1.18.0

[1.17.0]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.16.2...v1.17.0

[1.16.2]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.16.1...v1.16.2

[1.16.1]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.16.0...v1.16.1

[1.16.0]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.15.0...v1.16.0

[1.15.0]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.14.0...v1.15.0

[1.14.0]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.13.0...v1.14.0

[1.13.0]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.12.0...v1.13.0

[1.12.0]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.11.7...v1.12.0

[1.11.7]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.11.6...v1.11.7

[1.11.6]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.11.5...v1.11.6

[1.11.5]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.11.4...v1.11.5

[1.11.4]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.11.3...v1.11.4

[1.11.3]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.11.2...v1.11.3

[1.11.2]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.11.1...v1.11.2

[1.11.1]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.11.0...v1.11.1

[1.11.0]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.10.1...v1.11.0

[1.10.1]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.10.0...v1.10.1

[1.10.0]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.9.0...v1.10.0

[1.9.0]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.8.0...v1.9.0

[1.8.0]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.7.0...v1.8.0

[1.7.0]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.6.0...v1.7.0

[1.6.0]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.5.0...v1.6.0

[1.5.0]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.4.0...v1.5.0

[1.4.0]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.3.0...v1.4.0

[1.3.0]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.2.1...v1.3.0

[1.2.1]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.2.0...v1.2.1

[1.2.0]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.1.0...v1.2.0

[1.1.0]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.0.1...v1.1.0

[1.0.1]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.0.0-alpha.10...v1.0.1

[1.0.0-alpha.10]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.0.0-alpha.9...v1.0.0-alpha.10

[1.0.0-alpha.9]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.0.0-alpha.8...v1.0.0-alpha.9

[1.0.0-alpha.8]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.0.0-alpha.7...v1.0.0-alpha.8

[1.0.0-alpha.7]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.0.0-alpha.6...v1.0.0-alpha.7

[1.0.0-alpha.6]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.0.0-alpha.5...v1.0.0-alpha.6

[1.0.0-alpha.5]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.0.0-alpha.4...v1.0.0-alpha.5

[1.0.0-alpha.4]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.0.0-alpha.3...v1.0.0-alpha.4

[1.0.0-alpha.3]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.0.0-alpha.2...v1.0.0-alpha.3

[1.0.0-alpha.2]: https://github.com/ReachFive/identity-web-ui-sdk/compare/v1.0.0-alpha.1...v1.0.0-alpha.2

[1.0.0-alpha.1]: https://github.com/ReachFive/identity-web-ui-sdk/releases/tag/v1.0.0-alpha.1

repository: ReachFive/identity-web-ui-sdk

repo_name: ReachFive/identity-web-ui-sdk


text:
## Important note
This module is provided by  publiq vzw (formerly known as CultuurNet) as it is.
We do not provide support, nor do we actively continue to develop this module. Pull Requests will be reviewed when time is available with our developers. However we do appreciate the sharing of bugfixes with us.
If you need active support, we provide it for our API & Widgets, see https://projectaanvraag.uitdatabank.be/ .
As an exception, critical security updates will still be provided if needed.

## Install

Prerequisites:

- php > v7.3 and the php intl extension
- composer installed (http://getcomposer.org/doc/00-intro.md#downloading-the-composer-executable)
- Drupal installed via composer

```bash
composer require cultuurnet/culturefeed-d8
```

## Modules

Please enable only the modules you need.

### Culturefeed api

Provides the API client to connect with Culturefeed. No caching / logging is foreseen in this module.

### Culturefeed user

Currently only provides an option to login and request info of the current __UiTID__ user.

### Culturefeed search api

Provides the api client to search in the events database. Caching / logging is foreseen in this module. (See Activating Debugging)

### Culturefeed search

Basic elements to build up an event search (such as provided by Culturefeed Agenda).

- Abstract search page service to extend on (like Culturefeed Agenda)
- Sort block
- Active filters
- Facets

### Culturefeed agenda
Provides a Culturefeed search page available on 'agenda/search' and detail pages. The blocks provided by this module can be used to extend the detail pages of events, actors and productions. Includes also a simple search form.
This module provides a controller, but all the agenda components are split up into blocks. You can use the default controller or take over the controller via page manager.

### Culturefeed_content
Adds a CultureFeed content field to add a search query to any of your entity types.

## Activating debugging
The debugging system works via monolog. To activate this you will need to install and configure the drupal monolog module (http://drupal.org/project/monolog).

Once monolog is installed, update the 'monolog.channel_handlers' section in the parameters of your services.yml:

```bash
  monolog.channel_handlers:
    culturefeed_search_api: ['untranslated_drupal_log']
```

## License

[Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0.html)

gha_language: PHP


text:
> Cross-platform Linux commands in pure ES6

[![Build Status](https://travis-ci.org/dthree/cash.svg)](https://travis-ci.org/dthree/cash/)
[![Windows Build Status](https://ci.appveyor.com/api/projects/status/286om4y0wbxs69fy?svg=true)](https://ci.appveyor.com/project/dthree/cash)
[![Coverage Status](https://coveralls.io/repos/dthree/cash/badge.svg?branch=master&service=github)](https://coveralls.io/github/dthree/cash?branch=master)
[![Gitter](https://img.shields.io/badge/gitter-join%20chat-brightgreen.svg)](https://gitter.im/dthree/cash?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
[![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/sindresorhus/xo)

Cash is a cross-platform implementation of Unix shell commands written in straight ES6. No native compiling and no external dependencies.

While young, Cash aims to offer an alternative Linux feel on Windows and to open the door to cross-platform bash scripting in a Javascript environment.

```bash
> npm install cash -g
> cash
$
```

### Woah.

Yeah. But it gets better.

 Let's make all commands global on your system:

```bash
> npm install cash-global -g
> ls -lah
```

[Learn more](https://github.com/dthree/cash/wiki/Usage-|-Global)

### Nice, but I only want certain commands

You're covered!

```bash
> npm install cash-ls -g
> npm install cash-grep -g
```

[Learn more](https://github.com/dthree/cash/wiki/Usage-|-Global#installing-individual-commands)

### Wow. But I want this programmatically!

Again, you're in business:

```js
const $ = require('cash');
const out = $.ls('.', {l: true});
```

Not terse enough? How about this:

```js
const out = $('ls -lah');
```

Not :sunglasses: enough? Try this:

```js
require('cash') `
  cp -R ./src ./dest
  ls | grep *-spec.js | cat
  rm ./specResults.html
`;
```

*For even better programmatic Unix commands, check out [ShellJS](https://github.com/shelljs/shelljs).*

[Learn more](https://github.com/dthree/cash/wiki/Usage-|-Programmatic)

### Isn't this impossible to do in Node?

It was, before [Vorpal](https://github.com/dthree/vorpal).

Made with ❤ by [dthree](https://github.com/dthree).

Love it? Give it a :star: or a tweet to help spread the word!

## Notice

This is now an [OPEN Open Source](http://openopensource.org/) project. I am not able to invest a significant amount of time into maintaining Cash and so am looking for volunteers who would like to be active maintainers of the project. If you are interested, shoot me a note.

## Contents

- [Introduction](#introduction)
- [Supported commands](#supported-commands)
- [Configuration (.cashrc)](#configuration)
- [Contributing](#contributing)
- [FAQ](#faq)
- [Team](#team)
- [License](#license)
- [Wiki](https://github.com/dthree/cash/wiki)

## Introduction

Cash is a project working on a cross-platform implementation of the most used Unix-based commands in pure JavaScript and with no external dependencies.

The goal of Cash is to open up these commands to the massive JavaScript community for the first time, and to provide a cleaner, simpler and flexible alternative to applications like Cygwin for those wanting the Linux feel on Windows.

Cash was built with strict attention to nearly exact implementations and excellent test coverage of over 200 unit tests.

## Supported commands

The following commands are currently implemented:

- alias
- cat
- clear
- cd
- cp
- echo
- export
- false
- grep
- head
- kill
- less
- ls
- mkdir
- mv
- pwd
- rm
- sort
- source
- tail
- touch
- true
- unalias

Want more commands?

- [Vote on the next commands](https://github.com/dthree/cash/wiki/Roadmap)
- [Help spread the word:](http://bit.ly/1LBEJ5s) More knowledge of Cash equals more contributors
- [Contribute](#contributing)

## Configuration

Want to configure things to your heart's content? Just add your configurations in a `.cashrc` file (`_cashrc` also works, for Windows folk) and put that in your home directory. This supports anything you can do inside a cash command prompt (`export`ing environmental variables, aliases, etc.).

## Contributing

- [Editing commands](https://github.com/dthree/cash/wiki/Contributing#editing-existing-commands)
- [Adding new commands](https://github.com/dthree/cash/wiki/Contributing)

We are currently looking for Core Team members who can push forward Cash at a rapid rate. Are you an awesome developer up to the challenge? Send me a ping.

### Awesome contributors

- [@nfischer](https://github.com/nfischer): Added `source`, `export`, `true` and `false` commands, among several other contributions.
- [@safinn](https://github.com/safinn): Added `clear` and `tail` commands.
- [@legien](https://github.com/legien): Added `head` command.
- [@cspotcode](https://github.com/cspotcode): Implemented template literal execution.

## FAQ

#### Why Cash?

In its very essence, Cash replaces the Windows CLI prompt (`>`) with the Unix one (`$`), the dollar symbol.

Cash was most fitting in this sense:

> Ask and ye shall receive

```
> cash
$
````

Cash is also a play on the word `bash`, and is actually[\[1\]](https://xkcd.com/906) a recursive acronym for Cash Shell.

Shout out to [@aseemk](https://github.com/aseemk) for donating the name.

#### Doesn't ShellJS do this?

No.

For those who don't know, [ShellJS](https://github.com/shelljs/shelljs) is an awesome Node package that implements UNIX shell commands programatically in JavaScript. Check it out - really. While ShellJS was tremendously helpful in figuring out how to accomplish Cash, the two do not really conflict.

ShellJS gives the feel of UNIX commands in a code environment, but aims to implement the commands in a way that makes sense for a JavaScript library. This means that many commands return JavaScript objects, and some of the rougher and more dangerous edges of bash have been softened a bit.

For example, with cash:
```javascript
$('ls'); // 'node_modules\n'

$('echo foo > foo.txt');
```

With ShellJS:
```javascript
ls(); // ['node_modules'];

echo('foo').to('foo.txt');
```

## Team

| [![David Caccavella](https://avatars.githubusercontent.com/u/10319897?s=130)](https://github.com/dthree) | [![Nate Fischer](https://avatars.githubusercontent.com/u/5801521?s=130)](https://github.com/nfischer) |
|:---:|:---:|
| [David Caccavella](https://github.com/dthree) | [Nate Fischer](https://github.com/nfischer) |

Want to join the team? [Let us know](mailto:threedeecee@gmail.com).

## License

MIT © [David Caccavella](https://github.com/dthree)


text:
# Visual Studio Code
## Migrating from IntelliJ/PyCharm

Open `Preferences -> Extensions` or `Preferences-Keymaps`

```
@recommended:keymaps
```
Search for IntelliJ: You will find [kasecato/vscode-intellij-idea-keybindings](https://github.com/kasecato/vscode-intellij-idea-keybindings)

## Setting up as a Python IDE
### Settings File
Every VS Code project has a `.vscode` directory, which contains a JSON file, called `settings.json`. Whether, you configure your VS Code extensions form their respective UI, or add lines directly to this file, the effect will be the same. This is how a sample `settings.json` file looks like for a particular Python project of mine:

``` json
{
  "python.linting.enabled": true,
  "python.linting.pylintEnabled": false,
  "python.linting.flake8Enabled": true,
  "python.linting.flake8Args": ["--max-line-length=88"],
  "python.pythonPath": "path_to_my_project/venv/bin/python",
  "python.formatting.provider": "black",
  "python.unitTest.unittestEnabled": true,
  "python.unitTest.pyTestEnabled": false,
  "python.unitTest.nosetestsEnabled": false
}
```

repository: preslavrachev/devnotes

repo_name: preslavrachev/devnotes


text:
---
title: "Lenin in Seattle, Stolen like an Artist"
date: "2019-02-26"
path: /lenin-in-seattle
tags: art, creativity, steal-like-an-artist, duchamp, creative-act
layout: post
foldnum: 1
exclude: 0
description: "A new bill is looking to find a replacement for Seattle's iconic Lenin Statue.  I'll tell you, along with why I think the process gives us a caricature view of the social creative act."
featuredImage: "./coverscraph.jpg"
---

A [new bill is looking to find a replacement for Seattle's iconic Lenin Statue](http://mynorthwest.com/1286116/seattle-lenin-statue-replacement-bill/).  I'll tell you, along with why I think the statue's journey gives us a caricature view of the social creative act.

## How it was Made

The story starts with **Bulgarian sculptor Emil Venkov** being *'commissioned'* (forced) to construct a statue of Lenin by the Communist Party of Czechoslovakia. Venkov, a man of will, stuck to the rules but made a creative (and political) decision to show Lenin as the *'bringer of revolution'* rather than a scholar - in this sense, rather than the usual *'gentle-scholar'* Lenin surrounded by books and children, we have an aggressive Lenin surrounded by abstract rifles and arms. Venkov wanted to depict the violence of Lenin. (Considering it passed approval, could they even tell this Lenin was different than the Lenin they were used to propagating? Almost as if it was so real, they did not notice the disturbance.)

T.S. Eliot's famous line can be playfully misappropriated here:

> “Immature poets imitate; mature poets steal; **bad poets deface what they take, and good poets make it into something better, or at least something different.**”

   — T.S. Eliot

Maybe most of us are not ordered by the Communist Party like Venkov, but nevertheless we are 'ordered' by a 'they'.  It threatens you with a status quo, challenges your held values, and entices you with survival. You can be brave and deface by rebelling - leading you to be shunned or alienated most likely - or you can be courageous, nod your head, turn around, and *make something different.*

Under threat of Gulag like Venkov or just good old social alienation, Austin Kleon's Venn diagram of sharing can be applied:

![](./venn_of_share.jpg)

## How it became Art

The statue was installed in 1988 and shortly after, in 1989, we saw the fall of Czechoslovak communism. Destiny would have it that a one **Lewis Carpenter** - originally from Issaquah, Washington - would find it in a scrapyard of Poprad, Slovakia and decide to take it back with him to the States, paying a large amount. More official accounts say Carpenter wanted to preserve the Art despite the unpopularity of Lenin. But I like to think the more accurate [account comes from his former wife](https://www.king5.com/article/news/local/lenin-statue-silent-protest-against-communism-says-family-member/465856661), who says, reflecting back, *"If you ask Lew why he did it, he'd say, for cookies, which for him meant* ***for fun."***

Unfortunately, Carpenter died in a car accident in the States before he could do anything with the statue. The family thought of selling it to a foundry to be melted but the foundry's founder, Peter Bevis, decided to display it in 1995 on private property until a buyer could be found. It's been in Seattle ever since.

The anecdote can highlight a more social discourse of art akin to what comes from **Marcel Duchamp** in his ***'The Creative Act'***:

> "All in all, the creative act is not performed by the artist alone; the spectator brings the work in contact with the external world by deciphering and interpreting its inner qualification and thus adds his contribution to the creative act. This becomes even more obvious when posterity gives its final verdict and sometimes rehabilitates forgotten artists."

   — Marcel Duchamp

Carpenter is the spectator par excellence, bringing the work out of the literal trash and in contact with the world. But it goes further, Carpenter performs the spectator act very consciously - he interprets it. And we often think interpretation is this analytic discourse of academic writings but many times, it's performed in a matter of seconds - Carpenter decides, using his god given spectator rights, that the piece is 'fun', that it is worth showing, that maybe it could attract customers to an authentic Slovakian Restaurant he planned to open.

The Spectator show carries on up to the present where *"the Lenin statue is often decorated, appropriated, or vandalized with various intentions, both whimsical and serious"*. Like an ending to a good romantic comedy, the intentionality Venkov hid in his piece has been uncovered and further expanded and manipulated by the spectators.

The creative act - the Art with a capital A - needs both Venkov *and* Carpenter to be courageous. It takes courage [to have fun with something in the trash.](https://austinkleon.com/2014/02/12/guilty-pleasures/)

## How it Became a Debate

Of course, implied in Duchamp's definition is the indifference of the creative act. In response to protests calling for the removal of Confederate monuments and memorials, the alt-right, in a very *'then-you-have-to-throw-away-one-of-your-things-too'* fashion, protested back that the Lenin statue should also be removed as we should not 'idolize figures who have committed violent atrocities and sought to divide us'. In response to a social condition, the definition of the statue radically shifts back into what the Communist Party truly wanted. As Duchamp said,

> "[the artist] will have to wait for the verdict of the spectator in order that his [artistic] declarations take a social value"

   — Marcel Duchamp

The artist can proclaim his truth from the rooftops but the verdict comes from the crowd on the streets - the spectators decide not only *if* there is a social value but *what* that social value is.

repository: S-Farooq/sblog

repo_name: S-Farooq/sblog


text:
# Connectome

## Showcases

Example **web/dapp** using **Connectome** is https://zetaseek.com.

**ZetaSeek** is a Modular Decentralized Search Engine in Development.

💡 You can have your Own Zeta Node.

## Connectome development

Visit [DMT SYSTEM](https://dmt-system.com).

repository: uniqpath/dmt

gha_license_id: NOASSERTION

repo_name: uniqpath/dmt


text:
**Mad Woman** 是由美国女歌手Taylor
Swift录唱的一首歌曲，被收录在Taylor于2020年7月24日发行的第八张录音室专辑《Folklore》，为其所属专辑中的第12首歌曲。

如果说Look What You Made Me Do 是对曾伤害过Taylor的人的无差别扫射，那么 _Mad Woman_
就应该是对侃爷和卡戴珊的定向狙击。舒缓平静的配乐，愤怒怨恨的歌词，真的有点钝刀子割肉那味了，歌词诉说的是Taylor被陷害的整个心理变化过程。

同时，网站还为大家提供了《[ **Cardigan**](Music-11837-Cardigan-Taylor-Swift.html
"Cardigan")》曲谱下载

歌词下方是 _Mad Woman钢琴谱_ ，大家可以免费下载学习。

path: /流行/Mad Woman-Taylor Swift/README.md


text:
# MYBLOG
#### This is a blog that contains different poetic pieces. It allows users to comment and subscribe on the blog and subscribe to new blogs

#### By ****Angeline Atieno****

## Requirements
* Browser
* Good internet connection

## How to use
* Open the site
* To view blog;
    * Click on blog title.

## Technologies used
* HTML

* CSS

* FLASK(PYTHON)

###### Deployment
* HEROKU

### Meta
Email me at - [Angeline Atieno<EMAIL_ADDRESS>

Github - [atienoanji](https://github.com/atienoanji)

### License
This is an opensource software therefore the license is [MIT](https://choosealicense.com/licenses/mit/)

Copyright (c) 2018 **Legacy Softwares**

repository: atienoanji/myblog

repo_name: atienoanji/myblog


text:
---
title: Emoji App
description: A simple app that adds and removes emojis from the beginning and end of a line on the site using basic array concepts and methods.
skills: HTML, CSS, Javascript
image: /assets/img/projects/emojiapp-thumbnail-1.jpg
date: 2021-05-20
tags:
  - code-projects
layout: layouts/code-projects.njk
webLink: https://ximenavf92.github.io/my-emoji-app/
githubLink: https://github.com/ximenavf92/my-emoji-app
---

Emoji app built as a project for Scrimba's Front End Career path. It covers the basics of arrays and mutating them using `push()`, `pop()`, `shift()`, and `unshift()`.

[![Ximena's Emoji App screenshot showing a series of emojis. Below an input bar with buttons to add and remove enojis.](/assets/img/projects/emoji-app-ss.jpg)](https://ximenavf92.github.io/my-emoji-app/)

gha_language: CSS


text:
## Power Translator - A simple way to use cloud translation services
PowerTranslator gives you a no-hassle way to use Google and Microsoft cloud translation services in react native.

![Power Translator Demo](https://github.com/danialkalbasi/react-native-power-translator/blob/master/power-translator-demo.gif)

An example of how to use it: [Download Demo](https://gist.github.com/danialkalbasi/350d960a6d28016a3331f6a9c7baefa4)

### Install
```
npm i react-native-power-translator --save
```
### 1. Import module
```
import { PowerTranslator, ProviderTypes, TranslatorConfiguration, TranslatorFactory } from 'react-native-power-translator';
```

### 2. Set PowerTranslator configuration
```
TranslatorConfiguration.setConfig('Provider_Type', 'Your_API_Key','Target_Language', 'Source_Language');

// Example
TranslatorConfiguration.setConfig(ProviderTypes.Google, 'xxxx','fr');
```
Note: The source of the language is optional, if you are not specify it, the provider will detect the language for you.

### 3. Add translation
There are a couple of ways to use this module based on different use case.

**Use it as a component**
```
<PowerTranslator text={'Engineering physics or engineering science refers to the study of the combined disciplines of physics'} />
```

**Use it as a service/class**
The return value will be a promise that returns translated text.
```
const translator = TranslatorFactory.createTranslator();
translator.translate('Engineering physics or engineering science').then(translated => {
    //Do something with the translated text
});
```
You can also pass in an optional language parameter to translate to desire languagues (default use current config)
```
const translator = TranslatorFactory.createTranslator();
translator.translate('Engineering physics or engineering science', 'fr').then(translated => {
    //Do something with the translated text which would be in French
});
```

## Complete reference
* **PowerTranslator**: A react component to translate your texts.
* **ProviderTypes**: List of the cloud provider types. There are two providers is available. ProviderTypes.Google for [google translate](https://cloud.google.com/translate/docs/) and ProviderTypes.Microsoft for [microsoft translator text](https://azure.microsoft.com/en-us/services/cognitive-services/translator-text-api/) cloud service.
* **TranslatorFactory**: It creates a suitable translator instance, based on your configuration.
* **TranslatorConfiguration**: It initializes and keeps the translator configuration.

## Props list
Here is the list of props:
* **text**: The text you need to translate. Required.
* **onTranslationStart**: Get triggered when the text translation gets started.
* **onTranslationEnd**: Get triggered when the text translation ends.
* **style**: Styles for translated text. All the react native Text styles props are valid.

## Inspiration on how to use it
A few use cases that is possible to cover with this module.
* **As a fallback translation**: In case your primary translation service/library failed for some reason. It is possible to use the cloud service next to your translation service/library as a fallback.
* **As a quick solution**: Build a translation service from scratch is not easy and quick. If you don't want to invest in building one, the cloud APIs can save you a huge amount of time.

## Cloud service API keys
To get Google translator api key, visit [here](https://cloud.google.com/translate/docs/getting-started)
To get Microsoft azure translator api key, visit [here](https://www.microsoft.com/en-us/translator/getstarted.aspx)