text:
# GDD Masterplan

## GDD Part 2

This is part 2 of the GDD.

> Warning: This file contains not only spoilers but the whole story and twists :)

How to use this. Use VS Code and install Markdown Preview Mermaid to view the state machines. Press Ctrl + K V to preview this file.

## High Concept

In the race for the first manned moon mission, there is a new challenger. Ustria. You are part of the Ustria Secret Service and have to steal plans to build rockets from the leading space nations. The player has to penetrate buildings, overcome security systems and take out guards to complete his task. The game is supposed to be a little parody of secret services in Eastern Bloc countries. Which are chronically underfinanced and technologically disconnected.

## Objective

The game is mission-based and is triggered by orders from the Chief of Intelligence. Most missions are sabotage and theft. But there can also be missions where the player enters a wrong house, for example because of a lack of intelligence, and finds only an old granny and her cat. Or the boss sends the player on a mission to monitor his own wife and uncover an affair.
The main goal is to steal enough knowledge or sabotage other powers to the extent that the player's nation can actually carry out a manned moon mission. As the game progresses, the missions become more difficult as the technology to be stolen becomes more and more cutting edge.

# Missions

## Mission Progress (WP-3)

To make it less linear, we give the player the choice of selecting wether he goes on a mission for Ustria or perform a sabotage mission.
After every successful mission the player returns to the HQ and sees instead of the mission briefing a race screen:

![Race Screen](img/racescreen.png)

After each (default story) mission points will be added to the nations, e.g.:

- Ustria: 10 pts
- USSR: 5 pts
- USA: 5-20 pts in nonlinear function

There can be 3 outcomes in the space race:

- If the player does not sabotage at all USA will win.
- If the player only sabotages the USA, USSR will win.
- Player has to meet a perfect match to let Ustria win (e.g. at least 3x USA; 2x USSR)

There is an alternate secret ending when you do flirting with the secretary.

## Missions

The overall story remains the same but its streched. Also some minor substories which expands over 3-4 levels could help to improve the overall experience.
Ideas are welcome :D

Total Missions: 20 linear, 10 sabotages, 1 love

### Linear Story Missions

Please note that the level difficulty shall rise.

See online doc

#### Substories

#### Apollo 8

December 1968. Apollo 8 sucessfully orbited the moon, get the blackbox of the capsule. USA Labs

#### Soyuz 1

April 1967. Before USSR can launch the soyuz, destroy one of the solar panel of the command capsule. This mission is on a driving train. (Bg is parallax scrolling).

#### Pre-Soyuz

During 1967. Rumors spread the USSR has also a rocket ready for lunar landing. Kidnap the lead scientiest. USSR/Hotel

##### Apollo 1

Januar 1967. Intel got informations that the USA has a space ship ready for lunar landing. To disrupt the progress, sabotage the command module in the lab before they can launch it. (Resulting in burn out of the command capsule killing all 3 crew members in an planned test flight). USA, factory/lab.

##### Luna 10

1966 USSR place a satellite in moons orbit to gather more informations. You have to look for the results. Safe mission in USSR. Space lab or something.

##### Luna 3

In the 1963, is trying to gather landing informations by stealing pictures made by the Luna 3 moon mission in 1959 ussr. Mission environment is the space flight archive of USSR.

##### Atlas 9

May 1963. Earth Orbiter Mission. Capture the pilot to get more information on his physical behaviour after long time stay in space. (Hospital USA)

##### Rocket 1

May, 28 1961 (somedays after speech of Kennedy). Ustria Intel came to the conclussion, that russian space tech is the most advanced. As Yuri Gagarin was the first man in space and human in orbit fly. Player shall look for plans of the Vostok-K 8K72K rocket and steal it from a safe.

##### Rocket 2

September 1961 After Vostok 2 mission Vostok-2 mission (Gherman Titov spend one day in space), the intel want documents about the effect of space flight on the human body and has to infiltrate a soviet military hospital and look for the documents in file cabines.

##### Chimpanzee

November 27, 1961 The intel has reported that Mercury-Atlas 5 will be the first manned US mission to orbit the Earth. The goal is to infiltrate the NASA lab training site and take pictures of it. To actually get an understanding how they prepare their astronauts. Turns out "Enzo" is not a man but a chimpanzee.

Affaire 3: You have to infiltrate a law firm and steal the marriage contract from the safe.

##### Rocket 3

Early 1962 Ustria is about to completet the rocket but Intel told that USSR is developing a new booster for the Vostok-K rockets. The player has to steal the plans.

##### Rocket 4

Later 1962 Ustria finished the rocket and is launching a first unmaned flight but the control unit does not work. So the player has to steal one from USSR as theirs is 100% compatible. Player needs to carry out a blackbox from the building.

### Sabotage Missions

After mission 5 the player can receive the first sabotage mission as a forecast of choice. After mission 10 the player can chose sabotage missions before playing the story line mission.
There shall be at least 5 sabotage missions available per nation.

**USA**
| # | Title | Desc |
| --- | ----- | ------------------- |
| 1 | | |
| 2 | | |
| 3 | | |
| 4 | | |
| 5 | | |

**USSR**
| # | Title | Desc |
| --- | ----- | ------------------- |
| 1 | | |
| 2 | | |
| 3 | | |
| 4 | | |
| 5 | | |

### Secretary Flirt Ending

The secretary wont give you any missions, but you can flirt with her. Which will lead to a secret mission instead of level 20.
Resulting in an alternate ending

# Mechanics

## Moveable Camera (WP-4)

Holding down a specific button + cursor keys will result in moving the camera only. So the player can peak into next room or something.
Movement shall be limited to specific amount of pixel, camera transition should be interpolated (smooth). Releasing the button, will return
to original camera location with a sped up transition.

## Weapons

### Taser Gun

- Like before

### Stones (WP-2)

- Infinite amount
- Distraction
- The longer you hold the button the further the stone throw
- Predicted flying curve

### Snacks (WP-2)

- Must be picked up
- Dogs will be satisfied
- Can also be thrown as distraction for guards

## Archive

We introduce a new npc where the player can replay certain missions - without money reward ofc.

## Controls

| Controls    | Key 1         | Key 2         | Gamepad    |
| ----------- | ------------- | ------------- | ---------- |
| Move        | Wasd + Cursor | Wasd + Cursor | Left Stick |
| Interaction | E             | X             | A          |
| Weapon      | F             | Z/Y           | B          |
| Cancel      | Q             | V             | X          |
| Menu        | ESC           | ESC           | Menu       |
| Dodge       | Space         | Space         | Y          |
| Selection   | R             | C             | RB         |

### Interaction

- Npc interaction
- Dialogue typing stop (fast forward), next page
- Menu interaction
- Minigame interaction
- Body pickup and laying down

### Weapon

- Usage of selected weapon

### Cancel

- Skips all dialogues
- Exits minigame
- Cancels stone throw

### Menu

- Ingame menu

### Dodge

- Walldodge

### Selection

- Switches Weapon
- Holding down (~600ms) + cursors can move camera (weapon selection remains same)

# Level Design Elements

## Dog (WP-5)

- Dog is roaming along a paths.
- Idle State is a transition state
- The dogs default behaviour should be setable in the editor (sleeping or roaming)
- If the default behaviour is sleeping, the dog will never leave the sleeping state unless the player emits a loud sound (e.g. failing a minigame within range.)
- If the default behaviour is roaming, the dog will walk along the path until a timer counted down and then going for sleep for a specific timer amount before returning to roaming
- When the player emits a loud sound or the dog first sees the player it becomes suspicious
- In suspicious state the dog walks in the direction of the emited noise
- If the player is not in view frustrum of the dog, the dog continues chasing the default state
- If the player is in view frustrum of the dog, the dog goes into detection mode. Emits barking and the sure detection is decreased by one
- Tasered dog will remaing sleep forever
- Found dog body is not suspicious, but can be carried by the player

```mermaid
stateDiagram-v2
    [*] --> Idle

    Idle --> Roaming
    Roaming --> Idle

    Sleeping --> Suspicious
    Roaming --> Suspicious
    Idle --> Suspicious
    Suspicious --> Idle
    Suspicious --> Detection

    Idle --> Sleeping
    Sleeping --> Idle

    Roaming --> Detection
    Idle --> Detection
    Idle --> Eating

    Eating --> [*]
    Detection --> [*]
```

## Guard (WP-6)

As before with the following changes:

- Tasered guard will remain in sleeping state
- If guard detects a tasered body it will go into detection and a sure detection is being triggered
- Body can be picked up by the player to hide it

```mermaid
stateDiagram-v2
    [*] --> Idle

    Idle --> Roaming
    Roaming --> Idle

    Roaming --> Suspicious
    Idle --> Suspicious
    Suspicious --> Idle
    Suspicious --> Detection

    Roaming --> Detection
    Idle --> Detection

    Tasered --> [*]
    Detection --> [*]
```

## Elite Guard (WP-7)

- Cannot be tasered
- Tasers you when in range -> Game Over
- Slower than guards
- Very limited sight
- They basically wont call a detection, but when you are in range its immediately over

```mermaid
stateDiagram-v2
    [*] --> Idle

    Idle --> Roaming
    Roaming --> Idle

    Roaming --> Taser
    Idle --> Taser

    Taser --> [*]
```

## Cameras

- Like before: Static cam or rotating; can be deactivated by wirecut game
- Camera view frustrum is lightly highlighted when close to a camera
- Open for discussion: Player upgrade makes the view frustrum of the camera more visible

## Light

- Alternate light (forms)

## Laser Detectors

- No changes

## Body Hiding

Player can pick up stunned bodys to hide them. Bodies visible, will trigger alert by guards. More: See carry objects

## Carry Objects

Player can carry objects:

- Makes him slower
- Cant hide in the dark (wall dodge)
- Cant crouch
- Cant use elevator platforms
- Cant interact

## Buttons and switches

Buttons can unlock mechanical doors or turn lights on/off.

## Pressure Triggered Buttons

Like normal buttons but it turns off when no pressure is on the button. Could be any carry-able object or even a stunned body.

## Civilians WP-10

Civilians dont have an direct impact on the gameplay. They can either follow a path (if attached) or idle (if no path attached). Civilians have multiple type of skins (e.g. scientist, normal guy, normal girl, betrayer). The skin is selected via an exported enum variable "skin". All civilians are stun-able and can be carried. They dont react to stones or meat. The betrayer can be mission objective. Civilians stop on path points for a few msec before continue the path. Guess this could be sourced out as shared between most npcs.
Civilians shall have a exported bool isHostileArea. If isHostileArea is true and the player walks in the FOV, the civilian get on his knees and hide. He will remain in that state forever. If a guard detects the kneeing civilian, the guard will ring the alarm. If isHostileArea the civilian does not react to the player, FOV can be removed.

## Minigames

### Wirecut

- Timer needs to be shorter
- The color of the words shall not be identical

### Connect 5

- We may need some explainer for this

### Ez Lockpick

- No change

### Keypad

- No change

### Lockpick (Safe)

- No change

### Cryptogram

Encrypt encoded messages. Some missions may require the player to encrypt messages like this:

```
___e_ __e _e_ ____
Ofaja qoj ojx nkqk (some symbols)

Roses are red blah
```

The player sees blank input fields, and some hinted letter. Instead of the text he sees only symbols representing the word.
A wheel with the remaing letters is used to set single letters to a space. Similiar to the android game cryptogram.

# Steam Integration

We will use Gramps GodotSteam Integration. It's easy to use and maintained.

## Achievements

Achievements are pretty easy to implement.

It should be done by emit a signal:

`Events.emit_signal("steam_achievement_unlock", Types.SteamAchievements.TestId)`

The GameManager shall handle this signal. AFAIK: The function requires to check if the player already has this achievement or not. So there is maybe a list to be downloaded at start.

TODO: come up with new achievement ideas (~20)

| Name             | Desc                  |
| ---------------- | --------------------- |
| TutorialComplete | Complete the tutorial |

## Stats

We should utilize some stats like how many tries did the player needed and the time he spend in the level.

## Leaderboard

Im not sure rn if we shall integrate this. As the game ment to be played slow.

# Required Art

## Screen Art

| Name       | Desc                                                                 |
| ---------- | -------------------------------------------------------------------- |
| RaceScreen | A screen for the screen race                                         |
| UsaWin     | Maybe actual moon landing screen                                     |
| USSRWin    | Maybe a soyuz rocket flying to the moon                              |
| UstriaWin  | Some flappy variant of the US moon landing with duct tape and stuff  |
| LoveWin    | Some Caribean beach where a couple (silhouette) walks in the sundown |

## Pixel Art

| Name       | Desc                          |
| ---------- | ----------------------------- |
| Player     | Body carry, object carry anim |
| ArchiveNPC |                               |
| Dog        |                               |

## Sound

## Music

# Ideas Collection

Post every thought you have in here

repository: Godot-clif-Project/NbMoonshot

repo_name: Godot-clif-Project/NbMoonshot


text:
This is a frontend project code challenge that I did for springboard on HackerEarth.
I finished about ~90% of the required features.

This project helped me learn ReactJS.

This app has been written using NodeJS v4.5.0 x64 on Windows 10. Express plugin for NodeJS has been used for convenience.

* Additional client-side frameworks:
** ReactJS v15.3.1
** Babel v5.8.38
** Font Awesome v4.6.3

Since this has not been hosted on a cloud portal, I have include the assets in this project itself.

To run this project, the command is:
node app.js

Before that, install express as follows:
npm install express

or use `npm install` to install all required packages for this project.

The features completed here are:
1.) Basic responsive css
2.) List of items from the API
3.) Sort functionality with vote up/down, learners, duration
4.) Upvote/downvote, total upvotes - using local storage
5.) View curriculum opens the provided url in that item in a new tab

As the API provided in the question details seems to rate-limited and already near the threshold, I have hardcoded the json from a specific request and am serving it in the backend that I wrote. However, the code to get data directly from the mentioned endpoint is also present and if needed, it can be uncommented.

Pending:
1.) Search with tags, autocomplete
2.) Bottom course selection bar.

Will complete them and re-upload if finished within given time.

NOTE: Seach tags functionality is partially complete.

branch_name: refs/heads/master

extension: md

license_type: permissive


text:
# RevFibMIPS
Reverse Fibonacci Number Generator implemented in Assembly Language on the MIPS32 Instructions Set.

The code calculates and displays as many as N Fibonacci numbers backward from a given Fibonacci number X.

# How to Run the Code ?
The code has been written to be compatible with PCSpim, a MIPS32 Simulator.

license: MIT

repository: gswebspace/RevFibMIPS

gha_language: Assembly

gha_license_id: MIT

repo_name: gswebspace/RevFibMIPS


text:
---
title: Page Outs
brief: Page Outs for Memory
metric_type: Cumulative Counter
---
### Page Outs

The number of pages written into the backing store from memory.

gha_language: Python


text:
---
id: fast-element.directive
title: Directive class
hide_title: true
---

[@microsoft/fast-element](./fast-element.md) > [Directive](./fast-element.directive.md)

## Directive class

Signature:

```typescript
export declare abstract class Directive implements BehaviorFactory
```

## Properties

|  Property | Modifiers | Type | Description |
|  --- | --- | --- | --- |
|  [targetIndex](./fast-element.directive.targetindex.md) |  | number |  |

## Methods

|  Method | Modifiers | Description |
|  --- | --- | --- |
|  [createBehavior(target)](./fast-element.directive.createbehavior.md) |  |  |
|  [createPlaceholder(index)](./fast-element.directive.createplaceholder.md) |  |  |

repository: edbzn/fast-dna

repo_name: edbzn/fast-dna


text:
openvz-setup
=========

CentOS 6 and Debian 7 OpenVZ setup script

### Introduction

This is a setup script which automatically installs and configures OpenVZ on a server running either CentOS 6 or Debian 7. No manual intervention is required. If you prefer using a panel, please have a look at [my other project](https://github.com/dhamaniasad/vzvirtpanel). Please note that it is strongly advised that you use a fresh installation of CentOS/Debian while using this script to prevent running into issues.

### Installation

#### CentOS 6

    wget --no-check-certificate https://github.com/dhamaniasad/openvz-setup/raw/master/setup.sh -O - | sh

#### Debian 7

    wget --no-check-certificate https://github.com/dhamaniasad/openvz-setup/raw/master/setup-deb.sh -O - | sh

##### Please note that CentOS 6 and Debian 7(i.e., the latest versions) are recommended for a VPS node, and this script isn't backwards compatible with older versions.

repository: dhamaniasad/openvz-setup

repo_name: dhamaniasad/openvz-setup


text:
# Meteor Socialize Demo #
![demo](https://storage.googleapis.com/openscreenshot/G/D/F/HJwQ_6FDG.png)

The start of a quick demo of the socialize packages for meteor. At the moment it is pretty basic, but has a login/register page, user feed, messaging, profiles, friend requests, friends list, and avatar upload. There is quite a bit more to be added and a ton of polish to apply still. This is very much a work in progress and you are welcome to help it along with issues and pull requests.

## Setup ##

Currently this app has `cultofcoders:redis-oplog` and `disable-oplog` installed, but it is completely optional and the app will run without them. If you do not wish to go through the setup, you can just remove them and ignore the configuration steps for redis-oplog.

Also this app uses [Cloudinary](https://cloudinary.com) for uploading and displaying user avatars. You will need a free cloudinary account to use this app. Once you have an account you can enter your credentials into `settings.json` and you'll be all set.

**Step 1**
```sh
$ git clone https://github.com/copleykj/meteor-socialize-demo.git
$ meteor npm install
```

**Step 2**
Setup a redis server for the app to connect to. This can be a tiny instance as redis-oplog requires very little resources. For a quick and easy way to get up and running, I totally recommend a free instance on redis labs.

**Step 3**
Create and edit a `settings.json` with the following settings for redis-oplog and Cloudinary, replacing necessary details with your own.

```json
{
  "redisOplog": {
    "redis": {
      "port": 1337,
      "host": "you.host.here"
    },
    "retryIntervalMs": 10000,
    "mutationDefaults": {
        "optimistic": true,
        "pushToRedis": true
    },
    "overridePublishFunction": true
  },
  "cloudinary": {
      "api_secret": "DD_DeMOI7O5rYSGqBTWINSeCRet"
  },
  "public": {
      "cloudinary": {
          "cloud_name": "cloud773name",
          "api_key": "830573649475848"
      }
  }
}
```

## Running ##

```shell
$ meteor npm start
```

## Contributing ##

This repo contains ESLint and Editor configurations. Please use them when contributing so I don't have to fight your code :-P

repository: StorytellerCZ/meteor-socialize-demo

repo_name: StorytellerCZ/meteor-socialize-demo


text:
react-alt-react-router-example
=====================

A working react-router example implements [React Router Guide](https://github.com/rackt/react-router/blob/0.13.x/docs/guides/overview.md) in ES6

### Usage

```
npm install
npm startd
open http://localhost:3000
```

Now edit `src/index.js`.
Your changes will appear without reloading the browser like in [this video](http://vimeo.com/100010922).

### Linting

This boilerplate project includes React-friendly ESLint configuration.

```
npm run lint
```

repository: chunghe/react-alt-react-router-example

repo_name: chunghe/react-alt-react-router-example


text:
LTI 1.3
========

IMS LTI 1.3 based starter (sample) application written using Java and Spring Boot

The goal is to have a Java based web app which can serve as the basis (or starting point) for building a fully compliant LTI 1.3 tool.

Build
-----
This will produce a lti13demo.jar file in the *target* directory

    mvn install

note, to avoid some test errors if those happen, try

    mvn install -DskipTests=true

Quick Run
---------
You can run the app in place to try it out without having to install and deploy a servlet container.

    mvn clean install -DskipTests=true spring-boot:run

Then go to the following default URL:

    https://localhost:9090/

You can access the H2 console for default in-memory DB (JDBC URL: **jdbc:h2:mem:AZ**, username: **sa**, password: *(blank)*) at:

    https://localhost:9090/console

Customizing
-----------
Use the application.properties to control various aspects of the Spring Boot application (like setup your own database connection).
Use the logback.xml to adjust and control logging.

Debugging
---------
To enable the debugging port (localhost:5050) when using spring-boot:run, use the maven profile: **-Pdebug**. Then you can attach any remote debugger (eclipse, intellij, etc.) to localhost:8000. NOTE that the application will pause until you connect the debugger to it.

    mvn clean install spring-boot:run -Pdebug


text:
# InterChip Bridge

This repository hosts the developed code that implements the proposed InterChip Communication Bridge presented in:

_E.Kyriakakis, K. Ngo and J.Öberg, "Implementation of a Fault-Tolerant, Globally-Asynchronous-Locally-Synchronous, Inter-Chip NoC Communication Bridge on FPGAs", In proceeedings of NORCAS-2017, Linköping, Sweden._

## Structure

* bridge_src: is the main VHDL codebase for the developed interchip bridge component
* other_src: is a VHDL codebase for any other developed components used in the demo projects


text:
# Expression Evaluation Arguments

Back to: [Table of Contents](index.md)

## Evaluation Arguments

Since evaluating a boolean expresion is syntactically fashioned after a normal function call, it should be expected that passing arguments also come in a similar manner.

```Lua
do
    local expression = BoolExpr.Any(
        function (...)
            ...
        end
    )

    expression(1, 2, 3) -- Simply pass arguments the same way as when you are calling a function
end
```

## Expression Parameters

Leaf expressions, which are usually normal functions, receive arguments provided both internally by the system and also by the evaluator. The first two arguments received by the function are provided by system. The first argument is the function itself and the second is a boolean flag that determines whether the evaluation is done in reversed order. The third and onwards are from the evaluator.

```Lua
do
    local function is_even(self, reversed, n)
        return n % 2 == 0
    end
    local function lt_limit(_, _, n)
        return n < math.sqrt(10000)
    end

    do
        local even_n_within_limit = BoolExpr.And(is_even, lt_100)

        for i = 1, 200 do
            if event_n_within_limit(i) then
                print(tostring(i) .. " is an even number within the limit")
            end
        end
    end
end
```

Previous: [Evaluating Boolean Expressions](3_evaluating-expressions)

Next: [Compiling Boolean Expressions](5_compiling-expressions)

[Back to top](#expression-evaluation-arguments)

repository: A-G-D/lua-boolexpr

branch_name: refs/heads/main

repo_name: A-G-D/lua-boolexpr


text:
EXPERIMENTAL: Enables or updates dynamic kubelet configuration for a Node

### Synopsis

Enables or updates dynamic kubelet configuration for a Node, against the kubelet-config-1.X ConfigMap in the cluster, where X is the minor version of the desired kubelet version.

WARNING: This feature is still experimental, and disabled by default. Enable only if you know what you are doing, as it may have surprising side-effects at this stage.

Alpha Disclaimer: this command is currently alpha.

```
kubeadm alpha kubelet config enable-dynamic [flags]
```

### Examples

```
  # Enables dynamic kubelet configuration for a Node.
  kubeadm alpha phase kubelet enable-dynamic-config --node-name node-1 --kubelet-version v1.12.0

  WARNING: This feature is still experimental, and disabled by default. Enable only if you know what you are doing, as it
  may have surprising side-effects at this stage.
```

### Options

```
  -h, --help                     help for enable-dynamic
      --kubeconfig string        The kubeconfig file to use when talking to the cluster. If the flag is not set, a set of standard locations are searched for an existing KubeConfig file. (default "/etc/kubernetes/admin.conf")
      --kubelet-version string   The desired version for the kubelet
      --node-name string         Name of the node that should enable the dynamic kubelet configuration
```

### Options inherited from parent commands

```
      --rootfs string   [EXPERIMENTAL] The path to the 'real' host root filesystem.
```

repository: zchee/kubernetes-docs

repo_name: zchee/kubernetes-docs


text:
# Full Stack Application Using Kubernetes

Full Stack Application using Spring boot, React, Redux, Material-ui, PostgreSQL and Docker using Kubernetes

## Getting Started
There are two parts to this repository which are as follows :
* Kubernetes deployment of full stack application using kubernetes minikube.
  * For this navigate to folder `Kubernetes-minikube` and follow the steps provided in it.
* Kubernetes deployment of full stack application using kubernetes EKS.
  * Work in Progress

## DockerHub repositories
The dockerhub repositories used in this project for backend and frontend docker images are as follows :
* `Backend Docker Image repository : https://hub.docker.com/repository/docker/ankitrajput/springboot_app_with_db `
* `Frontend Docker Image repository : https://hub.docker.com/r/ankitrajput/frontend-app-react `

## Built With

* [Spring Boot](https://spring.io/projects/spring-boot) - Spring Boot 2
* [Maven](https://maven.apache.org/) - Dependency Management
* [Docker](https://www.docker.com/) - For containerization of application
* [PostgreSQL](https://www.postgresql.org/) - Database
* [React](https://reactjs.org/) - React
* [Redux](https://redux.js.org/) - Redux
* [Material-Ui](https://material-ui.com/) - Material-Ui
* [Kubernetes](https://kubernetes.io/) - Kubernetes

## Contributing

If you have any improvement suggestions please create a pull request and I'll review it.

## Authors

* **Ankit Rajput** - *Initial work* - [Github](https://github.com/ankitrajput0096)

## License

This project is licensed under the MIT License


text:
## CDSW Engine for Intel Analytics Zoo
More information at [Intel Analytics-Zoo github](https://github.com/intel-analytics/analytics-zoo) \
Unofficial image for the DellEMC Ready Solution for AI, Machine Learning with Hadoop

## What is Analytics Zoo?
Analytics Zoo makes it easy to build deep learning application on Spark and BigDL, by providing an end-to-end *Analytics + AI Platform* (including high level pipeline APIs, built-in deep learning models, reference use cases, etc.).


text:
# Vault Backend

The vault backend enables `confd` to pull configuration parameters from Hashicorp Vault

## Configuration

### Authentication

### Environment Variables

Environment variables can be used to provide the required configurations to
`confd`. They will override configurations set in the config and credentials
files.

```
export AWS_ACCESS_KEY_ID=<REDACTED_AWS_ACCESS_KEY>
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_DEFAULT_REGION=us-east-2
```

### Config and Credentials Files

AWS credentials and configuration can be stored in the standard AWS CLI config
files. These may be set up manually or via `aws configure`

\~/.aws/credentials

```
[default]
aws_access_key_id=<REDACTED_AWS_ACCESS_KEY>
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
```

\~/.aws/config

```
[default]
region=us-east-2
```

### IAM Role for EC2

An IAM role can be used to grant `confd` permissions to SSM. When used you will
not need to set `AWS_ACCESS_KEY_ID` or `AWS_SECRET_ACCESS_KEY`. When `confd` is
executed on an EC2 instance it will acquire the AWS Region setting from EC2
Metadata.

Setup of IAM roles for EC2 instances is well documented in the AWS User Guides.

## Options

## Basic Example

## Advanced Example

repository: abtreece/confd

gha_language: Go

repo_name: abtreece/confd


text:
# dynamic-dns-updater

Updates a Route53 record based on the current (external) IP address (if it needs updating).

## Notes

* Expects AWS credentials in the profile `rik-systems-dynamic-dns-updater` (should be created by [rikbrown.co.uk](https://github.com/rikbrown/rikbrown.co.uk)
  Cloudformation and put into `.aws/credentials`).
* Currently hardcoded to support `seattle.rik.systems` record in hosted zone `Z39HKRRJQ8AJ0`.

repository: rikbrown/dynamic-dns-updater

repo_name: rikbrown/dynamic-dns-updater


text:
## 1 - Mapping objects

We often get into the situation, where you need to do simple mapping of objects with the same, or similar shape, maybe dropping a few fields. Most developers find copying values of fields a tedious waste of time, and some of them come up with creative, yet suboptimal solutions.

One of my "favorite" solutions, which for some reason keeps popping up quite often is using a JSON serializer to serialize the source object, then deserialize it to the target. Using [Json.NET](https://www.newtonsoft.com/json) in the example he code is short and elegant, right:

```csharp
JsonConvert.DeserializeObject<Target>(JsonConvert.SerializeObject(source))
```

I chose a fairly small and simple model as benchmarking example, `Employee`, which can have a collection of nested `Employee`s as subordinates (in the benchmark, I used a simple level of nesting):

```csharp
public class Employee
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public DateTime DateOfBirth { get; set; }
    public decimal Salary { get; set; }
    public int YearsOfService { get; set; }
    public List<Employee> Subordinates { get; set; }
}
```

So, let's see how the serialization-magic performs, and let's compare it with maybe the two most obvious solutions: manually copying the values, and using [AutoMapper](https://github.com/AutoMapper/AutoMapper).

|     Method |        Mean |     Error |    StdDev | Ratio | RatioSD |  Gen 0 | Gen 1 | Gen 2 | Allocated |
|----------- |------------:|----------:|----------:|------:|--------:|-------:|------:|------:|----------:|
|    Mapping |    108.1 ns |   2.19 ns |   2.25 ns |  1.00 |    0.00 | 0.0764 |     - |     - |     360 B |
| Automapper |    474.9 ns |   9.22 ns |   8.63 ns |  4.39 |    0.07 | 0.1187 |     - |     - |     560 B |
|       Json | 10,483.8 ns | 201.29 ns | 223.73 ns | 97.18 |    3.22 | 1.4038 |     - |     - |    6656 B |

``` ini
BenchmarkDotNet=v0.12.0, OS=macOS 10.15.1 (19B88) [Darwin 19.0.0]
Intel Core i7-8850H CPU 2.60GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores
.NET Core SDK=3.0.100
  [Host]     : .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), X64 RyuJIT
  DefaultJob : .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), X64 RyuJIT
```

repository: szaboopeeter/netcore-microbenches

gha_language: C#

repo_name: szaboopeeter/netcore-microbenches


text:
# LESSON_03: handlers, loops and templates

Here we're going to make the playbook both more powerful and elegant by
adding a variable loop, and a handler for the repo checkout.

```
$EDITOR playbook.yml
```

Some explanations:  this part now uses a loop over the built-in variable {{ items }}`
to install packages from a list:

```
tasks:
  - name: Install required packages
    yum:
      name: "{{ item }}"
      state: present
    with_items:
      - docker
      - git
      - python-docker-py
```

This part uses a jinja template stored at dockerfile.j2, and combines it with our
variables to produce the file /root/Dockerfile on the remote server:

```
- name: write dockerfile
  template:
    src: dockerfile.j2
    dest: /root/Dockerfile
```

Take a look at `dockerfile.j2`.  You'll see that it's a standard jinja template.

Now, we also have a handler which is called by both the dockerfile template and
the git checkout:

```
notify:
  - build docker image
handlers:
- name: build docker image
docker_image:
  path: /root/
  dockerfile: /root/Dockerfile
  name: "{{ image_name }}"
  tag: "{{ image_tag }}"
  force: true
```

What this does is that, if either Dockerfile or the git checkout are updated,
it triggers a rebuild of the docker image.  However, there's a problem with that:

```
RUNNING HANDLER [build docker image] *******************************************
fatal: [<IP_ADDRESS>]: FAILED! => {"changed": false, "failed": true,
"msg": "Error: configuration for docker.io not found. Try logging into docker.io first."}

```

Proceed to Lesson 04 to see how we resolve that.

gha_language: HTML


text:
# HTTP Inbound Protocol

The HTTP inbound protocol is used to separate endpoint listeners for
each HTTP inbound endpoint so that messages are handle separately. The
HTTP inbound endpoint can bypass the inbound side axis2 layer and
directly inject messages to a given sequence or API. For proxy services,
messages will be routed through the axis2 transport layer in a manner
similar to normal transports. You can start dynamic HTTP inbound
endpoints without restarting the server.

Following is a sample HTTP inbound endpoint configuration:

``` html/xml
    <inboundEndpoint name="HttpListenerEP" protocol="http" suspend="false" sequence="TestIn" onError="fault" >
        <p:parameters xmlns:p="http://ws.apache.org/ns/synapse">
            <p:parameter  name="inbound.http.port">8081</p:parameter>
        </p:parameters>
    </inboundEndpoint>
```

### HTTP inbound endpoint parameters

| Parameter                                    | Description                                                | Required |
|----------------------------------------------|------------------------------------------------------------|----------|
| `             inbound.http.port            ` | The port on which the endpoint listener should be started. | Yes      |

!!! info

Note

-   A sequence should be designed with a call/respond or send/receive
    sequence. It is not recommended to use a sequence that has in and
    out mediators.
-   If a send mediator is used within the inbound endpoint sequence,
    specify a receiving sequence. If you do not specify a receiving
    sequence, the response will dispatch to the
    `           main          ` sequence.

#### Worker pool configuration parameters

By default inbound endpoints share the PassThrough transport worker pool
to handle incoming requests. If you need a separate worker pool for the
inbound endpoint, you need to configure the following parameters:

| Parameter                                                         | Description                                                                                | Default Value                           |
|-------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------|
| `              inbound.worker.pool.size.core             `        | The initial number of threads in the worker thread pool. This value can be changed accordingly based on the number of messages to be processed. The maximum value that can be specified here is the value of the `             i             nbound.worker.pool.size.max            ` parameter.                                                                                | 400                                     |
| `              inbound.worker.pool.size.max             `         | The maximum number of threads in the worker thread pool. Specify a maximum limit in order to avoid performance degradation that can occur due to context switching.                                                                                | 500                                     |
| `              inbound.worker.thread.keep.alive.sec             ` | The keep-alive time for extra threads in the worker pool. This value should be less than the socket timeout. When this time is elapsed for an extra thread, it will be destroyed. The purpose of this parameter is to optimize the usage of resources by avoiding wastage that results from having extra threads that are not utilized.                                                                                | `             60            `           |
| `              inbound.worker.pool.queue.length             `     | The length of the queue that is used to hold runnable tasks to be executed by the worker pool. The thread pool starts queuing jobs when all existing threads are busy and the pool has reached the maximum number of threads. The value for this parameter should be -1 to use an unbounded queue. If a bound queue is used and the queue gets filled to its capacity, and any further attempt to submit jobs will fail causing synapse to drop some messages.            | -1                                      |
| `              inbound.thread.group.id             `              | Unique Identifier of the thread group.                                                                                | PassThrough inbound worker thread group |
| `              inbound.thread.id             `                    | Unique Identifier of the thread.                                                                                | PassThroughInboundWorkerThread          |
| `             dispatch.filter.pattern            `                | The regular expression that defines the proxy services and API's to expose via the inbound endpoint. Provide the `             .*            ` expression to expose all proxy services and API's or provide an expression similar to `             ^(/foo|/bar|/services/MyProxy)$            ` to define a set of services to expose via the inbound endpoint. If you do not provide an expression only the defined sequence of the inbound endpoint will be accessible. | blank                                   |

Following is a sample configuration for an inbound endpoint with
a separate worker pool:

``` html/xml
    <inboundEndpoint name="HttpListenerEP" protocol="http" suspend="false" sequence="TestIn" onError="fault" >
        <p:parameters xmlns:p="http://ws.apache.org/ns/synapse">
            <p:parameter  name="inbound.http.port">8081</p:parameter>
            <p:parameter  name="api.dispatching.enabled">false</p:parameter>
            <p:parameter name="inbound.thread.group.id">Pass_Through Inbound worker Pool</p:parameter>
            <p:parameter name="inbound.worker.pool.size.max">500</p:parameter>
            <p:parameter name="inbound.thread.id">PassThroughInboundWorkerPool</p:parameter>
            <p:parameter name="inbound.worker.pool.queue.length">-1</p:parameter>
            <p:parameter name="inbound.worker.pool.size.core">400</p:parameter>
            <p:parameter name="inbound.worker.thread.keep.alive.sec">60</p:parameter>
        </p:parameters>
     </inboundEndpoint>
```

#### Inbound endpoint parameter for proxy services

If a proxy service is to be exposed only via inbound endpoints, the
following service parameter has to be set in the proxy configuration.

<colgroup>
<col style="width: 33%" />
<col style="width: 33%" />
<col style="width: 33%" />
</colgroup>

Service Parameter
Description
Default Value

             inbound.only

Whether the proxy service needs to be exposed only via inbound endpoints.

If set to               true              all requests that the proxy service receives via normal transport will be rejected. The proxy service will process only the requests that are received via inbound endpoints.

false

Following is a sample proxy configuration:

``` java
    <proxy xmlns="http://ws.apache.org/ns/synapse" name="InboundProxy" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
        <target>
            <outSequence>
                <send/>
            </outSequence>
            <endpoint>
                <address uri="http://localhost:9773/services/HelloService/"/>
            </endpoint>
        </target>
        <parameter name="inbound.only">true</parameter>
    </proxy>
```

### Samples

For a sample that demonstrates how a HTTP inbound endpoint can act as a
dynamic http listener, see [Sample 902: HTTP Inbound Endpoint
Sample](https://docs.wso2.com/display/EI611/Sample+902%3A+HTTP+Inbound+Endpoint+Sample)
.


text:
# How Classes are Found

URL: https://docs.oracle.com/javase/8/docs/technotes/tools/unix/findingclasses.html

The **java command** is called the **Java launcher** because it launches Java applications. When the Java launcher is called, it gathers input from the user and the user's environment (such as the class path and the boot class path), interfaces with the Virtual Machine (VM), and gets it started via some bootstrapping. The Java Virtual Machine (JVM) does the rest of the work.

## 1. How the Java Runtime Finds Classes

The JVM searches for and loads classes in this order:

- (1) **Bootstrap classes**, which are classes that comprise the Java platform, including the classes in `rt.jar` and several other important JAR files.
- (2) **Extension classes**, which use the Java Extension mechanism. These classes are bundled as JAR files and located in the extensions directory.
- (3) **User classes** are classes that are defined by developers and third parties and that do not take advantage of the extension mechanism. You identify the location of these classes with the `-classpath` option on the command line (**preferred**) or with the `CLASSPATH` environment variable.

In effect, the **three search paths** together form **a simple class path**. This is similar to the flat class path previously used, but the current model has the following improvements:

- (1) It is relatively **difficult** to accidentally hide or omit **the bootstrap classes**.
- (2) In general, you **only** have to specify **the location of user classes**. **Bootstrap classes** and **extension classes** are found **automatically**.
- (3) The tools classes are now in a separate archive (`tools.jar`) and can only be used if included in the user class path.

## 2. How the Java Runtime Finds Bootstrap Classes

**Bootstrap classes** are the classes that implement Java SE. Bootstrap classes are in the `rt.jar` file and several other JAR files in the `jre/lib` directory. These archives are specified by the value of **the bootstrap class path** that is stored in the `sun.boot.class.path` system property. This system property is for reference only and should not be directly modified. It is unlikely that you will need to redefine the bootstrap class path. The nonstandard option, `-Xbootclasspath`, allows you to do so in those rare circumstances in which it is necessary to use a different set of core classes.

```java
package lsieun.jvm.classloader.clazzpath;

public class PrintBootClassPath {
    public static void main(String[] args) {
        String property = System.getProperty("sun.boot.class.path");
        String[] array = property.split(":");
        for (String item : array) {
            System.out.println(item);
        }

    }
}
```

Output:

```txt
/usr/local/jdk1.8.0_181/jre/lib/resources.jar
/usr/local/jdk1.8.0_181/jre/lib/rt.jar
/usr/local/jdk1.8.0_181/jre/lib/sunrsasign.jar
/usr/local/jdk1.8.0_181/jre/lib/jsse.jar
/usr/local/jdk1.8.0_181/jre/lib/jce.jar
/usr/local/jdk1.8.0_181/jre/lib/charsets.jar
/usr/local/jdk1.8.0_181/jre/lib/jfr.jar
/usr/local/jdk1.8.0_181/jre/classes
```

Note that the classes that implement **the JDK tools** are in a separate archive from **the bootstrap classes**. **The tools archive** is the `JDK/lib/tools.jar` file. **The development tools** add **this archive** to** the user class path** when invoking the launcher(这里的launcher是指command line命令行). However, this augmented user class path is only used to execute the tool. The tools that process source code, the `javac` command, and the `javadoc` command, use **the original class path**, not the augmented version.

## 3. How the Java Runtime Finds Extension Classes

**Extension classes** are classes that extend the Java platform. Every `.jar` file in **the extension directory**, `jre/lib/ext`, is assumed to be an extension and is loaded with the Java Extension Framework. **Loose class files** in **the extension directory** are **not found**. They must be contained in a JAR file or Zip file. There is no option provided for changing the location of the extension directory.

```java
package lsieun.jvm.classloader.clazzpath;

public class PrintExtClassPath {
    public static void main(String[] args) {
        String property = System.getProperty("java.ext.dirs");
        String[] array = property.split(":");
        for (String item : array) {
            System.out.println(item);
        }
    }
}
```

Output:

```txt
/usr/local/jdk1.8.0_181/jre/lib/ext
/usr/java/packages/lib/ext
```

If the `jre/lib/ext` directory contains multiple JAR files, and those files contain classes with the same name, **the class that actually gets loaded** is **undefined**.

## 4. How the Java Runtime Finds User Classes

To find user classes, the launcher refers to **the user class path**, which is a list of directories, JAR files, and Zip files that contain class files.

**A class file** has **a subpath name** that reflects **the fully-qualified name of the class**. For example, if the class `com.mypackage.MyClass` is stored under `myclasses`, then `myclasses` must be in **the user class path**, and **the full path to the class file** must be `/myclasses/com/mypackage/MyClass.class` on Oracle Solaris or in `\myclasses\com\mypackage\MyClass.class` on Windows.

If the class is stored in **an archive** named `myclasses.jar`, then `myclasses.jar` must be in **the user class path**, and **the class file** must be stored in the archive as `com/mypackage/MyClass.class` on Windows or in `com\mypackage\MyClass.class` on Oracle Solaris.

**The user class path** is specified as a string, with **a colon** (`:`) to separate the class path entries on Oracle Solaris, and a **semicolon** (`;`) to separate the entries on Windows systems. The Java launcher puts the user class path string in the `java.class.path` system property. The possible sources of this value are:

- (1) **The default value**, `*.*`, which means that user class files are all the class files **in** or **under** **the current directory**.
- (2) The value of the `CLASSPATH` environment variable that overrides **the default value**.
- (3) The value of the `-cp` or `-classpath` **command-line option** that overrides both **the default value** and the `CLASSPATH` value.
- (4) **The JAR archive** specified by the `-jar` option overrides **all other values** if it contains a `Class-Path` entry in its **manifest**. If this option is used, all user classes must come from the specified archive.

```java
package lsieun.jvm.classloader.clazzpath;

public class PrintUserClassPath {
    public static void main(String[] args) {
        String property = System.getProperty("java.class.path");
        String[] array = property.split(":");
        for (String item : array) {
            System.out.println(item);
        }

    }
}
```

Output:

```txt
/home/liusen/workdir/git-repo/learn-java/advanced/jvm/code/learn-jvm/target/classes
```


text:
# Docs Generator

The `generate_docs` tool helps automate building the provider website using
[Go templates](https://golang.org/pkg/text/template/).

See the [templates](./templates) folder which contains templates for common
elements as well as all resources.

To run the generator (from the root directory):

```bash
go build ./tools/generate_docs
./generate_docs --output_dir="./docs" --template_dir=tools/generate_docs/templates
```

repository: jaketf/terraform-provider-cdap

repo_name: jaketf/terraform-provider-cdap


text:
# fancyindex-royal-theme
A responsive autoindex theme for nginx.

## Setup
1. Ensure that you have [fancyindex](https://github.com/aperezdc/ngx-fancyindex) already installed.
2. Put `.nginx` folder in the root of your domain (e.g. https://www.example.com/.nginx/).
3. Include `fancyindex.conf` in the nginx configuration.
4. Enjoy 🎉!

## Desktop view

## Mobile view

## Sponsorship
If you appreciate my work, it will be cool to know that I drink my **[coffee ☕](https://www.buymeacoffee.com/leshniak)** thanks to you!

repository: leshniak/fancyindex-royal-theme

repo_name: leshniak/fancyindex-royal-theme


text:
---
layout: component-detail
title: Custom Multiselect
group: sageworks
subgroup: form-controls
permalink: /sageworks/form-controls/sw-custom-multiselect.html
description: Text field description

variations:
- title: Custom Multiselect
  description: Test AngularJs/Material component
  includeClassification: molecules
  includeCategory: form-controls
  includeName: sw-custom-multiselect
usage:
- title: When to use
  description: Usage description.
- title: When to consider an alternative
  description: Alternative usage.

classes:
- className: c-hero
  required : yes
  description: Apply to the hero block's containing HTML element. This class sets up the background-image handling and text color for the unit. The `c-hero` element should have just one immediate child, the `c-hero__body` element. Note, too, that the unit's hero image should be applied as a background image to this `c-hero` element.

fine-print:
- version: 0.3
  update: April 05, 2019
  owner: Bradley Sosnowski
---

repository: solumspace/sass-grunt-style-guide

repo_name: solumspace/sass-grunt-style-guide


text:
# Crazy Eights

An implementation of the Crazy Eights card game in C++11.

Rules are mostly outlined on [this](https://en.wikipedia.org/wiki/Crazy_Eights) page.

repository: evrenkaya/CrazyEights

repo_name: evrenkaya/CrazyEights


text:
<title>Extensions : Identifier Naming Factories</title>

# Section : [Documentation](../index.html) > [Extensions](index.html)

## Extensions : Identifier Naming Factories
![Plugin](../../images/nucleus_plugin.gif)

DataNucleus is developed as a plugin-driven framework and one of the components that is pluggable is the naming of datastore identifiers.
DataNucleus provides its own internal identifier factories, but also allows you to plugin your own factory. Identifiers are required to define
the name of components in the datastore, such as table/columns/indexes.

DataNucleus provides the mechanism to generate datastore identifiers (table/column names) when none
are defined by the users metadata/annotations. In addition to the default JDO factory there is also
an identifier factory that generates identifiers consistent with the JPA specification.
__Note that currently RDBMS doesn't use this extension and instead uses the [RDBMS Identifier Factory](rdbms_identifier_factory.html) extension__.
You can extend DataNucleus's capabilities using the plugin extension *org.datanucleus.identifier_namingfactory*.

        Plugin extension-point
        Key
        Description
        Location

        org.datanucleus.identifier_namingfactory
        datanucleus2
        Identifier Factory providing DataNucleus 2+ namings
        datanucleus-core

        org.datanucleus.identifier_namingfactory
        jpa
        Identifier Factory providing JPA-compliant namings
        datanucleus-core

### Interface

Any identifier factory plugin will need to implement _org.datanucleus.store.schema.naming.NamingFactory_
[![Javadoc](../../images/javadoc.gif)](http://www.datanucleus.org/javadocs/core/latest/org/datanucleus/store/schema/naming/NamingFactory.html).
So you need to implement the following interface

	package org.datanucleus.store;

	public interface IdentifierFactory
	{
        /**
         * Method to set the provided list of keywords as names that identifiers have to surround by quotes to use.
         * @param keywords The keywords
         * @return This naming factory
         */
        NamingFactory setReservedKeywords(Set<String> keywords);

    /**
     * Method to set the maximum length of the name of the specified schema component.
     * @param cmpt The component
     * @param max The maximum it accepts
     * @return This naming factory
     */
    NamingFactory setMaximumLength(SchemaComponent cmpt, int max);

    /**
     * Method to set the quote string to use (when the identifiers need to be quoted).
     * See
setIdentifierCase
.
     * @param quote The quote string
     * @return This naming factory
     */
    NamingFactory setQuoteString(String quote);

    /**
     * Method to set the word separator of the names.
     * @param sep Separator
     * @return This naming factory
     */
    NamingFactory setWordSeparator(String sep);

    /**
     * Method to set the required case of the names.
     * @param nameCase Required case
     * @return This naming factory
     */
    NamingFactory setNamingCase(NamingCase nameCase);

    /**
     * Method to return the name of the table for the specified class.
     * @param cmd Metadata for the class
     * @return Name of the table
     */
    String getTableName(AbstractClassMetaData cmd);

    /**
     * Method to return the name of the (join) table for the specified field.
     * @param mmd Metadata for the field/property needing a join table
     * @return Name of the table
     */
    String getTableName(AbstractMemberMetaData mmd);

    /**
     * Method to return the name of the column for the specified class (version, datastore-id, discriminator etc).
     * @param cmd Metadata for the class
     * @param type Column type
     * @return Name of the column
     */
    String getColumnName(AbstractClassMetaData cmd, ColumnType type);

    /**
     * Method to return the name of the column for the specified field.
     * If you have multiple columns for a field then call the other
getColumnName
 method.
     * @param mmd Metadata for the field
     * @param type Type of column
     * @return The column name
     */
    String getColumnName(AbstractMemberMetaData mmd, ColumnType type);

    /**
     * Method to return the name of the column for the position of the specified field.
     * Normally the position will be 0 since most fields map to a single column, but where you have a FK
     * to an object with composite id, or where the Java type maps to multiple columns then the position is used.
     * @param mmd Metadata for the field
     * @param type Type of column
     * @param position Position of the column
     * @return The column name
     */
    String getColumnName(AbstractMemberMetaData mmd, ColumnType type, int position);

    /**
     * Method to return the name of the column for the position of the specified EMBEDDED field, within the specified owner field.
     * For example, say we have a class Type1 with field "field1" that is marked as embedded, and this is of type Type2.
     * In turn Type2 has a field "field2" that is also embedded, of type Type3. Type3 has a field "name". So to get the column name for
     * Type3.name in the table for Type1 we call "getColumnName({mmdForField1InType1, mmdForField2InType2, mmdForNameInType3}, 0)".
     * @param mmds MetaData for the field(s) with the column. The first value is the original field that is embedded, followed by fields of the embedded object(s).
     * @param position The position of the column (where this field has multiple columns)
     * @return The column name
     */
    String getColumnName(List<AbstractMemberMetaData> mmds, int position);

    /**
     * Method to return the name of an index specified at class level.
     * @param cmd Metadata for the class
     * @param idxmd The index metadata
     * @param position Number of the index at class level (first is 0)
     * @return Name of the index
     */
    String getIndexName(AbstractClassMetaData cmd, IndexMetaData idxmd, int position);

    /**
     * Method to return the name of an index specified at member level.
     * @param mmd Metadata for the member
     * @param idxmd The index metadata
     * @return Name of the index
     */
    String getIndexName(AbstractMemberMetaData mmd, IndexMetaData idxmd);

    // TODO Support foreign-key naming

    /**
     * Method to return the name of sequence.
     * @param seqmd Metadata for the sequence
     * @return Name of the sequence
     */
    String getSequenceName(SequenceMetaData seqmd);
}

Be aware that you can extend _org.datanucleus.store.schema.naming.AbstractNamingFactory_
[![Javadoc](../../images/javadoc.gif)](http://www.datanucleus.org/javadocs/core/org/datanucleus/store/schema/naming/AbstractNamingFactory.html).

### Implementation

Let's assume that you want to provide your own identifier factory _MyNamingFactory_

	package mydomain;

	import org.datanucleus.store.schema.naming.AbstractNamingFactory

	public class MyIdentifierFactory extends AbstractNamingFactory
	{
    	/**
    	 * Constructor.
    	 * @param nucCtx NucleusContext
    	 */
    	public MyNamingFactory(NucleusContext nucCtx)
    	{
        	super(nucCtx);
        	...
    	}

    	.. (implement the rest of the interface)
	}

### Plugin Specification

When we have defined our "NamingFactory" we just need to make it into a DataNucleus plugin. To do this you simply add a file
_plugin.xml_ to your JAR at the root. The file _plugin.xml_ should look like this

    <?xml version="1.0"?>
    <plugin id="mydomain" name="DataNucleus plug-ins" provider-name="My Company">
        <extension point="org.datanucleus.identifier_namingfactory">
            <identifierfactory name="myfactory" class-name="mydomain.MyNamingFactory"/>
        </extension>
    </plugin>]]></source>

Note that you also require a MANIFEST.MF file as per the [Extensions Guide](index.html).

### Plugin Usage

The only thing remaining is to use your new _NamingFactory_ plugin. You do this by having your plugin
in the CLASSPATH at runtime, and setting the PMF property __datanucleus.identifier.namingFactory__ to _myfactory_
(the name you specified in the plugin.xml file).

repository: mbrukman/docs-datanucleus

repo_name: mbrukman/docs-datanucleus


text:
---
name: Bug report
about: Create a report to help us improve

---

**Describe the bug**
A clear and concise description of what the bug is.

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**SectionedRecyclerViewAdapter library:**
 - Version: [e.g. 1.2.0]

**Additional context**
Add any other context about the problem here.

**MVCE**
Please include a [minimal, complete, and verifiable example](https://stackoverflow.com/help/mcve)(MCVE) to help us identify the issue. This also helps check that the issue is not with your own code. The MCVE can be one of the following:
- Unit tests with the scenario where the issue happens;
- Modified [demo app](https://github.com/luizgrp/SectionedRecyclerViewAdapter/tree/918337f66321055c7621377e5f5254b9b8078e4c/app) with the scenario where the issue happens - please also provide the steps to reproduce the issue;
- Your own code including layouts;
- Link to the MCVE code/project:

repository: luizgrp/SectionedRecyclerViewAdapter

gha_language: Java

repo_name: luizgrp/SectionedRecyclerViewAdapter