OmniAICreator/Qiita-1.07M huggingface dataset:
Google Mapsの下から生えてくるウィジェットを出さない

- Google Mapsの画面の下に生えてくる黒い背景のウィジェットを出したくない。
- 昔はAdBlockで退治できていたが、uBlockにしたら中身は出ないものの背景だけは出るようになってしまって、画面が狭くて鬱陶しい。
- 以下のようなCSSファイルを作って、Safariの 設定> 一般> スタイルシート で読み込ませると消えた。

```css
DIV[class="widget-runway-growable"] : {
    display: none;
}
```
- 自分独自のCSSを適用させることは「ユーザスタイルシート」という概念で、他のブラウザでもできるようだ。

----
- Googleに限らないが、こういう「これも興味あるでしょ?」というサジェスチョンは最早生活の邪魔にしかならない気がするので、積極的に出さないようにして行きたい。

----
- これだけでは退治できないようだ。特定の場所を検索している時などは出ないが、漠然と地図を航空写真で見ている時に出現する。JavaScriptで出現させているようなので、それをブロックする必要がある。
jQueryの基本 - $(document).ready


よく、プラグインの使用方法などで以下のような記述を見ることがあると思います。

```js
$(document).ready(function(){
  //何かしらの処理
});
```

これは画像などを除いて、HTML=DOMの読み込みが終わったらfunction()の中の処理(=なにかしらの処理)を実行するという意味です。

jQuery(JavaScript)はHTMLが完全に読み込まれないまま何か処理を実行すると大抵正しく動作しません。なのでこのreadyを使うことになります。

```js
$(function(){
  //なにかしらの処理
});


jQuery(document).ready(function() {
//なにかしらの処理
});

jQuery(function(){
  //なにかしらの処理
});

```

上記３つの書き方も同じ動作をします。HTMLの読み込みが終わった時点で __//なにかしらの処理__ が実行されます。


```js
$(document).ready(function(){
  $(".scroll").smoothScroll();
});

$(document).ready(function(){
  $("#slider").slider();
});

$(document).ready(function(){
  $("#nav").nav();
});
```

ちなみに、このようにreadyを何度も書く必要はなく

```js
$(document).ready(function(){
  $(".smooth").smoothScroll();
  $("#slider").slider();
  $("#nav").nav();
});

//もしくは

$(function(){
  $(".smooth").smoothScroll();
  $("#slider").slider();
  $("#nav").nav();  
});

```

このようにまとめて書けます。こちらのほうが管理面で圧倒的に良いと思います。


## $(window).loadとの違い

$(window).load()はページのすべての要素、つまり画像などがすべてロードされた段階でイベントが発火されます。

それぞれのイベントの順番をまとめるとしたのようになります。


1. ページの読み込みが始まる
2. HTMLの読み込みが終わる
3. $(document).readyが実行 
4. 画像など含めすべてのコンテンツの読み込みが終わる
5. $(window).loadが実行

$(window).loadは一番最後に実行されます。そのページが、大量のコンテンツを読み込む場合など、なかなか処理が実行されないことがあります。

なので、ユーザの使い勝手を考えたら$(document).ready()を使うほうが良いと思います。

### $(window).loadを使うケース

jQueryやJavaScriptの処理によっては、ページが完全に読み込まれなければ処理が正しく実行されないようなものもあります。

画像に何か処理をかけるようなプラグインで、その幅や高さを計測して処理を実行するようなものがあるとします。画像が完全に読み込まれなければ幅や高さがとれないので、\$(document).ready()のタイミングで処理を実行すると誤動作をします。そういったケースには$(window).loadです。


## $(document).readyの実態

readyはいったいjQueryの中でどういった処理をしているのか、jQueryのソースコードを斜め読みしてみました。

[jquery/jquery](https://github.com/jquery/jquery)

src/core/ready.js

おそらく以下の記述でイベントをフックしているのだと思います。

ready.js 73行目近辺

```js

// Use the handy event callback
document.addEventListener( "DOMContentLoaded", completed );

// A fallback to window.onload, that will always work
window.addEventListener( "load", completed );
```

DOMContentLoadedというイベントが発火したタイミングで設定したfunctionを実行するような処理を行っているようです。

ちなみにDOMContentLoadedでイベントハンドラ呼び出しが失敗した場合。windowのloadイベントでもイベントハンドラが呼ばれる多段構成になっているみたいです。安心設計ですね！



### DOMContentLoadedとは

Mozillaから説明を引っ張ってきました。

[Window: DOMContentLoaded イベント - developer.mozilla.org](https://developer.mozilla.org/ja/docs/Web/API/Window/DOMContentLoaded_event)

> DOMContentLoaded イベントは、最初の HTML 文書の読み込みと解析が完了したとき、スタイルシート、画像、サブフレームの読み込みが完了するのを待たずに発生します。


特に難しいことは書いてありませんね。

**サブフレーム** だけ説明します。
現在開いているウィンドウをメインフレーム、メインフレームから開かれている別ウィンドウをサブフレームと呼ぶそうです。例えばiframeで開かれているウィンドウがそれにあたります。
生DOMとjQueryでのイベントの返り値の違い

実はこれが初めてのQiita投稿ですが、よろしくお願いします。

さて、別件でjQueryやJavaScriptのイベント挙動について調べていたのですが、その過程で知らなかったことがあったので、ここに書き込もうと思います。

直接`addEventListener`する場合でも`onXXX`に割り当てる場合でも、jQueryからイベントをつなぐ場合にも、イベントハンドラから`return false;`とする場面がときどき発生しますが、実は両者で**挙動が違います**。
### DOMでイベントを付けた場合（addEventListener）
* そのイベント自体はキャンセルされる
* バブリングはキャンセルされ**ない**
（[HTML 5.1ドラフト](http://www.w3.org/html/wg/drafts/html/master/webappapis.html#the-event-handler-processing-algorithm)）

* 何をどうキャンセルするのかよくわからないのですが、`onmouseover`や`window.onerror`の場合は**trueを返すとキャンセルになる**という謎な仕様も書かれています。

### jQueryからのイベントの場合
* そのイベント自体はキャンセルされる
* バブリングもキャンセルされ**る**
* `onmouseover`に`return false;`しても同じ動作になる

```jquery-1.11.3.js
//$.event.dispatch関数より
if ( ret !== undefined ) {
	if ( (event.result = ret) === false ) {
		event.preventDefault();
		event.stopPropagation();	//呼び出している！
	}
}
```

ということで、jQueryとDOMを渡り歩いてプログラムを書くような場合、挙動の違いがあることに注意しましょう。
ウェブサーバの基本設定-Apache

#Apache の基本設定
前回のNiktoを使った診断結果から、CentOSに含まれるApache HTTP Server をデフォルトのまま利用すると 攻撃者に対して多くの情報を提供してしまう。必要と思われる設定をまとめる。
## Apache のバージョン情報を隠ぺい
Default

```
ServerTokens OS
```
以下に変更する

```
ServerTokens Prod
```

## TRACE メソッドを無効にする 
Cross-Site Tracing(XST)攻撃の対策として設定する。但し、現在はブラウザ側で対応されているため実害はない。

追記

```
ServerTokens Prod
```

確認方法　(Method Not Allowed　になればOK)

```
# telnet localhost 80
Trying ::1...
Connected to localhost.
Escape character is '^]'.
TRACE /index.html HTTP/1.1
host: localhost

HTTP/1.1 405 Method Not Allowed　
```

## PHPのバージョンを隠ぺい
/etc/php.ini

```
# vi /etc/php.ini
expose_php=On

     ↓変更
     
expose_php=Off
```
注）変更後は apache の再起動が必要となる

## X-Frame-Optionsを無効
クリックジャッキング攻撃を防止するなどの目的で設定する。

追記

```
Header always append X-Frame-Options SAMEORIGIN
```

## デフォルトの/icons/ /manual/等を非表示

```
Alias /icons/ "/var/www/icons/"

<Directory "/var/www/icons">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
```
 　　　　　　  ↓　変更

```
＃Alias /icons/ "/var/www/icons/"

＃<Directory "/var/www/icons">
＃    Options Indexes MultiViews FollowSymLinks
＃    AllowOverride None
＃    Order allow,deny
＃    Allow from all
＃</Directory>
```

## 不必要なモジュールをロードしない
例)squirrelmail.conf を読み込まない設定

```
# cd /etc/httpd/conf.d
# mv squirrelmail.conf squirrelmail.conf.orig
# service httpd restart
```

## ディレクトリの オプション Indexes には注意
ファイルの一覧が参照可能となる。 不必要な場合は Indexesを外す。

```
<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
```
  　　　　　　　 ↓　変更

```
<Directory "/var/www/html">
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
```
React.jsプロジェクト構成ベストプラクティス検討

# **概要**

* <a href="https://www.google.co.jp/search?q=react+js&oq=react+js&aqs=chrome..69i57j69i60l5.2270j0j7&sourceid=chrome&es_sm=119&ie=UTF-8#q=React" target="_blank">React - Google 検索</a>
* <a href="http://facebook.github.io/react/docs/tutorial.html" target="_blank">Tutorial | React</a> - React公式チュートリアル
* <a href="http://facebook.github.io/flux/docs/todo-list.html#content" target="_blank">Tutorial | Flux</a> - Flux公式チュートリアル



# **Flux**

## 導入、理解
 * <a href="http://www.slideshare.net/techblogyahoo/reactjs-flux-scripty02" target="_blank">React.js + Flux入門</a> 
    * Fluxの説明がわかりやすい
 * <a href="http://mizchi.hatenablog.com/entry/2015/06/07/154034" target="_blank">最近のReactへの言及についての違和感 - mizchi's blog</a>
    * React.js、Fluxについてよくわかる。
 * <a href="https://speakerdeck.com/geta6/reacttofluxfalsekoto" target="_blank">ReactとFluxのこと</a>
    * mizchiさんおすすめの記事。Fluxについてわかりやすく説明。
 * <a href="http://qiita.com/yukisov/items/c9db9dee1aaea7bcf21f" target="_blank">Fluxの概念図を分かりやすくしてみた - Qiita</a>

## 参考になるソース

* <a href="https://github.com/facebook/flux/tree/master/examples/flux-todomvc/" target="_blank">flux-todomvc</a>
    * 公式のサンプル。
* <a href="https://github.com/yahoo/flux-examples" target="_blank">yahoo/flux-examples</a>
    * 1031 stars。


#**ひな形**

## isomorphic
* <a href="https://github.com/relayjs/relay-starter-kit" target="_blank">relayjs/relay-starter-kit</a>
    * 570 stars。<a href="https://facebook.github.io/relay/" target="_blank">Relay</a>のスターターキット。
* <a href="https://github.com/davezuko/react-redux-starter-kit" target="_blank">davezuko/react-redux-starter-kit</a>
    * 2400 stars。React・Redux・React Router・Koa。(※isomorphicではなくなった)。
* <a href="https://github.com/erikras/react-redux-universal-hot-example" target="_blank">erikras/react-redux-universal-hot-example</a>
    * 3800 stars。express, react, redux, webpack。
* <a href="https://github.com/kriasoft/react-starter-kit" target="_blank">kriasoft/react-starter-kit</a> 
    * 6600 stars。とても丁寧。Flux。
* <a href="https://github.com/este/este" target="_blank">este/este</a> 
    * 2500 stars。Flux・immutable.js・webpack。
* <a href="https://github.com/RickWong/react-isomorphic-starterkit" target="_blank">RickWong/react-isomorphic-starterkit</a>
    * 1600 stars。Hapi.js・React・Babel・Webpack
* <a href="https://github.com/dozoisch/koa-react-full-example" target="_blank">dozoisch/koa-react-full-example</a>
    * 374 stars。Koa, React, Passport, Mongoose, Webpack, Mocha, Babel。
* <a href="https://github.com/carlosazaustre/universal-js-boilerplate" target="_blank">carlosazaustre/universal-js-boilerplate</a>
    * 282 stars。Babel・Browserify・Express・Gulp・ES6。


#**その他**
* <a href="https://github.com/reactjs/react-rails" target="_blank">reactjs/react-rails</a> - 1700 stars。ReactをRailsで使うためのgem。**React Way**でRails開発する人向け。

#**おわりに**
ご意見ください。
ウェブサイトの脆弱性を確認する-Nikto

#ウェブサイトの脆弱性を確認する
オープンソースのセキュリティスキャナ（Nikto: [公式サイト](https://cirt.net/Nikto2))のインストールと基本的な利用方法
## インストール
[Nikto の公式ホームページ](https://cirt.net/Nikto2)からプログラム本体をダウンロード

```
# cd /usr/local/src
# wget https://cirt.net/nikto/nikto-2.1.5.tar.gz
```
プログラム本体を展開

```
# tar xvfz nikto-2.1.5.tar.gz
# mv nikto-2.1.5 /usr/local

```
## プラグインとデータベースの更新

```
# cd /usr/local/nikto-2.1.5
# perl ./nikto.pl -update
```
## ウェブサイトの脆弱性診断
基本的なコマンドフォーマットは以下の通り

* perl ./nikto.pl -h 診断対象ホスト

自分自身のApache を診断

```
# perl ./nikto.pl -h 127.0.0.1
```
結果

```
- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost.localdomain
+ Target Port:        80
+ Start Time:         2015-05-13 19:45:13 (GMT9)
---------------------------------------------------------------------------
+ Server: Apache/2.2.15 (CentOS)
+ The anti-clickjacking X-Frame-Options header is not present.
+ Apache/2.2.15 appears to be outdated (current is at least Apache/2.2.22). Apache 1.3.42 (final release) and 2.0.64 are also current.
+ Allowed HTTP Methods: GET, HEAD, POST, OPTIONS, TRACE
+ OSVDB-877: HTTP TRACE method is active, suggesting the host is vulnerable to XST
+ Retrieved x-powered-by header: PHP/5.3.3
+ OSVDB-3233: /info.php: PHP is installed, and a test script which runs phpinfo() was found. This gives a lot of system information.
+ OSVDB-3268: /icons/: Directory indexing found.
++ Server leaks inodes via ETags, header found with file /icons/README, inode: 170756349, size: 5108, mtime: 0x438c0358aae80
+ OSVDB-3233: /icons/README: Apache default file found.
+ 6545 items checked: 0 error(s) and 10 item(s) reported on remote host
+ End Time:           2015-05-13 19:46:02 (GMT9) (49 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested
```

問題が発見された。対応については次回に記載

## SSL サイトの診断方法
SSLのサイトを診断するには、以下のパッケージが必要になる（CentOS6)

```
＃　yum install openssl-devel perl perl-Net-SSLeay perl-Crypt-SSLeay
```
診断するコマンドは同様

```
＃　perl ./nikto.pl -h https://127.0.0.1
```
Yosemite 写真.appを使ってiPhoneの写真をPCに取り込む

1. iPhoneをMacにUSBでつなぐ

2. 写真.appを起動
![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/40940/4d8ca6a4-fd8c-d0a3-11a0-f80b3f0ee335.jpeg)

3. 「読み込み」タブをクリック
![2.jpg](https://qiita-image-store.s3.amazonaws.com/0/40940/9c8fb675-5f3f-2896-2a4b-0e2f99a859e2.jpeg)

4. 取り込む写真を選ぶ

5. 右上の「◯個の選択項目を読み込む」ボタンを押して取り込む

6. 取り込んだ写真を選択して、メニューの「ファイル」＞「書き出す」＞「写真を書き出す」
（ショートカットがあるようだ）
![3.jpg](https://qiita-image-store.s3.amazonaws.com/0/40940/3738dd17-39d5-50c4-4a6c-5a4c66fa9870.jpeg)


7. JPEGなど、書き出す形式を選択
![4.jpg](https://qiita-image-store.s3.amazonaws.com/0/40940/37a755a8-3eb8-d66a-6253-4ea0d919191e.jpeg)



8. フォルダを選ぶダイアログボックスがでる。
![5.jpg](https://qiita-image-store.s3.amazonaws.com/0/40940/969640a4-43d4-6341-99eb-6083de1228b9.jpeg)


9. 保存

10. JPEG画像が出来上がる
MacOSXからSCPコマンドでディレクトリごとアップロード。ポート番号指定・秘密鍵ファイル指定。

MacOSXからさくらVPSへSCPコマンドでディレクトリごとアップロード。

~~~ アップロード
scp -P 33333 -r /Users/tetsuya/Project/Test -i ~/.ssh/id_rsa_sakura tetsuya@niiyz.com:/home/tetsuya
~~~

サーバーの/home/tetsuya配下にTestディレクトリができて再帰的にコピーされている。

~~~ ディレクトリごと置きたかった場所へコピー
ssh sakura
mv /home/tetsuya/Text /home/AAA/public/Text
~~~
konashiの話を聞いてきた


日時：5/13 19-21時
会場：サムライインキュベート
参加：30人ぐらい
概要：http://bba.or.jp/ja/?p=1306

1. BBA
 * 事前説明
 * IoTのインキュベートプログラムを半年スパンで実施

2. プロトタイピング電子回路 紹介
 * ユカイ工学
 * konashiの紹介
 * [au未来研究所とハッカソン](http://www.ux-xu.com/work/auworkshop)
	 * [fuum]http://aufl.kddi.com/openlab/fumm
		 * センサー(気圧、カラー)
		 * 楽しい体験を提供
		 * 体験が検証できるようなプロトタイプ作り
 * プロトタイプデザインの話
	 * デザインとは？
		 * アート = 問題発見
		 * デザイン = 問題解決
		 * テクノロジー = 解決手段
	 * 課題を明確にし、それを解決する事ができないと商品にならない
 * デザインの世界で何がおきているか？
	 * いろいろな機会が、iphone1つになった。
	 * 家電メーカでは、TVはもうデザイン刷ることないので、ソフトウェアのUI・UXをデザインしている。ほぼ、プログラマになっている
	 * デザイナとプログラマは区別できない。
 * konashiはデザイナーx電磁にあの協業を可能にする
 * フィジカルコンピューティング
	 * 現実世界 x フィジカルコンピューティング
 * モノづくりがデジタル化している
	 * 一人でも家電メーカができる時代
	 * 回路設計、デザイン
	 * モノづくりがソフトウェアに近づいている
	 * 「モノづくり」に求めるものが変化
		 * 共感できるプロダクト
			 * 「共感できるもの」がシュアされる仕組みプロダクト★
			 * 共感できるプロダクトが求められている
				 * 世界に貢献するもの
				 * 特定のコミュニティと深く結びついているもの★
			 * いくつか紹介
				 * [mine kafon](http://news.aol.jp/2012/11/22/mine-kafon-a-bamboo-tumbleweed/)
				 * gopro
				 * [sony join together](https://www.youtube.com/watch?v=YFK_-UomvrQ)

3. workshop
 * jsdo.itのサンプルをもとにkonashiを動かした。
    http://jsdo.it/orie22

以上
Sublime Text で格好つけたい時のためのショートカット（windows,mac）

Sublime Textをwindowsで操作する時に覚えておいたら捗るショートカット一覧
お目当てのファイルなどをショートカットでちゃちゃっと出せるとそれなりにデキる感じを醸すことができる

#選択する系

##選択した文字列を複数選択

| windows | mac |
|:-:|:-:|
|Ctrl + d | command + d |

##Ctrl + dで複数選択したら行き過ぎた！→最後の選択を取り消したい！ そんな時
選択で行き過ぎてしまった時、選択をやり直すのではなく、コレが使えるとかなりスマート
****

| windows | mac |
|:-:|:-:|
|Ctrl + u | command + u |

##Ctrl + dで複数選択の中から一部を飛ばしたい！　そんな時
選択を飛ばしたい時、Ctrl + dで一旦途中まで選択してからcrtlを押しながらちまちまとマウスで飛ばした先の範囲を選択していた諸君は必見
**Ctrl + k**

| windows | mac |
|:-:|:-:|
|Ctrl + k | command + k |

#検索する系

##文字列検索
画面左下のオプションで正規表現の検索も可能

| windows | mac |
|:-:|:-:|
|Ctrl + f | command + f |

##（左側の「FOLDERS」バーに読み込んでいるディレクトリの中から）ファイル検索

| windows | mac |
|:-:|:-:|
|Crtl + p| command + p |

##現在開いているファイルの中から関数を検索

| windows | mac |
|:-:|:-:|
|Ctrl + p → @|command + p → @|

#ファイルを操作する系

##ファイルを開く
| windows | mac |
|:-:|:-:|
|Crtl + o|command + o|

##ファイルを閉じる

| windows | mac |
|:-:|:-:|
|Ctrl + w|command + w|

#テキストを操作する系

##選択した複数行を整列

| windows | mac |
|:-:|:-:|
|F9|F5|

##インデント
###右寄せ

| windows | mac |
|:-:|:-:|
|Ctrl + ]|command + ]|

###左寄せ

| windows | mac |
|:-:|:-:|
|Ctrl + [|command + [|

##コメントアウト

| windows | mac |
|:-:|:-:|
|Ctrl + /|command + /|

#カーソルを移動する系
##カーソルを行頭に移動

| windows | mac |
|:-:|:-:|
|Home|Ctrl + a|

##カーソルを行末に移動

| windows | mac |
|:-:|:-:|
|End|Ctrl + e|

##指定した数字の行に移動

| windows | mac |
|:-:|:-:|
|Ctrl + g|Ctrl + g|

#画面を操作する系

##新しいタブを開く（新規ファイル作成）

| windows | mac |
|:-:|:-:|
|Crtl + n|command + n|

##新しいウィンドウを開く

| windows | mac |
|:-:|:-:|
|Ctrl + Shift + n|command + Shift + n|

##タブの切り替え

| windows | mac |
|:-:|:-:|
|Ctrl + Tab|command + Tab|

##検索で画面の上とか下に出てきたウィンドウを消す

| windows | mac |
|:-:|:-:|
|Esc|Esc|

#表示系

## 文字を大きくする

| mac |
|:-:|
|command + shift + -|

## 文字を小さくする

| mac |
|:-:|
|command + -|
【Swift】関数の引数に初期値が入っている場合、その引数は書かなくても良いらしい

Alamofireを使っていてタイトルの通りの言語仕様に気づきました。
Alamofireのrequest(method:, URLString:, parameters:, encoding:)メソッド。

引数のencodingには.URLという初期値が設定されています。
補完をかけてrequestメソッドを呼ぶと引数が全て出てきますが、初期値が代入されている引数に関しては省略して

Alamofire.request(method: .POST, URLString: "hogehoge", parameters:["fuga":1])

などと呼び出しても問題はないようです。
このメソッドに関してはparametersにも初期値としてnilが入っていますので省略可能です。
UnityでLive2Dの描画順を変える：RenderTextureを利用して描画する

## 概要
UnityでLive2Dの描画をするにあたって描画順の制御に工夫がいるよう．
RenderTextureを使って回避するというメモ．
Live2D_SDK_Unity_2.0.08_1_jp/sample/Simpleにいくつか設定を追加して，
RenderTextureを利用してキャラを描画し，描画順の制御を試みた．
※以下を読まなくても，SDKにsample/RenderTextureというサンプルがある．

Live2Dの描画設定（詳しくは[こちら](http://sites.cybernoids.jp/cubism2/sdk_tutorial/platform-setting/unity/csharp/render-mode)）は二つあり，それぞれにメリット・デメリットがある．
それぞれ困りそうなところは，
L2D_RENDER_DRAW_MESH_NOW：layerを設定できないなど
L2D_RENDER_DRAW_MESH：非推奨（Unityの非推奨のAPIを使っており今後も使えるかわからない  

## 開発環境
* Live2D_SDK_Unity_2.0.08_1_jp
* Unity 5.0.1f1

## Render Texture
オフスクリーンレンダリングのようなもの
カメラが写している情報をTextureにする
詳しくは[ここ](http://qiita.com/tsubaki_t1/items/ee8419c054d17ade32ee)を参照

## 手順
以下の三つを追加して，Live2Dのモデルをカメラで写してオブジェクトに貼るイメージ
* Render Texture
* カメラ
* レンダーテクスチャを適用するためのオブジェクト(Plane)

プロジェクトを開いて，
1. Project > Create > Render TextureでRender Textureを作る
2. Render Textureを選択してInspectorでサイズを1024*1024に設定
3. GameObject > Create General > CameraでCameraを作る
4. 2で作ったカメラのTarget Textureに1で作ったレンダーテクスチャを設定
5. Hierarchy > Create > 3D Object > PlaneでPlaneを作る
6. Planeに1で作ったレンダーテクスチャを設定，ShaderはUnlit/Textureにする

## 参考
[http://docs.unity3d.com/ja/current/Manual/class-RenderTexture.html](http://docs.unity3d.com/ja/current/Manual/class-RenderTexture.html)
ElixirにectoでMySQLを使う

EctoでMySQLを使いたいときに、まず `$mix new mysqltest --sup`でプロジェクト生成します

`mix.exs`ファイルは下のようになっています。

```
 defmodule Mysqltest.Mixfile do
   use Mix.Project

   def project do
     [app: :mysqltest,
      version: "0.0.1",
      elixir: "~> 1.1-dev",
      build_embedded: Mix.env == :prod,
      start_permanent: Mix.env == :prod,
      deps: deps]
   end

   
   def application do
     [applications: [:logger, :ecto],
      mod: {Mysqltest.App, []}]
   end

   defp deps do
     [
       {:ecto, "~>0.11.0"},
       {:mariaex, "~> 0.1"}
     ]
   end
 end
```
依存関係に`ecto`と`mariaex`が必要です。

`mysqltest/config/config.exs`は下のようになっています

```
use Mix.Config

# Mysqlの場合、アダプタはEcto.Adapters.MySQL
config :mysqltest, Mysqltest.Repo,
  adapter: Ecto.Adapters.MySQL,
  database: "testdb",
  username: "root",
  password: "123"
```

`lib/mysqltest.ex`ファイルは下のようになっています。

```
defmodule Mysqltest.App do
  use Application
  def start(_type, _args) do
    import Supervisor.Spec, warn: false

    children = [
      worker(Mysqltest.Repo, []),
    ]
    opts = [strategy: :one_for_one, name: Mysqltest.Supervisor]
    Supervisor.start_link(children, opts)
  end
end

defmodule Tenant do
  use Ecto.Model
    schema "tenant" do
      field :id, :integer
      # ectoにuuidデータタイプ存在してる
      field :uuid, :uuid
      # 参照リンク
      # http://stackoverflow.com/questions/28506589/default-datetime-with-ecto-elixir
      timestamps([{:inserted_at,:created_at}])
    end
end

# ここのMysqltest.Repoはconfig.exs設定ファイルにもあります。
defmodule Mysqltest.Repo do
  use Ecto.Repo, otp_app: :mysqltest
end

defmodule Mysqltest do
  import Ecto.Query
  def sample_query do
    # http://stackoverflow.com/questions/30163965/elixir-ecto-connect-to-an-existing-db
    query = from t in Tenant,
          where: t.id == 319,
          # 下の形で（両方とも）時間比較するときにschemaの部分でtimestamps([{:inserted_at,:created_at}])の形で定義する必要があります
　　　　　　# 参照リンク http://stackoverflow.com/questions/30211217/elixir-ecto-compare-time-the-in-the-where-clause

          #where: t.created_at == ^%Ecto.DateTime{year: 2015, month: 4, day: 27, hour: 10,min: 8, sec: 42, usec: 0},
          where: t.created_at == ^Ecto.DateTime.from_erl({{2015, 4, 24}, {13, 8, 51}}),
          select: t
    [res] = Mysqltest.Repo.all(query)
    IO.inspect res
  end
end
```

これで`$ mix deps.get; iex -S mix`を実行して、

```
iex(1)> Mysqltest.sample_query

19:00:43.618 [debug] SELECT t0.`id`, t0.`uuid`, t0.`created_at` FROM `tenant` AS t0 WHERE (t0.`id` = 319) [] (48.1ms)
%Tenant{__meta__: %Ecto.Schema.Metadata{source: "tenant", state: :loaded},
 ax_account_id: 12345678123, created_at: {{2015, 4, 27}, {10, 8, 42, 0}},
 id: 319, uuid: "12345678-1234-1234-1234-12345678"}
%Tenant{__meta__: %Ecto.Schema.Metadata{source: "tenant", state: :loaded},
 ax_account_id: 12345678123, created_at: {{2015, 4, 27}, {10, 8, 42, 0}},
 id: 319, uuid: "12345678-1234-1234-1234-12345678"}
```
最初はなぜselectを行うためになぜschemaが必要ってずっと悩んでました。
上の場合はSelectを行っていました。**このときにschemaに定義されたフィールドが取得されてきます**。
(同じようにinsertするときにschemaに定義されているフィールドだけinsertができるのでしょう、これは推測）
selectを行うだけなら、スキーマが必要は特にないです。下のリンク参照
`http://stackoverflow.com/questions/28506589/default-datetime-with-ecto-elixir`
Phalcon DevToolsで何やってもエラーが出る

PhalconのDevToolsで何やってもエラーになる時があります

```bash
$ phalcon controller hoge

Phalcon DevTools (2.0.1)


  Error: This command should be invoked inside a Phalcon project directory

```

そんな時はプロジェクトのトップに.phalconディレクトリを作成してみてください。
動くようになるかもしれません。

```bash
$ mkdir .phalcon
$ touch .phalcon/empty
```

ちなみにこのディレクトリですが、今のところ中に何を入れても意味ないみたい。
GROUP BYした結果、対象が何件あるか調べる #PostgreSQL #CakePHP

## これは何か？

GROUP BYした結果、対象が何件あるか調べたいときに用いた方法のメモ。
CakePHPで利用するにあたりOVER句を使う方法にした。

## OVER句を使う

PostgreSQL 9.3.4で`COUNT(*) OVER ()`を使うと次のような感じ。

```sql
SELECT COUNT(*) OVER ()
FROM table
GROUP BY group_id
HAVING SUM(point) > 0
LIMIT 1;
```

CakePHP 2.3.9で表現すると次のような感じ。

```php
$this->Model->virtualFields = array('cnt' => 'COUNT(*) OVER ()');

$this->Model->find('first', array(
    'fields' => array(
        'cnt',
    ),
    'group' => array(
        'group_id HAVING SUM(point) > 0'
    ),
));
```

## OVER句を使わない、OVER句を使えない場合

OVER句が使えない場合はこんな感じ。

```sql
SELECT COUNT(*)
FROM (

SELECT group_id
FROM table
GROUP BY group_id
HAVING SUM(point) > 0

) AS t
```

CakePHP 2.3.9で表現すると次のような感じ。


```php
$ds = $this->Model->getDataSource();

$query = $ds->buildStatement(array(
    'table' => 'table',
    'alias' => '',
    'fields' => array(
        'group_id',
    ),
    'group' => array(
        'group_id HAVING SUM(point) > 0'
    ),
), $this->Model);

$query = $ds->buildStatement(array(
    'table' => '(' . $query . ')',
    'alias' => 't',
    'fields' => array(
        'COUNT(*)',
    ),
), $this->Model);

$ds->query($query);
```
HashMap#keySetの返り値の中身がJava7とJava8で違う


## `HashMap`の`keySet()`で返されるキーの並び順が変わった

以下のソースをJava7、Java8それぞれで実行してみた。

```java:Map#keySet
Map<String, String> map = new HashMap<String, String>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");

System.out.println("keySet: " + map.keySet());
```

### Java7の実行結果

```java:Java7実行
// 降順で返ってくる
keySet: [key3, key2, key1]
```

### Java8の実行結果

```java:Java8実行結果
// 昇順で返ってくる
keySet: [key1, key2, key3]
```

## 解決方法

### ソートする

一度配列にしてソートする。

```java:ソートする
String[] keyArray = map.keySet().toArray(new String[map.size()]);
// 降順
Arrays.sort(keyArray, Collections.reverseOrder());
// 昇順
Arrays.sort(keyArray);
```

### そもそも

`Set`に順序を期待してはいけない。
順序依存を期待したいのなら`SortedSet`を実装したコレクションクラスを利用すべき。
順序付きのMapを使いたいのであれば`TreeMap`を使う。
（@pocariさん、@tsuyoshi_choさんコメントありがとうございます）

## `HashMap`, `TreeMap`, `LinkedHashMap`の`keySet()`について

3つのMapそれぞれの`keySet()`の出力結果を見てみる。

```java:それぞれのMapのkeySet()
HashMap<String,String> hashMap = new HashMap<String, String>();
hashMap.put("key1", "value1");
hashMap.put("key3", "value3");
hashMap.put("key2", "value2");
System.out.println("HashMap.keySet: " + hashMap.keySet());
		
TreeMap<String,String> treeMap = new TreeMap<String, String>();
treeMap.put("key1", "value1");
treeMap.put("key3", "value3");
treeMap.put("key2", "value2");
System.out.println("TreeMap.keySet: " + treeMap.keySet());

LinkedHashMap<String,String> linkedHashMap = new LinkedHashMap<String, String>();
linkedHashMap.put("key1", "value1");
linkedHashMap.put("key3", "value3");
linkedHashMap.put("key2", "value2");
System.out.println("LinkedHashMap.keySet: " + linkedHashMap.keySet());
```

### Java7の実行結果

```java:Java7実行結果
// 降順（順序は不定）
HashMap.keySet: [key3, key2, key1]
// 昇順（順序付き）
TreeMap.keySet: [key1, key2, key3]
// 挿入順
LinkedHashMap.keySet: [key1, key3, key2]
```

### Java8の実行結果

```java:Java8実行結果
// 昇順（順序は不定）
HashMap.keySet: [key1, key2, key3]
// 昇順（順序付き）
TreeMap.keySet: [key1, key2, key3]
// 挿入順
LinkedHashMap.keySet: [key1, key3, key2]
```
Pandocを用いたソースコードの簡易カラー出力


pandocを導入した上で、

```bash
function highlighter(){
    sed '1i```{.'$1' .numberLines}' | sed '$a```' | pandoc -s;
}
alias highlighter=highlighter
```

```bash
> highlighter cpp < input.cpp > output.html
```

wkhtmltopdfを導入すれば

```bash
> cat input.cpp | highlighter cpp | wkhtmltopdf - output.pdf
```

とすることで、PDF出力可能。
サブディレクトリ付きのURLでassets配下を正しく参照できるようにする

メモがてら
同一ホストで複数のアプリを起動する場合、サブディレクトリを使用することがあると思います。その場合、サブディレクトリ付きのURLでアクセスするとルート直下のassetsをアプリが参照してしまいます。回避手段としてはprecompileすに下記のように**RAILS_RELATIVE_URL_ROOT**にサブディレクトリを指定することでできるようです。

```
bundle exec rake assets:precompile RAILS_ENV="${RAILS_ENV}"  RAILS_RELATIVE_URL_ROOT=/subdir
```
エクスプローラーを右クリックしてElectronをすぐ開けるようにする

エクスプローラーを右クリックしてすぐにElectronで開けるようにしたかったので、やってみた。
![1.png](https://qiita-image-store.s3.amazonaws.com/0/56668/b51dfc97-2fd7-1502-be72-d6e413aa8579.png)

## 手順

1. レジストリエディターを開く
2. HKEY_CLASSES_ROOT\Directory\Background\shell を右クリックして新規→キーを選択
3. Open with Electron と入力(何でも良い)
4. ↑で作ったキーを右クリックして新規→キーを選択
5. command と入力
6. ↑で作ったキーを選択
7. 右の画面の(既定)というところをダブルクリック
8. 値のデータを `[electronのフルパス] .` とする(通常は `ユーザーのホームディレクトリ\AppData\Roaming\npm\electron` がelectronのフルパス)

![regedit](https://qiita-image-store.s3.amazonaws.com/0/56668/8c43312b-01c3-936e-d68d-5cc8f43a7c43.png)

※レジストリの操作を誤るとシステムが不調になったり起動しなくなったりします。十分ご注意の上、自己責任にてご利用ください。
Linux 上で5秒で chroot jail を使えるコマンド「jailing」を使ってみた

## 参考

* [Linux 上で5秒で chroot jail を使えるコマンド「jailing」が凄い！](http://blog.64p.org/entry/2015/05/13/163844)

## 動作確認

```bash:
git clone https://github.com/kazuho/jailing.git
```

```bash:
mkdir aa
sudo ./jailing --root=`pwd`/aa -- python -m http.server
```

http://ipaddr:8000/ にアクセスができることを確認。

## 動かないプログラムの場合の調査方法

```bash:bftpdをインストール
pacman -Sy bftpd
pacman -Ql bftpd | grep -v \/$
sudo cp /etc/bftpd.conf aa/etc/
mkdir -p aa/var/run/bftpd
mkdir -p aa/srv/ftp
```

straceを使う。

```bash:
sudo ./jailing --root=`pwd`/aa -- strace bftpd
```

> getpeername(2, 0x611ae0, [16])          = -1 ENOTSOCK (Socket operation on non-socket)

とあるので、[Configuring ProFTPD - FAQ](https://www.infoscience.co.jp/technical/proftpd/configuration.html)を参考。

```diff:aa/etc/bftpd.conf
- BIND_TO_ADDR="any"
+ BIND_TO_ADDR="192.168.0.3"
```

以下途中
ProgressBarをカスタマイズする

## 普通のProgressBarの置き方

ProgressBar のスタイルを `?android:progressBarStyleHorizontal` に設定する。

```xml
<ProgressBar
    style="?android:progressBarStyleHorizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
```

## カスタマイズしたProgressBarの置き方

`android:id/background`、`android:id/progress`、`android:id/secondaryProgress` を含む `<layer-list>` Drawableを作成し、`android:progressDrawable` に設定する。

```xml
<ProgressBar
    style="?android:progressBarStyleHorizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:progressDrawable="@drawable/progress" />
```

```xml:res/drawable/progress.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

  <!-- 背景 -->
  <item android:id="@android:id/background">
    <color android:color="#000" />
  </item>

  <!-- android:secondaryProgress用のDrawable -->
  <item android:id="@android:id/secondaryProgress">
    <clip>
      <color android:color="#9f00" />
    </clip>
  </item>

  <!-- android:progress用のDrawable -->
  <item android:id="@android:id/progress">
    <clip>
      <color android:color="#f00" />
    </clip>
  </item>

</layer-list>
```

上記例ではシンプルに一色を指定しているが、Bitmapや9patchを使ってより複雑な見た目にすることも可能。

## 実行例

![実行例](https://qiita-image-store.s3.amazonaws.com/0/56668/0c8c8e8c-30b0-93dc-4513-67e50f127ffe.png)

中央の赤いバーが例の `res/drawable/progress.xml` でカスタマイズしたProgressBar。 `android:minHeight="4dp"` も指定している。
Cocoapodsとソース管理


## Cocoapodsのソース管理
Cocoapodsが導入されて、僕らのライブラリ管理はだいぶ楽になりました。

もうHeader Search PathsがどうとかOther Linker Flagの悪夢に連日連夜悩まされる事は(ほぼ)無くなり、
集中してプログラミングできるようになって嬉しい限りです。

ただ、cocoapodsでインストールしたライブラリってGitとかのソース管理上どう扱ったらいいんだろう？
Podfileのみコミット対象にしてPods以下はgitignore?
それともworkspace丸ごと？

## 推奨設定 - Podsも自前でソース管理
[CocoaPods Guides -Using CocoaPods](https://guides.cocoapods.org/using/using-cocoapods.html)に以下のように記載されていました。

> *Whether or not you check in your Pods folder is up to you, as workflows vary from project to project. We recommend that you keep the Pods directory under source control, and don't add it to your .gitignore. But ultimately this decision is up to you:*

要するに、
**Podディレクトリはそれぞれでソース管理して、gitignoreしないほうがいいよ！まぁ最終的にはあなた次第だけどね。**との事。

上記を推奨する理由として、

* インターネット環境に接続できない端末や、"pod install"をしていなくても、リポジトリをチェックアウトすればすぐビルドできる
* Podsの元ソース(GitHub上など)が利用できなくなり、pod installできない可能性がある
* Pods以下のソースがプロジェクトで使われているライブラリのソースと同一である事が保証されている

が挙げられていました。

## 非推奨 - Podsはgitignore
一応、Podsをソース管理しない利点も挙げられています。

* リポジトリのサイズを最小限に抑えられる
* Podsの元ソースが利用可能でありさえすれば、CocoapodsでPodsの再インストールは可能(正し同一のソースである事は保証されない)
* 別バージョンのPodを利用している各ブランチをマージする際などにコンフリクトが発生しない

## 結論
特に理由がない限りは、Podsディレクトリ以下も含めてコミット対象とした方がよさそうです。
どちらにしろ、PodfileとPodfile.lockはソース管理するように！
グラフなど、画像の一部分にクリックイベントを与えたい場合はクリッカブルマップを使う

```html
<img src="img_pie_chart.jpg" alt="" border="0" usemap="#Map" width="100%"/>
<map name="Map" id="Chart_Map">
    <area shape="poly" coords="726,200,755,247,777,309,783,385,766,462,732,525,690,575,632,608,566,633,488,635,500,547,509,462,558,451,589,426,610,394,616,367,615,350,599,305,664,249" href="javascript:void(0)" />
</map>
```

画像の一部分だけの領域に何かを施したい時があると思います。そんなときはドリームウィーバーのクリッカブルマップ機能などを使いareaタグのcoordsに領域の区分を記述しておきareaタグに対してイベントなどを与えると効果的です。

>https://gist.github.com/anonymous/9e08846994f2e709dd37
丸めアルゴリズムおぼえがき

IEEE 754-2008標準では5種類の丸めアルゴリズムが定義されている。うち2種類は最近接な値に丸める方法であり、残り3種類は方向丸めと呼ぶ。

★最近接丸め（偶数）
Pattern0:CType((3.45D * 10), Integer) / 10
3.4
Pattern1:Math.Round(3.45D, 1)
3.4
Pattern2:Math.Round(3.45D, 1, MidpointRounding.ToEven)'銀行丸め・偶数丸め・IEEE754-4
3.4

★最近接丸め（0から遠いほうへ）//日本の義務教育で習う四捨五入はこれ
Pattern3:Math.Round(3.45D, 1, MidpointRounding.AwayFromZero)'対称算術型丸め
3.5

0方向への丸め

正の無限大への丸め

負の無限大への丸め
パスワードでsshログインできる状態からノンパスログイン可能にする手順

## 前提
すでにアカウントは作成できておりパスワードによるログインは可能な状態。
毎回パスワードをインストールするのが冗長なので、ノンパスログインの設定を行いたい。

## 手順

```shell-session
H=192.168.0.11
ssh $H "mkdir -p ~/.ssh && chmod 700 ~/.ssh"
scp ~/.ssh/id_rsa.pub $H:~/.ssh/authorized_keys
ssh $H "chmod 600 ~/.ssh/authorized_keys"
```

ワンライナー

```shell-session
ssh $H "mkdir -p ~/.ssh && chmod 700 ~/.ssh" && scp ~/.ssh/id_rsa.pub $H:~/.ssh/authorized_keys && ssh $H "chmod 600 ~/.ssh/authorized_keys"
```

## 2018/03/06追記

少し工夫すればパスワード入力を1回にできることがわかった。
ついでにスクリプト化。

```sh
#!/usr/bin/env bash

ssh $1 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && echo '$(cat ~/.ssh/id_rsa.pub)' >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
```
フィールドの種類（数値）

# 数値

* 数値や通貨を入力するためのフィールド
* 数値以外のデータを入力することができないようになっています（画面を更新したときにエラーとなります）
* 数値の表現方法を指定できるできます
    1. 指数
    1. パーセント
    1. ３桁ごとの桁区切り記号の指定
    1. 通貨記号の表示
    1. 小数点位置の調整（小数部の強制表示等）[^1]

* 数値以外のデータを入力した場合の動き

|入力データ|保存されるデータ|例|
|:--:|:--:|:--|
|数値|数値|123 → 123|
|数値+文字|数値|123ABC → 123*[^2]|
|文字+数値|エラー|ABC123 → エラー*[^3]|

<hr>

[^1]: 小数点位置の調整については表示を調整しているだけで内部的には入力または計算したデータを保管しています

[^2]: 先頭から順にチェックして認識できるところまでをデータとして扱います（認識できないデータ以降は無視されます）

[^3]: 先頭のデータが認識できなければエラーとなります
Android Java 正規表現の利用



正規表現はよく使うんでメモです。
これで一致するかどうかや、抽出ができます。

特に他に書くことないのであとはコードです。シンプルイズベスト。

```Java:Any.java

// 対象文字列
String matchStr = "1234567890";
// 正規表現
String patternStr = "^(\d{4})(\d{2})(\d{4})$";

// 判定するパターンを生成
Pattern pattern = Pattern.compile(matchStr);
Matcher matcher = viewPattern.matcher(matchStr);

// 一致するかどうか
if (matcher.find()) {
	// 全部表示 "1234567890" が表示
	Log.d(Const.TAG, matcher.group(0));
	// ()の１個目 "1234" が表示
	Log.d(Const.TAG, matcher.group(1));
	// ()の２個目 "56" が表示
	Log.d(Const.TAG, matcher.group(2));
	// ()の３個目 "7890" が表示
	Log.d(Const.TAG, matcher.group(3));
}
else {
	Log.d(Const.TAG, "一致しません");
}

```
wpa_supplicant + ESS


無線LANで基地局を複数立てて同じSSIDを設定する、というのはカバーエリアを広げたい場合によくやる手法です。このような構成をしたものをESSと呼びます。実は1台でも2.4GHz帯と5GHz帯の二つのアンテナを使って、同じことが起こっていたりもします。

さて。wpa_supplicantを使ってこのESS内で適切なAPを選択させるのは難しいというのを発見しました。

同一SSIDでAPを3つ立てて、wpa_supplicantで接続します。[hostapd](https://wiki.archlinux.org/index.php/Software_access_point)にある設定と、[wpa_supplicant](https://wiki.archlinux.org/index.php/WPA_supplicant)にある設定を組み合わせるのが無難です。

`wpa_cli`でコマンドを入れます。

```text
add_network
set_network 0 ssid "sample_ssid"
set_network 0 psk "shared_passphrase"
enable_network 0
```

先ほどの*いずれか*のAPに接続されます。より正確には、電波強度などは関係なく、見つかった順。

繋ぎ直すと異なるAPに接続されます。手順は次のように：

```text
disable_network 0
enable_network 0
```

こうすると先ほどとは異なる2番目のAPにつながります。仕組みは：

* `disable_network` で現在繋がっているBSSIDがblacklistに入る。
* `enable_network` でblacklistにないBSSIDに接続する。
* 接続完了できたら、blacklistをクリア。

`disconnect`と`reconnect`でも再接続はできるけれど、blacklist登録せずに前回の認証情報を使いまわそうとするので、APの移動は基本的には起こりません。

ということで、具合が悪くなったら wifi をオンオフすると調子が良くなる、というのはあながち根拠が無いこともない。たとえば電子レンジを動かし始めたときに、オンオフすると、2.4GHzから5GHzに移ることができるかもしれない。運任せだけれど。

この実装での問題はいくつもありますが、例えばAPが3つ以上あったときに、最初の2つにしか接続できません。最後のAPが電波強度最強の5GHzであったとしても！

ローミングは「接続する側」の判断で行なうように802.11仕様が整備されているので、端末側が賢くなるしかない…。そのために802.11k仕様が追加されて、[iOSも対応](https://support.apple.com/en-us/HT202628)していっている。

androidはwpa_supplicantが動いているので、逃れようなく同様に[802.11k非対応らしい](https://code.google.com/p/android/issues/detail?id=17972)。ということでandroidでは、wpa_supplicantに対してblacklistを外部から操作するアプリと組み合わせるのがいいような気がする。人間が電波強度などを見て、接続したいやつ以外をblacklistに入れる、ということで。
exe（に関連付けられた）のアイコンの取得

		/// <summary>
		/// exe（に関連付けられた）のアイコンの取得
		/// </summary>
		/// <returns></returns>
		private Icon GetExeIcon()
		{
			var path = Assembly.GetEntryAssembly().Location;
			return Icon.ExtractAssociatedIcon( path );
		}
Reactの環境とかデプロイとかにトライしたメモ

とりあえずやったことをコードレベルでメモっておきたかった。

#インストール

##React本体
```
mkdir react && cd react
npm install react
```

##Add-on的な
- react-tools 
- react-rooter

をとりあえず入れる。
```
npm install react-tools react-rooter
```

##デプロイとか
- browserify
- reactify
- gulp 
- browser-sync
- vinyl-source-stream

を一気にインストールする。
```
npm install browserify reactify gulp browser-sync vinyl-source-stream
```

##Gitも入れる
やらかした時に戻れた方がいいもんね。

```
git init
```
###.gitignoreでライブラリを管理外にしておく
```
node_modules/
gulpfile.js
```

#構築準備

##gulpの設定
サーバー準備したり、Browserifyの設定したり。
```
var gulp = require('gulp');
var browserify = require('browserify');
var browserSync = require('browser-sync');
var source = require('vinyl-source-stream')

gulp.task('default',
  ['browser-sync'],function(){
    gulp.watch("./src/*.html", ['bs-reload']);
    gulp.watch("./src/app.js",['browserify']);
  }
);

// Static server
gulp.task('browser-sync', function() {
   browserSync({
       server: {
           baseDir: "./"
       }
   });
});

// Reload all Browsers
gulp.task('bs-reload', function () {
    browserSync.reload();
});

gulp.task('browserify', function(){
  return browserify({
            entries: './src/app.js',
            transform: ['reactify']
          })
          .bundle()
          .pipe(source('bundle.js'))
          .pipe(gulp.dest('./build'));
})
```


#この先生きのこる流れ
- gulpfileの設定
- react-rooterを使う
- 簡単なサンプルを作ってみる
- ビルドする

#参考にした記事
- [Gulp(React.js+Browserify)でyak shaving](http://qiita.com/yymm@github/items/1607084a78a92db9e682)
-
FuelPHPでユーザー毎の言語切り替えに対応する

# はじめに

多言語切り替えのアプリケーションの実装にあたり、

> [FuelPHPで日英などの多言語切り替えに対応する](http://qiita.com/ogaworks/items/38132f987869d8536260)

こちらを参考にしましたが、既に読み込んでいる言語ファイルについては適用されなかったのと、```bootstrap.php```に書いちゃうのがなんともあれだなと思ったので少し改良してみました。

参考記事では```bootstrap.php```の```Fuel::init('config.php')```の直後に追記していましたが、Coreを読んでみたところ```Fuel::init()```の最後の方で```app_created```イベントを発火させているので、タイミング的にはほぼ同じだと思います。

# 実装

## 概要

* アプリケーション初期化後のイベントで言語を切り替える
* Configの設定だけでなく、既に読み込んだ言語ファイルも上書きする

## ソース

```php:fuel/app/config/event.php
<?php 
return array(
	'fuelphp' => array(
		'app_created' => function()
		{
			//change language
			if( 1 ){
				Config::set('language','en');
				Config::set('locale','en_US');
				
				$array = \Config::get('always_load', array());
				if (isset($array['language']))
				{
					foreach ($array['language'] as $lang => $lang_group)
					{
						\Lang::load((is_int($lang) ? $lang_group : $lang), (is_int($lang) ? true : $lang_group), 'en', true, true);
					}
				}
				
			}
		}
	),
);
```

#おわり

この状態で、Configのlanguageに```ja```が指定されていても強制的に```en```に切り替わります。
あとは、切り替えた言語をクッキーにセットするなり、それを判断するなりして切り替えてもらえればいいと思います。
smallbasic ゲームスレッド

#サンプル
```
Sub setup
  paddle = Shapes.AddRectangle(120, 12)
  ball = Shapes.AddEllipse(16, 16)
  GraphicsWindow.FontSize = 14
  GraphicsWindow.MouseMove = OnMouseMove
  score = 0
  PrintScore()
  Sound.PlayBellRingAndWait()
  x = 0
  y = 0
  deltaX = 1
  deltaY = 2
EndSub

Sub loop
RunLoop:
  x = x + deltaX
  y = y + deltaY  
  gw = GraphicsWindow.Width
  gh = GraphicsWindow.Height
  If (x >= gw - 16 Or x <= 0) Then
    deltaX = -deltaX
  EndIf
  If (y <= 0) Then
    deltaY = -deltaY
  EndIf 
  padX = Shapes.GetLeft(paddle)
  If (y = gh - 28 And x >= padX And x <= padX + 120) Then
    Sound.PlayClick()
    score = score + 10
    PrintScore()
    deltaY = -deltaY
  EndIf
  Shapes.Move(ball, x, y)
  Program.Delay(5)  
  If (y < gh) Then
    Goto RunLoop
  EndIf  
  GraphicsWindow.ShowMessage("Your score is: " + score, "Paddle")
  Program.End()
EndSub
  
Sub OnMouseMove
  paddleX = GraphicsWindow.MouseX
  Shapes.Move(paddle, paddleX - 60, GraphicsWindow.Height - 12)
EndSub

Sub PrintScore
  GraphicsWindow.BrushColor = "White"
  GraphicsWindow.FillRectangle(10, 10, 200, 20)
  GraphicsWindow.BrushColor = "Black"
  GraphicsWindow.DrawText(10, 10, "Score: " + score)
EndSub
  
setup()
loop()
```
Vagrant: VMのCPUの数をホストマシンのCPUの数に合わせて変更したい

チームで開発に取り組んでいると、メンバーによって開発に使っているマシンの性能がちがうことがあります。例えば、僕はMacBook Pro 15インチでCPUが4つ乗っているものを使っていますが、別のメンバーはデュアルコアのMacBook Proを使っていたりします。

Vagrantでは、VMのCPUの数をVagrantfileに設定することができますが、チームでCPUの数が違うマシンを使っていると、どうしてもCPUが少ないメンバに合わせて設定することになってしまいます。そうなると、CPUが多いマシンでは、せっかくの性能がVMで活かせなくなります。

VagrantfileでホストマシンのCPUの数に応じて、VMのCPUの数を自動的に変更する方法をご紹介します。Macでは`sysctl -n hw.ncpu`で、Linuxでは`nproc`でCPUの数を取得できます。これをVagrantfileに埋め込み、VMの設定に使うようにします。

以下のサンプルは、ホストマシンのCPUの数を取得し、VMのCPU数にそのまま設定するものです。VMのproviderにはVMware Fusionを使っていますが、Virtualbox用の設定を書くこともできます。また、取得した`cpus`を2で割ったり、ホスト用に1つCPUを残しておきたければ、`cpus - 1` するなど、好きなように調整することもできます。

```ruby:Vagrantfile
...

  host = RbConfig::CONFIG['host_os']

  case host
  when /darwin/ # mac
    cpus = `sysctl -n hw.ncpu`.to_i
  when /linux/
    cpus = `nproc`.to_i
  else
    cpus = 2
  end

  config.vm.provider "vmware_fusion" do |v|
    v.vmx["numvcpus"] = cpus
  end

...
```
任意の要素のスムーススクロールのみ無効にする


ページ内リンクはデフォルトでスムーススクロールするけど、特定の場所だけはさせたくない（タブ etc）場合の対処法。

```coffee:coffee
  $('a[href^=#]'+'a[href!=#]').on('click.smoothScroll'
    (e)->
      $(
        if (navigator.userAgent.indexOf('Opera') isnt -1)
        then (
          if document.compatMode is 'BackCompat'
          then 'body'
          else 'html'
        )
        else 'html,body'
      ).animate(
        scrollTop:$($(this).attr('href')).offset().top - 20
      ,
        easing:'easeInOutCirc',
        duration:1000
      )

      e.preventDefault()
      return
  )

  ...

  $('.tab-item').find('a').on('mouseenter',
    (e)->
      $(this).off('click.smoothScroll')
  )

  $('.tab-item').find('a').on('click',
    (e)->
      e.preventDefault()
  )
```

```jade:jade
doctype html
html(lang="ja")
  head
  body
    #container

  	  ...
  	  
  	  ul
	      li.tab-item
	        a(href="#a") a
	      li.tab-item
	        a(href="#b") b
	  #a
	  #b

  	  ...

	  a(href='#container') トップへ戻る
```

`on('mouseenter')` でカーソルが `a` タグに入ったと同時に `click.smoothScoll` を `off` する。

`on('click.smoothScroll')` `off('click.smoothScroll')` のように `click.hoge` という名前空間を付けることで、スムーススクロールだけを切ることが出来る。
RubyOnRailsでのTimezoneの設定

* [RubyとRailsにおけるTime, Date, DateTime, TimeWithZoneの違い](http://qiita.com/jnchito/items/cae89ee43c30f5d6fa2c)
* [Railsと周辺のTimeZone設定を整理する (active_record.default_timezoneの罠)](http://qiita.com/joker1007/items/2c277cca5bd50e4cce5e)

を参考に

* 素のRubyならTimeクラスを使う。
* RailsならTimeWithZoneクラスを使う。

```
# currentはapplication.rbのタイムゾーンを使う。戻り値もTimeWithZone。
l Time.current
=> 2014/12/31 10:00:00, EST, ActiveSupport::TimeWithZone

# zone.nowはcurrentと同じ。
l Time.zone.now
=> 2014/12/31 10:00:00, EST, ActiveSupport::TimeWithZone
```
よりTime.zone.nowを使えばapplication.rbの設定を使ってくれそう
とあるがリファレンスたどって要調査

現在の設定は
* config.time_zone = 'Tokyo'
* config.active_record.default_timezone = 'local' (DBのtimezoneに合わせる)
* DBはJST(Asia/Tokyo)

ってそもそもJSTに寄せようとしているが良いのか。って所も要調査だが。
RubyOnRailsで.pngや.jpgへのエラー対応

## エラー内容
本来404エラーが返ってきたら、rescue_fromで404に飛ばしているが
/~.pngや/~.jpgにアクセスすると

```
Missing template errors/error_404 with {:locale=>[:ja], :formats=>[:png], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. 
```
そんなテンプレートないよって言われる

## 原因
* .pngにアクセスした場合、formats=>[:png]になる
* 今回はErrorsControllerからerrorファイルを探しているがデフォルトのformatsは.html.erb
* そして.pngなんてもちろんviews/errorにない。ゆえにmissing templateと怒られた。

## 対策

application_controller.rbに以下を書いて

```
def check_formats
    respond_to do |format|
      format.html { return true }
      format.all { render nothing: true, status: 404 and return false }
    end
  end
```

controllerにある全てのrenderに対して

```
render 'index', layout: 'top_layout' if check_formats
```

と記入することで対応で大丈夫か。みんなどうしてるんだろう。

## 参考
*[stackoverflow](http://stackoverflow.com/questions/15301335/internal-server-error-500-on-missing-image-file-rails-3-2-12)
*  [Github](https://github.com/rails/rails/blob/a06f13099e293ef7b2d7b31909b4f7a7e99edecc/actionpack/lib/action_controller/metal/mime_responds.rb#L8)
ActiveRecordでのpluckは積極的に使うべきなのでは

ActiveRecordObject作らずに文字配列返してくれそう
ゆえに早そう。あまり意識してなかった。

```
def pluck(*column_names)
      column_names.map! do |column_name|
        if column_name.is_a?(Symbol) && attribute_alias?(column_name)
          attribute_alias(column_name)
        else
          column_name.to_s
        end
      end

      if has_include?(column_names.first)
        construct_relation_for_association_calculations.pluck(*column_names)
      else
        relation = spawn
        relation.select_values = column_names.map { |cn|
          columns_hash.key?(cn) ? arel_table[cn] : cn
        }
        result = klass.connection.select_all(relation.arel, nil, bound_attributes)
        result.cast_values(klass.attribute_types)
      end
    end
```

* [Github](https://github.com/rails/rails/blob/055d9993b5a47ba126e3e6f7a533006bff9e715a/activerecord/lib/active_record/relation/calculations.rb)
ActionControlelr::Parameters

formのデータをcontrollerでさばくときに使う
``params.require(:form_name).permit(:clm1, :clm2, ...)```
だが、
requireって何？と思い調べた

```raise params.permit(form: ['clm1', 'clm2']).inspect```
とすると
```{"form"=>{'clm1 => ":id"}}```
そりゃ出る。まぁ書き方がsimpleになるから
``params.require(:name).permit(:clm1, :clm2, ...)```
使おう感じ。

requireって名前わかりづらいなあ

#### 参考
* [GIthub](https://github.com/rails/rails/blob/2c16acde0dd75e77d38b25b1254d4cffc14e81a6/actionpack/lib/action_controller/metal/strong_parameters.rb)
javascriptでformのsubmit

```
form_name = 変数 
document.form_name.submit();
```
だとerror
変数入れるときは

```
form_name = 変数
document.forms[form_name].submit();
```

reference以外に頼ると、eval使ったり（非推奨）などいろんなやり方出てくるが
日本語だとこの書き方あんま出てこないからmemo。
* [reference(]http://www.w3schools.com/jsref/coll_doc_forms.asp)
ダブルクォーテーションとシングルクォーテーションの使い分け

#### シングルクオーテーション:
  * 変数展開しない
  * ダブルクオーテーションより早い

#### ダブルクオーテーション
  * 変数展開する
  * シングルクオーテーションより遅い

ゆえに変数展開の必要があるときを覗いて基本シングルクオーテーションの認識
(php, ruby, mysql, htmlに限らない）

* [参照](http://ips.nekotype.com/1091/)
facebookソーシャルボタンの「サービスのページに対するいいね」と「facebookページ自体に対するいいねの使い分け」

運営しているサービスの各ページに対するいいねは

```
<a class="fb-like" data-href="URL"  data-layout="button_count" data-action="like" data-show-faces="true" data-share="false"></a>
```

のように、そのページのURLを以下のように貼る。
facebookページ自体のいいねをつけるときは

```
<a class="fb-like" data-href="https://www.facebook.com/'Facebook_page_url'"  data-layout="button_count" data-action="like" data-show-faces="true" data-share="false"></a>
```

のようにfacebookページのURLを貼ると出来る
git local branch 一括削除

# はじめに

マージ前のブランチで動作検証してると、大量にあふれてくるので、一括でローカルブランチを消したい時に使います

# branch 一括削除

## 前提

* peco と zsh 使ってます  
* alias 切ってます

## コマンド

peco のブランチ一覧で `[Ctrl+Space]` で削除したいブランチを選択

```
gb P X git branch -D
```

alias を展開すると、以下のような感じ

```
git branch | peco | xargs git branch -D
```


気分で `--merged` オプション追加したり、`-D` を `-d` にします
くたばれ"Helvetica Neue"と腹が立って作ったブックマークレット

#なぜ腹がたったのか
　最近、小洒落たサイトやWebアプリなんかにはよく登場するお洒落フォントHelvetica Neue。
僕の環境(Windows 8.1搭載のhpのノートブック)ではこう見える。

![helveticaneue.jpg](https://qiita-image-store.s3.amazonaws.com/0/78606/3fc9205b-73b3-ba52-ef05-863fbe0f61c5.jpeg)

...くっそ見づれえ！！なにこれ、Macだと綺麗に見えるんすか？Windows使ってる情弱な俺が悪いんすか。
とまあ、とくにAPIのドキュメントとかにこのフォントが使われているともう読む気もなくなるし、頑張って読み進めても全然頭にはいらないし、ふざけんな！フォント変えてやる！って思い立って作ってみたのが、このブックマークレットです。

#こんなかんじ
```js
javascript:var%20h=document.getElementsByTagName('html');var%20b=document.getElementsByTagName('body');h[0].setAttribute('lang','ja');bs=b[0].getAttribute('style');bs='font-family:%20Arial,Helvetica,sans-serif;'+bs;b[0].setAttribute('style',bs);
```
実作業時間15分くらい。もっと良い書き方がありそう。

#実行結果
ふぁー！みやすいっす。
![goodbyehelveticaneue.jpg](https://qiita-image-store.s3.amazonaws.com/0/78606/97f4b4fb-679a-2acb-a487-b52fe2ab2140.jpeg)

こんな簡単にできるならもっと早くやっとけばと後悔。Helvetica Neueを憎んでやまない方（いるのでしょうか）は是非。
Pepper、NAOのアクセント確認について

前回の非エンジニア丸出しの投稿をストックして頂いた方がいらして、恥ずかしいやら申し訳ないやら…。

さて、今回も大したことありません。

PepperやNAOにそのまま喋らそうとすると、アクセントが違ったりすることが普通です。なので、ちょっとの修正（人名とか会社名とか部署名とか）だとしても、結構調整に時間がかかってしまうことがあったりします。
もちろん「ロボットだからアクセントはそれほど拘らない」という方もいらっしゃれば、「プロジェクトの命運がかかっているから、全て完璧で」という方もいらっしゃいます。

PepperやNAOに関しては、音声合成エンジンは<a href="http://www.ai-j.jp/archives/6953">株式会社エーアイ</a>が開発したものを使っています。（ここまでは公開されている情報なのでご存じの方もいらっしゃると思いますが）
Pepperの声は発表後直ぐに、ネット界隈で声優の<a href="http://tamiyasu.jp/">民安ともえさん</a>じゃないかという話が挙がってきました。

少し調べてみると株式会社エーアイさんのOEM商品を販売している<a href="http://www.ah-s.com/">株式会社AHS</a>さんが読み上げソフトとして民安ともえさんを起用した<a href="http://www.ah-soft.com/voiceroid/maki/">「VOICEROID+ 民安ともえ EX」</a>(http://www.ah-soft.com/voiceroid/maki/)</a>を発売しているではありませんか！！

その上、サイトを開くと「フリーテキスト音声」というサービスがあり、好きな文字を入れると「VOICEROID+ 民安ともえ EX」の音声で読み上げてくれます（変更できるのは速度とピッチのみです）。これは使えるということで、アクセントに難アリのものが出てきたら、先ずこれを使ってアクセントに合う文字の組み合わせを探した後、Choregrapheに改めて反映させたりしています。

例えば、「AKB48」を一般的なアクセントで発音させる場合、そのままだと「エーケービーヨンジュウハチ」と読んでしまいます。アクセントに近く読み上げさせるためには『AKB fortyエイト』と入力するとそれっぽく聞こえます。
こんな風に色々な組み合わせでアクセントを調整していきます。下手をすると漢字を当てた方がアクセントがピッタリということも…。

アクセントに関しては一癖も二癖もあるので、チューニングして落とし所見つけるまで苦労が絶えず、かつ時間がかかるということをクライアント様にもご理解して欲しいと悩む今日この頃です。
ビューに表示されている順番で選択文書を取得

# ビューで選択した文書をビューのソート順を保って取得するコード

* 実処理は省略

ビューのアクションボタン等に作成します。

```vbnet:GetDocument
	Dim ws As New NotesUIWorkspace
	Dim vec As NotesViewEntryCollection
	Dim ve As NotesViewEntry
	Dim dc As NotesDocumentCollection
	Dim doc As NotesDocument
	
	Set dc = ws.CurrentView.Documents	' 選択文書を取得
	Set vec =  ws.CurrentView.View.AllEntries	' ビューの全エントリを取得	
	
	' ビューの先頭から末尾までビューの表示順に順次取得
	Set ve = vec.GetFirstEntry
	Do Until ve Is Nothing
		' 取得したデータが選択文書のリストに含まれるか判定し、含まれる場合のみ処理を行う
		Set doc = dc.GetDocument(ve.Document)
		If Not doc Is Nothing Then
			' ここに処理を記述
		End If
		
		Set ve = vec.GetNextEntry(ve)
	Loop

```
telnetrcを使う

もうさっきまで知らなくって恥ずかしいのですが~/.telnetrcに設定を記述しておくことでtelnet [ip]だけで自動的に適用されます

```
DEFAULT
  crmod on
  echo on
```

毎回telnet対話モードに入ってから設定していました。これで少し楽になる・・・
Laravel5でModelイベントのハンドラを登録する

あるModelのアイテムを削除したときに関連Modelも削除したり、ストレージのデータを削除したりしたいことがある。

Laravel5のModelには以下のようにイベントが定義されている。

```php:vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php
	public function getObservableEvents()
	{
		return array_merge(
			array(
				'creating', 'created', 'updating', 'updated',
				'deleting', 'deleted', 'saving', 'saved',
				'restoring', 'restored',
			),
			$this->observables
		);
	}
```

それぞれのイベントにハンドラを登録するときは以下のように各モデルのbootメソッドで実装。

```php:app/Models/Sample.php
class Sample extends Model
{
	protected $table = 'samples';

	protected static function boot()
	{
		parent::boot();

		self::updating(function($sample){
			return $sample->onUpdatingHandler();

		});
		self::deleted(function($sample){
			$sample->onDeletedHandler();
		});
	}

	private function onUpdatingHandler()
	{
		//update時刻を記録したり何かする
		return true; //キャンセルしたいときはfalseを返す
	}

	private function onDeletedHandler()
	{
		//ストレージデータを削除したり関連Modelを削除したりする
	}
}
```

updatingやdeletingなどのing系イベントはfalseを返すとキャンセルされる。

```php:vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php
			if ($this->fireModelEvent('deleting') === false) return false;
```