text:
+++
title = "Book: \"Man's Search for Meaning\" by Viktor Frankl"
date = 2019-06-03T19:32:13+05:30
+++

I had long wanted to pick up the book ["Man's Search for
Meaning"](https://www.goodreads.com/book/show/17304997-man-s-search-for-meaning)
because of the acclaim I had read about it. I don't know a lot about World War 2
but, I was definitely interested in knowing about Dr Viktor's experiences from
the time he had to spend in the concentration camps.

![Image](mans-search-for-meaning.jpg)

### My thought process before picking up the book

I picked up the book and was expecting to find answers to my own questions
around career and life in general. I had thought of being able to come to some
very pin-pointed conclusions after reading the book.

### Experiences in the Concentration Camp

This was the first part of the book and an extremely moving one. The description
of the atrocities was very sad to read. Although I had read about the gas
chambers, I had very less clue about the kind of labour that prisoners of
concentration camps were supposed to do. And in the kind of natural conditions
described by the author! This section gave me a lot of perspective on how life
during WW2 would have been. Especially for the prisoners.

When I visited Europe in 2018, I felt a bit surprised at how often WW2 came up
in discussions. This book helped me understand why that is the case and how
difficult things must have been!

### Logotherapy

Logotherapy seemed like a really interesting topic. The ideas presented in it
seemed worth trying. Sometimes, it seemed like I was reading ["The Power of Your
Subconscious
Mind"](https://www.goodreads.com/book/show/28579391-the-power-of-your-subconscious-mind)
again.

It wasn't surprising when the author said that there's no general answer to the
question of the meaning of life as it differs from person to person. However, I
was a little disappointed considering my thoughts before picking up the book.

The ideas around forgetting oneself by giving to a cause to serve or a person to
love made a lot of sense to me. At various places in the book, the author talks
about not aiming for happiness itself but for giving oneself completely to an
idea, cause, love for someone which would result in happiness as a side-effect.
This reminded me of a famous dialogue in the movie '3 Idiots' which goes like:

> Bachcha kabil bano, kabil ... kamyabi toh saali jhak maarke peeche bhagegi.

It roughly translates to something like:

> "Be a deserving person (in terms of mastering something). Success will
> eventually have to follow you!"

I liked the section "Meaning of Love". Finding meaning in unavoidable suffering
was something totally new for me. It made a lot of sense! What was also
interesting was how the author repeatedly mentioned that he's emphasizing on
'unavoidable suffering' and not on 'masochistic suffering'.

Paradoxical Intention seemed like a really interesting idea and something I
intend to try. Especially to be able to fall asleep! Many examples were given of
this concept which seemed similar to the ideas presented in "The Power of Your
Subconscious Mind".

### That's it

Although the most popular quote from the book is:

> He who has a why can bear any how

I liked the ideas around not making happiness/pleasure the primary goal of one's
life but enjoy them as a side-effect:

> Pleasure is, and must remain, a side-effect or by-product, and is destroyed
> and spoiled to the degree to which it is made a goal in itself.

That's it for now. Until next time... :wink:

repository: dharmit/dharmitshah

gha_language: HTML

repo_name: dharmit/dharmitshah


text:
# CNN-PS

Satoshi Ikeahta. CNN-PS: CNN-based Photometric Stereo for General Non-Convex Surfaces, ECCV2018.

 [paper](https://arxiv.org/abs/1808.10093)

 [supplementary](webimage/cnnps_eccv2018-supp.pdf)

## Getting Started

This is a Keras implementation of a CNN for estimating surface normals from images captured under different illumination.

### Prerequisites

- Python3.5+
- Keras2.0+
- numpy
- OpenCV3

Tested on:
- Ubuntu 16.04, Python 3.5.2, Keras 2.0.3, Tensorflow(-gpu) 1.0.1, Theano 0.9.0, CUDA 8.0, cuDNN 5.0
  - CPU: Intel® Xeon(R) CPU E5-1650 v4 @ 3.60GHz × 12 , GPU: 3x GeForce GTX1080Ti, Memory 64GB

### Running the tests
For testing network (with DiLiGenT dataset), please download [DiLiGenT dataset (DiLiGenT.zip)](https://sites.google.com/site/photometricstereodata/) by Boxin Shi [1] and extract it anywhere. Then, specify the path of DiLiGenT/pmsData in test.py as

```
diligent = 'USER_PATH/DiLiGenT/pmsData'
```

The pretrained model for TensorFlow backend is included (weight_and_model.hdf5). You can simply try to run test.py as

```
python test.py
```

If the program properly works, you will get average angular errors (in degrees) for each dataset.

The final result [Mean] is the error about the averaged surface normal over normals predicted from K (K=10 in this case) differently rotated observation maps (See details in my paper). Finally, you will get the predicted surface normal map and the error map.

### Important notice about DiLiGenT datasets

As mentioned in the paper, I found that DiLiGenT dataset has some problems.
- The first 20 images in bearPNG are corrupted. To get the good result, "skip" first 20 images in the dataset by uncommenting this line in test.py.
```
# [Sv, Nv, Rv, IDv, Szv] = dio.prep_data_2d_from_images_test(dirlist, 1, w, 10, index = range(20, 96)) # for bearPNG
```

- normal.txt (ground truth surface normals) in harvestPNG is flipped upside down. To get the proper result, uncomment this line in mymodule/deeplearning_IO.py.

```
# nml = np.flipud(nml) # Uncomment when test on Harvest, the surface noraml needs to be flipped upside down
```
### Running the test on othter datasets (Unsupported)
If you want to run this code on ohter dataset, please allocate your own data just in the same manner with DiLiGenT. The required files are
- images (.png format in default, but you can easily change the code for other formats)
- lights (light_directions.txt, light_intensities.txt)
- normals (normal.txt, if no ground truth surface normal is available, you can simply set all the values by zero)

### Running the training
If you want the training dataset, please send a request to<EMAIL_ADDRESS>
## License

This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details

## Acknowledgments
This work was supported by JSPS KAKENHI Grant Number JP17H07324.

## References
[1] Boxin Shi, Zhipeng Mo, Zhe Wu, Dinglong Duan, Sai-Kit Yeung, and Ping Tan, "A Benchmark Dataset and Evaluation for Non-Lambertian and Uncalibrated Photometric Stereo", In IEEE Transactions on Pattern Analysis and Machine Intelligence (TPAMI), 2018.

license: MIT

branch_name: refs/heads/master

extension: md

license_type: permissive


text:
# Deployment Instructions

## Source Code
The matrixprofile library consists a multi-stage TravisCI build. The steps to create a release are as follows:

1. Update the version.py
2. Update the docs/Releases.md
3.  Now we create a git tag that triggers a TravisCI build.

```
git tag -a 'vX.X.X' -m 'release vX.X.X'
git push --tags
```

## API Documentation
The API documentation is hosted on Github pages. A bash script exists to "deploy" the code.

```
bash docs/deploy_docs.sh
```

repository: matrix-profile-foundation/matrixprofile

gha_language: Python

repo_name: matrix-profile-foundation/matrixprofile


text:
# Hagoromo Funding with JPYCoin (JPYC)

## Overview

`JPYC` is a JPY-pegged stablecoin, legally treated as a prepaid payment instrument in Japan. With this said the stablecoin enables us to purchase goods as a medium of exchange. `JPYC` is a simple ERC-20 based token so that we can implement and integrate this token in Ethereum DApps ecosystem. Here is the reason JPYC Rinkeby takes place for testing purpose.

To know details about `JPYC`, visit https://jpyc.jp/white-paper-en.pdf

`Hagoromo` is an open source social project of decentralized crowdfunding written for Ethereum and Polygon network, everyone can participate in each project as a proposal creator or a fundraiser. Crowdfunding is widely known as a form of crowdsourcing and alternative finance.

To get insights about `Crowdfunding`, visit https://en.wikipedia.org/wiki/Crowdfunding

## HagoromoV1

`HagoromoV1` has been prototyped with simple functions that were required to achieve features for decentralized crowdfunding. It supports the one of the three primary types of crowdfunding donation-based in which there is no financial return to the investors or contributors. It's said that common donation-based crowdfunding
initiatives include fundraising for disaster relief, charities, nonprofits, and medical bills.

It is deployed at the address [0x9c84b6413D8A859EB071a5db5525262f72E443A6][hagoromor] for Rinkeby test network.
It is deployed at the address [0x0E30E8A64093758ee2000E1011a62D9bA29CB79D][hagoromom] for Polygon(Matic) main network.

## Use of JPYC Rinkeby

`JPYC Rinkeby` is a ERC-20 based contract that was deployed at the address [0xbd9c419003a36f187daf1273fce184e1341362c0][jpycr]. Here is the explanation how JPYC Rinkeby works if you want to get some.

1. Obtain Rinkeby Eth from one of the faucets to exchange it with JPYC Rinkeby
2. Send Rinkeby Eth to the `JPYC Rinkeby` contract address from your wallet
3. The contract computes how much JPYC should be returned with off-chain data from Chainlink Oracle
4. The contract sends equivalent JPYC to your wallet address at the current rate of ETH/JPY
5. It's time to use JPYC for your testing purpose!! Viola.

## Use of JPYC Polygon

`JPYC` in Polygon(Matic) is a ERC-20 based contract that was deployed at the address [0x6AE7Dfc73E0dDE2aa99ac063DcF7e8A63265108c][jpycm].

To buy JPYC in Polygon(Matic), visit https://jpyc.jp/

## Testing

The test scripts are stored under the tests directory, currently work in progress.

```sh
$ truffle development
> compile
> test
```

[jpycr]: https://rinkeby.etherscan.io/address/0xbd9c419003a36f187daf1273fce184e1341362c0 "JPYC Rinkeby"
[jpycm]: https://polygonscan.com/address/0x6AE7Dfc73E0dDE2aa99ac063DcF7e8A63265108c "JPYC Polygon"
[hagoromor]: https://rinkeby.etherscan.io/address/0x4A2164a1a93d6CaD9cb2994962dc0EC25C1d8E9E "HagoromoV1 Rinkeby"
[hagoromom]: https://polygonscan.com/address/0x0E30E8A64093758ee2000E1011a62D9bA29CB79D "HagoromoV1 Polygon"

repository: yuyasugano/hagoromo

gha_language: JavaScript

gha_license_id: MIT

repo_name: yuyasugano/hagoromo


text:
# dwikileaks
Decentralized WikiLeaks

## install && run run
```bash
cd app && npm install && npm run start
```

N.B. MetaMask is currently required as the means of issuing payments.

[devpost](https://devpost.com/software/dwikileaks)


text:
# Introduction

Admin Console is a web interface provided by LinDB that can be used to monitor the status of the cluster and query
the data in the cluster. The Admin Console is built into LinDB's broker
node, no independent deployment is required.

:::tip
The `dark`/`light` UI styles are currently supported.
:::
<image-window>

<EMAIL_ADDRESS>
</image-window>

The main features of the Admin Console are listed below, which can be further learned by clicking on the links in the
respective sections.

## Cluster Status

Health status of the broker, storage components and the running status of the host on which they reside in the
entire cluster are displayed

See [Cluster Status](overview.md) for more details.

## Data Search

Query data from cluster via [LinQL](../lin-ql.md), you can also use LinQL to see execution plan and execution status
statistics.

Please refer to [Data search](search.md) for more details.

## Data View

View data in the cluster through the UI clickstream, and generate the corresponding [LinQL](../lin-ql.md).

Please refer to [Data Explore](explore.md) for more details.

## Monitoring

No external components are required to monitor cluster components.

- [Dashboard](monitoring.md#dashboard)：Provides rich dashboards to monitor the running status of various components in
  the cluster；
- [Replication](monitoring.md#replication)：View the running status of each replica channel in real time, including the '
  WAL' replication status and the in-memory write status;
- [Request](monitoring.md#request)：View execution query statements in real time;
- [Log View](monitoring.md#log-view)：Real-time view of log files on each component node of the cluster;

## Meta Data Management

- [Storage](metadata.md#storage)：Management of the corresponding Storage cluster configuration;
- [Database](metadata.md#database)：Management of the corresponding database configuration;
- [Explore](metadata.md#explore)：Browse scheduling information in the cluster and the scheduling result status of each
  component node's memory;

branch_name: refs/heads/main


text:
```
npm i
npm run build # (node 12+ required)
```

The `src` folder uses [11ty](https://www.11ty.io).

# Configs

`/confbox.config.js` allows you to configure the start, end, and timezone of the conference.

``` JavaScript
module.exports = {
  /**
   * Origin of the conference, for creating absolute URLs.
   */
  origin: 'https://paulkinlan-devsummit.glitch.me',
  /**
   * Path of the site. / if it's top-level.
   */
  path: '/',
  /**
   * Name of the conference.
   */
  conferenceName: 'Clone Con',
  teaser:
    "Join the Chrome team for our two-day summit to learn about the latest techniques for building for the modern Web, get an early insight into what we're working on, and to share your thoughts on how we can move the platform forward, together.",
  /**
   * Data of the conference venue.
   */
  venue: {
    name: 'Yerba Buena Center for the Arts',
    city: 'San Francisco',
    region: 'CA',
    country: 'US',
    postalCode: '94103',
    streetAddress: '701 Mission St',
    mapsLink: 'https://goo.gl/maps/TBiTuFitnqe1wxPW7',
  },
  /**
   * Conference Twitter account
   */
  twitter: '@ChromiumDev',
  /**
   * Timezone of the conference, in the form [+-]HHMM.
   * Examples: -0700, +0100, +0530
   */
  timezone: '-0800',
  /**
   * Start of conference in the above timezone, in the format: YYYY/MM/DD HH:mm.
   */
  start: '2019/11/11 09:00',
  /**
   * Start of conference in the above timezone, in the format: YYYY/MM/DD HH:mm.
   */
  end: '2019/11/12 17:00',
  /**
   * Additional schedule items. These are merged with the content in /sessions/.
   */
  extraSchedule: [
    // Day 1
    {
      title: 'Break & livestream exclusive lightning talks',
      start: '2019/11/11 11:35',
      end: '2019/11/11 12:15',
      icon: '/schedule/assets/coffee.svg',
      livestreamed: true,
    },
    {
      title: 'Lunch & livestream exclusive lightning talks',
      start: '2019/11/11 13:25',
      end: '2019/11/11 14:35',
      icon: '/schedule/assets/food.svg',
      livestreamed: true,
    },
    {
      title: 'Break & livestream exclusive lightning talks',
      start: '2019/11/11 16:05',
      end: '2019/11/11 16:40',
      icon: '/schedule/assets/coffee.svg',
      livestreamed: true,
    },
    // Day 2
    {
      title: 'Break & livestream exclusive lightning talks',
      start: '2019/11/12 11:45',
      end: '2019/11/12 12:15',
      icon: '/schedule/assets/coffee.svg',
      livestreamed: true,
    },
    {
      title: 'Lunch & livestream exclusive lightning talks',
      start: '2019/11/12 13:25',
      end: '2019/11/12 14:35',
      icon: '/schedule/assets/food.svg',
      livestreamed: true,
    },
    {
      title: 'Break & livestream exclusive lightning talks',
      start: '2019/11/12 16:05',
      end: '2019/11/12 16:35',
      icon: '/schedule/assets/coffee.svg',
      livestreamed: true,
    }
  ],
};

```

# Schedule

The schedule is automatically generated from the meta-data in the each of the talks.

Sessions are stored in the `src/sessions/` folder.

Speakers are stored in the `src/speakers` folder.

## Sessions

To create a session, create a markdown file in the `src/sessions` folder (i.e, `keynote.md`)

Then add some YAML front matter that describes the session. For example:

```YAML
---
layout: layouts/session/index.njk
title: HTML isn't done!
topics:
  - Features
speakers:
  - nicole-sullivan
  - greg-whitworth
start: 2019/11/12 10:35
end: 2019/11/12 11:10
description: The web platform is now ready to pave those cow paths and extend HTML. And we need your help with these brand new shiny components…
youtubeId: ZFvPLrKZywA
---
```

* `start` and `end` will ensure that the session gets added to the schedule. The dates need to be formatted as follows `YYYY/MM/DD HH:mm`
* `speakers` is an ID to the speaker so that their profile can be rendered.
* `youtubeId` is only needed when the session has happened and there is a recording available.

## Speakers

In this current setup, speakers don't have their own pages, but we need to define their metadata so that we can show the speakers against any given session.

Speakers can be defined in the `src/speakers/` folder. The filename is formatted along the following guidelines `[firstname-familyname].md`, with the same format being used as the speaker ID in the session information.

```YAML
---
name: Adam Argyle
title: Google
avatar: /assets/speakers/adam-argyle.jpg
link: https://twitter.com/argyleink
---
```

# Data

All templates have access to the following:

- `conf.utcOffset` - The offset of the conference from the UTC timezone in milliseconds.
- `conf.start` - Start of the conference as a timestamp.
- `conf.end` - End of the conference as a timestamp.

# Helpers

## `{% className cssPath, class %}`

CSS files are processed as [CSS Modules](https://github.com/css-modules/css-modules). Within a template, reference classnames like this:

```njk
{% className cssPath, class %}
```

…and it will output the transformed class name. Eg:

```njk
{% set css = "/_includes/talk/style.css" %}
<h2 class="{% className css, 'talk-header' %}">Building offline-first apps</h2>
<div class="{% className css, 'talk-description' %}">
  …
</div>
```

In the example above, `set` is used to avoid repeating the path to the CSS.

## `{% css page, cssURL %}`

This will output a `<link>` pointing to the `cssURL` unless it's been included already for the current page. This means you can use an include multiple times without loading the CSS multiple times.

- `page` - This is the page object available in every template.
- `cssURL` - CSS url.

Example:

```njk
{% set css = "/_includes/talk/style.css" %}
{% css page, css %}
```

## `confboxAsset(url)`

In templates and CSS, references assets via `confboxAsset('/path/to/asset.jpg')`. This will be replaced with the hashed name of the asset.

```njk
<link rel="stylesheet" href="confboxAsset('/_includes/talk/style.css')">
```

```css
.whatever {
  background: url("confboxAsset(asset.jpg)");
}
```

Assets ending `.js` will be bundled together using Rollup.

## `{% confDate date, format %}`

This will take a `date` and format it for the timezone of the conference (as set in `/confbox.config.js`).

- `date` - The date to display. This can be a `Date` object or a timestamp.
- `format` - A formatting string as used by [date-and-time](https://www.npmjs.com/package/date-and-time#formatdateobj-formatstring-utc).

```njk
<p>The conference starts {% confDate conf.start, 'MMMM DD' %}</p>
```

## `{% isoDate date %}`

Returns an ISO 8601 version of a date. This is suitable for `<time datetime>` and other machine-readable formats like iCal.

- `date` - The date to display. This can be a `Date` object or a timestamp.

repository: PaulKinlan/devsummit

repo_name: PaulKinlan/devsummit


text:
---
layout: default
---

# 1993-10-14 - notes on Gejdenson's House hearing on mass-mkt. crypto export ctrls.

## Header Data

From: Stanton McCandlish<EMAIL_ADDRESS>To<EMAIL_ADDRESS>Message Hash: db55dcdd58b12ebd28aa5837c2884bb7c23338799e347e8fe503e6e5ad22b7d0

Message ID<EMAIL_ADDRESS>Reply To: _N/A_

UTC Datetime: 1993-10-14 17:56:58 UTC

Raw Date: Thu, 14 Oct 93 10:56:58 PDT

## Raw message

```
{% raw  %}From: Stanton McCandlish<EMAIL_ADDRESS>Date: Thu, 14 Oct 93 10:56:58 PDT
To<EMAIL_ADDRESS>Subject: notes on Gejdenson's House hearing on mass-mkt. crypto export ctrls.
Message-ID<EMAIL_ADDRESS>MIME-Version: 1.0
Content-Type: text/plain

I have a document, described in the subject line, by EFF's Danny Weitzner

If you'd like this posted (it's about 100 lines) let me know.  It's FTPable
at ftp.eff.org, /pub/eff/Temp, gejcrypt.exp

--
Stanton McCandlish     Electronic Frontier Foundation Online Activist & SysOp
"A nation that is afraid to let its people judge the truth and falsehood of
ideas in an open market is a nation that is afraid of its people." -JFK
-=><EMAIL_ADDRESS> NitV-DC BBS<PHONE_NUMBER>, Fido 1:109/? IndraNet 369:111/1

{% endraw %}
```

## Thread

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

+ Return to "[Stanton McCandlish <mech@eff.org>](/authors/stanton_mccandlish_mech_at_eff_org_)"

+ 1993-10-14 (Thu, 14 Oct 93 10:56:58 PDT) - notes on Gejdenson's House hearing on mass-mkt. crypto export ctrls. - _Stanton McCandlish<EMAIL_ADDRESS>


text:
---
layout: post
title: Converting a Git repo to SVN
typo_id: 54
comments: true
---

I know, usually people go the other way.  This is a bit of special case though:
a contractor had a project in git which we needed to import on our SVN server.
The contractor was only able to provide a zip of his repo, for various reasons.
This seems to preclude the widely used method detailed [here](http://code.google.com/p/support/wiki/ImportingFromGit).
I'm not enough of a git wizard to modify that for our specific situation.

Ironically enough, Mercurial provided the easiest solution.

Install Mercurial and a python subversion lib if you haven't already (I'm using Ubuntu, adjust as necessary):

``` bash
sudo apt-get install mercurial python-subversion
```

Configure Mercurial to use the ConvertExtension.
Note that the commit times will not be correct.

If needed, you can move your new SVN repo to another server using the
excellent instructions [here](http://www.petefreitag.com/item/665.cfm).

extension: markdown


text:
# CryptoMoneyTicker_LITE v1.0

![GIF_demo](https://github.com/mnett0/CryptoMoneyTicker_LITE/blob/master/media/demo2.gif)

## Description

CryptoMoneyTicker Lite is as its name suggests a lite version of the [CryptoMoneyTicker](https://github.com/mnett0/CryptoMoneyTicker) project.

It allows you to follow, on a small screen, 5 of your favorite cryptomoney that scroll every minute, by showing the "symbol" of the cryptomoney, its current exchange rate in dollars.

Data are collected via the API of the site [coinpaprika](https://coinpaprika.com/).

The arrow to the right indicates whether the previous price of the cryptomoney is falling or rising.

[Experimental] Left button allows to switch to the previous cryptomoney, the one in the middle to block it, the one on the right to switch to the next.

### Materials

 * ESP8266
 * OLED SSH1106 1.3"
 * 3 Push buttons (optional)

![schema](https://github.com/mnett0/CryptoMoneyTicker_LITE/blob/master/media/diagram.jpg)

### Library required

* [ArduinoJson](https://github.com/bblanchon/ArduinoJson)
* [ESP8266WiFi](https://github.com/esp8266/Arduino/tree/master/libraries)
* [AutoConnect](https://github.com/Hieromon/AutoConnect)
* [WiFiClientSecure](https://github.com/espressif/arduino-esp32/tree/master/libraries/WiFiClientSecure)
* [U8g2](https://github.com/olikraus/u8g2)
* [Bounce2](https://github.com/thomasfredericks/Bounce2)

### To begin

* To connect the device to the wifi watch [HERE](https://hieromon.github.io/AutoConnect/gettingstarted.html)

* Enter the 5 crypto-currency of your choice:

Go to [listings](https://api.coinpaprika.com/v1/coins) then CTRL+F to launch the search tool, then type the name of the desired currency, take its {id}.
And finally follow the instructions from line 67

![listings_picture](https://github.com/mnett0/CryptoMoneyTicker_LITE/blob/master/media/listings2.png)

* Choose the screen change interval *(do not exceed 30 changes/minute)*

      114  interval = yourInterval; // in milliseconds

### License

[MIT](https://github.com/mnett0/CryptoMoneyTicker_LITE/blob/master/LICENSE.md)


text:
[Back to root](https://github.com/israelias/cheathub#contents)
[Go to frontend](https://github.com/israelias/cheathub/tree/master/backend)
# MS3 Cheat-Hub Backend

The restful API is deployed at [cheathub-backend.herokuapp.com/](https://cheathub-backend.herokuapp.com/)

> *Note:* Open API spec is forthcoming. Please see `database/models.py` to preview the snippet, collection and user document models.

## Heroku Deployment
```bash
#create new git repository and add everything
git init
git add .
git commit -m "Initialize for Heroku deployment"
# heroku git:remote -a cheathub-backend
git remote add heroku git@heroku.com:cheathub-backend.git

#pull heroku but then checkback out our current local master and mark everything as merged
git pull heroku master
git checkout --ours .
git add -u
git commit -m "merged"

#push back to heroku, open web browser, and remove git repository
git push heroku master
heroku open
rm -fr .git

#go back to wherever we started.
cd -
```

heroku git:remote -a cheathub-backend
git push heroku master

## Development Server Configuration
- Clone this repository.
- Install/run a virtual environment: `pip install virtualenv`
- Create a virtual environment (name "venv" can be any): `virtualenv venv`
- Within the new venv, install the project's requirements:
`(venv) pip install requirements.txt`
- Alternatively, just install the requirements: `pip install requirements.txt`

## Available Scripts

In this half of the monorepo, you can run:

### `python run.py`

Serves the Databse backend.\
Runs the backend app in the development mode.\
Open [http://localhost:5000/admin](http://localhost:5000/admin) to view the admin panel in the browser (ensure `BASIC_AUTH` variables are set).

Open [http://localhost:5000/api/snippets](http://localhost:5000/api/snippets) to view the JSON response format of all public snippets -- assuming `snippet` objects have been created. Otherwise, use Postman to create documents locally (API spec is forthcoming!).

The page will reload if you make edits.\
You will also see any errors in the console.

## Environment Variables

To recreate this server, the following environment variables are required:

### `MONGOODB_HOST`

A connection string from Mongo Atlas for `Mongo Engine` to connect to remotely.

To recreate:
- Create an account with [MongoDB Atlas](https://www.mongodb.com).
- Create a Cluster named `hub`.
- Create a Database named `cheathubdb`.
- Click `Connect` to generate a connection string.

Set the variable to this connection string:
```python
# env.py
os.environ.setdefault("MONGODB_HOST", "mongodb+srv://<username>:<password>@hub.4kotr.mongodb.net/cheathubdb?retryWrites=true&w=majority")
```

### `SECRET_KEY`

Any key for `Sessions` to work.

Set the variable to this key:
```python
# env.py
os.environ.setdefault("SECRET_KEY", "<your secret key>")
```

### `MONGODB_PORT`

The port to connect to.

Set the variable to this key:
```python
# env.py
os.environ.setdefault("MONGODB_PORT", "5000")
```

### `JWT_SECRET_KEY`

Any string key for JWT to work.

Set the variable to this key:
```python
# env.py
os.environ.setdefault("JWT_SECRET_KEY", "<your JWT secret key>")
```
### `BASIC_AUTH_USERNAME`

Superuser username to access admin panel at `/admin`

Set the variable to this key:
```python
# env.py
os.environ.setdefault("BASIC_AUTH_USERNAME", "<your superuser username>")
```

### `BASIC_AUTH_PASSWORD`

Superuser password to access admin panel at `/admin`

Set the variable to this key:
```python
# env.py
os.environ.setdefault("BASIC_AUTH_USERNAME", "<your superuser password>")
```
### Flask Mail Option
> See [Flask Mail](https://pythonhosted.org/Flask-Mail/)
Similarly, apply the same logic to:
- `MAIL_SERVER`
- `MAIL_PORT`
- `MAIL_USERNAME`
- `MAIL_PASSWORD`
- `MAIL_DEFAULT_SENDER`

## Database Server

Want to create this Database from scratch that works with this code?

Add the above environment variables to a local `env.py`.
Configure the app's Flask instance to these variables:

```python
# as written in app.py
app.config['SAMPLE_ENV_VAR'] = os.environ.get("SAMPLE_ENV_VAR")
```

The Collections named `snippet`, `user`, and `collection` will automatically be created when documents are made following the classes in this repo. You can also create these collections manually, and add documents on the atlas Cloud interface or Mongo Compass.

### Mongo Shell

You can interact with the database via Mongo shell:
```python
show dbs
use cheathubdb
show collections
db.users.find().pretty()
```

### Adding New Documents

You can add documents via Postman or Mongo Compass.

## Module Documentation
- [Flask Mongo Engine](http://docs.mongoengine.org/projects/flask-mongoengine/en/latest/)
- [Flask CORS](https://flask-cors.readthedocs.io/en/latest/)
- [Flask JWT Extended](https://flask-jwt-extended.readthedocs.io/en/latest/)
- [Flask Admin](https://flask-admin.readthedocs.io/en/latest/)
- [Flask Session](https://flask-session.readthedocs.io/en/latest/)
- [Flask Restful](https://flask-restful.readthedocs.io/en/latest/)
- [Flask Mail](https://pythonhosted.org/Flask-Mail/)

## Resources
- [Heroku Deployment](https://stackoverflow.com/questions/7539382/how-can-i-deploy-push-only-a-subdirectory-of-my-git-repo-to-heroku)
- [Deploying Flask Restful Backend](https://medium.com/analytics-vidhya/flask-restful-api-with-heroku-da1ecf3e04b)

repository: taralika/cheathub

repo_name: taralika/cheathub


text:
---
title: Axion miniclusters and neutron stars
date: 2020-11-16T07:59:30.293Z
draft: false
featured: false
image:
  filename: featured.png
  focal_point: Smart
  preview_only: false
---
In two recent preprints available here ([2011.05377](https://arxiv.org/abs/2011.05377), [2011.05378](https://arxiv.org/abs/2011.05378)), I have shown together with my colleagues Bradley Kavanagh, Thomas Edwards, and Christoph Weniger, that an encounter between a neutron star and an axion *minicluster* would lead to a transient radio signal in the sky, which is potentially detectable. It took us 15 months to deliver the required code, which is available at <https://github.com/bradkav/axion-miniclusters/>. This immense work has been covered in great detail here: [https://www.sunnyvagnozzi.com/blog/top-arxiv-week-46](https://www.sunnyvagnozzi.com/blog/top-arxiv-week-46-2020)

repository: LBJ-Wade/academic-kickstart

repo_name: LBJ-Wade/academic-kickstart


text:
# gRPC Integration Demo

This sample solution shows how to add a gRPC service to an ABP Framework based web application and consume it from a console application.

* The sample is **based on the [Microsoft's tutorial](https://docs.microsoft.com/en-us/aspnet/core/tutorials/grpc/grpc-start)**.
* **See [this commit](https://github.com/abpframework/abp-samples/commit/9c62d1abe4809f18e5281b6595eb9a139fb7add3)** for all the changes made to a new application created via ABP CLI.
* The sample application uses ASP.NET Core MVC UI & EF Core, however nothing different for any other kind of UI framework or database provider.

## How to Run?

* Open the solution in the latest Visual Studio, or your favorite IDE.
* Run the `GrpcDemo.DbMigrator` to create the database of the application (set it as the startup project and run with the Ctrl+F5 keys).
* Run the `GrpcDemo.Web` project.
* Run the `GrpcDemo.HttpApi.Client.ConsoleTestApp` project.
* If you see the `Greeting: Hello GreeterClient` message on the console application window, then everything works as expected!

repository: abpframework/abp-samples

gha_language: C#

repo_name: abpframework/abp-samples


text:
### [Atom Core](https://github.com/atom/atom)

v1.6.0...v1.7.0-beta0

* [atom/atom#10747 - Clarify Windows build docs for VS2015 etc.](https://github.com/atom/atom/pull/10747)
* [atom/atom#10743 - Don't cascade on reload](https://github.com/atom/atom/pull/10743)
* [atom/atom#9198 - permit any whole number for tabLength](https://github.com/atom/atom/pull/9198)
* [atom/atom#10758 - Fix status in subdir](https://github.com/atom/atom/pull/10758)
* [atom/atom#10768 - Temporarily disable deserializers & viewProviders metadata fields](https://github.com/atom/atom/pull/10768)
* [atom/atom#10764 - Let packages define deserializers & view providers as main module methods](https://github.com/atom/atom/pull/10764)
* [atom/atom#10778 - Fix minor typo in CONTRIBUTING.md](https://github.com/atom/atom/pull/10778)
* [atom/atom#10789 - Upgrade autocomplete-plus to use new text-buffer API](https://github.com/atom/atom/pull/10789)
* [atom/atom#10797 - Fix status with multiple paths](https://github.com/atom/atom/pull/10797)
* [atom/atom#10797 - Fix status with multiple paths](https://github.com/atom/atom/pull/10797)
* [atom/atom#10792 - Fix TextEditorPresenter spec timeout.](https://github.com/atom/atom/pull/10792)
* [atom/atom#10803 - Fix typo in function call](https://github.com/atom/atom/pull/10803)
* [atom/atom#10828 - Fix another TextEditorPresenter spec race](https://github.com/atom/atom/pull/10828)
* [atom/atom#10827 - Port repository subdirectory status fixes to async repo](https://github.com/atom/atom/pull/10827)
* [atom/atom#10827 - Port repository subdirectory status fixes to async repo](https://github.com/atom/atom/pull/10827)
* [atom/atom#10838 - Log output for core specs](https://github.com/atom/atom/pull/10838)
* [atom/atom#10818 - Register Atom for file associations in Windows](https://github.com/atom/atom/pull/10818)
* [atom/atom#10605 - Periodically save state and store in indexedDB](https://github.com/atom/atom/pull/10605)
* [atom/atom#9627 - Update to Electron 0.36](https://github.com/atom/atom/pull/9627)
* [atom/atom#10835 - Add TextEditor.prototype.cursorsForScreenRowRange](https://github.com/atom/atom/pull/10835)
* [atom/atom#10795 - Remove unused Core Team Project Management labels](https://github.com/atom/atom/pull/10795)
* [atom/atom#10858 - Update grunt-electron-installer to latest version](https://github.com/atom/atom/pull/10858)
* [atom/atom#10846 - Add core setting for pending tabs configuration](https://github.com/atom/atom/pull/10846)
* [atom/atom#10846 - Add core setting for pending tabs configuration](https://github.com/atom/atom/pull/10846)
* [atom/atom#10873 - Avoid emitting config events while loading packages](https://github.com/atom/atom/pull/10873)
* [atom/atom#10872 - Terminate pending state for opened file if pending option is false](https://github.com/atom/atom/pull/10872)
* [atom/atom#10872 - Terminate pending state for opened file if pending option is false](https://github.com/atom/atom/pull/10872)
* [atom/atom#10863 - Compare markers instead of ranges in Selection](https://github.com/atom/atom/pull/10863)
* [atom/atom#10874 - Avoid Windows 260-character path limits in script\clean](https://github.com/atom/atom/pull/10874)
* [atom/atom#10861 - Compute line foldability lazily](https://github.com/atom/atom/pull/10861)
* [atom/atom#10843 - Bump packages to use async git](https://github.com/atom/atom/pull/10843)
* [atom/atom#10886 - Update Atom build directory in build instructions](https://github.com/atom/atom/pull/10886)
* [atom/atom#10885 - Cache regexes in LanguageMode.prototype.getRegexForProperty](https://github.com/atom/atom/pull/10885)
* [atom/atom#10888 - Load packages before deserializing state](https://github.com/atom/atom/pull/10888)
* [atom/atom#10870 - Add Issue template and extra version info](https://github.com/atom/atom/pull/10870)
* [atom/atom#10878 - Allow pasting white space when `autoIndentOnPaste` is enabled](https://github.com/atom/atom/pull/10878)
* [atom/atom#10895 - Fix some spec issues](https://github.com/atom/atom/pull/10895)
* [atom/atom#10901 - remove Open Roadmap menu item, fixes #10884](https://github.com/atom/atom/pull/10901)
* [atom/atom#10898 - Pass the notification manager when splitting panes](https://github.com/atom/atom/pull/10898)
* [atom/atom#10927 - Upgrade electron to fix command-backtick bug](https://github.com/atom/atom/pull/10927)
* [atom/atom#10926 - Fix case-preserving path relativization](https://github.com/atom/atom/pull/10926)
* [atom/atom#10926 - Fix case-preserving path relativization](https://github.com/atom/atom/pull/10926)
* [atom/atom#10921 - Add support for keybindings with keyup keystrokes](https://github.com/atom/atom/pull/10921)
* [atom/atom#10841 - Add the -a, --add CLI option](https://github.com/atom/atom/pull/10841)
* [atom/atom#10933 - Fix block decorations spec in text editor presenter](https://github.com/atom/atom/pull/10933)
* [atom/atom#10925 - Faster state serialization](https://github.com/atom/atom/pull/10925)
* [atom/atom#10967 - Fix a inconsistent getLineCount() use](https://github.com/atom/atom/pull/10967)
* [atom/atom#10967 - Fix a inconsistent getLineCount() use](https://github.com/atom/atom/pull/10967)
* [atom/atom#10975 - Update nodegit](https://github.com/atom/atom/pull/10975)
* [atom/atom#10975 - Update nodegit](https://github.com/atom/atom/pull/10975)
* [atom/atom#10326 - Fix Windows installer path update woes](https://github.com/atom/atom/pull/10326)
* [atom/atom#10959 - Refactor pending state to live in pane instead of items](https://github.com/atom/atom/pull/10959)
* [atom/atom#10959 - Refactor pending state to live in pane instead of items](https://github.com/atom/atom/pull/10959)
* [atom/atom#10984 - [WIP] experiment with circle ci](https://github.com/atom/atom/pull/10984)
* [atom/atom#10737 - Add MRU tab switching functionality](https://github.com/atom/atom/pull/10737)
* [atom/atom#11001 - onDidTerminatePendingState ➡ onItemDidTerminatePendingState](https://github.com/atom/atom/pull/11001)
* [atom/atom#11001 - onDidTerminatePendingState ➡ onItemDidTerminatePendingState](https://github.com/atom/atom/pull/11001)
* [atom/atom#10972 - Update build scripts to use the new railcar branching model](https://github.com/atom/atom/pull/10972)
* [atom/atom#10972 - Update build scripts to use the new railcar branching model](https://github.com/atom/atom/pull/10972)
* [atom/atom#11006 - Move spec from tabs package](https://github.com/atom/atom/pull/11006)
* [atom/atom#10851 - Registry for TextEditors](https://github.com/atom/atom/pull/10851)
* [atom/atom#11010 - Always strip git+ prefix and .git suffix from package repository URLs](https://github.com/atom/atom/pull/11010)
* [atom/atom#11011 - Autoscroll after consolidating selections](https://github.com/atom/atom/pull/11011)
* [atom/atom#11008 - Add documentation for order key in config.](https://github.com/atom/atom/pull/11008)
* [atom/atom#11009 - Don't destroy pane if replacing last pending item](https://github.com/atom/atom/pull/11009)
* [atom/atom#11009 - Don't destroy pane if replacing last pending item](https://github.com/atom/atom/pull/11009)
* [atom/atom#10675 - Expose application updater lifecycle events to packages](https://github.com/atom/atom/pull/10675)
* [atom/atom#11022 - Windows git fixes](https://github.com/atom/atom/pull/11022)
* [atom/atom#11022 - Windows git fixes](https://github.com/atom/atom/pull/11022)
* [atom/atom#11051 - Add new item before destroying pending item](https://github.com/atom/atom/pull/11051)
* [atom/atom#11051 - Add new item before destroying pending item](https://github.com/atom/atom/pull/11051)
* [atom/atom#11036 - Skip deleted directories when restoring application windows](https://github.com/atom/atom/pull/11036)
* [atom/atom#11063 - Show tooltip immediately if the tooltip trigger is manual](https://github.com/atom/atom/pull/11063)
* [atom/atom#10511 - Use ELECTRON_RUN_AS_NODE Variable Key](https://github.com/atom/atom/pull/10511)
* [atom/atom#10955 - TextEditor customization](https://github.com/atom/atom/pull/10955)
* [atom/atom#11065 - Default to auto height being true.](https://github.com/atom/atom/pull/11065)
* [atom/atom#11053 - Ensure atom.cmd --wait correctly waits in Windows cmd & powershell](https://github.com/atom/atom/pull/11053)
* [atom/atom#11060 - Serialize MarkerLayers only on quit](https://github.com/atom/atom/pull/11060)
* [atom/atom#11057 - Move Pane::addItem 'pending' option to options object](https://github.com/atom/atom/pull/11057)
* [atom/atom#11057 - Move Pane::addItem 'pending' option to options object](https://github.com/atom/atom/pull/11057)
* [atom/atom#11089 - Update nodegit](https://github.com/atom/atom/pull/11089)
* [atom/atom#11089 - Update nodegit](https://github.com/atom/atom/pull/11089)
* [atom/atom#11099 - Add zero to hexadecimal numbers below F (16)](https://github.com/atom/atom/pull/11099)
* [atom/atom#11101 - Emit status changes when anything changes](https://github.com/atom/atom/pull/11101)
* [atom/atom#11101 - Emit status changes when anything changes](https://github.com/atom/atom/pull/11101)
* [atom/atom#11077 - Scroll to cursor on unfold all](https://github.com/atom/atom/pull/11077)
* [atom/atom#11103 - Make cli atom --wait work on Cygwin](https://github.com/atom/atom/pull/11103)
* [atom/atom#11115 - Update nodegit](https://github.com/atom/atom/pull/11115)
* [atom/atom#11115 - Update nodegit](https://github.com/atom/atom/pull/11115)
* [atom/atom#11111 - Default the options parameter to an empty object](https://github.com/atom/atom/pull/11111)
* [atom/atom#11127 - Bump markdown-preview@v0.158.0](https://github.com/atom/atom/pull/11127)
* [atom/atom#8793 - squirrel-update test on desktop shortcut groups too many assertions](https://github.com/atom/atom/pull/8793)
* [atom/atom#11078 - Add TextEditors to the registry only when opting in](https://github.com/atom/atom/pull/11078)
* [atom/atom#11054 - Patch Environment On OSX And Allow A Different Environment Per Window](https://github.com/atom/atom/pull/11054)
* [atom/atom#11153 - Fix node env](https://github.com/atom/atom/pull/11153)
* [atom/atom#11162 - BufferedProcess: search only new data for new lines rather than entire buffer, take 2](https://github.com/atom/atom/pull/11162)
* [atom/atom#11166 - Note where GitRepositoryAsync deviates from its synchronous predecessor](https://github.com/atom/atom/pull/11166)

### [one-dark-ui](https://github.com/atom/one-dark-ui)

v1.1.9...v1.2.0

* [atom/one-dark-ui#113 - Specify config schema in package.json](https://github.com/atom/one-dark-ui/pull/113)
* [atom/one-dark-ui#121 - Fix typo in comment for ui-variables.less](https://github.com/atom/one-dark-ui/pull/121)

### [one-light-ui](https://github.com/atom/one-light-ui)

v1.1.9...v1.2.0

* [atom/one-light-ui#48 - Specify config schema in package.json](https://github.com/atom/one-light-ui/pull/48)

### [about](https://github.com/atom/about)

v1.3.0...v1.4.1

* [atom/about#6 - Specify deserializer in package.json](https://github.com/atom/about/pull/6)
* [atom/about#6 - Specify deserializer in package.json](https://github.com/atom/about/pull/6)
* [atom/about#13 - Specify deserializer method in package.json, the new way](https://github.com/atom/about/pull/13)
* [atom/about#12 - Show update information on the about page](https://github.com/atom/about/pull/12)
* [atom/about#15 - Move away from deprecated Electron require syntax](https://github.com/atom/about/pull/15)

### [archive-view](https://github.com/atom/archive-view)

v0.61.0...v0.61.1

* [atom/archive-view#32 - Specify deserializer in package.json](https://github.com/atom/archive-view/pull/32)

### [autocomplete-plus](https://github.com/atom/autocomplete-plus)

v2.25.0...v2.29.1

* [atom/autocomplete-plus#612 - bugfix: auto indentation after suggestion confirm](https://github.com/atom/autocomplete-plus/pull/612)
* [atom/autocomplete-plus#641 - Stop flickering when adjusting margins](https://github.com/atom/autocomplete-plus/pull/641)
* [atom/autocomplete-plus#637 - Move config schema to package.json](https://github.com/atom/autocomplete-plus/pull/637)
* [atom/autocomplete-plus#659 - Batch autocompletion show/hide](https://github.com/atom/autocomplete-plus/pull/659)
* [atom/autocomplete-plus#675 - :art: Clean up formatting of fileBlacklist setting description](https://github.com/atom/autocomplete-plus/pull/675)
* [atom/autocomplete-plus#672 - Redesign SymbolStore and SymbolProvider](https://github.com/atom/autocomplete-plus/pull/672)
* [atom/autocomplete-plus#667 - Add unicode support for \w regexps](https://github.com/atom/autocomplete-plus/pull/667)
* [atom/autocomplete-plus#681 - Fix maximum call stack size exceeded error](https://github.com/atom/autocomplete-plus/pull/681)

### [autosave](https://github.com/atom/autosave)

v0.23.0...v0.23.1

* [atom/autosave#56 - Move config schema to package.json](https://github.com/atom/autosave/pull/56)

### [bracket-matcher](https://github.com/atom/bracket-matcher)

v0.79.0...v0.81.0

* [atom/bracket-matcher#196 - Fix spelling in settings](https://github.com/atom/bracket-matcher/pull/196)
* [atom/bracket-matcher#197 - Move config schema to package.json](https://github.com/atom/bracket-matcher/pull/197)
* [atom/bracket-matcher#212 - Make updating matches faster for multi-cursor editing](https://github.com/atom/bracket-matcher/pull/212)
* [atom/bracket-matcher#219 - Clean up view subscriptions when editor is destroyed](https://github.com/atom/bracket-matcher/pull/219)
* [atom/bracket-matcher#221 - Enable bracket matching for elixir](https://github.com/atom/bracket-matcher/pull/221)

### [deprecation-cop](https://github.com/atom/deprecation-cop)

v0.54.0...v0.54.1

* [atom/deprecation-cop#65 - Move deserializer into package.json](https://github.com/atom/deprecation-cop/pull/65)
* [atom/deprecation-cop#65 - Move deserializer into package.json](https://github.com/atom/deprecation-cop/pull/65)
* [atom/deprecation-cop#67 - Specify deserializer method in package.json](https://github.com/atom/deprecation-cop/pull/67)

### [fuzzy-finder](https://github.com/atom/fuzzy-finder)

v0.94.0...v1.0.3

* [atom/fuzzy-finder#160 - Move config schema to package.json](https://github.com/atom/fuzzy-finder/pull/160)
* [atom/fuzzy-finder#167 - Async git](https://github.com/atom/fuzzy-finder/pull/167)
* [atom/fuzzy-finder#174 - Fix spec race](https://github.com/atom/fuzzy-finder/pull/174)
* [atom/fuzzy-finder#178 - Handle symlink project paths](https://github.com/atom/fuzzy-finder/pull/178)
* [atom/fuzzy-finder#180 - Return project paths correctly if last-opened path is not in project](https://github.com/atom/fuzzy-finder/pull/180)

### [git-diff](https://github.com/atom/git-diff)

v0.57.0...v1.0.1

* [atom/git-diff#81 - Move config schema to package.json](https://github.com/atom/git-diff/pull/81)
* [atom/git-diff#82 - Async git](https://github.com/atom/git-diff/pull/82)
* [atom/git-diff#95 - Catch errors from new files.](https://github.com/atom/git-diff/pull/95)

### [grammar-selector](https://github.com/atom/grammar-selector)

v0.48.0...v0.48.1

* [atom/grammar-selector#25 - Add description for config setting](https://github.com/atom/grammar-selector/pull/25)
* [atom/grammar-selector#29 - Move config schema to package.json](https://github.com/atom/grammar-selector/pull/29)

### [image-view](https://github.com/atom/image-view)

v0.56.0...v0.57.0

* [atom/image-view#40 - Zoom to fit](https://github.com/atom/image-view/pull/40)

### [incompatible-packages](https://github.com/atom/incompatible-packages)

v0.25.0...v0.25.1

* [atom/incompatible-packages#11 - Move deserializer to package.json](https://github.com/atom/incompatible-packages/pull/11)
* [atom/incompatible-packages#11 - Move deserializer to package.json](https://github.com/atom/incompatible-packages/pull/11)
* [atom/incompatible-packages#12 - Specify deserializer method in package.json](https://github.com/atom/incompatible-packages/pull/12)

### [keybinding-resolver](https://github.com/atom/keybinding-resolver)

v0.33.0...v0.35.0

* [atom/keybinding-resolver#23 - Update coffeelint support](https://github.com/atom/keybinding-resolver/pull/23)
* [atom/keybinding-resolver#37 - Show keyup events that match a binding](https://github.com/atom/keybinding-resolver/pull/37)

### [line-ending-selector](https://github.com/atom/line-ending-selector)

v0.3.0...v0.3.1

* [atom/line-ending-selector#17 - Move config schema to package.json](https://github.com/atom/line-ending-selector/pull/17)

### [link](https://github.com/atom/link)

v0.31.0...v0.31.1

* [atom/link#14 - Move away from deprecated Electron require syntax](https://github.com/atom/link/pull/14)

### [markdown-preview](https://github.com/atom/markdown-preview)

v0.157.2...v0.158.0

* [atom/markdown-preview#349 - Use new package.json fields (configSchema and deserializers)](https://github.com/atom/markdown-preview/pull/349)
* [atom/markdown-preview#349 - Use new package.json fields (configSchema and deserializers)](https://github.com/atom/markdown-preview/pull/349)
* [atom/markdown-preview#367 - Use new package.json fields to allow deferred loading](https://github.com/atom/markdown-preview/pull/367)
* [atom/markdown-preview#335 - Use GitHub style when "Save as HTML"](https://github.com/atom/markdown-preview/pull/335)

### [notifications](https://github.com/atom/notifications)

v0.62.1...v0.63.1

* [atom/notifications#105 - Move config schema to package.json](https://github.com/atom/notifications/pull/105)
* [atom/notifications#111 - Use https://git.io insead of http](https://github.com/atom/notifications/pull/111)
* [atom/notifications#113 - replace ATOM_HOME in issue title with generic placeholder](https://github.com/atom/notifications/pull/113)
* [atom/notifications#114 - Use bit.ly instead of git.io.](https://github.com/atom/notifications/pull/114)
* [atom/notifications#115 - URL shortening, take 2](https://github.com/atom/notifications/pull/115)

### [open-on-github](https://github.com/atom/open-on-github)

v0.41.0...v1.0.1

* [atom/open-on-github#59 - Move config schema to package.json](https://github.com/atom/open-on-github/pull/59)
* [atom/open-on-github#60 - Async git](https://github.com/atom/open-on-github/pull/60)
* [atom/open-on-github#66 - Move away from deprecated Electron require syntax](https://github.com/atom/open-on-github/pull/66)

### [package-generator](https://github.com/atom/package-generator)

v0.41.0...v1.0.0

* [atom/package-generator#37 - Move config schema to package.json](https://github.com/atom/package-generator/pull/37)
* [atom/package-generator#36 - Support JS package generation](https://github.com/atom/package-generator/pull/36)

### [settings-view](https://github.com/atom/settings-view)

v0.232.3...v0.235.0

* [atom/settings-view#731 - Specify deserializer in package.json](https://github.com/atom/settings-view/pull/731)
* [atom/settings-view#749 - Move away from deprecated Electron require syntax](https://github.com/atom/settings-view/pull/749)
* [atom/settings-view#750 - Another require fix for remote](https://github.com/atom/settings-view/pull/750)
* [atom/settings-view#743 - Display and manage Git-based packages](https://github.com/atom/settings-view/pull/743)
* [atom/settings-view#748 - Add defaults on focus](https://github.com/atom/settings-view/pull/748)
* [atom/settings-view#736 - Add collapsable section for option groups](https://github.com/atom/settings-view/pull/736)

### [spell-check](https://github.com/atom/spell-check)

v0.65.0...v0.67.0

* [atom/spell-check#103 - Update README.md](https://github.com/atom/spell-check/pull/103)
* [atom/spell-check#33 - Add feature: toggle on/off](https://github.com/atom/spell-check/pull/33)
* [atom/spell-check#108 - subscriptionsOfCommands -> commandSubscription](https://github.com/atom/spell-check/pull/108)
* [atom/spell-check#112 - Move config schema to package.json](https://github.com/atom/spell-check/pull/112)
* [atom/spell-check#114 - updates spellchecker to use system language](https://github.com/atom/spell-check/pull/114)

### [status-bar](https://github.com/atom/status-bar)

v0.83.0...v1.2.0

* [atom/status-bar#121 - Move config schema to package.json](https://github.com/atom/status-bar/pull/121)
* [atom/status-bar#114 - Async git](https://github.com/atom/status-bar/pull/114)
* [atom/status-bar#122 - Make updating info faster for multi-cursor edits](https://github.com/atom/status-bar/pull/122)
* [atom/status-bar#129 - Hide diff stats for new files](https://github.com/atom/status-bar/pull/129)
* [atom/status-bar#131 - Fix error with no active item](https://github.com/atom/status-bar/pull/131)
* [atom/status-bar#133 - Move to the footer](https://github.com/atom/status-bar/pull/133)

### [styleguide](https://github.com/atom/styleguide)

v0.45.1...v0.45.2

* [atom/styleguide#34 - Specify deserializer in package.json](https://github.com/atom/styleguide/pull/34)

### [symbols-view](https://github.com/atom/symbols-view)

v0.110.1...v0.112.0

* [atom/symbols-view#147 - Add support for ES2015 static methods](https://github.com/atom/symbols-view/pull/147)
* [atom/symbols-view#151 - Specify config schema in package.json](https://github.com/atom/symbols-view/pull/151)
* [atom/symbols-view#157 - Add es7 async functions to ctags](https://github.com/atom/symbols-view/pull/157)

### [tabs](https://github.com/atom/tabs)

v0.91.3...v0.92.0

* [atom/tabs#134 - Add "open in new window" option to tabs context menu](https://github.com/atom/tabs/pull/134)

### [timecop](https://github.com/atom/timecop)

v0.33.0...v0.33.1

* [atom/timecop#15 - Specify deserializer in package.json](https://github.com/atom/timecop/pull/15)

### [welcome](https://github.com/atom/welcome)

v0.33.0...v0.34.0

* [atom/welcome#45 - Move config schema to package.json](https://github.com/atom/welcome/pull/45)
* [atom/welcome#47 - Change menu names for different platforms](https://github.com/atom/welcome/pull/47)

### [whitespace](https://github.com/atom/whitespace)

v0.32.1...v0.32.2

* [atom/whitespace#107 - Move config schema to package.json](https://github.com/atom/whitespace/pull/107)

### [language-clojure](https://github.com/atom/language-clojure)

v0.19.1...v0.20.0

* [atom/language-clojure#39 - Fix tokenization of sexp and map nested at beginning of another sexp](https://github.com/atom/language-clojure/pull/39)

### [language-coffee-script](https://github.com/atom/language-coffee-script)

v0.46.0...v0.46.1

* [atom/language-coffee-script#85 - Check for word boundaries when attempting to auto-indent](https://github.com/atom/language-coffee-script/pull/85)

### [language-csharp](https://github.com/atom/language-csharp)

v0.11.0...v0.12.0

* [atom/language-csharp#53 - Make nameof a keyword](https://github.com/atom/language-csharp/pull/53)
* [atom/language-csharp#54 - Make C# 6's when a keyword](https://github.com/atom/language-csharp/pull/54)

### [language-gfm](https://github.com/atom/language-gfm)

v0.84.0...v0.85.0

* [atom/language-gfm#140 - Highlight HTML entities inside bold, italic, and strikethrough text](https://github.com/atom/language-gfm/pull/140)

### [language-html](https://github.com/atom/language-html)

v0.44.0...v0.44.1

* [atom/language-html#108 - Fixes #102 - ng-template highlighting for script tags](https://github.com/atom/language-html/pull/108)

### [language-json](https://github.com/atom/language-json)

v0.17.4...v0.17.6

* [atom/language-json#42 - Add .jsonld file support](https://github.com/atom/language-json/pull/42)
* [atom/language-json#43 - add composer.lock files](https://github.com/atom/language-json/pull/43)
* [atom/language-json#44 - Add .tern-project and .tern-config to file types](https://github.com/atom/language-json/pull/44)

### [language-ruby](https://github.com/atom/language-ruby)

v0.68.0...v0.68.3

* [atom/language-ruby#135 - Adds cr (Crystal lang) to fileTypes for Ruby grammar](https://github.com/atom/language-ruby/pull/135)
* [atom/language-ruby#137 - Changes dop and do order priority](https://github.com/atom/language-ruby/pull/137)
* [atom/language-ruby#136 - Fixes for tokenization of Kernel methods ending in ? or !](https://github.com/atom/language-ruby/pull/136)
* [atom/language-ruby#140 - Revert do/dop order change](https://github.com/atom/language-ruby/pull/140)

### [language-sass](https://github.com/atom/language-sass)

v0.45.0...v0.46.0

* [atom/language-sass#101 - Add individual border-radius properties](https://github.com/atom/language-sass/pull/101)

### [language-text](https://github.com/atom/language-text)

v0.7.0...v0.7.1

* [atom/language-text#5 - Add travis.yml](https://github.com/atom/language-text/pull/5)
* [atom/language-text#6 - Update legal date to 2016](https://github.com/atom/language-text/pull/6)

### [language-xml](https://github.com/atom/language-xml)

v0.34.2...v0.34.4

* [atom/language-xml#43 - Fix incorrect highlighting for empty element](https://github.com/atom/language-xml/pull/43)

repository: paradoxxxzero/atom

repo_name: paradoxxxzero/atom


text:
Stats Poller
============
Use the simple_ne application environment to control the behavior of the stats collector.

1. stats is the list of the stats to poll.  The valid values are: flow, table, aggregate, port, queue, group, and meter.  These correspond to the similarly named stats get requests in the open flow protocol.
2. stats_interval is the number of seconds between polls.  Set to 'disable' to disable stats polling.

The open flow stats are published as folsom gauge metrics.  The following naming scheme is used to encode the open flow stats into folsom metric names:

- *datapath_id*-flow-*table_id*-*priority*-*cookie* - flow stats
- *datapath_id*-table-*table_id* - table stats
- *datapath_id*-aggregate - aggregate stats
- *datapath_id*-port-*port_num* - port stats
- *datapath_id*-queue-*queue_id*-*port_num* - queue stats
- *datapath_id*-group-*group_id* - group stats
- *datapath_id*-group-*group_id*-bucket-*bucket_id* - group bucket stats
- *datapath_id*-meter-*meter_id* -meter stats
- *datapath_id*-meter-*meter_id*-band-*band_id* - meter band stats

For bucket and band stats, the statistics poller creates bucket and band ids to give each one a unique identifier within the group and meter.  The bucket and band ids are not in the open flow protocol.

## Configuration

Set the configuration rel/files/sys.config.  You may configure of_driver, ofs_handler, simple_ne, lager, and sasl.  of_driver listen_port is the TCP/IP port LOOM uses to listen for connections from switches.  listen_ip is the IP address of the listener port.  {0,0,0,0} means any address.  It should not be necessary to change any of the other of_driver settings or any ofs_handler settings.  simple_ne settings are described below.

## Building

After getting a copy of the LOOM repo:

1. edit the rel/files/sys.config as needed
2. make offline

## Starting

After running make offline to build the release use the utility program rel/loom/bin/loom start loom to start and stop the LOOM node.  For example: rel/loom/bin/loom console starts LOOM with an interactive Erlang shell.

repository: vasu-dasari/loom

repo_name: vasu-dasari/loom


text:
# nextcloud-scripts

This repository contains some useful scripts to work on Nextcloud.

## copyLabels

This is a admin tool to copy labels from the server repository over to another repositories. `feature:` labels will be ignored. Already existing labels will be updated.

### Configuration

You need a github.conf file in the root folder which looks like this:

```
[auth]
token = <your github auth token>
```

### Usage
`python copyLabels.py -r <repository>`

##### Arguments:

`-r`, `--repository=<repository>`: repository which should be updated

##### Optional Arguments:

`--init`: this means you want to initialize an new repository, already existing labels will be deleted

## initNextcloud

a script to set up a new Nextcloud installation or reset a existing one for development purpose. It creates 10 users and also download the most important apps

### Usage

`./initNextcloud.sh`

## switchBranch

Allows you to switch Nextcloud and all installed app to a new branch or tag. The script needs to be executed in the root of the Nextcloud installation. If no branch/tag is given the script will switch the installation to master

### Usage

`./switchBranch.sh <branch/tag>`

repository: schiessle/nextcloud-scripts

repo_name: schiessle/nextcloud-scripts


text:
---
title: How to create Tensorflow 2 Sequence Dataset from scratch
date: '2019-12-28'
template: 'post'
draft: false
tags:
  - 'Tensorflow'
  - 'Machine Learning'
  - 'AI'
  - 'Data'
description: 'How to create your own Dataset for Tensorflow model training by extending Sequence class?'
---

Image source: https://swinghu.github.io/assets/face-detection-recognition/From_Facial_Parts_Responses_to_Face_Detection_A_Deep_Learning_Approach_index.png

## The problem
Modern Machine Learning solutions require a huge amount of data, that's definitely the case when working with image recognition/object detection. Because of that, we need to create more and more complex datasets to teach our models. At this moment we cannot store the whole thing in the memory (sometimes even hard drive has a problem), quite often a description of that dataset is not directly readable by Tensorflow's __Dataset__. That's why we need to create a modern solution to handle and preprocess an enormous amount of data in easy to understand way using Sequences.

> __TLDR__:
>
> Here is a code: [https://gist.github.com/burnpiro/c3835a1f914545f2034f4190b1e83153](https://gist.github.com/burnpiro/c3835a1f914545f2034f4190b1e83153)
>
> Use Sequences to make datasets maintainable and fast.

## What is the Sequence?
According to documentation, Sequence is:

> __Base object for fitting to a sequence of data, such as a dataset.__

Sequence object is created using [__Sequence Class__](https://github.com/tensorflow/tensorflow/blob/r2.0/tensorflow/python/keras/utils/data_utils.py#L331-L406). The best thing about it is that we can extend it. Every Sequence has to implement 3 methods:
- `__getitem__` - used to extract an item from dataset
- `__len__` - returns the length of our dataset
- `__init__` - initializing our dataset (this one is not required but we need some kind of initialization)

Sequence allows us to create complex datasets and even modify them at the end of each epoch by implementing `on_epoch_end`. We're going to focus only on those 3 methods but if you can you can play with `on_epoch_end`.

## Our Test Dataset

In our example, we're going to use WIDER FACE dataset

> Instruction how to get dataset is [Here](https://github.com/burnpiro/tiny-face-detection-tensorflow2#dataset)

This dataset contains over 32k images and weights around 2GB so we don't really want to keep it in the memory all the time. This dataset is used to teach object detection models so it contains bounding boxes for every face on the image.

### Data structure

Dataset is already split into __Train__ and __Validation__ so we don't have to do it again. We have two folders: __WIDER_train__ and __WIDER_val__. The image description is stored in `wider_face_train_bbx_gt.txt` and `wider_face_val_bbx_gt.txt`. Here is an example of one of the images

Image source: WIDER FACE dataset

Description for that image in `.txt` file is as follows:

```
22--Picnic/22_Picnic_Picnic_22_277.jpg
3
196 410 74 114 1 0 0 0 0 0
344 404 62 88 1 0 0 0 0 0
634 222 58 86 1 0 0 0 0 0
```

It might seem unclear at first but everything is explained in Dataset's Readme file:

```
File name
Number of bounding box
x1, y1, w, h, blur, expression, illumination, invalid, occlusion, pose
```

So our image contains 3 boxes. The first two numbers are X and Y coordinates followed by box width and height. After that we have more information about the face inside the box, we're not going to use those ones because our goal is just object detection (face detection) but feel free to check Readme file for properties description.

## Model's input and output

Now after we know how our dataset looks like we need to figure out what is an input and output of our __Model__.

> You can skip this section if you want. It's not necessary to know anything more than the input and output size of the model to construct training examples.
>- Input - __224x224x3__
>- Output - __7x7x5__
>
>Imho, it's beneficial to understand it but not required. I've selected this model because most of the guides are using simple examples from regression networks and it's hard to find a solution for a complex one.

For this example, we're going to use __MobileNetV2__ (`mobilenet_v2_0.75_224` to be precise), our model has an input size of __224x224x3__ (width x height x RGB). So every example in our sentence has to produce input of that size.

Output, on the other hand, is completely up to us. We're using MobileNet as a feature extractor that gives us output from the last Conv layer of __7x7x240__. We want to keep 7x7 grid and our detection requires only 5 values per grid (because we have only one class). In the end, our output should look like __7x7x5__ (grid width x grid width x number of classes times 5).

I'm not going to discuss how this network works, you can easily find any tutorial on CNNs and how to use them as a feature extractor for object detection (maybe some other guide in the future).

This is how our model looks like at the end:
```
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to
==================================================================================================
input_1 (InputLayer)            [(None, 224, 224, 3) 0
________________________________________________________________________

----- Rest of MobileNetV2 ------
__________________________________________________________________________________________________
block_16_project_BN (BatchNorma (None, 7, 7, 240)    960         block_16_project[0][0]
__________________________________________________________________________________________________

----- Our Layers conected to MobileNet output------
__________________________________________________________________________________________________
conv2d_2 (Conv2D)               (None, 7, 7, 5)      1205        activation[0][0]
```

Now it should be clear that our Dataset should generate examples like:

- Input - __224x224x3__
- Output - __7x7x5__

## Extend Sequence Class

```python
# Data generator boilerplace
class DataGenerator(tf.keras.utils.Sequence):

    def __init__(self, file_path, config_path, debug=False):
        # Sequence initialization

    def __len__(self):
        # Should return Sequence length

    def __getitem__(self, idx):
        # Returns preprocessed data

```

### Initialization

The first thing we need to implement is data initialization.

```python
    def __init__(self, file_path, config_path, debug=False):
        # Sequence initialization

```

Because dataset description is located in two different files (one for training and one for validation) we need to pass paths to the folder with images (`file_path`) and the path to our dataset spec (`config_path`). `debug` options allow us to display additional messages when processing dataset.

Inside `__init__` method we have access to `self` object. This object represents our sequence and we want to initialize some default values on it.

```python
self.boxes = []
self.debug = debug
self.data_path = file_path
```

- `self.boxes` is going to store all boxes definitions from dataset
- `self.debug` enables __debug__ mode
- `self.data_path` stores path to images for later processing

After initialization, we need to check if paths are valid (if not there is no reason to create Sequence).

```python
if not os.path.isfile(config_path):
    print("File path {} does not exist. Exiting...".format(config_path))
    sys.exit()

if not os.path.isdir(file_path):
    print("Images folder path {} does not exist. Exiting...".format(file_path))
    sys.exit()
```

When everything is correct we can start reading config file

```python
with open(config_path) as fp:
    image_name = fp.readline()
    cnt = 1
    while image_name:
        # image_name - relative path to our image
        # in this loop we have to process each image definition
```

We're going to read this file line by line but as you remember file is structured in a specific way:

```
File name
Number of bounding box
x1, y1, w, h, blur, expression, illumination, invalid, occlusion, pose
```

So after reading __File name__ and __Number of bounding box__ we need to use that number to know how many lines to read as bounding boxes definition.

```python
with open(config_path) as fp:
    image_name = fp.readline()
    cnt = 1
    while image_name:
        num_of_obj = int(fp.readline())
        for i in range(num_of_obj):
            obj_box = fp.readline().split(' ')
            x0, y0, w, h = get_box(obj_box)
            if w == 0:
                # remove boxes with no width
                continue
            if h == 0:
                # remove boxes with no height
                continue
            self.boxes.append((image_name.strip(), x0, y0, w, h))
        image_name = fp.readline()
        cnt += 1
```

The first thing we have to do inside `while` loop is to extract how many boxes there are. To do this we're calling `int(tf.readline()` which returns next line value as an integer. We're using this number to iterate through the next `num_of_obj` lines. Each line values are separated by an empty string so we have to split values before processing `obj_box = fp.readline().split(' ')`. We're interested in the first 4 values from each line but those values have to be integers. To extract those values it's easier to create a helper function `get_box`:

```python
# Input: [x0, y0, w, h, blur, expression, illumination, invalid, occlusion, pose]
# Output: x0, y0, w, h
def get_box(data):
    x0 = int(data[0])
    y0 = int(data[1])
    w = int(data[2])
    h = int(data[3])
    return x0, y0, w, h
```

This function receives a list of strings and returns 4 integers we need. After that, we're appending our box to Sequence object `self.boxes.append((image_name.strip(), x0, y0, w, h))` and read the next line.

Everything seems fine and we should be ready to move to the next part, but if we try to execute this code it will fail.

```bash
ValueError: invalid literal for int() with base 10: '0--Parade/0_Parade_Parade_0_630.jpg\n'
```

Did we make a mistake in the code? No, we didn't. We just didn't explore our dataset carefully enough. If we jump to our __.txt__ file and find the line with that sentence it's much clearer what just happen.

```
0--Parade/0_Parade_Parade_0_452.jpg
0
0 0 0 0 0 0 0 0 0 0
0--Parade/0_Parade_Parade_0_630.jpg
```

We didn't anticipate there are images without faces and because of how our iteration is designed it's not going to skip line with zeros after reading `num_of_obj = 0`. Knowing that we can create a quick fix just after for loop:

```python
if num_of_obj == 0:
    obj_box = fp.readline().split(' ')
    x0, y0, w, h = get_box(obj_box)
    self.boxes.append((image_name.strip(), x0, y0, w, h))
```

That way, when there are no faces on an image we're going to create an empty example.

### Return length of the dataset

That should be easy... But it isn't :) When implementing `__len__` method we need to remember that training works in batches. Because of that, we have to divide the number of boxes by our batch size and return that instead of just the length of our array.

```python
def __len__(self):
    return math.ceil(len(self.boxes) / cfg.TRAIN.BATCH_SIZE)
```

Notice that we're using a mysterious config called `cfg`. This is just an `EasyDict` dictionary that holds our dataset settings. You don't have to worry about it right now, I'll show you its definition at the end. For now, just assume that it stores all config values.

### Returning items

Till now we've managed to create our Sequence but we still didn't define how to process images in the dataset. Each box in Sequence has 5 values:
- path to image
- x value for box center
- y value for box center
- box width
- box height

`__getitem__(self, idx)` method should return two values (input, output). But because we're working in batches those values will be arrays with multiple images and corresponding boxes.

```python
def __getitem__(self, idx):
    boxes = self.boxes[idx * cfg.TRAIN.BATCH_SIZE:(idx + 1) * cfg.TRAIN.BATCH_SIZE]
```

First, we have to extract boxes definition from given __idx__ to __idx + BATCH_SIZE__. So if our __BATCH_SIZE__ is __16__ and __idx__ is __0__ then we're processing boxes from __0__ to __16__.

Now we have to define zeros matrix for input and output

```python
batch_images = np.zeros((len(boxes), cfg.NN.INPUT_SIZE, cfg.NN.INPUT_SIZE, 3), dtype=np.float32)
batch_boxes = np.zeros((len(boxes), cfg.NN.GRID_SIZE, cfg.NN.GRID_SIZE, 5), dtype=np.float32)
```

- `batch_images` contains images and has a size of __16x224x224x3__.
- `batch_boxes` contains expected output in a grid and has a size of __16x7x7x5__.

Now we have to iterate over our batch and process each example.

```python
for i, row in enumerate(boxes):
    path, x0, y0, w, h = row
```

First, we have to create an input from the image path. To do that we're going to use `tf.keras.preprocessing.image.load_img`.

```python
proc_image = tf.keras.preprocessing.image.load_img(self.data_path + path)

image_width = proc_image.width
image_height = proc_image.height

proc_image = tf.keras.preprocessing.image.load_img(self.data_path + path,
                                               target_size=(cfg.NN.INPUT_SIZE, cfg.NN.INPUT_SIZE))

proc_image = tf.keras.preprocessing.image.img_to_array(proc_image)
proc_image = np.expand_dims(proc_image, axis=0)
proc_image - tf.keras.applications.mobilenet_v2.preprocess_input(proc_image)

batch_images[i] = proc_image
```

For each image, we need to extract original width and height to be able to scale __x0, y0, w, h__ of our box. That's why we're calling this method twice (second time with `target_size` set to our __224x224__). In the end, our processed image is stored in `batch_images`.

Next, we have to deal with box position and size. Original values are integers and represent a point on the original image. What we need to do is to scale them into __<0,1>__ values. That's why we need `image_width` and `image_height` from the original image.

```python
    image_width = proc_image.width
    image_height = proc_image.height

    # make sure none of the points is out of image border
    x0 = max(x0, 0)
    y0 = max(y0, 0)

    x0 = min(x0, image_width)
    y0 = min(y0, image_height)

    x_c = (cfg.NN.GRID_SIZE / image_width) * x0
    y_c = (cfg.NN.GRID_SIZE / image_height) * y0

    floor_y = math.floor(y_c)  # handle case when x i on the corner
    floor_x = math.floor(x_c)  # handle case when y i on the corner

    batch_boxes[i, floor_y, floor_x, 0] = h / image_height
    batch_boxes[i, floor_y, floor_x, 1] = w / image_width
    batch_boxes[i, floor_y, floor_x, 2] = y_c - floor_y
    batch_boxes[i, floor_y, floor_x, 3] = x_c - floor_x
    batch_boxes[i, floor_y, floor_x, 4] = 1
```

This section applies extra validation to be sure that our point lays inside the image. Except that we're calculating relative position of that point to whatever grid cell it is in.

![Object](./grid.png)

Default values for this point might be:
- x = 0.35 (relative to top left corner)
- y = 0.35 (relative to top left corner)

But our output requires position in relation to the grid cell (one which contains the point). Because of that new coordinates are as follows:
- x = 0.5 (relative to cell top left corner)
- y = 0.5 (relative to cell top left corner)

In the end, we're saving those values inside i-th output and 3x3 grid cell (rest of them remains zero). Notice that the __width__ and the __height__ of the box are still scaled to the full image.

After we process all examples in the batch we need to only return both arrays

```python
return batch_images, batch_boxes
```

To use our generator just create an instance of it and pass right paths

```python
train_datagen = DataGenerator(file_path=cfg.TRAIN.DATA_PATH, config_path=cfg.TRAIN.ANNOTATION_PATH)
val_generator = DataGenerator(file_path=cfg.TEST.DATA_PATH, config_path=cfg.TEST.ANNOTATION_PATH, debug=False)
```

now we can fit our data for training
```python
model.fit_generator(generator=train_datagen,
                        epochs=cfg.TRAIN.EPOCHS,
                        callbacks=[# your callbacks for TF],
                        shuffle=True,
                        verbose=1)
```

Here is full code for __DataGenerator__ Class:
[https://gist.github.com/burnpiro/c3835a1f914545f2034f4190b1e83153](https://gist.github.com/burnpiro/c3835a1f914545f2034f4190b1e83153)

## Summary

If you're working with complex datasets (or just really large ones) it's a good idea to think about Sequences and create your won Sequence Class for data generation. It's efficient (multithreading out of the box) and easy to maintain way you'll appreciate, especially when working with the team of engineers and version control.

This code is just an example, your implementation may (and probably will) look different. Everything depends on specific problems and structure of the dataset but imho it's a lot easier to define data processing inside class than using C like approach you can find inside Tensorflow guides.

Have a Happy New Year and see you in 2020!!!


text:
# DSCore - A FLStat/Wiki Replacement

DSCore, or Discovery Core, is a FLStat/Wiki replacement written in C# using the ASP.Net Core Framework (hence the name). It has been designed to allow for ease of access to new players and act as an information store, similar to the wiki. The major difference, is that the database has been designed to be extremely easy to update with the DSCore.Gen tool provided in this repo.

## Building

If you wish to build the project yourself, follow the steps below.

 1. Install .NET Core SDK 2.2, if you don't already have it
 2. Clone/Fork this repository
 3. Open a command prompt/terminal where you cloned the repo to
 4. Run ``dotnet build --configuration Release``
 5. Copy an install of Freelancer into the release directory of DSCore.Gen
 6. Go to DSCore/DSCore.Gen/bin/Release/netcoreapp2.2 inside the Console/Terminal and run ``dotnet DSCore.Gen.dll``
 7. Go inside the Output directory that is created by the application
 8. Copy FLData.db to DSCore/DSCore/bin/Release/netcoreapp2.2
 9. Copy the `DATA` folder to DSCore/DSCore/wwwroot
 10. Run ``dotnet DSCore.dll``

Done
___

## Finish Writing Stuff Later
aka not now

repository: Dannyps/DSCore

repo_name: Dannyps/DSCore


text:
---
author: Arun Manivannan
date: '2007-03-25 04:53:20'
layout: post
comments: true
slug: zimbra-its-just-not-open-source-email
status: publish
title: Zimbra — It’s just not an open source email program
wordpress_id: '192'
? ''
: - open source email
  - zimbra
---

[Zimbra ][1]is another wonderful example of community supported software
development. Started by three friends and widely supported and contributed by
the community, Zimbra is growing up as a serious challenge for Microsoft's
Exchange server. The exciting thing is that it offers features that are
unimaginable otherwise in an Outlook client.

Zimbra can work both inside the web-browser as well as in offline mode on
mail-clients as Eudora, Thunderbird, Outlook etc.

With the outburst of Linux desktops in home and the enterprise, Zimbra profits
on the Microsoft's lack of an email service in Linux system.

So, whats so great on Zimbra

1) You view a mail of some earlier day and "tomorrow" and "next Tuesday"
translates into relative dates.

[![Date appointments zimbra][2]][3]

2) A phone number gets recognized easily and a direct call to the mail sender
could be made through Skype or a configured caller program

[![Direct Skype call zimbra][4]][5]

3) Create your own customized RSS folders and read your feeds offline, just
like mails.

[![Rss Folders][6]][7]

4) This feature is awesome. A mashup on the mail client. Your address calls up
the Yahoo map web service and the location of the mail sender is viewed on a
map.

[![Yahoo map for addresses zimbra][8]][9]

These are just "few" of the features. If you interested in knowing all the
features, watch [this flash video.][10]

   [1]: http://www.zimbra.com

   [2]: http://www.arunma.com/wp-
content/uploads/2007/03/dateappointmentszimbra.thumbnail.JPG

   [3]: http://www.arunma.com/wp-
content/uploads/2007/03/dateappointmentszimbra.JPG (Date appointments zimbra)

   [4]: http://www.arunma.com/wp-
content/uploads/2007/03/phonecallskype.thumbnail.JPG

   [5]: http://www.arunma.com/wp-content/uploads/2007/03/phonecallskype.JPG
(Direct Skype call zimbra)

   [6]: http://www.arunma.com/wp-
content/uploads/2007/03/rssfolderzimbra.thumbnail.JPG

   [7]: http://www.arunma.com/wp-content/uploads/2007/03/rssfolderzimbra.JPG
(Rss Folders)

   [8]: http://www.arunma.com/wp-
content/uploads/2007/03/yahoomapzimbra.thumbnail.JPG

   [9]: http://www.arunma.com/wp-content/uploads/2007/03/yahoomapzimbra.JPG
(Yahoo map for addresses zimbra)

   [10]: http://www.zimbra.com/demos/zimbra_overview.html

repository: arunma/blog

repo_name: arunma/blog


text:
# API Reference

In order to use GL Draw you must instantiate the draw class like so:

```js
var Draw = mapboxgl.Draw({ options });
map.addControl(Draw);
```

Draw only works after the map has loaded so it is wise to perform any interactions in the `load` event callback of mapbox-gl:

```js
map.on('load', function() {
    Draw.add({ ... });
    console.log(Draw.getAll());
    ...
});
```

### Options

option | values | function
--- | --- | ---
drawing | boolean | The ability to draw and delete features - default: `true`
interactive | boolean | Keep all features permanently in selected mode - default: `false`
keybindings | boolean | Keyboard shortcuts for drawing - default: `true`
controls | Object | drawable shapes - default `{ marker: true, line: true, shape: true, square: true }`
styles | Object | Add a style with any of the following properties: <li>`gl-draw-polygon`</li><li>`gl-draw-polygon-stroke`</li><li> `gl-draw-line`</li><li> `gl-draw-point`</li><li> `gl-draw-selected-line`</li><li> `gl-draw-selected-polygon`</li><li> `gl-draw-selected-polygon-stroke`</li><li> `gl-draw-selected-point`</li><li> `gl-draw-selected-point-mid`</li>The property should be an object with either the `layout` and/or `paint` properties as specified in the [Mapbox GL Style Reference](https://www.mapbox.com/mapbox-gl-style-spec/). It will overwrite the corresponding default  styles found in [`src/theme/`](https://github.com/mapbox/mapbox-gl-draw/tree/master/src/theme).

Custom Style Example:

```js
var Draw = mapboxgl.Draw({
  styles: {
    'gl-draw-polygon': {
      'paint': {
        'fill-color': '#00ffff',
        'fill-outline-color': '#00ffff',
        'fill-opacity': 0.25
      }
    },
    'gl-draw-polygon-stroke': {
      'paint': {
        'line-color': '#0000ff',
        'line-width': 4
      }
    }
  }
});
```

`mapboxgl.Draw()` returns an instance of the `Draw` class which has the following public API methods for getting and setting data:

## API Methods

####`.add(Object: GeoJSONFeature, [Object]: options) -> String`

This method takes any valid GeoJSON and adds it to Draw. The object will be turned into a GeoJSON feature and will be assigned a unique `drawId` that can be used to identify it. This method return the new feature's `drawId`. If an id is provided with the feature that ID will be used.

The second argument is an optional options object to add information to the geometry when creating the new element. Currently the only used option is `permanent`, which, if set to true, will cause the element to ignore click events, `Draw.select(:id:)` and `Draw.selectAll()`.

Draw does not enforce unique IDs to be passed to `.add`, but it does enforce unique ids inside of it. This means that if you provide an id for a feature that is not unqiue, Draw will override the exhisting feature with your new feature. You can think of this like PUT in http verbs.

If a FeatureCollection is provided to `.add` Draw will break it up into many features as if you looped through the features in the collection and added them one at a time. This is good for bulk adding, though it is no faster than looping yourself.

Example:

```js
var feature = { type: 'Point', coordinates: [0, 0] };
var featureId = Draw.add(feature);
console.log(Draw.get(featureId));
//=> { type: 'Feature', geometry: { type: 'Point', coordinates: [0, 0] }
```

Example with ID:

```js
var feature = { type: 'Point', coordinates: [0, 0], id: 'unique-id' };
var featureId = Draw.add(feature);
console.log(featureId) //=> unique-id
console.log(Draw.get('unique-id'));
//=> { type: 'Feature', geometry: { type: 'Point', coordinates: [0, 0], id: 'unique-id' }
```

---
####`.get(String: drawId) -> Object`

This method takes the `drawId` of a feature and returns its GeoJSON object.

Example:

```js
var id = Draw.add({ type: 'Point', coordinates: [0, 0] });
console.log(Draw.get(id));
//=> { type: 'Feature', geometry: { type: 'Point', coordinates: [0, 0] } }
```

---
####`.getAll() -> Object`

This method returns all features added to Draw in a single GeoJSON FeatureCollection. The each feature's unique id will be found on the `id` attribute of the feature.

Example:

```js
Draw.add({ type: 'Point', coordinates: [0, 0] });
Draw.add({ type: 'Point', coordinates: [1, 1] });
Draw.add({ type: 'Point', coordinates: [2, 2] });
console.log(Draw.getAll());
// => {
//  type: 'FeatureCollection',
//  features: [
//    {
//      type: 'Feature',
//      geometry: {
//        type: 'Point',
//        coordinates: [0, 0]
//      }
//    },
//    {
//      type: 'Feature',
//      geometry: {
//        type: 'Point',
//        coordinates: [1, 1]
//      }
//    },
//        {
//      type: 'Feature',
//      geometry: {
//        type: 'Point',
//        coordinates: [2, 2]
//      }
//    }
//  ]
//}
```
---

####`.getSelected() -> Object`

Get all selected features.

---

####`.select(String: drawId) -> Draw`

This method takes the `drawId` of a feature and selects it. It returns `this` to allow for method chaining.

---

####`.selectAll() -> Draw`

This method selects all features. It returns `this` to allow for method chaining.

---

####`.deselect(String: drawId) -> Draw`

This method takes the `drawId` of a feature and deselects it if selected. It returns `this` to allow for method chaining.

---

####`.deselectAll() -> Draw`

This method deselects all features. It returns `this` to allow for method chaining.

---

####`.destroy(String: drawId) -> Draw`

This method takes the `drawId` of feature and removes it from draw. It returns `this` to allow for method chaining.

Example:

```js
var feature = { type: 'Point', coordinates: [0, 0] };
var id = draw.add(feature)
Draw
  .destroy(id)
  .getAll();
// => { type: 'FeatureCollection', features: [] }
```

---

####`.update(String: drawId, Object: GeoJSONFeature) -> Draw`

This method takes the `drawId` of an existing feature and a GeoJSON object and replaces that feature in draw with the new feature. It returns `this`.

Example:

```js
var id = Draw.add({ type: 'Point', coordinates: [0, 0] });
var newFeature = Draw
  .update(id, { type: 'Point', coordinates: [1, 1] })
  .get(id);
console.log(newFeature);
//=> { type: 'Feature', geometry: { type: 'Point', coordinates: [1, 1] } }
```

---

####`.clear() -> Draw`

This method removes all geometries in Draw.

Example:

```js
Draw.add({ type: 'Point', coordinates: [0, 0] });
Draw
  .clear()
  .getAll();
// => { type: 'FeatureCollection', features: [] }
```

---

####`.startDrawing(Enum: { Draw.types.POINT | Draw.types.LINE | Draw.types.POLYGON | Draw.types.SQUARE })`

This method initiates drawing the specified type. The types are defined in constants in draw under `Draw.types.*`. The argument should be one of

- `Draw.types.POINT`
- `Draw.types.LINE`
- `Draw.types.POLYGON`
- `Draw.types.SQUARE`

Example:

```js
Draw.startDrawing(Draw.types.LINE);
```

## Events

Draw fires off a number of events on draw and select actions. All of these events are name spaced `draw` inside of the mapboxgl event emitter.

#### draw.set

This is fired every time a feature is committed via escape or the double click. The payload is an object with the `mapbox-gl-draw` feature id and the GeoJSON representation of the feature.

#### draw.delete

This is fired every time a feature is deleted inside of `mapbox-gl-draw`. The payload is an object with the `mapbox-gl-draw` feature id of the feature that was deleted and the GeoJSON representation of the feature just before it was deleted.

#### draw.select.start

Fired every time a feature is selected. The payload is an object with the `mapbox-gl-draw` feature id and the GeoJSON representation of the feature.

#### draw.select.end

Fired every time a feature is deselected. The payload is an object with the `mapbox-gl-draw` feature id.

## Private functions

Draw uses underscore prefixed variables to indicate that the following function is private. These functions are apt to change or be removed. If there is functionality in these functions that should be part of the public api, please open PR explaining the use case.

repository: jimmont/mapbox-gl-draw

repo_name: jimmont/mapbox-gl-draw


text:
# Business Console Extensions

## Extending

1. Add your custom controller in a package com.ibm.rules.decisioncenter.web.myController
1. Add resources for this controller in a folder resources/extensions
1. Add you entry point in the preferences.properties in resources/com/ibm/rules/decisioncenter/web
1. Rebuild

This solution is build using the dependencies from [this project](https://github.com/ODMDev/odm-libs-in-maven/blob/master/README.md) and an installation of ODM.

## Installing

- Download the [release](https://github.com/ODMDev/decision-center-api-samples/releases/tag/1.0.0)
- Add the jar BCExtensions into DecisionCenter.war in WEB-INF/lib
- Redeploy the application

## Using

### ClipboardActions

Add the ability to select rules from the Decision Artifact middle view and copy them to any project or branch selecting folder(s) in the Decision Artifact tree view.

* Copy to clipboard ![](src/resources/extensions/images/ruletoclipboard.png)

Check rules in the middle view to be copied.
The clipboard is reset by using Copy To Clipboard with nothing selected.

* Paste to Package ![](src/resources/extensions/images/clipboardtopack.png)

Select folders and project in the tree view where to copy the rules stored in the clipboard.

repository: gojforce/decision-center-api-samples

repo_name: gojforce/decision-center-api-samples


text:
[![GitHub release](https://img.shields.io/github/release/Grandbrain/QTutorial.svg)](https://github.com/Grandbrain/QTutorial/releases)
[![GitHub issues](https://img.shields.io/github/issues/Grandbrain/QTutorial.svg)](https://github.com/Grandbrain/QTutorial/issues)
[![GitHub forks](https://img.shields.io/github/forks/Grandbrain/QTutorial.svg)](https://github.com/Grandbrain/QTutorial/network/members)
[![GitHub stars](https://img.shields.io/github/stars/Grandbrain/QTutorial.svg)](https://github.com/Grandbrain/QTutorial/stargazers)
[![GitHub license](https://img.shields.io/github/license/Grandbrain/QTutorial.svg)](https://github.com/Grandbrain/QTutorial/blob/master/LICENSE)

# Welcome to QTutorial project!

[QTutorial](https://github.com/Grandbrain/QTutorial) is a set of short and simple lessons for studying Qt Framework. The project is an ebook with a choice of lessons and the operating systems as well as the language of the narrative. The repository also provides the source code for projects building.

## Contribute

There are several ways to contribute to QTutorial project:
* [Submit bugs](https://github.com/Grandbrain/Qtutorial/issues) and help me verify fixes.
* Review the [source code changes](https://github.com/Grandbrain/QTutorial/pulls).

## Building

* Download and extract the [latest release](https://github.com/Grandbrain/QTutorial/releases) of the repository.
* Download and install the latest version of [Qt](https://www.qt.io/download).
* Open the folder with the name of your operating system and select language.
* Build and run projects to study various parts of Qt Framework.

## Usage

* Use the PDF manuals to read the lessons.
* Use the source code to study Qt Framework.


text:
---
layout: practice
author: Alex Serban, Koen van der Blom, Joost Visser
name: Share a Clearly Defined Training Objective within the Team
title: Share a Clearly Defined Training Objective within the Team
category: Training
unique_id: exp_trainingobjective
index: 9
difficulty: "basic"
references: [Rs4ML, MMLP, MLTEAM]
comments: True
description:
image: #
photocredit: #

intent: Avoid misunderstandings between multi-disciplinary team members. #
motivation: In a multi-disciplinary team, members with different backgrounds may misinterpret training objectives. Therefore, it is important to clearly communicate the objectives within the team. #
applicability: Any machine learning team should share a clear training objective.
related: [exp_trainingmetric] #
dependencies: [exp_trainingmetric] #
survey_question: Q37

labels: [effectiveness]

---

When working in a diverse team, it is important to understand the background and roles of each member in order to avoid miscommunications and misunderstandings.
In some cases, different team members may fail to agree on the true objective, or misinterpret it altogether.

For example, we may want to develop a recommendation model that only uses data from the last 15 days, but fail to clearly communicate this constraint within the team.

Sharing a clearly defined objective within the team assumes the training objective can be converged towards each member, using specific disciplinary language and terminology.

This practice ensures that effort is not spent on futile activities and enhances team communication and efficiency.

Moreover, it facilitates alignment with the team's goal, and ensures that the outcomes of training can be correctly evaluated.

branch_name: refs/heads/source


text:
![](https://blkindata.github.io/bidweek2020/banner-schedule.png)

# `#BlackInDataWeek`

> Amplifying Black folx in `#informatics`, `#datascience`, & `#coding` around the world

Follow along via the [`#BlackInDataWeek` hashtag](https://twitter.com/hashtag/BlackInDataWeek).

A week-long celebration `#BlackInDataWeek` to:

- (1) highlight the valuable work and experiences of Black people in the field of Data
- (2) provide community
- (3) educational and professional resources.

To sign up for events, click [here](https://www.eventbrite.com/e/blackindataweek-2020-tickets-127652703673)!

To learn more about `#BlackInDataWeek`, please see [their website](https://blkindata.github.io/).

The `#TidyTuesday` community will be taking a break from our own data this week and asking you to engage with, promote, and support Black people in data.

You're welcome to revisit older datasets from `#TidyTuesday` this week, but especially on Thursday Nov 19th, please create space and engage with the [`#BlackInDataViz` hashtag](https://twitter.com/search?q=%23blackindataviz&src=typed_query) on Twitter rather than promoting your own work.

![](https://blkindata.github.io/project/blackindataviz/featured_hu2fed1b541976b7992f47975751508e6e_230350_720x0_resize_lanczos_2.png)

From the [`#BlackInDataViz` website](https://blkindata.github.io/project/blackindataviz/):

> Creating space for Black people in data to share their work in the form of favourite data visualisation images. Also hosting a competition for data visualisation using a shared dataset, further reinforcing community. We will also host a ‘Data Viz in a Day' skills workshop, focusing on instructing beginners on creating data visualizations.

We don't have our own dataset this week, but the data below returns the purpose, date, hashtag, and link to each day's events to follow along with.

### Get the data here

```{r}
# Get the Data

# Read in with tidytuesdayR package
# Install from CRAN via: install.packages("tidytuesdayR")
# This loads the readme and all the datasets for the week of interest

# Either ISO-8601 date or year/week works!

tuesdata <- tidytuesdayR::tt_load('2020-11-17')
tuesdata <- tidytuesdayR::tt_load(2020, week = 47)

black_in_data <- tuesdata$black_in_data

# Or read in the data manually

black_in_data <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-11-17/black_in_data.csv')

```
### Data Dictionary

# `black_in_data.csv`

|variable |class     |description |
|:--------|:---------|:-----------|
|date     |date    | Date of Event |
|hashtag  |character | Hashtag for specific event |
|purpose   |character | Purpose of event |
|link |character | URL/Link to the event page |

### Cleaning Script

```{r}
black_in_data <- data.frame(
  date = seq(as.Date("2020-11-16"), as.Date("2020-11-21"), 1),
  hashtag = c("#BlackInDataRollCall",
              "#BlackInDataJourney",
              "#BlackInDataSkills",
              "#BlackInDataViz",
              "#BlackInDataJustice",
              "#BlackInDataMentorship"),
  purpose = c(
    "Giving Black people in data a space to introduce themselves and their work. Introducing and valuing intersecting parts of their identities. We welcome contributions from a wide spectrum of Data Fields including but not limited to Informatics, Technology, Data Science, Coding, Social Science and Data Analytics.",
    "Further fostering community for Black people in data, by encouraging them to share their varied journeys in data.",
    "Discussing the skills Black people in data have learned, communal sharing of resources and advice for skills development.",
    "Creating space for Black people in data to share their work in the form of favourite data visualisation images.",
    "Hosting forums for learning and discussion of bias in the data field (and possible paths to address biases in data).",
    "Join us for career development and mentorship events!"
  ),
  link = c(
    "https://blkindata.github.io/project/blackindatarollcall/",
    "https://blkindata.github.io/project/blackindatajourney/",
    "https://blkindata.github.io/project/blackindataskills/",
    "https://blkindata.github.io/project/blackindataviz/",
    "https://blkindata.github.io/project/blackindatajustice/",
    "https://blkindata.github.io/project/blackindatacommunity/"
  )
)

```

repository: rfordatascience/tidytuesday

repo_name: rfordatascience/tidytuesday


text:
## Running in Kubernetes (using Terraform and Helm Provider)
Add helm repo:
```sh
helm repo add main https://bedag.github.io/helm-charts/  && helm repo update
```
Prepare terraform:
```sh
terraform init
terraform validate
terraform fmt
```
Planning:
```sh
terraform plan -out planed
```
Install:
```sh
terraform apply planed
```
Good Luck

repository: kbrahmand/kafdrop

repo_name: kbrahmand/kafdrop


text:
# Annoyance for Xbox 360

Blocks Malicious Commands such as setround

## Getting Started

To set this project up for personal use you will need to follow the steps in the prerequisites below before compiling the project.

### Prerequisites

Requirements:
```
Visual Studio 2010 or >
Xbox360 SDK
Xbox360 XDK/RGH/JTAG
```

### Credits

Please give Credit to All of the people Below if you use this for any kind of personal or public use.

```
Cyanokit (me)
```

* [Twitter](https://twitter.com/cyanokit) - Follow Me.
* [DemonForums](https://demonforums.net/) - Join The Community

## Contributing

Please add my discord for assistance or donations.
```
Cyanokit#1337
```

## Updates

Updates are no longer being pushed to this project.