text:
---
title: Internationalizing Components
seo-title: Internationalizing Components
description: Internationalize your components and dialogs so that their UI strings can be presented in different languages
seo-description: Internationalize your components and dialogs so that their UI strings can be presented in different languages
uuid: 6d9ef175-0d32-4469-ae78-1f886ab77f0b
contentOwner: Guillaume Carlino
products: SG_EXPERIENCEMANAGER/6.5/SITES
content-type: reference
topic-tags: components
discoiquuid: 48190644-fa84-45ae-8b98-875e8bc12530
exl-id: 8ae398ca-a300-45c7-93fd-76b96b8f6436
---
# Internationalizing Components{#internationalizing-components}

Internationalize your components and dialogs so that their UI strings can be presented in different languages. Components that are designed for internationalization enable UI strings to be externalized, translated, then imported to the repository. At runtime, the user's language preferences or the page locale determines which language is displayed in the UI.

![chlimage_1-9](assets/chlimage_1-9a.png)

Use the following process to internationalize your components and provide the UI in different languages:

1. [Implement your components using code that internationalizes strings.](/help/sites-developing/i18n-dev.md) Your code identifies the strings to translate, and selects the language to present at runtime.
1. [Create dictionaries](/help/sites-developing/i18n-translator.md#creating-a-dictionary) and [add](/help/sites-developing/i18n-translator.md#adding-changing-and-removing-strings) the English strings to translate.

1. [Export](/help/sites-developing/i18n-translator.md#exporting-a-dictionary) the dictionary to XLIFF format, translate the strings, then [import](/help/sites-developing/i18n-translator.md#importing-a-dictionary) the XLIFF files back into AEM. Alternatively, you can [manally add translations](/help/sites-developing/i18n-translator.md#editing-translated-strings) to the dictionary.

1. [Incorporate the dictionary into the release management process of your application](/help/sites-developing/i18n-translator.md#publishing-dictionaries).

>[!NOTE]
>
>The methods described here for internationalizing components is meant for translating static strings. When component strings are expected to change you should use conventional translation workflows. For example, when authors can edit a UI string using properties in the Edit dialog of a component, you should not use a language dictionary to internationalize the string.

## Language Dictionaries {#language-dictionaries}

The AEM internationalization framework uses dictionaries in the repository to store English strings and their translations in other languages. The framework uses English as the default language. Strings are identified using their English version. Typically, internationalization frameworks use alphanumeric IDs for UI strings. Using the English version of the string as the ID has several advantages:

* Code is easy to read.
* The default language is always available.

Localized strings can be stored in several dictionaries in the repository. AEM system dictionaries are located below the `/libs` node. You can create dictionaries for your components below the `/apps` node. The AEM internationalization framework combines the dictionaries and makes them available in Sling as a single `ResourceBundle` object. When components are rendered, they retrieve translated strings from the resource bundle. The combined dictionaries are also deployed on the web server in JSON format to provide translated strings to JavaScript code in web pages.

Also, the [Translation tool](/help/sites-developing/i18n-translator.md) enables you to manage all dictionaries from one central location.

![chlimage_1-10](assets/chlimage_1-10a.png)

>[!NOTE]
>
>Do not modify the AEM system dictionaries that are located below the `/libs` node.

### Overlaying Strings in System Dictionaries {#overlaying-strings-in-system-dictionaries}

Strings in dictionaries below the `/apps` node override duplicate strings in dictionaries that are below the `/libs` node. If your components use strings that are included in the AEM system dictionaries, duplicate the string in your own dictionary. All components will use the strings from your dictionary.

Note that you cannot predict which translation is used when strings are duplicated in dictionaries that are all located below the `/apps` node.

gha_language: Groovy


text:
# cardscript-expressions

[![Tymly Cardscript](https://img.shields.io/badge/tymly-cardscript-blue.svg)](https://tymly.io/)
[![CircleCI](https://circleci.com/gh/wmfs/cardscript-expressions.svg?style=svg)](https://circleci.com/gh/wmfs/cardscript-expressions)
[![npm (scoped)](https://img.shields.io/npm/v/@wmfs/cardscript-expressions.svg)](https://www.npmjs.com/package/@wmfs/cardscript-expressions)
[![codecov](https://codecov.io/gh/wmfs/cardscript-expressions/branch/master/graph/badge.svg)](https://codecov.io/gh/wmfs/cardscript-expressions)
[![CodeFactor](https://www.codefactor.io/repository/github/wmfs/cardscript-expressions/badge)](https://www.codefactor.io/repository/github/wmfs/cardscript-expressions)
[![Dependabot badge](https://img.shields.io/badge/Dependabot-active-brightgreen.svg)](https://dependabot.com/)
[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)
[![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)
[![license](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/wmfs/tymly/blob/master/packages/concrete-paths/LICENSE)

> cardscript-expressions provides a number of utilities to generate expressions, generate AST's, and clean cardscript data for submissions

## Install
```bash
$ npm install cardscript-expressions --save
```

## Usage
```bash
const expressions = new CardscriptExpressionsxpressions()
```

##### Method summary

| Usage      | Description |
| -----------      | ----------- |
| `const expressionList = getExpressionsFromCardscript(cardscript)` | Takes a cardscript schema and extracts a list of expressions. |
| `convertExpressionsToAst(expressions)`| Takes a list of expressions generated by `getExpressionsFromCardscript()` and amends the generated AST's to an object `asts` available from `expressions.asts` |
| `addCardscript(cardscript)` | A combination of `getExpressionsFromCardscript(cardscript)` and `convertExpressionsToAst(expressions)`, used to generate AST's from cardscript in one function call |
| `const visibilityList = calculateWidgetVisibility(cardscript, data, asts)` | Takes a cardscript schema, submission data, and a list of AST's to generate an object of `{key: boolean}` values representing whether a widget should be visible or not |
| `const clean = cleanData(data, visibilityList)`| Takes submission data and a visibility list generated by `calculateWidgetVisibility` and returns a cleaned data object with values of hidden fields removed |

## License
[MIT](https://github.com/wmfs/cardscript/blob/master/LICENSE)

license: MIT

repository: wmfs/cardscript-expressions

branch_name: refs/heads/master

extension: md

gha_language: JavaScript

gha_license_id: MIT

license_type: permissive

repo_name: wmfs/cardscript-expressions


text:
# Changelog

## Unreleased

- Use new cypher names
- Allow Epmd strategy to reconnect after connection failures
- Detect Self Signed Certificate Authority for Kubernetes Strategy
- Remove calls to deprecated `Logger.warn/2`

### 3.3.0

### Changed

- Default multicast address is now <IP_ADDRESS>, was <IP_ADDRESS>, [commit](https://github.com/bitwalker/libcluster/commit/449a65e14f152a83a0f8ee371f05743610cd292f)

### 2.3.0

### Added

- Clustering strategy for the Rancher container platform (see: https://github.com/rancher/rancher)
- LocalEpmd strategy that uses epmd to discover nodes on the local host
- Gossip strategy multicast interface is used for adding multicast membership

## 2.0.0

### Added

- Configurable `connect` and `disconnect` options for implementing strategies
  on top of custom topologies
- The ability to start libcluster for more than a single topology
- Added `polling_interval` option to Kubernetes strategy
- Added ability to specify a list of hosts for the Epmd strategy to connect to on start

### Removed

- Cluster.Events module, as it was redundant and unused

### Changed

- Configuration format has changed significantly, please review the docs

repository: bitwalker/libcluster

branch_name: refs/heads/main

gha_language: Elixir

repo_name: bitwalker/libcluster


text:
---
layout: post
status: publish
published: true
title: Android Wear works for iPhones - it's about time!
author:
  display_name: Mark Bonnett
  login: Technical Markus
  email<EMAIL_ADDRESS>  url: ''
author_login: Technical Markus
author_email<EMAIL_ADDRESS>wordpress_id: 7847
wordpress_url: http://blog.buymobiles.net/?p=7847
date: '2015-09-01 15:32:06 +0100'
date_gmt: '2015-09-01 14:32:06 +0100'
categories:
- News
- Popular
tags:
- iOS
- Android Wear
---

Google has announced that Android Wear is now compatible with iOS devices, bringing more affordable smartwatches to iPhone users!

The advent of Android Wear marked the first time that one of the big three platform providers had made an operating system designed to run on smartwatches.

Although as you can imagine from the name, Wear smartwatches only worked with Android phones to being with...

That situation has now changed. According to the Official Google Blog, Android Wear will now work with iOS devices.

#AndroidWear watches now work with #iPhones. #wearwhatyouwant http://t.co/BOM2XJ984g pic.twitter.com/ZuUixW4neI

— Android (@Android) August 31, 2015

Of course, we need to make one point: that statement only applies to new and future Android Wear watches.

LG Watch Urbane is the first Android Wear smartwatch that will work with iOS devices like iPhone 6 (and presumably the upcoming iPhone 6S), and all future Android Wear smartwatches, but existing do not support iOS.

Whether they will in future remains to be seen.

It also needs to be noted that the iOS-compatible version will not have all the features to which users with Android phones (such as the new Samsung Galaxy S6 edge Plus) have access.

For instance, iOS users won’t be able to reply to a text directly through their Android Wear watch.

They won’t be able to search for songs in Apple’s Music service either, or get access to the full range of third party apps on their Android Wear watch.

This will limit the ability to customise that watch, but it is worth noting that the Apple Watch doesn’t allow any customisation via third party watch faces.

The biggest difference will be price, as Android Wear watches come in a lot cheaper than the Apple Watch. As such, Google may well pick up some new customers because of that, people who don’t want to, or can’t, pay that higher price for a watch.

Still, more choice is always a good thing, and as of today, iOS users will finally have a lower-priced alternative to the Apple Watch.


text:
# brazejs

[![npm](https://img.shields.io/npm/v/brazejs.svg)](https://www.npmjs.org/package/brazejs)
[![npm](https://img.shields.io/npm/dm/brazejs.svg)](https://www.npmjs.org/package/brazejs)
[![Build Status](https://travis-ci.org/yq314/brazejs.svg?branch=master)](https://travis-ci.org/yq314/brazejs)
[![Coveralls](https://img.shields.io/coveralls/yq314/brazejs.svg)](https://coveralls.io/github/yq314/brazejs?branch=master)
[![GitHub issues](https://img.shields.io/github/issues-closed/yq314/brazejs.svg)](https://github.com/yq314/brazejs/issues)
[![David](https://img.shields.io/david/yq314/brazejs.svg)](https://david-dm.org/yq314/brazejs)
[![David Dev](https://img.shields.io/david/dev/yq314/brazejs.svg)](https://david-dm.org/yq314/brazejs?type=dev)
[![DUB](https://img.shields.io/dub/l/vibe-d.svg)](https://github.com/yq314/brazejs/blob/master/LICENSE)
[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://github.com/yq314/brazejs)
[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/yq314/brazejs)

A [braze][braze/liquid] compatible [Liquid][tutorial] template engine in pure JavaScript. Built on top of [liquidjs][liquidjs], with Braze tags/filters/syntax added and incompatible features removed.

Install via npm:

```bash
npm install --save brazejs
```

For detailed usage please refer to [liquidjs][liquidjs]' original doc.

## Difference with liquidjs

Braze's liquid is a subset of Shopify's liquid, hence some incompatible features have to be removed. Braze also has it's own support for some Braze specific tags/filters/output, we add them in as plugin to liquidjs.

#### Removed

* #### filters
    * `abs`: Braze doesn't support abs

#### Added

* #### Filters

    * Encoding

        | Filter Name | Example | Notes |
        | --- | --- | --- |
        | md5 | `{{"sample" \| md5}}` | |
        | sha1 | `{{"strings" \| sha1}}` | |
        | sha2 | `{{"to" \| sha2}}` | This is using SHA-256 |
        | hmac_sha1 | `{{"be" \| hmac_sha1}}` | |
        | base64 | `{{"encoded" \| base64}}` | |

    * URL

        | Filter Name | Example | Notes |
        | --- | --- | --- |
        | url_escape | `{{"hey<>hi" \| url_escape}}` | ⚠ this uses `encodeURI` which is slightly different from Braze's implementation |
        | url_param_escape | `{{"hey<>hi" \| url_param_escape}}` | ⚠ this uses `encodeURIComponent` which is slightly different from Braze's implementation |

    * [Property Accessor][braze/property_accessor]

        | Filter Name | Example | Notes |
        | --- | --- | --- |
        | property_accessor | `{{hash \| property_accessor: 'key'}}` | Example hash: `{ 'key' => 'hello' }` |

    * Number Formatting

        | Filter Name | Example | Notes |
        | --- | --- | --- |
        | number_with_delimiter | `{{123456 \| number_with_delimiter}}` | ⚠ this uses `toLocaleString` which is slightly different from Braze's implementation |

    * JSON Escape

        | Filter Name | Example | Notes |
        | --- | --- | --- |
        | json_escape | `{{'123"456' \| json_escape}}` | ⚠ this uses `JSON.stringify` which is slightly different from Braze's implementation |

* #### Tags
    * [abort_message][braze/abort_message]: abort rendering and output an optional message

        Example:
        ```
        {% abort_message() %}
        {% abort_message('aborted due to error') %}
        ```

    * [connected_content][braze/connected_content]: call an external API

        Example:
        ```
        {% connected_content http://numbersapi.com/random/trivia :save trivia :cache 900 :basic_auth <secret_name> %}
        ```

        Supported options: `:basic_auth`, `:content_type`, `:save`, `:cache`, `:method`, `:body`, `:headers`

        For basic auth to work, you'll need to add the username and password into the [context][liquidjs/context] object.
        ```
        // replace <secret_name> so that it matches your basic auth name in Braze
        {
            "__secrets": {
                "<secret_name>": {
                    "username": "<your username>",
                    "password": "<your password>"
                }
            }
        }
        ```

* #### Output
    * `${}` support for [Personalization tags][personalization tags]

        For it to work the attributes need to be added into [context][liquidjs/context]

        ```
        {
            "first_name": "<my_name>",
            "user_id": "<my_uid>",
            "custom_attribute": {
                "<attr1>": "<val1>",
                "<attr2>": "<val2>"
            }
        }
        ```
        Then you can access them in the template:
        ```
        {{ ${first_name} }}
        {{ custom_attribute.${attr1} }}
        ```
    * Object will be converted to Ruby presentation

        If context is `{ "obj": {"foo": "bar"} }`, [liquidjs][liquidjs] renders to `[object Object]`, while brazejs renders it to `{"foo"=>"bar"}`

* #### Content blocks
    * [Content Blocks](https://www.braze.com/docs/user_guide/engagement_tools/templates_and_media/content_blocks/) is supported

        ```
        {{content_blocks.${contentBlockName}}}
        ```

        By default the content blocks template is being searched in directories in following order:

            1. current dir
            2. content_blocks under current dir
            3. content_blocks in parent dir

        It will also search for file names in this order:

            1. exact match
            2. convert file name to kebab-case
            3. append .liquid
            4. convert file name to kebab-case and append .liquid

        It's also possible to configure the root dir and file extension in [context][liquidjs/context]:

            {
                "__contentBlocks": {
                    "root": "path_to_dir",
                    "ext": ".html"
                }
            }

        If your content blocks are in more than one roots, you can set an array as the root.
        Please make sure you give your content blocks different names, otherwise only the first matching content block will be used.

            {
                "__contentBlocks": {
                    "root": ["path1", "path2"],
                    "ext": ".html"
                }
            }

        ⚠ At time of writing, Braze only support nesting 2 levels of content blocks

[braze/liquid]: https://www.braze.com/docs/user_guide/personalization_and_dynamic_content/liquid/overview/
[tutorial]: https://shopify.github.io/liquid/basics/introduction/
[liquidjs]: https://github.com/harttle/liquidjs
[personalization tags]: https://www.braze.com/docs/user_guide/personalization_and_dynamic_content/liquid/supported_personalization_tags/
[liquidjs/context]: https://github.com/harttle/liquidjs#render-from-string
[braze/filters]: https://www.braze.com/docs/user_guide/personalization_and_dynamic_content/liquid/advanced_filters/
[braze/property_accessor]: https://www.braze.com/docs/user_guide/personalization_and_dynamic_content/liquid/advanced_filters/#property-accessor-filter
[braze/abort_message]: https://www.braze.com/docs/user_guide/personalization_and_dynamic_content/liquid/aborting_messages/
[braze/connected_content]: https://www.braze.com/docs/user_guide/personalization_and_dynamic_content/connected_content/making_an_api_call/#making-an-api-call

#### Use cases

* Together with [differencify](https://github.com/NimaSoroush/differencify) to do visual test for your Braze templates
* Use in [VSCode Extension](https://github.com/yq314/vscode-braze-liquid-preview) for easier local development

gha_language: TypeScript


text:
---
title: How to implement exponential retry?
date: '2019-09-09'
spoiler: Ways PromiseKit and RxSwift provided don't always fits our need
---

Sometimes, errors occur in real world application. For example, api sometimes failed due to network issue, server issue or awkward network condition. In such cases, we would like to retry several times before throwing an error out.

# RxSwift's Retry

Let's take a look at RxSwift's retry method

```swift
let disposeBag = DisposeBag()
var count = 1

let sequenceThatErrors = Observable<String>.create { observer in
    observer.onNext("🍎")
    observer.onNext("🍐")
    observer.onNext("🍊")

    if count == 1 {
        observer.onError(TestError.test)
        print("Error encountered")
        count += 1
    }

    observer.onNext("🐶")
    observer.onNext("🐱")
    observer.onNext("🐭")
    observer.onCompleted()

    return Disposables.create()
}

sequenceThatErrors
    .retry()
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)

// Output:
// 🍎
// 🍐
// 🍊
// Error encountered
// 🍎
// 🍐
// 🍊
// 🐶
// 🐱
// 🐭
```

>>>> example of these sample codes are from: https://beeth0ven.github.io/RxSwift-Chinese-Documentation/content/decision_tree/retry.html

## RxSwiftExt

RxSwift provide us a retry method, with `.retry()`, we are able to retry 1 time before throwing error out. Or `.retry(5)` to retry 5 times before error.

It's simple and clear. But wait! What if I want 2 seconds before each retry? It seems `.retry()` happened immediately after error occured. Unfortunately, RxSwift does not implement this kind of retry for us. We need to do it ourself.

Good news is RxSwift has a great community, someone has done these complex retry already! In a third party project called [RxSwiftExt](https://github.com/RxSwiftCommunity/RxSwiftExt) has a lot handy method to use.

## RepeatBehavior

First, we will need a enum with some different retry rules.
1. `immediate`: Just like what RxSwift gives us.
2. `delayed`: What we want above, retry with some delay.
3. `exponentialDelayed`: a bit different from `delayed`, will extend every retry interval after each error.
4. `customTimerDelayed`: we won't discuss it here.

```swift
import RxSwift

/**
Specifies how observable sequence will be repeated in case of an error
- Immediate: Will be immediatelly repeated specified number of times
- Delayed: Will be repeated after specified delay specified number of times
- ExponentialDelayed: Will be repeated specified number of times.
Delay will be incremented by multiplier after each iteration (multiplier = 0.5 means 50% increment)
- CustomTimerDelayed: Will be repeated specified number of times. Delay will be calculated by custom closure
*/
public enum RepeatBehavior {
	case immediate (maxCount: UInt)
	case delayed (maxCount: UInt, time: Double)
	case exponentialDelayed (maxCount: UInt, initial: Double, multiplier: Double)
	case customTimerDelayed (maxCount: UInt, delayCalculator: (UInt) -> DispatchTimeInterval)
}

extension RepeatBehavior {
	/**
	Extracts maxCount and calculates delay for current RepeatBehavior
	- parameter currentAttempt: Number of current attempt
	- returns: Tuple with maxCount and calculated delay for provided attempt
	*/
	func calculateConditions(_ currentRepetition: UInt) -> (maxCount: UInt, delay: DispatchTimeInterval) {
		switch self {
		case .immediate(let max):
			// if Immediate, return 0.0 as delay
			return (maxCount: max, delay: .never)
		case .delayed(let max, let time):
			// return specified delay
			return (maxCount: max, delay: .milliseconds(Int(time * 1000)))
		case .exponentialDelayed(let max, let initial, let multiplier):
			// if it's first attempt, simply use initial delay, otherwise calculate delay
			let delay = currentRepetition == 1 ? initial : initial * pow(1 + multiplier, Double(currentRepetition - 1))
			return (maxCount: max, delay: .milliseconds(Int(delay * 1000)))
		case .customTimerDelayed(let max, let delayCalculator):
			// calculate delay using provided calculator
			return (maxCount: max, delay: delayCalculator(currentRepetition))
		}
	}
}
```

---

With these rules, we can now implement retry with delay! Let's see the code:

```swift
public typealias RetryPredicate = (Error) -> Bool

extension ObservableType {
	/**
	Repeats the source observable sequence using given behavior in case of an error or until it successfully terminated
	- parameter behavior: Behavior that will be used in case of an error
	- parameter scheduler: Schedular that will be used for delaying subscription after error
	- parameter shouldRetry: Custom optional closure for checking error (if returns true, repeat will be performed)
	- returns: Observable sequence that will be automatically repeat if error occurred
	*/
	public func retry(_ behavior: RepeatBehavior, scheduler: SchedulerType = MainScheduler.instance, shouldRetry: RetryPredicate? = nil) -> Observable<Element> {
		return retry(1, behavior: behavior, scheduler: scheduler, shouldRetry: shouldRetry)
	}

	/**
	Repeats the source observable sequence using given behavior in case of an error or until it successfully terminated
	- parameter currentAttempt: Number of current attempt
	- parameter behavior: Behavior that will be used in case of an error
	- parameter scheduler: Schedular that will be used for delaying subscription after error
	- parameter shouldRetry: Custom optional closure for checking error (if returns true, repeat will be performed)
	- returns: Observable sequence that will be automatically repeat if error occurred
	*/
	internal func retry(_ currentAttempt: UInt, behavior: RepeatBehavior, scheduler: SchedulerType = MainScheduler.instance, shouldRetry: RetryPredicate? = nil)
		-> Observable<Element> {
			guard currentAttempt > 0 else { return Observable.empty() }

			// calculate conditions for bahavior
			let conditions = behavior.calculateConditions(currentAttempt)

			return catchError { error -> Observable<Element> in
				// return error if exceeds maximum amount of retries
				guard conditions.maxCount > currentAttempt else { return Observable.error(error) }

				if let shouldRetry = shouldRetry, !shouldRetry(error) {
					// also return error if predicate says so
					return Observable.error(error)
				}

				guard conditions.delay != .never else {
					// if there is no delay, simply retry
					return self.retry(currentAttempt + 1, behavior: behavior, scheduler: scheduler, shouldRetry: shouldRetry)
				}

				// otherwise retry after specified delay
				return Observable<Void>.just(()).delaySubscription(conditions.delay, scheduler: scheduler).flatMapLatest {
					self.retry(currentAttempt + 1, behavior: behavior, scheduler: scheduler, shouldRetry: shouldRetry)
				}
			}
	}
}
```

With this extension on `ObservableType`, all observables can use our new retry method!

```swift
sequenceThatErrors
    // .retry() we don't need this anymore!
    .retry(RepeatBehavior.delayed(maxCount: 5, time: 2))
    .subscribe(onNext: { print($0) })
    .disposed(by: disposeBag)
```

---

# Exponential Delay

We've implement retry with fixed interval, what's next? Are we able to make every retry interval a bit longer if we kept getting an error? Sure, you can! Let's take a look at `exponentialDelayed`. We will first init a `exponentialDelayed behavior`, then take a look at every retry interval of each retry.

```swift
let behavior = RepeatBehavior.exponentialDelayed(maxCount: 5, initial: 1, multiplier: 0.5)

behavior.calculateConditions(1).delay // milliseconds(1000)
behavior.calculateConditions(2).delay // milliseconds(1500)
behavior.calculateConditions(3).delay // milliseconds(2250)
behavior.calculateConditions(4).delay // milliseconds(3375)
behavior.calculateConditions(5).delay // milliseconds(5062)
```

We can see retry interval keeps growing after each retry. This is the difference between `exponentialDelayed` and `delayed` behavior.

---

# PromiseKit common pattern: Attempt

PromiseKit's common pattern: [Retry/Polling](https://github.com/mxcl/PromiseKit/blob/master/Documentation/CommonPatterns.md#retry--polling) provides us a attempt method for promise retry.

```swift
func attempt<T>(maximumRetryCount: Int = 3, delayBeforeRetry: DispatchTimeInterval = .seconds(2), _ body: @escaping () -> Promise<T>) -> Promise<T> {
    var attempts = 0
    func attempt() -> Promise<T> {
        attempts += 1
        return body().recover { error -> Promise<T> in
            guard attempts < maximumRetryCount else { throw error }
            return after(delayBeforeRetry).then(on: nil, attempt)
        }
    }
    return attempt()
}

attempt(maximumRetryCount: 3) {
    flakeyTask(parameters: foo)
}.then {
    //…
}.catch { _ in
    // we attempted three times but still failed
}
```

### How can we add `exponentialDelayed` to PromiseKit?

It's easy! Just replace `maximumRetryCount` and `delayBeforeRetry` with `RepeatBehavior`!

```swift
func attempt<T>(_ behavior: RepeatBehavior, _ body: @escaping () -> Promise<T>) -> Promise<T> {
    var attempts: UInt = 0
    func attempt() -> Promise<T> {
        attempts += 1
        return body().recover({ error -> Promise<T> in
            let (maxCount, delay) = behavior.calculateConditions(attempts)
            guard attempts < maxCount else { throw error }
            return after(delay).then(on: nil, attempt)
        })
    }
    return attempt()
}

let behavior = RepeatBehavior.exponentialDelayed(maxCount: 5, initial: 1, multiplier: 0.5)
attempt(behavior) {
  flakeyTask(parameters: foo)
}.then {
    //…
}.catch { _ in
    // we attempted three times but still failed
}
```


text:
# Phoma suecica J.F.H. Beyma, 1942 SPECIES

#### Status
SYNONYM

#### According to
The Catalogue of Life, 3rd January 2011

#### Published in
Antonie van Leeuwenhoek 8: 110 (1942)

#### Original name
Phoma suecica J.F.H. Beyma, 1942

### Remarks
null

repository: mdoering/backbone

path: /life/Fungi/Ascomycota/Dothideomycetes/Pleosporales/Phoma/Phoma radicis-callunae/ Syn. Phoma suecica/README.md

repo_name: mdoering/backbone


text:
Level 4 load balancer

Level4 indicates transport layer in OSI model, which means this load balancer works at transport layer.
Initially we implement simple round robin policy to demonstrate the concept but things could get more complex
and we will do that as long as it is fun.

System requirements:
1. Load balancer should accept tcp/udp connections.
2. Roatate using round robin
3. Collect stats


text:
---
title: "Farhad Manjoo on the Internet History Podcast, Donald Hall on Loss"
date: "2018-07-02"
---

https://soundcloud.com/internethistorypodcast/167-nytimes-tech-columnist

"[When technology became cool again](https://www.salon.com/2004/12/27/year_in_technology_2004/)" - _Salon_
"[Blog-rolling for votes and dollars](https://www.salon.com/2004/06/09/blog_ads/)" - Farhad Manjoo, _Salon_

"I've been doing essentially the same job of writing a weekly tech column since I started at _Salon_, which was 2008."

Definition of a tech columnist: "part explainer, part futurist, part moralist, and part advocate for users of technology."

I shoulda known it was Farhad who killed gadget blogging... Though I do agree that Kara Swisher is very good.

"There's nothing an 'expert' can do on Alexa that an 'amateur' can't do."

* * *

> If work is no antidote to death, nor a denial of it, death is a powerful stimulus to work. Get done what you can!
>
> [Donald Hall on "Fresh Air," 1993](https://www.npr.org/2018/06/29/624642482/remembering-former-poet-laureate-donald-hall)

These are the whitest, most core literary conversations in the history of the world, but they're also some of the sweetest.

without autumn
no spring no summer no autumn no winter
no rain no peony thunder no woodthrush
the book is a thousand pages without commas
without mice maple leaves windstorms
no castles no plazas no flags no parrots
without carnival or the procession of relics
intolerable without brackets or colons
silence without color sound without smell
without apples without pork to rupture gnash
unpunctuated without churches uninterrupted
no orioles ginger noses no opera no
without fingers daffodils cheekbones
the body is a nation a tribe dug into stone
assaulted white blood broken to fragments
provinces invade bomb shoot shell
strafe execute rape retreat and attack
artillery sniper fire helicopter gunship
grenade burning murder landmine starvation
the ceasefire lasts forty-eight hours
then a shell explodes in a market
pain vomit neuropathy morphine nightmare
confusion terror the rack the screw
vincristine ara-c cytoxan vp-16
loss of memory loss of language losses

foamless unmitigated sea without sea
delirium whipmarks of petechiae pcp
multiple blisters of herpes zoster
and how are you doing today i am doing
one afternoon say the sun comes out
moss takes on greenishness leaves fall
the market opens a loaf of bread a sparrow
a bony dog wanders back sniffing a lath
it might be possible to pick up a pencil
unwritten stanzas taken up and touched
beautiful terrible sentences unuttered
the sea unrelenting wave gray the sea
flotsam without islands broken crates
block after block the same house the mall
no cathedral no hobo jungle the same women
and men they long to drink hayfields
without dog or semicolon or village square
without monkey or lily without garlic
\- [_Without_](http://articles.latimes.com/1996-11-10/books/bk-63233_1_donald-hall), by Donald Hall

Only this strange combination of completely unrelated podcast episodes could lead to the realization that Terry Gross and Kara Swisher sound like they could or should be sisters.

license: Unlicense

repository: extratone/bilge

gha_language: HTML

gha_license_id: NOASSERTION

repo_name: extratone/bilge


text:
# ff14_overlayskin
## Issue
https://github.com/laiglinne-ff/ff14_overlayskin/issues

#Sample Image (Default Style)
![](https://github.com/laiglinne-ff/ff14_overlayskin/blob/master/images/preview_3.PNG?raw=true)

#Sample Image (Crystal Style)
###DPS Viewer + More Stats (Encounter List)
![](https://github.com/laiglinne-ff/ff14_overlayskin/blob/master/images/preview_1.PNG?raw=true)

###Custom Settings (this option can't autosave)
![](https://raw.githubusercontent.com/laiglinne-ff/ff14_overlayskin/695478d937b88692fa42df48c0cc19b95a7187e2/images/preview_2.PNG)

###How to Change ENG
1. Open app/rdmty.js
2. Change this value (0->1)

![](https://raw.githubusercontent.com/laiglinne-ff/ff14_overlayskin/695478d937b88692fa42df48c0cc19b95a7187e2/images/setting_0.PNG)

###Thanks for your interest in my project.


text:
# microcart

__DISCONTINUED__: The project is no longer maintained

Microcart is a simple micro service oriented shopping cart written in java,
using the dropzizard framework. It has a REST interface and stores orders in
document oriented NoSQL sink, e.g. elasticsearch. So it is perfect for integration
into individual web pages.

## Features Frontend API
- (planed) The shopping cart (collecting articles)
- (planed) A Shopping Cart overview page
- (planed) Checkout
  1. (planed) collecting personal information and address data
  2. (planed) terms and conditions
  2. (planed) payment by paypal or pre payment

## Features Backoffice
- (planed) Admin/Backoffice UI
- (planed) Mail notifications on orders
- (planed) Order fulfillment history (simple state list per order)
- (planed) Generation of invoice documents

repository: smancke/microcart

repo_name: smancke/microcart


text:
# Centuries-to-Nanoseconds
A simple console program to read a number of centuries and convert it to years, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds.


text:
# HSPodDemo

[![CI Status](https://img.shields.io/travis/xlym33/HSPodDemo.svg?style=flat)](https://travis-ci.org/xlym33/HSPodDemo)
[![Version](https://img.shields.io/cocoapods/v/HSPodDemo.svg?style=flat)](https://cocoapods.org/pods/HSPodDemo)
[![License](https://img.shields.io/cocoapods/l/HSPodDemo.svg?style=flat)](https://cocoapods.org/pods/HSPodDemo)
[![Platform](https://img.shields.io/cocoapods/p/HSPodDemo.svg?style=flat)](https://cocoapods.org/pods/HSPodDemo)

## Example

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

## Requirements

## Installation

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

```ruby
pod 'HSPodDemo'
```

## Author

xlym33<EMAIL_ADDRESS>
## License

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


text:
---
title: "Measurement of double beta decay of $^{150}$Nd to the $0^{+}_{1}$ excited state of $^{150}$Sm in NEMO-3"
journal:
date: 21-07-2023
image_url:
doi:
arxiv:   2203.03356
abstract:
    NEMO-3 results for the double beta decay of $^{150}$Nd to the $0^{+}_{1}$ and $2^{+}_{1}$ excited states of $^{150}$Sm are reported. The data recorded during $5.25$ y with $36.6$ g of the isotope $^{150}$Nd were used in the analysis. For the first time the signal of $2$νββ transition to the $0^{+}_{1}$ excited state is detected with statistical significance exceeding $5$ sigma. The half-life is measured to be $T^{2νββ}_{1/2}(0^{+}_{1})=[1.11^{+0.19}_{−0.14}(stat)^{+0.17}_{−0.15}(syst)]×10^{20}$y. Limits are set on $2$νββ decay to $2^{+}_{1}$ level and on $0$νββ decay to $0^{+}_{1}$ and $2^{+}_{1}$ levels of $^{150}$Sm.
---

gha_language: SCSS


text:
# iOS App Web Control

A demonstration of using WebRTC to achieve communication between an iOS application and a web page.

## Configuring

- Install [Carthage](https://github.com/Carthage/Carthage) for managing Swift dependencies
- Install [TypeScript](https://www.typescriptlang.org/) for converting TypeScript to JavaScript

### Dependencies

- An [unofficial build of WebRTC by Anakros](https://github.com/Anakros/WebRTC)
- TypeScript for converting TypeScript to JavaScript in the web application

## Running

- Mobile application: XCode
- Web application:
    - `cd src/web-control`
    - `tsc -p . -w`

## Debugging

- Mobile application: XCode
- Web application: Safari > Develop > My iPhone > … (TypeScript source maps are provided)

### Flow

1. The user decides to use web control, clicks Web Control in the mobile app and the mobile app shows the web app URL to visit
    - Currently for simplification, a web view is shown in the mobile app and direct communication is used between the apps
    - In the future, the actual web app will be run in a browser on a laptop and the communication will go over the QR channel
    - The mobile app, upon clicking Web Control, creates a peer connection and a data channel (without offer or answer)
    - The mobile app starts listening for messages from the web app (for now direct communication, in the future a QR channel)
2. The web application is opened and it initiates a peer connection and a data channel and waits for negotiation request
3. The web app requires negotiation and creates an offer, then sets it as its local description and sends its SDP to the mobile app
    - The web app also starts listening for messages from the mobile app immediately after startup (now direct, future QR channel)
    - The web app will start generating candidates at this point and sending them to the mobile app as messages too
4. The mobile app receives the offer SDP message and sets it as its remote description or candidate and adds it to its connection
    - The mobile app creates an answer to the offer message and sets it as its local description, then sends its SDP to the web app
    - The mobile app will start gathering ICE candidates at this point and sending them to the web app as messages
5. The web app receives the answer SDP message and sets it as its remote description or candidate and adds it to its connection
6. At some point the data channels open at both ends

In direct communication, trickle ICE is near instant, in QR communication, it will be down to the rotation of SDP and ICE codes.

In the future the web application may be changed to be able to act as a peer (offerer or answered)
so that web applications can interconnect with any other and all have the ability to offer first.

The mobile application will always be an answered only, because the web application doesn't benefit
from the mobile one being used as a remote control. (Or does it?)

## To-Do

### Implement the QR channel

First, keep the web view but hide audit logs (so they are reachable using a button) and split the screen into two equal parts, one for mobile code and one for web code.

Second, actually pull the web site out and verify the QR channel still works.

### Introduce and audio log view

In both the mobile app (replacing the alerts) and the web app

repository: TomasHubelbauer/ios-app-web-control

repo_name: TomasHubelbauer/ios-app-web-control


text:
# Forward data to Message Queue {#task_yvk_2c5_vdb .task}

You can configure the rules engine to forward the processed data to Message Queue \(MQ\). This enables messages to be reliably transmitted among devices, IoT Platform, MQ, and application servers.

Before configuring forwarding, follow the instructions in [Create and configure a rule](intl.en-US/User Guide/Rules engine/Create and configure a rule.md#) to write a SQL script and filter the data.

1.   Click **Add Operation** next to **Data Forwarding** to open the Add Operation page. Select **Send to Message Queue** .

    ![](http://static-aliyun-doc.oss-cn-hangzhou.aliyuncs.com/assets/img/7544/15469114182637_en-US.png)

2.   Follow the instructions on the page to configure the parameters.

    -   Select Operation: Select MQ.
    -   Region: Select the location of the MQ topic where you want to forward data.
    -   Topic: Select the topic where you want to forward data.
    -   Authorization: Grant IoT Platform permission to write data to MQ topics.

        **Note:** If you are not using a Platinum Edition MQ instance, you cannot write data to a topic from a region that is different from the topic's region. Make sure that the rules engine and the MQ topic are located in the same region .  If you are using a Platinum Edition MQ instance, the region is not an issue.

    After the rule of forwarding data to MQ is enabled, IoT Platform can write data to the specified MQ topic. You can use MQ to receive and send messages. For more information, see [Subscribe to messages](https://help.aliyun.com/document_detail/29538.html).

url: https://raw.githubusercontent.com/WangJieJason/iot/a5e90d632a92eeff8d7791c3d95e287dc3b966ab/intl.en-US/User Guide/Rules engine/Examples/Forward data to Message Queue.md

repository: WangJieJason/iot

filename: Forward data to Message Queue.md

repo_name: WangJieJason/iot


text:
# Release Notes v0.1.2

Compatible with Keptn 0.8.4

## New Features
* Reference kubernetes secrets as environment variables in tasks (#8, #15)
* Configurable resource quotas (#18, #27)
* Specifying a directory under task files now imports all files of this directory (#28, #29)
* Configuration for uniform registration feature of distributor (#22)

## Fixed Issues

## Known Limitations
* Uniform registration for remote execution planes over https doesn't work

repository: yeahservice/job-executor-service

repo_name: yeahservice/job-executor-service


text:
[![Build Status](https://travis-ci.org/Anveio/stripe-react-fullstack.svg?branch=master)](https://travis-ci.org/Anveio/stripe-react-fullstack)

# Stripe React-Redux Starter Kit

This is an example fullstack application for processing card payments via Stripe. The client application is built with React, Redux, and TypeScript and sends requests to the API server which is built with Express and connects to a MongoDB database.

### Client-side features

- Fast single page app built with TypeScript, React, and Redux
- User signup
- User authentication via JWT.
- Client-side routing with React Router v4.
- Payment with Stripe-styled checkout button.

### Server-side features

- Generates simple JSON responses to requests to be used by the client.
- User signups saved in MongoDB.
- Card payment processing.
- Server-side validation of user signup & login.
- Can be deployed anywhere, independent of the client.

Includes user signup/authentication with JWT and payment authorization with Stripe on the server.

# Running it locally

The steps below will outline how to get the client and server running in development mode on your local machine.

## Running the client

Running the client bundle in development is done with the `run` script in the `client` folder.

```shell
cd client
npm start
```

This will open a tab in your OS's default browser with the client application on `localhost:3000`.

### Create a `variables.env`

In order to run the server locally, you'll need to configure some environment variables and set up a MongoDB database. First, create a `variables.env` in the `server`folder.

**It's important that the file end in `.env` so that it's ignored by git as specified in `.gitignore` and so that it's read by the server when running locally. Make sure you don't upload its contents to a repo somewhere because it will contain sensitive information.**

```shell
touch server/variables.env
cat server/variables.template.txt >> server/variables.env
```

The above commands will create a file called `variables.env` in the server folder and copy the contents of `server/variables.template.txt` into it.

### Configuring the development server

Three pieces of information are required to configure the server in development:

1.  A JWT secret.
2.  A Stripe API secret key.
3.  The URI of a MongoDB database to use in development.

To knock out step #1, open the `variables.env` file you just created. you can set any string as `JWT_SECRET` [but Auth0 recommends that it's at least 64 characters (512 bits)](https://auth0.com/blog/brute-forcing-hs256-is-possible-the-importance-of-using-strong-keys-to-sign-jwts), but the longer the better.

For step #2 you'll need a Stripe account. Login to your stripe account and navigate to [your dashboard and click on the "API keys" tab.](https://dashboard.stripe.com/account/apikeys)

Copy the token for the "Publishable key" and paste it as the value of `STRIPE_PUBLISHABLE_TEST_KEY` in the file located at `client/src/constants/index.ts`. Click to reveal the "Secret key", copy it, and paste it as the value for `STRIPE_SECRET_TEST` in the `variables.env` file for the server.

The "Publishable key" will live on the client, the "Secret key" will live on the server.

Next, you'll need to configure the Mongo URI of the development database. To set up a development database, there are two options: hosting locally or using a hosted solution. To use a locally hosted database, make sure you have MongoDB installed on your local machine.

```shell
sudo apt-get update
sudo apt-get install mongodb
sudo mongod
```

If the `mongod` command errors because it can't find a `/data/db/` directory, you'll have to make the directory yourself.

```
sudo mkdir /data/db
sudo mongod
```

With MongoDB running locally, set `DEV_DATABASE` to `mongodb://localhost`.

A good alternative to hosting locally, even for development, is to use a hosted solution. Follow the steps in the create a production database section but paste the Mongo URI from Mlab as the value for `DEV_DATABASE` in your `variables.env` file.

## Deploying

The code in the `client` folder and and the code in the `server` folder can be deployed completely independent of each other. This guide will contain instructions for deploying the client to Netlify, a static hosting site, and deploying the server to Heroku.

To get started, fork this repo (or clone it and create a new repo under your GitHub account).

### Deploying the client to Netlify

Netlify is free and deploys work through Git. Log into Netlify, click the "New site from Git" button, connect your GitHub account, and select the repo you just created.

The build command for the client is the `build-client` script located in the `package.json` at the project root. The assets Netlify should server to users are located in the `client/build` folder. Use these to fill in the "Build command" and "Publish directory" inputs in Netlify's deploy settings UI.

Build command should be "build-client" and publish directory should be "client/build"

The site should successfully deploy under a URL that looks like this `https:example-name-12345.netlify.com` (not a real website). Take note of the the frontend's URL since you'll need it to set up CORS on the server. If you have a custom domain you'd like to use instead, [Netlify makes that easy](https://www.netlify.com/docs/custom-domains/) and you can use that custom domain for the next step.

Take note that, although the site may be live, you won't be able to create an account on it as the API server is not yet deployed and the client isn't configured to send requests to the correct URL.

### Create a production database

To use a database in a production environment, hosting locally won't be an option. A good free database hosting provider I recommend is [Mlab](https://mlab.com/home). After creating an account and logging in, click the "Create new" button under "Mongo DB Deployments". After that, select the "Sandbox" plan type to keep things free. If you choose to change your mind, you can upgrade to a paid plan later.

Select the "Sandbox" option under Plan Type.

After your database is created you'll need to secure it with a username and password by clicking the "Create user" button. Copy the MongoDB URI displayed by Mlab, replacing `<dbuser>` and `<dbpassword>` with the actual username and password you created and save it for the next step.

Copy the MongoDB URI in the fourth line. Replace dbuser and dbpassword with the database's actual username password.

### Deploying the server to Heroku

Since Netlify is only for serving static assets, we can't use it to host the API server running Express. For that there are many options, but I'll be outlining the steps to host it for free on Heroku. First, you'll need to [install the Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli#standalone-installation). If you've already done this, skip this step.

```shell
curl https://cli-assets.heroku.com/install-ubuntu.sh | sh
```

Like Netlify, Heroku deployments work via Git. If you've configured the URL of the frontend in `server/constants/frontend.js` first commit your changes.

```shell
git commit -am "Configure correct frontend URL."
```

To deploy, at the project root run the following commands:

```shell
git remote rm heroku
heroku create
```

`git remote rm heroku` will destroy the heroku remote that already exists if you've cloned or forked this repository.

`heroku create` will deploy an empty application to Heroku and create a remote in your local git repository to push to trigger a deploy. You may need to enter your Heroku credentials for this command to work.

After you've created an empty application with `heroku create`, you'll need to copy over some ofthe environment variables in your `variables.env` file you created during the steps to configure the server locally. Open the [apps dashboard](https://dashboard.heroku.com/apps) while logged into Heroku. Select the app you just created and navigate to the "Settings" tab. Click the "Reveal Config Vars" button and enter the appropriate values for the following variables:

- JWT_SECRET should be the same as it is in your `variables.env` file.
- STRIPE_SECRET_TEST should be the same as it is in your `variables.env`.
- PROD_DATABASE should be used instead of DEV_DATABASE. Enter in the Mongo URI of the production database you made on Mlab.

Now you're ready to deploy the server. `git push heroku master` will deploy the application to Heroku. Take note of the URL you just pushed to. You'll need it for the next step.

### Configuring the front end.

The front end needs one more piece of information before it's ready:

1.  The URL of the website you deployed to Heroku

You can configure this in the file located at `client/src/constants/index`.

`PRODUCTION_API_HOSTNAME` should equal the name of the website you deployed to Heroku. Make sure to remove the "https://" at the beginning.

Double check to make sure you've configured `STRIPE_PUBLISHABLE_TEST_KEY` as was done in a previous step where you logged into the Stripe developer dashboard.

## Future deploys

With everything set up, whenever you make a change, first commit that change and you'll have two options:

`git push`

Will trigger a redeploy of the client to Netlify. Or:

`git push heroku master`

Will trigger a redploy of the API server to Heroku. Execute both commands to update both.

repository: Anveio/stripe-react-fullstack

repo_name: Anveio/stripe-react-fullstack


text:
[![Code Climate Score](http://img.shields.io/codeclimate/github/Erol/yomu.svg?style=flat)](https://codeclimate.com/github/Erol/jisho)

# Jisho 辞書

[Jisho](http://erol.github.com/jisho) is a Ruby wrapper for [Hunspell](http://hunspell.sourceforge.net/).

## Usage

You can check for misspelled words by calling `Jisho.check`:

    require 'jisho'

    misspellings = Jisho.check 'Thiis sentence has a misspelled word.'

`Jisho.check` returns an array of hashes, each containing the misspelled word, the row and column where it is located, and the list of suggestions.

    misspellings # => [{:word=>"Thiis", :row=>1, :column=>1, :suggestions=>["Thais", "This", "Thins"]}]

You can also get the unique set of misspelled words:

    misspellings.words # => ["Thiis"]

## Dependencies

Jisho requires Hunspell and atleast one dictionary. You can install them on Mac OS X via MacPorts:

    port install hunspell hunspell-dict-en_US

Or via Homebrew:

    brew install hunspell

Debian users can use `apt-get`:

    apt-get install hunspell hunspell-en-us

## Installation

Add this line to your application's Gemfile:

    gem 'jisho'

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install jisho

## Configuration

You can set it to use whatever dictionaries you want.

First check that the dictionaries you want to use
are available to hunspell.

    $ hunspell -D
    AVAILABLE DICTIONARIES (path is not mandatory for -d option):
    /usr/share/hunspell/en_US
    /usr/share/hunspell/en_my_custom_dictionary

Note when specifying a dictionary or list of dictionaries, the
first one in the list must be a main dictionary. A main dictionary
is one that also has an .aff file. List the contents of /usr/share/hunspell
to make sure you have an .aff file for the first dictionary in your list:

  $ ls /usr/share/hunspell
    en_US.aff
    en_US.dic
    en_my_custom_dictionary.dic

Here you can see that the "en_US" dictionary is a main dictionary
because the .dic file has a corresponding .aff file.

Now you can add this do a config file

    # config/initializers/jisho.rb
    Jisho.dictionaries = 'en_US,en_my_custom_dictionary'

Make sure there are no spaces in between the dictionary names--just a comma.

## Contributing

1. Fork it
2. Create your feature branch ( `git checkout -b my-new-feature` )
3. Create tests and make them pass ( `rspec` )
4. Commit your changes ( `git commit -am 'Added some feature'` )
5. Push to the branch ( `git push origin my-new-feature` )
6. Create a new Pull Request

repository: jackdesert/jisho

repo_name: jackdesert/jisho


text:
# README.md
# Ansible role: Packer 1.x.x

[![Build Status](https://travis-ci.org/kamiljsokolowski/ansible-role-packer.png)](https://travis-ci.org/kamiljsokolowski/ansible-role-packer)
[![Ansible Galaxy](https://img.shields.io/badge/galaxy-kamiljsokolowski.packer-blue.svg)](https://galaxy.ansible.com/kamiljsokolowski/packer/)

Ansible role that installs [Packer](https://www.packer.io/) 1.x.x on Linux-based platforms.

## Requirements
If you are using SSL/TLS, you will need to provide your own certificate and key files. You can generate a self-signed certificate with a command like `openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout example.key -out example.crt`.

## Supported platforms
- Ubuntu: 14.04+
- *RedHat/CentOS (comming soon)*

## Role variables
Available variables are listed below, along with default values:

| Variable | Required | Default | Comments |
|----------|----------|---------|----------|
| `packer_archive_download_url_prefix` | No | `https://releases.hashicorp.com/packer` | Prefix for Packer archive download URL. |
| `packer_archive_version` | No | `1.0.2` | Packer archive version. |
| `packer_archive_sha256` | No | `13774108d10e26b1b26cc5a0a28e26c934b4e2c66bc3e6c33ea04c2f248aad7f` | Checksum for checking Packer archive integrity. |
| `packer_install_directory` | No | `/usr/local/bin` | Directory, where Packer binary will be installed. |

## Dependencies
*(Null)*

## Example playbook
Install Packer on the host server using default options:
```
- name: Ansible Packer role with default options.
  hosts: all
  gather_facts: true
  roles:
    - ansible-packer
```
Install custom Packer version on the host server to user' local binaries directory:
```
- name: Ansible Packer role with default options
  hosts: all
  gather_facts: true
  roles:
    - ansible-packer
      packer_archive_version: 1.0.0
      packer_install_directory: ~/bin/
```

## License
MIT

## Authors
Kamil Sokolowski<EMAIL_ADDRESS>

repository: kamiljsokolowski/ansible-role-packer

repo_name: kamiljsokolowski/ansible-role-packer


text:
# Customizing the Jupyter Notebook

Some notes on the matter.

---

There are 5 JS apps defined : `apps = ['notebook', 'tree', 'edit', 'terminal', 'auth']` (see _setupbase.py:L449_)

---

_...more to come._

repository: NaasCraft/notebook

repo_name: NaasCraft/notebook


text:
## GPU Accelerated PCSR implementation with Python
## *Power-Constrained Image Contrast Enhancement Through Sparse Representation by Joint Mixed-Norm Regularization*
Jia-Li Yin, Bo-Hao Chen, En-Hung Lai, and Ling-Feng Shi

![](/demo.png)

## Prerequisites:
> * Linux
> * Anaconda
> * CUDA 9.2
> * cuDNN 7.2.1
> * Numbapro 0.23.1
> * Python 2.7
> * Numpy 1.10.4
> * pip 19.1.1
> * OpenCV 3.4.1

## It was tested and runs under the following OSs:
* Ubuntu 18.04
* Ubuntu 16.04

Might work under others, but didn't get to test any other OSs just yet.

## Getting Started:
### Installation
- create a PCSR environment
```bash
conda create -n PCSR numbapro
```
- activate the PCSR environment
```bash
source activate PCSR
```
- install opencv
```bash
conda install opencv
```
- install python-spams
```bash
conda install -c conda-forge python-spams
```

### Testing
- To test the PCSR model:
```bash
python main.py
```
The test results will be saved in: `./Results/.`

## Citation:
    @ARTICLE{yin2019PCCE,
    author={J. {Yin} and B. {Chen} and E. {Lai} and L. {Shi}},
    journal={IEEE Transactions on Circuits and Systems for Video Technology},
    title={Power-Constrained Image Contrast Enhancement Through Sparse Representation by Joint Mixed-Norm Regularization},
    year={2020},
    volume={30},
    number={8},
    pages={2477-2488},}


text:
# Sequel::Redshift

Amazon Redshift adapter for sequel.

## Installation

Add this line to your application's Gemfile:

    gem 'sequel-redshift'

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install sequel-redshift

## Usage

connecting to the database

    DB = Sequel.connect('redshift://#{database-url}', options = {})

querying records

    DB[:table].where('created_at > ?', Time.now - 3600)

inserting records

    DB[:table].insert(key: value)

## Contributing

1. Fork it
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create new Pull Request

repository: attribution/sequel-redshift

gha_language: Ruby

repo_name: attribution/sequel-redshift


text:
---
layout: base
title:  'Statistics of advcl in UD_Nayini-AHA'
udver: '2'
---

## Treebank Statistics: UD_Nayini-AHA: Relations: `advcl`

This relation is universal.

3 nodes (4%) are attached to their parents as `advcl`.

3 instances of `advcl` (100%) are right-to-left (child precedes parent).
Average distance between parent and child is 3.

	PUNCT	DELM	_	7	punct	_	_

~~~

repository: UniversalDependencies/docs

branch_name: refs/heads/pages-source

repo_name: UniversalDependencies/docs


text:
# BussinessData

Read bussiness data from the file and print it.

## Installation

Add this line to your application's Gemfile:

```ruby
gem 'bussiness_data'
```

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install bussiness_data

## Usage

You can pass your bussiness data file in the format of json and get the information of it.

```ruby
BussinessData.get_bussiness_data(file_path)
```

## License

The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).


text:
# Personal Blog

Personal Blog, deployed continously through Netlify.

## Built With

* [Hexo](http://www.dropwizard.io/1.0.2/docs/) - The framework used
* [Node](https://maven.apache.org/)
* [Netlify](https://rometools.github.io/rome/) - Used for continous deployment

## License

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

repository: JasonHannanto/Blog

repo_name: JasonHannanto/Blog


text:
If not possible `catch` the exception an return a relevant result.

In Scala, exceptions are not documented and very hard to track (just like `null`), so you can't be sure everything is correctly handled and given a big enough program, you can be sure something is NOT correctly handled.

Exceptions, like every side-effect, are breaking [referential transparency](https://nrinaudo.github.io/scala-best-practices/definitions/referential_transparency.html) which makes understanding code really hard and refactoring very fragile.

Instead of throwing exceptions, use a specific type to represent the function semantics:

- `Option[A]` when something can be present or not
- `Either[E, A]` when possible errors are limited
- `Try[A]` when you don't know what may fail

Common throwing functions and how to replace them:

- `Seq[A].head` => `Seq[A].headOption`
- `Seq[A].tail` => `Seq[A].drop(1)`
- `Seq[A].last` => `Seq[A].lastOption`
- `Seq[A].reduce` => `Seq[A].reduceOption` or `Seq[A].fold`
- `Option[A].get` => `Option[A].getOrElse`
- `Try[A].get` => `Try[A].getOrElse`

## Other references

This rule is also present in other best practice guides:
- [Nicolas Rinaudo best practices](https://nrinaudo.github.io/scala-best-practices/referential_transparency/avoid_throwing_exceptions.html)
- [Alexandru Nedelcu best practices](https://github.com/alexandru/scala-best-practices/blob/master/sections/2-language-rules.md#27-must-not-throw-exceptions-for-validations-of-user-input-or-flow-control)

repository: zeenea/scala-best-practices

repo_name: zeenea/scala-best-practices


text:
de.foconis.scheduler
====================

Scheduler that scans NSFs and runs periodic tasks.

There is a patrol job that scans periodically all databases.
It recognizes XPage-DBs by the presence of a certain form and then it tries to find jobfactories in
META-INF/services/de.foconis.core.job.NSFJobGroup

To use it.

1. activate the "de.foconis.core.scheduler.Library" in the properties tab

2. Create a text file:
META-INF/services/de.foconis.core.job.NSFJobGroup
with the name of a java class, e.g.:
> de.foconis.demo.app.MyJobGroup

3. Create the class:
```java
	public class MyJobGroup extends AbstractNSFJobGroup {
		protected void init() {
			addJob(Every15Seconds.class);
			// you can add more jobs here
		}
		public Schedule getSchedule() {
			return PeriodicScheduleBuilder.newInterval("00:00:15").build();
		}
	}
```

4. Create the jobClass:
```java
	public class Every15Seconds extends NSFJob {
		protected void runCode() throws InterruptedException {
			System.out.println("********* this code will run every 15 seconds *******");
		}
	}
```

5. create a
> FORM name = de.foconis.form.xsp.default

This is a "marker" to determine quickly if it is worth to search for jobfactories
(TODO: Use a Flag in DB-Icon or sth. similar)

Now look at the server console. The PatrolJob should scan the databases and queue the tasks.
(It may be neccessary to sign the database)

you can take a look at the queue with
> tell http xsp sched list

To stop the scheduler:
> tell http xsp sched stop

You can also do some debugging with
> tell http xsp urlget /schedule-demo.nsf/demo.xsp 'CN=Heinz Fink/O=FOCONIS'

this runs the demo.xsp in the user-context of my boss :-)

Security note
=============

This Implementation honors the Notes-security. (at least it tries to do it - I don't want to open a security hole on the server)

- When loading java classes from an NSF, the must be signed by the SAME user. So sign your NSF after putting it on the server.
=> getSessionAsSigner is checked and this returns null if the code is tainted by someone else and the plugin won't accept the task.

- If you want to run code in the server context (= a session without max. internet access restriction), the code checks
if the signer is allowed to run "unrestricted lotusscript and java agents".

- The code can also "run on behalf of". This is done by creating an XPageSession for the given user. To do this the signer needs the "run-on-behalf"-permission in the server document. This session is restricted by maximum internet access.

- The run-on-behalf-of name must also have the permission to access this server
(to fake any name take a look at FakeNativeContextRequestAdapter.getEnforceAccess())


text:
# Testing Storage Engines for pmemkv

- [dram_vcmap](#dram_vcmap)

# dram_vcmap

A volatile concurrent engine backed by std::allocator. Data written using this engine is stored entierly in DRAM and lost after the database is closed.

This engine is variant of vcmap, which uses std::allocator to allocate memory. That means it is built on top of tbb::concurrent\_hash\_map data structure; std::basic\_string is used as a type of a key and a value.
TBB package is required.

This engine do not require any config parameters

repository: pmem/pmemkv

repo_name: pmem/pmemkv


text:
# Info

| Feature          | Supervisor(s) |
|:---------------- | -------------:|
| **``polls``**    | - |
| ``polls``        | - |
| ``announcement`` | - |
| ``welcome``      | - |
| documentation    | @ThisIsIPat   |
| testing          | - |

The **Info** module provides information globally.

## Commands

### poll

#### Description

Opens a poll for all **node**s to vote on.
The votes return to the **hub** anonymously.

## Listeners

### announcement

#### Description

Forwards an announcement written in the dedicated text channel of the **hub** on Discord to all **node** announcement channels.

### welcome

#### Description

Generates a welcome message shown in all **node** welcome channels containing:

- Rules
- Channel categories
- Roles

defined in the **hub**.

```
TODO("Define how exactly that message should be generated in the wiki (f.e. custom roles would need to be specified extra...)")
```

### polls

#### Description

Updates results of started polls to be shown in the hub.

branch_name: refs/heads/develop

gha_language: Kotlin


text:
# Paper Updater

This script will automatically download a version of paper (latest if no tags set) and then update your instance tags to mark the current version.  If run on reboot it can be used to check that the deployed version is still correct, or pull a new one if desired.

## Requirements
- Python modules boto3 and requests
- Permission to read ec2instances and update tags (described below)

## Role permissions
The following CDK will grant the instance permission to update it's own tags.  If not using CDK a similar policy can be made in IAM.

    minecraft_server_arn = core.Stack.of(self).format_arn(service="ec2",
                                                          resource="instance",
                                                          resource_name= minecraft_server.instance_id )

    role.attach_inline_policy(iam.Policy(self, "EC2 self access",
                                          statements = [iam.PolicyStatement(effect=iam.Effect.ALLOW,
                                          resources=[minecraft_server_arn],
                                          actions=["ec2:*"]),
                                          iam.PolicyStatement(effect=iam.Effect.ALLOW,
                                          resources=["*"],
                                          actions=["ec2:Describe*"])]))


text:
# Changelog

All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.

### [0.7.2](https://github.com/timbru31/amazon-tag-remover/compare/v0.7.1...v0.7.2) (2020-01-29)

### Features

-   remove redundant git add ([360957c](https://github.com/timbru31/amazon-tag-remover/commit/360957cfd9b39b6473c5000c995f1f7ac7e4f50d))

### Bug Fixes

-   **edge:** make sure to always clear the tags ([da04469](https://github.com/timbru31/amazon-tag-remover/commit/da0446958eaa9af97e4d9e155d3faf17cfaf93b3))

### [0.7.1](https://github.com/timbru31/amazon-tag-remover/compare/v0.7.0...v0.7.1) (2019-12-28)

### Bug Fixes

-   remove console.log ([fd47ebd](https://github.com/timbru31/amazon-tag-remover/commit/fd47ebdf7e498ad858605c71e54cc67d23c27788))
-   **edge:** prevent multiple notifications ([1ab4041](https://github.com/timbru31/amazon-tag-remover/commit/1ab404157526ae033459ac864ff1469c7a3e4135))

## [0.7.0](https://github.com/timbru31/amazon-tag-remover/compare/v0.6.1...v0.7.0) (2019-12-28)

### Features

-   add support for amazon.com.sg and amazon.ae ([d316186](https://github.com/timbru31/amazon-tag-remover/commit/d31618638e6b0c7ab96cd95602430d7a906d3ab8))

### Bug Fixes

-   correct edge version ([285d109](https://github.com/timbru31/amazon-tag-remover/commit/285d1096de042ab7de18f38bea9c9a40f2d66980))
-   do not block Prime Video watchlist feature ([067c319](https://github.com/timbru31/amazon-tag-remover/commit/067c31903102d95f39c436058d3331625d7e4bce))
-   Github Action ([c07521c](https://github.com/timbru31/amazon-tag-remover/commit/c07521c3527b62965d5025fd0b479b91891105f1))

### [0.6.1](https://github.com/timbru31/amazon-tag-remover/compare/v0.6.0...v0.6.1) (2019-08-07)

### Bug Fixes

-   add missing options_page key for Edge ([77d34dd](https://github.com/timbru31/amazon-tag-remover/commit/77d34dd))

## [0.6.0](https://github.com/timbru31/amazon-tag-remover/compare/v0.5.3...v0.6.0) (2019-08-07)

### Build System

-   run shipit manually ([525d68a](https://github.com/timbru31/amazon-tag-remover/commit/525d68a))
-   **deps:** update dependencies ([1706785](https://github.com/timbru31/amazon-tag-remover/commit/1706785))
-   **deps-dev:** bump @types/node from 12.6.8 to 12.6.9 ([26ee633](https://github.com/timbru31/amazon-tag-remover/commit/26ee633))
-   **deps-dev:** bump @types/node from 12.6.9 to 12.7.0 ([c9aba94](https://github.com/timbru31/amazon-tag-remover/commit/c9aba94))
-   **deps-dev:** bump addons-linter from 1.10.1 to 1.11.0 ([f6ddef4](https://github.com/timbru31/amazon-tag-remover/commit/f6ddef4))
-   **deps-dev:** bump addons-linter from 1.10.1 to 1.11.0 ([#157](https://github.com/timbru31/amazon-tag-remover/issues/157)) ([5f92cc6](https://github.com/timbru31/amazon-tag-remover/commit/5f92cc6))
-   **deps-dev:** bump copy-webpack-plugin from 5.0.3 to 5.0.4 ([88f3aab](https://github.com/timbru31/amazon-tag-remover/commit/88f3aab))
-   **deps-dev:** bump husky from 3.0.0 to 3.0.1 ([02ed2d7](https://github.com/timbru31/amazon-tag-remover/commit/02ed2d7))
-   **deps-dev:** bump husky from 3.0.1 to 3.0.2 ([e293197](https://github.com/timbru31/amazon-tag-remover/commit/e293197))
-   **deps-dev:** bump lint-staged from 9.2.0 to 9.2.1 ([cf2fc87](https://github.com/timbru31/amazon-tag-remover/commit/cf2fc87))
-   **deps-dev:** bump standard-version from 6.0.1 to 7.0.0 ([f93fb0b](https://github.com/timbru31/amazon-tag-remover/commit/f93fb0b))
-   **deps-dev:** bump standard-version from 6.0.1 to 7.0.0 ([#166](https://github.com/timbru31/amazon-tag-remover/issues/166)) ([f9cc67c](https://github.com/timbru31/amazon-tag-remover/commit/f9cc67c))
-   **deps-dev:** bump webpack from 4.36.1 to 4.37.0 ([ab0a3b1](https://github.com/timbru31/amazon-tag-remover/commit/ab0a3b1))
-   **deps-dev:** bump webpack from 4.36.1 to 4.37.0 ([#159](https://github.com/timbru31/amazon-tag-remover/issues/159)) ([f35d42a](https://github.com/timbru31/amazon-tag-remover/commit/f35d42a))
-   **deps-dev:** bump webpack from 4.37.0 to 4.38.0 ([4a5c437](https://github.com/timbru31/amazon-tag-remover/commit/4a5c437))
-   **deps-dev:** bump webpack from 4.38.0 to 4.39.0 ([4eb50d9](https://github.com/timbru31/amazon-tag-remover/commit/4eb50d9))
-   **deps-dev:** bump webpack from 4.39.0 to 4.39.1 ([4e0d13a](https://github.com/timbru31/amazon-tag-remover/commit/4e0d13a))

### Features

-   add Edge skeleton and TravisCI deployment config for Windo… ([#156](https://github.com/timbru31/amazon-tag-remover/issues/156)) ([85ff754](https://github.com/timbru31/amazon-tag-remover/commit/85ff754))
-   add Edge skeleton and TravisCI deployment config for Windows ([37900ea](https://github.com/timbru31/amazon-tag-remover/commit/37900ea))
-   add Edge version patching ([7dddcd0](https://github.com/timbru31/amazon-tag-remover/commit/7dddcd0))
-   complete Edge support ([4a8f084](https://github.com/timbru31/amazon-tag-remover/commit/4a8f084))

### [0.5.3](https://github.com/timbru31/amazon-tag-remover/compare/v0.5.2...v0.5.3) (2019-07-19)

### Bug Fixes

-   correctly handle invalid url search params ([95a00e8](https://github.com/timbru31/amazon-tag-remover/commit/95a00e8))
-   run build:prod after release tagging and bumping ([7bc6225](https://github.com/timbru31/amazon-tag-remover/commit/7bc6225))

### Build System

-   fix manifest ([5bd0fef](https://github.com/timbru31/amazon-tag-remover/commit/5bd0fef))

### [0.5.2](https://github.com/timbru31/amazon-tag-remover/compare/v0.5.1...v0.5.2) (2019-07-18)

### Bug Fixes

-   write manifest.json file after bumping ([6e4766d](https://github.com/timbru31/amazon-tag-remover/commit/6e4766d))

### Build System

-   **deps:** [security] bump lodash.template from 4.4.0 to 4.5.0 ([f1af82d](https://github.com/timbru31/amazon-tag-remover/commit/f1af82d))
-   **deps-dev:** bump @types/chrome from 0.0.80 to 0.0.81 ([b1609d9](https://github.com/timbru31/amazon-tag-remover/commit/b1609d9))
-   **deps-dev:** bump @types/chrome from 0.0.81 to 0.0.82 ([de98418](https://github.com/timbru31/amazon-tag-remover/commit/de98418))
-   **deps-dev:** bump @types/chrome from 0.0.82 to 0.0.83 ([291da01](https://github.com/timbru31/amazon-tag-remover/commit/291da01))
-   **deps-dev:** bump @types/chrome from 0.0.83 to 0.0.85 ([4bb6a7e](https://github.com/timbru31/amazon-tag-remover/commit/4bb6a7e))
-   **deps-dev:** bump @types/chrome from 0.0.83 to 0.0.85 ([#123](https://github.com/timbru31/amazon-tag-remover/issues/123)) ([4ff7855](https://github.com/timbru31/amazon-tag-remover/commit/4ff7855))
-   **deps-dev:** bump @types/chrome from 0.0.85 to 0.0.86 ([161485d](https://github.com/timbru31/amazon-tag-remover/commit/161485d))
-   **deps-dev:** bump @types/chrome from 0.0.85 to 0.0.86 ([#127](https://github.com/timbru31/amazon-tag-remover/issues/127)) ([de60812](https://github.com/timbru31/amazon-tag-remover/commit/de60812))
-   **deps-dev:** bump addons-linter from 1.10.0 to 1.10.1 ([2388826](https://github.com/timbru31/amazon-tag-remover/commit/2388826))
-   **deps-dev:** bump addons-linter from 1.6.1 to 1.6.2 ([3e460c1](https://github.com/timbru31/amazon-tag-remover/commit/3e460c1))
-   **deps-dev:** bump addons-linter from 1.6.2 to 1.6.3 ([fef799c](https://github.com/timbru31/amazon-tag-remover/commit/fef799c))
-   **deps-dev:** bump addons-linter from 1.6.3 to 1.6.4 ([78bb2f0](https://github.com/timbru31/amazon-tag-remover/commit/78bb2f0))
-   **deps-dev:** bump addons-linter from 1.6.4 to 1.7.0 ([a85dc3f](https://github.com/timbru31/amazon-tag-remover/commit/a85dc3f))
-   **deps-dev:** bump addons-linter from 1.7.0 to 1.8.0 ([87183fb](https://github.com/timbru31/amazon-tag-remover/commit/87183fb))
-   **deps-dev:** bump addons-linter from 1.8.0 to 1.9.0 ([1931d61](https://github.com/timbru31/amazon-tag-remover/commit/1931d61))
-   **deps-dev:** bump addons-linter from 1.9.1 to 1.9.2 ([3df60ec](https://github.com/timbru31/amazon-tag-remover/commit/3df60ec))
-   **deps-dev:** bump addons-linter from 1.9.2 to 1.9.3 ([3d73e89](https://github.com/timbru31/amazon-tag-remover/commit/3d73e89))
-   **deps-dev:** bump addons-linter from 1.9.3 to 1.9.4 ([3b92b05](https://github.com/timbru31/amazon-tag-remover/commit/3b92b05))
-   **deps-dev:** bump addons-linter from 1.9.4 to 1.9.6 ([5fd4a61](https://github.com/timbru31/amazon-tag-remover/commit/5fd4a61))
-   **deps-dev:** bump addons-linter from 1.9.6 to 1.9.7 ([6318578](https://github.com/timbru31/amazon-tag-remover/commit/6318578))
-   **deps-dev:** bump addons-linter from 1.9.7 to 1.10.0 ([02bddf1](https://github.com/timbru31/amazon-tag-remover/commit/02bddf1))
-   **deps-dev:** bump husky from 1.3.1 to 2.1.0 ([c0a0636](https://github.com/timbru31/amazon-tag-remover/commit/c0a0636))
-   **deps-dev:** bump husky from 2.1.0 to 2.2.0 ([511e91c](https://github.com/timbru31/amazon-tag-remover/commit/511e91c))
-   **deps-dev:** bump husky from 2.2.0 to 2.3.0 ([c778a17](https://github.com/timbru31/amazon-tag-remover/commit/c778a17))
-   **deps-dev:** bump husky from 2.3.0 to 2.4.0 ([e9b427c](https://github.com/timbru31/amazon-tag-remover/commit/e9b427c))
-   **deps-dev:** bump husky from 2.4.0 to 2.4.1 ([b48922a](https://github.com/timbru31/amazon-tag-remover/commit/b48922a))
-   **deps-dev:** bump husky from 2.4.1 to 2.5.0 ([927db35](https://github.com/timbru31/amazon-tag-remover/commit/927db35))
-   **deps-dev:** bump husky from 2.5.0 to 2.6.0 ([eae9c7a](https://github.com/timbru31/amazon-tag-remover/commit/eae9c7a))
-   **deps-dev:** bump husky from 2.6.0 to 2.7.0 ([3716264](https://github.com/timbru31/amazon-tag-remover/commit/3716264))
-   **deps-dev:** bump husky from 2.7.0 to 3.0.0 ([4d88021](https://github.com/timbru31/amazon-tag-remover/commit/4d88021))
-   **deps-dev:** bump husky from 2.7.0 to 3.0.0 ([#147](https://github.com/timbru31/amazon-tag-remover/issues/147)) ([a12a5fe](https://github.com/timbru31/amazon-tag-remover/commit/a12a5fe))
-   **deps-dev:** bump lint-staged from 8.1.4 to 8.1.5 ([3191109](https://github.com/timbru31/amazon-tag-remover/commit/3191109))
-   **deps-dev:** bump lint-staged from 8.1.5 to 8.1.6 ([9fc05a2](https://github.com/timbru31/amazon-tag-remover/commit/9fc05a2))
-   **deps-dev:** bump lint-staged from 8.1.6 to 8.1.7 ([9eed4d9](https://github.com/timbru31/amazon-tag-remover/commit/9eed4d9))
-   **deps-dev:** bump lint-staged from 8.1.7 to 8.2.0 ([dc66043](https://github.com/timbru31/amazon-tag-remover/commit/dc66043))
-   **deps-dev:** bump lint-staged from 8.2.0 to 8.2.1 ([0748bb0](https://github.com/timbru31/amazon-tag-remover/commit/0748bb0))
-   **deps-dev:** bump lint-staged from 8.2.1 to 9.0.1 ([af88e3d](https://github.com/timbru31/amazon-tag-remover/commit/af88e3d))
-   **deps-dev:** bump lint-staged from 8.2.1 to 9.0.1 ([#148](https://github.com/timbru31/amazon-tag-remover/issues/148)) ([f6d915f](https://github.com/timbru31/amazon-tag-remover/commit/f6d915f))
-   **deps-dev:** bump lint-staged from 9.0.1 to 9.0.2 ([3240916](https://github.com/timbru31/amazon-tag-remover/commit/3240916))
-   **deps-dev:** bump lint-staged from 9.0.2 to 9.1.0 ([228c43b](https://github.com/timbru31/amazon-tag-remover/commit/228c43b))
-   **deps-dev:** bump lint-staged from 9.1.0 to 9.2.0 ([92c0483](https://github.com/timbru31/amazon-tag-remover/commit/92c0483))
-   **deps-dev:** bump prettier from 1.16.4 to 1.17.0 ([a829562](https://github.com/timbru31/amazon-tag-remover/commit/a829562))
-   **deps-dev:** bump prettier from 1.17.0 to 1.17.1 ([85e4b5f](https://github.com/timbru31/amazon-tag-remover/commit/85e4b5f))
-   **deps-dev:** bump prettier from 1.17.1 to 1.18.0 ([5b7de7f](https://github.com/timbru31/amazon-tag-remover/commit/5b7de7f))
-   **deps-dev:** bump prettier from 1.18.0 to 1.18.2 ([5aa2d71](https://github.com/timbru31/amazon-tag-remover/commit/5aa2d71))
-   **deps-dev:** bump standard-version from 5.0.0 to 5.0.1 ([6e696f9](https://github.com/timbru31/amazon-tag-remover/commit/6e696f9))
-   **deps-dev:** bump standard-version from 5.0.1 to 5.0.2 ([fee9529](https://github.com/timbru31/amazon-tag-remover/commit/fee9529))
-   **deps-dev:** bump standard-version from 5.0.2 to 6.0.1 ([f0c5218](https://github.com/timbru31/amazon-tag-remover/commit/f0c5218))
-   **deps-dev:** bump standard-version from 5.0.2 to 6.0.1 ([#119](https://github.com/timbru31/amazon-tag-remover/issues/119)) ([435ff59](https://github.com/timbru31/amazon-tag-remover/commit/435ff59))
-   **deps-dev:** bump stylelint from 10.0.1 to 10.1.0 ([26e6426](https://github.com/timbru31/amazon-tag-remover/commit/26e6426))
-   **deps-dev:** bump stylelint-config-recommended from 2.1.0 to 2.2.0 ([f289916](https://github.com/timbru31/amazon-tag-remover/commit/f289916))
-   **deps-dev:** bump tslint from 5.12.1 to 5.13.0 ([0dfd4db](https://github.com/timbru31/amazon-tag-remover/commit/0dfd4db))
-   **deps-dev:** bump tslint from 5.13.0 to 5.13.1 ([f64e785](https://github.com/timbru31/amazon-tag-remover/commit/f64e785))
-   **deps-dev:** bump tslint from 5.13.1 to 5.14.0 ([d70b6b9](https://github.com/timbru31/amazon-tag-remover/commit/d70b6b9))
-   **deps-dev:** bump tslint from 5.14.0 to 5.15.0 ([bc6825a](https://github.com/timbru31/amazon-tag-remover/commit/bc6825a))
-   **deps-dev:** bump tslint from 5.15.0 to 5.16.0 ([2dfb0e2](https://github.com/timbru31/amazon-tag-remover/commit/2dfb0e2))
-   **deps-dev:** bump tslint from 5.16.0 to 5.17.0 ([54a0868](https://github.com/timbru31/amazon-tag-remover/commit/54a0868))
-   **deps-dev:** bump tslint from 5.17.0 to 5.18.0 ([e1f70cd](https://github.com/timbru31/amazon-tag-remover/commit/e1f70cd))
-   **deps-dev:** bump typescript from 3.3.3 to 3.3.3333 ([3970eb1](https://github.com/timbru31/amazon-tag-remover/commit/3970eb1))
-   **deps-dev:** bump typescript from 3.3.3333 to 3.3.4000 ([019c77e](https://github.com/timbru31/amazon-tag-remover/commit/019c77e))
-   **deps-dev:** bump typescript from 3.3.4000 to 3.4.1 ([c0b9bf2](https://github.com/timbru31/amazon-tag-remover/commit/c0b9bf2))
-   **deps-dev:** bump typescript from 3.4.1 to 3.4.2 ([068a51b](https://github.com/timbru31/amazon-tag-remover/commit/068a51b))
-   **deps-dev:** bump typescript from 3.4.2 to 3.4.3 ([767c4b1](https://github.com/timbru31/amazon-tag-remover/commit/767c4b1))
-   **deps-dev:** bump typescript from 3.4.3 to 3.4.4 ([f65cffc](https://github.com/timbru31/amazon-tag-remover/commit/f65cffc))
-   **deps-dev:** bump typescript from 3.4.5 to 3.5.1 ([4e2965d](https://github.com/timbru31/amazon-tag-remover/commit/4e2965d))
-   **deps-dev:** bump typescript from 3.5.1 to 3.5.2 ([3b72254](https://github.com/timbru31/amazon-tag-remover/commit/3b72254))
-   **deps-dev:** bump typescript from 3.5.2 to 3.5.3 ([199636c](https://github.com/timbru31/amazon-tag-remover/commit/199636c))

## [0.5.1](https://github.com/timbru31/amazon-tag-remover/compare/v0.5.0...v0.5.1) (2019-02-16)

### Bug Fixes

-   correctly clean tags array ([8fa5de7](https://github.com/timbru31/amazon-tag-remover/commit/8fa5de7))

# 0.5.0 (2019-01-13)

### Bug Fixes

-   amazon.com.tr support ([9fc87c0](https://github.com/timbru31/amazon-tag-remover/commit/9fc87c06db60ee58d914f37aa0baa2761294a1e5))

### Features

-   add native notification, options page and minor app refactoring. ([257f27a](https://github.com/timbru31/amazon-tag-remover/commit/257f27aedb52da0d27f7a43ba53975570078a809))

# 0.4.0 (2018-09-27)

### Bug Fixes

-   check if URL matches a tag, replace only then. Fixes AWS login ([a0cf102](https://github.com/timbru31/amazon-tag-remover/commit/a0cf102))
-   correct indentation in style.css ([5dbfd0f](https://github.com/timbru31/amazon-tag-remover/commit/5dbfd0f))
-   do not redirect when URL did not change, preserves preflight, fixes [#2](https://github.com/timbru31/amazon-tag-remover/issues/2) ([8dda56c](https://github.com/timbru31/amazon-tag-remover/commit/8dda56c))
-   remove outdated longurl code ([d478d1e](https://github.com/timbru31/amazon-tag-remover/commit/d478d1e))
-   spelling ([57ea119](https://github.com/timbru31/amazon-tag-remover/commit/57ea119))

### Features

-   add firefox logo ([1c95760](https://github.com/timbru31/amazon-tag-remover/commit/1c95760))
-   add icons ([d097c86](https://github.com/timbru31/amazon-tag-remover/commit/d097c86))
-   add support for ascsubtag, closes [#6](https://github.com/timbru31/amazon-tag-remover/issues/6) ([60dc68e](https://github.com/timbru31/amazon-tag-remover/commit/60dc68e))
-   add webstore icon ([66d14d7](https://github.com/timbru31/amazon-tag-remover/commit/66d14d7))
-   increase minimum chrome version ([ad68e44](https://github.com/timbru31/amazon-tag-remover/commit/ad68e44))
-   make extension compatible with Firefox and Edge ([115e7cc](https://github.com/timbru31/amazon-tag-remover/commit/115e7cc))

# Changelog

#### 0.3.2 (Chrome only)

-   Republish from Chrome
    -   Items violated against the poilicy: "Do not use irrelevant, misleading, or excessive keywords in app descriptions, titles, or metadata"

#### 0.3.1

-   Improved check if URL should be altered
    -   Fixes e.g. AWS login

#### 0.3.0

-   Add support for ascsubtag, refactor RegExp code to use URLSearchParams instead
    -   Edge currently has no support for this, but isn't accepting submissions to the store either

#### 0.2.0

-   Make extension compatible with Firefox and Edge

#### 0.1.1

-   Fix Amazon Instant Video

#### 0.1

-   initial release

repository: QQiot/amazon-tag-remover

repo_name: QQiot/amazon-tag-remover


text:
---
layout: post
title: Pack History #4
Of The Stout Heart
date: 2016-08-25
tags: english
category: archivist
---
ArchNadeom, Keeper Of Records.
Stardate #232.
------------------------------------------------

It was a bold move against the S.Q.U.I.D. WarFleet.

Wolfpack had been targetting S.Q.U.I.D. ships for weeks with little gain. Even the lower ranks of S.Q.U.I.D. put up a vicious fight. For every victory claimed by Wolfpack, the S.Q.U.I.D. made them pay with heavy losses. And for each S.Q.U.I.D. defeated, they quickly filled their ranks with newer and yet more powerful ships.

Only the senior officers of Wolfpack, and of them only a few, WarWolff, xEEVEEx, and Machiel, dared to confront the S.Q.U.I.D. fighting elite. We were outgunned. Outnumbered. We were losing.

Only the Stout of Heart took up courage. It was time for a new offensive. One that struck at the heart of the S.Q.U.I.D. WarFleet.

Sumara, senior officer of Wolfpack, was our secret weapon.

She had been planning this attack for weeks, ever since the war began. Carefully selecting and upgrading her systems.

She was to penetrate behind enemy lines and strike at their leader, the oppressive and mighty general of the S.Q.U.I.D. WarFleet, PuddingTown. By cutting off the head of their leadership, that the ranks of the S.Q.U.I.D. would crumble from within.

It was a dangerous assignment. The S.Q.U.I.D. flew in tight circling formations around their center, protecting their general with a wall of ships. Each ring of defense growing stronger and stronger, and weaving itself more tightly as she would push further in.

WarWolff placed a hand on Sumara's shoulder.

It was not easy selecting an officer for such a mission. There was just no other choice. The S.Q.U.I.D. WarFleet was too powerful for a frontal assualt, as the last weeks of battle had painfully proven. It would require guile and courage to infiltrate the enemy lines. Sumara was their best.

Clasping Sumara's shoulders, WarWolf looked her in the eye and then gave her a powerful hug. He may never see his friend again.

For the mission, Sumara had selected one of the dorito-styled ships that was popular among the S.Q.U.I.D.  "Dorito." She smirked at the name. Her ship would devour plenty of those in the days ahead.

Her captain's chair was covered by a thick rug of the softest fur.

There was a rumor circulating among the ship. Her former firstmate, the Trumpsta, had made the mistake of staring at her chest instead of her eyes as she dictated orders. So she cut out his eyes and saved them as a souveneir in her flask.

Why would she correct them? It kept them focused on their duties. And amused her greatly to see one of her crew go pale whenever she took a sip.

"Sir! We've got something on the scanner."

Sumara stood from her chair and approached the station, "Is it him?"

"Reading the output now, sir.... PuddingTown of S.Q.U.I.D. WarFleet!"

Finally. Weeks of preparation and crawling behind enemy lines had payed off. The head of the beast. It was a great leviathon of a ship. A federation class 10, fully stocked and bristling with guns and warheads.

"Sir! They've pierced our cover! Enemy ship is opening fire!"

"Shields and weapons to maximum power. Train all guns and missiles on the enemy shields. Slimer, head to the teleporter and prepare for boarding. Let's see if we can pull the tentacles off their king."

"Sir, I'm reporting security breaches in Reactor Rooms 1 and 2."

Sumara snorted. Enemy boarders? Is that the best you've got?

"Engineering Vehicles and Visiri Capn's, report to the reactor rooms and get them back online. Slimer, board the enemy ship and cut power to their shields. All weapons retarget and train fire on the enemy fusion reactor."

Let's see how you like that. Two can play this game.

"Sir, our teleporter is sustaining heavy enemy fire!"

"Crew, cease all boarding maneuvers. Engineering Vehicles and Visiri Cap'ns rush to the teleporter for emergency repairs. Time your repairs between enemy fire. We'll cover you as best we can with the shields."

"Sir! Our hull is collapsing! We can't withstand that much firepower.

"All crew report to your gun posts! Keep those shells firing and the missile bays full. And keep targeting that reactor! It's a race against death, boys. Make your pack proud. a-Wooooooooo!!!"

It was a battle of legends. Sumara destroyed the great PuddingTown of S.Q.U.I.D. WarFleet and cut the head off their empire. Wolfpack mounted a full offensive, taking advantage of the confusion and crippled leadership, and nipping at the heels of S.Q.U.I.D. warships as they beat a hasty retreat.

WarWolff was proud to see his friend again. It was a victory worthy of celebration.

Sumara Of The Stout Heart. Hero of Wolfpack.

![PackHist004_Sumara](/assets/img/archivist/PackHist004_Sumara.jpg "Sumara defeats PuddingTown")


text:
---
layout: post
title:  "Elgato Stream Deck for Pentesters"
categories: [Productivity, Tutorial]
authorMain: Nestor N Torres
tag: Stream Deck
description: I made this page to show how I use the Elgato Stream Deck for pentesting. Hopefully, this page and the instructions here motivate you to get a stream deck and use it for pentesting and every day productivity.
---

### Contact
- [LinkedIn](https://www.linkedin.com/in/nanjuan/)
- Email<EMAIL_ADDRESS>
### Table
1. [Summary](#Summary)
2. [Prerequisites](#preinfo)
3. [Open Chrome with Different Profiles](#OpenChrome)
4. [How to Metasploit to Stream Deck](#metasploit)
5. [How to open Burp and other tools](#openTools)
6. [Add Automation Script to Stream Deck](#Add2StreamDeck)

## Summary
Why should I use a Stream Deck to be more productive?

One day, I came up with this idea while looking at random tech online and came across the Elgato Stream Deck. Streamers use the Stream Deck to make repetitive actions like turning the mic on and off to record a clip while they stream easily. I realized that I could simply use automation and invoke these scripts from the stream deck to increase my productivity and automate mundane actions like opening different chromes pages from different profiles. I also plan to use this document as a live document where I can keep adding automation scripts I add to my Stream Deck.

[Top](#Top)

## Prerequisites
Some prerequisites to keep in mind if you planning to follow this tutorial. I am using Mac OS 11.6 at the time of writing this tutorial. For Chrome, I am using the laters version in November 2021. Also, I am using Mac OS Automator software. Also, if I see a lot of interest in this post, I might work on Windows version for this tutorial.

[Top](#Top)

## How to open Chrome with different Profiles/Accounts on the Stream Deck.

The following step will help you create the necessary Automator scripts to open different chrome windows with other accounts from your computer.

1. Open the `Automator` program and click `New Document` if prompt. Then select application and click choose.
![Section1](/blog-assets/Elgato-StreamDeck-For-Productivity/Automation-App-Open-Click-App.png)

2. Search on the left upper search bar for `Run Shell Script` and drag that actions to the right window.
![Section1](/blog-assets/Elgato-StreamDeck-For-Productivity/Automation-Run-Shell-Script-on-Right.png)

3. On the Run Shell Script windows, enter the following command line. This line will open Chrome and with the profile set as one in a new chrome window. By increasing the number and pressing `Run` on the Automator top right corner, you can test the code to verify you are able to open the correct browser profile you are trying to add for automation.
    ```
    /Applications/Google\ Chrome.app/Contents/MacOS/Google\ chrome --profile-directory="Profile 1"
    ```

    ![Section1](/blog-assets/Elgato-StreamDeck-For-Productivity/Automation-Run-Script-Command-Line.png)

4. After you are able to test and run the correct profile got to `File` and click `save`. On the windows that open, name the Automation program as you which and make sure the File Format is set to `Application` and click save.
![Section1](/blog-assets/Elgato-StreamDeck-For-Productivity/Automation-Save-Window.png)

5. To test the script, just find where it is saved and click it like any other application to see if it opens Chrome with the correct profile. To choose a different profile, perform the same steps on the group, change the `Profile 1` to `Profile 2`, and keep increasing the number depending on how many profiles you have on your Chrome Browser.
![Section1](/blog-assets/Elgato-StreamDeck-For-Productivity/Automation-Run-Script-Command-Line-2.png)

[Top](#Top)

## How to Add Metasploit to Elgato Stream Deck.

The following steps will show you how to add Metasploit to Elgato Stream Deck.

* pre-requirement make sure you have Metasploit installed and you are able to run it from the command line.

1. Open the Elgato Stream Deck software and search for `Multi Action` on the right search bar and drag to one of the empty fiels.
![Section2](/blog-assets/Elgato-StreamDeck-For-Productivity/metasploit-Stream-Deck-1.png)

2. Enter the name you desire on the title section and on Content click on Content section the little arrow icon. Then add the follwing step to the Multi Action.
    1. System: Open
    2. System: Text
    3. Stream Deck: Delay
    4. System: Text
    5. Stream Deck: Delay
    6. System: Text

    ![Section2](/blog-assets/Elgato-StreamDeck-For-Productivity/metasploit-Stream-Deck-2.png)

3. On the System: Option select the terminal application to open.
![Section2](/blog-assets/Elgato-StreamDeck-For-Productivity/metasploit-Stream-Deck-3.png)

4. On the first System: Text enter the title you want to use to identify this step then enter the command line to start the Metasploit databse my example is below and check the box that said. `Press Enter After messages`

    ```
    /opt/metasploit-framework/bin/msfdb start
    ```
![Section2](/blog-assets/Elgato-StreamDeck-For-Productivity/metasploit-Stream-Deck-4.png)

5. On the two Stream Deck: Delay add `2000 ms`
![Section2](/blog-assets/Elgato-StreamDeck-For-Productivity/metasploit-Stream-Deck-5.png)

6. On the second System: Text enter the title you want to use to identify this step then enter the command line to answer the question from starting msfdb.
![Section2](/blog-assets/Elgato-StreamDeck-For-Productivity/metasploit-Stream-Deck-6.png)

7. On the last System: Text enter the title you want to use to identify this step then enter the command line to start msfconsole. `* Remember you will need to enter you password for sudo`

    ```
    sudo /opt/metasploit-framework/bin/msfconsole
    ```
    ![Section2](/blog-assets/Elgato-StreamDeck-For-Productivity/metasploit-Stream-Deck-7.png)

8. I added another I con use to stop the msfdb after you are done with Metasploit. For this you will aldo need a `Multi Action` and add the fallowing functionality.
    1. System: Open
    2. System: Text
![Section2](/blog-assets/Elgato-StreamDeck-For-Productivity/metasploit-Stream-Deck-8.png)

9. On the System: Option select the terminal application to open.
![Section2](/blog-assets/Elgato-StreamDeck-For-Productivity/metasploit-Stream-Deck-9.png)

10. On the first System: Text enter the title you want to use to identify this step then enter the command line to stop the database.

    ```
    /opt/metasploit-framework/bin/msfdb stop
    ```
    ![Section2](/blog-assets/Elgato-StreamDeck-For-Productivity/metasploit-Stream-Deck-10.png)

11. Last step change your icons to one you want if you want to use the icon I have you can save it from this post as png.

    ![Section2](/blog-assets/Elgato-StreamDeck-For-Productivity/metasploit-Stream-Deck-11-1.png)

    ![Section2](/blog-assets/Elgato-StreamDeck-For-Productivity/metasploit-Stream-Deck-11-2.png)

    ![Section2](/blog-assets/Elgato-StreamDeck-For-Productivity/metasploit-Stream-Deck-11-3.png)

    * icon

    ![Section2](/blog-assets/Elgato-StreamDeck-For-Productivity/msfconsole.png)

[Top](#Top)

## How to open Burp and other tools with Stream Deck

The following steps will show you how to add Burp and other software to Elgato Stream Deck.

1. Open the Elgato Stream Deck software and search for `Open` on the right search bar and drag to one of the empty fiels.
![Section3](/blog-assets/Elgato-StreamDeck-For-Productivity/openApplications-1.png)

2. Click on the Icon on the middle windows and on the options bellow click on `Choose` then select the app you want to run with that click.
![Section3](/blog-assets/Elgato-StreamDeck-For-Productivity/openApplications-2.png)

3. Last test the new icon and recreate any of the steps with as many apps as you want too add to the stream deck.
![Section3](/blog-assets/Elgato-StreamDeck-For-Productivity/openApplications-3.png)

[Top](#Top)

## How to Add Automation script to Elgato Stream Deck.

The following steps will show you how to add Automator scripts to Elgato Stream Deck.

1. Open the Elgato Stream Deck software and search for `open` on the right search bar.
    ![SectionLast](/blog-assets/Elgato-StreamDeck-For-Productivity/Stream-Deck-Software-Open.png)

    ![SectionLast](/blog-assets/Elgato-StreamDeck-For-Productivity/Stream-Deck-Software-Search-For-Open.png)

2. Drag the open icon on the Stream Deck software to an empty window.
![SectionLast](/blog-assets/Elgato-StreamDeck-For-Productivity/Stream-Deck-Software-MoveOpen-To-Window.png)

3. Click on the icon on the middle window, enter your title, click `choose`, and select the application you want to run when clicking on the Stream Deck.
![SectionLast](/blog-assets/Elgato-StreamDeck-For-Productivity/Stream-Deck-Software-Select-Application.png)

4. I recommend creating a folder with your Icons and logos you might want to use for the icon. Remember to try different sizes to get a good result on the Stream Deck. This is how I have my icons organized. Remember, the icon might not look fine, so you might need to try a different resolution on the Stream Deck to make it look correct.

[Top](#Top)

#### Reference:

https://winaero.com/run-google-chrome-with-different-profiles/
https://peter.sh/experiments/chromium-command-line-switches/


text:
# DEPRECATED

*The livelykernel-scripts toolsuite is no longer needed for running a [LivelyKernel core](https://github.com/LivelyKernel/LivelyKernel) installation. Please see the [LivelyKernel readme](https://github.com/LivelyKernel/LivelyKernel/blob/master/README.md) for how to run and test Lively.*

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

## lively-kernel scripts

This repository includes a bunch of scripts and a minimal node.js server to run, test, and maintain the [LivelyKernel core](https://github.com/LivelyKernel/LivelyKernel).

### Installation

Please see [LivelyKernel](https://github.com/LivelyKernel/LivelyKernel) for installation instructions.

repository: LivelyKernel/livelykernel-scripts

repo_name: LivelyKernel/livelykernel-scripts