OmniAICreator/Qiita-1.07M huggingface dataset:
ABC094 in Haskell

#A
そのまま。

```haskell:a.hs
main = do
   [a,b,x] <- map read . words <$> getLine :: IO [Int]
   putStrLn $ if a+b>=x && a<=x then "YES" else "NO"
```

#B
そのまま。

```haskell:b.hs
import Data.List

main = do
  [n,m,x] <- map read . words <$> getLine :: IO [Int]
  al <- map read . words <$> getLine :: IO [Int]
  print $ solve al x

solve al x =
  let (f,s) = (span (< x) al) in
    minimum $ map (length) [f,s]
```

#C
時間がなくて``(!!)``を用いてしまった。
(n>1. 0<=n/2-1<n/2<=n-1)

```haskell:c.hs
import Data.List

main = do
  n <- read <$> getLine::IO Int
  xs <- map read . words <$> getLine ::IO [Int]
  let xs_ = sort xs 
  let (m1,m2) = (xs_!!(div n 2-1),xs_!!(div n 2)) 
  mapM_ print $ solve m1 m2 xs

solve _ _ [] = []
solve m1 m2 (x:xs)  =
  (if x<=m1 then m2 else m1) : solve m1 m2 xs
```

#D
パスカルの三角形までは思いついたが実装で時間切れになってしまった。最初は無駄にソートをしてから考えたが、``minimumBy``で実装できた。

```haskell:d.hs
import Data.List
import Text.Printf

main = do
  _ <- getLine
  as <- map read . words <$> getLine::IO[Int]
  let [n, r] = solve as
  printf "%d %d\n" n r 

solve as =
  [n, r]
  where
    r = minimumBy (\x y -> compare (abs $ n'-x) (abs $ n'-y)) $ delete n as
    n = maximum as
    n' = div n 2
```

``printf``を使わないやり方もあった。

```haskell 
putStrLn $ unwords $ map show $ solve as
```

#E

```haskell:e.hs
```

#F

```haskell:f.hs
```
SCNConstraintを使って必ず上から光が当たる様にする


## はじめに
ARKitで飛行機を飛ばしたときに光の当て方(SCNLightの配置方法)に困ったのでその対処方法を残しておく。

何も考えず下記の様に飛行機のSCNNodeのchildNodeとしてライトをaddすると絵の様に飛行機の上から光を当てることができる。

``` Swift
if let ship = SCNScene(named: "art.scnassets/ship.scn")!.rootNode.childNode(withName: "ship", recursively: true) {
	let light = SCNLight()
	light.type = .omni
	
	let lightNode = SCNNode()
	lightNode.light = light
	lightNode.position = SCNVector3(ship.position.x,ship.position.y + 2,ship.position.z)
	
	ship.addChildNode(lightNode)
}
```

![light_above_ship.png](https://qiita-image-store.s3.amazonaws.com/0/200963/c581a404-65ca-c2fe-3437-c44abf9bf625.png "light_above_ship.png")

しかし、単純にライトを飛行機の子ノードとして追加しているので飛行機をグルっと回転させたときにライトも同様に回転してしまう。
![kaiten_before.png](https://qiita-image-store.s3.amazonaws.com/0/200963/8b7962a1-c28c-2cbd-574e-03e8c6db2ab7.png "kaiten_before.png")


## SCNConstraintを使う
SCNConstraintとはSCNNode間の位置関係に制約を与えるための設定であり、StoryBoadを使ってUI部品を配置するときに設定するConstraintのSCNKit版に相当する物。
この場合、ライトは必ず飛行機のY座標の+0.5に位置することという制約を設ければ、飛行機の向きに関わらず上から光を当てる事ができる。

``` Swift
if let ship = SCNScene(named: "art.scnassets/ship.scn")!.rootNode.childNode(withName: "ship", recursively: true) {
	let light = SCNLight()
	light.type = .omni
	
	let lightNode = SCNNode()
	lightNode.light = light
            
	let positionConstraint = SCNTransformConstraint(inWorldSpace: true, with: { (node, transform) -> SCNMatrix4 in
		let pos = node.position
		return SCNMatrix4MakeTranslation(pos.x, pos.y + 2, pos.z)
	})
            
	lightNode.constraints = [positionConstraint]
            
	ship.addChildNode(lightNode)
}

```

![kaiten_after.png](https://qiita-image-store.s3.amazonaws.com/0/200963/c0d3a5b7-7ad0-b39f-c047-fffcc2fa5fe3.png "kaiten_after.png")
NavMeshAgent同士の衝突判定を行わないようにするには

NavMeshを使うと、障害物を避けながら目的地にキャラクターをたどり着かせる仕組みを、ほぼノンコーディングで作ることができて便利です。ただしNavMeshAgentを適用したキャラクター同士も重なり合わないような処理が入ってしまいます。この衝突判定を防ぐには、NavMeshAgentのプロパティーにある"Quality"を"None"にします。

<img width="292" alt="スクリーンショット 2018-04-15 1.12.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/75307/4a46262f-5528-7cf9-ad89-59f3f511552e.png">

参考URL：「ナビメッシュエージェント - Unity マニュアル」
https://docs.unity3d.com/ja/current/Manual/class-NavMeshAgent.html
プログラミングをするときに知っておくといい感じの用語とかとか

# Summary

プログラミングをするときに知ってた方がいいような気がする用語をふわっと書いてみる

# 一般的用語

### ハード(hardware)
目に見えて触れるもの

### ソフト(software)
見ることも触ることもできないもの

### コンピューター( computer )
ハードとソフトが一体になったもの
パソコン、マイコン、エアコン、スマホ、サーバーなどという

### OS
ハードを動かすベースソフト
例）MacOS, Linux, Windows

### 情報( data )
0と1で表現した何か

### ファイル( File )
情報の塊のこと
テキストとバイナリの２種類がある

### テキストとバイナリ( text and binary )
テキストは人が読めてバイナリは機械が読める
例）foo.txt, bar.pdf

### ホームページ( web page )
ブラウザーというアプリで見ることのできるHtmlファイル

### 掲示板( chat )
色々な人と文字で会話できるホームページ
例）gitter, slack

### ギット( git )
コードの改訂履歴を管理するソフト

### ギットハブ( github )
コードの改訂履歴を複数人で管理できるホームページ

### ネチケット( netiquette )
掲示板とかツイッターとかでの発言には気をつけましょうという感じのモラル集

### クラウド( cloud )
サーバーのこと

### ダウンロード( download )
データーをサーバーから取得すること

### アップロード( upload )
データーをサーバーに送ること

### テキストエディタ( text editor )
テキストファイルを編集できるソフト
文章を書いたりプログラミングコードを書いたりすることに使う
例) notepad, vim, Visual studio code

### ソースまたはコード( source code )
プログラミング言語で書かれたテキストのこと

### ライセンス( license )
ソースコードの利用方法 or 使用方法
例) MIT, BSD 2-Clause, No License



# プログラミング用語

### 演算子( operator )
`+`とか`-`とか

### 変数( variables )
箱みたいなもの

### 定数( constant )
固定された変数

### ループ（ loop )
処理を繰り返すこと

### 条件分岐( conditions if switch )
処理をわけること

### 型( type )
血液型みたいなもの

### 関数( function )
処理の塊

### クラス( class )
変数に関数がくっついたようなもの
`foo.`とドットを入力するとメソッドが出たりする

### コンパイル( compile )
テキストをバイナリにすること

### ビルド( build )
ライブラリとかをリンクすること

### スレッド( thread )
処理単位のこと

### 非同期( async / concurrent / actor model )
スレッド別で処理を実行したりすること

### スクリプト言語 ( scripting language )
実行するのがお手軽なプログラミング言語
例) python, JavaScript, F#
ngrokが便利すぎる

# はじめに
先日利用した[ngrok](https://ngrok.com/)というサービスが便利過ぎたので紹介します。

# ngrokとは
簡単にいうと、ローカルPC上で稼働しているネットワーク（TCP）サービスを外部公開できるサービスです。例えば、ローカルPCのWebサーバを外部公開することができます。

# ngrokの導入
## ngrokにユーザ登録
[ngrok公式サイト](https://dashboard.ngrok.com/user/signup)からユーザ登録します。Githubアカウント、Googleアカウントでも登録できるのでお好みで登録します。

## ngrokコマンドをインストール
ngrokのサービスを利用するには、公開されているngrokコマンドを使用します。[ダウンロードサイト](https://ngrok.com/download)からOSに合ったファイルを取得します。ツールはzip圧縮されているだけなので、ファイルをダウンロードしたら任意の場所に解凍します。

## ngrokコマンドをインストール
ツールのインストールが完了したら、アカウント登録後に表示される「Welcome to ngrok!」のページに表示されている「Connect your account」に記載されているngrokのコマンドを実行し、認証トークンを取得します。
認証トークンの取得が成功すると、~/.ngrok2/ngrok.ymlが生成され、認証トークン情報が登録されます。
これで、準備は完了です。

# ngrokでWebサイトを公開する
それでは、ngrokを使ってローカルPCのサービスを公開してみます。今回はローカルPCにnginxをインストールして、Webサイトを公開します。
まずは、ローカルにnginxをインストールしましょう。以下、Macでの例です。

```shell:nginxのインストール
brew install nginx
```

インストールが完了したら、nginxを起動し、ローカルPC上Webサイトが表示できることを確認します。Macの場合、nginxのデフォルトポート番号は8080なので、ブラウザで``http://localhost:8080``に接続します。nginxが正常に稼働しているとnginxデフォルトページ「Welcome to nginx!」が表示されます。

```shell:nginxの起動
nginx
```

続いて下記のとおりngrokコマンドを実行し、外部公開用のURLを払い出します。

```shell:ngrokによるWebサイトの公開
ngrok http 8080
```

成功するとコンソールに次の内容が表示されます。(一部「XXXXXXXX」でマスク済み)

```shell:ngrok実行結果
ngrok by @inconshreveable                                       (Ctrl+C to quit)
                                                                                
Session Status                online                                            
Account                       XXXXXXXX (Plan: Free)                             
Version                       2.2.8                                             
Region                        United States (us)                                
Web Interface                 http://127.0.0.1:4040                             
Forwarding                    http://XXXXXXXX.ngrok.io -> localhost:8080        
Forwarding                    https://XXXXXXXX.ngrok.io -> localhost:8080 
```

上記の「Forwarding」に表示されているURLをブラウザでアクセスし、nginxのindex.htmlの内容が表示されていれば無事公開されています。

# ここがすごいよ！ngrok！！
ngrokについて個人的にすごい！と思うことを書きます。

## httpsでの公開ができる
上記の例で、実行結果のForwardingが2あり、「https」が用意されているのがおわかりでしょうか。ngrokはSSL認証の部分を肩代わりしてくれ、ngrokの公開エンドポイントまでSSL通信が可能です。認証の機構がデフォルトで用意されているのはありがたいですね。

## 公開できるのはhttp/httpsだけじゃない
ヘルプ（ngrok --help）を見るとわかるのですが、ngrokは``ngrok tcp 22 ``と実行すると、sshサーバを公開することができます。ngrokは「tcp通信」を公開するサービスなので、任意のポートのtcp通信を公開できます。telnetもsshもftpも独自通信も公開できます。これは強力な仕組みだと思います。

# おわりに
いかがだったでしょうか。
個人的には、勉強会とかデモの公開なんかで使うと思います。教材やサンプルコンテンツの提供するのに、いちいちクラウドにアップして公開して・・・というのはめんどうだなと思ってました。これから使っていきたいと思います。
四流女子大学生がRaspberry Piに手を出してみた[買い物編]

前回の投稿
[四流女子大学生がRaspberry Piに手を出してみた[もくじ]](https://qiita.com/starrysky51/items/31fd045a50cdccf894d3)

#では、早速買い物へGO!!!!!!!!!!!!!

ということで、[このサイト](https://liginc.co.jp/series/katoemi)を参考に、早速秋葉原へ買い物にいきました。

今回、購入したものは

- Raspberry pi3　ModelB
- キーボード
- マウス
- MicroSDカード
- USB電源アダプタ（5V3A)
- マイクロUSBケーブル
- HDMIケーブル　(なるべく長いもの）

合計で約8000円でした。
ここで注意すべき（私自身がマジでやらかした）ことはmicroSDを購入することです。大事なことなのでもう一度いいます。**microSD**を購入してください！！！**ちっちゃいSD**買ってください！！！！！！（ラズバイ３の場合）
電源アダプタは５V３Aのものを購入しましょう。これ絶対です。
あとあとBluetoothマウス、キーボードはやめましょう。詳しくは設定編にて。

足を運んだお店は

1. あきばお～２号店
1. 千石電商　秋葉原本店
1. 秋月電子通商　秋葉原店
1. マルツ　秋葉原２号店

![akiba2.png](https://qiita-image-store.s3.amazonaws.com/0/249044/70e25e1c-6005-88f4-572c-d5c06c14489b.png)

↓拡大
![akiba1.png](https://qiita-image-store.s3.amazonaws.com/0/249044/7a3df101-90c3-cbf6-a8f0-68b8709aef9f.png)

画像の矢印の通りにお店を回ります。全店舗の値段を比較し、一番安いお店で買います。ラズパイ一つとっても値段がお店によって１０００円ほど違かったりします。また、安いお店はすぐに売り切れてしまったりするので要注意です。ちなみに私が買ったところではラズパイはラス１でした。
休憩含め、約３時間あれば十分ゆっくり回れます。（ドトールのミルクレープおいしかった、、、）

#感想
初めて秋葉原でのお買い物は正直ちょっと怖かったのですが、なんだかんだ楽しかったです。（小学生並）なんだかこれだけで満足してしまいそうです。ですが、これからが本番です。四流女子大学生からハイスペック女子になるための第一歩を踏み出したということで、これから急成長していきたいとおもいます。
JRの電車の形式称号を正規表現で切り出してやろう

# はじめに

JRの電車の形式称号ってどういう仕組みかなんて考えたことなんてないですよねぇ...?

JRの電車の形式称号って実は正規表現で切り出せちゃうんですよね
じゃあ切り出してやろう、というお話です

![train1](https://upload.wikimedia.org/wikipedia/ja/0/04/JNR_number_kuha103.jpg)
ここの`クハ`の部分ですね (引用元: [Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:JNR_number_kuha103.jpg))

# ここで取り扱わないこと
- 私鉄の形式称号
- 旧性能電車の形式称号
- 形式の数字の部分(上記の画像では`103`の部分)
- 番台区分と車両番号(上記の画像では`191`の部分)

# 区分1: 搭載する機器
JRの車両では、一部の車両にはモーターが付いてたり付いてなかったりします。
前者が電動車、後者は付随車ってやつですね。
運転台の有無によっても区分されたりします。運転台があれば制御車です。

これらは、以下の法則で付けられます。
1. 運転台がある → `ク`を付ける
2. 主動装置(モーター)がある → `モ`を付ける
3. 上記の結果、何も付かなかった場合、`サ`単独とする
    
    
あれ? `ク`と`モ`って同時に付くの? と思った方もいるのではないでしょうか?
もちろん付く車両もありますよ。

# 区分2: 寝台
これは3形式(581･581･285系)にしかないぐらい電車では珍しいので覚えなくてもいいと思います。
A寝台は`ロ`を付け、B寝台は`ハ`を付けます。両方ある場合には`ロハ`の順とします。
そして寝台であることを示す`ネ`をその後に付けます。

# 区分3: 等級･用途
特急にグリーン車とか普通車とかありますよね?
こういった所はここの部分で区切られます。
少し複雑なので表+αでまとめました。

## 文字と等級･用途

|文字|等級･用途 |
|:--:|:------:|
| ロ |グリーン車|
| ハ | 普通車  |

|文字|等級･用途 |      備考     |
|:--:|:------:|:-------------:|
| シ | 食堂車  |               |
| ヤ | 事業用車|   検測車など   |
| ル | 配給車 |保線資材を運ぶ車両|
| ユ | 郵便車 |国鉄時代に廃止|
| ニ | 荷物車 |国鉄時代に廃止|

## 制約
- `ロ`、`ハ`は並立可能で、並立する場合は`ロハ`とする。(半室グリーン車など)
- `ロ`、`ハ`と`シ`は並立可能で、並立する場合は`ロハシ`の順番とする。
- `ロ`、`ハ`と`ユ`と`ニ`は並立可能で、並立する場合は`ロハユニ`の順番とする。
- `シ`と`ユ`&`ニ`は並立不可。(営業上これらが一車両にあったことがない)
- `ヤ`と`ル`はそれぞれ単独のみ。

ね? 言うほど難しくないでしょ?

# 全部をつなげる

## 区分1
- `クモサ`のいずれか または `クモ` かつ 常になければならない

→ `([クモサ]|クモ)`

## 区分2
- [`ロ` または `ハ` または `ロハ`] に `ネ` を加える。
- また、無くても良い。

→`((?:[ロハ]|ロハ)ネ)?`

## 区分3
- `ロハユニシヤル`のうち、何個かが入る。
- また、無くても良い。

→`(ロ?ハ?ユ?ニ?シ?ヤ?ル?)?`

## 結果

```
([クモサ]|クモ)((?:[ロハ]|ロハ)ネ)?(ロ?ハ?ユ?ニ?シ?ヤ?ル?)?
```

## 図解
![image.png](https://qiita-image-store.s3.amazonaws.com/0/111609/f4372005-6d91-30c4-d124-00de1fd1473f.png)
(取得元: [Regexper](https://regexper.com/))

# 最後に
ね? 切り出せないことはないでしょ? (完全とは言ってない)

区分3がガバガバ過ぎるので改善求む
MacでPythonの環境構築

## 環境情報
* macOS Sierra 10.12.6

## 手順

```

# 事前にPythonのバージョンを確認
$ python --version

# pyenvをインストール
$ brew install pyenv

# pyenvのバージョンを確認
$ pyenv -v

# bash_profileに環境変数を追記
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile

# bash_profileを反映
$ source ~/.bash_profile

# Python3.6.0をインストール
$ pyenv install 3.6.0

# pyenvにインストールされているバージョンを確認
$ pyenv versions

# 使用するバージョンをPython3.6.0に変更
$ pyenv global 3.6.0

```
四流女子大学生がRaspberry Piに手を出してみた[もくじ]

#ラズパイ触ってみた理由

興味本位です。こんな感じにする予定です。

- [買い物編](https://qiita.com/starrysky51/items/c951e2f3fa1041bd0042)
- [設定編](https://qiita.com/starrysky51/items/8b34be0e0bba25c91f44)
- [買い物編その２+カメラ設定編](https://qiita.com/starrysky51/items/295d3c108c9a36a5251c)　　
- [監視カメラ編](https://qiita.com/starrysky51/items/e024d83094d60cd675cc)
- [LINE通知編](https://qiita.com/starrysky51/items/1f0a62d2740faf0357f7)

今後の取組み次第で増えるかもしれません。
AWS SAM Local samコマンドの補完が公式になかったので、コマンド補完を自作してみた。

# はじめに

今まではLambda開発はAWSのコンソール画面上からやってたのですが、やっぱりLambdaもローカルで実行したい。テストコードでテストもして、GREENになったらデプロイするようなCI/CDの仕組みを構築したい！となってきたので[awslabs/aws-sam-local](https://github.com/awslabs/aws-sam-local#invoke-functions-locally)を使って本格的にLambda開発をスタートさせようと奮起しました。

ただ、さっそく嫌なポイントが、、、
samコマンドの補完が公式のソースにはない！！
その上、samコマンドのcompletion（補完）がどこをググっても見つからなかった:cry:

ので、自分で作ることにしました:pencil2:

# できあがったもの
できあがったものは[こちら](https://github.com/daisuke-awaji/sam_completion)です。ダウンロードして使用してください。

`sam`コマンドに続いて<TAB>キーを押すとこんな感じになります。
![sam_completion.gif](https://qiita-image-store.s3.amazonaws.com/0/163591/7521e926-fee3-f47c-7659-cc8dc94eb238.gif)

# bash-completion

Bashのタブ補完はBashに組み込まれている仕組みです。`COMPLETE`というBashの組み込み関数によって定義されてます。

例えば`ls`を入力して<TAB>を押すとファイル名が表示される。`cd`ならディレクトリ名というようにコマンドに応じたものが設定されています。bash-completionというパッケージを入れておけば、他にも多くのコマンドでタブ補完ができます。

[bash-completion](https://github.com/scop/bash-completion)

# bash補完のHello World
さっそくBash補完を作ってみましょう。まず、はじめにTABを押した時の補完の候補としてfizzとbuzzを表示する関数`_helloworld()`をつくってみます。候補のリストを`COMPREPLY`という変数に入れると、補完候補として表示されるようになります。

```
$ _helloworld() { COMPREPLY=(fizz buzz); }
```
これを`sam`コマンドの補完方法に指定します。

```
$ complete -F _helloworld sam
```
これで`sam`コマンドは`_helloworld`でタブ補完されるようになりました。ここで、

```
$ sam <TAB>
```
と打つと、以下のように候補が表示されるはずです。

```
$ sam
fizz buzz
```

いい感じですね:v:

# _get_comp_words_by_ref()

`bash_completion`に含まれている`_get_comp_words_by_ref()`という便利関数を使うと、現在カーソルがあるワードは`$cur`、ひとつ前のワードは`$prev`、ワード数は`$cword`という変数に入ります。

こんな感じです。

```
$ _helloworld()
{
  local cur prev cword
  _get_comp_words_by_ref -n : cur prev cword
  echo
  echo cur: ${cur}
  echo prev: ${prev}
  echo cword: ${cword}
}

$ sam fizz buzz<TAB>
cur: buzz
prev: fizz
cword: 2
```

この仕組みをうまく使ってsamコマンドの補完候補を設定してやりました。

冒頭にも書きましたが、ソースは[こちら](https://github.com/daisuke-awaji/sam_completion)です。


# bash補完やってみて

今回は`sam`コマンドの補完を実装してみましたがこだわってやれば他のコマンドに対してもたくさん補完機能を用意できそうです。
「自作コマンドでちょこっと補完したいなぁ」みたいなケースや、
「dockerコマンドの補完でこのオプションがうまく補完候補に出ないんだよなぁ」といった時に有効活用できそうです。

みなさんもよければ参考にしてみてください。
Nuxt.js x Firebase x SSRをワンコマンドでビルド

## 経緯
現在個人で作っているNuxt.js x Firebase x SPAのサイトをSSR対応する際に
ちょうどよく、[Nuxt.jsとFirebaseでSPA×SSR×PWA×サーバーレスを実現する](https://inside.dmm.com/entry/2018/04/10/nuxt-firebase)
の記事が掲載。記事どおりの対応で成功。感謝。

この記事はそのうえでbuild & deployを
```yarn run release```のみで対応できたのでメモがわりに。

ご指摘あればよろしくお願いします。

## todo

### 1. package.json作成

project rootのターミナルにて

```bash
# package.jsonの作成
$ yarn init

# npm追加
$ yarn add cpx mkdirp npm-run-all rimraf
```

### 2. package.jsonにscript等追記

```javascript
{
  ....,
  "private": true,
  "scripts": {
    "release:install:src": "cd src && yarn install && cd ../",
    "release:install:functions": "cd functions && yarn install && cd ../",
    "release:build": "cd src && yarn run build && cd ../",
    "release:clean": "rimraf ./public/*",
    "release:copy:build": "cpx \"./functions/nuxt/dist/**\" ./public/assets",
    "release:copy:static": "cpx \"./src/static/**\" ./public",
    "release:deploy": "firebase deploy",
    "release": "npm-run-all -s release:build release:clean release:copy:build release:copy:static release:deploy"
  },
  "engines": {
    "node": "6.11.5",
    "npm": ">= 3.10.10"
  },
  "dependencies": {
    "cpx": "^1.5.0",
    "mkdirp": "^0.5.1",
    "npm-run-all": "^4.1.2",
    "rimraf": "^2.6.2"
  }
}

```
一応enginesも追記。firebase Functionに合わせとく。


### 3. 完成 & 実行

この状態で

```
$ yarn run release
```

で正しくdeployされるはずです。イエーイ。

## 雑感

- ```cd src && yarn install && cd ../```頭悪そう。shellもっと使えるようになりたい
- releseコマンド内長い
- [yarn workspace](https://yarnpkg.com/lang/ja/docs/workspaces/)とか[lerna](https://lernajs.io/)で綺麗に実現できるのか？今やるには学習コスト高い。
- SSR表示まで重い。チューニングいる。
学習記録(2) -Processing

1.使用言語
　　Processing3.3.5
2.製作時間
　　約2時間
3.できたこと
　　ゲームクリア・ゲームオーバーのときにゲームを止める　-noLoop();
4.できなかったこと
　　一番上にあるブロック以外の当たり判定

![block_tower.png](https://qiita-image-store.s3.amazonaws.com/0/249225/56e0f84a-2732-fcc6-19ed-1d5bc34facbe.png)
Gitのブランチ名を返すエイリアスを設定しなくても地味に捗った

## はじめに
こちらは
[Gitのブランチ名を返すエイリアスを設定したら地味に捗った](https://qiita.com/kmszk/items/3de61ef75e30dedd6f6e#comment-d644441c245882aad03a)
のいわゆる訂正記事です。

前回は```$(brname)```というGitのcurrentのブランチ名を返すaliasを紹介したものの、『この作業ならalias無くてもブランチ名入力する必要ないよ』というツッコミを数件いただきましたので、こちらにまとめておきます。

元記事は想定以上にいいねがついてしまっているので、これはこれで有用だったのかなとも思い、そのまま残しておきます…(あと自分の戒めのためにも)。

※ 以下、```$(brname)```となっている部分が前回.bashrc(.zshrc)のエイリアスとして紹介されている部分ですね。

## git push
.bashrcエイリアス版

```bash
git push -u origin $(brname)
```
↓
**エイリアス不要版**

```bash
git push -u origin HEAD
```
```git push origin HEAD```はGitの公式でも手軽に同名でoriginにpushするための手軽な方法と紹介されていました。


[git-scm.com: git push origin HEAD](https://git-scm.com/docs/git-push#git-push-codegitpushoriginHEADcode)

こちらは@kappa0923さんにコメントにてツッコミをいただきました。

## git diff
.bashrcエイリアス版

```bash
git diff $(brname) origin/$(brname) --stat
```
↓
**エイリアス不要版**

```bash
git diff HEAD @{u} --stat
```

### @{u} (@{upstream}) とは
@{u}とは@{upstream}の省略形で、@{upstream}はさらに\<branch name\>@{upstream}の\<branch name\>が指定が無い時はカレントのブランチ指定になるという省略形です。
マニュアルをあたってみると、
[git-scm.com: \<branchname\>@{upstream}, e.g. master@{upstream}, @{u}](https://git-scm.com/docs/gitrevisions#gitrevisions-emltbranchnamegtupstreamemegemmasterupstreamememuem)
> The suffix @{upstream} to a branchname (short form \<branchname\>@{u}) refers to the branch that the branch specified by branchname is set to build on top of (configured with branch.\<name\>.remote and branch.\<name\>.merge). 

branch.\<name\>.remoteとbranch.\<name\>.mergeに設定してあるものを返すという説明っぽいですね。

さらに日本語で上手く説明してある記事を探したのですが下記の記事がしっくりきました。
[Gitで特定のローカルブランチをリモートブランチの変更に追従させるワンライナー](https://qiita.com/yaotti/items/76371aa5afaa23b2b19f)
> \<branch name\>@{upstream}はそのブランチに対応したupstreamのブランチ名を取得する．

つまるところやはり@{u}でremote上のブランチ名を取得できるようです。

こちらは@turenarさんにコメントにてツッコミいただきました。

## git reset
.bashrcエイリアス版

```bash
git reset --hard origin/$(brname)
```
↓
**エイリアス不要版**

```bash
git reset --hard @{u}
```

こちらも@{u}(@{upstream})で代用できるようです。
こちらも@turenarさんにコメントにてツッコミいただきました。

## まとめ
.bashrc(.zshrc)によるエイリアスがなくても

- 無駄なTypoを防ぐ
- コピペの手間削減
- 補完を使うことによりタイプ数も減る

効果が得られることがわかりました。

※ ```git pull origin <brname>```については今の所は前回のaliasが有用っぽいですが、もしかしたらデフォルトで代用できる何かがあるかもしれません…。

Qiitaのツッコミがなければ、ずっと自分は前回の記事の遠回りな方法を使い続けていたかもしれません。
指摘いただいた皆様ありがとうございましたm(_ _)m
VisualVMの使い方

# はじめに
VisualVMはJavaのメモリ使用率とかを確認できるツール。連続負荷試験とかを実施するときにメモリリークの傾向とかがないかどうか等を確認するために使ったりしてる。
別に新しくもないツールだとは思うがまだ現役のツールだと思っているし、あんまり知らない人もいるようなので、メモリリークの傾向のあるサンプルプログラムを使い、簡単な使い方を（知っている範囲で）記述する。

# サンプルプログラム
```java
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

public class MemoryLeak {

	private static class SampleClassA {
		private final List<byte[]> list = new ArrayList<>();

		private void malloc() {
			list.add(new byte[1024]);
		}

		private void clear() {
			list.clear();
		}
	}

	private static class SampleClassB {
		private final List<byte[]> list = new ArrayList<>();

		private void malloc() {
			list.add(new byte[1024]);
		}

		private void clear() {
			;
		}
	}

	public static void main(String[] args) throws Exception {
		SampleClassA sampleA = new SampleClassA();
		SampleClassB sampleB = new SampleClassB();

		while(true) {
			sampleA.malloc();
			sampleB.malloc();
			sampleA.clear();
			sampleB.clear();

			TimeUnit.MILLISECONDS.sleep(100);
		}
	}

}
```
SampleClassAとSampleClassBでそれぞれ100ミリ秒に1kBだけメモリを確保→開放している。見た目はほとんど同じだが、SampleClassBのほうは実際にはメモリを開放していない。

# 使い方
上記サンプルプログラムを使って簡単にテストしてみる。
## 1. VisualVMを起動しておく
起動する。今回の例ではEclipseのPleiadesにあるVisualVMを使う（Windowsならjava/8/bin/jvisualvm.exeとかで起動できるはず）。

## 2. テストするプログラムを実行する
今回は上記サンプルプログラムをEclipseから実行する。
実行すると下のような感じで実行中のプログラムがVisualVMに出てくる（Eclipseとは別でVisualVMをダウンロードしてたりすると出てこないかもしれない）。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/63657/f7af58c5-006e-f403-3e0e-979bda366c50.png)
これをクリックすると、下のように現在のCPU使用率やメモリ使用率が出てくる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/63657/dec704b5-5e3f-f53d-58c9-54c547491084.png)

## 3. テスト開始時の状態を記録する
後からテスト開始時の状態と比較するため記録しておく。とりあえず監視タブからGCを実行した後スクリーンショットでもとって、現在のメモリ使用量でも記録しておく（2の画像の青の部分が現在のメモリ使用量）。また、監視タブの右上からヒープダンプボタンを押すと、以下のように現在読み込み中のクラス情報とかが得られる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/63657/a8f0b949-ca83-1926-6bfc-a3fa6e62c25e.png)

## 4. しばらく放置する
一時的ににメモリ使用量が増加しているように見えても途中で増加が止まることもあるようなので、それなりの期間放置する。昔いた会社では1週間程度、最低でも3日は放置して監視していたが、実際どの程度の期間を監視期間とすべきなのかは場合による。

## 5. テスト後の結果と比較する
面倒なので2時間程度で終了とし、テスト前の結果と比較する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/63657/fa1d6c38-dd04-cd8b-ecc8-2fcf6010616c.png)
GCを実行した後のメモリ使用量は80MBくらい。テスト前は10MBくらいだったので上昇しているのがわかる。
ヒープダンプを新しく取得することで、前回のヒープダンプとの比較もできる。前回と同じようにヒープダンプを取得し、クラスタブの右上から別のヒープダンプとの比較を選択すると、以下のような感じでどういったインスタンスが増加しているのかがわかる。今回のケースだとbyte[]が増加している。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/63657/93443c6c-fe57-d6c2-d8d0-741af133ed61.png)
また、ここからさらにそのインスタンスがどこから参照されているのかも調べることができる。クラスタブのbyte[]をダブルクリックし、左側のインスタンスから適当なものをクリックした後、右下の参照の中を開いていくと、byte[]インスタンスのうち少なくとも一つがSampleClassBから参照されていることがわかる（型の部分を参照）。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/63657/36a7d25d-2602-2319-50ba-b1554710a299.png)
本番では様々なインスタンスが様々な所から参照されているが、今回の場合は他のインスタンスの参照を開いても大体はSampleClassBから参照されていることが把握できる。

# おわりに
* 今回はメモリに関することを記述したが、実際にはほかにも色々調査できるはず
* ファイルのクローズし忘れによるファイルディスクリプタの増加等、このツールだけでは把握できないこともある（と思っている）ので、別途ほかのツールやコマンド等を使ってのテストも必要
Jetson TX1にAutowareをインストールしてみた

## 環境
- Jetson TX1
- JetPack 3.2
- PCL 1.7
- ROS Kinetic
- Autoware 1.6.3

## 前提
- ROSがインストールされている。
- OpenCVがインストールされている。

参考: [Jetson TX1にROS Kineticをインストールしてみた](https://qiita.com/0-to-1/items/6b29bc08ba5e16773fff)
参考: [Jetson TX1にOpenCV 3.4をインストールしてみた](https://qiita.com/0-to-1/items/e9d1bbd15b77b9a5edeb)

## インストール
### PCL
```
$ sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl
$ sudo apt update
$ sudo apt install libpcl-dev
```
### ROS
```
$ sudo apt install ros-kinetic-pcl-ros ros-kinetic-roslint ros-kinetic-jsk-recognition-msgs \
ros-kinetic-cv-bridge ros-kinetic-nmea-msgs ros-kinetic-sound-play ros-kinetic-grid-map-ros \
ros-kinetic-diagnostic-updater ros-kinetic-camera-info-manager ros-kinetic-jsk-rviz-plugins \
ros-kinetic-gps-common
$ sudo apt install ros-rviz
```
### その他
```
$ sudo apt install libssh2-1-dev libpcap-dev gksu python-psutil libnlopt-dev libpcap-dev libarmadillo-dev
$ sudo ln -nfs /usr/lib/aarch64-linux-gnu/tegra/libGL.so /usr/lib/aarch64-linux-gnu/libGL.so
```

### Autoware
```
$ source /opt/ros/kinetic/setup.bash
$ git clone https://github.com/CPFL/Autoware.git
$ cd Autoware
$ git checkout -b 1.6.3
$ cd ros/src
$ catkin_init_workspace
$ cd ../
$ vi src/computing/perception/localization/lib/fast_pcl/ndt_gpu/include/fast_pcl/ndt_gpu/common.h 
```
```common.h
...
#define SHARED_MEM_SIZE 3072
# 以下追加
#if ( __CUDACC_VER_MAJOR__ >=9 )
#undef  __CUDACC_VER__ 
#define __CUDACC_VER__ 90000
#endif 
```
CUDA 9.0に対応させるために上記のファイルを修正する。

```
$ touch src/driveworks/CATKIN_IGNORE
```
DriveWorksは無いのでオフにする。
あとは気長にビルドを待つ。

```
$ ./catkin_make_release
```
## 動作確認
```
$ cd .autoware/
$ wget http://db3.ertl.jp/autoware/sample_data/my_launch.sh
$ wget http://db3.ertl.jp/autoware/sample_data/sample_moriyama_data.tar.gz
$ wget http://db3.ertl.jp/autoware/sample_data/sample_moriyama_150324.tar.gz
$ tar xzvf sample_moriyama_data.tar.gz
$ tar xzvf sample_moriyama_150324.tar.gz
$ sh my_launch.sh
```
あとは下記の動画の手順を実行すれば良いのですが、
Jetson TX1のスペックではまともに動作させるのは難しいようです(メモリ、CPUともに不足)。
Jetson TX2を購入したら試してみたいと思います。

参考: [QuickStart demo](https://www.youtube.com/watch?v=0luGF0-2nqc)
Visual Studio CodeでProcessingを動かす (Windows版)

基本的には以下記事と同じ。
https://qiita.com/JotaroS/items/12e8b650057ed154ddad

ただ、Windowsでちょっと詰まったのでメモ。
上記はMac用のやりかた。

# Macとの違いその1
Processing側の設定は不要。Processing自体をダウンロードしていればよい。

# Macとの違いその2
`command`のところをprocessing-javaのパスにするだけ。拡張の説明にも書いてあったけどちゃんと読んでなかった。。

```JSON:task.json
{
    "version": "0.1.0",
    "command": "C:\\Program Files\\processing-3.3.7\\processing-java",
    "isShellCommand": true,
    "showOutput": "never",
    "args": [
        "--force",
        "--sketch=${workspaceRoot}",
        "--output=${workspaceRoot}\\out",
        "--run"
    ]
}
```
Rustでハノイの塔

初投稿です。
去年の冬ぐらいに、エッチな画像をPythonでスクレイピングするスクリプトを書き、それをキッカケにプログラミングを始めました。
最近はRustにハマっています（理解しているとは言っていない）。
今後もよろしくお願いします。

今回の内容はRustでハノイの塔を攻略してみました。

#ハノイの塔とは
![Tower_of_Hanoi.jpeg](https://qiita-image-store.s3.amazonaws.com/0/241549/0e8c872a-8c9a-73c2-92ef-bae3d4afaed7.jpeg)
ざっくり言うと、上の画像の円盤を真ん中の棒（または右端の棒）に移動させるというものです。
ただし、以下のルールがあります。
・リスト小さい円盤の上に大きい円盤を乗せてはいけない。
・一度に移動出来る円盤は一枚のみ。

#とりあえず
以下、コードです。今回は左端から右端へと円盤を移動させます。

```rust:main.rs
fn hanoi(n: i32,x: &str,y: &str,z: &str){
    if n>0{
    hanoi(n-1, x, z, y);
    println!("{}枚目、{}から{}へ",n,x,z);
    //println文で円盤の移動を示す。
    hanoi(n-1, y, x, z);
    }

}

fn main() {
    println!("5枚の円盤をCの棒へ");
    hanoi(5,"a","b","c");
}


```
三本の棒をそれぞれ左端からa,b,cとし、円盤は5枚であるとして、hanoi関数に引数を渡します。
hanoi関数内は再帰呼び出しとなっており、n=1の時のhanoi関数からn=5の時のhanoi関数まで実行され、移動が完了となります。

#勉強になったところ
**再帰呼び出し**です。
実はネットに転がっていたC言語のコードを参考にして上のコードを書いたのですが（そのこともあって、上ではアルゴリズムに関しては説明を省略させてもらってます・・・）、n=1の時のhanoi関数が実行されるのは理解できたのですが、n=2以上のhanoi関数が実行されるのが最初はよく分かりませんでした。
結局のところ、n=5の時のhanoi関数にはn=4の時のhanoi関数が含まれ、n=4の時のhanoi関数にはn=3の時のhanoi関数が含まれ・・・となっているから、最後のn=1の時のhanoi関数が実行されると、n=2の時のhanoi関数からn=5の時のhanoi関数が実行されるんだと納得しました。

#感想
関数あたりの話はもう理解したと思っていましたが、実際にはまだまだ理解出来ていませんでした。もし、この記事を読んでいるプログラミング初学者の方がいらっしゃったら、ハノイの塔は再帰呼び出しの勉強をするのに最適かと思います。


見ての通り、プログラミングに関してはまだまだ勉強足らずなところがあるので、何か気づいた点がありましたらコメントしてくださるととても嬉しいです。
それではまた！
0からのDocker 1日目


Dockerが便利、時代はDockerということを耳にして1年以上経ち、
自分が関わっているプロジェクトにも導入されていたり、導入したいねという話も出てきたのでちゃんと勉強する。

一日目の感想としては便利なのはわかったけどいまいちイメージがつかめないといったところでした。
このイメージがDocker用語ではないほうのイメージです。
なにやら用語やコマンドが色々出てきて混乱してます。。

## Dockerとは
環境構築で必要な設定や実行すべきコマンドを設定ファイル（Dockerfile）を作って、このファイルをもとに`Docker イメージ`, `Docker コンテナ`を作る。
それぞれの詳細は後述しますが、Dockerコンテナを実行することでDockerfileで設定しておいた環境が立ち上がる。
DockerはDockerイメージを取得したり、作成、Dockerコンテナを作成、実行するためのツール。

人気の理由はコンテナ型仮想化という技術によって、
ホストマシンのリソースを効率的に扱えたり、Dockerがインストールされて入ればどこでも動く手軽さによるもの。


## Dockerイメージ
DockerイメージはOSやアプリケーションがパッケージになったもの。
UbuntuやCentOSのようなOSやMySQLやRedisのようなアプリケーションもDockerイメージにある。
これらをセットにしたものもDockerイメージとして作成できる。

```bash
docker build -t タグ dockerfileのでィクレクトリ

=> docker build -t tag_name .
```


### イメージのタグ
`ユーザ名/リポジトリ:タグ`の記述でローカルとイメージとレジストリ上にあるリポジトリとを関連付ける。
タグはDockerイメージのバージョン指定の仕組みに使われる。

```bash
# タグをつける
docker tag image ユーザ名/リポジトリ:タグ

# イメージをリポジトリにアップロードする
docker push ユーザ名/リポジトリ:タグ
```

## Dockerコンテナ
DockerコンテナはDockerイメージから生成される仮想サーバ。
Dockerコンテナはホストマシン上の１つのプロセスとして実行される。

```bash
docker run tag_name
```


## 参考
[「Docker」を全く知らない人のために「Docker」の魅力を伝えるための「Docker」入門](https://qiita.com/bremen/items/4604f530fe25786240db)
[VagrantとDockerについて名前しか知らなかったので試した - Qiita](https://qiita.com/hidekuro/items/fc12344d36d996198e96)
[流行りにのるために Vagrant で用意した ubuntu に Docker を導入してみた - Qiita](https://qiita.com/kasaharu/items/48b5c216248c6c7d147d)

## 疑問
RUNとCMDの使い分けがわからない問題。
違いはわかったけど、そのコマンドはRUNとCMDのどっち？ってなりがちです。
イメージ時に実行しても問題ないのか、コンテナが作成されてからでないと実行できないのかを考えれば良いような気がしてきました。
[Docker 初心者 | <実践> RUN と CMD の違い - Qiita](https://qiita.com/YumaInaura/items/ce40a792da308a068310#_reference-7f62d8fcf4b96c0e3541)

## おわりに
理解が曖昧なため、認識を間違えている可能性が多分にあります。
そのような箇所をみつけたら遠慮なくコメントや編集リクエストをいただければと思います。
また、参考になる記事などをご存知でしたら教えていただければ幸いです。
電気系プログラミングガチ素人が、Xamarinでアプリ開発する話　3日目　~パッケージを更新したいのにできない→決着~

#まえがき

この記事は「Skype工学勉強会」の「アプリ作成部屋　Xamarin」での活動をまとめて記録したものです。参考書が、マイクロソフトさんから布教されておりますので、そちらを和訳しつつ、まとめて記事にしていく流れになっております。
しかし、当方、タグの通り、「電気系」の学生で「ガチ素人」であるため、先輩にまさかりを投げてもらいながら、覚えていく所存でございます。また、もし他に指摘点などございましたらぜひともよろしくおねがいします。

↓Xamarinの布教用PDF、Kindle版もございますので、英語読める方、ぜひとも。
https://blogs.msdn.microsoft.com/microsoft_press/2016/03/31/free-ebook-creating-mobile-apps-with-xamarin-forms/

##前回までのXamarin!!
Helloアプリ作ろうぜ！！

#Nugetパッケージの更新
ソリューションエクスプローラを開き、Androidなどの項目を右クリック→Nugetパッケージの管理→右上に更新
すべて更新が選択可能
→なぜかすべて失敗してしまう・・・

![image.png](https://qiita-image-store.s3.amazonaws.com/0/244181/93d33674-d000-776c-85e2-8341671e024d.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/244181/cd600504-a5e9-8d84-3303-a11a911d8ce6.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/244181/b186c20d-f91f-020b-f865-a211edd2ffc0.png)

#ビルドから「Configration Manager」 ???
構成マネージャーでした・・・そのまんま・・・
![image.png](https://qiita-image-store.s3.amazonaws.com/0/244181/52288c76-b07e-51ed-73a9-6dfe72c40a45.png)
下のような設定に変更
![image.png](https://qiita-image-store.s3.amazonaws.com/0/244181/62c703b3-f501-9bbf-cc34-58dabedfd513.png)
チェックマークが付きました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/244181/0c79a243-01ca-aeec-8ce8-0072545f2039.png)

プロジェクト作り直してもう一度やってみる
#スタートアッププロジェクトに設定
ソリューションエクスプローラ→App1.Android右クリック→スタートアッププロジェクトに設定

#やっと・・・デバッグ！
F5か、デバッグ→デバッグの開始

・・・できないっ！

#あとがき
DLLが見つからないせいで勉強会が停止に・・・
VSを修復しようと思ったら、VSInstallerの更新入るし・・・
踏んだり蹴ったりになってしまいました・・・(解せぬ)
今度こそ・・・（記録はここで終わっている）

#決着（OSがかわったけど、実際にそのあとWinでもできました）
https://qiita.com/sanbongazin/items/603e2f529a6fd15b68d0
Firebase Cloud Functions でPOSTリクエストを受ける

```javascript:index.js
const functions = require('firebase-functions')

exports.postRequestFunction = functions.https.onRequest((request, response) => {
  if (request.method !== 'POST') {
    response.send('This is not post request')
  }

  // なんか処理

  response.send('This is post request')
})
```

`request.method`プロパティにリクエストメソッドの文字列が入る。
試してないが`put` `delete`も同様に出来るはず。
受けたいリクエストメソッド以外が来た時は抜けるようにする。

`send()` `redirect()` `end()`メソッドを使うと関数が終了する。

# 参考
https://firebase.google.com/docs/functions/http-events
さくらのVPS(CentOS7)に公開鍵認証でPuttyからSSH接続をする際に詰まったこと

#前置き
さくらのサーバーに公開鍵認証する手順は大体以下のようになる。
1. 公開鍵と秘密鍵のペアを作成する(Puttygen.exe)
2. 秘密鍵をローカルに、公開鍵をサーバ側に保存する
3. /etc/ssh/sshd_configを書き換える
(<font color = red>**ポートの変更**</font>、パスワード認証の停止、rootでのログイン禁止、秘密鍵認証の有効化）
4. 秘密鍵のディレクトリパスをPutty側で指定して、サーバにアクセスする

この手順についてはQiitaのこちらの記事が詳しい
https://qiita.com/sango/items/816136188387221f05b3

ただし、このままではSSH接続ができなかった。ポートを22番ポートに戻し、22番ポートにSSH接続を行うと接続ができる。

#結論

結論を言うと、私のサーバではFirewallが動いていて、22番ポート以外への接続を全て弾いていた。

https://webkaru.net/linux/centos7-firewalld-ssh-port/

この記事を参考にファイアウォール側で設定を変更し、22番ポートを閉じて、SSHで接続したいポート(仮に50000番)を開いた。

#問題の切り分け
ファイアウォールが起動しているかは、

```
$systemctl status firewalld.service
```

で確認ができる。active(runnning)と緑色で表示されれば起動している。

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/124948/cc71cf88-20cb-048f-e6c4-df69dc2ef1e4.png)
こんな感じ。

Firewallが起動していないのに設定したポートへのSSH接続ができない場合は、他の原因を疑ったほうがいいかもしれない


次は、起動しているファイアウォールが本当に原因かどうか。

友人によると、こういうときはFirewallを一回落としてみて、今回設定したいポート番号（例えば50000）に接続して、接続できるかを確認するのがいいらしい。たしかに。

というわけで、ファイアウォールを落として、SSH接続をしてみる。
コマンドは

```
$systemctl stop firewalld.service
```

これでも、SSH接続ができない場合は、ファイアウォール以外にも原因がある可能性がある。他の原因も疑ってみよう。

#VPS側で弾かれている可能性
半年後、2台目のサーバ構築の際、別の点で引っかかったのでメモ

VPSサービスの管理画面で設定したポート許可のポリシーで弾かれている可能性がある。確認して、全許可してfirewalldを適切に設定したり、
管理画面で適切なポリシーを設定したりして対応しよう。

#鍵に関して

`openssh -t rsa -f authorized_key`を使うのおすすめ。
permissionは`.ssh/`が600, `authorized_key`は700。
puttygenで作ってuploadしてもいいんだけど、ppk形式からrsa形式に変換する手間が発生する（慣れてないだけ）

---
今回の記事は以上。
PubHack.swift 2018-04に行ってきた

<p>2018年4月12日（木）の夜間、東京都豊島区の<a href="http://www.dubliners.jp/">THE DUBLINERS' IRISH PUB 新宿店</a>におきまして、「PubHack.swift 2018-04」を開催致しました。</p>

![PubHack-1.jpg](https://qiita-image-store.s3.amazonaws.com/0/12540/f6733e40-cb17-ef52-d2af-be5aedaea2c7.jpeg)

<p>PubHack.swiftは今年からはじめました新しい形のイベントで、飲み会イベントを通じて、macOS/iOS/tvOS/watchOS/Androidエンジニアの人たちの交流を目的としています。<br />
名前の由来を説明しますと、PubHackは英国 Pub Rock からとりました。<br />
Pubは飲み会、Hackはプログラミング、.swiftはmacOS/iOS/tvOS/watchOS系です。</p>

<p>始めたばっかりということで、正直、浸透していませんが、それでも参加人数は7名と、予想した人数より多くなり大変嬉しいです。<br />
また、参加された方のバックグラウンドも多彩で、新しいイベントとしては、よかったのではないかと思っています。</p>

![PubHack-2.jpg](https://qiita-image-store.s3.amazonaws.com/0/12540/d9373859-b28d-e053-569d-f4ac42dbfb3b.jpeg)

<p>純粋な飲み会イベントということで、長々と文章で説明するのも野暮だと思いますが、出てきた話題を何個かピックアップしますと、以下のとおりです。</p>

<ul>
<li>ブロックチェーンの採掘についての理論と実装について。自分はこうしてます。</li>
<li>ブロックチェーン関連の開発で収入を得る方法。</li>
<li>Mac App Storeで食っていけますか？</li>
<li>App Storeで上位にランキングされるということ。</li>
<li>公式に認められた副業について。誰か受注してくれませんか？</li>
</ul>

![PubHack-3.jpg](https://qiita-image-store.s3.amazonaws.com/0/12540/b99158cd-c0d5-8195-c164-a7a358ccf3ca.jpeg)

<p>次回は5月開催を予定しています！</p>

【関連情報】
<a href="https://cocoa-kanto.connpass.com/event/84473/">PubHack.swift 2018-04</a><br />
<a href="https://cocoa-kanto.connpass.com/">BUKURO.swift</a><br />
<a href="https://www.facebook.com/groups/cocoa.kanto/">Cocoa勉強会 関東</a><br />
<a href="https://mosa.connpass.com/">MOSA</a><br />
<a href="http://www.bitz.co.jp/weblog/"> Cocoa練習帳</a><br />
<a href="https://qiita.com/m_yukio>Qiita</a><br />
riot.js yahoo wether 

### geo.placesに登録されていれば世界中の地名で使える。但しendpointは米国のyahoo
```js
let yw=(place='tokyo')=>{
 let f=encodeURIComponent
 ,o={format: 'json',env: 'store://datatables.org/alltableswithkeys'
     ,q: `select astronomy.sunset from weather.forecast where woeid in (select woeid from geo.places(1) where text="${place}")`
    }
 ,q=Object.keys(o).map(d=>`${d}=${f(o[d])}`).join('&')
 ,b='https://query.yahooapis.com/v1/public/yql'
 ,url=`${b}?${q}`
 ;
 return fetch(url).then(d=>d.json())
}
```
### 全部
```html
<script src="//gnjo.github.io/riot.js"></script>
<app></app>
```
```js
;(function(root){
 var o={bells:{}}
 o.add=async function(name,caller){return o.bells[name]=caller}
 o.call=async function(name,obj){return (o.bells[name])?o.bells[name](obj):null}
 root.bell=o
})(this)
;
let yw=(place='tokyo')=>{
 let f=encodeURIComponent
 ,o={format: 'json',env: 'store://datatables.org/alltableswithkeys'
     ,q: `select astronomy.sunset from weather.forecast where woeid in (select woeid from geo.places(1) where text="${place}")`
    }
 ,q=Object.keys(o).map(d=>`${d}=${f(o[d])}`).join('&')
 ,b='https://query.yahooapis.com/v1/public/yql'
 ,url=`${b}?${q}`
 ;
 return fetch(url).then(d=>d.json())
}
bell.add('sunset',yw) //add api
;
riot.tag(
`app`
,`<input onkeyup={input} value='tokyo' style={style0}></input><pre>{result}</pre>`
,function(opts){
 let self=this
 ,f=(d=>JSON.stringify(d,null,2))
 ,f1=(d)=>{bell.call('sunset',d).then(d=>{ self.result=f(d)})}
 this.style0='outline:none'
 this.input=function(ev){ f1(ev.target.value) }
})
riot.mount('app',{})
;
```
nginx.repoから人類を救いたい

人類は一体どれだけの回数CentOSやRHELにnginxを入れてきただろうか。

そしてどれだけの回数nginx.repoの書き方を調べてきただろうか。

もうやめよう…公式が環境に対応しやすくyumの変数を使っているのにバージョンやベースアーキテクチャーを狙い撃ちして固定の数字や文字列をぶち込んで初心者を躓かせるのは…

頼む…同じような記事をQiitaに投稿しないでくれ…500件も同じ記事があるなんて車輪の再発明とかいうレベルじゃないじゃいか…

[「nginx.repo」の検索結果 - Qiita](https://qiita.com/search?utf8=%E2%9C%93&sort=&q=nginx.repo)

というわけで`nginx.repo`を**公式に則った形で**提供するAPI(笑)をGitHub Pageで公開しました。

[yoshiken/nginx.repo-api](https://github.com/yoshiken/nginx.repo-api)

今後、人類はいちいち`nginx.repo`の中身を検索して`sudo vi /etc/yum.repos.d/nginx.repo`してペーストして`:wq`する必要が無くなりました。


---
実を言うと`nginx.repo`はもうだめです。
突然こんなこと言ってごめんね。
でも本当です。

`$ sudo curl https://yoshiken.github.io/nginx.repo-api/centos.html > /etc/yum.repos.d/nginx.repo`後にものすごく
転送があります。

それが終わりの合図です。
程なく小さめの`$ sudo yum install nginx`が来るので
気をつけて。
それがやんだら、少しだけ間をおいて
`Complete!`がきます。

---
bpms processmaker 日本語化

BPMS(ビジネスプロセスマネージメントシステム）PROCESSMAKERの日本語化開始
https://www.processmaker.com/

https://chat.bpmboxes.com/bpm/bpm.php
サンプルサイトは見れるようにしておく

BPMSがなぜ必要か

■開発からみて
1,システムから状態遷移を無くし、再利用化をする為
  状態遷移はBPMSに持たせる事で、部品自体の再利用性が高まる
  *)開発としてはこれがメイン  

■業務からみて
１、時間の把握
２、開始
３、終了
４、予定
５、遅れ
６、業務の遷移
７、担当者の変更
８、業務分析　BIの為の業務時間の詳細など

　　＊）業務分析をするのには　さまざまな設定が必要
　　　　これらの要求は、業務が進むたびに高度化してくる

■双方からみて
これらを　プログラムで組むと、業務のフローの改善に柔軟に対応するというのは難しい。
＊）業務フロー、履歴など　業務に対応できる仕組みとなると非常に複雑になるため
　　業務、開発が、スムーズに連携する為に必要な物　BPMSとして外部システム化すると便利な面がある

■問題
業務と技術がそれぞれ分かった人間がいないと、使い切れず
開発を困難にする事がある。
＊）業務的見解、技術的見解　両方を備えた人材が一人必要

■今後
RPAがメインになっても、それを振り分けるBPMSの母体がないと

人とロボットに業務を振り分ける制御する部分で、いろいろと
問題が起きてくる。

ちょこちょこ　今までの問題について　かいていく。
ROS_Lesson1

#概略

ETHの授業を参考にROSの基本的な処理ができるようになることを目的とする。
学習の指針にしてください。
http://www.rsl.ethz.ch/education-students/lectures/ros.html
ROSの説明
http://potblog.hatenablog.com/entry/2018/01/08/162323


#課題１-開発環境の作成
http://wiki.ros.org/ja/ROS/Tutorials/CreatingPackage

- ワークスペースの作成
- catkin形式のパッケージを作る
- 自分のパッケージをビルドしてみる
- ターミナルでBuild Succededが出たら完了

#課題２-簡単な配信と購読をやる
http://wiki.ros.org/ja/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29

- Hello World!を配信するtalkerとlistenerを自分で作る。

ROS公式のチュートリアル通りにやれば基本的にうまく行きます。
プログラミングにおいて挨拶は基本中の基本です。挨拶ができない人はプログラマーとしては生きていけないのでしっかりできるようになりましょう。

#課題３-launchファイルを作りコマンドを操作する

http://wiki.ros.org/ja/ROS/Tutorials/UsingRqtconsoleRoslaunch

- 課題２で作ったtalkerとlistenerを起動するlaunchファイルを作る
- roslaunchというコマンドを使う
- rosnode list というコマンドを叩き、talkerとlistenrが存在することを確認する

#終わりに

ROSの基本はトピックとノードです。
これらをしっかり理解するために、わからない場合はGoogleで検索したりROS公式を参考にして自分で調べるようにしましょう。
次回はtfをやりたいと思います。余力がある人はETHのスライドを予習しましょう。

#難しいと感じた人へ

https://lab.ueda.tech/?presenpress=%E3%83%AD%E3%83%9C%E3%83%83%E3%83%88%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E5%AD%A62016%E7%AC%AC13%E5%9B%9E#/16
こちらはかなり丁寧に解説されています。こちらをやるのも良いでしょう。
電気系プログラミングガチ素人学生がC#のクラスを勉強する話　休憩話　~ 私がVSCodeを使う理由~

#そういえば、VSCodeについてタグ付けしてるけどなにも触れてないやんけ
私がVSCodeを使う理由は、

・動作が軽い（言語がほぼC#しか使わないから、また、ほかの言語も拡張できるから）
・インテリセンスがC#を使っているうえでは神機能（VSでもあるけどPCのスペックが低い）（Vimとかでも使えるらしいけど、まだ初心者だからうまく設定できない）
・コンソールアプリの作成が慣れると時間があまりかからずに作成できて、デバッグまでが簡単

の3つですね。

#追記
会社の研修での出来事で、「C#に触れるかも・・・でも、俺はMacだからなぁ・・・」流石にLinuxの方はいませんでしたが、プログラムに興味があると言うお話を聞いた時、「もしかして、需要あるのでは・・・？」と感じたので、こちらを編集しました。

## 動作が軽い
自己紹介でも書きましたが、私は「Skype勉強会」でC#の勉強会に参加しながらコーディングして、この記事を書いています。
つまり、ミドルスペックのPC（10万が6万に投げ売りされてた上、セキュリティで30%のリソースが割かれてしまうPC）では、確実に実行までこぎつけることに時間の無駄が発生します。そこで、「リソースを極限までに抑えて快適な勉強会運用を！！」と思い、エディタに手を出したのですが、いかんせん、エディタの種類が多いうえに、VIMなどの導入は初心者の私にとっては敷居が高い・・・（いずれ挑戦します）
使ってみると、なれるまでに少し時間がかかりましたが、デバッグコンソールと、コマンドのコンソールが同居したあのインターフェースが便利です。（Vimにも似たようなのがあった気がする）

##インテリセンスがC#を使っている上ではデフォルトで実装されて神機能
C#や、Javaを使う方ならわかるかもしれない、あのConsole.～などの呪文。あれをインテリセンスで候補が出てくれることで、効率が上がりますし、何より、スペルミスが少ない。それがVS、VSCodeを使う一番の理由です。むろんVimや、Emacsの拡張機能で、使えますが何分初心(ry
デフォルトでサポートしているのがC#は結構VScodeで優遇してくれます。

##コンソールアプリの作成が慣れると時間があまりかからずに作成できて、デバッグまでが簡単
これも使う上でメリットが大きい。というか長い前振りの中で一番これを伝えたかったんです。VSでは、「コンソールアプリ」選択すれば一発ですが・・・残念ながらVSCodeはちょっと一癖あります。
まず、.NETをインストールしていることと、（注意書きを消したければ、）GITを入れていることがが前提ですが、.NETはWindowsであれば、簡単にインストール完了できるかと思います。そこから、拡張機能でC#を入れましょう。（ある程度、導入の簡単さもこの方法の良さかもしれません）

# エディタとIDEの違いは？
エディタは、インストールした時には、ほぼ何も入っていません。スマホの初期状態と同じです。IDEは、プログラムの実行環境を全て設定してくれます。これらの二つの違いは、「自分で全てカスタムできる」のがエディタです。軽量で、スペックが低くても動かせますが、Macでは高速に動いてくれること請け合いでしょう。

IDEも、MacではC#は使うことができます。完全に好みの話ですが、様々な言語を使うことができるのはVSCodeの強みでしょう。言語ごとにIDEを入れる必要がなく、操作感を統一できるのはメリットの一つでしょう。

#インストールしよう
.NET
https://www.microsoft.com/net/core#windowscmd

C# for Visual Studio Code (powered by OmniSharp).
https://marketplace.visualstudio.com/items?itemName=ms-vscode.csharp

#　画面について

![image.png](https://qiita-image-store.s3.amazonaws.com/0/244181/695953a6-31d1-8f06-a5ac-eefc3f943eba.png)

こんな感じで画面が開ければ上出来です。下の部分はcommand+shift+Yで出現させることができます。
ターミナルをデフォルトで出現、隠すことを切り替えできることも、このVSCodeのよさと言えます・・・


これで準備は完了
そこから、好きなフォルダにアクセスします（Ctrl + O）

```
mkdir test（フォルダ名）
```
などのコマンドを打つことによってフォルダを作ります。
そして、その中にC#のファイルを入れたければ、

```
cd test（フォルダ名）
dotnet new console
```
のコマンドを実行しましょう。そして、

```
code .
```
このコマンドは、ctrl+shift+pでコマンドパレットを呼び出し、
"shell"といれることで、使うことができるようになります。"."を入れておくことによって、カレントディレクトリを呼び出すことができるので、便利。
https://qiita.com/dz_/items/5a6e3813cf42b8d17fbf

このコマンドを実行することで、新しいウィンドウでVSCodeが起動し、先ほど開いていた~/test/ディレクトリで開かれます。
これによって<b>デバッグのためのファイルを作成するかどうかという通知</b>が出てくるので、Yesを選択しましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/244181/b97bf7d5-5459-91b1-d00b-c271150e2a59.png)
これでデバッグ（F5キー）、実行ができるようになりました。このコマンドに慣れておくと、簡単にC#のコンソールアプリだけは高速で作り出せるので、エディタの機能全否定ですが、学習用としての機能を果たすことはおのずと可能でしょう。
ほかの言語でもデバッグを行う際は、デバッグ用のファイルを生成できるようにcode　.の実行をすればできるかと思います。（これ以外やり方を知りませんが、もしかするとほかにいい方法がある・・・？）


これを使うことで、勉強会を支えているVSCodeの実行環境が出来上がっています。ほかにも拡張機能を入れることで快適なVScodeの環境を作りたいなぁ・・と思っています。

#まとめ
・VSCodeは電気系ガチ初心者に優しい、デフォルトでインテリセンスとかC#の機能を使うことができる！
・IDEとエディタって結局どっちがいいのか戦争にまでなりそう
・Vimの勉強はしたほうがいいのかもしれない。

 不適切な内容あったら申し訳ありません！！
Raspberrypi3でドローン(Parrot)を動かす

最近お家ハックにハマってgooglehomeからTVの操作したり人感センサ設置して帰宅した際に自動で部屋の電気つけたりしていますが，ついにドローンの制御に手を出してることにしました．
　　
その内高性能なドローンが出たら洗濯機動かしたり洗濯物干したりがドローンでできるようになるんじゃないかなとか淡い期待を抱いてます．．

[Parrot ドローン Mambo FLY](https://www.amazon.co.jp/gp/product/B076SZ279F/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1)
![IMG_1191.JPG](https://qiita-image-store.s3.amazonaws.com/0/138229/d8ab81d8-2759-5d87-9443-9577f05e0e67.jpeg)
これがpythonで制御できるらしいので買ってみました．

他の記事を読むと`pymambo`というライブラリが使われているんですが，いざこいつのgithubページにいくと[pyparrot](https://github.com/amymcgovern/pyparrot)を使えと書いてあるのでこちらを使います．

んで基本的には上記github wikiの[installation](https://github.com/amymcgovern/pyparrot/wiki/Installing-pyparrot)に従って設定していけば問題ないかと思います．

まぁそれだけだと味気ないので私が躓いた所だけメモしておきます．
まず上記installationのページに従って`apt-get`を進めていけば良いのですが，

```
sudo apt-get install python-pip libglib2.0-dev
sudo pip install bluepy
sudo apt-get update
```
の2行目のところでつまずきました．盲目的にコマンドコピペしていたので`pip install`に`sudo`してしまっているのを見逃しました．`root`とかで実行しないならここ`pip install bluepy`で良くて，`sudo`いらないです．

最後に同じみ`git clone`で好きなところにライブラリ持って来ればOKです．

ライブラリ関係の設定が終わったらBLEの設定しましょう．
デバイス(ドローン)のスキャニングとか，この辺のページ参考にすればできますし
[http://www.autumn-color.com/archives/248](http://www.autumn-color.com/archives/248)
githubの[Quick start: Mambo](https://github.com/amymcgovern/pyparrot/wiki/Quick-start:-Mambo)に書いてあるようにcloneした`pyparrot`フォルダ内で`sudo python findMambo.py`と打ってやれば自分のドローンが見つかるはずです．

```
xxx@raspberrypi:~/Project/pyparrot $ sudo hcitool lescan
LE Scan ...
xx:xx:xx:xx:xx:xx (unknown)
yy:yy:yy:yy:yy:yy Mambo_612567
xx:xx:xx:xx:xx:xx (unknown)

```


これで[Quick start: Mambo](https://github.com/amymcgovern/pyparrot/wiki/Quick-start:-Mambo)に書いてあるように,

```
python examples/demoMamboTricks.py
```

で試しフライトしてみたいので`demoMamboTricks.py`のアドレス部分を自分のMamboのものに変えます．またwifiを使わない場合はそちらも設定します．

```
# you will need to change this to the address of YOUR mambo
# mamboAddr = "e0:14:d0:63:3d:d0"
mamboAddr = "yy:yy:yy:yy:yy:yy"

# make my mambo object
# remember to set True/False for the wifi depending on if you are using the wifi or the BLE to connect
# mambo = Mambo(mamboAddr, use_wifi=True)
mambo = Mambo(mamboAddr, use_wifi=False)
```

次に`python examples/demoMamboTricks.py`とやりたいところなんですがこのままだと

```
ImportError: No module named Mambo
```
とエラーが出るので`Mambo.py`が置いてあるフォルダにパスを通しましょう．
パスの通し方は現在パスが通っているフォルダを確認して,そのフォルダに`xxx.pth`というファイルを作成してその中にパスを書き込んでやればOKです．

* pathの確認

```
xxx@raspberrypi:~/Project $ python
Python 3.6.4 (default, Jan 21 2018, 22:53:16) 
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/home/xxx/.pyenv/versions/3.6.4/lib/python36.zip', '/home/xxx/.pyenv/versions/3.6.4/lib/python3.6', '/home/xxx/.pyenv/versions/3.6.4/lib/python3.6/lib-dynload', '/home/xxx/.pyenv/versions/dev_3.6.4/lib/python3.6/site-packages']
>>> 
```

`/home/xxx/.pyenv/versions/dev_3.6.4/lib/python3.6/site-packages`にパスが通っているようなのでここに適当なファイルを作ります．


```
xxx@raspberrypi:~/Project $ vim /home/xxx/.pyenv/versions/dev_3.6.4/lib/python3.6/site-packages/mymodule.pth
```
mymodule.pthに下記を追記．

```
/home/xxx/Project/pyparrot
```

これで

```
python examples/demoMamboTricks.py
```
が実行できるようになりドローンがアクロバティックな動きをしてくれるはずです．
WindowsにPython(pip, wxpython, Matplotlib)をinstallする

# Python3をWindows7にインストール。
wxpythonでWindows GUIをPythonで作成する。

### Python3 ダウンロード
https://www.python.org/downloads/windows/

Windows x86-64 executable installerをダウンロードしてダブルクリック

## pip
### ダウンロード
https://github.com/pypa/get-pip

①解凍
②コマンドプロンプトを起動
③get-pip-masterフォルダに移動
④get-pipをインストール
$ python get-pip.py

## wxpython, Matplotlib, numpy

### インストール
pipでインストールする

```terminal:pip install
$ pip install numpy
$ pip install matplotlib
$ pip install wxpython
```

### 動作確認

①サンプルのサイトに掲載されているソースをmain.pyとして保存。
②main.pyをダブルクリック。

サンプルの引用元
https://stackoverflow.com/questions/10737459/embedding-a-matplotlib-figure-inside-a-wxpython-panel

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/250215/e4637809-9868-4e6a-88e4-8bd2e716bfb1.png)
【gulp】ひとつのnode_modulesで複数のプロジェクトを管理したい！

普通にgulpをインストールするとこのようなディレクトリ構造になると思います。

```
/root
   ├ node_modules
   ├ (project)
   ├ gulpfile.js
   └ package.json
```

こうやってプロジェクトをひとつずつ管理していくとPC内のファイルが増えていってなんだかイヤですね(少なくとも僕はイヤです)。

それを少しでも解消するために、プロジェクトたちをひとつのディレクトリにまとめて、そこにgulpをインストールします。

```
/root
   ├ node_modules
   ├ (project1)
   │   └ gulpfile.js
   ├ (project2)
   │   └ gulpfile.js
   ├ ...
   └ package.json
```

こうすれば、gulpfile.jsはプロジェクトごとに必要になりますがnode_modulesが増えるのを防ぐことができます。
Raspberry Pi 2 > CPUクーラーケース (工作)

```
Raspberry Pi 2 Model B (以下RPi)
Raspbian Jessie
Python 2.7.9
```

3年間毎日RPiを使用している方にCPUクーラーの使用を推奨された。

物色した結果、近場にCPUクーラーケースが販売されていなかったので作った。

### 材料

- A. DCファンモータ: 1,030円 @ 千石電商
    - SICOH 5V 25角 F2510AP-05VCW
        - 5V, 0.12A以下: [[web](http://www.aska-elt.jp/products/?id=1296191191-772681&ca...)], [[PDF](http://www.aska-elt.jp/products/up_img/1296191191-779653.pdf)]
- B. ケース: 650円 @ 千石電商
    - Seeed Studio Raspberry Pi B+/2用
        - ロゴ無し、ブラック
        - [[link](https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-4PHN)] 
- C. ビスとナット M2x15 100円 @ コーナン
    - CPUファンの固定に使用
    - なべ小ねじ YAHATA 鉄 E1225-0853757
- D. ピンヘッダ: 3P (40Pから使用) 35円

合計: 1,815円

在庫切れのCPUクーラー付きケースは1,200円だった。送料込みでもそちらの方が安い?

### 工具

- Makita: TD111D
    - インパクトドライバ
- 六角軸ステンレス用ドリルセット: 2.0mm使用

### 加工

#### ケース加工 (DCファンモーター取付け穴)
ケース（材料B)のCPU対応部分に、DCファンモーターの取り付け穴に対応した４つの穴を開ける。2.0mmドリルビット使用。
4つの穴位置が正確でないとDCファンモーターのビスが取り付けできない。
正確に開けられなかったため、２箇所は2.5mmと3.0mmのドリルで穴をあけ、ビスが通るように調整した。

### ケース加工 (吸気窓)
４つのビス穴位置の内部にクーラーの吸気窓を作る。穴の大きさは任意。
2.0mmドリルで2.5mm間隔に穴を開ける（４角形）。次に、開けた穴にドリルを通して、ドリルを回転させながら横に動かして穴を連結させる。４方を連結させて吸気窓ができる。

**正しい加工方法は別途、他の資料で参照してください。**

### DCファンモーター端子

使用中のRPiはブレッドボード用ケーブルの接続などするため、40ピンソケット２つを接続したコネクタにてピンのオスメス変換をしている。
( [RPi > Link > GPIOオスメス変換 > 40ピンソケット2つ使用](https://qiita.com/7of9/items/ef7007748b112050555c) )

このコネクタがあるため、DCファンモーターの電源はオス型にすることになる。

DCファンモーターのRedにプラス、Greenにマイナスが来るように[3P ピンヘッダ](http://akizukidenshi.com/catalog/g/gC-00167/)をハンダ付けする。
( ケーブルの色とプラスマイナス対応は http://www.aska-elt.jp/products/up_img/1296191191-779653.pdf を参照)

| RPi GPIO | 役割 | ピンヘッダ |
|:-:|:-:|:-:|
| 2 | 5V PWR | NC |
| 4 | 5V PWR | 2番目 |
| 6 | GND | 3番目 |

### 完成

DCファンモーターのみ接続
DCファンモーターの電源はケース内部でなく、オスメス変換コネクタの上部に接続 (カメラ用穴をケーブルが通る)。
![DSC_0329.JPG](https://qiita-image-store.s3.amazonaws.com/0/32870/d055b4b9-e5fa-c4b7-824e-c2938d454e4c.jpeg)

IPアドレス表示LED基板およびリセットボタン基板付き
２枚の基板と干渉せずに使用できる。
![DSC_0331.JPG](https://qiita-image-store.s3.amazonaws.com/0/32870/a546e6df-8fa6-aa6f-560b-63adadbe4348.jpeg)

### 温度

@ 21:07 (JST)

DCファンモーター未接続

```shell-session
$ cat /sys/class/thermal/thermal_zone0/temp 
37932
```

DCファンモーター接続

```shell-session
$ cat /sys/class/thermal/thermal_zone0/temp 
34704
```

夏に本領を発揮するだろう。
Visual Studio2012の使い方

#1.新しいプロジェクトの作成方法
![01.png](https://qiita-image-store.s3.amazonaws.com/0/249279/cec74b6d-73b8-e444-8c43-880fed2d67e9.png)
赤線を引いているバーの中にあるファイルをクリックしたら、いろんな項目が出てきますが一番上の新規作成をクリックしましょう。クリックしたら、横に項目が出てくるんでプロジェクト（一番上のやつ）をクリック
そうすると、こんな画面が出てくるはず！↓
![02.png](https://qiita-image-store.s3.amazonaws.com/0/249279/d0d9f599-2851-045c-eb3b-072063d380d5.png)
出てきたら、テンプレートから自分が使いたいプロジェクトを選択しよう！
選択したら、プロジェクトの名前を変更したり保存する場所の変更などを行いOKボタンを押すとプロジェクトが作成されるから、あとは頑張ってプログラムを組んでいこう！
┗(｀・ω・´)┛ﾌﾝﾇｯ!
*保存する場所は、自分がアクセスしやすい場所にしよう！
　デフォルトでやらないほうがいいと思う（　･`ー･´）
#2.ツールボックス
![03.png](https://qiita-image-store.s3.amazonaws.com/0/249279/02b1ce99-10dd-b1c2-340c-09ca889d92b9.png)
ツールボックスは、赤線を引いているバーの表示の中にあります。
その中にあるツールボックス（青線を引いてるやつ）を押すと………
↓
↓
↓
↓
↓
↓
![04.png](https://qiita-image-store.s3.amazonaws.com/0/249279/82f747b6-f2bf-10bb-522d-1d40581c7aa4.png)
縦長のやつ（ツールボックス）が出てきた！
タイトルバーをドラッグすれば好きな位置に移動できるんでお好みの位置にどうぞ＾～

ツールボックスのコントロールをウィンドウに配置したい場合は、配置したいコントロールを選択してウィンドウをクリックすれば配置されているはずです、はず…
*位置の変更やサイズを変更できるよー
###最後に…
他の同期に比べ遅れているのでこの1年間がんばります！⊂(‘ω’⊂ )))Σ≡=─༄༅༄༅༄༅༄༅༄༅