OmniAICreator/Qiita-1.07M huggingface dataset:
ローカルDNSを立てずにホスト名をIPアドレスに解決する超絶簡単な方法

# 1行概要
例えば社内で自分のPCに開発サーバを立てたけど、IPではなくホスト名で他のメンバーにURLを教えたいときに使う方法


# 犯行動機
- 社内DNSの再設定がめんどくさい
- Google APIのOAuth2のredirect_urlがグローバルでないとエラーになるため、社内ローカルでの開発が面倒


# 想定読者
- Railsの開発がいくつか並行している
- ローカルにDNSが無い OR 設定する程ではない
- Google OAuth2の `invalid redirect url` エラーで詰まった


# 方法
## 1. xip.ioを使ったDNS解決
外部のパブリックDNSサービス [xip.io](http://xip.io) を使います。
![Screen Shot 2013-12-04 at 8.33.14 AM.png](https://qiita-image-store.s3.amazonaws.com/0/10272/20efc664-3921-1a34-de41-a89fec2fef55.png)

アカウント登録の必要はなく、自分のPC（開発機）のローカルIP（例: 192.168.1.123）の場合、
` some-project.192.168.1.123.xip.io `
をブラウザに入力するだけ。

すると、 `xip.io ==> 192.168.1.123` と名前解決されます。

## 2. nginxのNamed virtuel Host設定

xip.ioは名前解決しかしてくれないので、自分のPC（開発機）に複数のプロジェクトが走っているとポートを使い分ける必要があり、いろいろ面倒です。
そんな時は、nginx（Apacheでも可）のNamed virtuel Host機能を使います。

``` nginx.conf
server {
    listen       80;
    server_name  some-project.*; # <= ここがミソ！

    location / {
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header  Host $http_host;
        proxy_redirect    off;

        if (!-f $request_filename) {
            proxy_pass http://localhost:3000; #<= ポートをサービスごとに変える
            break;
        }
    }
}
server {
    listen       80;
    server_name  another-project.*; # <= ここがミソ！

    location / {
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header  Host $http_host;
        proxy_redirect    off;

        if (!-f $request_filename) {
            proxy_pass http://localhost:3001; #<= ポートをサービスごとに変える
            break;
        }
    }
}
```

## 3.アプリケーションの起動（Railsの場合）
あとは、Railsのプロジェクトディレクトリで、

```sh:/path/to/some-project
bundle exec rails s -p 3000
```

```sh:/path/to/another-project
bundle exec rails s -p 3001
```

と実行するだけ。

これで、

[some-project.192.168.1.123.xip.io](http://some-project.192.168.21.123.xip.io)
[another-project.192.168.1.123.xip.io](http://another-project.192.168.21.123.xip.io)
からアクセスできます。


以上
アプリがバックグラウンドに回ったら処理を中断する

ご存知の様に，iOSのアプリには「終了」を明示的に処理する方法がありません．ホームボタンをダブルクリックして，終了させる事は可能ですが一々そんな操作をするユーザーがいるとは思えません．

アプリの（擬似的な）終了はホームボタンを押す事ですが，この時アプリはバックグラウンドに回ります．

その際に通信を行う様なアプリだと，きちんと通信を停止しておかないとバックグラウンドでも通信をしてパケットとバッテリーを消費します．

その様な場合には`AppDelegate.h`にアプリ自体（正確にはViewController）を格納する変数を定義して，メソッドを用意します．

```Objc```
@property (nonatomic) ViewController* delegate;

-(void) setDelegateView:(UIViewController*)delegetData;
```

続いて`AppDelegate.m`に以下の様に記述します．

```Objc```
-(void) setDelegateView:(ViewController*)delegetData{
    _delegate = delegetData;
}
```

このメソッドを'UIViewController'の'- (void)viewDidLoad'で以下の様に呼び出します．

```Objc```
    AppDelegate *appdelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
    [appdelegate setDelegateView:self];
```

これで'AppDelegate.h'のプロパティ'delegate'に，'UIViewController'を設定できます．

'UIViewController'では，通信処理等を開始するメソッドと通信処理等を終了するメソッドを記述して，外部から呼び出せる様にしておきます．（仮に'-(void)StarCom'と'-(void)StopCom'とします．）

'ViewContoroller.h'に

```Objc```
-(void)StarCom;
-(void)StopCom;
```

と記述して外部から呼び出せる様にします．

その上で'AppDelegate.m'に以下の様に記述します．

```Objc```
- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [_delegate StopCom];

}
```

これでアプリケーションがバックグラウンドに入った時に通信を停止できます．

```Objc```
- (void)applicationDidBecomeActive:(UIApplication *)application
{
    [_delegate StarCom];
}
```

これでユーザーがアプリアイコンをタップして起動（もしくはバックグランドからの復帰）をした時に通信を開始できます．
websocket-client-simple でPush通信を使ってJenkinsさんと会話

## Ruby Advent Calendar 2013 4日目
この記事は[Ruby Advent Calendar 2013](http://qiita.com/advent-calendar/2013/ruby)の四日目の記事です。
昨日はznzさんの [Ruby 2.1.0-preview2で追加されたException#causeの紹介](http://blog.n-z.jp/blog/2013-12-03-ruby-exception-cause.html) です。

Ruby2.1の記事ですので、まだ確認されていない方はお早めに！

## 本日の概要
1人で開発をしているとさびしくなって、誰かと会話をしたいと思うことはないでしょうか。
そこでWebSocketを使ってJenkinsさんと会話をする方法を記載したいと思います

## 準備
Jenkinsに Jenkins Websocket Notifier をインストールしてください。
公式プラグインとなっていますので 画面上から簡単にインストールできます。

Jenkins Websocket Notifier は、みずぴーさんが作られた Plugin となります。
[Jenkinsのビルド結果をリアルタイム通知するプラグイン『Jenkins Websocket Notifier』を作りました](http://d.hatena.ne.jp/mzp/20110612/jenkins)

## インストール
RubyでWebSocketを使うために gem をインストールします。
WebSocket用の gem はいくつかありますが、個人的に一番使いやすかったのは websocket-client-simple でしたので、そちらで会話をすすめていきます。

```
gem install websocket-client-simple
```

websocket-client-simple は、橋本 翔さんが作られた gem となります。
[websocket-client-simple 作った](http://shokai.org/blog/archives/7223)

## 実装
ほとんど全てを websocket-client-simple が良しなにしてくれるため、何も実装せずともJenkinsからのPush通信をうけとることができます。

```ruby:client.rb
require 'rubygems'
require 'websocket-client-simple'

ws = WebSocket::Client::Simple.connect 'http://localhost:8081/jenkins'

ws.on :message do |msg|
  puts msg.data
end

loop do
  ws.send STDIN.gets.strip
end
```

Jenkinsからの通信の結果は下記となります。

```
{"number":39,"project":"Test","result":"FAILURE"}
```
number が ビルド履歴の回数
project が プロジェクト名
result が 成功か失敗か


```
ws.on :message do |msg|
  puts msg.data
end
```
message にてJenkins側からのPush通信を受け取りますので、こちらでデータを加工していただければ、buildが失敗した場合のみPush通信をうけるなど制御を行うこともできます。

## 最後に
巨人の肩に乗ることによって本当に簡単にWebSocketにてJenkinsと通信することができました。
WebsocketのClient側は色々と使い道があると思います。
Jenkinsさんからの結果をいち早く知りたいでも良いですし
[websocket-railsで簡単なPush通知を実装する](http://qiita.com/naoty_k/items/3a2b5d8cfc1619e6145b) にも書かれていますが Railsからリアルタイムに情報をうけとっても良いですし
使い方はさまざまだと思います。
興味をもってくださった方は、ぜひぜひ試していただければと思います。

## 本当に最後に
この記事は Ruby Advent Calendar 2013 への投稿であり、 Jenkins Advent Calendar 2013 ではありません！(ぁ
zshにオプションや引数を補完できるキーバインドを設定しよう


##はじめに

今回は､`zsh`にオプションや引数を補完できるキーバインドを設定する方法を紹介します｡


どういうことかというと､まずは､下記の画像を見てもらうのが分かりやすいと思います。

画像では､特定のキーを押すと､まだ、実行されていない状態でパッとコマンドが現れます。



ここで、`Tab`や設定によっては､`↑`、`↓`を押すと､補完候補を選択できます｡

##何が便利か

このようなキーを設定すると､何が便利なのかというと､引数などをその場で設定しないといけない長いコマンドにも、ショートカットのようなものが使えるという点です｡

例えば､`git fast-import  --active-branches=hoge`というコマンドを`hoge`の部分を変更して､頻繁に使うような場合は、エイリアスでは、対応できないことがあります｡


そんな時には､例えば､以下の様なキーバインドを設定してみましょう｡下記は､コミットメッセージを登録するコマンドのショートカットを設定しています｡

```bash:~/.zshrc
# コミットメッセージを送りやすくするキー[C-o]を設定する
function git_commit() {
        BUFFER="git commit -m '"
        CURSOR=$#BUFFER
        BUFFER=$BUFFER\'
}
zle -N git_commit
bindkey '^o' git_commit
```

有効にするには､設定ファイルを再読み込みします｡

```bash:
$ source ~/.zshrc
```

上記を設定すると､`Ctrl`+`o`を押すと､コミットメッセージを登録するコマンドがコマンドラインに表示されます。

では、一つずつ、設定ファイルに記述した内容を見て行きたいと思います｡

##設定ファイルの解説
###function



`function`というのは、今から命令の集まりを記述するという合図のことを言います｡これを命令群や関数ということがあります。

そして、命令の記述がどこで始まり、どこで終わるのかは､`{`と`}`で指定します｡

つまり、命令群は、`function { 命令の記述 }`という形で成り立ちます｡



次に､命令郡の名前を決めなければなりません。ここでは、`git_commit`という名前をつけました｡

命令群の名前は、自由に決められます｡ただし、使えない文字列もありますので､注意してください｡

そして、頭にあるような括弧`()`の意味は､引数と言って、コマンド後に何かしらの文字や数字を引用する際に使います｡普段は､空のままでよいです｡


###BUFFER


ここで、`BUFFER`は、変数と言って､数字や文字列を入れておいて後で使うことができる「箱」のようなものを用意するという命令です｡

本来は､「箱」の名前は､何でも良いのですが､ここでは、`BUFFER`という名前を付けて「箱」を用意しました｡

しかし、今回用意した`BUFFER`という箱は、バッファを意味し、`zsh`が用意する特別な箱です。

ここでいうバッファとは何かというと､一時的にコマンドを退避させておく仕組みのようなもので、退避されたものは、1動作後に表に出てくるようになっています。

つまり、`BUFFER`という箱には、コマンドラインへ表示させるという命令がプラスされて入っていることになります｡

そして、その後くる`=`の記述は､「箱に=の後にくるものを入れるよ」という合図なのです。

では、用意した`BUFFER`という箱に何を入れるのかというと､ここでは、`git commit -m '`という文字列を入れました｡

なお、空白を含む文字列を入れる際は､できるだけ`"`で囲うようにしています。


###CURSOR


次に､`CURSOR`という箱を用意しました｡これも特別な箱で、中には､カーソルの位置情報が入っています｡

ここで、「0」は行頭を意味し､「$」は行末を意味します｡

つまり、上の命令は､「カーソルの位置は､BUFFERの行末に」というものです。

###$BUFFER

実は､用意した変数は､そのままでは使えません。他の命令特別するため､変数名の前に「$」を付けなければなりません。

ここで、`=`により、`BUFFER`という箱は、`今までのBUFFERの中身+「'」という文字列`に書き換えられています｡

ちなみに、「'」のような特殊文字は､`¥`エスケープという文字を直前に挿入することで､初めて文字列として認識されることを覚えておいてください｡

###bindkey


新たなキーバインドを設定するには､3つの要素が必要です｡

具体的には､①参照するコマンドをラインエディタ上で有効にする、②登録するキー、③参照するコマンド、です。

ちなみに、登録するキーについてですが､`^`は`Ctrl`キーの略です｡キーについては､特殊な表現がありますので気をつけてください｡

例えば､ここで、Macにシャットダウンのキーを設定したいとします。

この場合､以下の様な感じで書けばよいです。

```bash:~/.zshrc
# Macをシャットダウンするキー[C-S-s]を設定する
function shutdown-mac() {
osascript -e 'tell application "Finder" to shut down'
}
zle -N shutdown-mac
bindkey '^S' shutdown-mac
```

これで、`Ctrl`+`Shift`+`s`を押すことで､シャットダウンできるようになります。


##zshの補完設定

もし補完設定を行っていない場合は､以下の様な感じで、設定ファイルに設定を記述してみてください。

```bash:~/.zshrc
# 補完を有効にする
autoload -U compinit
compinit -u

# 補完メッセージを読みやすくする
zstyle ':completion:*' verbose yes
zstyle ':completion:*' format '%B%d%b'
zstyle ':completion:*:warnings' format 'No matches for: %d'
zstyle ':completion:*' group-name ''
```

##さいごに

皆様も、オプション補完や引数補完を行う必要があるコマンドは､エイリアスではなく、バッファを使って登録してみてはどうでしょう｡

以下の書式で大体は対応できると思います｡`ここに〇〇`という部分を変更して使ってください｡


```bash:~/.zshrc
function ここに関数の名前() {
        BUFFER="ここにコマンド" #何をコマンドラインに表示するか
        CURSOR=$#BUFFER # カーソル位置を行末に設定
        # BUFFER=$BUFFER\' # カーソルを括弧内に移動する場合
}
zle -N ここに関数の名前
bindkey 'ここに設定したいキー' ここに関数の名前
```

次回は､補完関数を自作する方法でも紹介してみようかなと思っています｡よろしくお願いします。
C++11インタプリタ Clingのビルド

## Cling

CERNのROOTではCINTというC++インタプリタが使用されています。
その存在を知ったときは興奮しましたが、CINTの情報が基本的に古く、そして極端に少なかったため、その存在をすっかり忘れていました。

そのCINTの後継のものとしてLLVMを用いて作成された[Cling][1]が2011年に[公開][2]されていたようです。

## Build

以下はREADMEの`Building`です。

  Building LLVM and CLANG you must:

   * Check out the sources:  

```bash
    git clone http://root.cern.ch/git/llvm.git src
    cd src
    git checkout cling-patches
    cd tools
    git clone http://root.cern.ch/git/cling.git
    git clone http://root.cern.ch/git/clang.git
    cd clang
    git checkout cling-patches
```
   * Configure, build and install them, either using CMake:  
   
```bash
    cd ..
    mkdir build
    cd build
    cmake -DCMAKE_INSTALL_PREFIX=/some/install/dir \
          -DLLVM_TARGETS_TO_BUILD=CBackend\;CppBackend\;X86 \
          -DCMAKE_BUILD_TYPE=Debug \
          ../src
    make
    make install
```
   * or GNU Make (see ../src/configure --help for all options):  

```bash
    cd ..
    mkdir build
    cd build
    ../src/configure --prefix=/some/install/dir
    make
    make install
```

### --enable-optimized

`src/configure`を実行する際、`--enable-optimized`を指定します。
指定しない場合、make後に以下のメッセージが表示されます。

    llvm[0]: ***** Completed Debug+Asserts Build
    llvm[0]: ***** Note: Debug build can be 10 times slower than an
    llvm[0]: ***** optimized build. Use make ENABLE_OPTIMIZED=1 to
    llvm[0]: ***** make an optimized build. Alternatively you can
    llvm[0]: ***** configure with --enable-optimized.

### configure

実際の`configure`は次のようなものになります。

`../src/configure --prefix=/some/install/dir --enable-optimized`

## Usage

### Hello World

Hello Worldをインタプリタで実行する。

    $ cling

    ****************** CLING ******************
    * Type C++ code and press enter to run it *
    *             Type .q to exit             *
    *******************************************
    [cling]$ #include <iostream>
    [cling]$ std::cout << "Hello World!" << std::endl;
    Hello World!
    [cling]$ .q

### lambda

C++11のlambdaをインタプリタで実行する。

※C++11がデフォルトで有効。

    $ cling

    ****************** CLING ******************
    * Type C++ code and press enter to run it *
    *             Type .q to exit             *
    *******************************************
    [cling]$ #include <iostream>
    [cling]$ auto func = [](int n){ std::cout << n << std::endl; };
    [cling]$ func(72);
    72
    [cling]$ .q

### execute

ファイル名と同じ名前の関数を作り、clingに渡す。

```
$ echo '#include <iostream>' > helloworld.cpp
$ echo 'void helloworld() {' >> helloworld.cpp
$ echo '    std::cout << "Hello World!" << std::endl;' >> helloworld.cpp
$ echo '}' >> helloworld.cpp
$ cat helloworld.cpp
#include <iostream>
void helloworld() {
    std::cout << "Hello World!" << std::endl;
}
$ cling helloworld.cpp
Hello World!
```

## Reference

* [Cling | ROOT][1]
* [clingをビルドしてみた - bellbind][3]
* [本の虫: 新たな期待できるC++インタプリター、Cling][5]

[1]: http://root.cern.ch/drupal/content/cling
[2]: http://root.cern.ch/drupal/content/cling-goes-public
[3]: http://bellbind.tumblr.com/post/29528779472/cling
[4]: http://root.cern.ch/gitweb
[5]: http://cpplover.blogspot.jp/2012/02/ccling.html
ipfw コマンドで品質の悪い回線をエミュレートする (OS X)


# はじめに

ipfw コマンドは OS X 10.11 でなくなってしまったので、以下の文章は役立たない

# 過去役に立った話

Mac OS X に標準搭載の ipfw コマンドの便利な使い方。

ipfw のパイプ機能で回線の品質を自在にエミュレートできるので、 GSM / 3G などの遅いモバイルネットワークや、海外からのアクセスにも最適化しなくてはいけないときに有用。

# パイプを通す

```bash
# すべての通信を制御する場合
sudo ipfw add pipe 1 ip from any to any

# TCP 80 だけ制御する場合
sudo ipfw add pipe 1 tcp from any to any 80

# 特定の IP アドレス帯だけ制御する場合 (from と to を逆にすれば着信も制御できる)
sudo ipfw add pipe 1 ip from me to 172.16.0.0/24
```

# パイプに遅延や帯域制限を設定する

```bash
# 1Mbps, 80msec, パケットロス率 10% (それなりな LTE 程度)
sudo ipfw pipe 1 config bw 1Mbit/s delay 80ms plr 0.1

# 180kbps, 300msec, パケットロス率 30% (MVNOの遅いやつ程度)
sudo ipfw pipe 1 config bw 180Kbit/s delay 300ms plr 0.3

# 100kbps, 800msec, パケットロス率 50% (パケ詰まり)
sudo ipfw pipe 1 config bw 100Kbit/s delay 800ms plr 0.5
```

# 設定状況の確認

```
$ sudo ipfw list
00100 pipe 1 tcp from any to any dst-port 80
65535 allow ip from any to any

$ sudo ipfw pipe 1 list
00001: 100.000 Kbit/s  800 ms   50 sl.plr 0.500000 1 queues (1 buckets) droptail
    mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
BKT Prot ___Source IP/port____ ____Dest. IP/port____ Tot_pkt/bytes Pkt/Byte Drp
  0 tcp   192.168.100.24/52102  173.194.79.109/993   11560  2753527  0    0 1680
```

# 設定を戻す

```bash
sudo ipfw flush
# "Are you sure? [yn]" と聞かれるので y
```

このように、通信相手とパケットロス率をこと細かに指定できるので、デバッグだけではなく「ナントカモバイルの 300kbps SIM ってどうなんだろう」というときに体感を掴むのにも役立つかもしれない。

なお、今回取り上げた [ipfw(8)](https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/ipfw.8.html) は DEPRECATED なので [pfctl(8)](https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/pfctl.8.html) でやるのが本筋かもしれないが、こちらは設定ファイルを作り込まなくてはいけない、OS ビルトインのファイアウォール機能と衝突するなど煩雑なのでおすすめできない。
Rails4とBootstrap3で「/assets/stylesheets/application.css has already been required」エラーが出た時の対処法

タイトルのエラーでハマったのでメモ

```
/assets/stylesheets/application.css has already been required
```

/assets/stylesheets/application.css以外に「*= require_self」の読み込みないか確認する
あらこんな所にラテン語が。いつも見るあの語が実は・・・

## はじめに
Quittaでは初投稿です。
@warabanshi と申します。

日頃はweb屋をしてます。ラテン語とは全く縁の無い生活を送ってきました。
そんな自分ですが、 最近 @7shi さん主催の「初級ラテン語リーディング」なるものに参加させていただいてまして、
更になんか「ラテン語プログラミング Advent Calendar」までやるということで何か書いてみようかと。

とは言え他の方々の様ラテン語を題材とするようなプログラムを作ったことは無く・・・。
でもまぁ、「ラテン語"プログラミング" Advent Calendar」なので、なんかプログラミングに無理矢理絡めた内容にしてみます。

と、思って考えてたネタを、書き始める前に一応ググってみたら普通に出てきちゃったのでしょんぼり。
でも一応書いてみますよっとー

## ラテン語はどんなところに残ってる？
バチカンではまだ使われてるという話はよく聞きますね。
さて、それでは他には一体どんなところにあるか？

多いのが学術用語。

中学生の頃、元素記号が出てきて覚えてみてはいたものの、何故「金」の元素記号が"G"とか"Go"とかじゃなくて"Au"なのさ？なんてのは誰もが疑問に思ったでしょう。出来のいい子はその時にちゃんと調べるんでしょうけど、自分はもう「そういうものだ」の精神で愚直に覚えてました。
このAuはラテン語の「金」 = aurum であることから来てます。同様に、「銀」 = argentum、「銅」 = cuprum からそれぞれの元素記号は来ています。

なんということでしょう！ラテン語をちょっとかじっただけで積年の疑問が雲散霧消ですよ！！
今はネットで調べればこんなのすぐ出てきますが、当時はそんなのなかったんで・・・。

## プログラミングの話は？
ということで、無理矢理プログラミングに絡めてみましょう。
コードを書いているとき、または人の書いたコードを読んでいるとき、こんな変数に出会った事はないですか？

```
datas
```

ご存知のように、`data`は元々複数形です。コードの規約的にリストなんかを入れた変数の末尾にはsを付けるとかって事もあるでしょうが、なんかこう、気持ち悪さは拭えないですね。他にも同様なパターンの単語としては`media`なんかも既に複数形ですね。

しかし、そもそも我々の習ってきた英語では複数形を作る場合、末尾にsを付けるのが基本だったはず。
どうしてこうなった・・・。

そこで奥さん、ラテン語ですよ。

dataの単数形がdatumということで、まずはdatumについて考えてみましょう。
datumはdare（与える）という語の過去分詞形で、「与えられたもの」というような意味になります。

ラテン語では過去分詞を名詞として用いることができます。つまり、datumを名詞として考える事ができます。
名詞には主格、属格、与格など、いくつかの格がありますが、主格について名詞を複数形にする時のパターンを見てみましょう。

|  | 男性名詞 | 女性名詞 | 中性名詞 |
|:--:|:----------:|:-----------:|:-----------:|
| 単数形 | fluvius | insula | oppidum |
| 複数形 | fluvii    | insulae | oppida |

あくまで一例ですが、このような変化をします。ちなみにfluvius = 川、insula = 島、oppidum = 都市です。
さて、この表を見ると datum が単数で data が複数というパターンに一致するものがありますね。中性名詞がそれになります。ちなみに、「公式」の意味の formula という単語も複数形にすると formulae となり、上の表での情勢名詞として変化している事がわかりますね。
ということで、このようなラテン語での変化の仕方が今もよく見る語に残っている事がわかります。

いやー　これで例えば新入女子社員の野田さんが、datasなんてのをコードに書いていたら話しかける切っ掛けができましたね！
`mix new`で作られるファイル探索

Elixirのビルドツール[mix](http://elixir-lang.org/getting_started/mix/1.html)により作成できる，Elixirプロジェクトの雛形構成を見ていきます．

## mixとは
Elixirプロジェクトの作成や依存解決，コンパイル，テストを行うビルドツール．
Clojureのビルドツール[leingen](http://leiningen.org/)を参考に作られている．(そのコントリビュータの1人はelixirの開発にも関わっている)

leingenさん
![leingen](https://raw.github.com/technomancy/leiningen/master/resources/leiningen.png)

## ファイル構成
プロジェクト作成コマンドの`mix new`では以下のようなファイルが作成される．

```
$ mix new nyaa
* creating README.md
* creating .gitignore
* creating mix.exs
* creating lib
* creating lib/nyaa.ex
* creating lib/nyaa
* creating lib/nyaa/supervisor.ex
* creating test
* creating test/test_helper.exs
* creating test/nyaa_test.exs

Your mix project was created successfully.
You can use mix to compile it, test it, and more:

    cd nyaa
    mix compile
    mix test

Run `mix help` for more information.

$ cd ./nyaa
$ tree
.
├── README.md
├── lib
│   ├── nyaa
│   │   └── supervisor.ex
│   └── nyaa.ex
├── mix.exs
└── test
    ├── nyaa_test.exs
    └── test_helper.exs

3 directories, 6 files
```

## `lib/nyaa.ex`
アプリケーションの起動/停止の振舞いを記述するファイル．停止(`stop/1`)は`use Application.Behaviour`すればデフォルトのものを利用できるので，`start/2`のみ実装すればよい

```ex:lib/nyaa.ex
defmodule Nyaa do
  use Application.Behaviour

  # See http://elixir-lang.org/docs/stable/Application.Behaviour.html
  # for more information on OTP Applications
  def start(_type, _args) do
    Nyaa.Supervisor.start_link
  end
end
```

## `lib/nyaa/supervisor.ex`
上で呼んでいる`Nyaa.Supervisor.start_link`を定義している．
`:supervisor.start_link(__MODULE__, [])`は，カレントモジュールをsupervisorとして定義するということ(`[]`はinitの引数として渡される)

`supervise(children, strategy: :one_for_one)`の`:one_for_one`は監視しているプロセス(child)が落ちたらそのプロセスだけ再起動するという意味．他にも監視プロセス全てを再起動する`:one_for_all`などがある．オプション一覧は http://elixir-lang.org/docs/stable/Supervisor.Behaviour.html を参照．

```ex:lib/nyaa/supervisor.ex
defmodule Nyaa.Supervisor do
  use Supervisor.Behaviour

  def start_link do
    :supervisor.start_link(__MODULE__, [])
  end

  def init([]) do
    children = [
      # Define workers and child supervisors to be supervised
      # worker(Nyaa.Worker, [])
    ]

    # See http://elixir-lang.org/docs/stable/Supervisor.Behaviour.html
    # for other strategies and supported options
    supervise(children, strategy: :one_for_one)
  end
end
```

## `mix.exs`
アプリケーションの設定ファイル．依存ライブラリやなどを記述する

## `test/nyaa_test.exs`, `test/test_helper.exs`
名前の通りテストの雛形．rspecのような書き方

```ex:test/nyaa_test.exs
defmodule NyaaTest do
  use ExUnit.Case

  test "the truth" do
    assert(true)
  end
end
```

## 次の一歩
この時点ではsupervisorしかいないので，workerをNyaa.Workerとして作成していく．

## 参考リンク
- [1 Introduction to Mix - Elixir](http://elixir-lang.org/getting_started/mix/1.html)
- [Introduction | Learn You Some Erlang for Great Good!](http://www.ymotongpoo.com/works/lyse-ja/ja/20_wsts.html)
- [7. アプリケーション — Erlang User's Guide v5.8.1 documentation](http://shibu.jp/erlang/design_principles/applications.html)
emacs のリージョンや編集中のバッファを DayOne の Dropbox に保存する拡張をつくった

この記事は .emacs Advent Calendar 2013 の 4日目です。なんとなく箇条書きします。

* [DayOne](http://dayoneapp.com/) は iPhone, iPad, Mac で使えるメモアプリです
* Ubuntu 用の DayOne アプリはありません
* しかし、データを Dropbox に置く設定で運用するのであれば、emacs からそこに編集中のテキストを保存するのは簡単です
* DayOne に emacs のリージョンや編集中のバッファを保存する elisp を書きました
* それを emacs 拡張としてまとめ、MELPA へ登録しました

概要やインストール方法は、[GitHub の mori-dev/emacs-dayone リポジトリ](https://github.com/mori-dev/emacs-dayone/blob/master/README.ja.md) の README.ja.md に書きました。DayOne と emacs を利用している方がいれば、よかったらお試し下さい。
この拡張を書くのに、GitHub の PullRequest や, Conyac での README の英訳、QA@IT での elisp の語彙の質問が役立ちました。とてもありがたかったです。

* [GitHub - Pull Requests · mori-dev/emacs-dayone](https://github.com/mori-dev/emacs-dayone/pulls?direction=desc&page=1&sort=created&state=closed)
* [Conyac - 日本語から英語への翻訳 dayone.el は Emacs から Day One に...](https://conyac.cc/ja/questions/156812-dayone_el_%E3%81%AF_Emacs_%E3%81%8B%E3%82%89_Day_One_%E3%81%AB%E6%96%B0?site=1)
* [QA@IT - emacs 起動時に、emacs 拡張のファイル内で、特定のディレクトリを指定するには](http://qa.atmarkit.co.jp/q/3319)

明日の .emacs Advent Calendar の担当は [ShingoFukuyama@github](http://qiita.com/ShingoFukuyama@github) さんです。お楽しみに。
Slick　詰まって頑張った


##その前に
[Play framework 2.x Scala Advent Calendar 2013](http://www.adventar.org/calendars/114)
の3日めのエントリになります。
Scala + Playを勉強し初めて半年ちょっとの@ryu1_okdです。よろしくどうぞ。

##Slickの書き方まとめ
全体的にSlickの書き方をまとめる予定でしたが、
書いてる間に4日に突入してしまったので自分がSlickを使ってる中で詰まった箇所を書いておこうかと思います。
※Slickのバージョンは1.0.1です。DBはMariaDB

### COUNT文

意外とハマりました。。
count は deprecatedになっているし、Query.lengthじゃないと使えないとか聞いてないしー。

```
Query(Class.length).first()

Query(Class.where(_.id === id).length).first()
```


###動的にWhere句の生成

みんなどうやってるんだろ？とりあえず queryを varで定義してパラメータを判定してWhereをチェインしていく感じで突破した。
Option型の使い方とかこれが正解とは思ってないです。

```
case class SearchForm(title:Option[String],startDate:Option[DateTime],endDate[DateTime])

def findBySearchForm(form:SearchForm) = db.withSession{
	var query = for( c <- Class) yield c
	if( form.title.nonEmpty ) query = query.where(_.title like "%" + form.title.get + "%")
	if(form.startDate.nonEmpty) query = query.where(_.startTime >= (new Timestamp(form.startDate.get.getMillis)))
	if(form.endDate.nonEmpty) {
		val endTime = form.endDate.get.plusDays(1) // 1日進ませる
		query = query.where(_.endTime < (new Timestamp(endTime.getMillis)))
	}
}
```

### group by + join

`select * , (select count(*) from B where B.aId=A.id) , (select count(*) form C where C.aId=A.id) from A , D, E where A.dId=D.id and A.eId=E.id`みたいな感じのSQLを書きたい場合　まぁなかなか無いでしょうが。。

```
val query = for{
	((a,bb),cc) <- A leftJoin(for((id,bb) <- B.groupBy(_.aid)) yield (aId,bb.length)) on(_.id === _._1) leftJoin (for((aId,cc) <- C.groupBy(_.aId)) yield (aId,cc.length)) on(_._1.id === _._1)
	d <- D
	e <- E
	if(a.dId === d.id && a.eId === e.id)
} yield (a,d,e, bb._2.ifNull(0), cc._2.ifNull(0))
```

と書きました。　とりあえず目的の結果が得られたからよしとしていますが、
PlainSQLでやったほうがいいんだろうか・・・


### 関数呼び出し

SimpleFunctionを使用するのですが、これはTypesafeのSlideShareで見つけてたので使いたかったという感じで、たまたまランダムで3件取得するようなパターンがあったので使ってみました。
MariaDB(MySQL)なのでRANDというランダム関数を使います。

```
private def random = SimpleFunction[Long]("RAND").apply(Seq())

def findRandomThree = db.withSession{
	Query(Class).sortBy(_.random).take(3).list()
}
```

## おわり
人生初のAdventCalendarに参加しました。自分の目標である「発信する側になる」というのに一歩でも近づけたのではないでしょうか。
ただ、Play framework 2.x Scala Advent Calendar 2013　参加者少ないし、そもそも成立してない可能性が・・・
まだまだ空きはありますので、ぜひ参加してください。

Scalaのほうはまだまだ勉強不足を実感する毎日ですね。
仕事ではPlay2 + Scala + Slick　で頑張ってますが、個人的にはScalikeJDBCをやってみようと動いてます。
そのあとskinnyに手を出す予定。いや先skinnyのほうが入りやすいんでしょうか。

というわけで明日は勝手に大尊敬しておりますskinny ScalikeJDBC作者の@seratchさんです。
このAdventCalenderが動いていることを信じて楽しみにしてます。
PkCrack を Mac OS X Mavericks で build する

## 追記
Homebrew からインストールする方法もあります。
コメントでの情報提供に感謝 :pray:

```
brew install pkcrack
```
---

暗号化された ZIP ファイルに対して既知平文攻撃を行う PkCrack を Mac で build する方法を紹介します。

まずは [PkCrack](http://www.unix-ag.uni-kl.de/~conrad/krypto/pkcrack.html) から source をダウンロードします。

```bash
wget http://www.unix-ag.uni-kl.de/~conrad/krypto/pkcrack/pkcrack-1.2.2.tar.gz
tar xzvf pkcrack-1.2.2.tar.gz
cd pkcrack-1.2.2/src
make
```

`make` でコケるはずです。
次のようにファイルの一部を修正します。

## Makefile 2 行目
```diff
-CFLAGS=-O6 -Wall
+CFLAGS=-O4 -Wall
```

## exfunc.c 44 行目
```diff
-#include <malloc.h>
+// #include <malloc.h>
```

## extract.c 71 行目
```diff
-#include <malloc.h>
+// #include <malloc.h>
```

## main.c 83 行目
```diff
-#include <malloc.h>
+// #include <malloc.h>
```

## readhead.c 58 行目
```diff
-#include <malloc.h>
+// #include <malloc.h>
```

## zipdecrypt.c 87 行目
```diff
-#include <malloc.h>
+// #include <malloc.h>
```

以上。
あとは、いつも通り `make` するだけ。
HTTPクライアントとStream::Bufferedの合わせ技

鼻が詰まって困ってます

`LWP`や`Furl`を使ってインターネットから様々なファイルをダウンロードする。よくやりますよね。その際に大きなファイルをGETしてしまい、perlのプロセスがメモリを大量に使い、OOM Killerに殺されて2年経つ、なんて経験をした人もきっと多いはず。

そこで使うのがレスポンスをファイルに書き出す技。Furlであれば

    my $furl = Furl->new();
    open my $fh, '>', $filename;
    $furl->request(
        url => 'http://example.com/4k.jpg', 
        write_file => $fh
    );
    my $size = -s $fh;
    seek($fh, 0, 0);

と書けて、`$filename`のファイルに大きな画像データが保存されます。

しかし、取得対象とするデータが、大きなファイルから小さいファイルまでさまざまあり、また、取得しなければならない回数が多い場合、小さいファイルのためにいちいちテンポラリファイルを作るのももったいないと思う事もなきにしもあらず。

そんな場合に使いたいのが`Stream::Buffered`。

https://metacpan.org/release/Stream-Buffered

`Stream::Buffered`はデータを一時的に格納するバッファとして使え、格納するサイズが大きくなると自動的にファイルに書き出してメモリを大量に使ってしまわないようになっています。元々`Plack::TempBuffer`という名前でPlackに含まれ、PSGIサーバにおいてPOSTデータをバッファリングする用途に使われていましたが、切り出されて別のディストーションになっています。現在の`Plack::TempBuffer`は`Stream::Buffered`を継承するだけのモジュールとなっています。

`Stream::Buffered`を使うと上のコードは、

    my $furl = Furl->new();
    my $buf = Stream::Buffered->new(メモリに格納するサイズ/デフォルト 1MB);
    $furl->request(
        url => 'http://example.com/4k.jpg', 
        write_code => sub {
            my ( $status, $msg, $headers, $buf ) = @_;
            $buf->print($buf);
        }
    );
    my $size = $buf->size;
    my $fh = $buf->rewind;

`Stream::Buffered`のオブジェクトはファイルハンドルとしては扱えないので、`write_file`ではなく、`write_code`を使います。そして最後に`rewind`メソッドを使うと、ファイル読み込みのオフセットをリセットした状態のファイルハンドルが得られます。`seek`済みなのでハマらなくてよいですね。`$fh`は通常のPerlのファイルハンドルなので、perlのread/sysread関数を使って読んだり、PSGIアプリケーションのレスポンスとしてそのまま使えます。

`Stream::Buffered`はHTTPクライアントで他のコンテンツを取って来て表示させる、Proxy的な動作を含むWebアプリケーションを作成する場合にぜひ使いたいモジュールです。
自由に使えるラテン語辞書データ (I)


序
----

@kagamiwari と申します。

「ラテン語プログラミング」という謎のアドベントカレンダーに投稿するために、この記事を書きました。
至らぬ点もございましょうがよろしくお願いします。

さてこの記事では、直接プログラミングに絡む話をするのではなく、ラテン語を計算機上でプログラミング的観点から扱う上できっと役に立つであろう、電子形式のラテン語辞書データについて記してゆきます。

初めに断らせていただきますと、この記事だけでは内容は完結しておりません。結論だけを得ようとお急ぎの方にはゴメンなさい。近日、続きを書きますので、楽しみにしていてくださいね。


なぜ、自由に使える辞書データを用意するの？
----

なぜ自由に使える辞書データを用意するのか？一言で答えると、便利だからです！

自然言語を対象として何らかの作業を行う際には、その言語の辞書があるととても便利です。世の中には優秀な「紙の」辞書が多数存在しますが、計算機上で扱うにはこのような紙の辞書は不便です。やはり「電子」辞書が欲しくなります。
世の中には優秀な電子辞書も多数存在しますが、一般にそのような辞書は有料です。高価です。我々プログラマという人種は、一般に吝嗇家です。読書は図書館で、あるいは（数百ページあろうとも）立ち読みで済ましてしまうというプログラマの方は多いでしょう。高価な電子辞書を購入するのはつらいことです。
とは申しましても、有料の商品を購入するというのは楽しいことでもあります。有料の電子辞書もいざ買ってみれば、きっと楽しい日々が待っているでしょう。しかし、このような辞書は一般に消費者向けに作られているものです。プログラマが有料辞書データを自身の研究・プログラミングに活用しようとすると、多数の厄介事が待ち構えています。
有料の辞書データを活用するにはまずは辞書データのフォーマットの解析が必要になったりします。また、苦労して辞書データを扱いやすい形式に変換できたとしても、そのデータを自分の研究・プログラミングに使用してもよいものかどうか、ライセンス上の問題があるやもしれません。更には、その辞書データを他者と共有して作業を行うこと、作業の成果を公表することなどなどにも、きっとライセンス上の問題があるでしょう。有料の辞書データを非営利のプログラミングに利用するのは厳しそうです。
そこで、自由に使える辞書データを手に入れましょう！というのがこの記事の趣旨です。


自由に使える辞書データはどこにある？それともイチから作るの？
----

素晴らしいプロジェクトが存在します！

* [Wiktionary](http://ja.wiktionary.org/wiki/メインページ)

> ウィクショナリーの目的は、あらゆる言語の語句の意味・語源・用法・関連語などを記載した多機能辞典を作ることです

素晴らしいです！

> 内容が永久にフリー
> ウィクショナリーは GFDLおよびクリエイティブ・コモンズ 表示-継承 ライセンスというライセンスを採用しています。ウィクショナリーでの著作はすべてこのライセンスの下に公開されます。これはこの辞書の内容が永久にフリーであることを意味します。

まさにうってつけです！

![wiktionary_puella.png](https://qiita-image-store.s3.amazonaws.com/0/33491/0baeccd8-d534-1e3c-c3b2-5235bf29e460.png)

ラテン語のデータもあります！

これを利用させていただくことにしましょう。


…
----
本日はここまで。続きはまた近いうちに書きます。よろしくお願いします。
rubyをインストール

さくらVPSでtwitterbotを作ってみようとして，rubyの環境を入れようとしているメモです．

[ここ](http://itmemo.net-luck.com/linux-centos-ruby-install/)が非常に参考になりました

環境はCentOSです．

yumを使ってインストールすると，バージョンが少し古いみたいなので，最新版を落としてきました．
公式ページから，ダウンロードして，解凍して，適当な場所に放り込みます．

コマンドの勉強にもなります
[wget](http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/230995/) 
[tar](http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230896/)

```zsh
wget http://cache.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p353.tar.gz
tar zxvf ruby-2.0.0-p353.tar.gz
sudo mkdir /usr/lib/ruby
mv ruby-2.0.0-p353 /usr/lib/ruby
```
展開したファイルの中で[make](http://www.itmedia.co.jp/help/tips/linux/l0302.html)します.

```zsh
cd /usr/lib/ruby/ruby-2.0.0-p353
./configure

make
make install
```

これで入るらしい.
以下のコマンドでバージョンの確認ができる．

```zsh
ruby -v
```

シンボリックリンクの追加

```zsh
sudo ln -s /usr/lib/ruby/ruby-2.0.0-p353/ruby /usr/bin/
```
WindowsAzureモバイルサービスからメール送信する方法


## 概要
WindowsAzureモバイルサービスのスクリプト機能からメールを送信する。
用途としてはメールアドレスの本人確認メールやメルマガなんかに使えると思う。

## 方法
方法はWindowsAzureの公式ドキュメントに載っている。
[SendGrid を使用したモバイル サービスからの電子メールの送信](http://www.windowsazure.com/ja-jp/develop/mobile/tutorials/send-email-with-sendgrid/)

が、自分はこのドキュメントを見つけられず紆余曲折してやっとできた後にこのドキュメントを見つけた^^;

## 以下メモ
### SendGrid
- SendGridはAPIでメールを送信したり他にもたくさんの機能を使うことができる。
- [公式ドキュメント](http://sendgrid.com/docs/)は全部英語なのでちょっと辛いけどAPI ReferenceのWeb APIとAPI Workshopを見れば何とかなる。

### クロスドメインとJSONP
- 通常Javascriptは異なるドメインへのアクセスを許可していない。当然モバイルサービスのスクリプトもJavaScriptなのでこれはできない。
- クライアントサイドのJavaScriptの場合、これを解決するためにJSONPという手法がある。
- サーバサイドのJavaScript（Node.js）の場合、requestモジュールを使う（後述）


### モバイルサービスのスクリプト機能
- モバイルサービスのスクリプト機能には「require グローバル関数」に様々な機能が備わっている。
- 詳細は[モバイル サービスのサーバー スクリプトの操作](http://www.windowsazure.com/ja-jp/develop/mobile/how-to-guides/work-with-server-scripts/#modules-helper-functions)の「方法: モジュールおよびヘルパー関数を利用する」を参照。
- この中の「request」を使うことでクロスドメインでもhttpリクエストできるようになる。（実態はnode.jsのrequest モジュールらしい。node.jsについては全く勉強したことがないので今後調べる。）
問題：次のRubyMotionアプリにはメモリ関連の不具合があります。5分以内に原因箇所を特定せよ。


```ruby
class MyController
  def initialize
    @button = NSButton.alloc.initWithFrame(NSMakeRect(70, 150, 100, 32))
    @button.title = "Timer Start"
    @button.action = "actionTapped"
    @button.target = self
    @button.bezelStyle = NSRoundedBezelStyle
    @button.autoresizingMask = NSViewMinXMargin|NSViewMinYMargin
    app.window.contentView.addSubview(@button)

    @state = NSTextField.alloc.initWithFrame(NSMakeRect(70, 100, 100, 22))
    @state.stringValue = "0.0"
    @state.autoresizingMask = NSViewMinXMargin|NSViewMinYMargin|NSViewWidthSizable
    app.window.contentView.addSubview(@state)

    @timer = nil
  end

  def app
    NSApp.delegate
  end

  def actionTapped
    if @timer
      @button.title = "Timer Start"
      @timer.invalidate
      @timer = nil
    else
      @button.title = "Timer Stop"
      @duration = 0
      @timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target:self, selector:'timerFired', userInfo:nil, repeats:true)
    end

    def timerFired
      @state.stringValue = "%.1f" % (@duration += 0.1)
    end
   end
end

class AppDelegate
  attr_reader :window

  def applicationDidFinishLaunching(notification)
    buildMenu
    buildWindow

    MyController.new
  end

  def buildWindow
    @window = NSWindow.alloc.initWithContentRect([[240, 180], [240, 240]],
      styleMask: NSTitledWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask|NSResizableWindowMask,
      backing: NSBackingStoreBuffered,
      defer: false)
    @window.title = NSBundle.mainBundle.infoDictionary['CFBundleName']
    @window.orderFrontRegardless
  end
end
```

## 再現方法

```
% motion create Timer --template=osx
```
とRubyMotionアプリのプロジェクトを作成し、`app/app_delegate.rb'のコードを上記のものに置き換えます。

```
% rake
```
を実行するとMacアプリが起動しますので、"Timer Start"というボタンをクリックしてください。アプリがクラッシュしますので、原因となっている箇所を探し出してみてください。

問題箇所が分かった場合でも、公にしないでくださいね(。・ω・。)

### 解答編
[RubyMotion Advent Calendar 2013](http://qiita.com/advent-calendar/2013/rubymotion)の12月7日に簡単に場所を特定する方法を書きたいと思います。
新人女子の書いたコードを直すだけなわけがない！


「新人女子の書いたコードを直すだけの簡単なお仕事です！」
https://paiza.jp/poh/ec-campaign

という楽しいイベントがあります(2014年1月8日まで投稿できます）。

この企画サイトで投稿したコードが実行され検証されるのですが、
少し実行に時間がかかるので、簡単な検証環境を準備しました。

使い方
======

大体こんな感じです。

```sh
git clone https://github.com/mokemokechicken/senpai-tasukete.git
cd senpai-tasukete
sh verify.sh <YOUR PROGRAM EXEC COMMAND>
```

`<YOUR PROGRAM EXEC COMMAND>` の部分は作成したプログラムを起動するための引数を入れてください。
標準入力への問題の投入は verify.sh の方で行います。
実行すると、サイトに掲載されている簡単な例と、もう少し複雑なテストケース、20000Item, 200000Itemのケースで動作検証をします。
ただし、20000Itemと200000Itemの例の答えが合っているという保証はないので悪しからず。。（間違えがあれば教えてください）

例
-----

```sh
% sh verify.sh python ../try2.py
--------------------------------------
EXAMPLE: 1.txt

real    0m0.023s
user    0m0.013s
sys     0m0.008s
OK
--------------------------------------
EXAMPLE: 2.txt

real    0m0.023s
user    0m0.013s
sys     0m0.009s
OK
--------------------------------------
EXAMPLE: 3.txt

real    0m0.022s
user    0m0.013s
sys     0m0.008s
OK
--------------------------------------
EXAMPLE: test.txt

real    0m0.022s
user    0m0.013s
sys     0m0.008s
OK
--------------------------------------
EXAMPLE: 20000_75.txt

real    0m0.065s
user    0m0.054s
sys     0m0.010s
OK
--------------------------------------
EXAMPLE: 200000_75.txt

real    0m0.409s
user    0m0.391s
sys     0m0.016s
OK
```
[Esc, C-[, C-C 対応版] Terminal Vimで Insert モードを抜ける時に英数入力に切り替える方法

Mac の場合です。

### 解決方法
KeyRemap4MacBook を使えば可能。

### ESC と Ctrl+C と Ctrl+[ に対応させる設定。
[private.xml](https://gist.github.com/k2ruhashi/7769571)

```private.xml
<?xml version="1.0"?>
<root>
  <list>
    <item>
      <name>LeaveInsMode with EISUU(Terminal)</name>
      <identifier>private.app_terminal_esc_with_eisuu</identifier>
      <only>TERMINAL</only>
      <autogen>--KeyToKey-- KeyCode::ESCAPE, KeyCode::ESCAPE, KeyCode::JIS_EISUU</autogen>
      <autogen>--KeyToKey-- KeyCode::BRACKET_LEFT, VK_CONTROL, KeyCode::BRACKET_LEFT, VK_CONTROL, KeyCode::JIS_EISUU</autogen>
      <autogen>--KeyToKey-- KeyCode::C, VK_CONTROL, KeyCode::C, VK_CONTROL, KeyCode::JIS_EISUU</autogen>
    </item>
  </list>
</root>
```

あとは ReloadXML して checkbox ON して有効にましょう。そしたらOK。
ゲーム制作計画9日目！

#こんなのはどうだろう。
ちょっと構想できてきました。
まだ考えが浅い感じです。
ゲームバランスがどうなるか不安です。
書いたけど、作りながらの心変わりはあるかも。

##タイトル
未定
##ゲーム概要
基本的にはスネークゲームです。
プレイヤーキャラクター（PC）が餌を食べると、PCは卵を産みます。
産んだ卵は自分のあとに引きずります。
そういう生態の生物です。引きずるほど早く生まれるようです。
卵は時間経過により孵ってひなになります。
ひなになってもPCの後を歩いてついてきます。
その後、大人になります。
大人になると得点がゲットできます。
PCはできるだけ多くのひなを育て大人にすることを目指します。

フィールドには多くの敵がいて、ひなを狙ってきます。
しかし、基本スネークゲームなので、敵の攻撃を避けることは容易ではありません。
そこで、父どりを操作してひなたちを敵の攻撃から守ります。
母どり（PC）は左手（wasd）あたりで操作し、父どりは右手でマウスを使って操作します。

##要検討点
・父どりはどういう方法で守るのか。
→よくあるマウスについてくるちょうちょみたいな動きをして飛んでる。
体当たりで敵を倒せる。
身を挺して攻撃をかばえる。
クリックで使用回数有限のびーむを発射できる。とか考え中
・たいとる！
・ゲームオーバー条件
→時間制限？

##希望追加要素（時間とMPがあれば）
・ます制でないスネークゲームを作ってみたい。
・巣立った子どもたちは何らかの方法で協力してくれる。
・卵からかえった鳥たちには種類があり、図鑑でコレクションできる。
・PCをいくつか選択できるようにして、能力の差をつける。
・ランキングとか
・ついったとか

##問題点　
・デザインをかわいいマスコット系にしたいけど自分は絵をかけない。
・スネークゲームだけで意外と集中力がいるのに
父どり操作している暇はあるのか…。
D言語で、コンパイル時単体テスト

D言語 Advent Calendar 2013の三日目の記事です。
更に、[Aizu Advent Calendar 2013](http://atnd.org/events/45075)の三日目の記事でもあります。

D言語には、簡単な[単体テスト機能](http://kmonos.net/alang/d/unittest.html)が言語仕様に含まれています。そのおかげで、気軽に関数やクラスの単体テストを書くことが出来ます。

その一方、D言語には[コンパイル時関数実行（CTFE）](http://kmonos.net/alang/d/function.html#interpretation)という機能があります。名前の通り、コンパイル時に関数を実行する機能です。今となっては、「標準ライブラリのこの関数がCTFE出来ない！これはバグだ！！」とも言われるほど、関数がCTFE出来ることは重要になりつつあります。

関数がCTFEableかどうか、またはCTFEにおいて正常に動作するか、単体テストを使って、実行時と同じようにチェック出来るととても助かります。が、残念ながらD言語の単体テストは実行時にしか実行してくれません。

# __traits(getUnittests)とは
D言語には、[trait](http://kmonos.net/alang/d/traits.html)という、コンパイル時にコンパイラの内部情報を取得する機能があります。その中に、[getUnitTests](http://dlang.org/traits.html#getUnitTests)という命令があり、それを使うと、特定のモジュールに書かれている単体テストを取得することが出来ます。

```d:test.d
module test;

import std.stdio;

unittest
{
    "Test A".writeln();
}

unittest
{
    "Test B".writeln();
}

void main()
{
    "Start main".writeln();
    foreach(test; __traits(getUnitTests, mixin(__MODULE__)))
    {
        test();
    }
}
```

`__MODULE__`は、その場所のモジュール名が書かれた文字列リテラルとなります。D言語には、[mixin](http://kmonos.net/alang/d/mixin.html)と呼ばれる、文字列をD言語のソースコードとして解釈する機能があります。よって、`__MODULE__`をmixinすることによって、`mixin(__MODULE__)`はその場所のモジュールを指すことになります。

```bash:shell
$ rdmd -unittest test.d
Test A
Test B
Start main
Test A
Test B
```

通常通り、main関数が呼び出される前に単体テストが呼ばれています。それに加えて、getUnitTestsで取得した関数を呼ぶことによって、もう一度単体テストが呼ばれているのが分かります。このgetUnitTestsを使うと、簡単にコンパイル時単体テストを実現することが出来ます。

# __traits(getUnittests)を使ったコンパイル時単体テスト
D言語には、[テンプレートmixin](http://kmonos.net/alang/d/template-mixin.html)と呼ばれる、テンプレートの中身をmixinされた場所に展開する機能があります。そのようなテンプレートをmixinテンプレートと呼びます。そのmixinテンプレートを使い、テンプレートmixinすると、そのモジュールの単体テストが全てコンパイル時にも実行される、というようなmixinテンプレートを作ってみます。

```d:compile_time_unittest.d
module compile_time_unittest;

mixin template enableCompileTimeUnittest(string module_ = __MODULE__)
{
    static assert(
    {
        foreach(test; __traits(getUnitTests, mixin(module_)))
        {
            test();
        }
        return true;
    }());
}
```

テンプレート仮引数のデフォルト値として使われた`__MODULE__`は、インスタンス化した場所のモジュール名の文字列リテラルとなります。[static assert](http://www.kmonos.net/alang/d/version.html#StaticAssert)は、中身をCTFEし、その結果がtrueかどうかをコンパイル時にチェックする機能です。static assertの中身は、`{ ... }()`というように、[関数リテラル](http://www.kmonos.net/alang/d/expression.html#FunctionLiteral)を作り、即座に呼び出しています。関数リテラルの中は、上のコードと同じように、このテンプレートがmixinされたモジュールの単体テストを取得し、それを読んでいます。

さっそく、このenableCompileTimeUnittestを使ってみましょう！

```d:test2.d
module test2;

import compile_time_unittest;

mixin enableCompileTimeUnittest;

unittest
{
    assert(false);
}

void main(){}
```

```bash:shell
$ rdmd --build-only -unittest test2.d
test2.d(9): Error: assert(false) failed
...
```

rdmdは、ソースコードからimportなどの情報から依存情報を抜き出し、自動でファイルを追加してくれるので、test2.dだけの指定で十分です。rdmdに--build-onlyを渡すことによって、コンパイル後に実行しないようにしました。見事にコンパイルが失敗しています！！ __コンパイル時に単体テストが動きました！！！__

# まとめ
正直に言って、上の方法でなくてもコンパイル時に単体テストを実行する方法はあります。ですが、他の方法と比べて、上の方法は、実行時単体テストを書くのと全く同様にコンパイル時単体テストを書ける点が優れてると思われます。宣言に情報を追加することの出来る、[UDA](http://dlang.org/attribute.html#uda)と呼ばれる機能を使うと、コンパイル時のみの単体テストや、実行時のみの単体テストを作ることも可能です。

D言語を使っていると、必ずコンパイル時単体テストが必要になる時が来ます！そんな時、ぜひ上のような方法を試してみてください。
imgタグ内の画像をアスペクト比を保ちながら表示するjQueryプラグイン

　 画像をHTMLページ内に表示する場合、表示したいエリアより画像サイズが大きい場合や、縦横比（アスペクト比）がボックスと一致しないために画像が伸縮されて表示されたりしてしまい、残念です。

　「[imgLiquid](http://kwski.net/jquery/1077/)」というプラグインを使うと、ボックス内に画像をリサイズして表示してくれるので便利です。使い方も非常に簡単なのでご紹介します。
（[こちらの記事](http://qiita.com/kazuki_saito/items/f6e8a42c97a3042d5a01)に既に紹介がされていますが、この記事では少しオプションの説明も加えておきます。

入手方法
==============================

https://github.com/karacas/imgLiquid


使い方
==============================

jQueryとimgLiquid.jsを読み込む
---------------------------------------

```html
<script type="text/javascript" src="/js/jquery.min.js"></script>
<script type="text/javascript" src="/js/imgLiquid-min.js"></script>
```

imgタグを内包する要素に対してidを振る
---------------------------------------

```html
<div id="img-container" style="width:200px; height:150px;">
	<img src="/cat.jpg" />
</div>
```

imgタグを内包する要素に対しimgLiquidを実行
---------------------------------------

```html
<script>
$('#img-container').imgLiquid();
</script>
```


オプションについて
==================================

オプションなし
---------------------------------------------
```html
<script>
$('#img-container').imgLiquid();
</script>
```
![image1.png](https://qiita-image-store.s3.amazonaws.com/0/17003/c0765ad1-1c7f-363a-016e-3e030e7d09ae.png)


アスペクト比を維持
---------------------------------------------
```html
<script>
$('#img-container').imgLiquid({ fill: false });
</script>
```
![image2.png](https://qiita-image-store.s3.amazonaws.com/0/17003/5db6c905-ef0e-06d7-fcc2-8a916639a14c.png)


画像の垂直位置を指定
---------------------------------------------
verticalAlignで指定します。center/top/bottomなど。

```html
<script>
$('#img-container').imgLiquid({ verticalAlign: 'top' });
</script>
```

![image3.png](https://qiita-image-store.s3.amazonaws.com/0/17003/f09de493-fc83-7f51-f9fe-e4c6ad644e11.png)


水平位置を指定
---------------------------------------------
horizontalAlignで指定します。center/left/rightなど。

```html
<script>
$('#img-container').imgLiquid({ fill: false, horizontalAlign: 'right' });
</script>
```

![image4.png](https://qiita-image-store.s3.amazonaws.com/0/17003/53516922-bad1-52a7-54ce-b4d2fc0bd1e7.png)


HTML5の独自データ属性でオプションを指定することもできる
---------------------------------------------

以下の属性が指定可能

- data-imgLiquid-fill
- data-imgLiquid-verticalAlign
- data-imgLiquid-horizontalAlign

```html
<div id="img-container" data-imgLiquid-fill="false" data-imgLiquid-horizontalAlign="left" style="width:200px; height:150px;">
	<img src="/cat.jpg" />
</div>
<script>
$('#img-container').imgLiquid();
</script>
```

![image5.png](https://qiita-image-store.s3.amazonaws.com/0/17003/185cb715-90aa-071b-23b0-f35b6c501507.png)
Ruby　エラトステネス


```ruby:Eratosthenes.rb
puts "０からxまでの整数の中での素数を計算し、出力します。"
print " x > "

#変数の準備
while true
  x = gets.to_i #上限
  if x >= 2
    break
  end
end

a = [] #xまでの整数格納
for i in 2..x
a << i
end

k = 0 #先頭の数　添字
while k < Math.sqrt(x) #リスト先頭の数の倍数を削除。それをxの平方根まで行う
  i = 1   #倍数かどうかの判定
  while i < a.length  
    if a[i] % a[k] == 0 && i != k    #先頭数の倍数であり、かつその倍数が先頭の数と同じではないならそれを削除
      a.delete_at i
    end
    i += 1
  end
  k += 1
end

k = 0
while k < a.length
  print a[k].to_s + " "
  k += 1
  if (k % 10 == 0) 
    puts ""
  end
end
```

どうしても100000超える辺りから時間のかかりが目立ってしまう・・・
どこが足りないのだろうか。それとも、これ以上の速度上昇はあまり期待できないのだろうか。
Sinatraとajax通信でクロスドメイン制約の突破方法

##はじめに

クロスドメイン制約とは、クライアントとサーバのドメインが異なると通信ができない制約のこと。

↓ブラウザをlocalhost、Sinatraをlocalhost:4567において通信した時のエラー。

```
[Error] XMLHttpRequest cannot load http://localhost:4567. 
Origin http://localhost is not allowed by Access-Control-Allow-Origin.
 ```

ではどうすればよいのか？


##解決方法

1. クライアントと同一ドメインにサーバから経由させるスクリプトを設置 (参考 http://routesfate.blog80.fc2.com/blog-entry-218.html)
2. JSONPを使う (参考 http://gihyo.jp/dev/serial/01/crossbrowser-javascript/0011)
3. ヘッダーを書き換える(参考 http://d.hatena.ne.jp/yuya_lush/20110628/1309280632)
4. (誰かの遺産を使う)


大体上記の３(+1)つになると思う。

PHPerなら1で解決するのもありかと。GETしかしないならJSONPもあり。
基本的にはヘッダーを書き換えると思う。


ところで、今回薦めるのは4番。なんとなくSinatraでいいgemはないかとぐぐっていたところ、よさげなのを発見した。

その名も __「sinatora-cross_origin」__
公式サイト: https://github.com/britg/sinatra-cross_origin

12,944ダウンロードを達成してるので、割と人気あるっぽい。
日本語の記事がぱっと見無かったから紹介してみた。


##sinatra-cross_originの使い方

```ruby:qiita.rb
require 'sinatra'
require 'sinatra/cross_origin'
enable :cross_origin
get '/hi' do
  cross_origin
  "Hello World!"
end
```

超簡単。おそらくヘッダーを書き換えてるんだと思う。
他にもメソッド毎に細かく調整できたりするので、そこら辺は公式参照。

みんな大好きSinatra！
aptitude検索パターンの紹介

Debian や Ubuntu のパッケージのインストールなどで コマンドライン操作では apt-get や aptitude を使いますが、 apt-get では出来ない aptitude の便利な使い方を紹介します。

続きは [aptitude検索パターンの紹介](http://blog.n-z.jp/blog/2013-12-04-aptitude-search-pattern.html) です。
自作クラスでCodeIgniterオブジェクトを使用する

この記事は[CodeIgniter Advent Calendar 2013](http://qiita.com/advent-calendar/2013/codeigniter) の 3 日目の記事です。

先日に続いて3記事目。3日坊主になるかどうかですね。

**まだまだCodeIgniter Advent Calendar は募集中ですよ！**


さて、今回の内容ですが、先日はライブラリの作成方法だったのですが、その途中にでてきた`get_instance()`というものを紹介しましょう。

```php
public function __construct()
{
    $config =& get_config();
    ...
}

public function login()
{
    $CI =& get_instance();
    ...
}
```

この`$config =& get_config()`も大体似ています。


`get_instance()`についてはもちろん、[ここ](http://codeigniter.jp/user_guide_ja/general/creating_libraries.html)に書いてあります。


## $CI =& get_instance();

コントローラーでCodeIgniterオブジェクトに入ってるLoaderを使用したい場合は

```php
public function __construct()
{
    $this->load->library('user_agent');
    ...
}
```

のようにします。

しかし、ライブラリやヘルパーなど、自作したクラスでCodeIgniterオブジェクトを使用したい場合、単純に`$this`では取得できないです。（CI_Controllerを継承していないので、そらそうだ

このようなとき、CodeIgniterではシステムクラスをライブラリ内で明示的にロードする必要が生じます。

そのロードをするためにCodeIgniterのインスタンスを取得するのが`get_instance()`となります。

また、インスタンスを取得しただけではダメで、そのインスタンスを直接的に変更することも必要となる場合がありオブジェクトは必ず参照渡しで使用することが必要です。

これにより、CodeIgniterオブジェクトのオリジナルを使用することができます。


### Example

例えば、universal_helper.phpというヘルパーを作成し、（`./application/helpers/universal_helper.php`）

その中に、UserAgentから判別した`is_mobile()`という`user_agent`クラスのラッパーメソッドを作成するとします。


これはダメ

```php
if (!function_exists('is_mobile'))
{
    function is_mobile()
    {
        $this->load->library('user_agent');
        return $this->agent->is_mobile();
    }
}
```


こうする

```php
if (!function_exists('is_mobile'))
{
    function is_mobile()
    {
        $CI =& get_instance();
        $CI->load->library('user_agent');
        return $CI->agent->is_mobile();
    }
}
```


こういった感じです。

## どこで定義されている？

この`get_instance()`がどこで定義されているかと言うと、`./system/core/CodeIgniter.php`内で

```php
// Load the base controller class
require BASEPATH.'core/Controller.php';

function &get_instance()
{
    return CI_Controller::get_instance();
}
```

のように定義されています。

そのため、基はシステムのコントローラーの`./system/core/Controller.php`に下記のように定義されています。

```php
public static function &get_instance()
{
    return self::$instance;
}
```

静的な`instance`という変数に格納されており、

```php
private static $instance;

/**
 * Constructor
 */
public function __construct()
{
    self::$instance =& $this;

    // Assign all the class objects that were instantiated by the
    // bootstrap file (CodeIgniter.php) to local class variables
    // so that CI can run as one big super object.
    foreach (is_loaded() as $var => $class)
    {
        $this->$var =& load_class($class);
    }

    $this->load =& load_class('Loader', 'core');

    $this->load->initialize();

    log_message('debug', "Controller Class Initialized");
}
```

必要なクラスを含んでおります。


## 終わり

ちょっとコアっぽい話ですね。でも、しっかりとドキュメントには書いてあります。

### 次回のCodeIgniter Advent Calendar2013

明日、何書こう…
Hubot-scriptsでサイコロを投げる


暇すぎてbotとでも遊ぼうかと思っても、会話だけではすぐにつまらなくなってしまいます。

そんな時に備えて、botにサイコロを振らせてみましょう。

## 参考スクリプト

[dice.coffee](https://github.com/github/hubot-scripts/blob/master/src/scripts/dice.coffee)を参考に、シンプルにしてみました。

## サイコロふるよ

「サイコロ！」と叫ぶと、６面ダイスを２つ振るスクリプトを用意しました。

```dice2d6.coffee
module.exports = (robot) ->
  robot.hear /サイコロ/, (msg) ->
    msg.send report roll 2, 6

report = (results) ->
  "えいっ! #{results.join('と')} がでたよ！"

roll = (dice, sides) ->
  rollOne(sides) for i in [0...dice]

rollOne = (sides) ->
  1 + Math.floor(Math.random() * sides)
```

coffeeスクリプトのfor文の使い方とか、やはり他の人が書いたスクリプトは参考になります。

repot関数には、roll(2, 6)の結果が入ります。
roll関数は、diceに2（２個）、sidesに6（６面）をセットすると、diceの数だけ繰り返します。
繰り返されるのは、rollOne関数です。ここで６面ダイスを振ります。

逆からたどると、rollOneを２回呼び出した結果が配列になり、その配列がreport関数のresultsに入ります。resultsをjoinで繋いで返答を作成します。

## 前回学んだmsg.randomを使うよ

サイコロも何度も振ると、botの反応が同じなのでつまらなくなってきます。

そこで、前回のmsg.randomを使ってみましょう。

```dice2d6_2.coffee
dicemes1 = [
  "えいっ!",
  "コロコロ..",
  "いい目でてね〜"
]
dicemes2 = [
  "だよっ",
  "だねっ！",
  "だったよ！"
]

module.exports = (robot) ->
  robot.hear /(サイコロ|ダイス)/, (msg) ->
    msg.send report msg, roll 2, 6

report = (msg, results) ->
  msg1 = msg.random dicemes1
  msg2 = msg.random dicemes2
  "#{msg1} #{results.join('と')} #{msg2}"

roll = (dice, sides) ->
  rollOne(sides) for i in [0...dice]

rollOne = (sides) ->
  1 + Math.floor(Math.random() * sides)
```

ついでに、サイコロだけではなくて、ダイスでも反応するようにしました。

これで、
私：「運命のダイスロール！」
hubot：「いい目でてね〜 4と2 だよっ」
私：「サイコロ！」
hubot：「えいっ! 3と3 だったよ！」
私：「サイコロ投げて！」
hubot：「コロコロ.. 5と4 だったよ！」
ということができるようになります。

これで1人でも寂しくないですよね！
Verilog HDLでの数値リテラル（定数）の書き方

ブログ記事の焼き直しですみませんが、私が Verilog HDL を書き始めて一番ハマった（バグった）部分です。
Veritakのたっくさんに教えて頂いたバグでした。わからなかったので、とっても助かりました。ありがとうございました。
（書き方が全くわからないので、平文で書きます。ご容赦を。。。）

Spartan-3E Starter Kit （http://japan.xilinx.com/products/boards-and-kits/HW-SPAR3E-SK-US-G.htm） のDDR SDRAMのコントローラを作った時の話です。フロムスクラッチで練習のために書いてまして、FIFOも自分で書きました。その時に、Xilinx社のプリミティブの中で、Dual Port RAMライブラリのRAM16XDをメモリとして使用しています。Write Pointer(wp) と Read Pointer(rp) を定義し、wp と rp のポインタを使ったリングバッファとして、FIFOを構成していました。
なお、wp, rp 共に4ビットとして定義していました。FIFOのFULLを判定する式はrp-1 == wp となるのはお分かりかと思います。それで、FIFOのFULLを判定する式を下に示すように書いていました。
assign fifo_full = (rp-1==wp) ? 1'b1: 1'b0;

これでバグりました。fifo_full が 1 になりませんでした。判定条件が真になりませんでした。
この記述がなぜダメかというと、rp-1 の -1 はビット幅を指定していないので、32ビット幅に拡張されてしまうそうです。つまり符号が拡張されるので、32'hFFFF_FFFFになります。左辺は当然32ビット符号拡張されますが、== の比較のときに右辺も32ビットに拡張されてしまいます。
これでも通常の場合はOKなのですが、rp が 0、wp が F の時（ポインタは4ビットに定義してあるので)当然ながらFIFOはFULLなのですが、左辺は32'hFFFF_FFFF、右辺は32'h0000_000Fとなってイコールになりませんでした。当然式は真にならず、fifo_full が 1 になることはありませんでした。
これを避けるためには rp-1 の -1 のビット幅を制限する必要があるそうです。ここではポインタは4ビットなので、4ビットに制限します。つまり 1 は 4'b0001 か 4'h1 と書く必要があります。
よって、下のように、上式を書き換えると、fifo_full が正常に 1 になるようになりました。
assign fifo_full = (rp-4'h1==wp) ? 1'b1: 1'b0;

これは、皆さんには常識かもしれませんが、知らなかった人のために書いておきます。コレにハマるとしばらく原因がわかりません。。。