text:
# Samchon Simulation Cloud
*Samchon Simulation Cloud* is my private solution not publishing source codes, however, I introduce this *Samchon Simulation Cloud* as top of example projects using **Samchon Framework**. Any solution can't represent **Samchon Framework** much better than this *Samchon Simulation Cloud*.

The *Samchon Simulation Cloud* is a cloud solution for:
  - Inquirying corporate
    - Price and summarized information
    - Financial statement & index
    - Comparison
  - Retrieving corporations with specified condition via Nam-Tree.
  - Simulation
    - Deduct the optimal trading condition via Nam-Tree and Back-testing.
    - Future Price with Montecarlo Simulation.
  - Those're all for Automatic System Trading.

Reading the manual and using the provided demo, how about estimating which modules are used in which parts.

## Used Modules
#### C++
  - [Library](CPP-Library)
    - [XML](CPP-Library-XML)
    - [Case Generator](CPP-Library-Case_Generator)
    - [Genetic Algorithm](CPP-Library-Genetic_Algorithm)
    - EventDispatcher
    - Virtual File Tree
    - HTTP Loader
  - [Protocol](CPP-Protocol)
    - [Basic Components](CPP-Protocol-Basic_Components)
    - [Standard Message](CPP-Protocol-Standard_Message)
    - [Cloud Service](CPP-Protocol-Service)
    - [External System](CPP-Protocol-External_System)
      - [Parallel System](CPP-Protocol-Parallel_System)
  - Nam-Tree

#### Flex
  - Library
    - Virtual File Tree
  - Protocol
    - Standard Message
    - Cloud Application
  - Nam-Tree

## Demo
  - [Samchon Simulation Cloud](http://samchon.org/simulation)
  - [YouTube Video - Korean](https://youtu.be/oKk6qwwWUM8?t=7m7s)

## Manual
### 1. Top Menu
#### 1.1. Basic Menu
![Basic Menu](http://samchon.github.io/simulation/images/manual/basic_menu.png)

  1. Main: If you click a buttion in Main, new window will be opened.
    - A. Price
      - Inquiry stock price
      - Inquiry summarized financial information
	- B. Finance
	  - Inquiry financial indices
	  - Inquiry financial statements
	- C. Retrieve
	  - Find matched corporation via *Nam-Tree*
	  - Condition in *Retrive* can be used in *Back-Testing*
	- D. Comparision
	  - Compare relative price
	  - Compare financial indices
	- E. Back Test
	  - Deduct best trading condition via *Back Testing*
	  - The trading condition is composed with *Nam-Tree*
	  - The trading condition can be automatically compowsed via *exploration*
	- F. Montecarlo
	  - Montecarlo Simulation
	  - Predict future price
	  - Reference distribution (risk) for determination
	- G. Board

  2. Export: Export current's screen or data to document.
    - A. To Word -> *.doc
	- B. To Excel -> *.xls
	- C. To HTML -> *.html
	- D. To Picture -> Screenshot and save as *.png

  3. Help
    - A. Manual -> Samchon Simulation Cloud Manual
	- B. Full Screen -> Convert screen to full-size
	- C. About -> Information about Samchon Simulation Cloud and developer Jeongho Nam

#### 1.2. Simulation Menu
![Simulation Menu](http://samchon.github.io/simulation/images/manual/simulation_menu.png)

  1. New File: Initialize the simulation configurations
    - Iinitialize configurations of simulation.

  2. Open File
    - Load simulation configurations.

  3. Save File
    - Save current's simulation configurations.
    - It doesn't mean result of simulation but parameters for execution.

  4. Interaction
    - Get simulation settings from external program that user specified.
    - This program (Samchon Simulation Cloud) sends historical data, to external program, which will be used to deduct simulation configurations. The external program sends simulation configurations again and the simulation begins.

  5. Programming
    - Sinluation configurations are derived from user-defined programming code (script).
    - User writes the programming code, and Samchon Simulation Cloud compiles it and the compiled program will follow steps in *4. Interaction.*

  6. Nam-Tree
    - Deduct configurations via *Nam-Tree*.

### 2. Inquiring corporates
#### 2.1. Price
![Inquiry - Price](http://samchon.github.io/simulation/images/manual/price.png)

  1. Date range of price data
    - Starting date ~ final date

  2. Minimap Chart
    - You can resize or move the main candle chart by moving or resizing the minimap chart.

  3. List of technical indices
    - You can add or pop technical charts by clicking those buttons.
    - Of course, you also can swap the position between those technical charts.

  4. You can select a financial standard for summarized financial information.

#### 2.2. Financial statements
![Inquiry - Finance](http://samchon.github.io/simulation/images/manual/finance.png)

  1. You can set the type of financial statement.
    - Financial indices
    - Profit & Losses
    - Balanced Sheet
    - Cash Flow

  2. You can set the standard and period of financial statement.
    - Standard: GAAP & IFRS
    - Period: Year & Quarter

  3. You can select multiple accounts (rows) on report. If you select, then line charts are drawn.
    - Top graph: Original data
    - Bottom graph: Growth ratio compare with before (T / (T-1))

#### 2.3. Comparison
![Inquiry - Comparison](http://samchon.github.io/simulation/images/manual/comparison.png)

  1. Compare relative price
  2. Compare relative financial indices
  3. Drag corporations from left grid to right what you want to compare. If you double click a corporation in left grid, recommended comparison list will be loaded.
  4. Price data range and financial standard to be compared.

### 3. Nam-Tree
#### 3.1. Composition Principle
###### Nam-Tree is a kind of filtering function that tree-structured.
![NamTree Diagram - Filtering](http://samchon.github.io/simulation/images/manual/namtree_symbol_filter.png)

Like the picture on top, data is inserted into Nam-Tree, and through the filtering out, and return the result. This Nam-Tree's shape and structure is seemed like a decision-tree.

Before utilization, let's ssee the composition principle.

###### Vertical is AND (x), Horizontal is OR(+)
![NamTree Diagram - Axis](http://samchon.github.io/simulation/images/manual/namtree_symbol_tree.png)

AND condition between different level, same level under a same hierarchy is OR. But in fact, not AND or OR condition, but X (multiply) condition between different level which is expressed as parent and child relationship, + (plus) conditions between same level under the same parent.

###### Each elements are criteria (conditional equation)
![NamTree Diagram - Axis](http://samchon.github.io/simulation/images/manual/namtree_symbol_formula.png)

Each element is a criteria:
  - [Left Side] [__compare expression__] [Right side]) ? 1 : 0

If the condition is true, then returns 1. Else then returns 0.

###### Each side in criteria can has weight
As I've mentioned, each criteria’s condition is right, then return 1, else false 0. If you add a weight in here then return (1 X Wi) when true, false is 0, too.
  - [Left Side] [__compare expression__] [Right side]) ? Wi : 0

You can reflect importance by this weight, and you can even adjust minus weight so that you can reflect minus weight (reverse importance), too.

###### You can insert programming code in each side
You can insert not only value to each side, but also user defined function (programming code) so that makes express dynamically.

###### You can deduct the best value to side by optimization: named explore
If you set a **side** to explore, then *Samchon Simulation Clloud* finds the optimization value
It can be used usefully in Back-testing.

#### 3.2. Layout
##### 3.2.1. Main Layout
![Nam-Tree Layout](http://samchon.github.io/simulation/images/manual/namtree_layout.png)

  1. Nam-Tree Grid
    - A hierarchical grid expressing Nam-Tree’s tree structure.

  2. Nam-Tree criteria (A record)
    - Each criteria in Nam-Tree is matched with a record in grid.
    - Like the top picture, if you select a criteria (record) then, *3. Left side* and *3. Right side* are displayed in *3. Parameter container*.

  3. Parameter container
    - Display the left side and right side of 2. Nam-Tree criteria which is selected. You can edit each side in here.

  4. User defined function list
    - I told you that you can insert not only value to each side, but also user defined function (programming code) so that makes express dynamically at a page before.
    - This is the user-defined function list and you can adjust the functions to *3. Each side* in *2. Criteria*.

##### 3.2.1. Nam-Tree Grid
![Nam-Tree Grid](http://samchon.github.io/simulation/images/manual/namtree_layout_grid.png)

  1. New Filter
    - Add a filter under the selected criteria.
    - This filter acts like this expression:
	  - (Criteria result from the children [\__compare expression\__] [Right side]) ? Wi : 0

  2. New Criteria
    - Add a new criteria under a selected criteria.

  3. Left Term and Right Term
    - Display selected criteria’s left and right side.

  4. Operator
    - Display compare expression (>, <, ==, >=, etc.)
    - You can directly change the compare expression by clicking it.

  5. Weight
    - Display the weight on each criteria.
    - Like the *4. Operator*, you can edit it directly in grid’s record.

  6. Initialization, opening, saving files, etc.

##### 3.2.2. User Defined Function Manager
###### First, Definition
![Nam-Tree Function Manager - Definition](http://samchon.github.io/simulation/images/manual/namtree_layout_function1.png)

  1. Opposite item
    - You can define opposite item as a pair.
    - If this opposite item is set up and when you input this function to a side, then this opposite function will be inserted into the other side automatically.

  2. Explore configurations
    - Configurations for optimization.
      - Minimum and Maximum value
      - Accuracy

  3. Parameters
    - Set parameters.
    - Components of parameter
      - Name
      - Data type
      - Initial value.

  4. Determined parameter candidate list
    - You can set candidate set for parameter.
    - Those candidates will be shown items in a ComboBox.

###### Second, Script
![Nam-Tree Function Manager - Script](http://samchon.github.io/simulation/images/manual/namtree_layout_function2.png)

Insert user-defined function code.

  1. Header
    - A code that will be run after compiled rightly.

  2. Get Function
    - A function that will be called by criteria’s a Side.

  3. Composer Function
    - A function that will be called when 2. Get Function was called first.

#### 3.3. Example; Retrieving Corporation
![Nam-Tree Example Model](http://samchon.github.io/simulation/images/manual/retrieve.png)
``` ruby
Sum of weighted value is over 3 IN
(
	Disparity 5 is less than 1.05, +
	Disparity 20 is less than 1.08 AND
	(
		VR 20 is less than 1.5 OR
		Psychological Line (PL) is over 0.6
	) +
	CCI 20 is less than -50
)
OR
Debt ratio is under 2.0 (200%) AND
	Matches over 2 IN
	(
		Liquidity ratio is over 1.0 (100%),
		Quick ratio is over 0.8 (80%),
		Operating profit growth ratio is over .08 (8%)
	)

```

### 4. Simulation
#### 4.1. Back-testing
##### 4.1.1. What Back-testing is?
Back-testing means act a virtual trading not to now but to previous time point. It is used to proof one’s own algorithm may be effective or deduct optimized algorithm to use real-trading.

##### 4.1.2. How to process
|
----|----
Select an interaction used to trading. | Select target corporations and click “Do Test”.
|
Set configurations and click “Execute”. | After simulation is finished, the result screen comes.

Back-testing supplies three types of interaction
  1. Interaction
    - Trade by user-determined external program

  2. Programming
    - Trade by user-defined programming code.
    - If you create a programming file, then example code is already wrote in.
    - Comprehend by the example code.

  3. Nam-Tree
    - Trade by Nam-Tree
    - Filtered out value by Nam-Tree means the trading volume.
	  - Preliminary Buying & Determined Buying, Selling

##### 4.1.3. Result Screen
###### Return Grid
![Back-testing Result Grid](http://samchon.github.io/simulation/images/manual/backtesting_result.png)

Displays trading result on each algorithm.
  - Value & Volume (Bought, Sold)
  - Normal return and hypothesis return for real and nominal return.

If you double-click a record, then you can see the Detailed-transaction Candle chart.

###### Detailed Transaction Candle Chart.
![Back-testing Detailed Transaction Chart](http://samchon.github.io/simulation/images/manual/backtesting_result_detail.png)

This is opened when you double-click a record from ~~Return grid~~.

It’s almost seemed like the Candle chart what we have seen in ~~Inquiry – Price~~. The only difference with it is Detailed-transaction Candle chart has a new index, “Trade History”

Of course, you can export this chart to document or save screenshot.

##### 4.1.4 Return Comparison
![Back-testing Return Comparison](http://samchon.github.io/simulation/images/manual/backtesting_return.png)

If you click the button “Result Comparison” of last tab menu, you can see all algorithm’s return visually and efficiently. This is the reason why this back-testing system can test multiple algorithms at once, for the visualization.

  1. If you open a folder of a record, then a column chart will be opened.
    - In this case, you can compare a corporate return with multiple algorithms.

  2. You can see plot chart of return’s distribution for each algorithm.
    - You can the series of plot chart by setting up in orange circled grid-combo box.
    - Set algorithm name and return type to each-axis.

##### 4.1.5. Trading Method via Nsm-Tree
###### Layout
![Back-testing Nam-Tree Layout](http://samchon.github.io/simulation/images/manual/backtesting_namtree.png)

  1. Algorithm List Grid
    - Back-testing supports multiple algorithm simulation at once as we’ve seen.
    - This grid is for the multiple algorithm simulation. Each record means a trading algorithm.

  2. Back-testing Nam-Tree for each algorithm
    - Each algorithm pairs with a tab-navigator’s tab. Of course, there’s a Nam-Tree set for each algorithm and tab-navigator’s tab.

  3. Nam-Tree for Preliminary Buying
    - Nam-Tree for preliminary buying.
    - In Back-testing, deduct a candidates first and determine whether to buy or not by the next step, determining.

  4. Determined Buying

  5. Nam-Tree for Selling

###### Optimization; Explore
![Back-testing Nam-Tree Explore](http://samchon.github.io/simulation/images/manual/backtesting_namtree_explore.png)

In back testing, you can optimize trading condition by the function, “explore”.

Set a Side to explore, then Samchon Simulation will retrieve the optimization value.

Additionally, you can see the exploration path like bottom picture.

![Back-testing Nam-Tree Explore](http://samchon.github.io/simulation/images/manual/backtesting_result_explore.png)

#### 4.2. Montecarlo Simulation
##### 4.2.1. What Montecarlo Simulation is?
Assumes that price moves as random walk and the random walk follows normal distribution, generate future price by simulation several times (at least 1,000), deduct the distribution of simulated price.

![Montecarlo Function Formula](http://samchon.github.io/simulation/images/manual/montecarlo_formula.png)

Wt means norm.s.inv(rand()) in excel, which means random variable follow normal distribution Z(0, 1), inverse function of cumulated normal distribution.

The value user have to input is the *mean* and *standard deviation*.

##### 4.2.2. Result Screen
###### Result Grid
![Montecarlo Simulation Result Grid](http://samchon.github.io/simulation/images/manual/montecarlo_result.png)

After simulation, you can see the mean, standard deviation of not user inputted, but result of simulated set. Also, of course, if you double-click the record, then you can see the detailed-.

##### 4.2.3. Simulation Detailed Histogram
###### Return Distribution
![Montecarlo Simulation Detailed Result 1](http://samchon.github.io/simulation/images/manual/montecarlo_result_detail1.png)

Displays a distribution of return by normal and cumulative graph.

###### Multiple simulated price graph
![Montecarlo Simulation Detailed Result 2](http://samchon.github.io/simulation/images/manual/montecarlo_result_detail2.png)

Display all graphs for each simulated price.

But as the reason of performance and validation, only 100 maximum simulations are be displayed.

### 5. Documentation
![Export Menu](http://samchon.github.io/simulation/images/manual/export.png)

Top menu in all page has a component **"Export"**.

From inquiring corporate data to simulation result, you can save and export them to word, excel or html document. You also can capture a screenshot to png file.

###### All configurations used in Simulation also can be saved.
![Export Menu](http://samchon.github.io/simulation/images/manual/backtesting_namtree_explore.png)

Of course, as you could save your configurations, you can open and save the simulation configurations whenever you want.

repository: DubledPark/framework

repo_name: DubledPark/framework


text:
# Authy 2FA Extractor
![npm version](https://img.shields.io/npm/v/authy-extractor?style=for-the-badge)
![npm downloads](https://img.shields.io/npm/dt/authy-extractor?style=for-the-badge)
![license](https://img.shields.io/npm/l/authy-extractor?style=for-the-badge)
![github issues](https://img.shields.io/github/issues/sszczep/authy-extractor?style=for-the-badge)
![github stars](https://img.shields.io/github/stars/sszczep/authy-extractor?style=for-the-badge)

![gif](https://user-images.githubusercontent.com/21238816/123828548-e4197380-d901-11eb-96f0-6eda8556972d.gif)

Fast and easy way to backup 2FA tokens from Authy.

## Usage

Simply type ```npx authy-extractor``` in terminal and follow on-screen instructions.

license: MIT

repository: taosut/authy-extractor

branch_name: refs/heads/main

extension: md

license_type: permissive

repo_name: taosut/authy-extractor


text:
# Flat

Part of the [Corinthia](http://corinthia.io) project.

Flat (Formal LAanguage Transformation) is an experimental programming language
for parsing, transforming, and pretty-printing any data format that can be
expressed as a [Parsing Expression Grammar (PEG)] [1].

Its purpose is to provide an easy way of dealing with file formats like
Markdown, LaTeX, and org-mode which use a custom grammar, rather than a
standardized meta-format like XML or JSON.

Initially, the intention is to simply provide a parser interpreter (similar to a
parser generator of the bison/flex variety) such that we can get an abstract
syntax tree from a file, from which further processing can be done. The plan is
to later extend it to include a domain-specific language for expressing
transformations between different grammars, similar to [Stratego/XT] [2].

To understand PEGs, read the following papers:

[Parsing Expression Grammars: A Recognition-Based Syntactic Foundation](http://bford.info/pub/lang/peg.pdf). Bryan Ford, POPL, January 2004.

[Packrat Parsing: Simple, Powerful, Lazy, Linear Time](http://bford.info/pub/lang/packrat-icfp02.pdf). Bryan Ford. ICFP, October 2002.

[1]: http://bford.info/packrat

[2]: http://strategoxt.org

repository: corinthia/corinthia-flat

branch_name: refs/heads/master

repo_name: corinthia/corinthia-flat


text:
# Migration Guide

### Migrating from v3 to v4

Most of the changes are related to the consistency of field, method and class names.

The benefit of having these consistencies allow the users of library to have predictable and consistent usage.

It also allows us to update our library quickly by using code generation in future releases.

The following contain all changes from v3 to v4.

#### Schedules
* Rename `ChargeScheduling` and `TransferScheduling` to `ChargeSchedule` and `TransferSchedule` respectively.

#### Cards
* Change order of params
  - `Card.UpdateRequestBuilder(cardId, customerId)` contains wrong order of params (it should be `Card.UpdateRequestBuilder(customerId, cardId)`.

  - `Document.GetRequestBuilder(documentId, disputeId)` to `Document.GetRequestBuilder(disputeId, documentId)`

#### Date & Time
  - `Dispute.closedDate` -> `closedAt` (`closed_at` in API)
  - `Receipt.issuedDate` -> `issuedOn` (`issued_on` in API)
  - `Occurrence.scheduleDate` -> `scheduleOn` (`scheduled_on` in API)
  - `Occurrence.retryDate` -> `retryOn` (`retry_on` in API)
  - `Schedule.startDate` -> `startOn` (`start_on` in API)
  - `Schedule.endDate` -> `endOn` (`end_on` in API)
  - `Schedule.nextOccurrencesDates` -> `nextOccurrencesOn` (`next_occurrences_on` in API)

### Migrating to v3

The alteration made in the v3.0.0 of `omise-java` are breaking changes and would require code changes
from your side if you have already been using this library from previous versions. We have put
together a guide to make this process easier by pointing the changes to you. You can find the complete [version 3 migration guide here][1].

[1]: https://www.omise.co/omise-java-v3-migration

repository: omise/omise-java

gha_language: Java

gha_license_id: MIT

repo_name: omise/omise-java


text:
# Cylon.js For Pinoccio

Cylon.js (http://cylonjs.com) is a JavaScript framework for robotics and
physical computing using Node.js

This repository contains the Cylon adaptor for the [Pinoccio](https://pinocc.io/) mesh-networked microcontroller. The implementation uses the [Pinoccio-IO](https://github.com/soldair/pinoccio-io) node module from [@soldair](https://github.com/soldair/). Thank you!

Want to use Ruby on robots? Check out our sister project Artoo (http://artoo.io)

Want to use the Go programming language to power your robots? Check out our
sister project Gobot (http://gobot.io).

For more information about Cylon, check out our repo at
https://github.com/hybridgroup/cylon

[![Build Status](https://secure.travis-ci.org/hybridgroup/cylon-pinoccio.png?branch=master)](http://travis-ci.org/hybridgroup/cylon-pinoccio) [![Code Climate](https://codeclimate.com/github/hybridgroup/cylon-pinoccio/badges/gpa.svg)](https://codeclimate.com/github/hybridgroup/cylon-pinoccio) [![Test Coverage](https://codeclimate.com/github/hybridgroup/cylon-pinoccio/badges/coverage.svg)](https://codeclimate.com/github/hybridgroup/cylon-pinoccio)

## How to Install

Install the module with:

    $ npm install cylon cylon-pinoccio

## How to Use

### Blink

```javascript
var Cylon = require('cylon');

Cylon.robot({
  connections: {
    pinoccio: {
      adaptor: 'pinoccio',
      token: '[your token]',
      troop: '[your troop ID]',
      scout: '[your scout ID]'
    }
  },

  devices: {
    led: { driver: 'led', pin: 'D5' }
  },

  work: function(my) {
    every((1).second(), my.led.toggle);
  }
}).start();
```

### Built-In Features

You can also access the built-in features of the Pinoccio such as the LED and Power status:

```javascript
var Cylon = require('cylon');

Cylon.robot({
  connections: {
    pinoccio: {
      adaptor: 'pinoccio',
      token: '[your token]',
      troop: '[your troop ID]',
      scout: '[your scout ID]'
    }
  },

  devices: {
    led: { driver: 'pinoccio-led' },
    power: { driver: 'pinoccio-power' },
  },

  work: function(my) {
    every((1).second(), my.led.toggle);
  }
}).start();
```

We currently have drivers for the following built-in Pinoccio devices:

- LED
- Power

## How to Connect

You need to have an access token generated using the Pinoccio cloud. The easiest way to do this is to use curl:

    curl -X POST -v --data<EMAIL_ADDRESS>https://api.pinocc.io/v1/login

It will return a JSON payload that contains the access token:

    < HTTP/1.1 200 OK
    < content-type: application/json
    < Date: Sat, 21 Jun 2014 16:08:05 GMT
    < Connection: close
    < Transfer-Encoding: chunked
    <
    {"data":{"token":"thisisthetokenhere","account":1234,"perms":true}}

## Documentation

We're busy adding documentation to our web site at http://cylonjs.com/ please check there as we continue to work on Cylon.js

Thank you!

## Contributing

* All patches must be provided under the Apache 2.0 License
* Please use the -s option in git to "sign off" that the commit is your work and you are providing it under the Apache 2.0 License
* Submit a Github Pull Request to the appropriate branch and ideally discuss the changes with us in IRC.
* We will look at the patch, test it out, and give you feedback.
* Avoid doing minor whitespace changes, renamings, etc. along with merged content. These will be done by the maintainers from time to time but they can complicate merges and should be done seperately.
* Take care to maintain the existing coding style.
* Add unit tests for any new or changed functionality & Lint and test your code using [Grunt](http://gruntjs.com/).
* All pull requests should be "fast forward"
  * If there are commits after yours use “git rebase -i <new_head_branch>”
  * If you have local changes you may need to use “git stash”
  * For git help see [progit](http://git-scm.com/book) which is an awesome (and free) book on git

## Release History

Version 0.9.0 - Compatability with Cylon 1.0.0

Version 0.8.0 - Compatability with Cylon 0.22.0

Version 0.7.0 - Compatability with Cylon 0.21.0

Version 0.6.0 - Compatability with Cylon 0.20.0

Version 0.5.0 - Compatability with Cylon 0.19.0

Version 0.4.0 - Compatability with Cylon 0.18.0

Version 0.3.0 - Compatability with Cylon 0.16.0

Version 0.1.0 - Initial release

## License

Copyright (c) 2014 The Hybrid Group. Licensed under the Apache 2.0 license.

repository: johan--/cylon-pinoccio

repo_name: johan--/cylon-pinoccio


text:
# ViewAnimationSample

This is a sample project for a [blog post](https://wsutina.net/2016/10/20/view-animation-with-constraints/) to demostrate view animation with contraints.

![demo](Images/preview.gif)

-- Tina 😊

repository: wsutina/ViewAnimationSample

repo_name: wsutina/ViewAnimationSample


text:
# Important

The scripts described below are *deprecated*.  They should be replaced with the [Packager Plugin](https://bintray.com/rainai/maven/packager).  Please refer to the [Packager Plugin documentation site](https://rexmtorres.github.io/Packager/docs/) for more information.

*DEPRECATED INFO BELOW*
======

## Custom Build Scripts

These are a set of helper methods to help set up Gradle tasks for commonly used actions.  To use this in your Android Studio Gradle projects, apply this script into your module by adding:
```gradle
apply from: 'https://rexmtorres.github.io/Packager/deprecated/scripts/rmt.gradle'
```

## Available Methods

After applying the script, you will have access to the following methods described below.

### **exportAar**
Exports the AAR and extracts the JAR (inside the AAR) into the specified location renaming the files to the specified name.

```gradle
exportAar(variant, destFolder, baseFileName)
```
* **variant**: *LibraryVariant* - library build variant to be processed
* **destFolder**: *String* - path to where the AAR and JAR files will be exported
* **baseFileName**: *String* - file name to be used for the AAR and JAR files
(i.e. output files => *<baseFileName>.aar* and *<baseFileName>.jar*)

###### See also [libraryVariants](https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.LibraryExtension.html#com.android.build.gradle.LibraryExtension:libraryVariants), [build variants](https://developer.android.com/studio/build/build-variants)

---

### **exportApk**
Exports the APK into the specified location.

```gradle
exportApk(variant, destFolder, baseFileName, unsignApk)
```
* **variant**: *ApplicationVariant* - application build variant to be processed
* **destFolder**: *String* - path to where the APK file will be exported
* **baseFileName**: *String* - file name to be used for the APK file (i.e. output file => *<baseFileName>.apk*)
* **unsignApk**: *boolean* - indicates whether to remove the signing info from the exported file
(if originally signed)

###### See also [applicationVariants](https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.AppExtension.html#com.android.build.gradle.AppExtension:applicationVariants), [build variants](https://developer.android.com/studio/build/build-variants)

---

### **exportProguardMapping**
Copies the Proguard map files into a specified location.

```gradle
exportProguardMapping(variant, outputFolder)
```
* **variant**: *BaseVariant* - build variant to be processed
* **outputFolder**: *String* - path to where the Proguard map files will be placed

###### See also [BaseExtension](https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.BaseExtension.html), [build variants](https://developer.android.com/studio/build/build-variants), [libraryVariants](https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.LibraryExtension.html#com.android.build.gradle.LibraryExtension:libraryVariants), [applicationVariants](https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.AppExtension.html#com.android.build.gradle.AppExtension:applicationVariants)

---

### **createJavaDoc**
Generates JavaDoc with support for embedding code snippets with syntax highlighting through [SyntaxHighlighter v3.0.83](http://alexgorbatchev.com/SyntaxHighlighter/) from Alex Gorbatchev.

```gradle
createJavaDoc(variant, additionalSourceFiles, additionalClasspathFiles, excludedFiles, javaDocTitle, javadocMemberLevel, archiveName, outputPath)
```
* **variant**: *BaseVariant* - build variant to be processed
* **additionalSourceFiles**: *ConfigurableFileCollection* - additional source files to be included in the Javadoc.  May be null.  The default source files point to: ***variant.javaCompile.source***
* **additionalClasspathFiles**: *ConfigurableFileCollection* - - additional classes to be referenced in the Javadoc.  May be null.  The default class path points to: ***variant.javaCompile.classpath.files, android.jar, annotations.jar***
* **excludedFiles**: *List* - list of source files to be excluded from the Javadoc.  May be null.
* **javaDocTitle**: *String* - Javadoc title
* **javadocMemberLevel**: *[JavadocMemberLevel](https://docs.gradle.org/current/javadoc/org/gradle/external/javadoc/JavadocMemberLevel.html)* - visibility level of the classes, methods, variables to be included in the Javadoc.  This corresponds to the *-public*, *-protected*, *-package* and *-private* options of the Javadoc executable.
* **archiveName**: *String* - file name of the zip file to be created that will contain the generated Javadoc.
* **outputPath**: *String* - path to where the Javadoc zip file will be placed

**Note:**

I'm thinking of deprecating this API.  The original purpose of this API was to generate Javadocs w/ UML diagams generated through the [yWorks UML Doclet](https://www.yworks.com/downloads#yDoc) from yWorks and have code snippets w/ syntax highlighting through [SyntaxHighlighter](http://alexgorbatchev.com/SyntaxHighlighter/) from Alex Gorbatchev.  While configuring your own [Javadoc](https://docs.gradle.org/current/dsl/org.gradle.api.tasks.javadoc.Javadoc.html) task gives you much more flexibility, setting up yWorks was a pain.  And so, I created this helper function to ease the set up.  Unfortunately, ***yWorks UML Doclet is not compatible w/ Java 8 and newer versions***.  So, I had to remove yWorks set up in this API.  In which case, you would probably be better of configuring your own [Javadoc](https://docs.gradle.org/current/dsl/org.gradle.api.tasks.javadoc.Javadoc.html) tasks.  This API still supports SyntaxHighlighter, though.

---

### **calculateLinesOfCode**
Generates step count of the source code using [Amateras StepCounter](http://amateras.osdn.jp/cgi-bin/fswiki/wiki.cgi?page=StepCounter).

  ```gradle
  calculateLinesOfCode(variant, outputDir, outputFile)
  ```
  * **variant**: *BaseVariant* - build variant to be processed
  * **outputDir**: *String* - path to where the step count file will be placed
  * **outputFile**: *String* - file name of the step count file

## Usage

The methods will generate several Gradle tasks.  Most of them will be categorized into the `rmt` group.  However, the main task to take note of is the **`createDelivery`** task, and its variant-specific alternatives, which you can find under the `rmtDelivery` group.  Simply execute the **`createDelivery`** to start assembling your module, exporting the AAR/JAR/APK files, and generating the Javadoc, step count and Proguard map files.

![gradle-tasks-pane.png](docs/gradle-tasks-pane.png)

### Library Module Example

Below is an example of a library module using [**exportAar()**](#exportaar), [**calculateLinesOfCode()**](#calculatelinesofcode) and [**createJavaDoc()**](#createjavadoc):
```gradle
apply from: 'https://rexmtorres.github.io/Packager/deprecated/scripts/rmt.gradle'

android {
    // ...

    def libName = "MyLibrary"

    libraryVariants.all { variant ->
        def flavorName = variant.flavorName
        def buildTypeName = variant.buildType.name
        def variantName = variant.name
        def variantPath = variant.dirName
        def baseJarName = "${libName}_v${defaultConfig.versionName}"
        def destFolder = "${project.rootProject.buildDir}/${libName}/${variantPath}"

        // Export the AAR and JAR files
        exportAar(variant, destFolder, baseJarName)

        // Generate step count using Amateras StepCounter
        calculateLinesOfCode(variant,
                "${project.rootProject.rootDir}/stepCounter/${project.name}/${variantPath}",
                "${libName}.csv")

        // Javadoc
        def javadocTitle = "${libName} [${buildTypeName.capitalize()}] - v${defaultConfig.versionName} API Reference"
        def archiveName = "${variantPath}/${libName}_javadoc"

        createJavaDoc(variant,
                null,                                                               // no additional sources
                files("$project.buildDir/intermediates/classes/${variantPath}"),    // add a class reference so that JavaDoc can still find the excluded classes
                ['**/R.java', '**/internal/**/*.java'],      // exclude these files
                javadocTitle, JavadocMemberLevel.PROTECTED,
                archiveName, destFolder)
    }
}
```

### Application Module Example

Below is an example of an application module using [**exportApk()**](#exportapk), [**calculateLinesOfCode()**](#calculatelinesofcode), [**exportProguardMapping()**](#exportproguardmapping) and [**createJavaDoc()**](#createjavadoc):
```gradle
apply from: 'https://rexmtorres.github.io/Packager/deprecated/scripts/rmt.gradle'

android {
    // ...

    def appName = "MyApplication"

    applicationVariants.all { variant ->
        def flavorName = variant.flavorName
        def buildTypeName = variant.buildType.name
        def variantName = variant.name
        def variantPath = variant.dirName
        def baseApkName = "${appName}_v${defaultConfig.versionName}"
        def destFolder = "${project.rootProject.buildDir}/${appName}/${variantPath}"

        // Export signed and unsigned APKs
        exportApk(variant, "${destFolder}/signed/", baseApkName, false)
        exportApk(variant, "${destFolder}/unsigned/", baseApkName, true)

        // Generate step count using Amateras StepCounter
        calculateLinesOfCode(variant,
                "${project.rootProject.rootDir}/stepCounter/${project.name}/${variantPath}",
                "${appName}.csv")

        // Only obfuscated projects have Proguard maps
        if (variant.buildType.minifyEnabled) {
            exportProguardMapping(variant,
                    "${project.rootProject.rootDir.absolutePath}/proguardMap/${project.name}/${variantPath}/${baseApkName}")
        }

        // Javadoc
        def javadocTitle = "${appName} [${buildTypeName.capitalize()}] - v${defaultConfig.versionName} API Reference"
        def archiveName = "${variantPath}/${appName}_javadoc"

        createJavaDoc(variant,
                null,                                                               // no additional sources
                files("$project.buildDir/intermediates/classes/${variantPath}"),    // add a class reference so that JavaDoc can still find the excluded classes
                ['**/R.java', '**/internal/**/*.java'],      // exclude these files
                javadocTitle, JavadocMemberLevel.PROTECTED,
                archiveName, destFolder)
    }
}
```

repository: rexmtorres/Packager

repo_name: rexmtorres/Packager


text:
If a group is present on a `Clumper` then the behavior
of some of the verbs will change. This guide will explain
what changes you can expect and why they are useful.

## What is a Group?

You can add a group to a `Clumper` by calling `.group_by()`.

```python
from clumper import Clumper

list_dicts = [
    {'a': 6, 'grp': 'a'},
    {'a': 2, 'grp': 'b'},
    {'a': 7, 'grp': 'a'},
    {'a': 4, 'grp': 'b'},
    {'a': 5, 'grp': 'a'}
]

(Clumper(list_dicts)
  .group_by('grp'))
```

The current group is now looking at all the items that have `grp` as a key.

![](../img/add_grp.png)

This means that the collection is now aware that you're interested
in calculating things per group. In this case you'd get two groups. One for
`{'grp': 'a'}` and one for `{'grp': 'b'}`.

There are some verbs that will behave differently because of this.

### Agg

#### Without Groups

When you don't have a group active then we'll make a single
summary for the entire collection of items.

![](../img/agg-without-group.png)

```python
from clumper import Clumper

list_dicts = [
    {'a': 6, 'grp': 'a'},
    {'a': 2, 'grp': 'b'},
    {'a': 7, 'grp': 'a'},
    {'a': 4, 'grp': 'b'},
    {'a': 5, 'grp': 'a'}
]

(Clumper(list_dicts)
  .agg(s=('a', 'sum'),
       m=('a', 'mean'))
  .collect())
```

#### With Groups

When there is a group active then we'll make a summary
per group. We'll also ensure that the keys of the relevant
groups are made available in the new collection.

Note that the `group` is still active!

![](../img/agg-with-group.png)

```python
from clumper import Clumper

list_dicts = [
    {'a': 6, 'grp': 'a'},
    {'a': 2, 'grp': 'b'},
    {'a': 7, 'grp': 'a'},
    {'a': 4, 'grp': 'b'},
    {'a': 5, 'grp': 'a'}
]

(Clumper(list_dicts)
  .group_by('grp')
  .agg(s=('a', 'sum'),
       m=('a', 'mean'))
  .collect())
```

#### Aggergators

You can use your own functions if you want to do aggregation but we offer a
few standard ones. Here's the standard mapping.

```python
{
  "mean": mean,
  "count": lambda d: len(d),
  "unique": lambda d: list(set(d)),
  "n_unique": lambda d: len(set(d)),
  "sum": sum,
  "min": min,
  "max": max,
  "median": median,
  "var": variance,
  "std": stdev,
  "values": lambda d: d,
  "first": lambda d: d[0],
  "last": lambda d: d[-1],
}
```

### Transform

The `.transform()` verb is similar to the `.agg()` verb. The main difference is
that it does not reduce any rows/keys during aggregation. Instead they are merged
back in with the original collection. The examples below should help explain what
the usecase is.

#### Without Groups

With no groups active we just attach the same summary to every item.

![](../img/transform-without-groups.png)

```python
from clumper import Clumper

data = [
    {"a": 6, "grp": "a"},
    {"a": 2, "grp": "b"},
    {"a": 7, "grp": "a"},
    {"a": 9, "grp": "b"},
    {"a": 5, "grp": "a"}
]

tfm_data = (Clumper(data)
             .group_by("grp")
             .transform(s=("a", "sum"),
                        u=("a", "unique"))
             .collect())
```

#### With Groups

With groups active we calculate a summary per group and only attach
the relevant summary to each item.

![](../img/transform-with-groups.png)

```python
from clumper import Clumper

data = [
    {"a": 6, "grp": "a"},
    {"a": 2, "grp": "b"},
    {"a": 7, "grp": "a"},
    {"a": 9, "grp": "b"},
    {"a": 5, "grp": "a"}
]

tfm_data = (Clumper(data)
             .group_by("grp")
             .transform(s=("a", "sum"),
                        u=("a", "unique"))
             .collect())
```
### Mutate

This library offers stateful functions like `row_number`. If you use
these functions while there is a group active you'll notice different
behavior.

#### Without Groups

When there is no group we just start counting at one
and we continue counting until we're at the end of the
collection.

![](../img/mutate-without-group.png)

```python
from clumper import Clumper
from clumper.sequence import row_number

list_dicts = [
    {'a': 6, 'grp': 'a'},
    {'a': 2, 'grp': 'b'},
    {'a': 7, 'grp': 'a'},
    {'a': 4, 'grp': 'b'},
    {'a': 5, 'grp': 'a'}
]

(Clumper(list_dicts)
  .mutate(r=row_number())
  .collect())
```

#### With Groups

Because there are groups you'll notice that the order
is different but also that the `row_number` resets when
seeing the new group.

![](../img/mutate-with-group.png)

```python
from clumper import Clumper
from clumper.sequence import row_number

list_dicts = [
    {'a': 6, 'grp': 'a'},
    {'a': 2, 'grp': 'b'},
    {'a': 7, 'grp': 'a'},
    {'a': 4, 'grp': 'b'},
    {'a': 5, 'grp': 'a'}
]

(Clumper(list_dicts)
  .group_by('grp')
  .mutate(r=row_number())
  .collect())
```

### Sort

#### Without Groups

With no groups active, we just sort the entire collection
based on the `key` that is provided.

![](../img/sort-no-group.png)

```python
from clumper import Clumper

list_dicts = [
    {'a': 6, 'grp': 'a'},
    {'a': 2, 'grp': 'b'},
    {'a': 7, 'grp': 'a'},
    {'a': 9, 'grp': 'b'},
    {'a': 5, 'grp': 'a'}
]

(Clumper(list_dicts)
  .sort(key=lambda d: d['a'])
  .collect())
```

#### With Groups

With groups active, still perform the sorting but only
within each group.

![](../img/sort-with-group.png)

```python
from clumper import Clumper

list_dicts = [
    {'a': 6, 'grp': 'a'},
    {'a': 2, 'grp': 'b'},
    {'a': 7, 'grp': 'a'},
    {'a': 9, 'grp': 'b'},
    {'a': 5, 'grp': 'a'}
]

(Clumper(list_dicts)
  .group_by('grp')
  .sort(key=lambda d: d['a'])
  .collect())
```

## Ungroup

If you're done with a group and you'd like to move on you can drop all
groups by calling `.ungroup()`.

repository: koaning/clumper

gha_language: Python

repo_name: koaning/clumper


text:
# Roadmap

- [ ] Support CMake Projects
- [ ] Support .json file for project-specific configuration
- [ ] Auto-detect changes to conanfiles
- [ ] Output errors to error list tab

Features that have a checkmark are complete and available for
download in the
[nightly build](http://vsixgallery.com/extension/148ffa77-d70a-407f-892b-9ee542346862/).

# Changelog

These are the changes to each version that has been released
on the official Visual Studio extension gallery.

## 1.1.0

**2019-06-27**

- Downgrade dependencies to match 15.0.0 (first VS2017) ([#112](https://github.com/conan-io/conan-vs-extension/pull/112))
- Remove visual_studio_multi generator, it is not working for custom configurations ([#110](https://github.com/conan-io/conan-vs-extension/pull/110))
- Document example about conan.config.json ([#109](https://github.com/conan-io/conan-vs-extension/pull/109))
- Add very basic docs ([#106](https://github.com/conan-io/conan-vs-extension/pull/106))
- Update manifest version on each build (will trigger updates) ([#101](https://github.com/conan-io/conan-vs-extension/pull/101))
- Look for matching Conan profile in a config file for the running VS configuration ([#100](https://github.com/conan-io/conan-vs-extension/pull/100))
- Use Visual Studio 2019 image ([#95](https://github.com/conan-io/conan-vs-extension/pull/95))
- Remove unused assemblies ([#94](https://github.com/conan-io/conan-vs-extension/pull/94))
- Publish to OpenVSIX gallery ([#92](https://github.com/conan-io/conan-vs-extension/pull/92))
- Add .vsconfig to install required dependencies to build the extension ([#91](https://github.com/conan-io/conan-vs-extension/pull/91))
- Convert .NET Standard Class libraries to .NET Framework Class libraries ([#89](https://github.com/conan-io/conan-vs-extension/pull/89))

## 1.0.0

**2019-03-14**

- [x] Automatically find conanfiles and Conan executable
- [x] Run conan install and build dependencies as needed
- [x] Inject `.props` file into project for dependency information
- [x] Popup message to refresh project and resolve intellisense


text:
# Changelog

All notable changes to `Cookie Consent package` will be documented in this file.

## 1.5.0
- Updated to be compatible with Laravel 10
- Added return types
- Removed compatibility with Laravel 8
- Removed compatibility with PHP 7
## 1.4.2
- Added banner on top readme
- Made preview images same width
## 1.4.1
- Added packagist downloads
- Added screenshots of modals
## 1.4.0
- Styling changes to separate between functional and essential cookies
- Added upgrading.md
## 1.3.4 and 1.3.5 and 1.3.6
- Security fixes (thanks to dependabot)
## 1.3.3
### Fixed
- Lang publishing for Laravel 9
## 1.3.2
### Updated
- Ignored paths now prevents loading cookie module view instead of preventing javascript
- Updated usage in readme
## 1.3.1
### Updated
- Made it possible to accept all from modal
- Added accept only essential cookies
## 1.3.0
### Updated
- Updated to be compatible with Laravel 9
- Removed compatibility with Laravel 6 & 7
## 1.2.12
### Updated
- Fixed english translation parameter for policyUrl
## 1.2.11
### Updated
- Updated documentation in Step 9 to be more clear.
## 1.2.10
### Updated
- Updated wicg-insert library to resolve conflict when loaded in twice
## 1.2.9
### Fixed
Last update had a breaking change, this is now fixed in this minor version.
### Added
Composer requirements
## 1.2.8
### Updated
- Added the ingored paths to readme file
### Removed
- Removed check if cookie policy page matches current url. Js handles this
## Version 1.2.7
### Updated
- Added data attribute for gtm event

## Version 1.2.6
### Updated
- Set default GTM event from pageview to cookie_refresh
## Version 1.2.5
### Removed
- Removed obsolete parenthesis from index.tpl
## Version 1.2.4
### Updated
- Step 3 in google Tag Manager docs
- Changed some images to be more up to date
## Version 1.2.3
### Added
- Docs to configure Google Tag Manager
### Updated
- Added docs for Tag Manager to readme page
- Added TOC
## Version 1.2.2
### Updated
- Fixed readme file to contain correct snippets
## Version 1.2.1
### Updated
- Javascript changes for opening/altering modal
## Version 1.2.0
### Updated
- Rework of the frontend. Modal is now more generic.
- config has been reworked to alter cookie settings
## Version 1.1.0
### Updated
- Placed the javascript and css inside public/vendor/ instead of the public/ folder.
- Changed publishing

## Version 1.0.3
### Updated
- Fixed bug in middleware return when response has no body tag
## Version 1.0.2
### Updated
- Fixed translation in js file
## Version 1.0.1
### Updated
- Changed policyUrl variable, set it on the top of snippet with @php()

## Version 1.0.0
### Added
- All the things
  - Middleware that triggers the package
  - CSS and Javascript files
  - The modal view + the cookie settings view
  - Service provider
  - translations for the major languages in Belgium (Dutch, French and English)

repository: statikbe/laravel-cookie-consent

gha_language: PHP

repo_name: statikbe/laravel-cookie-consent


text:
# Biodiversity Heritage Library Scientific Names Index

Creates an index of scientific names occurring in the collection of literature
in Biodiversity Heritage Library

## Usage

*NOTE*: This is a Dev release.

### Mac OSX

* Download [bhlindex release for mac][bhlindex-mac].
* Untar the file go to `script` directory and [read instructions][readme].
* Use [bhl testdata][bhl-test] for testing.

### Linux

* Download [bhlindex release for Linux][bhlindex-linux]
* Untar the file go to `script` directory and [read instructions][readme].
* Use [bhl testdata][bhl-test] for testing.

## Database Migrations

### Install migrate

```bash
go get -u -d github.com/golang-migrate/migrate/cli github.com/lib/pq
go build -tags 'postgres' -o $GOPATH/bin/migrate github.com/golang-migrate/migrate/cli
```

### Create migration

```bash
migrate -ext sql -D db NAME
```

### Run commands

```bash
migrate -database postgres://localhost:5432/database up 2
```

### Commands

create [-ext E] [-dir D] NAME
: Create a set of timestamped up/down migrations titled NAME, in
  directory D with extension E

version
: current migration version

up [N]
: up N migrations

down [N]
: down N migrations

drop
: nuke database

### Testing

```bash
docker-compose build
docker-compose up
```

To update all dependencies change LAST_FULL_REBUILD line in Docker file and
return `docker-compose build`

## Importer
This fork at /sebsebmc/bhlindex adds a basic grpc import server in addition to
existing bhlindex grpc server. The import server allows json data to be sent
to the database and tied to pages or titles. Currently, there is a working
example at /importer/example/ that just iterates over the pages and inserts
a counter as json data for that page.

### Running the example
I used a setup where I ran the docker container and used `bhlindex find` to
populate the database with pages. In another terminal I ran `bhlindex server`
to run the grpc server that streams pages. In the next terminal I ran
`bhlindex importer` to run the import server. Finally, I used
`go run test_client.go` in the /importer/example directory to run the test
client.

The end result is a column in `page_imports` where the data is in the form of
`{"test": %d}" where %d is a running counter.

I made use of the `env` command in order to pass the environment values to
bhlindex so that it would connect to the postgres server that was running
inside of docker.

[bhlindex-mac]: https://github.com/gnames/bhlindex/releases/download/v0.1.0/bhlindex-0.1.0-mac.tar.gz
[bhlindex-linux]: https://github.com/gnames/bhlindex/releases/download/v0.1.0/bhlindex-0.1.0-linux.tar.gz
[bhl-test]: https://github.com/gnames/bhlindex/releases/download/v0.1.0/bhl-testdata.tar.gz
[readme]: https://github.com/gnames/bhlindex/tree/master/bhlindex

repository: sebsebmc/bhlindex

repo_name: sebsebmc/bhlindex


text:
# Roadmap

This document is meant to give the community some idea of where we're going with the iOS SDK in the short and longer term.

This document was last updated on Feburary 4, 2020.

^ If that's more than three months ago, please file an issue asking [@designatednerd](https://github.com/designatednerd) to update this document. 😃

## Short-Term

These are things we plan to be working on **within the next 3 months**.

- **Swift Codegen Rewrite**: As outlined in much greater detail in the [RFC issue](https://github.com/apollographql/apollo-ios/issues/939), this will happen in several phases:

    - **Run existing codegen with Swift instead of Bash**. This will allow for more type-safe and easier to troubleshoot scripts.
    - **Start generating code with Swift instead of Typescript**. This will allow much easier community contribution to code generation, and allow us to take on a bunch of improvements like `Hashable`, `Equatable`, and potentially `Identifiable` without having to fight with Typescript to do it.
    - **Add immutable caching to new generated code**. Caching is currently heavily tied into our existing parsing mechanism. We're going to separate that out in two phases: The first will allow caching that *cannot* be changed by the consumer.
    - **Add mutable caching to new generated code**. This is the final stage of updating caching: Allowing caching that *can* be changed by the consumer.
    - **Remove Old Codegen**. Once all this is built, older codegen will be deprecated.

    You can follow this effort through the [Swift Codegen GitHub project](https://github.com/apollographql/apollo-ios/projects/2).

- **General bug-bashing**: There's still a few outstanding general issues and small feature requests I'd like to address, and we'll be dealing with any new issues as they come up.

## Long-Term

These are things we plan to be working on **beyond the next 3 months**.

We're very open to any help we can get on these if your goals would be advanced by making these things work better sooner.

- **Dependency Manager test suite**. We've seen a few issues around things that work well for at least one of the three major iOS dependency managers, but causes problems in others. We plan to make a repo that we can use to automatically test for common issues against new versions of the library on CocoaPods, Carthage, and Swift Package Manager *before* they're released.

- **Wrapper libraries**. A very highly voted suggestion in our fall 2019 developer survey was wrapper libraries for concurrency helpers like RxSwift, Combine, and PromiseKit.

  Note that we are **not** locked into any particular set of other dependencies to support yet, but we anticipate these will be wrappers in a separate repository that have Apollo as a dependency. As individual wrappers move into nearer-term work, we'll outline which specific ones we'll be supporting.

repository: abdullahselek/apollo-ios

repo_name: abdullahselek/apollo-ios


text:
# Kalkulatorpro

This is a web application designed for HVAC Engineers for calculatting pressure drops in pipelines and for selecting proper size pipes.

## More info

This is fully functionall app used by fellow engineers in my country (Poland).
I made this app to practice reactSJ, styled componenets and ES6 features.
There is no CSS frameworks (no Bootstrap, no MaterialCSS)

## Built With

- GatsbyJS / ReactJS
- Styled Components

gha_language: JavaScript


text:
## Welcome!

You will be able to watch the live stream right here,
the stream will start automatically at the scheduled time.

Re-watch recordings of previous streams anytime, by clicking the "Replays" button:
<EMAIL_ADDRESS>button.sbc)

You can ask questions and chat with folks on our Matrix channel:
[Chat](https://matrix.to/ button.sbc")

[✅ Show chat<EMAIL_ADDRESS>checkbox#showchat)

repository: ngi-nix/waasabi-live

repo_name: ngi-nix/waasabi-live


text:
---
layout: default
---

# 1995-12-21 - Re: on web standards: sent to Markoff

## Header Data

From: "Vladimir Z. Nuri"<EMAIL_ADDRESS>To: attila<EMAIL_ADDRESS>Message Hash: 6851a61dce5bd73d996fb69de9d925b2ceb1783d308333fad048028e21bbeb16

Message ID<EMAIL_ADDRESS>Reply To<EMAIL_ADDRESS>UTC Datetime: 1995-12-21 02:08:21 UTC

Raw Date: Wed, 20 Dec 95 18:08:21 PST

## Raw message

```
{% raw  %}From: "Vladimir Z. Nuri"<EMAIL_ADDRESS>Date: Wed, 20 Dec 95 18:08:21 PST
To: attila<EMAIL_ADDRESS>Subject: Re: on web standards: sent to Markoff
In-Reply-To<EMAIL_ADDRESS>Message-ID<EMAIL_ADDRESS>MIME-Version: 1.0
Content-Type: text/plain

there's been MS flamewars on this list before, but Attila repeats
various snippets that I find highly objectionable.

cpunk relevance: operation of the free market

Gates' conquests can either be made out to be a failure of the free enterprise
system or a success from it. the more I read whining complaints about MS's
dominance, the more I prefer the latter interpretation. perhaps power
corrupts, but on the other hand failure clearly promotes whining. "you cannot
grow taller by chopping off the heads of others".

I've seen so many people try to smear MS with innuendo, as if "enough people
being unhappy" at a company is ample evidence that there is "unfairness".
the marketplace is *not* fair. it rewards people who are in tune with it
disproportionately!! sometimes, *dramatically*so* as in the case with Gates.

consider this anecdote.

a market for [x] gizmos does not even exist. a brilliant
person says, " I think people really need [x] gizmos. I'm going to make and
sell them. I'm going to find people who will help me, but if I can't find any
I'm going to do it all myself".

Gates is such a person and did it with PC OS'es and various windows
applications (Excel, Word Perfect, etc.). he bet his entire future on
the idea that he knew what people wanted even when other companies disagreed.
 all companies had a chance to get on the windows bandwagon
and write decent software when he created this OS-- he was going around
and virtually begging companies. what did they say? "no, we aren't going
to take our chance with you. we don't think people really want your
@#$$%^&* gizmos". they snickered and sneered at him.

Gates succeeds, and sells a bazillion gizmos. he *creates* a market that
was not even in existence. or rather, he anticipates what people really
want, and the related markets begins to respond to him in a "positive
feedback loop".

suddenly all these companies cry foul in the greatest of hypocrisy. "Gates
has cornered the gizmo market!! he has 95% of it!!! why weren't we notified!!
no one should have such power!!"

the truth is that the playing field has always been level, but because Gates
is  such a brilliant genius, market anticipator, and gizmo producer, he
succeeds far beyond his or anyone else's wildest dreams.

"well, all things should be equal in the competition, unless someone is
succeeding more than somebody else, in which case we should penalize them
to make things more even" say his competitors.

the market has *given* bill gates his dominance. all the arguments about
him being "unfair" are absolutely bogus that I have seen. they amount to,
"Bill Gates is using tactics to sell more of his software than his competitors.
therefore, he's not being fair to everyone else who wants to sell their
software as well."

 hee, hee. I really love the free market. it's a delight
that Gates has put his money where his brain is, and in only 20 years built
one of the most successful companies in the entire history of business.
it's a tribute to the intelligence of the market and people who have the
sense to listen to it. MS has gained its dominance through the utmost of
hard work, and consuers vote with their $$$. whoever denies that consumers
know what they *really* want is an awfully pretentious and deluded person,
IMHO.

>The conundrum is trying to decide "when" a particular company is a
>monopoly by either the classic definition of the Sherman and Clayton Acts
>or an effective monopoly, or "bad" player as defined in the
>Robinson-Patman act.

pioneers are the ones with the arrows in their back. when they fail,
everyone sneers at them. when they succeed, everyone sneers at them and
says they succeeded through skullduggery. and then competitors refer to
this *market* they had no hand in *creating* (the *hard* work is creating
a market, *anyone* can capitalize on one once created) as if they have
some "right" to it.

Gates is the biggest teddybear
on the planet. those who are afraid of him only show they are afraid to
think as focused and seriously as he does all day. "gosh, we shouldn't have
to compete against someone who understands the market so well. what about
us? we are competition challenged!! we need a level playing field."

>    Bill Gates more than satisfies the requirements of defining a monopoly
>in Sherman and Clayton with 85% of the desktop locked in and an assualt
>with "almost" standards on the open-system server market. NT is already
>garnering more than 25% of server installations in business --big
>business, since it will be "guaranteed" compatible with their desktop 95s.
>The rest of us, stay with the real thing.

"no fair!!! Bill Gates has a monopoly on the gizmo market!!! he should be
stopped!!! restrained!! otherwise, no other gizmo companies will succeed!!"
you have a very short memory. only several years ago most of the population
of the planet was in total skepticism about the success of windows. now
that it has succeeded, everyone believes that this market should be carved
up to everyone that wants a piece of the pie. well, Gates helped "create" the
pie in the first place.

>   Add to MS' virtually absolute domination of the desktop and its
>impending domination of the commercial servers the fact that MS has 95%
>of the front line office products --WP, Spreadsheet, Database, and mail
>with the last be non-standard to long established rules and you do have a
>problem to be considered.

is anyone twisting people's arms to buy his software? are there a lack of
choices because other companies are simply choosing not to compete with
MS? if MS is giving customers what they want better than anyone else, (which
is proven viscerally by *cash*, people invariably put their money where
their mouths are) why is this "a problem to be considered"?

>  Will the market correct itself?

why is MS dominance require "correction"? the fact that you consider it
an anomaly shows how naive and ridiculous your position is. MS dominance
is absolutely no accident, and anyone who claims it was achieved through
anything less than honest competition is in my opinion a whining nonthinker
who is afraid of a true, free market realized.

>  Very questionable since MS rode to
>its position on IBM's back and capitalized on IBM's failure to recognize
>what they had stumbled into.

beautiful, isn't it? one man can "capitalize" on the idiocy of others. oh,
poor IBM. they didn't *get*it* even after half a decade, perhaps an entire
decade. the big bad Gates Wolf  sunk his fangs into IBM. yes, Gates is a
dracula. hee, hee. perhaps you would like to start a government program
to help poor companies that don't have the brains to understand a market
when it is screaming at them in their faces? lets call it the "dog eat dog"
welfare fund.

> IBM did not fall by the market rejecting IBM
>--the market exploded with the PC for price and diversity reasons: you
>can not compare direct entry, full screen aplications and
>transportability of a PC against a looped, expensive main-frame
>connection, if the boss even approves the cost.

IBM failed because they had no brain to recognize what was happening around
them. Gates did, and his success proves the correctness of his vision.
the market is the force that will use or throw away companies as it sees
fit. it doesn't care about loyalty to a company that has lost the edge.

> Bill Gates
>has used his operating system dominance to force hardware vendors to ship
>MS products on _every_ machine, or pay substantial penalties in rates 2
>and 3 times larger for all MS products --cheap only if it is universal.

Gates is free to demand as much payment for his products and services that
the market will bear. if the market decides it's highway robbery, Gates
will go the way of the dodo bird.  perhaps you think that the government
should now subsidize purchase of windows 95 so that everyone can get their
copy?

>   The real issue in DOJ v. MS was that although Bill complied with a
>consent decree, he _immediatley_ found other ways to apply the screw, and
>many of these newer terms are even worse, but more subtle. And, there is
>no question the verbal threats have been significantly worse.

all far less than the slimy tactics used by his detractors to limit his
ability to compete freely in the market, such as all the "antitrust" laws
supposedly relevant to his situation.

> To software
>vendors it is the threat of denial of technical information on GUIs and
>APIs, to hardware manufacturers it is threats of ecomnomic sanctions,
>including publishing decertification of the platform for various WIN95
>and NT compliant stickers, etc.

why should Bill be forced to do business with people who would love to
slit his throat? answer: he doesn't have to. he can flick his finger at
them. and if they misunderstand his right  to do this, they misunderstand
the essence of America.

>    Bill Gates is NOT an ethical businessman. If the fact was that Bill
>was able to garner his position from hard work, a better product, and a
>well-greased advertising and marketing organization would not justify the
>application of the classic Sherman and Clayton anti-trust rules; the
>market will either continue to accept them or not.

that's absolutely what he has done, and none of your hocus-pocus flimflamery
can rebut this truth.

>    However, Bill has used his position of 85% in OSs not only to dictate
>OS considerations, as bad as they are with DOS nothing more than a boot
>sector virus and Windows a pretty program loader, but he has used this
>position to dominate the applications market by bundling and forcing
>machine integrators to include the MicroSoft applications in return for
>the OEM discount on the operating systems.

horrors!! you mean that if someone is successful, they have more influence
on the market?? *gasp*

> Preloading the market by those means is _not_ ethical or good
>business.

Gates is free to do whatever he likes. the market decides what is appropriate
by where it spends its money. so far, it support him. are you going to argue
with everyone who spent money on MS products and say, "no, that's not really
what you wanted!!"  whose business of it is yours to limit the freedom of
consumer choice?

> Bill Gates _clearly_ violates the FTC provisons on ethical
>conduct and restraint of trade by a monopoly or quasi-monopoly position.

"Gates is selling all the widgets and gizmos!!! no fair!!!"

>Why were nearly 30 OEMs represented anonymously in "friend of the court"
>briefs? --and the first thing Billy's (hired virtually every high end firm
>in SF) attorneys' did was subpoena the _names_ of the consortium under the
>rules of evidence --welcome to the "Kiss of Death."

*gasp* -- finding out who is out to slit your throat. yes, it should be
mandatory that people can anonymously attack him (as you are doing) without
any possibility of consequence. let's just put a bag over his head and
let everyone take free punches. that would be appropriate, don't you think?

>    Personally, I think it is time to dismember Bill Gates --give him a
>choice of his OS group or his applications group and literally force him
>to sell all direct or indirect interest in the one he does not choose,
>plus forego any involvement.

unfortunately, your puffhead arguments, falsehoods, innuendoes
 and hallucinations are beginning to grip people who matter. in fact
it is becoming quite trendy to besmirch MS.

>Anyone who thinks Bill Gates or Microsoft is a benevolent 800 pound
>gorilla has not paid attention in history classes:

anyone who thinks that business involves charity for the intellectually
challenged has not paid attention to reality of the free market.

>	power corrupts
>	    absolute power corrupts absolutely.

funny how this statement is always assumed to apply to microsoft, not to
the companies that are trying to anonymously slash his throat in courts as a
desperate resort when they have failed the egalitarian test of the marketplace.

{% endraw %}
```

## Thread

+ Return to [December 1995](/archive/1995/12)

+ Return to "[attila <attila@primenet.com>](/authors/attila_attila_at_primenet_com_)"
+ Return to<EMAIL_ADDRESS>(Dr. Frederick B. Cohen)](/authors/fc_at_all_net_dr_frederick_b_cohen_)"
+ Return to "[Jon Lasser <jlasser@rwd.goucher.edu>](/authors/jon_lasser_jlasser_at_rwd_goucher_edu_)"
+ Return to "["Vladimir Z. Nuri" <vznuri@netcom.com>](/authors/vladimir_z_nuri_vznuri_at_netcom_com_)"

+ 1995-12-20 (Wed, 20 Dec 95 00:47:20 PST) - [on web standards: sent to Markoff](/archive/1995/12/79d4e416652aca111b37be7ecd50e4908280be1632d59c9ce3c422e434694391) - _"Vladimir Z. Nuri"<EMAIL_ADDRESS>  + 1995-12-20 (Wed, 20 Dec 95 12:27:29 PST) - [Re: on web standards: sent to Markoff](/archive/1995/12/c9f4cf545c7b55c3fa6fdb927db54fe676a091d2fe3f56ef4be664a9db8e58b3) - _attila<EMAIL_ADDRESS>    + 1995-12-21 (Wed, 20 Dec 95 18:08:21 PST) - Re: on web standards: sent to Markoff - _"Vladimir Z. Nuri"<EMAIL_ADDRESS>      + 1995-12-21 (Wed, 20 Dec 95 20:49:27 PST) - [Vladimir Z. Nuri's fallacious defense of MS](/archive/1995/12/f2961c903752ced1f610e5a732c99c5e149187a16f3b5adf6bfd5028f6086428) - _attila<EMAIL_ADDRESS>        + 1995-12-21 (Thu, 21 Dec 95 00:22:40 PST) - [attila's fallacious flagwaving](/archive/1995/12/1fb683597826e9c8bb906e2c36cd99d79233f69c9a3205f92e775d2b89f6266c) - _"Vladimir Z. Nuri"<EMAIL_ADDRESS>      + 1995-12-21 (Thu, 21 Dec 95 04:39:15 PST) - [Gates history](/archive/1995/12/7c53f424eba9147837e111619cac64002a43239017fa15d645e79102af00a538) -<EMAIL_ADDRESS>(Dr. Frederick B. Cohen)_
      + 1995-12-22 (Thu, 21 Dec 95 21:56:30 PST) - [Re: on web standards: sent to Markoff](/archive/1995/12/bf49133277cea9ed2b61e6c9179860d7313e30077920452bda437928966f9e4e) - _Jon Lasser<EMAIL_ADDRESS>


text:
# Skid-Drive-bot

Skid-Dive-Robot is a 4 wheeled robot,we designed the robot in fusion360,model link is provided below and withe the help of fusion360tourdf file and from the roswiki and gazebo plugins we made the connection between topics.Here the robot is made for moving in a particular lane commonly called lane-following robot.Also added web interface where u can control the movement of robot using web and from anywhere.it is in robot_gui_bridge. And we are still working on it to make it autonomous.

contributors:
@Madhan Kumar M @Ranjith R

you can view the CAED model here: https://a360.co/3pJfCJH

you can download the CAED model here: https://grabcad.com/library/skid-steering-drive-bot-with-camera-and-lidar-1

http://gazebosim.org/tutorials?tut=ros_gzplugins

repository: SujeethKumarGK/Skid-Drive-bot

repo_name: SujeethKumarGK/Skid-Drive-bot


text:
DB
=========

This role setups a sqlite DB complete with schema.

Requirements
------------
 SQLITE must be installed

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

Not required

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

Requies the SQLITE binaries and install direcotry /home/sqlite

Example Playbook
----------------
Role is called from AutomationLogic.yml

- name: prepare nginx and PHP installation
  hosts: all
  gather_facts: False
  become: yes
  roles:
        -  nginx
        -  php
        -  db

License
-------

BSD

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

An optional section for the role authors to include contact information, or a website (HTML is not allowed).


text:
# Fully Scalable ML in SQL with Python

Part I: Intro to Data Science
---
Materials (slides & code)

Presentation can be found here: <Need Presentation Link>

Part II: Use case HR Analytics Employee Turnover
---

Code (with blanks) on Google Colab can be found under notebooks

Happy coding 💻

Live Love AI 😍

 # Instructors
The HR Employee Turnover notebook was prepared and presented by [Samer Salameh](https://www.linkedin.com/in/samer-salameh-74a900124/).

Part III: Intro to Machine Learning with Python in SQL
---
download SQL Scripts.zip

Part IV: Quick Overview of .NET for an ML in SQL GUI
---


text:
# Serverless - AWS Node.js Typescript

Serverless Framework template for zero-config TypeScript support.

## Features

Thanks to [`serverless-typescript`](https://github.com/prisma-labs/serverless-plugin-typescript) plugin:

- Zero-config: Works out of the box without the need to install any other compiler or plugins
- Supports ES2015 syntax + features (`export`, `import`, `async`, `await`, `Promise`, ...)
- Supports `sls package`, `sls deploy` and `sls deploy function`
- Supports `sls invoke local` + `--watch` mode
- Integrates nicely with [`serverless-offline`](https://github.com/dherault/serverless-offline)

## Prerequisites

- [`serverless-framework`](https://github.com/serverless/serverless)
- [`node.js`](https://nodejs.org)

## Usage

To create new serverless AWS TypeScript project using this template run:

```bash
serverless create \
--template-url https://github.com/ttarnowski/serverless-aws-nodejs-typescript/tree/main \
--path myServiceName
```

where `myServiceName` should be replaced with the name of your choice.

Then change directory to the newly created one:

```
cd myServiceName
```

And run:

```
npm install
```

or:

```
yarn install
```

## Licence

MIT.


text:
ASP.NET Core + Let's Encrypt
============================

**Oct 2018**: Marking this project as "archived" on GitHub because I ran out of personal time to work on this and didn't get it up to a good enough quality to publish this. If you're interesting in continuing this project, please reach out to me: https://twitter.com/natemcmaster.

The goal of this project is to make setting up HTTPS made easy.

[Let's Encrypt](https://letsencrypt.org/) is a free, automated, and open Certificate Authority.
This project provides API for ASP.NET Core projects to use Let's Encrypt.

When configured correctly, this API will automatically contact the <https://letsencrypt.org> CA and generate an TLS/SSL certificate. It then automatically configures Kestrel to use this certificate for all HTTPs traffic.

## Usage

The primary API usage is to call `IWebHostBuilder.UseLetsEncrypt` and set a few required options.

```csharp
public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseLetsEncrypt(o =>
            {
                o.HostNames = new[] { "example.com" };
                o.AcceptTermsOfService = true;
                o.EmailAddress =<EMAIL_ADDRESS>            })
            .UseStartup<Startup>();
}
```

## Testing in development

See the [developer docs](./CONTRIBUTING.md) for details on how to test Let's Encrypt in a non-production environment.

repository: fengweijp/LetsEncrypt

repo_name: fengweijp/LetsEncrypt


text:
[![Build Status](https://travis-ci.org/iosonofabio/lshknn.svg?branch=master)](https://travis-ci.org/iosonofabio/lshknn)
[![PyPI version](https://badge.fury.io/py/lshknn.svg)](https://badge.fury.io/py/lshknn)
[![DOI](https://zenodo.org/badge/121540386.svg)](https://zenodo.org/badge/latestdoi/121540386)

# LSHKNN
CPython module for fast calculation of k nearest neighbor (KNN) graphs in high-dimensional vector spaces using Pearson correlation distance and local sensitive hashing (LSH).

The current application is analysis of single cell RNA-Seq data and is the result of a collaboration between Fabio Zanini (now @UNSW) and Paolo Carnevali @ Chan Zuckerberg Initiative, who is the owner of the algorithm code, which is also under MIT license:

https://github.com/chanzuckerberg/ExpressionMatrix2

## Requirements
- A CPU with SSE 4.2 instructions (chances are you have it)
- A C++ 11/14 compiler, e.g. gcc 4.8 or later
- Python 3.4+ or 2.7
- [eigen 3](http://eigen.tuxfamily.org/index.php?title=Main_Page)
- [numpy](http://www.numpy.org/)
- [setuptools](https://pypi.python.org/pypi/setuptools)
- [pkg-config](https://www.freedesktop.org/wiki/Software/pkg-config/)
- [pkgconfig](https://pypi.python.org/pypi/pkgconfig)
- [pybind11](https://github.com/pybind/pybind11)

## Installation
(you may need superuser priviledges)

```
pip install lshknn
```

For the development version:
```
git clone https://github.com/iosonofabio/lshknn.git
cd lshknn
python setup.py install
```

## Usage
```python
import numpy as np
import lshknn

# Make mock data
# 2 features (rows), 4 samples (columns)
data = np.array(
        [[1, 0, 1, 0],
         [0, 1, 0, 1]],
        dtype=np.float64)

# Instantiate class
c = lshknn.Lshknn(
        data=data,
        k=1,
        threshold=0.2,
        m=10,
        slice_length=4)

# Call subroutine
knn, similarity, n_neighbors = c()

# Check result
assert (knn == [[2], [3], [0], [1]]).all()
```


text:
This is a fork of the laradock repo.

# Why?

Laradock helps developers with pre-configured docker containers. It can be included as a git submodule in the project directory:

```
my-project (directory)
    public
    stuff
    laradock (submodule)
        .env
        docker-compose.yml
        some-other-stuff
```

Problem is changes inside the git submodule (e.g. docker-compose.yml) cannot be included in the main git repo of the project; limiting the developer to make configuration changes to laradock that can be committed to the repo.

This package allows developers to use laradock in their projects, but define the laradock docker-compose.yml and .env configurations outside the laradock folder and inside their project directory. This makes it possible to submit these configuration files to the repo, making it faster for others to setup and run projects locally.

# Usage

Submodule this repo into your project:

```
git submodule add --name laradock-my-project --force https://github.com/heyorca/laradock.git laradock-my-project
```

Run `./setup.sh` from the laradock directory.

Your project tree should look something like this:

```
- my-project
    - public
    - stuff
    - laradock-my-project (submodule)
        - .env (symlink to ../laradock-env)
        - docker-compose.yml (symlink to ../laradock-docker-compose)
        - some-other-stuff
    - laradock-env
    - laradock-docker-compose.yml
```

You can modify the generated laradock-env and laradock-docker-compose.yml file in your project directory based on your needs.

Run `sudo docker-compose up` from the laradock directory and the docker environments will run based on those two files.

Visit laradock to learn more.

## License

[MIT License](https://github.com/laradock/laradock/blob/master/LICENSE)

repository: heyorca/laradock

gha_language: Shell

repo_name: heyorca/laradock


text:
# Deploying SKF on Azure AKS

## Prep SKF Labs Cluster

1. Create a Kubernetes cluster, this will be used for the SKF Labs, we don't want them in the SKF
   k8s cluster as these labs are vulnerable by design.

2. Now we need to create a base64 string from the skf-labs kube config file
```
az aks get-credentials \
    --resource-group <resource group> \
    --name <labs cluster name> \
    --admin \
    --file '-' | base64 -w 0
```
Now paste the output value in the `configmaps.yaml` file in `LABS_KUBE_CONF`

3. Configure kubectl to control our cluster:

```
az aks get-credentials \
    --resource-group <resource group> \
    --name <labs cluster name> \
    --admin
```

Check your config with `kubectl config current-context`.

Make sure you only have the kube config content of the skf-labs cluster and not others.

4. For Azure, we will only describe how to set up the subdomain deployment mode.

In `configmaps.yaml`, set `SKF_LABS_DEPLOY_MODE` to `subdomain`.

Now install the nginx ingress controller. With helm3, this can be installed using:
```
# If you haven't previously added the repo:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

helm install ingress-nginx ingress-nginx/ingress-nginx \
    --set rbac.create=true \
    --set controller.publishService.enabled=true \
    --set controller.service.externalTrafficPolicy=Local \
    --set controller.setAsDefaultIngress=true
```
For helm2, the instructions are the same as below, for the main cluster.

5. After the ingress has an IP address (this might be found using `kubectl get ingress OR kubectl --namespace default get services -o wide -w ingress-nginx-controller`) or go to the Azure page and select 'Services & Ingress' and take the value from the ingress-nginx-controller External-IP , you'll
   need to add a wildcard DNS record - pointing all subdomains of your labs domain to the ingress
   controller IP.

Now, in `configmaps.yaml`, set the value of `SKF_LABS_DOMAIN` to this domain (the one with the
wildcard record).

## Prep Main SKF Cluster

1. Clone the repo and edit `configmaps.yaml` and other yaml files as described [here](README.md),
   including the labs kube config from above.
2. Create a second Kubernetes cluster, this will be used for the SKF application
3. Make sure kubectl is configured to control **only this cluster**

```
az aks get-credentials \
    --resource-group <resource group> \
    --name <labs cluster name> \
    --admin
```

Check everything with
```
kubectl config current-context
```

4. Deploy all the stuff to the SKF k8s cluster:

```
cd skf-flask
for yaml in Docker/alpine-cloud/k8s/*.yaml; do
    kubectl apply -f $yaml;
done
```

5. Init tiller

Maybe not needed depending if you use helm2 or helm3
```
# For helm2 use the command below
helm init --service-account tiller
```

6. Get a certificate e.g. a Let's Encrypt cert locally using something like:

```
certbot -d beta.securityknowledgeframework.org --manual --preferred-challenges dns certonly
kubectl create secret tls beta.securityknowledgeframework.org --key privkey.pem --cert cert.pem
```

For a production deployment, you're probably better off using
[Cert-Manager|https://cert-manager.io/docs/installation/kubernetes/] to keep your certificates
up-to-date automatically.

7. Deploy an nginx ingress controller:

With helm2:
```
helm install --name nginx-ingress stable/nginx-ingress \
    --set rbac.create=true \
    --set controller.publishService.enabled=true \
    --set controller.service.externalTrafficPolicy=Local
```
With helm3:
```
# If you haven't previously added the repo:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

helm install ingress-nginx ingress-nginx/ingress-nginx \
    --set rbac.create=true \
    --set controller.publishService.enabled=true \
    --set controller.service.externalTrafficPolicy=Local \
    --set controller.setAsDefaultIngress=true
```

8. Check out your IP and do your DNS stuff `kubectl get ingress OR kubectl --namespace default get services -o wide -w ingress-nginx-controller`

Add the IP of the ingress controller to your DNS records, setting the frontend domain (the domain in
`FRONTEND_URI`).

Now visit your website, for example: https://beta.securityknowledgeframework.org

gha_language: HTML


text:
---
layout: post
title: "The CNCF End User Community, the Tech Radar and Virtual KubeCon 2020 - BeerSecOps"
description: "A podcast introducing the CNCF End User Community and KubeCon Virtual EU, by Cheryl Hung, VP Ecosystem at CNCF and The BeerSecOps podcast"
video: https://www.youtube.com/embed/wOesy7yByUY
image: /images/2020-08-11-the-cncf-end-user-community-and-virtual-kubecon-2020-beersecops-podcast.jpeg
tags:
  - Podcast
  - Video
  - "2020"
---

A slightly late posting of my episode of the BeerSecOps podcast, where Stephen Giguere and I talk about the CNCF End User Community and the Tech Radar.

> Cheryl Hung (@oicheryl) has recently been promoted to the CNCF's VP of Ecosystem after growing their end user community into the largest of of any open source foundation or standards body. In this episode she speaks to Steve Giguere (@_SteveGiguere_) about the creation of community, the results of her latest initiative in the space called the CNCF Technology Radar, and of course the upcoming Virtual KubeCon 2020.

You can watch the video above, or listen the podcast [on Anchor](https://anchor.fm/aqua-security/episodes/EP15-Cheryl-Hung---The-CNCF-End-User-Community-and-Virtual-KubeCon-2020-ehvu4u) or [on Spotify](https://open.spotify.com/show/52ZbO0ZuUDrXqV8WyWgHMJ).


text:
wmata-duino
===========

Basic proxy for WMATA API for use with Arduino project (deployed on Heroku)

## Use

HTTP GET:

```
	http://wmata-duino.herokuapp.com/orange/efc

```

Result:

```
	Vienna, BRD, 10, 20, New Carrollton, ARR, 5, 15
```

repository: kachok/wmata-duino

repo_name: kachok/wmata-duino


text:
**Notes about this fork**

bValidator by default skips over hidden elements via the `:hidden` selector.
This created problems when wanting validation to run on hidden inputs when using
libraries like chosen (http://harvesthq.github.io/chosen/).

This commit adds a new option, `hiddenElementSelector`. Pass it in with your other
bValidator options. This should be a selector for hidden elements that you want
to be validated. For instance, with chosen, you would pass:

```javascript
$('form').bValidator({
	hiddenElementSelector : 'select'
});
```

Or you could be more specific with the selector to just run on chosen selects.

```javascript
$('form').bValidator({
	hiddenElementSelector : 'select.chosen-select'
});
```

bValidator needs an element to figure out where to place the validation error tooltip.
When the element is hidden, the tooltip can't be placed properly. To get around this, we
**need to wrap our hidden elements with a `span` tag**, or whatever other visible element
of your choosing. The code will take the immediate parent of any hidden elements to help
place the tooltip.

An exmaple of the html needed for a chosen select, either of the two JavaScript options above would initialize this:

```html
<span>
	<select class="chosen-select" data-placeholder="Choose..." data-bvalidator="required">
		<option></option>
		<option value="1">Option 1</option>
		<option value="2">Option 2</option>
		<option value="3">Option 3</option>
	</select>
</span>
```

The css update on the tooltip container adding a `z-index` was required to show
validation errors on top of chosen selects.

No other bValidator functionality was touched.

repository: ckihneman/bValidator

repo_name: ckihneman/bValidator


text:
# StainTools

**Find a more up to date README with correct formatting  on HackMD [here](https://hackmd.io/s/SJ7o7pk1N).**

Tools for tissue image stain normalization and augmentation in Python 3. https://github.com/Peter554/StainTools.

## Install

`pip install staintools`

## Quickstart

### Normalization

Original images:
[(Bigger)](https://imgur.com/2hRBZ25.png)
![](https://imgur.com/2hRBZ25.png)

Stain normalized images:
[(Bigger)](https://imgur.com/n3u87IP.png)
![](https://imgur.com/n3u87IP.png)

```python
# Read data
target = staintools.read_image("./data/my_target_image.png")
to_transform = staintools.read_image("./data/my_image_to_transform.png")

# Standardize brightness (This step is optional but can improve the tissue mask calculation)
target = staintools.LuminosityStandardizer.standardize(target)
to_transform = staintools.LuminosityStandardizer.standardize(to_transform)

# Stain normalize
normalizer = staintools.StainNormalizer(method='vahadane')
normalizer.fit(target)
transformed = normalizer.transform(to_transform)
```

### Augmentation

[(Bigger)](https://imgur.com/v9R1aGQ.png)
![](https://imgur.com/v9R1aGQ.png)

```python
# Read data
to_augment = staintools.read_image("./data/my_image_to_augment.png")

# Standardize brightness (This step is optional but can improve the tissue mask calculation)
to_augment = staintools.LuminosityStandardizer.standardize(to_augment)

# Stain augment
augmentor = staintools.StainAugmentor(method='vahadane', sigma1=0.2, sigma2=0.2)
augmentor.fit(to_augment)
augmented_images = []
for _ in range(100):
    augmented_image = augmentor.pop()
    augmented_images.append(augmented_image)
```

## Sample data

The data used for the above example is available [here](https://drive.google.com/drive/folders/1fD6o5rWEWSTudkFxhULOe1Rn47NIL7v7?usp=sharing).

## More examples

For more examples see files inside of the `manual_tests` directory.

 These two chemicals typically stain: the nuclei a dark purple (Hematoxylin) and the cytoplasm a light pink (Eosin). Thus all pixels in an idealized histology image are principally composed of two colors. These stain colors vary from image to image and may be summarised in a stain matrix:

The first row of this matrix shows the Hematoxylin stain color in RGB. The second row of the matrix shows the Eosin stain color in RGB.

We transform a normal RGB image I to a RGB optical density image OD via the Beer-Lambert Law:

so

If we flatten the OD image so that it is Npix x 3, with Npix being the total number of image pixels, then we can relate the images OD array and the stain matrix S via the pixel concentration matrix C (an Npix x 2 array where the columns give the pixel concentration of H and E respectively):

A `StainExtractor` provides methods for estimating the stain matrix S and a concentration matrix C given an image.  First the optical density array OD is calculated for the given image. The stain matrix S may then be calculated by the desired methodology (see below). The concentration matrix C is finally obtained by 'solving' the above equation. I say 'solving' here as in general there is no exact solution to the above equation. An idealized image will be made up of exactly two color - the stains - however for real world histology images we may only expect to approximately compose the image using just these two primary colors.

We implement:

- `VahadaneStainExtractor`. Stain matrix estimation via method of *A. Vahadane et al., “Structure-Preserving Color Normalization and Sparse Stain Separation for Histological Images”*. This method takes a dictionary learning based approach to find the two basis stains that best fit the image. See the paper for details.

- `MacenkoStainExtractor`. Stain matrix estimation via method of *M. Macenko et al., "A method for normalizing histology slides for quantitative analysis"*. This method considers the projection of pixels onto the 2D plane defined by the two principle eigenvectors of the optical density covariance matrix. It then considers the extreme directions (in terms of angular polar coordinate) in this plane. See the paper for details.

In both cases it is preferable to first remove background pixels - white pixels of the image where no tissue is present - as these will not be composed of simply the two primary stains. We attempt to isolate tissue by a thresholding on the pixel luminosity. For some images that are dimly lit however the background is not bright enough and therefore it may be helpful to standardize the brightness of any image first. For this we implement a `LuminosityStandardizer`, which enforces an image to have at least 5% of pixels being luminosity saturated.

Once we have the stain and concentration matrices we are able to easily carry out.

- **Stain Normalization**. This basically involves casting one image in the stain colors of a target image. For this we basically decompose the images into the stain matrix S and the concentration matrix C, then replace the stain matrix of the image to be transformed with that of the target image. We then recombine to give the final stain normalized image. This is implemented in the class `StainNormalizer`.

- **Stain Augmentation**. For this we simply augment a single image by decomposing it into the stain matrix S and the concentration matrix C, perturbing the concentrations somewhat and then recombining to be get an augmented image. This is implemented in the class `StainAugmentor`.

We also implement a simpler color normalizer, the `ReinhardColorNormalizer`, which normalizes images according to the method of *E. Reinhard, M. Adhikhmin, B. Gooch, and P. Shirley, "Color transfer between images"*. This method does not consider the details of stain matrices etc. Instead it simply maps the color distribution mean and standard deviation to match that of another target image.

repository: boxizhang/StainTools

repo_name: boxizhang/StainTools


text:
## Inference with pretrained models

We provide testing scripts to evaluate a whole dataset (Cityscapes, PASCAL VOC, ADE20k, etc.),
and also some high-level apis for easier integration to other projects.

### Test a dataset

- single GPU
- single node multiple GPU
- multiple node

You can use the following commands to test a dataset.

```shell
# single-gpu testing
python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [--out ${RESULT_FILE}] [--eval ${EVAL_METRICS}] [--show]

# multi-gpu testing
./tools/dist_test.sh ${CONFIG_FILE} ${CHECKPOINT_FILE} ${GPU_NUM} [--out ${RESULT_FILE}] [--eval ${EVAL_METRICS}]
```

Optional arguments:

- `RESULT_FILE`: Filename of the output results in pickle format. If not specified, the results will not be saved to a file. (After mmseg v0.17, the output results become pre-evaluation results or format result paths)
- `EVAL_METRICS`: Items to be evaluated on the results. Allowed values depend on the dataset, e.g., `mIoU` is available for all dataset. Cityscapes could be evaluated by `cityscapes` as well as standard `mIoU` metrics.
- `--show`: If specified, segmentation results will be plotted on the images and shown in a new window. It is only applicable to single GPU testing and used for debugging and visualization. Please make sure that GUI is available in your environment, otherwise you may encounter the error like `cannot connect to X server`.
- `--show-dir`: If specified, segmentation results will be plotted on the images and saved to the specified directory. It is only applicable to single GPU testing and used for debugging and visualization. You do NOT need a GUI available in your environment for using this option.
- `--eval-options`: Optional parameters for `dataset.format_results` and `dataset.evaluate` during evaluation. When `efficient_test=True`, it will save intermediate results to local files to save CPU memory. Make sure that you have enough local storage space (more than 20GB). (`efficient_test` argument does not have effect after mmseg v0.17, we use a progressive mode to evaluation and format results which can largely save memory cost and evaluation time.)

Examples:

Assume that you have already downloaded the checkpoints to the directory `checkpoints/`.

1. Test PSPNet and visualize the results. Press any key for the next image.

    ```shell
    python tools/test.py configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py \
        checkpoints/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth \
        --show
    ```

2. Test PSPNet and save the painted images for latter visualization.

    ```shell
    python tools/test.py configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py \
        checkpoints/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth \
        --show-dir psp_r50_512x1024_40ki_cityscapes_results
    ```

3. Test PSPNet on PASCAL VOC (without saving the test results) and evaluate the mIoU.

    ```shell
    python tools/test.py configs/pspnet/pspnet_r50-d8_512x1024_20k_voc12aug.py \
        checkpoints/pspnet_r50-d8_512x1024_20k_voc12aug_20200605_003338-c57ef100.pth \
        --eval mAP
    ```

4. Test PSPNet with 4 GPUs, and evaluate the standard mIoU and cityscapes metric.

    ```shell
    ./tools/dist_test.sh configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py \
        checkpoints/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth \
        4 --out results.pkl --eval mIoU cityscapes
    ```

 :::{note}
 There is some gap (~0.1%) between cityscapes mIoU and our mIoU. The reason is that cityscapes average each class with class size by default.
   We use the simple version without average for all datasets.
:::

5. Test PSPNet on cityscapes test split with 4 GPUs, and generate the png files to be submit to the official evaluation server.

   First, add following to config file `configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py`,

    ```python
    data = dict(
        test=dict(
            img_dir='leftImg8bit/test',
            ann_dir='gtFine/test'))
    ```

   Then run test.

    ```shell
    ./tools/dist_test.sh configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py \
        checkpoints/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth \
        4 --format-only --eval-options "imgfile_prefix=./pspnet_test_results"
    ```

   You will get png files under `./pspnet_test_results` directory.
   You may run `zip -r results.zip pspnet_test_results/` and submit the zip file to [evaluation server](https://www.cityscapes-dataset.com/submit/).

6. CPU memory efficient test DeeplabV3+ on Cityscapes (without saving the test results) and evaluate the mIoU.

    ```shell
    python tools/test.py \
    configs/deeplabv3plus/deeplabv3plus_r18-d8_512x1024_80k_cityscapes.py \
    deeplabv3plus_r18-d8_512x1024_80k_cityscapes_20201226_080942-cff257fe.pth \
    --eval-options efficient_test=True \
    --eval mIoU
    ```

    Using ```pmap``` to view CPU memory footprint, it used 2.25GB CPU memory with ```efficient_test=True``` and 11.06GB CPU memory with ```efficient_test=False``` . This optional parameter can save a lot of memory. (After mmseg v0.17, efficient_test has not effect and we use a progressive mode to evaluation and format results efficiently by default.)


text:
######This page will guide you through the process of assembling the breadboard you will use to prototype SimonGPIO2.0.

![Welcome To Your Doom!](https://raw.githubusercontent.com/FabCamp/SimonGPIO2.0/master/Images/BreadBoard%20Full.png)

Placing the Components
----------------------

Take your 4 buttons, Green, Red, Blue, and Yellow, and place them on the left 2/3 of the breadboard.  Don't worry if the text is upside-down.

Now take your LEDs. Place them to the right of your buttons on the breadboard, with the shorter leg, or ground, on the left. This is very important, as LEDs will only work with the current going in one direction, and will block electricity from going in the other direction. Now these LEDs need to be connected to ground, but need a current limiting resistor to keep them from blowing. Take your four 330Ω resistors from your kit, and bend both sides to be at right angles. Use your wire cutters to cut the legs halfway down from the body of the resistor. Use these to connect the ground pins of your LEDs with the ground power rail above. Remember, anything in the same vertical column on one side of the breadboard will be connected, so do not attempt to place the leg of the resistor in the same hole as the LED! Your breadboard should now look like the one below.

![Breadboard conponents only](https://raw.githubusercontent.com/FabCamp/SimonGPIO2.0/master/Images/BreadBoard%20No-Wires.png)

Connecting Components to Ground
-------------------------------

Take out one short jumper cable of each color: Red, Green, Blue, and Yellow. Use these to connect the upper left leg of each button with the Ground rail above. Now we have connected all the buttons to the ground rail, but we still need to connect the ground rail to the ground from our Raspberry Pis. Run a shor black jumper from any of the pins on the breakout board labeled "GND" to the upper ground rail. Your breadboard should look like the one below

![Ground wires only](https://raw.githubusercontent.com/FabCamp/SimonGPIO2.0/master/Images/BreadBoard%20GND-Wires.png)

Connecting the LEDs
-------------------

Connect the right-hand legs (the posative leads) of the LEDs to the appropriate pins on the breakout board using the table below. The pins on the raspberry pi are named strangely, so make sure you dont get confused. Use the medium and long jumpers for this. You can color-code these like you did the ground wires to make troubleshooting easier.

|Color |Pin Number|Pin Name on Breakout|
|------|----------|--------------------|
|green |11        |p17                 |
|red   |15        |p22                 |
|blue  |13        |p21                 |
|yellow|12        |p18                 |

![LED wires](https://raw.githubusercontent.com/FabCamp/SimonGPIO2.0/master/Images/Breadboard%20LED-Wires.png)

Connecting the Buttons
----------------------

Now connect the upper right legs of the buttons on your board to the correct pins, again shown in the table below. You can also color-code these if you wish. Note that the buttons are connected to ground, so when you press the button, it will read a 0 (gnd), and 1 when it is released (there is some circuitry inside the Pi itself that makes the pins connected to +v, or 1, by default. This is known as a "pull up" because it pulls the signal "up" to a digital 1 by default)

|Color |Pin Number|Pin Name on Breakout|
|------|----------|--------------------|
|green |26        |CE1                 |
|red   |19        |MOSI                |
|blue  |24        |CE0                 |
|yellow|22        |p25                 |

![finished board](https://raw.githubusercontent.com/FabCamp/SimonGPIO2.0/master/Images/BreadBoard%20Full.png)

filename: Building the Breadboard.md