text:
# @flopflip/graphql-adapter

## 3.0.18

### Patch Changes

- Updated dependencies [[`7b8964dd`](https://github.com/tdeekens/flopflip/commit/7b8964dd1870974d53c9fa229f50e750887940a2), [`fef83a93`](https://github.com/tdeekens/flopflip/commit/fef83a9303ce329b2f1e044b0b8e462d3554414f)]:
  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>
## 3.0.17

### Patch Changes

- [`a14d3863`](https://github.com/tdeekens/flopflip/commit/a14d3863e97546da0ccd5877555eace3650f2a60) Thanks [@tdeekens](https://github.com/tdeekens)! - Publish all packages

- Updated dependencies [[`a14d3863`](https://github.com/tdeekens/flopflip/commit/a14d3863e97546da0ccd5877555eace3650f2a60)]:
  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>
## 3.0.16

### Patch Changes

- [#1474](https://github.com/tdeekens/flopflip/pull/1474) [`99c06a04`](https://github.com/tdeekens/flopflip/commit/99c06a040ba9904b239b42b0885f807dbcebf8cc) Thanks [@renovate](https://github.com/apps/renovate)! - fix(deps): update dependency mitt to v3

## 3.0.15

### Patch Changes

- [#1469](https://github.com/tdeekens/flopflip/pull/1469) [`62168194`](https://github.com/tdeekens/flopflip/commit/62168194057adb8ef39c9634b4fb0d420a812414) Thanks [@renovate](https://github.com/apps/renovate)! - fix(deps): update all dependencies

- Updated dependencies [[`62168194`](https://github.com/tdeekens/flopflip/commit/62168194057adb8ef39c9634b4fb0d420a812414)]:
  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>
## 3.0.14

### Patch Changes

- [#1464](https://github.com/tdeekens/flopflip/pull/1464) [`ef59e379`](https://github.com/tdeekens/flopflip/commit/ef59e379764bc04903ab6dc6b1e1ad42e7288b93) Thanks [@renovate](https://github.com/apps/renovate)! - fix(deps): update all dependencies

- Updated dependencies [[`ef59e379`](https://github.com/tdeekens/flopflip/commit/ef59e379764bc04903ab6dc6b1e1ad42e7288b93)]:
  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>
## 3.0.13

### Patch Changes

- Updated dependencies [[`fe4fdfc0`](https://github.com/tdeekens/flopflip/commit/fe4fdfc0c51de4364d6ad2e881947d77780faabf)]:
  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>
## 3.0.12

### Patch Changes

- Updated dependencies [[`2dfef1c0`](https://github.com/tdeekens/flopflip/commit/2dfef1c045b238c66a804739012b2e2c879b4a3f)]:
  -<EMAIL_ADDRESS>
## 3.0.11

### Patch Changes

- [#1438](https://github.com/tdeekens/flopflip/pull/1438) [`10f981f5`](https://github.com/tdeekens/flopflip/commit/10f981f556284c5908b2be0d792db007a4002256) Thanks [@tdeekens](https://github.com/tdeekens)! - chore: update deps

- Updated dependencies [[`10f981f5`](https://github.com/tdeekens/flopflip/commit/10f981f556284c5908b2be0d792db007a4002256)]:
  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>
## 3.0.10

### Patch Changes

- [`bc7b3f41`](https://github.com/tdeekens/flopflip/commit/bc7b3f413554c4b11ab52ecdc5983da348014885) [#1414](https://github.com/tdeekens/flopflip/pull/1414) Thanks [@tdeekens](https://github.com/tdeekens)! - chore: update dependencies and add eslint sorting of imports

- Updated dependencies [[`bc7b3f41`](https://github.com/tdeekens/flopflip/commit/bc7b3f413554c4b11ab52ecdc5983da348014885)]:
  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>
## 3.0.9

### Patch Changes

- [`8707dfd8`](https://github.com/tdeekens/flopflip/commit/8707dfd8a34fd581a5e7db448bd3c635d79cfad0) [#1408](https://github.com/tdeekens/flopflip/pull/1408) Thanks [@tdeekens](https://github.com/tdeekens)! - chore: update deps

- Updated dependencies [[`8707dfd8`](https://github.com/tdeekens/flopflip/commit/8707dfd8a34fd581a5e7db448bd3c635d79cfad0)]:
  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>
## 3.0.8

### Patch Changes

- Updated dependencies [[`5461b6c`](https://github.com/tdeekens/flopflip/commit/5461b6c5746fe004aaff1a6a64be28be40522601)]:
  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>
## 3.0.7

### Patch Changes

- Updated dependencies [[`780a527`](https://github.com/tdeekens/flopflip/commit/780a527f6a86395463b5de5fcf88937491dee805)]:
  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>
## 3.0.6

### Patch Changes

- Updated dependencies [[`fbc9bce`](https://github.com/tdeekens/flopflip/commit/fbc9bce3281b88e8fe81330cd442409b18b5162b)]:
  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>
## 3.0.5

### Patch Changes

- [`e12bda8`](https://github.com/tdeekens/flopflip/commit/e12bda837d42b3a516f47bfe9241162668fa9963) [#1393](https://github.com/tdeekens/flopflip/pull/1393) Thanks [@tdeekens](https://github.com/tdeekens)! - update dependencies

- Updated dependencies [[`e12bda8`](https://github.com/tdeekens/flopflip/commit/e12bda837d42b3a516f47bfe9241162668fa9963)]:
  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>
## 3.0.4

### Patch Changes

- Updated dependencies [[`dfc1463`](https://github.com/tdeekens/flopflip/commit/dfc146387052c05697353e36c18285df37c0a87f)]:
  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>
## 3.0.3

### Patch Changes

- Updated dependencies [[`8fd148b`](https://github.com/tdeekens/flopflip/commit/8fd148b724394887e99ed9136bb309776a2fc375)]:
  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>
## 3.0.2

### Patch Changes

- Updated dependencies [[`d203f38`](https://github.com/tdeekens/flopflip/commit/d203f382100d681f8699e7c6f3b82dd8ad8ab257)]:
  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>
## 3.0.1

### Patch Changes

- [`498f3bc`](https://github.com/tdeekens/flopflip/commit/498f3bcdc605f60bd8e72924cdef08c4a079d4f1) [#1380](https://github.com/tdeekens/flopflip/pull/1380) Thanks [@tdeekens](https://github.com/tdeekens)! - refactor: to type TUser to be generic

* [`92ebba8`](https://github.com/tdeekens/flopflip/commit/92ebba83bdf1fb876ad830db124c306de6f5c86d) [#1382](https://github.com/tdeekens/flopflip/pull/1382) Thanks [@tdeekens](https://github.com/tdeekens)! - chore: add manypkg for validation for workspaces

* Updated dependencies [[`498f3bc`](https://github.com/tdeekens/flopflip/commit/498f3bcdc605f60bd8e72924cdef08c4a079d4f1), [`92ebba8`](https://github.com/tdeekens/flopflip/commit/92ebba83bdf1fb876ad830db124c306de6f5c86d)]:
  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>
## 3.0.0

### Major Changes

- [`0fbcac4`](https://github.com/tdeekens/flopflip/commit/0fbcac4d42568dda5fad6f1e33ff605b954301ee) [#1378](https://github.com/tdeekens/flopflip/pull/1378) Thanks [@tdeekens](https://github.com/tdeekens)! - refactor(adapters): to split out sdk options

  This release splits the `adapterArgs` or adapters which use an underlying SDK. Prior `adapterArgs` bound to `@flopflip`'s adapter and the underlying SDK (e.g. by LauncDarkly) were mixed.

  This release introduces a new `sdk` field on the `adapterArgs` which contain only fields forwarded to an underlying SDK. This also allows the nested `adapterConfiguration` field to become top-level as it is bound to the adapter.

  In essenence: `adapterConfiguration` is now directly flat out on `adapterArgs` while any SDK fields are nested into the `sdk` field.

  **splitio-adapter**

  - `sdk.authorizationKey`: Authorization key for splitio
  - `sdk.options`: General attributes passed to splitio SDK
  - `sdk.treatmentAttributes`: The treatment attributes passed to splitio

  Over `adapterArgs.{authorizationKey, options, treatmentAttributes}`

  **launchdarkly-adapter**

  - `sdk.clientSideId`
  - `sdk.clientOptions`

  Over `adapterArgs.{clientSideId, clientOptions}`.

  **graphql-adapter**

  All fields are now top-level not under `adapterConfiguration`

  **localstorage-adapter**

  All fields are now top-level not under `adapterConfiguration` while it is now `pollingInteralMs` not `pollingInteral`.

### Patch Changes

- Updated dependencies [[`0fbcac4`](https://github.com/tdeekens/flopflip/commit/0fbcac4d42568dda5fad6f1e33ff605b954301ee)]:
  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>
## 2.0.3

### Patch Changes

- Updated dependencies [[`badd563`](https://github.com/tdeekens/flopflip/commit/badd563fb90f0af3a0e364d4393a108c0b7ebec8)]:
  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>
## 2.0.2

### Patch Changes

- Updated dependencies [[`57c90be`](https://github.com/tdeekens/flopflip/commit/57c90be8517cea797b0d89ece686cd66cd65e38e)]:
  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>
## 2.0.1

### Patch Changes

- Updated dependencies [[`e9b47fd`](https://github.com/tdeekens/flopflip/commit/e9b47fd613452d5ec5d3bf7af1dcc1cc2d9c11a7)]:
  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>
## 2.0.0

### Major Changes

- [`521660c`](https://github.com/tdeekens/flopflip/commit/521660c2452628e336896300fd1ab743cf6a4b12) [#1363](https://github.com/tdeekens/flopflip/pull/1363) Thanks [@tdeekens](https://github.com/tdeekens)! - refactor: to remove isAdapterReady

  The deprecated `adapter.getIsReady` and FaaC of `isAdapterReady` is removed. Please now `adapter.getIsConfigured` and `isAdapterConfigured`.

* [`b099b51`](https://github.com/tdeekens/flopflip/commit/b099b5175aebc472281ef40f3d67c5cb298d1be9) [#1362](https://github.com/tdeekens/flopflip/pull/1362) Thanks [@tdeekens](https://github.com/tdeekens)! - refactor: updateFlags to be only on adapter

  The `updateFlags` export from each adapter is no longer present. Please use the `adapter.updateFlags` function instead. The prior was a re-export of the latter for longer anyway.

  This affects also other locations you should hopefully not be affected by:

  1. `test-utils`: does not export `updateFlags` anymore. Use `adapter.updateFlags`
  2. Globals: The globals on the window do not contain a `window.__flopflip__.[id].updateFlags` anymore

### Patch Changes

- [`3d2a174`](https://github.com/tdeekens/flopflip/commit/3d2a1742f9e6c99ba0360e8f33de6ce077fbd404) [#1367](https://github.com/tdeekens/flopflip/pull/1367) Thanks [@tdeekens](https://github.com/tdeekens)! - feat: allow adapters to affect each others state

  An adapter can now have an `effectIds` besides its own `id`. This allows one adapter to effect other adapters state. In turn allowing flopflip to theoretically support multiple adapters.

* [`b9c74ed`](https://github.com/tdeekens/flopflip/commit/b9c74ed24b5e695c914b8c82a3a81926558b78f7) [#1365](https://github.com/tdeekens/flopflip/pull/1365) Thanks [@tdeekens](https://github.com/tdeekens)! - refactor: adapters and system to receive ids

- [`2310e35`](https://github.com/tdeekens/flopflip/commit/2310e356c2c9f81d68bc88b7aaf25442da100c57) [#1356](https://github.com/tdeekens/flopflip/pull/1356) Thanks [@tdeekens](https://github.com/tdeekens)! - refactor: add and use shared adapter utilities

* [`d11e3a0`](https://github.com/tdeekens/flopflip/commit/d11e3a0a660e1844debbd9719c9013644ba85c45) [#1370](https://github.com/tdeekens/flopflip/pull/1370) Thanks [@tdeekens](https://github.com/tdeekens)! - refactor: homogenize adapters

- [`339a427`](https://github.com/tdeekens/flopflip/commit/339a42745a7131ee18aaa27d196a0cdc4207ee88) [#1359](https://github.com/tdeekens/flopflip/pull/1359) Thanks [@tdeekens](https://github.com/tdeekens)! - refactor: expose helpers on adapter

* [`4c1d86b`](https://github.com/tdeekens/flopflip/commit/4c1d86be23e0c0f50b07191e6984db4fd4b0139c) [#1361](https://github.com/tdeekens/flopflip/pull/1361) Thanks [@tdeekens](https://github.com/tdeekens)! - refactor: adapters to use instance variables

  This is a large refactor which changes all adapters to use instance variables over properties on the modules. During this refactora a public and private class variables were used.

  This should be entirely backwards compatible but is quite a large change. Please report any issues you see.

- [`feddd2c`](https://github.com/tdeekens/flopflip/commit/feddd2cbfa8e41d372f79dc214e14f250c114f97) [#1358](https://github.com/tdeekens/flopflip/pull/1358) Thanks [@tdeekens](https://github.com/tdeekens)! - chore: clean up deps

- Updated dependencies [[`521660c`](https://github.com/tdeekens/flopflip/commit/521660c2452628e336896300fd1ab743cf6a4b12), [`b099b51`](https://github.com/tdeekens/flopflip/commit/b099b5175aebc472281ef40f3d67c5cb298d1be9), [`3d2a174`](https://github.com/tdeekens/flopflip/commit/3d2a1742f9e6c99ba0360e8f33de6ce077fbd404), [`b9c74ed`](https://github.com/tdeekens/flopflip/commit/b9c74ed24b5e695c914b8c82a3a81926558b78f7), [`2310e35`](https://github.com/tdeekens/flopflip/commit/2310e356c2c9f81d68bc88b7aaf25442da100c57), [`0aff3a2`](https://github.com/tdeekens/flopflip/commit/0aff3a21d4b6ac581db0e795d48fde9aa63b61bb), [`339a427`](https://github.com/tdeekens/flopflip/commit/339a42745a7131ee18aaa27d196a0cdc4207ee88), [`4c1d86b`](https://github.com/tdeekens/flopflip/commit/4c1d86be23e0c0f50b07191e6984db4fd4b0139c)]:
  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>
## 1.0.0

### Major Changes

- [`d72a4cd`](https://github.com/tdeekens/flopflip/commit/d72a4cd013295fa15478212d56840c6c4dd2c9df) [#1354](https://github.com/tdeekens/flopflip/pull/1354) Thanks [@tdeekens](https://github.com/tdeekens)! - feat(graphql-adapter): add cache option

  This as a result is considered the initial v1 version of the adapter.

### Patch Changes

- [`18bd598`](https://github.com/tdeekens/flopflip/commit/18bd598f78891bcc24901f8c916c38f55d80e445) [#1349](https://github.com/tdeekens/flopflip/pull/1349) Thanks [@tdeekens](https://github.com/tdeekens)! - fix: remove unused read-pkg-\* dependencies

- Updated dependencies [[`3f707fb`](https://github.com/tdeekens/flopflip/commit/3f707fbffb82ad35b7c883a732d42ebd4604009b), [`f288170`](https://github.com/tdeekens/flopflip/commit/f2881702bcaf39029d78faf5d89d7bf645096310), [`d72a4cd`](https://github.com/tdeekens/flopflip/commit/d72a4cd013295fa15478212d56840c6c4dd2c9df), [`33b3216`](https://github.com/tdeekens/flopflip/commit/33b3216f227969f8a5ce0670b9590e5e06243fea), [`18bd598`](https://github.com/tdeekens/flopflip/commit/18bd598f78891bcc24901f8c916c38f55d80e445)]:
  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>  -<EMAIL_ADDRESS>
## 0.0.4

### Patch Changes

- [`9ba0922`](https://github.com/tdeekens/flopflip/commit/9ba0922651198b4cb53f4c3f71e358bdfb1fa4ae) [#1339](https://github.com/tdeekens/flopflip/pull/1339) Thanks [@tdeekens](https://github.com/tdeekens)! - feat: add parsing of flags

- Updated dependencies [[`9ba0922`](https://github.com/tdeekens/flopflip/commit/9ba0922651198b4cb53f4c3f71e358bdfb1fa4ae)]:
  -<EMAIL_ADDRESS>
## 0.0.3

### Patch Changes

- [`5d2376b`](https://github.com/tdeekens/flopflip/commit/5d2376b6491761cd5e11cbe979d318e1d307c7ef) [#1337](https://github.com/tdeekens/flopflip/pull/1337) Thanks [@tdeekens](https://github.com/tdeekens)! - feat: allow headers for adapter

- Updated dependencies [[`5d2376b`](https://github.com/tdeekens/flopflip/commit/5d2376b6491761cd5e11cbe979d318e1d307c7ef)]:
  -<EMAIL_ADDRESS>
## 0.0.2

### Patch Changes

- [`e927867`](https://github.com/tdeekens/flopflip/commit/e92786784675656a79d6866bbeb6797683dcf71e) [#1335](https://github.com/tdeekens/flopflip/pull/1335) Thanks [@tdeekens](https://github.com/tdeekens)! - chore: update deps

- Updated dependencies [[`e927867`](https://github.com/tdeekens/flopflip/commit/e92786784675656a79d6866bbeb6797683dcf71e)]:
  -<EMAIL_ADDRESS>
## 0.0.1

### Patch Changes

- [`a25c329`](https://github.com/tdeekens/flopflip/commit/a25c32916caec291d7f949270398e7f4c19ea2a4) [#1333](https://github.com/tdeekens/flopflip/pull/1333) Thanks [@tdeekens](https://github.com/tdeekens)! - feat(gtaphql-adapter): add graphql adapter

  A new `graphql-adapter` which should be considered beta was added.

  ```js
  import { ConfigureFlopFlip } from "@flopflip/react-broadcast";
  import adapter from "@flopflip/graphql-adapter";

  const adapterArgs = React.useMemo(() => {
     adapterConfiguration: {
        uri: 'https://domain.at/graphql'
        pollingInternal: 1000,
        query: gql`query AllFeatures { flags: allFeatures(id: $userId) { name value} }`,
        getVariables: (adapterArgs) => ({ userId: ardapterArgs.userId })
     },
     userId,
  })

  <ConfigureFlopFlip adapter={adapter} adapterArgs={adapterArgs}>
     <App />
  </ConfigureFlopFlip>;
  ```

- Updated dependencies [[`a25c329`](https://github.com/tdeekens/flopflip/commit/a25c32916caec291d7f949270398e7f4c19ea2a4)]:
  -<EMAIL_ADDRESS>

repository: lgrammel/flopflip

repo_name: lgrammel/flopflip


text:
---
layout:     post
title:      "There's a problem with my order"
subtitle:   "作者：于磊 来自：开言英语"
date:       2020-07-08 00:00:00
author:     "于磊"
header-img: "img/silicon_valley_products/06_bg.jpg"
catalog: true
tags:
    - 开言英语
    - A2
    - 餐厅点餐

---

# There's a problem with my order

> 上错菜怎么办？菜凉了又怎么办？遇到这些情况如何处理？

## 01.词汇练习

**共 8 个词汇**

| 词汇          | 翻译                      |
| ------------- | ------------------------- |
| order         | n.订单                    |
| what's wrong? | phr.怎么了？              |
| onions        | n.洋葱                    |
| mistake       | n.错误                    |
| fix           | v.解决，修改              |
| fries         | n.薯条                    |
| right way     | phr.马上                  |
| forgot        | v.忘记（forget 的过去式） |

## 02.课程精讲

### 课程热身

**Connor**: Hi guys, welcome back to open language. This is Connor.

**Adam**: And this is Adam.

**Connor**: And today we have a nice elementary`adj.基本的；初级的` lesson for you, called convenience`n.便利；厕所；便利的事情` store run.

**Adam**: That's right. Convenience stores are very very useful, they're very convenient`adj.方便点；适当的；近便的；实用的`.

**Connor**: They're convenient.

**Adam**: Yeah. They are very convenient. But we're not talking about run as in "go for a run" today.

**Connor**: No, no, that's right. This is just when you go to the convenience store.

**Adam**: Right, exactly. And it can be quickly. Ah, as we will talk about later, but for now why don't we go ahead and listen to Cody and Jessica and find out what they are going to buy at the convenience store?

**Connor**: Alright!

### 核心对话

**A**: Hey Jessica, I'm going on a convenience store run. Do you need anything? `嘿 Jessica, 我要去一趟便利店。需要帮你带点什么吗？`

**B**: I'm almost out of tissues. Could you grab me a pack? `我的纸巾快用完了。能帮我带一包吗？`

**A**: Sure, no problem. You want a drink of something? `当然啦，没问题。你还要点饮料之类的吗？`

**B**: Um, I think I'm good. But could you get me some yogurt? `不用了。不过你能帮我带点酸奶吗？`

**A**: Okay. I'm going to get a few tea eggs too. Want one? `好啊。我还要买点茶叶蛋，你要吗？`

**B**: Yes! They are the perfect aternoon snack. Oh shoot, I left my wallet at home. `好呀！它们做下午茶零食很棒。糟了，我把钱包忘家里了。`

**A**: No problem. You can pay me back later! `没事儿，可以之后再还我。`

## 03.对话精讲

> convenience store `n.便利店`

**Connor**: Alright, so it looks like Cody is going on a convenience store run. So what is this exactly?

**Adam**: Well, like I said in the intro`n.介绍，简介`, run can mean lots of things.

**Connor**: Oh yeah.

**Adam**: It doesn't just mean walk or move quickly.

**Connor**: Yeah. But run here is more like a short trip.

**Adam**: Yeah, especially `adv.特别；尤其；格外` to buy something.

**Connor**: Yeah, yeah. Something sample, something small.

**Adam**: Yeah. So if I don't have any milk at home, I might say, "Oh, I need to go on a milk run."

**Connor**: Yeah, to go get some milk, some of the basic things.

**Adam**: Right. And it could be anything, right? When we were in Asia`n.亚洲`, I was in China, Connor was in Korea`n.韩国；朝鲜` . We needed visas`n.签证（visa 的复数）`.

**Connor**: Oh, yeah yeah yeah.

**Adam**: So sometimes we'd have to go on a visa run.

**Connor**: Right. And that meant`v.意味；打算（mean 的过去式和过去分词）；表示...的意思` going to an another country.

**Adam**: So it was maybe not as eays as goint to buy milk or eggs or just going to the convenience store, but it was still a quick trip.

**Connor**: Yeah. And the reason we use this a lot is because convenience stores, oh, they have many basic things that we need, like milk and eggs.

**Adam**: Exactly, exactly! They're usually a little bit more expensive as you guys all know. But of course, they are very very convenient.

**Connor**: Yeah. And so why is Cody going on a convenience store run?

**Adam**: Well, we don't really know. I mean he wants to buy something, but often times when we go on these runs, we also go for other people.

**Connor**: Oh, yeah yeah. That's right.

**Adam**: So Cody and Jessica they are probably at work together, and Cody is just a nice guy, so he's saying, "Jessica, do you need anything?"

> tissues `n.纸巾`

**Connor**:  Yes. And she does, she needs tissues.

> out of `phr.用完了`

**Adam**: That's right. In fact, she is almost out of tissues.

**Connor**: Out of tissues. So not outside, the tissues are not outside. It means she almost used all the tissues.

**Adam**: Right, she maybe has one or two or three, soon there will be no tissues.

**Connor**: Yeah. And this is such a common phrase you can be almost out of something or out of something.

**Adam**: Right. Or all out, kind of stresses that a bit, I'm all out of tissues.

**Connor**: Yeah. Now tissue you use for wiping`v.擦干；使消失（wipe 的 ing 形式）` your face if you have a cold. But what's the difference between tissue and napkin`n.餐巾；餐巾纸；尿布？`

**Adam**: We use napkins at the dinner table.

**Connor**: Yeah. And they are not always paper, right?

**Adam**: Right. Tissues are always paper.

**Connor**: Yeah! And I mean if you go to a fancy restaurant the napkins will be made of cloth`n.布；织物；桌布`.

**Adam**: Cloth? Yeah. Exactly.

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

**Connor**:

**Adam**:

## 04.课程回顾

------

branch_name: refs/heads/master

extension: markdown

license_type: permissive


text:
# Script to remove NPC files in the Essentials userdata directory and correct usermap.csv accordingly

This script was made after a plugin broke our Essentials userdata directory. It made many NPC files which caused /seen, balance and other features to malfunction.
Upon removing these YML files with a simple bash script, we noticed Essentials regenerated these, upon further investigation, we noticed the fake UUIDs generated for these NPC files were still stored in usermap.csv.

### EXAMPLE

In the examples/ directory in this repository, you can see a fake usermap.csv file, userdata directory and the output which this script generated.
You can use this to check if you are experiencing the same issue, and if this script will help you.

### HOW TO USE

Run `pip install -r requirements.txt` before continuing.
Modify the .env file in this directory and add change the values to the proper locations for your setup. Then run the script! This can take a while, so I recommend running it in a program like tmux.

### DISCLAIMERS

This script can take a long time to run. On our usermap.csv of about 25K lines, it took about 45 minutes. This is because it needs to *search* through the userdata directory, which can take a long time depending on how many files you have in there.
We ran this script on a copy of the userdata directory and usermap file, and copied it's output to the server later during a scheduled restart. Any missing data (Such as from players who joined since copying the files) will be automatically added again by Essentials, and it seems to have caused no issues.

This script only writes the output once it is completely done, it will print how many lines usermap.csv is at the beginning and print its progress so you can see the speed.

### HOW IT WORKS

This script searches through the userdata directory and moves all the NPC files to a backup directory (We have noticed some players who were affected had their marbles deposited / withdrawn from this fake file instead, for that reason it is probably wise to keep these files and inspect them).
When this is done, it goes through each line in usermap.csv, then it checks if this UUID appears in the NPC directory made previously. If they do, this means this UUID is incorrect and points to a fake NPC file. It then grabs the username and searches through the now correct userdata directory fot the username, upon a match, it grabs the UUID from their actual file, and saves it as their new UUID.

license: MIT

branch_name: refs/heads/main

extension: md


text:
# Alysidium dubium (Alb. & Schwein.) M.B. Ellis, 1971 SPECIES

#### Status
SYNONYM

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

#### Published in
Dematiaceous Hyphomycetes (Kew) 89 (1971)

#### Original name
null

### Remarks
null

repository: mdoering/backbone

path: /life/Fungi/Basidiomycota/Agaricomycetes/Cantharellales/Botryobasidiaceae/Botryobasidium/Botryobasidium aureum/ Syn. Alysidium dubium/README.md

repo_name: mdoering/backbone


text:
# Intralichen christiansenii (D. Hawksw.) D. Hawksw. & M.S. Cole, 2002 SPECIES

#### Status
ACCEPTED

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

#### Published in
Fungal Diversity 11: 90 (2002)

#### Original name
Bispora christiansenii D. Hawksw., 1979

### Remarks
null


text:
# FRC Strategy Planner - v2.10.3 ALPHA
FRC Strategy Planner is a cross-platform web application that will allow FRC users to easily develop strategies and draw on the FRC field.

# (1/4/2017) Started cleanup process for app release.

# (1/3/2017) Updated project to Ionic v2.0.0-rc.4
- Will break any version below v2.0.0, as several functions from Ionic are deprecated/removed.
- This was mainly to improve VirtualScroll performance. (We display a lot of data!)

# (12/20/2016) This branch was successfully merged from 'ionic-dev'
- This means that FRCSP is now written with the Ionic v2 framework!

# TODO
### Desired upcoming features and house-keeping things
- [X] Start packaging the app and get ready for it's first stable release! (1/4/2017 - 4:33am)
- [X] Optimize everything. App is starting to run a little slow. (1/4/2017)
- [X] Add licensing and credits to angular, ionic, font-awesome, etc. (1/4/2017)
- [X] Literally refactor everything and make more classes. I feel disgusting looking at it. (1/2/2017)
- [X] Sort through all data because most of it is out of order (12/30/2016)
- [X] Add search feature for the 'Events' and 'Teams' section of the statistics page (12/30/2016)
- [X] Add capabilities to add robots/team numbers to canvas - feed match list? (12/29/2016)
- [X] Design features to go along with the stats page (12/26/2016)
- [X] Add capabilities to save/load strategy plans - serialize this information (12/25/2016)
- [X] Decide to keep the home page or switch to settings page (12/24/2016)
- [X] Add capabilities to add field elements to the canvas (12/23/2016)
- [X] Migrate from ionic v1 to ionic v2 (12/20/16)

repository: kyle-flynn/FRC-Strategy-Planner

repo_name: kyle-flynn/FRC-Strategy-Planner


text:
# ql-docker

A Docker image for running a dedicated Quake Live server.  It includes installation of minqlx and bundles most of the custom maps from the Steam workshop.

## Installation and Usage

To start a new server using this image:

1. Create a directory to store the persistent Redis database files.  For this example I called it ql-redis.
2. Launch a Redis container: `sudo docker run -d --name redis -v ql-redis:/data redis`
3. Launch the Quake Live server container: `sudo docker run -p 27960:27960/udp --link redis -d --name ql -e name="Test Server" -e admin="12345" dpadgett/ql-docker`

The image exposes a few environment variables to control deployment:

1. `name`: The name of the server
2. `admin`: The steamid of the server admin.  This person will automatically get rcon access to the server when they are connected.
3. `gameport`: The port to start the server on.
4. `rconport`: The port to listen for remote rcon connections from.

To use a custom server configuration, or to add additional files, you can either fork this repository and edit the included files and then build a new image, mount the files into the container using docker's `-v localpath:containerpath` option, or go into the container and edit them manually using `sudo docker exec -t -i containerid /bin/bash`

## Contributing

1. Fork it!
3.  Push to the branch: `git push`
5. Submit a pull request :D

## License

Apache 2.0


text:
Virtual Services / POL Services
===============================

*Virtual Services* or *POL services* are services which run on the POL level and not on the PEA level. They can be configured at runtime in order to provide a mechanism to dynamically add functionality beyond the predefined services of the PEA manufacturers.

## Aggregated Services
*Aggregated Services* can be called like any other service. They can control several other services (both PEA services and POL services) from several PEAs. However, they cannot control the field devices inside the PEAs.

|                                  | (PEA-)Service                              | Aggregated Service                                     |
|----------------------------------|--------------------------------------------|--------------------------------------------------------|
| Place of Execution               | PEA                                        | POL                                                    |
| Creator                          | PEA manufacturer                           | plant operator                                         |
| Adaptability                     | predefined by service paramaters           | can be freely configured at runtime                    |
| External runtime  interface      | State machine according to VDI/VDE 2658-4  | State machine according to VDI/VDE 2658-4              |
| Control                          | PEA internal field devices or PEA-services | PEA-services from different PEAs or other POL-Services |
| Static description/configuration | MTP                                        | Polaris specific solution                              |

![Polaris component diagram](http://www.plantuml.com/plantuml/proxy?src=https://raw.githubusercontent.com/p2o-lab/polaris-backend/develop/doc/virtualService/aggregated-service-context.puml)

branch_name: refs/heads/develop

gha_language: TypeScript

gha_license_id: MIT


text:
# ember-cli-jstree

[![Travis-CI status](https://travis-ci.org/yectep/ember-cli-jstree.svg?branch=master)](https://travis-ci.org/yectep/ember-cli-jstree) [![Ember Observer Score](http://emberobserver.com/badges/ember-cli-jstree.svg)](http://emberobserver.com/addons/ember-cli-jstree)

Brings [jsTree](http://www.jstree.com/) functionality into your Ember app.

> Version 0.1.0 of this addon or greater has support for Ember-CLI 1.13 and has **prototype extensions disabled**.

## Installation

Ember CLI addons can be installed with `ember install`

	ember install ember-cli-jstree

## Usage

Out of the box, the bare minimum you need on the template is `data`.
Run supported actions on the tree by registering it to your controller with the `actionReceiver` property.

````Handlebars
<div class="sample-tree">
    {{ember-jstree
        actionReceiver=jstreeActionReceiver
        selectedNodes=jstreeSelectedNodes
        data=data
        plugins=plugins
        themes=themes
        checkboxOptions=checkboxOptions
        contextmenuOptions=contextmenuOptions
        stateOptions=stateOptions
        typesOptions=typesOptions
        contextMenuReportClicked="contextMenuReportClicked"
        eventDidBecomeReady="handleTreeDidBecomeReady"
    }}
</div>
````

### Adding classes

As per the [jsTree JSON docs](https://www.jstree.com/docs/json/), you can add custom classes to both the `<li>` and `<a>` tags of each
individual node. These are passed on to jQuery's `attr` function.

For example, to add [hint.css](http://kushagragour.in/lab/hint/) tooltips, use the following in your JSON data hash.

````Javascript
{
	'id': 'node15',
	'text': 'Node title',
	'state': { 'selected': true },
	'a_attr': { 'class': 'hint--bottom', 'data-hint': 'Some hint goes here' }
}
````

This will get rendered in HTML as

````HTML
<a class="jstree-anchor jstree-clicked hint--bottom" href="#" tabindex="-1" data-hint="Some hint goes here" id="node15_anchor"><i class="jstree-icon jstree-themeicon" role="presentation"></i>Node title</a>
````

## Event Handling

The addon listens for events from jstree and sends them back to you using actions bound
to the Handlebars template. Simply set the property to the string name of the action
in your controller.

````Handlebars
{{ember-jstree
    [...]
    eventDidChange="handleJstreeEventDidChange"
    treeObject=jstreeObject
}}
````

### Supported events

The following events have basic support included. More are on the way.

| jsTree Event              | Ember Action          |
|---------------------------|-----------------------|
| after_open.jstree         | eventDidOpen          |
| after_close.jstree        | eventDidClose         |
| changed.jstree            | eventDidChange        |
| deselect_node.jstree      | eventDidDeselectNode  |
| init.jstree               | eventDidInit          |
| ready.jstree              | eventDidBecomeReady   |
| redraw.jstree             | eventDidRedraw        |
| select_node.jstree        | eventDidSelectNode    |
| (destroyed - no event)    | eventDidDestroy       |

**Note:** In the meantime, you can add event listeners yourself by calling them on a mapped `treeObject` property.

````Javascript
_handleOpenNode: function() {
    var treeObject = this.get('jstreeObject');
    treeObject.on('open_node.jstree', function(e, data) {
        console.info('A node was opened.');
        console.log(data);
    }.bind(this));
}
````

### Selected nodes

Selected nodes are always available through the `selectedNodes` property

## Plugins

Plugins for your tree should be specified by a `plugins` string property. Multiple plugins should be
separated with commas.

````Handlebars
{{ember-jstree
    data=data
    plugins=plugins
}}
````

The following [plugins](http://www.jstree.com/plugins/) are currently supported. More on the way!

* Checkbox
* Contextmenu
* State
* Types
* Wholerow

### Configuring plugins

Send a hash containing the jsTree options through to the addon through the `<plugin name>Options` key.

In your **controller**:

````Javascript
jstreeStateOptionHash: {
    'key': 'ember-cli-jstree-dummy'
},
plugins: 'state'
````

In **Handlebars**:

````Handlebars
{{ember-jstree
    [...]
    plugins=plugins
    stateOptions=jstreeStateOptionHash
}}
````

## Sending actions to jsTree

The addon component will try to register an `actionReceiver` (see view helper example) to a property in
your controller if you define it. You can then send actions through that bound property:

````Javascript
this.get('jstreeActionReceiver').send('redraw');
````

**Note:** Action names in Ember are camelized (e.g.: `get_node()` in jsTree is mapped to `getNode()` in Ember).

If the corresponding jsTree method has a return value, the addon will send an action with the name corresponding
to supported actions in the table below. Because the addon actually calls these jsTree events, if any events
occur because of an action, they will be sent as actions (see Event Handling above).

### Supported actions

| jsTree Action     | Ember Action      | Return Action         |
|-------------------|-------------------|-----------------------|
| copy_node         | copyNode          |                       |
| close_all         | closeAll          |                       |
| close_node        | closeNode         |                       |
| create_node       | createNode        | actionCreateNode      |
| delete_node       | deleteNode        | actionDeleteNode      |
| deselect_all      | deselectAll       |                       |
| deselect_node     | deselectNode      |                       |
| destroy           | destroy           |                       |
| get_children_dom  | getChildrenDom    | actionGetChildrenDom  |
| get_container     | getContainer      | actionGetContainer    |
| get_node          | getNode           | actionGetNode         |
| get_parent        | getParent         | actionGetParent       |
| get_path          | getPath           | actionGetPath         |
| get_text          | getText           | actionGetText         |
| last_error        | lastError         | actionLastError       |
| load_all          | loadAll           | actionLoadAll         |
| load_node         | loadNode          | actionLoadNode        |
| move_node         | moveNode          |                       |
| open_all          | openAll           |                       |
| open_node         | openNode          |                       |
| redraw            | redraw            |                       |
| rename_node       | renameNode        | actionRenameNode      |
| select_all        | selectAll         |                       |
| select_node       | selectNode        |                       |
| toggle_node       | toggleNode        |                       |

### Receiving return values

In your Handlebars component, map the return action (as above, most of which follow the pattern `action<action name>`):

````Handlebars
{{ember-jstree
    [...]
    actionGetNode="handleJstreeGetNode"
}}
````

Any params that jsTree returns will be given in the order specified by its API.

````Javascript
actionGetNode: function (node) {
    this.set('someValue', node);
}
````

## Demo

Both dynamic (AJAX loaded) and static examples are in the dummy demo.

* Clone this repo: `git clone`
* Install packages: `npm install` then `bower install`
* Run `ember serve`
* Visit the sample app at http://localhost:4200.

repository: chengyuanheng/ember-cli-jstree

repo_name: chengyuanheng/ember-cli-jstree


text:
+++
# Experience widget.
widget = "experience"  # See https://sourcethemes.com/academic/docs/page-builder/
headless = true  # This file represents a page section.
active = true  # Activate this widget? true/false
weight = 60  # Order that this section will appear.

title = "Experience"
subtitle = ""

# Date format for experience
#   Refer to https://sourcethemes.com/academic/docs/customization/#date-format
date_format = "Jan 2006"

# Experiences.
#   Add/remove as many `[[experience]]` blocks below as you like.
#   Required fields are `title`, `company`, and `date_start`.
#   Leave `date_end` empty if it's your current employer.
#   Begin/end multi-line descriptions with 3 quotes `"""`.
[[experience]]
  title = "Princpal Engineer"
  company = "DDI"
  company_url = ""
  location = "Bridgeville, PA"
  date_start = "2012-10-28"
  date_end = ""
  description = """
  Responsibilities include:
  Leading team on new software technologies, processes and architecutes. Design and develop with other developers. Troubleshoot system issues as final escalation point before submitting ticket to vendor.
  """

[[experience]]
	title = "Development Manager"
	company = "Sentric, Inc"
	company_url = "https://www.sentrichr.com"
	location = "Pittsburgh, PA"
	date_start = "2005-01-01"
	date_end = "2012-10-25"
	description = """Managed a team of 3 developers develop core client product as well as internal line of business applications. """

 [[experience]]
	title = "Senior Application Developer"
	company = "Allegheny Energy"
	location = "Greensburgh, PA"
	date_start = "2002-03-01"
	date_end = "2005-12-01"

[[experience]]
	title = "Senior Application Developer"
	company = "DDI"
	company_url = ""
	location = "Bridgeville, PA"
	date_start = "2000-08-01"
	date_end = "2002-02-01"

[[experience]]
	title = "Application Developer / Network Administrator"
	company = "EdgeTek"
	company_url = ""
	location = "Atlanta, GA"
	date_start = "1999-02-01"
	date_end = "2000-08-01"

[[experience]]
	title = "Level 2 Technical Support Analyst"
	company = "Coca-Cola Enterprises"
	company_url = ""
	location = "Atlanta, GA"
	date_start = "1998-05-01"
	date_end = "1999-08-01"

[[experience]]
	title = "Education Computer Sales Consultant"
	company = "Pittsburgh Computer Store"
	company_url = ""
	location = "Pittsburgh, PA"
	date_start = "1996-05-01"
	date_end = "1998-08-01"

+++

repository: ljrain/MyLiveResume

repo_name: ljrain/MyLiveResume


text:
# Formatting Decision: Ignore

This is a document explaining our reasoning behind the formatting decision to take direction from an `erlfmt-ignore` comment to ignore formatting the next top-level expression.

One goal of `erlfmt` is to keep the number of options to a minimum and standardize a way to format erlang code.
We found that mostly it is possible to format erlang code in an at least somewhat acceptable way, but exceptions do occur.
We have introduced the `erlfmt-ignore` comment, which when placed before a top-level expression, will indicate to `erlfmt` to skip over that expression, leave it as is and move on to the next expression. Adding these comments is discouraged, but we understand that there are exceptions, here are some we have found.

## Example 1: Aligned Matrix

Here is a matrix that is defined and well aligned, so that is easy to see the element at index `3,3` is `-16`.

```erlang unformatted matrix
-define(DELTA_MATRIX, [
    [0,   0,   0,   0,   0,   0,   0,   0,   0, -17,   0,   0,   0,   0,   0,   0, -16,   0,   0,   0],
    [0,   0,   0, -15,   0,   0, -17,   0,   0,   0,   0,   0, -16,   0,   0,   0,   0,   0, -15,   0],
    [0,   0,   0, -17,   0,   0,   0,   0, -16,   0,   0,   0,   0, -15,   0,   0,   0,   0,   0,   0],
    [-17, 0,   0, -16, -16,   0,   0,   0, -15,   0,   0,   0,   0,   0,   0,   0,   0, -17,   0,   0],
    [-16, 0,   0, -15,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, -17, -33, -16, -31, -15,   0],
    [0,   0,   0,   0,   0,   0,   0,   0,   0,   0, -18, -17, -16, -15, -14,   0,   0,   0,   0,   0],
    [0,  -1,  -1,  -1,  -1,  -1,  -1,  -1,   0,   1,   1,   1,   1,   1,   1,   1,   0,   0,   0,   0],
    [0,   0,  14,  15,  16,  17,  18,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  15,  31],
    [16,  33, 17,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  15,   0,   0,  16,   0,   0,  17],
    [0,   0,   0,   0,   0,   0,   0,   0,  15,   0,   0,   0,  16,   0,   0,   0,  17,   0,   0,   0],
    [0,   0,   0,  15,   0,   0,   0,   0,  16,   0,   0,   0,   0,  17,   0,   0,   0,   0,  15,   0],
    [0,   0,   0,   0,  16,   0,   0,   0,   0,   0,  17,   0,   0,  15,   0,   0,   0,   0,   0,   0],
    [16,  0,   0,   0,   0,   0,   0,  17,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0]
]).
```

If we format it, we loose all of the alignment.
Now `-16` from index `3,3` seems to be aligned with column `5` in the top row.
TODO: Don't ignore line length limit.

```erlang formatted matrix
-define(DELTA_MATRIX, [
    [0, 0, 0, 0, 0, 0, 0, 0, 0, -17, 0, 0, 0, 0, 0, 0, -16, 0, 0, 0],
    [0, 0, 0, -15, 0, 0, -17, 0, 0, 0, 0, 0, -16, 0, 0, 0, 0, 0, -15, 0],
    [0, 0, 0, -17, 0, 0, 0, 0, -16, 0, 0, 0, 0, -15, 0, 0, 0, 0, 0, 0],
    [-17, 0, 0, -16, -16, 0, 0, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, -17, 0, 0],
    [-16, 0, 0, -15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17, -33, -16, -31, -15, 0],
    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18, -17, -16, -15, -14, 0, 0, 0, 0, 0],
    [0, -1, -1, -1, -1, -1, -1, -1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
    [0, 0, 14, 15, 16, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 31],
    [16, 33, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 16, 0, 0, 17],
    [0, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 16, 0, 0, 0, 17, 0, 0, 0],
    [0, 0, 0, 15, 0, 0, 0, 0, 16, 0, 0, 0, 0, 17, 0, 0, 0, 0, 15, 0],
    [0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 17, 0, 0, 15, 0, 0, 0, 0, 0, 0],
    [16, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
]).
```

We can't think of a work around for this case.

## Example 2: DSLish Lists

`erlfmt` formats lists that don’t fit on a single line, by giving each element its own line:

```erlang formatted list
[
    a_long_expression,
    b_long_expression,
    c_long_expression
]
```

Here is an example of an unformatted DSLish list:

```erlang unformatted gen_part
gen_part({constructed,bif},TypeName,{_Name,parts,Tag,_Type}) ->
    emit(["  case Data of",nl,
          "    L when is_list(L) ->",nl,
          "      'dec_",TypeName,"'(lists:map(fun(X) -> element(1, ",
          {call,ber,ber_decode_erlang,["X"]},") end, L),",{asis,Tag},");",nl,
          "    _ ->",nl,
          "      [Res] = 'dec_",TypeName,"'([Data],",{asis,Tag},"),",nl,
          "      Res",nl,
          "  end"]).
```

This is what the DSLish list looks like if formatted by `erlfmt`:

```erlang formatted gen_part
gen_part({constructed, bif}, TypeName, {_Name, parts, Tag, _Type}) ->
    emit([
        "  case Data of",
        nl,
        "    L when is_list(L) ->",
        nl,
        "      'dec_",
        TypeName,
        "'(lists:map(fun(X) -> element(1, ",
        {call, ber, ber_decode_erlang, ["X"]},
        ") end, L),",
        {asis, Tag},
        ");",
        nl,
        "    _ ->",
        nl,
        "      [Res] = 'dec_",
        TypeName,
        "'([Data],",
        {asis, Tag},
        "),",
        nl,
        "      Res",
        nl,
        "  end"
    ]).
```

The problem is that this DSLish list, is now less readable than it was before.

Technically there is a work around, so that you don't need the `erlfmt-ignore` comment.
You can place each line, in its own list, so that each line is seen as a single element of the bigger list:

```erlang formatted gen_part2
gen_part({constructed, bif}, TypeName, {_Name, parts, Tag, _Type}) ->
    emit([
        ["  case Data of", nl],
        ["    L when is_list(L) ->", nl],
        ["      'dec_", TypeName, "'(lists:map(fun(X) -> element(1, "],
        [{call, ber, ber_decode_erlang, ["X"]}, ") end, L),", {asis, Tag}, ");", nl],
        ["    _ ->", nl],
        ["      [Res] = 'dec_", TypeName, "'([Data],", {asis, Tag}, "),", nl],
        ["      Res", nl],
        ["  end"]
    ]).
```

## Example 3: Aligned Binary Strings

Binary strings with comments, can also require alignment for readability.
This is another good use case with using the `erlfmt-ignore` comment.

```erlang formatted binary
%% erlfmt-ignore
<<
% Phase 0     Phase 1     Phase 2     Phase 3     Phase 4     Phase 5     Phase 6
% A B C D     A B C D     A B C D     A B C D     A B C D     A B C D     A B C D
2#01001000, 2#10100000, 2#00010000, 2#00010000, 2#00010011, 2#00000000, 2#00000000,  % LUT0 - Black
2#01001000, 2#10100000, 2#10000000, 2#00000000, 2#00000011, 2#00000000, 2#00000000,  % LUTT1 - White
>>
```

## How to specify not to format

From our examples it seems not formatting is useful for code where alignment makes code more readable.
Given we are now motivated to make it possible to exclude some things from the formatter, we needed a way to do that.

Goals:

  - Compatible: Usable inside all erlang files, including for example `rebar.config`
  - Future Proof: We cannot foresee all exceptions.
  - Localized: Encourages formatting most of the file

### 1. Comment Off/On

Use a comment that can turn formatting off and then later it back on.

Prior Art:
  - [Python Black](https://github.com/psf/black#the-black-code-style) comments around expression
  - [YaPF](https://github.com/google/yapf#why-does-yapf-destroy-my-awesome-formatting) comments around or after expression

 - ✅ Compatible: Comments can be applied inside rebar.config files, etc.
 - ✅ Future Proof: Could be “abused” for not formatting other things
 - ❌ Localized: It is very easy to forget to turn the formatter on again and makes it easier to not format large pieces of code.

### 2. Comment Off

Use a comment that can turn formatting off for the next top-level expression to which the comment is attached to.
Prior Art includes: Javascript's [Prettier](https://prettier.io/docs/en/ignore.html) comments before expression.

 - ✅ Compatible: Comments can be applied inside rebar.config files, etc.
 - ✅ Future Proof: Could be “abused” for not formatting other things
 - ✅ Localized: Less Comments than Off/On Alternative

This is the chosen option.

### 3. Pragma

We already have `@format` pragma comment to opt in and out of formatting per file.
We could reuse this and disable formatting for the entire file.
Prior Art: This is what elixir formatter suggests to do in cases like this.

 - ✅ Compatible: Comments can be applied inside rebar.config files, etc.
 - ✅ Future Proof: Could be “abused” for not formatting other things
 - ❌ Localized: A whole file is not formatted

### 4. No Line Breakings

Strictly follow the user-provided line breaks inside lists, don’t remove them when re-formatting.
Prior Art: gofmt, has very little opinion about new lines in general.

 - ✅ Compatible: Comments can be applied inside rebar.config files, etc.
 - ❌ Future Proof: This only covers a specific case.
 - ❌ Localized: This affects all lists everywhere, which gives rise to more formatting discussion between users, which exactly contradicts the project goal.

### 5. Limited no line breaking

A fusion between option 1 and 4 - strictly follow user-provided line breaks inside lists only in regions delimited by a special comment.

 - ✅ Compatible: Comments can be applied inside rebar.config files, etc.
 - ❌ Future Proof: For example this doesn't work with the DELTA_MATRIX
 - ✅ Localized: This only affects a specific list.

### 6. Marco or function call

A macro could also change the indentation.

 - ❌ Compatible: This will require an include file and can not use macro inside rebar.config and other files
 - ✅ Future Proof: It can wrap any expression.
 - ✅ Localized: Easy to target an exact expression.

### 7. macro with magic name

This doesn’t need to be imported, but is redefine in the same file.

```erlang
-define(IDERLFMT(ID), ID).

gen_part({constructed, bif}, TypeName, {_Name, parts, Tag, _Type}) ->
    ?IDERLFMT(emit(["  case Data of",nl,
                    "    L when is_list(L) ->",nl,
                    "      'dec_",TypeName,"'(lists:map(fun(X) -> element(1, ",
                    {call,ber,ber_decode_erlang,["X"]},") end, L),",{asis,Tag},");",nl,
                    "    _ ->",nl,
                    "      [Res] = 'dec_",TypeName,"'([Data],",{asis,Tag},"),",nl,
                    "      Res",nl,
                    "  end"])).
```

 - ❌ Compatible: A macro inside rebar.config and other files
 - ✅ Future Proof: It can wrap any expression.
 - ✅ Localized: Easy to target an exact expression.

## References

  - The discussion started in [issue 19](https://github.com/WhatsApp/erlfmt/issues/19), formatting of DSLish lists.
  - Example of work around for DSLish lists and more examples like matrices, were discussed in [pull request 93](https://github.com/WhatsApp/erlfmt/pull/93)

repository: WhatsApp/erlfmt

gha_language: Erlang

repo_name: WhatsApp/erlfmt


text:
FEB(Front-End-Boilerplate)
================================

Simple front-end development workflow. You can use it for a fast and smooth kick-off of a front-end project or configurate it to your own workflow farther.

New version FEB uses [Gulp](http://gulpjs.com/) for build system. And old version FEB which leverages on [Grunt](http://gruntjs.com/) can be found [here](https://github.com/livoras/feb/tree/grunt).

**NOTE**: FEB in ES6 can be found [HERE](https://github.com/livoras/feb/tree/es6); I strongly recommand you to write JavaScript in ES6 right now.

## Included Tools

It includes

**Build System**

* [Gulp](http://gulpjs.com/) - Front-end task runner and build system.

**Testing**

* [Mocha](http://mochajs.org/) - TDD/BDD test framework.
* [Sinon](http://sinonjs.org/) - Spy and data mocking.
* [Chai](http://chaijs.com/) - Assertions library.

**Preprocessor**

* [CoffeeScript](http://coffeescript.org/) - JavaScript preprocessor.
* [Less](http://lesscss.org/) - CSS preprocessor.

**Modular Development**

* [Browserify](http://browserify.org/) - A super powerful module system.

## Basic Usage

**NOTE**: It assumes that Node.js and NPM have been installed in your system.

Install global dependencies,

```
$ npm install -g browserify gulp
```

Clone project and install development dependencies,

```
$ git clone https://github.com/livoras/feb.git
$ cd feb
$ npm install
```

Then just fly,

```
$ gulp
```

and open your browser to load `http://localhost:8080/bin/index.html` and change source codes of `src`.

## How it works

After running the `gulp` command, things will happen:

1. **Copy HTML**: HTML files directly placed in `src` will be copied into `bin`.
2. **Compile CoffeeSctipt** : CoffeeScript files directly placed in `src/scripts` will be compiled to JS files which will be placed in `bin/scripts`. But note that files placed in subfolders of `src/scripts` won't be compiled but they can and should be required by 'entry' CoffeeScript placed directly in `src/scripts` through Browserify.
3. **Compile Less**: Less files placed in `src/stylsheets` will be compiled to CSS files which will be placed in `bin/stylesheets`. Just like CoffeeScrtipt, only 'naked' Less files will be compiled.
4. **Copy libraries and static resources**: Copy `lib/`, `assets/` folder and all their contents into `bin/`.
5. **Testing**: Specs in `test/specs` will be run and results will be shown in terminal.
6. **Watch changes and livereload**: Files's changes in `src` will make gulp rerun tasks above. And if you start a local server and open your broswer to load pages in `bin/`, changes will trigger automatic refresh of browser if you have the `LiveReload` plugin installed in your [Chrome](https://chrome.google.com/webstore/detail/livereload/jnihajbhpnppcggbcgedagnkighmdlei?hl=en)/[Firefox](https://addons.mozilla.org/zh-CN/firefox/addon/livereload/).

## Distribution

Use

```
$ gulp build
```

to bulid and minify all stuff. A `dist` folder will be created and ready for distribution.

## Examples

TODO

## License

Released under the [MIT license](https://tldrlegal.com/license/mit-license).

repository: mrsai/feb

repo_name: mrsai/feb


text:
## Overview

`kgtk tee` copies its input file (standard input by default) to its primary output file (stdout by default)
and to a secondary output file (specified by `--into-file`).

This command defaults to `--mode=NONE` since it doesn't attach special meaning
to particular columns.

## Debugging Pipes

The primary use envisioned for this command is as a tap in complex pipes,
recording intermediary files that werld normally not be written to
a persistent file system.

The option `--enable=FALSE` may be used to disable writing to the secondary output file.
This may be used in a pipe or script to disable the secondary files when not needed, potentially
loading to a significant performance improvement.

`kgtk tee` might be used in place of [`kgtk cat`](../cat) at the head of a pipe
when the input to the pipe is a single file and the intent is to make a copy of that
file for debugging or to record the inputs to a particular invocation of the pipeline or
script.

## Copying Files

`kgtk tee` may also be useful to copy an input KGTK file to two output KGTK
files, equivalent to running [`kgtk cat`](../cat) twice.  However, this is not its
primary intended purpose.

## Usage

```
usage: kgtk tee [-h] [-i INPUT_FILE] [-o OUTPUT_FILE] --into-file INTO_FILE
                [--enable [ENABLE]] [-v [optional True|False]]

Copy the primary input to the primary output, making a copy to a specified file. This can be used to make a copy of a pipe's data.

This command defaults to --mode=NONE so it will work with TSV files that do not follow KGTK column naming conventions.

optional arguments:
  -h, --help            show this help message and exit
  -i INPUT_FILE, --input-file INPUT_FILE
                        The KGTK input file. (May be omitted or '-' for
                        stdin.)
  -o OUTPUT_FILE, --output-file OUTPUT_FILE
                        The KGTK output file. (May be omitted or '-' for
                        stdout.)
  --into-file INTO_FILE
                        The tee output file (Required)
  --enable [ENABLE]     When True, enable copying the data stream to the
                        --into-file. (default=True).

  -v [optional True|False], --verbose [optional True|False]
                        Print additional progress messages (default=False).
```

## Examples

### Sample Data

Suppose that `file1.tsv` contains the following table in KGTK format:

```bash
kgtk cat -i examples/docs/tee-file1.tsv
```

| node1 | label | node2 | location | years |
| -- | -- | -- | -- | -- |
| john | zipcode | 12345 | home | 10 |
| john | zipcode | 12346 |  |  |
| peter | zipcode | 12040 | home |  |
| peter | zipcode | 12040 | cabin |  |
| peter | zipcode | 12040 | work | 5 |
| peter | zipcode | 12040 |  | 6 |
| steve | zipcode | 45601 |  | 3 |
| steve | zipcode | 45601 |  | 4 |
| steve | zipcode | 45601 |  | 5 |
| steve | zipcode | 45601 | home | 1 |
| steve | zipcode | 45601 | work | 2 |
| steve | zipcode | 45601 | cabin |  |

### Tee in a Pipe

```bash
kgtk cat -i examples/docs/tee-file1.tsv \
   / tee --into-file tee-out.tsv
```

| node1 | label | node2 | location | years |
| -- | -- | -- | -- | -- |
| john | zipcode | 12345 | home | 10 |
| john | zipcode | 12346 |  |  |
| peter | zipcode | 12040 | home |  |
| peter | zipcode | 12040 | cabin |  |
| peter | zipcode | 12040 | work | 5 |
| peter | zipcode | 12040 |  | 6 |
| steve | zipcode | 45601 |  | 3 |
| steve | zipcode | 45601 |  | 4 |
| steve | zipcode | 45601 |  | 5 |
| steve | zipcode | 45601 | home | 1 |
| steve | zipcode | 45601 | work | 2 |
| steve | zipcode | 45601 | cabin |  |

```bash
kgtk cat -i tee-out.tsv
```

| node1 | label | node2 | location | years |
| -- | -- | -- | -- | -- |
| john | zipcode | 12345 | home | 10 |
| john | zipcode | 12346 |  |  |
| peter | zipcode | 12040 | home |  |
| peter | zipcode | 12040 | cabin |  |
| peter | zipcode | 12040 | work | 5 |
| peter | zipcode | 12040 |  | 6 |
| steve | zipcode | 45601 |  | 3 |
| steve | zipcode | 45601 |  | 4 |
| steve | zipcode | 45601 |  | 5 |
| steve | zipcode | 45601 | home | 1 |
| steve | zipcode | 45601 | work | 2 |
| steve | zipcode | 45601 | cabin |  |

### Tee Starting a Pipe

```bash
kgtk tee -i examples/docs/tee-file1.tsv \
         --into-file tee-out.tsv
```

| node1 | label | node2 | location | years |
| -- | -- | -- | -- | -- |
| john | zipcode | 12345 | home | 10 |
| john | zipcode | 12346 |  |  |
| peter | zipcode | 12040 | home |  |
| peter | zipcode | 12040 | cabin |  |
| peter | zipcode | 12040 | work | 5 |
| peter | zipcode | 12040 |  | 6 |
| steve | zipcode | 45601 |  | 3 |
| steve | zipcode | 45601 |  | 4 |
| steve | zipcode | 45601 |  | 5 |
| steve | zipcode | 45601 | home | 1 |
| steve | zipcode | 45601 | work | 2 |
| steve | zipcode | 45601 | cabin |  |

```bash
kgtk cat -i tee-out.tsv
```

| node1 | label | node2 | location | years |
| -- | -- | -- | -- | -- |
| john | zipcode | 12345 | home | 10 |
| john | zipcode | 12346 |  |  |
| peter | zipcode | 12040 | home |  |
| peter | zipcode | 12040 | cabin |  |
| peter | zipcode | 12040 | work | 5 |
| peter | zipcode | 12040 |  | 6 |
| steve | zipcode | 45601 |  | 3 |
| steve | zipcode | 45601 |  | 4 |
| steve | zipcode | 45601 |  | 5 |
| steve | zipcode | 45601 | home | 1 |
| steve | zipcode | 45601 | work | 2 |
| steve | zipcode | 45601 | cabin |  |

### Tee Making Two Copies

```bash
kgtk tee -i examples/docs/tee-file1.tsv \
         -o tee-out1.tsv \
         --into-file tee-out2.tsv
```

```bash
kgtk cat -i tee-out1.tsv
```

| node1 | label | node2 | location | years |
| -- | -- | -- | -- | -- |
| john | zipcode | 12345 | home | 10 |
| john | zipcode | 12346 |  |  |
| peter | zipcode | 12040 | home |  |
| peter | zipcode | 12040 | cabin |  |
| peter | zipcode | 12040 | work | 5 |
| peter | zipcode | 12040 |  | 6 |
| steve | zipcode | 45601 |  | 3 |
| steve | zipcode | 45601 |  | 4 |
| steve | zipcode | 45601 |  | 5 |
| steve | zipcode | 45601 | home | 1 |
| steve | zipcode | 45601 | work | 2 |
| steve | zipcode | 45601 | cabin |  |

```bash
kgtk cat -i tee-out2.tsv
```

| node1 | label | node2 | location | years |
| -- | -- | -- | -- | -- |
| john | zipcode | 12345 | home | 10 |
| john | zipcode | 12346 |  |  |
| peter | zipcode | 12040 | home |  |
| peter | zipcode | 12040 | cabin |  |
| peter | zipcode | 12040 | work | 5 |
| peter | zipcode | 12040 |  | 6 |
| steve | zipcode | 45601 |  | 3 |
| steve | zipcode | 45601 |  | 4 |
| steve | zipcode | 45601 |  | 5 |
| steve | zipcode | 45601 | home | 1 |
| steve | zipcode | 45601 | work | 2 |
| steve | zipcode | 45601 | cabin |  |

gha_language: Jupyter Notebook


text:
# dvbcss-synckit-ios
VideoPlayer Framework

[](---START EXCLUDE FROM DOC BUILD---)
* **[Read the documentation](#read-the-documentation)**
[](---END EXCLUDE FROM DOC BUILD---)
* **[Overview](#overview)**
* **[How to use](#how-to-use)**
* **[Run the example app](#run-the-example-app)**

This framework is designed to play a video file (e.g. an H264-encoded video) or HLS stream and to provide advanced playback adjustment operations. With the playback adaptation features it offers, it is possible to synchronise  video playback to an external timing source.

[](---START EXCLUDE FROM DOC BUILD---)
## Read the documentation
The docs for the library can be read [here](http://bbc.github.io/dvbcss-synckit-ios/latest/VideoPlayer/).
[](---END EXCLUDE FROM DOC BUILD---)

## Overview

The main class for the video player is the [VideoPlayerViewController](http://bbc.github.io/dvbcss-synckit-ios/latest/VideoPlayer/Classes/VideoPlayerViewController.html); it is a UIViewController that encapsulates an AVPlayer and embeds it within a supplied UIView instance. It utilises the AVPlayer object to play a video asset and allows playback to be adapted by skipping frames, changing the speed or changing the (media-timeline, host clock) relationship.

The **VideoPlayerViewController** object allows other components to monitor the progress of the video playback. As the video is loaded and the media-processing pipeline primed, it reports changes to particular video player properties (e.g. asset playable, tracks, duration, loaded time range, current media time) to interested observers via callbacks or notifications.

An object wishing to receive callbacks from the video player must implement the [VideoPlayerDelegate](http://bbc.github.io/dvbcss-synckit-ios/latest/VideoPlayer/Protocols/VideoPlayerDelegate.html) protocol and register itself as a delegate with the **VideoPlayerViewController** object.

## How to use

#### 1. Add the framework to your project

A Cocoa Pod version of this library is not currently available. To use this library, you must add it and its dependencies to your project.

Either include *VideoPlayer* in your workspace and build it; or build it in this repository's [synckit.xcworkspace](../synckit.xcworkspace)

Then add *VideoPlayer.framework* under *Linked Frameworks and libraries* in your project's target configuration.

#### 2. Import the header files

```
#import <VideoPlayer/VideoPlayerError.h>
#import <VideoPlayer/VideoPlayerView.h>
#import <VideoPlayer/VideoPlayerViewController.h>
```

#### Create a VideoPlayerViewController

Create a VideoPlayerViewController instance and set the video asset URL:

```
VideoPlayerViewController videoplayer =
   [[VideoPlayerViewController alloc] initWithParentView:self.VideoView
             Delegate:self];
     url = [NSURL
       URLWithString:@"https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_16x9/bipbop_16x9_variant.m3u8"];

    self.videoPlayerController.videoURL = url;
```

The video player will load the video and start to play.

## Run the example app
A demo app called [TestVideoPlayer](TestVideoPlayer/) is included with the VideoPlayer library. In the VideoPlayer project, choose TestVideoPlayer as the build target and deploy to either a simulator or an iOS device.

## Licence

This framework is developed by BBC R&D and distributed under Licensed under the Apache License, [Version 2.0](http://www.apache.org/licenses/LICENSE-2.0).

© Copyright 2016 BBC R&D. All Rights Reserved


text:
# Easy Button for Renaming from Master to Main

Read and follow:
https://www.hanselman.com/blog/EasilyRenameYourGitDefaultBranchFromMasterToMain.aspx

Then when it comes to setting the default branch in GitHub. I have a token in my password manager so this is fast for me. YMMV.

```
docker run -e GITHUB_TOKEN='XXXYYYZZZ1234' -e GITHUB_REPOSITORY='org/repo' metcalfc/easy-button-main:0.0.1
```

repository: metcalfc/easy-button-main

repo_name: metcalfc/easy-button-main


text:
![CI](https://github.com/komputing/KHex/workflows/Continuous%20Integration/badge.svg)
# What is it?

KHex is a Kotlin multiplatform library to deal with hexadecimal encoding and decoding.

It was incubated as part of [KEthereum](https://github.com/komputing/KEthereum) but then extracted as it can be useful
outside this context.

# Get it

## GitHub Packages

This library is available through GitHub Packages.

![badge][badge-js]
![badge][badge-jvm]

In order to use it, first include the GitHub Packages maven repository inside your project `build.gradle.kts` file:

```kotlin
repositories {
    maven {
        name = "komputing/KHex GitHub Packages"
        url = uri("https://maven.pkg.github.com/komputing/KHex")
        credentials {
            username = "token"
            password = "\u0039\u0032\u0037\u0034\u0031\u0064\u0038\u0033\u0064\u0036\u0039\u0061\u0063\u0061\u0066\u0031\u0062\u0034\u0061\u0030\u0034\u0035\u0033\u0061\u0063\u0032\u0036\u0038\u0036\u0062\u0036\u0032\u0035\u0065\u0034\u0061\u0065\u0034\u0032\u0062"
        }
    }
}
```
When 'username' could be anything and 'password' is an [encoded access token for public access](https://github.community/t/download-from-github-package-registry-without-authentication/14407/44).

## JitPack (JVM only!)

This library is available on Jitpack. The current version is:

[![](https://jitpack.io/v/komputing/khex.svg)](https://jitpack.io/#komputing/khex)
![badge][badge-jvm]

In order to use it, first include the Jitpack maven repository inside your project `build.gradle` file:

```kotlin
repositories {
    maven { url="https://jitpack.io" }
}
```

# Set it up

Include the modules inside your project:

```kotlin
dependencies {
    implementation("com.github.komputing.khex:<module>:<version>")
}
```

Where `<version>` can be either a [release](https://github.com/komputing/KHex/releases) or `<branch>-SNAPSHOT` such as `master-SNAPHOT`.

# Available modules

| Module | Description |
| :----- | :---------- |
| `core` | Contains the core code |
| `extensions` | Contains useful extension functions |

# Usage
## As a function
You can use the functions contained inside this library in order to encode or decode any hexadecimal value.

```kotlin
// Encoding

val myByteValue = 31.toByte()
encode(myByteValue)

val myByteArrayValue = byteArrayOf(31, 32 , 33)
encode(myByteArrayValue)

// Decoding

val myHexString = "0xaa12456789bb"
decode(myHexString)
```

## As extension functions
By including the `extensions` module, you will be able to access a list of extensions functions that can be useful when
working with strings and byte arrays/lists.

```kotlin
// ByteArray
byteArrayOf(1, 2, 3).toHexString(prefix = "0x")
byteArrayOf(1, 2, 3).toNoPrefixHexString()

// List<Byte>
listOf(1.toByte(), 2.toByte()).toHexString(prefix = "0x")
listOf(1.toByte(), 2.toByte()).toNoPrefixHexString()

// StringHexString("0xaa12456789bb").hexToByteArray()
HexString("0xaa12456789bb").has0xPrefix()
HexString("aa12456789bb").prepend0xPrefix()
HexString("0xaa12456789bb").clean0xPrefix()
```

# License
MIT

[badge-js]: http://img.shields.io/badge/platform-js-yellow.svg?style=flat
[badge-jvm]: http://img.shields.io/badge/platform-jvm-orange.svg?style=flat

repository: fullkomnun/KHex

gha_language: Kotlin

repo_name: fullkomnun/KHex


text:
---
title: "Random Maze Generator"
subtitle: "Using Growing Trees Algorthim (Unity)"
thumbnail: "https://previews.123rf.com/images/nasirkhan/nasirkhan1207/nasirkhan120700015/14296032-3d-rendering-of-endless-maze.jpg"
---

**Description:** First Person Game playing through a randomly Generated Maze using Growing Trees Algorthim

**Links**
https://github.com/MichelKassis/ModernCompGames/tree/master/1-RandomMaze


text:
# PPE-Detection-Pose
Pose guided anchoring for detecting proper use of personal protective equipment

## **Table of Contents**

1. [Introduction](#Introduction)
2. [Implementation](#Implementation)
3. [CPPE Dataset](#CPPE-Dataset)
4. [Comparative studies: Pre-trained object detection models](#Comparative-studies-Pre-trained-object-detection-models)

## **Introduction**

The repository presents the implementation of vision-based PPE compliances (e.g., hardhats, safety vests) for workers.

    Overview of the pose-enhanced framework for Non-PPE use recognition

## **Implementation**

### **Worker pose estimation**

Worker pose estimation mainly follows the work of [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose) to detect worker body parts as spatial anchors.

  - Download `pose visualization images` for CPPE Dataset from [Google Drive](https://drive.google.com/drive/folders/1YI_eHcLEJC6-xpNq1AVPVTmVOAgXeCNX?usp=sharing).

  - Download `pose estimation results` in JSON formats from [Google Drive](https://drive.google.com/drive/folders/1TeeXc-Cum1jUZF0qBh-IBDuy5D1RqAnj?usp=sharing).

### **Part attention localization**

The detected keypoints can guide the localization of part attention regions depending on the types of PPE items.

    Overview of the part attention localization module

- COCO keypoint output format

```
{0,  "Nose"}, {1,  "Neck"}, {2,  "RShoulder"}, {3,  "RElbow"}, {4,  "RWrist"}, {5,  "LShoulder"}, {6,  "LElbow"}, {7,  "LWrist"}, {8,  "RHip"}, {9, "RKnee"}, {10, "RAnkle"}, {11, "LHip"}, {12, "LKnee"}, {13, "LAnkle"}, {14, "REye"}, {15, "LEye"}, {16, "REar"}, {17, "LEar"}
```
To navigate through these image patches, body knowledge-based rules are defined using detected 2D keypoints to configure the location and size of the objects’ bounding boxes under various workers’ orientations.

    Head attention regions for hardhat recognition (left image) and Upper-body attention regions for safety vest recognition (right image)

### **Binary classification for PPE and non-PPE use**

Generally, each worker produces two types of part attention regions: `head attention region` and `upper-body attention region` if their body parts are visible in the image. To recognize PPE instances in the body part attention regions, two classifiers - `hardhat classifier f1(X1)` and `vest classifier f2(X2)`, are constructed.

- Data and weights are available in Google Drive. ([hardhat](https://drive.google.com/file/d/1GxqQNbyyuhadFSK01F0QHZ5WvRG7l6gt/view?usp=sharing)    [vest](https://drive.google.com/file/d/1-GGgf-u1xETEGdySGsWcXwES6cP5Y-y1/view?usp=sharing))

- The following pretrained CNN classifier models are available.

    - VGG-16 ([hardhat](https://drive.google.com/file/d/1ECEbHHs57y8k-33oeCdQgkcl1c1eZ8Ed/view?usp=sharing)   [vest](https://drive.google.com/file/d/1W87MPBAPbPjEqdKXQz30xyinFe8iqRnY/view?usp=sharing))
    - VGG-19 ([hardhat](https://drive.google.com/file/d/1roXzH81zRskxftevzmGEmG4nJ44p-MiY/view?usp=sharing)   [vest](https://drive.google.com/file/d/1m7LBIjvUYzyaHKgTvqVxXqGS2BLmopkT/view?usp=sharing))
    - MobileNet ([hardhat](https://drive.google.com/file/d/1_SmwthECpp5HcMW8BNGRTBPvXUCDmXCq/view?usp=sharing)   [vest](https://drive.google.com/file/d/1MlGkxjP3rcTMTnOZQNhbd7p7DsovFwad/view?usp=sharing))
    - ResNet-18 ([hardhat](https://drive.google.com/file/d/1C3OGPYNU1Gkxa-mUO_ALHdF7jE1HjVID/view?usp=sharing)   [vest](https://drive.google.com/file/d/1h6csdAajN4LnIH6zpWYt81WuUulugPc8/view?usp=sharing))
    - ResNet-34 ([hardhat](https://drive.google.com/file/d/1a1fOAoD2qIqXqtMZjK8_0OYZKRTzUuEc/view?usp=sharing)   [vest](https://drive.google.com/file/d/1eDCufPaCWMMu76SaO5TvwKoWMpKin9NJ/view?usp=sharing))
    - ResNet-101 ([hardhat](https://drive.google.com/file/d/1KbkQrYEUmVNSro34OA2nmQ0UtbUNPxaY/view?usp=sharing)   [vest](https://drive.google.com/file/d/1zCn78C_zBPllDJD_sebpRUAXCgF4qZ3j/view?usp=sharing))
    - ResNet-152 ([hardhat](https://drive.google.com/file/d/1GnCZ5csCxftJZH0eAFMix383RVYMzUna/view?usp=sharing)   [vest](https://drive.google.com/file/d/1OdaBKVdXyXXQqpa7LTInqqW1ENMsrXyj/view?usp=sharing))

    hardhhat recognition(left image) and vest recognition(right image)

## **CPPE Dataset**

- Construction Personal Protective Equipment (CPPE) Dataset

  - The proposed `CPPE dataset` consists of 932 images, including 2,747 instances of hardhats, 1,339 instances of safety vests, and 3,428 workers by collecting data from `Pictor-v3 dataset`, `GDUT-HWD dataset`, `Safety helmet wearing detect dataset (SHWD)`, and web-mined images. Data available in [Google Drive](https://drive.google.com/drive/folders/1eZyWbvYRtqr5i0Gx6qYAvIZm1ZC7g56y?usp=sharing).

- Related public PPE datasets

  - The `Pictor-v3 dataset` contains 774 images for public access. Data available in [Google Drive](https://drive.google.com/drive/folders/19uUR6EJPQzMeK0YpsxRm51wMZzDmcsv6).

  - The `GDUT-HWD dataset` contains 3,174 images, which has been split into 1,587 for training (GDUT-HWD trainval) and 1,587 for testing (GDUT-HWD test). It contains 18,893 instances. Data available in [Baidu Yun](https://pan.baidu.com/share/init?surl=_Jj56B05YpUv5iLB9JMb4g) (pwd:dstk).

  - The `SHWD` contains 7581 images with 9,044 safety helmet wearing objects(positive) and 111,514 normal head objects(not wearing or negative). Data available in [Google Drive](https://drive.google.com/open?id=1qWm7rrwvjAWs1slymbrLaCf7Q-wnGLEX).
## **Comparative studies: Pre-trained object detection models**

The following pretrained models on the CPPE dataset are available.

- [YOLO-v3](https://drive.google.com/file/d/1WR_HSEBSVSWz1_FpV5RxiGmDGpXFnhNf/view?usp=sharing)

- [SSD-300](https://drive.google.com/file/d/1RSyJk-Ksugs_rByTjr_qW0C4KWV4GYfe/view?usp=sharing)

- [Faster R-CNN](https://drive.google.com/file/d/1rqveCR3d69eT3fEET4ubx0n3GD-aayjA/view?usp=sharing)

The python demo is used for the quick results preview and test.

## **Citation**

If you find this dataset useful in your research, please consider cite:

```
@article{xiong2021pose,
  title={Pose guided anchoring for detecting proper use of personal protective equipment},
  author={Xiong, Ruoxin and Tang, Pingbo},
  journal={Automation in Construction},
  volume={130},
  pages={103828},
  year={2021},
  doi = {https://doi.org/10.1016/j.autcon.2021.103828}
}
```

## **Acknowledgements**

https://github.com/CMU-Perceptual-Computing-Lab/openpose

https://github.com/open-mmlab/mmpose

GDUT-HWD Dataset credits: https://github.com/wujixiu/helmet-detection

Pictor-v3 dataset credits: https://github.com/ciber-lab/pictor-ppe

SHWD dataset credits: https://github.com/njvisionpower/Safety-Helmet-Wearing-Dataset

repository: arvind-india/PPE-Detection-Pose

repo_name: arvind-india/PPE-Detection-Pose


text:
---
title: "<Query> component"
metaTitle: "Apollo Query Component | GraphQL React Apollo Components Tutorial"
metaDescription: "We will use the Apollo Client Query component from react-apollo. It is a render prop API to fetch data and handle data, loading and error props"
---

import GithubLink from "../../src/GithubLink.js";
import YoutubeEmbed from "../../src/YoutubeEmbed.js";

<YoutubeEmbed link="https://www.youtube.com/embed/60-y9jygWBA" />

In this section, we will implement GraphQL Queries and integrate with the react UI.
With Apollo Client, you can send queries in 2 different ways.

1. Using the `query` method directly and then process the response.
2. New Render Prop API with React. (Recommended)

### Apollo Query Component
The recommended method is to use the render prop method, where you will just pass your GraphQL query as prop and `<Query />` component will fetch the data automatically and will present it in the component's render prop function.

Great! Now let's define the GraphQL query to be used:

Open `src/components/Todo/TodoPrivateList.js` and add the following code:

<GithubLink link="https://github.com/hasura/learn-graphql/blob/master/tutorials/frontend/react-apollo/app-final/src/components/Todo/TodoPrivateList.js" text="src/components/Todo/TodoPrivateList.js" />

```javascript
import React, { Component, Fragment } from "react";

import TodoItem from "./TodoItem";
import TodoFilters from "./TodoFilters";
+ import gql from 'graphql-tag';

+ const GET_MY_TODOS = gql`
+  query getMyTodos {
+    todos(where: { is_public: { _eq: false} }, order_by: { created_at: desc }) {
+      id
+      title
+      created_at
+      is_completed
+  }
+ }`;
```

We have now written the GraphQL query as a javascript constant using the `gql` parser function. This function is used to parse string into a GraphQL query.

What does this query do?
------------------------
The query fetches `todos` with a simple condition; `is_public` must be false. We sort the todos descending by its `created_at` time according to the schema. We specify which fields we need for the todos node.

The query is now ready, let's integrate it with our react code.

```javascript

+ import {Query} from 'react-apollo';

```

`<Query>` component is being imported from `react-apollo`

```javascript

import React, { Component, Fragment } from "react";

import TodoItem from "./TodoItem";
import TodoFilters from "./TodoFilters";
import gql from 'graphql-tag';

const GET_MY_TODOS = gql`
  query getMyTodos {
    todos(where: { is_public: { _eq: false} }, order_by: { created_at: desc }) {
      id
      title
      created_at
      is_completed
  }
}`;

class TodoPrivateList extends Component {
  ...
}

+ const TodoPrivateListQuery = () => {
+  return (
+    <Query query={GET_MY_TODOS}>
+      {({ loading, error, data, client}) => {
+        if (loading) {
+          return (<div>Loading...</div>);
+        }
+        if (error) {
+          console.error(error);
+          return (<div>Error!</div>);
+        }
+        return (<TodoPrivateList client={client} todos={data.todos} />);
+      }}
+    </Query>
+  );
+ };

export default TodoPrivateList;
```

Remember that we wrapped our App component with `<ApolloProvider>` and passed `client` as a prop. We are using the same client prop to send it down to the components.

We are importing the `Query` component from `react-apollo` and the GraphQL query we defined above to fetch the todo data.

Let's remove the mock `todos` data which was used to populate sample data.

```javascript

class TodoPrivateList extends Component {
  constructor(props) {
    super(props);

    this.state = {
      filter: "all",
      clearInProgress: false,
-      todos: [
-        {
-          id: "1",
-          title: "This is private todo 1",
-          is_completed: true,
-          is_public: false
-        },
-        {
-          id: "2",
-          title: "This is private todo 2",
-          is_completed: false,
-          is_public: false
-        }
-      ]
    };

    this.filterResults = this.filterResults.bind(this);
    this.clearCompleted = this.clearCompleted.bind(this);
  }

  filterResults(filter) {
    this.setState({
      ...this.state,
      filter: filter
    });
  }

  clearCompleted() {}

  render() {
-    let filteredTodos = this.state.todos;
+    const {todos} = this.props;
+
+    let filteredTodos = todos;
    if (this.state.filter === "active") {
-     filteredTodos = this.state.todos.filter(todo => todo.is_completed !== true);
+     filteredTodos = todos.filter(todo => todo.is_completed !== true);
    } else if (this.state.filter === "completed") {
-     filteredTodos = this.state.todos.filter(todo => todo.is_completed === true);
+     filteredTodos = todos.filter(todo => todo.is_completed === true);
    }

    const todoList = [];
    filteredTodos.forEach((todo, index) => {
      todoList.push(
        <TodoItem
          key={index}
          index={index}
          todo={todo}
        />
      );
    });

    return (
      ...
    );
  }
}

```

Finally, update the exports to render the function returning the `<Query>` component.

```javascript
- export default TodoPrivateList;
+ export default TodoPrivateListQuery;
+ export {GET_MY_TODOS};
```

Then, we wrap the new functional component with `Query` passing our GraphQL query.

Woot! We have written our first GraphQL integration with React. Easy isn't it?

How does this work?
-------------------
When you wrapped your return with `<Query>` component, Apollo injected props into the component’s render prop function. Most important ones are:

`loading`: A boolean that indicates whether the request is in flight. If loading is true, then the request hasn't finished. Typically this information can be used to display a loading spinner.

`error`: A runtime error with graphQLErrors and networkError properties. Contains information about what went wrong with your query.

`data`: An object containing the result of your GraphQL query. This will contain our actual data from the server. In our case, it will be the todo data.

You can read more about other render props that Apollo passes [here](https://www.apollographql.com/docs/react/data/queries/)

Using the `data` prop, we are parsing the results from the server. In our query, `data` prop has an array `todos` which can be mapped over to render each `TodoItem`.

If you noted, there has been some client side filtering to the todos that are displayed.

repository: hasura/learn-graphql

gha_language: JavaScript

repo_name: hasura/learn-graphql


text:
```@meta
CurrentModule = LanguageServer
```

# LanguageServer

[![Dev](https://img.shields.io/badge/docs-dev-blue.svg)](https://www.julia-vscode.org/LanguageServer.jl/dev)
[![Project Status: Active - The project has reached a stable, usable state and is being actively developed.](http://www.repostatus.org/badges/latest/active.svg)](http://www.repostatus.org/#active)
![](https://github.com/julia-vscode/LanguageServer.jl/workflows/Run%20CI%20on%20master/badge.svg)
[![codecov](https://codecov.io/gh/julia-vscode/LanguageServer.jl/branch/master/graph/badge.svg)](https://codecov.io/gh/julia-vscode/LanguageServer.jl)

## Overview

This package implements the Microsoft [Language Server Protocol](https://github.com/Microsoft/language-server-protocol)
for the [Julia](http://julialang.org/) programming language.

Text editors with a client for the Language Server Protocol are able to
make use of the Julia Language Server for various code editing features:

- [VS Code](https://marketplace.visualstudio.com/items?itemName=julialang.language-julia)
- [Atom](https://github.com/pfitzseb/atom-julia-lsp-client)
- [Vim and Neovim](https://github.com/julia-vscode/LanguageServer.jl/wiki/Vim-and-Neovim)
- [Emacs](https://github.com/julia-vscode/LanguageServer.jl/wiki/Emacs)
- [Sublime Text](https://github.com/tomv564/LSP)

## Installation and Usage
**Documentation**: [![Dev](https://img.shields.io/badge/docs-dev-blue.svg)](https://www.julia-vscode.org/LanguageServer.jl/dev)

```julia
using Pkg
Pkg.add("LanguageServer")
```

Instantiate an instance of the language server with
`LanguageServerInstance` and `run` it:

```julia
using LanguageServer

server = LanguageServerInstance(stdin, stdout, "/path/to/environment")
run(server)
```

license: Unlicense,MIT

detected_licenses: Unlicense MIT

gha_language: Julia


text:
# H3-Pandas ⬢ 🐼
Integrates [H3](https://github.com/uber/h3-py) with  [GeoPandas](https://github.com/geopandas/geopandas)
and [Pandas](https://github.com/pandas-dev/pandas).
[![image](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/DahnJ/H3-Pandas/blob/master/notebook/00-intro.ipynb)
[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/DahnJ/H3-Pandas/HEAD?filepath=%2Fnotebook%2F00-intro.ipynb)
[![image](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Documentation Status](https://readthedocs.org/projects/pip/badge/?version=stable)](https://pip.pypa.io/en/stable/?badge=stable)

---

  ⬢ Try it out ⬢

---

## Installation
### pip
[![image](https://img.shields.io/pypi/v/h3pandas.svg)](https://pypi.python.org/pypi/h3pandas)
[![image](https://pepy.tech/badge/h3pandas)](https://pepy.tech/project/h3pandas)
```bash
pip install h3pandas
```

### conda
[![conda-version](https://anaconda.org/conda-forge/h3pandas/badges/version.svg)]()
[![Anaconda-Server Badge](https://anaconda.org/conda-forge/h3pandas/badges/downloads.svg)](https://anaconda.org/conda-forge/h3pandas)
```bash
conda install -c conda-forge h3pandas
```

## Usage examples

### H3 API
`h3pandas` automatically applies H3 functions to both Pandas Dataframes and GeoPandas Geodataframes

```python
# Prepare data
>>> import pandas as pd
>>> import h3pandas
>>> df = pd.DataFrame({'lat': [50, 51], 'lng': [14, 15]})
```

```python
>>> resolution = 10
>>> df = df.h3.geo_to_h3(resolution)
>>> df

| h3_10           |   lat |   lng |
|:----------------|------:|------:|
| 8a1e30973807fff |    50 |    14 |
| 8a1e2659c2c7fff |    51 |    15 |

>>> df = df.h3.h3_to_geo_boundary()
>>> df

| h3_10           |   lat |   lng | geometry        |
|:----------------|------:|------:|:----------------|
| 8a1e30973807fff |    50 |    14 | POLYGON ((...)) |
| 8a1e2659c2c7fff |    51 |    15 | POLYGON ((...)) |
```

### H3-Pandas Extended API
`h3pandas` also provides some extended functionality out-of-the-box,
often simplifying common workflows into a single command.

```python
# Set up data
>>> import numpy as np
>>> import pandas as pd
>>> np.random.seed(1729)
>>> df = pd.DataFrame({
>>>   'lat': np.random.uniform(50, 51, 100),
>>>   'lng': np.random.uniform(14, 15, 100),
>>>   'value': np.random.poisson(100, 100)})
>>> })
```

```python
# Aggregate values by their location and sum
>>> df = df.h3.geo_to_h3_aggregate(3)
>>> df

| h3_03           |   value | geometry        |
|:----------------|--------:|:----------------|
| 831e30fffffffff |     102 | POLYGON ((...)) |
| 831e34fffffffff |     189 | POLYGON ((...)) |
| 831e35fffffffff |    8744 | POLYGON ((...)) |
| 831f1bfffffffff |    1040 | POLYGON ((...)) |

# Aggregate to a lower H3 resolution
>>> df.h3.h3_to_parent_aggregate(2)

| h3_02           |   value | geometry        |
|:----------------|--------:|:----------------|
| 821e37fffffffff |    9035 | POLYGON ((...)) |
| 821f1ffffffffff |    1040 | POLYGON ((...)) |
```

### Further examples
For more examples, see the
[example notebooks](https://nbviewer.jupyter.org/github/DahnJ/H3-Pandas/tree/master/notebook/).

## API
For a full API documentation and more usage examples, see the
[documentation](https://h3-pandas.readthedocs.io/en/latest/).

## Development
This package is under active development, **suggestions and contributions are very welcome**!

In particular, the next steps are:
- [ ] Improve documentation, examples
- [ ] Greater coverage of the H3 API

Additional possible directions
- [ ] Allow for alternate h3-py APIs such as [memview_int](https://github.com/uber/h3-py#h3apimemview_int)
- [ ] Performance improvements through [Cythonized h3-py](https://github.com/uber/h3-py/pull/147)
- [ ] [Dask](https://github.com/dask/dask) integration trough [dask-geopandas](https://github.com/geopandas/dask-geopandas) (experimental as of now)


text:
# [Point in a unit circle](https://www.codewars.com/kata/point-in-a-unit-circle "https://www.codewars.com/kata/58da7ae9b340a2440500009c")

Write a function that returns `true` if a given point `(x,y)` is inside a unit circle (that is,
a "normal" circle with a radius of one) centered at the origin `(0,0)` and returns `false` if the
point is outside.

## Input

* `x`: The first coordinate of the given point.
* `y`: The second coordinate of the given point.

## Notes

* The region bounded by the circle is considered to be an `open disk`, so points on the boundary of
  the circle should return `false`.
* We are using the euclidean metric.

repository: ParanoidUser/codewars-handbook

gha_language: Java

repo_name: ParanoidUser/codewars-handbook


text:
---
title: Using FCM for Push Notifications
sidebar_title: Using FCM
---

**Firebase Cloud Messaging is required for all managed and bare workflow Android apps made with Expo**, unless you're still running your app in the Expo Go app. To set up your Expo Android app to get push notifications using your own FCM credentials, follow this guide closely.

Note that FCM is not currently available for Expo iOS apps.

## Client Setup

1. If you have not already created a Firebase project for your app, do so now by clicking on **Add project** in the [Firebase Console](https://console.firebase.google.com/).

2. In your new project console, click **Add Firebase to your Android app** and follow the setup steps. **Make sure that the Android package name you enter is the same as the value of `android.package` in your app.json.**

3. Download the `google-services.json` file and place it in your Expo app's root directory.

4. In your app.json, add an `android.googleServicesFile` field with the relative path to the `google-services.json` file you just downloaded. If you placed it in the root directory, this will probably look like

  ```javascript
  {
    ...
    "android": {
      "googleServicesFile": "./google-services.json",
      ...
    }
  }
  ```

5. Confirm that your API key in `google-services.json` has the correct "API restrictions" in the [Google Cloud Platform API Credentials console](https://console.cloud.google.com/apis/credentials). For push notifications to work correctly, Firebase requires the API key to either be unrestricted (the key can call any API), or have access to both `Firebase Cloud Messaging API` and `Firebase Installations API`. The API key can be found under the `client.api_key.current_key` field in `google-services.json`.

  ```javascript
  {
    ...
    "client": [
      {
        "api_key": [
          {
            "current_key" "<your Google Cloud Platform API key>",
          }
        ],
      }
    ]
  }
  ```

  > **Note:** Firebase will create an API key in the Google Cloud Platform console with a name like `Android key (auto created by Firebase)`. **This is not always the same key as the one found in `google-services.json`. Always confirm your key and associated restrictions in the Google Cloud Platform console.**

6. Finally, make a new build of your app by running `eas build --platform android` (or `expo build:android` if you're using the classic build system).

### Bare projects

If you do the above setup before ejecting to bare, your FCM notifications will continue to work properly without any extra steps after ejecting. However, if your project is already ejected to bare and you want to set up FCM retroactively, you'll need to:

- [Set up Firebase in your Android project](/guides/setup-native-firebase/#android-1)
- Copy the same `google-services.json` file into the `android/app` directory. If that file already exists, you should overwrite it.

## Uploading Server Credentials

In order for Expo to send notifications from our servers using your credentials, you'll need to upload your secret server key. You can find this key in the Firebase Console for your project:

1. At the top of the sidebar, click the **gear icon** to the right of **Project Overview** to go to your project settings.

2. Click on the **Cloud Messaging** tab in the Settings pane.

3. Copy the token listed next to **Server key**.

> ** Note:** Server Key is only available in **Cloud Messaging API (Legacy)**, which may be Disabled by default. Enable it by clicking the 3-dot menu > Manage API in Google Cloud Console and follow the flow there. Once the legacy messaging API is enabled, you should see Server Key in that section.

4. Run `expo push:android:upload --api-key <your-token-here>`, replacing `<your-token-here>` with the string you just copied. We'll store your token securely on our servers, where it will only be accessed when you send a push notification.

That's it -- users who run this new version of the app will now receive notifications through FCM using your project's credentials. You just send the push notifications as you normally would (see [guide](sending-notifications.md)). We'll take care of choosing the correct service to send the notification.

## See also

- Having trouble? Visit [Expo's notification FAQ page](./faq.md)

repository: Simek/expo

gha_language: Objective-C

repo_name: Simek/expo