OmniAICreator/Qiita-1.07M huggingface dataset:
自分のよくわからないIT用語をまとめたメモ。

IT用語がごちゃごちゃになっているので個人的な頭のメモです。
追加編集していきます。
参考にはしないでください・・・。


| 言葉| 意味|
|:---------|:---------|:---------|:---------|:---------|
| あ|  |
| アンチパターン| あまりオススメできないコードの書き方のこと。 |
| Ajax　えいじゃっくす|  Asynchronous Javascript+XML　えいしんくろねす　じゃばすくりぷと　えっくすえむえる。JavaScriptとXMLを使って非同期にサーバとの間の通信を行うこと。|
| Emulator　えみゅれーた　エミュレータ　| ある環境に近い環境を作り出すソフトウェアやハードウェアにより、ある環境に近い動きを実現させること。 |
| ANR Application Not Responding | アプリを強制終了するエラー。 |
| か|  |
| 継続的インテグレーション　けいぞくてきいんてぐれーしょん|  CIと同じ意味。|
| 構造化　こうぞうか| 構造化されたプログラムの作られた要素の使い方や、段階的な詳細したものを特徴とするプログラミングの手法のこと。|
| container　こんてな　コンテナ　| OS上に他のプロセスから離れたアプリケーション実行環境を作ることで、仮想的な動作環境をより少ないコンピュータの資源で作ることができる技術のこと。|
| contribute　こんとりびゅーと|  貢献者。参加する人。|
| component　こんぽーねんと　コンポーネント| 部品、成分、構成要素などの意味を持つ。ITだと、機器やソフトウェア、システムを作る部品や要素などのこと。 |
|構造化データ　こうぞうかでーた|HTMLで書かれた情報が何を意味するのかを、検索エンジンやその他のクローラーに理解できるようタグ付けしたもの。言葉に対して意味をメタデータとして持たせることで、ロボットがそのもつ内容の解釈を簡単にする。|
| が| |
| さ| |
| サブルーチン| コンピュータプログラミングにおいて、プログラム中で意味や内容がまとまっている作業をひとつの手続きとしたもの。 |
| CI　しーあい|  継続的インテグレーションのこと。ビルドやテストなど自動化できるものを使って行うことで、統合を早め、バグを早期に発見して対処すること、ソフトウェアの品質を高めること、そしてソフトウェアの更新を検証してリリースするためにかかる時間を短くすることができるプログラミングの手法のこと。https://aws.amazon.com/jp/devops/continuous-integration/|
| シリアライズ| 複数の並列に並んでいるデータを直列にして送ること。|
| スコープ　| メソッドとフィールドが使える範囲のこと。 |
| 双方向　そうほうこう|通信や放送などで、情報伝達の方向が一方向でなく、受信側からも発信できる方式のこと。 |
|疎結合　そけつごう　|2つのシステムが緩やかに結びついた状態のこと。 |
| ざ|  |
|gRPC　じーあーるぴーしー | RPC (Remote Procedure Call　りもーとぷろしーじゃこーる)を実現するためにGoogleが作ったプロトコルの1つのこと。Protocol Buffers を使ってデータをシリアライズし、速い通信をできる。https://grpc.io/ |
| JSON　じぇいそん　| JavaScript Object Notation　じゃばすくりぷと　おぶじぇくと　のけーしょん。 |
| GCP　じーしーぴー|Google Cloud Platform　ぐーぐる　くらうど　ぷらっとふぉーむ。Google がクラウド上で提供するサービスのこと。https://cloud.google.com/?hl=ja |
|スタック| FILO（先に入ったものを後で出していくやり方）で、データを管理、格納をしたり、取り出したりをするデータ構造のこと。領域は、メモリ上に確保されることが多い。|
| た|  |
| テスタビレティ| ユニットテストができるかの考え方のこと。|
|データバインディング　Data Binding | XMLなどのデータソースとアプリケーションやウェブページ（ウェブアプリケーション）のユーザインタフェースを静的または動的に結合する技術のこと。https://developer.android.com/topic/libraries/data-binding/index.html?hl=ja |
| だ||
| データバインディング||
| デプロイ　でぷろい| 元は配置する、展開するなどの意味。システムを使える状態にすることである。|
| な| |
| は|  |
| 標準ライブラリ| 言語などで決まって最初からあるライブラリのこと。ライブラリとは、ある程度まとまった機能を提供するプログラムの部品のこと。それぞれが部品のようになっていて、「入出力」「文字列処理」「時間」など、特定の処理を行いたい時に必要な分だけ読み込んで使うことができるようになっている。|
| ば|  |
| バインド|元は結びつける、関連付ける、紐付けるなどの意味。|
| ぱ| |
|public　ぱぶりっく|元は公的な、公有の、公共の、公開の、などの意味。プログラミングでは、変数や定数、関数、メソッドなどが、別のクラスなどからも参照できること。|
| ま|  |
| マルチスレッド|  プログラムは、基本的に1行ずつコードが実行されながら動いていくが、処理Aと処理Bを並行して実行することができる。（図がわかりやすい）http://www.atmarkit.co.jp/ait/articles/0503/12/news025.html|
| モック アップ　もっくあっぷ| 実物と同じ大きさに作った模型のこと。 
| や| |
| YAMLファイル　やむるふぁいる|YAMLとは、構造化データ（HTMLで書かれた情報が何を意味するのかを、検索エンジンやその他のクローラーに理解できるようタグ付けしたもの）やオブジェクトを文字列にシリアライズ（複数の並列に並んでいるデータを直列にして送ること）するためのデータ形式の一種。https://ja.wikipedia.org/wiki/YAML  |
| ら|  |
| ランタイム環境|  プログラムを動かすときのこと。|
|RFC りくえすと　ふぉー　こめんつ| IETF（Internet Engineering Task Force）による技術仕様の保存、公開形式である。内容には特に制限はないが、プロトコルやファイルフォーマットが主に扱われる。https://ja.wikipedia.org/wiki/Request_for_Comments|
| Resource　りそーす| 元は資源という意味。OSで使用する特別なメモリ領域のことや、プロジェクトの遂行に必要な人手や資金、設備なども指す。 
|Remote Procedure Call　りもーとぷろじゃーこーる |遠隔手続呼出とも呼ばれる。ネットワーク上の異なるコンピュータ間（または1台のコンピュータの内部）で、稼働するプログラム同士で通信をするために使用するプログラムのこと。https://ja.wikipedia.org/wiki/遠隔手続き呼出し|
| わ|  |
Pyscripter日本語化と空白選択の解除

# まえがき
Python3を勉強するためにPycharmを導入するも、評価版の期限1ヶ月が経過し、使用できなくなる。
そこで、今後はPyscripterというIDEを使って勉強しようと思い立つ。
->インストール終わったものの日本語じゃないからなんかやりにくい。
->空白をクリックするとそこにカーソルが合わさるのがやりづらい。

（ついでにQiitaでのMarkDownの書き方も勉強しようと思ったので記事にした。）

![WS000034.JPG](https://qiita-image-store.s3.amazonaws.com/0/224555/f9c92ff6-28da-9a5d-edc4-568ad756bf5f.jpeg)



![WS000041.JPG](https://qiita-image-store.s3.amazonaws.com/0/224555/5d386068-f652-2fd0-0e86-aafde8771766.jpeg)



これらをなんとかしたい


## 実行環境
Anaconda 1.6.5
Pyscripter 3.2.2.0
Python 3.6.3


# 方法
Pyscripterのインストール方法は省く


## 日本語化
**注意：たぶん完全な日本語ではないです。**

### ツールバー[View]->[Language]->[Japanese]をクリック

![WS000042.JPG](https://qiita-image-store.s3.amazonaws.com/0/224555/c5399609-da6c-b52f-fb77-a0b716b15230.jpeg)



### 日本語化完了


![WS000043.JPG](https://qiita-image-store.s3.amazonaws.com/0/224555/0c981af5-4a71-9f75-25cc-77899629ab99.jpeg)



## 空白選択の解除

### ツールバー[ツール]->[オプション]->[エディタ オプション]をクリックする。

![WS000045.JPG](https://qiita-image-store.s3.amazonaws.com/0/224555/c0d4f9c7-466f-bb5e-ee19-3f014c878939.jpeg)



### タブ[オプション]->[行の最後を超えてスクロール]のチェックを外す。

![WS000046.JPG](https://qiita-image-store.s3.amazonaws.com/0/224555/8fbf1eca-3dc2-9f86-1567-b7b603fe03a0.jpeg)

[OK]をクリックする。

### 空白選択の解除完了

![WS000047.JPG](https://qiita-image-store.s3.amazonaws.com/0/224555/78882b98-2a63-93fb-2e99-543dbed5945a.jpeg)


# あとがき
MarkDownの書き方間違ってたりおかしいってところがあればご教授いただければ幸いです。
STM32の開発をしてみよう（AVTokyo2017バッジをHack）

AVTokyo バッジを使ったワークショップのテキストです




![imabge](https://qiita-image-store.s3.amazonaws.com/0/165002/1be22e60-c451-a351-1b2f-820dbe1d2449.png)

このバッジは何？ AVTOKYOの バッジサポートページhttp://ja.avtokyo.org/avtokyo2017/badge


流れ：1.開発環境インストール 2.LED点滅 3.画面表示 4.CTF問題作成 5.BadUSB


## 1.開発環境インストール 
ボードの解説、開発環境セットアップ、サンプルの実行inside of 「AVTOKYO 10th HACK BADGE」
https://qiita.com/lowlevel/items/0fd3402e0dd4584de65f

なお、今回のワークショップではST-Linkは使いません。Windowsの方は「ST-Linkを使う場合はST-Linkのドライバのインストールも必要となります」の箇所は、省略して下さい。

## 2.LED点滅 

先のページに掲載の、サンプルプログラムを実行してみます。

## 3.画面表示 

OLEDディスプレイに描画するサンプルプログラムを動かします。
「SPI SD1306 OLED を STM32Duino ( Arduino IDE + One of BluePill : Robotdyn STM32F103 Dev.Board )で動かす」
こちらを参照してください
https://qiita.com/nanbuwks/items/25ccb1ac38ebb237f94a


## 4.CTF問題作成
「software description of AVTOKYO 10th HACK BADGE」
https://qiita.com/lowlevel/items/12c55ce9260e7d369989
に、AVTOKYOに配布したもののソースコードが記載されています。

これを書き込むと本来のソフトが復元します。

また、miniCTFの問題はハードコーディングされています。問題を書き換えて自分のCTFを作ってみましょう。


## 5.BadUSB

STM32でHIDデバイスの機能が使えるようになりました。この技術を使えば、キーボードから入力があったように振る舞うことができます。

当然、悪いこともしまくりです（BadUSB）。
「STM32F103でHIDデバイス」
https://qiita.com/nanbuwks/items/f7f2377c2b252e936baa

この記事ではキーボードのエミュレーションのみですが、マウスやUSBストレージなどもエミュレーションできます。自信のある方はチャレンジしてみてください。

# より詳しく知りたい

以下の勉強会で取り上げています。月例の勉強会でご質問などお聞きします。MLやSlackもありますのでご参加下さい。

日本Androidの会秋葉原支部ロボット部
https://groups.google.com/forum/#!forum/robot-android-group-japan-akb
低レベル勉強会
https://lowleveltokyo.connpass.com/
勾配の消失

keras mnist datasetを使用してモデルをトレーニング 

実験で、Layerを必要以上に深くしてみると


```python
model.add(Dense(64, activation='relu', input_dim=784))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
```
![Vanishing_Exploding gradients.acc.png](https://qiita-image-store.s3.amazonaws.com/0/239266/573a672d-9b20-0cfc-c471-294ca5b2e334.png)

![Vanishing_Exploding gradients.loss.png](https://qiita-image-store.s3.amazonaws.com/0/239266/63496416-3be9-e5d7-259a-57497100759c.png)

これは恐らく爆発/勾配の消失が発生している

weightとbiasの中身を見ると、全て「nan」になってしまっている

1/2*Lの公式でアクティベーションは減少するため、DNNではweightの初期化の方法が重要
Ubuntu 16.04 LTS > USBマイクロアダプタ + USB Bluetooth ワイヤレスヘッドホン(Jaybird RUN)使用

```txt:動作環境
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 16.04 LTS desktop amd64
TensorFlow v1.2.1
cuDNN v5.1 for Linux
CUDA v8.0
Python 3.5.2
IPython 6.0.0 -- An enhanced Interactive Python.
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
scipy v0.19.1
geopandas v0.3.0
MATLAB R2017b (Home Edition)
ADDA v.1.3b6
Jaybird RUN (ワイヤレスイヤホン)
```

### USBマイクロアダプター

BUFFALO Bluetooth4.0 + EDR/LE対応 USBマイクロアダプター BSBT4D100
http://buffalo.jp/product/peripheral/wireless-adapter/bsbt4d100/

- Class 1 
- 最大通信距離100m

### Jaybird RUN

https://jaybirdsport.com/ja-jp/run-true-wireless-sport-headphones/run-specs.html

### Ubuntu 16.04 LTS設定

1. BSBT4D100をUSBポートに挿入
    - lsusb
        - `Bus 001 Device 004: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)`
2. 設定 > ハードウェア > Bluetoothにて"+"を選択
3. Jaybird RUNをペアリング
4. サウンドの設定を選択
5. サウンドの出力先を「Jaybird RUN」を選択
    - High Fidelity Playback (A2DP Sink)に変更
        - Headset Head Unit(HSP/HFP)だと片方のヘッドホンでしか聞こえず、音が悪い

### 接続状況

- 階段を上がったところでは接続は維持
- 階段を下がったところでは接続が切れる
    - iPad mini4とのペアリングでは切れなかった

睡眠前の英語リスニング用には使用可能
活動範囲が大幅に広がった。

by アリストレス・オナシス
> 世界は自由だ
私は好きなことをやる

### 関連

- [Bluetooth > jaybird RUN対応デバイス](https://qiita.com/7of9/items/fd1d68e572211410785b)

### 英語リスニング

NetflixでStar Trek Next Generationを視聴してみた。

字幕が表示されてから、音が到達するというdelayはある。
字幕を見ながらのリスニングには不向きである。

就寝前のリスニングでは音だけ聞こえればいいので問題はないだろう。
postgresqlのCSV流し込みをWindowsのbatファイルから実行するサンプル

CSVファイルをPostgresqlに流し込みたいときに、
流し込み対象ファイルの置いてあるフォルダにこのbatファイルを格納して、
batファイルをダブルクリックすれば流し込みされる。

もしも複数件見つかってしまったら（そんなことはないようにするが）、
最後に見つかったものが流し込まれる。

### 流し込み対象ファイル（180218_import.csv）
```
h1,h2
1,2
3,4
5,6
7,8
```

### 流し込み用batファイル
```shell
@echo off

rem setup path
set TIME_STAMP=%DATE:~-10,4%%DATE:~-5,2%%DATE:~-2%%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%
set CURRENT_PATH=%~dp0
FOR /F %%i in ('dir /b *import.csv') do set IMPORT_FILE=%CURRENT_PATH%%%i

rem postgres info
set HOST=localhost
set PORT=5432
set USERID=postgres
set DBNAME=postgres

rem exec query
psql -h %HOST% -p %PORT% -U %USERID% -d %DBNAME% -c "CREATE TABLE import_%TIME_STAMP% (h1 text, h2 text)"
psql -h %HOST% -p %PORT% -U %USERID% -d %DBNAME% -c "COPY import_%TIME_STAMP% FROM '%IMPORT_FILE%' with csv header"

pause
```
【GoogleComputeEngine】Windowsインスタンスの新規作成時のID/PW設定

ほとんど自分用メモですが､GCPのコンソール画面ではっきりと書いてなくて少し困ったので忘備録｡

1. ComputeEngineでWindowsServerの新規インスタンスを立ち上げ

2. 初期状態ではWindowsのユーザーがプロジェクト名となっている

3. インスタンスを起動しWindowsパスワードを設定よりユーザー名を設定

4. Windowsの機能でより新規ユーザーとPWを設定する

ちなみにディスクの追加もGCPの管理画面でディスクを作成した上でWindowsの管理から追加します
【Windows】myWindowsHacks

# はじめに
Time is Money!
Windows(基本的にはWindows10を想定)であまり有名ではないショートカットやパスについて紹介しています。


## 起動時にプログラムを呼び出す
```
# 下記にショートカットを置いておけばOK
%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
# Win+Rで「shell:startup」でもいける
shell:startup
```

## Winキーのランチャー
```
Winキーで検索した場合、下記フォルダが検索対象になっている
C:\ProgramData\Microsoft\Windows\Start Menu\Programs
```

## エクスプローラから階層でコマンドプロンプトを開く
```
エクスプローラ → 「Alt+D」でアドレスバーへ → 「cmd」でそのディレクトリでコマンドプロンプトが開くことができる
```

## コマンドプロンプトでエクスプローラを起動する
```
explorer .
もしくは
start .
```
pythonでwsse認証を用いて、はてなブログにエントリーを投稿する

# はじめに
　はてなブログに自動でエントリーを投稿したい事があったので、その時に書いたものをメモ代わりにおいておきます。一応全体的な機能としては、スクレイピングした情報をはてなブログに自動で下書き投稿するというものでしたが、今回は**「はてなブログに下書き投稿する」**というコードだけ置いて置きます。

#コード
```python
import datetime
import random
import hashlib
import base64
import requests
import time


def create_wsse(username, password):
    created = datetime.datetime.now().isoformat() + "Z"
    b_nonce = hashlib.sha1(str(random.random()).encode()).digest()
    b_digest = hashlib.sha1(b_nonce + created.encode() + password.encode()).digest()
    s = 'UsernameToken Username="{0}", PasswordDigest="{1}", Nonce="{2}", Created="{3}"'
    return s.format(username, base64.b64encode(b_digest).decode(), base64.b64encode(b_nonce).decode(), created)


def get_entry_data(news_cards):

    TEMPLATE = """<?xml version="1.0" encoding="utf-8"?>
    <entry xmlns="http://www.w3.org/2005/Atom"
           xmlns:app="http://www.w3.org/2007/app">
      <title>{title}</title>
      <author><name>{name}</name></author>
      <content type="text/plain"><![CDATA[{content}]]></content>
      <updated></updated>
      <app:control>
        <app:draft>yes</app:draft>
      </app:control>
    </entry>
    """

    #投稿するコンテンツの作成
    entry_data = ''
    for news_card in news_cards:
        entry_data += news_card + "\n"

    #テンプレにtitle, name, contentを挿入
    entry = TEMPLATE.format(
            title = <title>,
            name = <name>,
            content = entry_data,
            draft = "yes"
            )

    return entry

def post_news_hatena(END_POINT,username, api_key, entry):
    wsse =  create_wsse(username, api_key)
    r = requests.post(END_POINT + "/entry", data=entry.encode('utf-8'), headers={'X-WSSE': wsse})
    if r.status_code == 201:
        print(r.text)
        print(u"\n投稿しました。")
    else:
        print(r.text)
        print(u"\n投稿に失敗しました。")


```

実行するコードは↓です。今回はエントリーの作成を`news_cards`というリストを引き数にとって作成しています。今回は例として、スクレイピングした情報をリストに変換していたのでこの様にしました。この辺はやりたいことに応じて変えると良いと思います。

```python
USER_NAME = <USER_NAME>
API_KEY = <API_KEY>
END_POINT = 'https://blog.hatena.ne.jp/{username}/{username}.hatenablog.com/atom'.format(username=USER_NAME)


#エントリーの作成
entry = get_entry_data(news_cards)

#投稿
post_news_hatena(END_POINT,USER_NAME, API_KEY, entry)
```

#おわりに
ブログに自動で投稿する機会はあまりないかもしれませんが、wsse認証を作ったリクエストの送り方としては使えるかもしれません。wsse認証自体あまり見ない気もしますが...

参考：[はてなブログAtomPub](http://developer.hatena.ne.jp/ja/documents/blog/apis/atom)
EC2インスタンスをスケジュール起動＆対象をタグで管理 (祝日対応)

# この記事の概要
## 概要
- CloudWatch+Lambdaでスケジュール起動する。
- 特定のタグを付けたEC2インスタンスのみ起動させる。
- 祝日は起動しないようにする。

## 背景
- インスタンスのタグだけで自動起動On/Offを切り替えられた方が、見えやすいので利用者にとってありがたそう。
- 単に自動起動するだけだと散々先人が通ってきた道なので、祝日は起動しないようにするくらいは(記事に)したい。
	- 休日分のインスタンス稼動コスト減＆わざわざ休日に自宅からEC2止めるなんてことをしたくない。

## 前提
- EC2インスタンスの作成については触れません。
- AWSマネジメントコンソール(以下、コンソール)は、日本語で利用しています。
- 自力でLambdaを動かせる人を対象にしています(ハンドラとかロールとかには触れてません)。
- Pythonに関する解説とかは入れていません。
- 祝日はGoogleカレンダーの「日本の祝日」から取得しています。ご利用は自己責任で。

# ゴールまでの流れ
1. Lambda関数を作成する
2. CloudWatchでスケジュール起動用のルールを作成する
3. EC2インスタンスにタグを付ける

# 手順
## Lambda関数を作成する
1. コンソールから「Lambda」を選択。
2. 「設計図の選択」で「Blank Function」を選択。
3. 「トリガーの設定」はとりあえず「次へ」。
	- ここに、後で作るCloudWatchのルールを指定します。
4. 「関数の設定」で「名前」に適当な名前を入れ、「ランタイム」にPython2.7を指定。コードエントリタイプは「.ZIPファイルをアップロード」。
	- さくっとインライン編集したいところですが、そこそこ外部ライブラリを利用するのでZIPで上げます。
	- Lambda関数実装編は別稿で書くかも知れません。
5. githubに上げたsource配下をzipで固め、「関数パッケージ」の「アップロード」からアップロードして、「次へ」。
	- https://github.com/k-kaneda/start_instances_by_flag
6. 「関数の作成」で完成。

## CloudWatchでスケジュール起動用のルールを作成する
1. コンソールから「CloudWatch」を選択。
2. 左側のメニューリストから「ルール」を選択し、「ルールの作成」。
3. 「ステップ 1: ルールの作成」で「スケジュール」「Cron式」を選択。
4. 毎朝9:00に自動起動させたいので、`0 0 ? * MON-FRI *`を入力。
	- JSTではなくGMTなので注意してください。
	- 9:00前に起動したい場合は9時間足してその時間になるよう調整してください。
		- その場合曜日もずれます(SUN-THU)。GoogleカレンダーはJSで見ているのでLambda側の手直しも必要です。 
5. 右側の「ターゲット」でプルダウンから「Lambda関数」を選択。
6. 「機能」のプルダウンから**Lambda関数を作成する**で作成したLambda関数を選択し、「設定の詳細」。
7. 「ステップ 2: ルールの詳細を設定する」で「名前」に適当な名前を入れ、「ルールの作成」。

ここまでで、作成したLambda関数が毎朝9:00にせっせと動くようになりました。

## EC2インスタンスにタグを付ける
1. コンソールから「EC2」を選択。
2. 左側のメニューリストから「インスタンス」を選択
3. 自動起動したいインスタンスを選択し、下部のタブ群から「タグ」を選択
4. 「タグの追加/編集」で表示されたダイアログにて「タグの作成」
5. 追加された行の「キー」に「AutoStart」「値」に「yes」を入力
	- ここはLamda関数の内容と合っていれば何でも構いません(以下、サンプル内ののコードです)。

```
   if tag["Key"] == "AutoStart" and tag["Value"] == "yes":
```

# 補足
- タグに起動時刻を設定するようにして、CloudWatchを毎時起動とかにすれば起動時刻も柔軟に設定できるようになりそうです。
- Python初級者なのでソースが稚拙なのはご容赦ください。

以上で終了です。
これでタグを付けたインスタンスが土日祝を除く毎日9:00に自動で起動するようになります。
個人メモ　なんかのチェック処理（Excel 手作業からの脱却）

いろいろチェック処理が必要となる場面があるのですが
Excelを使っている場合が多々あります。（ようは手作業が入る）

自動化に向けてPythonでざくっと書きなおしてみます。

# やること
## リリースコードの文字コード、改行コードが拡張子に応じて適切ですかね？

### 以下の処理はOSコマンドのみ、Shell化でOKなので詳細は省略。
１．リリース対象物定義
２．SVNで取得（URL,リビジョン指定）
３．nkf --guessで文字コード、改行コードを取得
４．ちょっと整形（CSV形式に）

## ここからPythonで

~~~python
import pandas as pd

# 正解組み合わせを読み込む
df1_columns=['ext','True_kaigyocode','True_mojicode']
df1 = pd.read_csv('/home/satoshi/popko/Def.txt',
                 dtype='object',
                 encoding='utf_8',
                 names=df1_columns,
                 skipinitialspace=True)

# リリース対象結果リストを読み込む
df2_columns=['filename','ext','kaigyocode','mojicode']
df2 = pd.read_csv('/home/satoshi/popko/data.txt',
                 dtype='object',
                 encoding='utf_8',
                 names=df2_columns,
                 skipinitialspace=True)
~~~
正解ファイル
![image.png](https://qiita-image-store.s3.amazonaws.com/0/213343/32323ac6-ac00-ce95-f5a1-fb0d5caa319d.png)


リリース対象結果リスト
![image.png](https://qiita-image-store.s3.amazonaws.com/0/213343/6557217b-3bc4-cc23-6546-26fffe02bfd9.png)


###正解リストとリリース対象結果リストをマージします。
改行コードと文字コード、一致しているか判定。

~~~python
x = pd.merge(df2,df1,on='ext',how='outer')
(x['kaigyocode'] == x['True_kaigyocode']) & (x['mojicode'] == x['True_mojicode'])

0     True
1    False
2    False
3     True
4     True
5    False
6     True
7     True
8     True
9    False
dtype: bool
~~~

###チェックOK明細を確認

~~~python
x[(x['kaigyocode'] == x['True_kaigyocode']) & (x['mojicode'] == x['True_mojicode'])]
~~~
![uploading-0]()
![image.png](https://qiita-image-store.s3.amazonaws.com/0/213343/d39a7111-4e0c-6c96-b793-f3388ba62f31.png)


###チェックNG明細を確認

~~~python
x[~((x['kaigyocode'] == x['True_kaigyocode']) & (x['mojicode'] == x['True_mojicode']))]
~~~
![image.png](https://qiita-image-store.s3.amazonaws.com/0/213343/0fa4bcff-cf86-97da-fbba-7dcc89f0087c.png)

よさそうですね。

###リリース対象結果リストに結果判別をつけます

~~~python
x['judge'] = ((x['kaigyocode'] == x['True_kaigyocode']) & (x['mojicode'] == x['True_mojicode']))
x[['filename','ext','kaigyocode','mojicode','judge']]
~~~

![image.png](https://qiita-image-store.s3.amazonaws.com/0/213343/80088392-f9b1-6136-b917-e668cc7900f6.png)



### 完成です。簡単に出来て、、、手作業から脱却できる。便利！！
ソースインストールのApacheにBottleをいれたい

Python の軽量WebフレームワークBottleを手軽にいれたかったんですが、どうもはまるので[前回](https://qiita.com/norio_shimizu/items/4c0c08dd7a66d47f90e9)に引き続きです。

ドキュメントを見ながらやったんですが、どうも泥臭い部分があるので指摘あったらもらいたい。

#ソースからmod_wsgi をインストール

任意の場所にソースを入れたかったのですが、一番単純なのは下記を参考にしてMakefileを書き換えました。

[Web上でPython3を駆動するためにさくらVPSサーバーにmod_wsgiをインストールする](https://tech.acenumber.com/rank/python/web%E4%B8%8A%E3%81%A7python3%E3%82%92%E9%A7%86%E5%8B%95%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E3%81%95%E3%81%8F%E3%82%89vps%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%ABmod_wsgi%E3%82%92/)

これ自体「あってんのか？」とも疑問なんですが、、確かにコントロールはしやすいなと。

```
APXS = /usr/bin/apxs
PYTHON = /usr/bin/python

DESTDIR =
LIBEXECDIR = /usr/local/apache2/modules

```

LIBEXECDIR = /usr/lib64/httpd/modules
↓
LIBEXECDIR = <font color="HotPink">/usr/local/apache2/modules</font>

に変更して make install しました。

#設定ファイル書き換えたり

/usr/local/apache2/conf/httpd.conf　の一番下に追加しました。

```
LoadModule wsgi_module modules/mod_wsgi.so

WSGISocketPrefix run/wsgi

WSGIScriptAlias /pywork /usr/local/apache2/htdocs/pytest/test.wsgi

```

#bottleとapache(mod_wsgi)の連動

[PythonのBottleを初めて触ってから３０分で本番環境にデプロイ](https://qiita.com/yoshizaki_kkgk/items/ff5a7b02620814048bc3)

↑の記事を参考にして連動させました。基本はhtdocs に全部入れるとライブラリアクセス違反とかのトラブルがひとまずは無いので、それで疎通確認しました。

#/home/[user]/public_html/内で動かしたい。。

ユーザーごととか、Webサービスごとにアドレスの切り分けってどうやってやってるんだろう。ってみると公式でもいろんなところみても VituralHostを切ってる所が一般的っぽいんですが、、そこまでやりたくない。

そんなとき、これも力業なんですが、要するに WSGIScriptAlias を切ると実現はできるようです。

[Django + mod_wsgi + Apache で複数Djangoプロジェクトを公開する](https://qiita.com/hamemi/items/c8b46798f372ba47b1df)

/htdocs内に各ユーザのpublic_htmlの様なもののシンボリックリンクを張って、httpd.conf に追加、という泥臭い方法なんですが、これも正直「これでいいのか？」って思いながらやってます。

個人の運用だったらまあ、手軽でいいのかなともおもいますが。

#結果

http://www.green-teadog.tokyo/pywork
![1.png](https://qiita-image-store.s3.amazonaws.com/0/237343/c6245c7c-3284-c2a0-688c-9dcf3e3119e4.png)

サンプルうごきました。
swift初心者:「Missing argument for parameter #[数字] in call」の対処方法

#はじめに
初歩的なエラーかと思いますが、初心者のため備忘録を含め記録として残したいと思います。

##①Missing argument for parameter #[数字] in call

メソッド定義時に求められる引数が不足していることに起因するエラーのようです。

<img width="100% alt="スクリーンショット 2018-02-18 12.50.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/226787/66f56433-a2a6-f895-54e2-2a2132c2e4d2.png">

今回は、
`Missing argument for parameter #6 in call`
のエラーが発生しました。

```swift:誤
AudioUnitRender(audioObject._audioUnit!,
                            ioActionFlags,
                            inBusNumber,
                            frameCount,
                            &audioObject._abl!)
```
`AudioUnitRender`メソッドは6つの引数を定義時に求められます。

今回は第３引数の`inTimeStamp,`が不足しておりました。


```swift:正
AudioUnitRender(audioObject._audioUnit!,
                            ioActionFlags,
                            inTimeStamp,←//追加
                            inBusNumber,
                            frameCount,
                            &audioObject._abl!)
```

以上のように不足している引数を定義することでエラーが解消されるかと思います。
DynamoDBにaws-cliで接続する方法

## 概要
DynamoDBにaws-cliから接続する際、アクセスキーあたりでよくわからなかったので調べた結果をメモ。

## 前提
①[DynamoDB](https://aws.amazon.com/jp/getting-started/tutorials/create-nosql-table/)が作成済み
②[aws-cli](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)がインストール済み

## 手順
①aws-cli起動後、DynamoDBへ接続するユーザの情報を設定


```:bash
$ aws configure
AWS Access Key ID [None]: **********        // アクセスキーID
AWS Secret Access Key [None]: **********    // シークレットアクセスキー
Default region name [None]: ap-northeast-1　// 接続するDynamoDBのregion name
Default output format [None]: json          // 結果を出力するフォーマット
```

*AWS Access Key ID*と*AWS Secret Access Key*は、このcliで接続を行う際のユーザのものを登録する。
参照するにはAWSマネージメントコンソールから 「IAM」-> 「ユーザ」-> 「認証情報」-> 「アクセスキーID」
またシークレットアクセスキーは作成時のみしか参照できないため、シークレットアクセスキーを忘れた場合や
アクセスキーが未作成の場合は「アクセスキー作成」を押下。
※アクセスキー作成時のみ、csvファイルで該当情報を出力可能のためこの時出力しておく。
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/128338/9f227a34-1d33-66db-6963-9b77fa9cbc5c.png)



*Default region name*は接続先のDynamoDBのものを指定する。
具体的にはAWSマネージメントコンソールから [DynamoDB] -> 「テーブル」から接続先のテーブルを選択し
クエリパラメータに指定されているregionをここで入力する。
例えば、```?region=ap-northeast-1```なら、ap-northeast-1を入力する。

*Default output format*は、DynamoDBに問い合わせた結果をどの形式で出力するかを指定する。
ここではjson形式で出力する。

この設定をすることでcliからアクセスが可能になります。

```
$ aws dynamodb scan --table-name Music
{
    "Count": 4,
    "Items": [
        {
            "SongTitle": {
                "S": "Call Ne Today"
            },
            "Artist": {
                "S": "No One You Know"
            }
        },
        {
            "SongTitle": {
                "S": "Somewhere Down The Road"
            },
            "Artist": {
                "S": "No One You Know"
            }
        },
        {
            "SongTitle": {
                "S": "Look Out, World"
            },
            "Artist": {
                "S": "The Acme Band"
            }
        },
        {
            "SongTitle": {
                "S": "Still in Love"
            },
            "Artist": {
                "S": "The Acme Band"
            }
        }
    ],
    "ScannedCount": 4,
    "ConsumedCapacity": null
}
```
WP REST API v2でカスタムフィールドを検索する

# なにこれ
WP REST API v2においてカスタムフィールドを検索する方法

# 結論

```php

/**
 * 検索クエリをカスタム
 */
add_filter( 'rest_foobar_query', 'my_rest_foobar_query', 10, 2 ); // rest_{post_type}_query

function my_rest_foobar_query( $args, $request ) {
    // ここにでargsをゴニョゴニョする
    return $args;
}
```


`rest_{post_type}_query`のフィルタに追加してやるだけでなんとかなる。`$request`はクライアントから送られてきたパラメータ一式が入ってる。

`$args`はhttps://developer.wordpress.org/reference/classes/wp_rest_posts_controller/get_items/ を見てみるとWP_Queryに渡す検索条件

# つまりどういうことだってばよ

例えばよくある都道府県で検索したい場合の例
通常の投稿に都道府県をカスタムフィールドとして登録している前提

```php
add_filter( 'rest_post_query', 'my_rest_post_query', 10, 2 ); // rest_{post_type}_query

function my_rest_post_query( $args, $request ) {
  if ( isset( $request['prefecture'] ) ) {
      $args['meta_query'] = array(
        array(
        "key" => "prefecture",
        "value" => $request['prefecture'],
        "compare" => "="
        )
      );
  }
}
```

以上
Power BI 勉強会 @ 東京 #7 を開催しました

昨日、2018/02/17 品川にて Power BI 勉強会 @ 東京 #7 を開催しましたので、さっくりレポートです。
# Power BI 勉強会ってなんだ
[Power BI 勉強会 | connpass](https://powerbi.connpass.com/) 
Power BI と Modern Excel をみんなで勉強する ユーザーコミュニティ勉強会です。

# Power BI 勉強会 @ 東京 #7
2018/02/17 13:00 ~ 17:30
日本マイクロソフト株式会社(品川) セミナールーム A 

|#|Title|Speaker|
|:--:|:--|:--||
|1|Power BI 勉強会について|かがた たけし|
|2|Delivering Real-Time Power BI Dashboards|Peter Myers|
|3|新しい機能 と DAX Studio|かがた たけし|
|4|ライトニングトーク / おしらせなど||
|5|R & PowerBIで楽しむ Visualization & Analytics|小林 寿|
|6|え!? Power BI の画面からデータ更新なんてできるの!? <br />～PowerApps カスタムビジュアルの可能性～|清水 優吾|

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">本日品川では <a href="https://twitter.com/hashtag/lfja2?src=hash&amp;ref_src=twsrc%5Etfw">#lfja2</a> <a href="https://twitter.com/hashtag/PBIJP?src=hash&amp;ref_src=twsrc%5Etfw">#PBIJP</a> と2つのコミュニティイベントが開催されています！セミナールームAではオーストラリアの <a href="https://twitter.com/hashtag/PowerBI?src=hash&amp;ref_src=twsrc%5Etfw">#PowerBI</a> エキスパート、MVP Peter Myers氏が登壇中☆ <a href="https://t.co/NbMRp6Qk2R">pic.twitter.com/NbMRp6Qk2R</a></p>&mdash; MS JPN MVP Program (@JPN_MVP) <a href="https://twitter.com/JPN_MVP/status/964716406582464512?ref_src=twsrc%5Etfw">2018年2月17日</a></blockquote>


## 資料
発表に使用された資料は、[Power BI 勉強会 @ 東京 #7 資料ページ | connpass](https://powerbi.connpass.com/event/75899/presentation/) からどうぞ
※ SildeShareへのアップロードがどうやらうまくいかないようです。ちょっと待っててもらう必要があるかも。

今回の資料ではないですが、これまでの Peter さんのセッションなど。
[Peter Myers - Channel9](https://channel9.msdn.com/Events/Speakers/Peter-Myers)


## 感想など
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">マジで始まる5分前(≧∀≦)<br>相変わらずこの集まりは凄い！<br><br>大感謝！！<br>Power BI 勉強会 第7回！！！<a href="https://twitter.com/hashtag/PowerBI?src=hash&amp;ref_src=twsrc%5Etfw">#PowerBI</a> <a href="https://twitter.com/hashtag/PBIJP?src=hash&amp;ref_src=twsrc%5Etfw">#PBIJP</a> <a href="https://t.co/FdXrFPNE7s">pic.twitter.com/FdXrFPNE7s</a></p>&mdash; Yugo Shimizu (@yugoes1021) <a href="https://twitter.com/yugoes1021/status/964710047723827201?ref_src=twsrc%5Etfw">2018年2月17日</a></blockquote>
ほんとこれ。たくさんの方にご参加いただいていることはもちろんだけど、時間にビターっと揃う感じはホント助かります。ご協力ありがとうございます。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">ごめんなさいですー！ <a href="https://t.co/yxA5TQKELP">https://t.co/yxA5TQKELP</a></p>&mdash; Dynamics Ryo@D365 (@navisionaxapta) <a href="https://twitter.com/navisionaxapta/status/964804851384201217?ref_src=twsrc%5Etfw">2018年2月17日</a></blockquote>
たしかにそうですね。理解に至らずともこんなこともできるようになるんだよという記憶とどめていただければなぁとは思います。レベル感を想定した複数のトラックを用意できればよいのだけど、なかなかそうもいかず今後の課題にはなるかなと。

写真撮り忘れましたが、Peter さんが タイヤキ タベタイ と言ってたので、[CData Software Japan, Inc.](https://www.cdata.com/jp/) さんに差し入れしていただきました。ごちそうさまでした。CData 製品に関連する情報は [CData - Qiita](https://qiita.com/tags/cdata) にたくさんポストされていますので必読です。ETLがグッとシンプルになるのですよ。


- [togetter まとめ](https://togetter.com/li/1200464)

タグは #PowerBI #PBIJP です。
IBMCloud アカウントの変更方法

#変更処理
管理　→　請求および使用量　→　請求処理　→　アカウント名横の鉛筆アイコン
#変更後画面
![20180218-03w.PNG](https://qiita-image-store.s3.amazonaws.com/0/145508/53c14e8e-9af2-25c6-5255-17bedcce0bc6.png)
#変更画面
![20180218-01.PNG](https://qiita-image-store.s3.amazonaws.com/0/145508/aed68e56-f8a1-0ddb-4a05-06e2b29c1deb.png)
#アカウントの確認画面
![20180218-02w.PNG](https://qiita-image-store.s3.amazonaws.com/0/145508/b0195364-403f-0a9c-4a73-8d7b04773d19.png)
Windows10 64bitでxgboostをインストールする手順(2018年2月版)

windowsではpipを使ってのインストールが出来ないため、いろいろと試行錯誤しながらインストールしてみました。
https://github.com/dmlc/xgboost/tree/master/python-package
にも
「Windows users: pip installation may not work on some Windows environments, and it may cause unexpected errors.」とあります。

##環境
・Win10 64bit
・Python 3.6(Anaconda)
 
#事前にインストールが必要だったものたち
・Git for Windows
・VisualStudio2017
C++もオプションとしてインストール
・CMake
・TDM-GCC 64bit
#インストールできたもの
・xgboost

#手順
事前にインストールが必要なものをインストールする。

anaconda promptを起動

```
cd <gitからcloneしたいディレクトリ>
git clone --recursive https://github.com/dmlc/xgboost
git submodule init
git submodule update
```

・Gitbashを起動

```
cd <xgboostをcloneしたディレクトリ>
alias make='mingw32-make'
cp make/mingw64.mk config.mk
make -j4
```

mingw32-make: command not found　のようなエラーが出た場合、一度Git Bashを閉じる。
https://stackoverflow.com/questions/36411620/trying-to-install-xgboost-in-python-on-windows
TDM-GCCをインストール。オプションでopenmpにチェックを入れてインストール。一度インストールしてしまっても、インストーラーのManageメニューで後から拡張もできる。


・Gitbashを再度起動。

```
cd <xgboostをcloneしたディレクトリ>
alias make='mingw32-make'
cp make/mingw64.mk config.mk
make -j4
```
上記をやり直す。

https://xgboost.readthedocs.io/en/latest/build.html#building-on-windows
によるとインストールしたcmakeコマンドを使えばよいとのことだったがうまくいかなかったので、
直接VisualStudioでCMakeのビルド（x64-Release）を実行。
文字化けがコンソールに出ていたが気にしない。
あとはanacondapromptでインストールする。

```
cd <xgboostをcloneしたディレクトリ>
cd python-package #ディレクトリ移動
python setup.py install #インストール
conda list　#xgboostが入っているか確認。
```
あとはjupyterで

```
import xgboost as xgb
```

とかやってエラーなければOKじゃないかと思います。
思い出しながら書いているので、多少間違っているかもしれませんが大体こんな感じです。
######2月26日追記
上記の手順でインストールできることを確認しました。

#楽ちんな方法
以下のコマンドだとAnacondaCloudにだれかがアップしてくれたものを使える。
他人がアップしたファイルを使うのが怖い場合は自分でインストール用にファイルをコンパイルするしかないと思います。

```
conda install -c anaconda py-xgboost
```

#####参考
https://github.com/dmlc/xgboost/tree/master/python-package
https://xgboost.readthedocs.io/en/latest/build.html#building-on-windows
https://stackoverflow.com/questions/36411620/trying-to-install-xgboost-in-python-on-windows

以下のページに記載の手順はあまり使い物にならなかった。
https://www.kaggle.com/c/otto-group-product-classification-challenge/discussion/13043
理由は
https://github.com/dmlc/xgboost/tree/master/windows
が消えているためと思われる。
Android上でBitZenyデーモンをコンパイルしよう

# 注意
<font color=red>この記事は、BitZenyマイニングについて言及したものでは**ありません**。</font>
<font color=red>また、**最悪数日ほど使えなくても困らない端末を使って下さい**。(特に意地でもコンパイルを完了させたい場合)</font>
<font color=red>ここに書いた内容だけで、ここを見ている皆様が全員再現できる**保証はございません**。機種によってはできないことがありますのでご了承下さい。</font>

# はじめに

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">libdbのコンパイルをどうするかですね<br>tar.gzそのままではARM未対応なので</p>&mdash; 🍣 S U S H I 🍣 (nao20010128nao) (@2ndLesmi) <a href="https://twitter.com/2ndLesmi/status/963335684382629890?ref_src=twsrc%5Etfw">2018年2月13日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

これは何だったのか

それではやっていきましょう...

# 必要なもの
- [GNURoot Debian](https://play.google.com/store/apps/details?id=com.gnuroot.debian)
- Android端末
- [Android上でlibdb 4.8をコンパイルする](https://qiita.com/nao20010128nao/items/b24d05c944c91c178278)

# 今回の環境
- [GNURoot Debian](https://play.google.com/store/apps/details?id=com.gnuroot.debian) バージョン `0.6.12_armhf`
- Nexus 5X: `Android 7.1.2`
- [Android上でlibdb 4.8をコンパイルする](https://qiita.com/nao20010128nao/items/b24d05c944c91c178278)完了済み

# 依存関係のインストール
Ubuntuの時と同じですが、`libdb4.8`は前提として完了しているものとし、入れないで下さい。

```bash
apt-get update
apt-get install build-essential libtool autotools-dev autoconf libssl-dev libboost-all-dev libevent-dev pkg-config git -y
```

# ソースコードの取得とコンパイル
この例では、現時点では最新の`z2.0.0`を使用します。

```bash
# ソースコードの取得
git clone https://github.com/BitzenyCoreDevelopers/bitzeny.git bitzeny
cd bitzeny
git checkout z2.0.0a

# コンパイル (PCと同じ)
./autogen.sh
./configure --without-miniupnpc --without-gui --disable-tests
make
```

...とまぁ簡単そうなのですが、これには落とし穴があります。

<font color=red>**T w i t t e r の 通 知**</font>

Twitterなどのプッシュ通知を受け取るアプリが起動すると、メモリ不足で`make`が停止してしまいます。
対策のため、`make`の前に機内モードにしておいて下さい。`make`はインターネットは不要です。

また、これでもメモリ不足は起こるので、`GNURoot Debian`以外は全て終了して下さい。

これでもメモリ不足が起こる場合、根気強く`make`を再実行して下さい。
`バグ報告して下さい`のようなメッセージが出ますが、気にせず再実行して下さい。

また、CPUに余力がありそうな場合は、`make -j2`などにしてみると少し速くなります。

そして、`make`が以下のような出力で終わっていれば、成功です。

```
make[2]: Leaving directory '/root/bitzeny'
make[1]: Leaving directory '/root/bitzeny'
```

これを見ることが出来たなら、おめでとうございます。
確認のため、`file ./src/bitzenyd`がエラーにならない事を確認して下さい。

# インストール
...とその前に、一度メモリ不足解消のため、`exit`と入力し、終了して下さい。
終了したのを見届けてから、もう一度起動して、以下のコマンドを入力して下さい。

```bash
cd bitzeny
make install

type bitzenyd
```

前のセクションで失敗していなければ、これが失敗することなんて滅多にないです。

以下のような出力で終わっていれば、成功です。

```
make[2]: Leaving directory '/root/bitzeny'
make[1]: Leaving directory '/root/bitzeny'

/usr/bin/bitzenyd
```

# 起動してみよう
BitZenyデーモンの設定方法はあえてここでは書きませんので、別途検索して下さい。

`bitzeny-cli`してみるとこんな感じ。
![Screenshot_20180217-232033.png](https://qiita-image-store.s3.amazonaws.com/0/111609/77aa2da7-2db6-0435-d25b-109706c8f6c8.png)

ちなみに返答に20秒ほど掛かるので実用性は皆無です。
`bitzeny-cli stop`して安全に停止してしまいましょう。(これも数十秒かかります。)

安全のため、体験終了後は**端末を**再起動することをおすすめします。

# 最後に
閲覧ありがとうございました。
ご意見、ご質問等ございましたらコメントや[Twitter](https://twitter.com/2ndlesmi)等にてお願いします。
[CentOS7] firewalldでブラックリストを作る

CentOS7で，firewalldを使ってIPアドレスのブラックリストを登録する方法について説明します．ipsetコマンドを使うのが主流ですが，CentOS7ではfirewall-cmdだけでも設定できるので，記録としてこの記事を投稿します．

ipsetを作る
------------
まず，次のコマンドで`blacklist`という名前の新しいipsetを作ります．

```
firewall-cmd --permanent --new-ipset=blacklist --type=hash:ip
```
`firewall-cmd`では，いずれのオプションでも`--permanent`を付けないとリロード時に設定が消えてしまうので注意してください．
また，`blacklist`に該当するIPアドレスからのアクセスを遮断するために，次のようにルールを設定します．

```
firewall-cmd --permanent --zone=public --add-rich-rule=`rule source ipset=blacklist drop
```
最後に，`blacklist`をすぐ使用可能にするために次のコマンドを実行します．

```
firewall-cmd --reload
```
以下のコマンドでルールが設定されていることを確認できます．

```
firewall-cmd --list-all
```

ブラックリストを登録する
------------
1つずつ登録するには，次のようにしてエントリを追加します．

```
firewall-cmd --permanent --ipset=blacklist --add-entry=192.168.1.2
```
ファイルに一行ごとにIPアドレスを書いておくと，次のようにしてファイルから読み込むことができます．

```
firewall-cmd --permanent --ipset=blacklist --add-entries-from-file=/etc/firewalld/blacklist
```
上の例では`/etc/firewalld/blacklist`にブラックリストのファイルを用意します．
IPアドレスが登録されていることを確認するには，次のコマンドを実行します．

```
firewall-cmd --ipset=blacklist --get-entries
```
ブラックリストからIPアドレスを削除するには，次のようにします．

```
firewall-cmd --permanent --ipset=blacklist --remove-entry=192.168.1.2
```

ブラックリストのファイル`/etc/firewalld/blacklist`には次のようにIPアドレスを列挙します．なお，サブネットなども使えます．

```
192.168.1.2
192.168.1.3
192.168.2.0/24
```
同じIPアドレスが重複して指定された場合は，片方（より範囲の広い方）だけが登録されます．例えば`192.168.2.0/24`を登録した後に`192.168.2.10`を登録しても`blacklist`のエントリは変化しません．
ブラックリストの登録が完了したら次のコマンドで設定をロードします．

```
firewall-cmd --reload
```
リロードしたら，`--get-entries`や`--list-all`を使って登録した設定が保存されていることを確認しましょう．
PythonとRDKitをソースビルドするDockerfileを作った

PythonとRDKitをソースからビルドするDockerfileを作成したのでシェアします。

## はじめに

[RDKit](https://github.com/rdkit/rdkit)とは、分子/化合物の化学表現を扱うツールキットです。

掲題の意図は、以下の二つを両立したいと思ったためです。

- 任意のバージョンのpythonからRDKitを使うこと
- Condaを使わないこと

## Condaで良いのでは?
はい、こだわらなければcondaでOKです。なぜなら、最新・先端の解析環境を提供してくれるし、RDKitのインストールも簡易だからです (以下のコマンドで一発) 。

```bash
# RDKitのインストールもcondaが解決!
$ conda install -y -c rdkit rdkit
```

それでも今回は、condaを使いません。その理由は、condaをベースに環境を構築したdockerイメージは比較的容量が大きくなるためです。イメージの容量が大きいと、手元のlaptopのメモリが足りなくなり、解析が中断してしまう事象が頻発します。(サーバー規模のマシンで解析すればいいことですが...)

## 成果物は?
[nyuge/rdkit-build](https://hub.docker.com/r/nyuge/rdkit-build/)からdockerイメージをご覧/ご利用いただけます。Latest (2018年2月現在) だと、

- OS: ubuntu16.04
- python: 3.5.5
- RDKit: Release_2017_09_3

を用いて、環境構築しています。

## 使用法は?
まず、nyuge/rdkit-buildのdockerイメージをpullしてください。

```bash
$ docker pull nyuge/rdkit-build
```

次に、下記の例を参考にご自身の解析内容に沿ったDockerfileを作成してください。

```
# Dockerfileの作成例
FROM nyuge/rdkit-build
MAINTAINER someone

RUN pip install --no-cache-dir --upgrade \
    chainer \
    scikit-learn \
    tqdm
RUN pip install --no-cache-dir --upgrade \
    chainer-chemistry \
    && mkdir -p $HOME/workspace
WORKDIR $HOME/workspace/
```

その後、作成したDockerfileからdockerイメージをビルドてください (ここではdockerイメージの名前をsomeone/chainer-chemistryとします) 。

```bash
$ docker build -t someone/chainer-chemistry .
```

最後に、dockerコンテナにマウントしたいフォルダに移動し、dockerコンテナを生成してください。

```bash
$ docker run -i -v /$(pwd):/workspace -t someone/chainer-chemistry
```

操作が生成したdockerコンテナに移動したら成功です! マウントを指定する`-v /$(pwd):/workspace`について、`$(pwd)`で良かったり、`/$(pwd)`でないと通らなかったりします。

## まとめ
PythonとRDKitをソースからビルドするDockerfileを作成しました。これをベースに用いて、化学表現を扱うデータ解析のための軽量なdockerイメージを作ることができそうです。
皆さまの快適なデータ解析生活の一助となれば幸いです!

## 参考
話題にのぼったツールキット

- [Docker](https://www.docker.com/): "Docker is the company driving the container movement and the only container platform provider to address every application across the hybrid cloud."
- [RDKit repository](https://github.com/rdkit/rdkit): The cheminformatics and machine-learning soft ware
- [Chainer Chemistry repository](https://github.com/pfnet-research/chainer-chemistry): The library for deep learning in biology and chemistry

Docker×RDKitを試みた先人たち

- [Dockerfile for building RDKit](https://github.com/InformaticsMatters/rdkit/tree/Release_2017_03_1): The docker image with python2.7 and source-built RDKit
- [alpine-rdkit](https://github.com/kubor/alpine-rdkit): The docker image with Miniconda3 and binary-installed RDKit
Android上でlibdb 4.8をコンパイルする

# 注意
<font color=red>ここに書いた内容だけで、ここを見ている皆様が全員再現できる**保証はございません**。機種によってはできないことがありますのでご了承下さい。</font>
~~私はTermux推しですが、~~Termuxではコンパイルには失敗してしまうようです。残念

# はじめに
Androidでlibdb 4.8をコンパイルするという長年の夢(?)がついに叶ってしまったようなのでご報告までに。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">libdbのコンパイルをどうするかですね<br>tar.gzそのままではARM未対応なので</p>&mdash; 🍣 S U S H I 🍣 (nao20010128nao) (@2ndLesmi) <a href="https://twitter.com/2ndLesmi/status/963335684382629890?ref_src=twsrc%5Etfw">2018年2月13日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

これは何だったのか


# 必要なもの
- [GNURoot Debian](https://play.google.com/store/apps/details?id=com.gnuroot.debian)
- Android端末

# 今回の環境
- [GNURoot Debian](https://play.google.com/store/apps/details?id=com.gnuroot.debian) バージョン `0.6.12_armhf`
- Nexus 5X: `Android 7.1.2`

# コンパイルとインストール
解説はコメントとして書いておきました。
先に`build-essentials`などを入れておいて下さい。

```bash
# libdbのソースコードをダウンロードしてコンパイル (PCでの方法と同じ)
wget http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz
tar zxvf db-4.8.30.NC.tar.gz
cd db-4.8.30.NC/build_unix 

# config.{guess,sub}を更新 (Androidでコンパイルするには必須)
chmod a+rw ../dist/config.{guess,sub}
wget -O../dist/config.guess 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD'
wget -O../dist/config.sub 'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD'

# コンパイル (PCでの方法と同じ)
../dist/configure --disable-shared --enable-cxx --disable-replication --with-pic
make

# インストール (PCでの方法と同じ)
make install_lib install_include

# 他ソフトウェアでのconfigureが失敗するのでコピーしておく (任意)
cd /usr/local/
cp -R BerkeleyDB.4.8/* .

# おしまい
cd 
```

# 最後に
ご意見、ご質問等ございましたらコメントや[Twitter](https://twitter.com/2ndlesmi)等にてお願いします。
日本語やハングル語など、全言語のハッシュタグを正規表現でパースする

TwitterやInstagramなどでポピュラーになったハッシュタグですが、全言語のハッシュタグをパースする必要に駆られたので、正規表現を書いてみました。

Twitterのコードにそれらしいものがあったので、少し改良してみました。

```js
        var searchText = "#ラーメン #ramen #라면 #ראמן #拉面"
        var hash = '#';
        var tag = 'a-zÀ-ÖØ-öø-ÿĀ-ɏɓ-ɔɖ-ɗəɛɣɨɯɲʉʋʻ̀-ͯḀ-ỿЀ-ӿԀ-ԧⷠ-ⷿꙀ-֑ꚟ-ֿׁ-ׂׄ-ׇׅא-תװ-״﬒-ﬨשׁ-זּטּ-לּמּנּ-סּףּ-פּצּ-ﭏؐ-ؚؠ-ٟٮ-ۓە-ۜ۞-۪ۨ-ۯۺ-ۼۿݐ-ݿࢠࢢ-ࢬࣤ-ࣾﭐ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼ‌ก-ฺเ-๎ᄀ-ᇿ㄰-ㆅꥠ-꥿가-힯ힰ-퟿ﾡ-ￜァ-ヺー-ヾｦ-ﾟｰＡ-Ｚａ-ｚぁ-ゖ゙-ゞ㐀-䶿一-鿿꜀-뜿띀-렟-﨟〃々〻';
        var digit = '0-9０-９';
        var underscore = '_';
        var regexp = new RegExp(
          '(?:^|[^' + tag + digit + underscore + ']+)' +
          '[' + hash + ']' +
          '(' +
          '[' + tag + digit + underscore + ']*' +
          '[' + tag + ']+' +
          '[' + tag + digit + underscore + ']*' +
          ')' +
          '(?![' + hash + tag + digit + underscore + ']+)',
        'g');

        tmp = searchText.match(regexp);
        result = tmp.map(function (value) {
            value = value.trim().split('#');
            return '#' + value[1];
        });
#=> ["#ラーメン", "#ramen", "#라면", "#ראמן", "#拉面"]
```
Dockerコンテナにgdbによるデバッグ環境の構築

# 概要
* gdbとdebuginfoパッケージを利用したデバッグ環境をDockerコンテナに構築した際のメモです
* コンテナイメージはCentOS 6.9です

# 環境
* macOS Sierra 10.12.6
* Docker 17.12.0-ce-mac49

# コンテナの準備
* centosイメージのダウンロード
<pre>
# docker pull centos
</pre>
* コンテナの起動
<pre>
# docker run --cap-add=SYS_PTRACE --security-opt="seccomp=unconfined" --name gdbenv centos:centos6.9 /bin/bash
</pre>
* --cap-add=SYS_PTRACE: コンテナ内からのgdbによるptrace(2)を許可
* --security-opt="seccomp=unconfined": コンテナ内からのシステムコールの発行に制限を掛けない

# 必要パッケージのインストール
* gdbのインストール
<pre>
# yum -y install gdb
</pre>
* debuginfoパッケージのインストール
<pre>
# yum -y install yum-utils
# debuginfo-install -y file名
</pre>

# コマンドのデバッグ
<pre>
# gdb `which command`
</pre>
Lottieによるリッチアニメーション実装におけるAfterEffectsハマりどころ

#　はじめに
iOSにAfter Effectsで作ったリッチアニメーションを導入できるLottieライブラリすごい！とおもったのですが，AfterEffectsのすべての機能を使えるわけではありませんでした
アニメーションをデザイナーさんにお願いする前に，エンジニア側も何ができて何ができないのか知っておくと作ってもらったのに動かないという事故が発生しづらいのではないかと考え知見を共有いたします

### この文章全体で言いたいこと
Lottieのドキュメントは要確認，意図通りの動きができてるか逐次チェック
<font color="Red">webだったら動くけどAndroidやiOSだとうごかないものもあります</font>
**AfterEffects対応機能一覧表**
http://airbnb.io/lottie/supported-features.html

# LotteiとAfterEffectsの紹介

![リッチアニメーションのコピー.001.jpeg](https://qiita-image-store.s3.amazonaws.com/0/176479/6c1ef4d8-1aa2-91ce-6d40-850481dbd881.jpeg)
![リッチアニメーションのコピー.002.jpeg](https://qiita-image-store.s3.amazonaws.com/0/176479/cfdf538b-47fc-da0b-0fc2-2f1a6bf610fa.jpeg)
![リッチアニメーションのコピー.003.jpeg](https://qiita-image-store.s3.amazonaws.com/0/176479/6acec439-4f3d-207f-af3d-ce749c2c91e3.jpeg)
![リッチアニメーションのコピー.004.jpeg](https://qiita-image-store.s3.amazonaws.com/0/176479/13edbb91-7859-321b-f317-086cd21a449e.jpeg)
![リッチアニメーションのコピー.005.jpeg](https://qiita-image-store.s3.amazonaws.com/0/176479/836136c1-0f29-2429-8698-56a7994ff46a.jpeg)

# After Effectsの目玉機能エフェクトが使えない
![リッチアニメーションのコピー.007.jpeg](https://qiita-image-store.s3.amazonaws.com/0/176479/6802ab7d-8348-c9d3-4745-c90c7afca802.jpeg)
![リッチアニメーションのコピー.008.jpeg](https://qiita-image-store.s3.amazonaws.com/0/176479/2194a742-06a5-b387-bbc5-f5a8bd03a755.jpeg)
![リッチアニメーションのコピー.009.jpeg](https://qiita-image-store.s3.amazonaws.com/0/176479/343b4bbd-a6f5-93b2-bc1b-57ceb8180011.jpeg)
# エフェクト以外の機能でできないこと
![リッチアニメーションのコピー.010.jpeg](https://qiita-image-store.s3.amazonaws.com/0/176479/2e0ce5ae-3298-dd90-c3a1-c2d3f3bd6982.jpeg)
![リッチアニメーションのコピー.011.jpeg](https://qiita-image-store.s3.amazonaws.com/0/176479/4f1edbf1-459c-7521-5ac5-66a606800b85.jpeg)

![リッチアニメーションのコピー.012.jpeg](https://qiita-image-store.s3.amazonaws.com/0/176479/94a593d0-58da-3358-a52f-c6814d326dd5.jpeg)
![リッチアニメーションのコピー.013.jpeg](https://qiita-image-store.s3.amazonaws.com/0/176479/fefeb03b-ff63-feb4-aa0c-b07221d79a85.jpeg)
![リッチアニメーションのコピー.014.jpeg](https://qiita-image-store.s3.amazonaws.com/0/176479/3a109c8a-288c-ecb1-669b-ff246d2e5222.jpeg)
![リッチアニメーションのコピー.015.jpeg](https://qiita-image-store.s3.amazonaws.com/0/176479/1f51a40a-5ac1-9b4b-905c-a584b0fd9129.jpeg)
![リッチアニメーションのコピー.016.jpeg](https://qiita-image-store.s3.amazonaws.com/0/176479/5f4a9835-0f6e-0e2f-8f6d-4fbf4d970d99.jpeg)
![リッチアニメーションのコピー.017.jpeg](https://qiita-image-store.s3.amazonaws.com/0/176479/ba10660c-9f06-91ca-ceb7-dc624c9f0799.jpeg)
![リッチアニメーションのコピー.018.jpeg](https://qiita-image-store.s3.amazonaws.com/0/176479/7b08b742-0177-45ae-3a55-a10dc16439a1.jpeg)
# 確認の仕方
![リッチアニメーションのコピー.019.jpeg](https://qiita-image-store.s3.amazonaws.com/0/176479/5db64924-687a-b80e-5855-31cf710acd46.jpeg)
![リッチアニメーションのコピー.020.jpeg](https://qiita-image-store.s3.amazonaws.com/0/176479/66279929-0f42-a4b9-ecf1-12c2ef9199e6.jpeg)
![リッチアニメーションのコピー.021.jpeg](https://qiita-image-store.s3.amazonaws.com/0/176479/5224ef9d-3069-a4f7-f23e-562a22d5e7a8.jpeg)
![リッチアニメーションのコピー.022.jpeg](https://qiita-image-store.s3.amazonaws.com/0/176479/16ffaf82-a0d2-4db7-8329-99145ea96bd7.jpeg)
USB認識しない時(mac)

USBにwindowsのファイルシステムが入っているせいか
macで読み込もうとするとファイルシステムのエラーで認識してくれない時。

ディスクユーティリティというソフトでUSBの初期化が基本だが
この場合は、エラーでできません。

ターミナルのコマンドで解決します。

## dfコマンドで調べる

```
$ df
```
ここにUSBをさしてもさしてなくても
変わらない時

```
$ diskutil list
```
これは、アンマウントしても表示されるようです。

## USBの初期化
念のためにアンマウントします。
※diskxの部分は、環境によって異なります。
今回は、disk2だったのでそれでやります。

### ディスク(USB)をアンマウント

```
$ diskutil unMountDisk /dev/disk2
```

### ディスク(USB)の初期化

```
$ diskutil eraseDisk HFS+ Untitled /dev/disk2
```

ここまでエラーがなければ、GUIのディスクユーティリティで作業しなくてもいいです。
rubyのレシーバとは

# レシーバとは

レシーバーは特に Ruby の用語というわけではなく、オブジェクト指向一般に使われる用語です。 

意味は「 . の左側」で間違いありません。 
例えば以下の例では car が run メソッドのレシーバーとなります。 

```
car.run
```

気になっている点は「メソッドを実行している側を何故レシーバーというのか」という所ではないかと思います。 

オブジェクト指向では処理はメッセージのやり取りによって行うという考え方があります。 
car の run メソッドを呼び出すというのをメッセージの観点からいうと  car に run のメッセージを送る となります。このため、car はメッセージの受け取り側なので、「レシーバー」と呼ばれています。

引用：https://teratail.com/questions/1687
python-docxを使ってみた

# 概要
　とにかく、wordが嫌いだ。知らないうちにfontが違うだの、インデントが違うのだの、めんどくさいことこの上ない。
　だったら、いっそtextだけでコンバートできないか？と考えてpython-docxを使ってみた。

# 結論
　もう少し、時間があればなんとかできるかもしれない。
　問題は「相互参照」で図番号等をかってに挿入する仕組みである。
　wordは内部で勝手に「_Refxxxx」というようなbookmarkを作ってこれを実現しているのだが、これをプログラム側で代行する必要がある。python-docxの開発者はこの辺を追加しているような気もするがまだよくわからない。もう少し調べてみよう。
　あとは、数式の挿入ができそうもないなあ・・やっぱり、markdownから攻めるのがいいのかなあ？

# SAMPLE
python-docxはインストール済みとする。
最初に、tmp.docxというwordを作っておく。
ここには、見出し１が1,見出し２が1.1というように長文用のstyleを設定して、saveしておく。

以下のプログラムを走らせると、図番号の表示が
図ー　図の名称
とかになっているが、fieldの更新をすると、無事
図１．１－１　図の名称
になってくれる。

```python:test.py
# coding:utf-8
from docx import Document
from docx.oxml import OxmlElement
from docx.oxml.ns import qn
from docx.shared import Inches
from attrdict import AttrDict

'''
図番号を挿入する
'''
def Figure(elm,paragraph):
    run = paragraph.add_run()
    r = run._r

    fldChar = OxmlElement('w:fldChar')
    fldChar.set(qn('w:fldCharType'), 'begin')
    r.append(fldChar)

    instrText = OxmlElement('w:instrText')
    instrText.text = u' STYLEREF 2 \s'
    r.append(instrText)

    fldChar = OxmlElement('w:fldChar')
    fldChar.set(qn('w:fldCharType'), 'end')
    r.append(fldChar)

    run = paragraph.add_run(u'－')
    
    run = paragraph.add_run()
    r = run._r
    fldChar = OxmlElement('w:fldChar')
    fldChar.set(qn('w:fldCharType'), 'begin')
    r.append(fldChar)

    instrText = OxmlElement('w:instrText')
    instrText.text = u' SEQ 図 \* DBCHAR'
    r.append(instrText)

    fldChar = OxmlElement('w:fldChar')
    fldChar.set(qn('w:fldCharType'), 'end')
    r.append(fldChar)

    run = paragraph.add_run(u'　'+elm)

document = Document('tmp.docx')


#document.add_heading(u'ドキュメント', 0)

p = document.add_paragraph(u'文の挿入 ')
p.add_run(u'太字').bold = True
p.add_run(' and some ')
p.add_run(u'斜線.').italic = True

document.add_heading(u'見出し１', level=1)
document.add_paragraph(u'本文１で長い文章をかいてもらいたいということなんで書いた。改行も試験したいのでこんなに長い文になってしまった。')
document.add_heading(u'見出し２', level=2)
document.add_paragraph(u'本文２')
document.add_heading(u'見出し３', level=3)
document.add_paragraph(u'本文３')

#document.add_picture('monty-truth.png', width=Inches(1.25))
pg = document.add_paragraph(u'図',style='Caption')
Figure(u'図の名称',pg)

document.add_page_break()

document.save('demo3.docx')
```
CryptoZombiesでSolidity@咀嚼中

# Yukiya025の目標など
- CryptoZombies全クリア
- CryptoZombiesで完成したコードを写経してプログラミングの構造がどうなっているのかを考える
- 「Solidityができる」と言える最低ラインの能力をつける (最低ラインとは? 定義募集中)
- [How To Learn Solidity: The Ultimate Ethereum Coding Guide](https://blockgeeks.com/guides/solidity/)の[How to Write an Ethereum Election Smart Contract](https://www.youtube.com/watch?time_continue=7&v=AItPWZ63_mw)を写経。
- DAppChainsがローンチしたら触ってみたい。

# CryptoZombies進捗
- Lesson1 全クリア (2018/02/17)
- Lesson2 Chapter03 までクリア (2018/02/17)
- Lesson2 全クリア (2018/02/18)
- Lesson3 Chapter07 までクリア (2018/02/18)
- Lesson3 Chapter11 までクリア (2018/02/20)
- Lesson3 全クリア (2018/02/23)
- Lesson4 Chapter03 までクリア (2018/02/24)
- Lesson4 Chapter09 までクリア (2018/03/01)
- Lesson4 全クリア (2018/03/02)

目指せご褒美 & 3周♪
## この記事で伝えたいこと
- CryptoZombiesでSolidityのどんな知識が身につくか
- 他にも「この学習サイトもおすすめ！」があればコメント欄へぜひ
 
#Lesson1Chapter1-2で学んだこと
- コードを書く前に```pragma solidity ^0.4.19;```をつける
- コントラクトとは、イーサリアムアプリケーションの基本ブロック。プロジェクトの出発点であり、コントラクトの中に変数や関数が入る。おそらくその他のオブジェクトも入るか?

```
pragma solidity ^0.4.19;
contract HelloWorld {
// 変数や関数がここに入る
}
```
# Lesson1 Chapter3で学んだこと
- 状態変数とは、コントラクト内に永遠に保管されるもの。```contract{// ここに記述されるのが状態変数}```
- 代表的なデータ型にはuint、int、stringがある

```
contract Example {
  // このかっこ内がブロックチェーン上に記載される
  uint myUnsignedInteger = 100; //uint: 符号なし整数のデータ型。myUnsignedIntegerに100を格納。
  int mySignedInteger = - 100; //uint: 符号あり整数のデータ型。mySignedIntegerに-100を格納。
  string Iroha = "Nihoheto"; //string: UTF-8文字のデータ型。Irohaに文字列Nihohetoを格納。
}
```

#Lesson1Chapter4で学んだこと
数式演算。Rubyと一緒だな。。。

#Lesson1Chapter5で学んだこと
構造体。構造体を使えば、複数のプロパティを持つ複雑なデータ型を作成可能。色々な種類のお互いに関連するデータをまとめて一つの塊にしたもの。この構成要素をメンバーと呼ぶ。

```
struct Person {
  uint age; //メンバ (プロパティ)
  string name; //メンバ (プロパティ)
}
```

#Lesson1Chapter6~15は少しずつ書いていきます
...続く
#Lesson1完了でクリプトゾンビが誕生
![CryptozombiLevel1.png](https://qiita-image-store.s3.amazonaws.com/0/171266/cc46e04e-cb8c-6c0f-fa12-98cdd3d0f150.png)

[Yukiya025が作ったクリプトゾンビ](https://share.cryptozombies.io/jp/lesson/1/share/odyrenu?id=Z2l0aHVifDI2NTE3ODM2)が誕生しました。
rubyのハッシュ（連想配列）

# ハッシュとは？

ハッシュは連想配列のことで配列に対して番号ではなくてキーを設定できるもの。配列は基本0からのインデックスが振られるが連想配列だとキー=>要素で数字以外のもので識別できる。

# 書き方

```ruby
colors = ["red"] => "赤","green" => "緑","blue" => "青"]
colors["blue"] => "緑"
```

下記のようにシンボルを用いて略せる

```ruby
colors = {red: "赤",green: "緑", blue: "青"}
```