OmniAICreator/Qiita-1.07M huggingface dataset:
[Java]全要素の初期値が0の固定長多次元配列を動的に生成してみる

##前提の確認
Javaでプリミティブ型の配列を宣言する際に、初期値をセットしなければ、自動的に全要素の初期値が0になることは衆知の事実です。今まで毎回0代入をループ回していた自分はかなりの~~うましか~~慎重派でしたね。

##実演してみる
今回はそれに加えて要素数をint型の変数で設定していくサンプルをお見せします。

```java:コード例

public class Test {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		
		int x = 20;
		int y = 6;
		
		int[][] n = new int[y][x];
		
		//配列を表示する
		for (int[] s : n) {
			
			//一行ずつカンマ区切りの文字列を生成していく
			StringBuilder sb = new StringBuilder();
			for (int i : s) {
				sb.append(i + ", ");
			}
			System.out.println(sb);
		}
	}

}
```

##結果
```
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
```

##解説
まず、最初の二行で要素数を設定します。今回は$x=20\ , y=6$としました。
次に、`int[][] n = new int[y][x];`として二次元配列nを宣言しておりますが、
ここで注意していただきたいのは、要素数を行→列(この例で言うならばy→x)と並べないと直感的な結果にはなりにくいということです。

詳しくは割愛しますが、もし`int[x][y]`としてしまうと、この例であれば表示の際に縦に20、横に6個の0が表示されてしまいます。
Swiftのコードレビューポイント

#プレレビュー

本格的にレビューする前にざっくり見るポイント

- コンパイルが通る
- 単体テストが通る
- 警告が出ていないか
- gitのdiffチェック


# 重点的に見る
コードレビューで抑えておかないと後工程で気が付きにくいバグを仕込む部分

## マルチスレッド
- 重い処理（通信、ローカルデータアクセスなど）をmainスレッドから切り分けられるか
- アニメーションなどUIViewの描画に関わる処理をmainスレッド以外のスレッドで叩いていないか
- サブスレッドで動く前提の処理が、想定外のスレッドで叩かれていないか


## ネットワークアクセス
- alamofire、SDWebImageなどプロジェクトの標準で統一できているか
- connectionの設定を適切に引き回せているか


## メモリリーク
strongの循環参照が発生していないかチェック

- @IBOutletでweakが抜けてないか
- クロージャ、ブロックの中でselfや他の変数をstrong参照していないか

クロージャ内でのweakとunownedの使い分けについてはこちら
http://qiita.com/susieyy/items/f57f9362b8e0a89023cb

- addsubviewしたviewが適切にremoveFromSuperViewされてるか(viewの場合は？cellの場合は？)



## storyboard,xib
- 変更のないコミットがされていないか
- 破壊的な変更がされていないか

#その他チェックするポイント
- 正確さ
- 読みやすさ
- パフォーマンス
- 再利用性
- スタイル、コード規約
- アーキテクチャの使い方


##参考
https://github.com/jarinosuke/swift-style-guide/blob/master/README_JP.md

http://ninjinkun.hatenablog.com/entry/2014/04/24/125151

https://github.com/github/swift-style-guide
ruby2.2に上げたらwarning: circular argument reference - reflectionエラーが出る

- Ruby1.9.2-p326から2.2.3p173にアップ。Railsは3.2.17
 - こんなwarningが出ていてテストもこけている

```
…/.rbenv/versions/2.2.3/gemsets/3.3.x_version_up/gems/activerecord-3.2.17/lib/active_record/associations/has_many_association.rb:53: warning: circular argument reference - reflection
…/.rbenv/versions/2.2.3/gemsets/3.3.x_version_up/gems/activerecord-3.2.17/lib/active_record/associations/has_many_association.rb:57: warning: circular argument reference - reflection
…/.rbenv/versions/2.2.3/gemsets/3.3.x_version_up/gems/activerecord-3.2.17/lib/active_record/associations/has_many_association.rb:61: warning: circular argument reference - reflection
…/.rbenv/versions/2.2.3/gemsets/3.3.x_version_up/gems/activerecord-3.2.17/lib/active_record/associations/has_many_association.rb:80: warning: circular argument reference - reflection
NoMethodError: undefined method `name' for nil:NilClass
```

- gemのコードを見てみるとreflection = reflectionでエラーになってるらしい

```has_many_association.rb
 53         def has_cached_counter?(reflection = reflection)
 54           owner.attribute_present?(cached_counter_attribute_name(reflection))
 55         end
```

- 以下のように書き換えると取り敢えずwarning出なくなりテストも通るようになる

```has_many_association.rb
 53         def has_cached_counter?(reflection = reflection())
 54           owner.attribute_present?(cached_counter_attribute_name(reflection))
 55         end
```

- [rails3.2.22](https://github.com/rails/rails/blob/v3.2.22/activerecord/lib/active_record/associations/has_many_association.rb)で修正されている。Railsは後程上げるので今回は取り敢えずこれでいいかな
Unicorn設定完全版

タイトルは釣りです。すいません。

とりあえず`unicorn`を設定しなければという人向け。

何もわからない人は以下のファイルを配置すれば、Unicornを起動できます。

```rb:rails_root/config/unicron.rb
rails_root = File.expand_path('../../', __FILE__)

worker_processes 2
working_directory rails_root
timeout 10

ENV['BUNDLE_GEMFILE'] = rails_root + "/Gemfile"

stderr_path File.expand_path('../../log/unicorn_stderr.log', __FILE__)
stdout_path File.expand_path('../../log/unicorn_stdout.log', __FILE__)

listen File.expand_path('../../tmp/sockets/unicorn.sock', __FILE__)
pid File.expand_path('../../tmp/pids/unicorn.pid', __FILE__)

preload_app true
# GC.respond_to?(:copy_on_write_friendly=) and GC.copy_on_write_friendly = true

# USR2シグナルを受けると古いプロセスを止める。
before_fork do |server, worker|
  defined?(ActiveRecord::Base) and
      ActiveRecord::Base.connection.disconnect!

  old_pid = "#{server.config[:pid]}.oldbin"
  if old_pid != server.pid
    begin
      sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
      Process.kill(sig, File.read(old_pid).to_i)
    rescue Errno::ENOENT, Errno::ESRCH
    end
  end
end

after_fork do |server, worker|
  defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
end
```

必要に応じて以下の値を変えてください。

```rb
worker_processes 2
timeout 10
```

詳細を知りたい方は[Unicornの設定](http://qiita.com/syou007/items/555062cc96dd0b08a610)をみてください。
VBA超入門

突如数行vba書かなきゃならなくなった時に必要だった最低限の知識
VBA書いてると社会人になったな・・・って気分になるね・・・。

## 変数宣言

```Dim hoge As 型```


## 配列
- 宣言
   ```Dim array() As 型```

- i番目の要素へのアクセス 
   ```array(i)```

- 長さ 
    ```UBound(array)```


## 関数
- 引数がない関数
   ```Sub 戻り値名(引数（カンマ区切り）) As 戻り値型```

- 引数のある関数 
    ```Function```

## よく使うやつ

- セルが空かどうか
  ```IsEmpty(Cell(行, 列))```

- デバッグプリント
  ```Debug.Print```
iOS9での幅取得


iOS9での画面幅取得は`document.documentElement.clientWidth`を使用するといいみたい。

iOS8以前では`window.innerWidth`で画面幅を取得していました。
画面幅を基準にして画像などの幅を変更していた場合、初回読み込み時はいいのですが、縦→横→縦とiPhoneを回転させたときに横向きの画像幅を引き継いでしまいます。
画像の幅が画面幅（clientWidth）より大きいと、画像の幅に合わせて画面幅（innerWidth）を変えてしまうのですね。
Basic認証によるページへの アクセス制限をかけたかった

##しようとしたこと

お客さんに基調色のチェックをしてもらいたくて
テストページに.htaccessを入れてBasic認証によるページへの
アクセス制限をかけたかった

##.htaccessファイルを作成

```lang:.htaccess
AuthUserFile サイトのフルパス/(制限をかけたいディレクトリ)/.htpasswd　#.htpasswdのフルパスを記載
AuthGroupFile /dev/null				
AuthName "Please enter your ID and password" #ウィンドウに表示される文字列
AuthType Basic
require valid-user 
```

##.htpasswdファイルを作成

許可するユーザー名とパスワードを入力。
パスワードは暗号化をしないといけない。（自分はこれで引っかかる(´；ω；｀)）

```lang:.htpasswd
hoge:haT9jB5KPnfSM　#ランダムになってるがこれじつは " hogehoge "
```

暗号化はググると色々でてくるよ！
[▶たまたま見つけたよさ気なサイトはこちら](http://www.htaccesseditor.com/)
syslog関数をラップする




```c:a.c

#include <stdarg.h>
#include <syslog.h>

void my_syslog( int pri, const char *format, ... ) {

  va_list arg;
  		
  va_start( arg, format );
  vsyslog( pri, format, arg );
  va_end( arg );
  
}

int main( int argc, char **argv ) {
  
  char name[] = "housemaid";
  int age = 13; // 13 years old and housemaid!

  my_syslog( LOG_INFO, "name=%s, age=%d", name, age );
  
  return( 0 );
  
}

```

<pre>
[todanano@localhost tmp]$ gcc a.c
[todanano@localhost tmp]$
[todanano@localhost tmp]$ ./a.out
[todanano@localhost tmp]$
[todanano@localhost tmp]$ cat /var/log/messages
Oct 20 09:52:59 localhost a.out: name=housemaid, age=13
[todanano@localhost tmp]$
</pre>


可変長引数の話。

上記例では、単に自作した関数に渡して、同じ内容をvsyslog関数に渡しているだけですが、
特定のpriの場合だけvsyslog関数を実行する、というような使い方ができると思います。

v～関数があれば、大体同じようにラップできます。
(vprintfとか、vfprintfとか)
Cannot create a RDS Readreplicaが作成できない。(publicly accessible DBInstance because customer VPC does not support DNS resolution and/or hostnames. )

# RDS readreplicaを作成できないとき

```
Cannot create a publicly accessible DBInstance because customer VPC does not support DNS resolution and/or hostnames. (Service: AmazonRDS; Status Code: 400; Error Code: InvalidVPCNetworkStateFault; Request ID: xxxxxxx-yyyy-zzzz-aaaa-bbbbbbbbbbbbb)
```

Readreplicaの作成時にこんなエラーメッセージがでた場合は、VPCの設定で DNSホスト名が　"いいえ"になっている可能性があるため確認する。

VPC > VPCの一覧 > VPCを選択し、「VPCホスト名の編集」

"いいえ"になっていたら"はい"に変更。
Master側、RR側の両方を確認する。
rescue_fromメソッドを使ってエラーハンドリングする方法

アプリケーション中に例外が発生した場合に、適切な例外処理を必要がある。Railsでは、rescue_fromメソッド例外処理を記述することができる。


## エラーハンドリング処理の追加例

app/controllers/application_controller.rb

```
class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  # 500 Internal Server Error(システムエラー)を発生させる
  rescue_from Exception, with: :error_500

  # 404 Not Found 指定したページがない、アクセス権がない
  rescue_from ActiveRecord::RecordNotFound, ActionController::RoutingError, with: :error_404

  # 中略

  def error_500(e)
    logger.error "error_500: #{e.message}"
    logger.error e.backtrace.join("\n")
    render 'error_500', status: 500, formats: [:html]
  end

  def error_404(e)
    logger.error "error_404: #{e.message}"
    logger.error e.backtrace.join("\n")
    render 'error_404', status: 404, formats: [:html]
  end
end
```

app/views/error_500.html.erb

```
エラーが発生しました。
```

app/views/error_404.html.erb

```
ご指定になったページは存在しません。
```

config/routes.rb

```
Rails.application.routes.draw do
  resources :hoge

  root "hoge#index"

  match "*path" => "application#error_404", via: :all
end
```

ルーティングに定義されていないURLが指定された時のエラーはRack MIddlewareで発生するので、rescue_fromメソッドでキャッチできない。ルーティング設定の最後にすべてのURLをキャッチする設定を追加して対応する。


※resourceやresourcesで作成したルーティングは、作成していないアクションを含めていることがある。onlyオプションやexceptオプションを利用して不要なルーティングを除外することで、作成していないアクションを実行しようとして500エラーになることを防ぐことができる。
Mac OS X El Capitan - HomebrewでImageMagickのインストール


OS X El Capitanへアップデートすると、新しいセキュリティのrootlessが影響して/usr/localが作れないとか、パーミッションで弾かれるとか難しい問題に直面するようです。

詳しくは以下にまとめられているので参考にさせていただきました。

[Mac - HomebrewはEl Capitanへアップグレードする前に入れておく - Qiita](http://qiita.com/riocampos/items/525ec4b35744ad586c5a)

---

# はじめに

このドキュメントは、[Homebrew インストール](http://brew.sh/index_ja.html)済みでOS X El Capitanへアップデート後にImageMagickをインストールしたときのエラーと解決方法（一例）をまとめています。

---

# 手順

1. /usr/local パーミッション変更
2. ローカルリポジトリのアップデート(optional)
2. brew アップデート(optional)
3. ImageMagick インストール

## 1. /usr/local パーミッション変更

```
$ sudo chown $(whoami):admin /usr/local && sudo chown -R $(whoami):admin /usr/local
```

上記の問題解決のため、パーミッションを変更します。

```sh:変更前
drwxr-xr-x    21 root  wheel   714B 10 15 19:30 local
```

```sh:変更後
drwxr-xr-x    21 nor   admin   714B 10 15 19:30 local
```

## 2. ローカルリポジトリのアップデート(optional)

brew updateするとリポジトリのmargeエラーのようなメッセージが表示されたため、リポジトリのアップデートを行います。

```
$ brew --prefix // Homebrewのインストールパスを表示
```

```terminal:command
$ cd $(brew --prefix)
$ git fetch origin
$ git reset --hard origin/master
```

## 3. brew アップデート(optional)

```
$ brew update
```

## 4. ImageMagick インストール

```
$ brew install imagemagick
..
中略（依存ライブラリのインストールなどが行われます）
..
==> Installing imagemagick
==> Downloading http://www.imagemagick.org/download/releases/ImageMagick-6.9.1-1
######################################################################## 100.0%
==> ./configure --disable-osx-universal-binary --prefix=/usr/local/Cellar/imagem
==> make install
 /usr/local/Cellar/imagemagick/6.9.1-10: 1447 files, 22M, built in 2.9 minutes
```

以上
unite.vimのgrep検索にhighwayを使う

新しく高速な検索ツールを作成していただいたということで早速試してみました！
[highway という高速検索ツールを作りました](http://tkengo.github.io/blog/2015/10/19/release-highway/)
導入方法は上記記事にあるため割愛します．

以前は，この記事を参考にagを使っていました．
http://qiita.com/0829/items/7053b6e3371592e4fbe6

highwayの設定．

```vim
" grep検索
nnoremap <silent> ,g  :<C-u>Unite grep:. -buffer-name=search-buffer<CR>

" unite grepにhw(highway)を使う
if executable('hw')
  let g:unite_source_grep_command = 'hw'
  let g:unite_source_grep_default_opts = '--no-group --no-color'
  let g:unite_source_grep_recursive_opt = ''
endif
```

記事に書かれてる通り，agより速くていいですね(あとCPUリソース消費も少ないようです)．

# railsで試しにgrep検索

## ag

[![https://gyazo.com/075217bcdad80c828ca519c25e962cc0](https://i.gyazo.com/075217bcdad80c828ca519c25e962cc0.gif)](https://gyazo.com/075217bcdad80c828ca519c25e962cc0)

## hw

[![https://gyazo.com/75e0e2bb40a40b1e6c25ff7ac7947da3](https://i.gyazo.com/75e0e2bb40a40b1e6c25ff7ac7947da3.gif)](https://gyazo.com/75e0e2bb40a40b1e6c25ff7ac7947da3)

速い！
JSで返す時に ActionController::UnknownFormat がでたら

# ActionController::UnknownFormat

コントローラーにアクセスしてくるリクエストのフォーマットと、コントローラーが待ち受けてるフォーマットが合っていない時に発生する。

## コントローラー

Ajaxアクセス予定だったので、こんな風に書いてた。
(format.jsしか待ち構えてない)

```rb
def create
  # ...
  respond_to do |format|
    if @comment.save
      format.js
    end
  end
end
```

## 間違いビュー

```haml
= simple_form_for [ @topic, @topic.comments.new ] do |f|
  = f.input :comment
  = f.button :submit, 'コメント投稿', class: "btn btn-primary"
```

``` remote: true ``` し忘れてるので、htmlフォーマットを要求している状態。

## 正しいビュー

```haml
= simple_form_for [ @topic, @topic.comments.new ], remote: true do |f|
  = f.input :comment
  = f.button :submit, 'コメント投稿', class: "btn btn-primary"
```

ぐぬぬ・・こんなことで・・ハマるとは；；
統計を学ぶためのオンライン講義(MOOC)まとめ

[r-wakalang](https://github.com/TokyoR/r-wakalang)で統計を勉強するためのオンライン講義(MOOC)に何があるのかを質問したら、思ったより回答が集まったのでまとめてみる。

- [Introduction to Statistics with R - DataCamp](https://www.datacamp.com/introduction-to-statistics)
- [Data Analysis & Statistics Courses - edX](https://www.edx.org/course/subject/data-analysis-statistics)
- [Data Science - Coursera](https://www.coursera.org/specializations/jhudatascience)
- [統計学Ⅱ:推測統計の方法 - gacco](https://lms.gacco.org/courses/course-v1:gacco+ga047+2015_10/about)
- [社会人のためのデータサイエンス入門 - gacco](https://lms.gacco.org/courses/course-v1:gacco+ga031+2015_11/about?dcmancr=909f1512c059213b.1445132755949.9349.1445132766268)
- [Intro to Statistics - UDACITY](https://www.udacity.com/course/intro-to-statistics--st101)
- [A/B Testing - UDACITY](https://www.udacity.com/course/ab-testing--ud257)
- [Intro to Machine Learning - UDACITY](https://www.udacity.com/course/intro-to-machine-learning--ud120)

他にもあればコメント下さい。特に日本語のやつ。

#### 2015/11/19 追加

- [MOOC on Data Science & ML Essentials – Now Available On-Demand](http://blogs.technet.com/b/machinelearning/archive/2015/11/18/mooc-on-data-science-amp-ml-essentials-now-available-on-demand.aspx?utm_source=twitterfeed&utm_medium=twitter)

## その他

- [swirl: Learn R, in R.](http://swirlstats.com/)
  - 参考：[swirl パッケージでインタラクティブ学習 - SlideShare](http://www.slideshare.net/hoxo_m/swirl-33702974)
- [R言語入門 - ドットインストール](http://dotinstall.com/lessons/basic_r)
- [Learning R: Index of Online R Courses, October 2015 ](http://blog.revolutionanalytics.com/2015/10/learning-r-oct-2015.html)
ベクトルの中に指定のcharacterがあるか判定


## はじめに

いつもRでの書き方を忘れるので個人的なメモ。

```
> v <- c('ao','kuro','shiro','chairo')
> 'chairo' %in% v
[1] TRUE
> 'kiiro' %in% v
[1] FALSE
```

## 参考
- [R function for testing if a vector contains a given element](http://stackoverflow.com/questions/1169248/r-function-for-testing-if-a-vector-contains-a-given-element)
技術英語 > However, I would prefer to speak with you [privately]. / classified / internal use only / confidential

@ Star Trek Voyager > JETREL

突然やって来た訪問者の言葉

> However, I would prefer to speak with you <font color=red>privately</font>.

privately をつけることで、皆の前では話せないことを別の場所で話したいということを言える。

<hr>
関連して思い出したのは1

http://ejje.weblio.jp/content/classified
> classified information (国家)機密情報.

<hr>
関連して思い出したのは2

http://ejje.weblio.jp/content/Please+keep+this+for+internal+use+only.
> Please keep this for <font color=red>internal use only</font>.
社外秘扱いでお願いいたします。

<hr>
関連して思い出したのは3

http://ejje.weblio.jp/content/confidential
> a confidential talk 打ち明け話.

classified と confidential の違いについては未消化。
Kotlinでクロスプラットフォーム開発 [2]急がば回れ、で、Gradle&Spring Boot入門①。

#0) Gradle&Spring Boot入門する理由

[[1]Android開発環境の導入～実行](http://qiita.com/kmry2045/items/51b4ef66ae99756fc3ce)で書いたように、2015年秋時点、Android StudioにKotlinは簡単に導入でき、良くわかっていなくともとりあえず実行までもっていける。 

...ScalaでAndroid、のツライ歴史とは異なり、、

ただ、背景にあるAndroid StudioのビルドツールGradleを制御するbuild.gradleファイルあたりをさくっと書けるようにならないと、良くわかってない感は解消されないと思った。ということて、急がば回れで、Gradleの記述言語Groovyに少し慣れておこうと考えた。元祖Better javaなGroovy、見ればなんとなくわかるのだけれど、さくっと書ける域に達するには、何か実用的なことをした方が良い。ならば、いずれクロスプラットフォームでweb的な何かをすることになるわけなので、gredleで設定してgroovyで書けるwebフレームワークだろう、と。

jar一つに落とせるコンパクトさと、背景にあるSpringのそうそうたる歴史から、学ぶフレームワークとして、[Spring Boot](http://projects.spring.io/spring-boot/)を選定。JavaベースのSpringBootは当然に、[Kotlinでも書ける](http://siosio.hatenablog.com/entry/2014/12/03/151433)わけで。


## [付記]　"マイクロサービス"との関係
JavaEEに負けず劣らず巨大化したSpringから派生した、spring boot。

...となると、最近のプチ・バズワード、マイクロサービスの話が気になるが、ガチSpringな人の[ここ](http://www.slideshare.net/makingx/spring-boot-spring-boot)とか、NTT-Dな人の[ここ](http://www.nttdata.com/jp/ja/insights/trend_keyword/2015100801.html)とか、を上げておくことにとどめる。webフロントの選択肢にあらかじめSpring Bootを用意しておけば、そのバックエンドが、ScalaでRP&Sparkガチとなった際の分業が楽そうかなとか、想像しつつ。

#1) 先人たちの取り組みを学ぶ
昨年末から始まっている、カンガルーさんの[IntelliJ IDEA で簡単な Spring Boot Project(1.2.x系)](http://ksby.hatenablog.com/entry/2014/12/28/044701)の一連の取り組みが、写経させて頂きたいレベル。ORMは、JPAじゃなくDoma2という選択肢は、[SpringBoot+Doma2+Gradleを試してみた](http://qiita.com/nyasba/items/1e22c2401f3849f9071d)の記事とも重なっていて素敵。

写経では、Javaの代わりにGroovyで実装することにチャレンジしていきたい。敷居は低い、はず！

#2) Spring Bootで実装開始
かんがるーさんの元記事がものすごく熱が入っているので、読み込むだけで時間がかかりそう。
Gradleに慣れることが本来の目的なので、[1.2.5でプロジェクト作成](http://ksby.hatenablog.com/entry/2015/07/04/154706)あたりから気長に始めることだけ記して、いったん、本記事は晒しておく。結果は後ほど。
tmux 2.1 以降でもマウスを有効にする方法

[tmux/CHANGES@310f0a9](https://github.com/tmux/tmux/blob/310f0a960ca64fa3809545badc629c0c166c6cd2/CHANGES) によると、

```
CHANGES FROM 2.0 to 2.1 18 October 2015

Incompatible Changes
====================

* Mouse-mode has been rewritten.  There's now no longer options for:
	- mouse-resize-pane
	- mouse-select-pane
	- mouse-select-window
	- mode-mouse

  Instead there is just one option:  'mouse' which turns on mouse support
  entirely.
```

とのことです。そういうわけで、`.tmux.conf` とかに

```
set-window-option -g mode-mouse on
set-option -g mouse-select-pane on
set-option -g mouse-resize-pane on
set-option -g mouse-select-window on
```

みたいに書いてあったであろう奴らが一切動かなくなっています。これを直すには、

```text:.tmux.conf
set-option -g mouse on

bind -n WheelUpPane   select-pane -t= \; copy-mode -e \; send-keys -M
bind -n WheelDownPane select-pane -t= \;                 send-keys -M
```

というのをそのあたりに書けばオッケーです (下2行は https://bbs.archlinux.org/viewtopic.php?pid=1572476#p1572476 から引用)。

複数マシン間で `.tmux.conf` を共有していると、これらのうちどっちを書けばいいんやみたいな感じになりますが、両方書いておくと使えない方のエラーが起動時に毎回表示されるだけで動くことには動きます。

きちんとバージョンごとに動作を切り分けたい場合は、`if-shell` を使って

```text:.tmux.conf
if-shell 'test $(echo "$(tmux -V | awk \{print\ \$2\}) > 2.0" | bc) -ne 0' \
  'source-file ~/.tmux.d/mouse-after-2.1.conf' \
  'source-file ~/.tmux.d/mouse-before-2.0.conf'
```

```text:~/.tmux.d/mouse-after-2.1.conf
set -g mouse on
bind -n WheelUpPane   select-pane -t= \; copy-mode -e \; send-keys -M
bind -n WheelDownPane select-pane -t= \;                 send-keys -M
```

```text:~/.tmux.d/mouse-before-2.0.conf
set-window-option -g mode-mouse on
set-option -g mouse-select-pane on
set -g mouse-resize-pane on
set -g mouse-select-window on
```

このようなことをやればよいです。`if-shell` で分岐した先で必ず `source-file` を使わないといけないわけではないですが、使わないと死ぬほど見難い感じになります、、
デリゲートの覚書


# デリゲートについて

デリゲート、デリゲート、とiOSアプリの作成をやったことのなかった私に取って意味不明だったこの言葉。参考書を元に調べて、何となくわかった気になって、サンプルソースを覚え書きとして残しておこうと思います。

##### sample.swift
```sample.swift
import UIKit


class Hito {
    var car:Car?
    var bike:Bike?
}

class Car : Norimono{
    func unten(){
        print("国産車なら120km/hで運転できます")
    }
}

class Bike : Norimono{
    func unten(){
        print("バイクであっても90km/hで運転できます")
    }
}

protocol Norimono {
    func unten()
}

var taro = Hito()
taro.car = Car()
taro.bike = Bike()

taro.car?.unten()
taro.bike?.unten()
```

と、覚書として残していましたが、
これだと、単に親クラスからの継承と変わらずデリゲート
という意味合いは薄いように思えたので
明らかにデリゲート、というサンプルをさらに考えてみました。

##### sample2.swift
```sample2.swift
import UIKit

class Hito {
    var delegate:Norimono?
}

class Car : Norimono{
    func unten(){
        print("国産車なら120km/hで運転できます")
    }
}

class Bike : Norimono{
    func unten(){
        print("バイクであっても90km/hで運転できます")
    }
}

class Bike2 : Norimono{
    func unten(){
        print("新型のバイクであれば130km/hで運転できます")
    }
}

protocol Norimono {
    func unten()
}

var taro = Hito()
taro.delegate = Car()
taro.delegate?.unten()

taro.delegate = Bike()
taro.delegate?.unten()

taro.delegate = Bike2()
taro.delegate?.unten()

```
Hito型クラスの太郎は、デリゲートとしてNorimonoプロトコルを継承した
Carであったり、Bikeであったり、Bike2を乗り替えて
ドライブ（unten）を楽しめます。と言う、話ですね。

さらに、引数なんかも持たせてみた場合のサンプルも覚書として
下記のように記載しておこうかと思います。

##### sample3.swift
```sample3.swift

import UIKit

class Hito {
    var delegate:Norimono?
    var name:String
    
    init (n:String){
        self.name = n
    }
}

class Car : Norimono{
    func unten(h:Hito){
        print("\(h.name)は国産車なら120km/hで運転できます")
    }
}

class Bike : Norimono{
    func unten(h:Hito){
        print("\(h.name)はバイクであっても90km/hで運転できます")
    }
}

class Bike2 : Norimono{
    func unten(h:Hito){
        print("\(h.name)は新型のバイクであれば130km/hで運転できます")
    }
}

protocol Norimono{
    func unten(h:Hito)
}

var taro = Hito(n: "太郎")
taro.delegate = Car()
taro.delegate?.unten(taro)

var jiro = Hito(n: "二郎")
jiro.delegate = Bike()
jiro.delegate?.unten(taro)

jiro.delegate = Bike2()
jiro.delegate?.unten(jiro)

```
synx v0.1.1でXcodeのファイル整理を自動化する

# 目的

- [synx](https://github.com/venmo/synx) を利用し、コマンドを実行することで自動的にファイルを整理する
- Xcode と同じ OpenStateFormat の `pbxproj` ファイルを出力する
- `pbxproj` 内のファイルの順序は変更しない

# 課題

## synx v0.1.1

- **NG: `pbxproj` 内のファイルの順序がアルファベット順になる**
  - ファイルシステムと同じ順序になり、自由に順序を変更できるという利点がなくなる
  - アルファベット順にしないオプションは提供されていない
  - https://github.com/venmo/synx/issues/26
- OK: `pbxproj` ファイルは OpenStateFormat で出力される
  
## synx v0.0.61

- **NG: `pbxproj` ファイルがXMLFormatで出力される** 
  - Xcode で `pbxproj` ファイルを更新すると OpenStateFormat に書き換わる
  - コマンド実行後に手動で修正する必要がある
  - うっかり修正を忘れてコミットすると悲しいことになる
- OK: `pbxproj` 内のファイルの順序はそのまま保持される

```diff:差分イメージ
diff --git SampleProject.xcodeproj/project.pbxproj SampleProject.xcodeproj/project.pbxproj
index 71cf5d5..5f29e86 100644
--- SampleProject.xcodeproj/project.pbxproj
+++ SampleProject.xcodeproj/project.pbxproj
@@ -1,402 +1,751 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 46;
-	objects = {
...
-	rootObject = 6DD1BA9E1BD54C9A00159F69 /* Project object */;
-}
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>archiveVersion</key>
+	<string>1</string>
+	<key>classes</key>
+	<dict/>
+	<key>objectVersion</key>
+	<string>46</string>
+	<key>objects</key>
...
+	<key>rootObject</key>
+	<string>6DD1BA9E1BD54C9A00159F69</string>
+</dict>
+</plist>
```

# 対策

**v0.1.1 のソート処理部分を上書きする**

- 最新版である v0.1.1 を採用する
- ソート部分だけ上書きする

## スクリプトを書く

```ruby:sync.rb
# sync.rb

require 'synx'

#
# override
#
module Xcodeproj
  class Project
    module Object
      class PBXGroup
        def sort_by_name
          return
        end
      end
    end
  end
end

#
# execute
#
Synx::Project.open('./SampleProject.xcodeproj').sync
```

## 実行する

```bash
$ ruby ./sync.rb
```
yeoman入門

yeomanの簡単な使い方をメモ。
osはCentOS6.5です。
公式ホームページ：http://yeoman.io/

## 概要
以下の３つのコマンドを使って、web開発を効率化する。

yo（おじさん）：雛形作成
bower（鳥）：パッケージ管理
grunt（猪）：ビルド

## インストール
node.jsを利用するので、インストール済みであること。
`-g`オプションはグローバルインストール。
パスの通ったディレクトリにインストールされ、全ユーザから利用できる。

    $ npm install -g yo bower grunt-cli

## 雛形インストール
yoで使う雛形をインストールする。
雛形は http://yeoman.io/generators/ から検索できる。
↓は、webアプリケーション基本の雛形（jqueryやbootstrapを含む）をインストールする例。

    $ npm install -g generator-webapp

## プロジェクト作成
yoで指定する雛形はインストール時の`generator-`を除いた部分。
利用するパッケージを指定して、enter。

    $ mkdir yo-test
    $ cd yo-test
    $ yo webapp

## パッケージの追加
雛形に個別にパッケージを追加することができる。
パッケージ名は`bower search [パッケージ名]`で検索可能。
↓は、underscore.jsを追加する例。

    $ bower install underscore --save

## 実行
デフォルト http://localhost:9000 でアクセス可能なwebサーバを立ち上げることができる。
localhost以外から接続する場合、`Gruntfile.js`の`connect.options.hostname`を`0.0.0.0`に修正した後にコマンドを実行。
ファイアウォールがある場合は、ポートも開けておくこと。

    $ grunt serve

## テスト
ビルドで必要なので、ビルド前に実行しておく。

    $ grunt test

## ビルド
ディレクトリ`dist`に最適化されたモジュールが生成されるので、それをリリースする。

    $ grunt
NUnitのテストケースを動的に定義する

# TestCase属性

NUnitはテストケースを`TestCase`という属性で書くことができます。

_NUnitのサイトより抜粋_

```csharp
[TestCase(12,3,4)]
[TestCase(12,2,6)]
[TestCase(12,4,3)]
public void DivideTest(int n, int d, int q)
{
  Assert.AreEqual( q, n / d );
}
```

でも、テストケースが何千とある場合、実際のテストメソッドがテストケースに埋もれてしまいます。ですのでテストケースは別ファイルに書き出したいですね。

# TestCaseSourceAttribute属性

`TestCaseAttribute`を使うと、変数に格納されたテストデータをテストケースとして使うことができます。

_NUnitのサイトより抜粋_

```csharp
[TestCaseSourceAttribute("DivideCases")]
public void DivideTest(int n, int d, int q)
{
    Assert.AreEqual( q, n / d );
}

static object[] DivideCases =
{
    new object[] { 12, 3, 4 },
    new object[] { 12, 2, 6 },
    new object[] { 12, 4, 3 } 
};
```

メソッドの戻り値もOK

```csharp
[TestCaseSourceAttribute("DivideCases")]
public void DivideTest(int n, int d, int q)
{
    Assert.AreEqual( q, n / d );
}

static object[][] DivideCases ()
{
    return new object[][] {
        new object[] { 12, 3, 4 },
        new object[] { 12, 2, 6 },
        new object[] { 12, 4, 3 }
    };
}
```

クラスも指定可、その場合は`TestCaseSourceAttribute(Type sourceType, string sourceName)`を使います。

```csharp
public class MyFactoryClass
{
    public static object[][] DivideCases()
    {
        return new object[][] {
            new object[] { 12,  3,  4 },
            new object[] { 12,  2,  6 },
            new object[] { 12,  4,  3 },
        };
    }
}

[TestFixture]
class Program
{
    [TestCaseSourceAttribute(typeof(MyFactoryClass), "DivideCases")]
    public void DivideTest(int n, int d, int q)
    {
        Assert.AreEqual(q, n / d );
    }
}
```

# 応用

メソッド内で外部ファイルを読み出してそのデータに伴ってテストデータを生成すれば、動的に生成可能です。今回はJsonが記述されているファイルを読んでます。`DynamicJson`は整数が浮動小数点でパースされるので、テスト定義クラス内でキャストしてます。

```csharp
using System;
using System.Collections.Generic;
using NUnit.Framework;
using Codeplex.Data;
using System.IO;

namespace Test_Nunit1
{
    // テスト対象のクラス
    class Calculator
    {
        public Calculator()
        {
        }

        public int add(int a, int b)
        {
            return a + b;
        }
    }

    // テストケース生成用のクラス
    public class MyFactoryClass
    {
        public static object[][] BaseTestCase(string filename)
        {
            var test_case_list = new List<object[]>();

            var test_case_txt = File.ReadAllText(filename);
            foreach (var testcase in DynamicJson.Parse(test_case_txt))
            {
                test_case_list.Add((object[])testcase);
            }

            return test_case_list.ToArray();
        }

        public static object[][] AddTestCase()
        {
            return BaseTestCase("AddTestCase.txt");
        }
    }

    // テスト定義クラス
    [TestFixture]
    class Program
    {
        [TestCaseSourceAttribute(typeof(MyFactoryClass), "AddTestCase")]
        public void 足し算のテスト(double a, double b, double c)
        {
            var test = new Calculator();
            Assert.AreEqual((int)c, test.add((int)a, (int)b));
        }
    }
}
```

```json:AddTestCase.txt
[
  [1,2,3],
  [2,2,4],
  [3,4,7],
  [5,6,11],
  [7,8,15],
  [7,9,16],
  [100,200,300]
]
```
AngularJSを始めてみた シリーズ2 〜導入編〜

##AngularJSをダウンロード
[公式サイト](https://angularjs.org/)からダウンロード。

なんというシンプル。必要なjsファイルは1つだけですか。
angular.min.js

では、html内で読み込みます。

```html
<script src="angular.min.js"></script>
```

html要素に```ng-app```と書き込む。

```html
<html lang="ja" ng-app>
```

これでhtml要素内がAngularJSの処理の対象になったとのこと。

##テンプレートタグ

コレ
```{{}}```

例として、

```html
<input type="number" ng-model="num">
<div>{{num * 2}}</div>
```

input要素に2を入力すると、```{{ num * 2}}```が評価されて「4」と表示される。
input要素に指定した```ng-model```の```num```が```<div>```内のテンプレートタグで指定した```num```と連動したデータバインディングが実現された瞬間です。。

テンプレートタグ内では、四則演算や論理演算も可能。

よし、今日はここまで。
次回からはもっと詳しく見ていくとする。
python3のcollectionsモジュール(ChainMap)を使ってみる

##collections
collectionsはコンテナデータ型が入ってるものです。
python3(3.4.3)ではpython2.7のものに幾つか追加されたものがあります。
参考URL: http://docs.python.jp/3.4/library/collections.html
python2.7とから追加された点は、下記のものです。
>ChainMap: 複数のマッピングの一つのビューを作成する辞書風のクラス
UserDict: 辞書のサブクラス化を簡単にする辞書オブジェクトのラッパ
UserList: リストのサブクラス化を簡単にするリストオブジェクトのラッパ
UserString: 文字列のサブクラス化を簡単にする文字列オブジェクトのラッパ

User〜は普通にクラスラッパなので説明は省略します。

##ChainMap
###基本
今回書いたコードはGitHubにあります。(https://github.com/KodairaTomonori/Qiita/blob/master/default_module/collections/test_ChainMap.py)
まず、ChainMapの簡単な使い方から、
####
```test_ChainMap.py
import collections
import see
dict_a = dict(a=1, b=2, c=3)
dict_b = dict(x=10, y=11, z=12)
def get_name(arg_id, arg_values):
    for key, value in arg_values.items():
        if id(value) == arg_id: return key
    return 'NotDefined'

def print_arguments(*args, arg_values):
    for arg in args:
        print(get_name(id(arg), arg_values) + ' : ' + repr(arg) )

chain_map = collections.ChainMap(dict_a, dict_b)
child = chain_map.new_child()
print('make_chain_maps')
print_arguments(chain_map, child, arg_values=locals() )
print('chain_map.maps: ' + repr(chain_map.maps) )
```
####出力
>make_chain_maps
chain_map : ChainMap({'b': 2, 'c': 3, 'a': 1}, {'z': 12, 'x': 10, 'y': 11})
child : ChainMap({}, {'b': 2, 'c': 3, 'a': 1}, {'z': 12, 'x': 10, 'y': 11})
chain_map.maps: [{'a': 1, 'c': 3, 'b': 2}, {'y': 11, 'z': 12, 'x': 10}]

####説明
`ChainMap`は名前の通り`map(dictionaly)`をつなげるものです。
ただ単につなげるのではなく、それぞれを一つの辞書として保持しておけます。
なので、出力を見てわかる通り`dict_a, dict_b`それぞれが個別にあります。
`chain['z'], chain_map['b']`とするとそれぞれ、'2, 12'がでてきます。
使うときは一つの`dict`として普通に使えます。
`.new_child()`とすることで、先頭に新しい`dict`を作ってくれます。
`.maps`とすることで、ChainMapをリストして返してくれます。

コードには書いてませんが、普通の`dict`と同様に`.items(), .keys(), .values()`が使えます。
参考URLを見ると、探索は手前から、その他は一番手前のみって感じですね
>探索は、根底のマッピングをキーが見つかるまで引き続き探します。対して、書き込み、更新、削除は、最初のマッピングのみ操作します。

###子と親の更新
次に、更新をやっていきます。
####
```update.py
child.update(d=4, a=0)
print('update_child_map')
print_arguments(chain_map, child, arg_values=locals() )
print()

chain_map.update(z=100)
print('update_parent_map')
print_arguments(chain_map, child, arg_values=locals() )
```
####出力２
>update_child_map
chain_map : ChainMap({'a': 1, 'c': 3, 'b': 2}, {'y': 11, 'z': 12, 'x': 10})
child : ChainMap({'a': 0, 'd': 4}, {'a': 1, 'c': 3, 'b': 2}, {'y': 11, 'z': 12, 'x': 10})
update_parent_map
chain_map : ChainMap({'a': 1, 'z': 100, 'c': 3, 'b': 2}, {'y': 11, 'z': 12, 'x': 10})
child : ChainMap({'a': 0, 'd': 4}, {'a': 1, 'z': 100, 'c': 3, 'b': 2}, {'y': 11, 'z': 12, 'x': 10})

####説明２
子(一番左のdict)に書き込みor更新をしても、親(一番左以外のdict)には変更がありません。
また、親を変更すると、'child'のほうにもその変更は反映されています。
`chain_map, child`のそれぞれの共通要素のpointerは一緒のところをさしてる感じになってます。

###マージ
なんかごちゃごちゃして見にくいときに一つの辞書にする方法。
単純にdict()で囲ってあげるだけでできます。
####
```merge.py
print('each_Chain')
print('chain_map:', dict(**chain_map) )
print('child    :', dict(**child) )
```
####出力
>each_Chain
chain_map: {'x': 10, 'z': 100, 'c': 3, 'b': 2, 'a': 1, 'y': 11}
child    : {'x': 10, 'z': 100, 'c': 3, 'b': 2, 'a': 0, 'd': 4, 'y': 11}


##まとめ
ChainMapは便利ですがあんまり使い道が思いつきません。
>このクラスはネストされたスコープをシミュレートするのに使え、テンプレート化に便利です。

と参考URLには書いてありますが、カタカナばっかでよくわかりません。
NLPとかで学習する際の重みの更新とかを確認するのに使えそうですね。
AngularJSを始めてみた シリーズ1 〜AngularJSとは〜

参考サイト
CodeGrid　シリーズの2話からは有料っぽい
[攻略！AngularJS](https://app.codegrid.net/entry/angularjs-1)

##AngularJSとは
Googleが開発を行っているJavaScriptのアプリケーションフレームワーク。MVWフレームワークと呼ばれる。

M - Model（データ）
V - View（見た目）
W - Whatever（なんでんかんでん）

詳しいことはこれから勉強していくことにしよう。うん。

##双方向データバインディング
AngularJSの大きな特徴。データとUIを双方向に結びついていて、UIが変更されればデータが変更され、データが変更されればUIが変更されるらしい。

##AngularJSを使うことのメリット・デメリット
###メリット
AngularJSに従うことで開発者間の品質の差が生まれにくい。

###デメリット
独自の概念・機能が多いため学習コストが高い。AngularJSのルールから外れたことをしようとした場合、柔軟に対応するのが大変。

ざっくりこんな感じらしい。
早速次回から触ってみることにしよう。

今日はここまで。
NavigationBarのタイトルにアイコンを追加する方法

# 追記

バグがあったので、続きを書きました。
http://qiita.com/nakaken0629/items/fe729ba1ee34a2d8f7ee

# 本文

![CustomNavigationBar.png](https://qiita-image-store.s3.amazonaws.com/0/75307/cc8ab9d5-0dc2-49d8-34f6-e65a10e917a2.png)

UIViewControllerのタイトルは、navigationItem.titleではなくnavigationItem.titleViewで指定する。
titleViewプロパティには、以下の構造のViewを追加する

UIView
  +-- UILabel
  +-- UIImageView

追加したViewの自動レイアウトをうまいこと設定する。

ソースコードはこちら
https://github.com/nakaken0629/CustomNavigationBar/tree/20151019
Heroku コマンド集

# Heroku コマンド集

## よく使うコマンド :jack_o_lantern: 


### heroku login

```
heroku login…ログイン。e-mailとPWをもとめられる。まずはここから。
```

### heroku apps

```
heroku apps…herokuに上がっているdyno(アプリ)一覧を表示する
※dynoが複数ある場合は、herokuコマンド末尾に「--apps 【アプリID】」ををつければOK。
※herokuはdeployしたdyno毎に環境変数等を持てるので。
```

### heroku run

```
herokuに実行させたいコマンドをrunの後ろに続けて打たせる。
例) heroku run php /app/artisan migrate
```

### heroku run bash

```
heroku環境でコマンドが打てるようになる。
いちいち「heroku run」を打つのがカッタルイ人はbashが立ち上がってから、直にコマンドを打とう。
```

### heroku config

```
herokuの環境変数一覧を確認できる
※ただし、アプリ毎に設定されるのがherokuであるため、アプリが複数=dynoが複数ある時は、
末尾に「 --apps 【アプリID】」で特定する必要がある。
```

### heroku open

```
herokuにアップしたアプリをブラウザで開いてくれる
```

### heroku apps:destroy --app 【アプリID】  --confirm 【アプリID】

```
herokuにdeployしたアプリをIDで指定し、確認なしに削除する。
```

### git push heroku master

```
herokuにdeployする時に使う
```

### heroku logs --tail

```
起動中のherokuアプリのログをtailしながら表示する
```

### herokuにアップしたLaravel5.1モジュールが500エラーで見れない?!

localでは見えたのに、herokuにアップすると見れない現象があった。

```config/app.php
'key' => env('APP_KEY', 'SomeRandomString'), // 16文字列
を
'key' => env('APP_KEY', 'SomeRandomStringSomeRandomString') // 32文字列
にすればOK
```

なぜなのかはまだ調査中。一旦、こんなことがあって苦しんだってことで解決策を載せる。

###Procfile

Herokuに乗せたモジュールを何で動かすのか? どこをドキュメントルートとするのかをconf(設定ファイル)として設置する。

```Procfile
web: vendor/bin/heroku-php-nginx -C nginx.conf public/
```

上記なら、phpでnginxでnginx.confファイルを参照して、「public/」下をドキュメントルートとしてみなすよって記載になる。

### HerokuでLaravelのエラーを出力する

デフォルトだとHttpのステータスコードくらいしか、heroku logsに出力されないので、

``` conf/app.php
'log' => 'errorlog'
```

こうすることで、herokuのlogにもphpの標準ログが出力される。
Animate.cssとwow.jsを使ってサイトにアニメーションをつける


# 初めに

Animate.cssとwow.jsを使って自身のサイト(tiwuofficial.github.io)にアニメーションをつけてみたので、使い方を簡単に書いていきたいと思います。
[tiwuofficial.github.io](http://tiwuofficial.github.io/)
次回記事
[Font-Awesomeを使ってサイトにアイコンを表示させる + Animate.css + wow.js](http://qiita.com/tiwu_official/items/625c7b8389464e9240ef)

# 1.準備

### Animate.css

Animate.cssは要素のclassにアニメーションを指定するだけで、簡単にアニメーションを実装することができるスタイルシートです。

* [公式サイト](http://daneden.github.io/animate.css/)
* [GitHub](https://github.com/daneden/animate.css)

公式サイトではアニメーションの動きの確認ができます。
公式サイトからanimate.cssファイルをダウンロードしてください。
(animate.min.cssでも可)

### wow.js

wow.jsはアニメーションのトリガー、アニメーションの詳細な動きを設定できるJavaScirptです。

* [GitHub](https://github.com/matthieua/WOW)

GitHubからwow.jsファイルをダウンロードしてください。
(wow.min.jsでも可)


# 2.使い方

## ファイルの読み込み

animate.cssとwow.jsを読み込みます。

```HTML
<link rel="stylesheet" href="animate.css">
```
```HTML
<script src="wow.js"></script>
```
href,srcのパスはよしなに変更してください。
wow.jsはinit()メソッドを呼ぶ必要があります。
<br>

```HTML
<script>
	new WOW().init();
</script>
```

## 利用方法

要素のclassに"wow アニメーション名"を指定することでスクロールが要素に達した時
指定したアニメーションが実行されます。

例

```HTML
<div class="wow fadeIn"></div>
```
上記例ではスクロールが要素に達した時、フェードインされて要素内のコンテンツが表示されます。
アニメーションはAnimate.cssの公式サイトで確認できます。
公式サイトのセレクトボックス内のアニメーション名をクラスに指定することでアニメーションを実現できます。

## wow.jsのオプション

次にwow.jsのオプションを利用しアニメーションの詳細を変更します。

| オプション | 意味 |
|--------|--------|
|  data-wow-duration   |    アニメーションの時間    |
|  data-wow-delay | スクロールが要素に達してからアニメーションがスタートする時間 |
|  data-wow-offset |スクロールが要素に達してからアニメーションがスタートする距離 |
|data-wow-iteration|アニメーションの繰り返し回数|

例

```HTML
<div class="wow slideInLeft" data-wow-duration="2s" data-wow-delay="5s"></div>
<div class="wow slideInRight" data-wow-offset="10"  data-wow-iteration="10"></div>
```

上記例の1行目では、スクロールが要素に達してから5秒後に2秒かけてアニメーションを実行します。
2行目では、スクロールが要素に達してからスクロール10を過ぎたらアニメーションを10回実行します。

# 最後に
Animata.cssとwow.jsの使い方をまとめてみました。
簡単でとても使いやすいと思います。
短縮URLを元のURLに展開するシェルスクリプト(mac, linux)

# 使いかた

### 用意

https://gist.github.com/akyao/c77dd9da161606430584

- 上のページから中身をコピペして、ローカルにurlunzip.shとして保存

### やる

    # 1件ずつやる場合
    $ echo "http://bit.ly/hogehoge" | sh urlunzip.sh

    # 複数のURLをまとめてやる場合
    $ cat short_url_list.txt | sh urlunzip.sh
    
    # ちなみにshort_url_list.txtの中身はこんな感じだとする
    $ cat short_url_list.txt
    https://bitly.com/hogehoge
    http://goo.gl/hogehoge

# memo 

動作確認はmac上でだけだけど、linux上でも動くんじゃないかな。動くといいな。
gulp シリーズ2　〜gulp-sassでのコンパイル時の整形〜

##gulp-sassコンパイル時の整形
前回の[gulpシリーズ1](http://qiita.com/ShinyaOkazawa/items/3e14f65b0685927bdb9d)では、プラグインはgulp-sassのみをインストールしてみました。gulp-sassでのコンパイル後、cssファイルを覗いてみると、デフォルトでは以下のようになっていた。

コンパイル前

```scss

h1{
  color: red;
  &:hover{
    color: blue;
  }
}
```

コンパイル後

```css

h1 {
  color: red; }
  h1:hover {
    color: blue; }
```

これでは見にくいCSSファイルになってしまう。。整形するにはどうしようかと調べてみたところ、cssbeautifyというプラグインでも整形できるのだが、sassにはオプションで```outputStyle```を指定出来るらしい。```outputStyle```オプションを指定することでコンパイル後のcssのスタイルを指定することが出来る。sassをあまり勉強せずに、gulpをキッカケにsassを本意気でやろうと思い立った自分には目から鱗の情報だった。ありがとう同僚。

さて、```outputStyle```の指定は下記の通り。

gulpfile.js

```js
var gulp = require('gulp');
var sass = require('gulp-sass');

gulp.task('sass', function(){
	gulp.src('develop/sass/**/*.scss')
		.pipe(sass({
			outputStyle: 'expanded'
		}))
		.pipe(gulp.dest('httpdocs/css/'));
});
```

これをコンパイルすると、こうなる。

```css

h1 {
  color: red;
}

h1:hover {
  color: blue;
}
```

その他の出力スタイルは[こちら](https://web-design-weekly.com/2014/06/15/different-sass-output-styles/)を参考に。

めでたしめでたし。
今日はここまで。
【小ネタ】ランス・アンド・マスクスの第3話にRubyのコードが載ってた

#概要
　名前の通りです。私はこの作品は観ていないですが、とあるフォロワーさんから、[ランス・アンド・マスクス](http://www.tbs.co.jp/anime/lance/)の第3話に**なぜかRubyのコードが載っている**とのことで適当に分析しました。なお、以下の記述に登場するキャプチャ画像およびそれをクロップしたものの著作権をここに示します。

　　Copyright© 1995-2015, Tokyo Broadcasting System Television, Inc. All Rights Reserved.

#問題の画像(元がデカすぎるのて縮小掛けてます)
![1.png](https://qiita-image-store.s3.amazonaws.com/0/29802/f7179a97-6260-a80b-ee75-9a7f2432b477.png)

![3.png](https://qiita-image-store.s3.amazonaws.com/0/29802/3a5bbda6-1780-c9b0-0dcb-c3185425659d.png)

#読めない(でもなんとか読んだ)
上記含めた数枚から再構築したコードはこんな感じです。

```test.rb
def here?(uri)
  (current_server.uri rescue nil) == uri
end
module_function :here?

def config
  current_server.config
rescue
  DRbServer.make_config
end
module_function :config

def front
  current_server.front
end
if RUBY_VERSION >= '1.8'
    require 'drb/invokemethod'
    class InvokeMethod
      include InvokeMethod18Mixin
  end
  else
    require 'drb/invokemethod16'
    class InvokeMethod
      include InvokeMethod16Mixin
    end

    def main_loop
      Thread_ata
```

#Rubyとか意味が分からないんですがそれは……
　と考えるランス・アンド・マスクスのファンの方々がいるかもしれないので補足を。
　[Ruby](https://www.ruby-lang.org/ja/)は[まつもとゆきひろ](https://twitter.com/yukihiro_matz)さんが開発したプログラミング言語で、動的言語のとっつきやすさとオブジェクト指向言語の便利さを併せ持っています。
　で、上記コードの「DRbServer」は、[dRubyという分散オブジェクトプログラミング用のライブラリ](http://docs.ruby-lang.org/ja/2.2.0/library/drb.html)に使用するオブジェクトの型の1つです。……分かりやすく書けば、**ネットワーク越しにメソッド(プログラム)を複数実行できるので複数台のPCで計算処理などを行えます**。
　「[蒼き鋼のアルペジオ](http://qiita.com/YSRKEN/items/6fc784d4f7f9206537fc)のように、どこかからのソースを拝借しているんだろうな……」と思ってググッたところ、**とりあえず「def here?(uri)～:config」までは定番コードでした。**まあ、drb.rbというファイル名からして、Ruby一式に含まれるライブラリのソースそのままって感じですね。
　　[distributed Ruby --- dRuby 2.0.4](http://www.opensource.apple.com/source/ruby/ruby-14/ruby/lib/drb/drb.rb?txt)
　また、「if RUBY_VERSION」以降も、見ての通りバージョン違いを処理するための定型文で、同じソースに含まれています。
　これから分かることは、**スタッフ内に[Rubyist](http://magazine.rubyist.net/)がいる可能性が高そう**ということですね。小難しくするだけならC++で十分ですし(**暴言**)。ちなみに**右下で[topの実行結果](http://qiita.com/k0kubun/items/7368c323d90f24a00c2f)らしきものが表示されています**ので、OSはLinuxかその派生版である可能性が高いです。
![CRr25glU8AAa-Z7.png orig - コピー.png](https://qiita-image-store.s3.amazonaws.com/0/29802/788bbdf6-9b6e-a6ab-859a-8a31b855d84b.png)
　あらすじによると[この世界は二十一世紀](http://www.tbs.co.jp/anime/lance/intro/intro.html)だそうですからLinuxやRubyが出てきてもおかしくはありませんが、**「マスク？　[サブネットマスク](https://www.cman.jp/network/term/subnet/)かな？」**とか**「[親の前にまず子を殺せ！](http://note.hibariya.org/entries/20120326/a0.html)」**とかネタにされる可能性も出てきたかもしれません。今後が楽しみですね。
railsでParse.com使ってpush通知を送る

mBaaSのParse.comを利用してiOSスマホアプリを制作しています。
サーバーサイドをrailsで用意し、push通知を送るのにParse REST APIの機能を使います。

# 環境
rails 4.2.3
[parse-ruby-client](https://github.com/adelevie/parse-ruby-client) 0.3.0

# Parse API公式ドキュメント
+ push通知 https://parse.com/docs/rest/guide#push-notifications

# parseに登録
※概要だけ。（スイマセン。。）

[Parse](https://parse.com)にアプリを登録して、Settings→Keysより、`Application ID`と`REST API Key`を取得します。
↓では[dotenv](https://github.com/bkeepers/dotenv)を利用して`PARSE_APP_ID`と`PARSE_API_KEY`として登録しています。

# Gemfile
ParseのAPIを使うのにサードパーティ製のSDK gemがあったのでそれを使います。

```Gemfile
  gem 'parse-ruby-client'
```

# push通知用クラスを作った
[parse-ruby-client](https://github.com/adelevie/parse-ruby-client)のドキュメントに沿って作っただけです。（pushだけでなく他もいろいろ使えそう！）

```parse_service.rb
class ParseService
  PUSH_TYPE_ALL = 0
  PUSH_TYPE_PERSONAL = 1
  PUSH_TYPE_RSPEC = 2

  def initialize
    Parse.init(application_id: ENV['PARSE_APP_ID'], api_key: ENV['PARSE_API_KEY'])
  end

  def request_push_notification(message, value, push_type, device_token = nil)
    data = { alert: message }.merge(value)
    push = Parse::Push.new(data)

    case push_type
    when PUSH_TYPE_ALL
      push.where = {}
    when PUSH_TYPE_PERSONAL
      return false if device_token.blank?
      push.where = { deviceToken: device_token }
    when PUSH_TYPE_RSPEC
      return true
    else
      return false
    end
    push.save
  end
end
```

# push通知するときはこんな感じ
※個別pushの場合。

```push_notification.rb
  def self.request_parse_push_notification
    parse = ParseService.new
    push_result = parse.request_push_notification(
      'こんにちは！',
      {badge: '1', sound: 'bingbong.aiff', activity_badge: '1'},
      ParseService::PUSH_TYPE_PERSONAL,
      'device_id',
  end
```

※`device_id`は前もってクライアントアプリからサーバーに送ってもらう必要あります。

jsonのとこには好きなように情報を入れられるので、例えば通知後のアプリの挙動を指定できたりします。（そのへんは設計次第で自由自在）
また、parseのサイトで送信状況は確認できるので、そこらへんを見つつデバッグすると良い感じです。
Docker ライフサイクルイベントフック

[Docker実践LT](http://connpass.com/event/20561/)で 表題の LTさせてもらいました。
お時間いただきありがとうございました。
http://www.slideshare.net/ryonakamaru/docker-lifecycle-event-hooks

・rmオプションつけなくてもコンテナが死んだら rmしてあげて('A`)
・runコマンドに簡単にタイムアウト設定したい..

くらいなら、[docker-plugins](https://github.com/progrium/docker-plugins)に用意されているプラグインそのまま使えますし、条件分岐で、例えば○○というラベルがついている時だけ、××という条件を満たしているときだけ rmしたい、みたいなものも簡単にプラグインを書くことができます。
（データ・ボリューム・コンテナまで rmされたくないときなど）

これでチャットツールへの通知なんかも簡単ですね！
具体的な方法は [spesnovaさんの記事](/spesnova/items/82ae2d0dcbbec51f18c6)をご覧ください。

golangの実装がほんとに[簡単](https://github.com/progrium/dockerhook/blob/master/dockerhook.go#L128)なので、golang使える諸氏はそんな感じで簡単に自作のイベントフックが作れるかと思います。
Docker Remote API便利！
ProcessingをEclipse+Mavenで実行

ProcessingをEclipseで動かす場合、core.jarが必要。
インポート面倒くさいなぁーと思ってたらProcessingのMavenリポジトリあるじゃん！
http://mvnrepository.com/artifact/org.processing/core/2.2.1
ということで、MavenでProcessingを動かしてみた。

# バージョン
Eclipse Luna Service Release 1a (4.4.1)
Java version 1.8.0_05

# Mavenプロジェクトの作成
左上のアイコンから、Project > Maven Project　必要な箇所に入力。
![スクリーンショット 2015-10-19 22.48.28.png](https://qiita-image-store.s3.amazonaws.com/0/96978/7a1f8a36-3e0f-fa85-6bbf-a7b6f773dac4.png)

作成後、Javaのバージョンで警告が出ているので修正。
![スクリーンショット 2015-10-19 22.51.30.png](https://qiita-image-store.s3.amazonaws.com/0/96978/51805b5f-f69f-8d45-7aa8-415d7a3d7ebb.png)
![スクリーンショット 2015-10-19 22.51.58.png](https://qiita-image-store.s3.amazonaws.com/0/96978/b517f2c3-6c46-56cf-f22d-fa44a4dcec25.png)
![スクリーンショット 2015-10-19 22.52.15.png](https://qiita-image-store.s3.amazonaws.com/0/96978/18fbcdff-7ad4-619e-7daa-0d719b28337c.png)


#pom.xmlの編集
dependenciesタグの中に、ProcessingのMavenリポジトリを記入。
![スクリーンショット 2015-10-19 22.50.49.png](https://qiita-image-store.s3.amazonaws.com/0/96978/5f0f8c52-8325-d67c-580e-3bcdf9dfd0f1.png)

#実装
簡単な画面を実装。
![スクリーンショット 2015-10-19 22.57.08.png](https://qiita-image-store.s3.amazonaws.com/0/96978/6734ae1b-b866-87da-1f40-baef8736762f.png)

#Build
一度ビルドして、jarファイルをダウンロード。
![スクリーンショット 2015-10-19 23.00.13.png](https://qiita-image-store.s3.amazonaws.com/0/96978/af0be7cd-a79e-c0f6-64e9-98db2275628d.png)

#実行
Run As > Java Applet から実行。
![スクリーンショット 2015-10-19 23.21.40.png](https://qiita-image-store.s3.amazonaws.com/0/96978/a7df56f4-bf13-a3a2-61c1-9fac4aaee5ed.png)
ES7 DecoratorsでInjectorを作ってみた

electron+angular+[angular-decorators](https://github.com/MikeRyan52/angular-decorators)で遊んでいて、メインプロセスとレンダープロセスでインジェクトの方式が違うのがなんかシャクなのでカッとなって作ってみました。

* [inject-decorators](https://github.com/k-kinzal/inject-decorators)


# モチベーション

レンダープロセス側のangularではangular-decoratorsを使うと

```js
@Component({ selector : 'application' })
@View({ template: `
  <sidebar></sidebar>
  <content></content>
`})
@Inject('ipc')
class ApplicationComponent {
  constructor(ipc){
    this.ipc = ipc;
  }
}


var m = Module('module', [
  ApplicationComponent
]);
angular.module('app', [m])
       .factory('ipc', () => require('ipc'));
```

のように書けるのですが、これはangular用のライブラリなのでメインプロセス側では使用することができません。
ついでにelectronの`ipc`やnode標準の`fs`などオブジェクトのために、わざわざ`factory`を書くのが面倒臭い・・・というところがモチベーションです。

# 使い方

```js
@Component({ selector : 'application' })
@View({ template: `
  <sidebar></sidebar>
  <content></content>
`})
@Inject(require('ipc'))
class ApplicationComponent {
  constructor(ipc){
    this.ipc = ipc;
  }
}


var m = Module('module', [
  ApplicationComponent
]);
```

みたいにオブジェクトを突っ込んだり

```js
@Inject(app, MainWindow)
export default class Application {

  constructor(app, window) {
    this.app = app;
    this.window = window;

  }
}
```

のようにクラスを入れるとインスタンス化します。

# 困っている話

```
@Inject(1)
class Foo {
  constructor(num1) {
    this.num1 = num1;
  }
};
@Inject(2)
class Bar extends Foo {
  constructor(num1, num2) {
    super(num1);

    this.num2 = num2;
  }
} 

let bar = new Bar();

assert(bar.num1 === 1);
assert(bar.num2 === 1);

```

ES7 Decoratorsを使ったインジェクトの場合に継承の話題を全然見ませんが、スーパークラスとサブクラスの両方に指定した場合はどういう挙動するのが良いんでしょう？
自分は実際にコードを書いていて↑の形が嬉しかったのでそうしてみましたが、正直わかりやすいとは言い難いなと思ってます。

このあたりどうなると良いとかあればご意見ください！

# まとめ

正直、筋が良い方式でも実装でもないとは思いすが、テストのときに差し替えれて、お手軽に使えれば良いやというスタンスの自分にはこれで十分な感じです。
これで困るパターンが出てきたら、他にもいくつかDIライブラリが出ているのでそちらに移行しようかなと思います。
Unityでショートカットキーの自作

Editor拡張でショートカットキーを自作してみます。

```csharp
using UnityEditor;
using UnityEngine;

public class Test : Editor
{
    // % が Windowsで Ctrlキー, Macで Cmdキー
    [MenuItem("Shortcut/Ctrl+i or Cmd+i %i")]
    static public void CtrlOrCmdPlusKey()
    {
        // Windowsの場合は Ctrlキー + iキー
        // Macの場合は Commandキー + iキー
        Debug.Log("CtrlOrCmdPlusKey");
    }

    // # が Shiftキー
    [MenuItem("Shortcut/Shift+k #k")]
    static public void ShiftPlusKey()
    {
        // Shiftキー + kキー
        Debug.Log("ShiftPlusKey");
    }

    // & が Altキー
    [MenuItem("Shortcut/Alt+d &d")]
    static public void AltPlusKey()
    {
        // Altキー + dキー
        Debug.Log("AltPlusKey");
    }

    // _ が キーの修飾子なしの意味
    [MenuItem("Shortcut/N _n")]
    static public void OnlyKey()
    {
        // nキーのみ
        Debug.Log("OnlyKey");
    }

    // このように組み合わせもできる
    [MenuItem("Shortcut/Cmd+Shift+j #%j")]
    static public void CombinationKey()
    {
        Debug.Log("CombinationKey");
    }
}
```

既存のUnityキーとかぶらないように注意して作成することとします。
Microduino mCookieに入っていたもの

#<i class="fa fa-cubes" style="font-size:1em;"></i>概要
Microduino mCookieがようやく届いたので、入っていたものをアップ。

![mCookie入っていたもの1.jpg](https://qiita-image-store.s3.amazonaws.com/0/85506/dc5bbc5e-a512-7a65-3c42-a0c9c376711e.jpeg)

![mCookie入っていたもの2.jpg](https://qiita-image-store.s3.amazonaws.com/0/85506/24e6a6c4-e80d-cf25-3a93-596f9e8ef142.jpeg)

![mCookie入っていたもの3.jpg](https://qiita-image-store.s3.amazonaws.com/0/85506/2fed15c7-90f4-24a2-c75a-93bf6105bdd8.jpeg)

![mCookie入っていたもの4.jpg](https://qiita-image-store.s3.amazonaws.com/0/85506/41922fb8-8240-c974-3324-0abaf7926e16.jpeg)

![mCookie入っていたもの5.jpg](https://qiita-image-store.s3.amazonaws.com/0/85506/f8980a4a-db97-b3be-c712-1a28c76864f5.jpeg)

![mCookie入っていたもの6.jpg](https://qiita-image-store.s3.amazonaws.com/0/85506/9a335244-5a04-40d6-28fe-5a3c44b5cad1.jpeg)

![mCookie入っていたもの8.jpg](https://qiita-image-store.s3.amazonaws.com/0/85506/f2b7d06b-86cd-cee2-63dd-8f2c0c100410.jpeg)

#<i class="fa fa-cube" style="font-size:1em;"></i>内訳

Kickstarterのサイトより

```text
1 CoreUSB 
1 Bluetooth 
1 Hub 
1 BM 
1 Audio 
1 Amplifier 
1 OLED 
1 RTC 
2 Crash 
2 Color LED 
1 Mic 
1 Buzz 
2 Speakers 
1 Temp & Hum 
1 PIR 
1 IR Sensor 
1 IR Receiver 
1 Lightness Sensor 
1 USB Cable 
1 Li-ion Battery 
12 Sensor Cables
```

#<i class="fa fa-cube" style="font-size:1em;"></i>所感
気に入っているところ。
・磁石でガチャガチャ簡単にくっつく感じ。

気になるところ。
・センサーのパーツ達はレゴにくっつかないので、作品からぷらんぷらん浮いてしまいどうにも間抜けな感じ。
・ケーブルのコネクタが小さくて、取り付け・取り外しを繰り返す内にすぐにダメになりそう。

#<i class="fa fa-book" style="font-size:1em;"></i>参考
Microduinoの公式
https://www.microduino.cc/module?type=mCookie

Kickstarterのキャンペーン
https://www.kickstarter.com/projects/microduino/microduino-mcookie-the-smallest-electronic-modules