OmniAICreator/Qiita-1.07M huggingface dataset:
(Qiita API v2 活用) Qiita のユーザーを API 経由で取得する方法

# やりたいこと

Qiita に記事を書いているユーザーを簡単に調べたい。

# ユーザー情報を確認するサンプルコード

``` bash
curl "https://qiita.com/api/v2/users?page=1&per_page=100" \
  | jq 'map(select( .["items_count"] > 0))'
```

ポイントは、Qiita の投稿がある人で絞り込んでいるところ。

# ユーザー名を指定してユーザー情報を確認するサンプルコード

``` bash
curl "https://qiita.com/api/v2/users/kojiro-s" \
  | jq .
```

## 自分のユーザー情報の確認結果

``` example
{
  "description": null,
  "facebook_id": null,
  "followees_count": 0,
  "followers_count": 0,
  "github_login_name": null,
  "id": "kojiro-s",
  "items_count": 3,
  "linkedin_id": null,
  "location": null,
  "name": "",
  "organization": null,
  "permanent_id": 84349,
  "profile_image_url": "https://qiita-image-store.s3.amazonaws.com/0/84349/profile-images/1473703070",
  "twitter_screen_name": null,
  "website_url": null
}
```

# ユーザー名を指定して Contribution を取得するサンプルコード

``` bash
CONTRIBUTION_COUNT=$(curl --silent \
  "https://qiita.com/kojiro-s" \
  | xmllint --xpath '/html/body/div[2]/div/div/div[2]/div/div[2]/a[2]/span[1]' --html - \
  | sed -e 's|<span class="userActivityChart_statCount">\(.*\)</span>|\1|g')
echo "CONTRIBUTION_COUNT=[${CONTRIBUTION_COUNT}]"
```

ユーザー情報の取得 API でコントリビューション数が取得できなかったので抽出する方法を検討。

HTML のパースエラーがでるのは、ご愛嬌。

# 参考情報

  - <https://qiita.com/api/v2/docs#ユーザ>
      - <https://qiita.com/api/v2/docs#get-apiv2users>
      - <https://qiita.com/api/v2/docs#get-apiv2usersuser_id>

この API はアカウントを作った順にユーザー情報が表示できる。

投稿数や貢献数で絞り込むことができない。

API 設計の参考になる。

  - Qiita API をシェルスクリプトから叩いて Contribution を取得
      - <https://qiita.com/kenju/items/f95a535e0c68a29943d0>

HTML をパースしてコントリビューション数を取得されている。
［Rails/SCSS］SCSSを使ってコーディングを飛躍的に効率化


![スクリーンショット 2018-02-02 5.19.17.png](https://qiita-image-store.s3.amazonaws.com/0/199441/f978359e-b7b4-bfe8-f436-b7d99c77a903.png)

## SCSSを使ってコーディングを飛躍的に効率化
### 効率化するコツ
1. 定数を定義
2. mixinを定義
3. 配列を定義してループを回す

##コード例
東京メトロのオープンデータから運転状況を呼び出すアプリ
https://tokyometroapi-and-rubyonrails.herokuapp.com/

1.定数を定義 → 各路線別のラインカラー
2.mixinを定義 → 各路線の運転状況を表示するdivの構造は共通。それに反映させるmixinを定義
3.配列を定義してループを回す → ラインカラーを格納した配列を定義して、路線別に色を設定

### HTML

```HTML+ERB:sample.html.erb
<div class="container">
<div class="row">
  <div class="info ginza col-sm-4">
  <%= image_tag("G.jpg",class: "logo") %>
  <h3>銀座線</h3>
  <p><!--運転状況の表示--></p>
</div>

<div class="info marunouchi col-sm-4">
  <%= image_tag("M.jpg",class: "logo") %>
  <h3>丸ノ内線</h3>
  <p><!--運転状況の表示--></p>
</div>

<div class="info hibiya col-sm-4">
  <%= image_tag("H.jpg",class: "logo") %>
  <h3><!--運転状況の表示--></h3>
  <p></p>
</div>
</div>

<div class="row">
<div class="info tozai col-sm-4">
  <%= image_tag("T.jpg",class: "logo") %>
  <h3>東西線</h3>
  <p><!--運転状況の表示--></p>
</div>


<div class="info chiyoda col-sm-4">
  <%= image_tag("C.jpg",class: "logo") %>
  <h3>千代田線</h3>
  <p><!--運転状況の表示--></p>
</div>

<div class="info yurakucho col-sm-4">
  <%= image_tag("Y.jpg",class: "logo") %>
  <h3>有楽町線</h3>
  <p><!--運転状況の表示--></p>
</div>
</div>

<div class="row">
<div class="info hanzomon col-sm-4">
  <%= image_tag("Z.jpg",class: "logo") %>
  <h3>半蔵門線</h3>
  <p><!--運転状況の表示--></p>
</div>

<div class="info namboku col-sm-4">
  <%= image_tag("N.jpg",class: "logo") %>
  <h3>南北線</h3>
  <p><!--運転状況の表示--></p>
</div>

<div class="info fukutoshin col-sm-4">
  <%= image_tag("F.jpg",class: "logo") %>
  <h3>副都心線</h3>
  <p><!--運転状況の表示--></p>
</div>
</div>
</div>
```

### SCSS
```SCSS:sample.scss

/* LINE COLORS */
$ginza:#FF9500;
$marunouchi:#F62E36;
$hibiya:#B5B5AC;
$tozai:#009BBF;
$chiyoda:#00BB85;
$yurakucho:#C1A470;
$hanzomon:#8F76D6;
$namboku:#00AC9B;
$fukutoshin:#9C5E31;


/* LINE COLORS ARRAY */
$line_colors:(
ginza:$ginza,
marunouchi:$marunouchi,
hibiya:$hibiya,
tozai:$tozai,
chiyoda:$chiyoda,
yurakucho:$yurakucho,
hanzomon:$hanzomon,
namboku:$namboku,
fukutoshin:$fukutoshin
);


//mixin
@mixin box($color){

height:auto;

background-color:white;
box-shadow:1px 1px 2px gray;
border-bottom:$color 3px solid;

img{
  width:20px;
  height:20px;
  position:absolute;
  top:11px;
}

h3{
  margin-top:10px;
  margin-left:30px;
  font-size:20px;
  font-weight:bolder;
}


.content{
  float:left;
  margin-top:10px;
}
}


//ラインカラーを各路線別に設定
@each $line,$color in $line_colors{
  .#{$line} {
    @include box($color);
  }
}
```
[小ネタ] Azure Portal のヒミツ - 其の弐

#はじめに
Azure Portal が調子よくないときに、ちょっと役立つかもしれない裏ワザです。

#手順
1. Azure Portal にログインします。
2. この辺の画面どこでも良いので、おもむろに、"Ctrl+Alt+A" を同時に押します。
![001-0001.png](https://qiita-image-store.s3.amazonaws.com/0/199379/0699a578-3b2a-08db-92e4-ff699aac514a.png)

3. おや…。。。"PortalDiagnostics.json" というファイルが…？
![001-0002.JPG](https://qiita-image-store.s3.amazonaws.com/0/199379/d8b02f63-8229-1a35-116a-bd79ff29a41a.jpeg)

#解説
"PortalDiagnostics.json" は、その名の通り、Portal のトラブルシュートに使えそうな諸々の情報が列挙されたファイルです。

- セッション開始時刻
- セッション ID
- 利用している Portal のバージョン
- それぞれの機能ごとの Extension のバージョン
- ログインしているユーザーの情報
- ログインしている AAD テナントの情報
- ログインしているサブスクリプションの情報

その他、サポートの人が見ないとよくわからなそうな諸々…。

というわけで、うちのポータルなんかおかしいぞ！と思ったら、"PortalDiagnostics.json" と、起きている現象のスクリーンショットあたりを添付して、[サポートに問い合わせ](https://azure.microsoft.com/ja-jp/support/plans/)てみると話が早いのではないでしょうか…！？
24x365でサービスダウンの復旧をサポートしてくれるような、Standard プランでも月額11,200円とお買い得になってますので、マストバイな感じでいかがでしょう？

#まとめ
その壱に比べると、なんだか爽快感に欠けるな…。
PHPで少しでも速いコードを書きたい時のためのメモ

ライブラリ作者にとっては同じ書くなら遅いコードより早いコードを書くことを心掛けたいもの。この記事では忘れがちな速いコードの書き方について外部サイトの記事をまとめたいと思います。
（環境によって違うよなどご意見あればコメントお願いします）

※2018/2/3 追記
この記事は「アプリケーションレベルの実行速度の最適化」を語るものでも、保守性・安全性・拡張性等のパフォーマンスに関する特性以外のコード改善策についてまとめたものではありません。


# elseif vs else if

ページ                                                              |結論
-------------------------------------------------------------------|----------------
[php elseif と else if の違い](https://neoinspire.net/archives/750) | elseifが速い

※2018/2/3 追記
else ifとelseは最新のオプティマイザであれば理論上実行時間に差はない。


# echo VS print  

ページ                                                              |結論
-------------------------------------------------------------------|--------------------
[PHP速度対決！差が出る5パターン](http://wp.tech-style.info/archives/123)| echoが速い

※2018/2/3 追記
echoとprintの理論上の実行時間は同じとなる。

# ===演算子 VS ==演算子

ページ                                                              |結論
-------------------------------------------------------------------|------------------------
[PHP速度対決！差が出る5パターン](http://wp.tech-style.info/archives/123)| ===が速い


# for VS foreach

ページ                                                              |結論
-------------------------------------------------------------------|-------------------------
[PHP速度対決！差が出る5パターン](http://wp.tech-style.info/archives/123)| foreachが速い

# for VS foreach(イテレータ) VS ジェネレータ

ページ                                                              |結論
-------------------------------------------------------------------|-------------------------
[PHPのジェネレータはイテレータより速い](http://d.hatena.ne.jp/hnw/20131102)| for＞＞ジェネレータ＞イテレータ

# if VS switch

ページ                                                              |結論
-------------------------------------------------------------------|---------------------
[PHP速度対決！差が出る5パターン](http://wp.tech-style.info/archives/123)| switchの方が少し速いがほぼ同じ
[stackoverflow](https://stackoverflow.com/questions/10773047/which-is-faster-and-better-switch-case-or-if-else-if)| 場合による

[こちらのページ](https://derickrethans.nl/php7.2-switch.html)ではPHP7.2からswitchのoptimiserが実装され、固定値のラベルに限りジャンプテーブルに変換されるようなので、固定値でたくさんのラベルを書く場合はswitchが有利になるケースもあるかも。

そもそも「[switch文を使ってはいけない](http://blog.tojiru.net/article/403698034.html)」という話もありますが...

（以下、随時追加予定）
シェルで生成した外部入力をpythonスクリプトに読ませて実行する

必要に迫られてあれこれ試行錯誤した結果，以下の方法でできるらしいことが判明．

## Pythonコードの例

例として，読み込んだ外部入力の数字の2乗を返すコード：

``` example.py
print "input:"
i=raw_input(">> ")
i=float(i)
print i**2
quit()
```

## シェルスクリプトの書き方

forで異なる外部変数を与えるようにしてみる：
※事前にexpectを

```
apt-get install expect
```

でインストールしておくこと．

``` test.sh
#/bin/sh
for itera 1 2 3 4 5
do
expect -c "
        set timeout -1
        spawn python example.py
        expect \">>\"
        send \"${itera}\n\"
        expect \"hoge\"
"
done
```

## 実行結果
あまり腑に落ちていないが，とりあえず上手くいっているようである．

```
spawn python example.py
input:
>> 1
1.0
spawn python example.py
input:
>> 2
4.0
spawn python example.py
input:
>> 3
9.0
spawn python example.py
input:
>> 4
16.0
spawn python example.py
input:
>> 5
25.0
```

コツとしては，シェルスクリプト内expectの中身の最後に

```
expect \"hoge\"
```

みたいな（一見意味のない）やつを噛ませると上手くいく．これが無いと何故か上手くいかなかった．
【Live2D】2軸パラメータを使った揺れ表現のススメ

#-前段
こんにちは、aonekoです。
ここ最近は夜な夜な揺れ物表現を色々試していた中の人です…。（ゆらりんこ）
今回はスキニング機能が実装されるより以前に中の人が使っていた、
髪の毛などの揺れ物を2軸パラメータを使って表現する方法の紹介です。

揺れ物表現といえば最近実装されたスキニング機能がありますが、
組み合わせて使ったり、デフォーマに対して適用したり、
多くなりがちなパラメータの数を少なくまとめるなど、
アイデア次第で色々使いでがあるかな？と思いますので参考までにご紹介。

※この記事で使用しているLive2D制作用のイラストは、以下で無料公開されている素材をお借りしています。
[ジュエルセイバーFREE http://www.jewel-s.jp/]

#-基本的な考え方
・**大きな振幅**
・**小さな(先端の)振幅**
髪の毛などの揺れ物の動きをこの2つの要素に分けて考えます。
適用するパラメータも2つのみ。

#-パラメータを設定してみる
![2para.gif](https://qiita-image-store.s3.amazonaws.com/0/232924/16c8503e-1921-eaf8-734e-7ded7db2dc25.gif)

↑このモデルは2.1で作ったものを3.1に読み込んだものなので、
変形パスが消えてますが動き自体は変形パスで付けています。（パラメータは9点）

「……えっ、これでちゃんと滑らかに動くの…？」
という気持ちをぐっと抑えて実際に動かしてみます。

#-動かしてみる
![2para_move.gif](https://qiita-image-store.s3.amazonaws.com/0/232924/d8e6e4f3-5bb2-647a-7020-b88d5fea60fe.gif)

どうでしょうか？パラメータが2つだけの割には、そこそこ滑らかに動くんじゃないでしょうか？


#-【応用編】曲面デフォーマに同じ考え方を適用する

■パラメータを設定して…、、

![2para_def.gif](https://qiita-image-store.s3.amazonaws.com/0/232924/ba711e2a-270e-bc1b-e5bd-5ab266355793.gif)

■動かします。

![2para_defmov.gif](https://qiita-image-store.s3.amazonaws.com/0/232924/226df562-f3c6-3313-2b84-3ebb9bea99b6.gif)


■同じ感じで複数の髪の毛パーツに適用した例

![2para_defmov_finish.gif](https://qiita-image-store.s3.amazonaws.com/0/232924/6f8efbd5-1469-2ac2-4fa8-9f327bcf96e3.gif)
(わさ～っ)

#-結び
他にもスキニング機能と組み合わせたり、
入力に物理演算使ったりシチュエーションによっては、
使い所がありそうな気がしているので、
みなさんも何かいいアイデアあったらこっそり教えてくださいね…。
PHPでカンマ区切りの文字列を配列にして整形する

array_functionsより通常のループの方がパフォーマンスが良いそうです。
http://www.levijackson.net/are-array_-functions-faster-than-loops/
https://stackoverflow.com/questions/18144782/performance-of-foreach-array-map-with-lambda-and-array-map-with-static-function#answer-26527704

# foreach例

```php
$string = " ,　, あ,　い, う\t\n\r,え,お か,き　く,け";
$list = explode(',', $string);
$new_list = [];
foreach ($list as $value)
{
    $value = mb_ereg_replace('^[\s　]+|[\s　]+$', '', $value);
    if ($value !== "")
    {
        $new_list[] = $value;
    }
}

var_dump($new_list);
```

```
array(7) {
  [0]=>
  string(3) "あ"
  [1]=>
  string(3) "い"
  [2]=>
  string(3) "う"
  [3]=>
  string(3) "え"
  [4]=>
  string(7) "お か"
  [5]=>
  string(9) "き　く"
  [6]=>
  string(3) "け"
}
```

# array_functions例
（foreachに比べて回す回数が多いので良くないのかも？）

```php
$string = " ,　, あ,　い, う\t\n\r,え,お か,き　く,け";
$list = explode(',', $string);
$list = array_map(function ($value) {
    return mb_ereg_replace('^[\s　]+|[\s　]+$', '', $value);
}, $list);
$list = array_filter($list, function ($value) {
    return $value !== "";
});
$list = array_merge($list);

var_dump($list);
```

```
array(7) {
  [0]=>
  string(3) "あ"
  [1]=>
  string(3) "い"
  [2]=>
  string(3) "う"
  [3]=>
  string(3) "え"
  [4]=>
  string(7) "お か"
  [5]=>
  string(9) "き　く"
  [6]=>
  string(3) "け"
}
```

自分でもパフォーマンスが気になったので試してみました。

# パフォーマンス確認

[ここ](http://sandbox.onlinephpfunctions.com/)で確認

## array_functions系

```php
$start = microtime(true);
foreach(range(0, $loop_count) as $value)
{
    $string = " ,　, あ,　い, う\t\n\r,え,お か,き　く,け";
    $list = explode(',', $string);
    $list = array_map(function ($value) {
        return mb_ereg_replace('^[\s　]+|[\s　]+$', '', $value);
    }, $list);
    $list = array_filter($list, function ($value) {
        return $value !== "";
    });
    $list = array_merge($list);
}
$end = microtime(true);
var_dump(sprintf('%f', $end - $start));
```

### array_functions系3回を1セットで10000ループ

0.2～0.3秒程度

### array_functions系3回を1セットを1ループ

0.000090～0.000200秒程度

## foreach

```php
$start = microtime(true);
foreach(range(0, $loop_count) as $value)
{
    $string = " ,　, あ,　い, う\t\n\r,え,お か,き　く,け";
    $list = explode(',', $string);
    $new_list = [];
    foreach ($list as $value)
    {
        $value = mb_ereg_replace('^[\s　]+|[\s　]+$', '', $value);
        if ($value !== "")
        {
            $new_list[] = $value;
        }
    }
}
$end = microtime(true);
var_dump(sprintf('%f', $end - $start));
```

### foreach1回を1セットで10000ループ

0.14～0.25秒程度

### foreach1回を1セットで1ループ

0.000074～0.000170秒程度


# 結果

array_functionsを数パターン駆使して実装したものとforeachで一括で実装したものを
10000週程すると差が出てきたのははっきりとわかりました。

何週も回す処理でない限りパフォーマンスの差は殆ど出ないので1回だけの普通の処理を実装するなら見やすいほうだったりと好きな方で良いかなと思います。
しかし、実際に業務で使うようなCSV(パースはCSV用の関数を使ってください)は件数も多い（ループが多い）と思いますのでforeachでまとめて処理といった感じになるとおもいます。
LightBoxで簡単にギャラリーの実装ができたので導入と使い方メモ


# はじめに

## 公式サイト

公式ドキュメント、デモは[こちら](http://lokeshdhakar.com/projects/lightbox2/)から

## LightBoxとは

簡単に言うとWebサイトでよく見かける、クリックすると画像がぽわ〜っと拡大して表示されるアレです。

個人的な依頼でWebサイトをつくることになりまして、

 - 「ギャラリーページが欲しい」
 - 「んで画像の横クリックしたら次の画像に移動するやつがいい」
 - 「それと画像のグループが変わり目では移動させないで」
 - 「あ、画像毎にタイトルも表示させたい」

と言った要望があり、色々と探した結果`LightBox`に行き着きました。

ではどんな機能か、まさしく要望にあった通りです。

 - サムネイルをクリックすると拡大画像が表示され、
 - 画像クリックで遷移でき、
 - グルーピングやキャプションの設定ができる
 - 加えてCSSでデザインの変更も用意
 - 導入も非常に簡単

夢のようですね。
JavaScript戦士のジョブ経験がない自分にはまさに夢のようです。


# 導入

[公式](http://lokeshdhakar.com/projects/lightbox2/)からソースをダウンロードし`js`ディレクトリ内の`lightbox.js`、`css`ディレクトリ内の`lightbox.css`を取り出し、導入するhtml内で読み込んで下さい。

外部から読み込ませる場合は、

```html
<link href="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.7.1/css/lightbox.css" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.7.1/js/lightbox.min.js" type="text/javascript"></script>
```
この2行を追加するだけで導入できちゃいます。お手軽！

LightBoxはJQueryで書かれていますので、`JQuery`の読み込みをLightBoxより前に行って下さい。

# 使用方法
## 配置
まずはコードから

```html
<a href="hoge.jpg" data-lightbox="fuga" data-title="hoge">
   <img src="hoge_thumb.jpg" alt="hoge画像">
</a>
```

たったのこれだけで実装できてしまいます！


`<a>~</a>`タグで拡大させたい画像にリンクを貼り、子の`<img>`タグにサムネイル用の画像を配置します。
`<a>~</a>`タグのプロパティに`data-lightbox=""`を追加することで機能します。

`<img>`タグ用にサムネイル用に画像を用意しなくても問題はありませんが、それ用に画像を用意しておくとページの表示が早いです(多分)。

## グルーピング
次の画像、前の画像へ遷移させる場合、`data-lightbox`を同じにすればグルーピングできます。
テーマ別で分類し、同ページ内に配置する場合、

 - `data-lightbox="cat"`
 - `data-lightbox="dog"`

のようにわければ見た目上並んでいても遷移を防ぐことが出来ます。

`data-title`のプロパティを記述することで、画像を拡大した時にデフォルトだと左下にキャプションが表示されます。




# 調整・カスタマイズ

拡大時の表示をCSSでカスタマイズできます。
表示がずれてしまう、などの問題があった場合は自力で調整が可能です。

LightBoxの拡大画像の表示ボックスは`id="lightbox"`で定義されています。
また、枠線は`class="lb-container"`で定義されていますので、ここを編集することで白い枠線を補足したり太くしたり、色を変えたりと自由自在です。

```
#lightbox .lb-container { padding: 3px; }
```

例えば、この記述で枠線を細くすることができます。(デフォルトは6px)

他にも変更したい部分があれば`lightbox.css`を参照して見て下さい。
枠の角を丸くしたり、画像にフィルタを掛けたり、表示サイズを変えたりと自分好みに調整しましょう。

自分は依頼者の~~わがまま~~指示に従いましたが、こだわりがなければデフォルトのままでも全然問題ないです。


# 参考

[【jQuery】これだけで完璧に導入できる[Lightbox]の実装方法。
](http://on-ze.com/archives/1715)
[画像拡大スクリプトLightboxの簡単な設置方法と使い方](https://allabout.co.jp/gm/gc/470618/#aa470618-Lightbox-CDN)
PythonでSlackのWebAPIを使ってメッセージを送る（JSONベース）

2017年10月からSlackのWebAPIの`chat.postMessage`でも、Slackに投稿したい内容をJSONで投げられるようになったそうです。

[chat.postMessage](https://api.slack.com/methods/chat.postMessage)

ということで、早速Pythonで試してみました。

```python
import urllib.request
import json

url = 'https://slack.com/api/chat.postMessage'

headers = {
    'Authorization': 'Bearer {ココにSlackのAPIを叩くためのOAuthトークン書いてね}',
    'Content-Type': 'application/json; charset=utf-8'
}

method = 'POST'

data = {
    "channel": "#general",
    "username": "Pythonぼっと",
    "text": "Pythonからメッセージ送るよ!",
    "icon_emoji": ":snake:"
}
                                                                                                                                       
json_data = json.dumps(data).encode("utf-8")

req = urllib.request.Request(url=url, data=json_data, headers=headers, method=method)
res = urllib.request.urlopen(req, timeout=5)
                                                                                                                                       
print("Http status: {0} {1}".format(res.status, res.reason))
print(res.read().decode("utf-8"))
```
ちゃんと以下のようにSlackにメッセージを投稿できました！（何度かテストしているのでメッセージが複数件有ります）

![Screenshot-2018-2-1 notification Exam Slack.png](https://qiita-image-store.s3.amazonaws.com/0/11059/cdbe0fc5-e83b-7533-73ce-5482d6fe0e7f.png)

さすがPythonすんなり動きました！
Processing - 04 - lineとforを使った描画

<img width="397" alt="スクリーンショット 2018-02-02 00.51.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/45520/e8df926d-f194-97f6-b43a-8f94874f35d6.png">



```java:
void setup() {
  size(400, 400);
  background(255);
  frameRate(15);
}

void draw() {
  for (int i=0; i<width; i+=2) {
    stroke(randomRgbColor());
    strokeWeight(15);
    line(i, height*0.25, i, height*0.75);
  }
}


color randomRgbColor() {
  color rgbColor =color(random(255), random(255), random(255), 30); 
  return rgbColor;
}
```
自分の仮想通貨を作る！イーサリアムのプライベートネットワーク作成　Geth入門！

#はじめに
最近何かとニュースを賑わせている仮想通貨ですね。
乗るしかない、このビッグウェーブに！と思っている私ですが、投資でお金をスるのは嫌だし、
リスクはとりたくない。ちょっと便乗したいだけなんです。

そこで、私は技術を勉強してちょっと違う方向でブームに乗っかってみることにしました。
手を進めることだけを考えた記事なので、概念的な理解は他の記事を参照してください。

#Gethのインストール

Gethはイーサリアムのブロックチェーンのダウンロードや、マイニング、トランザクションの発行などを行うクライアントツールです。他にも、EthやPyethappなどがありますが、ポピュラーなのでGethを選択しました。

[geth official install guide](https://github.com/ethereum/go-ethereum/wiki/Installation-Instructions-for-Mac)

`brew tap ethereum/ethereum` 
`brew install ethereum`

私はmacOSでhomebrewを入れていたので、この手順で入れました。
homebrewがない場合は[こちらでインストールしてください] (https://brew.sh/index_ja.html)
自分の環境にはGoが元々入っていたので、もしかしたらGoを入れる必要があるかも？

#プライベートネットの作成

まずは、genesisというファイルをjson形式で作成します。
これは全てのブロックチェーンの元になる設定などを記述しておくもので、
このgenesisを元にネットワークを作成します。

```sampleGenesis.json

{
        "config": {
                 "chainId": 12345,
                 "homesteadBlock": 0,
                 "eip155Block": 0,
                 "eip158Block": 0
         },
         "timestamp": "0x0",
         "gasLimit": "0x8000000",
         "difficulty": "0x400",
         "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
         "coinbase": "0x3333333333333333333333333333333333333333",
         "alloc": {}
}

```
これを/Users/xxxx/eth_private/sampleGenesis.jsonに配置します。（記事の都合上指定していますが実際どこでもいいです）

それを以下のコマンドで読み込みます。-identityの後には適当に自分の名前を入れましたが、合ってるのかはわかりません。
`geth -identity “あなたの名前” init /Users/xxxx/eth_private/sampleGenesis.json -datadir /Users/xxxx/eth_private
`

そして、起動コマンドがこれ！
`geth --datadir /Users/xxxx/eth_private --networkid 12345`

![Screen Shot 2018-02-02 at 0.27.17.png](https://qiita-image-store.s3.amazonaws.com/0/117369/1a2647f6-75f4-0bc5-fca5-ba21e442ec58.png)

こんな感じになりました。

##コンソールの起動
プライベートネットを動かしたのとは別のターミナルを開きます。
そこで、以下のコマンドを打つとjavascriptのコンソールが起動します。
`geth attach /Users/xxxx/eth_private/geth.ipc`

このコンソールでアカウントを作ります。
`personal.newAccount()`を実行してください。
パスワードを設定すると、アカウントの数字が発行されるのでコピーしてどこかに保存しておきましょう。
![Screen Shot 2018-02-02 at 0.30.49.png](https://qiita-image-store.s3.amazonaws.com/0/117369/ae47b7ec-d82a-ade4-cab7-df2e8d34dd57.png)

##マイニング、残高確認などのコマンド
`eth.getBalance("アカウントの数字")`　→残高確認
`miner.start()`　マイニング開始
`miner.stop()`　マイニング中止

以上、今後も自分がイーサリアムいじりを進めたら、加筆していく予定です。
[非公式翻訳]Vapor 3のリリース予定

※ この記事は[Vapor 3 Release Schedule](https://medium.com/@qutheory/vapor-3-release-schedule-1179bb080ca4)の非公式翻訳です。

# [非公式翻訳]Vapor 3のリリース予定

サーバサイドSwiftフレームワーク、Vaporの最新版が完成間近です！
私たちはSwift 4.1とそれがVaporに及ぼす影響を考慮し、3.0のリリースをSwift 4.1のリリースに合わせることにしました。
これは私たちが具体的なリリース日を提供できなくなることを意味します(Appleがリリースするまでは)。
ですが、アーリーアダプター向けのGM(RC)版に関してはリリース日を決定しています。

### リリース予定

|時期|バージョン|内容|
|---|----------|---|
|2/9|Beta.1|フィードバックの最終段階<br />タグの付けられたリリースは最新のコミットよりも安定していることを意味します|
|2/23|RC.1|この日以降に破壊的な変更はありません<br />バグ修正と機能追加のみです<br />アーリーアダプターの方はVapor 3をお使いいただけます|
|3月中旬|3.0.0|Swift 4.1がリリースされた時のRCバージョンが3.0.0としてタグ付けされます<br />この時点までに全てのドキュメントがアップデートされています<br />RC版の利用を見送っていた方にもVapor 3をお使いいただけます

## Swift 4.1

Swift 4.1はSwiftの最大にして最高の “.1” リリースです。
その目玉となる機能はもちろん、[Conditional conformances](https://github.com/apple/swift-evolution/blob/master/proposals/0143-conditional-conformances.md)（[条件付き適合](http://www.toyship.org/archives/2335)）です。
これはVaporチームが何年も心待ちにしていた機能でした。
この機能が4.1で入ることは素晴らしいニュースなのですが、Vapor 3にある問題を持ち込んでもいます。
"Conditional conformance" は私たちのフレームワークのコアに重大な影響があるのです。 — 単に変更を追加すれば済むわけではありません。
私たちが"Conditional conformance"のないSwift 4.0でやりくりしていたハックは、Swift 4.1ではコンパイル時に壊れてしまいます。
仮にVapor 3をSwift 4.0と4.1両方で動くようにすると、私たちの最も重要な領域のコードに巨大な `#if swift(>=4.1) / #else / #endif` マクロの帯が登場することになるでしょう。
更に、HTTP/2の実装を妨げていたmacOSのセキュリティライブラリの深刻なバグもSwift 4.1で修正されます。
これは4.1だけに依存していれば、HTTP/2に対応したVapor 3をリリースできることを意味します。

これらの問題を踏まえると、バグ・混乱・メンテナの時間を最小化するためには、Swift 4.1だけをVapor 3の動作要件とするのがベストだと私たちは考えます。

Swift 4.1は[Swift.orgのSnapshotsページ](https://swift.org/download/#snapshots)でmacOS向けとUbuntu向けをダウンロードできます。
Xcode 9.3 betaは必須ではありません。
Vapor 3のbetaブランチはすぐにSwift 4.1に依存するようになります。

## Beta.1

2/9のBeta.1はVapor 3で初めて全てのパッケージにタグを指定してのリリースとなるでしょう。
これはバージョンアップのために明示的にPackage.swiftを編集しなければならなかった状況から、安定性が大いに向上することを意味します。(`swift package update` を実行してもコードが壊れることはないでしょう)
また、2/9以降、破壊的な変更はマージの判断において重要な問題として扱われなければなりません。

私たちはこの時点からチュートリアルの執筆者が早期のVapor 3コンテンツを投下し始めることを期待しています。(素敵なRay Wenderlichが高い確率で出してくれるであろう動画のシリーズも含めて)
これはVapor 3を試し始めるのに非常に良い機会となるでしょう。
パッケージの開発者にとっては、自分のパッケージを更新する非常に良い機会となるでしょう。

## RC.1

2/23のRC.1のリリースは、事実上、Vapor 3の公式リリースです。 — あとはSwift 4.1を待つだけです。
この時点からは、いかなる破壊的な変更も許可されません。
バグ修正や機能追加のみがマージされることになります。

このリリースからはUnitテストやドキュメントを追加することに注力します。
加えて、コアチームはVapor UniversityやPennyなどVapor関連のサイトの更新もしていきます。

この時期はまだドキュメントの作成が進行中ですが、アーリーアダプターはこの時点で問題なくVapor 3に以降できると考えています。

## Official Release

公式の3.0.0はSwift 4.1に合わせてリリースされます。
全てのバグやドキュメントの問題がこの時点までに解決されるため、安定板を求める人はここまで待つ価値があります。

## フィードバック
まだ参加していないなら、是非私たちの[Slackチーム](http://vapor.team/)の#betaチャンネルに入ってこのリリーススケジュールやもちろんVapor 3自体についてフィードバックをお送りください。

あなたが私たちと同じくらいワクワクしていることを願っています。 — Vapor 3はこれまでにない最高のリリースになるでしょう！

— Vapor Team
【Mysql】相関クエリでつまづいた。検索

##開発でだいぶ詰まったので、メモ

##やりたかったこと
fuelPHPにおいて、サブクエリを用いて親クエリでfromしているtableと同じ場所から情報を抜き出す。
要は以下の感じをfuelPHPのQueryBuilderで行いたかった。

```ruby:社員の住所がpostで送られてきたワードで検索して情報を返すクエリ
//リクエストで送信された住所検索ワード

$address = $post['address'];

//Mysqlで実行したい生クエリ
select * from staffs 
         where exists(select * from staffs as st
                       where st.address like '%'.$address.'%'
                       and st.id = staffs.id);
```

ポイントは、サブクエリ内のstaffs as st と 親クエリのstaffsをくっつけてあげること。
これをfuelPHPでやろうとしたら、以下が正解。
今回のケースは、$query(select * from staffs)という親クエリを引数でもらった上でサブクエリを実行する。

##結論

```ruby:staffs.php

public static function get_address(&$query)
{
   $address = Input::post['address'];
   $sub_query = DB::select()->from(array('staffs', 'st'))
                    ->where('st.address', 'like', '%'.$address.'%')
                    ->where(DB::expr('staff.id'), 'st.id');
   $query->where_open();
   $query->where(DB::expr(''), DB::expr('EXISTS'), $sub_query);
   $query->where_close();

   $query->execute();
}
```
これで解決。
親クエリのfromしているtableをDB::expr()の中に書かないと、ただの文字列として認識されてしまうため、相関クエリとして実行されないという現象でした。

exprメソッドは、生クエリで使用するcountメソッドや、concatメソッドをfuelPHP側で使用する時に使用します。
参考URL:http://fuelphp.jp/docs/1.6/classes/database/db.html

※実際はもっと多くのtableをサブクエリ内で結合してますが、今回の記事の趣旨には関係ない部分で大量の記述が課されることになるので省きました。サブクエリいらなくね？みたいな感じですが、すいません...
時間という開発資源を失ってしまう方法

成功する開発と、そうならなかった開発とを違いを生じさせてしまうものは、時間という開発資源をどう失ってしまうかにもよっている。


時間という開発資源を失ってしまう典型的な例を述べる。

### **事例：「資料をきちんとPowerPointにまとめてからにしよう。」**

- たいがいの場合、そのPowerPointは、上司に説明するためだけのものであって、成果物として管理される必要のあるドキュメントではなかったりする。
- その分野の判断を適切にできる人の場合だと何もPowerPointになっていなくても判断できるものです。
- 少しでも早く状況をつかんで判断を加速するためには、PowerPointにする必然性はないのです。
- PowerPointが目的なのではなく、適切な判断を早くすることこそが重要なのです。

### **事例：「仕様を十分に確定できないうちはコードを書くな。」**

- 何をどう作るべきか、頭の中で完璧に最終実装の仕様を設計できる人はいますか？
- 「プログラミング作法」の中でもCSVファイルのパーサーを作る話が書いてあって、最初の実装は捨てられるものだという趣旨のことが書いていました。
- 実装しだしてみれば、何が必要かが見えてくるものです。

### **事例：「話は十分に整理ができてから持って来い。」**

- 話はいきなり十分明確になるわけではありません。少しづつ情報が集まってくる中で、問題点が見えてきたり、解決が見えてきたりします。
- 話が十分明確になるのを、だれが見ても明確になるのを待っていたら、そのときはいつまでもやって来ません。
- 例：熱力学の第2法則が十分に明確になったのはいつと言えますか？　あなたの上司を含めて「だれが見ても明確になる」のはいつですか？

### **事例：「うまくいくかどうか十分な根拠がない話をもってくるな。」**

- 新しいアイディアは「うまくいきそうな気がする」アイディアであって、「うまくいくことが確かめられた」アイディアではない。
- 「うまくいくことが確かめられた」アイディアは相談する必要がない。

### **事例：「自分の仕事なんだから、とにかく自力で解決しよう。」**

- 必要なのは組織としての成果です。
- 手助けをもらうことで早く結果を出すことが組織として重要です。

### **事例：「他のチームのメンバーに話を伝える前には、必ず自分のチームのリーダーを通せ。」**

- 両方のチームのリーダーは、技術的な問題を自力で解決できるほどに、その分野に研ぎ澄まされていますか？
- うまくいくか、いかないかわからない話を、リーダーを通して話を通してもらう気はしますか？


このような事例が、開発において重要な時間という資源を失ってしまうのです。
技術開発は、他社との競争です。
早く判断できること、それができない開発チームは、他社との開発競争に勝つことができません。
開発が１年遅れることで必要になる開発資金はいくらですか.
そのことを意識して開発してください。

日本の大企業が、技術の優位性をどんどん失ってきている理由の１つは、時間という開発資源の重要性を気にしていないことではないかと私は疑っています。


---

## **時間という開発資源が重要な理由：**
　ある製品の発表が１ヶ月延期になったとしましょう。そうすると、その開発に関わっている人すべての人件費の１ヶ月分の費用がかかります。必要な施設や設備の分も１ヶ月分の費用がかかります。クリティカル・パスの１ヶ月は、それだけの分だけコストを増加させてしまうのです。
　あなたがクリティカル・パスにいる場合、大声を上げて助けを求めてください。
　あなたの１ヶ月の遅れで発生するコストは、開発に加わっている人数分の倍だけ大きくなって影響します。
　でも、社内で３人が１ヶ月協力してくれる場合には、３人月のコストアップで済むし、開発の期日を守ることができます。
　ですから、時間という開発資源を大切にし、大声で助けを求めてください。　


[事例](https://robotstart.info/2018/11/28/jibo-close.html)
> 事業のクローズに向けて最も影響を与えてしまったのは「出荷の遅れ」だろう。2015年に発送される予定が、実際に購入者の手に届いたのは2017年9月のこと。この2年遅れた間に市場を拡大したスマートスピーカーとの圧倒的な価格差が、事業を難しくした原因ではないかとTHE ROBOT REPORTは分析している。


## **時間という開発資源が重要な理由（追記）：**
　時間という開発資源をきちんと管理できているのかどうかという点は、そのプロジェクトに対する評価で重要な項目です。予算管理がきちんとできているかと同様に重要視されます。ですから、時間という開発資源を、ここに示したような事例で時間という開発資源を失わないでください。


　日本企業のパソコン事業の多くは、時間という資源を無駄にしてしまった。事業を断念するか、事業を売却するにいたっています。信頼のブランドという過去の栄光に頼りすぎて、どうやって事業を成長させるのかについて、その企業の外の人にいる人に対して価値のある戦略を何ひとつとらないままになってしまって、時間という開発資源を失ってしまっているのです。


### 追記

引用

[『東芝解体　電機メーカーが消える日』](http://bookclub.kodansha.co.jp/product?item=0000210912)
>　通信自由化が始まってからこれまで、NECには３０年という時間の猶予があった。だが、その間、関本以降の経営者は誰一人として、通信機器に代わる新規事業を育てることができなかった。

同書から引用

> 西田と佐々木は「原発と半導体に集中する」と言いながら、テレビ、パソコンなどの赤字事業をずるずると続けてきた。そしてこれら赤字事業のほとんどが、のちに粉飾の温床となる。赤字事業から撤退すると工場や在庫の価値が下がり、ここでも巨額の減損処理を強いられる。西田、佐々木時代の東芝は、ずっとその決断を避けてきた。
PHPで全角スペースのtrimのようなことをする

とりあえず、何も考えずに第二引数のデフォルト値に全角スペースを入れて[trim](http://php.net/manual/ja/function.trim.php)してみた。

```php
$string = "　 a　bc　\n \r　\t";
$string = trim($string, "　 \t\n\r\0\x0B");
var_dump($string);
```

```
string(6) "a　bc"
```

普通にできたと思いきや、日本語にしてみる。

```php
$string = "　 あい　う\n \r　\t";
$string = trim($string, "　 \t\n\r\0\x0B");
var_dump($string);
```

```
string(11) "��い　う"
```

日本語に対応していないので別の方法を考える。
trimの挙動と異なるかもしれませんが今回は前後の空白文字を削除出来れば良しとします。

```php
$string = "　 あい　う\n \r　\t";
$string = mb_ereg_replace('^[\s　]+|[\s　]+$', '', $string);// \sは全角スペースを除く空白文字
var_dump($string);
```
```
string(12) "あい　う"
```

できた！
Google Home(おっけーぐーぐる)で漢字テストをはじめよう

#はじめに

2017年冬休み明けに漢字テストをするから、しっかり練習しといてねと、小学生のこどもに漢字の宿題がでました。
しかし、答えの書かれたプリントが配布されただけで、練習用のプリントはありませんでした。
問題だけ書いたプリントを自作すればよかったのですが、印刷の手間を考えると、面倒くさかったり、最終的にゴミになると思い、Google Homeで問題を読み上げることにしました。


#前提
　Google Homeは自発的に発声することは標準ではできません。
　「Google Home　しゃべらせる」等で検索して、設定しました。
　google-home-notifierをRaspberry Piにインストールし、firebaseの更新をトリガに
　発声させる仕組みにしています。



#概要
![kanji.png](https://qiita-image-store.s3.amazonaws.com/0/227396/3070e2b7-1591-0923-c3b3-069f75556509.png)


「おっけーぐーぐる　漢字テスト」の呼びかけで、「IFTTT」を経由し、Google SpreadSheet内のスクリプトが起動します。
スクリプトで、漢字の問題が記載されたSpreadSheetを１セルずつ読み、出題するという流れです。


#準備
以下のような感じで、問題用のSpreadSheetを用意します。
![q002.png](https://qiita-image-store.s3.amazonaws.com/0/227396/c38a779b-fb75-6c06-2b7a-89220f277ac8.png)

#詳細
IFTTT経由で、スクリプトを実行させます。
「漢字テスト開始ファイル」というファイルに行を追加することで、ファイル変更をトリガーに設定されたスクリプトを実行します。

![ifttt002.png](https://qiita-image-store.s3.amazonaws.com/0/227396/1f3a327a-597f-efcb-068f-a2b8d4d299fd.png)


スクリプトのトリガー設定
![trigger002.png](https://qiita-image-store.s3.amazonaws.com/0/227396/cf777523-ccb8-939a-8810-e3eb76eeadf8.png)





以下のようなスクリプトを実行させます。

```javascript:コード.gs
// 漢字テスト用のファイル
var spreadsheet = SpreadsheetApp.openById('1_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
var sheet = spreadsheet.getSheetByName('問題');

// 問題の記載された列
var questionColumn = 1;

function readTest() {
  // 読上げ開始位置
  var currentRow = 1;
  // 問題  
  var questionStr = "";
  

  // 問題の読上げ
  questionStr = sheet.getRange(currentRow,questionColumn).getValue();
  while ( questionStr != "") {
    Logger.log(questionStr);
    CommonScripts.sendGoogleHomeLiving(questionStr);

    // 問題を出したあとは３０秒待機
    Utilities.sleep(30000);
    currentRow = currentRow + 1;
    questionStr = sheet.getRange(currentRow,questionColumn).getValue();
  }

  
}

```

Google Homeにしゃべらせるためのメソッドは外だしにしていて、以下のように実装しています。(Firebaseのレコード更新を検知してしゃべります)

```javascript:CommonScripts.gs

function sendGoogleHomeLiving(message){
  var url = "https://hogehogehoge.firebaseio.com/test.json";
  var payload =
   {
     "message" : message
   };

   var options =
   {
     "method" : "PUT",
     "contentType": "application/json",
     "payload" : JSON.stringify(payload)
   };
  Logger.log(JSON.stringify(payload));
  UrlFetchApp.fetch(url, options);


  // 同じ命令を繰り返した時に発声しないので、DBの値をクリア  
  if( message != "" ) {
   sendGoogleHomeLiving(""); 
  }
  
  
}
```


#まとめ
こいつのおかげか、漢字テストには合格したようでした。
子どもも、目新しいせいか、進んで「おっけーぐーぐる　漢字テスト」と言っては、
漢字の練習をしていました。

ただ、実装にあたりいくつか課題（気づき）もありました。
　・Google Action Scriptの実行時間に制限(6分)があり、超えると途中で止まってしまう。
　→今回、漢字を書いている時間を考慮して、途中でsleepを入れています。そのことで、どうしても処理時間が長くなってしまいます。
  https://developers.google.com/apps-script/guides/services/quotas

　・「市場（いちば）」が問題なのですが、漢字で入力しておくと、Google Homeは「しじょう」と読みました。この辺りは、ひらがなで入力するなどの対策が必要でした。

Google Home、GoogleAppsScript楽しいです:grinning:
子どもの知育にもよいのでは！？と勝手に思ってます！
picodomでリアルDOMを作ってみた

すべてを仮想DOM化して運用する状況なら別ですが、ブラウザJavaScriptでいろいろ操作していると、どうしてもDOMノードを作らないといけないことがあります。そんなときにもpicodomを使ってみてもいいんじゃないか、ということをちらっと思った次第です。

# 従来のやり方

JavaScriptでDOMノードを作ろうと思えば、大きく分けて2つの方法があります。

* `innerHTML`にHTML文字列を代入する
* `createElement`や`setAttribute`などのDOM APIを駆使する

ただ、文字列から生成するとパースのコストが発生しますし、文字列を変化させようとすればXSSの危険もあります。一方、DOM APIを直接使うとコードが冗長になって、どんなDOMを生成しているのか見えづらくなってしまいます。

jQueryがあれば、`$('<elem />', {属性オブジェクト})`の形で作ることもできますが、さすがにこのためだけにjQueryを入れるのもアホらしい話です。

# 既存のものの活用

で、プロジェクトにすでにpicodomを使っていたので、そこから起こす、という方法を取ってみることにしました。

```js
import {patch} from 'picodom';

const toRealDom = vdom => {
  const div = document.createElement('div');
  patch(null, vdom, div);
  return div.firstChild;
}
```

もちろん設定すればJSXでも動かせます（[jsFiddle](https://jsfiddle.net/s580s7jz/)）。簡潔・高速・安全、そしてライブラリも軽量ということで、仮想DOMでない環境でも便利かもしれない、と少し思いました。
「トランジスタ技術2016年8月号ApplePiをやってみた」

タイトルの通りやってみた
本の通りに行った
LCDに「ApplePi」を表示させてみた
![IMG_20180201_231102-1.jpg](https://qiita-image-store.s3.amazonaws.com/0/190551/da211e4e-cf0a-a82a-5fa4-bb891f90e516.jpeg)

ハマりどころなく動いてくれた
Cソースを見てみるとデバイスファイルに書き込むという簡単な内容であった
ApplePiで出来ることは画像から想像していただくことにするが
LCD以外にも様々なことが出来る
めでたしめでたし
ShellScriptの不具合やエラーの原因がわからないときに便利！　静的コード解析ツール ShellCheck

## まずはインストール
```
$ brew install shellcheck
```
### 使い方
```
$ shellcheck ファイル名
```
## 実際に使ってみました！
### 解析するコード
```bash:test.sh
#!/bin/bash

readonly SCRIPT_NAME=${0##*/}

touch_file10()
{
    
    local fileName="$1"
    touch "$fileName"{1..10}.txt
}

if [[ $# < 0 ]]; then
    printf '%s\n' "${SCRIPT_NAME}: 引数にファイル名を指定してください！" 1>&2
    exit 1
fi


touch_file10 "$1"
```
引数として入力された値をファイル名とし10ファイル、テキストファイルを作ります。
引数が指定されていない時、つまり引数の個数が0の時は処理を終了します。

いざこのコードを引数なしで実行すると、  

```bash
printf '%s\n' "${SCRIPT_NAME}: 引数にファイル名を指定してください！" 1>&2
exit 1
```
上記コードは実行されず、1.txt,2txt,3txt……と10ファイル作成されます。:thinking:

ではここで、ShellCheckをつかってみます。

```bash
shellcheck test.sh
```
すると以下のように表示されました。

```bash
$ shellcheck test.sh

In test.sh line 15:
if [[ $# < 0 ]]; then
         ^-- SC2071: < is for string comparisons. Use -lt instead.
```
`<`は文字列に関する演算子ですよ！　って表示されました。
ついつい他の言語の癖で比較に`<`を使ってしまいがちですが、
bashでは`<`は文字列に関する演算子で 以下のような意味になるんです！

```bash
str1 < str2 # str1がstr2よりも辞書順で前にある
```
今回の場合だと、整数に関する演算子を使う必要があるってことなんです！:relaxed:
shellcheckの内容をもとに以下のように修正。

```bash
# 引数の個数が0以下の場合、処理を止めたいので、-leをつかいます。
if [[ $# -le 0 ]]; then
    printf '%s\n' "${SCRIPT_NAME}: 引数にファイル名を指定してください！" 1>&2
    exit 1
fi
```
これで引数が0の時は処理を実行させずに`exit`できました！
このようにshellscriptを書いた際には、一度shellcheckを挟むことで、エラーや不具合を見つけれるでしょう！:eyeglasses:

なお、今回の例だと
https://github.com/koalaman/shellcheck/wiki/SC2071
と検索するとより詳しい解説を確認することができます！

ちなみに、[alfred](https://www.alfredapp.com/)で以下のように設定するとエラーコードの検索が楽になります！

![s001.png](https://qiita-image-store.s3.amazonaws.com/0/219420/74cc472e-d282-52bc-1dc2-edd313896231.png)

ターミナルからエラーコードをコピーして
ペーストするだけ。
![スクリーンショット 2018-02-01 23.07.15.png](https://qiita-image-store.s3.amazonaws.com/0/219420/4e7072fa-0f39-8a20-63ba-5776394fe045.png)

ではまた！
【Webフロント】n個の要素を同じ透明度で重ねる

Webフロントにおいて、例えば青色と赤色のDiv要素を重ねて混色した紫色を作ろうとしたとき、どう```Opacity```を設定すればいいのか、偶然考える機会があったのでまとめました。

# 先に結論から
HTMLは親と重ねたい要素に適当なid,クラスをつけます。

```html
<div id="container">
  <div class="overlaid"></div>
  <div class="overlaid"></div>
  <div class="overlaid"></div>
</div>
```

CSS上では、とりあえず親にサイズ指定とpos-r、重ねたい要素はpos-a使って重なるように設定します。

```css
#container{
  position: relative;
  height: 500px;
  width: 500px;
}
#container .overlaid{
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
}
```

ん？opacity入ってない？
**CSSで解決するのを諦めてJS使いました。**
外から読むかHTMLに埋めるかはどうでもいいとして、次のようになります。

```javascript
let overlaids = document.getElementsByClassName('overlaid');
for (var i = 0; i < overlaid.length; i++) {
  overlaid[i].style.opacity = 1 / i + 1;
}
```

## vue使ってみる
```html
<div id="container">
  <img class="overlaid" v-for='(img, index) in overlaids' v-bind:src='img' v-bind:style="{opacity: 1 / (index + 1)}">
</div>
```

# 以上です
つまるところ、HTML上で半透明な要素を重ねるということは、上に残るものほど濃く残るということですね。
最初、全部`opacity: .5;`で行けると思ったらダメで焦りました。アホくさ。

今回、Qiita初投稿になります。投稿した理由は、**とりあえず書いてみたら良いアドバイスを貰えるらしい**という話を知人から聞いたからです。
皆様、もしもっと良い実装方法があれば教えてください！！！！！

では。
Raspberry Pi ステルスSSIDへの接続方法

# Raspberry Pi ステルスSSIDへの接続方法
Raspberry Pi を ステルスSSID に接続する方法を記載します。
## １．パスフレーズの暗号化
「wpa_passphrase」でパスフレーズを暗号化します。

```
$ wpa_passphrase "SSID" "PASSPHRASE"
network={
        ssid="SSID"
        #psk="PASSPHRASE"
        psk=38497220976092fc2707a838e4d4385019256149f99f935be22c90159d3b8373
}
```
## ２．接続設定
「wpa_supplicant.conf」を設定します。

```
$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
```
最下部に、「１．パスフレーズの暗号化」で出力された内容を記載します。
暗号化されていないPSKは削除します。
「scan_ssid=1」を設定することにより、ステルスSIDにも接続します。

```wpa_supplicant.conf
～略～
network={
        ssid="AP141012"
        scan_ssid=1
        psk=84bd68f7726b568b6982708b6a0db7f5a6aa2c48e708483c39d0813cb4bb7ef0
}
```

## ３．再起動
Raspberry Pi を再起動します。
起動と同時に、設定したステルスSSIDに接続されているはず。

```
$ sudo reboot
```
内向型人間における転職後の人付き合い

# 書いた目的
* この1月から地元の企業へUターンで転職してきて、いまだに職場に馴染めない自分を励ます為（笑）
* 同じような境遇で落ち込んでいる人が見て少しでも気分が和らげばと

注）独断と偏見が多分に含まれているので鵜呑みにしないでください
気になった方はぜひ「内向型を強みにする」や「内向型人間のすごい力」などの書籍をお読みください

# そもそも内向型とは？
一般的なイメージとしては、内気であったり、コミュニケーションが苦手であったりネガティブなイメージだと思います。
内向型の反対は外向型で、こちらは活発、社交的で誰とでも打ち解けるようなポジティブなイメージが浮かびます。

けれども、内向型と外向型というのはどちらかの二元論ではなく、社交的なのに内向型な人という人もいます。
内向型、外向型は生まれ持っての気質の違いであり、脳の血管の通る順番が違ったりと努力で治るというものではないです。
もっとも大きな違いとしては、エネルギーを外から得るか、内から得るかという違いになります。

外向型の人は、人と話したり、さまざまな活動に参加したり、外からの刺激によりエネルギーを得ます。
内向型の人は、アイデアや感情やイメージなどの中の世界からエネルギーを得ます。
自分を充電するための静かな場所が必要です。
（だからトイレの個室はあんなに落ち着くのか…）

# 他の人との活動が楽しくないというわけではないんです。
楽しいけれど、エネルギーを消耗してしまうので、活動が終わると後でドッと疲れが出てしまいます。

転職先で1から人間関係を築くというのは、外界からの刺激がとても多く、
内向型人間にとってはとても困難なミッションに思えてきます…

# 私が考える戦略
## 職場に慣れるまでは休息をしっかりとる  
これが一番重要です。転職後はまだ仕事内容も難しいことをいきなり任されることはないはずなので、
自分はまだまだ頑張れる！！と思いがちですが、帰ったらしっかりと休息をとってください。
新しい職場は新しいことに対する刺激だらけです。ゆっくりと時間をかけて慣れていきましょう。
特に睡眠が足りていないと、ネガティブなことを考えがちになるので睡眠を十分とりましょう。

## むやみやたらに自分をよく見せようとしない
必死に職場で仕事ができるアピールをしようとしたり、頑張って色んな人にテンション高めに話そうとしないでください。
痛い人に見られる可能性があります。また、家に帰ってからの自己嫌悪が半端ないです（笑）
新卒で入った新人ならまだしも、自分は中途のおじさんです。
中途の人に対する抵抗感というのは少なからず持っている人はいたりします。

## 自分の自信を回復させられるのは自分だけ
中途の人というのは、やはり年齢相応の実力があるか（コミュニケーション能力含む）を見られています。
スーパースターでもない限り、期待していた程ではないなという判断になります。（ここは自分の勝手な妄想）
上の話と矛盾していますが、他人は自分が気にするほど、自分のことを気にしていません。
なので、自分で勝手に自分の評価を下げるようなことはしないようにしましょう。
大した事はしていなくとも、今日もなんとか乗り切った！よくがんばった！と自分で自分をほめてあげましょう。

## まずは１人雑談ができる人を見つけよう
誰か１人でも話せる人がいるだけで居心地が全然違うと思います。（私はまだいません…）
その人から他の人に関わることも増えて居場所がどんどん増えていくはずです。

## 職場以外の居場所でリフレッシュしよう
職場に慣れるまでは、1人が落ち着く内向型人間といえどもやはり孤独感が募ったりしてきます。
同級生や趣味の集まりなど、気兼ねなく居れる場所でリフレッシュしましょう。
（私の場合はオンラインゲームです。モンハンワールド面白い！！）

# ※結局は時間をかけるしかない
すぐにすぐ慣れるような奇跡は起こりません。
過度に期待し過ぎず、けれども前向きにこつこつと仕事を通じて信頼関係を築いていきましょう！！

※初めてのQiitaで技術関係ない話で駄文ですが、もし読んでいただけた方がいらっしゃいましたら
ありがとうございました:)
いつの間にかFirefoxでjsのデバッグ中に変数の値を変更できなくなっていた

Firefoxの挙動確認のために、開発ツールでjavascriptの変数の値を変更しようとしたところ、値が変更できなくなっていました。

どうやらバージョン52以降、今のところは値の変更ができないらしい
https://developer.mozilla.org/ja/docs/Tools/Debugger/How_to/Examine,_modify,_and_watch_variables

> about:config で設定項目 "devtools.debugger.new-debugger-frontend" を false に設定して、古いデバッガーに戻すことができます。

で解決。

バリバリjavascript書く人には常識だったかもしれませんが、私は知らなかったので、少し戸惑いました。

雑な記事ですが、以上。
PostgreSQLでjsonb_to_recordset()を使ってJSONをレコードに展開する

# やりたかったこと

JSONBの項目に配列として入っているオブジェクトの値を検索してみたり、結合条件にしてみたりしたかった。

## JSONBの内容例

カラム名: fruits

```json
[
  {"code": "apple", "name": "りんご"},
  {"code": "orange", "name": "オレンジ"}, 
  {"code": "banana", "name": "バナナ"}
]
```

# 実現方法

jsonb_to_recordset() 関数を使えば良いようだ。
ちょっと書き方が独特だけど下記のように書く。

## 使い方

```sql
select 
  *
from 
  [table_name], 
  jsonb_to_recordset([column_name]) 
    as x(
      [jsonKey_1] [type_1],
      [jsonKey_2] [type_2],
      …,
      [jsonkey_n] [type_n]
    );
```

# 具体例

## DB内容

テーブル名: oyatu

| id| owner | fruits |
|:--| :-- | :-- |
| 1 | 俺 | [{"code": "apple", "name": "りんご"}] |
| 2 | あいつ | [{"code": "grape", "name": "ぶどう"},{"code": "banana", "name": "バナナ"}] |
| 3 | そいつ | [{"code": "apple", "name": "りんご"},{"code": "orange", "name": "オレンジ"}, {"code": "banana", "name": "バナナ"}] |

## SQL

```sql
select 
  id,owner,code,name
from 
  oyatu, 
  jsonb_to_recordset(fruits) 
    as x(
      code text,
      name text
    );
```

## 実行結果

| id| owner | code | name |
|:--| :-- | :-- | :-- |
| 1 | 俺 | apple | りんご |
| 2 | あいつ | grape | ぶどう |
| 2 | あいつ | banana | バナナ |
| 3 | そいつ | apple | りんご |
| 3 | そいつ | orange | オレンジ |
| 3 | そいつ | banana | バナナ |

# 雑記

今までDBへJSON形式でデータを入れる事が無かったので、こんなことも出来るんだなぁ…と。
UnityでVisual Studioを使う

## この記事はどんな人向けですか？
[Rider](https://www.jetbrains.com/rider/)のEAPが終わってしまい、さらにはMonoDevelopも無くなるということで、ついにVisual Studioを使う時がやってきました。ありがとうRider。さようならRider。
Unityで開発をするにあたり、RiderからVisual Studioに移行する時に知っておくと良さげなTipsをまとめたいと思います。

## 環境
- Windows 10
- Unity 2017.3
- Microsoft Visual Studio Community 2017

## ソリューションエクスプローラー見づらいんですけど？
Visual Studio Tools for Unityが入っていれば、メニューの「表示」-「Unityプロジェクトエクスプローラー」が選択できるはずです。
選択するとこんな感じで表示されます。Assets以下のディレクトリだけ表示されており、見やすいですね。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/25416/302723c9-84ea-1a5f-6353-ebb1c9387364.png)

## 保存時に自動フォーマットしたいです (出来ればusingの整理も)
「ツール」-「拡張機能と更新プログラム」を開き、オンラインをクリック。検索のところに「Productivity Powers Tools」と入力して、Productivity Powers Tools 2017をインストールしましょう。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/25416/60aae282-4d22-448e-0757-0dd965fef8d2.png)

インストール後、オプションを開き「Format document on save」にチェックを入れましょう。
(usingの整理も自動で行って欲しい場合には「Remove and Sort Usings on save」にもチェック)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/25416/787f065c-7aa8-cd8e-3df1-0e1f7eaf8917.png)

## ショートカットキーが分からない
|やりたいこと|キー|
|:--|:--|
|ファイルやクラスを検索|Ctrl+,|
|定義にジャンプ|F12|
|戻る(ジャンプした後とか)|Ctrl+-|
|左右のタブに移動|Ctrl+Alt+PageUp(Down)|

これだけ分かれば戦えます (ほんとか？)。

## Awakeとかをサッと実装したい
`Ctrl+Shift+M` を押すと
![image.png](https://qiita-image-store.s3.amazonaws.com/0/25416/7f11fc04-8839-ab37-9afb-b39621b6923d.png)
こんなんが出るので、チェックボックス入れるだけでサッと書いてくれます。

`Ctrl+Shift+Q` だと
![image.png](https://qiita-image-store.s3.amazonaws.com/0/25416/5e650661-77ac-519b-16ed-8f34c4e828f6.png)
こんな感じです。

## 折り畳みが邪魔くさい (お好みで)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/25416/fffd1bb2-8e01-c404-677e-5d16944c7daf.png)
使わないのでこの折りたためるゾーンが要らないです。

オプションを開いて
![image.png](https://qiita-image-store.s3.amazonaws.com/0/25416/7b7d2089-1638-4697-4706-17389ced207d.png)
「C#」-「詳細設定」-「ファイルを開くときにアウトラインモードに入る」のチェックを外してファイルを開きなおすと

![image.png](https://qiita-image-store.s3.amazonaws.com/0/25416/9e7fc122-4d71-7130-7948-987b36100fc8.png)
無くなります。

## 改行コード混ざっちゃった
こんなんが出る時があります。ファイルの中に改行コードが複数ある時に出るwarningです。

```
There are inconsistent line endings in the 'スクリプトファイル名' script. Some are Mac OS X (UNIX) and some are Windows.
This might lead to incorrect line numbers in stacktraces and compiler errors. Many text editors can fix this using Convert Line Endings menu commands.
```

Visual Studio内で統一するにはどうしたら良いでしょうか。調べてみると拡張機能でいけそうです。

「ツール」-「拡張機能と更新プログラム」から「Line Endings Unifier」を探し、ダウンロードします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/25416/7856853c-c8fc-829a-897c-ec3ba21db4a4.png)

一度Visual Studioを閉じて開きなおし、オプションから
![image.png](https://qiita-image-store.s3.amazonaws.com/0/25416/91aa2cac-4d05-1650-569d-f8e8c66a1131.png)

`Default Line Ending`を`Linux`に (これでLFで統一されます)
`Force Default Line Ending On Document Save`を`True`に (保存時に改行コードを統一します)
すると統一できそうです。
初級プログラマー卒業のために

ここで言う初級プログラマーとは、
数行のコードすら書けずにパソコンの前でフリーズすることは無いが、
書いたコードがどこかおかしいというようなプログラマーです。
このレベルで成長が止まったままおじさん・おばさんになってしまうエンジニアも多いのではないでしょうか？
そういったプログラマーが上のランクに上がれるにはどうすればいいか、考えてみました。
是非、実践してみてください。

# 01. まずAPI仕様書を読もう
いきなりググって質問サイト等のトラブルシューティングを見たり、
類似ソースコードをコピペしたりする人が多いが、
まずは、API仕様書や公式ドキュメントを読もう。それが「基本に忠実」なやり方だと思います。
バージョンの違いや若干のロジックの違い等に合わせて、適切なAPIを適切に使用する必要があるからです。

# 02. フレームワーク・ライブラリに寄せよう
難しい処理はたいてい先人たちが既に作ってる。
自分で処理をゴリゴリ書いた分だけバグを作りこみやすい。
まずは使えるFW・ライブラリが無いか調べてからコーディングに取り掛かろう。

# 03. 綺麗に書こう
綺麗に書くのは自己満足のためではないです。
バグが発生しづらくなり、さらに他メンバーにもバグを見つけてもらえるからです。
「バグっていたら気づく」というようなコードを目指そう。

# 04. コードレビューをしよう
おじさんエンジニアほど、コードレビューというものをしないような？気がします。
コードレビューをすれば他メンバーの仕様理解が深まり、
さらにコードの品質も上がって一石二鳥です。

# 05. 手作業を減らそう
手入力によるタイプミスで、バグったり、変数名がDBと合ってなかったりすると後でみんなに迷惑がかかります。
手入力よりコピペしよう。
コピペを何回もするならマクロでやろう。
マクロも面倒ならツールつくろう。

# 06. 将来発生するだろう修正箇所を1カ所にまとめよう
ここを修正したら、こっちも修正しないといけない、
というようなコードは修正漏れによるバグの原因になります。

# 07. 大きいメソッドは分割しよう
おじさんエンジニアに多い？気がするのですが、モンスターメソッドを書く人が居ます。
メソッドは分割しておきましょう。
JUnitなどの単体テストの粒度が粗くなってしまい、バグに気づけないです。
「1メソッド1画面以内」という格言は信じておきましょう。

# 08. マジックナンバーは絶対やめよう
マジックナンバーを使う人の心情は分かりませんが、仕様理解が困難なコードになってしまいます。
というのも、マジックナンバーを使っている個所の判定ロジック全てを検索し、
意味を類推する作業が必要になります。
将来のコードを修正する人に大迷惑をかけます。

# 09. パフォーマンスを意識しよう
ループの中の処理はできるだけ軽くすること。
配列、木構造、ハッシュテーブルといったデータ構造によるパフォーマンスの違いを意識すること。
DBでも、プログラミング言語でも、どちらもパフォーマンスを意識しよう。
DBのインデックスのほとんどは木構造(オンメモリの場合はハッシュテーブルの場合もある)ですし、
データ構造を学んでおけば今後に生かせます。
[基本情報技術者試験などのIPA資格](https://www.jitec.ipa.go.jp/)を意味ないなんて言う人も居ますが、
そんなことないと思います。この資格にもデータ構造が出てきます。

# 10. コメントはできるだけドキュメンテーションコメントだけ書こう
「コメントを書け」と言われるかもしれないが、
それは私の見解では半分は嘘だと思う。
このクラスやメソッドは何をするモノなのか？といったことを
ドキュメンテーションコメントで表現する程度でいいと思う。
具体的な処理内容よりもインターフェイス。
MacOSでP/ECEにアプリ転送

# 前文
[AQUAPLUS](http://aquaplus.jp/)が一昔前に出していた携帯端末[P/ECE](http://aquaplus.jp/piece/)、開発環境やデバイスドライバの対応がWindows（公式ではXP,2000,98）のみなのですが、筆者が最近MacBook Proばかり触っていてWindows起動するのが面倒なので、Mac向けの開発環境を用意しようという試み。
[linuxでp/eace使う](http://int.main.jp/prog/lin_piece.html)（リンク切れ）をもとにBSDベースのMacOSXでやるので、セットアップのコマンドは変わりますがLinuxでも動きます。
ちなみにWindows7,8,10対応は以下のいずれかの情報をご参照ください。

* [中古の P/ECE 本体（付属CDなし）を買って遊べるようにする](https://qiita.com/autch/items/7244f6b56d910df841f8)
* [P/ECE研究室](http://www.piece-me.org)さんで提供されている64ビット版Windows 7用P/ECEデバイスドライバ(WinUSB版)
  * [64bit版Windows 8で、P/ECEを使う手順](http://www.piece-me.org/piece_on_win8_x64/piece_on_win8_x64.html)
  * [64bit版Windows 10で、P/ECEを使う手順](http://www.piece-me.org/piece_on_win10_x64/piece_on_win10_x64.html)

# 環境
MacBook Pro 2017 (MacOS High Sierra 10.13.2)
USB-C/USB-Aポート変換

MacBook Pro 2020 (M1, Big Sur 11.1)
USB-C/USB-Aポート変換

# 接続確認
まずはUSB接続して、認識されているか確認（USBハブの種類や接続ポートによって若干結果違うと思います）

```
$ system_profiler SPUSBDataType
（不要部分省略）
            PIECE PME-001:

              Product ID: 0x1000
              Vendor ID: 0x0e19
              Version: 1.00
              Speed: Up to 12 Mb/sec
              Manufacturer: OeRSTED, Inc.
              Location ID: 0x14320000 / 19
              Current Available (mA): 500
              Current Required (mA): 100
              Extra Operating Current (mA): 0
```

アプリケーション→ユーティリティ→システム情報を起動して、ハードウェア→USBでも見れます。

# セットアップ
[linuxでp/eace使う](http://int.main.jp/prog/lin_piece.html)で公開されているLinux用isdそのままだといくらか不具合があったので、以下リポジトリで改修したものを使います（@autch さん @sawanaoyuki さんご協力ありがとうございます！）。クローンまたはダウンロードしてください。
https://github.com/zurachu/isd_for_linux

ビルドには[libusb-1.0系](http://libusb.info)が必要です。筆者はパッケージ管理が容易なよう[Homebrew](https://brew.sh/index_ja.html)でインストールしましたが、公式の.tar.bzかGitHubリポジトリを落としてきてビルドするなり、任意のやり方でどうぞ。

### 全コマンド

```
$ brew install libusb
$ git clone https://github.com/zurachu/isd_for_linux.git
$ cd isd_for_linux
```

```
# cmake でビルドする場合
$ brew install cmake
$ mkdir -p build && cd build
$ cmake ../
$ make
```

```
# autoconf でビルドする場合
$ brew install autoconf
$ autoreconf -i
$ ./configure
$ make
```

# 実行
```
$ ./isd -c
```
でエラー等出なければ接続成功。
あとはツールのusage見てください。

### Linux向け補足
USBアクセスするには、スーパーユーザで実行するか、udevファイルを適用する必要があります。
https://github.com/zurachu/isd_for_linux/blob/master/90-piece-me.rules

# できないこと
- 本家isdの全機能を搭載している訳ではありませんし、コマンド体系も異なります。
- ドライバを書いている訳ではないので、[Wine](https://www.winehq.org)を使ったところで、P/ECEと通信するWindows用ソフトをそのまま使うことはできません。同じようにlibusbを使う形で書き換えるか、いっそ通信ライブラリ（ism〜()）をlibusb使って丸ごと移植して、それとリンクするかですね。

# 後書き
コンパイラやリソース変換ツールは[Wine](https://www.winehq.org)で動かせるのではということで、また今度。

# 参考文献
- [linuxでp/eace使う](http://int.main.jp/prog/lin_piece.html)（リンク切れ）
- [Mac OSXでlsusbコマンドを使う](http://d.hatena.ne.jp/seinzumtode/20121113/1352774223)
- [Install libusb on Mac OSX](http://macappstore.org/libusb/)
- [libusbについて](http://penguin.tantin.jp/hard/libusbについて.html#d9cd4039)
- [libusb関係のメモと、バルク転送サンプル](https://qiita.com/gpsnmeajp/items/b1282b2d3c14470bbae7)
AWS EC2作成からTeraterm接続まで

※AWSアカウントを持っていて、ログインできる方が対象です。

#VPCの構築
・1つのお城のようなイメージ
・参考URLに沿って作成する

>VPCとはAWSアカウント上に複数作成することが出来るプライベートなネットワークの単位です。一軒家を建てる為の土地全体といったところでしょうか。
VPCの配下には、AZがあり、その配下にはサブネットがあります。またAZは１つ以上のサブネットを保持することができます。AWS上で初めてネットワークを構築するときは最低でも１つのVPC、１つのAZ、１つのサブネットを作成する必要がします。
AZは建造物エリア、サブネットは建造物を設置するための基礎といったイメージです。

参考URL：https://engineers.weddingpark.co.jp/?p=523

#EC2の作成
・これも下記URLに沿って作成する
参考URL：https://engineers.weddingpark.co.jp/?p=523

・ただし、インスタンスのパブリックIPが勝手に設定されていますが、私の時は設定されていなかった
→Elastic IPを取得して、割り当てる必要あります。下記参照

![image.png](https://qiita-image-store.s3.amazonaws.com/0/8834/d727bd60-d88a-63a1-68aa-d70a04475f92.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/8834/d9472bfe-e66f-f58e-224c-324de0732fb4.png)

画面を閉じて、取得したElastic IPを選択→アクション→アドレスの関連付け
→インスタンスに先ほど作成したEC2を選択し、関連付け
※Elastic IPはEC2に関連付けしないと課金されるので注意

関連付けるとパブリックDNS、IPが記載されるのでそちらでSSH接続する。

#SSH接続（Windows）
Teratermでアクセスしました。
下記参照。ファイルの種類を「すべてのファイル」にしないと秘密鍵を選択できないので注意

参考URL：https://dev.classmethod.jp/cloud/aws/aws-beginner-ec2-ssh/

![image.png](https://qiita-image-store.s3.amazonaws.com/0/8834/51882716-8672-40f5-1c78-3295364a9985.png)

#ping応答設定
EC2に紐づいているセキュリティグループに「ICMP」を追加する

参考URL：http://a1-style.net/amazon-web-service/ping-icmp-setting/
Grove > RTC




[DS1307](http://wiki.seeedstudio.com/wiki/Twig_-_RTC)


[File:RTC Library\.zip \- Wiki](http://wiki.seeedstudio.com/wiki/File:RTC_Library.zip)


```

#include <Wire.h>
#include "DS1307.h"

DS1307 clock;//define a object of DS1307 class
void setup()
{
	Serial.begin(9600);
	clock.begin();
	clock.fillByYMD(2013,1,19);//Jan 19,2013
	clock.fillByHMS(15,28,30);//15:28 30"
	clock.fillDayOfWeek(SAT);//Saturday
	clock.setTime();//write time to the RTC chip
}
void loop()
{
	printTime();
}
/*Function: Display time on the serial monitor*/
void printTime()
{
	clock.getTime();
	Serial.print(clock.hour, DEC);
	Serial.print(":");
	Serial.print(clock.minute, DEC);
	Serial.print(":");
	Serial.print(clock.second, DEC);
	Serial.print("	");
	Serial.print(clock.month, DEC);
	Serial.print("/");
	Serial.print(clock.dayOfMonth, DEC);
	Serial.print("/");
	Serial.print(clock.year+2000, DEC);
	Serial.print(" ");
	Serial.print(clock.dayOfMonth);
	Serial.print("*");
	switch (clock.dayOfWeek)// Friendly printout the weekday
	{
		case MON:
		  Serial.print("MON");
		  break;
		case TUE:
		  Serial.print("TUE");
		  break;
		case WED:
		  Serial.print("WED");
		  break;
		case THU:
		  Serial.print("THU");
		  break;
		case FRI:
		  Serial.print("FRI");
		  break;
		case SAT:
		  Serial.print("SAT");
		  break;
		case SUN:
		  Serial.print("SUN");
		  break;
	}
	Serial.println(" ");
}
```
M5Stack > GPS



## gpsraw.ino

``` gpsraw.ino
#include <M5Stack.h>

HardwareSerial GPSRaw(2);

void setup() {
  
  M5.begin();
  GPSRaw.begin(9600);

  Serial.println("hello");
  termInit();
}

void loop() {
  // put your main code here, to run repeatedly:
  if(Serial.available()) {
    int ch = Serial.read();
    GPSRaw.write(ch);  
  }

  if(GPSRaw.available()) {
    int ch = GPSRaw.read();
    Serial.write(ch);
    termPutchar(ch);
  }
}
```

### 結果
```
$GNRMC,022323.00,V,,,,,,,010218,,,N*6B
$GNVTG,,,,,,,,,N*2E
$GNGGA,022323.00,,,,,0,00,99.99,,,,,,*7A
$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*2E
$GNGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*2E
$GPGSV,3,1,10,05,07,131,,10,21,316,,12,20,151,,13,21,064,*7A
$GPGSV,3,2,10,15,51,051,,20,62,135,,21,40,248,27,24,89,055,*77
$GPGSV,3,3,10,25,01,183,,32,03,274,*77
$GLGSV,1,1,02,73,17,194,,80,66,159,*6C
$GNGLL,,,,,022323.00,V,N*56
```


## FullExample.ino

[TinyGPS\+\+ \| Arduiniana](http://arduiniana.org/libraries/tinygpsplus/)



## GPS CLOCK with M5STACK

macsbug で公開していただいているGPS CLOCK with M5STACKを動かしました。

動作するにあたり以下の場所にあるFree_Fonts.hをスケッチと同場所にコピーしました。

ユーザー名/Documents/Arduino/libraries/M5Stack/examples/Advanced/Display/Free_Font_Demo/Free_Fonts.h




[GPS CLOCK with M5STACK \| macsbug](https://macsbug.wordpress.com/2017/12/26/gps-clock-with-m5stack/)