text:
# road-safety-data-supplier
Entry for GovHack 2021 QLD Road Safety challenge.

## Setup instructions

In order to use this application correctly, one must put the dataset available at [QLD Open Data](https://www.data.qld.gov.au/dataset/crash-data-from-queensland-roads/resource/e88943c0-5968-4972-a15f-38e120d72ec0) in the directory `./road_safety_api/road_safety_model/`. The file must be named `1_crash_locations.csv`

Install the dependencies for this project using `pip install -r requirements.txt`.

repository: krynj-dev/road-safety-data-supplier

repo_name: krynj-dev/road-safety-data-supplier


text:
# IntersightClient::ComputePhysicalAllOf

## Properties

| Name | Type | Description | Notes |
| ---- | ---- | ----------- | ----- |
| **class_id** | **String** | The fully-qualified name of the instantiated, concrete type. This property is used as a discriminator to identify the type of the payload when marshaling and unmarshaling data. The enum values provides the list of concrete types that can be instantiated from this abstract type. |  |
| **object_type** | **String** | The fully-qualified name of the instantiated, concrete type. The value should be the same as the 'ClassId' property. The enum values provides the list of concrete types that can be instantiated from this abstract type. |  |
| **admin_power_state** | **String** | The desired power state of the server. | [optional][readonly] |
| **alarm_summary** | [**ComputeAlarmSummary**](ComputeAlarmSummary.md) |  | [optional] |
| **asset_tag** | **String** | The user defined asset tag assigned to the server. | [optional][readonly] |
| **available_memory** | **Integer** | The amount of memory available on the server. | [optional][readonly] |
| **bios_post_complete** | **Boolean** | The BIOS POST completion status of the server. | [optional] |
| **fault_summary** | **Integer** | The fault summary for the server. | [optional] |
| **hardware_uuid** | **String** | The universally unique hardware identity of the server provided by the manufacturer. | [optional] |
| **kvm_ip_addresses** | [**Array<ComputeIpAddress>**](ComputeIpAddress.md) |  | [optional] |
| **management_mode** | **String** | The management mode of the server. * `IntersightStandalone` - Intersight Standalone mode of operation. * `UCSM` - Unified Computing System Manager mode of operation. * `Intersight` - Intersight managed mode of operation. | [optional][default to 'IntersightStandalone'] |
| **memory_speed** | **String** | The maximum memory speed in MHz available on the server. | [optional][readonly] |
| **mgmt_ip_address** | **String** | Management address of the server. | [optional] |
| **num_adaptors** | **Integer** | The total number of network adapters present on the server. | [optional][readonly] |
| **num_cpu_cores** | **Integer** | The total number of CPU cores present on the server. | [optional][readonly] |
| **num_cpu_cores_enabled** | **Integer** | The total number of CPU cores enabled on the server. | [optional][readonly] |
| **num_cpus** | **Integer** | The total number of CPUs present on the server. | [optional][readonly] |
| **num_eth_host_interfaces** | **Integer** | The total number of vNICs which are visible to a host on the server. | [optional][readonly] |
| **num_fc_host_interfaces** | **Integer** | The total number of vHBAs which are visible to a host on the server. | [optional][readonly] |
| **num_threads** | **Integer** | The total number of threads the server is capable of handling. | [optional][readonly] |
| **oper_power_state** | **String** | The actual power state of the server. | [optional][readonly] |
| **oper_reason** | **Array<String>** |  | [optional] |
| **oper_state** | **String** | The operational state of the server. | [optional][readonly] |
| **operability** | **String** | The operability of the server. | [optional][readonly] |
| **platform_type** | **String** | The platform type of the registered device - whether managed by UCSM or operating in standalone mode. | [optional] |
| **service_profile** | **String** | The distinguished name of the service profile to which the server is associated to. It is applicable only for servers which are managed via UCSM. | [optional][readonly] |
| **total_memory** | **Integer** | The total memory available on the server. | [optional][readonly] |
| **user_label** | **String** | The user defined label assigned to the server. | [optional][readonly] |
| **uuid** | **String** | The universally unique identity of the server. | [optional][readonly] |
| **boot_cdd_devices** | [**Array<BootCddDeviceRelationship>**](BootCddDeviceRelationship.md) | An array of relationships to bootCddDevice resources. | [optional] |
| **boot_device_boot_security** | [**BootDeviceBootSecurityRelationship**](BootDeviceBootSecurityRelationship.md) |  | [optional] |
| **boot_hdd_devices** | [**Array<BootHddDeviceRelationship>**](BootHddDeviceRelationship.md) | An array of relationships to bootHddDevice resources. | [optional] |
| **boot_iscsi_devices** | [**Array<BootIscsiDeviceRelationship>**](BootIscsiDeviceRelationship.md) | An array of relationships to bootIscsiDevice resources. | [optional] |
| **boot_nvme_devices** | [**Array<BootNvmeDeviceRelationship>**](BootNvmeDeviceRelationship.md) | An array of relationships to bootNvmeDevice resources. | [optional] |
| **boot_pch_storage_devices** | [**Array<BootPchStorageDeviceRelationship>**](BootPchStorageDeviceRelationship.md) | An array of relationships to bootPchStorageDevice resources. | [optional] |
| **boot_pxe_devices** | [**Array<BootPxeDeviceRelationship>**](BootPxeDeviceRelationship.md) | An array of relationships to bootPxeDevice resources. | [optional] |
| **boot_san_devices** | [**Array<BootSanDeviceRelationship>**](BootSanDeviceRelationship.md) | An array of relationships to bootSanDevice resources. | [optional] |
| **boot_sd_devices** | [**Array<BootSdDeviceRelationship>**](BootSdDeviceRelationship.md) | An array of relationships to bootSdDevice resources. | [optional] |
| **boot_uefi_shell_devices** | [**Array<BootUefiShellDeviceRelationship>**](BootUefiShellDeviceRelationship.md) | An array of relationships to bootUefiShellDevice resources. | [optional] |
| **boot_usb_devices** | [**Array<BootUsbDeviceRelationship>**](BootUsbDeviceRelationship.md) | An array of relationships to bootUsbDevice resources. | [optional] |
| **boot_vmedia_devices** | [**Array<BootVmediaDeviceRelationship>**](BootVmediaDeviceRelationship.md) | An array of relationships to bootVmediaDevice resources. | [optional] |
| **mgmt_identity** | [**EquipmentPhysicalIdentityRelationship**](EquipmentPhysicalIdentityRelationship.md) |  | [optional] |
| **vmedia** | [**ComputeVmediaRelationship**](ComputeVmediaRelationship.md) |  | [optional] |

## Example

```ruby
require 'intersight_client'

instance = IntersightClient::ComputePhysicalAllOf.new(
  class_id: null,
  object_type: null,
  admin_power_state: null,
  alarm_summary: null,
  asset_tag: null,
  available_memory: null,
  bios_post_complete: null,
  fault_summary: null,
  hardware_uuid: null,
  kvm_ip_addresses: null,
  management_mode: null,
  memory_speed: null,
  mgmt_ip_address: null,
  num_adaptors: null,
  num_cpu_cores: null,
  num_cpu_cores_enabled: null,
  num_cpus: null,
  num_eth_host_interfaces: null,
  num_fc_host_interfaces: null,
  num_threads: null,
  oper_power_state: null,
  oper_reason: null,
  oper_state: null,
  operability: null,
  platform_type: null,
  service_profile: null,
  total_memory: null,
  user_label: null,
  uuid: null,
  boot_cdd_devices: null,
  boot_device_boot_security: null,
  boot_hdd_devices: null,
  boot_iscsi_devices: null,
  boot_nvme_devices: null,
  boot_pch_storage_devices: null,
  boot_pxe_devices: null,
  boot_san_devices: null,
  boot_sd_devices: null,
  boot_uefi_shell_devices: null,
  boot_usb_devices: null,
  boot_vmedia_devices: null,
  mgmt_identity: null,
  vmedia: null
)
```

repository: xlab-si/intersight-sdk-ruby

branch_name: refs/heads/main

extension: md

gha_language: Ruby

license_type: permissive

repo_name: xlab-si/intersight-sdk-ruby


text:
# Chapter 11: Learning from the Environment with Reinforcement

Get the data:

    pip install gym
    pip install gym[atari]

Install the requirements:

    conda install --file requirements.txt

Test the OpenGym API:

    python 0-gym-api.py

Train the model on 16 cores:

    python 1-train.py --game=Breakout-v0 --processes=16

Play the game with the learned model:

    python 2-play.py --game=Breakout-v0 --model=model-Breakout-v0-35750000.h5

license: MIT

branch_name: refs/heads/master

gha_language: Python


text:
Here's the latest documentation on Laravel 5.3 Notifications System:

https://laravel.com/docs/master/notifications

# 46Elks notification channel for Laravel

[![Latest Version on Packagist](https://img.shields.io/packagist/v/laravel-notification-channels/46Elks.svg?style=flat-square)](https://packagist.org/packages/laravel-notification-channels/46Elks)
[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE.md)
[![Build Status](https://img.shields.io/travis/laravel-notification-channels/46Elks/master.svg?style=flat-square)](https://travis-ci.org/laravel-notification-channels/46Elks)

[![Quality Score](https://img.shields.io/scrutinizer/g/laravel-notification-channels/46Elks.svg?style=flat-square)](https://scrutinizer-ci.com/g/laravel-notification-channels/46Elks)
[![Code Coverage](https://img.shields.io/scrutinizer/coverage/g/laravel-notification-channels/46Elks/master.svg?style=flat-square)](https://scrutinizer-ci.com/g/laravel-notification-channels/46Elks/?branch=master)
[![Total Downloads](https://img.shields.io/packagist/dt/laravel-notification-channels/46Elks.svg?style=flat-square)](https://packagist.org/packages/laravel-notification-channels/46Elks)

This package makes it easy to send notifications using [46Elks](https://www.46elks.com) with Laravel 5.3.

46Elks has a whole bunch of phone oriented services. This package takes care of:
* SMS

With more endpoints to come. Feel free to contribute.

## Contents

- [Installation](#installation)
	- [Setting up the 46Elks service](#setting-up-the-46Elks-service)
- [Usage](#usage)
	- [Available Message methods](#available-message-methods)
- [Changelog](#changelog)
- [Testing](#testing)
- [Security](#security)
- [Contributing](#contributing)
- [Credits](#credits)
- [License](#license)

## Installation

```
composer require larsemil/46elks
```

### Setting up the 46Elks service

add the following to your config/services.php
```
	'46elks' => [
		'username' => env('FORTY_SIX_ELKS_USERNAME'),
		'password' => env('FORTY_SIX_ELKS_PASSWORD'),
	],
```

Also remember to update your .env with correct information:
```
FORTY_SIX_ELKS_USERNAME=
FORTY_SIX_ELKS_PASSWORD=
```
You will find your username and password at https://46elks.se/account

## Usage

To use this channel simply create a notification that has the following content:
```

    public function via($notifiable)
    {
        return [FortySixElksChannel::class];
    }

    public function to46Elks($notifiable)
    {
        return (new FortySixElksSMS())
	        ->line('Testsms')
	        ->line('Olle')
	        ->to('+46762216234')
	        ->from('Emil');
    }
```
### Available mediums
#### SMS
The FortySixElksSMS have the following methods, all chainable.
### Available Message methods for sms

``from($mixed)``. Accepts a string up to 11 characters or number. Sms will be sent with that name.

``to($number)``. International phone number.

``line($string)``. Every string in a line will be on its own row.

``flash()``. Will set the message type to flash. Will not endup in sms inbox. See [This tweet](https://twitter.com/46elks/status/583183559420178432) to find out how it looks on an iphone.
#### MMS
To use MMS simply use `new FortySixElksMMS()` instead of `new FortySixElksSMS()`

The FortySixElksMMS have the following methods, all chainable.

### Available Message methods

``from($mixed)``. Accepts 'noreply' as a string or a MMS activated number

``to($number)``. International phone number.

``line($string)``. Every string in a line will be on its own row.

``image()``. URL to the image to send in mms.

### Error handling
> How to handle notification send errors

If for any reason there would be an error when sending a notification it will fire a
`Illuminate\Notifications\Events\NotificationFailed` event. You can then listen for that.

Example:
```
Event::listen(NotificationFailed::class, function($event){
    info('Error while sending sms');
});
```
And the event has `$event->notifiable`, `$event->notification`, `$event->channel` and `$event->data`(where you have the exception at `$event->data['exception']`)

## Changelog

Please see [CHANGELOG](CHANGELOG.md) for more information what has changed recently.

## Testing

``` bash
$ composer test
```

## Security

If you discover any security related issues, please email<EMAIL_ADDRESS>instead of using the issue tracker.

## Contributing

Please see [CONTRIBUTING](CONTRIBUTING.md) for details.

## Credits

- [Emil Österlund](https://github.com/larsemil)
- [All Contributors](../../contributors)

## License

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

gha_language: PHP

gha_license_id: MIT


text:
# VRCPimaxEyeTracker

VRCPimaxEyeTracker is a VRChat plugin supporting VRCSDK3 avatar eye tracking using the 7invensun Droolon Pi1 eye tracker designed for Pimax headsets.

> :warning: **This documentation is a work in progress and may change over time.**

- [Installation](#installation)
- [Supported Parameters](#supported-parameters)
- [Avatar Creation](#avatar-creation)
   - [Blend Shapes](#blend-shapes)
   - [Expression Parameters](#expression-parameters)
   - [Expression Menu](#expression-menu)
   - [Simulated Eye Tracking](#simulated-eye-tracking)
   - [Avatar Constraints](#avatar-constraints)
   - [Avatar Masks](#avatar-masks)
   - [Animator Parameters](#animator-parameters)
   - [Layers](#layers)
   - [Animations](#animations)
- [Related Projects](#related-projects)

# Installation

> :warning: **USE THIS PLUGIN AT YOUR OWN RISK!**
>
> **Modifying the VRChat client is a breach of VRChat's Terms of Service and can result in temporary or permanent account suspension. Any authors or contributers of this plugin will not be held responsible for suspended accounts, privacy breaches, etc.**

> :warning: **Ensure that the aSeeVR Runtime software is installed (typically installed via PiTool) and running, and that your Droolon Pi1 eye tracker is correctly installed and calibrated using the aSeeVR calibration utility before using this plugin.**

1. Download and install [MelonLoader](https://melonwiki.xyz/) (requires 0.3.0 or higher).
1. Download [VRCPimaxEyeTracker](https://github.com/NGenesis/VRCPimaxEyeTracker/releases).
1. Copy `VRCPimaxEyeTracker.dll` to the `Mods` folder located in your VRChat installation folder.

# Supported Parameters

| Name | Eye | Type | Value / Range | Description |
| --- | :---: | :---: | :---: | --- |
| UseEyeTracker | - | Bool | False, True | When set to true by the user via the quick menu or an animator, hardware eye tracking will be enabled. |
| LeftEyeBlink | Left | Bool | False, True | Returns true when the user's left eye is closed. |
| RightEyeBlink | Right | Bool | False, True | Returns true when the user's right eye is closed. |
| LeftEyeLid | Left | Float | 0.0 ~ 1.0 | Returns 0.0 when the user's left eye is fully closed and 1.0 when fully open. |
| RightEyeLid | Right | Float | 0.0 ~ 1.0 | Returns 0.0 when the user's right eye is fully closed and 1.0 when fully open. |
| LeftEyeX | Left | Float | -1.0 ~ 1.0 | Returns -1.0 when the user's left eye is looking to the left, 0.0 when looking forward and 1.0 when looking to the right. |
| RightEyeX | Right | Float | -1.0 ~ 1.0 | Returns -1.0 when the user's right eye is looking to the left, 0.0 when looking forward and 1.0 when looking to the right. |
| LeftEyeY | Left | Float | -1.0 ~ 1.0 | Returns -1.0 when the user's left eye is looking down, 0.0 when looking forward and 1.0 when looking up. |
| RightEyeY | Right | Float | -1.0 ~ 1.0 | Returns -1.0 when the user's right eye is looking down, 0.0 when looking forward and 1.0 when looking up. |
| EyesX | Left / Right | Float | -1.0 ~ 1.0 | Returns -1.0 when the user's left or right eye is looking to the left, 0.0 when looking forward and 1.0 when looking to the right. |
| EyesY | Left / Right | Float | -1.0 ~ 1.0 | Returns -1.0 when the user's left or right eye is looking down, 0.0 when looking forward and 1.0 when looking up. |

# Avatar Creation

## Blend Shapes
| Name | Preview |
| --- | --- |
| Eyes Blink | ![Eyes Blink](docs/blendshapes/Eyes%20Blink.png) |
| Right Eye Blink | ![Right Eye Blink](docs/blendshapes/Right%20Eye%20Blink.png) |
| Left Eye Blink | ![Left Eye Blink](docs/blendshapes/Left%20Eye%20Blink.png) |
| Eyes Look Forward | ![Eyes Look Forward](docs/blendshapes/Eyes%20Look%20Forward.png) |
| Right Eye Look Right Up | ![Right Eye Look Right Up](docs/blendshapes/Right%20Eye%20Look%20Right%20Up.png) |
| Right Eye Look Up | ![Right Eye Look Up](docs/blendshapes/Right%20Eye%20Look%20Up.png) |
| Right Eye Look Left Up | ![Right Eye Look Left Up](docs/blendshapes/Right%20Eye%20Look%20Left%20Up.png) |
| Right Eye Look Right | ![Right Eye Look Right](docs/blendshapes/Right%20Eye%20Look%20Right.png) |
| Right Eye Look Left | ![Right Eye Look Left](docs/blendshapes/Right%20Eye%20Look%20Left.png) |
| Right Eye Look Right Down | ![Right Eye Look Right Down](docs/blendshapes/Right%20Eye%20Look%20Right%20Down.png) |
| Right Eye Look Down | ![Right Eye Look Down](docs/blendshapes/Right%20Eye%20Look%20Down.png) |
| Right Eye Look Left Down | ![Right Eye Look Left Down](docs/blendshapes/Right%20Eye%20Look%20Left%20Down.png) |
| Left Eye Look Right Up | ![Left Eye Look Right Up](docs/blendshapes/Left%20Eye%20Look%20Right%20Up.png) |
| Left Eye Look Up | ![Left Eye Look Up](docs/blendshapes/Left%20Eye%20Look%20Up.png) |
| Left Eye Look Left Up | ![Left Eye Look Left Up](docs/blendshapes/Left%20Eye%20Look%20Left%20Up.png) |
| Left Eye Look Right | ![Left Eye Look Right](docs/blendshapes/Left%20Eye%20Look%20Right.png) |
| Left Eye Look Left | ![Left Eye Look Left](docs/blendshapes/Left%20Eye%20Look%20Left.png) |
| Left Eye Look Right Down | ![Left Eye Look Right Down](docs/blendshapes/Left%20Eye%20Look%20Right%20Down.png) |
| Left Eye Look Down | ![Left Eye Look Down](docs/blendshapes/Left%20Eye%20Look%20Down.png) |
| Left Eye Look Left Down | ![Left Eye Look Left Down](docs/blendshapes/Left%20Eye%20Look%20Left%20Down.png) |

## Expression Parameters

The following parameters will be used in this guide, which will support toggling between hardware and simulated eye tracking, independent eye blinking, independent horizontal left/right eye movement and combined vertical left/right movement for optimization.

Please refer to [Support Parameters](#supported-parameters) for a complete list of available parameters.

| Name | Type | Default | Saved |
| --- | --- | --- | --- |
| UseEyeTracker | Bool | True | True |
| LeftEyeBlink | Bool | False | False |
| RightEyeBlink | Bool | False | False |
| LeftEyeX | Float | 0 | False |
| RightEyeX | Float | 0 | False |
| EyesY | Float | 0 | False |

## Expression Menu

Add a VRC Expression Menu with a toggle button to start / stop the eye tracker and switch between hardware or default simulated eye tracking.

| Name | Type | Parameter |
| --- | --- | --- |
| Eye Tracker | Toggle | UseEyeTracker |

## Simulated Eye Tracking

Simulated eye tracking should be set up as normal in the VRC Avatar Descriptor.  The `Blink` blend shape should be set to `Eyes Blink` and eye bones should be assigned (indicated as `Eye_L` and `Eye_R` in this guide).

## Avatar Constraints

These constraints will be used to reset the eye bone transforms while hardware eye tracking is active.

- Create a dummy object for each eye bone (e.g. `Eye_L_EyeTrackerDisabled` and `Eye_R_EyeTrackerDisabled`) that has the same transform as the original respective eye bone (e.g. `Eye_L` and `Eye_R`) under the `Head` bone.
- On the left eye bone (e.g. `Eye_L`):
  - Add a `Rotation Constraint` component to each original bone
    - Uncheck `Is Active`
    - Set `Weight` to `1`
    - Add the dummy object (e.g. `Eye_L_EyeTrackerDisabled`) to `Source` with a weight of `1`
- On the right eye bone (e.g. `Eye_R`):
  - Add a `Rotation Constraint` component to each original bone
    - Uncheck `Is Active`
    - Set `Weight` to `1`
    - Add the dummy object (e.g. `Eye_R_EyeTrackerDisabled`) to `Source` with a weight of `1`

## Avatar Masks

Create avatar masks called `Left Eye` and `Right Eye` using each eye's respective eye bones (e.g. `Eye_L` and `Eye_R`) that will be assigned to the layers below.

## Animator Parameters

| Name | Type | Default |
| --- | --- | --- |
| UseEyeTracker | Bool | False |
| LeftEyeBlink | Bool | False |
| RightEyeBlink | Bool | False |
| LeftEyeX | Float | 0.0 |
| RightEyeX | Float | 0.0 |
| EyesY | Float | 0.0 |

## Layers

All layers should be added to the `FX` animation controller.

### Use Eye Tracker

![Animator](docs/layers/layer_useeyetracker.png)

#### Layer Settings
| Property | Value |
| --- | --- |
| Weight | 1 |
| Mask | None |
| Blending | Override |

#### States

- **Eye Tracker Disabled**
  - Set `Motion` to [`Disable Eye Tracker`](#disable-eye-tracker)
  - Add Behaviours:
    - VRCAnimatorTrackingControl - Set `Eyes & Eyelids` to `Tracking`
    - VRCAnimatorLayerControl - Set `Playable` to `FX`, set `Layer` to `2`, and set `Goal Weight` to `0`
    - VRCAnimatorLayerControl - Set `Playable` to `FX`, set `Layer` to `3`, and set `Goal Weight` to `0`
    - VRCAnimatorLayerControl - Set `Playable` to `FX`, set `Layer` to `4`, and set `Goal Weight` to `0`
    - VRCAnimatorLayerControl - Set `Playable` to `FX`, set `Layer` to `5`, and set `Goal Weight` to `0`

- **Eye Tracker Enabled**
  - Set `Motion` to [`Enable Eye Tracker`](#enable-eye-tracker)
  - Add Behaviours:
    - VRCAnimatorTrackingControl - Set `Eyes & Eyelids` to `Animation`
    - VRCAnimatorLayerControl - Set `Playable` to `FX`, and set `Layer` to `2`, and set `Goal Weight` to `1`
    - VRCAnimatorLayerControl - Set `Playable` to `FX`, and set `Layer` to `3`, and set `Goal Weight` to `1`
    - VRCAnimatorLayerControl - Set `Playable` to `FX`, and set `Layer` to `4`, and set `Goal Weight` to `1`
    - VRCAnimatorLayerControl - Set `Playable` to `FX`, and set `Layer` to `5`, and set `Goal Weight` to `1`

> :warning: **Note that layer numbers may need to be adjusted accordingly so that they correspond with the following layers:**
> - **[Left Eye Blink](#left-eye-blink) (2)**
> - **[Right Eye Blink](#right-eye-blink) (3)**
> - **[Left Eye Movement](#left-eye-movement) (4)**
> - **[Right Eye Movement](#right-eyemovement) (5)**

#### Transitions

| Source State | Destination State | Conditions |
| --- | --- | --- |
| Any State | Eye Tracker Disabled | UseEyeTracker: false |
| Any State | Eye Tracker Enabled | UseEyeTracker: true |

### Left Eye Blink

![Animator](docs/layers/layer_lefteyeblink.png)

#### Layer Settings

| Property | Value |
| --- | --- |
| Weight | 0 |
| Mask | Left Eye |
| Blending | Override |

#### States

- **Eye Tracker Disabled**
  - Set `Motion` to `None`
- **Left Eye Open**
  - Set `Motion` to [`Left Eye Open`](#left-eye-open)
- **Left Eye Close**
  - Set `Motion` to [`Left Eye Close`](#left-eye-close)

#### Transitions

| Source State | Destination State | Conditions |
| --- | --- | --- |
| Any State | Eye Tracker Disabled | UseEyeTracker: false |
| Any State | Left Eye Open | LeftEyeBlink: false, UseEyeTracker: true |
| Any State | Left Eye Closed | LeftEyeBlink: true, UseEyeTracker: true |

### Right Eye Blink

![Animator](docs/layers/layer_righteyeblink.png)

#### Layer Settings

| Property | Value |
| --- | --- |
| Weight | 0 |
| Mask | Right Eye |
| Blending | Override |

#### States

- **Eye Tracker Disabled**
  - Set `Motion` to `None`
- **Right Eye Open**
  - Set `Motion` to [`Right Eye Open`](#right-eye-open)
- **Right Eye Close**
  - Set `Motion` to [`Right Eye Close`](#right-eye-close)

#### Transitions

| Source State | Destination State | Conditions |
| --- | --- | --- |
| Any State | Eye Tracker Disabled | UseEyeTracker: false |
| Any State | Right Eye Open | RightEyeBlink: false, UseEyeTracker: true |
| Any State | Right Eye Closed | RightEyeBlink: true, UseEyeTracker: true |

### Left Eye Movement

![Animator](docs/layers/layer_lefteyemovement.png)

#### Layer Settings

| Property | Value |
| --- | --- |
| Weight | 0 |
| Mask | Left Eye |
| Blending | Override |

- **Eye Tracker Disabled**
  - Set `Motion` to `None`

- **Left Eye Movement**
  - Create as Blend Tree
  - Set `Blend Type` to `2D Freeform Directional`
  - Set `Parameters` to `LeftEyeX` and `EyesY`
  - Add Motions:

| Motion | Pos X | Pos Y |
| --- | --- | --- |
| [Left Eye Look Up](#left-eye-look-up) | 0 | 1 |
| [Left Eye Look Down](#left-eye-look-down) | 0 | -1 |
| [Left Eye Look Left](#left-eye-look-left) | -1 | 0 |
| [Left Eye Look Right](#left-eye-look-right) | 1 | 0 |
| [Left Eye Look Forward](#left-eye-look-forward) | 0 | 0 |
| [Left Eye Look Left Up](#left-eye-look-left-up) | -1 | 1 |
| [Left Eye Look Right Up](#left-eye-look-right-up) | 1 | 1 |
| [Left Eye Look Left Down](#left-eye-look-left-down) | -1 | -1 |
| [Left Eye Look Right Down](#left-eye-look-right-down) | 1 | -1 |

![Blend Tree](docs/layers/layerstate_lefteyemovement.png)

#### Transitions

| Source State | Destination State | Conditions |
| --- | --- | --- |
| Any State | Eye Tracker Disabled | UseEyeTracker: false |
| Any State | Left Eye Movement | UseEyeTracker: true |

### Right Eye Movement

![Animator](docs/layers/layer_righteyemovement.png)

#### Layer Settings

| Property | Value |
| --- | --- |
| Weight | 0 |
| Mask | Right Eye |
| Blending | Override |

- **Eye Tracker Disabled**
  - Set `Motion` to `None`

- **Right Eye Movement**
  - Create as Blend Tree
  - Set `Blend Type` to `2D Freeform Directional`
  - Set `Parameters` to `RightEyeX` and `EyesY`
  - Add Motions:

| Motion | Pos X | Pos Y |
| --- | --- | --- |
| [Right Eye Look Up](#right-eye-look-up) | 0 | 1 |
| [Right Eye Look Down](#right-eye-look-down) | 0 | -1 |
| [Right Eye Look Left](#right-eye-look-left) | -1 | 0 |
| [Right Eye Look Right](#right-eye-look-right) | 1 | 0 |
| [Right Eye Look Forward](#right-eye-look-forward) | 0 | 0 |
| [Right Eye Look Left Up](#right-eye-look-left-up) | -1 | 1 |
| [Right Eye Look Right Up](#right-eye-look-right-up) | 1 | 1 |
| [Right Eye Look Left Down](#right-eye-look-left-down) | -1 | -1 |
| [Right Eye Look Right Down](#right-eye-look-right-down) | 1 | -1 |

![Blend Tree](docs/layers/layerstate_righteyemovement.png)

#### Transitions

| Source State | Destination State | Conditions |
| --- | --- | --- |
| Any State | Eye Tracker Disabled | UseEyeTracker: false |
| Any State | Right Eye Movement | UseEyeTracker: true |

## Animations

### Disable Eye Tracker

| Property | Value |
| --- | --- |
| Eye_L : Rotation Constraint.Active | false |
| Eye_R : Rotation Constraint.Active | false |

### Enable Eye Tracker

| Property | Value |
| --- | --- |
| Body: Skinned Mesh Renderer.Blend Shape.Eyes Blink | 0 |
| Eye_L : Rotation Constraint.Active | true |
| Eye_R : Rotation Constraint.Active | true |

### Left Eye Open

| Property | Value |
| --- | --- |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Blink | 0 |

### Left Eye Close

| Property | Value |
| --- | --- |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Blink | 100 |

### Left Eye Look Forward

| Property | Value |
| --- | --- |
| Body : Skinned Mesh Renderer.Blend Shape.Eyes Look Forward | 100 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Up | 0 |

### Left Eye Look Down

| Property | Value |
| --- | --- |
| Body : Skinned Mesh Renderer.Blend Shape.Eyes Look Forward | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Down | 100 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Up | 0 |

### Left Eye Look Left

| Property | Value |
| --- | --- |
| Body : Skinned Mesh Renderer.Blend Shape.Eyes Look Forward | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left | 100 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Up | 0 |

### Left Eye Look Left Down

| Property | Value |
| --- | --- |
| Body : Skinned Mesh Renderer.Blend Shape.Eyes Look Forward | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left Down | 100 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Up | 0 |

### Left Eye Look Left Up

| Property | Value |
| --- | --- |
| Body : Skinned Mesh Renderer.Blend Shape.Eyes Look Forward | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left Up | 100 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Up | 0 |

### Left Eye Look Right

| Property | Value |
| --- | --- |
| Body : Skinned Mesh Renderer.Blend Shape.Eyes Look Forward | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right | 100 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Up | 0 |

### Left Eye Look Right Down

| Property | Value |
| --- | --- |
| Body : Skinned Mesh Renderer.Blend Shape.Eyes Look Forward | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right Down | 100 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Up | 0 |

### Left Eye Look Right Up

| Property | Value |
| --- | --- |
| Body : Skinned Mesh Renderer.Blend Shape.Eyes Look Forward | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right Up | 100 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Up | 0 |

### Left Eye Look Up

| Property | Value |
| --- | --- |
| Body : Skinned Mesh Renderer.Blend Shape.Eyes Look Forward | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Left Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Right Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Left Eye Look Up | 100 |

### Right Eye Open

| Property | Value |
| --- | --- |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Blink | 0 |

### Right Eye Close

| Property | Value |
| --- | --- |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Blink | 100 |

### Right Eye Look Forward

| Property | Value |
| --- | --- |
| Body : Skinned Mesh Renderer.Blend Shape.Eyes Look Forward | 100 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Up | 0 |

### Right Eye Look Down

| Property | Value |
| --- | --- |
| Body : Skinned Mesh Renderer.Blend Shape.Eyes Look Forward | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Down | 100 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Up | 0 |

### Right Eye Look Left

| Property | Value |
| --- | --- |
| Body : Skinned Mesh Renderer.Blend Shape.Eyes Look Forward | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left | 100 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Up | 0 |

### Right Eye Look Left Down

| Property | Value |
| --- | --- |
| Body : Skinned Mesh Renderer.Blend Shape.Eyes Look Forward | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left Down | 100 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Up | 0 |

### Right Eye Look Left Up

| Property | Value |
| --- | --- |
| Body : Skinned Mesh Renderer.Blend Shape.Eyes Look Forward | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left Up | 100 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Up | 0 |

### Right Eye Look Right

| Property | Value |
| --- | --- |
| Body : Skinned Mesh Renderer.Blend Shape.Eyes Look Forward | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right | 100 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Up | 0 |

### Right Eye Look Right Down

| Property | Value |
| --- | --- |
| Body : Skinned Mesh Renderer.Blend Shape.Eyes Look Forward | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right Down | 100 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Up | 0 |

### Right Eye Look Right Up

| Property | Value |
| --- | --- |
| Body : Skinned Mesh Renderer.Blend Shape.Eyes Look Forward | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right Up | 100 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Up | 0 |

### Right Eye Look Up

| Property | Value |
| --- | --- |
| Body : Skinned Mesh Renderer.Blend Shape.Eyes Look Forward | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Left Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right Down | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Right Up | 0 |
| Body : Skinned Mesh Renderer.Blend Shape.Right Eye Look Up | 100 |

# Related Projects
- [PimaxEyeTracker](https://github.com/NGenesis/PimaxEyeTracker) - A utility library with language bindings for aSeeVR UserSDK, to use with the 7invensun Droolon Pi1 eye tracker designed for Pimax headsets.

repository: guppyexpress/VRCPimaxEyeTracker

repo_name: guppyexpress/VRCPimaxEyeTracker


text:
---
layout: page
title: Using Hubot Middleware to Restrict Rooms
teaser: "Today's post is a small diversion from the security topic I planned because something came up that I wanted to address first ... where hubot could be accessed from"
tags: hubot chatops slack security
header:
    image_fullwidth: "mountains.jpg"
---

Today's post is a small diversion from the security topic I planned because something came up that I wanted to address first ... where hubot could be accessed from.   Slack's Hubot integration creates Hubot as a robot similar to slackbot, except that hubot has to be invited to a channel where slackbot is already listening in every channel.   Since Hubot is being used for ChatOps, I want to limit where server commands can be executed.  Limiting what channel hubot is in does not work as anyone can invite hubot to a new channel.    So the limits need to be within hubot.   This could be done on a per command basis, but that complexity and granularity is not needed at this time. So for now it will be a global limit on all hubot commands to certain channels.

[Hubot Middleware](https://github.com/github/hubot/blob/master/docs/scripting.md#execution-process-and-api) is the tool for this job.  The room limiting logic will be a white list.  Any command in a room not on the white list will be silently dropped.

Time for a new file `middleware.coffee`

```javascript
# Description:
#   Middleware Commands
#
# Dependencies:
#
# Commands:
#
# Notes:
#

module.exports = (robot) ->

  robot.receiveMiddleware (context, next, done) ->
    room = context.response.message.room
    next() if room in ['staging', 'testing'  ]
    done()
```

The receiveMiddleware acts after the listener ( robot.respond, ... ) matches but before the body of the listener function executes.  It gets the room from the context object and compares it to a list.  If there is a match the `next()` sends the request on to be processed to normally.   If it does not match `done()` silently stops this request and nothing more happens.

A quick test in my local development environment shows a problem.   No commands now work.   Adding a logging line after the room value is set ( `console.log "room = #{room}"` ) shows the issue.   When using locally, the room is **Shell**, same as the user name.    I could put Shell in the list, but putting in the user name value rather than a fixed **Shell** will also allow Slack DM to work as Slack Direct Messages also have a room name equal to the user name.    Here is the improved middleware.

```javascript
  # Limit responses to the listed rooms, Shell and Slack DM
  robot.receiveMiddleware (context, next, done) ->
    room = context.response.message.room
    user = context.response.message.user.name
    next() if room in ['staging', 'testing', user ]
    done()
```

Done and done.  Now even if a user invites Hubot somewhere he should not be, Hubot will not respond.

gha_language: JavaScript


text:
---
layout: post
title: The consequences of enabling the 'user assignment required' option in AAD apps
description: What consequences does turning the 'user assignment required' option have on applications?
---

# Introduction

Applications in Azure Active Directory have an option labelled "user assignment required". In this blog post, we'll talk about how this affects an application.

> 💡 Quick heads-up — all the examples in this blog post are based on a web application using AAD as its identity provider through the OpenID Connect protocol.

### Context

By default, applications created in Azure Active Directory have the "user assignment required" option turned off, which means that all the users in the directory can access the application, both members and guests.

While this might sound like a sensible default, we find ourselves at [Readify](https://readify.net) with a growing number of guests in the directory as we collaborate with people from other companies. Some of our applications contain data that should be available to Readify employees only, so we decided to make use of the "user assignment required" option.

To access this option, in the Azure portal, go to "Azure Active Directory > Enterprise applications > your application > Properties" and the option will be displayed there.

Some of the behaviour changes were expected, but others were not! Let's go through them.

### 1. People not assigned to the application can't use it

_Well, duh, isn't that what the option is supposed to do?!_

 If someone that hasn't been explicitly assigned to the application tries to access it, then AAD will reject the authorisation request with a message similar to the following:

> AADSTS50105: The signed in user 'Microsoft.AzureAD.Telemetry.Diagnostics.PII' is not assigned to a role for the application '\<application-id>' (\<application-name>)

The message is straightforward and the behaviour expected.

There are several ways to assign someone to the application. I typically use the Azure portal, navigate to "Azure Active Directory > Enterprise applications > my application > Users and groups" and add them there.

### 2. Nested groups are not supported

This is the first surpise we had. It's our bad, because it's well documented on that documentation page in the "Important" note: [https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/groups-saasapps](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/groups-saasapps)

In other words, if you assign a group to an application, only the direct members of that group will gain access to the application. So instead of using our top-level "all employees" type of group, we had to assign several lower-level groups which only had people inside of them.

### 3. All permissions need to be consented to by an AAD administrator

Applications in Azure Active Directory can request two types of permissions:

1. the permissions which are scoped to the end user, like "Access your calendar", "Read your user profile", "Modify your contacts" — these permissions are shown to the user the first time they access an application, and they can consent to the application performing those actions on behalf of them;
1. another type of permissions usually have a broader impact, outside of the user's scope, like "Read all users' profiles" or "Read and write all groups" — those permissions need to be consented to by an AAD administrator on behalf of all the users of the application.

When the access to the application is restricted via the "user assignment required", an Azure Active Directory administrator needs to consent to all the permissions requested by the application, no matter whether users can normally provide consent for them.

As an example, I created an application with only one permission called "Sign in and read user profile". After enabling the "user assignment required" option, I tried to log in through my web application and got prompted with a page similar to the screenshot below:

![AAD application requires admin approval after enabling the "user assignment required" option](/public/images/posts/aad-user-assignment-required/app-needs-admin-approval-after-enabling-user-assignment-required.png)

While I don't fully understand that behaviour, it is alluded to in the tooltip associated with the "user assignment required" option, shortened for brevity and emphasis mine.

> This option only functions with the following application types: [...] or applications built directly on the Azure AD application platform that use OAuth 2.0 / OpenID Connect Authentication **after a user or admin has consented to that application**.

The solution is to have an AAD admin grant consent to the permissions for the whole directory. In the Azure portal, go to "Azure Active Directory > Enterprise application > your application > Permissions" and click the "Grant admin consent" button.

### 4. Other applications not assigned to the application can't get an access token

It's not uncommon to see integration between applications. As an example, an application "A" could run a background job every night and call the API of application "B" to get some data.

Before we enabled the "user assignment required" option in application "B", it was possible for application "A" to request an access token to AAD, allowing it to call the API of application "B". This is done using the `client_credentials` OAuth2 flow, where application "A" authenticates itself against AAD with either a client secret (it's like a password, but an app can have different secrets) or a certificate.

However, after requiring users to be assigned to the application "A", the token request returns the following error:

> AADSTS501051: Application '\<application-b-id>' (\<application-b-name>) is not assigned to a role for the application '\<application-a-id>' (\<application-a-name>).

While it's similar to the first error we talked about in this post, the resolution is different, as the Azure portal doesn't let us assign applications to another application in the "User and groups" page.

I found the solution in [this Stack Overflow answer](https://stackoverflow.com/a/45839322/562839) which advises to take the following steps:

1. create a role in application "A" that can be assigned to applications;
1. have application "B" request this permission; and
1. get an AAD admin to grant consent for the permissions requested by application "B".

Let's go through these steps one by one.

##### 4.1 Create a role that can be assigned to applications

If you want to get some background information on AAD app roles, I highly suggest reading the following pages on `docs.microsoft.com`: [Application roles](https://docs.microsoft.com/en-us/azure/architecture/multitenant-identity/app-roles) and [Add app roles in your application and receive them in the token](https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-add-app-roles-in-azure-ad-apps).

To create a role aimed at applications, we'll use the "Manifest" page and replace the `appRoles` property with the following:

```json
"appRoles": [{
  "allowedMemberTypes": ["Application"],
  "description": "Consumer apps have access to application A data",
  "displayName": "Access application A",
  "id": "1b4f816e-5eaf-48b9-8613-7923830595ad",
  "isEnabled": true,
  "value": "Access"
}]
```

##### 4.2 Request that permission in application "B"

_Wait, we were talking about creating a role and now we request a permission?_

I agree, sorry about the confusion, but the following will hopefully make sense. There's a change in the terminology we use because assigning that role to application "B" is actually done the other way around, by requesting that role from the settings of application "B".

To do so, we navigate in the Azure portal to "Azure Active Directory > App registrations > application "B" > Required permissions" and then click on the "Add" button. In the new "Add API Access", we look for application "A", select it, then pick the "Access application A" application permissions we created in the previous step:

![Request the permission to access the target application](/public/images/posts/aad-user-assignment-required/request-application-permission.png)

> 💡 Another heads-up — at the time of writing, the Azure portal has a new App registrations experience in preview. The steps mentioned above are for the GA App registrations blade, but the experience is pretty similar in the preview one. If you want to try it out, follow "App registrations (preview) > application "B" > API permissions > Add a permission > APIs my organization uses > application "A" > Application permissions", then finally pick the "Access application A" one.

##### 4.3 Grant consent for application "B" to access application "A"

Because there's no user involved, application permissions automatically require admin consent. Follow the steps taken previously, but this time for application "B". After doing so, the token request from application "B" to access application "A" will work as expected.

### Conclusion

When we first used that "user assignment required" option, I was only expecting unassigned users to be bounced by AAD when trying to log in. Little did I know we would encounter all those "bumps" along the way 🤣.

This was a great learning opportunity, and hopefully it'll be useful to others.

gha_language: CSS

gha_license_id: NOASSERTION


text:
You can use AirPPT to generate websites or web apps. This repo has sample applications that we built with AirPPT

Apps.pptx contains the slide deck with all of the UI's that are utlized in the samples.

# Running a Sample

```
git clone https://github.com/airpptx/samples
cd samples
cd <sample you want>
npm run build
npm run start
```

repository: airpptx/samples

repo_name: airpptx/samples


text:
# Twitter is rolling out a fix for the 'auto-scrolling' bug on iOS

Published at: **2019-11-05T19:46:00+00:00**

Author: **Richard Lawler**

Original: [Engadget](https://www.engadget.com/2019/11/05/twitter-scrolling-bug-iphone/)

Has the Twitter timeline been extra jumpy on your iPhone or iPad? Yesterday Twitter acknowledged the "frustrating" issue, and now an update to address it is rolling out via the App Store. It's unclear if it was supposed to be a seamless addition of new tweets that simply didn't behave properly, but now users should be able to decide whether or not the tweet they're looking at is worth reading without the app deciding it's time to move on. The fixed version is v8.1.5, so if you're still on 8.1, then hang on -- it's coming.

license: Unlicense

repository: dsadlollioygjmzvcxv/tdc-exported

repo_name: dsadlollioygjmzvcxv/tdc-exported


text:
---
layout: default
---

# 1996-09-02 - Re: Sen. Leahy's "impeccable cyberspace credentials"

## Header Data

From<EMAIL_ADDRESS>(Dr.Dimitri Vulis KOTM)

To<EMAIL_ADDRESS>Message Hash: a52f88e922e116a9acddf3cf74eb0f2420510d802c13158cf020d66ec3fcc1d2

Message ID<EMAIL_ADDRESS>Reply To<EMAIL_ADDRESS>UTC Datetime: 1996-09-02 01:29:30 UTC

Raw Date: Mon, 2 Sep 1996 09:29:30 +0800

## Raw message

```
{% raw  %}From<EMAIL_ADDRESS>(Dr.Dimitri Vulis KOTM)
Date: Mon, 2 Sep 1996 09:29:30 +0800
To<EMAIL_ADDRESS>Subject: Re: Sen. Leahy's "impeccable cyberspace credentials"
In-Reply-To<EMAIL_ADDRESS>Message-ID<EMAIL_ADDRESS>MIME-Version: 1.0
Content-Type: text/plain

<EMAIL_ADDRESS>(patrick b cummings) writes:

> jimbell,
> I agree with what you are saying but not all polititions are that bad.
> You make it sound as if their are no politisions are for freedom of the
> net.

  No decent person would want to
be a politician.  Anyone who's willing to become a politician is scum.

---

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

{% endraw %}
```

## Thread

+ Return to [August 1996](/archive/1996/08)
+ Return to [September 1996](/archive/1996/09)

+ Return to<EMAIL_ADDRESS>(Dr.Dimitri Vulis KOTM)](/authors/dlv_at_bwalk_dm_com_dr_dimitri_vulis_kotm_)"
+ Return to "[jim bell <jimbell@pacifier.com>](/authors/jim_bell_jimbell_at_pacifier_com_)"
+ Return to<EMAIL_ADDRESS>(patrick b cummings)](/authors/patrickbc_at_juno_com_patrick_b_cummings_)"
+ Return to "[snow <snow@smoke.suba.com>](/authors/snow_snow_at_smoke_suba_com_)"

+ 1996-08-27 (Tue, 27 Aug 1996 14:43:43 +0800) - [Re: Sen. Leahy's "impeccable cyberspace credentials"](/archive/1996/08/78075a4eb0c051327fce33b684a8e59f724bc370e85a868f964edd0591ae6e76) - _jim bell<EMAIL_ADDRESS>  + 1996-09-01 (Sun, 1 Sep 1996 08:05:13 +0800) - [Re: Sen. Leahy's "impeccable cyberspace credentials"](/archive/1996/09/7b8640258a1cbdb0b5edd8516223d9a5fdf6fcdd1c45173d4a2d2f748fdc1c8e) -<EMAIL_ADDRESS>(patrick b cummings)_
    + 1996-09-02 (Mon, 2 Sep 1996 09:29:30 +0800) - Re: Sen. Leahy's "impeccable cyberspace credentials" -<EMAIL_ADDRESS>(Dr.Dimitri Vulis KOTM)_
    + 1996-09-03 (Tue, 3 Sep 1996 12:23:28 +0800) - [Re: Sen. Leahy's "impeccable cyberspace credentials"](/archive/1996/09/e0ef168158b2ff9311854a4fbecbb45ddd89e25ad2acf76f81609c788fa3b100) - _snow<EMAIL_ADDRESS>


text:
# truevoice-intent
Intent Dataset from Customer Service Phone Calls Transcribed by TrueVoice's [Mari](http://www.truevoice.co.th/en/true-voice-mari/)

The `truevoice-intent` dataset was provided by [TrueVoice](http://www.truevoice.co.th/) through Khun Nattapote Kuslasayanon and Khun Suphavedee Trakulboon. The texts are transcribed from customer service phone calls to a mobile phone service provider. This dataset is a part of [pyThaiNLP](https://github.com/PyThaiNLP/) Thai text [classification-benchmarks](https://github.com/PyThaiNLP/classification-benchmarks). `texts` column contains raw texts and `texts_deepcut` column contains those segmented by [deepcut](https://github.com/rkcosmos/deepcut). For preliminary data exploration, see `exploration.ipynb`.

## Special Tokens

- `xxxxxxxx` is phone number.

## Labeling Process

When the TrueVoice team performs the semantic tagging of each utterance (`texts` field of the dataset), they have a semantic intent extraction guildline for the taggers to do by asking them to look for:

1. What will be the intent of the caller in terms of action (verb) such as request, enquire, complain, and so on (the `action` field of the dataset)?

2. What will be the intent in term of objective such as phone issues, contact officers, balance inquiries and so on (the `object` field of the dataset)?

With these taggings, they then combined `action` and `object` tags together to identify the unique intent of the utterance. This way, it will be easy for the taggers to tag large amount of data in a structured way.

The `destination` field is where the customers will be routed to with a certain intent output such as agents with promotion skills, IVR self-service of bill payment and so on.

## Classification

We provide 3 benchmarks for the 7-class multi-class classification of destination column in truevoice-intnet dataset: [fastText](fasttext.cc), LinearSVC and [ULMFit](https://github.com/cstorm125/thai2fit). In the transfer learning cases, we first finetune the embeddings using all data. The test set contains 20% of all data split by TrueVoice. The rest is split into 85/15 train-validation split randomly. Performance metrics are micro-averaged accuracy and F1 score. For more details, see `classification.ipynb`.

| model     | accuracy | micro-F1 |
|-----------|----------|----------|
| fastText  | 0.384116 | 0.384116 |
| LinearSVC-Tfidf | 0.307876 | 0.327565 |
| **[LinearSVC-CountVectorizer](https://drive.google.com/drive/folders/1twZ2euWR6QE5LNzVqmftKSA0tQCNbZnl?fbclid=IwAR1XeRwF0Pk9LtW9p9LaK5az7ZEYRtuApJxKwsiggL-XA0K3z6NUqcdMJT0)** | **0.902349** | **0.902349**
| ULMFit    | 0.834981  | 0.834981 |

repository: PanthonImem/truevoice-intent

gha_language: Jupyter Notebook

repo_name: PanthonImem/truevoice-intent


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

[![lifecycle](https://img.shields.io/badge/lifecycle-experimental-orange.svg)](https://www.tidyverse.org/lifecycle/#experimental)

> Disclaimer: this is experimental, use deliberately and with caution.

# craneur

The goal of craneur is to provide an easy way to Create your own “R
Archive
Network”.

## Install {craneur}

``` r
install.packages("craneur", repos = "https://colinfay.me", type = "source")
```

## Why would you use `{craneur}`?

Creating your own R archive repository can be useful for:

  - Not depending on GitHub for your dev packages
  - Internal uses in your company, lab, university…
  - Because you’re a nerd and find it cool

## How does it work?

A R archive repo is a location where you can download R packages with
the `install.packages` function.

This location is composed of, roughly:

  - a `PACKAGES` file
  - the `tar.gz` of your packages

These elements should be put inside a `src/contrib` folder.

Once you’ve installed that, you can do :

``` r
install.packages("pkg", repos = "my_repos.com", type = "source")
```

For example
:

``` r
install.packages("attempt", repos = "https://colinfay.me", type = "source")
```

## Here comes `{craneur}`

`craneur` provides a user-friendly API for creating this skeleton :
`PACKAGES` file, tar.gz, and a minimal `index.html`.

``` r
library(craneur)
colin <- Craneur$new("Colin")
colin$add_package("../craneur_<IP_ADDRESS>00.tar.gz")
colin$add_package("../jekyllthat_<IP_ADDRESS>00.tar.gz")
colin$add_package("../tidystringdist_0.1.2.tar.gz")
colin$add_package("../attempt_0.2.1.tar.gz")
colin$add_package("../rpinterest_0.4.0.tar.gz")
colin$add_package("../rgeoapi_1.2.0.tar.gz")
colin$add_package("../proustr_<IP_ADDRESS>00.tar.gz")
colin$add_package("../languagelayeR_1.2.3.tar.gz")
colin$add_package("../fryingpane_<IP_ADDRESS>00.tar.gz")
colin$add_package("../dockerfiler_0.1.1.tar.gz")
colin$add_package("../devaddins_<IP_ADDRESS>00.tar.gz")
colin
#>           package                            path
#> 1         craneur    ../craneur_<IP_ADDRESS>00.tar.gz
#> 2      jekyllthat ../jekyllthat_<IP_ADDRESS>00.tar.gz
#> 3  tidystringdist  ../tidystringdist_0.1.2.tar.gz
#> 4         attempt         ../attempt_0.2.1.tar.gz
#> 5      rpinterest      ../rpinterest_0.4.0.tar.gz
#> 6         rgeoapi         ../rgeoapi_1.2.0.tar.gz
#> 7         proustr    ../proustr_<IP_ADDRESS>00.tar.gz
#> 8   languagelayeR   ../languagelayeR_1.2.3.tar.gz
#> 9      fryingpane ../fryingpane_<IP_ADDRESS>00.tar.gz
#> 10    dockerfiler     ../dockerfiler_0.1.1.tar.gz
#> 11      devaddins  ../devaddins_<IP_ADDRESS>00.tar.gz
```

Create it:

``` r
colin$write(path = ".")
```

This creates a “src/contrib” folder, and copies all the tar.gz into this
folder.

For a bulk import, you can :

``` r
colin <- Craneur$new("Colin")
lapply(list.files("../", pattern = "tar.gz", full.names = TRUE), function(x) colin$add_package(x))
#> [[1]]
#> [1] "..//attempt_0.2.1.tar.gz"
#>
#> [[2]]
#> [1] "..//craneur_<IP_ADDRESS>00.tar.gz"
#>
#> [[3]]
#> [1] "..//devaddins_<IP_ADDRESS>00.tar.gz"
#>
#> [[4]]
#> [1] "..//dockerfiler_0.1.1.tar.gz"
#>
#> [[5]]
#> [1] "..//fryingpane_<IP_ADDRESS>00.tar.gz"
#>
#> [[6]]
#> [1] "..//jekyllthat_<IP_ADDRESS>00.tar.gz"
#>
#> [[7]]
#> [1] "..//languagelayeR_1.2.3.tar.gz"
#>
#> [[8]]
#> [1] "..//prenoms_0.1.0.tar.gz"
#>
#> [[9]]
#> [1] "..//proustr_<IP_ADDRESS>00.tar.gz"
#>
#> [[10]]
#> [1] "..//rgeoapi_1.2.0.tar.gz"
#>
#> [[11]]
#> [1] "..//rpinterest_0.4.0.tar.gz"
#>
#> [[12]]
#> [1] "..//tidystringdist_0.1.2.tar.gz"
```

### Put on your sever

You can now put the full “src/contrib” folder onto your server.

For example, if I put “src/contrib” at the root of
“<https://colinfay.me>”, here the index:
<https://colinfay.me/src/contrib/>

You can now install with
:

``` r
install.packages("craneur", repos = "https://colinfay.me", type = "source")
install.packages("jekyllthat", repos = "https://colinfay.me", type = "source")
install.packages("tidystringdist", repos = "https://colinfay.me", type = "source")
install.packages("attempt", repos = "https://colinfay.me", type = "source")
install.packages("rpinterest", repos = "https://colinfay.me", type = "source")
install.packages("rgeoapi", repos = "https://colinfay.me", type = "source")
install.packages("proustr", repos = "https://colinfay.me", type = "source")
install.packages("languagelayeR", repos = "https://colinfay.me", type = "source")
install.packages("fryingpane", repos = "https://colinfay.me", type = "source")
install.packages("dockerfiler", repos = "https://colinfay.me", type = "source")
install.packages("devaddins", repos = "https://colinfay.me", type = "source")
```

## Personnalise home page

You can rewrite your index.html by reknitting the index.Rmd you’ll find
in the directory.

## Prior work

See also:

  - `{drat}`: <https://github.com/eddelbuettel/drat>
  - `{cranlike}`: <https://github.com/r-hub/cranlike>
  - `{packrat}`: <https://github.com/rstudio/packrat>

## CoC

Please note that this project is released with a [Contributor Code of
Conduct](CODE_OF_CONDUCT.md). By participating in this project you agree
to abide by its terms.

repository: radovankavicky/craneur

repo_name: radovankavicky/craneur


text:
Using autoenv with python virtualenvs
======================================

22 Mar 2014

[Autoenv](https://github.com/kennethreitz/autoenv) will blow your mind,
or at least the github page indicates as such. It's a \*very\* useful
bit of software, but there are a few sharp edges to be aware of. The
first is that every .env in the tree below your directory are executed
on every cd. This means that a .env to deactivate your virtual env in a
root project path will deactivate when you cd around inside of your
project path, and then re-activate. This seems less then efficient to
me, so below is my solution. We only deactivate when you cd into the
workspaces environment and only activate when we cd into the project
env.

Install
---------

Install it easily:

#### Mac OS X Using Homebrew

    $ brew install autoenv
    $ echo "source $(brew --prefix autoenv)/activate.sh" >> ~/.bash_profile

#### Using pip

    $ pip install autoenv
    $ echo "source `which activate.sh`" >> ~/.bashrc

#### Using git

    $ git clone git://github.com/kennethreitz/autoenv.git ~/.autoenv
    $ echo 'source ~/.autoenv/activate.sh' >> ~/.bashrc

#### Using AUR

Arch Linux users can install [autoenv](https://aur.archlinux.org/packages/autoenv/) or [autoenv-git](https://aur.archlinux.org/packages/autoenv-git/) with their favorite AUR helper.

You need to source activate.sh in your bashrc afterwards:

    $ echo 'source /usr/share/autoenv/activate.sh' >> ~/.bashrc

Configuration
----------------

Before sourcing activate.sh, you can set the following variables:

- AUTOENV_AUTH_FILE: Authorized env files, defaults to ~/.autoenv_authorized
- AUTOENV_ENV_FILENAME: Name of the .env file, defaults to .env
- AUTOENV_LOWER_FIRST: Set this variable to flip the order of .env files executed

workspaces/.env
---------------

    BASE_PATH=`dirname "${BASH_SOURCE}"`
    PWD=`pwd`

    if [[ "${BASE_PATH}" == "${PWD}" ]]
    then
        declare -f -F deactivate &>/dev/null

        if [[ "${?}" == "0" ]]
        then
            deactivate
        fi
    fi

workspaces/project/.env
-----------------------

    BASE_PATH=`dirname "${BASH_SOURCE}"`
    PWD=`pwd`

    if [[ "${BASE_PATH}" == "${PWD}" ]]
    then
        if [[ -e venv/bin/activate ]]
        then
            source venv/bin/activate
        fi
    fi


text:
Wordpress Boilerplate
==================

Custom Wordpress theme development quick start setup.
-----------------------------------------------------

This set of files represents the basic structure for a Wordpress Theme.
It saves around an hour when starting a new theme. It contains very little markup.

### What is included:

* Basic header and footer
* Single, Page, Archive, Index files that contain WP loop
* Content-Page and Content-Single files for displaying page and post content
* Functions file that contains enqueues of style.css, jQuery and init.js files
* Style.css with the required WP comment
* 404 file
* Assets folder structure: css, js, img, libs
* Empty init.js file

### How to use

Before you start your theme development pull or copy the files in your theme folder.
Edit the style.css with your themes name, author info and change the screenshot.png with
your unique one. Start putting in the markup and extending the functionality.

repository: mfrancekovic/wordpress-boilerplate

repo_name: mfrancekovic/wordpress-boilerplate


text:
# Introduction

BigConnect provides an extensible Big Data platform to understand and work with any amounts of data, from any source and in any format. It’s an information-agnostic system where all data that flows into the system is transformed, mapped, enriched and then stored in a logical way using a semantic model of concepts, attributes and relationships. It provides an extensible, unified visual interface with tools for data discovery and analysis, collaboration, alerting and information management.

The platform and all its components are **extensible**, **massively scalable** and **highly secure**. It can be used to build Big Data applications that can ~~~~cover most use cases and industry requirements.

repository: mware-solutions/bigconnect-docs

repo_name: mware-solutions/bigconnect-docs


text:
2023-01-20 0.14.0
* Rename modules
* Set new application id; `io.github.martimm.qa-manager`.
* Recompile resources
* Reconfigure basic window and menu

2020-12-06 0.13.1
* Original package is split in two. This part is now called **QA::Manager**. This package is meant to help the user to create and manage questionnaires.

repository: MARTIMM/qa-manager

repo_name: MARTIMM/qa-manager


text:
# TicTacToe

Tic-Tac-Toe game build using Swing GUI in Java.

Build this application 2 years ago in 2018 while learning Swing GUI and thought of adding it to github.

Source Code is available in src folder. To play the game you can simply open it in any Java IDE and run the application.

repository: HarshGanda/TicTacToe

repo_name: HarshGanda/TicTacToe


text:
Four code examples are available:

1. [helloworld](https://github.com/grpc/grpc-dart/tree/master/example/helloworld):
   A demonstration of using the Dart gRPC library to perform unary RPs.

1. [googleapis](https://github.com/grpc/grpc-dart/tree/master/example/googleapis):
   A demonstration of using the Dart gRPC library to communicate with Google APIs.

1. [metadata](https://github.com/grpc/grpc-dart/tree/master/example/metadata):
   A demonstration of how to handle custom metadata, cancellation, and timeouts in Dart gRPC.

1. [route_guide](https://github.com/grpc/grpc-dart/tree/master/example/route_guide):
   A demonstration of how to perform unary, client streaming, server streaming and full duplex RPCs.

For a complete, step-wise working example, see the [Dart gRPC Quick Start](https://grpc.io/docs/quickstart/dart).

repository: grpc/grpc-dart

gha_language: Dart

repo_name: grpc/grpc-dart


text:
# TGet - where you can get something from taiprogramer

:point_right: [https://tget.taiprogramer.xyz](https://tget.taiprogramer.xyz)

## # Serve on your local
![](https://img.shields.io/github/repo-size/taiprogramer/tget.svg)

(if you download zip file, remember to extract :D)

|Command|Description|
|---|---|
|`git clone https://github.com/taiprogramer/tget`|Clone this project or [download zip file](https://github.com/taiprogramer/tget/archive/master.zip)|
|`cd tget`|cd into project root directory|
|`npm install docsify-cli`|Install docsify-cli|
|`./node_modules/.bin/docsify serve docs/`|Start server at localhost:3000|

**Another way to serve**

If you are using<EMAIL_ADDRESS>or higher, just simply type

```
npx docsify-cli serve docs/
```

repository: taiprogramer/tget

repo_name: taiprogramer/tget


text:
This is code for a follow up question.

The difference between this code and the code from
lecture is that we commented out all of the lines
that set various things to null AND this line:

// resetDogOfTheWeek();

And we want to see how the output changes.

The theory is that since all of the other references go out
of scope when main terminates, they will all be eligible for
garbage collection then.

There is one flaw however: will we see it?

That is, unless we call gc() again after main
terminates, they might become eligible for
garbage collection, but we would never know.

How can we address this?

We do it by making a second class with its own main:

```
public class TryIt {

       public static void main(String [] args) {

       	      Dog.main(args);
	      Dog.gc(0);

       }

}

```


text:
ABANDONED REPOSITORY
===================

Feel free to for if you want because this repository will not be maintained anymore.

moment-datepicker
=================

The best bootstrap datepicker!

Original code from [Stefan Petre](http://www.eyecon.ro/bootstrap-datepicker/). I also took things from [Andrew Rowls](https://github.com/eternicode/bootstrap-datepicker) and [Aymeric Kodono](https://github.com/Aymkdn/Datepicker-for-Bootstrap).

Moment Datepicker is ready to work with Knockout, TypeScript and NuGet. It uses Moment.js to parse dates and to localize the literals, and Twitter-Bootstrap (2 or 3) to ensure a nice appearance.

* [Demo](http://makingsense.github.com/moment-datepicker)
* [NuGet Package](https://nuget.org/packages/MomentDatepicker)

repository: MakingSense/moment-datepicker

repo_name: MakingSense/moment-datepicker


text:
### Setup

- Download / Export This Repository & Make Sure To Install [Node.js](https://nodejs.org/en/) & [Visual Studio Code (Only If You Don't Have Any Code Editor)](https://code.visualstudio.com/)

- Open Project In Visual Studio Code (Editor) & To Open Console / Terminal - **Ctrl + A**

- In Your Project Terminal / Console Type This - **npm i**

- And Wait For Them (Packages) To Install...

- After Installing Done, Go To Config.js And

- Fill Information & After That Type This In Your Terminal / Console - **_node ._** Or **_node server.js_**

- When Bot Is Ready, You Will See A Message In Console

- Enjoy <3

### Credits

- [Github (Filters :D)](https://github.com)

- [Stackoverflow (Lyrics)](https://stackoverflow.com)

- [Node Package Manager (Discord.js, Etc)](https://www.npmjs.com/)

- [Google (Friend)](https://google.com)

### Information

- This command has additional features

| Name | Description | Usage It works |
| :--- | :--- | :--- |
| **args** | Activate command usage, and commands Description | `args: false/true,` |
| **owner** | This can only be used by the owner | `owner: false/true` |
| **permissions** | This gives permission to cmd | `premissons: Name permission` |
| **cooldown** | This gives permission to cooldown the command | `cooldown: 3` |
| **guildOnly** | this can only be on the server not on dm | `guildOnly: false/true` |

Your Ass If You Ever Say **This Is My Bot & Coded By Me Or Smth**, Make Sure To Give Credit (In Bot Or Commands) :D

[![DevServer](https://discordapp.com/api/guilds/773194751411355698/widget.png?style=shield)](https://dsc.gg/mincoder)

- Author - 𝙁𝘾 么 Glitch Editz#5631

- Support - [Click Me](https://dsc.gg/mincoder)

- create cmd - 𝙁𝘾 么 Glitch Editz#5631

- for cmd music - Legendary Emoji#1742

- for additional feature settings - 𝙁𝘾 么 Glitch Editz#5631

- Channel - [Mit](https://www.youtube.com/channel/UCpLctSYrYYQm58ul219kMwg)

- Vote My Bot: [Here](https://discord4bots.tk/bot/849903077690572800)

[![Vote](https://discord4bots.tm/bot/849903077690572800/embed)](https://discord4bots.tk/bot/849903077690572800)

- Thank you for supporting my server.

- every day these commands will be updated


text:
Now archived. No updates are needed here, and also the blockchain still has no
real-world use cases in which it actually outperforms any traditional
technology (which is to say, I'm anti-blockchain).

This is a port of
[snakecoin](https://gist.github.com/aunyks/47d157f8bc7d1829a729c2a6a919c173) to
JS. All credit to [@aunyks](https://github.com/aunyks) who wrote the original.

I'm working on this to learn more about what a blockchain even is.

Try `curl localhost:4000/transaction -H "Content-Type: application/json" -d '{"from": "akjflw", "to":"fjlakdj", "amount": 3}'`

And also `curl /mine` and `curl /blocks`

License: [MIT](./LICENSE.md)

repository: zacanger/tiny-blockchain

repo_name: zacanger/tiny-blockchain


text:
---
layout: post
title: "React Study Notes"
update: 2019-05-24
tags: [react, jsx, studynotes]
starMark: true
comments: true
date: 2019-03-31
---

> Study notes while learning React.

{% raw %}

## VS Code Shortcuts

imrc --

```jsx
import React, { Component } from "react";
```

cc --

```jsx
class  extends Component {
    state = {  }
    render() {
        return (  );
    }
}

export default ;
```

## Avoid Rendering Root Element

`<React.Fragment>`

JSX can only have one root element

All elements could be put inside a pair of <div> tag or `<React.Fragment>` tag.

if using <React.Fragment>, root element won't be incluede in html

## Get Random Pictures with fixed size

'https://picsum.photos/200'

Return a random picture of 200 by 200

## Add Class in JSX

Class--js = `ClassName`--jsx

```jsx
<span className={this.getBadgeClasses()}>{this.formatCount()}</span>
```

## Style

```jsx
style = {
    fontSize: 10,
    fontWeight: "bold",
};

<span style={this.style}> </span>;
```

<br>

```jsx
<span style={{ fontSize: 10, fontWeight: "bold" }}></span>
```

## Quickly create new method in render()

```jsx
let classes = "badge m-2 ";
classes += this.state.count === 0 ? "badge-warning" : "badge-primary";
```

Select and right click, then choose `"Refactor"`.

Do NOT write variable and do function inside `render()` mehod.

## Loop -- map

**no loop in jsx**

array.map(item => (//do something))

> each item needs a 'key' value for React

```jsx
tags: ["tag1", "tag2", "tag3"]

......
<ul>
  {this.state.tags.map(tag => (<li key={tag}>{tag}</li>))}
</ul>
```

## no if...else... in jsx

Alternatively, use `:` operator

```jsx
classes += this.state.count === 0 ? "badge-warning" : "badge-primary";
```

### trick in js

    true && false
    >false

    true && 'Hi' ==
    >"Hi"

    true && 'Hi' && 1
    >1

## binding event handlers

> This is used for when need 'this' to modify/update 'state'

Do not write function a directly. Using arrow functions instead. Casuse `this` keyword return `undefine` in a function, and what we need is returning an object that should write inside a class or object.

Arrow functions don't rebind `this` keyword. They inherieted.

```jsx
handleIncrement = () =>{
    console.log('Increment Clicked', this);
  }

//this is incorrect
handleIncrement(){
  .....
}
```

## passing event arguments

jsx don't call function in onClick(Upper case 'C') event, but using reference, which means no `()` when calling a function.

So if we need to pass arguments, arrow function comes.

```jsx
handleIncrement = (id) =>{
    console.log(id);
    this.setState({ count : this.state.count + 1});
    //tell React state has been changed. Merge or overwrite state
  }

render(
...
<button onClick={() => this.handleIncrement(id) } className="btn btn-secondary btn-sm">Increament</button>
...
)
```

## Zen Coding

Shortcut to get following code:

`table.talbe>thead>tr>th*4` then press `tab`

```html
<table className="talbe">
    <thead>
        <tr>
            <th></th>
            <th></th>
            <th></th>
            <th></th>
        </tr>
    </thead>
</table>
;
```

## Passing data

`this.props`

Each react component has a property called `props` which basically is plain `JavsScript` object

## state vs props

\*`state` can only modified by its owner.

\*`props` is an object from parent's component and read only.

## Lifecycle Hooks

### Mounting Phase

1. `constructor` is only called once at first (before `render`), to initialize the properties in this class.

```jsx
    constructor(props){
        super(props);
        console.log("App - Constrctor", this.props);
        this.state =  this.props.__something___;
    }
```

2. `render` renders React elements from virtual DOM into brower DOM

3. `componentDidMount` is call after conponent is rendered into DOM, good place to do AJAX call to get data from server

```jsx
    componentDidMount(){
        //AJAX call
        this.state(_____)
    }
```

### Updating Phase

`componentDidUpdated` is called AFTER DOM updated, used to do something if needed following component changed

```jsx
    componentDidUpdated(prevProps, preState){
        if(prevPros.value !== this.props.value){
            //Ajax call and get new data from the server
        }
    }
```

### Unmounting Phase

`componentWillUnmount` is called BEFORE a component is removed from DOM, used to clean up set up timers or listener thoese staying in memory, otherwise they will be end up with memory leaks.

{% endraw %}

path: /_posts/2019-03-01-React Study Notes.md

filename: 2019-03-01-React Study Notes.md


text:
This application wants to create a user account in several trusted
applications using one broadcast intent:

    Intent intent = new Intent();
    intent.setAction("com.example.CreateUser");
    intent.putExtra("Username", uname_string);
    intent.putExtra("Password", pw_string);
    sendBroadcast(intent);

This application assumes only the trusted applications will be listening
for the action. A malicious application can register for this action and
intercept the user's login information, as below:

    IntentFilter filter = new IntentFilter("com.example.CreateUser");
    MyReceiver receiver = new MyReceiver();
    registerReceiver(receiver, filter);

When a broadcast contains sensitive information, create a whitelist of
applications that can receive the action using the application's manifest
file, or programmatically send the intent to each individual intended receiver.

repository: appknox/vulnerabilities

repo_name: appknox/vulnerabilities


text:
# Swiss QR Bill

[![Build Status](https://travis-ci.org/sprain/php-swiss-qr-bill.svg?branch=master)](https://travis-ci.org/sprain/php-swiss-qr-bill)
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/sprain/php-swiss-qr-bill/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/sprain/php-swiss-qr-bill/?branch=master)

A PHP library to create Swiss QR Bill payment parts (_QR-Rechnung_), a new standard which will replace the existing inpayment slips starting on June 30, 2020.

![Image of Swiss QR Bill example](docs/assets/example-payment-part.png)

## Documentation

You can [find the documentation on ReadTheDocs](https://php-swiss-qr-bill.readthedocs.io/en/stable/).

## Quick start

```
composer require sprain/swiss-qr-bill
```

Then have a look at [example/example.php](example/example.php).

repository: tognit/php-swiss-qr-bill

repo_name: tognit/php-swiss-qr-bill


text:
Social Network API Challenge

[![License: Unlicense](https://img.shields.io/badge/license-Unlicense-blue.svg)](http://unlicense.org/)

  ## Description:
  This is the back end code for a social network web application that uses a NoSQL database. The API's for this application allow users to share their thoughts, react to friends’ thoughts, and create a friend list. It uses Express.js for routing, a MongoDB database, and the Mongoose ODM.

  ## Table of Contents:
  * [User Story](#user-story)
  * [Acceptance Criteria](#acceprance-criteria)
  * [Installation](#installation)
  * [Usage](#usage)
  * [License](#license)
  * [Video](#video)
  * [Questions](#questions)

  ## User Story
  ```
  AS A social media startup
  I WANT an API for my social network that uses a NoSQL database
  SO THAT my website can handle large amounts of unstructured data
  ```

  ## Acceptance Criteria
  ```
  GIVEN a social network API
  WHEN I enter the command to invoke the application
  THEN my server is started and the Mongoose models are synced to the MongoDB database
  WHEN I open API GET routes in Insomnia Core for users and thoughts
  THEN the data for each of these routes is displayed in a formatted JSON
  WHEN I test API POST, PUT, and DELETE routes in Insomnia Core
  THEN I am able to successfully create, update, and delete users and thoughts in my database
  WHEN I test API POST and DELETE routes in Insomnia Core
  THEN I am able to successfully create and delete reactions to thoughts and add and remove friends to a user’s friend list
  ```

  ## Installation
  NPM init
  NPM install

  ## Usage:
  To run/test this application, enter the root directory of the application and then enter "npm start" in the command line of your terminal. Once your server is started, navigate to Insomia to test the different api get, post, put, and delete routes:

  localhost:3001/api/users
   * GET all users
   * POST a new user

  localhost:3001/api/users/:id - get, put, delete
  * GET a single user by its _id and populated thought and friend data
  * PUT to update a user by its _id
  * DELETE to remove user by its _id

  localhost:3001/api/users/:id/friends/friendId
  * POST to add a new friend to a user's friend list
  * DELETE to remove user by its _id

  localhost:3001/api/thoughts
  * GET to get all thoughts

  localhost:3001/api/thoughts/:id
  * GET to get a single thought by its _id
  * PUT to update a thought by its _id
  * DELETE to remove a thought by its _id

  localhost:3001/api/api/thoughts/:userId
  * POST to create a new thought and push the created thought's _id to the associated user's thought array

  localhost:3001/api/thoughts/:thoughtId/reactions
  * POST to create a reaction stored in a single thought's reactions array field

  localhost:3001/api/thoughts/:thoughtId/reactionId
  * DELETE to pull and remove a reaction by the reaction's reactionId value

  ## License:
  Unlicense

  ## Contributing:
  https://www.contributor-covenant.org/

  ## Video:
  https://drive.google.com/file/d/1fG_KpH22T7RuZO1zz0O7eNm6FC49ynn5/view

  ## Questions:
  [My Github Account](https://github.com/kaileymorter)

  If you have additional questions about this project, please reach me at<EMAIL_ADDRESS>

repository: kaileymorter/social-network-api

repo_name: kaileymorter/social-network-api


text:
# CS 763 (Spring 2019) - IIT Bombay

This repository contains all my submissions to assignments written during my study of the CS 763 - **Computer Vision** course in Spring 2019 at Indian Institute of Technology (IIT) Bombay, India.

## Author

* **Vamsi Krishna Reddy Satti** - [vamsi3](https://github.com/vamsi3)

## License

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


text:
# vue-cytoscape

## What is this

This is a `vue` wrapper for [cytoscape.js](http://js.cytoscape.org).

## Why

We all love `vue` for creating user interfaces and `cytoscape.js` as a graph visualization library. Wouldn't be nice if we can create a reusable`vue` component that exposes `cytoscape.js` api? This is what this plugin is about.

## Support

If you have any issue please feel free to use the [Issues](https://github.com/rcarcasses/vue-cytoscape/issues) page.

repository: rcarcasses/vue-cytoscape

gha_language: TypeScript

repo_name: rcarcasses/vue-cytoscape


text:
---
layout: post
title: "Fearful Dreading Hearts"
date: 2020-10-06
excerpt: "When does a heart shake with fear? Is it when we are about to die? Is it when some we love is about to die? Is it when we about to lose something or someone we love?"
tags: [productivity, personal, uglystance, awake, weird, hearts, fear, heart, dread]
---

# When Does A Heart Shake With Fear?

When does a heart shake with fear? Is it when we are about to die? Is it when someone we love is about to die? Is it when we are about to lose something or someone we love?

Take a good look at the sentence above. Look over it again. Read it again. Once more, just to be sure. There is a common theme in all of them. Were you able to find it?

A heart shakes with fear when we are in anticipation. Never when something has already happened. Don’t believe me? Try to remember the last time you were truly frightened to the core. You will find this answer to be true nearly every time.

What do we fear? Do we fear loneliness? Do we fear being left behind? Do we fear a big crowd? Do we fear the great outdoors? None of the fears in this paragraph represent true fears. Fears that can be overcome do not qualify as fear.

Losing someone. Losing oneself. Losing. Losing. Losing. Losing is what truly strikes fear in our hearts. But what about gaining? Can gaining something make our heart shake with fear? Can we be fearful of getting something we wanted? The answer is a resounding “Yes”

If drunkards had all the money in the world they would drink themselves to death. They should be fearful of getting what they want. This was just one example.

There are many things that I want and wish for, but I also realized the consequences of wishes. I am fearful of getting what I want for I will certainly destroy myself like a drunkard who would drink himself to death.

My heart shakes with fear when I listen to the stories of the past. My heart shakes with fear from the thought that all the Greats, and all the Terribles, all the Kings, and all the Generals of the past are now nothing more than dust. And I too shall one day turn to dust. The dust from which I came, I too shall return.

What if there is a day of judgment? What then? My heart shakes with fear when I think about the final destination of those who did others wrong. My heart shakes with fear when I think about those who would ask for justice, justice that was denied to them in this world. My heart shakes with fear when I think about the punishment for those who truly deserve it. My heart shakes with fear for I do not know what MY final destination would be. The anticipation of the result of my deeds and the final destination of mine is what truly makes my heart shake with fear.

gha_language: SCSS


text:
# fastCharPoly
Fast algorithm for computing the characteristic polynomial of a square matrix.

Algortihm is described in
"La Budde's Method For Computing Characteristic Polynomials"
by Rizwana Rehman and Ilse C.F. Ipsen

More information can be found on:
https://www.sebastianjiroschlecht.com/post/fastcharpoly/

repository: SebastianJiroSchlecht/fastCharPoly

repo_name: SebastianJiroSchlecht/fastCharPoly


text:
# BitDebug

![](https://raw.githubusercontent.com/noppefoxwolf/BitDebug/master/readme/logo.png)

[![Version](https://img.shields.io/cocoapods/v/BitDebug.svg?style=flat)](http://cocoapods.org/pods/BitDebug)
[![License](https://img.shields.io/cocoapods/l/BitDebug.svg?style=flat)](http://cocoapods.org/pods/BitDebug)
[![Platform](https://img.shields.io/cocoapods/p/BitDebug.svg?style=flat)](http://cocoapods.org/pods/BitDebug)

Your debug menu presentable anywhere.

## Example

To run the example project, clone the repo, and run `pod install` from the Example directory first.

## Requirements

## Installation

BitDebug is available through [CocoaPods](http://cocoapods.org). To install
it, simply add the following line to your Podfile:

```ruby
pod "BitDebug"
```

```swift
BitDebug.install(YourDebugViewController())
BitDebug.show()
```

## ScreenShot

![](https://raw.githubusercontent.com/noppefoxwolf/BitDebug/master/readme/sample320.gif)

## Author

Tomoya Hirano<EMAIL_ADDRESS>
## License

BitDebug is available under the MIT license. See the LICENSE file for more info.

repository: noppefoxwolf/BitDebug

repo_name: noppefoxwolf/BitDebug


text:
# wot-replay-lib-js
Javascript driven library for parsing world of tanks replays

## Example

```js
//Prepare xhr object (you could also allow user to drag&drop his local file instead)
var xhr = new XMLHttpRequest();
xhr.open('GET', "replays/20141224_0025_france-AMX_50_120_13_erlenberg.wotreplay", true);

//This is important, replay parser uses arraybuffer
//Loading file in plain text would result in problems with UTF-8 encoding
xhr.responseType = 'arraybuffer';

xhr.onload = function(e) {
  //Replay parser will parse provided arraybuffer
  var replay = new wot.replay.parser().parse(xhr.response));
  //Display basic replay info
  console.log(replay.begin);
};

xhr.send();
```

repository: xergio/wot-replay-lib-js

repo_name: xergio/wot-replay-lib-js


text:
# Read: 27 - Intents, Activities, and SharedPreferences

## Android Tasks and the Back Stack

- If the user presses the **Back** button, that new activity is finished and popped off the stack.
- The affinity indicates which task an activity prefers to belong to.

## Android SharedPreferences

- SharedPreference
  - A SharedPreferences object points to a file containing key-value pairs and provides simple methods to read and write them.
  - Each SharedPreferences file is managed by the framework and can be private or shared.
- ``getSharedPreferences()``
  - Use this if you need multiple shared preference files identified by name, which you specify with the first parameter. You can call this from any Context in your app.
- ``getPreferences()``
  - Use this from an Activity if you need to use only one shared preference file for the activity. Because this retrieves a default shared preference file that belongs to the activity, you don't need to supply a name.
- SharedPreferences.Editor
  - ``apply()`` changes the in-memory SharedPreferences object immediately but writes the updates to disk asynchronously.
  - Alternatively, you can use ``commit()`` to write the data to disk synchronously.

[Back to README](README.md)


text:
# Emoji versions

PicMo supports all sets of emojis up to the [Emoji 14.0](http://unicode.org/versions/Unicode14.0.0/) standard. However, not all browsers or operating systems will support this version of the Emoji standard.

Any emoji with a version greater than the current version will not be shown. This applies to top-level emojis as well as any variants tagged with a version.

The set of emojis available to select in PicMo can be set in two ways:

## Automatic selection (default behavior)

When creating a picker, PicMo will attempt to render an emoji from each version, starting at the latest available. If this emoji is not rendered correctly by the browser, this version is not supported and will be skipped. This will repeat until a representative emoji from a given version is rendered correctly, and then the version will be selected.

This is the default behavior, but can also be used by setting the `emojiVersion` option to `auto`.

## Manual selection

If you want finer control over the available emojis, you can set the `emojiVersion` option to a specific version number. This will cause PicMo to only render emojis from that version.

The currently available versions are:

- 1.0
- 2.0
- 3.0
- 4.0
- 5.0
- 11.0
- 12.0
- 12.1
- 13.0
- 13.1
- 14.0

url: https://raw.githubusercontent.com/jmlee2k/emoji-button/3525583e049cdea34e2ce48b9516983b9f02e209/docs/docs/02 - usage/02 - emoji-version.md

filename: 02 - emoji-version.md


text:
# Home Management

Arduino project that I use in my home.

### Features

- Using Blynk for UI on iPhone/Android (screenshots bellow)
- Wifi;
- 433mhz rolling code RF transmitter;
- Arm and Disarm my house security system;
- Night mode for security system (disable internal sensors but keep perimeters sensors on)
- Open and close my Garage Door and Gate;
- Measure my house energy consumption;

# Editor.md

![](blynk_tab1.png)
![](blynk_tab2.png)

repository: marlonanjos/home-mgmt

repo_name: marlonanjos/home-mgmt


text:
Modifier split
==============

Split a string by string

```
{$string|split:$delimiter = ","}
```

Returns an array of strings, each of which is a substring of `$string` formed by splitting it on boundaries formed by the string `$delimiter`.

```smarty
{var $fruits1 = "banana,apple,pear"|split}
$fruits1 is array ["banana", "apple", "pear"]

{var $fruits2 = "banana,apple,pear"|split:',apple,'}
$fruits2 is array ["banana", "pear"]
```

repository: fenom-template/fenom

repo_name: fenom-template/fenom


text:
![Docker](https://github.com/aquaron/qmk-infinity/workflows/Docker/badge.svg)

# qmk-infinity
Uses QMK to build the data file to flash Input Club's Infinity 60%.

## Syntax

    docker run --rm -v <local-dir>:/data aquaron/qmk-infinity <file.c> [<keyboard>] [<target>]

`<file.c>` is the name of the keymap file that contains the mapping to customize your keyboard layout.
See [qmk_firmware] for detailed information on how to customize the layout.
Create a `keymap.c` file and put it in `<local-dir>` and issue this command to run:

    docker run --rm -v /tmp:/data aquaron/qmk-infinity keymap.c

## Examples

### Build Example Keyboard

To check out a custom layout that uses VI-style cursor using dual-role semi-colon key as a layer switch run
the command below and check out `aquaron.c` in `/tmp`.

    docker run --rm -v /tmp:/data aquaron/qmk-infinity aquaron.c

[qmk_firmware]: https://github.com/qmk/qmk_firmware/tree/master/keyboards/infinity60

repository: aquaron/qmk-infinity

gha_language: C

repo_name: aquaron/qmk-infinity


text:
# Enumeration: RefundReason

[internal](../modules/internal-16.md).RefundReason

## Enumeration Members

### CLAIM

• **CLAIM** = ``"claim"``

#### Defined in

medusa/dist/models/refund.d.ts:8

___

### DISCOUNT

• **DISCOUNT** = ``"discount"``

#### Defined in

medusa/dist/models/refund.d.ts:5

___

### OTHER

• **OTHER** = ``"other"``

#### Defined in

medusa/dist/models/refund.d.ts:9

___

### RETURN

• **RETURN** = ``"return"``

#### Defined in

medusa/dist/models/refund.d.ts:6

___

### SWAP

• **SWAP** = ``"swap"``

#### Defined in

medusa/dist/models/refund.d.ts:7

repository: medusajs/medusa

branch_name: refs/heads/develop

repo_name: medusajs/medusa