text:
# Forth crash course

If you are new to Forth, it's good to cover some of the basics of the language
before diving into gbforth. This crash course helps you read and follow (on a
very basic level) the code in the examples and documentation.

## Words

Forth is a simple stack-based language: There is essentially no syntax, just
**numbers** and **words**. Numbers are literal values that are pushed on the
parameter **stack**. Words are subroutines that operate on this stack. For
example, consider the following Forth code:

```fs
4 dup *
```

The system starts interpreting this code. First it pushes `4` to the stack. Upon
reading the word `dup`, the value on top of the stack is duplicated. After that,
the word `*` will pop the top 2 values off the stack, multiply them, and push
the result back on the stack.

At the end of this program, the parameter stack will have a single value on it,
which is `16`.

## Defining words

You can also add new words to the Forth dictionary:

```fs
: square dup * ;
```

Once the word `:` is read, the system parses the next word and uses it as the
name for your new definition.

It then switches to **compiler mode**, which means that it stops interpreting
code, but instead add words (and numbers) to the body of the new definition.

After some time the word `;` is read. This words ends the definition and
switches the system back to **interpreter mode**. With this new word defined, we
can rewrite our earlier example:

```fs
: square dup * ;

4 square
```

This code will have the same effect as before: The parameter stack contains a
single `16`.

Take note of the concatenative style of Forth: Words are always evaluated from
left to right, and _concatenation is composition_. Any series of words can be
moved into a new definition without having to shuffle words around. In practice,
this means you can safely replace all occurrences of `dup *` with `square`, so
simplifying your code is very straightforward!

## Comments

There are 2 styles of comments: In-line comments that are delimited between `(`
and `)`, and comments that start with `\` and continue till the end of the line:

```fs
: square ( this is a comment ) dup * ;

\ and this too
4 square
```

Note that this is no special syntax: Both `(` and `\` are simply **words** that
parse and discard all characters until a `)` or line end is reached. Make sure
to not forget to follow these words with a space before writing your comment.

It's common to use in-line comments to document the
[stack effect](./stack-effects.md) of a word:

```fs
: square ( n -- n ) dup * ;
```

## Further reading

If you want to learn about Forth on a deeper level,
[Starting FORTH](https://www.forth.com/starting-forth) is a great read!

repository: ams-hackers/gbforth

gha_language: Forth

repo_name: ams-hackers/gbforth


text:
# iox9
Framework for user flows monitoring in establishments.

## Branches organization
``master``: the IOx9 framework release branch

``iox9-dev``: the IOx9 framework development branch

``rapx9-dev``: the RAPx9 application development branch

## Framework workflow

You have things that capture data which contain an identification object for the entity you want to monitor. If you want to monitor cars, for example, the capturing thing can be a camera and the identification object can be the car's license plate. In order to recognize the identification object, you generally use an algorithm. In the car case, a license plate recognition algorithm. Also, you want to store the entering and the exiting of the entity in a database, as well as general and specific informations about each entity. Finally, you want to fire notifications, generate statistics and show the entities' data for the final user.

If you are in this scenario, this is the right framework for you.

## Usage

1. Choose your capturing things and implement code that takes the data from the things, using the IdentityDataSource abstract class.
2. Choose the algorithm for extracting identification objects from the captured data, implementing the EntityRecognizer.
3. Implement processors for this data, extending the abstract class EntityProcessor, which contains a template method.
4. Decide if you want to capture extra data from external sources, and, if so, implement the InformationCollector.
5. Choose the statistics you want to get, and for each of them, implement a class which extends from StatisticsProcessor.
6. Decide the notifications you are interested, and for ech of them, implement a class which extends from NotificationAgent.
7. Implement classes which are interested in informations from the processors, statistics processors and notification agents.
8. In the configx9.yaml configuration file, configure the specific data for your application.

license: MIT

branch_name: refs/heads/master

extension: md

license_type: permissive


text:
---
title: Display in QGIS
---

## Display your data in QGIS
*10-15 minutes*

Finally, let's check that you can **display** your data properly

If you're working with multiband remotely-sensed imagery, you may need to adjust how it's symbolised in QGIS in order to make sense of it, or prepare for analysis such as classifying the image (not covered in this course).

When you view your data in QGIS, consider these questions:
- Are the layers displayed in the *correct location*, overlaying with other, reference layers such as country boundaries or field sites?
- Do remotely-sensed data display correctly, with *variation in colour*, or grey shades?

Remember to use the [Help area](https://padlet.com/VerdantLearn_LT/GISRefresher1_HelpArea_May2021) if you're stuck!

Hurrah, you have completed today's learning objective!  :fireworks:


text:
### Google Apps Script / tern.js
*npm installable version.*

This is a patched version of aki2o's Google Apps Script plugin for tern, updated with type definitions from current (2018) documentation. See [here for the full project details](https://github.com/aki2o/tern-gas). You should follow instructions there to install globally. The installation below is intended for local installation (per project basis).

###Install
1. [Install ternjs](http://ternjs.net/). Tern is supported on many code editors, including Sublime, Emacs, Vim, and many more.
2. Install this package via npm in your current project directory:
```
npm i tern-googleappsscript
```
3. Load the tern plugin using a `.tern-project` file placed in your project directory:

```
// .tern-project

{
  "libs": [
  ],
  "plugins": {
    "googleappsscript"
  }
}
```


text:
# isilon-nodered
A set of [Node Red](https://nodered.org/) flows and subflows to create Isilon dashboards and workflows using the Isilon API.

Provided as a demonstration of Runbook automation and the Isilon API.

Flows:
- Dashboard: Simple Performance / Availability dashboard for 2 clusters

More flows to follow!

repository: j-sims/isilon-nodered

repo_name: j-sims/isilon-nodered


text:
# Baofeng UV-5RA Manual #

## Safety ##
* Do not use if the antenna is broken
* Keep antenna 2.5cm from body while transmitting
* Microphone works best 3-4cm away from mouth
* Keep out of direct sun for too long

## Battery ##
* Standby (no load) OR Error (?!) - Red flashes, Green glows
* Charging - Red solidly glows
* Fully charged - Green solidly glows

Only keep in charger while charging if you can. You can charge the radio or the battery by itself. To remove slide push in latch on the top and down 2cm. It takes about 4-5 hours to charge.

## Understanding your Radio Transciever ##

1. Antenna - keep 2.5cm away from body when transmitting. DO NOT turn on radio without radio plugged in. When changing or adjusting antenna do so from the base of the antenna.
2. Flashlight
3. Volume & On/Off
4. LCD display
    *
5. SK-side key1/CALL (radio/alarm)
    * Press the [CALL] button to activate the FM Radio; Press it again to deactivate.
    * Press and hold on the [CALL] button to activate the alarm function; Press and hold it again, to deactivate
6. SK-side key2/MONI (flashlight/monitor)
    * Press the [MONI] button to turn on the flashIight; Press it again to turn off.
    * Press and hold on the [MONI] button to monitor the signal.
7. PTT Push To Talk button - Push to talk, release to receive
8. VFO / MR (frequency / Channel mode) - This button changes the selection mode between memory recal mode [MR] and frequency mode [VFO]. You can switch between memory channels with the arrow keys or enter the frequency with the keypad
9. LED indicator
    * Standby (no load) OR Error (?!) - Red flashes, Green glows
    * Charging - Red solidly glows
    * Fully charged - Green solidly glows
10. Strap buckle
11. Accessory Jack - used to connect audio accessories or the programming cable
12. A/B Frequency display switches - ?
13. BAND key - This switches the band display. Whilst the FM radio is activated, press the [BAND] button to switch to FM radio band of 65- 75MHz/76-108MHz
14. Keypad
    * [*SCAN] key
        * Press to activate the Reverse function, it will exchange a separate reception and transmission frequency.
        * Press the [*SCAN] key for 2 seconds to start scanning (frequency or channel).
        * When the FM radio is activated, press the [*SCAN] key to search FM radio station.
        * When setting the RX CTCSS/DCS, press the [*SCAN] key to scan the RX CTCSS/DCS.
    * [*🗝] KEY
        * Under channel mode, press  [*🗝] key to switch between High / Low transmit power.
        * Press [*🗝] key for 2 seconds to lock/unlock the keypad.
    * [MENU] key enters the radio's menu or confirms the setting option chose
    * 🔼🔽 Press and hold 🔼 or 🔽 key to change the frequency up or down quickly. Press the buttons for finer grained control
    * [EXIT] key cancels, clears or exits
    * NUMERIC KEYPAD:
        * Used to enter information for programming the radio's lists and the non-standard CTCSS
        * Under transmission mode, press the numeric key to send the signal code (the code should be set by PC software).
15. SP&MIC - keep the mic 3-4cm away from your mouth at an angle
16. Battery pack
17. Battery contacts - You can charge the radio or the battery by itself.
18. Battery remove button - To remove slide push in latch on the top and down 2cm.

## Menu ##

1. SQL Squelch level
    * 0-9
    * The squelch mutes the speaker of the transceiver in the absence of reception. With the squelch level correctly set, you will hear sound only while actually receiving signals and it significantly reduces battery current consumption. It is recommended that you set to Level 5.
    * I have my squelch sensitivity set to 3. The higher it is the more sensitive it is.
2. STEP Frequency Step
    * 2.5 / 5 / 6.25 / 10 / 12.5 / 25 kHz
3. TXP Transmit power
    * High / Low
4. SAVE Battery Save
    * OFF / 1 / 2 / 3 / 4
5. VOX Voice Operated Transmission
    * OFF / 0-10
    * This function makes it not necessary to push the [PTT] on the transceiver for a transmission. Transmission is activated automatically by detecting your voice. When you have finished speaking, the transmission is automatically terminated and the transceiver will automatically receive incoming signals.
    * Be sure to adjust the VOX Gain level to an appropriate sensitivity to allow smooth transmission.
6. W/N Wideband / Narrowband
    * WIDE / NARR
    * In areas where the RF signals are saturated, you must use the narrow band of transmission to avoid interference in adjacent channels.
7. ABR Display Ilumination
    * OFF / 1 / 2 / 3 / 4 / 5 s
8. TDR Dual Watch / Dual Reception
    * OFF / ON
    * This feature allows you to operate between frequency A and frequency B. Periodically,the transceiver  checks whether a signal is received on another frequency that we have scheduled (?). If you receive a signal, the unit will remain in the frequency until the received signal disappears.
9. BEEP Keypad beep
    * OFF / ON
10. TOT Transmission timer
    * 15 / 30 / 45 / 60 ... 585 / 600 seconds
    * This function can automatically controls the time to transmit each time you press [PTT] on the transceiver. This feature is useful to avoid over heating of the transistors. The transceiver will turn off transmission after the set amount of seconds.
11. R-DCS Reception digital coded squelch
    * OFF / D023N ... D754I
12. R-CTS Reception Continuous Tone Coded Squelch
    * 67.0Hz - 254.1Hz
13. T-DCS Transmission digital coded squelch
    * OFF / D023N ... D754I
14. T-CTS Transmission Continuous Tone Coded Squelch
    * 67.0Hz - 254.1Hz
15. VOICE Voice prompt
    * OFF / ON Chinese or English
16. ANI Automatic number identification of the radio
    * This can only be set by PC software.
    * ANI (Automatic Number Identification) is also known as PTT ID because an ID is transmitted when the [PTT] button of the radio is pressed and /or released. This ID tells the dispatcher which field radio was keyed.
17. DTMFST The DTMF tone of transmitting code.
    * OFF / DT-ST / ANI-ST / DT+ANI
    * OFF Under transmitting mode, you can't hear the DTMF tone, while you press the key to transmit the code or code automatically transmitted
    * DT-ST Under transmitting mode, you can hear the DTMF tone, while you press the key to transmit the code
    * ANI-ST under transmitting mode, you can hear the DTMF tone, while the code is automatically transmitted
    * DT-ANI under transmitting mode, you can hear the DTMF tone, while you press the key to transmit the code or the codeis automatically transmitted
18. S-CODE Signal code, this is only set by using the PC software.
    * 1, ... 15 groups
19. SC-REV Scan resume method
    * TO / CO / SE
    * This transceiver allows you to scan memory channels, all the bands or part or the bands.
    * When the transceiver detects a communication, the scan will stop automatically
    * TO Time Operarion - Scanning will stop when it detects an active signal. The scanning will stop for a pre determined amount of time before it moves on to scan again.
    * CO Carrier Operation - The scanning will stop on a channel or Frequency when it finds an active signal and then move on when it disappears
    * SE Search Operarion - the scanning will stop and remain on a channel when it finds an active signal
20. PTT-ID press or release the PTT button to transmit the signal code. This allows people to know who called them
    * OFF / BOT / EOT / BOTH
    * OFF - Don't transmit the ID code
    * BOT - transmit the code when you push the [PTT] button
    * EOT - transmit the code when you release the [PTT] button
    * BOTH - transmit the code when you push or release the [PTT] button
21. PTT-LT delay the signal code sending
    * 0 - 30ms
22. MDF-A under channel mode, A channel displays. (name display can only be set by PC software.)
    * FREQ / CH / NAME
23. MDF-B under channel mode, B channel displays.  (name display can only be set by PC software.)
    * FREQ / CH / NAME
24. BCL busy channel lockout
    * OFF / ON
    * The BCLO feature prevents the radio's transmitter from being activated if a signal strong enough to break through the "noise" squelch is present.
    * On a frequency where stations using different CTCSS or DCS codes may be active, BCLO prevents you from disrupting their communications accidentally (because your radio may be muted by its own tone decoder).
25. AUTOLK keypad locked automatically
    * OFF / ON
26. SFT-D direction of frequency shift
    * OFF / + / -
    * The "OFFSET" is the difference or offset between the reception frequency and the frequency of transmission for access to amateur radio repeaters. Set the "OFFSET" according to the OFFSET amateur radio repeater through which want to communicate.
27. OFFSET frequency shift
    * 000.000 ... 69.990
    * When communicating via a repeater, the repeater listens on one frequency and transmits on another, the difference between these frequencies is the offset.
    * For example If we want to make a communication through amateur radio repeater whose frequency input is 145,000 MHz and output is 145,600 MHz the "OFFSET" is 000.600 MHz and the direction of SHIFT to '-' so the transceiver will always be 145,600 MHz in frequency when you receive and when you press [PTT] to transmit, the frequency will automatically move to 145,000 MHz
28. MEMCH stored in memory channels
    * 000, ... 127
29. DELCH delete the memory channels
    * 000, ... 127
30. WT-LED ilIumination display colour for standby
    * OFF / BLUE / ORANGE / PURPLE
31. RX-LED ilIumination display colour for reception
    * OFF / BLUE / ORANGE / PURPLE
32. TX-LED ilIumination display colour for transmitting
    * OFF / BLUE / ORANGE / PURPLE
33. AL-MOD alarm mode
    * SITE / TONE / CODE
34. BAND band selection
    * VHF / UHF
35. TX-AB transmitting selection while in dual watch / reception
    * OFF / A / B
36. STE Tail Tone Elimination
    * OFF / ON
    * This function is used to activate or deactivate the transmission end of the transceiver, final tone transmission only be used in communications between transceivers and not in communications through a repeater, which must be deactivated. (?)
37. RP_STE Tail tone elimination in communication through repeater
    * OFF / 1, 2, 3, ... 10
38. RPT_RL Delay the tail tone of repeater
    * OFF / 1, 2, 3, ... 10
39. PONMGS Boot display
    * FULL / MSGS
40. ROGER tone end of transmission
    * OFF / ON
41. RESET Restore to default setting. USE CAREFULLY!
    * VFO / ALL

**NOTE:** Under channel mode the following menu settings are invalid: CTCSS, DCS, W/N, PTT- ID, BCL, SCAN ADD TO, S-CODE, CHANNEL NAME. Only the H/L power can be changed.

## Getting started ##

* Make sure the antenna and battery are installed and the battery charged.
* Rotate the knob clockwise to turn the radio on, (rotate the knob fully counter-clockwise until a 'click' is heard to turn the radio off). Turn the knob clockwise to increase the volume, or counter clockwise to decrease the volume
* Push Orange V/M button If necessary to enter Frequency (VFO) mode (no channel number is shown) if voice mode is on the radio will announce  Frequency mode .
* Press 🔼 or 🔽 or use the keypad to select the desired frequency or channel you want. The display shows the frequency or channel selected. Press and hold to move faster through the frequencies.

### Entering a frequency in frequency mode (VFO) ###

* Press the A/B key so that the 🔼 symbol is to the left of the upper frequency display
* Press Orange V/M Button to enter the frequency mode If you have the voice on (option #14) the radio will announce  Frequency Mode and there will not be a channel number next to the frequency display. If the radio announced 'channel mode' press the Orange VM Button again.
* Enter the desired frequency for example 147.300 443.400 using the keypad. Note that there is no decimal point key, it will be entered automatically after your first three input digits. If in the voice mode (Menu # 14)  the radio will announce each digit entered.

### Setting the transmit power ###

* Press the MENU again and use the 🔼 and 🔽 arrow keys to get to item #2 Transmit Power
* Press the MENU again The radio will respond with 'power' if voice (menu #14) is on and use the 🔼 and 🔽 arrow keys to select the desired power level (HIGH or LOW)
* Press the MENU again to lock in your selection If you have voice turned on (Menu item 14) the radio will announce  confirmed.
* Press the EXIT key to leave the menu system.

## Programming the radio ##

### Storing the frequency ###

This procedure will store the frequency entered above along with the above settings.

* Press the MENU and use the 🔼 and 🔽 arrow keys to get to menu # 27 MEM-CH
* Press the MENU the radio will announce the memory channel. Use the keyboard to enter an empty channel number location.
* Press the MENU the radio will announce 'receiving memory'
* Press the EXIT key to leave the menu system.

### Entering and storing the transmit frequency ###

* Press the * KEY. The display will show the transmit frequency (previously entered frequency + or the offset set above or 'no offset')
* Press the MENU key
* Press the MENU key the radio will announce 'Channel number'
* Press the MENU key again and the radio will announce 'Transmitting memory'
* Press the EXIT key to leave the menu system.
* Press the * KEY to exit the reverse  mode.

If you are entering additional frequencies go back to the beginning of the getting started section, skipping steps that are the same as the previous entry

### Deleting a memory location ###

* Press the MENU and use the 🔼 and 🔽 arrow keys to get to menu #28 DEL-CH
* Press the MENU The voice will announce 'Delete Memory'. Use the keyboard to enter the channel number to be deleted.
* Press the MENU the radio will announce Confirm
* Press the EXIT key to leave the menu system.

**NOTE:** Keep in mind that you can program frequencies that are illegal to use with your amateur radio privileges. This radio does not inhibit transmitting on these frequencies so if you accidently transmit you will be heard on that frequency (police, weather, taxi, fire, etc.) The way to avoid this is to use the programing software and enter a transmit frequency of 000.000 MHz). We have not found a way of entering 000.000 in the manual programing mode.

## Accessing repeaters ##

Tune your radio to the output frequency of the repeater (the frequency the repeater transmits on.) (Enter frequency mode and use the keypad to enter this frequency)

The repeater takes transmissions on one frequency (its input frequency) and repeats it to a slightly offset frequency which is what your radio is tuned to listen on. The difference between these two frequencies is known as the offset (menu 26) - certain bands have standard offsets (see below) but the repeater may be an exception so it's worth checking.

If the output frequency of the repeater is higher than the input frequency, then the repeater has a negative directional shift,  (menu 25) and visa versa.

The only other thing you need to connect to a repeater is the Tone (menus 10-13). In order to trigger the repeater to accept your transmission you need to know the tone or code of the repeater. This will likely be one of two types of tone DCS or CTCSS. It's a non-audible tone that the repeater hears to know that you want it to repeat what you are transmitting. Most repeaters have the same receive tone as they do transmit tone.

On your radio, the Transmit tone is what is transmitting to the receiver, and the receive tone is what you get back. I have found that some repeaters don't work for me if I have the recieve tone set. So keep an eye out that if you can transmit to the receiver but can't hear anything, try turning off the recieve tone.

### Standard Repeater Input/Output Offsets ###

Band             Offset
6 meters         1 MHz
2 meters          600 kHz
1.25 meters    1.6 MHz
70 cm              5 MHz
33 cm             12 MHz
23 cm              20 MHz

300/MHz to get the rough wavelength/band

### To set up a repeater quickly ###

* Frequency:
    * Enter frequency mode [VM]
    * Use the [keypad] to enter the base frequency, e.g. For the SF Radio Club's Sutro tower repeater enter 145.150MHz
* Offset:
    * [MENU] [keypad 26] to get to the OFFSET menu,
    * press [MENU] to edit, for example type 000.600 to enter an offset of 600KHz.
    * Press [MENU] to save.
    * [EXIT] to quit the menu if needed.
* Offset direction:
    * [MENU] [keypad 25] to get to SFT-D menu for the frequency offset shift, in which direction does the offset apply + or -. For the SF radio club repeater set to -
    * Use [MENU] to edit and the arrow keys to select - then [MENU] to save and [EXIT] if needed.
* Transmit DCS code:
    * Press [MENU] [keypad 12] to get to the T-DCS menu,
    * press [MENU] to edit the transmit DCS code and then use the keypad or arrow keys, for example for the SF Radio Club's Sutro tower repeater press and hold the down key to get to D664I.
    * Press [MENU] to save.
    * [EXIT] to quit the menu if needed.
* Receive DCS code:
    * [MENU] [keypad 10] make sure the Recieve DCS code is set correctly, the SF radio club tower requires OFF for receive code.
    * [MENU] to enter R-DCS and then [keypad 0] to set to off,
    * Press [MENU] to save.
    * [EXIT] to quit the menu if needed.
* I have my squelch sensitivity set to 3.

### Setting the CTCSS tone ###

* Press the MENU key and use the 🔼 and 🔽 arrow keys to get to menu item #13 (or type 13 in the keypad) to set the CTCSS Tone if used.
* Press the MENU to edit, if you have voice turned on (Menu item 14) the radio will respond with  T CTCSS . Use the keypad to select the desired CTCSS tone (i.e. 100, 123, 141, etc.)
* Press the MENU again to lock in your selection If you have voice turned on (Menu #14) the radio will announce  confirmed .
* Press the EXIT key to leave the menu system.

### Setting the repeater offset shift ###

* Press the MENU Key.
* Use the 🔼 and 🔽 arrow keys or keypad to get to menu item #25 to set plus, minus or no offset.
* Press the MENU again and use the use 🔼 and 🔽 arrow keys to select +, - or none.
* Press MENU again to lock in your selection If you have voice turned on (Menu #14) the radio will announce  'confirmed'
* Press the EXIT key to leave the menu system.

### Setting the repeater offset frequency ###

* Press the MENU key.
* Use the 🔼 and 🔽 arrow keys to get to menu #26 (or type 26 on the keypad) to set plus the repeater OFFSET frequency.
* Press the MENU again. The radio will announce offset frequency if the voice is turned on (Menu #14) . Use keyboard to enter the desired offset frequency (for 2 meters this will be 600 KHz and for 70 cm it will be 5 MHz). For 600 KHz enter 000600 and for 5 MHz enter 005000.
* Press MENU again to lock in your selection If you have voice turned on (Menu # 14) the radio will announce  confirmed .
* Press the EXIT key to leave the menu system.

### Long distance communication through a repeater ###

To establish long distance communications through an amateur radio repeater, which needs to receive a 1750 Hz tone. Press and hold the [PTT] button then press the [BAND] button to transmit a 1750Hz tone.

## Squelch codes ##

 In some cases you may want to establish communications in a closed group at a particular frequency or channel. For that you can use "CTCSS" or "DCS" for reception.

The "squelch" opens only when receiving a frequency with "CTCSS" or "DCS" code that is same as programmed in your transceiver. If codes of the received signal differs from those programmed in your transceiver, the "squelch" will not open and the received signal can't be heard.

**NOTE:** The use of "CTCSS" or "DCS" in a communication, does not guarantee complete confidentiality in your communication.

### CTCSS ###

*[Image here]*

### DCS ###

*[Image here]*

### Useful Frequencies ###

* 70m call frequency
* 2m call frequency
* Commercial radio 65-108MHz

## Additional devices ##

* Antenna
    * Needs to have a Standing Wave Ratio of 1.5:1 or less to avoid damaging transceivers transistors
* Battery packs
    * Amazon:
* Programming cable
    * Amazon:

## Technical specifications ##

*[Image here]*

## Troubleshooting ##

### The radio does not start. ###

* The battery could be low, try replacing the battery
* The battery may not be installed correctly, take out and put the battery back in

### The battery runs down quickly. ###

* The battery life could have come to an end and you need a new battery
* The battery may not be fully charged

### The receiving indicator LED lights but do not hear the speaker ###

* Make sure the volume is not set too low
* Make sure the squelch undertones (CTCSS or DCS) are the same in your transceiver as they are for everyone else
* Try turning off the receive DCS/CTCSS
* Try turning down the squelch sensitivity

### When transmitting, the other members of the group do not receive communication ###

* Make sure the squelch undertones (CTCSS or DCS) are the same in your transceiver as they are for everyone else
* You may be too far away from the other party
* You or the other party may be in an area with bad Radio signal propagation.

### In "standby" mode the transceiver transmits without pressing [PTT] ###

* Check the level of adjustment VOX is not too sensitive

### Receiving communications from other groups whilst you are communicating with your group ###

* Change frequency or channel
* Change the squelch undertones (CTCSS or DCS) for you and your group

### Communications with other members of the group is poor or low quality ###

* You or the other party may be in an area with bad Radio signal propagation. For example a tunnel, underground, in a mountainous area or built up urban structure.

## Credits ##

* Most of this is from the official user guide that came with the radio.
* Some of the instructions is from the 'Programming your radio' guide by Bob Peterson KE7RAP, Randall Jones AE7RJ and Jack Tiley AD7FO.

repository: natbat/ham-radio

repo_name: natbat/ham-radio


text:
# Using Valgrind

A Node.js process may run out of memory due to excessive consumption of native
memory which can lead to a native crash. Valgrind is a diagnostics tool on Linux
machines to help investigating native memory leaks.

Check out the [Investigating Memory Leaks with valgrind](https://github.com/nodejs/node/blob/master/doc/guides/investigating_native_memory_leak.md) guide to learn more about how to use
Valgrind.

repository: nodejs/diagnostics

branch_name: refs/heads/main

gha_license_id: MIT

repo_name: nodejs/diagnostics


text:
# IRON
IRON: A Fast Interest Point Descriptor for Robust NDT-Map Matching - Reference Implementation

![alt tag](https://raw.github.com/thoschm/IRON/master/img/img1.png)

**Features:**
- IRON provides a simple interface for the alignment of 3D point clouds using 6 degrees of freedom (x, y, z, roll, pitch, yaw)
- Almost any given point cloud format can be directly used without expensive point cloud type conversion beforehand (see src/demo.cpp for an example)
- It's robust and insensitive to a large initial displacement between two point clouds (e.g. when they were captured from different locations)
- IRON uses NDT-maps as an efficient 3D data structure and is able to create them with sufficient accuracy in about 3 ms (average conversion time for a typical Kinect 1 / Asus Xtion point cloud)
- The complete alignment process takes only 10-20 ms on a single core of a modern i7 CPU (depending on registration parameters and map sizes) and is therefore well suited for real-time applications

**For algorithmic details and benchmarking results please refer to the original paper:**
*************************************************************************************************************
Schmiedel, Th., Einhorn, E., Gross, H.-M.
IRON: A Fast Interest Point Descriptor for Robust NDT-Map Matching and Its Application to Robot Localization.
IEEE/RSJ Int. Conf. on Intelligent Robots and Systems (IROS), Hamburg, Germany, 2015
*************************************************************************************************************

You may also visit my [research page](http://research.thomas-schmiedel.com/?page_id=35) for a thorough introduction.

**Required packages** (Ubuntu 14.04; please install equivalent packages for your Linux distribution):
- build-essential
- libeigen3-dev
- gnuplot-x11

**How to run demo?**
- cd IRON
- make
- cd examples
- ./demo example1_cloud1.pcd example1_cloud2.pcd
- ./plot_means_keypoints.sh
- ./plot_result.sh

**How to use the IRON registration pipeline?**
- just include IRON.h into your project
- have a look at src/demo.cpp for a detailed explanation

**Please contact me if you have any questions!**

schmiedel.tho(AT)gmail.com

repository: RENyunfan/PointCloud

repo_name: RENyunfan/PointCloud


text:
![DC/OS Logo](https://acomblogimages.blob.core.windows.net/media/Default/Windows-Live-Writer/dcoslogo.png) ![Portworx Logo](https://github.com/portworx/px-dev/blob/master/images/pwx-256.png)

Portworx provides scale-out storage for containers. Portworx storage is delivered as a container that is installed on your servers. Portworx technology:

* Provides data protection and container-granular management.
* Enables companies to run multi-cloud with any scheduler.
* Manages storage that is directly attached to servers, from cloud volumes, or provided by hardware arrays.
* Is radically simple.

Portworx technology is available as PX-Developer and PX-Enterprise.

- Estimated time for completion: 45 minutes
- Target audience: Anyone who wants to deploy a persistent elastic data services solution on DC/OS.
- This package requires an intermediate/advanced DC/OS skill set.

Please review the main [Portworx on DCOS](https://docs.portworx.com/scheduler/mesosphere-dcos/) documentation.

# Prerequisites

- A running DC/OS v1.9 cluster with at least 3 private agents. Portworx-on-DCOS REQUIRES at least 3 nodes for installation.
- All nodes in the cluster that will participate in a Portworx cluster MUST have a separate non-root volume to use.
- A node in the cluster with a working DC/OS CLI.

# Portworx Agent-Node configuration

- Portworx can run on DCOS agent nodes that are either on-prem or in the cloud.
- Portworx works best when installed on all nodes in a DC/OS cluster.  If Portworx is to be installed on a subset of the cluster, then:
 * the agent-nodes must include attributes indicating the participate in the Portworx cluster.
 * services that depend on Portworx volumes must specify "constraints" to ensure they are launched on nodes that can access Portworx volumes.

# Install Portworx
## Default Install
If you want to use the defaults, you can now run the dcos command to install the service
```
$ dcos package install --yes portworx
```
You can also click on the  “Install” button on the WebUI next to the service and then click “Install Package”.

This will install all the prerequisites and start the Portworx service on 3 private agents.
The default login/password for lighthouse would be<EMAIL_ADDRESS>
## Advanced Install
If you want to modify the defaults, click on the “Install” button next to the package on the DCOS UI and then click on
“Advanced Installation”

Through the advanced install options you can change the configuration of the Portworx deployment. Here you can choose to
disable etcd (if you have an external etcd service) as well as disable the Lighthouse service in case you do not want to
use the WebUI.

## Portworx Options
Specify your kvdb (consul or etcd) server if you don't want to use the etcd cluster with this service. If the etcd cluster
is enabled this config value will be ignored.
If you have been given access to the Enterprise version of PX you can replace px-dev:latest with px-enterprise:latest.
With PX Enterprise you can increase the number of nodes in the PX Cluster to a value greater than 3.

![Portworx Install options](img/dcos-px-install-options.png)

## Etcd Options
By default a 3 node etcd cluster will be created with 5GB of local persistent storage. The size of the persistent disks can
be changed during install. This can not be updated once the service has been started so please make sure you have enough
storage resources available in your DCOS cluster before starting the install.

![Portworx ETCD Install options](img/dcos-px-etcd-options.png)

## Lighthouse options
By default the Lighthouse service will be installed. If this is disabled the influxdb service will also be disabled.

You can enter the admin email to be used for creating the Lighthouse account. This can be used to login to Lighthouse
after install is complete. The default password is `admin` which can be changed after login.

![Portworx Lighthouse Install options](img/dcos-px-lighthouse-options.png)

Once you have configured the service, click on “Review and Install” and then “Install” to start the installation of the
service.

# Install Status

Once you have started the install you can go to the Services page to monitor the status of the installation.

If you click on the Portworx service you should be able to look at the status of the services being created.

In a default install there will be one service for the framework scheduler, 4 services for etcd (
3 etcd nodes and one etcd proxy), one service for influxdb and one service for lighthouse.

![Portworx Install finished](img/dcos-px-install-finished.png)

The install for Portworx on the agent nodes will also run as a service but they will "Finish" once the installation is done.

You can check the nodes where Portworx is installed and the status of the Portworx service by clicking on the Components
link on the DCOS UI.

![Portworx in DCOS Compenents](img/dcos-px-components.png)

# Accessing Lighthouse

Since Lighthouse is deployed on a private agent it might not be accessible from outside your network depending on your
network configuration. To access Lighthouse from an external network you can deploy the
[Repoxy](https://gist.github.com/nlsun/877411115f7e3b885b5e9daa8821722f) service to redirect traffic from one of the public
agents.

To do so, run the following marathon application

```
{
  "id": "/repoxy",
  "cpus": 0.1,
  "acceptedResourceRoles": [
      "slave_public"
  ],
  "instances": 1,
  "mem": 128,
  "container": {
    "type": "DOCKER",
    "docker": {
      "image": "mesosphere/repoxy:2.0.0"
    },
    "volumes": [
      {
        "containerPath": "/opt/mesosphere",
        "hostPath": "/opt/mesosphere",
        "mode": "RO"
      }
    ]
  },
  "cmd": "/proxyfiles/bin/start portworx $PORT0",
  "portDefinitions": [
    {
      "port": 9998,
      "protocol": "tcp"
    },
    {
      "port": 9999,
      "protocol": "tcp"
    }
  ],
  "requirePorts": true,
  "env": {
    "PROXY_ENDPOINT_0": "Lighthouse,http,lighthouse-0-start,mesos,8085,/,/"
  }
}
```

You can then access the Lighthouse WebUI on http://\<public_agent_IP\>:9998.
If your public agent is behind a firewall you will also need to open up two ports, 9998 and 9999.

## Login Page
The default username/password is<EMAIL_ADDRESS>
![Lighthouse Login Page](img/dcos-px-lighthouse-login.png)

## Dashboard
![Lighthouse Dashboard](img/dcos-px-lighthouse-dashboard.png)

# Scaling Up Portworx Nodes

If you add more agents to your DCOS cluster and you want to install Portworx on those new nodes, you can increase the
NODE_COUNT to start install on the new nodes. This will relaunch the service scheduler and install Portworx on the nodes
which didn't have it previously.

![Scale up PX Nodes](img/dcos-px-scale-up.png)

# Use Portworx

For more detailed description on using Portworx through DCOS please visit  [Portworx on DCOS framework homepage](https://docs.portworx.com/scheduler/mesosphere-dcos)

# Further resources
1. [Portworx doc site ](http://docs.portworx.com)


text:
---
layout: post
title: Focusing On R&D Would Drive Corporate Valuation Even in The Short Term
---

Gone are the days when R&D was a dead weight on the financials of a company and it looks like investors are paying a premium for companies with good R&D teams. Running a linear regression on the fundamentals of a company that relate to the market cap shows that R&D spending along with margins and growth is a key factor in driving market cap.

Companies that have the cash to spend as actually spending on R&D, not just to not go obsolete but also to deliver shareholder value. Especially in a good economy, spending on R&D has a direct relation to the premium investors are willing to pay for the company.

We all understand that no company can afford to hire Elon Musk to create a perception of greater innovation happening, so instead companies have to make the consistent effort of spending on R&D to create value to their investors.

![musk](/images/musk.png)

Summarizing the analysis and sources of information used:

Focus on improving operating margins, growth and R&D, while avoiding too much focus on top and bottom line

OLS model may not the best one to use when approaching this problem for an implementable model, but gives it gives us the directional relation.

Mcap = 5,419  -  0.1 Sales (FY+1)  +  4.9 EBITDA (FY+1) + 39.8 Long term EPS +  315.0 R&D as a % of sales

R Square came down from 0.65 to 0.43, also bringing down the MSE residual and total by over 90%
1.	Operating efficiencies and growth
2.	Investing in R&D has proven to have a direct impact of how investors value a company (TODAY)

Limitations of the analysis: starting with a data set of over 1900 companies and cutting they to around 500 was disheartening but necessary as most of the companies don’t report R&D expenses as a line item on their income statement. But in the end 500 was a pretty good data set to understand the fundamental relation between R&A and the market cap.

Objective was to run a regression analysis with variables ranging from forecasted sales to beta to eps and look at the general pattern of what variables play a role in higher valuation.

![topcompanies](/images/topcompanies.png)

Information sources that I tapped into were ThomsonOne Analytics and FirstCall Estimates which were the standard financial databases that offer the information on company estimates as well as their fundamentals.

![sources](/images/sources.png)


text:
# cli_widgets : text based widgets
This library is thought to add easily in C++ application some common command line widgets.

For the moment the following is supported :

## [`cli_widgets::spin_loader`](./cli_widgets/spin_loader.hpp)

![`cli_widgets::spin_loader`](./spin_loader.gif)

```cpp
cli_widgets::spin_loader loader(std::cout);
loader.launch();
  some_long_running_computation();
loader.stop();
```

See [spin\_loader.cpp](./examples/spin_loader.cpp) for more example.

## [`cli_widgets::hidden_input_guard`](./cli_widgets/hidden_input_guard.hpp)

```cpp
std::string passphrase;
std::cout << "Please enter your password : ";

{
  cli_widgets::hidden_input_guard hide_password{};
  std::cin >> passphrase;
}
```

See [stdin\_hide_guard.cpp](./examples/hidden_input_guard.cpp) for more example.

## [`cli_widgets::symbol_cycler`](./cli_widgets/symbol_cycler.hpp)

The *no-need-to-worry-about-collection-boundaries-circular-iterrator-string-symbol-spinner*:

```cpp
const std::vector<std::string> symbols { "v", "<", "^", ">" };
cli_widgets::symbol_cycler spinner(symbols);

for(int i = 50; i > 0; i--) {
  std::cout << "\r" << spinner.next() << std::flush;
  std::this_thread::sleep_for(step_slow);
}
```

There are a bunch of symbol collections to be found in the `cli_widgets::spinner_symbols` namespace!

A fully fledged example, including of how to use this one in conjunction with `cli_widgets::symbol_cycler` can be found in [`symbol_cycler.cpp`](./symbol_spinner.cpp).

## License
[MIT License](./LICENSE).

Please give copyright notice for this project.

```
Copyright (c) 2018 - Damien Buhl alias daminetreg<EMAIL_ADDRESS>Copyright (c) 2021 - Tipi Technologies Ltd<EMAIL_ADDRESS>```


text:
Vote for Yii2
======================

[![Latest Stable Version](https://poser.pugx.org/chiliec/yii2-vote/v/stable.svg)](https://packagist.org/packages/chiliec/yii2-vote) [![Total Downloads](https://poser.pugx.org/chiliec/yii2-vote/downloads.svg)](https://packagist.org/packages/chiliec/yii2-vote) [![Latest Unstable Version](https://poser.pugx.org/chiliec/yii2-vote/v/unstable.svg)](https://packagist.org/packages/chiliec/yii2-vote) [![License](https://poser.pugx.org/chiliec/yii2-vote/license.svg)](https://packagist.org/packages/chiliec/yii2-vote)

Next steps will guide you through the process of installing yii2-vote using **composer**. Installation is a quick and easy three-step process.

Step 1: Install component via composer
------------------------------------

Run command

```
php composer.phar require --prefer-dist chiliec/yii2-vote "~2.0"
```

or add

```
"chiliec/yii2-vote": "~2.0"
```

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

Step 2: Configuring your application
------------------------------------

Add following lines to your main configuration file:

```php
'modules' => [
	'vote' => [
		'class' => 'chiliec\vote\Module',
		'allow_guests' => true, // if true will check IP, otherwise - UserID
		'allow_change_vote' => true, // if true vote can be changed
		'matchingModels' => [ // matching model names with whatever unique integer ID
			'article' => 0, // may be just integer value
			'audio' => ['id'=>1], // or array with 'id' key
			'video' => ['id'=>2, 'allow_guests'=>false], // own value 'allow_guests'
			'photo' => ['id'=>3, 'allow_guests'=>false, 'allow_change_vote'=>false],
		],
	],
],
```

And add widget in view:

```php
<?php echo \chiliec\vote\Display::widget([
	'model_name' => 'article', // name of current model
	'target_id' => $model->id, // id of current element
	// optional fields
	'view_aggregate_rating' => true, // set true to show aggregate_rating
	'mainDivOptions' => ['class' => 'text-center'], // div options
	'classLike' => 'glyphicon glyphicon-thumbs-up', // class for like button
	'classDislike' => 'glyphicon glyphicon-thumbs-down', // class for dislike button
	'separator' => ' ', // separator between like and dislike button
]); ?>
```

Step 3: Updating database schema
--------------------------------

After you downloaded and configured Yii2-vote, the last thing you need to do is updating your database schema by applying the migrations:

```bash
$ php yii migrate/up --migrationPath=@vendor/chiliec/yii2-vote/migrations
```

That's all!

-------------------------------

How to store rating in database
-------------------------------
Sometimes you need to store rating in the same table (for example, for sorting).
At first, create new fields `rating` and `aggregate_rating` inside target table:

```sql
ALTER TABLE `YOUR_TARGET_TABLE_NAME` ADD (
  `rating` smallint(6) NOT NULL,
  `aggregate_rating` float(3,2) unsigned NOT NULL
)
```

After that, add new behavior in target model:

```php
    public function behaviors() {
        return [
            [
                'class' => \chiliec\vote\behaviors\RatingBehavior::className(),
                'model_name' => 'story', // name of this model
            ],
        ];
    }
```

Customizing JS-events
--------------------------
If you want to customize JS-events, you can rewrite widget properties:

* `js_before_vote` by default is not defined. Called before vote.
* `js_change_counters` responsible for change counters. Available `data` property (may contains `content`, `success` and `changed` properties).
* `js_show_message` responsible for show message. Available `data` property too.
* `js_after_vote` by default is not defined. Called after vote.
* `js_error_vote` called if the request fails. Available `errorThrown`, contains error message.

For example, if you want to use [noty jQuery plugin](https://github.com/needim/noty) for show notifications, you may rewrite `js_show_message`:

```php
<?php echo \chiliec\vote\Display::widget([
	'model_name' => 'article',
	'target_id' => $model->id,
	'js_show_message' => "
		message = data.content;
		type = 'error';
		if(typeof(data.success)!=='undefined') { type = 'success'; }
		if(typeof(data.changed)!=='undefined') { type = 'information'; }
		noty({
			text: message,
			type: type,
			layout: 'topRight',
			timeout: 1500,
			force: true
		});
	",
]);
```

-------------------------------

Enjoy and don't forget to send me your [Issues](https://github.com/Chiliec/yii2-vote/issues) and Pull Requests :)


text:
---
layout: default
---

# 1996-02-18 - Re: PING packets illegal?

## Header Data

From: Adam Shostack<EMAIL_ADDRESS>To<EMAIL_ADDRESS>(Bill Stewart)

Message Hash: 9f92a9e2115df60d5270a0123eda68ce324be12e0f4bb1938c42e39ddd4ec8d3

Message ID<EMAIL_ADDRESS>Reply To<EMAIL_ADDRESS>UTC Datetime: 1996-02-18 18:46:05 UTC

Raw Date: Mon, 19 Feb 1996 02:46:05 +0800

## Raw message

```
{% raw  %}From: Adam Shostack<EMAIL_ADDRESS>Date: Mon, 19 Feb 1996 02:46:05 +0800
To<EMAIL_ADDRESS>(Bill Stewart)
Subject: Re: PING packets illegal?
In-Reply-To<EMAIL_ADDRESS>Message-ID<EMAIL_ADDRESS>MIME-Version: 1.0
Content-Type: text

Bill Stewart wrote:

| >From a legal perspective, it's tough to assert that the US user had scienter,
| given that it pings scarcely reach the machine's consciousness, much less
| the human users', since they're handled by ICMP rather than by a user-space
| TCP or UDP
| socket.  (Obviously, if there's a sniffer around this is slightly different.)
|
| Is it possible to send out forged ping packets, pinging machine B with a From
| address of C (fake) instead of A (real), so that Alice can talk to China via
| Bob?
| If so, it might be an interesting method for traversing some firewalls,
| and also (if you write a ping-collector program) for back-channel
| communications.

It should be possible to fake a source address.

Also, if you want to traverse a firewall from the inside, its usually
pretty easy to do with mail, or over telnet.  Stego in ping would show
up in a firewalls logs more prominently than a lot of mail.

| If you want to really abuse the protocols, 53 bytes probably fits into the
| 64 you can send in a ping, so you could implement ATM-over-ICMP :-)

Err, you can put up to 1500 bytes into an ICMP echo request, if its
properly implemented.

Adam

--
"It is seldom that liberty of any kind is lost all at once."
					               -Hume

{% endraw %}
```

## Thread

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

+ Return to "[Adam Shostack <adam@lighthouse.homeport.org>](/authors/adam_shostack_adam_at_lighthouse_homeport_org_)"
+ Return to "[Bill Stewart <stewarts@ix.netcom.com>](/authors/bill_stewart_stewarts_at_ix_netcom_com_)"
+ Return to "["Perry E. Metzger" <perry@piermont.com>](/authors/perry_e_metzger_perry_at_piermont_com_)"

+ 1996-02-18 (Mon, 19 Feb 1996 02:14:38 +0800) - [Re: PING packets illegal?](/archive/1996/02/c26bad8dbd602dd7503ef77bcec9f6f3b4677ccaa5b8c9819174675b621acfd6) - _Bill Stewart<EMAIL_ADDRESS>  + 1996-02-18 (Mon, 19 Feb 1996 02:46:05 +0800) - Re: PING packets illegal? - _Adam Shostack<EMAIL_ADDRESS>    + 1996-02-19 (Tue, 20 Feb 1996 04:42:33 +0800) - [Re: PING packets illegal?](/archive/1996/02/ae2fc5002eb912f57e7a209fdc3a781876224b3fb0cf08fde20f5b7be6f5f1f5) - _"Perry E. Metzger"<EMAIL_ADDRESS>


text:
# Playing with Disk Images / rasbian pi demo - [Video](https://youtu.be/xciV2fexJ1g)
## Explaination of what [rasbian_image_resize.sh](rasbian_image_resize.sh) does
### Get minimum block size resize2fs things is appropriate
* `resize2fs -P /dev/mmcblk0p2`
    * _*note*_ : gparted is bad at this for some reason. Might see if I can contribute

### Grab the block size
* `dumpe2fs /dev/${ext4_part} 2>/dev/null | grep '^Block size' | awk '{print $3}'`
    * Usually this is `4096`, but this command will grab that for you

### Grab the starting sector for the ext4 FS
* `fdisk -l /dev/mmcblk0`

```
/dev/mmcblk0p2      94208 7958527 7864320  3.8G 83 Linux
Disk /dev/mmcblk0: 3.8 GiB,<PHONE_NUMBER> bytes, 7959552 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe73d5332

Device         Boot Start     End Sectors  Size Id Type
/dev/mmcblk0p1       8192   93596   85405 41.7M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      94208 7958527 7864320  3.8G 83 Linux
```

* The important line is for parition 2 the start of `94208`

### Formula to get the disk end in bytes
* `(minimum_blocks * block_size) + (start_sector) * 512`
    * i.e. `(264940 * 4096) + (94208 * 512)` == `1133428736`

### Formula to get the number of blocks from the start of the disk to end
* `(end_bytes / block_size) + 1`
    * i.e. `(1133428736 / 4096) + 1` == `276716`
    * _if we don't add one it will give an error_

### Now we put it all together

```
sudo resize2fs /dev/mmcblk0p2 264940
sudo parted --script /dev/mmcblk0 rm 2
sudo parted --script /dev/mmcblk0 mkpart primary ext4 94208s<PHONE_NUMBER>B
sudo dd status=progress if=/dev/mmcblk0 bs=4096 count=276717 > destination_file.img
```

# Links
* https://en.wikipedia.org/wiki/Disk_sector

repository: shollingsworth/stevokfu

repo_name: shollingsworth/stevokfu


text:
# style-dictionary-format-json-schema
Generating a JSON schema describing the structure of your [Style Dictionary](https://amzn.github.io/style-dictionary/) files and including all style property names makes it possible for text editors to provide you with autocompletion. This is especially useful for [referencing properties](https://amzn.github.io/style-dictionary/#/properties?id=attribute-reference-alias) (e.g. something like `{background.color.progressive.default.value}`) which you would otherwise type by hand.

<img width="630" alt="Screenshot 2020-10-25 at 10 13 06" src="https://user-images.githubusercontent.com/453024/97115775-f00cc000-16f8-11eb-8ecf-a0fda653cac7.png">

## Installation

```
$ npm install --save-dev style-dictionary-format-json-schema
```

## Usage

Make sure you have [style-dictionary](https://github.com/amzn/style-dictionary#installation) installed and set up. You can register the JSON schema format via [`StyleDictionary.registerFormat`](https://amzn.github.io/style-dictionary/#/api?id=registerformat):

```js
StyleDictionary.registerFormat({
    name: 'jsonSchema',
    formatter: require('style-dictionary-format-json-schema'),
 })
 ```

 Then, you'll be able to use the new `jsonSchema` (or whatever name you gave it) format as you would any other Style Dictionary [format](https://amzn.github.io/style-dictionary/#/formats?id=formats).

## Configuring text editors to use the JSON schema

 Letting the text editor know which JSON files to apply the schema to requires some configuration.

### VS Code

VS Code has good [documentation](https://code.visualstudio.com/docs/languages/json#_json-schemas-and-settings) on getting better editor support for JSON files and working with JSON schemas. TL;DR modify and copy the following into your JSON workspace settings:
```json
{
    "json.schemas": [
        {
            "fileMatch": [
                "path/to/your/properties/**/*.json"
            ],
            "url": "./path/to/your/schema.json"
        }
    ]
}
```

### JetBrains products
Go to Settings and navigate to `Languages & Frameworks` > `Schemas and DTDs` >  `JSON Schema Mappings`. There you'll be able to create a new mapping for your style property files with the newly generated schema.

gha_language: JavaScript


text:
Cyc Core API CHANGELOG
======================

For more information, view the [README](README.md) bundled with this release or visit the
[Cyc Developer Center](http://dev.cyc.com/api/core/).

**Important note about _backwards-compatibility:_** It is expected that more release candidates will
follow. Until the final 1.0.0 release, it is expected that future release candidates will break
backwards compatibility.

1.0.0-rc5 - 2015-12-18
----------------------

The fifth release candidate of Cycorp's Java API suite, and the first in which the Core API
specification and the Core Client implementation are packaged as wholly separate artifacts.

1.0.0-rc5 is _not backwards-compatible_ with earlier API releases. Note that _ResearchCyc 4.0q_ and
_EnterpriseCyc 1.7-preview_ require server code patching for compatibility with the 1.0.0-rc5
release. See the Cyc Core Client for details.

The overarching goal of this revision is to be the last release before 1.0.0 with any compatibility-
breaking changes. Note, however, that this is not a _guarantee:_ additional disruptive changes may
be made before 1.0.0 if deemed necessary.

#### API & implementation division

There is now a clean division between the Core APIs and their reference implementation; they have
been split into two artifacts:

* The implementation-independent Core API specification: `core-api-spec`
* The Core Client reference implementation: `cyc-core-client-impl`

Details:

* The `core-api-suite` project has been split into two sibling projects: `core-api-spec`and
  `core-client`.
* The relevant artifacts generated by these projects (the artifacts that projects are typically
  expected to specify as dependencies) are `cyc-core-api` and `cyc-core-client-impl`, respectively.
* Introduces implementation-independent factory classes for Core API objects. Code written against
  the `cyc-core-api` should typically not need to refer to any implementation-specific classes or
  methods (although an implementation library will need to be present at run-time.)

In short, you'll typically need to include two dependencies to use the Core APIs. For example, in
Maven:

    <dependency>
      <!-- Core API specification -->
      <groupId>com.cyc</groupId>
      <artifactId>cyc-core-api</artifactId>
      <version>1.0.0-rc5</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <!-- Reference implementation for the Core API -->
      <groupId>com.cyc</groupId>
      <artifactId>cyc-core-client-impl</artifactId>
      <version>1.0.0-rc5</version>
      <scope>runtime</scope>
    </dependency>

**Caveat:** Some functionality, such as proofview generation, is not yet represented in the Core API
spec, so there are still some cases in which the user might need to write code against
cyc-core-client-impl. This functionality will be added to the Core API Spec in an upcoming revision.

#### API consistency

* All `cyc-core-api` class names and method signatures conform to the
  [Google Java Style](https://google.github.io/styleguide/javaguide.html) coding standards.

#### Other changes

* The Cyc Core API GitHub repository has been renamed and expanded into the
  [Cyc Java API Suite](https://github.com/cycorp/api-suite) repository, of which `core-api-spec` and
  `core-client` are sub-projects.
* Reorganization of classes (especially exceptions) within the com.cyc.* package space.
* Implementation projects built on the Base Client have had their artifactIds renamed to incorporate
  the word "client". E.g., `cyc-core-suite` is now `cyc-core-client-impl`, `cyc-session` is now
  `cyc-session-client`, etc.
* Project/module directories have been renamed to mirror their artifactIds, dropping the "cyc-"
  prefix. E.g., the `cyc-session-client` project lives in the `session-client` directory.
* The `cyc-core-api-parent` and `cyc-core-client-parent` POMs now inherit from `cyc-api-parent`,
  which inherits from `cyc-default-config-parent`.
* Assorted bug fixes.

1.0.0-rc4 - 2015-10-29
----------------------

The fourth release candidate of Cycorp's Java API suite. 1.0.0-rc4 is _not backwards-compatible_
with earlier API releases. Note that _ResearchCyc 4.0q_ and _EnterpriseCyc 1.7-preview_ require
[server code patching](server-patching.md) for compatibility with the 1.0.0-rc4 release.

#### Query API

* Instead of creating Query objects directly, call QueryFactory.getQuery(...)
* Query API no longer uses BaseClient CycObjects.

#### Natural language

* Adds com.cyc.nl package to Core API Specification to support upcoming release of NL API.
* Split `com.cyc.baseclient.nl.Paraphraser` class into `com.cyc.nl.Paraphraser` interface (in Core
  API Spec) and `com.cyc.baseclient.nl.ParaphraserFactory` class (in Base Client).

#### Session API

* Adds API support for closing CycSessions and SessionManagers. See
  [Session API Connection Management](http://dev.cyc.com/api/core/session/connection-management/)
  for details.
* Significant improvements to session resource management, especially CycAccess management.
* Bug fixes for threading issues.

#### Other changes

* Critical bug fixes related to obfuscated functions in the planned upcoming release of
  OpenCyc 5.0-preview.
* Assorted bug fixes.

1.0.0-rc3 - 2015-08-14
----------------------

The third release candidate of Cycorp's Java API suite. 1.0.0-rc3 is _not backwards-compatible_
with earlier API releases. Note that _ResearchCyc 4.0q_ and _EnterpriseCyc 1.7-preview_ require
[server code patching](server-patching.md) for compatibility with the 1.0.0-rc3 release.

#### New: Support for upcoming OpenCyc release

Adds support for the planned upcoming release of **OpenCyc 5.0-preview**. Note that the OpenCyc
server will not have support for advanced features such as QuerySearch or ProofViewJustification.
Classes and methods which are not supported by OpenCyc will reflect this in their javadoc
description and in their signature by declaring that they throw a
`com.cyc.session.exception.OpenCycUnsupportedServerException`.

There are no plans to support previous versions of OpenCyc.

#### Improved: Core API Specification

* _Query API_ interfaces moved into CoreAPISpec Maven module.
* Adds the QueryFactory (`com.cyc.query.QueryFactory`) to facilitate query construction.
* Compatibility with different Cyc server editions and versions is now better-documented via the
  `UnsupportedCycOperationException` and `OpenCycUnsupportedFeatureException` exceptions.

#### Other changes

* Speeds up KB API conversion of terms to KBObjects, which in turn speeds up
  `Query#getResultSet()#getKBObject()`. This resolves
  [issue 2](https://github.com/cycorp/CycCoreAPI/issues/2).
* Core API Suite can detect and apply missing SubL code patches to a Cyc server. This behavior is
  disabled by default, but is easily enabled via System properties. See
  [server-patching.md](server-patching.md) for details.
* Links to [Cyc Dev Center](http://dev.cyc.com/) have been modified to reflect improved URL scheme.
* Assorted bug fixes.

1.0.0-rc2 - 2015-04-07
----------------------

The second release candidate of Cycorp's Java API suite for interacting with the Cyc inference
engine and knowledge base. Note that 1.0.0-rc2 is _not backwards-compatible_ with earlier API
releases.

#### New: Core API Suite Bundle

Adds the Core API Suite Bundle module (artifact `cyc-core-suite` in the `CoreAPISuite` subdir) which
packages all API interfaces and implementation classes. Details:

* Produces a single `cyc-core-suite` artifact which can be specified instead of individually
  specifying cyc-session, cyc-kb, etc.
* Builds a single jar (in maven parlance, an "uberjar") which contains all of its dependencies.
  Useful for some environments where it is complicated to pull binaries down from the Internet.

#### New: Core API Specification

Adds the Core API Specification module (artifact `cyc-core-api` in the `CoreAPISpec` subdir) to
consolidate and clarify the interfaces which define the Core API Suite. Details:

* _KB API_ interfaces moved into CoreAPISpec.
* _Session API_ interfaces moved into CoreAPISpec.

#### Other changes

* Fixes tests which were failing against EnterpriseCyc.
* Changes parent pom artifactId from `cyc-core-api` to the more accurate `cyc-core-parent`.
* KB API test suite should no longer seem to hang per
  [issue 1](https://github.com/cycorp/CycCoreAPI/issues/1).
* Updates developer email address in pom files to one which people can actually send mail to.
* Assorted updates in pom files to name and description elements.

1.0.0-rc1 - 2015-01-04
----------------------

First release candidate of Cycorp's Java API suite for interacting with the Cyc inference engine
and knowledge base. Note that 1.0.0-rc1 is _not backwards-compatible_ with earlier API releases.

Details:

* Updates the **KB API** (`1.0.0-rc1`), which streamlines the manipulation of CycL-based Java
  objects.
* Updates the **Query API** (`1.0.0-rc1`), which streamlines asking queries and handling answers.
* Introduces the **Session API** (`1.0.0-rc1`), which manages configurations and connections to
  Cyc servers.
* Replaces the Base API with the **Base Client** (`1.0.0-rc1`), a Java client for connecting to a
  Cyc server and handling HL data.
  _Note that the Base Client is subject to frequent change, and so is not supported for external
  developers._

1.0.0-Preview - 2014-07-09
--------------------------

Initial limited preview release! This is a new Java API suite to manipulate and query the Cyc KB.

Details:

* Introduces the **KB API**, which streamlines the manipulation of CycL-based Java objects.
* Introduces the **Query API**, which streamlines asking queries and handling answers.
* Introduces the **Base API**, the successor to the OpenCyc API.


text:
# KB0017 - Use rbkcli with a proxy/VPN

## Problem

When using a VPN or port forwarding to reach the cluster, even after first command has been run, **rbkcli** insists in downloading the API documentation every time.

1. You configure target port forwarding to your local IP address.
	Example: (<target_ip>:443) -> (<IP_ADDRESS>:1200).

2. You set the target with the following commands:
	```
	export rubrik_cdm_node_ip=<IP_ADDRESS>:1200
	export rubrik_cdm_username=admin
	export rubrik_cdm_password=Password
	```
3. When any command is run you see the following:
	```
	$ rbkcli cluster me
	EnvironmentHandler # No cached API found for this target, importing APIs...
	```

4. When looking at *rbkcli.log* file you see entries similar to the following for **every** command you run:
	```
	2019-07-29 15:31:36,342 - [MainThread  ] DEBUG    [tools] - IOTools # Successfully loaded configuration file:  [/root/rbkcli/conf/rbkcli.conf]
	2019-07-29 15:31:36,342 - [MainThread  ] DEBUG    [tools] - IOTools # Successfully loaded environmental vars [username,server,password]
	-
	2019-07-29 15:31:36,343 - [MainThread  ] ERROR    [tools] - TargetError # Failed to resolve the target IP into environment ID, will attempt to download/load API docs and recreate environment file.
	-
	2019-07-29 15:31:36,343 - [MainThread  ] WARNING  [tools] - EnvironmentHandler # No cached API found for this target, importing APIs...
	2019-07-29 15:31:36,343 - [MainThread  ] WARNING  [tools] - ApiRequester # Authorization key not found 'token'
	2019-07-29 15:31:37,702 - [MainThread  ] DEBUG    [tools] - ApiRequester # Successfully requested API [get:https://<IP_ADDRESS>:1200/api/v1/cluster/me]
	2019-07-29 15:31:37,703 - [MainThread  ] WARNING  [tools] - ApiRequester # Authorization key not found 'token'
	2019-07-29 15:31:39,077 - [MainThread  ] DEBUG    [tools] - ApiRequester # Successfully requested API [get:https://<IP_ADDRESS>:1200/api/internal/node]
	2019-07-29 15:31:39,077 - [MainThread  ] DEBUG    [tools] - Target # All expected discovery keys are valid.
	2019-07-29 15:31:41,793 - [MainThread  ] DEBUG    [tools] - IOTools # Successfully downloaded file [https://<IP_ADDRESS>:1200/docs/v1/api-docs]
	2019-07-29 15:31:44,490 - [MainThread  ] DEBUG    [tools] - IOTools # Successfully downloaded file [https://<IP_ADDRESS>:1200/docs/v2/api-docs]
	2019-07-29 15:32:02,300 - [MainThread  ] DEBUG    [tools] - IOTools # Successfully downloaded file [https://<IP_ADDRESS>:1200/docs/internal/api-docs]
	```

## Explanation
As stated in **rbkcli** documentation, the tool functionality and it's available APIs depends on the target being provided. In order for rbkcli to optimize its usability, it will save the data related to each target and it will rely on its IP to resolve what target are we connecting to.

1. The resolution file.
	For each target you connect to, rbkcli will update the **~/rbkcli/conf/target_resolution.json** file with all nodes of the target cluster. In that way, if you change the node but connect to the same cluster **rbkcli** will use the same cached data for API profiles.
	Following is an example of what the content of the **~/rbkcli/conf/target_resolution.json** file, after first command was run:
	```
	[
	  {
		"envId": "a8cd537d-e274-46d8-871e-f80ac47c264c",
		"envName": "ORK-Support",
		"id": "RVMHM184S001337",
		"ip": "<IP_ADDRESS>"
	  },
	  {
		"envId": "a8cd537d-e274-46d8-871e-f80ac47c264c",
		"envName": "ORK-Support",
		"id": "RVMHM184S001500",
		"ip": "<IP_ADDRESS>"
	  },
	  {
		"envId": "a8cd537d-e274-46d8-871e-f80ac47c264c",
		"envName": "ORK-Support",
		"id": "RVMHM184S001616",
		"ip": "<IP_ADDRESS>"
	  },
	  {
		"envId": "a8cd537d-e274-46d8-871e-f80ac47c264c",
		"envName": "ORK-Support",
		"id": "RVMHM184S001650",
		"ip": "<IP_ADDRESS>"
	  }
	]
	```
	**rbkcli** will keep trying to find target with IP:port which is equal to: *<IP_ADDRESS>:1200* as defined, however once the source of the data cached is always the local IP for that node, it will never match and therefor will always try to cache the environment again.

## Resolution
The resolution for this situation is quite simple, modify the resolution file to match the entered IP address and port.

1. The file after modification should be similar to the following:
	```
	[
	  {
		"envId": "a8cd537d-e274-46d8-871e-f80ac47c264c",
		"envName": "ORK-Support",
		"id": "RVMHM184S001337",
		"ip": "<IP_ADDRESS>"
	  },
	  {
		"envId": "a8cd537d-e274-46d8-871e-f80ac47c264c",
		"envName": "ORK-Support",
		"id": "RVMHM184S001500",
		"ip": "<IP_ADDRESS>:1200"
	  },
	  {
		"envId": "a8cd537d-e274-46d8-871e-f80ac47c264c",
		"envName": "ORK-Support",
		"id": "RVMHM184S001616",
		"ip": "<IP_ADDRESS>"
	  },
	  {
		"envId": "a8cd537d-e274-46d8-871e-f80ac47c264c",
		"envName": "ORK-Support",
		"id": "RVMHM184S001650",
		"ip": "<IP_ADDRESS>"
	  }
	]
	```

2. Once that is done, any commands should now use the existing cache:
	```
	$ rbkcli node_management hostname
	"RVMHM184S001500"
	```

repository: rubrikinc/rbkcli

gha_language: Python

repo_name: rubrikinc/rbkcli


text:
# SLLHHybridAuthBundle

Integrates [HybridAuth](https://github.com/hybridauth/hybridauth) library on Symfony.

**Please note: This bundle is not ready to use yet!**

I'm making a discussion with the HybridAuth's maintainers to make this project feasible.

Please see: https://github.com/hybridauth/hybridauth/issues/456

If it's accepted for HybridAuth 3.x, this bundle will supports this version.
Otherwise, it will be abandoned because HybridAuth not compatible with Symfony.

If you think I'm wrong or just want to add arguments on [this discussion](https://github.com/hybridauth/hybridauth/issues/456), feel free to add some comments! ;-)

[![Latest Stable Version](https://poser.pugx.org/sllh/hybridauth-bundle/v/stable)](https://packagist.org/packages/sllh/hybridauth-bundle)
[![Latest Unstable Version](https://poser.pugx.org/sllh/hybridauth-bundle/v/unstable)](https://packagist.org/packages/sllh/hybridauth-bundle)
[![License](https://poser.pugx.org/sllh/hybridauth-bundle/license)](https://packagist.org/packages/sllh/hybridauth-bundle)
[![Dependency Status](https://www.versioneye.com/php/sllh:hybridauth-bundle/badge.svg)](https://www.versioneye.com/php/sllh:hybridauth-bundle)

[![Total Downloads](https://poser.pugx.org/sllh/hybridauth-bundle/downloads)](https://packagist.org/packages/sllh/hybridauth-bundle)
[![Monthly Downloads](https://poser.pugx.org/sllh/hybridauth-bundle/d/monthly)](https://packagist.org/packages/sllh/hybridauth-bundle)
[![Daily Downloads](https://poser.pugx.org/sllh/hybridauth-bundle/d/daily)](https://packagist.org/packages/sllh/hybridauth-bundle)

[![Build Status](https://travis-ci.org/Soullivaneuh/SLLHHybridAuthBundle.svg?branch=master)](https://travis-ci.org/Soullivaneuh/SLLHHybridAuthBundle)
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/Soullivaneuh/SLLHHybridAuthBundle/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/Soullivaneuh/SLLHHybridAuthBundle/?branch=master)
[![Code Climate](https://codeclimate.com/github/Soullivaneuh/SLLHHybridAuthBundle/badges/gpa.svg)](https://codeclimate.com/github/Soullivaneuh/SLLHHybridAuthBundle)
[![Coverage Status](https://coveralls.io/repos/Soullivaneuh/SLLHHybridAuthBundle/badge.svg?branch=master)](https://coveralls.io/r/Soullivaneuh/SLLHHybridAuthBundle?branch=master)
[![SensioLabsInsight](https://insight.sensiolabs.com/projects/158b027e-ef93-4130-bdfd-9e6902d316d9/mini.png)](https://insight.sensiolabs.com/projects/158b027e-ef93-4130-bdfd-9e6902d316d9)

## Prerequisites

This version of the bundle requires Symfony 2.3+.

## Installation

### Download using composer

``` bash
$ php composer.phar require sllh/hybridauth-bundle "~1.0"
```

### Enable the bundle

``` php
<?php
// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        // ...
        new SLLH\HybridAuthBundle\SLLHHybridAuthBundle(),
    );
}
```

## Usage

*TODO*

## License

This bundle is under the MIT license. See the complete license on the [LICENSE](https://github.com/Soullivaneuh/SLLHHybridAuthBundle/blob/master/LICENSE) file.

## Todo

 * Make it working
 * Unit test
 * Changelog file before pusing new stable version

repository: biswajeetparida/SLLHHybridAuthBundle

repo_name: biswajeetparida/SLLHHybridAuthBundle


text:
# Merge Two Linked Lists at

## Challenge
Write a function called mergeLists which takes two linked lists as arguments. Zip the two linked lists together into one so that the nodes alternate between the two lists and return a reference to the head of the zipped list.

## Approach & Efficiency
1.  Big O Time = O(n) // Big O Space = O(1)

## Solution

![Whiteboard](whiteboard_img.png)

## Thank you!


text:
---
nav_order: 2
---
# Python Test Acceleration Configuration

Python Test Acceleration works out of the box, but can be configured to take
advantage of your specific environment using the environment variables listed
below.

Have configuration needs not addressed here? Give us a holler at
<EMAIL_ADDRESS>
- Common Settings
  - [`YOURBASE_ACCEPT_TOS`](#yourbase_accept_tos)
  - [`YOURBASE_ACTIVE_COHORT`](#yourbase_active_cohort)
  - [`YOURBASE_COHORT_COUNT`](#yourbase_cohort_count)
  - [`YOURBASE_LICENSE_KEY`](#yourbase_license_key)
  - [`YOURBASE_OBSERVATION_MODE`](#yourbase_observation_mode)
  - [`YOURBASE_REMOTE_CACHE`](#yourbase_remote_cache)
- Uncommon settings
  - [`YOURBASE_AWS_ACCESS_KEY_ID`](#yourbase_aws_access_key_id)
  - [`YOURBASE_AWS_SECRET_ACCESS_KEY`](#yourbase_aws_secret_access_key)
  - [`YOURBASE_DEBUG`](#yourbase_debug)
  - [`YOURBASE_DISABLE`](#yourbase_disable)
  - [`YOURBASE_IGNORE_LOCAL_CACHE`](#yourbase_ignore_local_cache)
  - [`YOURBASE_SYNC_DIRTY`](#yourbase_sync_dirty)
  - [`YOURBASE_TELEMETRY`](#yourbase_telemetry)
  - [`YOURBASE_TIMID`](#yourbase_timid)
  - [`YOURBASE_WORKDIR`](#yourbase_workdir)

## Common Settings

### `YOURBASE_ACCEPT_TOS`

- **Type:** bool-ish (`0`, `false`, `off`, `1`, `true`, `on`)
- **Default:** off

When set, YourBase will consider the terms of service permanently accepted for
your organization, and will not output terms of service agreement prompts or
info messages.

### `YOURBASE_ACTIVE_COHORT`

- **Type:** integer in the range `[1, $YOURBASE_COHORT_COUNT]`
- **Default:** 1

When set alongside [`YOURBASE_COHORT_COUNT`](#yourbase_cohort_count), tells
YourBase the cohort ID to run. Used for sharded or otherwise parallelized test
suites.

See [`YOURBASE_COHORT_COUNT`](#yourbase_cohort_count) for more information.

### `YOURBASE_COHORT_COUNT`

- **Type:** integer
- **Default:** 1

When set alongside [`YOURBASE_ACTIVE_COHORT`](#yourbase_active_cohort), tells
YourBase how many cohorts tests should be split into. Used for sharded or
otherwise parallelized test suites.

This pair of settings lets YourBase work with your existing sharding or
parallelization setup. You likely already have a test splitting solution in
place whose job is to slice up your pool of tests so that each shard or process
runs their fair share of tests.

However, most test splitting solutions are not sticky; tests "jump" shards as
the pool changes. The effectiveness of YourBase acceleration scales with test
stickiness, so these solutions are not recommended for use with YourBase.

As a convenience, YourBase provides a built-in sticky test splitting
implementation. To use it, first remove your existing test splitting tools. It
should appear as if each shard will run the entire test suite.

Then, set `YOURBASE_ACTIVE_COHORT` to the ID of the current shard or process
(starting from 1), and set `YOURBASE_COHORT_COUNT` to the total number of shards
or processes. Under the hood, YourBase will just-in-time deselect tests that
aren't in the current cohort. This selection is consistent between runs; given
the same cohort ID and count, tests will be selected to the same shard for life.

### `YOURBASE_LICENSE_KEY`

- **Type:** opaque string
- **Default:** _(unset)_

When set to a valid license key, YourBase acceleration will be unlocked for use
after the end of the free trial. Email<EMAIL_ADDRESS>to obtain a license
key.

### `YOURBASE_OBSERVATION_MODE`

- **Type:** bool-ish (`0`, `false`, `off`, `1`, `true`, `on`)
- **Default:** off

When on, YourBase will not skip tests. Instead, it will record the duration and
outcome of each test it believes can be skipped.

If any of these tests fail, this is a bug in YourBase's tracing or acceleration.
YourBase will complain loudly and output details; please report these to
<EMAIL_ADDRESS>
Otherwise, the total amount of time that could have been saved is output to
stdout.

<EMAIL_ADDRESS><EMAIL_ADDRESS>
### `YOURBASE_REMOTE_CACHE`

- **Type:** uri
- **Default:** _(unset)_

When set, YourBase will synchronize dependency graphs with the given remote
location. This setting is recommended for use when using YourBase in CI, as the
filesystem will not be a dependable store for dependency graphs.

Dependency graphs generated from dirty working trees will not be synchronized,
as they can poison the cache. See [`YOURBASE_SYNC_DIRTY`](#yourbase_sync_dirty)
to override this behavior.

Currently, the only supported protocol is `s3`.

#### `s3`

Sets an S3 bucket as a remote cache. `Get`, `Put`, and `List` permissions are
needed.

[System credentials][aws-sys-creds] for AWS will be used if present. To use
different credentials than the system credentials, see
[`YOURBASE_AWS_ACCESS_KEY_ID`](#yourbase_aws_access_key_id) and
[`YOURBASE_AWS_SECRET_ACCESS_KEY`](#yourbase_aws_secret_access_key).

[aws-sys-creds]: https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html

##### Example

```sh
# Without a key prefix
export YOURBASE_REMOTE_CACHE=s3://my-bucket-name

# With a key prefix
export YOURBASE_REMOTE_CACHE=s3://my-bucket-name/my/key/prefix
```

## Uncommon settings

### `YOURBASE_AWS_ACCESS_KEY_ID`

- **Type:** AWS access key ID
- **Default:** _(unset)_

When set alongside
[`YOURBASE_AWS_SECRET_ACCESS_KEY`](#yourbase_aws_secret_access_key), forces
YourBase to use these credentials over system credentials when interacting with
AWS.

These environment variables are recommended for use if your system credentials
are fudged for the sake of your tests.

### `YOURBASE_AWS_SECRET_ACCESS_KEY`

- **Type:** AWS secret access key
- **Default:** _(unset)_

When set alongside [`YOURBASE_AWS_ACCESS_KEY_ID`](#yourbase_aws_access_key_id),
forces YourBase to use these credentials over system credentials when
interacting with AWS.

These environment variables are recommended for use if your system credentials
are fudged for the sake of your tests.

### `YOURBASE_DEBUG`

- **Type:** bool-ish (`0`, `false`, `off`, `1`, `true`, `on`)
- **Default:** off

When on, YourBase will report significantly more internal information to stdout,
stderr, and the file returned by this expression:

```sh
echo ${XDG_STATE_HOME-~/.local/state}/yourbase/python.log
```

### `YOURBASE_DISABLE`

- **Type:** bool-ish (`0`, `false`, `off`, `1`, `true`, `on`)
- **Default:** off

When on, YourBase will not load.

Enabling this setting then manually attaching to a test framework using
`yourbase.attach` produces undefined behavior.

### `YOURBASE_IGNORE_LOCAL_CACHE`

- **Type:** bool-ish (`0`, `false`, `off`, `1`, `true`, `on`)
- **Default:** off

When on, YourBase will not read or write dependency graphs on the filesystem. If
[`YOURBASE_REMOTE_CACHE`](#yourbase_remote_cache) is set, it will still be used
as normal.

This setting can be used if the local cache is expected to be poisoned. This can
happen if cohorting is used against a local cache.

### `YOURBASE_SYNC_DIRTY`

- **Type:** bool-ish (`0`, `false`, `off`, `1`, `true`, `on`)
- **Default:** off

When on, YourBase will [synchronize graphs](#yourbase_remote_cache) even if the
Git working tree is dirty.

This setting is not recommended for use if you plan to use YourBase on developer
machines, as it will poison the remote cache.

If you only plan to use YourBase in CI, this setting can help you overcome
situations where you need your working tree to be dirty while building, and you
know the dirtiness will not affect the dependency graph.

If that situation does not apply to you, do not enable this setting.

### `YOURBASE_TELEMETRY`

- **Type:** bool-ish (`0`, `false`, `off`, `1`, `true`, `on`)
- **Default:** on

When on, YourBase will send anonymized telemetry data to `api.yourbase.io` over
HTTPS for the purposes of improving the product.

Telemetry data **never** includes your code.

### `YOURBASE_TIMID`

- **Type:** bool-ish (`0`, `false`, `off`, `1`, `true`, `on`)
- **Default:** off

When on, YourBase will use a slower tracing algorithm that is less prone to
conflicts with other packages than the default. Only enable this if you
experience issues with the default algorithm.

### `YOURBASE_WORKDIR`

- **Type:** absolute or relative path
- **Default:** `.`

The directory YourBase should treat as the project directory. Only code in this
directory, or one of its descendants, is guaranteed to be traced. You usually do
not need to change this.

[hi]<EMAIL_ADDRESS>

repository: prichhazed/yb

repo_name: prichhazed/yb


text:
# tiny\$hell

## CSS and JS framework for Cordova Apps

**Last Update: Tuesday March 3, 2020**

### version: 1.0.1

This Framework is designed to work primarily with Cordova Hybrid Apps. The CSS and JavaScript are optimized to work with Chrome, as this is the engine used by Cordova.

The **/dist** folder contains all the files you need. Just take a copy of that folder to use in your projects. You will need the JavaScript file called tinyshell-min.js, the CSS file called tinyshell.css, plus the fonts folder which contains the icons.

To use the TinyShell Script you need to first create an instance of the TinyShell object by calling the constructor method and passing in one or more HTML Elements as targets. Next you can call the addEventListener method once, on the TinyShell instance, for each desired event - swipeleft, swiperight, or tap.

# JAVASCRIPT

## Methods

**1. Constructor**

Call this to create a TinyShell manager object instance by passing it a single HTML element or a list of HTML elements.

```javascript
let target = document.querySelector("div");
let tiny = new tinyshell(target);
//creates a new instance of tinyshell and adds the selected element
```

You will need the variable `tiny` later on to add the Event Listeners to the element.

**2. addEventListener(eventName, callback)**

Call this to add a listener for one of the possible events to the element contained inside the tinyshell object.

```javascript
tiny.addEventListener("swipeleft", doSomething);

function doSomething(ev) {
  //ev.currentTarget will be the HTML element that triggered this
  //put your code here to do something with or to the HTML element
}
```

The possible events that you can use are `tap`, `swipeleft`, `swiperight`, `revealleft`, and `revealright`. You can add all five events to the same object if you want.

The `revealleft` and `revealright` events are specifically for use with list-item elements when they have elements off the side of the screen that you want to reveal and let the user tap. A typical use case for this would be to slide a list item to the right to reveal a delete button.

 Use CSS to initiate the transition as defined in your own CSS. Then add a `setTimeout` which will remove the element from the page once it has finished its transition.

Here is an example of swiping an element off the page and removing it.

```css
.item {
  background-color: #eee;
  transition: transform 0.4s linear;
}

.goleft {
  transform: translateX(-200%);
}
```

```html
<div class="item">
  Swipe this div to the left and watch it disappear.
</div>
```

```js
function init() {
  let div = document.querySelector(".item");
  let tiny = new tinyshell(div);
  tiny.addEventListener("swipeleft", goAway);
}

function goAway(ev) {
  let div = ev.currentTarget;
  div.classList.add("goleft");
  setTimeout(
    function() {
      //remove the div from its parent element after 0.5s
      this.parentElement.removeChild(this);
    }.bind(div),
    500
  );
}
```

**4. removeEventListener(eventName, callback)**

To remove a target from the array of targets, as well as it's listeners

```javascript
let element = document.querySelector(".cards:nth-child(1)");
let tiny = new tinyshell(element);
tiny.addEventListener("swiperight", someFunc);
//...later you want to get rid of the swipe right listener
tiny.removeEventListener("swiperight", someFunc);
//this will remove the swiperight listener attached to that element
```

## Properties

The five event types that TinyShell listens for are held in an EventTypes object. You can use these constants in the addEventListener or removeEventListener methods in place of the strings `swipeleft`, `swiperight`, `tap`, `revealleft`, or `revealright`.

```javascript
tinyshell.EventTypes.SWIPELEFT;
tinyshell.EventTypes.SWIPERIGHT;
tinyshell.EventTypes.TAP;
tinyshell.EventTypes.REVEALLEFT;
tinyshell.EventTypes.REVEALRIGHT;
```

## Error Messages

If you see the message "Sorry. Your browser does not support TinyShell." it means that you are using a device that does not have touch support.

If you are testing on a laptop or desktop browser, try toggling the Device Toolbar (Mobile emulation) in the Browser Development tools.

When testing in an iOS Simulator you will need to use XCode to see the console messages. When testing on an iOS device you can use the Safari development tools to see the messages. When testing on an Android Emulator or Android Device you can use the Chrome development tools to see the error messages.

# STYLES

Version 1.x of the Tiny\$hell framework styles use **flexbox** for alignment and layout instead of the floats that were used in version 0.x of the framework.

## Pages

To create pages, simply add a **div** or **section** to the **body** and give it the class "page".

```html
<div class="page"></div>
```

By default all pages are hidden from the user. If you want to make a page visible then add the CSS class "active" to the "page" **div**, either in your HTML or through JavaScript.

```html
<div class="page active"></div>
```

## Content Areas

Page elements have no padding or margin attached to them by default. Cards and list-views have padding and margin. If you want to put content on the page and create the standard padding around the content then you need to add a section element with the className 'content'.

By default this will create padding at the top to allow for a top nav bar. If you are not using a top nav bar then add both the class `content` as well as the class `nobar`.

```html
<section class="content nobar">
  <p>Some content in the page that has no header bar at the top.</p>
</section>
<section class="content">
  <h3>This heading will get standard padding</h3>
  <p>This paragraph will get standard padding</p>
</section>
```

## Navbars

Navbars are areas that can be placed at the top or bottom of the screen. They are both fixed to allow content to scroll past underneath them.

Add a block element like **nav** or **header** to your **body**, **OUTSIDE** of any "page". Give it the class "bar" plus either the class "top" or "bottom".

```html
<header class="bar top"></header>

<nav class="bar bottom"></nav>
```

Inside the bar element you can add a heading as an h1, h2, or h3 element.

Alternatively you can make the bar into a navigation bar by adding divs with the class "tab".

```html
<nav class="bar bottom">
  <div class="tab">Home</div>
  <div class="tab">Activities</div>
  <div class="tab">Contacts</div>
</nav>
```

If you want to create a narrower bar at the top which will just contain links then you can use the classes "bar-half" and "top".

```html
<nav class="bar-half top">
  <a href="#" class="link left icon cancel">Cancel</a>
  <a href="#" class="link right icon save">Save</a>
</nav>
```

You can use anchor tags with the class "link" instead of divs with the class "tab" for a more minimal view. These can have icons added too.

Icons can be added to the tabs by adding both the class "icon" and the class for the individual icon that you want to use.
BEST PRACTICE is to use both icons and text in your tabs.

```html
<nav class="bar bottom">
  <div class="tab current icon home">Home</div>
  <div class="tab icon star">Fav</div>
  <div class="tab icon user">User</div>
</nav>
```

Additionally, if you want to style the tab that matches the current page then add the class "current" to the tab you want highlighted. Remember that you can override this class to change the appearance of the highlighting.

## Lists

Lists are designed to hold content inside their list items. The **ul** or **ol** element should be given a class "list-view" and then the list items will each be given a class "list-item".

If you want to add buttons to the left or right side of a list item, which will always be visible, you can add them as divs with the class `action-right` or `action-left`. If you want to put an image on the left side instead of an action button you can add an image inside the div and give it the class `avatar` or `avatar-box`.

### RevealLeft and RevealRight Elements

New in this version of Tiny\$hell are the `reveal-left` and `reveal-right` areas. These are divs that will be placed to the left or right of the `list-item` however they cannot be seen unless the user drags the `list-item` to the left or right. These elements are the purpose of the `revealleft` and `revealright` events.

When you add the `reveal-left` and/or `reveal-right` divs then you also need to add a class to the `list-item`. The choices are `has-reveal-left`, `has-reveal-right` and `has-reveal-both`. These three classes are required by the script that runs when you add the `revealleft` or `revealright` event listener to the `list-item`.

```html
<ul class="list-view">
  <li class="list-item has-reveal-left">
    <div class="reveal-left"><i class="icon delete"></i></div>
    <div class="list-text">Drag this one left.</div>
    <div class="action-right"><span class="icon edit"></span></div>
  </li>
  <li class="list-item has-reveal-both">
    <div class="reveal-left"><i class="icon delete"></i></div>
    <div class="list-text">Drag this one right.</div>
    <div class="reveal-right"><i class="icon delete"></i></div>
  </li>
  <li class="list-item">
    <div class="action-left">
      <img src="//www.example.com/img/pic.jpg" alt="happy" class="avatar" />
    </div>
    <div class="list-text">
      <p>Some text to show.</p>
      <p>Some more text.</p>
    </div>
    <div class="action-right">
      <i class="icon edit"></i>
    </div>
  </li>
</ul>
```

The action-right or action-left buttons could get the class `icon` plus the class that represents the icon you want to use for the list item OR you can put a `span` or `i` element inside the div with the class `icon` and the class name for the type of icon you want. See the notes on icons below.

## Cards

Cards are meant to be containers for content. They can have a header, a footer, and a content area.

Add a div with the class "card" to your page. If you want you can add a **header** or **footer** element inside the card. Place h1, h2, or h3 elements inside the header. Place paragraphs inside the footer.

Everything between the header and footer is considered to be content for the card. Images will automatically be responsive and fill most of the width of the card.

If you want a card or a card's image to have rounded corners then you can add the class "round" to either.

```html
<div class="card">
  <header>
    <h2>Some Title</h2>
  </header>
  <img src="//www.example.com/img/happy.jpg" alt="Emoji" class="round" />
  <p>Some text to show up underneath the image inside the card.</p>
</div>
```

By default, cards will stack vertically in the page. If you want them to stack in the same position then add the class "fixed" to the card. Then they will all stack in the same position on the screen. The last card will be on top.

If you want a card to start off the screen, or not seen, then you have four options. Add the class "fixed" along with "top", "left", "right", or "dot". Top, left, and right will position the card off the screen to the top, left, or right side respectively. The "dot" class shrinks the card down to 0% of it's original size.

```html
<div class="card fixed top">
  <header>
    <h2>Currently hidden off the top of the page</h2>
  </header>
  <img src="//www.example.com/img/happy.jpg" alt="Emoji" class="round" />
  <p>Some text to show up underneath the image inside the card.</p>
</div>
```

When you want the card to appear on the page in it's proper position, remove the class "top", "left", "right", or "dot" and replace it with the class "active".

```html
<div class="card fixed active">
  <header>
    <h2>Now Appearing</h2>
  </header>
  <img src="//www.example.com/img/happy.jpg" alt="Emoji" class="round" />
  <p>Some text to show up underneath the image inside the card.</p>
</div>
```

## Colours

There are eigth utility classes for colours. These are meant to be used for message to users. One set of four just changes the text colour. The other four change the background colour, the text colour, and set a border on the top and bottom.

The four text-only classes are "success", "error", "warn" and "info".

The four classes that change background, border, and text colour are "success-back", "error-back", "warn-back", and "info-back".

```html
<p class="success">This text will be green.</p>

<p class="info-back">
  This text will be white, on a blue background, with dark blue borders on the
  top and bottom.
</p>
```

## Buttons

There are two general types of buttons that can be added with the classes "btn" or "btn-small". You can create buttons with spans, anchors, buttons, or input elements.

```html
<span class="btn">Click me</span> <span class="btn-small">Click</span>
```

There are default sizes for the text, padding and line-height for the two buttons. If you want to style the buttons in a manner related to either Android or iOS then simply add the class "ios" or "android" to the body element on the page.

```html
<body class="ios">
  <span class="btn">Click me</span>
  <span class="btn-small">Click</span>
</body>
```

You can also add the colour classes to the buttons to change their colours.

```html
<section class="ios">
  <span class="btn info">Click me</span>
  <span class="btn-small success">Click me</span>
</section>
<section class="android">
  <span class="btn warn">Click</span>
  <span class="btn-small error">Click</span>
</section>
```

## Forms

Some basic styling for form elements have been added too. To implement the styles you would wrap each input - label pair of tags inside a block element (like a div or paragraph) and give the class "form-row" to the block element. Next you should give the attribute "required" to the form elements. These two things will trigger the tiny\$hell styles for the form elements.

```html
<form>
  <p class="form-row">
    <input type="text" id="nm" required />
    <label for="nm">Name</label>
  </p>
  <p class="form-row buttons">
    <input type="button" id="btn-cancel" class="btn-small" value="cancel" />
    <input type="submit" id="btn-sub" class="btn-small" value="submit" />
  </p>
</form>
```

It is important that the label be placed after the input for the transitions to work properly.

For a row containing buttons, if you want them to be aligned to the right side, use the additional class "buttons".

## Typography

There are a series of utility classes for font sizes. You can add these to any elements to override the default font sizes.
The classes are "t1", "t2", "t3", "t4", and "t5". They range in size from 4.0rem to 0.75rem. They all use 1.5 as the line-height.

```html
<p class="t4">This is size four text</p>
```

```css
.t4 {
  font-size: 1rem;
}
```

There is also a version of each class that changes the line-height to 1.0, for times when you need to conserve space. These classes all have "-1" added to the end of the name. Eg:

```html
<p class="t3-1">This has size 3 text with 1.0 line-height.</p>
```

There is also a version of each class that changes the line-height to 2.0, for times when you want to create more space. These classes all have "-2" added to the end of the name. Eg:

```html
<h1 class="t1-2">This has size 1 text with 2.0 as the line-height.</h1>
```

## Overlays

There is an overlay class that will create a layer overtop of your screen. This will allow you to display message to the user or force them to interact with a form before returning to the app.

There are two versions of the overlay. One that covers just the working area of the screen and another that covers the page content as well as any "bar"s that you have at the top or bottom.

By default, any paragraphs that you include inside the overlay will be centered with padding around the edges. If you want, you can create overlays in your HTML and then control their appearance by changing the value of their display property between 'block' and 'none'.

```html
<div class="overlay">
  <p>This overlay will cover the content area.</p>
</div>
<div class="overlay-bars">
  <p>
    This overlay will cover the content area PLUS the bars at the top and bottom
    of the content area.
  </p>
</div>
```

Once you have created an overlay you can add other HTML on top of the overlay to display to users. Add the class "message" to a section to make it appear on top of the overlay. Then you can use your own CSS or the Tiny\$hell utility classes for colours and typography to output your message.

```html
<section class="message">
  <h1 class="info t1">Important Wow</h1>
</section>
```

## Utility Classes

There are classes "right" and "left" for floating content to the left or right.

There is a "fluid" class that you can add to images or other media elements to make them responsive.

```html
<p><img src="./img/sample.jpg" alt="Some Image" class="fluid" /></p>
```

## Icons

The icons that are included in this framework are a subset of the ones that are available through Material Icons. Some of the icon names have been changed in the migration.

[https://material.io/icons/](https://material.io/icons/)

Here is the list of the names that are currently available in tinyshell.

- home
- fav
- heart
- headphones
- edit
- add
- delete
- remove
- clear
- cancel
- save
- arrow_up
- arrow_down
- arrow_right
- arrow_left
- microphone
- attach
- emoji
- lock
- lock-open
- download
- upload
- refresh
- share
- camera
- check-circle
- star
- help
- info
- external
- user
- marker
- comments
- settings
- clock
- store
- thumb-up
- thumb-down
- calendar
- bookmark
- alert
- record
- play
- pause
- stop
- volume-on
- volume-off
- email
- quote

gha_language: CSS