markdown BOMBERMAN.md

BOMBERMAN.md
## The Bomberman
<img src="https://www.retrogamer.net/wp-content/uploads/2013/10/bomberman.jpg" alt="Bomberman Picture" />

Deeply inspired by the original game from late 20th century, this game will be used as a coding exercise in which we expect to practice:
- Data structures (lists, queues, matrices, etc.)
- Algorithms
- Unit testing

As optional goal we have:
- Threads
- Preemptive multi-tasking

## The game
> Note: this expect you to know the basics of the original Bomberman game. If you know nothing about it, please take some time [here](https://en.wikipedia.org/wiki/Bomberman).

- Bomberman is pyromanic guy who really enjoys to play with bombs. He puts bombs for fun but can hurt itself.
- Our game only have one player: Bomberman. So our player should be able to survive (or try to).
- Think on the Game as a board of 16x16 filled with _short_ numbers, where:
  - _-1_ there's a block made by concrete
  - _0_ there's a wood block
  - _1_ there's nothing
  - _2_ there's a bomb
  - _3_ bomberman is there
- Bombs:
  - Explodes in cross by up to 3 block from its epicentre.
  - Explodes after 5 rounds
  - Can't destroy concrete blocks
  - Can blast wood blocks
- Bomberman can perform only one of the following actions per round:
  - Move up
  - Move down
  - Move left
  - Move right
  - Put bomb
- Bomberman will perfom actions in response to the following commands in the keyboard:
  - W - Move up
  - S - Move down
  - A - Move left
  - D - Move right
  - 1 - Put bomb
- Bomberman health is boolean, which means he'll be either dead or alive.
- Bomberman will receive 10 points for every wood block destroyed.
- Rounds are computed every second.
- There are only 5 bombs available
- Player have 1 minute to play

<img src="https://s.aolcdn.com/hss/storage/midas/9b3c467870ebe86fa741a53d4071c04/201057198/bomberman.png" />

## End of Game condition
- Bomberman has died due to a bomb blast
- Run out of time

## Expectations
- Every round should update the screen.
- Player actions should be read from the keyboard by pressing one of valid letters followed by ENTER.
- (as previously described) player can perform only one action per second
- Player score and remaning available bombs should be visible in the screen.

markdown Race 2键盘编程

Race 2.md
1. 按Fn + 右侧Ctrl,进入编程模式,此时键盘按键灯熄灭,Pn灯闪烁
2. 按P(要编程的键)此时,Pn灯常亮
3. 依次按下G、G、P、U、L、L
4. 按Pn,结束编程,Pn灯闪烁
5. 如果想继续给其它按键编程,重复2–4即可,否则按Fn + 右侧Ctrl,Pn灯熄灭,编程结束

markdown 无法连接到服务器

server
could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

`rm /usr/local/var/postgres/postmaster.pid`

markdown Drupal API说明

drupal_api_notes
# Drupal API Notes

General notes on using the Drupal API.

## Importing Classes

Using [this](https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Url.php/function/Url%3A%3AfromUri/8.2.x) as an example.

The import would be:

```
use Drupal\Core\Url;
```

`Drupal\Core` - From the __Namespace__

`Url` - From the __Class__

markdown CONDA ENV

Conda for python环境的基本工作

conda
To create an environment:
```shell
conda create --name myenv
conda create -n myenv python=3.4
conda create -n myenv scipy
conda create -n myenv python=3.4 scipy=0.15.0 astroid babel
```

Create the environment from the environment.yml file:
```shell
conda env create -f environment.yml
```

Sharing an environment
```shell
conda env export > environment.yml
```

Updating an environment
```shell
conda env update --prefix ./env --file environment.yml  --prune
```

Cloning an environment
```shell
conda create --name myclone --clone myenv
```

Building identical conda environments
```shell
conda list --explicit > spec-file.txt
### run on another machine
conda create --name myenv --file spec-file.txt
```

Other
```shell
conda info --envs
## deactivate env
conda deactivate
## remove
conda remove --name myenv --all
```

Saving environment variables
1. Locate the directory for the conda environment in your Anaconda Prompt by running in the command shell %CONDA_PREFIX%.
2. Enter that directory and create these subdirectories and files:
```shell
cd %CONDA_PREFIX%
mkdir .\etc\conda\activate.d
mkdir .\etc\conda\deactivate.d
type NUL > .\etc\conda\activate.d\env_vars.bat
type NUL > .\etc\conda\deactivate.d\env_vars.bat
```
3. Edit .\etc\conda\activate.d\env_vars.bat as follows:
```shell
set MY_KEY='secret-key-value'
set MY_FILE=C:\path\to\my\file
```
4. Edit .\etc\conda\deactivate.d\env_vars.bat as follows:
```shell
set MY_KEY=
set MY_FILE=
```
When you run conda activate analytics, the environment variables MY_KEY and MY_FILE are set to the values you wrote into the file. When you run conda deactivate, those variables are erased.

markdown 混帐

git
# Przydatne polecenia GIT

## basics

* **git init** - inicjalizuje repozytorium GIT w katalogu
* **git clone {adres repozytorium}** - klonuje repozytorium do katalogu
* **git status** - pokazuje status repozytorium (pokazuje informację o zmodyfikowanych, nowych, usuniętych oraz nie należące do repozytorium plikach)
* **git add {ścierzka do pliku}** - dodaje plik do repozytorium (np. `git add folder/plik.php`)
* **git add -A** - dodaje wszystkie nie należące do repozytorium pliki
* **git config --global color.ui auto** - włącza koloryzowanie wyników w konsoli
* **git config --global core.pager '{nazwa}'** - ustawia program do przeglądania logów (brak w konsoli)

## repo

* **git fetch -p** - kasuje branche już nie istniejąca na głównym repo
* **git fetch {nazwa remota}** - pobiera listę zmian z innego repozytorium (w tym pokazuje nowe gałęzie)
* **git remote -v** - lista repo
* **git remote remove {repo}** - usuwa wskazane repo
* **git remote set-url {nazwa repo} {url}** - zmienia adres dla podanego repo
* **git remote add {jakaś nazwa} {adres repozytorium}** - dodaje repozytorium innego użytkownika (`git remote add upstream https://github.com/bluetree-service/idylla.git`)
* **git remote -v** lista wszystkich zewnetrznych repozytoriów
* **git remote rm {nazwa dla remota}** - usuwa zewnętrzne repozytorium
* **git pull** - pobiera zmiany z aktualnej gałęzi
* **git pull {nazwa gałęzi}** - pobiera zmiany z wybranej gałęzi
* **git pull {nazwa remota} {nazwa gałęzi}** - pobiera zmiany z wybranej gałęzi wybranego zewnętrznego repozytorium
* **git pull --all --prune** - ściąga zmiany z repo + kasuje nieużywane branche
* **git pull --tags** - ściąga tagi
* **git push** - wypycha zmiany na aktualnie wybraną gałąź
* **git push {nazwa gałęzi}** - wypycha zmiany na wskazaną gałąź
* **git push {nazwa remota} {nazwa gałęzi}** - wypycha zmiany na gałąź wskazanego repozytorium
* **git push --tags** - wysyła tagi na repo
* **git revert -- {plik}** - revert pojedyńczego pliku
* **git reset --soft HEAD^** - cofa zmiany bez usuwania dodanych plików
* **git reset --soft {numer commita}** - cofa zmiany bez usuwania dodanych plików do wskazanego commita (`git reset --soft b87dcea`)
* **git reset --hard {numer commita}** - cofa zmiany włącznie z usunięciem plików do wskazanego commita (`git reset --hard b87dced`)
* **git reset --merge ORIG_HEAD** - resetuje zmiany z ostatniego merg-a
* **git checkout -- {plik}** - przywraca oryginalny plik
* **git checkout {commit} -- {plik}** - przywraca stan pliku ze wskazanego commita
* **git ls-files** - lista plików z ich ścierzkami w repo (-md + zmodyfikowane i usunięte)
* **git rm --cached (plik/katalog)** - usuwa plik/katalog z repozytorium
  **-r** - dla całych katalogów
* **git rm {plik}** - kasuje z repo plik
* **git rm {plik}** - usuwa plik z repo

## commit

* **git commit** - tworzy commita z aktualnie zmienionych plików
* **git commit -m "wiadomosc"** - tworzy commmita z podaną w cudzysłowach wiadomością
* **git commit --amend -m "{wiadomość}"** - umożliwia zmianę ostatniego commita
* **git commit --amend -m "dsfsdf"** - modyfikuje komentarz ostatniego commita
* **git commit --date="2017-08-18T13:23:41" -m ""** - comit ze wskazaną datą
* **git commit -n** - pomija git hooks
* **git revert {numer commita}** - tworzy nowego commita z cofnięciem zmian ze wskazanego commita
* **git amend** - zmienia poprzedniego commita
* **git shortlog -sn** - ile commitów zrobionych przez userów

## log

* **git log** - wyświetla listę commitów (od najnowszego)
* **git log -{numer}** wyświetla podaną liczbę ostatnich commitów
* **git log --oneline** - wyświetla commity w postaci skróconej
* **git log -{numer} --oneline** wyświetla podaną liczbę ostatnich commitów w postaci skróconej
* **git log --graph --decorate --oneline** - pokazuje graficzny obraz zmian
* **git log --author={nazwa użytkownika}** - pokazuje commity danego użytkownika
* **git shortlog** - lista commitów użytkowników
* **git shortlog -s -n** - lista użytkowników repozytorium
* **git llog --after=2016-08-16 --before=2016-08-30** - commity z podanego zakresu (--until starsze od podanej daty, --since z pred podanej daty)
* **git log --name-status** - podaje statuz zmian przy nazwie pliku (add, mod, delete)
* **git log --stat** - + statystyki zmian w plikach (--shortstat bez ++++---)
* **git log {commit1}..{commit} --no-merges** - pokazuje zmiany pomiędzy 2 commitami bez info o mergach
* **git log -- {plik/katalog}** - log dla pojedyńczego pliku lub wszystkich plików z katalogu
* **git log -5 --pretty=tformat: --numstat** - satystyki zmian w 5 commitach
* **git log --no-merges --pretty=format:'%C(yellow)%h %Cred%ad %Cblue%an%Cgreen%d %Creset%s' --date=iso** - 
* __git log --pretty=format:'* %s (%an)' -n 10__ - pokazuje tylko nazwy commitów
* **git log --pretty=oneline -15 | awk '{print $2}' | sort | uniq | grep -i {ticket} | sed 's/\[\(.*\)\]/\1/g'** - pokaże tylko nazwy ticketów (gdy message zgody z formatem [NAME-111] some message)
* **git log --grep {nazwa}** - szuka commita zawierającego podany tekst
* **git log --author={autor} --name-only** - pokazuje commity wykonane przez autora wraz ze zmodyfikowanymi plikami
* **git log master..develop** - pokazuje różnicę między branchami
* **git log --pretty=format:'%Cred%h%Creset %C(bold blue)<%an>%Creset%C(yellow)%d%Creset %Cgreen(%cr)%Creset%n%w(80,8,8)%s' --graph** - drzewko logów
* **git log --pretty=format:'%C(yellow)%h %Cred%ad %Cblue%an%Cgreen%d %Creset%s' --date=iso** - pokazuje logi (hash, data+czas, autor, opis)
* **log --pretty=format:'%C(yellow)%p..%h %C(white dim)%cd %<|(49,trunc)%an %C(reset)%s' --date=short --abbrev=8 --no-merges** - logi z zakresem branchy
* **git log --oneline {branch1} --not {branch2}** - pokazuje różnice w commitach między branchami (branche których brakuje w branch2 a są w branch1)
* **git log --oneline --grep {branch} --name-only | grep -v {branch} | sort | uniq** - pokazuje tylko zmienione pliki dla podanego brancha

## merge

* **git merge {nazwa gałęzi}** - dołączenie zmian ze wskazanej gałęzi
* **git merge {nazwa remota}/{nazwa gałęzi}** - dołączenie zmian ze wskazanego remota i gałęzi
* **git merge --abort** - przerywa łączenie (możliwe, gdy wystąpią konflikty)
* **git merge --continue** - po rozwiązaniu konfliktów zapisuje zmiany
* **git merge --revert** - cofa wszystkie wprowadzone zmiany

## rebase

* **git rebase {nazwa gałęzi}** - dołączenie zmian ze wskazanej gałęzi z zachowaniem kolejności wprowadzania zmian
* **git rebase {nazwa remota}/{nazwa gałęzi}** - dołączenie zmian ze wskazanego repozytorium i gałęzi z zachowaniem kolejności wprowadzania zmian
* **git rebase --abort** - przerywa łączenie (możliwe, gdy wystąpią konflikty)
* **git rebase --continue** - po rozwiązaniu konflitów zapisuje zmiany
* **git rebase --interactive {commit}** - pozwala wybrać commity które zostaną dołączone (lub modyfikować)
* **git rebase --interactive '{hash}^'** - umożliwia edycję commitów do podanego hasha

## diff

* **git diff --name-only {gałąź 1} {gałąź 2}** - porównanie dwóch gałęzi
* **git diff --cached** - pokazuje wszystkie gotowe do commitu zmiany
* **git diff --cached | grep -wi {fraza}** - szuka podanej frazy w commicie
* **git diff --cached | grep -wiHn -C 10 {fraza}** - jw ale pokazuje 10 lini przed i po znalezieniu + numery linni i nazwę pliku
* **git diff --name-only HEAD HEAD~14** - pokazuje zmieniony pliki z 14 ostatnich commitów
* **git diff {commit1}..{commit2}** - pokazuje różnicę między 2 commitami
* **git diff {commit1}..{commit2} {plik}** - pokazuje różnicę między 2 commitami dla podanego pliku
* **git diff {commit} -- plik** - pokazuje zmiany w pliku od podanego commita
* **git diff-index --name-only --cached --diff-filter=ACMR HEAD**
* **git diff {commit}** - różnica od podanego commita
* **git diff {gałąź 1} {gałąź 2} -- {plik}** - dif dla pojedynczego pliku między gałęziami
* **git diff {plik}** - pokazuje zmiany dokonane na pliku (nie zacommitowane)
* **git diff .** - pokazuje zmiany dokonane na wszystkich zmienionych plikach
  * **--color-words** - pokaże bez +/-

## show

* **git show {commit}** - szczegóły podanego commita
* **git show --name-only {commit}** - nazwy zmodyfikowanych plików w commicie
* **git show --name-only {commit}** - pokazuje tylko listę zmodyfikowanych plików z commita
* **git show {commit}** - pokazuje zmiany w commicie
* **git show HEAD:{plik}** - pokazuje zmiany tylko w konkretnym pliku
* **git show {commit} --name-only -p -5** - pokazuje 5 poprzednich comitów od podanego
  * **--color-words** - pokaże bez +/-

## branch

* **git branch** - lista gałęzi w repozytorium
* **git branch -a** - pokazuje listę wszystkich gałęzi (łącznie z tymi z repo, same z repo `-r`)
  * **-r** - tylko gałęzie zdalne
* **git branch -d {nazwa gałęzi}** - usuwa wskazaną gałąź
* **git branch --merged** - lista zmergowanych branchy
* **git branch --merged | git branch -d** - kasuje wszystkie zmergowane branche
* **git branch -r | awk '{print $1}' | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | awk '{print $1}' | xargs git branch -d** - kasuje wszystkie nie używane/ nie istniejące branche
* **git branch rename {1} {2}** - zmiana nazwy brancha
* **git branch | grep -v "master" | xargs git branch -D** - kasuje wszystkie branche z wyjątkiem mastera
* **git checkout {nazwa gałęzi}** - przełącza na podaną gałąź
* **git checkout -b {nazwa gałęzi}** - tworzy nową gałąź o podanej nazwie i automatycznie przełącza się na niego
* **git checkout -b {nazwa gałęzi} {nazwa remota}/{nazwa gałęzi}** - tworzy nową gałąź o podanej nazwie, pobiera zmiany ze wskazanego repozytorium i gałęzi i automatycznie przełącza się na niego
* **git checkout {nazwa pliku}** - cofa zmiany na podanym pliku
* **git branch rename {stara nazwa} {nowa nazwa}** - zmiana nazwy brancha
* **git branch -m {stara nazwa} {nowa nazwa}** - zmiana nazwy brancha

## stash

* **git stash** - zapisuje nowe i zmodyfikowane pliki do pamięci podręcznej
* **git stash pop** - przywraca zapisane pliki z pamięci podręcznej
* **git stash pop --index 1**
* **git stash pop --index 454aa619**
* **git stash pop --index stash@{1}**
* **git stash pop 1**
* **git stash pop 454aa619**
* **git stash pop stash@{1}**
* **git stash save "{tekst komentarza}"** - zapisuje stash z komentarzem
* **git stash show stash@{1}**- pokazuje zachowane zmiany
* **git stash list** - lista zachowanych zmian
* **git stash branch {name}** - stworzy nową gałąź, pobierze ostatnią wersję plików
* **git stash push -m {message} {plik}** - stashuje z komentarzem wskazany plik

## tag

* **git tag -l** - lista tagów
* **git tag -a {} -m '{}'** - 
* **git tag --sort=v:refname |  tail -2 | xargs printf \"%s..%s\" | xargs git log --no-merges --pretty=format:%s** - wyświetla wszystkie commity między 2 ostatnimi tagami (| grep -o "SOC-[0-9]*" | sort --unique** - tickety)
* **git tag -l "{pattern}"** - lista tagów pasująca do wzorca
* **git tag -d {tag} && git push origin :refs/tags/{tag}** - kasuje taga lokalnie + repo
* **git lasttag** - pokazuje ostatniego taga

## Inne

* **git reset --soft HEAD~3**; __git commit -m__ - pozwala na cofnięcie się 3 commity do tyłu, i połączenie ich w jeden (git commit --amend)
* **git rebase -i {commit}** - j/w ale commity wybierane ręcznie

markdown 読书规

dokusyo_rule.md
- 要約のフレームワーク。問い(≒タイトル)を持って、文章を読む。問いと答えが、要約となる。なので、答えを先に見つける。その他は補足情報として捉える。ただ、気になるところはポイントして覚えておく。

markdown 设计规则

design_rule.md

### そのほか
- 監査ログはフィルタリングしない。不足するよりは、余分に取得したほうがダメージが少ないから。

markdown レスポンシブ,カラム,インナー

レスポンシブ,カラム,インナー

.markdown
レスポンシブ、カラム、インナー
---------------


A [Pen](https://codepen.io/anonie/pen/PoYmoGr) by [anonie](https://codepen.io/anonie) on [CodePen](https://codepen.io).

[License](https://codepen.io/anonie/pen/PoYmoGr/license).
index.html
<div class="inner inner-lg">
	<div class="items">
		<div class="item">item01</div>
		<div class="item">item02</div>
		<div class="item">item03</div>
	</div>
</div>
style.scss
*, *::before, *::aftr {
	box-sizing: border-box;
}

.inner {
	width: calc( 100% - 256px);
	max-width: 1200px;
	margin: 0 auto;
	background: #eee;
}
@media screen and (max-width: 1520px) and (min-width: 1281px) {
	.inner {
    width: calc(100% - 216px);
	}
}
@media screen and (max-width: 1280px) and (min-width: 768px) {
	.inner {
			width: calc(100% - 184px);
	}
}
@media screen and (max-width: 767px) {
.inner {
    width: 84%;
    max-width: 100%;
	}
}
.inner-lg {
	max-width: 1480px;
}

.items {
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
}
.item {
	width: calc( 100% / 3 - ( 60px * 2 / 3));
	max-width: 420px;
}
.item {
	border: 3px solid #ccc;
	background: #fff;
	height: 200px;
	margin-bottom: 80px;
}
@media screen and (max-width: 1279px) and (min-width: 768px) {
	.item {
			width: calc( 100% / 2 - (32px));
			max-width: 100%;
	}
}
@media screen and (max-width: 767px) {
	.item {
			width: 100%;
			max-width: 100%;
			margin-bottom: 24px;
	}
}

.md
## note

### .inner
- width: calc( 100% - 左右合計マージンpx )にすることで一定の左右マージンを保ちながら最大幅を確保  
- max-widthでコンテナ幅の広がり過ぎを制御  
- 左右中央寄せはここで指定  
- 各デバイス用にマージンを調整したものを用意する  

### .inner-lg  
- .innerの最大コンテナ幅を超える要素を作りたい場合のmodifier  

markdown 我的政策备忘单

iam_policy_cheatsheet.md

ポリシー適用のイメージ
![](https://cdn-ssl-devio-img.classmethod.jp/wp-content/uploads/2019/08/Policy.png)
[参照元](https://dev.classmethod.jp/cloud/aws/learn-aws-policy-documents-with-examples/)