text:
---
layout: default
---

# 1994-06-17 - FW: Larry King Live - you be the judge

## Header Data

From: Vinod Valloppillil<EMAIL_ADDRESS>To<EMAIL_ADDRESS>Message Hash: f78e7999cd327a6287c8cef2edcc40b70e6a813b1b803defc3f74e53f02279e2

Message ID<EMAIL_ADDRESS>Reply To: _N/A_

UTC Datetime: 1994-06-17 19:52:39 UTC

Raw Date: Fri, 17 Jun 94 12:52:39 PDT

## Raw message

```
{% raw  %}From: Vinod Valloppillil<EMAIL_ADDRESS>Date: Fri, 17 Jun 94 12:52:39 PDT
To<EMAIL_ADDRESS>Subject: FW: Larry King Live - you be the judge
Message-ID<EMAIL_ADDRESS>MIME-Version: 1.0
Content-Type: text/plain

	A professor at my University forwarded a transcript of the Larry King
Live episode to
me and I thought I'd give it to the cypherpunks to chew on....

Boy, Andy Grove really let me down....

----------
From: David Farber<EMAIL_ADDRESS>To: interesting-people mailing list<EMAIL_ADDRESS>Subject: Larry King Live - you be the judge
Date: Friday, June 17, 1994 2:51PM
Subject: Larry King Live - you be the judge
Date: Fri, 17 Jun 94 12:08:32 -0400
From: Stephen Walker<EMAIL_ADDRESS>
                  CNN REPORT - LARRY KING:  CLIPPER CHIP

                        June 15, 1994

        extracts from panel on Information Superhighway

PANEL INCLUDES:     Vic Sussman - U.S. News & World Report
                    Andy Grove  - Intel Corporation
                    Vice President Al Gore
                    Chairman of the FCC

Vic Sussman:   The Clipper Chip is essentially, I should let the
               Vice President tell you, but the Clipper Chip is
               essentially, the simplest way to think about it is
               it's a way of encrypting or making phone
               conversations private and they will be private for
               anyone.  Your neighbor will not be able to listen
               in on your phone conversations. However,..

Larry King:    They can now?

Vic Sussman:   They can now, but they won't with the Clipper Chip.
               However, the government that is law enforcement has
               to have a trap door so they can get in and listen
               to what, you know, legal wire taps.  The problem
               is, and I can't believe I'm sitting next the Vice
               President and saying this, the fact is this thing
               is loathed by everyone outside of government.  Now,
               I'll let Andy talk.

Larry King:    Loathed?

Vic Sussman:   Loathed and despised. Yes, the Clipper Chip.

Larry King:    First, we will get Andy before the gang up begins.
               Andy, what do you think of the Clipper Chip?

Andy Grove:    The reason I was laughing is because the issues of
               the Clipper Chip are the arcane of the arcane and
               discussing it with the respectable technical
               community that you have on your show and yourself
               is a little bit like discussing the technical
               merits of a speed trap.

Larry King:    Why the neanderthal here? Why?

Andy Grove:    Uh, the Clipper Chip is an implementation.  One
               particular implementation of the government's right
               to tap digital information.  The government has had
               the right to tap analog information.  The kind of
               information that is taking place between you and me
               and on the phone.  The government has that right.

Larry King:    Under different lines?

Andy Grove:    Pardon?

Larry King:    Under different lines and circumstances?

Andy Grove:    They have to get a warrant, but they can tap it.
               Now just because the information goes digitally, I
               don't see the difference.  The government for its
               own law enforcement needs should be able to tap
               digital information just as well as they have had
               the right to tap analog information forever.

Chairman of the FCC:     This isn't really the FCC he is talking
                         about.  This is law enforcement issues.

Larry King:    Do you believe that? (to Vic Sussman)

Vic Sussman:   Well, I'm a reporter.  I'm just reporting what
               people are saying.  What people are saying is that
               it is going to be hard to find any software
               manufacturers, any computer manufacturers, any
               telecommunication people who support this outside
               of the administration.

V.P. Al Gore:  This is a much misunderstood issue Larry, It is an
               issue that quickly becomes very emotional.   Now, I'm stating the case a little
               parjodially but that really is what is at stake.
               Think of a future in which you have a world trade
               center bombing thirty years from now with a nuclear
               device or a threat of a nuclear device being
               exploded in an urban area or some other mass
               terror.  Do we want to live in a world where the
               FBI and other law enforcement agencies are
               prevented from being able to do their jobs.  Now,
               the government should not have the right (Gore
               laughs) to tap communication unless there is a
               legal proceeding in which there is a due cause, in
               which evidence is presented, in which a court says,
               "Look alright, you have presented enough evidence
               to meet the burden of proof, legally there is
               sufficient cause to allow you to conduct this
               criminal investigation."

Larry King:    We have run out of time.

------- End of Forwarded Message

These opinions are mine and do not in any way represent the opinions of
Microsoft Corporation,
its employees, or stockholders.

{% endraw %}
```

## Thread

+ Return to [June 1994](/archive/1994/06)

+ Return to "[Vinod Valloppillil <t-vinodv@microsoft.com>](/authors/vinod_valloppillil_tvinodv_at_microsoft_com_)"

+ 1994-06-17 (Fri, 17 Jun 94 12:52:39 PDT) - FW: Larry King Live - you be the judge - _Vinod Valloppillil<EMAIL_ADDRESS>


text:
# 计算机网络实验 lab4

姓名：李沛尧

学号：1712901

## Q1

1. Select the first ICMP Echo Request message sent by your computer, and expand the Internet Protocol part of the packet in the packet details window.What is the IP address of your computer?

2. Within the IP packet header, what is the value in the upper layer protocol field?

3. How many bytes are in the IP header? How many bytes are in the payload of the IP datagram? Explain how you determined the number of payload bytes.

4. Has this IP datagram been fragmented? Explain how you determined whether or not the datagram has been fragmented.

5. Which fields in the IP datagram always change from one datagram to the next within this series of ICMP messages sent by your computer?

6. Which fields stay constant? Which of the fields must stay constant? Which fields must change? Why?

7. Describe the pattern you see in the values in the Identification field of the IP datagram

8. What is the value in the Identification field and the TTL field?

9. Do these values remain unchanged for all of the ICMP TTL-exceeded replies sent to your computer by the nearest (first hop) router? Why?

答案：

1. <IP_ADDRESS>

    ![image](./images/Q1-1.jpg)

2. 协议为ICMP，值为01

    ![images](./images/Q2-1.jpg)

3. 头长度为20bytes，IP数据报文长度为64，Total Length为84，头长度为20，故报文长度为64

    ![image](./images/Q3-1.jpg)

4. 没有，因为相应字段为0

    ![image](./images/Q4-1.jpg)

5. Identification，Time to live，checksum字段会一直改变

    ![image](./images/Q5-1.jpg)

6. 如下，红色一定不变，蓝色未改变，绿色必须改变

    ![image](./images/Q6-1.jpg)

7. 如图所示

    ![image](./images/Q7-1.jpg)

8. 如图所示

    ![image](./images/Q8-1.jpg)

9. ID改变但TTL不变

## Q2

10. Find the first ICMP Echo Request message that was sent by your computer after you changed the Packet Size in pingplotter to be 2000. Has that message been fragmented across more than one IP datagram? [Note: if you find your packet has not been fragmented, you should download the zip file http://gaia.cs.umass.edu/wireshark-labs/wireshark-traces.zip and extract the ipethereal- trace-1packet trace. If your computer has an Ethernet interface, a packet size of 2000 should cause fragmentation.]

11. Print out the first fragment of the fragmented IP datagram. What information in the IP header indicates that the datagram been fragmented? What information in the IP header indicates whether this is the first fragment versus a latter fragment? How long is this IP datagram?

12. Print out the second fragment of the fragmented IP datagram. What information in the IP header indicates that this is not the first datagram fragment? Are the more fragments? How can you tell?

13. What fields change in the IP header between the first and second fragment?

14. How many fragments were created from the original datagram?

15. What fields change in the IP header among the fragments?

答案：

10. 分割了

    ![image](./images/Q10-1.jpg)

11. More fragments表示了分割，Fragment offset表示是第一个，TotalLength表示长度

    ![image](./images/Q11-1.jpg)

12. More fragments和Fragment offset

    ![image](./images/Q12-1.jpg)

13. IP 头的 ID，标志位，以及校验码

14. 3个

    ![image](./images/Q14-1.jpg)

15. 同13

license: MIT

repository: Youggls/ComputerNetworkHomework

branch_name: refs/heads/master

extension: md

license_type: permissive

repo_name: Youggls/ComputerNetworkHomework


text:
Imagine a chatbot with an Authorization 'Key bWVzc2FnaW5naHViQHRha2VuZXQuY29tLmJyOjEyMzQ='. To send a message from this bot to a BLiP user, use:

```http
Note: For this sample, bWVzc2FnaW5naHViQHRha2VuZXQuY29tLmJyOjEyMzQ is a valid Key.

POST https://msging.net/messages HTTP/1.1
Content-Type: application/json
Authorization: Key bWVzc2FnaW5naHViQHRha2VuZXQuY29tLmJyOjEyMzQ=
Content-Length: 131

{
    "id": "123e4567-e89b-12d3-a456-426655440000",
    "to"<EMAIL_ADDRESS>    "type": "text/plain",
    "content": "Hello, how can I help you?"
}
```

With `C#`, the authentication of your chatbot is made on application.json file. Basically, this file defines all receivers and other control properties.

```csharp
//Check an example of how to set your application.json file:
{
  "identifier": "xpto",
  "accessKey": "cXkzT1Rp",
  "messageReceivers": [
    {
      "type": "PlainTextMessageReceiver",
      "mediaType": "text/plain"
    }
  ]
}
```

In order to instantiate the client, use ClientBuilder class informing the identifier and access key:

```javascript

// Create a client instance passing the identifier and accessKey of your chatbot
var client = new ClientBuilder()
    .withIdentifier(identifier)
    .withAccessKey(accessKey)
    .withTransportFactory(() => new WebSocketTransport())
    .build();

// Register a receiver for messages of 'text/plain' type
client.addMessageReceiver('text/plain', function(message) {
  // TODO: Proccess the received message
});

// Register a receiver to any notification
client.addNotificationReceiver(true, function(notification) {
  // TODO: Proccess the received notification
});

// Connect with server asynchronously
// Connection will occurr via websocket on 8081 port.
client.connect() // This method return a 'promise'.
    .then(function(session) {
        // Connection success. Now is possible send and receive envelopes from server. */
        })
    .catch(function(err) { /* Connection failed. */ });

```

 In order to authenticate your chatbot, you need to follow these steps:

 On `Webhook`, whatever request made (messages/notifications/commands) must contain an authorization header (Authorization) with a Key type, as showed on [BLiP Portal](https://portal.blip.ai/#/application) chatbot configurations.

 On both `C# and Javascript`, you will need to check credentials on [BLiP Portal](https://portal.blip.ai/#/application), inside chatbot configuration menu, and find your identifier and access key. Then, you need to insert them in a specific place.

 See the `examples` at code sidebar.

repository: iperoyg/blip-docs

repo_name: iperoyg/blip-docs


text:
---
layout: post
title: 'Moving the Computer System at Work - Exhausting!'
tags: [general]
redirect_from: /blog/archive/2007/04/21/cendiomove
---

Yesterday was spent moving the computer resources at work ([Cendio
AB](http://www.cendio.com)) from our old offices to our new ones. Quite
an exhausting day.

As usual when you move stuff, things break. And regardless of how much
you plan and try to think about everything, things go wrong. \

One example of the former was that the power supply of our firewall
choose to break down completely when we tried to start it at its new
location. **The horror, the horror!** Fortunately, we had an older
machine of the same type which from which we could steal the power
supply, and so far, it's been running stable. I'll keep an eye on it, as
the machine we stole the power supply from have shown stability
problems. Trust me, I'll definitely order a new power supply for shelf
storage.. \

On the "*things go wrong*" side, there was a complete misunderstanding
on how our new network connection (from the same company that provided
the old one, [Tele2](http://www.tele2.se)) should be configured.
Straightening that out took its time, so we had about 3 hours of
complete downtime for our web server. On the other hand, given the
broken firewall, I think only about 1½ hour can be blamed on Tele2, and
3 hours is quite OK for such a low traffic site.\

After these two mishaps, most of the other work went fine. We were
especially horrified by the fact that our Xerox 432 SLX (a
scanner/copier/printer/fax thing which as all printers is most happy
when its not working) worked right out of the box - we just connected it
to power, network and phone line, and everything worked as intended. I'm
sure it will break completely as revenge some other time when we *really
really* need it. There's a saying - *God created the computer network,
the devil responded by creating the printers*. Very true, if you ask me.

Not only did I and my colleague Peter install and configure computers in
the new computer room, while my two other colleagues moved the rest of
our computers from our old location to the other - I also had to keep an
eye on the transport of the Xerox, the move of our fax telephone line,
the installation of fire extinguishers and installation of the alarm
system. Lots of things to keep in the head, lots of phone calls. I
counted twentyseven phonecalls during the day.

Eleven hours of sleep later, my muscles are complaining about spending
most of yesterday carrying computers and crawling around 19" racks.
Ouch! But I'm very happy with our new computer room - everything neatly
installed in two racks instead of spread around a large room. Network
equipment mounted well, and new KVM switches making work in the computer
room much easier (our old ones were like playing russian roulette - you
newer knew if you could get a console on the server you needed access
to). \


text:
# ASSIGNMENT #2

In this assignment, you will gain experience reading from standard input, using arrays, and using Math methods. You will also learn how to design a brute-force algorithmic solution to a problem that would be tedious and error-prone for a human to calculate.

* Part 1: [Number Hunt](Part%201)
* Part 2: [Radar Contacts](Part%202)
* [Extra Credit](Extra%20Credit)

---

This README was adapted from an assignment page at Montana Tech: https://katie.cs.mtech.edu/classes/archive/f13/csci135/assign/input/

path: /Assignment 2/README.md

branch_name: refs/heads/main


text:
It should be a matter of minutes before you start program it.

Before turning it on, it's always safer to check if you see anything unusual, in the unlikely event it has been damaged during transport. As an example, here is a box with a black Reachy with a single arm:

{{< img alt="Reachy unboxing" src="reachy-unboxing.jpg" height="600px" >}}

If you have a doubt, do not hesitate to send us a photo.

The antennas, the power supply and other smaller parts should be located on the lower layer in the box.

{{< img alt="Reachy unboxing" src="reachy-small-parts-unboxing.jpg" height="600px" >}}

## Attach the robot on its mount

On the back of the robot torso, you will find four spots to attach the robot to a pole. You can also use a specific attach system depending on your configuration.

{{< img alt="Reachy back fixation" src="reachy-back-fixation.jpg" height="600px" >}}

Always make sure the robot is correctly fixed before trying to make it move!

filename: install your robot.md


text:
---
# Documentation: https://sourcethemes.com/academic/docs/managing-content/

title: "Contiki as RTOS A look at Contiki’s Flash File System – Coffee"
authors: [Smriti Murali , V. Krishnapriya , K. Chandrasekaran]
date: 2016-03-02
doi: ""

# Schedule page publish date (NOT publication's date).
publishDate: 2020-07-31T23:00:05-04:00

# Publication type.
# Legend: 0 = Uncategorized; 1 = Conference paper; 2 = Journal article;
# 3 = Preprint / Working Paper; 4 = Report; 5 = Book; 6 = Book section;
# 7 = Thesis; 8 = Patent
publication_types: ["0"]

# Publication name and optional abbreviated publication name.
publication: "5th International Engineering Symposium - IES 2016"
publication_short: ""

abstract: "The success of IoT (Internet of Things) depends upon the inclusion of many
cross platform heterogeneous devices which have severe memory, energy, processing
power and communication bandwidth constraints. A real-time application is expected to
process data instantly without buffering delays or jitter. Contiki, an open source OS,
provides only partial support for such operations. In this paper, we examine how Coffee
is better than CFS-POSFIX for real-time operations and validate it by running a
simulation on Cooja. We further explore Coffee’s prominent features such as garbage
collection, wear levelling, etc. We suggest improvements to reduce the unpredictable
delays caused by long tasks like file extension and garbage collection. We then examine
how latencies in file operations can be reduced to enhance its real time performance."

# Summary. An optional shortened abstract.
summary: ""

tags: []
categories: []
featured: false

# Custom links (optional).
#   Uncomment and edit lines below to show custom links.
# links:
# - name: Follow
#   url: https://twitter.com
#   icon_pack: fab
#   icon: twitter

url_pdf:
url_code:
url_dataset:
url_poster:
url_project:
url_slides:
url_source:
url_video:

# Featured image
# To use, add an image named `featured.jpg/png` to your page's folder.
# Focal points: Smart, Center, TopLeft, Top, TopRight, Left, Right, BottomLeft, Bottom, BottomRight.
image:
  caption: ""
  focal_point: ""
  preview_only: false

# Associated Projects (optional).
#   Associate this publication with one or more of your projects.
#   Simply enter your project's folder or file name without extension.
#   E.g. `internal-project` references `content/project/internal-project/index.md`.
#   Otherwise, set `projects: []`.
projects: []

# Slides (optional).
#   Associate this publication with Markdown slides.
#   Simply enter your slide deck's filename without extension.
#   E.g. `slides: "example"` references `content/slides/example/index.md`.
#   Otherwise, set `slides: ""`.
slides: ""
---

repository: smritimurali/academic-kickstart

gha_license_id: MIT

repo_name: smritimurali/academic-kickstart


text:
# DomenOnCall

This is an Android application that indicates if a Zoom video call is being performed on a computer or not.
The project consists of a Python REST server and an Android application.

## Screenshots

repository: dsoklic/DomenOnCall

gha_language: Kotlin

repo_name: dsoklic/DomenOnCall


text:
# Overloading Function Signatures

## Overloading Order

- The most specific overload must be listed first.

  > Why? The compiler will go through the overload from top to bottom and the first one will win.

  ```ts
  // bad
  function foo(something: any): void
  function foo(specific: string, option?: Option): void

  // good
  function foo(specific: string, option?: Option): void
  function foo(somthing: any): void
  ```

## Event Handlers

- Type the event handler, not the callback.

  > Why? Provides better code completion.

  ```ts
  // Bad
  export interface MyEventCallback {
    (event: { ... }): void;
  }

  export interface ABC {
    onMyEvent(callback: MyEventCallback): Disposable;
  }

  // Good
  export interface MyEventHandler {
    (callback: (event: { ... }) => void): Disposable;
  }

  export interface ABC {
    onMyEvent: MyEventHandler;
  }
  ```


text:
<!--

    Please ensure
        - you have read the Contribution Guidelines (https://github.com/jarne/HackerDesktop/blob/master/CONTRIBUTION.md)
    before creating an issue at this repo.

    Everything written in brackets [ ... ] are placeholders and should be replaced (without the brackets, of course).

    Thanks for your support in order to keep the pull requests section clean!

-->

### 📋 Description

[ Describe your pull request here ]

**What kind of pull request is this?**

-   [ ] Bug Fix
-   [ ] Improvement
-   [ ] New Feature

**Is this pull request related to an issue?**

[ Add issue ID here if there is one ]

### 🗂 Discussion

**Is there an alternative solution for this pull request?**

[ Answer the question here ]

**What are the advantages of this solution?**

[ Answer the question here ]

**What are the disadvantages of this solution?**

[ Answer the question here ]

### ✅ Tests

**Did you encountered any issues when testing the pull request?**

[ Answer the question here ]

**Did you added unit testings for features added in this pull request?**

[ Answer the question here ]

repository: jarne/HackerDesktop

repo_name: jarne/HackerDesktop


text:
# Auto Downloader Core
This is a starter project offers you the foundation for building a program that automates browser-based file downloading for you using [Python](https://python.org) and [Selenium](https://selenium.dev).

*Things to note...*
- *The following commands may differ depending on your Python version, operating system, and environment setup.*
- *This was only tested with Python 3.8.2 & 3.8.5, macOS Catalina & Big Sur, and ChromeDriver 94.0.4606.61.*

## Setup
1. Download and setup [ChromeDriver](https://chromedriver.chromium.org/downloads).
2. Setup your virtual environment and activate it. The command is probably along the lines of:
`source .venv/bin/activate`
3. Install dependencies:
`pip3 install -r requirements.txt`

## Running The Program
There are two ways to run the program:

You can pass in a simple series of command line arguments where each argument is a URL like so:
```
python3 main.py https://google.com https://stackoverflow.com https://youtube.com
```

Or you can pass in a text file for URLs you want to work with with the `-l` flag:
```
python3 main.py -l list.txt
```

Each line in the text file should only have one URL. For example, the contents of one could look like:
```
https://google.com
https://stackoverflow.com
https://youtube.com
```

### Using Environment Variables
You can pass in environment variables like so:
```
FOO=bar BAZ=qux python3 main.py https://reddit.com
```

Or you can define environment variables in a `.env` file at the root of the project. Each line in this file should represent an environment value like `{KEY}={VALUE}`.

To get the equivalent behavior from the previous example, the file should be written and formatted like so:
```
FOO=bar
BAZ=qux
```

Then all you would need to do is run the program without passing in the environment variables through the command line:
```
python3 main.py https://reddit.com
```

Note that the `.env` file will be ignored by Git, so if you want to commit it, you will need to remove it from `.gitignore`. Generally this file is intended to hold private information, so think twice before you commit it!

## Other Pre-Installed Dependencies
The following dependencies are available to you by default as they have a good chance of being useful:
- [Beautiful Soup](https://pypi.org/project/beautifulsoup4)
- [Requests](https://pypi.org/project/requests)

## Example
As a proof of concept, you can see this being used to build a Twitch VOD downloader on the [`twitch` branch](https://github.com/mattlean/auto-downloader-core/tree/twitch).

repository: mattlean/auto-downloader-core

repo_name: mattlean/auto-downloader-core


text:
# ecsctl
kubectl-style command line tool for AWS Elastic Container Services (ECS)

## Installation
```bash
pip install ecsctl
```

## Purpose
A convenient command line tool to view ECS cluster status and do troubleshooting.

This tool is trying to provide similar functionality of `kubectl` for kubernetes.

Of course, ECS and kubernetes are so different. Many features on kubernetes are not possible here in ECS.

Some AWS official projects to check out:

- [ecs-cli](http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_CLI_installation.html)
- [aws-cli ecs command](http://docs.aws.amazon.com/cli/latest/reference/ecs/)

## Usage

#### Cluster
List nodes:
```
% ecsctl get clusters
NAME     STATUS      RUNNING    PENDING    INSTANCE COUNT
default  ACTIVE            3          0                 2
```
Get cluster details:
```
% ecsctl describe cluster mycluster
```
Create/delete cluster:
```
% ecsctl create cluster mycluster
```

#### Container Instances (nodes)
List nodes:
```
% ecsctl get nodes --cluster mycluster
INSTANCE ID                           EC2 INSTANCE ID      STATUS      RUNNING COUNT
00000000-1111-2222-3333-444444444444  i-abcdef123456abcde  ACTIVE                  1
```
Get node detail:
```
% ecsctl describe node 00000000-1111-2222-3333-444444444444
```
Drain/undrain node:
```
% ecsctl drain 00000000-1111-2222-3333-444444444444
```

#### Services
List services:
```
% ecsctl get services
```
List services in certain order:
```
% ecsctl get services --sort-by "createdAt"
```
Delete a service:
```
% ecsctl delete service badservice
```
Delete a service (even if it has desiredCount > 0):
```
% ecsctl delete service badservice --force
```

#### Run container quick start
```
% ecsctl run mycontainer --image busybox
mycontainer

% ecsctl get services
NAME             TASK DEFINITION      DESIRED    RUNNING  STATUS    AGE
mycontainer-svc  mycontainer:1              1          0  ACTIVE    10 seconds ago
```

#### Run docker exec on containers (Requires customizing docker daemon to listen on internal addresses)
```
% ecsctl get tasks
TASK ID                               STATUS    TASK DEFINITION    AGE
42f052c4-80e9-411d-bea2-407b0b4a4b0b  PENDING   mycontainer:1      2 minutes ago

% ecsctl exec 42f052c4-80e9-411d-bea2-407b0b4a4b0b date
Fri May 26 00:13:24 PDT 2017

% ecsctl exec -it 42f052c4-80e9-411d-bea2-407b0b4a4b0b /bin/bash
root@container:/# (interactive)
```

#### Configs
Set default cluster name (equivalent to `--cluster` option)
```
% ecsctl config set cluster mycluster
```
Set default docker daemon port
```
% ecsctl config set docker_port 2375
```

repository: supaflysnooka/ecsctl

repo_name: supaflysnooka/ecsctl


text:
# 01-Introduction

Hello!  Thanks for checking out my work.  This is a simple file that acts as an introduction for me.
This document says a few things about me, such as...

my name

my favorite game

my biggest concern regarding the course

what I am excited about

and, the document also provides my stackoverflow.com user number, along with a link to my github.com profile, which showcases my work for the class.

Enjoy!
---


text:
# Trimming
Date: 18.09.2020

## What is trimming
To resolve the size problem, we introduced an option to trim unused assemblies as part of publishing self-contained applications.
| Assembly        | Trimmed (k)           | Member Trimmed (k)  |
| ------------- |-------------:| -----:|
| System.Collections.Concurrent.dll | 184.9 | 23.5 |
| System.Collections.dll | 85.5 |   15.5 |
| System.Collections.Immutable.dll | 171.5 | 20.0 |
| System.Console.dll | 61.5 | 31.5 |
| System.Diagnostics.StackTrace.dll | 33.9 | 8.5 |
| System.IO.Compression.dll | 88.5 | 33.0 |
| ... | ... | ... |
| Total | 10,545.1 | 2,213.0 |

## Assembly-level trimming
`<TrimMode>CopyUsed</TrimMode>` in the project file

## Member-Level Trimming
`TrimMode=Link` in the project file

## Dynamic code pattern analysis
A set of attributes have been added that enables code to be annotated to tell the trimmer what code should be included, or which API usage should prevent trimming.
* DynamicallyAccessedMembers - Applied to instances of System.Type (or strings containing a type name) to tell the trimmer which members of the type will be accessed dynamically.
* UnconditionalSuppressMessage - Used to suppress a warning message from the trimmer if the use case is known to be safe.
* RequiresUnreferencedCode - Tells the trimmer that the method is incompatible with trimming and so warnings should be presented where the method is called.
* DynamicDependency - Specifies an explicit dependency from a method to other code, if the method is preserved the other code will also be preserved.

## Testing Trimmed Apps
When an app is trimmed, it is essential to perform exhaustive end-to-end testing of the published version of the application.

## Trimming and Ready2Run
Using `<TrimMode>Link</TrimMode>` will remove R2R data, unless its specified to be added by using the `<PublishReadyToRun>True</PublishReadyToRun>` option as part of dotnet publish.

## Removing Framework Features
Based on [feature switches](https://github.com/dotnet/runtime/blob/master/docs/workflow/trimming/feature-switches.md#available-feature-switches).

## Using attributes to provide hints to the trimmer
### Annotating Reflection

```csharp
  public IEnumerable foo(
      [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type t)
  {
      return Activator.CreateInstance(t) as IEnumerable;
  }

  public IEnumerable foo(
      [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] string typename)
  {
      return Activator.CreateInstance("mscorlib", typename).Unwrap() as IEnumerable;
  }
```

### Specifying dependencies
```csharp
  [DynamicDependency(DynamicallyAccessedMemberTypes.All, "System.Collections.Stack", "mscorlib")]
  [DynamicDependency(DynamicallyAccessedMemberTypes.All, "System.Collections.Queue", "mscorlib")]
  public IEnumerable foo(bool lifo)
  {
      string typename = (lifo) ? "System.Collections.Stack" : "System.Collections.Queue";
      return (IEnumerable) Activator.CreateInstance("mscorlib", typename).Unwrap();
  }
```

### Suppressing Warnings
``` csharp
  [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2085:UnrecognizedReflectionPattern",
              Justification = "Literal fields on enums can never be trimmed")]
  // This will return enumValues and enumNames sorted by the values.
  private void GetEnumData(out string[] enumNames, out Array enumValues) { … }
```

### Forcing Warnings
[RequiresUnreferencedCode](https://github.com/dotnet/runtime/blob/6072e4d3a7a2a1493f514cdf4be75a3d56580e84/src/libraries/System.Private.CoreLib/src/System/Diagnostics/CodeAnalysis/RequiresUnreferencedCodeAttribute.cs#L15)

## Using XML files to provide explicit directions to the trimmer
### 3 scenarios
* Preservation
* External Attribution
* Feature switches

```xml
  <linker>
    <assembly fullname="Assembly">
      <type fullname="Namespace.A">
        <field name="MyNumericField" />
        <property name="Property1" />
        <method name="Method3" />
        <event name="Event2" />
      </type>
    </assembly>
  </linker>
```

### Preservation
The trimmer will automatically include all code that it thinks can be reached by the application.

```xml
  <ItemGroup>
    <TrimmerRootDescriptor Include="TrimmerRoots.xml" />
  </ItemGroup>
```

```xml
  <linker>
    <assembly fullname="Assembly">
  </linker>
  <linker>
    <assembly fullname="AssemblyA" preserve="all" />
  </linker>
  <linker>
    <assembly fullname="AssemblyA, Version=<IP_ADDRESS>, Culture=neutral, PublicKeyToken=null">
  </linker>
```

```
  <linker>
    <assembly fullname="AssemblyA">
      <type fullname="AssemblyA.One" preserve="all" />
      <type fullname="AssemblyA.Two" />
```

### Applying Attributes via XML
```xml
  <linker>
    <assembly fullname="AssemblyA">
      <type fullname="AssemblyA.One" preserve="all" >
        <method signature="AssemblyA.IFoo LoadAddon(System.String)">
          <attribute fullname="System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute" assembly="System.Runtime">
            <argument>LoadAddon is not trimmable as the assembly and type for the addon are unknown during trimming</argument>
```

```xml
  <ItemGroup>
  	<EmbeddedResource Include="ILLink.Subsitutions.xml"/>
  <ItemGroup>
```

## Reducing the application size
Beyond member level trimming, there are two other factors that will impact the published size of the app:
* Ready To Run
* Feature Switches

### Ready To Run
As the application is run, each method will need to be JITed the first time it is invoked. Subsequent calls within the process lifetime will faster as the method will already be JITted.

### Framework feature switches
```csharp
  public static bool EnableUnsafeUTF7Encoding
  {
    get => AppContext.TryGetSwitch("System.Text.Encoding.EnableUnsafeUTF7Encoding", ref s_enableUnsafeUTF7Encoding);
  }
```

```xml
  <RuntimeHostConfigurationOption Include="System.Text.Encoding.EnableUnsafeUTF7Encoding"
    Condition="'$(EnableUnsafeUTF7Encoding)' != ''"
    Value="$(EnableUnsafeUTF7Encoding)"
    Trim="true" />
```

```xml
  <linker>
    <assembly fullname="System.Private.CoreLib">
      <type fullname="System.LocalAppContextSwitches">
        <method signature="System.Boolean get_EnableUnsafeUTF7Encoding()" body="stub" value="false" feature="System.Text.Encoding.EnableUnsafeUTF7Encoding" featurevalue="false" />
      </type>
    </assembly>
  </linker>
```

## Literature
* [App Trimming in .NET 5](https://devblogs.microsoft.com/dotnet/app-trimming-in-net-5/)
* [Customizing Trimming in .NET 5](https://devblogs.microsoft.com/dotnet/customizing-trimming-in-net-core-5/)

path: /.net core/trimming.md


text:
# Module: Dynj

This language module builds on top of dynj and adds synchronized blocks. The
solid nodes in the following diagram shows the added AST types by this module.

repository: amanjpro/languages-a-la-carte

repo_name: amanjpro/languages-a-la-carte


text:
# Chord

[Simple analytics](https://en.wikipedia.org/wiki/Circular_segment) for collecting event data (like pageviews) on top of Google Cloud Functions and BigQuery.

Right now, it only supports `standard.events` table.

## Setup

Setup should take <10 minutes.

1. Signup for GCP and enable billing (needed for BigQuery)

2. Install `gcloud` SDK locally

3. Clone this repo and from within the repo, run

```sh
gcloud beta functions deploy event --trigger-http
```

4. Create BigQuery table `standard.events` from the BigQuery UI. Recommend that you partition by `created` column.

| Column     | Type      | Constraint |
| ---------- | --------- | ---------- |
| type       | STRING    | REQUIRED   |
| created    | TIMESTAMP | REQUIRED   |
| properties | STRING    | NULLABLE   |

5. Add js scripts

Build the minimized JS `npm run build` and add it to your frontend.

```html
<script src="chord.min.js"></script>

...

<script>
chord.endpoint = "<GCP FUNCTIONS ENDPOINT>";
chord.identify(<user_id>);
chord.event('page');
</script>
```

6. Bonus: Create convenience views

Create a `standard.views` views for easier access to pageviews.

Views are relatively intelligent, so they respect the date-partitioning of the original `standard.events` table, so it's just as performant.

### `standard.views`

```sql
select
	created
	, json_extract_scalar(properties, '$.url') as url
	, json_extract_scalar(properties, '$.referrer') as referrer
	, json_extract_scalar(properties, '$.ip_address') as ip_address
	, json_extract_scalar(properties, '$.user_agent') as user_agent
	, json_extract_scalar(properties, '$.session_id') as session_id
	, json_extract_scalar(properties, '$.viewer_id') as viewer_id
	, json_extract_scalar(properties, '$.user_id') as user_id
	, properties
from `<gcp-project-id>.standard.events`
```

repository: ehfeng/chord

repo_name: ehfeng/chord


text:
# Sonarqube for Application Static Code Analysis

* Status: accepted
* Deciders: @jam01
* Date: 2020-10

## Context and Problem Statement

We understand the value of automated code qualitative analysis and that it's often an afterthought. Should we bundle a static code analysis component?

## Decision Outcome

We'll use Sonarqube for application static code analysis. As part of our effort to offer a ready best-practices platform we'll setup Sonarqube and tie it into template or default CI/CD pipelines.

## Links <!-- optional -->

* [Sonarqube](https://www.sonarqube.org/)

repository: serghey-rodin/tavros

repo_name: serghey-rodin/tavros


text:
# selfless-service-updates

Amazon ElastiCache recently added
[self-service updates](https://aws.amazon.com/about-aws/whats-new/2019/06/elasticache-self-service-updates/).
This revolutionary new feature allows you manually manage updates on your
managed cache cluster.

Now, as much as I enjoy the job security of pressing "Apply Update" at four in
the morning, I enjoy getting a good night's sleep much better.  This simple
Lambda function checks for any outstanding self-service updates and applies
them.  A CloudWatch Events scheduled expression will run this Lambda function
at 10:00 UTC every Monday, but can be set to your preferred time.

## Deploying

For easy deployment, check out this project on the
[AWS Serverless Application Repository](https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:466565666523:applications~selfless-service-updates).
To customize the scheduled time, set "CronExpression" under "Application
Settings" to the desired
[cron expression](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html#CronExpressions).

You can also build and deploy yourself using SAM.

```sh
sam deploy --guided
```

repository: luhn/selfless-service-updates

repo_name: luhn/selfless-service-updates


text:
# DeleteGlobalAccelerationInstance {#reference_i4w_xmt_ndb .reference}

Delete a Global Acceleration instance.

Note the following before calling this API:

-   Only Pay-As-You-Go instances are supported.
-   If you want to delete a dedicated-bandwidth instance, unbind the backend server before deleting the instance.
-   If you want to delete a shared-bandwidth instance, remove the EIPs before deleting the instance.

## Request parameters {#section_cch_pjg_mdb .section}

|Name |Type|Required|Description |
|:----|:---|:-------|:-----------|
|Action|String|Yes| The action to perform.  Valid value:

 DeleteGlobalAccelerationInstance

 |
|RegionId|String|Yes| The ID of the region where the Global Acceleration instance is located.

 Call the DescribeRegions API to obtain the region ID.

 |
|GlobalAccelerationInstanceId|String|Yes| The ID of the Global Acceleration instance.

 |

## Response parameters {#section_ugs_f1g_cz .section}

|Name|Type|Description|
|:---|:---|:----------|
|RequestId|String|The ID of the request.|

## Examples {#section_ix5_h1g_cz .section}

**Request example**

``` {#createVPCpub}
https://vpc.aliyuncs.com/?Action=DeleteGlobalAccelerationInstance
&RegionId=ap-southeast-1
&GlobalAccelerationInstanceId=ga-aabbccddaabb
&CommonRequestParameters
```

**Response example**

JSON format

```
{
    "RequestId": "E6E63B2A-9820-44A8-A359-9BB2DAEE6424"
}
```

XML format

```
<? xml version="1.0" encoding="UTF-8" ? >
<DeleteGlobalAccelerationInstanceResponse>
    <RequestId>BD5BCEE8-F62C-40C2-9AC3-89XXXXXXXXX</RequestId>
</DeleteGlobalAccelerationInstanceResponse>
```

repository: fralychen/vpc

repo_name: fralychen/vpc


text:
Contact support

## Get help

Please contact gro.dayrdatad@pleh for assistance with your dataset submission, or with questions about our [submission process](/stash/submission_process) or [publication process](/stash/process).

## Get involved

Is your institution interested in [joining or working with Dryad](/stash/join_us)? Tell us about your interests, and our partnership team will get back to you.

Share your interest

## Preview changes

A few times a year, we ask volunteer user testers to provide feedback on sneak peeks at changes and new features. Do you want to help direct the future of Dryad?

Sign up for previews and feedback opportunities

## Request changes

Have you noticed a problem with Dryad, or a feature we’re missing? Anyone may request changes to Dryad, from the smallest wording change to major new features. All requests will be evaluated and prioritized for potential inclusion into the Dryad system.

Please send feature requests to gro.dayrdatad@pleh, with “Feature request” in the subject line. As part of the request, please answer as many of the following questions as possible:

 - Who would use the feature?
 - What problem are you trying to solve for these users?
 - What would change about Dryad if the feature is successful?
 - Can you provide examples of this feature on other websites? (e.g., screenshots)

After your request is received, we will provide you with brief feedback about the status of the request and how we expect it to be addressed.

## General enquiries

Email: gro.dayrdatad@olleh

Phone: +1<PHONE_NUMBER>

Twitter | LinkedIn | Facebook

## Head office

Dryad

417 Mace Blvd. , Ste J110

Davis, CA 95618

United States

Jennifer Gibson, Executive Director: gro.dayrdatad@nosbigj

Jessica Herzog, Head of Publishing Services: gro.dayrdatad@gozrehj

Sarah Lippincott, Head of Community Engagement: gro.dayrdatad@haras

Dryad is a 501(c)(3) nonprofit corporation under the North Carolina Nonprofit Corporation Act, registered with the U.S. IRS, EIN number 46-1685419.

repository: CDL-Dryad/dryad-app

gha_language: Ruby

repo_name: CDL-Dryad/dryad-app


text:
---
layout : post
title  : I Tried The New Wolfram One
snip   : The Aston Martin of Programming Languages
---

As a professional software engineer, I spend a lot of time with programming languages.
Within the context of work, most of my day to day is transforming my thoughts into a
particular language using it's own constructs in a way that doesn't make my own head
explode, or the heads of my colleages. While striking this balance is an art in itself,
I find the need to explore other languages, partly to learn more about programming languages
as a study in it's own right to find new ways to solve problems, but also to escape the
confines of linters, code style, pull reviews, etc.

Sometimes I just want to *do*. And this is what lead me to the Wolfram Language.

While studying calculus in undergrad, we used a program called Maple to analyze
and plot functions. On many occasions, I would have a question about how to form a
construct or plot, and the tutors would respond, "I know how to do this in Mathematica,
but I'm not sure how to do it here". I remember Mathematica vaguely as a tool only professional
mathematicians used, but recently, with the wave of data visualization tools like Tableau,
Plotly, and even open-source tools like Jupyter Notebooks, Mathematica has found itself
rebranding to capture market and provide solutions beyond an analysis tool for mathematicians.

Enter Wolfram. A suite of tools, each connected through the Wolfram Language, providing
services like cloud computing, free text information retrieval, developer platforms to build
and deploy API services. The goal of this project
has shown itself to be a single, unified way to explore, program, and deploy informatica
solutions. Standard Data Science, Machine Learning, and Artifical Intellegence algorithms
are built right in and are available as soon as you open the notebook and allow you to get started
with a click of a button.

## Designer Languages

On first glance, the notebook itself is something that just works, and looks clean and minimalistic from the start,
and it brings an ambiance as if it would fit right at home in the screen of a MacBook Air on the
wood oak desk of a modern architect. If programming languages were cars, this is certainly
the Aston Martin Zagato to Python's Civic. You don't buy into the clean lines and elegant styling
because you want something versatile for daily commutes between work and picking up your kids.
You buy it because you want to have exhilarating drives through
winding roads through forests overlooking bays, and you want to have fun doing it.  It's not a general purpose language, and it doesn't want to be.
I saw it as an elegant way to dive deeply into exploratory problems quickly, and without needing to spin up
clusters or exchange conda environments, or even install requirements.

It is a tool for professional data scientists, and it really did just work. For a moment I
felt like I was a greying 40 year old, with a wood
oak desk in a glass office overlooking a sprawling tech campus. Of course with said Zagato parked in my partner parking space. It seemed too easy and comforting. So naturally,
as I would, I wanted to exhibit chaos in this language to test how comforting it is.

A ship is only measured by how well it lasts in a storm. So I gave it storms.

## Strolls through Forests

The first use case I had of it was to generate a basic regression hypothesis test.
A friend of mine and I were discussing the differences between using a permutation test
or a t-test. Naturally, when your friends work in science fields, you coffee chats center
around algorithms and methods, so we discussed preferences for basic differences of means tests for a few minutes before I remembered
I registered for a Wolfram trial the night before. I had an excuse to use it, although it was a small one.
Eventually, I settled
on trying a basic regression hypothesis test in the language, and unsurprisingly, it worked well.

{% highlight mathematica %}
group1 = Table[RandomVariate[NormalDistribution[ 1, 3 ]], {i, 200}];
group2 = Table[RandomVariate[NormalDistribution[ 7, 3 ]], {i, 200}];
data = Join [({0, #})& /@ group1, ({ 1, # })& /@ group1 ];
fit = LinearModelFit[data2, {x}, {x}];
fit["ParameterTable"]
{% endhighlight %}

Out popped...

{% highlight mathematica %}
Estimate	Standard Error	t-Statistic	P-Value
1	0.804167	0.21057	3.819	0.000155371
x	6.6405	0.297791	22.2992	4.65464*10^-72
{% endhighlight %}

It worked quite well. Of course it better. This was supposed to be the Aston Martin of languages after all.
What surprised me after was that without thinking, I hit "Deploy -> Published Page". I wanted
to share the regression with him. In a few seconds, a link appeared, and I sent it.

To share a simple regression and share it, I pushed a few buttons and it just happened.
I didn't need to fiddle with conda environments, install things, open a browser, search up
list types in Numpy, get annoyed and install PANDAS, search up how to do a regression in
Scipy, search up how to generate random numbers in Scipy... In the time it would take me
to download the dependencies, I loaded a notebook, ran the regression, and shared it.

Simple.

## Winding Roads

Over the next few days, I stayed up late exploring the language. Doing basic things like
importing data, plotting it, grouping it, all using the Wolfram language and it's interesting
constructs. I played with Logistic Regressions, Power Law Distributions, and even got the chance to
test the capabilities of it's Dimensionality Reduction features by Clustering TSNE results. Everything
from the language, to the documentation was professional and worked well out of the box. Like a push button
start for a hypercar, I knew things were happening under the hood, but the interaction was minimal and didn't
require more than a gesture to get the wheels moving.

Things were familiar seeing that I recently spent a few months doing all of my
computer science coursework in Julia, a language that touts itself as being "influenced" by
Mathematica, naturally because the mathematicans who designed Julia spent all their lives using Mathematica.
When I ran into a problem, I remembered to myself, "Nominal dynamic type system"
before I went down a foolish path of applying types to things I shouldn't and being
annoyed that I can't define a Monad Interface. Along with this,
concepts like macros raised it's head when the documentation mentioned "Everything is symbolic".
Translation: I can pattern match at the program level and do interesting things. More on
this later.

Essentially, I realized the language is fun. One of the larger hiccups I had was loading up a CSV dataset with missing values.
After some reading I realized, since the dataset is represented as a list of rows, where rows are lists
themselves, I could just pattern match over the rows and filter by rows that have Strings
and Numbers where they should be. Functional. Map. Filter. Fold. Some Haskell began to come
out...

## Crashing Over The Edge

And then I asked, "How can I apply a set of functions in concatenation?" I grew tired of
this...

{% highlight mathematica %}
LineListPlot[Filter[Transform[A]]]
{% endhighlight %}

and I wanted more like this...

{% highlight mathematica %}
LineListPlot $ Filter $ Transform $ A
{% endhighlight %}

Functors over a list is such a natural construct, so I wanted a Map function over lists.
I knew '/@' was my friend, but how do I get it to work? The answer was...

{% highlight mathematica %}
LineListPlot /@ Filter /@ Transform /@ {A}
{% endhighlight %}

Haskell developers know that with the right application of "Throwing some cash" into their functions, they can make
extremely complicated programs intuitive. Rightfully so, because the purpose of a professional software engineer is
to write code in a way that doesn't make my own head explode, or the heads of my colleages.
I learned I could write functions in an intuitive way in Wolfram, by simply adding an appropriate brackets and '/@' signs before the
starting variable, with occasional touches of ampersands.

At this point, this was the end of my interest in the language. Not because this was
deal breaker, but because I learned:

This is a tool for professional data scientists.

Things that seemed hard, seemed so easy, but things that seemed so easy, instantly became difficult.
This is the problem of languages that aren't general purpose.

It's just not what the language was designed to do.

## Occasional Drives

I am hopeful for Wolfram as a language. I wanted to test the language to see if it would be an interesting addition
to my tool-stack. Being someone heavily interested in software engineering, I wanted a way to explore
data without having to deal with the engineering overhead of managing software packages.
Much how mathematicians like to prove things to "prove to themselves they can do it, then
never worry about it again until you need to", for analytics work, I have yet to see the
return on investment of maintaining exploratory analytics systems, since they don't translate
to deployment well anyway and you'll likely need to rewrite it. Python notebook analysis can
be a useful prototype, but significant rewriting needs to be done to deploy, or integrate
into existing systems. Is it really worth the upfront development cost to build a fully modifiable
system just to do basic work? Probably not. I can at least say, my Python notebook analysis
typically stays put, and only if things are plausible do I translate it into something more useful like a web service or a package.

Can it compete with the likes of Tableau? Considering Tableau seems to only be a visualization tool for users coming
from Excel, I think it can. Tableau doesn't do it for me since I find GUI tools more invasive than code, especially if I want to reproduce actions
and analysis I've made previously with different data.
Along with this, API deployment of AI and ML code seems to be in the
pipeline, if not likely an extremely expensive option for teams that have significant funding to pay for it. I consider Julia as a strong alternative for users without the cash or company provisions,
especially if one wants to be able to deploy services that work fast, but I'm not sure if that
language is better or worse than Python, given the package ecosystem.

The roads in the informatica landscape are vast. Python. Julia. R. SAS. Scala. Java.
Sometimes you want to carry trash across
town. Other times, you want to dart through traffic on a scooter. Civics and Camrys cover
most daily use. Getting you from work, to class, to work with a good bit of protection and
modifications along the way.

For some people though, programming isn't a matter of getting from point A to point B. Some
people want to do things with a little more style...

gha_language: HTML


text:
# Soundtrack Controller
A background music controller for Unity3D using IoC; SoundtrackController observes project-specific "filters" to learn what music should play, and manages transitions.

AudioClips are not referenced directly, but instead are accessed through "Music Track Configuration" objects which exist in a scene hierarchy and couple a reference to an AudioClip with other metadata.

A description of our usage scenario, including the embedding strategy, appears at the end of this readme.
## Namespace
All classes are kept under the namespace NobleMuffins.SoundtrackPlus.

## The Soundtrack Controller prefab
Place this into the first scene that is loaded, or into any scene where you want the Soundtrack Controller to work.

No further configuration of this object is necessary.

This object carries a single MusicPlaybackController component. This component is a "singleton", which here means that only one will exist in the process. It will not create itself and must be placed, at least, into the first scene. If one is placed into every scene – you might want this for testing purposes – than new instances of MusicPlaybackController will destroy themselves if they find that a MusicPlaybackController is already present.
## Music Track Configuration
A Music Track Configuration couples a reference to an AudioClip with other metadata wanted by the soundtrack controller.

To create a new music track configuration in your project hierarchy, choose "Music Track Configuration" from the Create menu in your project hierachy window.

Currently, only one additional field is present; "Transition Type".
### Transition Type

If track A is currently playing, and we wish to transition to track B, than track B's "transition type" describes how this transition will occur. The types are as follows:

* FadePriorAndStart – The previous track will fade out before this track begins to play.
* Fade – Smoothly fade from the previous track to this one.
* HaltPriorAndStart – Any track currently playing will be halted immediately so that this track can start.

## class AbstractMusicFilter { … }
This class features an abstract method – CurrentMusicTrack { get; } – and one field; priority.

In order to learn which music track should be currently playing, MusicPlaybackController will poll the set of AbstractMusicFilters currently present in the scene. The filter that has both returns a non-null CurrentMusicTrack and has the highest priority decide what music track will play.

In order to control the music, you must create a project-specific subclass of AbstractMusicFilter and that subclass – or those subclasses – must answer the question "what music should currently be playing?"

Any number of these filters can exist on the scene at one time, and they can be persistent or not persistent, and can be both created and destroyed at runtime.

However, if one or more music filters exist simultaneously *with the same priority*, you will get unpredictable results.

## SingleTrackMusicFilter

A very basic implementation of AbstractMusicFilter.

This filter has a public field where you can assign a music track, and it will always return that.

## Our case
We're using this in a current project. I'll describe here each key point.

### Hierarchial Music Decisions

In a typical scene, either two or three music filters are used.

Attached to the player character is a "Hero Music Filter" which can map the user's location to a currently preferred music track. One room might be associated with music track X, which another is associated with music track Y.

In the scene itself is a separate music filter called ScriptControlledMusicFilter which has a **higher priority** than the Hero Music Filter, and provides a static interface where a cutscene script can request a particular track, request silence, or *relinquish control* so that authority is returned to the Hero Music Filter. (Relinquishing control is done simply by returning null for CurrentMusicTrack.) ScriptControlledMusicFilter.

### Simpler Scenes

In scenes which do not require sophisticated music selection, like the Map scene, we simply add a SingleTrackMusicFilter to that scene. Because the music playback controller persists between scenes, the music will transition as desired when a new scene is loaded.

### Embedding

Since the project is kept in a git repository, we can add Soundtrack Controller as a git submodule under Assets.

### Disentanglement

Scenes and scripts do not keep references to particular AudioClips, but instead refer to Music Track Configurations which are named by intent. One MTC might, for example, have the name "Desert Dungeon Exterior", and if at any point I want to change the audioclip used for that situation, I change it in the MTC, which exists only once in the project. References in scenes do not need to be altered.

repository: JoeCooper/SoundtrackController

repo_name: JoeCooper/SoundtrackController


text:
# React Network Diagrams [![Build Status](https://travis-ci.org/esnet/react-network-diagrams.svg?branch=master)](https://travis-ci.org/esnet/react-network-diagrams)

This repository contains an initial set of React circuit drawing and network mapping components which are used within the ESnet Portal, but are not tied to ESnet, or even to network visualization.

The mapping portion of this library is used in the public facing [ESnet Portal](http://my.es.net). The circuit diagrams code us used internally to track ESnet circuits in the ESDB.

Current features of the library include:

 * Circuit diagrams:
     - Basic
     - Concatenated
     - Parallel
 * Circuit couplers
 * Patch panel diagrams
 * Topology mapping
     - Higher level network traffic visualization
     - Linear, arc, bidirectional traffic and square edge types
 * Route rendering

Please browse the examples for a feel for the library, or read on to get started.

Getting started
---------------

The charts library is intended to be used with npm and the built into your project with something like webpack.

    npm install react-network-diagrams --save

Once installed, you can import the necessary components from the library:

    import { TrafficMap } from "react-network-diagrams";

You can then `render()` the traffic map in your component:

    <TrafficMap width={980} height={500} margin={50}
                topology={topo}
                traffic={traffic}
                edgeColorMap={edgeColorMap}
                edgeDrawingMethod="bidirectionalArrow"
                edgeThicknessMap={edgeThicknessMap}
                edgeShapeMap={edgeShapeMap}
                nodeSizeMap={nodeSizeMap}
                nodeShapeMap={nodeShapeMap}
                stylesMap={stylesMap}
                selection={mapSelection}
                onSelectionChange={this.handleSelectionChanged} />

See the examples for more information.

Examples
--------

To run the examples yourself you first need to run:

    npm install

This will install the development dependencies into your node_modules directory.

You can then start up the test server, as well as automatic source building, by doing:

    npm run start-website

And now, for the magic, point your browser to:

    http://localhost:8080/webpack-dev-server/

From now on, if you change the source code, webpack will rebuild the examples bundle and the browser will refresh itself. Errors will also be reported in the browser window.

Before commiting back, run:

    npm run build

repository: esnet/react-network-diagrams

gha_language: JavaScript

gha_license_id: NOASSERTION

repo_name: esnet/react-network-diagrams


text:
.checkout
=========

Project Features:
1. User registration
2. User authentication
3. Password and user name validation
4. Roles
5. Articles CRUD operations
6. Local image uploader
7. REST API services in JSON format.

To run the project localy please do the following steps:
1. Download the project.
2. Start MySQL.
3. Run the CMD Prompt in the project directory.
4. Enter "composer install" command.
5. When the dependencies are installed enter "php bin/console doctrine:database:create" command.
6. Enter "php bin/console doctrine:schema:update --force" command
7. Enter "php bin/console server:run" command and open the shown address.

REST API Documentation:
1. Get all articles: http://<IP_ADDRESS>:8000/api/article  -method "GET"
2. Get article by id: http://<IP_ADDRESS>:8000/api/article/{id}  -method "GET"
3. Update article by id: http://<IP_ADDRESS>:8000/api/article/{id}  -method "PUT" put body {"title":"","content":"","authorId":{id}}
4. Create article: http://<IP_ADDRESS>:8000/api/article/create  -method "POST"  post body {"title":"","content":"","authorId":{id}}
5. Delete article: http://<IP_ADDRESS>:8000/api/article/{id}  -method "DELETE"

repository: Dinkode/PHPSymfonyBlog

repo_name: Dinkode/PHPSymfonyBlog


text:
# TiCarousel Module

## Description

The TiCarousel module wraps the [iCarousel](https://github.com/nicklockwood/iCarousel)
library written by Nick Lockwood and provides a customizable, data-driven 3D carousel
view for Titanium apps.

TiCarousel is currently only available for iOS.

The reference section follows these conventions:

* Text in `code font` refer to module objects.  For example, database is a generic term
  but `database` refers to a TiCarousel object.
* Object functions are listed with parentheses and properties without.  Constants are
  implemented as read-only properties.

## Accessing the Module

To access this module from JavaScript, you would do the following:

	var TiCarousel = require("com.obscure.ticarousel");

The TiCarousel variable is a reference to the Module object.  You can create new carousel
views by calling `TiCarousel.createCarouselView()` with the appropriate options listed below.

## Examples

Create a simple carousel:

    var itemViews = [
      Ti.UI.createView({ height: 60, width: 60, backgroundColor: 'blue' }),
      Ti.UI.createView({ height: 60, width: 60, backgroundColor: 'yellow' }),
      Ti.UI.createView({ height: 60, width: 60, backgroundColor: 'red' }),
      Ti.UI.createView({ height: 60, width: 60, backgroundColor: 'green' }),
      Ti.UI.createView({ height: 60, width: 60, backgroundColor: 'gray' }),
    ];

    var carousel = TiCarousel.createCarouselView({
      carouselType: TiCarousel.CAROUSEL_TYPE_LINEAR,
      width: Ti.UI.FILL,
      height: 200,
      itemWidth: 68,
      numberOfVisibleItems: 5,
      views: itemViews
    });

    win.add(carousel);

## TiCarousel Reference

### Functions

**createCarouselView([Dictionary<com.obscure.CarouselView> parameters])** : com.obscure.CarouselView

Creates and returns an instance of a CarouselView.

* `parameters`: [Dictionary<com.obscure.CarouselView> parameters]

  Properties to set on a new object, including any defined by CarouselView except those marked
  not-creation or read-only.

### Constants

#### Carousel Type

* CAROUSEL\_TYPE\_LINEAR
* CAROUSEL\_TYPE\_ROTARY
* CAROUSEL\_TYPE\_INVERTED\_ROTARY
* CAROUSEL\_TYPE\_CYLINDER
* CAROUSEL\_TYPE\_INVERTED\_CYLINDER
* CAROUSEL\_TYPE\_WHEEL
* CAROUSEL\_TYPE\_INVERTED\_WHEEL
* CAROUSEL\_TYPE\_COVER\_FLOW
* CAROUSEL\_TYPE\_COVER\_FLOW2
* CAROUSEL\_TYPE\_TIME\_MACHINE
* CAROUSEL\_TYPE\_INVERTED\_TIME\_MACHINE
* CAROUSEL\_TYPE\_CUSTOM

## CarouselView

### Functions

**indexOfItemView(Ti.UI.View view)** : Number

Returns the index of the provided item view in the carousel.  This method only works
for item views that are visible; if the specified view is not visible, the method returns
null.

**indexOfItemViewOrSubview(Ti.UI.View view)** : Number

Returns the index of the provided item view or the item view containing the provided
view in the carousel.  If the item view is not visible, returns null.

**insertItemAtIndex(Number index, [Boolean animated])**

Inserts a new item into the carousel.  The new item must be in the `views` array prior
to calling this method.

**itemViewAtIndex(Number index)** : Ti.UI.View

Returns the visible item view with the provided index.  This method returns null if the
view at the specified index is not visible.

**offsetForItemAtIndex(Number index)** : Number

Returns the positive or negative offset of the specified item index in multiples of
`itemWidth` from the center position.

**reloadData()**

Reload all carousel items from the view array.  This function must be called
if the carousel needs to be refreshed due to changes to properties or the underlying
data.  Properties and methods that require a call to `reloadData()` will indicate
that in their documentation.

**reloadItemAtIndex(Number index, [Boolean animated])**

Reload the item view at the specified index.  If `animated` is true, the carousel will
cross-fade from the old item to the new item.

**removeItemAtIndex(Number index)**

Remove the item at the specified index from the carousel.  This does *not* remove the
item from the underlying view array, so a call to `reloadData()` will restore the view
to the carousel.

**scrollByNumberOfItems(Number count, Number duration)**

Scroll the carousel by a fixed distance.

* `count`: Number, the number of items to scroll.  Can be positive or negative.
* `duration`: Number, the duration of the scroll animation in seconds.

**scrollToIndex(Number index, [Dictionary options])**

Centers the carousel on the specified item.  For wrapped carousels, the view will
use the shortest route to scroll if the scroll is animated.  To control the direction
of the scroll or to scroll more than one full revolution, use **scrollByNumberOfItems()**.

* `index`: Number

   The index of the item to center in the carousel.

* `options`: [Dictionary]

   Dictionary with the following scroll options:

   * `animated`: Boolean, default true.
   * `duration`: Number, the duration of the scroll animation in seconds.

### Properties

**bounceDistance** : Number, read/write

The maximum distance the carousel will bounce when it overshoots either end, measured
in multiples of `itemWidth`.  This property only affects carousels which have the `wrap`
property set to false.

**bounces** : Boolean, read/write

If true, the carousel will bounce past the end and return.  This only affects carousels
which have the `wrap` property set to false.

**centerItemWhenSelected** : Boolean, read/write

If set to true, a tap on an item that is not currently centered will cause the carousel to
scroll that item to the center.  Default is true.

**clipsToBounds** : Boolean, read/write

If set to true, the carousel will not display items that fall outside of its own boundaries.
Default is false.

**contentOffset** : Dictionary, read/write

Adjusts the center of the carousel without changing the perspective.  This has the
effect of moving the carousel without changing the viewpoint.  The dictionary
should contain the following values:

* `x` the x offset of the center of the carousel, default 0.0
* `y` the y offset of the center of the carousel, default 0.0

**currentItemIndex** : Number, read-only

The index of the currently-centered item in the carousel.

**currentItemView** : Ti.UI.View, read-only

The view that is currently centered in the carousel.

**decelerationRate** : Number, read/write

The rate at which the carousel decelerates when flicked.  Value should be between 0.0
(carousel stops immediately) and 1.0 (carousel continues indefinitely until it reaches
the end).

**ignorePerpendicularSwipes** : Boolean, read/write

If set to true, the carousel will ignore swipe gestures that are perpendicular to the
direction of scrolling. This is useful for item views that scroll within the carousel.
Default is true.

**itemWidth** : Number, read-write

The display width of the items in the carousel.  If a value is not provided, it is determined
from the width of the first item view in the `views` array.  To add spacing between carousel
items, set this property to a value greater than your item view width.

**numberOfItems** : Number, read-only

The number of visible items in the carousel.

**perspective** : Number, read/write

Tweaks the perspective foreshortening effect of the 3D carousel views.  Should be a negative
number between 0 and -0.01; default is -0.005.

**scrollEnabled** : Boolean, read/write

Enable user scrolling of the carousel.  Default is true.

**scrollOffset** : Number, read-only

The current offset in pixels of the carousel; can be used to position other screen elements
while the carousel is scrolling.

**scrollSpeed** : Number, read/write

A multiplier for the speed of scrolling when the user flicks the carousel.  Default is 1.0.

**scrollToItemBoundary** : Boolean, read/write

When true, the carousel will automatically scroll to the nearest item boundary.  When set to
false, the carousel will stop wherever scrolling ends, even if it isn't aligned with an item
view.

**stopAtItemBoundary** : Boolean, read/write

When set to true, the carousel will come to rest at an exact item boundary when scrolled.  If
set to false, the carousel will stop scrolling naturally and, if `scrollToItemBoundary` is true,
scroll back or forward to the nearest boundary.

**transformOptions** : Dictionary, read/write

Get or set transform options for the built-in carousel types.  See the "Transform Options"
section below for a list of which options can be set for each carousel type.

**type** : Number, read/write

The carousel display type.  Must be one of the constants defined in the `TiCarousel`
object.

**vertical** : Boolean, read/write

Toggles whether the carousel is displayed horizontally (default) or vertically.

**viewpointOffset** : Dictionary, read/write

Adjusts the camera viewpoint relative to the carousel items.  Where `contentOffset` moves
the carousel in space, `viewpointOffset` moves the user in space.  This has the effect of
changing the perspective of the carousel. The dictionary should contain the following values:

* `x` the x offset of the center of the viewpoint, default 0.0
* `y` the y offset of the center of the viewpoint, default 0.0

**wrap** : Boolean, read/write

When `true`, the carousel "wraps around", displaying the first item again after the last
item.

### Events

**scroll** : fired when the carousel ends an animated scroll.

**change** : fired whenever the carousel scrolls far enough for the currentItemIndex property
to change. It is called regardless of whether the item index was updated programatically or
through user interaction.

**select** : fired if the user taps any carousel item view, including the currently selected view.
This event will not fire if the user taps a control within the currently selected view.

## Transform Options

Several of the built-in transforms can be customized using the transform options dictionary.
Rotary and cylinder carousels can be adjusted using the `arc` and `radius` properties.
For these carousel types, `arc` controls the curvature of the receding views on either side
of the center and `radius` the width of the carousel.  Wheel carousels are also customized
with `arc` and `radius`, though the effect is as if you are looking at a cylinder carousel
from above.  CoverFlow and TimeMachine-like carousels can be customized using the `tilt`
and `spacing` properties.  Finally, the bump carousel can be customized with the `yoffset`
and `zoffset` properties.  The example app contains a screen where you can try out different
values for these properties.

## Custom Transforms

*IMPORTANT NOTE*

Custom transforms should be considered experimental and are not recommended for production
use.  Use the transform options to customize an existing carousel type if possible before
trying the custom transform feature.  If you really, really need a new, unique carousel type,
consider using the custom transform feature to prototype it, then request that your
transform be added to TiCarousel by filing an issue on Github.

* * *

In addition to the standard set of carousel types, TiCarousel lets you create your own custom
carousel types.  A custom carousel type is created by specifying of a set of 3D transforms to
apply to the item views based on their position in the carousel.  In addition, can control the
transparency of the item view to "fade out" based on the view's position.

The custom transform functions are implemented in your Titanium JavaScript file.  To use a custom
carousel type, create a new carousel object with a `carouselType` property set to
`CAROUSEL_TYPE_CUSTOM`:

    var carousel = TiCarousel.createCarouselView({
      carouselType: TiCarousel.CAROUSEL_TYPE_CUSTOM,
      width: Ti.UI.FILL,
      height: 200,
      itemWidth: 68,
      numberOfVisibleItems: 5,
    });

Next, create a function that returns one or more transformation descriptors.  A transformation
descriptor is a JavaScript object with a `type` property containing the name of the transform and
a `values` property containing an array of numbers whose meaning depends on the transform type.
The following descriptor types are currently supported:

* **translate** move the view without changing its orientation.  The values array must contain:
  1. delta-x : positive or negative change in the x coordinate
  2. delta-y : positive or negative change in the y coordinate
  3. delta-z : positive (away from view) or negative (towards view) change in the z coordinate
* **rotate** rotation of the view around the specified point.  The values array must contain:
  1. angle : the angle of rotation in radians
  2. center-x : the center of rotation x coordinate
  2. center-y : the center of rotation y coordinate
  2. center-z : the center of rotation z coordinate
* **scale** change the size of the view.  The values array must contain:
  1. scale-x : the scale multiplier for the x size
  2. scale-y : the scale multiplier for the y size
  3. scale-z : the scale multiplier for the z size

For example, the Linear carousel type would be implemented as follows:

    var itemWidth = carousel.itemWidth;

    function transform(offset) {
      return [
        { type: 'translate', values: [ offset * itemWidth, 0, 0 ] }
      ];
    }

    carousel.itemTransformForOffset = transform;

The transform function receives a parameter named `offset` which is the current positive or negative
offset of the view from the center of the carousel.

*Transform functions run in an isolated JavaScript context!* This means that you cannot reference
the Titanium API or any objects that were created in your application's context.  Primitive values
are fine, however, which is why we are setting a primitive named `itemWidth` in the example
above.

If you want to change the alpha transparency of the item view based on the offset, create a function
that returns a value between 0.0 and 1.0 for each item based on offset.  Here's an alpha function that
fades views which are more than one unit away from center to 60% opacity:

    function alpha(offset) {
      var absoffset = Math.abs(offset);
      return absoffset < 1.0 ? (1.0 - 0.4 * absoffset) : 0.6;
    }

    carousel.itemAlphaForOffset = alpha;

**Important Note**

Custom transform callbacks are expensive and are not recommended for very large carousels.  If
you have a transform type that you would like to have implemented in native code, please file an
issue describing the transform or, better yet, fork the code and send a pull request.

## Author

Paul Mietz Egli<EMAIL_ADDRESS>
based on iCarousel by Nick Lockwood

## License

Apache License 2.0.

repository: csemrm/TiCarousel

repo_name: csemrm/TiCarousel


text:
---
layout: post
title:      "Increment (++) and Decrement (--) Operator Prefix vs. Postfix"
date:       2021-02-22 03:36:18 +0000
permalink:  increment_and_decrement_--_operator_prefix_vs_postfix
---

We all love shortcuts in programming like the ones we are about to cover. The increment operator `++` and the decrement operator `--` is the fastest way to  increase or decrease the value of a variable by 1 respectively, in languages like JavaScript, Java, C++, etc. Less typing, Happy us :).

Let's look at an example to see how they work:

```java

// Suppose we have the following integer variable

in num = 0;

++num;     // num is now 1
num++;    // num is now  2
--num;     // num went back to  1
num--;    // num is back to 0

```

This is too easy Wriiiigth.... Where is the catch? Well an important slight  difference I recently learned about these operators when they are used as prefix vs postfix.

## So What is the Difference? Prefix ++num vs. Postfix num++

Up until now, these looked like a syntactic preference to me. However, there's a difference in the return value of each expression.

* When the ++ operator is used as prefix like in `++num`,  the value of num is incremented by 1 then, it returns the new value.
* When  the ++ operator is used as postfix like in `num++`, the original value of num is returned first then, num is incremented by 1.

The same logic goes for the` -- ` operator , with the exception that the value is decreased by one.

Let's see the use of `--` as prefix and postfix in Java :

```java

class Decrement {
    public static void main(String[] args) {
        int num1 = 10, num2 = 10;

        // num1 is displayed
        // Then, num1 is decreased to 9.
        System.out.println(num1--);

        // num2 is decreased to 9
        // Then, num2 is displayed
        System.out.println(--num2);
    }
}

```

The output of this code will be:

```

10
9

```

Now in your program if you want to use the return value of the decrement or increment operator, you know how to avoid getting non desired output.

That's it for this post! Now, spread your newfound knowledge to the world!

Until next time,

Happy Coding!!!

extension: markdown


text:
# Pure Provider Architecture

In this example the creator of the Provider package [Remi Rousselet](https://github.com/rrousselGit) gives us an example of how to remove get_it from the architecture and use the provider package only.

The code is not complete, but it shows you the basic idea of how you can use proxy providers to setup service injection in your app using the provider package.

repository: arpit-absyadav/flutter-tutorials

repo_name: arpit-absyadav/flutter-tutorials


text:
# Contributing

We love pull requests from everyone. By participating in this project, you agree
to abide by the axax [code of conduct].

[code of conduct]: ./CODE_OF_CONDUCT.md

Make sure you have a recent version of nodejs (10.x+)

Fork the repo:

    git clone git@github.com:jamiemccrindle/axax.git

Set up your machine:

    yarn install

Make sure the tests pass:

    yarn lint
    yarn test

Make your change.
Write tests.
Update the [API documentation](./docs/API.md)
We use prettier to format the code.
Make the tests pass:

    yarn lint
    yarn test

Write a good commit message.
Push to your fork.
[Submit a pull request][pr].

[pr]: https://github.com/jamiemccrindle/axax/compare/

Wait for us.
We try to at least comment on pull requests within two business days.
We may suggest changes.

repository: jamiemccrindle/axax

gha_language: TypeScript

repo_name: jamiemccrindle/axax


text:
---
title: Startup -- Week 11-12 (2019/10/28 - 2019/11/09)
---
## Weekly Summary

This is week 11 to week 12,  we finished v0.2 release now. And we are going to do v0.3 in the next three weeks.

###Technically:

- Go on to learn Golang and refactor code to make the code maintainable and add more UT stuff.
- Finished design pattern book for the first time.
- Go design pattern not finished yet.
- Go through Gin / Lock / Redis Pipeline stuff.
- Moving forward, I will work on Terraform to automatic infra resource.
- Use ELK to collect / display metrics.

###Non-Technically:

- Manage your time with multi job running.
- Do it best or do it OK for now.
- Keep learning and summary.
- How to hire correct people in start up?
- What is your OKR for different release?


text:
# SoVisual
A tool for visualizing social network and finding potential friends

![](assets/image-20210922235251646.png)

## Featrues

- Interactive Graph

  ![Ineractive_1](assets/Ineractive_1.gif)

- Find one’s direct friends and potential friends (friends of one’s friends).

- Rank potential friends by their importance of connectivity.

![Ineractive_2](assets/Ineractive_2.gif)

- Load various datasets

![Load_Datasets](assets/Load_Datasets.gif)

repository: ALonelySheep/SoVisual

repo_name: ALonelySheep/SoVisual


text:
# karma-edge-launcher

[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/karma-runner/karma-edge-launcher)
 [![npm version](https://img.shields.io/npm/v/karma-edge-launcher.svg?style=flat-square)](https://www.npmjs.com/package/karma-edge-launcher) [![npm downloads](https://img.shields.io/npm/dm/karma-edge-launcher.svg?style=flat-square)](https://www.npmjs.com/package/karma-edge-launcher)

[![Build Status](https://img.shields.io/travis/karma-runner/karma-edge-launcher/master.svg?style=flat-square)](https://travis-ci.org/karma-runner/karma-edge-launcher) [![Build Status](https://img.shields.io/appveyor/ci/nickmccurdy/karma-edge-launcher-ui7ax/master.svg?style=flat-square)](https://ci.appveyor.com/project/nickmccurdy/karma-edge-launcher-ui7ax) [![Dependency Status](https://img.shields.io/david/karma-runner/karma-edge-launcher.svg?style=flat-square)](https://david-dm.org/karma-runner/karma-edge-launcher) [![devDependency Status](https://img.shields.io/david/dev/karma-runner/karma-edge-launcher.svg?style=flat-square)](https://david-dm.org/karma-runner/karma-edge-launcher#info=devDependencies)

> Launcher for Microsoft Edge.

This is a fork of the [launcher for Internet Explorer](https://github.com/karma-runner/karma-ie-launcher). Originally located at [nickmccurdy/karma-edge-launcher](https://github.com/nickmccurdy/karma-edge-launcher).

Based on [edge-launcher](https://github.com/MicrosoftEdge/edge-launcher).

## Status
In development, with pre-1.0 versions now available on the npm registry.

## Installation

The easiest way is to keep `karma-edge-launcher` as a devDependency, by running

```bash
npm install karma-edge-launcher --save-dev
```

## Configuration
```js
// karma.conf.js
module.exports = function(config) {
  config.set({
    browsers: ['Edge']
  });
};
```

You can pass list of browsers as a CLI argument too:
```bash
karma start --browsers Edge
```

----

For more information on Karma see the [homepage].

[homepage]: http://karma-runner.github.com

repository: karma-runner/karma-edge-launcher

repo_name: karma-runner/karma-edge-launcher


text:
# Wirebot for UNIX

## Introduction

Wirebot is a chat robot for the Wired 2.0 protocol. It connects to a Wired server and interacts with other users following rules and command setup by the administrator. Wirebot is a kind of mix between Wire and Wired, mainly because it is a client program running as a daemon.

## Features

* Support for Wired 2.0 protocol
* XML-based triggers dictionary
* Custom chat commands
* Directory watchers
* Many more...

## How it works

Wirebot is basically a client, that receives/sends/replies messages from/to the server. With Wirebot you can define rules that trigger on received messages to execute a corresponding operation, like for example sending a message back. This I/O system is combined to features like multiple-random-outputs, delays or repeats to create an interactive engine for a chat robot.

The bot also respond to chat commands, thus users can directly execute some operations on-demand. See "Commands " below in the Customize section.

## Install Wirebot (UNIX-like systems)

This tutorial explains how to install and run Wirebot on an UNIX-like operating system. (Linux, BSD, OSX, etc)

### Requirements

* Git (apt-get install git)
* libxml2 (apt-get install libxml2-dev)
* GNU readline (apt-get install libreadline-dev)
* GNU libiconv (apt-get install libiconv-dev)
* OpenSSL (apt-get install libssl-dev)
* cURL (apt-get install curl libcurl4-openssl-dev)

Be sure to have these components installed on your system, they are dependencies of libwired and Wirebot.

### Install from the repository

1. Clone Wiredbot repository:

		git clone https://github.com/profdrluigi/wirebot.git

2. Move into the cloned directory:

		cd wirebot/

3. Add git submodules (here, libwired):

		git submodule update --init --recursive

4. Configure the package:

		./configure

5. Compile both libwired and Wirebot

		make

	*Use "gmake" on non-GNU systems*

6. Install Wirebot:

		sudo make install

### Using Wirebot

#### Run Wirebot

1. Run it a first time:

		wirebot -D -d

	*"-D" is to not daemonize the process*

	*"-d" is to enable debug mode*

	This will launch Wirebot a firt time and it will try to connect to localhost:4875 with "admin" login and no password. Wirebot also created default config files (~/.wirebot/).  Now kill it (^C), and edit the Wirebot config:

		nano ~/.wirebot/wirebot.conf

	Edit the configuration file for your needs, mainly "hostname", "port", "login" and "password" field.

2. Try to connect again:

		wirebot -D -d

	If everything is OK, you should see the following output in the shell:

		****% wirebot -D -d
		Info: Reading /home/****/.wirebot/wirebot.conf
		Debug:   nick = WireBot
		Debug:   status = Jedi in the Matrix
		Debug:   auto reconnect = yes
		Debug:   reconnect on kick = no
		Debug:   icon path = icon.png
		Debug:   hostname = localhost
		Debug:   port = 4871
		Debug:   login = admin
		Debug:   password = ********
		Info: Reading /home/****/.wirebot/wirebot.xml robot
		Info: Writting PID file: /home/****/.wirebot/
		Info: Connecting to localhost...
		Info: Trying ::1 at port 4871...
		Info: Connected using AES/256 bits, logging in...
		Info: Logged in, welcome to Wired Server

#### Run Wirebot, as a daemon

1. Kill it again (^C) and now try to launch it as e daemon:

		/usr/local/bin/wirebot

2. To stop it, use the following command:

		kill `cat ~/.wirebot/wirebot.pid`

### Customize Wirebot

#### Change the icon

You can update the icon without having to restart the process. Add an "icon.png" file in `~/.wirebot/` directory, and type the following command in the public chat (or private message) where your bot is connected:

	!reload

#### Manage Wirebot dictionary

Wirebot chat-bot engine is based on a XML dictionary located at `~/.wirebot/wirebot.xml` by default. In this file, you can found every rules and triggers the bot know. The engine is based on input/output routing of Wired protocol messages, and currenty support two kind your meta-event named `rules` and `commands`.

If you modified the dictionary, you have to send a `!reload` to the bot for changes taking effect.

##### Rules

The shorter way is to take an example:

 	<rules>
		<rule permissions="admin,guest" activated="true">
		 	<input message="wired.chat.say" comparison="contains" sensitive="false">hello</input>

		 	<output message="wired.chat.say" delay="1">Hey @INPUT_NICK. :-)</output>
		 	<output message="wired.chat.say" delay="1">Hello @INPUT_NICK. :-)</output>
		 	<output message="wired.chat.say" repeat="3">:-)</output>
		 </rule>
	</rules>

**Definition:**

* permissions: User logins able to trigger this rule, use "any" for all users.
* activated: Use "true" if the rule is activated, "false" if not.
* inputs:
	* message: The input message name referring to the Wired specifications.
	See "currently supported messages" below.
	* comparison: The method used to match the input string.
	* sensitive: Use "true" for sensitive matching, "false" otherwise.
* outputs:
	* message: The output message name referring to the Wired specifications.
	* delay: Set a delay before executing the output.
	* repeat: Repeat output action as many time as specified.

##### List of currently supported input messages

* wired.chat.say
* wired.chat.me
* wired.message.message
* wired.message.broadcast
* wired.chat.user_join
* wired.chat.user_leave

##### List of currently supported output messages

* wired.chat.say
* wired.chat.me
* wired.message.message
* wired.message.broadcast

##### Commands

TBD

#### Watchers

Watchers are triggers that launch on file changes. A watcher observes a directory using the subscribtion system of the Wired 2.0 protocol and executes operations defined into the XML bot dictionary.

TBD

### Mac Users

If you are a Mac user, have a look to [WireBot for Mac](http://wired.read-write.fr/products/wire-bot/). It provides a binary version for OSX and a graphical user interface to edit dictionnary file. [COming soon]

## Licence

Copyright (c) 2011-2012 Rafaël Warnault. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

repository: nark/wirebot

gha_language: Roff

repo_name: nark/wirebot


text:
---
layout: post
cover: 'assets/images/clim2.jpg'
title: Climate Change Game
date: 2018-4-18 11:05:00
tags: climategame ideas
author: Sabina
---

This is an idea that I conceived about a game meant to discuss climate change. This documentary was my inspiration.

Climate-Change: The Reality

Part 1: The Game's Outline

This game will be a subtle commentary on the effects of climate change. As you progress the character through the polluted world, the condition of the environment will gradually begin to improve as the player completes each new task and follows through the plot.

At intermittent points, there will be subtle hints/drops about the improving state of the world. For example, after the player completes X number of tasks, he/she will pass by a radio or TV where he hears things like,

"Beef sales have been steadily decreasing as consumers veto animal products."

"Congress has just voted for a tax on carbon!"

These suggestive tidbits will resonate with the player, and by the end of the game, he/she will be more aware of the issue we're currently facing as a society.

Additionally, the player may begin to notice smog clearing, the coastal water becoming clearer, or more animals about. By the end of the game, these gradual changes will have altered the entire state of the city (implying the world has changed, as well) and having restored it to a beautiful, green state.

Part 2: The Game

This is a loose breakdown of the game's objective and atmosphere.

Characters:

Main Character

Probably a humanoid of sorts. I can't imagine the figure being detailed, but rather just a vague silhouette of a stick-person.

Setting:

Probably a sick perversion of the world we have now. Everything will have become very polluted and industrial, meaning that most of the developed world will look like modern-day New Dehli, or Congo. A large portion of NPCs will be wearing very covered, conservative clothing and face masks (like in Beijing). There will be very few animals around, such as birds or stray pets, and all vegetation will be withered. The animals that are shown will be ugly and deteriorated as a result of littering and such. There will be lots of litter about.

The specific location of the game will be on a coastal city, however, with a bustling port and impressive skyline, like Boston. (See Concept Art).

Gameplay:

The player will have to complete a series of decision-making tasks that, unbeknownst to them, are actually positively affecting the environment and their health.

For example, the player will have to go have a checkup, where the doctor tells them about their high cholesteral as a result of meat consumption, leading to the player to not only becoming more wary about their diet, but also about how badly the meat industry damages the ecosystem.

In another instance, the player will need to go grocery shopping. However, they have very little money, and is not able to buy meats or cheese, just fresh produce, that begins them on a path of healthier, sustainable living.

Following this, the player will have to visit someone's house, and they get the choice of walking or taking a "green bus" as opposed to a vehicle. On the way, there will be pop-ups of facts and statistics pertaining to the high levels of pollution from fossil-fuel based transportation.

Details/Ideas:

The start screen will be a fly-over of the poulluted city and some detailed shots of various parts of the city. Then, we will zoom in to a single green sprout blooming from a park or something, inspiring hope for what could be.

For the first part of the game, there will be lots of vehicles, and you will see them all emitting noxious smoke and pollution.

The soundtrack for the beggining of the game will be slow, dreary instrumental music (Think of "Elegy to the Arctic" or "Sad Cello Music" ). In the end, it will be cheery instumental music instead (Think of "The Prime Minister's Love Theme" or the latter part of "Arrival of The Birds".)

If the game gets rather advanced, I may have two paths the player can take to alter the state of the world. In this instance, the "base world" will become that of an averagely-polluted American city, like Houston or Boston. The player will then be able to make decisions in-game to improve the state of the environment or completely destroy it. Regardless of the path one chooses, each route will be very educational about green practices.

The credits screen will undoubtedely be "Kisses and Cake".

Concept Art

I'd like to think that the visual style will be somewhat similar to the flat, simple style of @tamagotchi44's game, which you can see concept art of on his Twitter.

I also take stylistic inspiration from games like Journey.

<amp-img src="{{ site.baseurl }}assets/images/imp1.png" width="500" height="350" layout="responsive" alt="" class="mb3"></amp-img>
<amp-img src="{{ site.baseurl }}assets/images/imp2.png" width="500" height="350" layout="responsive" alt="" class="mb3"></amp-img>
<amp-img src="{{ site.baseurl }}assets/images/imp3.jpg" width="500" height="350" layout="responsive" alt="" class="mb3"></amp-img>
<amp-img src="{{ site.baseurl }}assets/images/imp4.jpg" width="500" height="350" layout="responsive" alt="" class="mb3"></amp-img>
<amp-img src="{{ site.baseurl }}assets/images/imp5.gif" width="500" height="150" layout="responsive" alt="" class="mb3"></amp-img>

repository: techiesabina/game

repo_name: techiesabina/game


text:
---
title: "sanitize.proto"
weight: 5
---

<!-- Code generated by solo-kit. DO NOT EDIT. -->

### Package: `envoy.config.filter.http.sanitize.v2`
#### Types:

- [Sanitize](#sanitize)
- [SanitizePerRoute](#sanitizeperroute)

##### Source File: [github.com/solo-io/gloo/projects/gloo/api/external/envoy/extensions/extauth/sanitize.proto](https://github.com/solo-io/gloo/blob/main/projects/gloo/api/external/envoy/extensions/extauth/sanitize.proto)

---
### Sanitize

```yaml
"headersToRemove": []string
"customAuthServerName": string

```

| Field | Type | Description |
| ----- | ---- | ----------- |
| `headersToRemove` | `[]string` |  |
| `customAuthServerName` | `string` | The name of the custom ext auth server This is only set in the case where multiple auth servers exist. |

---
### SanitizePerRoute

```yaml
"customAuthServerName": string

```

| Field | Type | Description |
| ----- | ---- | ----------- |
| `customAuthServerName` | `string` | The name of the custom ext auth server This is only set in the case where multiple auth servers exist. |

<!-- Start of HubSpot Embed Code -->
<script type="text/javascript" id="hs-script-loader" async defer src="//js.hs-scripts.com/5130874.js"></script>
<!-- End of HubSpot Embed Code -->

repository: solo-io/gloo

gha_language: Go

repo_name: solo-io/gloo