OmniAICreator/Qiita-1.07M huggingface dataset:
VBSからPowerShellへ　(5)プロシージャと関数

##PowerShellでは関数の定義は呼び出す前に

VBSで書かれたプログラムをPowerShellに置き換える場合、Functionプロシージャについては関数の定義として以下のようになる。
この際に、**PowerShellでは関数を先に定義しないと実行時にエラーになる**。

```vbs
'VBSの例
dim i
i =0
val = valSet(i)
　・・・

Function valSet(num) 
　valSet = num + 1
End Function
```


```powershell
#PowerShellの例
function valSet($num){
    $valNum = $num + 1
    return $valNum
}

$i = 0
val = valSet $i
　・・・
```

##Subプロシージャを置き換える場合は戻り値を破棄

ただし、Subプロシージャを関数の定義として置き換える場合は、**PowerShellではreturnなしでも関数内で出力された全ての値を返すようになっている**ため、呼び出しの際に「 | Out-Null」を付与するなどの方法で**戻り値を破棄する必要がある**。

```vbs
'VBSの例
dim i
i =0

call valSet2(i)

Sub valSet2(num) 
　dim val2
　val2 =0
　val2 = num + 1
　・・・
End Sub
```


```powershell
#PowerShellの例
function valSet2($num){
    $val2 = 0
    $val2 = $num + 1
    ・・・
}

$i = 0
valSet2 $i | Out-Null

```

・参考にさせていただいたページ
PowerShell:スクリプトでの関数と呼び出し元の書く順序 
[https://yaplog.jp/consadole_spo/archive/109]

PowerShell関数
[http://capm-network.com/?tag=PowerShell%E9%96%A2%E6%95%B0]
「一行で記事を台無しにする」かどうか。仮説(103)

自分でよくやることを記録します。
# 一行で記事を台無しにする
蛇足のこともあります。

そこまで説明していたことと矛盾することを書いて、誤解を与えることもあります。

# 最近取っている行動
ネットで書いている事項の、半分はテキストエディタにコピペしておいて投稿しないようにしています。

twitterへの返信、facebookでのコメントなどは、８割がた送信せずにいます。

# 代替行動
一行で記事を台無しにする傾向はありますが、総数は減っています。

twitter, facebookでの書き込みは大幅に減りました。

その代わり、テキストエディタにたまった言葉が１０個たまったら、Qiitaの記事にしています。

時間も経過しているし、その間に調べたこともあります。

何も調べずに、返信するよりは、ましになりました。（当社比）

# 関連事例
自分の記事ではなくてごめんなさい。

最近、この１行が記事全体を台無しにしているなと感じたものを１つご紹介。

なぜアジャイル宣言が誕生したのか？何を変えようとしているのか？
https://qiita.com/gounx2/items/b5381186856eb54e48c9

みだしがすごく記事の内容を反映していると思いました。

>これは何？
はじめに ～ アジャイル宣言は、不親切で難しい？
アジャイル宣言は、なぜ誕生した？
アジャイル宣言は、何を変えようとしているのか？
まとめ

この見出しを見て、わかりやすい流れだと思いました。

内容も見出しにあっている。

記事にコメントが一つついていました。最後の１行が、全体の記事を誤解に導いたかもしれないと感じました。

>妄想ですが「アジャイルやってます？」「はい。やってますよ」「スクラムですか？」「ウォーターフォールです！」って言いきれたらすごくカッコいいのかも？

せっかくアジャイル宣言は何かを解説していたのに、そこまでの説明の方向とは違うことを書かれているような気がしました。

例えば、アジャイルはやるものではなく状態だという立場で書くとわかりやすかったかも。

>「今の開発を特徴付ける言葉はアジャイルですか？」「はいそうです。」「スクラムですか？」「ウォーターフォールです！」

何が言いたかったかが伝わったかもしれません。

これなら、アジャイル信者の記述ではないことが明確になると思います。

アジャイルは状態であって信じるものではないし、スクラムのようにやるものでもない。

最後までおよみいただきありがとうございました。

いいね　💚、フォローをお願いします。

Thank you very much for reading to the last sentence.

Please press the like icon 💚　and follow me for your happy life.
JekyllでAMP対応ページを出力する

# 1. サイト本体をAMP対応させる

[Amplify](https://github.com/ageitgey/amplify)という専用テーマがあります。  
これを元にデザインをカスタマイズしても良いし、[AMP Start](https://www.ampstart.com/)や[AMP Templates](https://amptemplates.com/)で配布されているテーマをJekyll用に改造しても良い。

だたしこの方法は、スクリプトなどを多用しているサイトには不向きです。  
サイト全体をモバイルファーストにして、複雑なギミックなどはすべて捨てる覚悟が必要。

# 2. サイト本体とは別にAMPページを出力する

私は本体のデザインが捨てがたかったので此方を採用。  
この場合は、[amp-jekyll](https://github.com/juusaw/amp-jekyll)というプラグインを導入します。gemでインストールすることもできます。

これは指定したフォルダにAMP対応ページを別途出力してくれるプラグインです。  
URL構造は通常ページの**前**に指定したディレクトリ名が付きます。（WordPressのAMPプラグインだと最後にディレクトリやクエリがつくので逆です。）

付属のAMPページ用テンプレートはカスタマイズ前提なのでご注意ください。  
先のセクションで紹介したテンプレートサイトから好きなのを持ってきてJekyllのレイアウトファイルにしてしまうのが簡単だと思います。

# AMPが正しく動くかチェック

**AMPは一つでもエラーがあるとGoogleがキャッシュしてくれず、検索結果には表示されません。**（通常ページが表示されます。）  
生成後は必ず[AMPBench](https://ampbench.appspot.com/)でエラーがないかチェックしましょう。
JavaScriptで衝突判定を作成し、簡単なシューティングゲームを作成した事

#はじめに
JavaScriptで簡単なシューティングゲームを自作しました。
これを応用したら、リズムゲームなども作れるのではないかと思います。
コードは下記のリンクから飛んで頂ければ読めますが、わかりにくいかもしれません。
[リンクはこちら](http://take619.xsrv.jp/SaveTarget/index.html)

#苦労した点
以前作成したタイミングゲームで、要素を動かすやり方は理解していたので、問題は衝突判定でした。
ボタンを３つ設置したのですが、それぞれ適切なタイミングでdisabledを切り替える事も、ちょっと苦労しました。

#衝突判定について
衝突判定のやり方はかなりシンプルで、要素X1（x1,y1)と要素X2(x2,y2)を用意して、x1,y1,x2,y2からある一定の距離で要素同士が近づいたらアクションを起こすように書きました。下記のコードでご説明すると、要素X1のy1座標が250の時で、要素X2のx2座標が 230<x2<380 という座標領域に入った場合にif文でアクションを起こすようにしました。

```JavaScript
if((arrowToTopOfPositionY === 250)&&(arrowToLeftOfPositionX > 230)&&(arrowToLeftOfPositionX < 380)){
    oneStepMovingOfArrowToLeft = 0;
    oneStepMovingOfArrowToTop = 0;
    document.getElementById("gameStatus").innerHTML = "SAVE!!!";
    document.getElementById("humanImage").style.backgroundColor = "yellow";
    document.getElementById("saveTargetButton").disabled = "";
  }else{
    //何もしない
  }
```
<img width="898" alt="スクリーンショット 2019-06-01 19.04.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427892/54752244-4ea6-6dc9-03d2-1c02e427e4e0.png">
<img width="851" alt="スクリーンショット 2019-06-01 19.04.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427892/fd512763-6024-060d-e041-31ceeec3ec47.png">

#ボタンのdisabledの切り替えに手こずった点について
冒頭でご説明した通り、３つのボタン（startButton,saveTargetButton,resetButton）を設置したのですが、不適切なタイミングで押せる事はバグであるので、適切にdisabledを管理しなければいけませんでした。
そのタイミングを見定めるのが、少し厄介でした。

#今後改良するとしたら
今後改良するとしたら、矢を乱数を用いて自由に動かし、速度も可変にしてよりゲーム性をあげたいな、と思います。
【Rails】モデルにカラムを新規追加・削除する方法

#はじめに
Ruby on Railsにおいて、データベースにカラムを追加する際に間違った書き方をしてしまったので今後のための個人的な備忘録。。。

<br><br>
#カラムの追加
以下のコマンドでカラムを追加する為のマイグレーションファイルを生成

```
$ rails g migration Addカラム名Toテーブル名 カラム名:データ型
```
<br>


###注意点
テーブル名を"Table"、新しく追加するカラム名を"sample"とした時の例を使って解説。

```
$ rails g migration AddSampleToTable sample:text
```
Addカラム名Toテーブル名を入力する際のカラム名の最初の文字を<b>大文字</b>にすること。初心者なので理由はよく分からないけど大文字にしないとカラムが上手く生成されなかった。

<br>
###忘れがちなアイツ
忘れずに・・・。

```
$ rails db:migrate
```
<br><br>
#カラムの削除

```
$ rails g migration Removeカラム名Fromテーブル名 カラム名:データ型
```

<br>
###注意点
削除する際も追加する時と同様にRemoveカラム名Fromテーブル名を入力する際にはカラム名の最初の文字は<b>大文字</b>に

```
$ rails g migration RemoveSampleFromTable sample:text
```

<br>
###忘れがちなアイツ
こっちでも忘れずに必ず行うこと。

```
$ rails db:migrate
```


<br>
#まとめ
まだRailsを触り始めて2週間で知らないことばかりなので少しずつ理解しながら進めて行きたいところではあるけど、意味を理解せずにコピペで使いがちなコマンドがあるので今後はなぜこれが必要なのかを学んでいきたいところ。
とりあえず今回は備忘録ということでここまでで。
Addカラム名Toテーブル名、Removeカラム名Fromテーブル名のカラム名の最初の文字は大文字に！！

文字列.html_safe　で""(ダブルクオーテーションを外して出力出来るよ！)
データ専門職を目指す上でのおすすめスキル

　データ屋さん目指すためには色々前提知識があると良いなーというのは確かです。色々無駄なこともやりましたが最短距離と自分が実際にやってみて良かったと思ってる資格や技術を紹介したいと思います。 

##①Web解析士(初級) 重要度 ★★★★★ 

　Web関連のサービスやマーケティング担当の方は絶対取った方が良いと思う資格です。GoogleAnalyticsを実際に使ったトラフィックの解析から、計測の仕組みそして、KPIやKGIなど指標の事そして、メディアや最終的なレポーティングの説明までまですべて網羅しています。 

　この内容をきちんと理解するだけで、世の中のなんちゃってマーケターの8割(作者概算)をミーティングで言い負かすことができると思っています。その位強力で事例と共に学べる最適な資格だと思います。この中で学んだことはデータ分析にほぼ役立つため本当に無駄がありません。 

##②Webページ作ってみる(HTMLもしくはCMS等) 重要度 ★★★★★ 

　計測を学ぶ上で、HTMLを使って実際にページを作ってみると本当に理解が深まります。更にGoogleAnalyticsは無料であるため、タグを埋め込んで計測も実施してみましょう。難しければWordPressの様なCMSを利用してっぽいものを作った後にソースコードを見てみるだけでも良いでしょう。 

　Web計測の仕組みを知るには最適です。何なら本気でサービスを作ってしまう位でいいかも？※自分は何回も挫折しています。。。 

##③Tableau　重要度 ★★★★★

　高速PDCAを実現するデータ分析のBIツールTableauに関する学習です。きちんと有料セミナー等に参加できて、LOD等まで駆使すれば色々な可視化が可能になるため、会社で使っている場合もしくはセミナーに参加できる場合は積極的に参加すると本当にいい経験になることでしょう。本当に使わなきゃ身につかないツールのため是非弄りたおしてください！
　Prep等のデータ整形ツールも非常に使いやすいです。
　※無料のビデオトレーニングもあります。
　https://www.tableau.com/ja-jp/learn/training
  

##④機械学習をかじる　重要度　★★★ 

　筆者が繰り返しているループ「よし！機械学習やるで！！！」⇒オライリー書籍購入⇒3章位で挫折⇒「よし！機械学習もう一回今度こそやるで！！」⇒以下同様 

　なかなか数学力も含め非常に理解が難しいです！でもすごく必要だと思っているので誰か教えてほしいくらいです笑。とはいえ実際にかじっているだけでも色々な場面で役立ちます。例えば色々な予測やモデリング等の実際の方法が分かりますし、その手法も学ぶことができます。舐めるだけでも全然違いますのでやりましょう笑 

　できる人はもちろんちゃんと1冊やり切りましょう！！ 私は最近DataRobotに頼りきりです。。。

##⑤統計検定　重要度 ★★★ 

　結局統計も大きなデータからサンプルを取り出して傾向を見るという手法のため、使う個所が限られてきますが、これからニーズが高まる機械学習等を真に理解するには欠かせない資格だと思います。勉強してみる価値は高いです。 

##⑥基本情報技術者　重要度 ★★ 

　エンジニアの登竜門とされる国家資格。コンピューターや色々なシステムの仕組みとシステム開発の工程や実際のプログラミングやアルゴリズムまでが学べます。プログラミング等は非常に重要なのですが、データ分析上全ての仕組みまで学ぶ必要があるかというと不要な情報を勉強してしまう懸念もあるため、星を落としていますが、有効な資格の一つだと思います。 

##⑦アプリ計測SDK導入　重要度 ★ 

　今や人々の生活に欠かせないアプリ。この計測を実施するためにAppsFlyerやadjust等のSDKを実装してみましょう！すごく簡単なアプリで構いませんので作ってみて、各種ボタンなどを押したときにトラッキングコードを仕込み計測までできれば十分です。 

　アプリの計測の仕組みを知ることができます。個人的に知っていることは凄くメリットなのですが、専門的すぎるのかなと思い星を落としています。 

良かったら参考にしてみてください。
pythonをストレスなく使う！（ExpressionとStatement)

#目的
　**pythonをストレスなく使う！**
そのためには、少しでも、理解のレベルを上げる必要あり。
なんでも、こだわって、、、、理解を深める。
ここで記載しているのは、
**ExpressionとStatementの違い**です。

参考にしている書籍:
[1]Python Pocket Reference,Fifth Edition
　　by Mark Lutz
　　Published by O'Reilly Media,Inc

#ExpressionとStatement

```python

>>> if a>3:
...     print(b)
...
>>>
>>>
>>> if a=3:
  File "<stdin>", line 1
    if a=3:
        ^
SyntaxError: invalid syntax
>>>

```
上記で示したのは、C言語とかと違って、**a=3は、式(Expression)ではない**
ということです。**式でないので、SyntaxErrorになっている。**

一方、a>3は、式(Expression)である。

**pythonでは、代入文は、文であって式ではない。**

特に意味のない情報ですが、ちなみに、
書籍[1]によると、
「The Expression Statement（式文）」
というものがある。式文は、式自体で、文となっているものという意味でいいと思います。

（以下、五行ほど、意味不明なので、削除。）
~~ということは、
Statementに２つあって
- Expressionと
- それ以外。~~

「The Expression Statement（式文）」の説明としては、
書籍引用

>Any expression can appears as a statement(e.g.,on a line by itself).Conversely,statements cannot apper in any other expression context(e.g.,assignment statements have no result,and cannot be nested.)

となっています。

この書籍で示されている「The Expression Statement」の形式は、以下の３つ。
　expression
　function(-----)
　object.method(-----)


#まとめ
Expression（式）とStatement（文）は、違います。
この違いを把握するメリットがあるかどうかは、いま、不明。でも、C言語との違いを理解をすることは、C言語習得者が多いはずなので、メリットはあるかも？
曖昧に理解すると、どこかで綻びが出るかもしれないので、、、、「式」と「文」は、区別しましょう。

#関連（本人）
[pythonをストレスなく使う！（Pythonでは、すべてがオブジェクトとして実装されている)](https://qiita.com/enoughspacefor/items/0c6118da4c228226a65f)
[pythonをストレスなく使う！（Pylintに寄り添う)](https://qiita.com/enoughspacefor/items/df692b27bb58ca1ffa1d)
[英語と日本語、両方使ってPythonを丁寧に学ぶ。](https://qiita.com/enoughspacefor/items/d4b49747773e2d0285f9)

#今後
コメントなどあれば、お願いします。:candy:
勉強します、、、、
（参考：Python3.8で代入式が導入されるという記載をみました。）
Firestore + BigQueryで簡単なログデータ&プッシュ基盤をつくった話

## 導入
アプリのイベントログや、DAUなどの集計を考えるときに真っ先に選択肢に上がるのがFirebase Analyticsだ。
ユーザを特定のセグメントに分割して扱い、セグメントごとにプッシュ通知を送ったり、
特定のIn App Messageに対する特定のイベントへのコンバージョン率を自動で集計してくれたりと、
Firebaseの他のツールと連携がシームレスにできて良い体験ができる。
だがいろいろと制約もあり、より詳細な分析を行いときには実現できないこともあったので、
イベントログをFirestoreに飛ばし、BigQuery連携することで独自のログデータ基盤を構築したのでまとめる。

## 対象プロダクト
- スマホアプリ

## 要件
- 分析
    - ユーザがどの画面で、どうのような操作をして離脱したかを知りたい
    - ユーザがどのくらいの頻度でコア機能を使ってくれているかを知りたい
    - ユーザがどんな用途でアプリを使用してくれているかを知りたい
    - 細かく定着率を分析したい
    - 個人を特定する必要はないがユーザをユニークに扱いたい
        - (むしろプライバシーポリシーで約束しているので特定する情報は取らない)

- データを活用した施策
    - 特定の行動のユーザにのみプッシュ通知で訴求したい

## なぜFirebase Analyticsだとだめなのか
- イベントログに含めるパラメータのサイズに制限がある
    - より詳細な内容を送りたいと思ったときに制限に引っかかり送りきれなかった

- ユーザの時系列ログを扱えない
    - 特定のユーザがどういうイベント遷移をしたかを追おうとしたときに見るための術がない
    - イベント遷移を時系列順にみることができない
    - (一応StreamViewで直近アプリを開いていた人だけ見ることはできるがランダムでこちらで選択することはできない)

- 詳細なセグメントわけをしてユーザを抽出することができない
    - 1週間以内にインストールし、コア機能をまだ使っていないユーザ、といった抽出するのがかなり困難

- リテンションが見づらい
    - リテンションも見ることができるのだが、細かくみたりこちらの定義する「リテンション」で指標を追うことができない

- ダッシュボードの読み込みが遅い

以上の理由により、Firebase Analyticsだと困難だったので自前で用意するようにした。

## アーキテクチャ

![routine-time-data-tool (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45875/d2581535-cdc9-f70c-98b2-d68f11c428ff.png)


極めて簡単で、アプリでイベントが発生するとFirestoreにログの内容が記録され、
ためていったログデータはCloud Functionによって日時バッチとしてBigQueryに連携される。

## 実装について

### ログのバッファリング
ログを送る処理はイベント発生ごとに送ってしまうと、
無駄に端末リソースを食ってユーザ体験を損ねることになったり、
無駄にアクセスが頻発してしまうので、
バッファリングが必要になる。
そこで、Cookpad社製の[Puree](https://github.com/cookpad/Puree-Swift)を使った。
これは、一定時間もしくは一定サイズのログがバッファされると非同期でログを送ってくれるライブラリだ。
ログの送り先も自分でインターフェースを実装するだけで変えられるので導入が簡単だった。

### Firestoreの設計
コレクション定義は下記のようになっている

- users
    - evens

userコレクションを作りユーザIDにはFirebaseのInstanceIDを割り当てて、サブコレクションとしてイベントを定義してあげている。
イベントは同時に大量に書き込みが発生するので、コレクションに対する同時書き込み制限に引っかからないようユーザごとにコレクションを分離してあげる形をとっている。
集計するときもeventsで、collection group queryを使えばサブコレクション横断でデータを引っ張って来られるので楽だ。

### プッシュ通知
プッシュに関しては、BigQueryで訴求したいユーザ一覧を取得し、CSVをGCSにアップロードすることでPub/SubでトリガーされたCloudFunctionで飛ばすようにしている。
ここは若干面倒なのでうまいことできないか模索している。

## やってみてどうか
実際にBigQueryに連携することでかなり細かい条件でユーザを抽出し、訴求することができるようになった。
また、特定のユーザの行動ログも簡単に追うことができ、ここで困ってるんだろうな、、、というのがかなり可視化されてきた。
BigQueryのRECORD型も優秀で、これをしっかり定義してあげれば特にダッシュボードなど用意しなくても見やすくデータが追えるのが良い。DAUやリテンションなど日次で追いたいような指標はデータポータルでダッシュボードを作ることで簡単に閲覧できるようにしている。

気になる料金も、

- Firestore
    - 読み込み 50000回/dayまで無料
    - 書き込み 20000回/dayまで無料

- BigQuery
    - ストレージ 10GB/monthまで無料
    - 処理されるクエリデータ 10TB/monthまで無料

なので、特に無料の範囲で運用できている。
※一応一定額の課金が発生したらアラートを飛ばすようGCP側で設定している。

## まとめ
ツールを使うと、データの扱い方もツールに振り回されてしまうので、ときには自前で実装することも必要になるが、
FirebaseやGCPが充実してきたことでかなり簡単に、少ない工数でやりたいことが実現することができた。
まだ運用上課題はあるので様子をみつつ改善していく。
ZOOマーケティング物語 ~第四話：追い詰められたワニ～ 

#~第四話：追い詰められたワニ～

ワニ「・・・であるからして、このクーポンキャンペーンを実施します」 

ゴリ「これって費用対効果とか含めて大丈夫？色々考えてる？？あと前の君のZOOスーツキャンペーンだっけ？大失敗したやん。四肢動物(※)しか着れないから、ライオンとかサルとかから凄いクレーム来たんだけど。今度は大丈夫だよね？自分だけ着れる想定で作ってない？バカなの？」 

※四肢動物：脊椎動物中、足（脚）やそれに類する付属器官を有するものをいう。 すなわち両生類・爬虫類・哺乳類、そして鳥類である。 

ワニ「」 

ワニ「アイタタタタ。急にお腹が！少々お待ちを！」 

ダッシュで自分の部署に戻るワニ。 

ワニ「おい！白おるか」 

白「はぁ？なんでしょか」 

ワニ「ちょっと来い！」 

経営会議に無理やり連れて行かれる白羊 

ワニ「はぁはぁ。。社長！トイレでばったり会ったら是非こいつから説明したいって言ってたので今回チャンスをやってくれませんかね！？」 

ゴリ「(・・・コイツ嘘ついてんな)まあどっちでも」 

白「はい。このキャンペーンはRFM分析(※)からセグメントを作成し、対象者を決定しています。基本的に90日以上から極端にサービス離れが進むため、今回のキャンペーンではその直前のユーザー約1000名を想定しています。そして期間が空いた時の購入カテゴリはスマホケースが多いのでそちらを対象にクーポンを発行しています。」 

ゴリ「ほう。それで？」 

白「その他同条件でテストマーケティングを実施したところ中々の反応率を示しましたので、こういった費用対効果を想定しています。」 

費用対効果の表を見せる。 

白「その後このユーザーが戻ってくると向こう半年で平均XX円使ってくれる想定です。よって売上からの利益率10％をかけた分と今回のコストを加味すると3か月で回収できる見込みです。」 

ゴリ「分かった。ありがとう。」 

ワニ「いやー俺が考えたことこと全部言っちゃうもんな！」 

白・ゴリ「(コイツ終わってんな)」 

###～エピローグ～ 

　今回の施策は期待通りの効果を出し、白羊のマーケティング設計は大きく評価された。そしてその設計事例は社内に展開され、同じように分析から設計までを行う社員も増えてきた。その中で白羊に相談して来るメンバーも多く管理及び評価をしているうちに、社内での地位も確立していった。
　今ではTableauやGA等の様々なデータを出す担当として社内で地位が確立され「データソリューショングループ」が作成された。そのメンバーにおいて白羊が最年少でグループリーダーを務めることになった。 随時Tableauの勉強会等を実施したりもしているようだ。
　なお、ワニ部長はその後も経営会議で段々と化けの皮が剥がれ、遂に呆れられて営業部に飛ばされた。そっちでは謎のコミュニケーション能力を発揮し、まあまあ成果を挙げているらしい。完全に会社の配置ミスだが、その責任を追及されるものはいなかった。 
　今日もZIは平和である。。。めでたしめでたし。 

　いかがでしょうか？私が体験したようなしてないようなことも一部含まれていますが、ご想像にお任せします。マーケティングって難しいですね笑。
AIミニ四駆キットで標準ライブラリ以外のライブラリを使用する

[AIミニ四駆キット](https://github.com/aks3g/ai_mini_4wd_kit)のMicroPythonで標準ライブラリ以外のライブラリを使用可能にします。
MicroPythonでライブラリを使用したい場合、普通のPythonのようにファイルを適当な場所に置いてimportはできません、firmwareに含める必要があります。

# ライブラリの準備
使用したいライブラリのコードを持ってきます。
今回は[MicroMPL](https://github.com/jczic/MicroMLP)をターゲットにしたいと思います。

## 依存している標準ライブラリの確認
ライブラリのコードを入手したらこのライブラリが何をimportしているか眺めます。
MicroMPLは以下に依存しています。

* math
* json
* time
* random

## AIミニ四駆キットが対応している標準ライブラリの確認
MicroPythonはdefineでどのライブラリを有効化するかを決定しています。(正しくはライブラリの中の一部だけを有効化するなどもっと細かい単位でifdefが設定されています)
そのため、ポーティングごとにどの標準ライブラリが使えるか異なります。
どのライブラリが有効化されるかは以下でdefineされています。
https://github.com/aks3g/ai_mini_4wd_kit/blob/master/src/micro_python/ports/ai_mini4wd/mpconfigport.h

## ライブラリの機能の取捨選択
MicroMPLが依存している標準ライブラリでポーティングできているものはmathのみです。
すべてポーティングするのはしんどいのでコードを眺めつつ、機能を削っていくと良いです。
今回はrandomの有効化とtimeの置き換えをします。
jsonが依存しているコードは削っておきます。
あと、randomという名前でimportされていますが、urandomに直します。

## 標準ライブラリrandomの有効化
randomはノードの初期化に使っているので必要そうです。
mpconfigport.hに以下を追加します。

```c

#define MICROPY_PY_URANDOM (1)
#define MICROPY_PY_URANDOM_EXTRA_FUNCS (1)
```

Makefileをいじります。
これを

```makefile

OBJ = $(PY_CORE_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
```
こうします。

```makefile

OBJ = $(PY_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
```

qstrdefsport.hに追加されるパッケージ名を追加します。

```c
Q(urandom)
```


## timeの置き換え
MicroPython的にはtimeではなくutimeですが…。
utimeは学習の打ち切りに使われています。
処理時間を計測するだけならpybで置き換え可能そうです。
置き換えます。まだ動かしてないので動くかわからないです。

```diff
-from time import time
+
+from pyb import millis, elapsed_millis
```
\

```diff
-            endTime = time() + maxSeconds
-            while time() < endTime and \
+            startTime = millis()
+            maxMillis = 30 * 1000
+            while elapsed_millis(startTime) < maxMillis and \
```
 

# Frozen
pyファイルをmpyファイルに変換します。

## mpy-corssのビルド
変換するためのツールをビルドします。
MicroPythonのリポジトリにmpy-crossというディレクトリがあるのでここでmakeを実行するとmpy-crossというバイナリが生成されます。

## mpyの生成
以下のコマンドでmicroMLP.mpyを生成します。

```shell

./mpy-cross microMLP.py
```


# firmwareのビルド
microMLP.mpyをai_mini_4wd_kit/src/micro_python/ports/ai_mini4wd以下にコピーします。
Makefileのfrozentest.mpyをmicroMLP.mpyに変更します。

後は[Ubuntu18.04でAIミニ四駆キットをアップデートする](https://qiita.com/YuK_Ota/items/7d61cbc1935537f9a909)に従ってください。

# あとがき
サイバーフォーミュラ観ながらやってたんですが、11のクレアフォートランは近年で言うデザイン思考を実践していて、解は92年に示されていたのかと衝撃を受けた。
ZOOマーケティング物語 ~第三話：上司の命令って大体雑~

##~第三話：上司の命令って大体雑~
白「よっしゃ、データも見れるし、会員データとか商品データも繋いだから原因もわかるようになったで！」 

ゾウ「俺のおかげだろ焼き肉おごれよ」 

白「金ないからソフトカルビな。」 

ワニ「おーやっとるか」 

いつもの通り暇そうなアホが女をはべらせて登場する。 

白「ぐは」 

お気づきかとは思うがゾウはもう居なかった。ワープしたのか10m程離れている自席で既にパソコンをカタカタやっている。 

ワニ「ぐはってなんだよｗおー確かに売上とかが俺でも分かるようになったわ。さっき経営会議あったんだけど上層部にも説明しやすくて助かったわ。でかしたな」 

猫「やっぱり部長凄い！！カッコよかった！！」 

ワニ「ガハハハハ！まあ俺がやらせたんだから当たり前だけどなｗｗやっぱりマーケティングというのは(うんちく)」 

白「(この女も意味不明だな。。いっそ二人でロケットに乗って宇宙の塵になれよ)」 

ワニ「じゃあ売り上げの出る企画の方も頼むわ。」 

白「(うわ。。。忘れてた。そしてコイツ面接出る意味あんのかよ）はっはっは！お任せください！」 

 
  
###～帰宅後～ 

白「はー施策どうすっかな。。。また適当にクーポン撒いたろかｗｗ俺も使えるしなｗｗよっしゃ1000円以上で1000円OFFで良いやｗｗ売上凄くなるでｗｗｗ」 

  
黒「お前それは見方を変えたら横領だろ・・・あと費用対効果考えたら何の意味もないやん。。。」 

白「あ、兄貴！」 

黒「その施策のKPIって何？あと、施策ってちゃんと状況を考えないと。もうレジに並んでる人にクーポン配っても無駄なんやぞ。ちゃんとそれがなければ買わない人を買わせるようにしないと」 

白「そ、そりゃもちろん！売上が100万で購入は1000件購入単価は1000円が目標や！！(適当)」 

黒「・・・それってクーポンの目的達成してんの？クーポンの目的って何？セグメントは？？」 

白「・・・え？売上だけど。おめえ面白いこと言うなー？オラおでれーたぞ。事業は売り上げが全てだぞ。オラ知ってっぞ。部長も売上しか見てねーんだぞ」 

黒が深いため息をつく。。。こういう安易な施策設計は意外と多い。 

黒「それじゃダメだろ。。。色々セグメント考えろよ。そのための可視化だろ？過去のクーポンデータも見てみて傾向をつかんで・・・クーポンで1000円払って売上1000円だったら商品が無くなる分損してるだろ？お金あげてるだけじゃんｗ」 

白「はっ！確かにｗ頭いいね兄貴！損してんじゃんｗｗｗ」 

黒「おい」 

白「はい」 

黒「KPI施策設計やり直し」 

白「・・・はい。申し訳ございませんでした。」 

##マーケティング・コンテンツ担当の視点 

　今、マーケティング施策やコンテンツ作成をしているディレクター業務を実施している方々はいらっしゃるでしょうか？そしてKPI設計はどのくらい実施しているでしょうか？ 

　どんな施策にも目的があるはずです。その為には達成べきKPIがあるはずです。色々なやり方はあると思いますが、私がKPIを設計する場合、以下の3つの指標構成を意識しています。 

##■売上をKGIと置いたとき 

###・関連指標 

　「購入数」「購入単価」「CVR」「訪問数」等の『相互の指標に関連性があるもの』です。 
例えば購入単価を上げれば購入数がそのままでも売り上げが上がりますし、CVRを上げれば訪問数がそのままでも売り上げは上がるという様に相互が関連している指標です。 

　⇒この指標のメリットは目的として明瞭であるということです。実際に各数字を目標にしてアップすることができたとき、ほかの関連数値がそのままであることが前提ですが、理論上売上が確実にアップするため成果として分かりやすいからです。 

　しかしこの関連指標だけを目的にすると柔軟な各種施策に対応したKPI設計を実施することはほとんどできません。そこで次の指標が重要になってきます。 

###・準関連指標 

　「直帰率」「回遊数」「滞在時間」「会員登録数」等の関連指標と比較すると相互に直接的な繋がりは無いものの間接的には相関関係がありそう、もしくは関連があるとされるもの 

　⇒仮に直帰率が100％であれば、購入完了画面が入口でない限りは、売上も0円だが直帰率から売上を計算することはできないため、各指標との相関等で調査する。 

###・非関連指標 

　相関によってしか判断不可能な指標。たとえ0であっても必ずKGIが0になるとは限らないが、売上との相関が高いという根拠や仮説がある場合のみ取り入れる指標 

　⇒これらの指標は考えれば無限にあります。よって、切り口や有効性を論理的に考え、本当に有効なものを取捨選択することが必要となってきます。 

###※指標のつながりのイメージ 

![KPItree.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285951/2abdc7d2-1d80-2613-1954-d6c1453b1f0f.png)

##【余談】　まずは計測を疑え 

　よし！数字も揃った！KPI設計や！！ってなるのは分かりますが、ちょっと待ってください。その計測は本当に正しいか検証済みでしょうか？保障された数字でなければ絶対KPI設計に使ってはいけません。確実に詳細を突っ込まれたとき説明できなくなります。 

　意図しているセグメントが抜けていないか、または、セール等の各種キャンペーンを実施していて集客している増分を加味しているか、無駄なURLが計測に含まれていないか等、論理的に数字を取捨選択してください。この数字の検証が何より大事になってきます。 

　狙った数字を取得する裏には必ず意図があるはずです。その意図を踏まえた数字になっているか納得いくまで数字を分解して、検証した上で使うようにしましょう。
nem catapult バイト列構造置き場 Dragon編

Alpaca
https://qiita.com/planethouki/items/e1c153f9ea395ce0e8e6
Bison
https://qiita.com/planethouki/items/d22da901e5f71a366302
Cow
https://qiita.com/planethouki/items/bd21182f06b69df1ce35
Dragon
https://qiita.com/planethouki/items/75dc1d685438218a72cd
0.10.0.x
https://qiita.com/planethouki/items/c926905e9fde4c6ef68b

# Transfer Transaction

todo
nem catapult バイト列構造置き場 Cow編

Alpaca
https://qiita.com/planethouki/items/e1c153f9ea395ce0e8e6
Bison
https://qiita.com/planethouki/items/d22da901e5f71a366302
Cow
https://qiita.com/planethouki/items/bd21182f06b69df1ce35
Dragon
https://qiita.com/planethouki/items/75dc1d685438218a72cd
0.10.0.x
https://qiita.com/planethouki/items/c926905e9fde4c6ef68b

# Transfer Transaction


| 項目 | サイズ | 意味 |
|:----:|:------|:------|
| サイズ | 4byte(LE) | payloadのバイト数 |
| 署名 | 64byte | トランザクションへの署名 |
| 公開鍵 | 32byte | 署名者の公開鍵 |
| version | 2byte(LE) | `0390` |
| type | 2byte(LE) | `5441` |
| fee | 8byte(LE) | 手数料 |
| deadline | 8byte(LE) | 期限 |
| 受取人 | 25byte | 受取人アドレス |
| msg size | 2byte(LE) | メッセージバイト数＋１ |
| num mosaics | 1byte | モザイクの種類数 |
| msg type | 1byte | メッセージタイプ |
| msg payload | 可変 | メッセージ本文 |
| mosaics | - | 下記が`num mosaics`分続く |


| 項目 | サイズ | 意味 |
|:----:|:------|:------| 
| mosaic id | 8byte(LE) | モザイクID |
| amount | 8byte(LE) | 量 |

```text:sample
A5000000
894A829717A6627C108BD69D56A188659C403A4E2C0CEDBB35F856AFD57713E9ACA553C68803E56E39683A9D18CBAF258BFCE043724C56175C53E425727C050F
AC1A6E1D8DE5B17D2C6B1293F1CAD3829EEACF38D09311BB3C8E5A880092DE26
0390
5441
0000000000000000
F475D61517000000
90FA39EC47E05600AFA74308A7EA607D145E371B5F4F1447BC
0100
01
00
44B262C46CEABB85
0000000000000000
```
世界のCSIRT/CERT #北・中央アメリカ編

#はじめに
世界の国・地域に存在するCSIRT/CERTの情報をまとめていこうという取り組みです！

>**過去記事**
>世界のCSIRT/CERT #アジア編
>https://qiita.com/yifey/items/1d8f7854bdef7c4d6e1e
>
>世界のCSIRT/CERT #オセアニア編
>https://qiita.com/yifey/items/a54f8e251c3f97b7a1d1

#ソース、調査方針
以下のWikipediaのページの情報およびFIRST加盟団体を参照しつつ作成しました。
また、上記ソースにない情報は個別の国名のGoogle検索でも調査しました。

>Computer emergency response team - Wikipedia
>https://en.wikipedia.org/wiki/Computer_emergency_response_team

>FIRST Teams
>https://www.first.org/members/teams/

地域に関する情報は、以下のWikipediaのページおよび、そのリンク先から。

>国連による世界地理区分
>https://ja.wikipedia.org/wiki/%E5%9B%BD%E9%80%A3%E3%81%AB%E3%82%88%E3%82%8B%E4%B8%96%E7%95%8C%E5%9C%B0%E7%90%86%E5%8C%BA%E5%88%86

各サイトのURLは、日本語>英語>その他言語の優先度で調査し、トップページのURLを掲載しています。
また、FIRST加盟団体には、備考欄に「FIRST」と記載しています。

#アメリカ
##北アメリカ

| 国名 | 組織名 | URL | RSS | Twitter | 備考 |
|---|---|---|---|---|---|
| アメリカ |US-CERT|https://www.us-cert.gov/| [RSS](https://www.us-cert.gov/ncas/current-activity.xml) |[@USCERT_gov](https://twitter.com/uscert_gov)| FIRST |
| アメリカ |CERT/CC|http://www.cert.org/| -  | - | FIRST |
| カナダ|CCCS|https://www.cyber.gc.ca/|[RSS](https://www.cyber.gc.ca/en/rss-feeds)| [@cybercentre_ca](https://twitter.com/cybercentre_ca) | FIRST |
|メキシコ|CERT-MX|https://www.gob.mx/sspc|-|[@CERT_mx](https://twitter.com/cert_mx)|FIRST|

※アメリカ、カナダ、メキシコには他にも複数のFIRST加盟団体が存在します。

##中央アメリカ

| 国名 | 組織名 | URL | RSS | Twitter | 備考 |
|---|---|---|---|---|---|
| エルサルバドル |-|-|-|-|-|
| グァテマラ |CERT Cyberseg|https://www.cyberseg.com/|-|[@Cyber_Seguridad](https://twitter.com/Cyber_Seguridad)| FIRST |
|コスタリカ|Access Now Digital Security Helpline | https://www.accessnow.org/help/ |-|[@accessnow](https://twitter.com/accessnow) | FIRST |
|ニカラグア|-|-|-|-|-|
|パナマ| CSIRT Panama|https://cert.pa/|-|-|-|
|ベリーズ|-|-|-|-|-|
|ホンジュラス|-|-|-|-|-|

#まとめ
北・中央アメリカでの状況をまとめてみました。
元祖CERT*といえるCERT/CCもここで登場しました。
北アメリカでは同じ国に多数のCSIRT/CERTが存在するのに対し、中央アメリカでは1団体のみ、もしくは存在しないという国も多くなり、地域の情勢も反映された結果となりました。

>*参考
>CERT Coordination Center
>https://ja.wikipedia.org/wiki/CERT_Coordination_Center
ページトップアニメーション時にメニューが出て止まる

# ページトップアニメーション時にメニューが出て止まる

iPhoneでページトップボタンを押した時に
下のメニューが出てしまって
アニメーションが止まってしまう原因は、
ページトップボタンをメニューの高さ分、
上にあげると解消されます。


<img width="320" alt="IMG_0946.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43894/20ab6656-dec3-687c-7e03-e590ce453efc.jpeg">
MACメンテナンス

# スワップファイルを削除する

__1.ターミナルで__

``` markup
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
```

パスワードを聞いてくるので、ログイン時のパスワードを入力

__2.再起動__

__3./private/Var/vm/内のファイル削除__

```
/private/Var/vm/
```

__4.ターミナルで__

```
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
```

パスワードを聞いてくるので、ログイン時のパスワードを入力

__5.再起動__

---

# fsckをする

1. シングルモードで起動 [command + S]
2. /sbin/fsck -fy
3. rebootで再起動


# Quick Look Helperを停止する

# CCleanerを使う

# Akamaiを削除

# ファイル共有を解除
JavaScript 閏年　コマンド

<img width="597" alt="スクリーンショット 2019-06-01 18.51.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403514/b65cd1b6-a857-b489-13d6-7d79a3e98fce.png">
ここのifに入るコマンドを知りたいのですが、ヒントでもいいので教えていただけないかでしょうか。
是非お願いしたいです。
最近学んだことをまとめます

こんにちは。未来電子でインターンさせてもらっています、141uと言います。

今回はここ数日で学んだことをまとめておきたいと思います。

まず、僕は今SQLiteを使ってデータベースの連携作業をしています。

SQLiteはローカル環境に向いていてサーバーを経由するものには向かないらしいです。

しかし、使いやすいと言うメリットがあり、データ型を混在させても良いという利点もあります。

今回はSQLiteを中心に書いていきます。

データベースの作成をするときにコマンドを使いますが、その際にこのようなコマンドを打ちます。

<img width="370" alt="スクリーンショット 2019-06-01 18.29.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276221/09da3863-9203-3fa2-fd08-19cf1e08b627.png">


今回はsample.sqlite3というファイルを作ろうと思います。

しかし、この時点ではファイルは作られておらず、テーブルを作った時点でファイルは作られます。

そのため、CREATE文でテーブルを作りましょう。

<img width="521" alt="スクリーンショット 2019-06-01 18.30.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276221/359e7926-6b50-584f-56e9-6a4fac583539.png">

テーブル名がuserでカラムがidとnameのテーブルを作りました。

このテーブルにINSERT文でデータを追加していきましょう。

<img width="549" alt="スクリーンショット 2019-06-01 18.34.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276221/3d7f9c52-f490-b9d7-7eb2-430ff48e25a9.png">

idカラムに1、nameカラムにsatouを入れました。

次にSELECT文で追加したデータを確認しておきましょう。

<img width="561" alt="スクリーンショット 2019-06-01 18.36.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276221/8c9ef905-1573-c62e-5550-c606c77859eb.png">

このように作成したテーブルが表示されました。

しかし、これではデータが大量に入力されていったときにカラム名が分からなくなってしまうかもしれません。

そこで、コマンドを使います。「. headers ON」というコマンドを入力してからSELECT文で確認してみましょう。

<img width="566" alt="スクリーンショット 2019-06-01 18.43.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276221/57f50464-ccbb-9a6e-58bb-2e705b179570.png">

すると、このようにカラム名が表示されてわかりやすくなったと思います。

次にwebのcgi-binの中のファイルを表示させるときのことを書いていきたいと思います。

ターミナルでcd web → chmod 755 cgi-bin/ファイル名 → python3 -m http.server -- cgi8000

と言う流れで入力していきましょう。

ファイルがつながっているものでも、4つのファイルともこの行程を踏む必要があるので、一つ一つやっていきましょう。

URLを入れて確認する際には、しっかりファイルを保存してからやるのも忘れないようにすると良いです。

また、Pythonファイルの中では、SQL文もHTML文も文字列扱いにする必要があるので、コーテーションで囲んでおきましょう。

また、複数行を文字列扱いにする必要がある場合はコーテーション3つ(''')で囲むとできます。

今回はこのへんで終わります。もしかすると、誤った内容を書いている場合があるのでその際にはご指摘していただけると助かります。ありがとうございました。
HerokuのPostgreSQLの使い方【環境構築辺】

# はじめに

他のQiita上にある説明を読みながらHerokuでWebアプリを立ち上げようとしたはいいが、ツールやその他で立ち上げにまごついたので、立ち上げ方法などについて示していきます。

なお、私はまだSQL自体殆ど触ったことがないので、まずは環境構築から書いていきます。

# 前提条件

まずHerokuのCUIのインストールなどは[こちら](https://qiita.com/Geek_Female_Dr/items/4c56fe5a07a46cada28b)を参考にして行いました。
その後適当にアプリを作成したのが下の画面になります。
![アプリ作成後.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395414/130d5bdd-4a2e-3158-e3bd-065c6332fb11.png)
ここからデータベースを新たに作成し、このアプリにデータベースを追加するところまで書いていきます。

# SQL追加方法

先程の画面から、アプリ(mickie-test-app)をクリックしたところ、下記の画面が出ます。どうやらデータベースはAdd-onsの形で追加されるようなので、下記画面のConfigure Add-onsをクリック。

![ダッシュボード.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395414/92d95d78-f513-8825-0e2d-18d43589080c.png)

下記の画面が出てアドオンを追加できるようになります。
英語ですがサポートの記事があるPostreSQLを使うので、Add-onsの検索用テキストボックスにPostgresと打ち込んでHeroku Postgresを選択します。

![アドオン編集画面.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395414/daa5a0e8-c0dd-2dd5-9669-90a40b2aa8d7.png)

今回はテストなのでプランはHobby Devで。

![料金選択.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/395414/0944abdd-3a85-03ac-5138-1555e96cc4c8.png)

Provisionを押すとデータベースが割り当てられる。

# 使い方

ここからは[herokuのサポートページ](https://devcenter.heroku.com/articles/heroku-postgresql)をざっくり日本語訳しながら環境構築していきます。

## ローカル環境の構築

Herokuでは、アプリのPostgresを直接触らず、ローカル環境で確認してからパリティを取る形で進行していくことをおすすめしているようです。
[EnterpriseDBのダウンロードサイト](https://www.enterprisedb.com/downloads/postgres-postgresql-downloads)からソフトをダウンロードしてください、と言われています。

インストーラーをダウンロードし、インストーラの指示に従ってインストールしてください。

[次回、ローカル環境をアップロードするまでの記事につづく](https://qiita.com/mickie895/items/6d31d8f9dbaa3fdabeb3)
numpy.apply_along_axisの挙動確認

https://docs.scipy.org/doc/numpy/reference/generated/numpy.apply_along_axis.html
のscipy公式ページを見ると関数を設定してそこに引数を設定できる。apply_along_axisの使い方の備忘録。

最近axisについて勉強する機会があったので動作確認。

```
>>> def my_func(a):
...     """Average first and last element of a 1-D array"""
...     return (a[0] + a[-1]) * 0.5
>>> b = np.array([[1,2,3], [4,5,6], [7,8,9]])
>>> np.apply_along_axis(my_func, 0, b)
array([ 4.,  5.,  6.])
>>> np.apply_along_axis(my_func, 1, b)
array([ 2.,  5.,  8.])
```

という関数をapply_along_axisに渡し挙動を見ている。

```
>>> b = np.array([[1,2,3], [4,5,6], [7,8,9]])
>>> np.apply_along_axis(my_func, 0, b)
array([ 4.,  5.,  6.])
>>> np.apply_along_axis(my_func, 1, b)
array([ 2.,  5.,  8.])
```
apply_along_axisのmy_func(a)は引数aのnp.array配列を代入し演算子結果を返す。
そこで重要なのがaxis。
axis=0だと引数にとる配列の一番外側を基準にするので
a[0]=[1, 2, 3]とa[-1]=[7, 8, 9]を足し0.5をかけているので
```
[[1 + 7]*0.5, [2 + 8]*0.5, [3 + 9]*0.5]
```

```
array([ 4.,  5.,  6.])
```
となる。


axis=1と置くと外側から二番目の配列にmy_funcを適応して計算する。
[1, 2, 3],[4, 5, 6],[7, 8, 9]のa[0]とa[-1]を足して配列に戻しているので
```
[[1 + 3]*0.5, [4 + 6]*0.5, [7 + 9]*0.5]
```

```
array([ 2.,  5.,  8.])
```

となる。
Java条件分岐 : switch文の作成と勉強方法

・本日は、条件分岐：switch文を取り扱ってみました。

switch文（switch statement）とは、多くの選択肢から1つを選んで実行することを言います。

「switch文」ではいくつか条件分岐がある場合、「if文」よりスッキリ書くことができます。

また右辺と左辺が等しいか比較する場合に使うことができます。

条件分岐の書き方は、「switch (判定したい変数) { case 分岐させたい値 : 処理 break ; }」このように書きます。

判定したい変数「group」を「()」中に書き、 その後に「{}(ブロック)」の中に、

「case」で「group」の変数によって分岐させたい値を書き「: (コロン)」で閉じ、
「group」が「海賊」だった場合の処理を書きます。

「case」の後の「: (コロン)」はいつも書いている「; (セミコロン)」ではないので覚えておいてください。

また、「break ;」はよく書き忘れてしまうので注意しましょう。

![条件分岐.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427747/8f5e112a-b472-d4fc-2f97-dfa436547672.png)

このようにいくつかある条件分岐の場合は「switch文」を使うと「if文」よりスッキリ記述ことができます。



27番目、どうしてダメなんでしょう、、（笑）


ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

**勉強方法**
丁寧に解説しているプログラミングの動画を見る。
↓
真似をする。

動画だと実践式で分かりやすいです。


それでは、今日もお疲れさまでした。
プロキシ下のDockerでコンテナ間通信する時はNoプロキシの設定を忘れないこ

タイトルの通りです。
Proxy環境下のDockerでコンテナ同士の通信を行おうとしたところ、名前解決はできているのに対象サーバのポートへアクセスすると期待した結果にならない場合があります。そんなときはno_proxyに対象を登録すると解決するかもしれません。

bashの場合

```shell
# IPアドレスで通信しないのであればIPの指定は不要かもしれません。
export NO_PROXY=<通信したいコンテナのIP>,<通信したいコンテナのコンテナ名>
```

no_proxyの設定を忘れると、通信はいったんプロキシサーバへ渡されるので、そこで名前解決できないとかなんとか怒られる場合があります。

結果から考えると当たり前の事で恐縮なのですが、結構詰まったので備忘録を兼ねて記事にしました。
MySQLでよく検索してしまうコマンド

個人的なメモ集ですが、宜しければどうぞ。
間違っていたらごめんなさい。
随時追加しつつ、見なくても打てるようになったらいいなあ。

```java:SQL

//user_t,gaibu_t...テーブル名
//userID,itemNo...カラム名

//新規テーブル作成時のPRIMARY KEY（主キー）と外部キーの設定
CREATE TABLE user_t(userID int,itemNo int,
                    PRIMARY KEY(userID),//主キー設定
                    FOREIGN KEY(itemNo)//外部キー
                    REFERENCES gaibu_t(itemNo))//テーブルとカラム名

//PRIMARY KEY（主キー）の追加設定
ALTER TABLE user_t ADD PRIMARY KEY(userID);

//AUTO_INCREMENTの追加設定
ALTER TABLE user_t CHANGE userID userID int AUTO_INCREMENT;

//テーブル名の変更
ALTER TABLE old_t RENAME TO new_t;

```
Openframeworks最初の最初

openFrameworks まとめ


https://vimeo.com/74124094
<iframe src="https://player.vimeo.com/video/74124094" width="640" height="360" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
<p><a href="https://vimeo.com/74124094">OF Showreel</a> from <a href="https://vimeo.com/of">openFrameworks</a> on <a href="https://vimeo.com">Vimeo</a>.</p>


・・・
	•	開発環境を準備しよう
	•	openFrameworksのダウンロード
	•	ソフトウェアを開発するための統合開発環境（IDE: Integrated Development   Environment）のセットアップ、、mac: Xcode, Windows:Visual Studio
 

０１
openFrameworksのダウンロード
https://openframeworks.cc/download/

０２
IDE, Xcode(mac専用)のセットアップガイド
https://openframeworks.cc/ja/setup/xcode/
(ざっくり)
01.XcodeをApp Storeからインストールする
02.Xcodのコマンドラインツール(command line tools)をインストールする

コマンドラインツール(command line tools)をインストール
Terminalに下のコマンドを入力してエンターキーを押す
xcode-select --install

コマンドラインツールのインストーラーが起動するので、「Install」を押してインストール開始

・・・

０３
セットアップのテスト
https://yoppa.org/iphone10/1120.html

	•	ダウンロードしたopenFrameworksファイルの置き場所/ User-Admin-の下
このフォルダーは、あなたのopenFrameworksのルート（OF_ROOTと呼ばれます）として参照されます。



〜フォルダの中身〜
	•	apps ・・作成されたアプリケーションを配置することになります。
	•	examples ・・・ビデオや3Dグラフィクス、サウンド、フォントなど様々な機能をデモするアプリケーションが含まれています。
	•	addons ・・・openFrameworksのアドオン（addons）が含まれます (開発者コミュニティーの貢献による、openFrameworksのコア機能を拡張する機能です)。
	•	projectGenerator_osx・・・ 新規にopenFramworksのプロジェクトを生成するのに便利な、project generatorが入っています。
〜アプリケーションの中身〜
	•	src には、アプリケーションのソースファイルが入っています。
	•	bin は、最終的に実行するアプリケーションが配置されます。さらにその中のdataフォルダには、画像、サウンド、フォントといったアプリケーションのアセット（素材）が入っています。


０４
サンプルを開いてみる
	•	of_v0.10.1_osx?release > example > 3D > 3DPrimitivesExample

	•	.xcodeprojという拡張子のファイルを、Xcodeで開きます。
VSCodeのPython環境とユーザ/ワークスペース周りの設定

VSCodeでPythonのインタプリタが設定されていなかったりすると、正常にインテリセンスが機能しない場合があるので、個人的な備忘録として残しておきたいと思います。

複数のプロジェクトが入ったフォルダを開いた際に、ワークスペースごとにPythonインタプリターを設定しつつ、それ以外は共通のユーザ設定が利用されます。


## VSCode共通のユーザ設定

VSCodeのユーザ設定を行っておきます。
Code->基本設定->Settings->settings.jsonで設定を開きます。

```settings.json
{
  "editor.formatOnType": true,
  "editor.formatOnPaste": false,
  "editor.formatOnSave": false,
  "window.zoomLevel": 0,
  "python.jediEnabled": false,
  // "azureFunctions.showProjectWarning": false,
  // "javascript.suggest.completeFunctionCalls": true,
  "python.terminal.activateEnvironment": false,
  // "python.pythonPath": "python",
  "python.venvFolders": [
      ".venv"
    ]
}

```

python.pythonPathとpython.venvFoldersのどちらで設定するかは用途によって使い分ける感じになりそうです。

また過去にフォルダを開いていると.vscode/settings.jsonが出来ておりそちらが優先されてしまうので、設定を変えたい/その設定がもう不要の場合は該当ファイルを削除しても良いでしょう。
フォルダを開いた時に.vscode/settings.jsonがない場合はユーザ設定をベースに新規に作成されるようです。


## VSCodeのワークスペース設定

VSCodeからフォルダを開く前に、Python仮想環境とワークスペースの設定を用意しておきます。
ユーザ設定に記述された設定を流用する場合はこちらの設定は不要です。

#### Python仮想環境の有効化
プロジェクトにPython仮想環境を用意しておきます。
pylintと関連モジュールを入れておかないと「Unable to import 'xxxxx'pylint(import-error)」や「unresolved import 'xxxxx'Python(unresolved-import)」などのエラーが出るのでインストールしておきます。

```
python3 -m venv .venv
. .venv/bin/activate
pip install pylint
pip install -r requirements.txt
```


#### ワークスペースごとの設定

プロジェクトフォルダに.vscode/settings.jsonを用意し、ワークスペース専用の設定を記述します。

```
{
    "python.pythonPath": ".venv/bin/python3",
    "python.venvFolders": [
        ".venv"
    ]
}
```

準備ができたらVSCodeでフォルダを開き、そのあとにPythonプロジェクトフォルダをワークスペースに追加すると設定が有効になります。
(メニューのファイル->フォルダーをワークスペースに追加)



## 参考情報
[User and Workspace Settings](https://code.visualstudio.com/docs/getstarted/settings)
[Using Python environments in VS Code](https://code.visualstudio.com/docs/python/environments)
[Python settings reference
](https://code.visualstudio.com/docs/python/settings-reference)
Ansible

#お試し

##playbookを使用して、conohaでhttpdインストール、起動
内部で、sudo を使用する必要があるが、password認証で失敗していた。
以下のように、--ask-become-passを追加することで、プロンプトが出てくるようになり、パスワードをいれて、実行できるようになった。

```
$ ansible-playbook -i inventory -u {username} playbool.yml --ask-become-pass
```
terminalのカーソルやキーリピートの速度を変更する


terminalのカーソルの速度って遅すぎてイライラしますよね。
システム環境設定から設定もできるのですが、上限値にしても遅い…
![スクリーンショット 2019-04-09 11.27.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355868/fed95376-c4b2-ac2f-dc15-bf1416aecf9b.png)


defaultsコマンドでシステム環境設定の上限値を超えて速度をアップさせる方法があります。
defaults コマンドは User Defaults Systemにアクセスするためのコマンドみたいです。

### "リピート入力認識までの時間"を設定する

```
$ defaults write -g InitialKeyRepeat -int 20
```

-g は NSGlobalDomain という領域を表します。
NSGlobalDomain はすべてのアプリケーションで共通の設定領域です。
"リピート入力認識までの時間"のシステム環境設定の上限値は15 = 225msです。

### "キーのリピート"を設定する

```
$ defaults write -g KeyRepeat -int 3
```

"キーのリピート"のシステム環境設定の上限値は2 = 30msです。

### 注意
これらの設定は即時反映ではありません。
設定を反映させるためには一度ログアウトする必要がありました。

### 確認
現在の値を確認したい場合は以下のコマンドを実行すると確認できます。

```
$ defaults read -g InitialKeyRepeat
$ defaults read -g KeyRepeat
```
オフラインどう書く第13回参考問題の解

問題はこちら->http://nabetani.sakura.ne.jp/hena/ord13updowndouble/

与えられた数字から0に進む方がやりやすいようです。
奇数のときに2で割れるように1を足すか引くのですが、
小さい数まで割れる方がいいのではないかと思って試しにコードを書いてみたら
全問passしてしまいました。（同じ数になるときは引く）
そこで少し考え、偶数は4nと4n-2なので
選択のたびに4nになる方を選べばよいということだろうと思い、そのように変更しました。

```Prolog
%swi-Prolog version 7.4.2
%start.
%:-initialization(start).   %ideone

solve(1,L,R):-
      R=["+1"|L],!.
solve(3,L,R):-solve(2,["+1"|L],R).
solve(N,L,R):-
      N mod 2 =:=0,!,N1 is N div 2,solve(N1,["x2"|L],R).
solve(N,L,R):-
      N1 is N+1,(N1 mod 4=:=0->(N3=N1,S="-1");(N2 is N-1,N3=N2,S="+1")),solve(N3,[S|L],R).

start:-str(S),split_string(S,"\s\n","\s",L),pre(L),!.
     
pre([]).
pre([_,B,C|T]):-
      number_chars(B1,B),solve(B1,[],L),length(L,R),disp(R,L,C),pre(T).

disp(R,L,A):-
      number_chars(N,A),(R==N->Str=" pass ";Str=" fail "),write(Str),writeln(R).

str("0  59      9
1       10      5
2       11      6
3       12      5
4       13      6
5       14      6
6       15      6
7       16      5
8       17      6
9       18      6
10      27      8
11      28      7
12      29      8
13      30      7
14      31      7
15      32      6
16      33      7
17      34      7
18      35      8
19      41      8
20      71      9
21      1023    12
22      1024    11
23      1025    12
24      1707    17
25      683     15
26      123     10
27      187     11
28      237     12
29      5267    18
30      6737    18
31      14796   20
32      18998   20
33      23820   20
34      30380   21
35      31119   21
36      33301   20
37      33967   21
38      35443   22
39      35641   22
40      43695   23
41      44395   23
42      44666   22
43      987     14
44      1021    13
45      1019    13
46      1015    13
47      1007    13
48      1011    14
49      1003    14
50      983     14
51      999     14
52      2731    18
53      6827    20
54      10923   21
55      27307   23
56      43691   24
57      109227  26
58      174763  27").
```
WindowsでBitcoindがうまく起動しなかった時

#WindowsでBitcoin Coreを起動する

WindowsでBitcoin Coreを利用した際のエラーの対処方法を備忘として残します。

##Bitcoindのコマンドを打った際のエラー

```
'bitcoins' is not recognized as an internal or external command,
operable program or batch file.
```

##前提条件
Bitcoinのデータの格納場所
C:¥user¥yusuke¥AppData¥Roaming¥Bitcoin

Bitcoin Coreの格納場所
C:¥user¥yusuke¥desktop¥bitcoin

##解決方法
Bitcoin Coreの格納場所を
C:¥Program file¥Bitcoin
へと変更したことにより解決。

##まとめ
当初、Bitcoin Coreをダウンロードする際に、安易にDesktopに保存してしまったことが今回のエラーの原因であった。

ソフトウェアをダウンロードする際には、Windowsの想定しているソフトウェアの格納場所に素直にインストールすることが良いということを改めて再確認しました。
CocoaPodsとCarthageで公開済みのFrameworkのアップデート

1. Xcodeでターゲットのバージョンを更新
2. `README.md`を更新（画像素材も忘れずにリンクを更新する）
3. `[Framework Name].podspec`のバージョンを更新
4. `pod lib lint`で検証
5. `git`でプッシュ
    1. `git add -A`
    2. `git commit -m "message"`
    3. `git push origin master`
6. `git`で`tag`をプッシュ（ここまででCarthageはOK）
    1. `git tag [バージョン]`
    2. `git push origin [バージョン]`
7.  `pod trunk push [Framework Name].podspec`で公開版の更新

図解している親切な記事も多いけれど，やるべきことをパッとみたかった．


## タグの取り消し
1. `git tag -d [バージョン]`
2. `git push --delete origin [バージョン]`
保守についてキャッチアップ

保守について理解を深めたいのでその整理用。
ところどころネット検索はしているが、基本、自分的にたぶんこうだろうというもの。

■言葉の定義
・導入・・・システムを入れること。使えるようにすること。
・運用・・・システムをその利用目的に照らしてつつがなく使えるようにすること。
・保守・・・システムに修繕を加えること。

■保守の目的
おそらく以下の2パターンがあり、それによって対応(お金とか)が違うと思う。
①瑕疵担保対応・・・やりたいことが実現できておらず、且つそれが製造者の責任である場合の対応。
②仕様変更対応・・・やりたいことが変わった場合の対応。

→保守契約でも明記されているのだろう。
→「使い方わからん」の対応は保守というよりカスタマーサポートみたいな感じだろう。

■保守に求められるスキル
①製造物がどのような目的で作られているのかの、短時間での把握ができること
②障害原因についての、短時間での把握ができること
③障害原因の対応策についての、暫定策の短時間での提示、恒久対応策の提示ができること
④対応策をとった場合の、別システムや別サブシステムへの影響調査ができること
⑤対応策の実行と検証をミスなく行えること

■保守ができるための環境
・検証用の環境が用意されていること。
・本番用に速やかにミスなく変更内容を適用できること

■保守で発生する利益
・定額費用で設定して見積もりより早く終わらせる。
　→会社として、作業時間が読めることが必須。
・時間請求で設定する。長く働いてもらって総額と人件費の差分で儲ける。
　→お金はとれるけど、さばける案件数が減る。

■保守のプロセス
1事象の確認
2あるべき姿の定義
3障害点の特定
4障害原因の特定
5対応策の検討(暫定、恒久)
6影響調査
7対応実施、検証

2は顧客にやってもらうべきかと(観点出しはするにしてと)。どのタイミングで見積もり提示するのか？定額か変動か？それとも時期により変えるか？
引数に関しての復習

#はじめに
前回に続き、Rubyの概念理解のため、引数についてまとめていきます。

#引数とは
引数とは何か、なぜ使うのかを理解する上でスコープと言う概念を理解する必要があります。スコープとは、変数を使うことが出来る範囲のこと。メソッド内では、メソッドの中で定義した変数しか使えない。メソッドの外で定義した変数をメソッドの中で使うために利用するのが、引数。

```
メソッド名(引数)
```
としてあげると、引数を呼び出すことが可能。書き方の例としては、以下のような形。

```ruby
def area(length)
 puts 3.14 * length
end

puts "半径を入れてください"
radius  = get.to_i

area(radius)
```
メソッドを呼び出す部分の変数とメソッドを定義している部分の変数の名前は一致している必要はない。

例えば、下記のように書くことも可能。

```ruby
def area(radius)
 puts 3.14 * radius
end

puts "半径を入れてください"
input  = get.to_i

area(radius)
```
【忘れない！】プログラミング学習時の覚え書メモの作り方


皆さんはプログラミング学習においてメモを取っているでしょうか？
大抵の人はメモを取っている物かと思いますが、中には「そのメモをどう取るのか？」という所でしっくりこない人も居るでしょう。

ここでは、

・後から見返して価値があるメモである事
・情報が整理されている事

この２つの要件を満たすメモの取り方を紹介します。


#書き記す情報を親要素と子要素で示す

後から見返したくいようなメモを作成し、後悔！
あなたにはそんな経験はありませんか？

もしそうなら、データを取りやすくする工夫を入れる事でそういう系統の事故を減らせます。

##親要素と子要素に分ける時の考え方

具体的には記述された情報を親要素・子要素に分けて記載しておく方法があります。
・親要素というのはそのメモ帳に書きたい物事全体を、3~7つ程度に区切れる大見出し的要素。
・子要素というのは、親要素の中身を示す小見出し的要素「具体的なキーワード」を入れる。こちらは幾つあっても良い。

この区分けを行うと、自然と情報が整理されますし、後から必要な情報を見つけ出すのが素早くなります。つまり後で使えるメモ帳としての機能を持たせる事が出来るのです。
最初に親要素として区分けしていますから、大まかにここに情報があるだろう！という予測を立てやすくなります。
そこに具体性のある子要素のキーワードが盛り込まれどこに目的の情報があるのか解るという訳です。

具体例を示す為に、以下に実際のメモ帳の一部を貼り付けます。

![覚え書.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/413468/3b54533e-3e86-e122-6bf5-e957b9669592.png)

〇基礎　計算
〇基礎　変数
〇条件分岐　if/elseif/else文

という文章が見えると思いますがこれらが親要素と子要素です。
文頭にある「基礎」「条件分岐」と言ったものが親要素。
文末にある「計算」「if/elseif/else」と言ったものが子要素です。

##具体的な利用法

抽象的に「あれ？条件分岐ってどんなだっけ？」となったら親要素をサラッと見返せば全体を俯瞰してみる事が出来て理解が深まる。
具体的に「あの文法ってどうだったかな？」となったら子要素をCTRL+Fで検索して簡単に見つかる。

と、全体を俯瞰する時も、ある特定の情報が欲しい時も、両面から使いやすさが確立されているのがこの書き方です。

#全コピーするのではなく覚え書程度の必要最低限なコピーに抑える

覚え書だというのに、すごく長ったらしい文章を書く人が居ます。

恐らくそういう人はこういう思考回路を持っています。
「あれも忘れたらいけない。これも忘れそう。正確な定義を書かないと…」
こうなる理由は簡単で、メモ帳で全てを覚えようとしている/メモ帳で正確性を求めたがっているからです。

ここで冷静に考えてみましょう。正確かつ正しさを追求した長い文章は別の所に求める事が出来ませんか？

・公式リファレンス
・参考本

正確な情報の取得は、こういった参考資料を参考元にする方がより分かりやすく正しいです。


覚え書メモは、答えを書く資料ではなく、自分が思い出すのを支援してくれる資料/素早くプログラムを書けるようになるための資料です。
正確性を求めてとにかく全部書くスタンスは辞めて、要点だけ纏めたものにしましょう。


もし要点だけ見ても何も思い出せない場合は、まだ参考資料を見て真似てみる段階かと思います。
まずは、うろ覚え状態程度になるまでは、一通り実践しましょう。
メモ帳は、そのうろ覚え状態から記憶を引き出す支援をしてくれるツールです。

#おまけ：「CTRL + F」を使いこなせ！

皆さんはCTRL+Fを使っていますか？
これは、あるキーワードに一致する部分を見つけ出してくれるショートカットコマンドです。

長文なhtmlやら、CSSやら、メモ帳やらから特定情報を抽出する時の効率を飛躍的に上げてくれるのがこのショートカットですから、積極的に使っていくと良いでしょう。

上記のメモなら、「CTRL+F」で「elseif」と検索すれば該当項目に即時に飛べるはずです。
計算のやり方が解らないのなら、「+ - * / %」で検索すれば同じく1発で出てきます。

もし使っていないのなら、今すぐ使い始めましょう。
CircleCI の設定ファイルでハマったらローカルで Validate チェックしよう

## CircleCI の設定ファイルのエラーが直せない

下記のようなエラーが出て、いくら直してもどこが間違ってるのかわからなかった。

```
#!/bin/sh -eo pipefail
# Config does not conform to schema: {:workflows {:test_and_deploy {:jobs [{:test (not (map? nil))} {:deploy (not (map? nil)), :requires (not (map? a-clojure.lang.LazySeq)), :filters {:branches disallowed-key}}]}}}
# 
# -------
# Warning: This configuration was auto-generated to show you the message above.
# Don't rerun this job. Rerunning will have no effect.
false
Exited with code 1
```

設定ファイルの記述のどこかがおかしいことはわかっており、修正しようとしても毎回修正、コミット、プッシュするのはめんどくさい。

## ローカルで Validate チェックしよう
CircleCI 公式で CLI ツールを提供しており、このツールで設定ファイル `.circleci/config.yml` の Validate チェックすることが出来る。この機能を使い設定ファイルの記述ミスを直し、正しいものになってからプッシュすることができますね。

https://circleci.com/docs/2.0/local-cli/

### circleci コマンドのインストール
公式に書いてある通りですが、Mac ユーザ Linux ユーザなら下記ワンライナーでインストール出来るようです。お手軽で便利ですね。

```
curl -fLSs https://circle.ci/cli | bash
```

ちなみに Mac ではインストール先は `/usr/local/bin/circleci` でした。

```
$ which circleci 
/usr/local/bin/circleci
```

### circleci コマンドでの validate チェックの方法
一番簡単な validate の方法を紹介します。詳細はコマンドのヘルプや公式を見てください。

validate チェックしたいプロジェクトのプロジェクトルートに移動し、下記コマンドで確認する事ができます。

```
$ circleci config validate
Error: Config does not conform to schema: {:workflows {:test_and_deploy {:jobs [nil {:deploy (not (map? nil)), :requires (not (map? a-clojure.lang.LazySeq)), :filters {:branches disallowed-key}}]}}}
```

こんな感じで実際の CI まわしたときと同じようにエラーが出てきてくれました。

あとはこいつを直すだけですね。

私の場合は map じゃないところに `hoge:` のようにつけており、怒られていました。

```
誤）
      - test:
      - deploy:
          requires:
正）
      - test
      - deploy:
          requires:
```

### circleci build
ちなみに、ローカルで CI と同様の実行をすることも出来るようです。

CircleCI 2.0 から docker 環境上で動くのでローカルに docker が入っていることが前提ではありますが、下記コマンドでローカルで CircleCI をエミュレートして実行することが出来ます。（もちろんローカルなので無料!）

```
circleci build
```

## まとめ

やっぱり修正は手元で確認出来るようにしてから直すと圧倒的に早くて助かりますね。
Dockerのインストールやってみた(Mac)

#今回の目的
MacにDockerのインストールする

#環境
macOS Mojave バージョン10.14.5
Chrome

#手順
####Dockerをダウンロード
下記ページへ移動します。アカウントが必要になり思いますのでSign upしましょう。
https://hub.docker.com/signup

アカウントをお持ちの方は下記よりSing inしましょう。
https://hub.docker.com/signup

ログイン後、下記より「Get Started with Docker Desktop」をクリックします。
https://hub.docker.com/

<img width="1506" alt="スクリーンショット 2019-05-31 19.48.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332038/f5163e32-0d11-bae2-6b06-c11a1c458639.png">

「Download Docker Desktop for Mac」をクリックします。
ダウンロードが開始されます。
<img width="1492" alt="スクリーンショット 2019-05-31 19.48.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332038/ed7ef242-6777-fef9-e873-d5ad0dd4222f.png">
<img width="363" alt="スクリーンショット 2019-06-01 17.35.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332038/ffd7529c-ab66-7c86-9b20-0366c4ee80db.png">

ダウンロードが終了したら、クリックしてインストールを進めましょう。
案内通りに進めたら特に問題はないはずです。

<img width="248" alt="スクリーンショット 2019-06-01 17.36.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332038/d5473070-c072-c918-74f8-33efe6bbb178.png">

途中、この画面が出たらクジラのアイコンを右のフォルダにドラックしましょう。
<img width="733" alt="スクリーンショット 2019-05-31 19.59.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332038/d18a6cbf-e2de-76fd-08af-d459cd7bc69d.png">

####インストールの完了
画面上部にこのようにクジラのアイコンが出たらインストールは完了です。
<img width="210" alt="スクリーンショット 2019-06-01 17.38.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332038/7b978973-e90e-9a54-2912-a0630f36f3ca.png">

以上です。
いいねやQiitaやTwitterのフォローいただけると励みになります！
お気軽にどうぞ〜
Firebase functionsにGmailを使ったメールサーバを立てる

Firebaseに簡単なGmailのメールサーバを立てたくて調べていたら、「この通りにやれば立てられる」みたいな情報があまりなかったので書きます。
## 参考にした記事
- [OAuth関係のシークレット取得](https://gist.github.com/neguse11/bc09d86e7acbd6442cd4)
- [nodemailerとOAuthの連携](https://qiita.com/markey/items/f0a2d5215ec428442673)
- [nodemailerのメール送信手順](https://qiita.com/Hiroyuki1993/items/1ab9266ca6fc422113e3)

## コード
```TypeScript
import * as functions from 'firebase-functions'
import * as nodemailer from 'nodemailer'

const auth = {
  type         : 'OAuth2',
  user         : functions.config().mail.address as string,
  clientId     : functions.config().mail.client_id as string,
  clientSecret : functions.config().mail.client_secret as string,
  refreshToken : functions.config().mail.refresh_token as string,
}

const transport = {
  service: 'gmail',
  auth
}

const transportor = nodemailer.createTransport(transport as any)

export const sendMail = (to: string, subject: string, text: string) => {
  const message = {
    from: functions.config().mail.address as string,
    to,
    subject,
    text,
  }

  transportor
    .sendMail(message)
    .then(() => 'ok')
    .catch(e => e)
}

```
文系学生のプログラミング学習5日目ーパララックスサイトー

#パララックスサイト作成

今日はドットインストールでパララックスサイトを作りました。

jQueryのscroll.Topという関数を使って、x/y方向の値を決めるというやり方でした。
パララックス効果を使ったサイトをあまり使ったことがないのですが、あまり使われてないのですかね？
スマホのサイトでは広告がスクロールしてもついてきて鬱陶しいと感じることはありますが．．．
広告つきのサイトを見つけたらソースをのぞいてみようと思います。

#パララック効果でそれぞれの動きをずらす

単に箱を下に落とすもの、画像をスクロールするもの、マウスに合わせて箱が動くものという３つを作成したのですが、それぞれのものの動き方を変えるためには、それぞれに違う任意の値を掛けたり、割ったりすることで動きを変えることが出来ます。

具体的には下のように、A/B/Cの部分に違う数字を入れます


        $('#box1').css('top', pos1.top + dy / A);
        $('#box1').css('left', pos1.left + dy / A);
        $('#box1').css('width', 40 + dy * A);

        $('#box2').css('top', pos2.top + dy / B);
        $('#box2').css('left', pos2.left + dy / B);

        $('#box3').css('top', pos3.top + dy / C);
        $('#box3').css('left', pos3.left + dy / C);

こうすることで、box1、box2、box3が違う動きをするようになります。

これはjQueryだけでなく、他でも応用できると思うので覚えておきたいです。

終わり
ネットワークの基本とTCP/IPの概要

初投稿。


ネットワーク
→パソコンなどがケーブルなどで接続されて、相互に通信できるもの
・ノード：ネットワークを構成する要素
・リンク：ノードとノードを結ぶ線
・フロー：リンク上のデータの流れ

ネットワークの種類
１　LAN：1つの建物内で使われているネットワーク（例　本社Only）
２　WAN：離れたLANとLANを繋いでいるネットワーク（例　本社と支社）
３　インターネット：世界規模のネットワーク

トポロジ
→ネットワーク機器の接続形態のこと
・バス型
・リンク型
・メッシュ型
・スター型

通信の方法
・ユニキャスト：１対１での通信
・ブロードキャスト：１対多数。不特定多数に送れる/非効率（ネットワークが重くなる）
・マルチキャスト：１対多数、必要な相手のみ可能/効率的
※プロトコル：通信の方法を制約したもの

OSI参照モデル
→どこのメーカーであっても接続可能
送信元（上位層）
↓ アプリケーション層：各アプリケーションにプロトコルを規定
↓ プレゼンテーション層：データ形式を規定
↓ セッション層：通信の開始や維持、終了を規定
↓ トランスポート層：ノード間の通信を制御するための機能を規定
↓ ネットワーク層：エンドツーエンド（送信から受診までの端末間）の通信を規定
↓ データリンク層：ノード間の通信を規定
↓ 物理層：電気信号を規定
受信元（下位層）
・カプセル化：上位層から下位層へデータを移すこと
・非カプセル化：下位層から上位層へデータを移すこと
・セグメント：レイヤ4（トランスポート層）で使う通信データ
・パケット：レイヤ3（ネットワーク層）で使う通信データ
・フレーム：レイヤ2（データリンク層）で使う通信データ
・ベイロード：各レイヤの間で使われる通信データ

TCP/IPモデル
→現在使われているプロトコル
送信元
↓ アプリケーション層（アプリケーション層/プレゼンテーション層/セッション層）
↓ トランスポート層（トランスポート層）
↓ インターネット層（ネットワーク層）
↓ リンク層（データリンク層/物理層）
受信元
・アプリケーション層：WEBサイトや電子メール、インターネット上でのやり取り
→HTTPやSMTP
・トランスポート層：
→TCP（データの信頼性）やUDP（データの速度）
・インターネット層：エンドツーエンドの通信を制御
→IPやLCMP
→IPはIPアドレスを利用して宛先までデータを配送している
・リンク層：機器同士の直接通信を制御
→イーサネットやPPP


文字の大きさや、太字、図がないと相当わかりにくいなというのが感想。
終。