OmniAICreator/Qiita-1.07M huggingface dataset:
Railsでのバリデーションエラーメッセージを日本語にする

Railsではバリデーションエラーのメッセージが英語なので、日本語化したい時は追加で対応が必要になります。
今回は、追加で行ったことをまとめたいと思います。

#### ①gemの追加 ####
Gemfileに下記を追加して、bundle installを行いました
Installing rails-i18n 5.1.3とコンソールが出ているため、うまくいっているはずです!

```
gem 'rails-i18n'
```
```
$ bundle install
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
Fetching gem metadata from https://rubygems.org/............
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...
Fetching rails-i18n 5.1.3
Installing rails-i18n 5.1.3
(長いので省略)

Bundle complete! 24 Gemfile dependencies, 86 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
```



gemを追加すると下記のようにモデルで設定している変数名のみ英語になります
<img width="350" alt="スクリーンショット 2019-03-16 14.11.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/239560/48f9c212-0ff7-602b-137e-506f53efe800.png">

#### ②モデルの変数名を日本語にする ####

config/locale 配下に ja.ymlを作ります(en.ymlは既に存在していると思います)
下記内容を追加します

```ja.yml
ja:
  activerecord:
    models:
      contribution: 議事録

    attributes:
      contribution:
        title: プロジェクト名
        description: 詳細
```

models以下にはモデルの名前、attributes以下には変数名を記載し、横には表示させたい日本語を記載します

これで、日本語表示になりました
<img width="300" alt="スクリーンショット 2019-03-16 16.12.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/239560/61ecc946-e89b-42aa-3927-e712c7bc1cb9.png">
備忘録--ワイルドカード--

おはよう、こんにちわ、こんばんわ。今日の自分

今回はワイルドカードの活用法についてだ！


もし間違えていたり加えたほうがいいことありましたらご教示ください・・・:joy:

シェルにはワイルドカードと呼ばれる特殊文字を利用してコマンドラインでの作業を効率化できるんだぞ

実践あるのみだ

#全ての文字を示す「*」

・例：「.log」のファイルを探している

ファイル数が多いと「log」ファイルを探すのに苦労するだろう？？

「*.log」と指定してlsコマンドを実行すれば、拡張子が「.log」のファイルだけが表示されるようになるんだ

下記が実行結果だ↓↓

![WS000000.JPG](https://qiita-image-store.s3.amazonaws.com/0/370545/a81ff322-39c3-6698-3a27-5e7c55d8c197.jpeg)

ちなみに途中までは分かるんだが、その後の綴りが分からない・・・
時などは重宝するぞ

下記のようだ↓↓
下記は例として「secu」まで入力して「*」を使用してみた
![WS000005.JPG](https://qiita-image-store.s3.amazonaws.com/0/370545/5d972832-54bb-681c-a94a-77335f23c9c8.jpeg)


#何らかの１文字を示す「?」

・「?」は、何らかの一文字を表すワイルドカードだ
・仮に「???」と指定すれば何らかの３つの文字を指定したことになるぞ

例えば「ls images/*.???」と指定すれば拡張子が３文字のファイル全て表示

下記は「.log」に続く文言を指定した場合だ

![WS000001.JPG](https://qiita-image-store.s3.amazonaws.com/0/370545/a6ab5d85-8eab-c713-1bdf-364dfdedd241.jpeg)


「?」についても途中までは分かる、そして文字数もわかってる←（あと一歩ｗ）の場合にも使えるぞ

下記の例は「cro」・・・・？の場合だ

![WS000004.JPG](https://qiita-image-store.s3.amazonaws.com/0/370545/48e328cc-ed04-cb69-08cc-ca0272292dfd.jpeg)


#１文字を選ぶ「[]」

現ディレクトリからファイル名の先頭が[x][y][z]のいずれかで始まるファイルを一覧表示したいとする

その場合、「ls[xyz]*」と指定して実行するのだ。

文字の間に[-]を挿入すると、その左右の文字の間の全ての文字を指定したことになる。
例えば「[1-9]は[123456789]と指定したことになる。


![WS000006.JPG](https://qiita-image-store.s3.amazonaws.com/0/370545/bd503b3c-67ad-2e7c-82b5-eafc40b0ad5c.jpeg)


#文字列を選ぶ「{}」
・「{}」はいくつかの文字列候補を用意して、そのどれかにマッチするという条件を指定できる
・候補とする文字列は{}に、カンマ「,」で区切って指定する

例えば拡張子[log.0」と[log.old」を含むファイル一覧を表示したいとしよう
その場合、「ls*.{log.o,log.old}」と指定しt実行すればよい

カンマ「,」の間にスペースを入れてはあかんぞ

![WS000002.JPG](https://qiita-image-store.s3.amazonaws.com/0/370545/14563527-b487-b773-6412-34c33ce88729.jpeg)


(3/17更新)ワイルドカードは、存在するファイルの中でパターンにマッチするファイル名に展開するためのものだが
{}は、ファイルが存在するかどうかに関係なく、指定した(複数の)パターンに展開される

例としてls -l image.{jpg,png} とすると、ls -l image.jpg image.png と展開されて、image.png が存在しない場合 ls がエラーを報告されるぞ（感謝！）


ワイルドカードについては非常に奥が深いようで様々な使い方ができそうだ
分かり次第編集していくのだ。

ありがとうございました。
Markdownの記述まとめ

#初めに
会社の人から
「情報は発信する人にしか入って来ない。」
と言われ刺さったので、とりあえずqiitaで情報発信していこうかなと。
Outputダイジ。

# 概要
テスト投稿も兼ねて、すでに何番煎じ煎じかわからないMarkdown + α の書式を紹介。
QiitaやGitHubでも使われ、最近使用する機会が増えたので、Knowledge も兼ねて。

# コメントアウト
HTML形式でのコメントアウトも可能。
正直HTML形式の方が使いやすい。(私の場合)

```Markdown:Markdown書式
[](コメント内容)
[](複数行の \
場合は \
バックスラッシュ)
``` 

```HTML:HTML書式
<!-- コメント内容 -->
<!-- 複数行の
場合は
改行するだけ -->
```
# 見出し

見出しは以下の書式で、#を使用する。
`#`の数によって見出しの大きさを変更可能。(最大６個)
多いほど小さくなっていく。

```Markdown:Markdown書式
# 見出し1
## 見出し2
### 見出し3
```

**表示例**
# 見出し1
## 見出し2
### 見出し3

# 強調・斜体・取り消し線
`*` or `_`で斜体。
`*` or `_`が2つで強調。
`~~`で取り消し線。

```Markdown:Markdown書式
*ここ*が斜体
_ここ_が斜体
**ここ**が強調
__ここ__が強調
~~ここ~~が取り消し線
```
**表示例**

*ここ*が斜体
_ここ_が斜体
**ここ**が強調
__ここ__が強調
~~ここ~~が取り消し線

# 引用

```Markdown:Markdown書式
> 引用文
> > 二重引用
```

**表示例**
> 引用文
> > 二重引用

# リスト
`*`or`-`でリスト形式に表示。
リストの中にリストを作ることも可能。
改行する事で、リストと同じ字下げで記載可能。

```Markdown:Markdown書式
- test
* test
  * test
  - test
- test<br />test
```

**表示例**

- test
* test
  * test
  - test
- test<br />test


# チェックボックス
私の場合、GitHubでよく使う。

```Markdown:Markdown書式
- [ ] チェックなし
- [x] チェックあり
  - [ ] サブリスト
```

**表示例**

- [ ] チェックなし
- [x] チェックあり
  - [ ] サブリスト

# リンク
文字列にリンクを張る。

```Markdown:Markdown書式
Qiitaは[こちら](https://qiita.com/)から
```

**表示例**

Qiitaは[こちら](https://qiita.com/)から

# 表

```Markdown:Markdown書式
| xxx | yyy |
|:----|:----|
| test | test |
| test1 | test1 |
```

**表示**

| xxx | yyy |
|----|----|
| test | test |
| test1 | test1 |


# インラインコード
`` ` ``で囲むと背景色が変わり、見やすい形で表示してくれる。
またコードやコマンドを表示する際は```` ``` ````で囲み、
コードの種類指定とファイル名を記載することができる。
(インラインコードの中で```` ``` ````を記載できない。。。)

`````:Markdown書式

`` 文字列 ``

``bash:hello-world.sh
#!/bin/bash
echo "Hello World!!"
``
`````

**表示例**

`` 文字列 ``

```bash:hello-world.sh
#!/bin/bash
echo "Hello World!!"
```

ちなみにインラインコード内で`` ` ``を表示したい場合は、
より多くの`` ` ``で囲む。


# 改行
HTMLを少しでも触ったことがある方であれば「常識でしょ。」となるかもしれないが一応。
地味に使っている。

```HTML:HTML書式
改行をする方法です。<br />参考までに。
```

**表示例**

改行をする方法です。<br />参考までに。

# 折りたたみ
記載内容を折りたたんで表示・非表示を切り替えることを可能にする。
(HTMLですが。。。)

```html
<details>
  <summary>表示文字</summary>
  ここに内容を記載
</details>
```

<details>
  <summary>表示文字</summary>
  ここに内容を記載
</details>


# あとがき
ちょっとわかりにくいところ等あるかもしれませんが、参考になれば。
内容が間違っていたり、Typo等あればひっそりと修正します。
不足情報があれば追記もする予定。
apkインストール時のエラー対策

android端末にapkをインストールする際にエラーとなった場合のメモ。
正確に対応する場合、端末をPCに接続して Android SDK についてくる monitor.bat で詳細なログの確認をする必要があると思われるが、~~やってられないよね~~
とりあえず、事象と対応方法をメモ


### アプリのインストール時に"アプリはインストールされていません"と出力される。
#### 対応１
インストールするアプリが競合していた可能性。
既存のアプリをアンインストールして再実施

### 対応２
対応１でも解決しない場合、
Playストア の設定メニューから「Playプロテクト」を開く。
「端末をスキャンしてセキュリティ上の驚異を確認」のチェックを外した後に再実施。
テンプレート継承方式のテーマ構築について

## テンプレート継承方式とは

テンプレートを構築する際に、ヘッダ・フッタなどのインクルードを各テンプレートに記載するのではなく、全体のレイアウトを定義した「親テンプレート」を継承してから、変更したい箇所のみを上書きする構築手法のことです。
Movable Typeではレイアウトテンプレート全体を、タグの処理を遅延させる `mt:SetVarTemplate` で変数化することで実装できます。

この手法をデフォルトとしている、a-blog cmsの解説が比較的理解しやすいかもしれません。
https://developer.a-blogcms.jp/release28/ajax/extends.html

```layout.html
<html>
（ヘッダとか）

@section(main)
<h2>こんにちは！</h2>
@endsection

（サイドメニューとか）
（フッタとか）
</html>
```

```entry.html
@extend(layout.html)

@section(main)
<h2>ブログ記事のタイトル</h2>
<p>ブログ記事の内容</p>
@endsection
```

## テンプレート継承方式の利点

各CMSへの高度な理解が必要となりますが、各テンプレートの見通しが良くなり、テンプレートによって全体のレイアウトが大幅に変わるようなサイトにも対応しやすいです。

## MovableType.netでも導入してみたい

MovableType.netでは `mt:SetVarTemplate` タグが使用できません。
https://movabletype.net/tags/list/

このため、`mt:SetVerBlock` で代用して、以下の通り変更点をレイアウトテンプレートよりも先に書くことになります。
`<mt:Unless name="（変数名）">〜</mt:Unless>` で包括することで、指定しなかった場合のデフォルトのソースコードを定義することができます。

テーマ内の変数が増えると不具合の回避が難しくなりますが、一般的な方法よりもコードの見通しは良くなるかもしれません。

```html:layout.mtml
<html>
（ヘッダとか）

<mt:Unless name="__main__">
    <mt:SetVarBlock name="__main__">
    <h2>こんにちは！</h2>
    </mt:SetVarBlock>
</mt:Unless>
<mt:Var name="__main__" />

（サイドメニューとか）
（フッタとか）
</html>
```

```html:entry.mtml
<mt:SetVarBlock name="__main__">
<h2>ブログ記事のタイトル</h2>
<p>ブログ記事の内容</p>
</mt:SetVarBlock>

<mt:Include module="レイアウト-基本" />
```
Node.jsデバッガが起動しなくて嵌まった話(./を付けて解決)

Typescriptではprintfデバッグならぬconsole.logデバッグを使うことがあるが、扱う対象が大きくなるとなんだかわからなくなってくる。そんなときのために、NestJSでは`package.json`で`start:debug`というコマンドが用意されていて、すぐにChromeのInspectorが起動できるようになっている。

ところが、起動しようとしていきなり嵌まったので、解決法を残す。node.jsのバージョンが違うと挙動が変わるらしいので、万能ではないとは思う。

#エラー
node.jsのデバッガを起動するところはうまくいった。

```
>npm run start:debug

> server@0.0.0 start:debug <プロジェクトルート>
> nodemon --config nodemon-debug.json

[nodemon] 1.18.10
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: <プロジェクトルート>\src/**/*
[nodemon] starting `node --inspect-brk -r ts-node/register -r tsconfig-paths/register src/main.ts`
Debugger listening on ws://127.0.0.1:9229/8dd8a608-7627-4ad7-801e-bf112d379e6f
For help, see: https://nodejs.org/en/docs/inspector
Debugger attached.
```
Chromeで`chrome://inspect`にアクセスし、対象のポート(ここでは`9229`)を選択するところも問題なかった。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/296170/fa394774-c606-d481-87a4-b80cd9300890.png)

ところが、`inspect`を押したらエラーが発生し、コマンドプロンプトには以下のエラーが表示された。

```
internal/modules/cjs/loader.js:605
    throw err;
    ^

Error: Cannot find module 'src/main.ts'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:603:15)
    at Module._compile (internal/modules/cjs/loader.js:700:31)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:732:10)
    at Module.load (internal/modules/cjs/loader.js:620:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
    at Function.Module._load (internal/modules/cjs/loader.js:552:3)
    at Module.require (internal/modules/cjs/loader.js:657:17)
    at Module._preloadModules (internal/modules/cjs/loader.js:842:12)
    at prepareUserCodeExecution (internal/bootstrap/node.js:297:7)
    at startExecution (internal/bootstrap/node.js:275:5)
Waiting for the debugger to disconnect...
```

Chromeのデバッグウィンドウにも以下のようにエラーメッセージが表示されていた。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/296170/e1c11781-456f-168b-6519-67dbe797c322.png)

#GitHubの情報
エラーメッセージの`internal/modules/cjs/loader.js:605`と`inspector`などのキーワードから、Node11.4.0でエラーが起きるという書き込みを見つけた。バージョンでエラーが出るようになるので新しいバージョンは怖い…

https://github.com/nodejs/node/issues/25967
> Using ./index.js on the command line instead of index.js will make it work.
> 
> node -r ./preload.js --inspect-brk ./index.js
> 
> Not suggesting that requiring ./ to start the path is OK or anything. Just offering it up in case it helps someone track what's gone wrong here.

どうやら、パスの指定で`./`を付けるとうまくいくらしい。

#処置
`NestJS`のテンプレートで生成される`nodemon-debug.json`で、パスを`src/main.ts`から`./src/main.ts`に修正したらあっさり直った。そのうちバグが修正されるかもしれないが、今はこれでOKそう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/296170/cad415cb-69e3-0d4b-58e4-7662414ea14e.png)

```jsonnet:修正前
{
  "watch": ["src"],
  "ext": "ts",
  "ignore": ["src/**/*.spec.ts"],
  "exec": "node --inspect-brk -r ts-node/register -r tsconfig-paths/register src/main.ts"
}
```

```json:修正後
{
  "watch": ["src"],
  "ext": "ts",
  "ignore": ["src/**/*.spec.ts"],
  "exec": "node --inspect-brk -r ts-node/register -r tsconfig-paths/register ./src/main.ts"
}
```
Regular Expressions:　正規表現

https://javascript.programmer-reference.com/js-regexp-sample/

    正規表現パターンに使用されている記号を指定したい場合は、\マークでエンコードすればOKです。（例：$→\$、\→\\）

正規表現記号

正規表現は以下のパターン記号を組み合わせて指定します。
【正規表現記号】 記号	意味	例
^	先頭にマッチ	/^abc/	abcdef → ○
xabcdef → ×
$	末尾にマッチ	/de$/	abcde → ○
abcdef → ×
a{x}	aのx回繰り返し	/^\d{4}$/	1234 → ○
123a → ×
a{x,}	aのx回以上繰り返し	/^[0-9]{3,}$/	12 → ×
123 → ○
abc → ×
a{x,y}	aのx回以上y回以下繰り返し	/^[0-9]{3,4}$/	12 → ×
123 → ○
1234 → ○
12345 → ×
a+	aの１回以上繰り返し	/^[0-9]+$/	"" → ×
1 → ○
12 → ○
A → ×
a*	aの０回以上繰り返し	/^[0-9]*$/	"" → ○
1 → ○
12 → ○
A → ×
a?	aの０回以上１回以下の出現	/^[0-9]?$/	"" → ○
1 → ○
12 → ×
A → ×
[ABC]	AまたはBまたはCとマッチ	/[ABC]/	AXBXCXD → ○
BBB → ○
XYZ → ×
[^ABC]	AまたはBまたはCとマッチしない	/[^ABC]/	AXBXCXD → ○
BBB → ×
XYZ → ○
[0-9]	0～9いずれかとマッチ	/[0-9]/	"" → ×
123 → ○
1a → ○
ab → ×
[a-z]	a～zいずれかとマッチ	/[a-z]/	"" → ×
123 → ×
1a → ○
ab → ○
[A-C]	A～Cいずれかとマッチ	/[A-C]/	"" → ×
123 → ×
1A → ○
XY → ×
[a-z0-9]	a～z、0～9いずれかとマッチ	/[a-z0-9]/	"" → ×
123 → ○
1a → ○
ab → ○
AB → ×
(文字1|文字2)	文字1または文字2とマッチ	/(inu|neko)/	"" → ×
inu → ○
kuma → ×
ko → ×
mikeneko → ○

よく使われるパターンはメタ文字として定義されています。
【メタ文字】 メタ文字	意味
.	任意の１文字
\w	半角英数字とアンダースコア（_)
\W	半角英数字とアンダースコア（_)以外
\d	半角数値
\D	半角数値以外
\s	空白記号（半角スペース、全角スペース、タブ文字）
\S	空白記号以外
\n	改行文字
\t	タブ文字
\0	null
正規表現パターン例

よく使われるパターン例をまとめてみました。
【正規表現パターン例】 内容	パターン
１文字以上の半角英数字とマッチ	/^\w+$/
０文字以上の半角英字とマッチ	/^[a-zA-Z]*$/
6文字以上8文字以下の半角英数字とマッチ	/^\w{6,8}$/
6文字以上8文字以下の文字とマッチ（文字種問わず）	/^.{6,8}$/
任意の４文字とマッチ	/^.{4}$/
半角数値1～3で構成された４文字とマッチ	/^[1-3]{4}$/
"A"、"B"、"C"で構成された４文字とマッチ	/^[ABC]{4}$/
"A"、"B"、"C"で構成された４文字とマッチ（大文字小文字問わず）	/^[ABC]{4}$/i
"A"、"B"、"C"以外で構成された４文字とマッチ	/^[^ABC]{4}$/
郵便番号形式（半角数値3桁-4桁）	/^\d{3}-\d{4}$/
"inu"、"neko"が含まれている場合にマッチ	/(inu|neko)/
【VirtualBox】突然ホストオンリーアダプタが機能しなくなった

## 事の始まり

Nginxを触るためにdockerを利用しようと、VirtualBox上のCentOSを立ち上げようとしたら

仮想マシン"xxx"のセッションを開けませんでした。
Interface ('VirtualBox Host-Only Ethernet Adapter') is not a Host-Only Adapter interface (VERR_INTERNAL_ERROR).

のエラーが発生し、起動できなくなった。

## 状況確認

CentOSのネットワーク設定より、ホストオンリーアダプタを確認すると、
名前が未選択になっていた。(画像は問題解決後のもの)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/299667/29a96bee-1bde-84a9-b8d8-e49d89308d70.png)

Windowsのデバイスマネージャーのネットワークアダプターを確認すると
VirtualBox Host-Only Ethernet Adapterが無くなっていた。。

## 解決策

VirtualBoxマネージャーのファイルより、ホストネットワークマネージャーを選択

![ホストオンリー.png](https://qiita-image-store.s3.amazonaws.com/0/299667/47789ad2-3f46-5b32-a015-489e64c3d541.png)

Createを押下

![image.png](https://qiita-image-store.s3.amazonaws.com/0/299667/3263649d-08d9-3ff5-4c5a-df22b6fabc76.png)

ホストオンリーアダプタが作成されたことを確認

![image.png](https://qiita-image-store.s3.amazonaws.com/0/299667/4d68d3d0-1d87-927f-601f-e0dd4e247ef8.png)

対象のOSの設定>ネットワーク>ホストオンリーアダプターの名前の選択で
作成したホストオンリーアダプターを選択

![image.png](https://qiita-image-store.s3.amazonaws.com/0/299667/22ce30c2-31bd-47bf-9300-916baf441c2d.png)

設定後、無事起動したことを確認

## 今回の事象が発生した原因

不明。Windowsのアップデート？Hyper-Vも入れているからその影響？？
誰か原因知っていますか・・・
E2EテストでCypressを使いませんか

### What kind of note?
ゆるいTech系記事です。世に出して育てていくスタイルを取るので、がしがし更新をかける予定です。
> _Release note_ 
> 2019/03/16 : 1.0

今回は、ウェブブラウザ（chrome）を用いた画面操作自動化ツール「Cypress」を紹介したいと思います。
### Who are u?
京都で働く２０代です。縁あって自動ツールを使っています。
### Table of Contents
今日のお話は以下３つに要約されます
1. Cypressでできること//「Seleniumさん、jsまたこけたぁ」という人におすすめ。
2. Cypressでできないこと//「複数タブはやーらない！」トレードオフですね。
3. Cypressを選ぶ理由// npm使って終わり。わからない人はフォルダごそっ。

# Cyprss でできること
https://vimeo.com/237527670
Cypressは、ブラウザの自動操作をすることができるツールです。これにより、あなたが操作をして確認するおよそすべてのテストを自動で実行することができます。
Cypressを使うユーザの主な利用目的は、Web開発におけるE2Eテストです。
（E2Eテストとは、テストのピラミッドにおける頂点にあたるテストで 、画面上での操作や画面上の要素などを確認します。詳しくは[こちらへ](https://qiita.com/mt0m/items/7e18d8802843d9f60d28)。）

- ボタンを押す、モーダルを触る
サイト上に用意したボタンを押してページ遷移することは人には簡単でもプログラムで実行することは難しいです。しかし、Cypressなら、要素を選択して .click()と書くだけでボタンを押してくれます。もちろん、ぴゅっと出てくるモーダルでもOK
- テキストの確認
タイトルを取得して照合したり、表示されたモーダル内に記載されたテキストが予想していたものと一致しているかを確かめたりすることができます。
もちろん、ログインして確認できるページへも訪問できます。
- Basic認証の設定、UAの偽装
開発環境でテストをしようと思った場合、Basic認証をクリアしなければなりません。もちろんそういった対応も可能ですし、モバイル用のテストを検討するためのUA偽装も可能です。

つまり、**ボタンを押したり、モーダルが出てくるの閉じたり、クッキー渡して遷移する画面がたくさんあったり**、というテストケースが多いのであれば、Let's Cypress となるわけです。

# Cypressでできないこと
- **複数タブに対応していません**
これは公式が発表しています。「複数開く意味ないから新しくvisitしなはれ」といっています。
これに伴い、ポップアップから選択して、という動きもできないです（・・・）。
- **たぶんいろいろある**
触り始めて１ヶ月のため、まだまだCypressのことを知らないため、やりたいこともできないことも少ないです。公式にはこれできない、とか、forumにもたくさん質問が出ているので、もっとたくさんあると思います。続々追記していきたいと思います。

# Cypress を選ぶ理由
-  **インストールがとても簡単**
npm を利用してインストールできるので、環境構築がpuppeteerやSeleniumと比較してとても簡単でした。つまり、沼がない、ということです。

- **npmわからない人にも親切な設計**
npmなにそれ、新しいお店？ という人向けにzipを用意しています。なんと、これをダウンロードするだけで、Cypressの環境が整います。よって、チームで取り組み時などには、先人が頑張ったフォルダをぽいっと渡すだけで、新人にも環境が整います。あとは実行したり、書き換えてテストケースを増やしていけばいいだけ、となります。

---

同じようなツールにGoogleが開発しているpuppeteer があります。これはヘッドレスで動いてくれる、コミュニティが盛ん、というスグレモノのようですね。
こちらも近い人が触っているので、近い将来比較検討ができるかと思います。今はお互い一長一短を見てみようというフェーズのため、またいつか報告したいと想います。
PureScriptでクイックソートする

## 書き方

PureScriptでのクイックソートはこんな感じです。

```haskell:Quicksort.purs
import Prelude
import Data.List

qsort :: forall a. Ord a => List a -> List a
qsort Nil     = Nil
qsort (x:Nil) = (x:Nil)
qsort (x:xs)  = qsort smallerOrEqual <> (x:Nil) <> qsort bigger
   where
         smallerOrEqual = filter (\n -> n <= x) xs
         bigger         = filter (\n -> n > x)  xs
```

##  使い方

REPLを開いて、QuicksortモジュールとData.Listモジュールを読み込んで、qsort関数にリストを渡します。

```
$ pulp repl
PSCi, version 0.12.3
Type :? for help

import Prelude

> import Quicksort 
> import Data.List
> qsort (10:9:8:7:6:5:4:3:2:1:0:Nil)
(0 : 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : 10 : Nil)

> qsort (10:9:8:7:6:5:4:3:2:1:0:(-1):(-2):(-3):Nil)
(-3 : -2 : -1 : 0 : 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : 10 : Nil)

> qsort (2:5:62:19:6:216:(-46):1:0:2157:9:(-1745):9:1:58:100:74:Nil)
(-1745 : -46 : 0 : 1 : 1 : 2 : 5 : 6 : 9 : 9 : 19 : 58 : 62 : 74 : 100 : 216 : 2157 : Nil)
```

型がOrdクラスのインスタンスであればソートできるので、リストに含めるのは文字とか文字列でもOKです。

```
> qsort ("Bob":"Alice":"Denny":Nil)
("Alice" : "Bob" : "Denny" : Nil)

> qsort ("Oliver":"Geroge":"Harry":"Jack":"Jacob":"Noah":"Chalie":"Archie":"Ethan":"Finley":Nil)
("Archie" : "Chalie" : "Ethan" : "Finley" : "Geroge" : "Harry" : "Jack" : "Jacob" : "Noah" : "Oliver" : Nil)
```
pandas_bokeh のインポート時に ImportError: cannot import name 'cumsum' 

こちらの記事→[まだBokehで消耗してるの？これからはPandas-Bokehを使おうぜ | Wizard In The Market](http://fx-kirin.com/python/pandas-bokeh/)に煽られて、pandas-bokeh を使ってみることにしました。

無事描画はできたのですが、途中引っかかったエラーをシェアします。

## install 

``` 
$ pip install pandas_bokeh
```

## Error その１ ImportError: cannot import name 'cumsum'

インストールじたいは、問題なく済んだのですが、 `import pandas_bokeh` すると

```

ImportError                               Traceback (most recent call last)
<ipython-input-1-02eea91c5ad7> in <module>()
----> 1 import pandas_bokeh

/home/common/app/anaconda3/envs/py36/lib/python3.6/site-packages/pandas_bokeh/__init__.py in <module>()
      3 
      4 from .base import output_notebook, output_file, plot_grid, embedded_html
----> 5 from .plot import plot, show, FramePlotMethods
      6 from .geoplot import geoplot
      7 

/home/common/app/anaconda3/envs/py36/lib/python3.6/site-packages/pandas_bokeh/plot.py in <module>()
     25 from bokeh.palettes import all_palettes, Inferno256
     26 from bokeh.models.ranges import FactorRange
---> 27 from bokeh.transform import dodge, cumsum
     28 from bokeh.core.properties import value as _value
     29 from bokeh.models.glyphs import Text

ImportError: cannot import name 'cumsum'
```

ググってもわからなかったので、bokeh を更新してみました。

```
conda install bokeh
```
これでもう一度 `import` してみたら、今度は違うエラーが発生しました。

## Error その２ ModuleNotFoundError: No module named 'pandas.plotting'

```

ModuleNotFoundError                       Traceback (most recent call last)
<ipython-input-1-02eea91c5ad7> in <module>()
----> 1 import pandas_bokeh

/home/common/app/anaconda3/envs/py36/lib/python3.6/site-packages/pandas_bokeh/__init__.py in <module>()
      3 
      4 from .base import output_notebook, output_file, plot_grid, embedded_html
----> 5 from .plot import plot, show, FramePlotMethods
      6 from .geoplot import geoplot
      7 

/home/common/app/anaconda3/envs/py36/lib/python3.6/site-packages/pandas_bokeh/plot.py in <module>()
     31 from bokeh.events import Tap
     32 
---> 33 from pandas.plotting._core import BasePlotMethods
     34 
     35 from .base import embedded_html

ModuleNotFoundError: No module named 'pandas.plotting'
```

もしかして pandas 古いのかも？とおもって

```
conda update pandas
``` 
をして、 import してみたら、今度はできました！＼(^o^)／
SolidityでMappingの入れ子をするには

SolidityでMapping in Mappingをする方法。

```
pragma solidity >=0.4.22 <0.6.0;

contract NestedMapping {

    // mapping(いつ => mapping(誰が => どれくらい)) ammountMapping;
    mapping(uint128 => mapping(address => uint128)) ammountMapping;

    function setAmmount(uint128 _date, uint128 _ammount) public {
        ammountMapping[_date][msg.sender] = _ammount;
    }
    
    function getAmmount(uint128 _date) view public returns(uint128) {
        return (ammountMapping[_date][msg.sender]);
    }
}
```
【備忘録】OHHTTPStubsで非同期テストメモ

久々にOHHTTPStubs使おうとしたら色々と忘れていたのでメモ
※ Quick/Nimble使用

# beforeEach

```
beforeEach {
    // hoge.comに対するリクエストであれば、
    // 指定したjsonファイルから生成したstubをレスポンスとして使う
    stub(condition: isHost("hoge.com")) { _ in
        let stubPath = OHPathForFile("items.json", type(of: self))
        return fixture(filePath: stubPath!, headers: ["Content-Type": "application/json"])
    }
}
```
OHPathForFileはBundle.main.path同様内部的にプロジェクト内のファイルを探索してくれているんだろうか
特に相対パスで指定する必要とかはなかった(一敗)

またHost以外にもHttpMethodだったりPathだったり指定することもできるようだがそのへんはまたおいおい調べる

# afterEach
```
afterEach {
    OHHTTPStubs.removeAllStubs()
}
```
個々のテストケース完了後も何もしなければstubは残り続けてしまうため、都度掃除してstub同士が干渉しないようにする必要がある

# テスト箇所
fetchÎtems()はObservable

```
context("when request to stub") {
    it("fetch successful.") {
        waitUntil(timeout: 5) { done in 
            let model = Model()
            model.fetchItems().subscribe( onNext: { items in
                expect(items[0].id).to(equal("hoge"))
                done()
            }).disposed(by: self.disposeBag)
        }
    }
}
```


waitUntil()で明示的に待ってあげないとfetchItems()からeventが流れてくる前にafterEachが発火してしまうため注意が必要(一敗)

# まとめ
OHHTTPStubs、API周りのstubを用いたテストが簡潔に記述できて大変良いと思ったので今後も積極的に活用していきたいですね
C# > Linqの検索で、複数項目を検索する (Containsを使う)



忘れるのでメモ



Whereのラムダ式の中で、Containsを使う

## Listの例

```csharp
public async static Task<List<Hoge>> GetBySerachListAsync(EntityContext context, List<string> serachList)
{
    return await context.Items.Where(x => serachList.Contains(x.value) ).ToListAsync();
}
```



## HashSetの例

```csharp
public async static Task<List<Hoge>> GetBySerachListAsync(EntityContext context, HashSet<string> serachList)
{
    return await context.Items.Where(x => serachList.Contains(x.value) ).ToListAsync();
}
```



# 補足
上記の説明でかなり端折ってますが、
EntityContextは、[Microsoft.EntityFrameworkCore.DbContext](https://docs.microsoft.com/en-us/ef/core/api/microsoft.entityframeworkcore.dbcontext)から派生したものを想定してます。

Itemsは[Microsoft.EntityFrameworkCore.DbSet<TEntity>](https://docs.microsoft.com/en-us/ef/core/api/microsoft.entityframeworkcore.dbset-1)から派生してます。


以下のような感じです。

```csharp:EntityContext.cs
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;

public partial class EntityContext : DbContext
{
	public virtual DbSet<Hoge> Items { get; set; }
   ...
}

```


```csharp:Hoge.cs
public partial class Hoge
{
    public long id { get; set; }
    public string value { get; set; }
}
```




# 追記

albireoさんのコメントによりHashSetの例を追加しました。
詳しくはコメント欄を。
albireoさんありがとうございます。
【Python】Pandasでデータセットから相関グラフを描写させる

# 概要
・友達の課題の手伝い
・とりあえず入力データをプロット
・どのあたりに相関があるのかを見出すため，相関直線（近似）を描写
・pandasをあまり使うことがないのでメモを兼ねてQiitaに記述

・[入力データセット](https://github.com/shutokawabata0723/soukan_graph/blob/master/test.csv)（ID,地価,距離）

# コード
```python
import seaborn as sns
import pandas as pd
import csv
pal = []
a = open('test.csv','r')
for i in a:
    i = i.rstrip().split(',')
    ID = int(i[0])
    kakaku = int(i[1])
    kyori = float(str(i[2]))
    LINE = [ID,kakaku,kyori]
    pal.append(LINE)#ID,価格,距離情報のリストをpalにアペンドして二次元配列に
    
print pal

sns.set_style("whitegrid")
tips = pd.DataFrame(pal,columns=('ID','kakaku','kyori'))
tips
sns.regplot(x="kyori",y="kakaku",data=tips)#距離を横軸，価格を縦軸としてプロット！
```
#結果
![graph_soukan.png](https://qiita-image-store.s3.amazonaws.com/0/377231/e832ab76-c377-113f-4576-60d3047b4689.png)

・結果をみてわかることは，ある地点からの距離が近いほど土地の価格は高く，離れるにしたがって安くなっているということ．
・東京駅かスカイツリーってとこか？

# Github
https://github.com/shutokawabata0723/soukan_graph
[Swift] CaseIterableなEnumの次の要素を取得する

###動機

N-State toggle buttonが欲しかった。

###経緯
N個の状態を渡すと、ボタンを押すたびに順に状態が変わるボタン。
例えば ["State1", "State2", "State3", "State4"]を渡すと、クリックするたびにそのラベルが State1 → State2 → State3 → State4 → State1 → と変わっていくボタン。

Swiftなのだから、状態はenumで持ちたい。

そうなると、ローテーションができないのでは？？？？

CaseIterableを使えばいけるかも。

###結果
できた！

```swift
extension CaseIterable where Self: Equatable {

    func next() -> Self {
      
      let all = Array(Self.allCases)
      let count = all.count
      
      return all.firstIndex(of: self).map { all[($0 + 1) % count] }!
    }
}
```




###問題点

あれ？
`CaseIterable#allCases`の順番がどうなるかが不定...
CodePenでVue.jsを利用する方法

[CodePen](https://codepen.io)、HTML/CSS/JavaScriptをちょっと試したいときやショーケースに使用する際にとても便利ですよね。

この記事ではCodePenでVue.jsを利用する方法について記載しています。
少しコツが要る点もあったので共有したいと思います。

# Settings

Penを作成したら、まずは`Settings`を開いて設定をします。

## JavaScriptタブ

`JavaScript`タブで設定を行います。

### Add External Scripts/Pens
`Search CDNjs`の検索入力欄で`vue`を検索して選択します。[^1]
`Save & Close`を押して設定を保存します。

これでVue.jsが読み込まれるようになりました。

# Vue.js devtools

[Vue.js devtools](https://github.com/vuejs/vue-devtools)を利用するための設定を行います。いくつか手順があります。

まずは、JSコードに`Vue.config.devtools = true;`をVueインスタンス生成の前に書きます。

そして、デフォルトの`Editor View`ではdevtoolsが有効にならないため、`Change View`で`Debug mode`を選択して開きます。こうして開いた画面ではdevtoolsが有効になります。

# コードの土台

コードの土台としては以下のようになります。

**HTML**

```html
<div id="app">
</div>
```

**JS**

```javascript
Vue.config.devtools = true;

new Vue({
  el: '#app'
});
```
あとは普通に書いていくだけです！

# クラスとスタイルのバインディングについての注意

注意として、クラスとスタイルのバインディングの際にクラス名などにハイフンが含まれている場合、それらを指定する時は下のようにシングルクォーテーションで囲む必要があります。私はここでけっこうハマりました。

```css
:class="{ 'is-active': isActive }"
```

# まとめ

少し設定が必要ですが、以上の手順でCodePenでVue.jsを利用できるようになったはずです。
Vue.jsでちょっと遊びたい時などはCodePenを使ってみてはいかがでしょうか。

[^1]: この記事を執筆時点では`https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.9/vue.min.js`が読み込まれました。
MTG アリーナのエクスポートした日本語デッキの振り仮名を削除するサイト

https://khsk.github.io/MTG-Arena-remove-furigana/

今回はGitHub Pagesに置きました。

これ

![before.png](https://qiita-image-store.s3.amazonaws.com/0/62354/d4f3f606-13d5-4095-8b30-179059e1c322.png)

が

![after.png](https://qiita-image-store.s3.amazonaws.com/0/62354/ecd067a7-898d-c6ac-bf4d-6f5132a112e3.png)

こんな感じに

前回の[MTG アリーナのEXPORTしたデッキを日本語に変換するスクリプト - Qiita]を書いている前後に日本語対応予定が発表され、実装されました。

変わらず英語でプレイしているので影響はないのですが、フォントや振り仮名の話がちらほら目に入っていました。
まあ振り仮名程度ならば置換でさっくり消せばいいやと作りました。

```html
<div id="contents">
  <h1>MTA Arenaでエクスポートした状態で貼り付けてください</h1>
  <textarea id="export" rows="25" placeholder="こちらに貼り付けてください"></textarea>
  <textarea id="result" rows="25" placeholder="リアルタイムに更新されます"></textarea>
</div>


<script>
  const result = document.querySelector('#result')
  document.querySelector('#export').addEventListener('input', e => {
    // 正規表現は候補はいろいろ。\Wを最短マッチでもわかりやすいか。パック名(M19)のカッコは半角なためここでは全角()を使いフリガナとしているが、一瞥のわかりやすさは低い。
    result.textContent = e.target.value.replace(/（[^（）]+）/g, '')
  })

</script>
```

全角カッコを内部含め空に置換するだけの簡単な処理ですね。

遊んでないのでわからないのですが、昔はゲーム内でも振り仮名がルビ表示になってなかったのが今は改善されている？のでエクスポートもそのうち振り仮名なしに直りそうですね。

[MTG アリーナのEXPORTしたデッキを日本語に変換するスクリプト - Qiita]: https://qiita.com/khsk/items/9695cd70205b62968fbe
macOSのアピアランスがダークモードの際に起きる、標準メールアプリのコンテンツの色が変化してしまうへの対応方法

# 結論

URL参照の画像があるとライトモードに自動的に切り替わる。


# TL;DR

下の画像のようにmacOSのアピアランスをダークに設定し、メールアプリでメールを開くとメールによって色が反転気味になることに遭遇したことはありませんか？

![qq1.png](https://qiita-image-store.s3.amazonaws.com/0/119581/a8bc1b20-a289-57d5-2e1a-e1e8854d2e68.png)

冒頭でも結論として挙げていますが、URL参照の画像があるとライトモードに自動的に切り替わります。
何がどうして自動的に判定されるかわからず数日困ったので誰かの助けになれば幸いです。


# 検証

また、macOSのアピアランスをダークに設定した上で以下の検証をメールアプリで確認しました。

- 画像がインラインの透明svg/base64透明, 黒gif etc では自動判定が入らない。
- 画像を添付して表示する場合は自動判定が入らない。
- URL参照(http/https)の画像を配置することでライトモードになる。
- メール開封の確認用などに埋め込まれているトラッキング画像でもライトモードになる。
- テキストのコンテンツでライトモードにしたい場合は、1pxの透明画像を仕込むと良い。
- 画像ありでダークモードにしたい場合の対応ができなさそう。 `@media (prefers-color-scheme: dark)` を利用しても効かない。



# Safariだとどうなるのか？
macOSのアップデートでSafariがDark Mode CSS Supportに対応するとどのようになるかSafari Technology Previewを使って調べてみました。

結果としては**「URL参照の画像の有無に関わらず自動判定されない」**(勝手にされたら阿鼻叫喚である)

今後のSafariでダークモードに対応したい場合は `@media (prefers-color-scheme: dark)` を使いましょう。

# ブラウザ対応状況等々

![qq2.png](https://qiita-image-store.s3.amazonaws.com/0/119581/c9e30ed6-e8d1-1501-aa48-727a66f8f9a3.png)
左上から右にSafari, STP, Chrome。画像の有無に関わらずダークモードでもコンテンツは変化しない。

![kap.gif](https://qiita-image-store.s3.amazonaws.com/0/119581/df2ca24e-4145-feb9-9be1-0bcb4655957f.gif)
`@media (prefers-color-scheme: dark)` を利用した場合



## Safari Technology Preview

- macOSのアピアランスをダークモードにしていても画像あり・なしに関係なくコンテンツはダークモードにならない。
- `@media (prefers-color-scheme: dark)` を利用できる。

## Safari 12

- macOSのアピアランスをダークモードにしていても画像あり・なしに関係なくコンテンツはダークモードにならない。
- `@media (prefers-color-scheme: dark)` は利用できない。

## Chrome

- ver. 73からmacOSのダークモードに対応。
- macOSのアピアランスをダークモードにしていても画像あり・なしに関係なくコンテンツはダークモードにならない。
- `@media (prefers-color-scheme: dark)` は利用できない。
- アプリケーションの枠のみmacOSのダークモードに対応している。

## Firefox
- ver. 62からmacOSのダークモードに対応。
- macOSのアピアランスをダークモードにしていても画像あり・なしに関係なくコンテンツはダークモードにならない。
- `@media (prefers-color-scheme: dark)` は利用できない。
- アプリケーションの枠のみmacOSのダークモードに対応している。

# ヨイショ

<img width="324" alt="スクリーンショット 2019-03-16 14.49.44.png"src="https://qiita-image-store.s3.amazonaws.com/0/119581/26aa627d-da67-d1d3-f334-ec29019bcd26.png">

ダークモードでもQiitaのアイコンは見やすいなぁ！
毎回git pushでパスワードを聞かれないよう設定する一連の流れ

git pushをするときに毎回ユーザーネームとパスワードを聞かれるのが面倒くさかったので、聞かれずにgit pushする方法を検索してみました。

[git パスワード を毎回聞かれる問題の解決方法](https://qiita.com/rorensu2236/items/df7d4c2cf621eeddd468)を参考にして解決することができたのでその時のメモです。


##SSHを使ってgithubと通信する
原因としましては、HTTPS通信を毎回行っていたため、パスワードを聞かれていたようです。
まずSSHに切り替える方法は、

- githubのリポジトリページのClone or downloadのところでUse SSHを選択し、URLをコピーします。
![スクリーンショット (429)_LI.jpg](https://qiita-image-store.s3.amazonaws.com/0/256858/97d4fcd3-a7aa-86c3-e230-91e71409b9f4.jpeg)

- 以下コマンドをターミナルに入力

```
git remote set-url origin コピーしたものをここに貼り付け
```

これでいったん完了です。

##公開鍵の作成
そこで、git pushしようとするとこのようなエラーが出ました。

```
ec2-user:~/environment (master) $ git push
The authenticity of host 'github.com (アドレス名)' can't be established.
（略）
Are you sure you want to continue connecting (yes/no)? Y
Please type 'yes' or 'no': yes
Warning: Permanently added 'github.com,（アドレス名）' (RSA) to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
```

公開鍵の作成が必要なようでした。
[Git サーバー - SSH 公開鍵の作成](https://git-scm.com/book/ja/v1/Git-%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC-SSH-%E5%85%AC%E9%96%8B%E9%8D%B5%E3%81%AE%E4%BD%9C%E6%88%90)
を参考に公開鍵を作成します。

```
ec2-user:~/environment (master) $ cd ~/.ssh //sshディレクトリに移動
ec2-user:~/.ssh $ ls　中身をチェック
authorized_keys  known_hosts　鍵はない
ec2-user:~/.ssh $ ssh-keygen　公開鍵を生成
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ec2-user/.ssh/id_rsa): 　エンターキー押す　
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 　エンターキー押す
Your identification has been saved in /home/ec2-user/.ssh/id_rsa.　秘密鍵作成完了
Your public key has been saved in /home/ec2-user/.ssh/id_rsa.pub.　公開鍵作成完了
```

鍵が生成されたので、githubのほうに張り付けます。

```
ec2-user:~/.ssh $ cat ~/.ssh/id_rsa.pub　catコマンドでコピー
```

githubに移動し、マイページの`personal settings`の`SSH and GPG keys`に入ります。


![スクリーンショット (432).png](https://qiita-image-store.s3.amazonaws.com/0/256858/96f33596-7442-e35f-73b1-857d9342e1a6.png)

`New SSH key`をクリックし、さきほどコピーした公開鍵をペーストします。
該当するディレクトリに移動し、git pushします。

```
ec2-user:~/environment (master) $ git push
```

成功しました！以上です。
ネコでも分かるSOLID原則(第2回)

お久しぶりです、らべねこです。
私は今「アジャイルソフトウェア開発の奥義」という本を読んでいます。
その中のSOLID原則の部分がよく分からなかったので、私なりにまとめて理解したものをQiitaに投稿しています。
今回は第2回です。
第1回はこちら https://qiita.com/labeneko/items/3033c9a0fa0772a864c2
間違い等ありましたらご気軽にコメントください。

# SOLID原則とは

多くの設計で用いられている考え方を原則としてまとめたものです
以下の5つの原則があります

S：SRP、単一責任の原則
O：OCP、オープン・クローズドの原則
L：LSP、リスコフの置換原則
I：ISP、インタフェース分離の原則
D：DIP、依存性逆転の原則
第2回は、オープン・クローズドの原則についてまとめました

# O：オープン・クローズドの原則(OCP: Open-Closed Principle)

### 守るべきルール

ソフトウェアの構成要素(クラス、モジュール、関数など)は拡張に対して開いていて、修正に対して閉じていなければならない

### ルールを守らないとどのような問題が起きるか

- プログラムのちょっとした変更でさえ、その箇所と依存関係を持つすべてのモジュール(機能)に影響を与えてしまいます

### 「拡張に対して開かれている」とは

- モジュールの振る舞いを拡張できるということ
- 仕様変更に対して、モジュールに振る舞いを追加することで対処できます

### 「修正に対して閉じている」とは

- モジュールの振る舞いを拡張しても、そのモジュールのソースコードやバイナリコードは全く影響を受けないということ

### 具体的にどのような実装をすれば良いか

- モジュールを、ある固定した「抽象」に従属させます
  - 「汎用的な機能と、その機能の具体的な実装を明確に分離する」ということ
- こうすることでコードを修正しなくても、その「抽象」の派生クラスを新たに追加するだけで振る舞いを拡張できます
- デザインパターンで言う StrategyパターンとTemplate Methodパターンの2つがOCPに準ずるために利用される最も典型的なパターン

### 落とし穴
- せっかくOCPに準じた変更に強い実装を行っていても、次に来る仕様変更には弱いということがよくあります
  - 抽象化しないほうが良かったという場合すらあります
- そのような仕様変更が起きることを先に見越していればよいのだが、そのようなことは無理です
- また、「すべてのケースに適用できる自然なモデル」は存在しません
- 実装者は、今後の仕様変更を予測することになる。正しく推測できれば勝者で、間違ったら敗者だが、大体の場合は間違えます

### 最初の仕様変更には騙される
- 今後を予測して実装するということは、ソフトウェアに不必要な複雑さを導入してしまうことになります
- そこで、最初は変更が起きないことを前提にコードを書き、最初の仕様変更時に抽象を導入するようにする。そして、同様の仕様変更には耐えられるようにしておきます

### 最初の仕様変更を促す
- 最初の仕様変更は、早い段階で飛んできてくれたほうがありがたいでしょう。したがって、以下のようなことを行います
  - 短いサイクルで開発する
  - 最も重要な機能から優先的に開発する
  - 早期かつ頻繁にソフトウェアをリリースし、出来るだけ早くかつ頻繁に顧客やユーザに提示する

### 結論
- OCPは、オブジェクト指向設計の核心であり、オブジェクト指向設計から得られる最大の利益を享受できます
- しかし、不必要な複雑さを生み出すことにもなるので、無闇に使えば良いわけではありません
- 最も頻繁に変更されるプログラム部分にだけ的を絞って抽象を適用し、早まった抽象をしないことも、抽象を使うのと同じぐらい大事なことです

第3回では、リスコフの置換原則について説明します
（らべねこしか分からないSOLID原則になっていたらごめんなさい…）
バラバラになった画像を結合するコードを書いてみた

# はじめに
バラバラになった画像を一つの画像にするコードを書いてみました。

今回は分割画像のサイズが全て同じ状況を考えています。
分割画像には元画像の左上から横に向かって`0001.png 0002.png ...`のように連番で名前がついていると仮定します。CTFではmd5でハッシュ化されていることが多いです。

# コード
```Python
from PIL import Image

def concat_horizontal(im, column):
    '''
    画像配列を受け取り，横方向に結合し，結合画像を返す
    '''
    dst = Image.new('RGB', (im[0].width * column, im[0].height))
    for x in range(column):
        dst.paste(im[x], (x * im[0].width, 0))
    return dst

def concat_vertical(im, row):
    '''
    画像配列を受け取り，縦方向に結合し，結合画像を返す
    '''
    dst = Image.new('RGB', (im[0].width, im[0].height * row))
    for y in range(row):
        dst.paste(im[y], (0, y * im[0].height))
    return dst

def concat_tile(im, row, column):
    '''
    2次元の画像配列を受け取り，結合結果を返す
    '''
    dst_h = []

    # 縦方向に結合する場合はhorizontalとverticalを入れ替え
    for i in range(row):
        dst_h.append(concat_horizontal(im[i], column))
    return concat_vertical(dst_h, row)

W,H = 45,45 #分割数に応じて変更

img = [[0]*W for _ in range(H)]
for i in range(W):
    for j in range(H):
        filename = 'picture/pieces/'+'{:04}'.format(W*i+j+1)+'.png'

        # 画像ファイルパスから読み込み
        im1 = Image.open(filename)
        img[i][j] = im1

concat_tile(img, W, H).save('concat_tile.png')
```
VSCode C++ 拡張で c++11以降のワーニングを表示させないようにする // Visual Studio Code c++11 extension warning

VSCode C++ Extentionはデフォルトではc++11以降の記述はワーニングが出ます


例えば VSCode で C++ Extention を有効化した状態で

```c++
for (auto& v: vs) {}
```
 
などと書くと


:warning: ``range-based for loop is a C++11 extension [-Wc++11-extensions]``
:warning: ``'auto' type specifier is a C++11 extension [-Wc++11-extensions]``

などといったワーニングが出力されます。

こんな時は
``settings.json``に

```json
  "clang.cxxflags": ["-std=c++14"],
```

のようにc++11以降のコンパイル引数を追加することでワーニングが出なくなります。

## 参考
[[stack overflow] Visual Studio Code c++11 extension warning](https://stackoverflow.com/questions/51046803/visual-studio-code-c11-extension-warning/51351913)
【jQuery UI Datepicker】内閣府で配布しているcsvから祝日を判定しようぜ

#経緯
今年（2019年）ゴールデンウイークは10連休になる。
カレンダーでここだけ祝日表示とか対応するの面倒ですね。

というか、そもそも〇月の第△×曜日とかいちいち計算するのって面倒ではないですかね？
今年みたいに、いつ休日が特例で変わっちゃうかもわからないですし。

[内閣府の祝日についての説明](https://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html)があるのですが、なんとここに毎年休日をまとめたcsvが存在しているようで。

もうここから祝日を読んで対応すればいいのでは？？

今回も[jQueryのDatepicker](http://jqueryui.com/datepicker/#inline "jQueryのDatepicker")さんを使わせていただきます。

#やること
csvから祝日を読んで対象日を赤文字にする。

#コード
csvを直接読むわけにはいかないので、ファイルをどこかに置く想定です。

```index.html
<input type="text" id="datepicker">

<!-- JSさんたち -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1/i18n/jquery.ui.datepicker-ja.min.js"></script>
<script src="/script.js" defer></script>
```

```script.js
//祝日読み取り
var holidays = [];
let req = new XMLHttpRequest();
req.open("get", "[syukujitsu.csvのパス]", true);
req.overrideMimeType('text/plain; charset=Shift_JIS');
req.send(null);

req.onload = function(){
  holidays = convertCSVtoArray(req.responseText);
}
req.onerror = function() {
  alert('失敗しました');
  window.stop();
}

//csvを配列化
function convertCSVtoArray(str){
	let tmp = str.split("\n");
	tmp.shift();
	let result = [];
	let date = "";

	for(let i=0;i<tmp.length;i++){
	  if(!tmp[i]) continue;
	  result[i] = tmp[i].split(',');
	  date = new Date(result[i][0]);
	  result[i][0] = getDayStr(date)
	}
  
	return result;
};

//日付をcsvのフォーマットに合わせる（yy/mm/dd）
function getDayStr(date){
  let yy = date.getFullYear();
  let mm = ("0" + (date.getMonth() + 1)).slice(-2);
  let dd = ("0" + date.getDate()).slice(-2);
  return yy + '/' + mm + '/' + dd;
}

$(document).ready(function(){
  function isHoliday(dayStr){
    for(let i=0;i<holidays.length;i++){
      if(holidays[i][0] === dayStr){
        return true;
      }
    }
    return false;
  }
  
  $( "#datepicker" ).datepicker({
    beforeShowDay: function(date) {
      if(isHoliday(getDayStr(date))){
        return [true,"ui-test"];
      }
      return [true]
    }
  });
});
```

```style.css
.ui-test .ui-state-default {
  color : #FF0000 !important;
}
```

#beforeShowDayの戻り値
3つを配列にして渡す必要があります

[日付の表示非表示(boolean),付与するクラス名,カレンダーにマウスを合わせた時のポップアップ文字]

今回は"ui-test"クラスを付与して対象文字を赤くするようにしています。
holidays配列から祝日名を戻り値3に充てれば祝日名を表示することもできます。
~~面倒なのでやっていない~~

#結果
[こんな感じ](https://hickory-pixie.glitch.me/)
一身上の都合により日曜日も赤く表示しています。
PyCharmでリモートサーバのVirtual Env環境をInterpreterとして設定する.

少しハマったので、メモ.

* `Preferences > Project > Project Interpreter` に行く.
* ⚙マークから`add remote`選択.
* ssh credentials から, サーバのssh設定と, interpreter path設定. (eg. `/home/ubuntu/miniconda3/envs/env名/bin/python`)
from_with 変数の渡し方について

#はじめに
Ruby on Railsで、`form_with`タグの中でパラメータを直接フォームから入力させないまま、値を受け渡したい時に使用するものとして、`hidden_field`と`hidden_field_tag`があります。自分はコントローラで保持している`user_id`を次のアクションに渡したい。ってときにけっこうこれを知るまで苦戦していたので簡単にまとめてみました。

#対象ユーザ
Rails触り始めた人
フォームを実装している人

#使い方
`form_with`の内部で使用するか、単体で使用するか、という使い方にあります。
`form_with`で渡すインスタンスがある場合(もしくはそれらのヘルパーを使っている場合)は、`f.hidden_field`を使う。 1個だけパラメータを単体で渡したい時は、`hidden_field_tag`を使う。

##hidden_field_tag

```
hidden_field_tagの方が使用方法はシンプルに見えます。
<%= hidden_field_tag :email, @user.email %>
```

```
公式ドキュメントの例はこちら。

hidden_field_tag 'tags_list'
# => <input id="tags_list" name="tags_list" type="hidden" />

hidden_field_tag 'token', 'VUBJKB23UIVI1UU1VOBVI@'
# => <input id="token" name="token" type="hidden" value="VUBJKB23UIVI1UU1VOBVI@" />

hidden_field_tag 'collected_input', '', onchange: "alert('Input collected!')"
# => <input id="collected_input" name="collected_input" onchange="alert('Input collected!')"
#    type="hidden" value="" />
```
hidden_field_tag どのシンボルに(第一引数)、どの値を渡すか(第二引数)、という記述。

##hidden_field

```
以下のように、第一引数にオブジェクト名、第二引数部分にvalueとして受けわたす必要があります。

公式ドキュメントによると、

hidden_field(:signup, :pass_confirm)
# => <input type="hidden" id="signup_pass_confirm" name="signup[pass_confirm]" value="#{@signup.pass_confirm}" />

hidden_field(:post, :tag_list)
# => <input type="hidden" id="post_tag_list" name="post[tag_list]" value="#{@post.tag_list}" />

hidden_field(:user, :token)
# => <input type="hidden" id="user_token" name="user[token]" value="#{@user.token}" />
```

となっています。 `form_with`の部分で`@user`などといったインスタンスを渡しているので、そのインスタンスの属性と値を指定してあげます。

まとめると、`f.hidden_field`その属性か、値は何か、という書き方

###注意点
こちらの記述だと、`params`で引用する際には,`params[:user][:email]`に保存されます。
理由は、@userの、email属性に、valueで渡した値を格納しているからですね。モデルのインスタンスの属性に格納しているから。


##公式ドキュメント
詳しい内容は公式ドキュメントを参照しましょう。 
https://api.rubyonrails.org/
大人の科学　４ビット マイコン

「大人の科学」付録の4ビットマイコンを組み立てました。実施した内容を簡易で記載します。
2009年発売の古いものです。「大人の科学」Vol.24。対象が10才以上なので、簡単な内容でした。

※ブログっぽい投稿も技術系の情報共有に入ってるのかなと思いますが不味そうなら消そうと思います


# 開封の儀

購入後10年近く寝かしていたものを押入れの奥で見つけました。こんな感じで入っていました。
![IMG_20190316_092939.png](https://qiita-image-store.s3.amazonaws.com/0/284078/42c9c954-a5c5-3992-362e-0209e292d69a.png)

開封後。基盤、土台、押しボタン、ネジ位です
![IMG_20190316_093624.jpg](https://qiita-image-store.s3.amazonaws.com/0/284078/1b61ad28-f3d7-fffe-562b-7bf921f45627.jpeg)


# 作成途中
部品も少ないため、組み立てるのは簡単でした。スピーカーをねじ止め。
![IMG_20190316_094450.png](https://qiita-image-store.s3.amazonaws.com/0/284078/c4185c72-0cc2-b82e-32b8-b169aaad64b2.png)

後は、基盤を土台にねじ止めしてボタンを基盤にくっつけると


# 完成！
超簡単ですね。４歳の娘に作ってもらいました。
![IMG_20190316_094852.png](https://qiita-image-store.s3.amazonaws.com/0/284078/4c752426-e744-aa6f-6e88-437d57df159c.png)



# モグラ叩きゲーム
サンプルでモグラ叩きゲームが付属しています。基盤上部にあるLEDのどれかがランダムに点滅します。点灯中にタイミングよくLEDの位置と適合するボタンを押すとモグラを叩いたことになります。

![Clipboard01.png](https://qiita-image-store.s3.amazonaws.com/0/284078/b4520f9f-a294-df78-3904-b2a69b393635.png)


# メロディを奏でる
※動画をアップしたかったのですが、Qiitaへの動画のアップ方法がまだわからず、現在はまだできていません...

本キットに付属のスピーカを使って、ビープ音的な簡易なものですが、
メロディを簡易でプログラムして組み立てることができます。
プログラムは付属のキーから行えます。

以上
Python手遊び(ファイルリスト作成)

#この記事、何?
手書き文字識別を試してみたくなった。
その前に学習データを画像処理するため、OpenCVで大量のファイルから画像の切り出しなどなどをやろうかと。
で、まずは学習データその他のファイルリストを作ろうと。

#方針
pathlibのPathが使えるらしい。
どこぞに上がっていたのを流用して、引数もらって拡張子でフィルタしてリストファイルを出力する感じで。

#出来上がり

```python
# python 34-01.py (targetfolder) (outputfile) (option: fileter extension)
import sys
args = sys.argv

if len(args) == 3:
    extension = '*'
elif len(args) == 4:
    extension = args[3]
else:
    exit()

target = args[1]
output = args[2]

from pathlib import Path
P = Path(target)
ret = list(P.glob('**/*'))
f = open(output, 'w')
for item in list(P.glob('**/*.' + extension + '')):
    f.write(str(item) + '\n')


```

```
(実行)
>python 34-01.py C:\projects\qiita_data png
>python 34-01.py C:\projects\qiita_data png.txt png
>python 34-01.py C:\projects\qiita_data ini.txt ini
>python 34-01.py C:\projects\qiita_data all.txt

```

```
(出力結果(一部))
C:\projects\qiita_data\20190303\drop\Screenshot_20190228-211759.png
C:\projects\qiita_data\20190303\drop\Screenshot_20190303-010209.png
C:\projects\qiita_data\20190303\etc\Screenshot_20190228-202100.png
...
```

#感想
やっちまった・・・
しばらく前に同じ方向性の別実装を作ってたことに気づいた。

これ

■Python手遊び(ファイルリスト/Hash演算)
https://qiita.com/siinai/items/233f37a97a13bba7f73c


まあ・・・いいや。せっかく作ったし。
将来、環境依存でどちらか機能しなくなったとしてもどっちかが動くでしょう・・・ない気がするけど。
ピッチ・ロール・ヨーなどの定義 Pitch/Roll/Yaw

ピッチ・ロール・ヨーなどの定義があやふやになる事が
あるので、定義を再確認

こういうのは画像ベースでいろいろな説明を読んだ方が
理解が深まると思うので写真を複数掲載する

![smallthumb_9.png](https://qiita-image-store.s3.amazonaws.com/0/342318/70ae9a35-ae72-4796-f389-74bd49239b27.png)

![sakima-EulerAngles-01.png](https://qiita-image-store.s3.amazonaws.com/0/342318/b48ebe00-c045-974c-ab2c-deb9b4c45d4c.png)
VSCodeでカーソル移動するならMetaGoが便利かもしれない

# この記事は何？
MetaGoというVSCodeプラグインの簡単な紹介記事。マウス操作なしでエディタのカーソル移動ができたり、ジャンプ、選択ができたりします。
個人的にはすごく気にいってますが、普段からvimキーバインドなどでカーソル移動をやっている人には向かないと思います。

**Marketplace**
https://marketplace.visualstudio.com/items?itemName=metaseed.metago

**Github**
https://github.com/metaseed/metaGo


# カーソル移動

Macなら「`option`+`;`」で起動できます。Windowsだと「`alt`+`j`」でいけると思います。あとは移動したいポイントに書かれている文字を入力するだけで、自動的に移動先の候補を表示してくれます。

例えば以下のソースコードで、`right`と書かれているポイントに移動したい場合。

<img width="997" alt="Screen Shot 2019-03-16 at 13.27.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/10499/ab527bd1-3009-0c80-28b1-8d05049de30e.png">

* `option` + `;`
* `r`と一文字を入力（`right`に移動したいので、先頭文字の`r`を入力している）

<img width="997" alt="Screen Shot 2019-03-16 at 13.29.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/10499/59a15227-c44e-baa1-602d-937abcf16711.png">

と、このように移動先の候補をオーバーライドしてエディタに表示してくれます。あとは移動したいポイントを入力するだけでジャンプすることができます。
（感覚としては、Chromeでvimiumプラグインを使っているのに似ていると思います）

# ブックマーク

「`option`+`'`」と入力すればブックマーク機能が使えます。個人的には、カーソル移動よりブックマーク機能の方を重宝しています。下記のような感じで、ラインNoの左側にマークをつけてくれます。

<img width="485" alt="Screen Shot 2019-03-16 at 13.41.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/10499/1819d6fa-a631-78c4-b11a-d4266d1d7a66.png">

ブックマークに移動したい場合は「`option`+`/`」です。前後のブックマークに移動できたり、ブックマークをつけた行数の候補を表示してくれます。ちなみに、違うファイルを開いているときでも有効です。

<img width="997" alt="Screen Shot 2019-03-16 at 13.42.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/10499/8af36ba2-0bd0-141d-4b89-bf9def6eecb6.png">

# その他便利なコマンド
他にも機能がありますが、自分が便利だと思っているものを紹介です。

## 次の空白行まで移動
* `cmd`+`Home`で上へ移動
* `cmd`+`End`で下へ移動

## 次の空白行まで選択
* `cmd`+`Shift`+`Home`で上の次の空行まで選択
* `cmd`+`Shift`+`End`で下の次の空行まで選択

## 1行ずつ選択
* `cmd`+`i`で上へ1行ずつ選択
* `cmd`+`shift`+`i`で下へ1行ずつ選択


# おわりに
VSCodeは本当に便利なプラグインがたくさん開発されていて、エコシステムが素晴らしいですね。独自にカスタマイズできて本当に楽しい。
"Settings schema 'org.freedesktop.Tracker.Miner.Files' is not installed"というエラーの解決法

## 何が起こったか
美しいファイルマネージャであるNautilusを開こうとしたところ、以下のようなエラーが出て起動しませんでした。

```
(org.gnome.Nautilus:11515): GLib-GIO-ERROR **: 13:42:52.960: Settings schema 'org.freedesktop.Tracker.Miner.Files' is not installed
fish: 'nautilus' terminated by signal SIGTRAP (Trace or breakpoint trap)
```

## 原因
調べたところ今朝アップデートが入っていたっぽいので、 何かしら変更があったっぽい。

## 解決法
Arch Linuxでの解決法になります。他のディストリビューションでも同じような感じかもしれない。

```shell
$ sudo pacman -S tracker-miners
```

これで動いた！
osmdroid-wms を使ってAndroid に国土国交省の地図画像を表示する

[osmdroid を使って OpenStreetMap の地図を Android に表示する](https://qiita.com/ohwada/items/c3741fb14a5142035314)
の続きです

##  WMS

WMS( Web Map Service ) は、
地図画像を配信するための標準プロトコルです。
日本では、国交省や農研機構がWMSによる地図画像を提供している。

###  osmdroid-wms

osmdroid でWMS機能をサポートするライブラリ。
現在、ベータ版でうまくいかない場合もある。

###  国交省の地図画像

国土交通省は、国土の利用や交通機関を扱う行政機関です。
国土数値情報ダウンロードサービスや国土情報ウェブマッピングシステムなどの地理情報を提供している。

国交省 ＷＭＳ機能説明
http://nlftp.mlit.go.jp/webmapc/help.html#N3

###  osmdroid-wm ライブラリを取り込む

```app/build.gradle
dependencies {

    compile group: 'org.osmdroid', name: 'osmdroid-wms', version: '6.0.2' // 追加する
```
###  osmdroid-wms の WMSTileSource

WMS で提供されているタイルを使用するためのクラス

ベースＵＲＬ、WMSバージョン、レイヤ名などを設定する。

WMS では、東西南北の４辺を指定して、地図の範囲を指定する。
WMSTileSource では、tile2boundingBox というメソッドにより、
osmdroid が必要とするタイルの範囲を自動的に計算するので、
ユーザーは意識する必要がない。

```
// 国交省の例
aBaseUrl = { "http://nrb-www.mlit.go.jp/webmapc/gis/webmap/wms?SERVICE=WMS&" };
version = "1.1.1" ;
// 市区町村界
layername = "N03-180101_200" ;

WMSTileSource tileSource = new WMSTileSource( aName, aBaseUrl, layername, version, srs, style, size );

MapTileProviderBasic tileProvider = new MapTileProviderBasic(getApplicationContext());

// ベース地図に重ねる
tileProvider.setTileSource(tileSource);
TilesOverlay tilesOverlay = new TilesOverlay(tileProvider, this.getBaseContext());
mMapView.getOverlays().add(tilesOverlay);
```
### スクリーンショット

左はベースのOSM地図、右は市区町村界を重ねたもの。
![wms1_osm.png](https://qiita-image-store.s3.amazonaws.com/0/64075/11e9b721-ab3e-dbd9-aa25-756307cd1a78.png)　![wms1_border.png](https://qiita-image-store.s3.amazonaws.com/0/64075/5d773166-963f-5497-9ea4-1457d270c23e.png)

github にサンプルコードを公開した
https://github.com/ohwada/Android_Samples/tree/master/Osmdroidwms1
GO言語 + Quandl で株価を取得しよう

# はじめに

思いつき記事です。
GO言語を勉強して、はや半年くらいたちました。

やったこととしては

+ GO言語の公式ドキュメントを読む。
+ A Tour of Goを２周した。
+ Udemyの「Go入門＋応用」を一通りやった。

がしかし！！！！！！！
全く覚えられない！！！！！

なので、絶賛アウトプットして知識を深めている最中です。
(GO言語 + Vue(Elm)で個人的に何か作ろうプロジェクト進行中ですが)

この記事ではGO言語で株価を取得してみようというタイトルで進めていきます。

# 経緯
友達が「来月から株始めるわ！」と言ってきたので、「じゃあ、株取得してみるわ（APIで）。」となりました。

PythonでAPI取得して、それをグラフ化するというのもいいかなと思いましたが、Qiitaに色々ありましたので、GO言語で挑戦してみます。

# 手順
GO言語って便利ですね。
サードパーティで「quandl」（株価取得ライブラリ）がありました。

[参考：package quandl](https://godoc.org/github.com/DannyBen/quandl)

最初は上記の参考URLの手順で進めていきます。

## インストール
まずはquandlパッケージのインストールから始めましょう。

```
$ go get github.com/DannyBen/quandl
```

## コード
とりあえず簡単なサンプルコードからみていきましょう。
正味、下のURL（Example）みたほうが早い説あります。
[https://github.com/DannyBen/quandl/blob/master/quandl_test.go](https://github.com/DannyBen/quandl/blob/master/quandl_test.go)

```go
package main

import (
	"os"

	"github.com/DannyBen/quandl"
)

func main() {
	quandl.APIKey = os.Getenv("QUANDL_KEY") //APIKeyを取得

	v := quandl.Options{} //Option
	//Set registers a key=value pair to be sent in the Quandl request
	v.Set("trim_start", "2017-01-01")
	v.Set("trim_end", "2017-02-02")
	v.Set("column_index", "4")

	data, _ := quandl.GetSymbol("WIKI/AAPL", v)             //第１引数に指定した銘柄のシンボルを取得
	data2, _ := quandl.GetSymbolRaw("WIKI/AAPL", "json", v) //第１引数に指定した銘柄のシンボルをjson形式で取得

//ioutil.WriteFileで保存
}
```
### 結果
```
[[2017-02-02 128.53] [2017-02-01 128.75] [2017-01-31 121.35] [2017-01-30 121.63] [2017-01-27 121.95] [2017-01-26 121.94] [2017-01-25 121.88] [2017-01-24 119.97] [2017-01-23 120.08] [2017-01-20 120] [2017-01-19 119.78] [2017-01-18 119.99] [2017-01-17 120] [2017-01-13 119.04] [2017-01-12 119.25] [2017-01-11 119.75] [2017-01-10 119.11] [2017-01-09 118.99] [2017-01-06 117.91] [2017-01-05 116.61] [2017-01-04 116.02] [2017-01-03 116.15]]
```
色々試して実行したコードなんですが、とりあえず日付と株価が取得できました。
他にも、```GetSearch```関数（文字列検索→銘柄の検索かな？）や```ToColumns```関数()など色々なメソッドがあるので、参考にしてみてください（僕も頑張って色々形になるように頑張ります）。

## メソッド追記
●```GetSymbolRaw``` ... 取得したデータをJSONで返す
●```GetListRaw``` ... 銘柄の値（リスト型）を返す
●```GetSearchRaw``` ... サーチで当てはまった銘柄の各値をJSON(XML)の型で返す
●```StringColumn``` ... インターフェース型のコラムを文字列型のコラムに変更

# まとめ
事前にPython(+Pandas)でやってみたんですが、もちろんPythonのほうが便利かもしれません。
GO言語でこのような挑戦（大した挑戦はしていない）して、Godocも徐々に読めるようになって、これからだなと思いました（白目）。
英語読めてデメリットなし。