OmniAICreator/Qiita-1.07M huggingface dataset:
trコマンドでの大文字化(小文字化)

`tr`コマンドはcharacterを置換することができる。これを使ってアルファベットを大文字かする場合は以下のようにすればいける。

```zsh

$ cat nobita.txt
My name is Nobita. I'm 10 years old. Nice to meet you.
```

```
$ cat nobita.txt | tr [a-z] [A-Z] 
MY NAME IS NOBITA. I'M 10 YEARS OLD. NICE TO MEET YOU.
```

`tr`にはこの他にもclassと呼ばれるものがあり、これを使って大文字化(小文字化)することもできる。

```zsh
$ cat nobita.txt | tr [:lower:] [:upper:]
MY NAME IS NOBITA. I'M 10 YEARS OLD. NICE TO MEET YOU.

```

この`class`には他にも以下のようなものがあるらしい。

```zsh
$ man tr

~

     [:class:]  Represents all characters belonging to the defined character class.  Class
                names are:

                alnum        <alphanumeric characters>
                alpha        <alphabetic characters>
                blank        <whitespace characters>
                cntrl        <control characters>
                digit        <numeric characters>
                graph        <graphic characters>
                ideogram     <ideographic characters>
                lower        <lower-case alphabetic characters>
                phonogram    <phonographic characters>
                print        <printable characters>
                punct        <punctuation characters>
                rune         <valid characters>
                space        <space characters>
                special      <special characters>
                upper        <upper-case characters>
                xdigit       <hexadecimal characters>


~
```
c++ builder XE4, 10.2 Tokyo > 指定フォルダ以下をまるごとコピー > TDirectory::Copy()

関連: http://qiita.com/7of9/items/b06e6b3cf538e6774a16

TDirectoryにはCopy()というメソッドも用意されている。
これを使えば、指定のフォルダを別フォルダにまるごとコピーされる。

```txt:動作確認
C++ Builder XE4
RAD Studio 10.2 Tokyo Update 2 (追記: 2018/01/09)
```

```cpp
#include <IOUtils.hpp> // for TDirectory.XXX
...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    String srcDir = L"D:\\WORK\\Source";
    String dstDir = L"D:\\WORK\\Destination";

    TDirectory::Copy(srcDir, dstDir);
}
```

フォルダの同期処理など、このあたりを使えば少ないコードで実装できそう。
Elixirで Functionを作成してみる


今回は、`Function`を複数作成してみる。
Function名は同じ。
`Erlang`のドキュメントで知ったことだが、`Erlang`の世界では余り`if`文での分岐はしないようである。
理由が関数言語だからなのかは良く知らない。

`Java`でいうオーバーロードみたいな感じである。

```Hello.exs
defmodule Hello do
  def hello do
    IO.puts "Hello Elixir!!!"
  end

  def hello(name) do
    IO.puts "Hello " <> name <> " !!!"
  end
end
```

それぞれの関数を呼び出してみる。

```
$ iex Hello.exs 
Erlang/OTP 17 [erts-6.4] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
Hello.exs:1: warning: redefining module Hello
Interactive Elixir (1.0.4) - press Ctrl+C to exit (type h() ENTER for help)

iex(1)> Hello.hello
Hello Elixir!!!
:ok

iex(2)> Hello.hello("たぢさん")
Hello たぢさん !!!
:ok
```

ちなみに、定義されていない`integer`を引数にするとエラーとなる。

```
iex(3)> Hello.hello(123)       
** (ArgumentError) argument error
    :erlang.byte_size(123)
    Hello.exs:7: Hello.hello/1
```

今日はここまで。
OSXでYARN上のSpark実行環境を構築する

[OSXで擬似分散モードのApacheHadoop2.7.0を動かす](http://qiita.com/frkout/items/f965e166d0af529b5ce8) で構築したHadoop上に、YARN+Spark環境を構築したメモ

## ダウンロード & 展開
ビルドするのだるいので https://spark.apache.org/downloads.html から 
1.4.0 / Pre-build for Hadoop 2.6 and later を選択してダウンロード

![](http://i.gyazo.com/b5f58a0177a3d66700c58faa7eb0f587.png)


`/usr/local2/`以下に展開

```bash
$ tar zxvf ~/Download/spark-1.4.0-bin-hadoop2.6.tgz -C /usr/local2/
```

## 設定

`/usr/local2/spark-1.4.0-bin-hadoop2.6/conf/spark-env.sh`を作成
[このhadoop](http://qiita.com/frkout/items/f965e166d0af529b5ce8)に合わせてある。

```/usr/local2/spark-1.4.0-bin-hadoop2.6/conf/spark-env.sh
HADOOP_CONF_DIR=/usr/local2/hadoop-2.7.0/etc/hadoop
```

## 動作確認
yarn-clientモードでspark-shellを起動する

```
$ /usr/local2/spark-1.4.0-bin-hadoop2.6/bin/spark-shell --master yarn-client
log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
15/06/27 18:49:49 INFO SecurityManager: Changing view acls to: kodai_abe
15/06/27 18:49:49 INFO SecurityManager: Changing modify acls to: kodai_abe
15/06/27 18:49:49 INFO SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(kodai_abe); users with modify permissions: Set(kodai_abe)
15/06/27 18:49:49 INFO HttpServer: Starting HTTP Server
15/06/27 18:49:49 INFO Utils: Successfully started service 'HTTP class server' on port 60019.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 1.4.0
      /_/

Using Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_05)
Type in expressions to have them evaluated.
Type :help for more information.
15/06/27 18:49:51 INFO SparkContext: Running Spark version 1.4.0
15/06/27 18:49:51 WARN SparkConf: 
SPARK_CLASSPATH was detected (set to ':/usr/local2/hadoop-2.7.0/lib').
This is deprecated in Spark 1.0+.

## 以下省略
## ズラズラ流れてくる中に下のメッセージがあることを確認
## ....

15/06/27 18:50:04 INFO SparkILoop: Created spark context..
Spark context available as sc.

## ....
15/06/27 18:50:07 INFO SparkILoop: Created sql context (with Hive support)..
SQL context available as sqlContext.

## scalaのreplが出てくる
scala>
```
```
## 適当なファイルでワードカウント
scala> val textfile = sc.textFile("/user/kodai_abe/hadoop-env.sh")
scala> val counts = textfile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)
scala> counts.saveAsTextFile("/user/kodai_abe/spark_wordcount_out")
```

## HDFSのWebインターフェースから確認

![](http://i.gyazo.com/567adb6e5ad409447085a85d13ca2ac1.png)
Elixirで Moduleを作成してみる


前回は、1行のコマンドのみファイルに記述して実行した。

```Hello.exs
IO.puts "Hello Elixir!!!"
```

今回は、Moduleという形式でファイルを書き換えてみた。

```Hello.exs
defmodule Hello do
  def hello do
    IO.puts "Hello Elixir!!!"
  end
end
```

ファイル名を引数にして`iex`実行するとコンパイルされるらしい。


```
$ iex Hello.exs 
Erlang/OTP 17 [erts-6.4] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Interactive Elixir (1.0.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> Hello.hello
Hello Elixir!!!
:ok

iex(2)> Hello.hello()
Hello Elixir!!!
:ok
```

ちなみに引数でコンパイルせずに、関数の呼び出ししてみると失敗した。

```
$ iex
Erlang/OTP 17 [erts-6.4] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Interactive Elixir (1.0.4) - press Ctrl+C to exit (type h() ENTER for help)

iex(1)> Hello.hello
** (UndefinedFunctionError) undefined function: Hello.hello/0 (module Hello is not available)
    Hello.hello()

iex(1)> Hello.hello()
** (UndefinedFunctionError) undefined function: Hello.hello/0 (module Hello is not available)
    Hello.hello()
```

`iex`実行してプロンプトで呼び出す場合は、`c()`にてファイルをコンパイル読み込む。

```
iex(1)> c("Hello.exs")
[Hello]

iex(2)> Hello.hello
Hello Elixir!!!
:ok
```


とりあえず、今回はここまで。

※補足事項
ちなみに、`C("Hello.exs")`でコンパイルすると、`Elixir.Hello.Beam` というファイルが作成されていた。

これは後日に調べようと思う。
Sinatraのverbメソッドとインスタンスメソッドを関連づけるSinatra Extensionを書いた

# Sinatraのverbメソッドとインスタンスメソッドを関連づけるSinatra Extensionを書いた

Sinatraが提供するDSLは非常に簡潔でわかりやすいが、実体はクラスメソッドの実行文のため、モジュールなどに切り分けて後から`include`するなどといったことが困難である。

この問題は、数十個・数百個のルートを一つのアプリケーション上に定義することになったときに、混沌としたルーティングコードが出来上がることにつながってくる。

Padrinoが用意する`controller`や、`sinatra-contrib`の中の`Sinatra::Namespace`は、その問題を解決するに十分な機能だと言えるが、今回紹介するSinatra Extensionもまた、それに対する新たな解決策となる(かもしれない)。


[namusyaka/sinatra-bind](https://github.com/namusyaka/sinatra-bind)


## 考え方

Sinatraでは、`get`や`post`などのverbメソッド(と自分は呼んでいる)に渡されたブロックを一旦、`Sinatra::Base`のインスタンスメソッドとして定義する。そしてすぐにそれを`instance_method`を用いて`UnboundMethod`として取り出し、自身の条件に当てはまるリクエストを受け取る度に、都度生成されるアプリケーションオブジェクトをレシーバとして`bind`後、実行するようになっている。

内部的にブロックをメソッドに変換して管理しているということは、同様に正規の方法で定義されたインスタンスメソッドもルーティングに対して使えるだろうということで、今回のアイデアを思いついた。

ちなみにこの「ブロックをメソッドとして定義する」というプロセスを踏んでいることで、sinatraの代表的な機能の一つとも言えるルート間でのインスタンス変数の共有(や、その他たくさんの便利機能)を実現している。

## 使い方

`register`キーワードを使ってSinatraに`Sinatra::Bind`を登録することで、新たに`on`というルート定義用のメソッドが追加される。

```ruby
class App < Sinatra::Base
  register Sinatra::Bind
  
  def index
    "Hello World"
  end
  
  on "/", to: :index
end
```

### リクエストメソッドの指定

`:type`オプションに指定することでそのように定義される。

```ruby
class App < Sinatra::Base
  register Sinatra::Bind
  
  def index
    "Hello World"
  end
  
  on "/", to: :index, type: :post
end
```

### `before`・`after`フィルター

`:type`オプションに`:before`・`:after`を指定することで、フィルターとして定義される。

## おわりに

面白い試みではあると思う反面、**ぶっちゃけ邪道っぽい。**

おわり。
pgModeler を OSX にインストールして ER 図を描く

[pgModeler](http://pgmodeler.com.br/) を使って PostgreSQL のデータベースから ER 図を生成してみた。

インストール
----

ひとまず無料で使う事を考え、オープンソースとして公開されているものをコンパイルしてインストールしてみる。

### Qt5

```
$ brew install qt5
```

### pgModeler

- PostgreSQL は Homebrew でインストールしたので `PGSQL_(INC|LIB)` を変更
- pgmodler.app 実行時に No image となったので QMAKE_LFLAGS_SONAME を追加

```
$ git clone https://github.com/pgmodeler/pgmodeler.git
$ cd pgmodeler
$ git log -1
commit feba0201b16950cf735472ffb85693368da9a348
Author: Raphael A. Silva <rkhaotix@gmail.com>
Date:   Mon Jun 15 18:50:35 2015 -0300

    Fixed the deployment script on Mac OSX to make the CLI and crash handler
    find the core libraries properly.

$ cat <<EOF | patch
diff --git a/pgmodeler.pri b/pgmodeler.pri
index 5b07b98..81b26e1 100644
--- a/pgmodeler.pri
+++ b/pgmodeler.pri
@@ -114,6 +114,7 @@ macx {
 
   # Specifies where to find the libraries at runtime
   QMAKE_RPATHDIR += @executable_path/../Frameworks
+  QMAKE_LFLAGS_SONAME = -Wl,-install_name,@rpath/
 }
 
 # Creating constants based upon the custom paths so the GlobalAttributes
@@ -145,8 +146,8 @@ unix:!macx {
 }
 
 macx {
-  PGSQL_LIB = /Library/PostgreSQL/9.4/lib/libpq.dylib
-  PGSQL_INC = /Library/PostgreSQL/9.4/include
+  PGSQL_LIB = /usr/local/opt/postgresql/lib/libpq.dylib
+  PGSQL_INC = /usr/local/opt/postgresql/include
   XML_INC = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2
   XML_LIB = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/lib/libxml2.dylib
 
EOF
$ /usr/local/opt/qt5/bin/qmake pgmodeler.pro
$ make
$ make install
```

### 2015/07/17 追記

- [homebrew-koshigoe/pgmodeler.rb at master · koshigoe/homebrew-koshigoe](https://github.com/koshigoe/homebrew-koshigoe/blob/master/pgmodeler.rb)


ER図
----

既存データベースから ER 図を作るのは Import 機能を使用する。
# MeteorのDDPを使ってテンプレートとAPIを切り離す

https://github.com/endows/meteor-ddp
Meteorは速攻でCollectionからソーシャル認証までを作れるすぐれものです。テンプレートエンジンもangularからreactまで自由に使えます。
使えるんですが・・・angualr-meteorを経験してangularとmeteorが織りなす魔術コードに吐き気を催してしまいました。

firebaseのようにすっきりとコードを分離できれば嬉しいなと思って作ってみました。詳細はこのレポジトリをみてください。

##環境
```
Meteor
Asteroid
Webpack
```

##注意事項
Meteor-DDPクライアントのAsteroidですが、デフォルトではWebpackから使えません。```npm install asteroind```はNode.js専用に作られてるみたいです。bowerバージョンなら使えそうですが。

```npm```から使いたかったのでnpmレポジトリを作りました。


npm install asteroid.browser
```
でインストールしてください。
Webpackからインストールする際は
```
var asteroid = require('asteroid.browser')
```
です。
PhpStormの初期設定メモ　（for Vagrant環境）


#1. 環境前提
ホスト : MacOSX + VirtualBox + Vagrant
ゲスト : CentOS6.5, Nginx, PHP
192.168.33.20 を private network で設定

#2. VM側追加設定　
（＊今回はVM環境にて直接実行。本来はchef化 or sh でVagrant provisionとしたい。宿題）
##(1) 共有フォルダ設定
ホストと ゲスト VM は、以下手順でsynced folder でnginxのドキュメントルートとディレクトリ共有設定をしておく。

+ シンボリックリンク作成

```bash:
#一旦削除
sudo rm -rf /usr/share/nginx/html
#シンボリックリンク
sudo ln -fs /home/vagrant/html /usr/share/nginx/html

```

+ Vagrantfileにsynced_folderの設定

```bash:Vagrantfile
config.vm.synced_folder "src/", "/home/vagrant/html"
```

#(2) Xdebugのインストール

```bash:
sudo yum -y install php-pecl-xdebug
#確認
php -v
#結果以下のようにXdebugのバージョン情報が出力される
PHP 5.5.26 (cli) ・・・
with Xdebug v2.3.2, Copyright (c) 2002-2015, by Derick Rethans
```

php.iniに以下を追加

```bash:php.ini
#リモートデバックを有効にする
xdebug.remote_enable = On
#リモートデバッグが常に開始されるように設定
xdebug.remote_autostart = On
デバッグクライアントの IP を指定
xdebug.remote_host = 192.168.33.1
```

##(3) 環境変数の設定
```bash:
export PHP_IDE_CONFIG="serverName=192.168.33.20"
```

##(4) ついでに・・PHPUnitのインストール
```bash:
wget https://phar.phpunit.de/phpunit.phar
chmod +x phpunit.pharPhpStorm
sudo mv phpunit.phar /usr/local/bin/phpunit
phpunit --version
```

#3. PhpStormの設定
##(1)PHPRemoteDebug設定
###①設定
+ PhpStorm メニュー→[Run]→[Edit Configurations…]　で、
[Run/Debug Configurations] ダイアログを開く

+ [+] をクリックして、[PHP Remote Debug] を選択
![Kobito.xjS5SV.png](https://qiita-image-store.s3.amazonaws.com/0/72578/21f9dbac-28cc-78b4-a52b-e689ebdcedfe.png "Kobito.xjS5SV.png")

+  Servers の参照 ... ボタンを押下し、サーバ設定を以下のように行い、 OKボタンで登録。
![Kobito.NqpvfI.png](https://qiita-image-store.s3.amazonaws.com/0/72578/c1668185-bb4a-4047-1069-b686d86b8c4f.png "Kobito.NqpvfI.png")

+ Servers に設定したサーバ名が反映されている事を確認、session id はdummyで何か入れて、OKボタンで登録。
![Kobito.jfkFPp.png](https://qiita-image-store.s3.amazonaws.com/0/72578/816c30df-c8c0-cd14-7f71-b8910e6dbb68.png "Kobito.jfkFPp.png")

###②動作確認
+ PhpStorm にて　リモートデバッグを有効にし、最初の行でBreakする用に設定
+ [Run] – [Start Listen for PHP Debug Connections] 
+ [Run] – [Break at first line in PHP Scripts]

設定後の状態
![Kobito.AJI6Ma.png](https://qiita-image-store.s3.amazonaws.com/0/72578/6ec29a77-7b4c-2de5-0e58-9baf7d9e0890.png "Kobito.AJI6Ma.png")

+ ブラウザで適当なphpファイルを叩く
→PhpStormでデバッグモードに
![Kobito.PhbScn.png](https://qiita-image-store.s3.amazonaws.com/0/72578/5cf8b355-078d-9d07-c894-d42c1459fd99.png "Kobito.PhbScn.png")


+ CLIで適当なphpファイルを叩く

```bash:
vagrant ssh 
php XXX.php
```

→PhpStormでデバックモードに。

#98.その他chef化Todo
sudo yum install php-mbstring
sudo yum install php-xml

#99.参考ページ
[PhpStorm Advent Calendar 2013](http://qiita.com/advent-calendar/2013/PhpStorm)
[Shin x blog PhpStorm から Vagrant VM の PHP アプリケーションをリモートデバッグする（Web & CLI)](http://www.1x1.jp/blog/2014/08/how-to-setup-php-remote-debug-with-vagrant-vm.html)
[PhpStorm 8 で、Vagrant VM の PHPUnit を IDE から実行する](PhpStorm 8 で、Vagrant VM の PHPUnit を IDE から実行する)
crystalの`record`マクロとは


`src/compiler`以下を読んでいると、ちょいちょい`record`ってでてくるけど、docになかったので調べてみた。

```rb
class String
...
  record ToU64Info, value, negative, invalid
...
end
```

実体はマクロで`src/macros.cr`に定義されている。

```rb
macro record(name, *fields)
  struct {{name.id}}
    getter {{*fields}}

    def initialize({{ *fields.map { |field| "@#{field.id}".id } }})
    end

    {{yield}}

    def clone
      {{name.id}}.new({{ *fields.map { |field| "@#{field.id}.clone".id } }})
    end
  end
end
```

`getter`と`clone`つきの`struct`をそのクラス内に定義してくれる。

```rb
class My
  record MyRecord, key, value

  def initialize(@key, @value)
  end

  def record
    MyRecord.new @key, @value
  end
end

my = My.new "hoge", 10

puts my.record
#=> My::MyRecord(@key="hoge", @value=10)
puts typeof(my.record)
#=> My::MyRecord
puts my.record.key
#=> hoge
```

ブロックもとることができ、`struct`の文脈でyieldしてくれる。

```rb
class My
  record MyRecord, key, value do
    def to_hash
      hash = {} of typeof(@key) => typeof(@value)
      hash[@key] = @value
      hash
    end
  end

  def initialize(@key, @value)
  end

  def record
    MyRecord.new @key, @value
  end
end

my = My.new "hoge", 10

puts my.record.to_hash
#=> {"hoge" => 10}
```

あれ、マクロだとブロック内で`def`できるんだ。。
Swiftでネームスペースを付ける方法

## Swiftにはネームスペースがない！
Objective-Cに無いのでSwiftにも無いのだろう。
でも、たまに使いたくなる。

今回は思いつかなかったので、そのままフラットに進めてしまったけど`extension`を使えばネームスペースっぽいことができるなと思ったのでメモしておく。

## インナークラスを作る
Swiftではインナークラスが作れる。
なので、

```swift:NameSpace.swift
class NameSpace: NSObject {
    class Hoge {
        func test() {
            print("foo")
        }
    }
}
```

と記載すれば

```swift
let hoge = NameSpace.Hoge()
hoge.test()
```

と、呼び出せてネームスペースっぽい。

## ファイルを分けたい
当然だけど、この方法で進めてしまうと全てのクラスを同じファイルに書かなければなら無いので現実的では無い。
大本の`NameSpace`クラスとは別のファイルで子クラスを定義したいなら`extension`を使って以下のように書く。

```swift:NameSpace.swift
extension NameSpace {
    class Hoge {
        func test() {
            print("foo")
        }
    }
}
```

これで擬似的にネームスペースができる。

なんか、書いてみるとRubyの仕組みに似てる。
Rubyもネームスペース無いもんなぁ・・・。

以上。
iTerm2のVimで、insert mode時のカーソルの形状を変化させる方法


普段のカーソルの形状はBoxなのですが、insert時はVertical Barになって欲しいのでこれの設定をしました。

やり方は、以下の設定をvimrcに追加するだけ

```bash:~/.vimrc
let &t_SI = "\<Esc>]50;CursorShape=1\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"
```

tmux使ってる人は以下

```bash:~/.vimrc
let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1\x7\<Esc>\\"
let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0\x7\<Esc>\\"
```

詳しくは以下参照

[Change cursor shape in different modes](http://vim.wikia.com/wiki/Change_cursor_shape_in_different_modes)
c++ builder XE4, 10.2 Tokyo > fileIO > 指定フォルダ以下のフォルダをすべて取得 > TDirectory::GetDirectories()

あるフォルダ以下のサブフォルダをすべて取得したい。

以下が参考になった。
1. http://stackoverflow.com/questions/6536525/how-to-search-a-file-through-all-the-subdirectories-in-delphi
2. http://www.gesource.jp/weblog/?p=4509
3. http://h4s.hatenablog.com/entry/2014/01/22/193235


```txt:動作確認
C++ Builder XE4
RAD Studio 10.2 Tokyo Update 2 (追記: 2018/01/09)
```

```cpp
#include <IOUtils.hpp> // for TDirectory.XXX
...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	String baseDir = L"D:\\Data\\Test";

	TStringDynArray dirList;
    TSearchOption option = TSearchOption::soAllDirectories; // すべてのフォルダを取得

	dirList = TDirectory::GetDirectories(baseDir, L"*", option);

	for(int idx=0; idx<dirList.Length; idx++) {
        Memo1->Lines->Add(dirList[idx]);
    }
}
//---------------------------------------------------------------------------
```
RailsでReactを動かしてみた(React + Rails + SQLite)



#アプリ概要
Bookモデルに対してCRUD操作ができるだけのアプリです。
サーバーサイドはRails(4.2.1)で作成し、JSONを返すだけでViewは担当していません。APIに徹してもらいました。
クライアントサイドはReactで作成し、AjaxでRailsとやりとりしています。Fluxはよくわかっていないので使っていません。

ソースはこちら
Github:  https://github.com/takayuki-ochiai/react-rails-practice

#参考にしたもの


###RailsでReactを動かしてみる（browserify + watchfy + reactify）
http://qiita.com/ysm001/items/d07c4dcfe88793cd55b6

npmの使い方やルーティングの方法はこちらを参考にさせていただきました。
Reactはこちらの方式にのっとり、npmでインストールしています。


###React.jsでRailsのScaffoldを再現してみた
http://qiita.com/Peranikov/items/ba6f31a88139543db6b8

AjaxでのRailsとのやりとりであったり、CRUDのコンポーネントの作成はこちらを参考にさせていただきました。

##ルーティングについて
###React.jsでserver-side renderingにも対応したRouting
http://qiita.com/koba04/items/737c783f1189355e053f

###React初心者のためのreact-routerの使い方
http://beck23.hatenablog.com/entry/2015/02/20/054900#2

ルーティングはreact-routerを使っていたのですがけっこうハマりました。
これらの記事で趣がつかめましたが、個人的にはわかりづらさを感じたので別記事でまとめたいと思います。
さくらのレンタルサーバーで独自SSLを使う時にhttpsにリダイレクトする


##はじめに

さくらのレンサバでも独自SSL(SNI SSL)が利用できるようになったということで、いろいろ試してみると本当に簡単に導入できました。

インストール手順は以下そのままです。
https://help.sakura.ad.jp/app/answers/detail/a_id/2326

ところが、.htaccessを利用したSSLの強制適用や、URL転送は単純に転送するとループになってしまいうまく動作しないようです。

せっかくSSL対応にしたのに、httpでアクセスされるのはなんとなくイヤなので強制的にhttpsにリダイレクトする方法を考えました。

## 方法１(2016/6/27追記）

以下のファイルを.htaccessとしてフォルダーに入れます。ポイントとしては転送後につけられるX-Sakura-Forwarded-Forが未設定の場合にのみ転送されます。

```.htaccess
RewriteEngine on
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
```

通常は
> RewriteCond %{HTTPS} Off
としておけば、HTTPSがoffの場合のみRewriteが動きます。

## 方法２（以前の方法です）

index.phpやアクセスのあるスクリプトの先頭に以下のコードを追加します。

```php:index.php
<?php 
  if (empty($_SERVER['HTTPS'])) {
    header("Location: https://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}"); 
    exit; 
  }
?>

....

```

さくらのレンサバはhttpとhttpsが同じディレクトリーなので、httpでアクセスがあった場合に、同しパスのhttpsを開くようにするダケです。

コードは混在するとアラートが出るので外部リンク等はすべてhttpsにしておけば良いと思います。これを主要なところに貼り付けておけば対応完了です。

## ぶつぶつ

共有SSLの場合にいろいろあるようなのですが、独自の場合でも同様なのかは検証できていません（下記リンク）

http://wsf.mot.or.jp/yujakudo/website-admin/shared-ssl/use-shared-ssl-of-sakura/

## 参考

+ PHPでHTTPS(SSL)接続じゃなかったらHTTPSのURLにリダイレクトする
http://blog.ruedap.com/2011/06/08/php-http-https-ssl-url-redirect
AffeldtさんのSsreflectチュートリアルのソースをビルドする

# 目的

https://staff.aist.go.jp/reynald.affeldt/ssrcoq/ にある「Coq/SSReflectファイル」を手元で動かす

# 必要なもの

- coq-8.4
- ssreflect-1.5 (1.4でもOK?)

# 手順

次の内容でMakeというファイルを作る。

```lang:Make
-R .
bigop2_example.v
group_example.v
predicative_example.v
bigop_example.v
ssrbool_example.v
dependent_example.v
logic_example.v
ssrnat_example.v
eqtype_example.v
tactics_example.v
finset_example.v
matrix_example.v
tuple_example.v
fintype_example.v
permutation_example.v
view_example.v
```

次を実行

```lang:sh
coq_makefile -f Make -o Makefile
```
【Java】ポケモンショックをJavaで再現する

```java:Pokemonshock.java

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferStrategy;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;

public class Pokemonshock {
        
        public static void main(String[] args) {
                Pokemonshock gtm = new Pokemonshock();
                gtm.start();
        }
        
        JFrame mainwindow;
        BufferStrategy strategy;
        Boolean apple=true;
        
        //コンストラクタ
        Pokemonshock(){
            this.mainwindow=new JFrame("Pokemonshock");
            this.mainwindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.mainwindow.setSize(1280,720);
            this.mainwindow.setLocationRelativeTo(null);
            this.mainwindow.setVisible(true);
            this.mainwindow.setResizable(false);
            //バッファストラテジー
            this.mainwindow.setIgnoreRepaint(true);
            this.mainwindow.createBufferStrategy(2);
            this.strategy=this.mainwindow.getBufferStrategy();
        }
        
        void start(){
            //intervalミリ秒毎にrunメソッドが呼ばれる
            Timer t=new Timer();
            long interval=(1000/12);
            TimerTask task=new RenderTask();
            t.schedule(task,0,interval);
        }
        
        void render(){
            Graphics2D g=(Graphics2D)this.strategy.getDrawGraphics();
            
	        //背景色の指定
                if(apple){
                  g.setBackground(Color.RED);
                }else{
                  g.setBackground(Color.BLUE);  
                }
                
            //反転させる
            apple=!apple;
		
            g.clearRect(0, 0,this.mainwindow.getWidth(), this.mainwindow.getHeight());
            g.dispose();
            this.strategy.show();
        }
        
        class RenderTask extends TimerTask{
            
	    @Override
	    public void run() {
                Pokemonshock.this.render();
            }
        }

}


```
##環境
ベアボーン:Shuttle XS35GS V3
OS:win7(32bit)
JAVA SE8(jdk-8u45-windows-i586)

##注意
このプログラムを実行すると、光過敏性発作を起こすかもしれないので注意ください。また、画面を激しくない点滅にする方法を載せておきます。赤と青の画面の切り替えは1秒に12回の仕様ですが、1秒に1回に変更する方法は次のとおりです。

```java


long interval=(1000/12);
// ↓ 12から1に変える
long interval=(1000/1);

```

##解説

今回、Javaのリアルタイム処理の勉強の題材に「ポケモンショック、赤と青の激しい点滅」を選んだ。
リアルタイム処理に使うのはTimerTaskクラスとTimerTaskクラスのrunメソッドである。
TimerTaskクラスは抽象クラスであり、TimerTaskクラスのrunメソッドは抽象メソッドである。抽象クラスはオブジェクトを生成できないので、TimerTaskクラスは継承してRenderTaskクラスとし、runメソッドはオーバーライドして使用する。runメソッドは1秒に12回呼び出しをされる。

##実行結果
```
c:\2015>javac Pokemonshock.java

c:\2015>java Pokemonshock

c:\2015>

```

##あとがき
1997年に『ポケットモンスター』第38話「でんのうせんしポリゴン」を鑑賞した児童の中で赤と青の激しい光の点滅により光過敏性発作で病院に運び込まれるポケモンショックという事件が起きた。私は当時小学生でポケモンに夢中でしたが、地方在住のためテレビ東京が映らず、ポケモンの放送が何話か遅れている地方局で見ていたため、この第38話は見ていません。この事件で、ポケモンが一旦放送をやめてしまし、代わりに学級王ヤマザキが私が見ていた地方局で放送されていました。
LibreOfficeで最小二乗近似

LibreOfficeのCalcで最小二乗法による近似多項式の各項の係数を求める方法を記録する。

# LinEst関数

```
LinEst(既知のy, 既知のx, 定数項, 補正)
```

**既知のy** 計測値などを入力する。1行もしくは1列の配列。
**既知のx** 既知のyと同じ行、もしくは列方向に並んだデータ。`^{1, 2, 3}`を付けることで1乗、2乗、3乗のベクトルを表す。
**定数項** `TRUE()/FALSE()`で与える。`TRUE()`は定数項を計算することを示す。`FALSE()`は定数項を0とすることを示す。
**補正** `TRUE()`は計算結果の詳細を返す。確実度である`R^2`値を得るために`TRUE()`を指定する。`FALSE()`を指定すると、各項の係数のみを得ることができる。

# 利用例
* 近似対象データ
 - xデータ: A7:A23
 - yデータ: C7:C23  
にそれぞれ格納されているものとする。  
![LinEst_data.png](https://qiita-image-store.s3.amazonaws.com/0/52878/5ddc3b0c-718c-7914-2c78-7f9db4403ff9.png)

基本的にはExcelで用意されている関数LinEstと同様に扱うことができる。
近似結果を格納するセルに以下の数式を入力して`Ctrl`+`Shift`+`Enter`キーを押下する。`^{1, 2, 3}`と記載しているように3次多項式での近似を表している。

```
=LINEST($C$7:$C$23,$A$7:$A$23^{1,2,3},TRUE(),TRUE())
```

算出結果は次の通り
![estimate_3.png](https://qiita-image-store.s3.amazonaws.com/0/52878/a21b08a4-cfbc-1203-71f4-9c15101dfc7e.png)

この行列において、
1行1列目: 3次の項の係数(0.05099148)
1行2列目: 2次の項の係数(-1.04515833)
1行3列目: 1次の項の係数(4.44312349)
1行4列目: 定数項(3.79586792)
3行1列目: `R^2`値(0.98690446)
である。

各項の係数を個別に取得する場合は、`INDEX()`関数を用いる。
1次の項の場合

```
=INDEX(LINEST($C$7:$C$23,$A$7:$A$23^{1,2,3},TRUE(),TRUE()), 1, 3)
```
かゆいところに手が届く、5つのJenkinsプラグイン

こんにちは。
CruiseControl→Hudson→JenkinsとCIツールを渡り歩いてきた者です。
最近はAtlassianのBambooも使っています。

いろんな開発チームで使えそうな便利プラグインを紹介します。

# Timestamper
* https://wiki.jenkins-ci.org/display/JENKINS/Timestamper
* ビルド結果にタイムスタンプを付加してくれます。ビルド時間が長くなってくると、どの処理に時間がかかっているのか調べたくなりますが、そんなときに大変重宝します。

# Next Build Number Plugin
* https://wiki.jenkins-ci.org/display/JENKINS/Next+Build+Number+Plugin
* 通常、Jenkinsのビルド番号は#1から順番に振られていきますが、このプラグインを導入するとビルド番号を好きな番号から始めることができます。私は別のCIシステムからJenkinsに移行したときにお世話になりました。

# Sidebar-Link Plugin
* https://wiki.jenkins-ci.org/display/JENKINS/Sidebar-Link+Plugin
* Jenkinsのサイドバー（画面左のメニュー）にお好みのリンクを追加できます。私はバグトラッカーやWikiなど別システムへのリンクを設置したり、プロジェクトごとに生成される成果物（yuidocとか）へのリンクを付けたりして活用しています。

# JobConfigHistory Plugin
* https://wiki.jenkins-ci.org/display/JENKINS/JobConfigHistory+Plugin
* 誰が、いつ、どこの設定を変えたなど、Jenkinsの設定変更履歴を記録してくれます。これがあると設定変更が原因でビルドが失敗するようになったときにも安心です。

# Disk Usage Plugin
* https://wiki.jenkins-ci.org/display/JENKINS/Disk+Usage+Plugin
* その名の通り、ディスク使用量を表示してくれるプラグインです。ビルドの成果物もたまってくるとけっこうな容量になってくるので、これがあると使用量が一目で分かって便利です。

以上、私が以前からお世話になっているプラグインたちでした。開発者の皆様に感謝。
Rubyの変数初期化で驚いた話

## 概要

まず、以下のコードを見てください

```ruby:irb
irb(main):001:0> hoge
```

結果はなんでしょうか？

`NameError`ですね。当然ですね

```ruby:irb
NameError: undefined local variable or method `hoge' for main:Object
	from (irb):1
	from /Users/itkrt2y/.rbenv/versions/2.2.2/bin/irb:11:in `<main>'
```

では、次に以下のようにしてみましょう

```ruby:irb
irb(main):002:0> if false
irb(main):003:1>   foo = true
irb(main):004:1> end
=> nil
irb(main):005:0> foo
```

002~004は条件式でくくっていますが、見ての通り`if false`なので内部は実行されません。
では、005の`foo`の結果はどうなるでしょうか？

`NameError`だと思いました？

僕はそう思ってました

だが、結果は違った......！！

```ruby:irb
irb(main):005:0> foo
=> nil
```

答えは `NameError`ではなく`nil`！

じゃ、じゃあ`case`ではどうなんだ！？

```ruby:irb
irb(main):006:0> case :a
irb(main):007:1> when :b
irb(main):008:1>   bar = true
irb(main):009:1> end
=> nil
irb(main):010:0> bar
=> nil
```

これも`nil`！

実行されないはずなのになぜ`nil`で初期化されるのか？
正直まだよくわかってないですが、以下のコードで`hoge`が`NameError`にならないのと同じ理由っぽい？

```ruby:
hoge ||= "default" # hoge = hoge || "default"
```

## ちなみに

当たり前ですが、初期化済みの場合は`nil`で上書かれたりはしません

```ruby:irb
irb(main):001:0> hoge = "hey!"
=> "hey!"
irb(main):002:0> if false
irb(main):003:1>   hoge = "hello"
irb(main):004:1> end
=> nil
irb(main):005:0> hoge
=> "hey!"
```

## まとめ

条件式にて実行されない処理内の変数も初期化されます

## 追記

どうやらこれはvariable hoistingっていうらしい。
http://rubylogs.com/variable-hoisting-ruby/

parserが条件式の結果はどうであるかは御構い無しにまず一度全ての変数のメモリー領域を確保し、
interpreterの実行時に実際に値を入れるからこのような挙動になるとのこと
jacksonでVerifyErrorが出る


# 現象

scala(sbt)で今まで通っていたビルドが取らなくなった。
どうもjackson関係でこけているみたい。

```
java.lang.VerifyError: class com.fasterxml.jackson.module.scala.ser.ScalaIteratorSerializer overrides final method withResolved.(Lcom/fasterxml/jackson/databind/BeanProperty;Lcom/fasterxml/jackson/databind/jsontype/TypeSerializer;Lcom/fasterxml/jackson/databind/JsonSerializer;)Lcom/fasterxml/jackson/databind/ser/std/AsArraySerializerBase;
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at com.fasterxml.jackson.module.scala.ser.IteratorSerializerModule$class.$init$(IteratorSerializerModule.scala:70)
        at com.fasterxml.jackson.module.scala.DefaultScalaModule.<init>(DefaultScalaModule.scala:19)
```


# 対策

- [このStackOverflow](http://stackoverflow.com/questions/100107/reasons-of-getting-a-java-lang-verifyerror)を参考にしました
	- VerifyErrorはRuntime時とCompile時で用いたソースが異なっている時に起こる

- jackson-databindの最新版2.6.0-rc3リリースで、`AsArraySelializerBase.java`の`withResolved`がdeprecatedになり、finalが付けられている
	- [commit](https://github.com/FasterXML/jackson-databind/commit/9ed3abf2f233a789c28f863221f3da6681b9cf86#diff-1a6d4c0e2d1a53346aa8b087ecddbec2R138)
- sbtでコンパイルを行うと、最新版がresolveされて、compile時はjackson-databind:2.6.0-rc3が使用されていた



```
[info]   +-com.fasterxml.jackson.module:jackson-module-scala_2.10:2.4.4 [S]
[info]   | +-com.fasterxml.jackson.core:jackson-annotations:2.4.4 (evicted by: 2.6.0-rc3)
[info]   | +-com.fasterxml.jackson.core:jackson-annotations:2.6.0-rc3
[info]   | +-com.fasterxml.jackson.core:jackson-core:2.4.4 (evicted by: 2.6.0-rc3)
[info]   | +-com.fasterxml.jackson.core:jackson-core:2.6.0-rc3
```

- [sbtマニュアル](http://www.scala-sbt.org/0.13/docs/Library-Management.html)に従って、overrideを禁止する


```
// Build.scalaの場合

     dependencyOverrides ++= Set(
       "com.fasterxml.jackson.core" % "jackson-databind" % "2.4.4"
     )

```
- jackson-databindのversionは適当に選んで下さい。最新なら`2.5.3`かと。

# 最後に

- sbtでのresolveは常に最新版を見に行くのでしょうか??ちょっとよくわからない...orz
スモールスタートJava8 Stream API

Java8のStream API、使ってみたくてググったら色々出てきますが、
今回はfor文や拡張for文をStreamに書き換えるだけの方法を紹介します。
さらに、これだけでは特においしい部分が薄いので並列化する方法も紹介します。

# for文
```java
for(int i=0;i<100;i++){
  System.out.println(i);
}
```

↓

``` java
IntStream intStream = IntStream.range(0, 100);
intStream.forEach(i -> {
  System.out.println(i);
});
```

# 拡張for文 (for-each)
```java
// List
List<String> list = Arrays.asList("a","b","c");
for(String s: list){
  System.out.println(s);
}

// 配列
String[] array = {"a", "b", "c"};
for(String s: array){
  System.out.println(s);
}
```

↓

``` java
// List
List<String> list = Arrays.asList("a","b","c");
Stream<String> listStream = list.stream();
listStream.forEach(s -> {
  System.out.println(s);
});

// 配列
String[] array = {"a", "b", "c"};
// どちらも出来るものは同じ
Stream<String> arrayStream01 = Arrays.stream(array);
Stream<String> arrayStream02 = Stream.of(array);

arrayStream01.forEach(s -> {
  System.out.println(s);
});

arrayStream02.forEach(s -> {
  System.out.println(s);
});

```


# 並列化
- 作成したStreamで.parallel()を実行するだけ
- ただし、順番は保証されない(順番に実行するforEachOrdered()というメソッドも用意されているが並列化の意味が…)
 - (追記)Stream元や処理によってはparallel()+forEachOrdered()の方が早いそうです

```java
IntStream intStream = IntStream.range(0, 100).parallel();
Stream<String> listStream = list.stream().parallel();
```

# おわりに
for文を単純にStream APIを使用して置き換える方法を紹介しました。
これらを使ってみつつ、やりたいことベースで中間処理とか末端処理のメソッドを調べていけばいいのではないでしょうか。
個人的には並列処理がメソッド一つで難しいことを考えずに気軽に使えるのがありがたいです。

## 参考
- [Java Streamメモ(Hishidama's Java8 Stream Memo) ](http://www.ne.jp/asahi/hishidama/home/tech/java/stream.html)
- [Stream APIの主なメソッドと処理結果のOptionalクラスの使い方](http://www.atmarkit.co.jp/ait/articles/1405/20/news032.html)
AWSのEC2インスタンス（Amazon Linux）にJenkinsをインストールする

2018年6月16日に新しい記事を書きました。
[AWS の EC2 インスタンス（Amazon Linux）に Jenkins 2 をインストールする](https://qiita.com/thirota/items/dc1dc558e5439fb0b0b6)

---

こんにちは。
ふだんはオンプレミス環境で Jenkins を利用している者です。

AWSのEC2にJenkinsを構築する手順についてメモ書き。

## EC2インスタンスの作成
* EC2インスタンスを作成します。パラメータはお好みで。私は以下のようにしました。
    * AMIはAmazon Linux
    * インスタンスタイプはt2.micro
    * デフォルトVPC
    * Public IPは有効
    * セキュリティグループでSSH 22番、TCP 8080番をIPアドレス指定で許可  

* SSHログイン後、パッケージをアップデートしておきます。

```
$ sudo yum update
```

## Jenkinsのインストール
* yumのリポジトリを追加します。

```
$ sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
$ sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
```

* Jenkinsをインストールします。

```
$ sudo yum install jenkins
```

* 1.617がインストールされました。

```
$ rpm -qa | grep jenkins
jenkins-1.617-1.1.noarch
```

* ランレベル3と5で自動起動になっているようです。

```
$ chkconfig --list jenkins
jenkins        	0:off	1:off	2:off	3:on	4:off	5:on	6:off
```

## Jenkinsの起動

* 起動します。

```
$ sudo service jenkins start
```

* ブラウザでJenkinsのURLにアクセスします。

```
http://＜EC2インスタンスのパブリックDNS or IP＞:8080/
```

![jenkins-01.png](https://qiita-image-store.s3.amazonaws.com/0/83323/ec5d42d0-6db0-8485-70df-03151c01f7a3.png)

* 以上でインストールは完了です。このままだとEC2インスタンスの再起動後にURLが変わってしまうので、EIPを割り当て後、Route 53などのDNSサービスでホスト名を固定化してあげると良いでしょう。

## 参考

* https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Red+Hat+distributions
gitWatch > GetPPException; / ThrowImageException;


https://github.com/ImageMagick/ImageMagick/commit/fa07ed776259cfb15afe100b85de0c2ee81fc85d

上記のコミットを見ていく中で以下のコードを見つけた。

```
+void Magick::Image::cdl(const std::string &cdl_)
+{
+  modifyImage();
+  GetPPException;
+  (void) ColorDecisionListImage(image(),cdl_.c_str(),exceptionInfo);
+  ThrowImageException;
+}
+
```

GetPPException; と ThrowImageException; が気になった。

http://code.metager.de/source/xref/ImageMagick/Magick%2B%2B/lib/Functions.cpp
にそれぞれdefineされていた、と思ったけど、ThrowImageExceptionの定義は別のとこらしい。

```
19 #define GetPPException \
20   ExceptionInfo \
21     exceptionInfo; \
22   GetExceptionInfo(&exceptionInfo)
23 #define ThrowPPException \
24   throwException(exceptionInfo); \
25   (void) DestroyExceptionInfo(&exceptionInfo)
```
AutoLayoutから学ぶ新人教育


全くもって意味不明かもしれません。


最近新人教育について考えていて、
iOSのAutoLayoutの考え方って「新人への指示の仕方」に通じてないか？と思って考察したものです。

ほとんどネタです。
しかも、iOSの知識がないと意味不明です、、
しかも、Autoresizingには全く触れないという暴挙ぶりでございます。
なので、自己満足です(汗

# ミッション

画面中央に、画面サイズ半分のViewを表示せよ！


### 座標指定的指示

```swift
        //View初期化
        let subview = UIView()
        self.view.addSubview(subview)
        
        //画面レイアウト計算
        let rect = subview.superview!.bounds
        let width = rect.size.width / 2.0
        let height = rect.size.height / 2.0
        let x = (rect.size.width - width) / 2.0
        let y = (rect.size.height - height) / 2.0
        
        //画面レイアウト指示(x=80,y=120,width=160,height=240)
        subview.frame = CGRectMake(x, y, width, height) 
```
### Auto Layout的指示

```swift
       //View初期化
        let subview = UIView()
        subview.setTranslatesAutoresizingMaskIntoConstraints(false)
        self.view.addSubview(subview)
        
        //画面レイアウト指示(親画面に対してx方向中央、y方向中央、width半分、hight半分でレイアウト)
        self.view.addConstraints([
            NSLayoutConstraint(
                item: subview,
                attribute: .CenterX,
                relatedBy: .Equal,
                toItem: subview.superview,
                attribute: .CenterX,
                multiplier: 1.0,
                constant: 0.0),
            NSLayoutConstraint(
                item: subview,
                attribute: .CenterY,
                relatedBy: .Equal,
                toItem: subview.superview,
                attribute: .CenterY,
                multiplier: 1.0,
                constant: 0.0),
            NSLayoutConstraint(
                item: subview,
                attribute: .Width,
                relatedBy: .Equal,
                toItem: subview.superview,
                attribute: .Width,
                multiplier: 0.5,
                constant: 0.0),
            NSLayoutConstraint(
                item: subview,
                attribute: .Height,
                relatedBy: .Equal,
                toItem: subview.superview,
                attribute: .Height,
                multiplier: 0.5,
                constant: 0.0),
            ])
        self.view.layoutIfNeeded()
```

# 成果物
　(iPhone4s想定)

![スクリーンショット 2015-06-27 15.20.27.png](https://qiita-image-store.s3.amazonaws.com/0/74739/0219ccb6-3a23-8e04-1e12-ac677058f4d1.png)

![スクリーンショット 2015-06-27 15.27.54.png](https://qiita-image-store.s3.amazonaws.com/0/74739/68e7aa69-e782-d442-4a71-33958c30a4b7.png)

あ、環境変化(画面回転)しちゃった。


# 考察

座標指定的指示の方は、一見できた風で、実はできてない、
「なんでこっちの意図わかってくれないの！！！！」「ちょっとは自分で考えてよ！！！」
そんな怒りがこみ上げてくる結果です。

では、このような違いが出た原因はなぜか、、、
開発ソフトXcodeの気持ちになって考えてみます。

## 座標指定されたXcodeの気持ち

あたくしは「x=80,y=120,width=160,height=240でレイアウト」と言われましたから、そう表示してるだけで、
画面が回転しようが関係ないです。そうしろと言ったのはあなたでしょう！！（逆ギレ！）

『画面中央に、画面サイズ半分のViewを表示せよ！』
という目的が伝わってないようです・・・・。

## Auto LayoutされたXcodeの気持ち


あたくしは「親画面に対してx方向中央、y方向中央、width半分、hight半分でレイアウト」と言われたので、
画面回転に伴い、表示を更新いたしました。（まぁなんて優秀！）

『画面中央に、画面サイズ半分のViewを表示せよ！』
という目的がしっかり伝わっていたようです。

# 結論

部下には、目的をちゃんと伝えないといけませんね。

Auto Layoutは目的を明確に伝えることができるすばらしい技術！

Auto Layout的な指示を心がければ、環境の変化にも勝手に対応してくれる、優秀な人材になることまちがいなし！（と思う・・。）


っといったところで、ネタを終了します。。
Koa入門 - Part2: babel/registerでES6を自動コンパイル

[Babel](https://babeljs.io/)はES6のコードをES5にコンパイルしてくれるツールです。以前は6to5と呼ばれていました。ECMAScript 6(ES6)が正式にECMAScript 2015(ES2015)という名前になったのでツール名も変更になったようです。ただ略称の方はES6で定着しているのでこのまま使いそうです。[io.js](https://iojs.org)では[Koa](http://koajs.com/)の[ジェネレーター関数](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/function*)などES6の機能を`--harmmony`フラグを付けなくても使えます。せっかくなのですべてES6で書きたいところです。io.jsではV8に追加されるES6の機能を積極的にサポートしていますが、全部ではないので現状はBabelでES5に変換する必要があります。

<!-- more -->

## プロジェクト

適当なディレクトリにプロジェクトを作成します。リポジトリは[こちら](https://github.com/masato/docker-koa-babel-hook)です。

```bash
$ cd ~/node_apps/docker-koa-babel-hook
$ tree
.
├── Dockerfile
├── app.es6
├── docker-compose.yml
├── index.js
└── package.json
```

Dockerfileのベースイメージはオフィシャルの[io.jsイメージ](https://registry.hub.docker.com/_/iojs/)からONBUILDを使います。

```bash:~/node_apps/docker-koa-babel-hook/Dockerfile
FROM iojs:2.3-onbuild
EXPOSE 3000
```

docker-compose.ymlは特に設定は行わず、Dockerホストで他のサービスが3000ポートを使っている関係から、3030にマップします。

```yaml:~/node_apps/docker-koa-babel-hook/docker-compose.yml
koa:
  build: .
  volumes:
    - /etc/localtime:/etc/localtime:ro
  ports:
    - "3030:3000"
```

package.jsonはdependenciesから[Koa](http://koajs.com/)と[Babel](https://babeljs.io/)をインストールします。

```json:~/node_apps/docker-koa-babel-hook/package.json
{
  "name": "docker-koa-babel-hook",
  "description": "docker-koa-babel-hook",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "koa" : "^0.21.0",
    "babel": "^5.6.14"
  }
}
```


## index.js

エントリポイントのindex.jsに`babel/register`を記述します。[babel/register](https://babeljs.io/docs/usage/require/)を最初に記述してrequire()をフックします。この後のrequire()したファイルはBabelがその場自動的にES6をES5にコンパイルしてくれます。


```js:~/node_apps/docker-koa-babel-hook/index.js
'use strict';

require('babel/register');
require('./app');
```

[require('babel/register') doesn't work](http://stackoverflow.com/questions/29207878/requirebabel-register-doesnt-work)に書き込みがあるように、`babel/register`を記述したファイル自体はコンパイル対象になりません。そのため`app.es6`ではなく、app.es6をrequireするindex.jsの先頭に記述します。

## app.es6

app.es6が実際のアプリのコードです。拡張子を`es6`にするとEmacs 24のメジャーモードに対応していないので、`es6`の拡張子をinit.elなどに追加します。今回は[init-loader](https://github.com/emacs-jp/init-loader)を使っています。

```el:~/.emacs.d/inits/05-js-mode.el
(add-to-list 'auto-mode-alist '("\\.es6$" . js-mode))
```

app.es6はHelloWorldをするだけの単純なKoaのコードです。`import`や`const`、GeneratorがあるES6のコードです。

```js:~/node_apps/docker-koa-babel-hook/app.es6
'use strict'

import koa from 'koa'

const app = koa()

app.use(function *() {
  this.body = 'Hello World';
});

app.listen(3000);
```

## Dockerイメージのビルドと実行

Dockerイメージをビルドして実行します。

```bash
$ cd ~/node_apps/docker-koa-babel-hook/
$ docker-compose build
$ docker-compose up
```

Dockerホストからcurlを使ってテストします。docker-compose.ymlでDockerホストの3030ポートにマップしています。Hello Worldが表示されました。

```bash
$ curl localhost:3030
Hello World
```
俺でもわかるシリーズ: memcachedの設定

yumでインストールされたmemcachedの設定の初期値は、おおよそ以下のようになっているはずです。

```shell-session:/etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
```

せっかく大富豪インスタンスを使っているのだから、もっと接続できるようにして、もっとメモリを使いましょう。

```shell-session:/etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="65535"
CACHESIZE="160000"
OPTIONS=""
```

……将来的に平民インスタンスにスケールダウンする可能性もあるので、これを決め打つのはマズいのでは？

この設定ファイルは起動スクリプトを読むと分かるのですが、ただのシェルスクリプトです。

```shell-session:/etc/rc.d/init.d/memcached
#! /bin/sh
#
# chkconfig: - 55 45
# description:	The memcached daemon is a network memory cache service.
# processname: memcached
# config: /etc/sysconfig/memcached
# pidfile: /var/run/memcached/memcached.pid

## 中略

PORT=11211
USER=memcached
MAXCONN=1024
CACHESIZE=64
OPTIONS=""

if [ -f /etc/sysconfig/memcached ];then
	. /etc/sysconfig/memcached
fi

## 後略
```

使えるメモリ量の8割を使うように書いてしまいましょう。

```shell-session:/etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="65535"
TOTAL=`free -m | head -2 | tail -1 | awk '{print $2}'`
CACHESIZE="`echo "$TOTAL * 0.8" | bc | awk -F '.' '{print $1}'`"
OPTIONS=""
```

memcachedを再起動して、実際に適用されているか確認します。

```shell-session
$ sudo service memcached restart
$ free -m
             total       used       free     shared    buffers     cached
Mem:          7492        339       7152          0         84        102
-/+ buffers/cache:        152       7339
Swap:            0          0          0
$ ps ax | grep memcached
 2525 pts/0    S+     0:00 grep memcached
31366 ?        Ssl    0:00 memcached -d -p 11211 -u memcached -m 5993 -c 65535 -P /var/run/memcached/memcached.pid
```

起動オプション `-m` の値が動的に設定されていることが確認できました。
RealmSwift のDynamicFramework でインストール


**※これは iOS/Android モバイルデータベース Realm についての記事です。詳しくは以下をご参照ください。** 
Webサイト: [realm.io](https://realm.io/)、Facebookグループ: [Realm Japan User Group](https://www.facebook.com/groups/realmjp/)、質問: [Slack Channel](http://slack.realm.io/) 

--

https://realm.io/jp/docs/swift/latest/ の `DynamicFramework`　のインストールの 3,4 の手順がわかりにくいので補足します。

## 3.について
`Framework Search Paths` に RealmSwift.framework のパスを追加しないと、ユニットテストで `import RealmSwift` をした時に見つからないと怒られる。

・Test ターゲットに変更する。

![TestRealm_xcodeproj1.png](https://qiita-image-store.s3.amazonaws.com/0/9061/32aae5f5-fce8-39ce-34ed-a0d36099e916.png "TestRealm_xcodeproj1.png")

・`Builde Settings` タブにある。`Framework Search Paths` を追加する。 

![TestRealm_xcodeproj2.png](https://qiita-image-store.s3.amazonaws.com/0/9061/891cc1cf-8bc3-382b-cdb9-a9222cb2bb0f.png "TestRealm_xcodeproj2.png")

・`$(PROJECT_DIR)` を追加する。

![TestRealm_xcodeproj3.png](https://qiita-image-store.s3.amazonaws.com/0/9061/6b87161f-5a8e-c813-e3b1-023d0cf89205.png "TestRealm_xcodeproj3.png")

※ もし他のところに `RealmSwift.framework` がある場合は、そこまでのパスを追加する。
1.のステップで `Copy items if needed` に正しくチェックを入れているとプロジェクトのディレクトリにコピーされるので、`$(PROJECT_DIR)` で大丈夫だと思います。

これで `import RealmSwift` ができるようになる。

## 4.について

・メインのターゲットに戻して、`Build Phase` タブを選択する。
![TestRealm_xcodeproj4.png](https://qiita-image-store.s3.amazonaws.com/0/9061/4aac5907-a525-2537-b99e-5790c3df7bac.png "TestRealm_xcodeproj4.png")

・新しくビルドフェーズを追加する。
![TestRealm_xcodeproj5.png](https://qiita-image-store.s3.amazonaws.com/0/9061/9632e2c5-7337-d8b7-b439-303c1f8b7d9f.png "TestRealm_xcodeproj5.png")


これで不要なバイナリが取り除けて、正しくサブミットできるようになります。
チェックが入るとボタンの背景が変わります

#チェックが入るとボタンの背景が変わります

##javascriptの記述

チェック判定し、背景色を変更する関数を用意。

```js:checkboxJS
function changeBG(chkID) {
	Myid  = document.getElementById(chkID);
	btnid = document.getElementById(chkID + '_entryBtn');
	if (Myid.checked == true) {
		btnid.style.backgroundColor = '#ff0000';
	} else {
		btnid.style.backgroundColor = '#cccccc';
	}
}

```

##htmlの記述

該当するIDをうまいこと振り分けたhtmlを用意する。



```html:checkboxHTML
	<section class="checkbox_area">
		<div class="checkbox_inner"><INPUT type="checkbox" id="c_box1" onclick="changeBG('c_box1')"><label for="c_box1">ボタン１の背景</label></div>
		<div class="checkbox_inner"><INPUT type="checkbox" id="c_box2" onclick="changeBG('c_box2')"><label for="c_box2">ボタン２の背景</label></div>
	</section>
	<section class="btn_area">
		<div id="c_box1_entryBtn" class="entry_btn">ボタン１</div>
		<div id="c_box2_entryBtn" class="entry_btn">ボタン２</div>
	</section>

```


[デモ](http://jsdo.it/tonkatsu_tanaka/jukL)


##サンプルHTML

```html:sample

<!doctype html>
<html lang="ja">
<head>
	<meta charset="UTF-8" />
	<title>チェックが入るとボタンの背景が変わります</title>
	<script>
		function chebg(chkID) {
			Myid  = document.getElementById(chkID);
			btnid = document.getElementById(chkID + '_entryBtn');
			if (Myid.checked == true) {
				btnid.style.backgroundColor = '#ff0000';
			} else {
				btnid.style.backgroundColor = '#cccccc';
			}
		}
	</script>
</head>
<body>
	<article>
		<header><h1>チェックが入るとボタンの背景が変わります</h1></header>
		<section class="checkbox_area">
			<div class="checkbox_inner"><INPUT type="checkbox" id="c_box1" onclick="chebg('c_box1')"><label for="c_box1">ボタン１の背景</label></div>
			<div class="checkbox_inner"><INPUT type="checkbox" id="c_box2" onclick="chebg('c_box2')"><label for="c_box2">ボタン２の背景</label></div>
		</section>
		<section class="btn_area">
			<div id="c_box1_entryBtn" class="entry_btn">ボタン１</div>
			<div id="c_box2_entryBtn" class="entry_btn">ボタン２</div>
		</section>
		
	</article>


	<style>
		body{
			background: #efefef;
		}
		article{
			width: 600px;
			margin: 50px auto;
			padding: 20px;
			background: #fff;
			box-shadow: 1px 1px 1px 1px rgba(0, 0, 0, 0.4)
		}
		a,label{cursor:pointer;}
		label:hover { color : red; } 
		.checkbox_inner{
			width:140px;
			margin:5px 2px 2px 0px;
			font:12px; 
		}
		.entry_btn{
			width: 150px;
			margin: 20px auto;
			background: #ccc;
			border: 1px solid #333;
			border-radius: 3px;
			text-align: center;
		}
	</style>
</body>
</html>
```
地震データを検索できるようにし、結果を地図上に表示する


[アメリカ地質調査所][usgs-gov]が公開している地震の発生データを検索可能にし、結果を地図上にマッピングする方法を紹介する。

# 環境

* CDH 5.4.2 
* Cloudera Manager を使ってクラスタを準備するか、クイックスタートVMを準備すること。VMの準備方法については[こちら](http://codezine.jp/article/detail/8560)を参考。

# データセット

最近発生した地震のデータセット。 [アメリカ地質調査所][usgs-gov] より取得する。

# 検索システムのアーキテクチャ

![地震データ検索システムのアーキテクチャ.png](https://qiita-image-store.s3.amazonaws.com/0/17749/73350347-0c70-31a0-4463-bdbf827ccd33.png)



# データセットの取得と HBase へのロード

[HBaseにTSVデータを投入する(ImportTsv)][importtsv]の記事を参照。

# Solr から HBase テーブルのインデックス作成

[HBaseのデータからSolrの検索インデックスを作成する][lily-batch]の記事を参照。

# 検索結果を地図上に表示する

```http://<hueサーバのノード>:8888/indexer``` にアクセスし、  **earthquake-collection** を選択し、左サイドバーの **検索** を選択する。

画面上部のマーカーマップアイコンを下の結果表示用フィールドにドラッグアンドドロップし、ウィジェットを作成する。

`緯度` に `latitude` 、 `経度` に `longtitude` 、 `ラベル` に `place` を選択すると、地震情報を地図にマッピングすることができる。

![c54-hue-search-search-marker-map-1.png](https://qiita-image-store.s3.amazonaws.com/0/17749/ba0b2862-3453-ab9b-846d-36c16f54a53b.png)



# 例: 日本で発生している地震に絞り込みする

画面上部の検索バーに、 `(place:*Japan)` と入力して検索すればよい。位置を示す文字列を格納しているフィールド `place` に対し後方一致検索を行ってくれる。

![c54-hue-search-search-marker-map-japan-2.png](https://qiita-image-store.s3.amazonaws.com/0/17749/7431d755-1013-dafe-cf12-46228f292b61.png)


# 次のステップ

この検索システムは非常に簡素なもので、まだまだ改良の余地がある。以下に一例を挙げる。

* 手動でのデータ投入から自動でのデータ取得・更新へ
* Flume を使ったニアリアルタイムインデクシング(NRT)
* 検索 UI の改善




[usgs-gov]: http://earthquake.usgs.gov/
[importtsv]: http://qiita.com/shiumachi/items/3074802eb5ee6bb55119
[lily-batch]: http://qiita.com/shiumachi/items/bdfd25a68c1f017b3ad0
pythonでdiffを実行して、returncodeとoutputの両方が欲しい時

## diffの結果をpythonで取りたい
pythonでdiffを実行したいときがありました。
具体的には監視しているファイルの差分のさらっと取りたいとき。

- diffの結果をpythonで取る
- その結果をメールとかチャットとかのbodyに埋め込む

まぁ全部shellでやってもいいんですが、その前にいろんなことをしたい場合、やっぱりpythonとかのほうが便利です。

そんな時に便利なのが、subprocessのcheck_output。diffは差分が発生するとexit 1で、check_outputはnot 0のとき例外を投げます。
で、例外の属性に、returncodeとoutputが入っているので、それを拾えばOKです。

## サンプル
```subprocess_sample.py
# -*- coding: utf-8 -*-
import subprocess
import shlex
import sys

file1 = sys.argv[1]
file2 = sys.argv[2]

command_line = "diff -u {} {}".format(file1, file2)
command_args = shlex.split(command_line)

rc = 0
try:
    rc = subprocess.check_output(command_args)
except subprocess.CalledProcessError as cpe:
    print "shell returncode is not 0."
    print "returncode: {}".format(cpe.returncode)
    print "output: {}".format(cpe.output)
    rc = cpe.returncode

print rc
```

```
% python subprocess_sample.py hoge_old.txt hoge_new.txt
shell returncode is not 0.
returncode: 1
output: --- hoge_old.txt        2015-06-27 14:29:03.000000000 +0900
+++ hoge_new.txt        2015-06-27 14:28:54.000000000 +0900
@@ -1,2 +1,2 @@
-hoge
+hogo
 foo

1
```

かつてはcommandsモジュールがあったのですが、これは3系では廃止され、2系(2.7以降)でも非推奨です。
Phoenix-Frameworkの基礎知識

#目的
[Railsの基礎知識](http://railsdoc.com/rails_base)を参考に、
Phoenixの基礎知識を簡単にまとめてみた。(つまりパクリ記事ですね・・・)

#始める前に
Phoenixって何？Phoenixのディレクトリ構成はどうなってるの？
といったところを書いておく。(※後で変わる可能性あるかも？)

間違っているところがありましたら、ご指摘下さい。
(私はまだまだ未熟者です・・・)

#目次
1. Phoenixって何？
2. ディレクトリ構成
3. サーバの実行
4. まとめ

##1. Phoenixって何？
PhoenixはElixir言語で作成されたWebフレームワークです。
また、Ruby on Railsに大きく影響を受けておりRailsライクに利用できます。
ElixirはErlangVMで動く関数型言語でRubyライクに記述できます。
(ErlangVM上で動作するのでErlangのOTPが使えます)

設計哲学
おそらくRailsと同じ

特徴
- RoRライク
- MVCモデル
- ジェネレータ(Ecto？)
- ルーティング
- テンプレート
- チャネル

導入実績
不明！！

規約
![image](https://qiita-image-store.s3.amazonaws.com/0/80934/8c9e7c93-241b-8d77-48d1-5243f135fa51.png)

xxx = コントローラ名、モデル名
yyy = アクション名
zzz = チャネル名
mmm = マイグレーション名
YYYYMMDDhhmiss = 作成日時
AppName = アプリケーション名
空白 = なし又は不明

マイグレーションする時のテーブル名 = xxxs (モデル名の複数系)

##2. ディレクトリ構成
"mix phoenix.new(オプションなし)"で生成&ビルドすると以下のような構成をしている。
![image](https://qiita-image-store.s3.amazonaws.com/0/80934/fae4e005-07b2-cc1d-4c92-3c4f68d5f024.png)

##3. サーバの実行
後は・・・実行の仕方くらいですかね？

```
>cd PhoenixApplicationを作成したいディレクトリパス
>mix phoenix.new アプリケーション名
>cd アプリケーション名
>mix phoenix.server
```

※デフォルトのポート番号：4000

##4. まとめ
こんな感じですかね。
不明なところは申し訳ないですが・・・

Railsをあまり使ったことがありません。
なので、Railsのディレクトリ構成との対比を書きたかったのですが断念しました。

#参考文献
[Railsの基礎知識](http://railsdoc.com/rails_base)