OmniAICreator/Qiita-1.07M huggingface dataset:
文系非エンジニアチームがPythonでデータ分析～環境構築編

# いきさつ
データ解析コンペティション
http://jasmac-j.jimdo.com/%E3%83%87%E3%83%BC%E3%82%BF%E8%A7%A3%E6%9E%90%E3%82%B3%E3%83%B3%E3%83%9A%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3/

これに大学のゼミから有志メンバー（6名）で参加する事になりました。
取り組むテーマは「ID付POSデータの分析」です。

私たちは経営学部所属でエンジニアではありません（私もフロントエンドしか知りません）。しかしビッグデータ分析に興味があります。そして、**「（何がどう良いのか知らないが流行っているらしいので）Pythonを勉強したい！」**というメンバーが多く、Pythonを使ってデータ分析の学習を始めることにしました。

そこでまずは学習環境を整えるため色々と調査しましたが、これは**「私たちのような文系の人間にPythonを教える側の人」に有益な情報かも**と思って、私たちの学習環境をまとめてみました。


# 学習環境構築
1. チームで学習するためのツール
2. 統計学を学習するためのツール
3. Pythonのインストール

### 1. チームで学習するためのツール

HackMD
https://hackmd.io/

- メモ、ノートアプリ
- webアプリ（無料）
- ログイン（サインイン）しなくてもメンバーで同時編集できる
- マークダウンで書ける
- google drive に保存できる

**効率良く学習するためにはメンバー全員で知識を共有することが必要**だと考えています（経営学部の学生は「効率良く」という事が大好きです）。なんらかのノート共有ツールが必要です。
google document、one note、などもありますが、pythonのコードをメモしようと思うと、マークダウンで書けたほうが簡単にきれいに仕上がります。同時編集するためには、<u>管理者が作ったノートのurlを教えるだけでいいので、私たちでも運用できそうです。</u>


### 2. 統計学を学習するためのツール
ほとんどのメンバーが、

- エクセルで回帰分析くらいならできる
- エクセルの操作なら出来る
 
という感じなので、**「エクセルで先に分析手法を学習してから、pythonで同じことをやる」**というのがよさそうだと思いました。

EXCELビジネス統計分析
http://www.shoeisha.co.jp/book/detail/9784798133836

**エクセルでクラスター分析などができるアドインがついてくる**ので、これがいいなと思いました（別の授業の教科書です）。

### 3. Python

私たちにはPythonをインストールするだけも大変です。ターミナルからとか、pathを通すとか無理です。とりあえず学習段階では、Spyderと有名なライブラリが使えればよさそうです。インストーラー形式で簡単にインストールできるものを使いたいと思います。

Mac win 両対応なのは

- Anaconda  
https://www.continuum.io/downloads

windowsのみなら

- python(x,y)  
http://python-xy.github.io/downloads.html  


## まとめ
とりあえずこれで学習を始める準備ができたと思います。
*Pythonの教科書はまだ悩み中です。
iOSDCを、隅から隅まで堪能してきました

8/20(土)に東京で行われたiOSに関する大規模カンファレンス、iOSDC Japan 2016 に参加してきました。
https://iosdc.jp/2016/

どんな発表だったかは、こちらの記事が網羅的かつ簡潔です。
http://qiita.com/tattn/items/31601414433df538db63

ここでは、自分が感じたことを中心にまとめます。


## なぜ参加したか？
参加した理由は主に3つあります。
①開発のトレンドや最新の技術を追いたかった
常にアンテナを張っていれば最新動向を追えますが、普段iOS系ばかりやっているわけではなく、自分の中の情報が古くなっていたりするので、参加することで無理矢理にでも情報をアップデートしたいという思いがありました。
結果としては、知らない技術や名前だけは知っているけど中身はあまり知らない技術について知見を得ることができました。

②開発者と繋がりたい
最近はあまり外の勉強会に参加していないので、社外の開発者と繋がりが希薄でした。一人でも多くの方と繋がり、今後情報交換や何か面白いことができればいいなあと思っていました。唯一存じ上げる、ブログでの情報で何度も助けられた、[@shu223](https://twitter.com/shu223 "@shu223")  さんとお話しすることができました。

③お祭りの興奮を現地で味わいたい
国内では初めての大規模iOSカンファレンスということで、そもそもがきっと面白いんだろうなと思っていました。ストリーミングで見ることができるとはいえ、やはり現地に行ってその場の体験をすることに意味があると思い、福岡の地からやってきました。


## 気になったセッション

### Handling rich text in Swift
[@k_katsumi](https://twitter.com/k_katsumi "@k_katsumi") さんによる発表。UILabel x ヒラギノフォントでは、Descent分途切れて表示されちゃうので、工夫しないといけない話でした。
これは去年やった案件で直面した問題で、Descentという単語も意識せず、途切れる分を何とか強引に計算して表示させた記憶がありました。ただ、ちゃんと不足分を計算すればそこまで厄介な問題ではないことがわかりました。

### RxSwiftは開発をどう変えたか?
[@_ishkawa](https://twitter.com/_ishkawa "@_ishkawa") さんによる発表。Rx~~という言葉は知っていましたが、それをデモを踏まえてやっていただいたので、とてもわかりやすく理解できました。従来の書き方とコード量は変わらないか増えるかもしれないとのことでしたが、今後使ってみたいと思います。


### 東急ハンズのPOSから学んだ、業務iOSアプリの向き合い方
ハンズラボさんによる発表。全セッションの中では数少ない、実際の業務に関係のある発表でした。wifiだと接続が割と多く切れ、処理が完了できない問題に有線で対応したというのは、持ち運べることと処理が止まらないようにすることとのトレードオフで、大変苦労されたんだろうなと感じました。
余談ですが、懇親会でお話しさせていただいた、発表者の黒岩さんが24歳だったことにびっくり！


その他にも、いかにVR酔いを起こさず、かつ処理も重くならないようにするかという発表や、WebRTCを使ったリモート操作、また、セッションの中では少し異色の、33歳中堅という立場におけるキャリアパスについての話など、バラエティに富んだ内容が多く、学ぶことが多かったです。


## スピーカーだけの懇親会にしれっと潜入
当日は泊まりで、夜はとくに予定もなかったため本チャンの懇親会の最後の最後まで居座っていたら、流れで二次会に参加させてもらいました。
皆さんお酒に強く、あまり飲まない泡盛も飲んでかなり酔っていたのであまり覚えていませんが、とても楽しい時間でした。みなさんポケモンGOをやっていたので、レベル3の自分も久しぶりにアプリを立ち上げ、福岡では見なかったポケモンの捕獲と、モンスターボールのカーブの投げ方を習いました。カーブ、難しいです。


## さいごに
いち参加者がいうのもおこがましいですが、運営が大変素晴らしかったです。相当事前準備をされたんだと思いますが、その分いろいろ大変だったことでしょう。来年の開催もぜひ参加したいと思います。いろいろとお話しさせていただいた [@sassymanyuichi](https://twitter.com/sassymanyuichi "@sassymanyuichi") さん、ありがとうございました。


### 2016/08/25 追記
19日の前夜祭には参加していないので、隅からは堪能してない。。。
社内発表3

__LT第二弾__
__■関数型プログラミングについて__
前にLT第一弾で、尖がった書き方と言いました。
例をあげたいと思います。

もう、ある意味、普通の話になってしまった感がありますが
関数型プログラミングについて、話したいと思います。

(新人の人は、分からない単語がたくさん出ると思いますが
 そんなものがあるんだと思って細かいことは気にしないでください
 そして余力があれば、クグったり質問したりしてみて調べてください)

唐突ですが、関数型プログラミングで有利な点
(a)並列/並行処理に強い。
(b)構文解析器が簡単に書ける仕組みがある。(parsec)
(c)プロパティベースのテストコードがあること
   数学に乗るので、静的型チェックや、証明や検証に乗りやすい。

(d)数式の様な記述になるので、簡潔でコンパクトにロジックが書け
　バグが少なくなることが期待できる。

***

__(a)並列/並行処理に強い。__
一昔前の話になってしまいますが、cpuのコアがマルチコアに
なっていった頃に、コンピュータ雑誌でよく、
「マルチコアの性能を使い切るには、プログラムで専用の書き方を
しなければならない。」と書かれていました。

その当時は、具体的になにを指すのか分からなかったのですが
関数型で副作用を局所化する書き方が
その答えだと最近気付きました。
(科学技術計算をする人の様な特殊なものは、また別の話になります。)

例えば、hadoopのmap/reduceのmapやreduceは
関数型由来のもので関数型言語で標準装備されるものです。

また、並列分散処理フレームワークのsparkは
scalaのアクターを使用したakkaというライブラリを使用しています。
scalaは、関数型言語で、akkaも関数型の流儀に従って作成されています。
さらにsparkのRDDに装備されているAPIも
関数型で良くある流儀のものが使用されています。

http://www.task-notes.com/entry/20160112/1452525344
http://qiita.com/sotetsuk/items/6e4e2953799078fd6027

sparkの元ネタになった、ヨーロッパの電話交換機用の言語Erlangも1985から
ヨーロッパではエリクソンで実際に使用されてきた言語です。

また、R言語も、一応関数型言語です。
(なので、基本的にforなどのループは使用しないでください。遅いです。
 インデックスを指定して一括更新したり(古い方法)、ライブラリのdplyrを使用してください。)

また、トランザクショナルメモリの第一人者となった
サイモンペイトンジョーンズ氏は、初めJAVAの人の
トランザクショナルメモリの講演を聞いて
「これなら関数型言語のHASKELならば、簡単に実現できると思い
試したらカンタンにできた。」の様な旨のことを言っていました。
それから、デファクトとなる様なAPI群を作り、発表したので
「トランザクショナルメモリの第一人者、みたいに言われる様に
なったが、自分がすごいのではなく
HASKELLがこの問題に適合していたからだ。」
とインタビューに答えていました。

***

つまり、要約すると、関数型プログラミングは
並列/並行処理に強いのです。

***

__なぜ、並列/並行処理いのか ?__

端的に言うと次のことが挙げられます。
・イミュータブルなどで、副作用を局所化することを
　推奨していることで、分散処理される単位で
　共有メモリを複数のスレッドから更新することが無くなること
・制御構造が、原始的な、逐次・分岐・反復ではなく
 　map、reduce、filterなどの高階関数群が使用できることで
 　コンパイラが解釈して処理を分散して振り分けることが
 　可能となること

　C# やるなら LINQ を使おう
　http://yohshiy.blog.fc2.com/blog-entry-274.html

***

マルチスレッド、トランザクション処理、並列/並行処理は
一般にプログラム難易度が高いと言われています。
下の書籍では、達人にインタビューしたものですが
「プログラミングで難しいこと?」という問いに
上記の様な分散処理を上げる人がだいたい7割くらいいました。

つまり、これまでの方法論では、本質的に難しいのです。

Coders at Work プログラミングの技をめぐる探求
https://www.amazon.co.jp/Coders-Work-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E6%8A%80%E3%82%92%E3%82%81%E3%81%90%E3%82%8B%E6%8E%A2%E6%B1%82-Peter-Seibel/dp/4274068471



察するに、並列/並行処理で、共有メモリを持つ方式では
複数のスレッドで共有メモリを更新するので再現性が
不確実なバグが発生します。

コードの規模が大きくなると、デバッグは中々骨の折れる
作業になるし、テストで完璧に叩くというのも
現実的ではありません。
(組合せの数は簡単に発散します。)

そこで、共有メモリを持たない様に、イミュータブルなどで
副作用を局所化して、複数に分割して並行に走らせる処理では
外部のメモリを共有しない様にする実装が正解となるのです。

初心者のみなさん、無駄に難しいことをして
荒修行をしなくても良いのですよ。
先人の知恵は、パクりましょう。

蛇足
このことから、mapやreduceなどに渡す処理関数は
副作用を持たない様にするべきです。

C#のLINQを使用した写像(map)フィルター(filter)並び替え
(sort)畳み込み(fold)でも同じで、各関数で行う処理は
副作用を持たない様にするべきです。
mapの中でDBを更新したり、ファイルを書換えたりするのは
通常の書き方ではありません。

map等の関数を使用して、データを完成形にしてから、その結果を元に
それぞれで、DBを更新したり、ファイルを書換えたりするのです。

因みに、JAVAでもJAVA8から、この様な高階関数が使える様に
なりました。
これらを使うと、マルチコアを使うプログラミングが、特殊な指定なしに
楽に書けます。

***

(b)(c)については、マニアックに成り、時間もかかるので省略。
(d)も主観だといわれれば、細かい論証に時間がかかるので省略。

***

__まとめ__
並列/並行処理関係のフレームワークなどは
関数型プログラミングの流儀で書くことが多いと思います。

なので、並列/並行処理をするときは、関数型プログラミングの基礎も
学んでみると良いと思います。


__以上、発表終わり__
ちょっとしたメモ　CoreDataでIN句を使いたい場合


### テーブルレイアウト
Entity : Event

| 名称        | 属性        | 
|:-----------|:------------|
| weight     | Double      |
| timeStamp  | Date        |




```
	let context : NSManagedObjectContext = NSFetchedResultsController.fetchController.managedObjectContext
	let timeList = [NSDate, NSDate, NSDate] // INで問い合わせたい項目の属性の配列を用意（これは適当な例）
    let predicate = NSPredicate(format: "timeStamp IN %@", timeList)
    let sortDescriptor = NSSortDescriptor(key: "timeStamp", ascending: true)
    
    let request = NSFetchRequest(entityName: "Event")
    request.returnsObjectsAsFaults = false
    request.predicate = predicate
    request.sortDescriptors = [sortDescriptor]
    request.propertiesToFetch = ["weight"]
    request.resultType = .DictionaryResultType
    let list = try context.executeFetchRequest(request)
```


- 外部結合をしたい場合がまだよく分からない

やはりCoreDataは使いづらいので外部ライブラリーを使った方が楽なのか。それとも複雑な組み合わせをそもそもiPhoneアプリで実行するなというAppleからのメッセージなのか
「ionic2」まとめ連載（其の９・公開サンプルを動かす）

#公開サンプルを動かす

こんにちは、mucunです。

今回は、公開されている「ionic2」サンプル実行方法を紹介します。
公開サンプルをゲットするには、GitHubがとても良いです。
フォルダ構成ごとゲットできるので、非常に容易く実行できます。

それにしましても、フリーでモジュールを公開して下さっている方々、
皆様は本当にエンジニアの鏡です。
この場をお借りして、御礼を言わせて頂きます。
ありがとうございます。

それでは、実行の仕方を説明していきます。
先ず、サンプルを検索します。
「GitHub ionic2 sample」等で検索すると、すぐに見つかるでしょう。
目的によって、検索ワードを変えると良いかと思います。

Googleで検索した結果、私の場合はこんな結果が返ってきました。
<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/cb3b5ed6-cd0c-99ac-1edc-39e27dbbc0d7.png">

ここで、タイトルに「GitHub」と付いているもの。
アドレスが、「https\://github.com/・・・」であるものが、
サンプル取得対象となります。
今回は、一番上の「[GitHub - driftyco/ionic-conference-app: A conference app built...](https://github.com/driftyco/ionic-conference-app)」を
開かせていただこうと思います。
<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/3d1dc9ee-44bf-4b19-ed27-0039a7d529be.png">

これが、GitHubページのレイアウトです。
そのサンプルでも一律このレイアウトになります。
そして、ページ右上部に、「Clone or download」というボタンがあるので、
それを押下します。
<img width="390" src="https://qiita-image-store.s3.amazonaws.com/0/126499/7667007a-9978-021a-b8fb-e4c9e1092b0b.png">

すると、上記メニューが現れますので、「Download ZIP」を選択します。
ダウンロードが完了したら、ZIPファイルを解凍し、
中のフォルダを任意の場所にコピーします。
<img width="500" src="https://qiita-image-store.s3.amazonaws.com/0/126499/600c625f-df5a-ce94-f143-b877424f4688.png">

コマンドプロンプトを開き、コピーしたフォルダの中まで「cd」します。
そして、フォルダの中がカレントの状態で、「npm install」を実行します。
「npm install」は、フォルダ内の「package.json」内容による指定に従い、
実行に必要なファイルのダウンロード等を行うコマンドとなります。
<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/21c70073-bd43-38cf-5032-c5e64156b144.png">

もし、ここで「npm install」にて、エラーが出てしまうと、
後続の作業が上手くいかないことがあります。
最初に疑うべき原因は主に以下の２つです。
　① GitHubのサンプルが不完全か、自分の環境には適していない
　② NodeJSや、npmのバージョンとの相性が悪い
以上。
①の場合は、他のサンプルを探した方が良いと思います。
原因分析に時間をかけ、結局手に負えないような場合、時間が無駄になってしまいます。
②の場合は、公式ページ推奨の安定バージョンでない可能性があります。
安定バージョンのインストール方法は、私の前の記事（[其の３](http://qiita.com/mucunwuxian/items/fb95e0aa8e673717286f)）を参照ください。

「npm install」が終わったら、次に「ionic serve」コマンドを実行します。
するとサンプルが実行されます。
<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/11812c87-ee63-f28c-cdfc-8f2cb3562871.png">

<img width="600" src="https://qiita-image-store.s3.amazonaws.com/0/126499/1154198c-8112-e699-4d2f-d382afa97eb7.png">

以上が、公開サンプルの実施方法になります。
どうですか？
スゴく簡単に出来ると思いませんか？

今回の記事はここまでとなります。
読んで下さった方、ありがとうございます。('◇')ゞ

[👈【其の８・「ionic serve --lab」で、エミュレーターっぽく動かす】](http://qiita.com/mucunwuxian/items/617ba35aaf2e66960978)　　[👉【其の１０・静的なページ内容を変更する】](http://qiita.com/mucunwuxian/items/46ba24a0e0e5918eda74)
【12ステップで作る 組込みOS自作入門】④2ndステップ：シリアル・デバイス・ドライバメモ

## 仕組み
- CPUのメモリ空間上に周辺機器のコントローラを制御するレジスタがマッピングされる
- H8/3069Fのシリアルコントローラ(SCI)のレジスタのマッピングはマニュアル表13.2（以下）の通り。
- H8/3069FのシリアルコネクタにはSCI1が接続されているため、SCI1を操作することでシリアル経由での入出力を行える。

![ScreenClip.png](https://qiita-image-store.s3.amazonaws.com/0/50690/f609c3fe-24cb-80f8-cf92-00dd2b291987.png)

以下より抜粋
http://akizukidenshi.com/download/ds/hitachi/hd64f3069te.pdf

## コード（抜粋）

SCIの定義

```c:serial.c
#define H8_3069F_SCI0 ((volatile struct h8_3069f_sci *)0xffffb0)
#define H8_3069F_SCI1 ((volatile struct h8_3069f_sci *)0xffffb8)
#define H8_3069F_SCI2 ((volatile struct h8_3069f_sci *)0xffffc0)
```

ライブラリ関数

```c:lib.c
int putc(unsigned char c)
{
  if (c == '\n')
    serial_send_byte(SERIAL_DEFAULT_DEVICE, '\r');
  return serial_send_byte(SERIAL_DEFAULT_DEVICE, c);
}
```


## 元の本

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4877832394/kuredev-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51HYm-LUi3L._SL160_.jpg" alt="12ステップで作る組込みOS自作入門" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4877832394/kuredev-22/ref=nosim/" name="amazletlink" target="_blank">12ステップで作る組込みOS自作入門</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/" title="amazlet" target="_blank">amazlet</a> at 16.08.21</div></div><div class="amazlet-detail">坂井 弘亮 <br />カットシステム <br />売り上げランキング: 38,961<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4877832394/kuredev-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>

## 参考サイト

コンピュータの基礎の基礎 - Part1　メモリー空間とは何か：ITpro http://itpro.nikkeibp.co.jp/article/lecture/20070824/280260/?rt=nocnt
RailsでのServiceの使い方2


#Implement in Controller

```:bash
vi app/controllers/bank_accounts_controller.rb
```

```ruby:bank_accounts_controller.rb 
def transfer_money
  from = BankAccount.find 1
  to = BankAccount.find 2
  BankAccount.transaction do
    to.money += from.money
    from.money = 0
    from.save!
    to.save!
  end

  render text: 'success'
end
```
#Implement in Model

```bash
vi app/controllers/bank_accounts_controller.rb
```

```ruby:bank_accounts_controller.rb 
def transfer_money
  BankAccount.transfer_money(1, 2)
  
  render text: 'success'
end
```

```:bash
vi app/models/bank_account.rb
```

```ruby:app/models/bank_account.rb
class BankAccount < ActiveRecord::Base
  class << self
    def transfer_money(f, t)
      from = BankAccount.find f
      to = BankAccount.find t
      self.transaction do
        to.money += from.money
        from.money = 0
        from.save!
        to.save!
      end
    end
  end
end
```
#Implement in Service

```:bash
mkdir app/services
```

```:bash
vi config/application.rb 
```

Add this line.
It might not need it.
You can check like this.

```:irb
puts ActiveSupport::Dependencies.autoload_paths
```

```ruby:application.rb 
config.autoload_paths += %W(#{config.root}/app/services)
```

restart rails

```:bash
rails s -b 0.0.0.0
```


```:bash
vi app/services/bank_account_transfer_service.rb
```

```ruby:bank_account_transfer_service.rb
class BankAccountTransferService
  def initialize(f, t)
    @from = BankAccount.find f
    @to = BankAccount.find t
  end

  def transfer_money
    BankAccount.transaction do
      @to.money += @from.money
      @from.money = 0
      @from.save!
      @to.save!
    end
  end
end
```

```:bash
vi app/controllers/bank_accounts_controller.rb
```

```ruby:bank_accounts_controller.rb 
def transfer_money
  bat_service = BankAccountTransferService.new(1,2)
  bat_service.transfer_money
    
  render text: 'success'
end
```
RailsでのServiceの使い方1


Railsのinstall方法はこちらを参照して下さい。
http://qiita.com/joji/items/0dd0e4a113b65b4c9c09

```bash
rails new service_test -d mysql
```

```bash
cd service_test
```

```bash
vi Gemfile
```

Comment in

```Gemfile
gem 'therubyracer', platforms: :ruby
```

```bash
bundle install
```

```bash
rake db:create
```

```bash
rails g scaffold BankAccount money:integer
```

```bash
rake db:migrate
```

Start rails and create data from browser

```
rails s -b 0.0.0.0
```

![スクリーンショット 2016-08-24 23.09.18.png](https://qiita-image-store.s3.amazonaws.com/0/39073/9860402f-aeb4-9aad-8ac7-276a9a2bbf9e.png "スクリーンショット 2016-08-24 23.09.18.png")


There are 2 data now.
We wanna transfer money and create 2 data using transaction.
So we will create new method and routes

```bash
vi config/routes.rb
```

Add new routes

```config/routes.rb
get 'transfer_money' => 'bank_accounts#transfer_money'
```

```bash
vi app/controllers/bank_accounts_controller.rb 
```

check routes

```bank_accounts_controller.rb 
def transfer_money
  render text: "hello"
end
```

![スクリーンショット 2016-08-24 23.19.23.png](https://qiita-image-store.s3.amazonaws.com/0/39073/8acccf34-94fe-c3f1-78a4-066ed85e647b.png "スクリーンショット 2016-08-24 23.19.23.png")

##Quiz
Please implement logic that We will transfer money and create 2 data using transaction.

current data is 200 and 100.
One should be 0 and the other should be 300.
RPGツクールMVプラグイン　サブタイトル

安くなってたので買ってみました。
プラグインがjsで書けるということでいろいろプラグインを書いてまとめておこうと思います。
早速練習がてらサブタイトルを表示するプラグインを書いてみました。
![サブタイトル.png](https://qiita-image-store.s3.amazonaws.com/0/138391/5f364a60-47f9-2c8c-16be-f95913e8bc2c.png)

```
/*:ja
 * メモ: イメージはimg／systemフォルダ内に保存されます。
 *
 * @plugindesc サブタイトルを表示します。
 * @author Korokoro
 *
 * @help  このプラグインにはプラグインコマンドはありません。
 *
 * @param SubTitle
 * @desc サブタイトル
 * @default 〜サブタイトル〜
 *
 * @param OffsetX
 * @desc オフセットX
 * @default 0
 *
 * @param OffsetY
 * @desc オフセットY
 * @default 50
 *
 * @param FontSize
 * @desc フォントサイズ
 * @default 36
 *
 */

var Korokoro = Korokoro || {};
Korokoro.SubTitle = {};
Korokoro.SubTitle.Parameters = PluginManager.parameters('SubTitle');

Korokoro.SubTitle.SubTitle = String(Korokoro.SubTitle.Parameters["SubTitle"]);
Korokoro.SubTitle.OffsetX = Number(Korokoro.SubTitle.Parameters["OffsetX"]) || 0;
Korokoro.SubTitle.OffsetY = Number(Korokoro.SubTitle.Parameters["OffsetY"]) || 50;
Korokoro.SubTitle.FontSize = Number(Korokoro.SubTitle.Parameters["FontSize"]) || 36;

(function() {
	var drawGameTitle = Scene_Title.prototype.drawGameTitle;
	Scene_Title.prototype.drawGameTitle = function() {
		drawGameTitle.call(this);

		var x = 20;
	    var y = Graphics.height / 4 + Korokoro.SubTitle.OffsetY;
	    var maxWidth = Graphics.width - x * 2;
	    var text = Korokoro.SubTitle.SubTitle;
	    this._gameTitleSprite.bitmap.outlineColor = 'black';
	    this._gameTitleSprite.bitmap.outlineWidth = 8;
	    this._gameTitleSprite.bitmap.fontSize = Korokoro.SubTitle.FontSize;
	    this._gameTitleSprite.bitmap.drawText(text, x + Korokoro.SubTitle.OffsetX, y, maxWidth + Korokoro.SubTitle.OffsetX, 48, 'center');
	};
})();
```

デフォルトで入っていたMadeWithMv.jsを改変してみたところ想像以上に簡単に書けました。
基本的にこんな感じでprototypeで既存関数を上書きするのかな。
jsフォルダを見れば全部中身が分かるようなのでなんでもできそう。
改めてJavaScriptが最強なプログラミング言語だと思う訳

最近JavaScript好きすぎて
全てJavaScriptで完結すればいいのにと思う今日この頃です。（２０１６現在）
他のプログラミング言語にもいいところとか特化してて素晴らしいところもあり、
否定したいわけではないのであしからず。
(もっとJavaScript信者増えればそうゆう方向にならないかなと期待してみたり・・・)
ちなみに言語仕様の話がしたいわけではないです。

# 様々なプラットフォームで使える
いわずと知れたブラウザ唯一のフロントエンド言語
（DOM操作やCSSの動的変更やらWebGLやら果てはデバイス連動まで）
最近はNodeJSでのサーバサイドでの使用やElectronでのWindows,MacOSアプリ作成まで
幅広くできるのが特徴です。
特に開発のしやすさも段違いに良いのが特徴です。

* フロントエンド（ブラウザさえあれば開発できる。デバッガーもブラウザにあるし）
* サーバサイド（NodeJSはOS問わず簡単にインストールできる、特に付属パッケージ管理ソフトであるnpmが素晴らしい）
* ネイティブアプリ化（Electronを使えば.exeや.appのバイナリ実行形式にパッケージできる）
* スマホネイティブ（WebView経由で呼ぼうと思えば呼べる、React NativeやTitaniumでネイティブアプリ変換も・・・）
* クラウドでたぶん一番採用されてる言語（AWS、Azure、IBM Bluemix、Heroku、Cloud9）
* IoTでも使えるよ（Raspberry pi、ArduinoでJohnny-FiveとかGroove Kitとか）
* 豊富なライブラリ、サンプルコード、情報量
* 割と習得しやすい（~~prototypeチェーンとか闇をしらなければ~~）

最近はJavaより使える幅広くね？と思ったり、
後、~~Swiftみたいな発展途上で過去を切り捨てる言語と違って~~
言語仕様の変化が急激すぎたりしなく、
OSに引っ張られないためソフトウェア耐久年数もましだったり（フロントエンドのブラウザ互換はしんどいが、[Can I use](http://caniuse.com/)もあるし~~IE6も消えたから~~少しましになった）

# JavaScriptの亜種
完全に同じものではないけど
独自APIがつかえる拡張がある(非互換)

* Google App Script（スプレッドシートとかのAPI）
* Unity Script（UnityもJavaScriptぽく書けちゃうよ）
* JScript(Windowsの.Net APIとか呼べちゃうWindows専用すくりぷと)

# JavaScriptの限界
やはりセキュリティ的な観点で制限が・・・

* フロントエンドからの通信はCORSの制限があったり（これは仕方ないのであきらめてNodeJSから呼ぶ）
* OSのネイティブAPIが直接呼べなかったり~~（ファイル操作はできるし、コマンドはたたけるけど・・・）~~
* スマホネイティブの機能の一部が直接使えなかったり（Bluetoothだったり、バックグラウンド状態での位置情報取得だったり、スマホネイティブの画面遷移アニメーション）

とはいいつつも、ジャイロセンサーやらカメラやらほとんどのデバイス機能もJavaScriptで取得できちゃったり、そうゆう傾向にあったりします。（WebRTCやらWebGLやらWebVRやら）
どうしても使いたいというネイティブの機能だけネイティブアプリで実装すればよいのではないかと思ったりします。（React Nativeで変換する手もある）

# 根強い対抗勢力

* C/C++(いろんな言語のご先祖様、カーネルとか組み込み系とかネイティブコア部分で活躍)
* Java(Android,VMあればいろんなとこで動く)
* Objective-C,Swift(iOS,OSX)
* C#(~~Javaのぱくr~~.Net,Unity)
* Ruby,PHP(サーバサイド)
* Python(機械学習系)

JavaScriptで潰しが効かない、C/C++、Android Java、Objective-C、Pythonは勉強する価値あるかも

# いろんな環境で使ってみた
[JavaScriptでWrite once, run anywhere](http://qiita.com/teradonburi/items/a49967c9e67cbcced6f2)
GitHub:https://github.com/teradonburi/bridge
Windows 10のライフサイクルを調べた

Windows 10 Pro/Entの企業向けの話です。Windows 8.1までのライフサイクルと異なるため調べました。

Windows 10 を企業で導入する場合は、Windows as a Service（WaaS）を理解しなければなりません。Windows 7 の移行が全社プロジェクトになるような企業は要注意です。

Windows 10 は従来のSP（サービスパック）に相当するOSビルドバージョンが存在します。例えば、2015年7月にリリースしたビルドは、1507と呼ばれます。 現在、1507、1511、1607のビルドバージョンが存在します。

Windows 10 は Windows Update の時期を遅れせることができます。こちらは、Windows 10のサービスモデルに従います。このほかにも、より最新の機能を利用したい開発者向けの Insider Program をリリースしています。

Windows 10 のサービスモデル
■ CB（Current Branch）
コンシューマー向け
ライフタイムサイクルの最短 4ヶ月
CBBリリース後に、CBBと置き換えて公開終了
■ CBB（Current Branch Business）
ビジネス向け
ライフサイクルの最短8ヶ月
次の次のビルドのCBBがリリースしたらサポート終了（次の次のビルドのCBBがリリースしたら更新プログラムが提供されなくなる）
■ LTSB
長期供給モデル
Windows 10 ENt + SA契約


こちらの表が、Windows 10のライフサイクル

|Windows 10 ビルド|CBリリース日|CBBリリース日|CB提供終了日|CBBサポート終了日|LTSBサポート終了日|
|:---|:---:|:---:|:---:|:---:|:---:|:---:|
|Windows 10 1507|2015/7/29|2015/7/29|なし|1611 CBBリリース日|2025/10/14|
|Windows 10 1511|2015/11/12|2016/4/8|2016/4/7|RedStone2 CBBリリース日|なし|
|Windows 10 1607|2016/8/2|まだ|まだ|RedStone3 CBBリリース日|未定|
|RedStone 2|
|RedStone 3|

【参考】
https://technet.microsoft.com/ja-jp/windows/release-info 
https://blogs.msdn.microsoft.com/nakama/2016/08/18/win10waas-part3/
OpenStack on Kubernetes 最新動向まとめ

# はじめに
OpenStack を使えば AWS のようなインフラがオンプレミスでも簡単に利用できます。しかしながら、OpenStackクラスタ 自体について継続的にCI/CDを回すのはとても難しく、ある程度以上の規模になると運用上のボトルネックになることが課題となっております。
この課題を解決するためには、デリバリプロセス自体を Microservice に対応したもの(Kubernetes)に置き換えれば良いのではないか..ということで、2016年初頭あたりから、OpenStack on Kubernetes の PoC (Proof of Concept)の構築が様々な組織で進んでおります。

本文書では、各地で取り組まれている OpenStack on Kubernetes について、一部でもコードにアクセスできそうなものを中心にまとめました。基本的には私の備忘録でございますが、ご興味のある人は足掛かり情報としてご参照いただけますと幸いです。

## Containerized Control Plane on Kubernetes (CCP)
2016年8月に、Mirantis / Intel / Google 3社の連名で、OpenStack on Kubernetes に取り組むとの発表がありました。
- [Mirantis blog](https://www.mirantis.com/company/press-center/company-news/openstack-kubernetes-mirantis-collaborates-intel-google/)
本プロジェクトは後発となりますが、Mirantis は OpenStack の主要ディストリビュータであり、Google は Kubernetes の Initial Contributor であるため、今後急速にユーザの支持を集める可能性を秘めています。
ただし、現時点では実装は公開されておらず、また Compute ノードについてはスコープ外の模様です。

ドキュメントを読む限りでは、Fuel を用いて Undercloud (ベアメタルサーバ) に Kubernetes をデプロイするように見受けられます。
- [CCPの Blueprint](https://blueprints.launchpad.net/fuel/+spec/ccp)
- [CCPの Spec](https://specs.openstack.org/openstack/fuel-specs/specs/10.0/ccp.html)

## tcp cloud
tcp clooud では OpenStack のデプロイに SaltStack を用いており、SaltStack の Kubernetes 対応を進めている模様です。

- [Making OpenStack Production Ready with Kubernetes and OpenStack-Salt - Part 1](http://www.tcpcloud.eu/en/blog/2016/06/27/making-openstack-production-ready-kubernetes-and-openstack-salt-part-1/)
- [Making OpenStack Production Ready with Kubernetes and OpenStack-Salt - Part 2](http://www.tcpcloud.eu/en/blog/2016/06/27/making-openstack-production-ready-kubernetes-and-openstack-salt-part-2/)
- [Making OpenStack Production Ready with Kubernetes and OpenStack-Salt - Part 3](http://www.tcpcloud.eu/en/blog/2016/08/04/making-openstack-production-ready-kubernetes-and-openstack-salt-part-3/)

上記ドキュメントは OpenStack on Kubernetes を大規模に展開する際には必須な課題(Scalability, Availabilityなど)について解決案が提示されており、大いに参考になりました。特に、Undercloud: Kubernetes with Calico, Overcloud: OpenStack with OpenContrail の組み合わせは、現時点で考えられる最も Scalability / Availability の高いアーキテクチャの可能性が高いです。

なお、Undercloud のデプロイについては、MAAS の利用が想定されている模様です(特にアーキテクチャ的には連携はないはず?)。

## Kolla-kubernetes
OpenStackクラスタの Docker へのデプロイについては、従来から Kolla というプロジェクトにて実現されておりました。主な用途としては CI や開発環境に Kolla が用いられていると考えられますが、こちらの Kolla image をベースにする形で、Kubernetes への対応プロジェクトとして Kolla-kubernetes の開発が進んでおります。

なお、Undercloud のデプロイについては、特に規定はないので MAAS や Triple-O 等を組み合わせて使えそうです。
Overcloud のデプロイについては、ansibleを用いたテンプレートエンジンや Kubernetes操作にて実現されます。

- [Kolla-kubernetes Document](http://docs.openstack.org/developer/kolla-kubernetes/)

## sapcc openstack-kube
SAP でも、OpenStack on Kubernetes について PoC の開発が進んでいる模様です。
こちらも、テンプレートエンジンにて Kubernetes のコンフィグを生成する模様です。
[openstack-kube github repository](https://github.com/sapcc/openstack-kube)

## Stackanetes
OpenStack on Kubernetes の火付け役となったプロジェクトが、CoreOS社が発表した  Stackanetes であると記憶しております。
現在の開発状況については把握しておりませんが、github 上にコードは公開されており、開発は進捗している模様です。
- [Stackanetes github repository](https://github.com/stackanetes/stackanetes)

# まとめ
あまりに沢山のプロジェクトが並行して進んでいるので、ウォッチするだけでも大変そうです。今後はプロジェクトの淘汰が進むかもしれませんが、それぞれの良いアイデアが共有されていくと嬉しいですね。
rbenvでmacのrubyを最新にする

`rbenv install [バージョン]`だけでは切り替わらなかったので、対応方法の備忘録。

インストール

```sh
$ brew update
$ brew install rbenv ruby-build

# 既にinstallしている場合はupgrade
$ brew upgrade rbenv ruby-build

$ rbenv install --list
$ rbenv install 2.3.1
```

確認

```
$ ruby -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin11.0]
```

変わらず。。

version確認。

```
$ rbenv versions
* system
  2.3.1 (set by /Users/kogache/.rbenv/version)
```

system??

デフォルトのバージョンを固定したい場合は global を使う。すると ~/.rbenv/version に使うバージョンが書き込まれる。らしい。。

```
$ rbenv global 2.3.1
$ rbenv versions
  system
* 2.3.1 (set by /Users/kogache/.rbenv/version)
```

確認。

```
$ ruby -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin11.0]
```

まだ変わらず。。

コマンドのpathを確認。

```
$ which ruby
/usr/bin/ruby
```

path が正しくなかったよう。
rbenv のrubyを使う場合は、
`/Users/ユーザー/.rbenv/shims/ruby`
に設定される必要があるとのこと。

```
$ rbenv init
# Load rbenv automatically by appending
# the following to ~/.bash_profile:

eval "$(rbenv init -)"

```

`eval "$(rbenv init -)"` を `~/.bash_profile` に追記。

```
$ vim ~/.bash_profile
$ source ~/.bash_profile
$ which ruby
/Users/ユーザー/.rbenv/shims/ruby
$ ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin11.0]
```
ヽ(=´▽`=)ﾉ

（ふつーに `brew install` して切り替えるのと変わらん。。）


参考)
- [rbenvでバージョンがうまく切り替わらなかった時にやったこと \- Qiita](https://qiita.com/akatsuki174/items/c0384b9903b4b5cbbdaf)
- [rbenvでRubyのバージョンを指定する方法 \- Qiita](https://qiita.com/makoto_kw/items/cc73b628c9ef039f6e6f)
- [brew upgrade rbenv ruby\-build](https://qiita.com/_kanacan_/items/c1499f6c13b1c41da982)
ORACLE Java Silverの問題をTypeScriptにしてみる2-1

２−１.次のプログラムを実行した時の結果として、正しいものを選びなさい。

```java:qa2-1.java
public class Main{
  public static void main(String[] args){
    int val = 7;
    bool flg = true;
    if(flg==true){
      do{
        System.out.println(val);
      }while(val>10);
    }
  }
}

```

A.7が１回だけ表示される
B.何も表示されない
C.コンパイルエラーが発生する
D.実行時に例外がスローされる

```ts:qa2-1.ts
var val:number = 7;
var flg:bool = true;
if(flg==true){
   do{
     console.log(val);
   }while(val>10);
}

```

A.7が１回だけ表示される
B.何も表示されない
C.コンパイルエラーが発生する
D.実行時に例外がスローされる

答えは、Cのコンパイルエラーです。
シンタックスハイライトがあるので難易度が下がってますね。
bounjourセグメント越えをしてAirPrintを使う方法(CentOS VM)

# AirPrintをしたい。でも無線LANからはプリンタが見つけられない

○○DCと某氏から呼ばれているお家LANですが、
スマートフォンや家庭用機器のいる無線LANセグメントと、
検証用のサーバやNW機器がごろごろいるお仕事LANセグメントの２つがあります。

LANセグメント間にはNetScreenがFirewallとして鎮座しております。。
（この時点で異常ッて言わないでｗ）

お家LAN: 192.168.11.0/24
仕事LAN: 192.168.50.0/24

仕事LANにはAirPrint対応のプリンタがいるのですが、iPhoneやiPadからは見つけられない。

bonjourのプロトコルでは、ブロードキャストパケットを投げて欲しいサービスを自分が持っていれば返事をするという、仕組みで動いているようでbonjourクライアントと、プリンタは基本同一セグメント出ないとだめなようです。（プロトコル使用上）

# avahi-daemonを初めて使う日が
CentOS使いで長年いろいろやってますが、真っ先に無効にしていたavahi-daemonさん。
今回はじめて使うことにしました。
今回お試しした内容をメモとしてまとめます。

##前提条件：
・お家LANと仕事LANそれぞれに足をだす
・bonjour以外は仕事をさせない(必要以外はiptablesで閉じる）
・bonjour用VMとしてCentOS6.8を利用した

## 1. avahi-daemonのインストール
CentOSを基本インストールで導入している際にはだいたい標準でインストールされているものなのですが、
自分はXenServer上にMinimalなCentOSイメージをよく利用するため、avahi-daemonが入っていませんでした。
まずはインストールから。

```shell-session
# yum install avahi avahi-tools
```

## 2. iptablesの設定

iptables を使っている場合 UDP ポート 5353 を開く:

```shell-session
# iptables -A INPUT -p udp -m udp --dport 5353 -j ACCEPT
```
コマンド行で上記になるが、centosデフォルトのiptables設定に追加する場合は

```shell-session
# vi /etc/sysconfig/iptables
```

```
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -p udp -m udp --dport 5353 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
```
上記のようにREJECTの手前に

```
-A INPUT -p udp -m udp --dport 5353 -j ACCEPT
```
を追記してサービス再起動を行う

```shell-session
# service iptables restart
```


## 3. avahi-daemonでリレーの設定を行う

```shell-session
# cd /etc/avahi
# vi avahi-daemon.conf
```

変更前

```
[reflector]
#enable-reflector=no
#reflect-ipv=no
```

変更後

```
[reflector]
#enable-reflector=no
enable-reflector=yes
#reflect-ipv=no
```

## 4. avahi-daemonの再起動
```shell-session
# service avahi-daemon start
```

## 5. iPhone/iPadから試す
safariを開いて iPhoneから試してみる
###### safari～から開くをクリック
![1.fw.png](https://qiita-image-store.s3.amazonaws.com/0/126158/5695b92b-78b5-6e92-d89f-9ee940d9398a.png)

###### プリントをクリック
※表示されない場合は下段を右へスライドすると出てきます。
![2.fw.png](https://qiita-image-store.s3.amazonaws.com/0/126158/f9bc536c-d551-91d0-0070-728e5403d1c2.png)

###### プリンタをクリック
![3.fw.png](https://qiita-image-store.s3.amazonaws.com/0/126158/d1d7b411-6a06-7972-e9dc-274dd819774b.png)

###### 使用したいプリンタをクリック
EPSON スマートチャージですが・・・
![4.fw.png](https://qiita-image-store.s3.amazonaws.com/0/126158/01014176-b108-01a1-1c01-b1332f8609ba.png)


###### プリントをクリック
![5.fw.png](https://qiita-image-store.s3.amazonaws.com/0/126158/8da8ca9d-f6e9-a5a1-f163-92752276dc44.png)

####印刷できましたか？　完了です！
Dockerコンテナ内のファイルをrsyncをつかってやりとりする

コンテナとクライアントに rsyncコマンドがインストールされていれば、sshを経由しなくても docker exec コマンドを通じてrsyncが利用できます。

rsync のオプションに

	--blocking-io -e 'docker exec -i'

をつけることで **コンテナ名:パス** でローカル側とファイルのやりとりができます。

## 例

カレントディレクトリの work の内容を rsync-test コンテナの /workへ同期

	rsync --blocking-io -e 'docker exec -i' -av work rsync-test:/

rsync-test コンテナの /work の内容をカレントディレクトリの work の内容へ同期

	rsync --blocking-io -e 'docker exec -i' -av rsync-test:/work .

コンテナ側はrootユーザでアクセスされるため、-a オプション だとパーミッション、ユーザ、オーナも同期されてしまい、UID,GIDを合わせた環境でないと意図しないユーザ・グループになるので注意が必要です。-a は -rlptgoD をまとめたものなので、-rlptgoD から p(perms), g(group), o(owner)を抜いた **-rltDv** をつかえば問題を回避できます。内容によってはpはあったほうがいいかもしれません。

## rsyncの入っているコンテナで動作を確認してみる

rsync-testコンテナの作成と /etc ディレクトリの書き換えをする例です。debian:jessieのイメージに、rsyncをインストールし、何もしないサーバを起動するシンプルなDockerfileを使います。それをつかってrsyncの同期を動作を確認することができます。

	$ git clone https://github.com/mamemomonga/docker-container-rsync-demo.git
	$ cd docker-container-rsync-demo/debian-jessie
	$ cat Dockerfile

Dockerfileの内容

	FROM debian:jessie
	
	RUN set -xe && \
		apt-get update && \
		DEBIAN_FRONTEND=noninteractive apt-get install -y rsync
	
	CMD ["/bin/sh","-c","while true; do sleep 1; done"]

イメージの作成・コンテナの起動

	$ docker build -t debian-jessie-rsync-test .
	$ docker run --name rsync-test -d debian-jessie-rsync-test

リモートの/etc をローカルのworkの下にもってくる 


	$ rsync --blocking-io -e 'docker exec -i' -rltDv rsync-test:etc work/

ローカル側に空のファイルをつくってみる

	$ touch work/etc/hogehoge

ローカルの work/etc を リモートの /etc に上書き

	$ rsync --blocking-io -e 'docker exec -i' -rltDv work/etc rsync-test:/

etc/hogehoge がアップロードできたか確認

	$ docker exec rsync-test ls -al /etc/hogehoge

コンテナの停止・削除・イメージ削除

	$ docker stop rsync-test
	$ docker rm rsync-test
	$ docker rmi debian-jessie-rsync-test

## 参考

* [`docker exec -i` as a transport for `rsync -e` #13660](https://github.com/docker/docker/issues/13660#issuecomment-192975035)
* [rsync](https://www.infoscience.co.jp/technical/rsync/rsync.html)
* [DEBIAN_FRONTEND=noninteractive ってなんだ](http://qiita.com/udzura/items/576c2c782adb241070bc)
備忘録一覧

# はじめに
タイトル通りこの記事は私が今までに書いた記事の一覧にしていこうと思います。
なお、私自身今年から社会人になったばかりでなんのスキルもありません。
間違ったことも書いてあるかと思います。
もし、間違いなどお気付きの際にはご指導のほどよろしくお願いします。

## JavaScript
|更新日|タイトル|
|:-:|:-:|
|2016/8/24|[スコープについて](http://qiita.com/xeting/items/3c70f6bcc1060641cdee)|
|2016/8/26|[Functionについて](http://qiita.com/xeting/items/c102c93444c72241b972)|
rex0220 項目非表示プラグイン

kintone アプリで、指定した項目の非表示を行うプラグインです。
項目を画面表示したくない場合に簡単に指定できます。
新旧デザイン対応。
非表示は、プラグインで CSS を生成して実現します。

非表示に出来る対象項目

- 一般の項目、グループ内の項目、サブテーブル内の項目
- グループ、サブテーブル、関連テーブル全体
- 一覧画面の項目（Ver.2 から）<br>
一覧画面の項目を非表示にするには、項目非表示プラグイン Ver.2 を読み込み後に、プラグインの再設定をお願いします。


**※ブラウザ上で非表示にしているしくみですので、絶対に見せてはならない項目の場合は、フィールドのアクセス権で参照不可にしてください。**


[rex0220 stores](https://rex0220.stores.jp/) で、販売中です。

# Ver.5 以降での注意事項

プラグイン設定保存時に、rex0220_field_hide.css ファイルをチェックします。
Ver.4 以前から Ver.5 以降にバージョンアップする場合は、プラグイン設定を保存後に rex0220_field_hide.css を削除してください。

![2022-05-05_13h23_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/c0fafa0d-9e0f-3900-2083-28479cbbca1b.png)

# 直近の変更点

Ver.6
・プラグイン設定のダウンロード＆アップロードで、IE チェックを削除
・プラグイン設定のグリッドライブラリ変更

Ver.5
・アプリ管理者でプラグイン設定ができるように変更
　プラグイン設定時、kintone システム管理者権限が不要になりました。
・PC用のCSSファイルの rex0220_field_hide.css　は、不要になりましたので、削除してください。
・プラグイン設定で、「運用環境に反映」機能を追加
・モバイルの一覧画面で項目非表示対応

# 詳細画面の項目非表示例

![fhide01.png](https://qiita-image-store.s3.amazonaws.com/0/100572/2f688f9d-be62-2b53-00ed-6e20f54cbff4.png)

# 編集画面の項目非表示例

![fhide02.png](https://qiita-image-store.s3.amazonaws.com/0/100572/d64c23e5-ef7c-0a3f-2202-984ab84c7911.png)

# グループ、サブテーブル全体を非表示にした詳細画面例

![fhide03.png](https://qiita-image-store.s3.amazonaws.com/0/100572/e604dbc6-27f7-3a3b-56b2-95ba686e67b6.png)

# プラグインの追加

![fhide11.png](https://qiita-image-store.s3.amazonaws.com/0/100572/e9b2c6c0-625b-b163-90f4-9ac538294436.png)

# プラグインの設定

![fhide12.png](https://qiita-image-store.s3.amazonaws.com/0/100572/91b179b9-b113-0f4f-850b-0802a113d12c.png)

設定画面を開くと項目が表示されますので、非表示にする項目を選択します。
設定後に、「保存する」ボタンをクリックします。


# 注意事項

- 既に、CSS によるカスタマイズを行っているアプリの場合、処理が競合して、非表示に出来ない場合があります。その場合は、CSS の調整をしてください。
- フォームを変更した場合は、プラグインを再設定してください。
Firebaseを利用して特定端末へのpush通知

Android + PHP でテスト

## Android

ここを見て実装
https://firebase.google.com/docs/notifications/android/console-device

`sendRegistrationToServer`メソッドで自サーバにpush通知用のトークン送信する処理書けばok。
もちろんサーバ側ではトークンを格納する処理を書く


## サーバからの特定端末への通知

Ruby使えたら`gem`とかありそうだったんですがPHPしか使えないサーバだったので。
こんな感じでクラス作って`Notification::send`で通知。
`$pushTokens`に対象となる複数のトークン（配列）を設定してメッセージ設定したら送信できる。

```php:notification.php
class Notification {
  private static $apiKey = "hoge";  // Firebase console:Overview > プロジェクトの設定 > クラウドメッセージング > サーバーキー
  private static $url = "https://fcm.googleapis.com/fcm/send";

  static public function send($pushTokens, $message) {
    $headers = [
      "Authorization: key=".self::$apiKey,
      "Content-Type: application/json"
    ];

    $fields = [
      "registration_ids" => is_array($pushTokens) ? $pushTokens : [$pushTokens],
      "notification" => [
        "text" => $message
      ]
    ];

    $handle = curl_init();
    curl_setopt($handle, CURLOPT_URL, self::$url);
    curl_setopt($handle, CURLOPT_POST, true);
    curl_setopt($handle, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($handle, CURLOPT_POSTFIELDS, json_encode($fields));
    $result = curl_exec($handle);
    curl_close($handle);
    return $result;
}
```

簡単でした。
Qiitaの画像アップロードでエラーになった場合

Qiitaで画像アップロードしようとしたところ下記のエラーが発生しました。

```
the image size Monthly limit exceeded: Publishing to Qiita expands your monthly capacity
```

原因を調査したところ、1件も登録していないため、アップロード可能なファイルの上限が2Mだということが判明しました。
記事を投稿すると、100Mに拡張されるようです。
8/24　今日の学習内容　～Progate Ruby基礎編　終了(*'▽')～

###今日の学習内容
***
今日はProgateのRuby基礎編を最後まで進めました。

![progate screenshot4.png](https://qiita-image-store.s3.amazonaws.com/0/137880/12c66096-e867-dd4a-a8d1-e4326105b532.png)


>Progate　http://prog-8.com/

指示に従って進めることで、最終的に英単語当てゲームが完成しましたが、
終わりの方に**メソッドの作成**というものがありました。

学習して使ってみた感じでは、関数のようなものでしょうか？

どんな違いがあるのか、気になったので調べてみました(-ω-)/
>「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典　
http://wa3.i-3-i.info/diff97function.html

↑このサイトでは

メソッドは**オブジェクト指向での関数のようなもの**で、オブジェクト指向における「操作」を定義したもの、とありました。
関数とメソッドの差は**オブジェクトに関係するか**でしょうか？(。´･ω･)?

>関数にしか見えないものが「メソッド」と新たな名前で呼ばれる理由(1)
http://d.hatena.ne.jp/amapetas/20111114/1321237707

↑こちらでは、一見、ただの関数に見える「メソッド」が「メソッド」と呼ばれるようになった理由を説明してくれています。

>メソッドはインスタンスの状態に依存するようになったことで、数学的に関数とはいえなくなった

とありました。
何のことやらちんぷんかんぷんです(;'∀')

ということで、調べてみました。

　
>インスタンスとは？
インスタンス (instance)とはオブジェクト指向で使う概念で「実体」のことです。

>クラス「スマートフォン」は「それがどんなものかって概念」です。
インスタンス「iPhoneやAndroidの実機」は実際に使える「実体」です。
オブジェクト「ケータイ」は「それらをふんわりと表現したもの」です。

>「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
http://wa3.i-3-i.info/word1118.html
↑インスタンスについての説明です(-ω-)/


メソッドと関数の違いは調べてみても、いまいちよく分からないです...(;´д｀)ﾄﾎﾎ

メソッドと通常の関数の違いは主にインスタンス内部へのアクセスの有無らしいのですが...(@_@。ｳｰﾝ
私にはいまいち理解できませんでしたorz


###あとがき
***
不完全燃焼で終わりました...(;'∀')
関数もメソッドも似たようなものなのは確かなのでしょうが...
読んでも理解できない自分が不甲斐なくなってきます(笑)
いつか理解できるようになりたいですね...(@_@。

###参考にさせていただいたサイト
***
Progate　http://prog-8.com/

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典　
http://wa3.i-3-i.info/diff97function.html
↑「関数」と「メソッド」の違いについてです

関数にしか見えないものが「メソッド」と新たな名前で呼ばれる理由(1)
http://d.hatena.ne.jp/amapetas/20111114/1321237707

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
http://wa3.i-3-i.info/word1118.html
↑インスタンスについての説明です(-ω-)/
ZIPファイル保存方法　MAC　パスワード

ZIPファイルのパスワード設定方法

１　ターミナルを開く

２　デスクトップにファイルをおいて

　cd Desktop/　と打つ

３　　

zip -e  pass.zip tt.zip

「zip　-e  圧縮したあとのファイル名.zip 圧縮したいファイル名」

米デスクトップに保存した、tt.zip をパスワード付きのpass.zip に変換する。
poptについて


- 個人的な備忘録ですので、詳しいところと詳しくないところがアンバランスかも
- ただし誤りの指摘は歓迎します

# ライセンス

- X11 License(割と重要)

# バージョン

- 最新版は、http://rpm5.org/files/popt/ によると1.16
- https://launchpad.net/popt/2.0 に2.0開発中とあるが、微妙なところ

# 使い方

## オプション指定

- `struct poptOption optionTable[]={}`
- 要素は、`{"long-name", 'short_name', arg_type(数値), arg(参照値), 識別子(数値), "説明1(--option[=__ここに入る__])", "説明2"}`
- たとえば、arg_typeを`POPT_ARG_INT`にするなら、argは`int*`。
- POPT_ARG_NONEの場合、*argに1が代入される。
- POPT_ARG_VALの場合、*argに識別子が代入される。
  - この2つにはオプション値は付けてはならない。
- POPT_ARG_STRINGの場合、*argにオプション値が代入されるが、popt 1.16では複製、開発版では移動が発生する。
  - 前者の複製されたメモリの元側は、後のオプションの有無で解放されたりされなかったりする

## 流れ

- `poptGetContext()`でコンテキスト取得
- `poptGetNextArg()`を回す
  - POPT_ARG_VAL以外のタイプで識別子を設定した場合は、途中でその識別子が帰ってくることがある
  - `poptGetOptArg()`でオプション値を取得した上で、細かい設定ができる
  - POPT_ARGFLAG_OPTIONALの場合、オプション値がNULLの場合があるが、その値の設定もここで行う
    - オプション値がない場合1にするとかはデフォルトではやってくれない
  - `poptGetOptArg()`の返し値は文字列
- `poptFreeContext()`で解放

## メモリリーク

### その1

- オプション値に相当する部分のメモリが開放されないため、たとえば、`{"option",'o',POPT_ARG_INT|POPT_ARG_OPTIONAL,&flg,OPT_O,NULL,NULL}`のとき、`-o2`と付けるだけで`2\0`に相当する2バイトがリークする。
- この問題は最新版である[bzr r789では改善されている](http://bazaar.launchpad.net/~rpm5/popt/trunk/revision/789)。
  - [170102] なぜかr790でrevertされてしまったので、(changes未反映のこともあり)r789を明示的にダウンロードすることをお薦めします。
  - http://bazaar.launchpad.net/~rpm5/popt/trunk/tarball/789
- ただし、arg(参照値)を指定している場合、GetOptArg()ではNULLが帰ってくる。

```
for(;(optc=poptGetNextOpt(optCon))>=0;){
  if(optc==OPT_O){
    char *arg=poptGetOptArg(optCon);
    if(arg)flg=strtol(arg,NULL,10);
    else flg=1;
  }
}
```

- というコードは、
  - flgに2を代入した後当該文字列は開放される
  - `poptGetOptArg()`でNULLが帰ってくる
  - 結果、flgに意図せず1が代入されてしまう
- ため、禁則である。
- 結果、POPT_ARG_OPTIONALを指定する場合、argはNULLにする必要があるといえる。
  - OPTIONALでない場合は、argの中身を見て処理をするだけということも可能なので、NULLにしない場合もある。
  - 1.16以下ではflgには正常に2が代入されていた(勿論メモリリークのせい)。

### その2

- その1でメモリが開放されるのは、
  - (`poptGetOptArg()`によらない)flgへの代入が発生した時
  - `poptGetOptArg()`を呼ばずに`poptGetNextOpt() または poptFreeContext()`を呼んだ時
- である。したがって、<font color="red"><b>poptGetOptArg()により得られたメモリは自分で解放しなければならない。</b></font>
- poptGetOptArg()により、メモリがpoptの管理外になるためである。同様に、POPT_ARG_STRINGについても、参照値に割り振られたメモリはpoptの管理外になるため、<font color="red">自分で解放しなければならない。</font>

## rsync

- rsyncにもpoptGetOptArg()についてメモリリークが発見された。POPT_ARG_STRINGについてはグローバル変数のため確認できず。
- https://bugzilla.samba.org/show_bug.cgi?id=12173 にて報告。
FlaskアプリケーションをHeroku上のDockerで起動


## はじめに

1ヶ月程度前に、Dockerイメージをそのまま
Herokuにデプロイすることができるようになったので試してみました。
まだパブリックベータではありますが。

参考
[Container registry public beta - deploy Docker images to Heroku
](https://devcenter.heroku.com/changelog-items/926)[Container Registry and Runtime](https://devcenter.heroku.com/articles/container-registry-and-runtime)

## 準備

以下は既に済んでいるものとして記述します。

* Dockerのインストール
* Herokuのアカウント登録
* [Heroku Toolbelt](https://devcenter.heroku.com/articles/heroku-command-line)のインストール

## ソース

デプロイ対象には自前のFlaskアプリケーションを利用しました。
https://github.com/nanakenashi/image_clock

時刻に応じて画像を切り替えるシンプルな時計のアプリケーションです。

```ディレクトリ構成
image_clock/
    ├ static/
    ├ templates/
    ├ Dockerfile
    ├ app.py
    └ requirements.txt
```

```Dockerfile
# Pythonが入ったAlpine Linuxをベースイメージに使用
FROM python:3.5.2-alpine

# gitのインストール
RUN apk update
RUN apk add git

# Pythonのパッケージインストール
ADD requirements.txt /tmp
RUN pip install -r /tmp/requirements.txt

# ソースコードを配置
WORKDIR /web
RUN git clone https://github.com/nanakenashi/image_clock.git clock

# flaskアプリケーションの起動
ENV FLASK_APP /web/clock/app.py
CMD flask run -h 0.0.0.0 -p $PORT
```

ポイントはflaskアプリケーションの起動の部分です。

* 環境変数の設定は`RUN`ではなく`ENV`で行う
* hostは実行環境のIPに合わせるために`0.0.0.0`とする
* Heroku環境におけるポート番号は、環境変数`PORT`に格納されている

## 手順

### 事前確認

`docker`コマンドが利用できることを確認し

```bash
$ docker ps
```

Herokuへのログインを済ませます。

```bash
$ heroku login
```

### ソースコードの配置

GitHubからソースコードを取得し、ディレクトリに移動します。

```bash
$ git clone https://github.com/nanakenashi/image_clock.git ./image_clock
$ cd image_clock
```

### Herokuアプリケーションの作成

アプリケーションの置き場所を確保します。

```bash
$ heroku create flask-clock-sample
```

この段階ではソースも何も入っていないのでただの箱です。
アクセスするとこんな感じになります。↓
![Heroku___Welcome_to_your_new_app_.png](https://qiita-image-store.s3.amazonaws.com/0/43116/05c69b9a-53e9-c1df-b636-a2986f6ec4ac.png "Heroku___Welcome_to_your_new_app_.png")

### Dockerコンテナのpush

Dockerfileを元にコンテナをビルドし、リポジトリに送ります。

```bash
$ heroku container:push --app flask-clock-sample web
```

* `--app flask-clock-sample`: 指定したアプリケーションにコンテナを展開
* `web`: Herokuにおけるプロセスタイプ（`web`か`worker`）を指定

### 動作確認

```bash
$ heroku open --app flask-clock-sample
```

時計アプリケーションの動作を確認できました。
![Clock.png](https://qiita-image-store.s3.amazonaws.com/0/43116/7e1cae93-7a19-30e9-97c0-03fe195da1f2.png "Clock.png")

## まとめ

今回利用したアプリケーションではアドオンを利用していないため
非常にシンプルに設定し、デプロイすることができました。

DB接続やログの整理など、Herokuらしい構成を作るにはもう少し苦労しそうです。
エクセルで重複している値を持っている行を削除する

エクセルの表である一列内にある値が重複していて、その重複している値を持っている行を削除するマクロです。
備忘録で投稿しておきます。

```vbnet
Sub Macro2()

Dim a As String
Dim i As Integer
Dim t As Integer

ActiveCell.Select
a = ActiveCell.Value
ActiveCell.Offset(1, 0).Select

Application.ScreenUpdating = False

For i = 1 To 4141
Debug.Print "a:" & a & "| count:" & i

If a = ActiveCell.Value Then
    Selection.EntireRow.Delete
    
    For t = 1 To 10000 '一応処理のために時間を置いておく
    Next t

    Else
    ActiveCell.Offset(1, 0).Select
    a = ActiveCell.Value
End If

Next

End Sub
```
Selenium 周りの個人的ブックマーク

Web ブラウザの自動テスト環境 Selenium に関して、気になった記事等をまとめていきます。

## 本家

- [Selenium - Web Browser Automation](http://www.seleniumhq.org/)
- [ソースコードリポジトリ](https://github.com/seleniumhq/selenium)

## Selenium Client & WebDriver Language Bindings

Java、C# は本家からダウンロード可

- [Ruby用](https://rubygems.org/gems/selenium-webdriver)
- [Python用](https://pypi.python.org/pypi/selenium)
- [Javascript (Node) 用](https://www.npmjs.com/package/selenium-webdriver)

## IE11 関連記事

Google で「selenium ie11」で検索した際に表示された上位5件(就筆時点)

- [Selenium (webDriver) と IE11の組み合わせについて - Qiita](http://qiita.com/gluelan2013/items/6977cde545e2bcf08081)
- [Selenium,IEWebDriverでのテストが実行できない場合の対処方法 - Qiita](http://qiita.com/takky/items/4c22d68dd7c48cf6d92c)
- [SeleniumでInternet Explorer11を動かす方法](http://bitwave.showcase-tv.com/selenium%E3%81%A7internet-explorer11%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99%E6%96%B9%E6%B3%95/)
- [Selenium WebDriverをIE11で動かす方法 - miyajan blog](http://miya-jan.hatenablog.com/entry/2014/04/22/232919)
- [Internet Explorer 用 WebDriver (Windows)](https://msdn.microsoft.com/ja-jp/library/dn800898(v=vs.85).aspx)

## その他の参考記事

- [進化するSeleniumとテスト自動化 ―「第3回日本Seleniumユーザーコミュニティ勉強会」レポート：レポート｜gihyo.jp … 技術評論社](http://gihyo.jp/news/report/2016/02/2401)
Automatorで「フォルダの中にある画像を1つのプレビューアプリでまとめて開く」処理のコツ

![スクリーンショット 2016-08-24 21.33.53.png](https://qiita-image-store.s3.amazonaws.com/0/75446/88bcf321-4ec2-0b83-bc88-02c7cbf55cec.png)

普通にやるとフォルダごとにプレビューアプリが開くのでどうやればいいのかと思っていたが、フィルタでフォルダを除外すればフラットにパスが取得されるらしく、1つのウィンドウにまとめて展開されます。

エクセルファイルなどプレビューで開けるファイルも表示されるけど、開けないファイルは無視されるようなので特にトラブったことはないです
３ヶ月でMVPを作る

Qiitaで初めての投稿

以前から海外からの観光客と日本の現地の人をつなげるサービスTriplorを構想しつつ、
なかなかアプリ開発を避けて通ってしまっている。。。
今回は夏も終りかけていい機会なので、ウェブサービスのMVPを作ろうと思います！

今まで開発経験など
・Udacity iOS nanodegree途中で挫折
・Code4StartupのAirbnbとFiverrのクローンを見よう見真似で作った
・土曜日はイタンジ株式会社CTOの横澤さんのエンジニア塾に通う

今回は平日の夜と土曜日の夜を使ってプログラミングしていきます！
現在のホームページはWIXを使ったもので、
これが３ヶ月後にどう変化しているが自分でも楽しみです。
http://www.urbanfutureslab.com/

Qiitaでは出来れば毎週制作状況を公開していきたいです。
あとその過程で学んだことはGoogle+の方でリアルタイムに投稿していきます。
https://plus.google.com/u/1/107221871269602934448

この一連の記事がこれからウェブサービスを作る人たちの役に立てれば嬉しいです。
Webプログラマ向けハードウェア自動設計ツールmille-feuille（ミルフィーユ）～プログラム編

ミルフィーユ（mille-feuille）基板を使った試作から小ロット量産まで、自動生成された配線情報のファイルを入れ替えるだけで同じプログラムがそのまま動くという特徴があります。
実際にミルフィーユ基板ではプログラムをどのように書くのかを説明します。

#プログラムの書き方
ミルフィーユを組み立てた後、プログラムはどのように書くのか。
一番簡単なAD2chデバイスボードを使って説明します。

```py:AD2chTest.py
#!/usr/bin/python

from mil import mil
from mil import milMod
from mil import p

from mil import AD2ch

import time

if __name__=='__main__':
	try:
		mil.init()
		modA = milMod.milMod(AD2ch.getInfo(0))	#connector number 0

		while(1):
			modA.connect()
			returnData = AD2ch.read(modA,0)
			print "AD 0ch = ",returnData
			returnData = AD2ch.read(modA,1)
			print "AD 1ch = ",returnData
			modA.disconnect()
			time.sleep(1)

	except KeyboardInterrupt:
		print("detect key interrupt [ctrl]+ [C] \n")

	mil.cleanup()
	AD2ch.cleanup()
```

#１、まずはお決まりの作業
はじめに必要なライブラリをimportします。ライブラリは後々公開します。

```py:
from mil import mil
from mil import milMod
from mil import p
```
デバイス毎のライブラリをインポート

```py:
from mil import AD2ch
```

その他、必要ならインポート

```py:
import time
```
mainを定義

```py:
if __name__=='__main__':
```

try～except　は例外処理が起きたときの処理を入れます。
具体的にはctrl + c で強制的にプログラムを停止させた以降に I/O の状態をcleanupしています。cleanupすることを推奨します。

```py:
try:
...
except KeyboardInterrupt:
```

#2、初期化とインスタンス生成

初期化でI/Oを基本設定します。

```py:
mil.init()
```

インスタンスの生成

```py:
modA = milMod.milMod(AD2ch.getInfo(0))
```
このインスタンスにはAD2chデバイスの情報（デバイスアドレス、デバイスボードの配線の情報など）が紐づけられます。インスタンス名は任意です。
ミルフィーユのベースボードには4つのコネクタが並んでいます。その中のどのコネクタにつないだかを指定してください。
最大4つまで同じ種類のデバイスボードをつなげることができます。I2Cデバイスのみ、I2Cのアドレスがメーカで決められているため、1つしか使用できないデバイスボードもあります。

![HardAll.jpg](https://qiita-image-store.s3.amazonaws.com/0/96369/69d3bf60-19a9-9385-f77c-895584f8bfd6.jpeg)


#3、自動配線とデバイスボードの動作
デバイスボードの配線を自動的に行います。通常、手で配線する作業を自動化しています。

```py:
modA.connect()
```

接続を外すときは

```py:
modA.disconnect()
```

引数にインスタンスを含めてライブラリの関数に渡すことで、配線の情報を把握し、具体的にどのI/Oを動かせばデバイスボードが動くのかを自動的に判断します。

```py:
returnData = AD2ch.read(modA,0)
```
ここではADの 0ch 目のデータを取得しています。


#4、回路図自動生成後のファームウェア
プログラムを書き終え、試作が完了したら回路図を生成しましょう。
生成のやり方は以前の記事をご覧ください。
http://qiita.com/my_mil_info/items/ac484c96c867c1b3e702

回路図を自動生成した際、ファームウェアも回路図に合わせて自動生成されます。
このファームウェアは「配線に関するファームウェア（wiringdata.py）」で、インスタンスを生成するときに参照する、配線に関するファイルになります。これを自動生成された同じ名前のファームウェア（wiringdata.py）と差し替えると、ミルフィーユを使って試作したプログラムがそのまま自動生成された回路でも使用できます。
test kitchen で仮想マシンを作るときにNICのtypeを指定する

# 概要

test kitchen で仮想マシンを作るときに、NICのtypeを指定したかった

# 結論

```.kitchen.yml``` を以下のようにしたらうまくいったようだ

以下抜粋

```
platforms:
  - name: ubuntu-16.04
    driver:
      customize:
        nictype1: virtio
```

# ログ

次のようになった

```
NIC 1:           MAC: 08002754D5FB, Attachment: NAT, Cable connected: on, Trace: off (file: none), Type: virtio, Reported speed: 0 Mbps, Boot priority: 0, Promisc Policy: deny, Bandwidth group: none
```
VirtualBox内でdocker pullが遅い時の対処方法

# 概要

Virtualbox内で、docker pullを実行したらずいぶん遅いなと思った。

# 解決策

以下のサイトを教えてもらい、NICTYPEをvirtioにした。

* [pull is extremely slow and often fails · Issue #577 · docker/kitematic](https://github.com/docker/kitematic/issues/577)

速くなったと思っている

# 実行方法


まずは停止する

次にGUIなら、ネットワークの設定から切り替えれば良い（はず、試していない）

CLIなら

```
VBoxManage modifyvm 仮想マシンの名前かUUID --nictype1=virtio
```

nictype1のところは、適宜自分の環境に合わせる。

起動する。
devise_parameter_sanitizerに変更があった模様


あくまでも，超個人的なメモ．全然まとまっていません．

Ruby on RailsでDeviseを使っていて，認証まわりを全然いじっていなかったのにもかかわらず，ひさしぶりに認証関係のリンクをクリックしたら突如以下のようなエラーが出るようになった．

Devise NoMethodError 'for' ParameterSanitizer

どうやらDeviseのバージョンが新しくなって，devise_parameter_sanitizerまわりに変更があった模様．

モデルのコントローラの中のconfigure_permitted_parametersで，今まで以下のように書いていた．

```rb
def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password, :provider, :uid) }
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :email, :password, :current_password) }
end
```

今はこんなふうに書かないといけないらしい．

```rb
def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, :email])
    devise_parameter_sanitizer.permit(:account_update, keys: [:first_name, :last_name, :phone, :email, bank_attributes: [:bank_name, :bank_account]])
end
```

とりあえずエラーは出なくなった．
fluentd->flumeのログの転送で欠損が発生するかの検証メモ

[fluentdのrequire_ack_response設定は、やっぱり必須設定だと再認識したときの検証メモ](http://qiita.com/CkReal/items/bb6f0490a6ba94c1fab3)

fluentd->fluentdのときは、ログの欠損が発生しないのはこの記事から確認できましたが、[fluent-plugin-flume](https://github.com/fluent/fluent-plugin-flume)使って、Flumeに転送した時どうなるのか気になったので、前述のページと同じ手順で試してみました。

```td-agent.conf
<source>
  @type forward
</source>
<match log.test>
  @type flume
  host localhost
  port 4141
</match>
```

結論としては、ログの欠損は発生しませんでした。

td-agentのログをみると

```td-agent.log
2016-08-24 19:09:15 +0900 [warn]: temporarily failed to flush the buffer. next_retry=2016-08-24 19:10:25 +0900 error_class="Thrift::TransportException" error="Could not connect to localhost:4141: Connection refused - connect(2) for [::1]:4141" plugin_id="object:3ff3c1630e58"
  2016-08-24 19:09:15 +0900 [warn]: suppressed same stacktrace
2016-08-24 19:10:25 +0900 [warn]: retry succeeded. plugin_id="object:3ff3c1630e58"
```
とあるように、受信側のFlumeのダウンを検知できておりましたので、require_ack_responseをtrueに設定した場合と同様の挙動になっておりと思われます。