text:
---
title: Shattered Pixel Dungeon v0.7.4!
excerpt: "0.7.4 is focused around improving allies and ally-generating items. There are 2 new ally-creating wands, improvements to ally AI, and improvements to various other items."

header:
  image: /assets/images/2019/2019-07-18/header.png
  teaser: /assets/images/2019/2019-07-18/header.png
  width: 1260px
---
Hey Dungeoneers, 0.7.4 has been released on Google Play, and should roll out to other platforms soon!

0.7.4 is focused around improving allies and ally-generating items. There are 2 new ally-creating wands, improvements to ally AI, and improvements to various other items. You can read some specifics about most of the changes in this update [in this blog post.](/blog/coming-soon-to-shattered-new-friends.html)

Here’s a heavily condensed changes list, you can find a fully detailed changes list ingame:

```
New Content:
- A new offense-focused wand which spawns allies
- A new defense-focused wand which spawns allies

Changes:
- Allies now behave more intelligently
- 6 misc changes
- 4 bugfixes
- Translation updates

Buffs:
- Dried Rose buffed
- Buffs to 6 enhanced bombs
- Buffs to enchants/glyphs
- Buffs to 3 other items

Nerfs:
- Nerfs to 3 glyphs
- Nerfs to 3 enhanced bombs
```


text:
# API Boilerplate

This repository serves as a simple starting point for creating RESTful APIs with Node, Express and MongoDB.

## Getting Started

The API uses MongoDB, so make sure it's installed.

Run a new instance of MongoDB:
```sh
sudo mongod
```

Install all dependencies with npm:
```sh
npm install
```

Start running the server:
```sh
npm start
```

The API listens onto a *dynamic* IP address for development. This address will be given after running the above command.

## Development

Flow is being used to allow for statically typed JavaScript.

After creating new methods, run the following command and deal with any output properly:

```sh
npm run check
```

Mocha is being used as the testing framework and Chai as the assertion library.

To run unit tests:

```sh
npm test
```

## Production

Since ES6+ is not understood natively, a transpiled build needs to be created before pushing to a live production server. To create this build, run the following command:

```sh
npm run build
```

This command will generate a new `build` directory with files in ES5.

## API Documentation

- [User](docs/User.md)

license: MIT

repository: jadnco/api-boilerplate

branch_name: refs/heads/master

extension: md

gha_language: JavaScript

license_type: permissive

repo_name: jadnco/api-boilerplate


text:
# Changelog

## 3.2.0 / 2020-08-11

- Add `--prefix` option (#79 and #80)
- Update development Ruby version to 2.4.10 (8d517c1)

## 3.1.0 / 2020-01-20

- Expand supported Ruby versions to include 2.7 (bcc23b5)

## 3.0.0 / 2019-08-02

### Breaking Changes

- Bump required minimum SVGO version to 1.3.0 (afa24c6)

### Additional Enhancements

- Refactor command classes (02f420c)
- Refactor specs ()
- Update development dependencies

## 2.0.1 / 2019-01-03

- Expand supported Ruby versions to include 2.6 (0facfd0)

## 2.0.0 / 2018-12-04

- Refactor classes to use `attr_reader`s (c62780f)
- Change required Ruby versions and liberalize dependency constraints (35fcadb)
- Change project Ruby version to 2.4.9 (301d341)
- Bump required SVGO version to 1.1.1 (28741fc)

## Previous Releases

See [the Releases page on GitHub](https://github.com/jgarber623/svgeez/releases) for details on previously released versions.

repository: Tunelark/svgeez

branch_name: refs/heads/main

gha_license_id: MIT

repo_name: Tunelark/svgeez


text:
---
title: Hello World!
type: blog
date: 2019-05-27
author: mvrahden
categories: [News]
image: images/blog/hello-world/cover.png
---

Today day marks the launch of this amazing project. With the help of open-source tools and the open-source community, I want to create a new domain under which talented developers, makers, tinkerers or hackers come together to share and develop resources and give other people the opportunity to access computer cluster solutions in a low-cost way.

If you like the outline of this project and want to see it grow, please join our facebook group and star our Github project.

If you think this project should get even more attention, feel free to financially support it. You will get a special mentioning on our supporters list (contact me).

If you are a company and you want to sponsor and increase your brands visibility, please contact me.

repository: mvrahden/hugo-landerz-theme

repo_name: mvrahden/hugo-landerz-theme


text:
<!-- README.md is generated from README.Rmd. Please edit that file -->
geotidy
=======

<!-- badges: start -->
[![Travis build status](https://travis-ci.org/etiennebr/geotidy.svg?branch=master)](https://travis-ci.org/etiennebr/geotidy) [![Codecov test coverage](https://codecov.io/gh/etiennebr/geotidy/branch/master/graph/badge.svg)](https://codecov.io/gh/etiennebr/geotidy?branch=master) [![Lifecycle: experimental](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://www.tidyverse.org/lifecycle/#experimental) <!-- badges: end -->

Manipulate spatial data tidily. `Geotidy` provides a selection of spatial functions from the `sf` package that are adapted to a tidy workflow. It relies on tibbles and `dplyr` verbs, and forces you to be explicit about the spatial operations you desire. The package is experimental. If you want to learn more about the motivations behind it, see the [Motivation](#motivation) section.

Installation
------------

You can install the experimental version of geotidy from github :

``` r
# install.packages("remotes")
remotes::install_github("etiennebr/geotidy")
```

Example
-------

Here's how you manipulate spatial data with `geotidy`.

``` r
library(tibble)
library(dplyr)
library(geotidy)

tibble(place = "Sunset Room", longitude = -97.7404985, latitude = 30.2645315) %>%
  mutate(geometry = st_point(longitude, latitude))
#> # A tibble: 1 x 4
#>   place       longitude latitude            geometry
#>   <chr>           <dbl>    <dbl>             <POINT>
#> 1 Sunset Room     -97.7     30.3 (-97.7405 30.26453)
```

Motivation
==========

`geotidy` does less than `sf` to make manipulations explicit and compatible with other backends. *Explicit* means that it won't try to guess which column is a geometry and should receive the operation. It also makes it clear by reading the code, which geometry is impacted. This is done by treating geometry columns just like other tibble columns. `sf` often hides the geometry column, `geotidy` treats it just like a regular columns. This also makes it easier to interact with other OGC compliant tools, such as `postgis` or `spark+geomesa`.

Example
-------

While `sf` will guess which column should be buffered:

``` r
shp <- sf::st_read("")
st_buffer(shp)
```

`geotidy` forces to be explicit and use `dplyr` verbs

``` r
shp %>%
  mutate(geometry = st_buffer(geometry))
```

If you already use `dplyr` with `sf`, `geotidy` should fell natural and remove some of the casting operations. `geotidy` guarantees that your data will stay tidy from start to finish. By having explicit management of geometry columns, it is easy to track multiple columns.

`geotidy` also guarantees that the returned values are either scalar, or a vector or a list with the same length than the original geometry and not drop any data without the user consent (looking at you `st_cast`!).

`geotidy` is not a fork or a separation from `sf`. It just adds a constrained layer on top of `sf` to facilitate a tidy workflow. It is an experiment and is very likely to change.

repository: etiennebr/geotidy

gha_language: R

gha_license_id: NOASSERTION

repo_name: etiennebr/geotidy


text:
# VisFX: A Collection of Visual FX for use with the OpenCV-Python Library

## About
This project provides a collection of visual effects for use with the opencv-python library as well as simple, easy-to-use methods for applying these effects.

## Requirements
- Python >= 3.7
- - numpy >= 1.16
- - opencv-contrib-python >= 4.1
- - dlib >= 19.17
- - PyAutoGUI >= 0.9

repository: Munkyfoot/visfx

repo_name: Munkyfoot/visfx


text:
# _Hair Salon_

#### _Eau Claire's Salon, 9/2/2020_

#### By _**BM**_

## Description

_Uses a database for keeping track of Stylists at a salon and the Clients they serve._

## Setup/Installation Requirements
Databases:
* _Requires MySQL Workbench_
* _In the Navigator > Administration window, select Data Import/Restore_
* _In Import Options select Import from Self-Contained File_
* _Navigate to blake\_mead.sql_
* _Under Default Schema to be Imported To, select the New button_
* _Name it the same as it already is_
* _Click 'Start Import'_

Program:
* _Requires DotNet Framework_
* _download or clone git_
* _use dotnet restore_
* _then dotnet build_
* _dotnet run_
* _add stylists first_
* _then add clients_

## Known Bugs

_{Are there issues that have not yet been resolved that you want to let users know you know?  Outline any issues that would impact use of your application.  Share any workarounds that are in place. }_

## Technologies Used

_DotNet Framework, EFCore, AspNet_

### License

*MIT*


text:
# Helix Test Log Search POC Summary
To recall, this POC queries Kusto for failed test logs for a specified repository and date range, and parses these logs line by line for a given string.

In general, since we are limiting the number of days a user can search for a string, depending on the number of files that are returned by the Kusto query, the program will run for anywhere between 20s and 1m30s.

## 📋 How to use
The program requires all arguments to be passed when running it in command line:

        dotnet run --errorString={SEARCH_STRING} --repository={REPOSITORY_NAME} --startDate={STARTING_DATE_RANGE} --endDate={ENDING_DATE_RANGE} --mode={RESULT_TYPE}

See the Input section below for more details on input constraints.

### Input
Run the console app in terminal and pass all of the following options:

- `errorString`: The error string the program will search for
- `repository`: The public repository whose test logs will be parsed
- `startDate`: The start date of the date range in which the test logs will be searched. This argument must be in the format **yyyy/MM/dd** and is in UTC.
- `endDate`: The end date of the date range in which the test logs will be searched. This argument must be in the format **yyyy/MM/dd** and is in UTC.
- `mode`: Either `"Hits"` or `"HitsPerFile"`. Hits will return an array of all occurences of `errorString`, including each occurrence's line number within its test log file. HitsPerFile will return an array of hits per file, including the count of occurrences per file.

#### Example

    dotnet run --errorString="UseCallback_BadCertificate_ExpectedPolicyErrors" --repository=dotnet/runtime --startDate=2022-06-01 --endDate=2022-06-07 --mode=HitsPerFile

This command will search for all instances of the string "UseCallback_BadCertificate_ExpectedPolicyErrors" in all the `dotnet/runtime` Helix test logs created between June 1, 2022 and June 7, 2022. It will return the number of hits found per file.

### Output

Here is some sample output showing the 2 different response types.

#### Hits
        {
          "filter": {
            "repository": "dotnet/runtime",
            "errorString": "UseCallback_BadCertificate_ExpectedPolicyErrors",
            "startDate": "2022-05-25T07:00:00Z",
            "endDate": "2022-06-07T07:00:00Z"
          },
          "hits": [
            {
              "lineContent": "System.Net.Http.Functional.Tests.SocketsHttpHandler_HttpClientHandler_ServerCertificates_Test.UseCallback_BadCertificate_ExpectedPolicyErrors(url: \"https://wrong.host.badssl.com/\", expectedErrors: RemoteCertificateNameMismatch) [FAIL]",
              "lineNumber": 129,
              "jobId": 19894144,
              "friendlyName": "System.Net.Http.Functional.Tests",
              "status": "Fail",
              "started": "2022-06-01T12:36:28.573Z",
              "finished": "2022-06-01T12:42:46.786Z",
              "consoleUri": "https://helixre107v0xdeko0k025g8.blob.core.windows.net/dotnet-runtime-refs-heads-release-50-159e0decb4474dbfbb/System.Net.Http.Functional.Tests/1/console.52339d8a.log?helixlogtype=result",
              "queueName": "ubuntu.1804.armarch.open",
              "attempt": 1
            },
            {
              "lineContent": "/_/src/libraries/Common/tests/System/Net/Http/HttpClientHandlerTest.ServerCertificates.cs(334,0): at System.Net.Http.Functional.Tests.HttpClientHandler_ServerCertificates_Test.UseCallback_BadCertificate_ExpectedPolicyErrors_Helper(String url, String useHttp2String, SslPolicyErrors expectedErrors)",
              "lineNumber": 142,
              "jobId": 19894144,
              "friendlyName": "System.Net.Http.Functional.Tests",
              "status": "Fail",
              "started": "2022-06-01T12:36:28.573Z",
              "finished": "2022-06-01T12:42:46.786Z",
              "consoleUri": "https://helixre107v0xdeko0k025g8.blob.core.windows.net/dotnet-runtime-refs-heads-release-50-159e0decb4474dbfbb/System.Net.Http.Functional.Tests/1/console.52339d8a.log?helixlogtype=result",
              "queueName": "ubuntu.1804.armarch.open",
              "attempt": 1
            },
            ...
          ],
          "occurrenceCount": 96,
          "filesCount": 24
        }

#### Hits per File
        {
          "filter": {
            "repository": "dotnet/runtime",
            "errorString": "UseCallback_BadCertificate_ExpectedPolicyErrors",
            "startDate": "2022-05-25T07:00:00Z",
            "endDate": "2022-06-07T07:00:00Z"
          },
          "hits": [
            {
              "occurrences": 4,
              "jobId": 19902082,
              "friendlyName": "System.Net.Http.Functional.Tests",
              "status": "Fail",
              "started": "2022-06-02T12:16:47.584Z",
              "finished": "2022-06-02T12:21:47.023Z",
              "consoleUri": "https://helixre107v0xdeko0k025g8.blob.core.windows.net/dotnet-runtime-refs-heads-release-50-ab8bca7d45fc4cd0bb/System.Net.Http.Functional.Tests/1/console.e36c2801.log?helixlogtype=result",
              "queueName": "ubuntu.1804.armarch.open",
              "attempt": 1
            },
            {
              "occurrences": 4,
              "jobId": 19909540,
              "friendlyName": "System.Net.Http.Functional.Tests",
              "status": "Fail",
              "started": "2022-06-03T13:37:32.456Z",
              "finished": "2022-06-03T13:43:35.135Z",
              "consoleUri": "https://helixre107v0xdeko0k025g8.blob.core.windows.net/dotnet-runtime-refs-heads-release-50-e3fe329caffc4ab3be/System.Net.Http.Functional.Tests/1/console.76909294.log?helixlogtype=result",
              "queueName": "ubuntu.1804.armarch.open",
              "attempt": 1
            },
            ...
          ],
          "occurrenceCount": 547,
          "filesCount": 17
        }

## 🔍 Performance findings

We can take a look at how long the program ran for different volumes of logs retrieved and parsed, as well as for different lengths of the search string.

For one given repo and a one word string, we found:

| Start date  | End date    | # of Occurrences | # of Files with hits     | Total time elapsed | Lines scanned/sec | Files scanned/sec | Total files scanned
| ----------- | ----------- |-------------- | --------------------- | ------------------ | ----------------- | ----------------- | ------------------ |
| 2022/06/01  | 2022/06/07   | 2528           | 20                    | 00:00:31.7819027   | 2532.73           | 0.69              | 22
| 2022/05/25  | 2022/06/07   | 22768           | 510                   | 00:00:35.2533931   | 41198.75        | 14.60              | 515
| 2022/05/07  | 2022/06/07   | 124973           | 3023                   | 00:00:41.9848476   | 193610.51        | 79.95             | 3357

For one given repo and a string with 6 words:

| Start date  | End date    | # of Occurrences | # of Files with hits     | Total time elapsed | Lines scanned/sec | Files scanned/sec | Total files scanned
| ----------- | ----------- |-------------- | --------------------- | ------------------ | ----------------- | ----------------- | ------------------ |
| 2022/06/01  | 2022/06/07   | 547           | 17                    | 00:00:31.2928707   | 2572.31           | 0.70              | 22
| 2022/05/25  | 2022/06/07   | 6106           | 124                   | 00:00:28.0314279   | 51813.12         | 18.37              | 515
| 2022/05/07  | 2022/06/07   | 16431           | 310                   | 00:00:49.0204510   | 165822.79         | 68.48              | 3357

Note that the time taken can vary based on the repository, date range, network, etc so this is just a snapshot of a couple of times of running the program. But in general the times are pretty consistent and stay under a minute.

## 🤔 Future considerations
- More input sanitization to limit number of rows returned by Kusto and avoid timeouts, also to avoid injections into the query
- Error handling for if we try to parse a file that doesn't exist on the server anymore
- Before implementing functionality to accept a token from the user to access non-public work item logs, consider how to handle when a user enters a private repo

Was this helpful? [![Yes](https://helix.dot.net/f/ip/5?p=Documentation%5CProject-Docs%5CHelixTestLogSearch%5Cpoc-summary.md)](https://helix.dot.net/f/p/5?p=Documentation%5CProject-Docs%5CHelixTestLogSearch%5Cpoc-summary.md) [![No](https://helix.dot.net/f/in)](https://helix.dot.net/f/n/5?p=Documentation%5CProject-Docs%5CHelixTestLogSearch%5Cpoc-summary.md)

repository: dotnet/arcade

gha_language: C#

repo_name: dotnet/arcade


text:
# Test cases

## anchor called top is removed

["Target 1"](DisposableObjects.html)

## other anchors are retained

[requirements for using Approval Tests With \[Boost\].UT](UsingUT.html#requirements).

## anchor with unusal characters in is updated correctly

[TCR](Glossary.html#test-commit-revert-tcr).

[Existing Project - with your main()](UsingCatch.html#existing-project-with-your-main).

## link to markdown file outside doc/ is unchanged

[How To Release](https://github.com/approvals/ApprovalTests.cpp/blob/master/build/HowToRelease.md#top)

### links to docs in various relative paths are correct

See [Target 1](subdir1/Doc1.html#target1).

See [Target 1](subdir/Doc1.html#target1).

See [Target 1](Doc1.html#target1).

## Multiple links on one line

See [Target 1](Doc1.html#target1) join1 [Target 2](Doc2.html#target3) join2 [Target 3](Doc3.html#target3).

### Links to directories

[the build directory](https://github.com/approvals/ApprovalTests.cpp/tree/master/build)

[doc](https://github.com/approvals/ApprovalTests.cpp/tree/master/doc).

[/ApprovalTests/integrations/](https://github.com/approvals/ApprovalTests.cpp/tree/master/ApprovalTests/integrations)

## Links to source files

[tests/GoogleTest_Tests/main.cpp](https://github.com/approvals/ApprovalTests.cpp/blob/master/tests/GoogleTest_Tests/main.cpp)

## Links to .include.md files

[include_using_test_frameworks_list.include.md](https://github.com/approvals/ApprovalTests.cpp/blob/master/doc/include_using_test_frameworks_list.include.md#top)

## Links to images

Tutorial ![Intro Graphic](https://github.com/approvals/ApprovalTests.cpp/blob/master/doc/images/ApprovalTests.cpp.IntroGraphic.gif?raw=true)

Tutorial ![New Failure](https://github.com/approvals/ApprovalTests.cpp/blob/master/doc/images/tutorial/01_new_failure.png?raw=true)

## Link to README.md should go to GitHub

Link to README.md should go to GitHub, because README.md is not intended to be displayed on Read the Docs.

Each new documentation page needs to be added to [doc/README.md](https://github.com/approvals/ApprovalTests.cpp/blob/master/doc/README.md#top).

## Non-HTML links - should be unchanged

<EMAIL_ADDRESS>
## Do not change specific links that are in code blocks

```md
* [this link will work everywhere](/doc/Reporters.md#top)
```

Not this:

```md
* [this link is wrong](doc/Reporters.md#top)
```

And not this:

```md
* [this link is wrong](Reporters.md#top)
```

# Links whose hyperlinked text is in fixed-width font

From Namers.md:

The interface for this is [ApprovalNamer](https://github.com/approvals/ApprovalTests.cpp/blob/master/ApprovalTests/core/ApprovalNamer.h).

From CMakeIntegration.md:

[ExternalProject module](https://cmake.org/cmake/help/latest/module/ExternalProject.html)

[add_subdirectory()](https://cmake.org/cmake/help/latest/command/add_subdirectory.html).

From UsingUT.md

[std::source_location](https://en.cppreference.com/w/cpp/utility/source_location)

From Setup.md

[tests/NewTest.cpp](https://github.com/approvals/ApprovalTests.cpp.StarterProject/blob/master/tests/NewTest.cpp)

Multiple on one line

[ExternalProject module](https://cmake.org/cmake/help/latest/module/ExternalProject.html) and `this should still be fixed width` and [add_subdirectory()](https://cmake.org/cmake/help/latest/command/add_subdirectory.html).

## Test code snippet - linking to lines in a file

```cpp
ApprovalTests::Approvals::verifyExceptionMessage([]() { /* your code goes here */ });
```
(See [snippet source](https://github.com/approvals/ApprovalTests.cpp/blob/master/tests/DocTest_Tests/ApprovalsExamples.cpp#L6-L8))

## Test code snippet - linking to a whole file

```
TITLE

input.value1 => placeholder
input.value2 => placeholder
```
(See [snippet source](https://github.com/approvals/ApprovalTests.cpp/blob/master/tests/DocTest_Tests/approval_tests/VectorTests.VerifyAllStartingPoint.approved.txt#L1-L6))

## Test changes made to satisfy Pygments

### Convert h to cpp

```cpp
class Wibble
{
};
```

### Remove txt

```
I am some text
```

## A wide table

| Framework    |  Min C++  | Ease of setup      | IDE Support           | Build time  |
| ------------ | :-------: | ------------------ | --------------------- | ----------- |
| Catch2       |   C++11   | Very easy [1], [2] | Widely supported      | Not bad [3] |
| doctest      |   C++11   | Very easy [1]      | Unknown               | Fast        |
| Google Test  |   C++11   | Difficult          | Very widely supported | Fast        |
| Boost.Test   |   C++11   | Difficult          | Unknown               | Fast        |
| \[Boost\].UT | C++20 [4] | Very easy [1]      | Unknown               | Fast        |

1. Released as a single header file
2. See the [Starter Project](https://github.com/approvals/ApprovalTests.Cpp.StarterProject)
3. Catch2 has [options to speed up its builds](https://github.com/catchorg/Catch2/blob/master/docs/slow-compiles.md#top)
4. \[Boost\].UT works with C++17, but the ApprovalTests interface to that library depends on [std::source_location](https://en.cppreference.com/w/cpp/utility/source_location), which is a C++ 20 feature.

## A table with wide words

Some of these words end up with spaces in, wrongly.

| Old                                        | New                                       |
| ------------------------------------------ | ----------------------------------------- |
| `APPROVALTESTS_VERSION`                    | `APPROVAL_TESTS_VERSION`                  |
| `APPROVALTESTS_VERSION_MAJOR`              | `APPROVAL_TESTS_VERSION_MAJOR`            |
| `APPROVALTESTS_VERSION_MINOR`              | `APPROVAL_TESTS_VERSION_MINOR`            |
| `APPROVALTESTS_VERSION_PATCH`              | `APPROVAL_TESTS_VERSION_PATCH`            |
| `APPROVALTESTS_VERSION_STR`                | `APPROVAL_TESTS_VERSION_STR`              |
| `APPROVALS_CATCH_DISABLE_FILE_MACRO_CHECK` | `APPROVAL_TESTS_DISABLE_FILE_MACRO_CHECK` |

## Included file

* [Using Approval Tests With Catch](UsingCatch.html)
* [Using Approval Tests With CppUTest](UsingCppUTest.html)
* [Using Approval Tests With Google Tests](UsingGoogleTests.html)
* [Using Approval Tests With Doctest](UsingDoctest.html)
* [Using Approval Tests With Boost.Test](UsingBoostTest.html)
* [Using Approval Tests With \[Boost\].UT](UsingUT.html)

## Snippet pulled in from external CMake file

Sample take from CMakeIntegration.md:

We use this `dependencies/CMakeLists.txt` file:

```cmake
# Needs CMake 3.14 or above
include(FetchContent)

# -------------------------------------------------------------------
# ApprovalTests.cpp
FetchContent_Declare(ApprovalTests
        GIT_REPOSITORY https://github.com/approvals/ApprovalTests.cpp.git
        GIT_TAG master)

FetchContent_MakeAvailable(ApprovalTests)

# -------------------------------------------------------------------
# Catch2
FetchContent_Declare(Catch2
        GIT_REPOSITORY https://github.com/catchorg/Catch2.git
        GIT_TAG v2.11.1)

FetchContent_MakeAvailable(Catch2)
```
(See [snippet source](https://github.com/claremacrae/ApprovalTests.cpp.CMakeSamples/blob/main/./fetch_content_approvaltests_catch2/dependencies/CMakeLists.txt))

## Hyperlink and URL

### Does not render correctly on Read the Docs

Where a run of formatted text (here, italic) contains a hyperlink. I have not been able to get it to display correctly in Read the Docs.

Example Markdown input, where the whole line is italic:

*If you would like us to add any more questions here, please contact us via [the Contributing page](Contributing.html).*

On the production site, it displays like this (after our conversion process here):

```
If you would like us to add any more questions here, please contact us via `the Contributing page <Contributing.html>`__.
```

*If you would like us to add any more questions here, please contact us via [the Contributing page](Contributing.html).*

### Does render correctly on Read the Docs

The fix is to end the italic formatting before the hyperlink. It looks a bit worse on GitHub but a lot better in Read the Docs:

*If you would like us to add any more questions here, please contact us via* [the Contributing page](Contributing.html).


text:
Group meeting with Leon at East Building, 11:15 Friday 4th October 2013

# N.B. READ UP ON AND REMIND YOURSELF OF HCI STUFF (Year 2) AND SOFTWARE ENGINEERING STUFF (Year 1)

## Reading material

In email repsonse to request for FYP meeting, **Leon writes:**

	Please do a bit of reading around beforehand. Go to the ACM Digital Library and search on 'user interface programming'.

1. [ACM Conference on Human Factors in Computing Systems](http://libproxy.bath.ac.uk/login?qurl=http%3A%2F%2Fdl.acm.org%2Fevent.cfm%3Fid%3DRE151)
2. [ACM CSCW: Conference on Computer Supported Cooperative Work](http://libproxy.bath.ac.uk/login?qurl=http%3A%2F%2Fdl.acm.org%2Fevent.cfm%3Fid%3DRE169)
3. [ACM UIST: Symposium on User Interface Software and Technology](http://libproxy.bath.ac.uk/login?qurl=http%3A%2F%2Fdl.acm.org%2Fevent.cfm%3Fid%3DRE172)

In moodle project page, **Leon writes:**

	Your project must be related to contemporary developments in Human-Computer Interaction, and preferably to the part of the HCI world that focuses on interactive systems for collaboration.

1. ???
2. ???

Also In moodle project page, **Leon also writes:**

	It normally starts with some user-centred research (observations, interviews, pilot experiment) to ground the problem, carried out concurrently with literature research.
	The research problem is normally boiled down to something that can be addressed through the production of alternative versions of an interactive system.

	This is closely followed by initial design work and the production of a rough but working prototype leading up to Christmas.

	After the January exams, my students typically re-scope their research problem, based in the outcome of their initial work, and solidify their implementation ready for a full evaluation in March and April.

Thus, my answers to the questions Leon posed should follow this structure in terms of what I want to get out of it. I can use the above structure to identify **concerns** of potential challenges in each step/combination of steps/step-transitions (e.g. step dependencies, resource procurement)

Also in moodle product page, **Leon also writes:**

	Students should prepare for their projects by refreshing their memories about Interaction from CM20216 activities. You should read about HCI in general, and support for collaboration in particular. Look at any or all of the following book chapters:

* Sharp, Rogers and Preece (2007) Interaction Design. hapter 4: Designing to Support Communication and Collaboration.
* Dix, Finlay, Abowd and Beale (2004) Human-Computer Interaction. hapter 14: Communication and Collaboration Models.
* Shneiderman and Plaisant (2005) Designing the User Interface. hapter 10: Collaboration.

# Leon asked us to answer these questions and bring a notebook:

## Q1. What I hope to get out of my FYP as an experience?

I hope to gain a deep and meaningful understanding of the programmer as a user, as an individual and the context of that individual -- e.g. in a software team inside a department, inside a management structure... inside a company.

I hope to use this understanding to determine processes/work-flows that programmers experience in the endeavour of User Interface Design, both from the individual perspective and as a team.

Within these work flows, I wish to identify, in detail, metrics to gauge productivity, in order to measure this in experiments, perhaps doing A/B testing with Elm and some other, perhaps procedural language. This is an example of an objective measure.

I would also like to gather self-reported, more "fuzzy" feedback on user's perception of their productivity -- pain points, advantages, etc.  they experience in using Language X to product a UI compared to Language Y (Declarative languages like Elm, etc)

I wish to verify, empirically, the comparisons and claims made on the [What is FRP?](http://elm-lang.org/learn/What-is-FRP.elm) page of the elm-lang.org website, and those claimed it's research paper (detailing the implementation of Elm, **benefits**, etc.)

In email again, **Leon writes:**

	The Elm site makes **comparative statements.** That is encouraging because it sets up opportunities for you to test some of the claims they make, and to ask new questions about Elm that its proponents may not have considered.

These are:

1. "most current frameworks for graphical user interfaces are not declarative. They mire programmers in the many small, nonessential details of handling user input and manually modifying the display."
2. "with FRP, many of the irrelevant details are left to the compiler, freeing the programmer to think about things that matter."
3. "Coding [these examples](http://elm-lang.org/Examples.elm) in a traditional GUI framework such as HTML/CSS/JavaScript . would require significantly more work and headache."
4. "Not only is that painful to code, but it also requires broad and deep knowledge of inconsequential things."
5. "FRP makes tasks considerably easier by taking care of the messy .how. of events, display, and updates."

## Q2. Where my Project Idea came from (what inspired me)?

* The pain of coding and writing GUIs in PyQt4 while at my last job at Altran
* The joys of coding in Haskell
* The pain of writing GUIs in Haskell
* The joys of coding and writing GUIs in Elm!

## Q3. What are my concerns?

1. Difficulty procuring programmers (users) -- specifically those that meet my criteria of not having used a declarative programming language.
2. Difficulty procuring programmers working in a team
3. The complexity/scope of the project -- is it enough for a FYP; is it too much?
4. Looking at the production of User Interfaces using a programming language, there are many variables -- how will I devise an experiment to minimise this and isolate a variable so that I can make some causal/correlational conclusions?
5. Concern regarding the dependency of a subsequent part of the project on a previous step -- this is inherent of all projects, though.

repository: spanners/dissertation

repo_name: spanners/dissertation


text:
# Apache Sling Website
This repository contains the content of the http://sling.apache.org/ website, which moved in September 2017 from
the Apache CMS to this JBake-generated site.

## How to build and stage the site locally
Clone this repository, run the below Maven command, open http://localhost:8820/ and enjoy.

    mvn clean package jbake:inline -Djbake.port=8820 -Djbake.listenAddress=<IP_ADDRESS>

This allows	you to experiment with your changes before eventually publishing them.

## How to publish the website
Clone this repository and run the below commands or equivalent:

	git checkout master

	# Build the site
	mvn clean package

	# Move aside the generated pages
    mv target/sling-site-* /tmp/slingsite

	# Switch to the live branch and sync
	git checkout asf-site
	git pull origin asf-site
	rsync -r /tmp/slingsite/* .

	# At this point, git diff as needed to verify
	# what you're about to publish the The Whole Internet
	# and then
	git commit -a -m "<put something clever here>"
	git push origin asf-site

The ASF's gitpubsub mechanism then synchronizes that content to http://sling.apache.org , usually within a few seconds.

It would be nice to automate this in a Jenkins build...patches welcome!

## Variables in page content
Adding `expandVariables=true` to a page's front matter enables simple variables replacement, see the `pageVariables` map in
templates code for which variables are supported or to add more variables. A pattern like `${sling_tagline}` in page content
is replaced by the `sling_tagline` variable if it exists, otherwise a MISSING_PAGE_VARIABLE marker is output.

Please use a `sling.` prefix for new site-related variables in `jbake.properties`, to differentiate from JBake built-in variables.

## TODO
Here's a rough list of things that need to be done after the 2017 migration to gitpubsub.

We'll use jira tickets for more specific things, this is more an overview.

* Activate all the required links that https://whimsy.apache.org/site/ checks

## JBake and other technotes
* Currently using 2.5.1 via the `jbake-maven-plugin`, see under `/bin`, docs at http://jbake.org/docs/2.5.1
* That version of JBake uses https://github.com/sirthias/pegdown for Markdown, syntax info at https://github.com/sirthias/pegdown/blob/master/src/test/resources/MarkdownTest103/Markdown%20Documentation%20-%20Syntax.md , extensions at http://www.decodified.com/pegdown/api/org/pegdown/Extensions.html
* Using Groovy MarkupTemplateEngine, examples at https://github.com/jbake-org/jbake-example-project-groovy-mte , docs for that engine at http://groovy-lang.org/templating.html#_the_markuptemplateengine
* Other Apache projects using JBake include at least Tamaya (https://github.com/apache/incubator-tamaya-site) , OpenNLP (https://github.com/apache/opennlp-site) and http://incubator.apache.org .

## Useful scripts and commands
To find broken links use

    wget --spider -r -nd -nv -l 5 http://localhost:8820/ 2>&1 | grep -B1 'broken link'


text:
# Known Issues

This page list some of the known issues of Yggdrasil Decision Forests.

## Linux Binary release is build using dynamic loaded libraries

Hence there may be a mismatch of libraries, for some older systems. We expect to
do releases with statically linked binaries in the future.

**Workarounds:**

-   *Solution #1:* Install the required libraries.

-   *Solution #2:* Install from source.


text:
---
layout: single
title: Condotels
date:   2017-04-09 23:00:00
categories: posts
tags: [real estate]
comments: true
---

Condo hotels ("condotels") are the next step in the evolution of hotel properties. Developers build a luxury resort and help finance it with pre-sales of the individual units that make up the resort. A management firm takes care of the HOA and maintenance of both the property and the units, while taking a roughly 50% cut of the revenue from any rentals. How do you evaluate these units from the point of view of a property investor?

## Background

I just recently started diving into the world of real estate investing, reading books and listening to every podcast I could find on the topic. At a recent real estate investing seminar that I attended, the opportunity to buy brand new units at a resort in Orlando "minutes from Disney World" was presented and I thought "oh, this is so turnkey that it sounds perfect for me, plus I can visit sometimes!"  I got all the glossy promotional materials, and all the rules around the HOA and payments and personal use of a unit. And ... realized that I didn't know the first thing about this kind of property.

## Concerns and Research

The obvious concern is "when can I use my unit". Some condotels have blackout dates. The property I was considering did not have blackout dates, but after a visit the unit would be put at the end of the rental rotation queue. And my guests and I could use the resort facilities up to 30 days in a year.  I would not likely use it for 30 days in a year, but I could imagine hitting that limit if I let my extended family make use of the unit.

I was also initially surprised by an HOA fee. Do guests get charged a resort fee? What does the HOA fee actually cover? There was a separate cleaning fee charged for the daily maid service, but this made me wonder how many other fees there would be. And the real shocker for me was seeing that the property management firm would split the room income with me 50/50... but was this split on the gross or net income?

I tried to get more information from both a sales person and a mortgage broker that worked with the condotel, but neither could really give me pointers besides what was in the materials provided by the company. My initial searches on the company did not turn up anything useful, so I was stymied until a friend suggested to me that the concept was similar to how timeshares are run. That eventually led me to some articles about "condo hotels", also called "condotels".

Once I found the right search term, it was much easier to find articles discussing the pros and cons of this form of investing. And the results were skewed heavily against buying a condotel unit unless you view it as a vacation home rather than an investment.  I picked out some key quotes from the many articles I read an have roughly organized them into three categories: investing, rates, and profitability.

### Investing

Are condotels a good investment vehicle? It seems that multiple entities are preferring to cast them as "vacation homes" to avoid any culpability about the marketing or profitability. It's also important to consider what is the exit strategy, which is a major failing of timeshares

 * "And real estate agents and developers are barred by securities regulations from divulging room rates or expected occupancy level, which would make the condos into investments rather than real estate." [1]
 * "MGM says owners shouldn't look at rooms as investments but as second homes, thus financial expectations like Ader's are unjustified." [1]
 * "To sell it, you have to consider that Condotels appeal to a very niche market, other investors or possibly vacation home buyers. Then they would have to be all cash or part of the small percentage the [sic] can obtain financing." [8]

### Occupancy Rates and Room Rates

Having occupancy and room rates to plug into your spreadsheet is mandatory. The opportunity I was considering listed a room rate of about $250/night, but when I did a search online I found one third-party discount booking site listing rooms for roughly $100 less. If your room is used for a promotional offer, you still split the income with the management firm. It's also important to find "comparable" properties nearby and understand how promotions and discounts at other properties can affect your property.  For example, a resort near Disney World probably has a room rate that is effectively capped by the pricing that Disney World offers; has Disney World ever offered deep discounts during economic downturns? At one time, the National Association of Condo Hotel Owners (NACHO) would do market research and provide guidance on these kinds of questions, but it appears that NACHO is now defunct.

 * About the MGM Mirage Signature: "Owners expected their rooms to be rented out at Las Vegas' typical 85% occupancy rate for $200 and up per night." [1]
 * "These places generally do not have 100% occupancy. I would think they are closer to 62% occupancy on a monthly basis and subject to seasonal use, depending on the hotel flag." [1]
 * "Some of the private flags have lousy central reservation systems further reducing occupancy percents." [7]

### Profitability

Although there were a couple of mentions of people who were able to make money with condotels, the consensus is that they are not likely to be profitable because of low occupancy rates and high maintenance/upgrade costs.

 * "If the operators were confident about high rental income, they wouldn't be cutting you in; they'd just borrow from a bank." [1]
 * "I happen to know someone who has several million invested in condotels and that's all he invests in and makes a killing." [9]
 * "We own a unit associated with a major resort. [Not a "condotel".] In my experience, rental income does NOT cover costs." [10]
 * "Even if you do not have significant damage from a particular rental guests, the "wear and tear" from normal vacation life in a heavily rented unit is significant." [10]
 * "In addition to losing 50% of the income to the management company in my case they could also insist that you upgrade your unit to their specifications, at their schedule, their price and their contractors." [10]

## Conclusion

The US is such a broad market that it shouldn't be thought of as a single market; there are always some areas on the upswing and others on the downswing. As a less popular vehicle, condotels have less competition among investors (useful for getting in, challenging for getting out).  My general feeling after reading all the articles was that I didn't understand enough of the underlying market forces that could help me understand how to evaluate opportunities, and the lack of control over marketing and pricing is not something I am ready for just yet.  Thinking over it more, I distilled the main points along a single dimension of good/bad.

Cons:

 * needs a commercial lender, and a higher downpayment [1]
 * occupancy rates might not meet expectations [1,3]
   * dependent on marketing by management [1, 2]
 * maintenance fees come out of owner's share of income [1,2, 3]
   * maintenance fees can be high [1, 3]
 * taxed at commercial rates [3]
 * may need to reserve your own unit weeks in advance [5]
 * considered more of a second or third home than an investment [1, 3, 5, 7]
 * overbuilding [6]

Pros:

 * turnkey properties with little owner involvement [3]
 * vacation home when visiting [1, 8]

### Summary of Questions

The different articles brought up some variations that you'll see from one opportunity to the next. I compiled a list of questions for myself to consider the next time I'm considering one of these opportunities.

1. Using my unit:
   1. blackout dates?
   2. shifting existing reservations that overlap?
   3. where does my unit go back into the rental pool?
   4. can I and my guests use the resort facilities?
      1. does this change if you use a separate management company?
2. Money:
   1. cleaning fees
   2. HOA dues?  What does it cover, versus any resort fee that guests are charged?
   3. How is income divided? (~50/50 with the management firm is typical.) Is this on the gross or net income?
   4. Occupancy rates
      1. does the reservation system discourage visitors?
      2. does the hotel flag attract visitors?
      3. is there strong competition nearby?
         1. Disney World probably creates a ceiling on the nightly rate of nearby units.
   5. Daily/Nightly rate
      1. is the property offering deep discounts on third-party sites?
3. Exit plans
   1. how does the value of comparable units at other hotels appreciate?
   2. Is there much of a market for selling units? Is there a glut of units for sale?
   3. Will purchasers be able to easily find financing?
      1. Are you willing to finance the purchaser?

## References

1. [A Room of Your Own](https://www.forbes.com/forbes/2006/1225/068.html)
2. [Mr. Cheap - Condotels](http://www.moneysmartsblog.com/condotels/)
3. [Condotels - Good or Bad Investment?](https://financialhighway.com/condotels-good-or-bad-investment/)
4. [Tips on Buying a Condotel as a Rental Residence and Investment](http://www.condohotelcenter.com/articles/a106.html)
5. [Investopedia - Condotel](http://www.investopedia.com/terms/c/condotel.asp)
6. [Condotels Don't Pencil Out](https://www.american-apartment-owners-association.org/property-management/financing/condotels-dont-pencil-out/)
7. [BiggerPockets - Buy & Hold Condotel units](https://www.biggerpockets.com/forums/52/topics/88642-buy-and-hold-condotel-units)
8. [BiggerPockets - Condos in Vegas-MGM or Palms Place?](https://www.biggerpockets.com/forums/311/topics/325690-condos-in-vegas-mgm-or-palms-place)
9. [BiggerPockets - Are Condotels a good investment?](https://www.biggerpockets.com/forums/48/topics/197459-are-condotels-a-good-investment)
10. [TripAdvisor - Owning a condotel unit](https://www.tripadvisor.com/ShowTopic-g1-i10700-k4557683-Owning_a_condotel_unit-Timeshares_Vacation_Rentals.html)


text:
![](./assets/images/readmemaker.png)

This application will generate a README.md file that contains the selected standard sections of a markdown file used in application development.

[Read Me Maker Application Link](In this case there is no url - this is a node based js )

[Read Me Maker application can be found on repository github.com](https://github.com/ktywelch/ReadmeMaker)
## Table of contents
* [Title](#Title)
* [Installation](#Installation)
* [Usage](#Usage)
* [Technologies](#Technologies)
* [Contributions](#Contributions)
* [Test](#Test)
* [License](#License)
## Installation
The installation pocess is a download of git source, using npm install to install required modules based on the package.json file included in the same directory as the application.

* Once the application is downloaded from git, change to the ./js directory
* run "npm install" to install the required modules

## Usage
The user can use this applcation to generate a README.md file containing the sections selected. Once the file is created it can me opened and modified using any standard text editor.

* User changes directory to the ./js path
* Executes the "node readmemaker.js" to start the program
* User selects the sections they want to have in the README.md file
* User is prompeld for questions and when completed file will be generated in ../output directory. User can edit the file or open in preview of web browser to see the formatted output.

![](./assets/images/readmemaker.gif)

## Technologies
This was developed using a variety of technologies and resources all are open source.

* VSCode - used to create and edit the application
* node.js - the js interpreter used to execute the stand alone js
* npm - node package manager used to install and track dependencies
* npm modules inquirer,utils and fs

## Contributions
Recognizing contributors and sites that helped in development:

* Lucah, Sam, Mike, Archana for attending study session and sharing ideas on approach
## Test
No testing is available at this time
## License
MIT

repository: ktywelch/ReadmeMaker

repo_name: ktywelch/ReadmeMaker


text:
# RACF
This NodeJS module enables your application to validate against SAF/RACF

## Installation

<!--
This is a [Node.js](https://nodejs.org/en/) module available through the
[npm registry](https://www.npmjs.com/).
-->

Before installing, [download and install Node.js](https://www.ibm.com/products/sdk-nodejs-compiler-zos)
IBM SDK for Node.js - z/OS 14.0 or IBM Open Enterprise SDK for Node.js 16 or higher is required.

## Setup

In order to use this module, you must set the Program Control bit on Node and its dependent DLLs using the following command:

```bash
extattr +p <file>
```

A convenience script, `setup.sh`, is provided and can do this for you automatically

```bash
. ./setup.sh
```

## Simple to use

### Install

```bash
npm install racf
```

### Use

```js
const racf = require("racf");

// Check if user belongs to a RACF group
if (racf.isUserInGroup("myuserid", "GROUP")) {
  // Authenticate user and password against RACF
  var isSuccessful = racf.authenticate("myuserid", "mypassword");
  console.log(isSuccessful);
}

// Get the user name with getUserName
console.log(racf.getUserName())

// Check Permissions to a resource class
// Read access to the BPX.SERVER resource in the FACILITY class is required for this function
let hasResource = racf.checkPermission(racf.getUserName(), "FACILITY", "BPX.SERVER", "READ");
```

### Test
Prior to running the tests, make sure to set the RACF_TEST_ID, RACF_TEST_PASSWORD, RACF_TEST_INGROUP and RACF_TEST_NOTINGROUP environment variables.

Run the tests:
```bash
RACF_TEST_ID="MYUSERID" RACF_TEST_PASSWORD="MYPASSWORD" RACF_TEST_INGROUP="DEV_REALGROUP" RACF_TEST_NOTINGROUP="DEVFAKEGROUP" npm test
```

### Troubleshooting
When running the `setup.sh` scripr or the `extattr` command, you may receive the following error:
```
chattr() error: rv=-1, errno=8B, rsn=0924041B
```
This indicates that may not have READ access to the BPX.FILEATTR.PROGCTL resource in the FACILITY class.  Provide access to your userid or contact your system administrator.

repository: ibmruntimes/node-racf

repo_name: ibmruntimes/node-racf


text:
---
layout: post
title: Numbering tasks in OmniFocus 2 for Mac OS X
permalink: /how-to/numbering-tasks-in-omnifocus-2-for-mac-os-x
post_id: 1276
categories:
- GTD
- How to
- KeyboardMaestro
- OmniFocus
- Productivity
- Shell
---

I'm using OmniFocus 2 on my MacBook Pro and wanting to 'number' tasks because at the end of each week, I print a PDF of the tasks completed and outstanding for a particular client. Task numbers make it much easier for the client to reconcile the work I've done with the lists they use.<!--more-->

The problem is that OmniFocus doesn't have a 'task number' function.

Keyboard Maestro and a shell script to the rescue. This allows me to get the next sequential task number. Now all I do is type,,task
and it expands out to the next available task number.

In a nutshell I use the shell script to get a variable from a text file (which is the last task number I used), and increment it. Keyboard Maestro is wrapped around this to both trigger it and make it look pretty.

The shell script itself is quite basic, any improvements you can suggest, please do.

Here is a screenshot of the Keyboard Maestro recipe (edit:
[I've since modified this recipe to be a little faster](/productivity/faster-numbering-of-omnifocus-tasks))

![Keyboard Maestro recipe to increment task number](/images/Screenshot-2014-07-21-10.39.28-600px.png) Get last task number, increment it, save it.

This relies on you having a text file named `last_task_number.txt` in your home folder.

The format of this file is just a single line of text as follows:
```
TaskNumber=0
```

gha_language: CSS


text:
# Favorite xkcd Comics

- 58 [Why Do You Love Me?](https://xkcd.com/58/)
- 62 [Valentine - Karnaugh](https://xkcd.com/62/)
- 79 [Iambic Pentameter](https://xkcd.com/79/)
- 125 [Marketing Interview](https://xkcd.com/125/)
- 284 [Tape Measure](https://xkcd.com/284/)
- 327 [Exploits of a Mom](https://xkcd.com/327/)
- 458 [Regrets](https://xkcd.com/458/)
- 488 [Steal This Comic](https://xkcd.com/488/)
- 519 [11th Grade](https://xkcd.com/519/)
- 552 [Correlation](https://xkcd.com/552/)
- 555 [Two Mirrors](https://xkcd.com/555/)
- 683 [Science Montage](https://xkcd.com/683/)
- 826 [Guest Week](https://xkcd.com/826/)
- 918 [Google+](https://xkcd.com/918/)
- 949 [File Transfer](https://xkcd.com/949/)
- 1056 [Felidae](https://xkcd.com/1056/)
- 1119 [Undoing](https://xkcd.com/1119/)
- 1196 [Subways](https://xkcd.com/1196/)
- 1237 [QR Code](https://xkcd.com/1237/)
- 1319 [Automation](https://xkcd.com/1319/)
- 1373 [Screenshot](https://xkcd.com/1373/)
- 1413 [Suddenly Popular](https://xkcd.com/1413/)
- 1428 [Move Fast and Break Things](https://xkcd.com/1428/)
- 1491 [Stories of the Past and Future](https://xkcd.com/1491/)
- 1602 [Linguistics Club](https://xkcd.com/1602/)
- 1688 [Map Age Guide](https://xkcd.com/1688/)
- 1703 [Juno](https://xkcd.com/1703/)
- 1750 [Life Goals](https://xkcd.com/1750/)
- 1760 [TV Problems](https://xkcd.com/1760/)
- 1803 [Location Reviews](https://xkcd.com/1803/)
- 1809 [XKCD Phone 5](https://xkcd.com/1809/)
- 1832 [Photo Library Management](https://xkcd.com/1832/)
- 1835 [Random Obsessions](https://xkcd.com/1835/)
- 2041 [Frontiers](https://xkcd.com/2041/)


text:
---
title: Prepare to develop
lang: en-US
---

# Prepare to develop

 * SSG : Static Site Generation
 * SSR : Server Side Rendering
 * CSR : Client Side Rendering

VuePress can be documented and tested when it develops Javascript or Typescript library
because that developed for documented of Vue.js and that can using Vue.js component.

VuePress generates static site and GitHub can serve static site besides, that's free.
So I'm going to start my project of Javascript Data Grid with VuePress and that deploy on GitHub.
My Javascript Data Grid name is MoeGrid and from now on, I will say that is MoeGrid.
ModeGrid will develop on MIT license.

Now, let's lean some skills for creating VuePress project and how to distribute that on GitHub.

## Register SSH key on GitHub

Ref: [Generating a new SSH Key and adding it to the ssh agent](https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent)

  1. Open terminal
  2. Paste text below to, substitute in your GitHub email address.
  ```shell:no-line-numbers
  ssh-keygen -t ed25519 -C<EMAIL_ADDRESS>  ```
  ::: tip Note
  If you are using a legacy system that doesn't support the ED25519 algorithm, use:

  $ ssh-keygen -t rsa -b 4096 -C<EMAIL_ADDRESS>  :::

  This create a new SSH key, using the provided email as a label
  ```text:no-line-numbers
  > Generating public/private ed25519 key pair.
  ```
  3. When you're prompted to "Enter a file in which to save the key," press Enter. This accepts the default file location.
  ```text:no-line-numbers
  > Enter a file in which to save the key (/home/you/.ssh/id_ed25519): [Press enter]
  ```
  4. At the prompt, type a secure passphrase. For more information, see "[Working with SSH Key passphrases.](https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh/working-with-ssh-key-passphrases)."
  ```text:no-line-numbers
  > Enter passphrase (empty for no passphrase): [Type a passphrase]
  > Enter same passphrase again: [Type passphrase again]
  ```
  5. Completed to generate SSH key.
  ```text:no-line-numbers
  Your identification has been saved in /home/you/.ssh/id_ed25519
  Your public key has been saved in /home/you/.ssh/id_ed25519.pub
  The key fingerprint is:
  SHA256:8pTlRRkzOfdZbmNmdvhC6RK/Hb93RqxnA1hhuVE6lH4<EMAIL_ADDRESS>  The key's randomart image is:
  +--[ED25519 256]--+
  |            ==+. |
  |           .=Oo .|
  |          . +=+=o|
  |         + ..+=E=|
  |      . S . o=*+o|
  |       +   ...+.+|
  |        .    ..*o|
  |              o.O|
  |               ==|
  +----[SHA256]-----+
  ```
  6. See your public key. And it copies your public key.
  ```sh:no-line-numbers
  cat ~/.ssh/id_ed25519.pub

  ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILhZ9PFFejc9Jvmw1a/fa+k1CkDLZgKXDIK0XtaLcQwg<EMAIL_ADDRESS>  ```
  7. Sign in the [GitHub](https://github.com/login)
  8. Visit to [SSH Key and GPG keys](https://github.com/settings/keys)
  9. Click **New SSH Key** button
  10. Enter **Title** and then paste ssh public key in **Key**

## Create GitHub repository

  1. Sign in the [GitHub](https://github.com)
  2. Visit to [Creating new repository](https://github.com/new)
  3. Enter **'<*GitHub Username*>.github.io'** in the **Repository name**
  4. Select **Public**
  5. Check **Add .gitignore** and then select **node** of **.gitignore template**
  6. Check **Choose license** and then select **License: MIT License**
  7. Click **Create repository** button

## Clone Git repository and create VuePress v2 Project
  1. Open terminal
  2. Clone GitHub repository and change working directory.
  ```shell:no-line-number
  git clone git@github.com:<GitHub Username>/<GitHub Username>.github.io.git
  cd <GitHub Username>.github.io.git
  ```
  3. Add ```.temp```, ```.idea```, ```yarn.lock``` and ```package-lock.json``` to .gitignore
  ```shell:no-line-number
  cat .temp >> .gitignore
  cat .idea >> .gitignore
  cat yarn.lock >> .gitignore
  cat package-lock.json >> gitignore
  ```
  4. Initialize node project
  ```shell:no-line-number
  yarn init
  ```
  5. Install VuePress locally
  ```shell:no-line-number
  yarn add -D vuepress@next
  ```
  6. Add some scripts to ```package.json```
  ```json
  {
    "scripts": {
      "docs:dev": "vuepress dev docs",
      "docs:build": "vuepress build docs"
    }
  }
  ```
  7. Create your first document.
  ```shell:no-line-number
  mkdir docs
  echo '# Hello VuePress' > docs/README.md
  ```
  8. Serve the documentation site in the local server
  ```shell:no-line-number
  yarn docs:dev
  ```
  9. Create GitHub workflow
  @[code](../../.github/workflows/docs.yml)
  10. Add new files to git
  ```shell
  git add .
  ```
  11.
  ```
  12. Push git on GitHub
  ```shell
  git push
  ```
  13. Visit Project page of GitHub

## Debug setting for JetBrains's IDEA

gha_language: Python


text:
# Facial Recognition Nerf Blaster Locking System - PiNerf

![PiNerf System](/Documentation/pinerf.png)

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

This application uses a Raspberry Pi and Raspberry Pi Zero to recognise authorized faces for the use of a Nerf Elite Infinus Blaster.

The low power Pi Zero captures images through it's own camera and transmits them to the base station. The base station will perform the facial recognition algorithm and will send a signal back to the Pi Zero once it has successfully identified a face. This will 'unlock' the gun and allow it to be used.

The scripts for the Nerf Gun will be created using Python as it provides a better interface for the camera. **All of the main processing will be done on the Turret Base and is created using C++.**

# Usage
This project uses two Rasbperry Pis. One must be embeded within the gun itself and another located attached to a turret base.

Each script has been split into different folders. The gun controller script **must** be loaded onto the Pi that is embedded within the gun. It is advised that the script be set as a **system service** that automatically starts when the Pi turns on.

The turret base scripts **must** be loaded onto the Pi that is connected to the turret base. The scripts here will perform **all** of the key image processing/facial recognition.

Both of these Pis **must** be connected on the same network, along with any computer system used for debugging/verification. Advice has also been given on how to secure the system to prevent unauthorised access to the network. Any input/output pins required on the Pis will be listed in the appropriate files.

The 3D model which can be found must be printed if a custom turret mount is desired. The electrionic ciruit design that accompanies the Pi in the gun can also be found along with documentation instructing how it can be connected.

Each folder for each part of the project will have further information, where appropriate, explaining more about how to use it.

# Social Media

https://twitter.com/pi_nerf

# Contributers
benzoferrari123 - Ben Hanmer - Turret Base Pi Scripts

iShauny - Shaun Loughery - Gun Control Scripts

LShaw1872 - Lewis Shaw - 3D Modelling Design

CaesarBonsai - Drew Benton - Electronic Circuit Design


text:
# Exercises

## Task 0:
Create a function that calculates the result of raising an integer to another integer (eg 5 raised to 3 = 5^3 = 5 × 5 × 5 = 125).

## Task 1:
Write a function that will give stats about an integer number.
The function should write the stats in console. The stats required are:

* Whats the value of the number
* How many digits the number has
* Is the number odd or even
* Is the number positive

I.e. if the user enters the number 25, the response should be
```sh
The number 25 is a 2 digit number, it's odd and it's a positive number.
```

## Task 2:
Create a function to say whether a string is symmetric (a palindrome). For example, "RADAR" is a palindrome.

## Task 3:
Create a function which returns the greatest value stored in an array of real numbers which is specified as parameter.

## Task 4:
Create two functions that calculates the amount of numeric digits and vowels(samoglaski) that a text string contains.

It will accept one parameter parameter: the string that we want to search,

Function 1 should return the number of digits, function 2 should return the number of vowels. Do not name them function1 and 2 :)

## Task 5:
Create a function to read a sentence and replace lowercase characters by uppercase and vice-versa.

## Task 6:
Create a function to check whether a character is an alphabet or not and if so, go to check for the case (upper or lower).

## Task 7:
Create a function to find the number of times a substring appears in a given string.

## Task 8:
Create a function to take one parameter n and calculate what day of the week is n days from this moment.

## Task 9:
Create a function to take one parameter n to display the date of past n years from current date and to tell what day it was. The parameter should not be larger that 20.

## Task 10:
Create a function that takes a number as an argument and returns an array of numbers counting down from this number to zero.
* 5 -> [5, 4, 3, 2, 1, 0]

## Task 11:
Create a function that takes an array and returns the difference between the biggest and smallest numbers.
* [10, 4, 1, 4, -10, -50, 32, 21] -> 82

## Task 12:
Create a function that goes through the array, incrementing (+1) for each odd number and decrementing (-1) for each even number and returns that array.
* [1, 2, 3, 4, 5] -> [2, 1, 4, 3, 6]

### BONUS

## Task 0:
* Make a method called AgeCalculator
* The method will have one input parameter, your birthday date
* The method should return your age
* Show the age of a user after he inputs a date

> Note: take into consideration if the birthday is today, after or before today


text:
---
layout: post
title: Crucial SSD reset
author: Andy
categories: work
tags:
- hardware
---

Turned on my Lenovo W540 with Crucial SSD in it the other morning and was confronted with an evil black screen -

A power cycle of the SSD is done as follows, takes about ~1 hour to complete.
1. Power off the system.
2. Remove all power supplies (ac adapter then battery for laptop, ac adapter for desktop)
3. Hold down the power button for 30 seconds to close the circuit and drain all components of power.
4. Reconnect all power supplies (battery then ac adapter for laptop, ac adapter for desktop)
5. Turn on the system and enter the BIOS (see your manual for the steps to enter the BIOS)
6. Let the computer remain in the BIOS for 20 minutes.
7. Follow steps 1-3 and physically remove the SSD from the system by disconnecting the cables for a desktop or disconnecting the drive from the junction for a laptop.
8. Leave the drive disconnected for 30 seconds to let all power drain from it.
9. Replace the drive connection(s) and then do steps 4-8 again.
10. Repeat steps 1-4.
11. Cross fingers and start your computer normally and run Windows.

I was very surprised when it worked, having tried it once before a year and a half earlier  with no success.


text:
Title: Verifying release signatures

On unix platforms the following command can be executed :

    for file in `find . -type f -iname '*.asc'`
    do
        gpg --verify ${file}
    done

You'll need to look at the output contains only good signaturesie :

            gpg: Good signature from "Michael Dick (CODE SIGNING KEY<EMAIL_ADDRESS>            gpg: Signature made Tue 12 Jan 2010 05:30:17 PM CST using RSA key ID 7412AD2C
            gpg: Good signature from "Michael Dick (CODE SIGNING KEY<EMAIL_ADDRESS>            gpg: Signature made Tue 12 Jan 2010 05:30:18 PM CST using RSA key ID 7412AD2C
            gpg: Good signature from "Michael Dick (CODE SIGNING KEY<EMAIL_ADDRESS>            gpg: Signature made Tue 12 Jan 2010 05:30:17 PM CST using RSA key ID 7412AD2C
            gpg: Good signature from "Michael Dick (CODE SIGNING KEY<EMAIL_ADDRESS>


text:
# testing-react-redux-todo-list
Testing React-Redux TodoList With Enzyme & Mocha

###### Clone the repo [aitnasser/testing-react-redux-todo-list](https://github.com/aitnasser/testing-react-redux-todo-list).
##
```sh
$ git clone https://github.com/aitnasser/testing-react-redux-todo-list
```
##### Install the dependencies and devDependencies and start the server.
##
```sh
$ cd testing-react-redux-todo-list
$ npm install
```
##### start the App.
##
```sh
$ npm start
```
##
This will start a HttpServer at port 3000 at your localhost.
##### test the App.
##
```sh
$ npm test
```

repository: aitnasser/testing-react-redux-todo-list

repo_name: aitnasser/testing-react-redux-todo-list


text:
# Changelog

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

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

See [GitHub releases](https://github.com/mll-lab/slate-php/releases).

## Unreleased

## v6.1.0

### Added

- Support `thecodingmachine/safe:^2`

## v6.0.0

### Added

- Initial release of the `mll-lab` fork of the original `prezly` package

repository: mll-lab/slate-php

gha_language: PHP

repo_name: mll-lab/slate-php


text:
---
title: Web Resources axd
layout: post
date: '2011-11-01 00:00:00'
comments: true
categories:
- WebResource.axd
tags:
- WebResource.axd
---

Generally we will be having all the static content files like Java scripts, images, css files at different locations on our machine and we will be importing them in our aspx or html pages by mentioning the path where they exist.

For example let us assume that i am having a java script file in a location like c:\Pavan\Proj\Java Script\Example.js and similarly some other static files like images and css at different location on my machine and i will be making use of these files by specifying the exact path in my aspx. Up-to now everything is fine. But i am planning to deploy my application onto a different server. In this there are more chances of me facing the issue with the path of these static files i am making use in my application. We should take care that these static files are placed in the similar location like in my first environment.

So in order to over come these type of issues we can make use of WebResources.

The main theme of web resources is we can embed all the static files into an assembly(dll) so that we can avoid the problems mentioned in the above scenario. Now let us see how to create Web Resource files and how to make use of them.

**Embedding static files into a dll:**

1. Create a classlibrary project in visual studio.

2. Add static files like js,image,css files

3. Select the static files and click on properties.

4. Open the AsseblyInfo.cs file and add the webreference attribute

```
[assembly: WebResource("ClassLibrary1.Testjavascript.js", "text/javascript")]
[assembly: WebResource("ClassLibrary1.testcssfile.js", "text/css")]
```

5. We will have Web resource attribute class in System.Web.UI

The WebResource assembly attribute has three parameters as follows:

1.**Web Resource: **The name of the resource that is embedded in the assembly

2.**ContentType:** The MIME file type for the resource

3.**PerformSubstitution:** A Boolean value that determines whether other Web Resource URLs that are referenced in this resource are parsed and replaced with the full path of the resource

Now compile the classLibrary project and in the resultant dll we will have these static file embedded.

We can see these embedded file by using software like Reflector.

Now we are having a dll in which the static files were embedded. So the next step would be to make use of them in our project.

The following are the steps to make use of these resources.

1. Add the dll(that contains static data) or proj reference to the website we are developing.

2. So inorder to access the resource that is present in the dll we should make use of a function called GetWebresourceUrl() which is  a method of the class “ClientScriptManager” which is used to bind the client scripts.

```
string imagepath = Page.ClientScript.GetWebResourceUrl(t, "ClassLibrary1.tig.jpg");
img1.Src = imagepath;
```

So the GetWebResourceUrl() takes 2 parameters.

i. Type
```
Type t = typeof(Namespace.ClassName);
```

ii. Complete name of the resource we are trying to get.

3. So the GetWebResourceUrl() returns a string and we can assign that string to the HtmlControl as src.

```
Type t = typeof(ClassLibrary1.Class1);
      ClientScript.RegisterClientScriptInclude("test", Page.ClientScript.GetWebResourceUrl(t, "ClassLibrary1.Testjavascript.js"));
      string imagepath = Page.ClientScript.GetWebResourceUrl (t, "ClassLibrary1.tig.jpg");
      img1.Src = imagepath;

```

ClientScript.RegisterClientScriptInclude() is used to register the javascript from the code behind file.

Thanks,
Pavan

{% include /in_article_ads.html %}

{% if page.comments %}

Please enable JavaScript to view the comments powered by Disqus.
{% endif %}

gha_language: HTML


text:
# Numeric Sequence Calculator
Code test project for World Momads Group
## Installation
Download the zip file and open it by Visual studio
## Usage
There are two parts. One is test project which contains basic automated test method for calculation. The other is ASP.NET MVC website implementing
the calculator.
## History
20/07/2016 Baseline
## Authors
Yang Li
## License
This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details

repository: HardTooKill/ViewNumberSeq

repo_name: HardTooKill/ViewNumberSeq


text:
## rebirth

### Multi Language

* [中文 README](./README-zh.md)

### Introduction

This project records the web page in the server.

#### What can it be used for

* Record the user operation on the client, reproduce it on the server and record it.
* Record any changes to the specified web page.
* If there is the function of client recording, the computer requirements of the client can be reduced

#### Advantages

* Record for tab pages, so refresh web pages and jump can also be recorded
* You can also record the sound of web pages, even if your server does not have a sound card.
* Perfect crash, error processing mechanism
* You can add your own code to state, and it is very convenient.
* Supports `Chrome DevTools Protocol` and `VNC` debugging

### Quick start

#### Single Node

[![Use the rebirth project to record on the server](http://img.youtube.com/vi/lzos3284dUE/0.jpg)](http://www.youtube.com/watch?v=lzos3284dUE "Use the rebirth project to record on the server")

```shell
docker run -dit -P --name rebirth_alo7 -v `pwd`/rebirth_alo7/logs:/etc/www/logs -v `pwd`/rebirth_alo7/video:/root/Downloads -e MATERIAL_URL="https://www.alo7.com/en/" -e START_VNC="yes" rebirth:1.0.0
```

#### Multi Node

### Web Page API

After the webpage is loaded, some api will be injected for the webpage to use.

```javascript
// start record
rebirth.start();

// pause record
rebirth.pause();

// resume record
rebirth.resume();

// stop record
rebirth.stop('filename');

// record fail
rebirth.fail();

// set extra info, The final information is delivered to your custom code
rebirth.setExtraInfo({
  foo: 'bar'
});
```

### Environmental Variable

They are defined in `docker-compose.yml`

* `MATERIAL_URL`: The `url` to be recorded, the default value is `https://github.com/`
* `START_VNC`: Whether to start `VNC`, open as `yes`. The default value is `no`
* `VNC_PASSWORD`: `VNC` connection password, default value is` rebirth`
* `MAX_RECORD_TIME`: What is the maximum time of the current recording, in milliseconds, the default value is `7200000` (two hours)

### How to customize code

In the `src/hooks` directory, create a new file: `index.js`, in the following format:

```js
module.exports = {
  /**
   * Triggered when recording is complete
   *
   * @param {Object} data - Client request body
   * @return {void | string | Object | number | boolean | Function | Promise.resolve}
   */
  completeRecordAfter: (data) => {
    console.log(data);
    return true;
  },

  // Triggered after recording failure
  // The parameters are the same as completeRecordAfter
  failAfter: () => {},
};
```


text:
This is the second of three app examples demonstrating how a real world code can be registered and used in Agave. The app is a Python code that takes a csv file and creates a graph of the data. We detail how to create a JSON description of the code we want to run, how to create the wrapper template that Agave uses to run the code, and how to test and run the app with Agave.

You can download the full source code for this example app and client application in the Agave Samples repository in the apps/pyplot-demo/intermediate/pyplot-demo-intermediate-0.1.0 directory. The webapp source code is provided in the apps/pyplot-demo/intermediate/webappdirectory. If you would like to run this app in a live environment, you can register your own compute and storage systems, or use one of our developer sandbox environments.

## Basic app overview

The application code we're going to use in the same Python plotting program from the previous tutorial. In this tutorial we will enhance the previous app by exposing several more parameters and adding validation rules so Agave will handle server-side validation for us. As a refresher, here is the usage text from the pyplot app.

[code lang=text]
python main.py -h
usage: pyplot-demo [-h] [--chart-type {bar,line}] [--x-label [XLABEL]]
                   [--show-x-label] [--y-label [YLABEL]] [--show-y-label]
                   [--show-legend] [--width WIDTH] [--height HEIGHT]
                   [--background-color BACKGROUND] [--output-location OUTDIR]
                   [--file-per-series] [--format {png,jpg,gif}] [-v]
                   infile

A program to plot the contents of a csv file.

positional arguments:
  infile                The dataset to plot.

optional arguments:
  -h, --help            show this help message and exit
  --chart-type {bar,line}
                        The type of chart to show.
  --x-label [XLABEL]    The x-axis label.
  --show-x-label        If specified, the x-axis label will be shown
  --y-label [YLABEL]    The y-axis label.
  --show-y-label        If specified, the y-axis label will be shown
  --show-legend         If specified, a legend will be generated for each
                        chart.
  --width WIDTH         The chart width.
  --height HEIGHT       The chart height.
  --background-color BACKGROUND
                        The css hex color of the chart background.
  --output-location OUTDIR
                        The output directory of the plotted dataset.
  --file-per-series     If specified, each chart will be saved in a separate
                        file.
  --format {png,jpg,gif}
                        The image format of the plotted dataset.
  -v, --verbose         Enable verbose output.
```

From the basic example, we have a working app that takes an single input file representing the dataset that the pyplot code will process, and a single parameter that specifies the type of chart that will be generated. If we intend for other people to use this app, we probably want to add a couple things that will enhance the user experience. For example, the pyplot app only knows how to process files in comma separated value (csv) format. It would be good if the app verified the file was a CSV file when a job was submitted rather than let it fail silently. Also, the previous app we registered only allowed for png images to be created, so we will add some parameters to the app description that allow for better control of the look and feel of the generated charts.

The result of these changes will be an app that is more flexible and error-resistant than its predecessor. To illustrate, we will look at a simple web application that exposes both apps to the end user and highlight the impact the changes have on the user experience.

### Runtime requirements

In order to run this app, the target execution system must have the following installed.

<ul>
<li>Python 2.7</li>
<li>Matplotlib</li>
</ul>

If you are following along on your local system, you will need to have these installed in order to run the wrapper script and invoke the pyplot Python code.

### Creating the app JSON description

The JSON for our intermediate app is below.

```javascript
{
  "name": "demo-pyplot-demo-intermediate",
  "parallelism": "SERIAL",
  "version": "0.1.0",
  "label": "PyPlot Demo Basic",
  "shortDescription": "Basic demo plotting app",
  "longDescription": "Basic demo app to create a graph using Python",
  "deploymentPath": "apps/pyplot-demo-intermediate-0.1.0",
  "deploymentSystem": "demo.storage.example.com",
  "executionSystem": "demo.execute.example.com",
  "executionType": "CLI",
  "templatePath": "wrapper.sh",
  "testPath": "test/test.sh",
  "tags": [
    "demo",
    "python",
    "tutorial",
    "plotting"
  ],
  "ontology": [],
  "inputs": [{
    "id": "dataset",
    "value": {
      "default": "agave://demo.storage.example.com/inputs/pyplot/dataset.csv",
      "required": true,
      "validator": "([^s]+(.(?i)(csv))$)"
    },
    "details": {
      "label": "Dataset",
      "description": "The dataset to plot. Datasets must be in CSV format."
    }
  }],
  "parameters": [{
    "id": "chartType",
    "value": {
      "default": "bar",
      "type": "enumeration",
      "enum_values": [
        { "bar": "Bar Chart" },
        { "line": "Line Chart" }
      ],
      "required": true
    },
    "details": {
      "label": "Chart types",
      "description": "Select the chart type to generate for the dataset"
    }
  }, {
    "id": "xlabel",
    "value": {
      "default": "Time",
      "type": "string",
      "required": false
    },
    "details": {
      "label": "X-axis label",
      "description": "Label to display below the x-axis"
    }
  }, {
    "id": "showXLabel",
    "value": {
      "default": true,
      "type": "boolean",
      "required": false
    },
    "details": {
      "label": "Show x-axis label?",
      "description": "Select whether a label will be shown on the x axis"
    }
  }, {
    "id": "ylabel",
    "value": {
      "default": "Magnitude",
      "type": "string",
      "required": false
    },
    "details": {
      "label": "Y-axis label",
      "description": "Label to display below the y-axis"
    }
  }, {
    "id": "showYLabel",
    "value": {
      "default": true,
      "type": "boolean",
      "required": false
    },
    "details": {
      "label": "Show y-axis label?",
      "description": "Select whether a label will be shown on the y axis"
    }
  }, {
    "id": "showLegend",
    "value": {
      "default": false,
      "type": "boolean",
      "required": false
    },
    "details": {
      "label": "Extract the first k bytes",
      "description": "Select whether to include a legend in each chart"
    }
  }, {
    "id": "separateCharts",
    "value": {
      "default": false,
      "type": "boolean",
      "required": false
    },
    "details": {
      "label": "Extract the first k bytes",
      "description": "Select whether to include a legend in each chart"
    }
  }, {
    "id": "format",
    "value": {
      "default": "png",
      "type": "enumeration",
      "enum_values": [
        "png",
        "jpg",
        "gif"
      ],
      "required": true
    },
    "details": {
      "label": "Image format",
      "description": "Select the image format of the output files"
    }
  }, {
    "id": "height",
    "value": {
      "default": 512,
      "type": "number",
      "validator": "d+",
      "required": false
    },
    "details": {
      "label": "Chart height",
      "description": "The height in pixels of each chart"
    }
  }, {
    "id": "width",
    "value": {
      "default": 1024,
      "type": "number",
      "validator": "d+",
      "required": false
    },
    "details": {
      "label": "Chart width",
      "description": "The width in pixels of each chart"
    }
  }, {
    "id": "background",
    "value": {
      "default": "#FFFFFF",
      "type": "string",
      "validator": "^#(?:[0-9a-fA-F]{6}){1}$",
      "required": false
    },
    "details": {
      "label": "Background color",
      "description": "The hexadecimal background color of the charts. White by default"
    }
  }]
}
```

As with the previous app description, the JSON is still broken up in 3 general section. The first section is identical to before, save we have given this app a new name to reflect it represents our intermediate app tutorial. The inputs section still contains a single input object called `dataset`. This time we added an extra attribute to the definition called, `validator`. The validator field takes a regular expression value and uses this to validate user supplied values in job requests for the app. The regular expression we specified will ensure that only files ending with <strong>.csv</strong> will be accepted.

The parameters section is significantly larger than last time. Whereas the basic app had a single enumerated string parameter, this app has parameters for all the options the underlying pyplot supports. The parameters represent string, boolean, and numeric values. Notice that we do not explicitly define integer or decimal values. Rather, Agave supports a generic <em>number</em> type which you can refine to an integer or decimal value through the use of the `validator` field.

Another change from the basic app is that our new parameters are optional. As you will see when we create our wrapper template, this means we will need to check for the existence of these values at run time.

<pre>`There are many, many other attributes and options that we could include in our app description. We will get to some of them in the intermediate and advanced examples. For a full description of all the app description attributes and options, see the <a href="http://agaveapi.co/documentation/tutorials/app-management-tutorial/app-inputs-and-parameters-tutorial/" title="App Inputs and Parameters Tutorial">App Inputs and Parameters Tutorial</a>.
`</pre>

### Creating a wrapper script

Now that we have our app definition, we will create a wrapper template that Agave can use to run our pyplot code. A wrapper template is a shell script that Agave calls to invoke your app. A simple wrapper template for our app is shown below.

[code lang=text]
#set -x
WRAPPERDIR=$( cd "$( dirname "$0" )" && pwd )

# The input file will be staged in for you as part of the job request.
# Here we just sanity check that it exists.
inputfile=${dataset}
if [[ ! -e "$inputfile" ]]; then
    echo "Input file was not found in the job directory" >&2
    exit 1
fi

# Set the dimensions of the chart if specified. Because Agave validates the type
# and value, we know the width and height values are either positive integers or empty
if [[ -n "${height}" ]]; then
    HEIGHT="--height=${height}"
fi

if [[ -n "${width}" ]]; then
    WIDTH="--width=${width}"
fi

# Set the chart properties. Boolean values are passed in as 1 for true or 0 for
# false or empty.
if [[ "${background}" == "1" ]]; then
    BACKGROUND="--background=${showLegend}"
fi

if [[ "${showLegend}" == "1" ]]; then
    SHOW_LEGEND="--show-legend"
fi

if [[ "${separateCharts}" == "1" ]]; then
    SEPARATE_CHARTS="--separate-charts"
fi

# Set the x and y labels. Since we need to quote the values, we check for existence first
# rather than prefixing with an argument defined and passed in from the app description.
if [[ "${showYLabel}" == "1" ]]; then
    if [[ -n "${ylabel}" ]]; then
        X_LABEL="--show-y-label --y-label=${ylabel}"
    fi
fi

if [[ "${showXLabel}" == "1" ]]; then
    if [[ -n "${xlabel}" ]]; then
        X_LABEL="--show-x-label --x-label=${xlabel}"
    fi
fi

# We will drop the output graphs into a standard place
outdir="$WRAPPERDIR/output"
mkdir -p "$outdir"

# Run the script with the runtime values passed in from the job request
python $WRAPPERDIR/lib/main.py ${showYLabel} "${Y_LABEL}" "${X_LABEL}" ${SHOW_LEGEND} ${HEIGHT} ${WIDTH} ${BACKGROUND} ${format} ${SEPARATE_CHARTS} -v --output-location=$outdir --chart-type=${CHART_TYPE} ${inputFile}
```

As you probably guessed, the wrapper template, like the app description, is a little bit more complex. However, a closer look will reveal that the majority of the new content is predictable scaffolding to check for the existence of a parameter before adding it to the call to pyplot. No value or type checks are needed because Agave already handled the validation when it processed the job request. By the time the wrapper template is processed, boolean parameters will be resolved to 1 or 0, string parameters will be empty   or match the validator, enumeration parameters will be one of the predefined values, and numeric parameters will be integer values. Thus, with only value or missing values to deal with in the wrapper template, the initialization code becomes very predictable.

`For even more help registering your apps, check out the App Generator. This form-based wizard will walk you through the creation of your app step by step, show you the resulting JSON along the way, and give you the option to generate a wrapper template skeleton. It is a big help in making app definition painless.
`

When a user runs this example app, they will specify a `dataset` and `chartType` in their job request. During job submission, Agave will stage the `dataset` to the execution system, demo.execute.example.com, and place it in the job's work directory. It will then copy the contents of the app's `deploymentPath`, apps/pyplot-demo-intermediate-0.1.0, from the `deploymentSystem`, demo.storage.example.com, to the job work directory on demo.execute.example.com and process the contents of the wrapper template, wrapper.sh, into an executable file.

During processing, Agave will replace all occurrences of `${dataset}`, `${chartType}`, `${xlabel}`, etc. with the name of the corresponding input or parameter value provided in the job description. Depending on whether the execution system registered with Agave uses a batch scheduler, specifies a custom environment, or requires other custom environment variables set, Agave will prepend these values to the top of the file, resolve any other predefined template variables in the wrapper, save the file in the job work directory, and run it.

### Things you don't worry about

#### Data staging

Data will already be there before the app is run. If the data isn't available or the user didn't provide any, the job will fail before the wrapper template is processed.

#### Logging

Logging is handled for you by Agave. Both stderr and stdout will be captured for CLI apps. On batch systems, the job log files are saved in the job work directory. All will be present in the job work directory or archive directory when the job completes.

#### App installation

This is a bit of a moot point since pyplot is Python, but Agave handles the app staging for you by copying the `deploymentPath` from the `deploymentSystem` given in your app description to the job work folder on the `executionSystem`. As long as you can package up your app's assets into the `deploymentPath`, or ensure that they are already present on the system, you can run your app without dealing with pulling in dependencies, etc.

Of course, you still have the option of including a build or compilation in your wrapper script. For throughput reasons, however, that may not be the best approach. For another option with much better portability and performance, see the Docker App Containers Tutorial.

### Testing the wrapper template

To test our wrapper template, we will create a new script in our test folder. The script will define the template variables Agave would replace in the wrapper template at runtime. One perk of the wrapper templates being shell scripts is we can simply define our inputs and parameters as environment variables and bash will do the replacement for us.

[code lang=text]
#!/bin/bash

DIR=$( cd "$( dirname "$0" )" && pwd )

# set test variables
export dataset="$DIR/lib/testdata.csv"
export chartType="line"
export xlabel="Trade_Date"
export ylabel="Stock_Value"
export showXLabel=1
export showYLabel=1
export showLegend=1
export separateCharts=0
export height=512
export width=1024
export format="png"
export background="#999999"

# call wrapper template as if the values had been injected by the API
sh -c ../wrapper.sh
```

That's it. We can run the script and verify that the correct bar chart appears in the output directory.

### Registering your app

Now that we have our wrapper script and app description, and we have tested it works, we will register it to Agave. Let's copy our wrapper script and test directory up to the `deploymentSystem` we specified in the app description and then send our app description to Agave.

```shell
files-mkdir -N apps/pyplot-demo-intermediate-0.1.0 -S demo.storage.example.com
files-upload -F wrapper.sh -S demo.storage.example.com apps/pyplot-demo-intermediate-0.1.0
files-upload -F test -S demo.storage.example.com apps/pyplot-demo-intermediate-0.1.0

apps-addupdate -F app.json
```

That's it. Now we have our app ready to run with Agave.

### Running your app

To run your app, we will post a JSON job request object to the jobs service. We can get an sample job description from the Agave CLI's `jobs-template` script.

```shell
jobs-template -A demo-pyplot-intermediate-basic-0.1.0 > submit.json
```

That will produce JSON similar to the following in the `submit.json` file.

```javascript
{
  "name": "demo-pyplot-demo-basic test-1415742730",
  "appId": "demo-pyplot-demo-basic-0.1.0",
  "archive": false,
  "inputs": {
    "dataset": "agave://demo.storage.example.com/apps/pyplot-demo-advanced-0.1.0/test/testdata.csv"
  },
  "parameters": {
    "chartType": "bar",
    "width": 1024,
    "height": 512,
    "background": "#d96727",
    "showYLabel": true,
    "ylabel": "The_Y_Axis_Label",
    "showXLabel": true,
    "xlabel": "The_X_Axis_Label",
    "showLegend": true,
    "format": "png",
    "separateCharts": false
  }
}
```

We can now submit this JSON to the jobs service to run our pyplot on the execution system and access the output in the exact same way as before.

## Improving the user experience

From an end-user perspective, the two applications provide a significantly different experience. The webapp in the intermediate folder illustrates this differences. Notice how the intermediate app is able to provide better field validation and catch errors to the input file prior to job submission where the basic app allows invalid input files to be submitted and the error is not caught until after the job fails.


text:
# OwnLang

[![Build Status](https://travis-ci.org/aNNiMON/Own-Programming-Language-Tutorial.svg?branch=latest)](https://travis-ci.org/aNNiMON/Own-Programming-Language-Tutorial)

OwnLang - dynamic functional programming language inspired by Scala and Python. Available for PC, Android and Java ME devices.

## Installing

| Free | Pro | Desktop |
| :--: | :-: | :-----: |
| [![Free](https://developer.android.com/images/brand/en_generic_rgb_wo_45.png)](https://play.google.com/store/apps/details?id=com.annimon.ownlang.free) | [![Pro](https://developer.android.com/images/brand/en_generic_rgb_wo_45.png)](https://play.google.com/store/apps/details?id=com.annimon.ownlang) | [v1.5.0](https://github.com/aNNiMON/Own-Programming-Language-Tutorial/releases/tag/v1.5.0)

Also available as AUR package:

```
yay -S ownlang
```

## Key features

#### Higher-order functions

Functions are values, so we can store them to variables for operating.

```scala
operations = {
  "+" : def(a,b) = a+b,
  "-" : def(a,b) = a-b,
  "*" : def(a,b) = a*b,
  "/" : ::division
}

def division(v1, v2) {
  if (v2 == 0) return "error: division by zero"
  return v1 / v2
}

for name, operation : operations {
  println "2 " + name + " 3 = " + operation(2, 3)
}
```

#### Pattern Matching

Pattern matching with value pattern, tuple pattern, list pattern and optional condition.

```scala
def factorial(n) = match n {
  case 0: 1
  case n if n < 0: 0
  case _: n * factorial(n - 1)
}

def fizzbuzz(limit = 100) {
  for i = 1, i <= limit, i++ {
    println match [i % 3 == 0, i % 5 == 0] {
      case (true, false): "Fizz"
      case (false, true): "Buzz"
      case (true, true): "FizzBuzz"
      case _: i
    }
  }
}

// run
fizzbuzz()
```

#### Functional data operations

Operate data in functional style.

```scala
use ["std", "functional"]

nums = [1,2,3,4,5,6,7,8,9,10]
nums = filter(nums, def(x) = x % 2 == 0)
// Squares of even numbers
squares = map(nums, def(x) = x * x)
foreach(squares, ::echo)
// Sum of squares
sum = reduce(squares, 0, def(x, y) = x + y)
println "Sum: " + sum
// Same using stream
println "Sum: " + stream(range(1, 11))
  .filter(def(x) = x % 2 == 0)
  .map(def(x) = x * x)
  .reduce(0, def(x, y) = x + y)
```

#### Operator overloading

Why not?

```scala
use ["std", "types", "math"]

def `..`(a, b) = range(a, b)
def `**`(a, b) = int(pow(a, b))
for y : 1 .. 10 {
  println sprintf("2 ^ %d = %d", y, 2 ** y)
}
```

#### Network module

Easy async HTTP requests with `http` module.

```scala
use "std"
use "http"
use "functional"

// GET request
http("https://api.github.com/events", def(r) {
  use "json"
  events = jsondecode(r)
  println events[0]
})

// POST request
http("http://jsonplaceholder.typicode.com/users", "POST", {
  "name": "OwnLang",
  "versionCode": 10
}, ::echo)

// PATCH request
http("http://jsonplaceholder.typicode.com/users/2", "PATCH", {"name": "Patched Name"}, ::patch_callback)

def patch_callback(v) {
  println v
}
```

## Language specification

[English](https://annimon.com/docs/ownlang/en/) and [Russian](https://annimon.com/docs/ownlang/ru/)

[Examples](examples/)

## Build

Build using Gradle `./gradlew dist`

or take a look to [latest release](https://github.com/aNNiMON/Own-Programming-Language-Tutorial/releases/latest) for binaries.

## Run

To run script use command

`java -jar OwnLang.jar -f input.own`

or

`java -jar OwnLang.jar < input.own`

## License

MIT - see [MIT licence information](LICENSE)

branch_name: refs/heads/latest

gha_language: Java


text:
# Let’s Encrypt A+ SSL Server Test

A zero-config Node/Express 4 app that gets A+ on the Qualys SSL Labs SSL Server Test

First install [letsencrypt](https://github.com/letsencrypt/letsencrypt) and generate some *real certs*. Documentation can be found [here](https://letsencrypt.readthedocs.org/en/latest/index.html).

## Usage

Requires **node 4.2.x**

npm install .

The following are expected:

 - Live Path `/etc/letsencrypt/live/${domain}`
 - Private key `privkey.pem`
 - Certificate `cert.pem`
 - CA certificate `chain.pem`

Start the server:

    node bin/www

Visit [Qualys SSL Labs SSL Server Test](https://www.ssllabs.com/ssltest)

Clear the cache for your site if there's an existing entry. This will initiate a new scan.

As of 2015 11 14 this app passed the scan with A+ result.

Much love [Let's Encrypt](https://letsencrypt.org)

## License

MIT

repository: RnbWd/ssltest

repo_name: RnbWd/ssltest


text:
---
type: rule
archivedreason:
title: Do you know how to add or remove someone from the conversation?
guid: 3c8003d8-0779-4ec2-977c-4d114dfb5bad
uri: do-you-know-how-to-add-or-remove-someone-from-the-conversation
created: 2009-03-30T02:33:59.0000000Z
authors:
- title: Adam Cogan
  url: https://ssw.com.au/people/adam-cogan
- title: Cameron Shaw
  url: https://ssw.com.au/people/cameron-shaw
related: []
redirects: []

---

If you think someone should be involved in a conversation but they're not on the recipient list, all you need to do is "Reply All", put the new recipient in the 'CC' field and include one line at the top to inform people for clarity

 e.g. (Adding Drew)

Be aware that it is easy to over CC people. Try not to CC people without thinking as every person added to a thread costs $$$. So when you add someone, it is a good idea to state the reason why they are being added, so it will justify the cost of their time.

 e.g. (Adding Drew to the loop as during the daily scrum today he mentioned he has worked on similar issues and might have some input)

<!--endintro-->

::: good
![Figure: Good Example - Adding someone to an email thread](https://user-images.githubusercontent.com/13717390/113219111-7ba00380-92cc-11eb-94c9-7d0f166a8bc7.png)
:::

If you need to remove someone from the loop, for example to have an internal conversation about an email to a client, put (Removing xxx from the loop) at the top of the email.

::: good
![Figure: Good Example – Removing someone from an email thread so you can talk about the them in private](https://user-images.githubusercontent.com/13717390/113218795-e13fc000-92cb-11eb-9731-b8e751146b63.png)
:::

You can delete people from an email thread, but what often happens is:

* The people being dropped won’t know and won’t be able to say "I don't want to be dropped from this thread"
* The people who added them in the 1st place don't know that they included unnecessary people
* The others on the thread might not notice the change in email addresses

To fix all these issues, instead of deleting people from the email, you:

* Move them to the BCC
* On the top line of the body say "(moving George and Bob to BCC)"

::: good
![Figure: Good Example – Moving someone to BCC](https://user-images.githubusercontent.com/13717390/113219037-5612fa00-92cc-11eb-9bfe-f31fa43cae06.png)
:::

**VIDEO**  - [Top 10+ Rules to Better Email Communication with Ulysses Maclaren](https://www.youtube.com/watch?v=LAqRokqq4jI)