text:
---
layout: default
---

# 1994-08-06 - Re: Latency vs. Reordering (Was: Remailer ideas...

## Header Data

From<EMAIL_ADDRESS>(Timothy C. May)

To<EMAIL_ADDRESS>(Eric Hughes)

Message Hash: 67c99267a48029653a54a9d067a17f309344ac48a216883ae0762177a9679bbe

Message ID<EMAIL_ADDRESS>Reply To<EMAIL_ADDRESS>UTC Datetime: 1994-08-06 04:12:03 UTC

Raw Date: Fri, 5 Aug 94 21:12:03 PDT

## Raw message

```
{% raw  %}From<EMAIL_ADDRESS>(Timothy C. May)
Date: Fri, 5 Aug 94 21:12:03 PDT
To<EMAIL_ADDRESS>(Eric Hughes)
Subject: Re: Latency vs. Reordering (Was: Remailer ideas...
In-Reply-To<EMAIL_ADDRESS>Message-ID<EMAIL_ADDRESS>MIME-Version: 1.0
Content-Type: text/plain

Eric Hughes writes:

> Back to the start, I guess.
>
> >   Specifically cryptographic elements are easily added to the system
> >       *	packets can be delayed for random intervals
>
> Let me repeat:
>
> REORDERING IS OF PRIMARY IMPORTANCE FOR REMAILER SECURITY.
>
> ADDING LATENCY IS NOT.
>
> And I don't want to hear any excuses that you can say latency and mean
> reordering, because that's self-delusion.  Not only is it false, but
> misleading.  Reordering is necessary for security, and latency is a
> by-product.  You don't get security by adding by-products.

I don't understand this. My remailer<EMAIL_ADDRESS>gets
about 3 or 4 messages a day through it, and I'm very careful to add a
latency of 1 hour and sometimes 2 hours...surely this is more than
enough!

My friend Pandit says he gets 20 messages an hour, and he uses a
latency of 1 hour, so why can't I?

(Oh, you mean the key is to _randomly reorder_ the messages, not just
delay them by an hour when the average number of messages in an hour
is less than 1 anyway? Oh, now I see. Never mind!)

--Tim May, who is as tired as Eric is of hearing the hoary old
chestnuts about 'random delays,' this without regard to calculating
the amount of reordering. Part of the problem, I'll grant folks, is
that there are few if any papers showing calcultions on this--Chaum's
1981 paper only makes brief mention of reordering effects. I don't
think it's a _hard_ calculation, and I've made some estimates of the
"diffusion and confusion" deriving from a mix of 10 nodes, each with a
diffusivity of 10...with equal packet sizes, and no other identifying
clues, a simple analysis suggests 10^10 routes that could be followed.
However, if only 10 messages entered the mix labyrinth (my
nontechnical term!) and 10 left it, then regardless of the 10^10
routings, a monitor would still "know" that one of the 10 leaving was
the targetted message. On the other hand, he would have no certainty
as to which one. A condition true even if 2 messages entered a node
and 2 left it after being mixed. (It is this latter area, about
degrees of uncertaintly, that needs a more sophisticate combinatorial
anylysis. Again, not a big project...maybe a nice little Masters
thesis for someone to do, to extend Chaum's analysis a bit.)

P.S. I presume the list is back up again?

--
..........................................................................
Timothy C. May         | Crypto Anarchy: encryption, digital money,
<EMAIL_ADDRESS>     | anonymous networks, digital pseudonyms, zero
408-688-5409           | knowledge, reputations, information markets,
W.A.S.T.E.: Aptos, CA  | black markets, collapse of governments.
Higher Power: 2^859433 | Public Key: PGP and MailSafe available.
"National borders are just speed bumps on the information superhighway."

{% endraw %}
```

## Thread

+ Return to [August 1994](/archive/1994/08)

+ Return to "[Adam Shostack <adam@bwh.harvard.edu>](/authors/adam_shostack_adam_at_bwh_harvard_edu_)"
+ Return to "[Hal <hfinney@shell.portal.com>](/authors/hal_hfinney_at_shell_portal_com_)"
+ Return to<EMAIL_ADDRESS>(Eric Hughes)](/authors/hughes_at_ah_com_eric_hughes_)"
+ Return to<EMAIL_ADDRESS>(Jim Dixon)](/authors/jdd_at_aiki_demon_co_uk_jim_dixon_)"
+ Return to<EMAIL_ADDRESS>(Jim McCoy)](/authors/mccoy_at_io_com_jim_mccoy_)"
+ Return to "[Rick Busdiecker <rfb@lehman.com>](/authors/rick_busdiecker_rfb_at_lehman_com_)"
+ Return to "[Spencer Mullen <cmullen@cs.oberlin.edu>](/authors/spencer_mullen_cmullen_at_cs_oberlin_edu_)"
+ Return to<EMAIL_ADDRESS>(Timothy C. May)](/authors/tcmay_at_netcom_com_timothy_c_may_)"

+ 1994-08-04 (Thu, 4 Aug 94 13:41:28 PDT) - [Re: Remailer ideas (Was: Re: Latency vs. Reordering)](/archive/1994/08/97fdd4e542cc86eebfbb94ceb73d0b95ad732ec5a70e42436d81030af67e365c) -<EMAIL_ADDRESS>(Jim Dixon)_
  + 1994-08-06 (Fri, 5 Aug 94 20:36:16 PDT) - [Latency vs. Reordering (Was: Remailer ideas (Was: Re: Latency vs. Reordering))](/archive/1994/08/ea71bc3d8d677866187e4840f7616fa94d6a8b381492185e982b9a9dc21bde88) -<EMAIL_ADDRESS>(Eric Hughes)_
    + 1994-08-06 (Fri, 5 Aug 94 21:12:03 PDT) - Re: Latency vs. Reordering (Was: Remailer ideas... -<EMAIL_ADDRESS>(Timothy C. May)_
  + 1994-08-06 (Fri, 5 Aug 94 20:37:35 PDT) - [Remailer ideas](/archive/1994/08/bdfa9516e54ec369a1d85f8b2a0a3f5bec8acb3d4b17ce95a8c3f84fea33817f) -<EMAIL_ADDRESS>(Eric Hughes)_
    + 1994-08-06 (Fri, 5 Aug 94 22:11:28 PDT) - [Re: Remailer ideas](/archive/1994/08/ae4ac270fe0bfff245830dcb42ce90f8448d892a25ed4d14ed138ca08f2830a8) - _Hal<EMAIL_ADDRESS>      + 1994-08-06 (Fri, 5 Aug 94 22:55:16 PDT) - [Re: Remailer ideas](/archive/1994/08/f3b32930a5b0dfac98413b66febd84e8cb4947219d53d67f9fef9e11a9118d35) -<EMAIL_ADDRESS>(Jim McCoy)_
        + 1994-08-06 (Sat, 6 Aug 94 16:31:20 PDT) - [Remailer ideas](/archive/1994/08/65004c1049c20776490bacfe3a808be84907fa9456c428b6868ee376a8b2348b) -<EMAIL_ADDRESS>(Eric Hughes)_
      + 1994-08-06 (Sat, 6 Aug 94 10:24:49 PDT) - [Re: Remailer ideas](/archive/1994/08/2b4d6ace2f0835f196199752de816825fe3296e088ddd1b40b2a807caecc692a) - _Adam Shostack<EMAIL_ADDRESS>        + 1994-08-06 (Sat, 6 Aug 94 16:59:46 PDT) - [Remailer ideas](/archive/1994/08/5d0d37b0b2570246c91da04892c9e39de236424ddeea16104cad4d73232e612f) -<EMAIL_ADDRESS>(Eric Hughes)_
      + 1994-08-08 (Mon, 8 Aug 94 08:40:54 PDT) - [Re: Remailer ideas](/archive/1994/08/6b80979733910abf2955d4eb969b6bb0beda6d0c99cea6b4fd88159750a060ab) - _Rick Busdiecker<EMAIL_ADDRESS>        + 1994-08-09 (Mon, 8 Aug 94 20:15:50 PDT) - [Re: Remailer ideas](/archive/1994/08/7855fbf2a91d81ae4c24148061c8283a68b5904ea6cde8c45e1226c4fbaae26e) - _Hal<EMAIL_ADDRESS>          + 1994-08-09 (Mon, 8 Aug 94 22:21:33 PDT) - [Re: Remailer ideas](/archive/1994/08/d688abf34d633dad83d7858d3cf56b00c26963132362b656d83fe19c96c0b9ac) - _Rick Busdiecker<EMAIL_ADDRESS>  + 1994-08-06 (Sat, 6 Aug 94 07:03:51 PDT) - [Re: Remailer ideas (Was: Re: Latency vs. Reordering)](/archive/1994/08/290e87ddfb4a00f3c2e873360c96a4802ae4d4f6b8ba7a0a12f8c1465461e19e) - _Spencer Mullen<EMAIL_ADDRESS>    + 1994-08-06 (Sat, 6 Aug 94 10:52:48 PDT) - [Common Carriers and Illicit Shipments](/archive/1994/08/e24547638021d49b490e295452a9a68a240dbabb0ded8a42fab1de8627c58603) -<EMAIL_ADDRESS>(Timothy C. May)_


text:
# General Information:

David’s song to Yahweh continues. He uses parallelism to emphasize what he is saying. (See: [[figs-parallelism]])

license: MIT

repository: mandolyte/uw-obsidian

branch_name: refs/heads/main

extension: md

license_type: permissive

repo_name: mandolyte/uw-obsidian


text:
---
name: Registry 2.0 UAT Testing - Accessibility
about: For accessibility that come up during UAT testing for the new Registry
title: ''
labels: app-development, service-design
assignees: ''

---

If your issue relates to language/grammar/spelling, please do not open a new ticket. Instead, edit ticket #3286 with your observation. This template is for any accessibility related changes that need to be made to the Registry. **Add this ticket to the UI Design Changes for Product Registry #3217 epic for tracking.**

**Describe the issue**
A clear and concise description of what you want to happen.

**Environment**
Was this in DEV, TEST, or PROD?

**Desktop (please complete the following information):**
 - OS: [e.g. iOS]
 - Browser [e.g. chrome, safari]
 - Version [e.g. 22]

**How would changing it benefit the users of our platform?**
Why is this feature currently inaccessible? Who does this affect? Why is changing this feature important?

**Additional context**
Add any other context, attachments or screenshots

**Definition of done**
Identify what will need to happen/be delivered for this to be completely done

repository: BCDevOps/developer-experience

branch_name: refs/heads/master

gha_language: Jinja

repo_name: BCDevOps/developer-experience


text:
# CSVToGoogleMaps
Exercise to categorize and map CSV data on a Google Maps instance

## Purpose
Built as a coding exercise in October 2014 to take in a `.csv` file with address, city, state, ZIP, and category fields. Laravel then processes the data and displays a Google Maps instance with markers placed on the locations defined in the CSV file.

Markers are color-coded based on category (e.g. If two rows are in the 'Retail' category, they would both have the same color map markers.)

After uploading the CSV file, users are able to correlate the address, city, state, ZIP, and category fields with a column index to make processing more flexible.

## Example CSV Structure

| Address   | City |  State |  ZIP |  Category |
|----------|-------------|------|-----|-----|
| 155 Main St |  Atlanta | GA | 30309 | Retail |
| 221B Baker St | Atlanta | GA | 30309 | Retail |
| 255 Corner Ave | Flower Mound | TX | 75028 | Restaurant |

repository: verkaufer/CSVToGoogleMaps

repo_name: verkaufer/CSVToGoogleMaps


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

# MineSweeper

Play the classic game of Minesweeper directly on your browser.
[Click here to play](http://www.pedrojhenriques.com/games/minesweeper/ "Play Now!")

## How to play

Your goal is to reveal all the tiles that don't have a mine.
Revealed tiles that are adjacent to mines will have a number. This number indicates how many mines are in adjacent tiles.

- left mouse button: reveals a tile
- right mouse button: adds/removes a flag from a tile, preventing it from being revealed
- left + right mouse buttons (on a revealed tile): reveales all adjacent tiles, only if enough flags are placed. This function prevents acidental mine hits.

## Future Updates

- add more game modes, each introducing twists to the classic formula
- add a backend allowing for saving a game in progress, leaderboards, etc.

## Other Versions

- A version created with Redux + React is available at [https://github.com/PedroHenriques/minesweeper-v2](https://github.com/PedroHenriques/minesweeper-v2).

repository: PedroHenriques/minesweeper

gha_language: JavaScript

gha_license_id: MIT

repo_name: PedroHenriques/minesweeper


text:
# Step 1: Generate Product Builder Script using API Explorer

For this demo application, you will use the API Explorer to create a data source. This data source will act as a temporary queue for the data you want to import into the JJ. Esquire report suite. Specifically, you will import the Twitter handles and the number of followers from the brick-and-mortar store's winter sales revenue.

The first API method call you must make is to create a data source.

1.  In the Adobe Developer Connection, select **Get Started \> API Explorer** to access API Explorer.
2.  In the API Explorer tool, enter the **Username** and **Secret** for your account.

    **Note:** You can get your username and secret from logging into the Adobe Experience Cloud and clicking on your user name link to the left of the **Sign Out** link. The Account Information screen will display your Username and Secret.

3.  From the **Environment** drop down list, choose **Sandbox**.
4.  Select the method **DataSource\_SetupGeneric** from the drop down list.
5.  Modify the XML generated in the **Request** box to define a data source name and your email address as shown in the following code.

    ```

    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" ….
      <SOAP-ENV:Body>
        <ns1:DataSource.SetupGeneric>
          <dataSourceID xsi:nil="true"/>
          <dataSourceSettings xsi:nil="true" xsi:type="ns1:ds_generic_settings">
            <dataSourceName>DataSourceForTwitterData</dataSourceName>
<EMAIL_ADDRESS>          </dataSourceSettings>
         <dataSourceType xsi:nil="true"/>
          <reportSuiteID xsi:nil="true"/>
        </ns1:DataSource.SetupGeneric>
      </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    ```

6.  Enter the value for the data source type as **12**. This numeric value identifies that you are creating a generic data source.

    **Note:** Refer to the Data Sources documentation for more information on data source types.

    ```

    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" ….
      <SOAP-ENV:Body>
        <ns1:DataSource.SetupGeneric>
          <dataSourceID xsi:nil="true"/>
          <dataSourceSettings xsi:nil="true" xsi:type="ns1:ds_generic_settings">
            <dataSourceName>DataSourceForTwitterData</dataSourceName>
<EMAIL_ADDRESS>          </dataSourceSettings>
          <dataSourceType>12</dataSourceType>
           <reportSuiteID xsi:nil="true"/>
        </ns1:DataSource.SetupGeneric>
      </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    ```

7.  Enter any report suite ID.

    **Note:** Your data connectors product must refer to report suite IDs dynamically because multiple customers can integrate your product. In the next step, you will learn how to reference a dynamic report suite ID.

    ```
    <?xml version="1.0" encoding="UTF-8"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" ….
      <SOAP-ENV:Body>
        <ns1:DataSource.SetupGeneric>
          <dataSourceID xsi:nil="true"/>
          <dataSourceSettings xsi:nil="true" xsi:type="ns1:ds_generic_settings">
            <dataSourceName>DataSourceForTwitterData</dataSourceName>
<EMAIL_ADDRESS>          </dataSourceSettings>
          <dataSourceType>12</dataSourceType>
          <reportSuiteID>your report suite ID</reportSuiteID>
        </ns1:DataSource.SetupGeneric>
      </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>
    ```

8.  Click on the **Get Response** button to generate the XML response for the API call.

Usually, you will clean up the XML response for standard elements and integration-specific needs before you can use the script. But since the code for this particular API method does not change across partners, we have included the cleaned up code for convenience.

**Note:** The report suite ID has been replaced with the RSID variable to dynamically reference your product Customer's report suite. This is also true for the data source name and the email address.

Save the following XML in a file on your computer named **DataSourceProductScript.txt**.

```

<genesis>
      <DataSource.SetupGeneric>
      <dataSourceID/>
      <dataSourceSettings>
            <dataSourceName replaceWith="client">CLIENT_NAME</dataSourceName>
            <dataSourceEmail replaceWith="client">EMAIL</dataSourceEmail>
      </dataSourceSettings>
      <dataSourceType>12</dataSourceType>
      <reportSuiteID replaceWith="client">RSID</reportSuiteID>
      </DataSource.SetupGeneric>
</genesis>
```

**Parent topic:** [6. Import Bulk Data Tutorial](c_Import_bulk_Data_using_the_Partner_API.md)


text:
SQLite to PostgreSQL
====================

Here are some attempts at timing a transfer of 1MM rows of fake data from a sqlite
database to a postgres database running on `localhost`. I encourage anyone who knows
how to properly write one of these tests to contribute such a script, given it is
sufficiently small (~150 LOC max).

Compute
-------

All of these tests are run on a moderately powered single node:

```
OS: Ubuntu 20.04.3 (Focal Fossa)
Motherboard: PRIME X299-DELUXE
Disk: 256GB SAMSUNG MZNTE256
CPU: Intel(R) Core(TM) i7-7820X CPU @ 3.60GHz
Memory: 64GiB (4 x 16GiB DIMM DDR4 Synchronous 2400 MHz (0.4 ns))
```

Results
-------

Before running commands it's assumed that postgres is already running locally and
that we can switch to the postgres user:

```
sudo su postgres
```

I have both user and password for the `postgres` user set to `postgres` in the
scripts. That usually requires this line:

```
ALTER USER postgres PASSWORD 'postgres';
```

**COPY FROM**

Using pandas, I created a `csv` version of the database for copying, which took a few
seconds, but once that's done the postgres copy is very quick. The following takes
~3-4 seconds:

```
CREATE TABLE IF NOT EXISTS users (
    user_id INT PRIMARY KEY,
    user_name TEXT,
    user_age INT,
    user_address TEXT
);
COPY user_table FROM '/path/to/fakedata.csv' DELIMITER ',' CSV HEADER;
```

The pandas to create the csv:
```python3
import pandas as pd
df = pd.read_sql("users", "sqlite:///fakedata.db", index_col="user_id")
df.to_csv("fakedata.csv")
```

**Python + pandas**

Pandas makes batch processing very easy, so that script will load chunks of rows at a
time, so it's memory efficient and pretty fast.

```
$ python --version
Python 3.9.5
$ python ./python/copy_using_pandas.py
Finished in 26.1 seconds
```

**Julia + LibPQ**

I think that the julia version would require manually chunking the data, so this
version loads all data into memory before writing. This uses a dataframe buffer much
like the pandas version, but is not as time efficient as I had hoped.

```
$ julia --version
julia version 1.6.2
$ julia
julia> ]
(@v1.6) pkg> activate julia/
(julia) pkg> instantiate
(julia) pkg> <BS>
julia> include("julia/copy_data.jl")
BenchmarkTools.Trial: 1 sample with 1 evaluation.
 Single result which took 54.524 s (3.18% GC) to evaluate,
 with a memory estimate of 5.42 GiB, over 107996251 allocations.
```

**Go**

Taking advantage of PostgreSQL support of concurrent writes, we can partition the
original table into chunks (using LIMIT and OFFSET), and have each goroutine handle
copying just that chunk.

Doing it this way lends to a considerable speedup:

```
$ cd golang
$ go run .
Finished in 6.55 seconds
```

Other Languages I'd Like to Try
--------------------------------

I have little experience in the following, but would like to see how they compare.

1. rust
2. C/C++
3. haskell
4. java

Development Environment
---------------

Required installation steps to recreate the tests.

Install the python virtual environment:

```bash
python3.9 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
```

Create the fake sqlite data:
```bash
./create_data.py
```

The julia steps shown above will perform all the environment management you need for it, you just
need [julia 1.6.2](https://julialang.org/downloads)

For `go`, just follow [the installation instructions](https://golang.org/doc/install).

repository: renzmann/postgres-loading

repo_name: renzmann/postgres-loading


text:
---
layout: default
---

# 1997-08-09 - Re: New Thread? / Re: Apology from me to the list and TruthMonger

## Header Data

From<EMAIL_ADDRESS>(Dr.Dimitri Vulis KOTM)

To<EMAIL_ADDRESS>Message Hash: 6d0d04a48f6676ed6335308abb87d641bbe0317b14f34119d1e17b45e62f98b0

Message ID<EMAIL_ADDRESS>Reply To<EMAIL_ADDRESS>UTC Datetime: 1997-08-09 18:26:07 UTC

Raw Date: Sun, 10 Aug 1997 02:26:07 +0800

## Raw message

```
{% raw  %}From<EMAIL_ADDRESS>(Dr.Dimitri Vulis KOTM)
Date: Sun, 10 Aug 1997 02:26:07 +0800
To<EMAIL_ADDRESS>Subject: Re: New Thread? / Re: Apology from me to the list and TruthMonger
In-Reply-To<EMAIL_ADDRESS>Message-ID<EMAIL_ADDRESS>MIME-Version: 1.0
Content-Type: text/plain

<EMAIL_ADDRESS>(Anonymous) writes:

>   Regardless, when I was thirteen, I was approached by a guy
> who stepped out of an alley and offered me $20.00 to let him
> give me a blow-job. I politely declined, and went on my way.

That guy now works for Bell North Research / Northern Telecom / Entrust
and forges thousands of cancels for Usenet articles he didn't post.

---

Dr.Dimitri Vulis KOTM
Brighton Beach Boardwalk BBS, Forest Hills, N.Y.: +1-718-261-2013, 14.4Kbps

{% endraw %}
```

## Thread

+ Return to [August 1997](/archive/1997/08)

+ Return to<EMAIL_ADDRESS>(Dr.Dimitri Vulis KOTM)](/authors/dlv_at_bwalk_dm_com_dr_dimitri_vulis_kotm_)"
+ Return to "[jf_avon@citenet.net](/authors/jf_avon_at_citenet_net)"
+ Return to<EMAIL_ADDRESS>(Anonymous)](/authors/nobody_at_replay_com_anonymous_)"

+ 1997-08-09 (Sat, 9 Aug 1997 22:25:23 +0800) - [New Thread? / Re: Apology from me to the list and TruthMonger](/archive/1997/08/090ee324df72c3e08efacef1d3b112c7b7babae6556a94fa03dcfc2877ee3e4c) -<EMAIL_ADDRESS>(Anonymous)_
  + 1997-08-09 (Sun, 10 Aug 1997 02:26:07 +0800) - Re: New Thread? / Re: Apology from me to the list and TruthMonger -<EMAIL_ADDRESS>(Dr.Dimitri Vulis KOTM)_
  + 1997-08-09 (Sun, 10 Aug 1997 06:38:55 +0800) - [TruthMonger's standards...](/archive/1997/08/7b089e9fd03569fc21706f6d2cba7b14bf083b3d3ad7c840d1e882bea98db2e9) -<EMAIL_ADDRESS>


text:
---
slug: implement-authentication-using-java-sdk
title: AWS Cognito Tutorial For Beginners - How to implement Cognito Authentication flow using Java SDK
author: Cloud Guru
tags: [video, level-300, java, authentication]
---

[This tutorial will show you how to implement the authentication flow of AWS Cognito using Java SDK](https://www.youtube.com/watch?v=IaFbOJWhE50).

We are going to learn how to make an integration with Amazon Cognito using the Amazon Web Services software development kit (AWS SDK) for Java by providing some code samples and documentation. We are going to leverage AWS to integrate authentication and authorization into a Java web application, in addition to using groups in Amazon Cognito user and identity pools to obtain temporary identity and access management (IAM) credentials in the application.

repository: livioso/cognito-wiki

repo_name: livioso/cognito-wiki


text:
---
title: Can R2 value ever be negative?
author: Akshay Adlakha & Akshaykumar Rao
date: 2020-12-15 08:10:00 +0800
categories: [Machine Learning, Python]
tags: [Machine Learning]
math: true
mermaid: true
---

![upload-image](/assets/img/sample/mqdefault.jpg)

## What is R2?

In a regression model, R2 determines the proportion of variance in the dependent variable that can be explained by the independent variables. To know more about R-squared and it's limitations, refer to [this](https://thinkdatascience.github.io/posts/R2andAdjustedR2/) link.

R^2 is given by the below formula:

$$ R^2 = 1 - {SS_{Regression} \over SS_{Total}} $$

or

$$ R^2 = 1 - {\sum (y_i - y_{Prediction})^2 \over \sum (y_i - \bar y)^2} $$

Where,
           \\(y_i\\) = each data point
           \\(y_{Prediction}\\) = Value predicted by the regression model
           \\(\bar y\\) = mean value of y's

## What is the range of values R2 can take?
Most books say that the R-squared value is always between 0 and 1. However, this can't be further from the truth. The ratio of the sum of squared regression error to the sum of squared total error is always positive. Hence, the lowest value this ratio can take is 0 when the sum of the squared regression error is 0. In this case, R2 is 1, which is the maximum value R2 can take.
R2 is zero when the model's prediction is the same as predicting mean. What if the model's predictions are worse than predicting the mean value? In this case, the model's predictions are too far away from the actual value. Therefore, the ratio of sum squared regression error to sum squared total error is greater than 1, making R2 negative.

Consider a situation  when your target variable has values {3,5,7,9,11,13} with a mean of 8, and your  model makes predictions: {5,9,11,13,17,20}, which are worse than predicting the mean.

In such case, the sum sqaured regression error = 137 while the sum squared total error = 70, as shown in the table below:

![upload-image](/assets/img/sample/R^2.JPG)

Then, R-suqared = 1 - (137/70) = -0.9571

## Conclusion

> - R-squared of 1.0 is the best your model can achieve. This means that there is no error in your regression.
> - R-squared of 0 means that your model works exactly as predicting the mean value.
> - Negative R-squared means that your model is performing worse than predicting the mean value.


text:
---
title: Tone
author: Multiple Sources

subject: Reading
category: Multiple Sources
chapter: 1
section: 1.0
tag: Poetry

cover_image: "default.jpg"

---
You have probably heard the expression Tone of Voice. If you tell a friend "I don't like your tone of voice," you are annoyed by the person's manner of speaking. You are reacting to the sound of the spoken word.

In your daily conversations, you make inferences about people's attitudes based on their speech - what they say and how they say it.

Imagine that you are observing the following situation. A customer in a restaurant is dissatisfied with his meal. The steak he ordered is too tough to eat. The way he phrases his complaint and the manner in which he expresses it to the waiter reveal his attitude. How would you describe the tone of each of the remarks?

  * Courteous - "Would you please return the steak to the kitchen? Tell the chef that this cut of beef is a little to tough to eat."
  * Anger - "I refuse to pay for this steak dinner! How do you expect me to eat food that I can't chew? Let me see the restaurant manager. Now!"
  * Sarcastic - "What animal did this steak come from? Only a power saw could cut through this meat!"
  {: .browser-default }

Like tone of voice in speech, tone in writing expresses an attitude. In the study of literature , Tone refers to an author's attitude toward his or her subject. The author's tone affects the way you respond to the subject.

When analyzing a passage for tone, ask yourself these questions:

  * What subject is the author discussing?
  * What is my overall reaction after reading the passage?
  * How does the author feel about the subject?
  * What language or descriptive details reveal the author's attitude?
  {: .browser-default }

### Practice

{% include section_collection.html %}

gha_language: HTML


text:
# Strings

Strings are a series of characters, surrounded by quotes.
Both single and double quotes are supported.

```php
<?php

$where = "Spain";
$what = 'rain';
```

## String variable expansion

In double quoted strings, if a variable is referenced while it is in scope, the value is inserted into the string.

```php
<?php

$answer = 42;
$expanded = "The answer to life, the universe, and everything is $answer";
```

## Character Encoding Support

Historically, string functions in PHP only supported ASCII characters and did not support modern Unicode encodings.
ASCII characters are each 1 byte, wheras Unicode characters may be 1-4 bytes in length.
If needing to manipulate Unicode strings safely, refer to the [multibyte versions][multi-byte-fns] of the historic functions.

```php
<?php

$byte_length = strlen('😃'); // => 4
$string_length = mb_strlen('😃'); // => 1
```

[multi-byte-fns]: https://www.php.net/manual/en/ref.mbstring.php

repository: MichaelBunker/php

repo_name: MichaelBunker/php


text:
yii2-fancybox
=============

fancyBox is a tool that offers a nice and elegant way to add zooming
functionality for images, html content and multi-media on your webpages.  http://fancyapps.com/fancybox/

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

The preferred way to install this extension is through [composer](http://getcomposer.org/download/).

Either run

```
php composer.phar require --prefer-dist newerton/yii2-fancybox "dev-master"
```

or add

```
"newerton/yii2-fancybox": "dev-master"
```

to the require section of your `composer.json` file.

Usage
-----

Once the extension is installed, simply use it in your code by  :

```php
<?php
echo newerton\fancybox\FancyBox::widget([
    'target' => 'a[rel=fancybox]',
    'helpers' => true,
    'mouse' => true,
    'config' => [
        'maxWidth' => '90%',
        'maxHeight' => '90%',
        'playSpeed' => 7000,
        'padding' => 0,
        'fitToView' => false,
        'width' => '70%',
        'height' => '70%',
        'autoSize' => false,
        'closeClick' => false,
        'openEffect' => 'elastic',
        'closeEffect' => 'elastic',
        'prevEffect' => 'elastic',
        'nextEffect' => 'elastic',
        'closeBtn' => false,
        'openOpacity' => true,
        'helpers' => [
            'title' => ['type' => 'float'],
            'buttons' => [],
            'thumbs' => ['width' => 68, 'height' => 50],
            'overlay' => [
                'css' => [
                    'background' => 'rgba(0, 0, 0, 0.8)'
                ]
            ]
        ],
    ]
]);

echo Html::a(Html::img('/folder/thumb.jpg'), '/folder/imagem.jpg', ['rel' => 'fancybox']);
?>
```

Hint: Do not forget to declare the Html class at the top of the file.

```
use yii\helpers\Html;
```


text:
# Site Regression project

The purpose here is to make a POC of how automated non regression test can be performed on a website GUI.

The main idea is to use an browser automation tool (here Selenium) and compare snapshots of a given web page to a previously stored reference.

As Selenium allows multiple device emulation through its WebDriver classes I have decided to test GUI for the following ones:

* Firefox
* Chrome
* iPhone 5 (Chrome Web Driver emulation)
* iPhone 6 Plus (Chrome Web Driver emulation)

Tests are made on the [github](http://www.github.com) web page and are already failing because of some changes in the GUI of Github.

Please not that the project build is failing and that's wanted!

# Project structure

You will find in the source code a proof of concept on image automation which doesn't intend to be deployed to any repository (at least for the moment).
I have pushed a multi project Gradle project containing two subprojects:

* image-tools
* selenium-tests

I'm sure that you will easily understand what is doing what ;)

# Run the project

The project is based on the Selenium RemoteWebDriver tech so to run it you need to have at least two selenium servers running onto your laptop.
Docker might be a good place to look for to launch these two servers:
```bash
docker run -d -p 4444:4444 --name selenium-hub selenium/hub;
for i in $(seq 1 4);
do
    docker run -d --link selenium-hub:hub selenium/node-firefox;
    docker run -d --link selenium-hub:hub selenium/node-chrome;
done
```

Note that the URL should be changed in the Java files
```java
    public abstract class Browser {

        private static final String URL = "http://<IP_ADDRESS>:4444/wd/hub";
        ...
```

repository: ktoublanc/site-regressions

repo_name: ktoublanc/site-regressions


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

### Description

CRLF injection vulnerability in the mod_negotiation module in the Apache HTTP Server 2.2.6 and earlier in the 2.2.x series, 2.0.61 and earlier in the 2.0.x series, and 1.3.39 and earlier in the 1.3.x series allows remote authenticated users to inject arbitrary HTTP headers and conduct HTTP response splitting attacks by uploading a file with a multi-line name containing HTTP header sequences and a file extension, which leads to injection within a (1) "406 Not Acceptable" or (2) "300 Multiple Choices" HTTP response when the extension is omitted in a request for the file.

### POC

#### Reference
- http://securityreason.com/securityalert/3575
- http://www.mindedsecurity.com/MSA01150108.html

#### Github
- https://github.com/ARPSyndicate/cvemon
- https://github.com/DButter/whitehat_public
- https://github.com/Dokukin1/Metasploitable
- https://github.com/Iknowmyname/Nmap-Scans-M2
- https://github.com/Live-Hack-CVE/CVE-2008-0456
- https://github.com/NikulinMS/13-01-hw
- https://github.com/SecureAxom/strike
- https://github.com/Zhivarev/13-01-hw
- https://github.com/xxehacker/strike
- https://github.com/zzzWTF/db-13-01

repository: trickest/cve

repo_name: trickest/cve


text:
# Loki
Extract data in some tweet

It all started here: https://twitter.com/Boris_Gauty/status/1413665547481403392

So this code will extract those data in CSV only.

## Installtion

Clone this repo
```bash
git clone https://github.com/simo97/Loki
```

install requirements
```bash
pip install -r requirements.txt
```

start a venv and launch the program
```bash
python main.py [TWEET_URL_HERE]
```

Example
```bash
python main.py "https://twitter.com/CaroleDanwe/status/1413537284029308930"
```

## Features

- extract data to one shift according to the data we are looking for

## Work In Progress
- Search for quoted tweet for indexing


text:
# PSR-6 Integration tests

To make sure your implementation of PSR-6 is correct you should use this test suite.

### Usage

Install the dev-master version of this library.

```bash
composer require --dev cache/integration-tests:dev-master
```

Create a test that looks like this:
```php
class PoolIntegrationTest extends CachePoolTest
{
    public function createCachePool()
    {
        return new CachePool();
    }
}
```

You could also test your tag implementation:
```php
class TagIntegrationTest extends TaggableCachePoolTest
{
    public function createCachePool()
    {
        return new CachePool();
    }
}
```

repository: fervo/integration-tests

repo_name: fervo/integration-tests


text:
# Find Words That Can Be Formed by Characters

LeetCode #: [1160](https://leetcode.com/problems/find-words-that-can-be-formed-by-characters/)

Difficulty: Easy

Topics: Array, hash table.

## Explanation

This solution makes use of JavaScript [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) objects as hashtable to store the counts of characters.

## Complexity Analysis

Assume `m` is the total number of characters in all the word in `words`, and `n` is the total number of characters in `chars`.

### Time complexity: O(m+n)

In the worst case, the solution will go through all the `m` and `n` characters once.

### Space complexity: O(m+n)

In the worst case, the size of the hash tables would be `m` and `n`.

repository: SandeepKapalawai/leetcode

repo_name: SandeepKapalawai/leetcode


text:
# minimal-Typescript-Node-starter
A minimal template to get started with nodeJs and TypeScript

License: MIT

# Get Started
* clone the repository
* run `npm i`

# Development - Commands
* `npm run serve`       - run local instance of the server
* `npm start`           - run local instance of the server
* `npm run watch`       - watch changes on the code base and restart local instance on changes
* `npm run watch-debug` - same as `npm watch`, but providing debug functionality
* `npm run build`       - build the codebase

`npm run watch-debug` integrates nicely with VS Code.
Activate `Debug > Node: Auto Attach` in VS Code and your debugger automatically attaches to the running instance after you have saved your code changes.

gha_language: Dockerfile


text:
---
layout: default
---

# 1996-02-22 - Re: Internet Privacy Guaranteed ad (POTP Jr.)

## Header Data

From<EMAIL_ADDRESS>(Chris McAuliffe)

To: IPG Sales<EMAIL_ADDRESS>Message Hash: d81ac5e7d76bccd2499033655f58034d5d350cae9c8e0b1a399869b85d516b33

Message ID<EMAIL_ADDRESS>Reply To: _N/A_

UTC Datetime: 1996-02-22 14:52:15 UTC

Raw Date: Thu, 22 Feb 1996 22:52:15 +0800

## Raw message

```
{% raw  %}From<EMAIL_ADDRESS>(Chris McAuliffe)
Date: Thu, 22 Feb 1996 22:52:15 +0800
To: IPG Sales<EMAIL_ADDRESS>Subject: Re: Internet Privacy Guaranteed ad (POTP Jr.)
Message-ID<EMAIL_ADDRESS>MIME-Version: 1.0
Content-Type: text/plain

-----BEGIN PGP SIGNED MESSAGE-----

[To: IPG Sales<EMAIL_ADDRESS>[cc<EMAIL_ADDRESS>[Subject: Re: Internet Privacy Guaranteed ad (POTP Jr.)]

IPG Sales<EMAIL_ADDRESS>blathered:
>that the encrypted ciphertext can be any of the N to the
>256th power possibile clear/plain text messages/files.

That would be 256^N, actually, a somewhat bigger number generally
speaking. I hope your cryptography is better than your combinatorics,
but I (like a lot of others) doubt it.

Why, in your challenge, is your system to be tested by only US citizens?
Why not submit it to the NSA and in 15 days you could get a CJR for
it... then the c'punks in France, Germany and News Zealand could work on
it too, and you will have saved a lot of time.

Chris McAuliffe<EMAIL_ADDRESS>(No, not that one.)

-----BEGIN PGP SIGNATURE-----
Version: 2.6

iQCVAwUBMSvGToHskC9sh/+lAQFHNwQAsVYB9OodDBRqJshya+TyAKFURc4EqmKf
Sj23Y7605XteUAxlPuF+vm3KnXnAV73hWTpQu+x296oO8ubwmM5XybhyLZqN/8Wa
uT4qatkTVIvrGwtbUpYrjqnO+AgdPZvxoRbrf7QZu4O7k8ONF8J9C0DVRtvGS8BU
Y6ABbc5H3GI=
=5PWi
-----END PGP SIGNATURE-----

{% endraw %}
```

## Thread

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

+ Return to<EMAIL_ADDRESS>(Chris McAuliffe)](/authors/cmca_at_alpha_c2_org_chris_mcauliffe_)"

+ 1996-02-22 (Thu, 22 Feb 1996 22:52:15 +0800) - Re: Internet Privacy Guaranteed ad (POTP Jr.) -<EMAIL_ADDRESS>(Chris McAuliffe)_


text:
## Running the example

1. Copy the `debug.keystore` file to `./android/app/` folder.

	```
	$ cp ~/.android/debug.keystore example/android/app/
	```

2. Create `./agora_app_id.json` file with your Agora APP_ID:

    ```json
    {
      "APP_ID": "REPLACE WITH AGORA APP ID"
    }
    ```

3. Install all dependencies.

	```
	$ cd example
	$ npm install
	```

4. Connect your android device and use react-native cli to run the app

	```
	$ react-native run-android
	```

repository: BunchLive/react-native-agora

repo_name: BunchLive/react-native-agora


text:
---
title: The Return of the Boonville Hamfest - March 26, 2022
author: W0MQD
date: '2022-01-07 18:22:00'
tags: hamfest
---

We are excited to announce "The Return of the Boonville Hamfest" which will be held on Saturday, March 26, 2022, with doors opening at 8 AM again at the Cooper County Youth Fairgrounds.

If you would like to purchase a table for your wares or are making plans to attend, please visit and bookmark our 2022 Hamfest page for more information. Additional details will be added as they become available.

We hope to see you there!

branch_name: refs/heads/gh-pages

gha_language: SCSS


text:
---
title: Join us!
layout: default
short: Join
---

Joining the RSE Community is easy. Just sign up to our mailing list to receive notices about events, job postings, opportunities for collaboration and occasional information about our campaign. The list is moderated and you will not be sent any spam!

To join email<EMAIL_ADDRESS>with a blank subject and **`SUBSCRIBE<EMAIL_ADDRESS>in the body, or [click this link](mailto:sympa%40mlist.is.ed.ac.uk?body=SUBSCRIBE%20researchsoftwareengineers%40mlist.is.ed.ac.uk) for a ready made email.

Once you have joined you can make contact with other RSEs - see the [discussion page](http://www.rse.ac.uk/discussion) for details

You can also follow us on [Twitter](http://twitter.com/ResearchSoftEng).

COLUMN_SEPARATOR


text:
# Data Hub Client Example

This is a demonstration of how to retrieve data from Brightspace via the Data Hub APIs.

This example retrieves data for the *Enrollments and Withdrawals* data set. The [Brightspace API reference](http://docs.valence.desire2learn.com/reference.html) will document the Data Export route you can use to discover the set of supported data sets. Additionally, we have published an article on the [Brightspace Developer Community blog](https://community.brightspace.com/s/article/ka1610000000p9gAAA/Getting-Started-with-Data-Hub) to provide a more in-depth walkthrough about this new feature.

Note: this client assumes a valid OAuth 2.0 refresh token has already been obtained, and does not initiate the [OAuth 2.0 authorization flow](https://tools.ietf.org/html/rfc6749#section-4). An article on the [Brightspace Developer Community blog](https://community.brightspace.com/s/article/ka1610000000pYqAAI/How-to-obtain-an-OAuth-2-0-Refresh-Token) is available to provide steps on how to obtain a refresh token.

## Building

This project uses [Maven](https://maven.apache.org/). To build it, run `mvn package` in the parent directory.

## Running

This application requires the following system properties to be set:

**hostUrl**

* The URL to your Brightspace instance
* e.g. `https://myschool.brightspace.com`

**clientId**

* The OAuth 2.0 client ID (available from the Brightspace OAuth 2.0 registration page)

**clientSecret**

* The OAuth 2.0 client secret (available from the Brightspace OAuth 2.0 registration page)

**refreshTokenFile**

* The file used to store a valid OAuth 2.0 refresh token
* When running this for the first time, a valid refresh token needs to already exist in this file
* Ensure the user running the process has read and write access to this file

**outputFolder**

* The folder to save the data set into
* Ensure the user running the process has write access to this folder

### Example

	java -DhostUrl=http://myschool.brightspace.com/ -DclientId=theClientId -DclientSecret=theClientSecret -DoutputFolder=/output -DrefreshTokenFile=refreshToken.txt -jar data-hub-client-example-1.0-SNAPSHOT.jar

repository: Brightspace/data-hub-client-example

gha_language: Java

repo_name: Brightspace/data-hub-client-example


text:
# Yet Another Game of Life

\
\
\
\

## Game

Simply unpause and click the grid to place cells. Follows Conway's game of life
original rules - except theres a small random chance for a cell to become alive
or dead every turn.

## Installation instructions

simply download the file and open the executable suitable for your operating
system.

## Source Code

C++ used to build this is found in the root/src folder, Godot's GDScript
can be found in the godot folder.

more up to date source files can be found here

repository: ShameekConyers/sic-game-of-life

repo_name: ShameekConyers/sic-game-of-life


text:
---
title: "3 Words and More in Running Man Ep. 303(런닝맨 사냥, Running Man Hunting)"
published: 2016-06-23
date: 2016-06-23
---
# 영문

![303-1.png ](/images/303-1.png )

The same word for 영문 is 이유.

Interestingly, this word is used when you don't know the reason. If you know the reason behind the case, then you should not use 영문. So, you should not speak like 그가 여기 온 영문은 나를 보고 싶어서였다(The reason he came here was to see me). 영문 here should be reason because you know the reason.

However, if you don't know the reason like in the examples below, you can use both 영문 and 이유.

도대체 무슨 영문으로 이곳까지 온 것인지 모르겠다.
I don't know why he came here.

왜 그렇게 한 것인지 영문을 좀 알고 싶다.
I want to know why you did it.

# 고자질

![303-2.png ](/images/303-2.png )

When you are reporting someone's wrong, it is called 고자질.

Compared to the similar word, 신고, it has some bad nuance. It is a bit like reporting something you shouldn't or something childish.

그렇게 계속 고자질하면 아무도 너와 친구가 되지 않을 거야.
If you report that again and again, no one will become your friend.

고자질하려고 그랬던 것은 아니었는데…
I didn't want to report it.

# 서울에서 김 서방 찾기

![303-3.png ](/images/303-3.png )

When I was in middle school, I read a book which describes the Korean society without Korean language. Because English is a global language and Koreans are famous for not being good at English, the Korean government decided to use English as the first language of than nation.

In the book, there was an interesting situation. There are too many Mary Kim, David Park in Korea, so it became a big problem. Like this, there are so many 김, 이, 박 in Korea.

서울에서 김 서방 찾기 is the phrase from this situation. As there are so many 김 in Seoul, it's almost impossible to find the Mr. Kim I want. This saying is used to describe to find something or someone almost impossible.

It's usually translated as "finding  a needle in a hay stack."

이거 완전 서울에서 김 서방 찾기 수준인데.
It's almost impossible to find it.

서울에서 김 서방 찾기도 이것보다는 쉽겠다.
I think that it might be easier than to find a needle in a hay stack.

repository: sainthkh/wiseinit-blog

repo_name: sainthkh/wiseinit-blog


text:
---
layout: post
title: "Faster Metagenomic Assembly?"
modified:
categories: articles
excerpt:
tags: ["adina howe", "metagenomic", "assembly"]
image:
  feature:
date: 2014-10-09T15:23:49-05:00
---

Super fast improvement for metagenomic assembly, hope to test this soon!

"It finished assembling a soil metagenomics dataset with 252Gbps in 44.1 hours and 99.6 hours on a single computing node with and without a GPU, respectively."

[Preprint](http://arxiv.org/abs/1409.7208)

[The hype](https://twitter.com/pathogenomenick/status/515390848230760448)

[A very helpful blog from Titus Brown](http://ivory.idyll.org/blog/2014-how-good-is-megahit.html)


text:
# IBM-Project
这是一个maven项目，采用springboot，已经部署服务器，网址为：http://<IP_ADDRESS>/
演示视频链接http://<IP_ADDRESS>:8080/home/demo.wmv

demo：(p:person     m:machine)
m:
Welcome! Please input your question!
p:
Hello
m:
 Good day to you
p:
I want to use Portal, but it has a lot of problems.
m:
Is the general problematic transmission not met in the hardware, or the system version is incorrect, or does not meet the prerequisites?
p:
First consider the minimum requirements of the system.
m:
OK!
Please select the version you plan to use？
Portal9.0
Portal8.5
p:
Portal9.0
m:
  What is your system used?
  Windows
  Linux
  AIX
p:
 Windows
m: (picture)
p:
The system is correct, look at other issues.
m:
Since there are no problems with the system, you should consider the prerequisites.
Successful execution of WebSphere Portal 9.0 requires the following three prerequisites:
  1) Successful installation of WebSphere Application Server 8.55 or WebSphere Application Server 9.
 2) Successful installation of IBM Installation Manager 1.8.5 and future fix packs.
  3) Successfully install one of Java SDK 7, Java SDK 7.1 or Java SDK 8.
p:
I also meet the prerequisities requirements.
m:
Oh, my God, these are all fine. The most likely thing is that the hardware requirements are not met.
The hardware requirements for Portal 9.0 are as follows: 1) Disk space: It is recommended to install a minimum of 8 GB of free disk space
 2) Memory: At minimum load, WebSphere Portal can use 4GB of RAM and a remote database. In a production environment, 8GB is the best starting point for RAM.
3) Processor: X86-64, IBM POWER series processor, System z processor
4) Additional hardware requirements: Minimum 2 CPUs required to install IBM WebSphere Portal and IBM Web Content Manager.
p:
You are right, my problem is solved!

repository: lihuifeifei/IBM-Project

repo_name: lihuifeifei/IBM-Project


text:
# Tenants shocked after landlord installs 'cage' around thermostat in £700-a-month flat

Published at: **2019-11-05T20:17:06+00:00**

Author: **Megan Baynes**

Original: [mirror](https://www.mirror.co.uk/news/uk-news/tenants-shocked-after-landlord-installs-20819267)

Tenants at a flat in London were stunned when their landlord put the thermostat in a cage to stop them adjusting the controls.
Alex Milsom shared a picture of the thermostat on Twitter , where it quickly went viral.
The 21-year-old, who works in publicity, pays £700 month which covers his rent and bills.
Heating is included but is controlled externally by his landlord through a Nest thermostat which has now been locked.
He said: "Hilariously/alarmingly this is a common experience as other people who have replied to my tweet have told me.

          Have you suffered from an outrageous landlord? Email<EMAIL_ADDRESS>

"We had the Nest installed earlier this month, and then sometime between Friday night and Saturday afternoon we found our Nest adopted the motto of MC Hammer - namely 'can't touch this' - and lo-and-behold we had no ability to control the thermostat.
"This also affected our ability to control the hot water - and today and yesterday we found our hot water availability in short-supply."
With the temperature getting increasingly frosty, Mr Milsom said he is unable to heat up extra water in the house, and ended up having to shower at work when the hot water ran out.

He added: "People across London, the UK, and indeed across the world have replied to my tweet to say about their experiences. From landlords who have taken away heating to landlords who have been even worse, it's a really important discussion that I'm glad we had.
"It was also super endearing how everyone has been willing to support me as well - from free legal advice to everything else under the sun!"
Alex took to social media to share the development.
He shared a photo of the locked-up thermostat with the caption: "Welcome to renting in London!
"My landlord has just put our thermostat in a cage."

The post, which has since clocked up more than 34,000 likes online has shocked social media users.
@felixslp wrote: "Is that even legal?"
Danny Tokay Reid added: "Shame on them. This is not cool. Just let people pay their own bills if this bothered about it. #slumlord #rentalnightmare."
And Lara Bailey said: "If it was me, I'd report her (not sure who to tho... maybe the council or someone who deals in housing standards?)
"It's nearly winter! You need to be able to put your heating on! Absolutely ridiculous!"
Polly Neate, chief executive of Shelter, said: "This is yet another example of the raw deal private renters get in England.
"If your home is excessively cold or hot, it can be classed as a hazard under the health and safety rating system for rented homes. It is not acceptable for a landlord to provide an inadequate level of heating.
"And if your landlord is coming into your home without notice, then it could be harassment.
"Shelter's trained advisers are on hand seven days a week to support anyone facing housing problems like this, from poor quality housing to eviction notices. To get advice and support, visit  www.shelter.org.uk/gethelp ."

license: Unlicense

repository: dsadlollioygjmzvcxv/tdc-exported

repo_name: dsadlollioygjmzvcxv/tdc-exported


text:
# Good Day Slack Bot - Azure Functions

Full writeup for this project is here: [https://github.com/githubocto/good-day-bot](https://github.com/githubocto/good-day-bot)

Good Day is a Slack bot that pings users every day and asks how their day was. It depends on these Azure functions for cron job tasks.

## Development

1. `brew tap azure/functions && brew install azure-functions-core-tools@3`

2. Create a `local.settings.json` with the following content:

```jsonc
{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "", // get automatically from VSCode Debug panel
    "FUNCTIONS_WORKER_RUNTIME": "node",
    "GH_API_KEY": "YOUR PAT GOES HERE", // get from good-day-bot account on GitHub
    "PG_CONN_STRING": "", // get from 1 password using table goodday
    "SLACKBOT_API_URL": "https://octo-devex.ngrok.io" or "https://octo-good-day-bot.azurewebsites.net/",
    "AZURE_FUNCTIONS_ID": "", // API Key ID for slack server
    "AZURE_FUNCTIONS_SECRET": "" // API Key secret for slack server
  }
}
```

3. In VSCode go to the Debug panel and click on `Attach to Node Functions` then select the Azure storage account to use for debugging `octogooddaystorage`.

4. `npm install`

5. `npm run watch` and `npm run start` in another tab

## Building / Releasing

Deployment to the production app happens automatically when pushing to main by using a GitHub Action specified in `.github/workflows/good-day.yaml`.

Or use the [Azure Functions](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurefunctions) for dev testing work.

In both cases you also have to set the `env` variables for the Azure app through the app's configuration panel.

## License

[MIT](LICENSE)

repository: githubocto/good-day-azure

repo_name: githubocto/good-day-azure


text:
# ALibrary
ALbirary is a PHP Library which contains collection of predefined functions.

## Functions
* _aboveLimit() - Return values in an array which are greater than the given limit.
* _belowLimit() - Return values in an array which are lower than the given limit.
* _unique() - Returns an array containing only unique values.
* _even() - Returns an array containing only even values.
* _odd() - Returns an array containing only odd values.
* _average() - Returns the average of an value array.
* _area_of_square_rectangle() - Returns the area value of a given square or rectangle.
* _area_of_circle() - Returns the area value of a given circle
* _area_of_triangle() - Returns the area value of a given triangle. This function can be used to derive height and base values by giving respective values such as area/base, area/height

## Usage
Using ALibrary is really really easy. You just need to include the ALibrary.php in your application/file and instantiate an object of the library class. After that you can you start using the ALibrary
functions straight away.

## Examples
Find values which are greater than 30 in the following array. (Including 30)
```
include('ALibrary.php');

$ALibrary = new ALibrary();
$array = array(100, 20, 60, 30, 70, 80, 50, 10, 40, 90);
$cut_off = 30;
$ALibrary = new ALibrary();
$a = $ALibrary->_aboveLimit($array, $cut_off, true);
print_r($a);
//returns Array ( [0] => 100 [1] => 60 [2] => 30 [3] => 70 [4] => 80 [5] => 50 [6] => 40 [7] => 90 )

//If you need to return the value excluding cut off value.
$a = $ALibrary->_aboveLimit($array, $cut_off, false);
//returns Array ( [0] => 100 [1] => 60 [2] => 70 [3] => 80 [4] => 50 [5] => 40 [6] => 90 )

//If you need to sort the array in ascending order ('a' or 'asc' both accepted)
$a = $ALibrary->_aboveLimit($array, $cut_off, true, array('order' => 'a'));
//returns Array ( [0] => 30 [1] => 40 [2] => 50 [3] => 60 [4] => 70 [5] => 80 [6] => 90 [7] => 100 )

//If you need to sort the array in descending order ('d' or 'desc' both accepted)
$a = $ALibrary->_aboveLimit($array, $cut_off, true, array('order' => 'd'));
//returns Array ( [0] => 100 [1] => 90 [2] => 80 [3] => 70 [4] => 60 [5] => 50 [6] => 40 [7] => 30 )
```

Find area of a triangle when height is 3.78 and base is 2.75. Also you need to return the value with 2 decimals.
```
include('ALibrary.php');

$ALibrary = new ALibrary();
$area = $ALibrary->_area_of_triangle(array('height' => '3.73', 'base' => '2.77'), array('decimals' => 2));
//returns 5.17

//If you need to return the value with 1 decimal.
$area = $ALibrary->_area_of_triangle(array('height' => '3.73', 'base' => '2.77'), array('decimals' => 1));
//returns 5.2
```

Stay in touch for more examples and API doc.

Thanks.

repository: anjanasilva/ALibrary

repo_name: anjanasilva/ALibrary


text:
---
layout: post
title: Using GUI on termux
date: 2018-08-18
tags: termux
---

I know many of you want to use GUI on termux, so I write this!

## Native termux
Actually,it's impossible to use GUI in termux's windows. To use GUI, you need to prepare [VNC Viewer](https://play.google.com/store/apps/details?id=com.realvnc.viewer.android) or [XServer XSDL](https://play.google.com/store/apps/details?id=x.org.server), I will use VNC Viewer here.

### Add repository
As we know, there isn't X package in Termux repository. To install X, we need to open X repo.

``` bash
# Enable Repo
pkg in x11-repo
# Update database
pkg up
# Install GUI packages
# I will use tigervnc as the server , i3 as the wm
pkg in tigervnc i3 aterm
```

### Start VNC
```bash
# Defind DISPLAY, better add to .bashrc
export DISPLAY=:1

$ vncserver :1
# Port :1
You will require a password to access your desktops.
# Input your passed here
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
# Useless for most of us.
New 'localhost:1 (u0_a385)' desktop is localhost:1

Creating default startup script /data/data/com.termux/files/home/.vnc/xstartup
Creating default config /data/data/com.termux/files/home/.vnc/config
Starting applications specified in /data/data/com.termux/files/home/.vnc/xstartup
Log file is /data/data/com.termux/files/home/.vnc/localhost:1.log

# If you need to use i3wm, please vim ~/.vnc/xstartup
---  twm &
+++  i3-wm &

# Restart Server
killall Xvnc
vncserver :1
# You may meet XLock problem when restarting
rm -rf $PREFIX/tmp/.X*
```

Now open _VNC Viewer_, click the plus icon. Write `<IP_ADDRESS>:1` in address ,click Create -> Connect -> unset Warn Me everytime -> OK, then input your password, click remember and ok. It's connect now.
![vnc1](/assets/img/vnc1.png)
![vnc2](/assets/img/vnc2.png)

## Non-Native

You must notice that there aren't many GUI applications in extra repository. But we can use proot to run a full linux distro, and use that.

But ,how can we install that ? You can install it with my script _[atilo](https://github.com/YadominJinta/atilo)_,use it as the instruction in README. For example,

``` bash
pkg in curl
curl https://raw.githubusercontent.com/YadominJinta/atilo/master/atilo -o ~/atilo
chmod +x atilo
# Download atilo
./atilo install fedora
# Use it to install fedora
startfedora
# Boot fedora
```

To use GUI , you can do as the followings,(For Fedora and Debian based)

``` bash
# For Fedora
$ startfedora
dnf makecache
dnf install tigervnc-server
dnf groupinstall LXDE
# for Debian
$ startdebian
apt update
apt install --no-install-recommands tigervnc-standalone-server lxde

# Boot Vnc
vncserver :1
# The same as the above

# Fedora
vim ~/.vnc/xstartup
--- exec /etc/X11/xinit/xinitrc
+++ exec startlxde
killall Xvnc
rm -rf /tmp/X1*
vncserver :1

# Debian
vim /etc/X11/Xvnc-session
--- exec /etc/X11/Xsession "$@"
+++ exex startlxde
killall Xtigervnc # Notice that the process name is Xtigervnc, different with Fedora
rm -rf /tmp/.X1*
```

![vnc3](/assets/img/vnc3.png)

![vnc4](/assets/img/vnc4.png)

 That's all ,thank you for reading..


text:
[//000000001]: # (grammar::fa \- Finite automaton operations and usage)
[//000000002]: # (Generated from file 'fa\.man' by tcllib/doctools with format 'markdown')
[//000000003]: # (Copyright © 2004\-2009 Andreas Kupries<EMAIL_ADDRESS>[//000000004]: # (grammar::fa\(n\) 0\.4 tcllib "Finite automaton operations and usage")

 [ Main Table Of Contents | Table Of Contents | Keyword Index | Categories | Modules | Applications ]

# NAME

grammar::fa \- Create and manipulate finite automatons

# Table Of Contents

  - [Table Of Contents](#toc)

  - [Synopsis](#synopsis)

  - [Description](#section1)

  - [API](#section2)

  - [FA METHODS](#section3)

  - [EXAMPLES](#section4)

  - [FINITE AUTOMATONS](#section5)

  - [Bugs, Ideas, Feedback](#section6)

  - [Keywords](#keywords)

  - [Category](#category)

  - [Copyright](#copyright)

# SYNOPSIS

package require Tcl 8\.4
package require snit 1\.3
package require struct::list
package require struct::set
package require grammar::fa::op ?0\.2?
package require grammar::fa ?0\.4?

[__::grammar::fa__ *faName* ?__=__|__:=__|__<\-\-__|__as__|__deserialize__ *src*|__fromRegex__ *re* ?*over*??](#1)
[__faName__ *option* ?*arg arg \.\.\.*?](#2)
[*faName* __destroy__](#3)
[*faName* __clear__](#4)
[*faName* __=__ *srcFA*](#5)
[*faName* __\-\->__ *dstFA*](#6)
[*faName* __serialize__](#7)
[*faName* __deserialize__ *serialization*](#8)
[*faName* __states__](#9)
[*faName* __state__ __add__ *s1* ?*s2* \.\.\.?](#10)
[*faName* __state__ __delete__ *s1* ?*s2* \.\.\.?](#11)
[*faName* __state__ __exists__ *s*](#12)
[*faName* __state__ __rename__ *s* *snew*](#13)
[*faName* __startstates__](#14)
[*faName* __start__ __add__ *s1* ?*s2* \.\.\.?](#15)
[*faName* __start__ __remove__ *s1* ?*s2* \.\.\.?](#16)
[*faName* __start?__ *s*](#17)
[*faName* __start?set__ *stateset*](#18)
[*faName* __finalstates__](#19)
[*faName* __final__ __add__ *s1* ?*s2* \.\.\.?](#20)
[*faName* __final__ __remove__ *s1* ?*s2* \.\.\.?](#21)
[*faName* __final?__ *s*](#22)
[*faName* __final?set__ *stateset*](#23)
[*faName* __symbols__](#24)
[*faName* __symbols@__ *s* ?*d*?](#25)
[*faName* __symbols@set__ *stateset*](#26)
[*faName* __symbol__ __add__ *sym1* ?*sym2* \.\.\.?](#27)
[*faName* __symbol__ __delete__ *sym1* ?*sym2* \.\.\.?](#28)
[*faName* __symbol__ __rename__ *sym* *newsym*](#29)
[*faName* __symbol__ __exists__ *sym*](#30)
[*faName* __next__ *s* *sym* ?__\-\->__ *next*?](#31)
[*faName* __\!next__ *s* *sym* ?__\-\->__ *next*?](#32)
[*faName* __nextset__ *stateset* *sym*](#33)
[*faName* __is__ __deterministic__](#34)
[*faName* __is__ __complete__](#35)
[*faName* __is__ __useful__](#36)
[*faName* __is__ __epsilon\-free__](#37)
[*faName* __reachable\_states__](#38)
[*faName* __unreachable\_states__](#39)
[*faName* __reachable__ *s*](#40)
[*faName* __useful\_states__](#41)
[*faName* __unuseful\_states__](#42)
[*faName* __useful__ *s*](#43)
[*faName* __epsilon\_closure__ *s*](#44)
[*faName* __reverse__](#45)
[*faName* __complete__](#46)
[*faName* __remove\_eps__](#47)
[*faName* __trim__ ?*what*?](#48)
[*faName* __determinize__ ?*mapvar*?](#49)
[*faName* __minimize__ ?*mapvar*?](#50)
[*faName* __complement__](#51)
[*faName* __kleene__](#52)
[*faName* __optional__](#53)
[*faName* __union__ *fa* ?*mapvar*?](#54)
[*faName* __intersect__ *fa* ?*mapvar*?](#55)
[*faName* __difference__ *fa* ?*mapvar*?](#56)
[*faName* __concatenate__ *fa* ?*mapvar*?](#57)
[*faName* __fromRegex__ *regex* ?*over*?](#58)

# DESCRIPTION

This package provides a container class for *finite automatons* \(Short: FA\)\.
It allows the incremental definition of the automaton, its manipulation and
querying of the definition\. While the package provides complex operations on the
automaton \(via package __[grammar::fa::op](faop\.md)__\), it does not have
the ability to execute a definition for a stream of symbols\. Use the packages
__[grammar::fa::dacceptor](dacceptor\.md)__ and
__[grammar::fa::dexec](dexec\.md)__ for that\. Another package related to
this is __grammar::fa::compiler__\. It turns a FA into an executor class
which has the definition of the FA hardwired into it\. The output of this package
is configurable to suit a large number of different implementation languages and
paradigms\.

For more information about what a finite automaton is see section [FINITE
AUTOMATONS](#section5)\.

# API

The package exports the API described here\.

  - __::grammar::fa__ *faName* ?__=__|__:=__|__<\-\-__|__as__|__deserialize__ *src*|__fromRegex__ *re* ?*over*??

    Creates a new finite automaton with an associated global Tcl command whose
    name is *faName*\. This command may be used to invoke various operations on
    the automaton\. It has the following general form:

      * __faName__ *option* ?*arg arg \.\.\.*?

        *Option* and the *arg*s determine the exact behavior of the command\.
        See section [FA METHODS](#section3) for more explanations\. The new
        automaton will be empty if no *src* is specified\. Otherwise it will
        contain a copy of the definition contained in the *src*\. The *src*
        has to be a FA object reference for all operators except
        __deserialize__ and __fromRegex__\. The __deserialize__
        operator requires *src* to be the serialization of a FA instead, and
        __fromRegex__ takes a regular expression in the form a of a syntax
        tree\. See __::grammar::fa::op::fromRegex__ for more detail on that\.

# FA METHODS

All automatons provide the following methods for their manipulation:

  - *faName* __destroy__

    Destroys the automaton, including its storage space and associated command\.

  - *faName* __clear__

    Clears out the definition of the automaton contained in *faName*, but does
    *not* destroy the object\.

  - *faName* __=__ *srcFA*

    Assigns the contents of the automaton contained in *srcFA* to *faName*,
    overwriting any existing definition\. This is the assignment operator for
    automatons\. It copies the automaton contained in the FA object *srcFA*
    over the automaton definition in *faName*\. The old contents of *faName*
    are deleted by this operation\.

    This operation is in effect equivalent to

    > *faName* __deserialize__ \[*srcFA* __serialize__\]

  - *faName* __\-\->__ *dstFA*

    This is the reverse assignment operator for automatons\. It copies the
    automation contained in the object *faName* over the automaton definition
    in the object *dstFA*\. The old contents of *dstFA* are deleted by this
    operation\.

    This operation is in effect equivalent to

    > *dstFA* __deserialize__ \[*faName* __serialize__\]

  - *faName* __serialize__

    This method serializes the automaton stored in *faName*\. In other words it
    returns a tcl *value* completely describing that automaton\. This allows,
    for example, the transfer of automatons over arbitrary channels,
    persistence, etc\. This method is also the basis for both the copy
    constructor and the assignment operator\.

    The result of this method has to be semantically identical over all
    implementations of the __grammar::fa__ interface\. This is what will
    enable us to copy automatons between different implementations of the same
    interface\.

    The result is a list of three elements with the following structure:

      1. The constant string __grammar::fa__\.

      1. A list containing the names of all known input symbols\. The order of
         elements in this list is not relevant\.

      1. The last item in the list is a dictionary, however the order of the
         keys is important as well\. The keys are the states of the serialized
         FA, and their order is the order in which to create the states when
         deserializing\. This is relevant to preserve the order relationship
         between states\.

         The value of each dictionary entry is a list of three elements
         describing the state in more detail\.

           1) A boolean flag\. If its value is __true__ then the state is a
              start state, otherwise it is not\.

           1) A boolean flag\. If its value is __true__ then the state is a
              final state, otherwise it is not\.

           1) The last element is a dictionary describing the transitions for
              the state\. The keys are symbols \(or the empty string\), and the
              values are sets of successor states\.

    Assuming the following FA \(which describes the life of a truck driver in a
    very simple way :\)

        Drive -- yellow --> Brake -- red --> (Stop) -- red/yellow --> Attention -- green --> Drive
        (...) is the start state.

    a possible serialization is

        grammar::fa \
        {yellow red green red/yellow} \
        {Drive     {0 0 {yellow     Brake}} \
         Brake     {0 0 {red        Stop}} \
         Stop      {1 0 {red/yellow Attention}} \
         Attention {0 0 {green      Drive}}}

    A possible one, because I did not care about creation order here

  - *faName* __deserialize__ *serialization*

    This is the complement to __serialize__\. It replaces the automaton
    definition in *faName* with the automaton described by the
    *serialization* value\. The old contents of *faName* are deleted by this
    operation\.

  - *faName* __states__

    Returns the set of all states known to *faName*\.

  - *faName* __state__ __add__ *s1* ?*s2* \.\.\.?

    Adds the states *s1*, *s2*, et cetera to the FA definition in
    *faName*\. The operation will fail any of the new states is already
    declared\.

  - *faName* __state__ __delete__ *s1* ?*s2* \.\.\.?

    Deletes the state *s1*, *s2*, et cetera, and all associated information
    from the FA definition in *faName*\. The latter means that the information
    about in\- or outbound transitions is deleted as well\. If the deleted state
    was a start or final state then this information is invalidated as well\. The
    operation will fail if the state *s* is not known to the FA\.

  - *faName* __state__ __exists__ *s*

    A predicate\. It tests whether the state *s* is known to the FA in
    *faName*\. The result is a boolean value\. It will be set to __true__ if
    the state *s* is known, and __false__ otherwise\.

  - *faName* __state__ __rename__ *s* *snew*

    Renames the state *s* to *snew*\. Fails if *s* is not a known state\.
    Also fails if *snew* is already known as a state\.

  - *faName* __startstates__

    Returns the set of states which are marked as *start* states, also known
    as *initial* states\. See [FINITE AUTOMATONS](#section5) for
    explanations what this means\.

  - *faName* __start__ __add__ *s1* ?*s2* \.\.\.?

    Mark the states *s1*, *s2*, et cetera in the FA *faName* as *start*
    \(aka *initial*\)\.

  - *faName* __start__ __remove__ *s1* ?*s2* \.\.\.?

    Mark the states *s1*, *s2*, et cetera in the FA *faName* as *not
    start* \(aka *not accepting*\)\.

  - *faName* __start?__ *s*

    A predicate\. It tests if the state *s* in the FA *faName* is *start*
    or not\. The result is a boolean value\. It will be set to __true__ if the
    state *s* is *start*, and __false__ otherwise\.

  - *faName* __start?set__ *stateset*

    A predicate\. It tests if the set of states *stateset* contains at least
    one start state\. They operation will fail if the set contains an element
    which is not a known state\. The result is a boolean value\. It will be set to
    __true__ if a start state is present in *stateset*, and __false__
    otherwise\.

  - *faName* __finalstates__

    Returns the set of states which are marked as
    *[final](\.\./\.\./\.\./\.\./index\.md\#final)* states, also known as
    *accepting* states\. See [FINITE AUTOMATONS](#section5) for
    explanations what this means\.

  - *faName* __final__ __add__ *s1* ?*s2* \.\.\.?

    Mark the states *s1*, *s2*, et cetera in the FA *faName* as
    *[final](\.\./\.\./\.\./\.\./index\.md\#final)* \(aka *accepting*\)\.

  - *faName* __final__ __remove__ *s1* ?*s2* \.\.\.?

    Mark the states *s1*, *s2*, et cetera in the FA *faName* as *not
    final* \(aka *not accepting*\)\.

  - *faName* __final?__ *s*

    A predicate\. It tests if the state *s* in the FA *faName* is
    *[final](\.\./\.\./\.\./\.\./index\.md\#final)* or not\. The result is a boolean
    value\. It will be set to __true__ if the state *s* is
    *[final](\.\./\.\./\.\./\.\./index\.md\#final)*, and __false__ otherwise\.

  - *faName* __final?set__ *stateset*

    A predicate\. It tests if the set of states *stateset* contains at least
    one final state\. They operation will fail if the set contains an element
    which is not a known state\. The result is a boolean value\. It will be set to
    __true__ if a final state is present in *stateset*, and __false__
    otherwise\.

  - *faName* __symbols__

    Returns the set of all symbols known to the FA *faName*\.

  - *faName* __symbols@__ *s* ?*d*?

    Returns the set of all symbols for which the state *s* has transitions\. If
    the empty symbol is present then *s* has epsilon transitions\. If two
    states are specified the result is the set of symbols which have transitions
    from *s* to *t*\. This set may be empty if there are no transitions
    between the two specified states\.

  - *faName* __symbols@set__ *stateset*

    Returns the set of all symbols for which at least one state in the set of
    states *stateset* has transitions\. In other words, the union of
    \[*faName* __symbols@__ __s__\] for all states __s__ in
    *stateset*\. If the empty symbol is present then at least one state
    contained in *stateset* has epsilon transitions\.

  - *faName* __symbol__ __add__ *sym1* ?*sym2* \.\.\.?

    Adds the symbols *sym1*, *sym2*, et cetera to the FA definition in
    *faName*\. The operation will fail any of the symbols is already declared\.
    The empty string is not allowed as a value for the symbols\.

  - *faName* __symbol__ __delete__ *sym1* ?*sym2* \.\.\.?

    Deletes the symbols *sym1*, *sym2* et cetera, and all associated
    information from the FA definition in *faName*\. The latter means that all
    transitions using the symbols are deleted as well\. The operation will fail
    if any of the symbols is not known to the FA\.

  - *faName* __symbol__ __rename__ *sym* *newsym*

    Renames the symbol *sym* to *newsym*\. Fails if *sym* is not a known
    symbol\. Also fails if *newsym* is already known as a symbol\.

  - *faName* __symbol__ __exists__ *sym*

    A predicate\. It tests whether the symbol *sym* is known to the FA in
    *faName*\. The result is a boolean value\. It will be set to __true__ if
    the symbol *sym* is known, and __false__ otherwise\.

  - *faName* __next__ *s* *sym* ?__\-\->__ *next*?

    Define or query transition information\.

    If *next* is specified, then the method will add a transition from the
    state *s* to the *successor* state *next* labeled with the symbol
    *sym* to the FA contained in *faName*\. The operation will fail if *s*,
    or *next* are not known states, or if *sym* is not a known symbol\. An
    exception to the latter is that *sym* is allowed to be the empty string\.
    In that case the new transition is an *epsilon transition* which will not
    consume input when traversed\. The operation will also fail if the
    combination of \(*s*, *sym*, and *next*\) is already present in the FA\.

    If *next* was not specified, then the method will return the set of states
    which can be reached from *s* through a single transition labeled with
    symbol *sym*\.

  - *faName* __\!next__ *s* *sym* ?__\-\->__ *next*?

    Remove one or more transitions from the Fa in *faName*\.

    If *next* was specified then the single transition from the state *s* to
    the state *next* labeled with the symbol *sym* is removed from the FA\.
    Otherwise *all* transitions originating in state *s* and labeled with
    the symbol *sym* will be removed\.

    The operation will fail if *s* and/or *next* are not known as states\. It
    will also fail if a non\-empty *sym* is not known as symbol\. The empty
    string is acceptable, and allows the removal of epsilon transitions\.

  - *faName* __nextset__ *stateset* *sym*

    Returns the set of states which can be reached by a single transition
    originating in a state in the set *stateset* and labeled with the symbol
    *sym*\.

    In other words, this is the union of \[*faName* next __s__ *symbol*\]
    for all states __s__ in *stateset*\.

  - *faName* __is__ __deterministic__

    A predicate\. It tests whether the FA in *faName* is a deterministic FA or
    not\. The result is a boolean value\. It will be set to __true__ if the FA
    is deterministic, and __false__ otherwise\.

  - *faName* __is__ __complete__

    A predicate\. It tests whether the FA in *faName* is a complete FA or not\.
    A FA is complete if it has at least one transition per state and symbol\.
    This also means that a FA without symbols, or states is also complete\. The
    result is a boolean value\. It will be set to __true__ if the FA is
    deterministic, and __false__ otherwise\.

    Note: When a FA has epsilon\-transitions transitions over a symbol for a
    state S can be indirect, i\.e\. not attached directly to S, but to a state in
    the epsilon\-closure of S\. The symbols for such indirect transitions count
    when computing completeness\.

  - *faName* __is__ __useful__

    A predicate\. It tests whether the FA in *faName* is an useful FA or not\. A
    FA is useful if all states are *reachable* and *useful*\. The result is a
    boolean value\. It will be set to __true__ if the FA is deterministic,
    and __false__ otherwise\.

  - *faName* __is__ __epsilon\-free__

    A predicate\. It tests whether the FA in *faName* is an epsilon\-free FA or
    not\. A FA is epsilon\-free if it has no epsilon transitions\. This definition
    means that all deterministic FAs are epsilon\-free as well, and
    epsilon\-freeness is a necessary pre\-condition for deterministic'ness\. The
    result is a boolean value\. It will be set to __true__ if the FA is
    deterministic, and __false__ otherwise\.

  - *faName* __reachable\_states__

    Returns the set of states which are reachable from a start state by one or
    more transitions\.

  - *faName* __unreachable\_states__

    Returns the set of states which are not reachable from any start state by
    any number of transitions\. This is

        [faName states] - [faName reachable_states]

  - *faName* __reachable__ *s*

    A predicate\. It tests whether the state *s* in the FA *faName* can be
    reached from a start state by one or more transitions\. The result is a
    boolean value\. It will be set to __true__ if the state can be reached,
    and __false__ otherwise\.

  - *faName* __useful\_states__

    Returns the set of states which are able to reach a final state by one or
    more transitions\.

  - *faName* __unuseful\_states__

    Returns the set of states which are not able to reach a final state by any
    number of transitions\. This is

        [faName states] - [faName useful_states]

  - *faName* __useful__ *s*

    A predicate\. It tests whether the state *s* in the FA *faName* is able
    to reach a final state by one or more transitions\. The result is a boolean
    value\. It will be set to __true__ if the state is useful, and
    __false__ otherwise\.

  - *faName* __epsilon\_closure__ *s*

    Returns the set of states which are reachable from the state *s* in the FA
    *faName* by one or more epsilon transitions, i\.e transitions over the
    empty symbol, transitions which do not consume input\. This is called the
    *epsilon closure* of *s*\.

  - *faName* __reverse__

  - *faName* __complete__

  - *faName* __remove\_eps__

  - *faName* __trim__ ?*what*?

  - *faName* __determinize__ ?*mapvar*?

  - *faName* __minimize__ ?*mapvar*?

  - *faName* __complement__

  - *faName* __kleene__

  - *faName* __optional__

  - *faName* __union__ *fa* ?*mapvar*?

  - *faName* __intersect__ *fa* ?*mapvar*?

  - *faName* __difference__ *fa* ?*mapvar*?

  - *faName* __concatenate__ *fa* ?*mapvar*?

  - *faName* __fromRegex__ *regex* ?*over*?

    These methods provide more complex operations on the FA\. Please see the
    same\-named commands in the package __[grammar::fa::op](faop\.md)__
    for descriptions of what they do\.

# EXAMPLES

# FINITE AUTOMATONS

For the mathematically inclined, a FA is a 5\-tuple \(S,Sy,St,Fi,T\) where

  - S is a set of *states*,

  - Sy a set of *input symbols*,

  - St is a subset of S, the set of *start* states, also known as *initial*
    states\.

  - Fi is a subset of S, the set of *[final](\.\./\.\./\.\./\.\./index\.md\#final)*
    states, also known as *accepting*\.

  - T is a function from S x \(Sy \+ epsilon\) to \{S\}, the *transition function*\.
    Here __epsilon__ denotes the empty input symbol and is distinct from all
    symbols in Sy; and \{S\} is the set of subsets of S\. In other words, T maps a
    combination of State and Input \(which can be empty\) to a set of *successor
    states*\.

In computer theory a FA is most often shown as a graph where the nodes represent
the states, and the edges between the nodes encode the transition function: For
all n in S' = T \(s, sy\) we have one edge between the nodes representing s and n
resp\., labeled with sy\. The start and accepting states are encoded through
distinct visual markers, i\.e\. they are attributes of the nodes\.

FA's are used to process streams of symbols over Sy\.

A specific FA is said to *accept* a finite stream sy\_1 sy\_2 \.\.\. sy\_n if there
is a path in the graph of the FA beginning at a state in St and ending at a
state in Fi whose edges have the labels sy\_1, sy\_2, etc\. to sy\_n\. The set of all
strings accepted by the FA is the *language* of the FA\. One important
equivalence is that the set of languages which can be accepted by an FA is the
set of *[regular languages](\.\./\.\./\.\./\.\./index\.md\#regular\_languages)*\.

Another important concept is that of deterministic FAs\. A FA is said to be
*deterministic* if for each string of input symbols there is exactly one path
in the graph of the FA beginning at the start state and whose edges are labeled
with the symbols in the string\. While it might seem that non\-deterministic FAs
to have more power of recognition, this is not so\. For each non\-deterministic FA
we can construct a deterministic FA which accepts the same language \(\-\->
Thompson's subset construction\)\.

While one of the premier applications of FAs is in
*[parsing](\.\./\.\./\.\./\.\./index\.md\#parsing)*, especially in the
*[lexer](\.\./\.\./\.\./\.\./index\.md\#lexer)* stage \(where symbols == characters\),
this is not the only possibility by far\.

Quite a lot of processes can be modeled as a FA, albeit with a possibly large
set of states\. For these the notion of accepting states is often less or not
relevant at all\. What is needed instead is the ability to act to state changes
in the FA, i\.e\. to generate some output in response to the input\. This
transforms a FA into a *finite transducer*, which has an additional set OSy of
*output symbols* and also an additional *output function* O which maps from
"S x \(Sy \+ epsilon\)" to "\(Osy \+ epsilon\)", i\.e a combination of state and input,
possibly empty to an output symbol, or nothing\.

For the graph representation this means that edges are additional labeled with
the output symbol to write when this edge is traversed while matching input\.
Note that for an application "writing an output symbol" can also be "executing
some code"\.

Transducers are not handled by this package\. They will get their own package in
the future\.

# Bugs, Ideas, Feedback

This document, and the package it describes, will undoubtedly contain bugs and
other problems\. Please report such in the category *grammar\_fa* of the
[Tcllib Trackers](http://core\.tcl\.tk/tcllib/reportlist)\. Please also report
any ideas for enhancements you may have for either package and/or documentation\.

When proposing code changes, please provide *unified diffs*, i\.e the output of
__diff \-u__\.

Note further that *attachments* are strongly preferred over inlined patches\.
Attachments can be made by going to the __Edit__ form of the ticket
immediately after its creation, and then using the left\-most button in the
secondary navigation bar\.

# KEYWORDS

[automaton](\.\./\.\./\.\./\.\./index\.md\#automaton), [finite
automaton](\.\./\.\./\.\./\.\./index\.md\#finite\_automaton),
[grammar](\.\./\.\./\.\./\.\./index\.md\#grammar),
[parsing](\.\./\.\./\.\./\.\./index\.md\#parsing), [regular
expression](\.\./\.\./\.\./\.\./index\.md\#regular\_expression), [regular
grammar](\.\./\.\./\.\./\.\./index\.md\#regular\_grammar), [regular
languages](\.\./\.\./\.\./\.\./index\.md\#regular\_languages),
[state](\.\./\.\./\.\./\.\./index\.md\#state),
[transducer](\.\./\.\./\.\./\.\./index\.md\#transducer)

# CATEGORY

Grammars and finite automata

# COPYRIGHT

Copyright © 2004\-2009 Andreas Kupries<EMAIL_ADDRESS>

repository: markemer/macports-base

gha_language: Tcl

repo_name: markemer/macports-base


text:
---
layout: sidebar-right
title: National Libraries Day for children in 2016
date: 2016-02-02 09:27:39+00:00
author: jo-dixon
category: childrens-ya-books
excerpt: Stories about libraries to celebrate National Libraries Day on 6 February.
breadcrumb: childrens-ya-books
---
![A library book for Bear by Bonny Becker](/images/featured/featured-a-library-book-for-bear.jpg)

## Picture books

### [The Snatchabook by Helen and Thomas Doherty](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/16076680?QRY=CTIBIB%3C%20IRN(26581592)&QRYTEXT=The%20Snatchabook)

[![The Snatchabook by Helen and Thomas Doherty](/images/article/the-snatchabook.jpg)](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/16076680?QRY=CTIBIB%3C%20IRN(26581592)&QRYTEXT=The%20Snatchabook)

Eliza, a young rabbit, discovers the funny little creature who has been stealing her books. In a remarkable act of generosity, she offers to read him a nightly bedtime story so he can forsake his life of crime whilst still enjoying books. Now if there had been a public library in Eliza’s wood, the Snatchabook could have joined, borrowed all the books he could read for free and gone along to storytimes and Tot Rock too.

### [A library book for Bear by Bonny Becker](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/16077090?QRY=CTIBIB%3C%20IRN(39946995)&QRYTEXT=A%20library%20book%20for%20Bear)

[![A library book for Bear by Bonny Becker](/images/article/a-library-book-for-bear.jpg)](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/16077090?QRY=CTIBIB%3C%20IRN(39946995)&QRYTEXT=A%20library%20book%20for%20Bear)

Bear has 7 books already, so why does he need to go the library? When he gets there (cajoled by his friend Mouse) he overhears a story time and is seduced. Bonny Becker’s other picture books about Bear and Mouse are well worth hunting out if you haven’t come across them before. We have them all because we are a library, and you may borrow them for free, just like Bear. This paperback edition came out in November 2015.

### [Wolves by Emily Gravett](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/16078620?QRY=CTIBIB%3C%20IRN(68248)&QRYTEXT=Wolves)

[![Wolves by Emily Gravett](/images/article/wolves.jpg)](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/16077090?QRY=CTIBIB%3C%20IRN(39946995)&QRYTEXT=A%20library%20book%20for%20Bear)

Now we were very pleased to see Emily Gravett’s masterpiece about the book loving rabbit reissued last year for its 10th anniversary. However, if you are of a squeamish disposition, you may not be as pleased as we were, and may not want to find out what happens to the poor little rabbit when the wolves in his library book come alive.

### [Sarah and Duck at the library by Sarah Gomes Harris](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/16079349?QRY=CTIBIB%3C%20IRN(54089058)&QRYTEXT=Sarah%20%26%20Duck%20at%20the%20library)

[![Sarah and Duck at the library by Sarah Gomes Harris](/images/article/sarah-and-duck-at-the-library.jpg)](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/16077090?QRY=CTIBIB%3C%20IRN(39946995)&QRYTEXT=A%20library%20book%20for%20Bear)

We really wish the librarian in this story didn’t say “Shhhhh!” (none of the staff in Suffolk Libraries would ever say such a thing) but we know all those Sarah and Duck enthusiasts will not unable to resist borrowing this cute little book, so we bought lots of copies.

### [How the library (not the prince) saved Rapunzel by Wendy Meddour](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/16080748?QRY=CTIBIB%3C%20IRN(28071714)&QRYTEXT=How%20the%20library%20(not%20the%20prince)%20saved%20Rapunzel)

[![How the library (not the prince) saved Rapunzel by Wendy Meddour](/images/article/how-the-library-not-the-prince-saved-rapunzel.jpg)](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/16080748?QRY=CTIBIB%3C%20IRN(28071714)&QRYTEXT=How%20the%20library%20(not%20the%20prince)%20saved%20Rapunzel)

Now published in paperback, this rather bored Rapunzel is still looking out the window of her 16th floor flat. She refuses to cheer up or marry, but when a job offer arrives from the local library, her mood lightens and her life becomes busy and interesting.

### [I want a bedtime story! by Tony Ross](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/16087311?QRY=CTIBIB%3C%20IRN(56736038)&QRYTEXT=I%20want%20a%20bedtime%20story!)

[![I want a bedtime story! by Tony Ross](/images/article/i-want-a-bedtime-story.jpg)](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/16087311?QRY=CTIBIB%3C%20IRN(56736038)&QRYTEXT=I%20want%20a%20bedtime%20story!)

Good old Little Princess, back in another book to claim her rights.

## Beginner reads

### [Noisy books by Paula Harrison](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/16132795?QRY=CTIBIB%3C%20IRN(736793)&QRYTEXT=Noisy%20books)

[![Noisy books by Paula Harrison](/images/article/noisy-books.jpg)](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/16132795?QRY=CTIBIB%3C%20IRN(736793)&QRYTEXT=Noisy%20books)

There are some noisy creatures inside library books, such as dinosaurs that roar and headless ghosts that howl “WHOO!”

## Junior novels

### [I believe in unicorns by Michael Morpurgo](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/16134669?QRY=CTIBIB%3C%20IRN(883516)&QRYTEXT=I%20believe%20in%20unicorns)

[![I believe in unicorns by Michael Morpurgo](/images/article/i-believe-in-unicorns.jpg)](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/16134669?QRY=CTIBIB%3C%20IRN(883516)&QRYTEXT=I%20believe%20in%20unicorns)

Originally published in 2005 and reissued in 2015, this is a powerful story about a boy who hates school, being drawn into a magical world when he listens to story at the local library. It’s a wonderful book, quite short at only 112 pages, but it packs quite a punch. The exquisite illustrations are by Gary Blythe.

## Picture books for older readers

### [Willy’s stories by Anthony Browne](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/16137751?QRY=CTIBIB%3C%20IRN(39946993)&QRYTEXT=Willy%27s%20stories)

[![Willy’s stories by Anthony Browne](/images/article/willys-stories.jpg)](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/16137751?QRY=CTIBIB%3C%20IRN(39946993)&QRYTEXT=Willy%27s%20stories)

Get drawn into a story alongside Anthony Browne’s most famous character, Willy the gorilla. Anthony Browne is such a skilled craftsman; his works are always beautifully illustrated. Willy walks into another story each time he visits the library and opens a new book.

### [A big surprise for Little Card by Charise Harper and illustrated by Anna Raff](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/20534609?QRY=CTIBIB%3C%20IRN(49012000)&QRYTEXT=A%20Big%20surprise%20for%20Little%20Card)

[![A big surprise for Little Card by Charise Harper and illustrated by Anna Raff](/images/article/a-big-surprise-for-little-card.jpg)](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/20534609?QRY=CTIBIB%3C%20IRN(49012000)&QRYTEXT=A%20Big%20surprise%20for%20Little%20Card)

Follows the story of a little library card.

### [The last book before bedtime by Nicola O’Byrne](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/16139968?QRY=CTIBIB%3C%20IRN(57310744)&QRYTEXT=The%20last%20book%20before%20bedtime)

[![The last book before bedtime by Nicola O’Byrne](/images/article/the-last-book-before-bedtime.jpg)](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/16139968?QRY=CTIBIB%3C%20IRN(57310744)&QRYTEXT=The%20last%20book%20before%20bedtime)

Lots of fairytale characters squabble over who should star in the last book before bedtime. It’s very funny, beautifully illustrated and has a spoken version available from scanning a QR code.

## YA novels

### [Ink and bone by Rachel Caine](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/16143975?QRY=CTIBIB%3C%20IRN(51021052)&QRYTEXT=Ink%20and%20bone)

[![Ink and bone by Rachel Caine](/images/article/ink-and-bone.jpg)](https://suffolk.spydus.co.uk/cgi-bin/spydus.exe/ENQ/OPAC/BIBENQ/16143975?QRY=CTIBIB%3C%20IRN(51021052)&QRYTEXT=Ink%20and%20bone)

First in a new series by Rachel Caine, The Great Library series remasters history to create an alternative world where the Great Library of Alexandria was not destroyed by fire, but has become a powerful state in its own right.

repository: suffolklibraries/sljekyll

repo_name: suffolklibraries/sljekyll


text:
# Getting Started
To download pyTigerGraph, simply run:
```pip install pyTigerGraph```
Once the package installs, you can import it and instantiate a connection to your database:
```py
import pyTigerGraph as tg

conn = tg.TigerGraphConnection(host="<hostname>", graphname="<graph_name>", username="<username>", password="<password>", apiToken="<api_token>")
```
If your database is not using the standard ports (or they are mapped), you can use the following arguments to specify those:
- restppPort (default 9000): [REST++ API port](https://docs.tigergraph.com/dev/restpp-api/restpp-requests)
- gsPort (default: 14240): [GraphStudio port](https://docs.tigergraph.com/ui/graphstudio/overview#TigerGraphGraphStudioUIGuide-GraphStudioOn-Premises)

For example, in case of using a local virtual machine with the ports mapped:
```py
conn = tg.TigerGraphConnection(host="localhost", restppPort=25900, gsPort=25240, graphname="MyGraph", username="tigergraph", password="tigergraph", apiToken="2aa016d747ede9gg6da3drslm98srfoj")
```

# GSQL 101 With pyTigerGraph

Checkout [this](https://github.com/parkererickson/pyTigerGraph/blob/master/examples/GSQL101%20-%20PyTigerGraph.ipynb) example for completing the GSQL 101 course in a Jupyter Notebook environment. Through this, you will also learn of various pyTigerGraph methods that you can use.


text:
### Running the demo
#### Step 1
- Clone the project and import it to your desired IDE (Eclipse / Intelij IDEA)

#### Step 2
- After importing, install the project via your terminal

``` mvn clean install ```

#### Step 3
- If everything is installed, just run the project using the code below

``` mvn gwt:devmode ```


text:
---
title: External learning resources
description: A list of tutorials and books on Hugo.
keywords: [books, tutorials, learning, usage]
menu:
  docs:
    parent: getting-started
    weight: 60
weight: 60
---

## Books

### Hugo In Action

[![Hugo In Action](hia.jpg)](https://www.manning.com/books/hugo-in-action)

Hugo in Action is a step-by-step guide to using Hugo to create static websites. Working with a complete example website and source code samples, you’ll learn how to build and host a low-maintenance, high-performance site that will wow your users and stay stable without relying on a third-party server.

[Hugo In Action Home Page](https://www.manning.com/books/hugo-in-action)

### Build Websites with Hugo

[Build Websites with Hugo - Fast Web Development with Markdown (2020)](https://pragprog.com/titles/bhhugo/) by Brian P. Hogan.

## Beginner tutorials

### Hugo tutorial by CloudCannon

[Step-by-step written tutorial](https://cloudcannon.com/community/learn/hugo-beginner-tutorial/) to teach you the basics of creating a Hugo site.

## Video tutorials

* Mike Dane explains the various features of Hugo via dedicated tutorials on [YouTube](https://www.youtube.com/watch?list=PLLAZ4kZ9dFpOnyRlyS-liKL5ReHDcj4G3&v=qtIqKaDlqXo).

* [Introduction to building your first Hugo site](https://cloudcannon.com/community/learn/hugo-beginner-tutorial/) by Mike Neumegen.

repository: bep/hugo

gha_language: Go

repo_name: bep/hugo


text:
nativescript-jsrsasign
=========

#### This repo is forked only for showing implementation of RSA encryption on {N} Nativescript (Since I couldn't find any sample)

## Installation
```
npm install jsrsasign
```
## Usage in {N} Angular
#### Import Lib in your .ts:
```
import { KJUR, KEYUTIL } from 'jsrsasign';
```
#### Declare Private and Public keys (NOT SECURE - Only for testing purposes):

```
const pub = `-----BEGIN PUBLIC KEY-----

            CONTENT OF YOUR PUBLIC KEY

            -----END PUBLIC KEY-----`;

const prv = `<REDACTED_PRIVATE_KEY>`;
```

#### Import/Convert keys to object:
```
let pvKey = KEYUTIL.getKey(prv,'your passphrase'); // remove passphrase ("your passphrase") if not any
let pbKey = KEYUTIL.getKey(pub);
```
[KEYUTIL DOCUMENTATION](https://kjur.github.io/jsrsasign/api/symbols/KEYUTIL.html)

#### Encrypt message:
```
console.log('encrypted: ' + KJUR.crypto.Cipher.encrypt('YOUR MESSAGE STRING', pbKey, 'RSAOAEP'));
```
[KJUR.crypto.Cipher DOCUMENTATION](https://kjur.github.io/jsrsasign/api/symbols/KJUR.crypto.Cipher.html)

#### Decrypt message:
```
console.log('dec: ' + KJUR.crypto.Cipher.decrypt(msg, pvKey, 'RSAOAEP'))
```
[KJUR.crypto.Cipher DOCUMENTATION](https://kjur.github.io/jsrsasign/api/symbols/KJUR.crypto.Cipher.html)

[![license](https://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://github.com/kjur/jsrsasign/blob/master/LICENSE.txt)
[![bower](https://img.shields.io/bower/v/jsrsasign.svg?maxAge=2592000)](https://libraries.io/bower/jsrsasign)
[![npm version](https://badge.fury.io/js/jsrsasign.svg)](https://badge.fury.io/js/jsrsasign)
[![CDNJS](https://img.shields.io/cdnjs/v/jsrsasign.svg)](https://cdnjs.com/libraries/jsrsasign)

The 'jsrsasign' (RSA-Sign JavaScript Library) is an opensource free cryptography library supporting RSA/RSAPSS/ECDSA/DSA signing/validation, ASN.1, PKCS#1/5/8 private/public key, X.509 certificate, CRL, OCSP, CMS SignedData, TimeStamp, CAdES JSON Web Signature/Token/Key in pure JavaScript.

Public page is https://kjur.github.io/jsrsasign .

Your bugfix and pull request contribution are always welcomed :)

repository: krisidmisso/nativescript-jsrsasign

repo_name: krisidmisso/nativescript-jsrsasign