OmniAICreator/Qiita-1.07M huggingface dataset:
ゲーム制作計画12日目！

今日も前回の続きをお勉強します。
参考サイト(http://www.atmarkit.co.jp/ait/articles/1304/01/news034_4.html)
ゲーム制作計画n日目がゲーム制作1日目になるのも近いかも…。

#シーン
今日はシーンについてお勉強しました。
シーンはゲームの場面を、場面ごと別々に管理するためのものです。
Unityにもあったので少しだけ理解しやすい感じです。
たとえば、ゲームオーバー！の画面とゲームスタート！の
画面で別のシーンするみたいにしてつかいます。
こうすると、二つの画面では、同じ変数を使えるなど利点があります。
ソースコードも見やすくなったりします。
シーンAではクリックに対して動作Aをして、
シーンBではクリックに対して動作Bをする、
のような同じ動作に対する別の処理も簡単に分けられますね。
自分も理論の上辺をなぞっただけなので、
少しずつメリットを理解していこうと思います。

#関数の扱い
今日の部分を移していて気づいたのですが、
JavaScriptでは？enchant.jsでは？
関数を変数に入れるみたいな処理ができるのですね。

```js
var func=function(){/* */};
```

のような。
まだこれの正体についてはよくわかっていないので、
これから少しずつ勉強していこうと思います。
とりあえず斜め読みだとfunction演算子のことみたい？です。
参考(https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/function?redirectlocale=ja&redirectslug=JavaScript%2FReference%2FOperators%2Ffunction)
ストックしておいて、今見ているページを読み終わったら読んでみようと思います。
Yeoman Sencha Touch Generator について


[Sencha Advent Calendar 2013](http://www.adventar.org/calendars/137)の6日目です

※ アドベントカレンダー投稿間に合ってよかった(汗)

sencha commandは便利なのですが、[Yeoman](http://yeoman.io/)のような総合的なビルドツールと連携できるともっと便利だなぁーと思ってYeomanのsencha touch用のGenerator(テンプレート的なもの）を作りました。

利用することで、Livereload（sassやimageを編集すると、自動でcompileが走り、ブラウザのリフレッシュまでしてくれる機能）とかの恩恵も受けれます。

ぜひ使ってみてください。

http://yeoman.io/


## 概要

Yeomanを利用したテンプレート `Generator-Senchatouch` を作りました。
使い方は下記参照。

feedbackお待ちしております！

## インストール

    npm install -g generator-senchatouch

## 生成

    yo senchatouch

## Gruntタスク

### grunt serve

ブラウザが立ち上がり、Livereloadを起動して画像やsassのリソースを監視して更新があれば、compile＆ブラウザリフレッシュしてくれます。

### grunt test

    TODO（時間とってやらないと。。。）

### grunt (default)

    TODO（時間とってやらないと。。。）

### grunt build

    TODO（時間とってやらないと。。。）

### TODO

* [x] create test
* [x] modify grunt task ( default and build )
zsh+git使ってる時にキャレットを自動エスケープする

## 問題

zsh使ってて`git diff HEAD^`すると、`zsh: no matches found: HEAD^`エラーが発生する。


## 解決法

zsh-git-escape-magicをインストールする。

https://github.com/knu/zsh-git-escape-magic


## 解説

zsh使っててextended_glob設定していると、キャレットは特殊文字とみなされてしまいます。
そのため、

```zsh
git diff HEAD\^
```

とキャレットをエスケープしてやる必要があります。
これは面倒なのですが、zsh-git-escape-magicをインストールすると、

```zsh
git diff HEAD(ここで^を入力)
```

これが

```zsh
git diff HEAD\^
```

と展開してくれます。便利!
キャレット以外にもgitコマンドに特殊文字が含まれてるといい感じでエスケープしてくれるみたいです。


## インストール方法

```.zshrc
fpath=(~/.functions ${fpath})
```

こういう感じで.zshrcに設定しておいて、~/.functionsに git-escape-magic ファイルを配置すればOKです。

以上です。
Amazon EC2 の IP 帯域


----

いろいろな理由があって、EC2 の IP 帯域を知りたくなることがあると思います。

(2016/05/10 追記) 公式ドキュメントに IP 帯域が掲載され、フォーラムを参照する方法は非推奨になりました。

[AWS IP Address Ranges - Amazon Web Services](http://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html)

~~そんな時はフォーラムをチェック！~~

~~[https://forums.aws.amazon.com/forum.jspa?forumID=30](https://forums.aws.amazon.com/forum.jspa?forumID=30)~~

~~フォーラムの固定投稿に「Amazon EC2 Public IP Ranges」というものがあります。これを見ると、リージョンごとに割り当てられている IP 帯域を知ることができます。2013年11月版は[こちら](https://forums.aws.amazon.com/ann.jspa?annID=1701)。東京リージョンはこのように書いてあります。~~

```text
Asia Pacific (Tokyo)

175.41.192.0/18 (175.41.192.0 - 175.41.255.255)
46.51.224.0/19 (46.51.224.0 - 46.51.255.255)
176.32.64.0/19 (176.32.64.0 - 176.32.95.255)
103.4.8.0/21 (103.4.8.0 - 103.4.15.255)
176.34.0.0/18 (176.34.0.0 - 176.34.63.255)
54.248.0.0/15 (54.248.0.0 - 54.249.255.255)
54.250.0.0/16 (54.250.0.0 - 54.250.255.255)
54.238.0.0/16 (54.238.0.0 - 54.238.255.255)
54.199.0.0/16 (54.199.0.0 - 54.199.255.255)
```

いくつか注意点。

## 東京リージョンの IP であっても、外国に見えることがある

Amazon は需要に応じて IP を買い付け、割り振ってます。そのため、アメリカやアイルランドで使われていた IP が、東京に割り振られることがあります。

そうすると何が起こるか？例えば、適当に Windows の EC2 インスタンスを2つ立てて、それぞれブラウザを立ち上げて Facebook に同じアカウントでログインしたときに、不正疑惑がかけられます。日本でログインした人が、数秒後にアメリカでログインすることは普通はありえないからです。

こういった問題は、Amazon 自体がというよりも、アクセス元 IP と国を紐付けて処理をしている外部サービス側に原因があるので、根本的な解決は難しいところです。付け焼き刃な解決策は、Elastic IP ガチャ。日本の IP と判断されやすい 175.x.x.x, 103.x.x.x が出るまで Elastic IP ガチャを回し続けましょう。
Elixirで遅延リスト

Streamモジュールで遅延リストが使えます。

```iex:
iex> Stream.iterate(0, &(&1+1)) |> Enum.take(20)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
```

特定のリストを繰り返す場合はStream.cycleです。

```iex:
iex> Stream.cycle([1, 2, 3]) |> Enum.take(10)
[1, 2, 3, 1, 2, 3, 1, 2, 3, 1]
```

みんな大好きフィボナッチ数列を作ってみます。

```iex:
iex> fib = Stream.iterate({1, 1}, &({ elem(&1, 1), elem(&1, 0) + elem(&1, 1)})) |> Stream.map(&(elem(&1, 0)))
iex> fib |> Enum.take(10)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
```

その他の関数はドキュメントで
http://elixir-lang.org/docs/stable/Stream.html

明日は @bash0C7 さんです
zsh で コマンドライン中に改行する

zsh を使っていて、コマンドラインで for とか if とかを使いたくなることがたまにある。こんな感じ。

```zsh
% for i in *; do
  echo $i
done
```

こういうのは改行して書きたい。

実際に改行してみると、

```zsh
% for i in *; then  # ここで改行
```

一応次の行の続きが書ける。

```zsh
% for i in *; then
for>
```

でも実はこれ、`for i in *; then` の部分はもう入力が確定した状態で、1行目に戻って修正とかできなくて便利じゃない。`^P` とか上矢印とか押しても1行目に移動できない。

そういうときはこれを ~/.zshrc に書いておけば便利。

```zsh:.zshrc
bindkey '^J' self-insert
```

改行したくなったら `Ctrl+J` を押せば OK。

```zsh
% for i in *; then  # ここで Ctrl+J
```

そのまま改行できる。

```zsh
% for i in *; then
  echo ... # 改行できる!
```

コマンドライン中に改行文字をそのまま埋め込んでいるような感じになるので、`^P` か上矢印で1行目に戻って修正もできるようになる。ちなみに、`'^J'` というキーバインドを J 以外に変えるとうまく動かないので注意。

実はこの機能は bindkey で設定していない時でも使えて、 `ESC-^J` `ESC-^M` を押せば OK。でもちょっと押しにくいので、このキーバインドを設定しておいたほうがいいと思う。

### 2013/12/07 12:00 追記
コメントで `self-insert-unmeta` ではなく `self-insert` で良いのではという指摘をもらいました。たしかにその通りです。`self-insert-unmeta` でも動作するのですが `self-insert` の方がよりふさわしいので修正しました。
Ubuntu 13.04でGNU ParallelをGNUモードで動かす

目的
====

Ubuntu 13.04の標準リポジトリからインストールできるGNU parallelが世に流通している「GNU parallelの使い方」と違う動作をするという現象を解決する。

**追記:Ubuntu 12.04でも同様の対処ができます**

原因
====

設定ファイル /etc/parallel/config においてparallelの動作モードが tollef モードになっていることが原因。
parallel の man において「自分が何をしているかわかっていない限り tollef モードを使うな」と書いてあるのに・・・。

解決方法
========

/etc/parallel/config を削除する。

あるいは /etc/parallel/config の記述を修正する。parallel インストール直後は以下の内容になっている。

```
--tollef
```

自分は以下の内容に修正している。--gnu オプションでGNUモード（世に流通している parallel の挙動）になる。--gnu オプションは --tollef オプションを上書きする。

```
--tollef --gnu 
```

参考リンク
==========

[Debian/Ubuntu でデフォルトで入る parallel コマンドは、 GNU parallel ではない](http://askubuntu.com/a/298598/222758) このリンク先では改めて別のパッケージをインストールする方法を紹介しているが、Ubuntu 13.04では本稿の方法で改善可能。

[Answer:Where do I get a package for GNU Parallel?](http://askubuntu.com/a/298598/222758?stw=2) 本稿の元ネタ。このリンク先では設定ファイルを削除しているが、本稿では後で設定ファイルをいじれるように書き換える方法にした。
C++/CX: コンソールアプリのコマンドライン引数 Platform::Array<Platform::String^>^ を vector<wstring> に変換する

```cpp:Source.cpp
#include <iostream>
#include <vector>
#include <string>
#include <locale>

using namespace std;
using namespace Platform;


int main(Platform::Array<Platform::String^>^ args) {
    vector<wstring> argv;
    // argsの要素(String^) それぞれに対し、wstringに変換して argc に格納する
    for ( auto arg : *args) {
        argv.emplace_back(wstring(arg->Begin(), arg->End()));
    }

    // プリントしてみる
    wcout.imbue(locale("japanese"));
    for (const auto& arg : argv) {
        std::wcout << arg << std::endl;
    }
}
```
Railsのアプリを手軽にiPhoneからチェックする方法

みなさんは、Rails アプリの動作チェックをモバイルから行いたい場合、どうされていますか？

Static な IP を取得したり、WEINRE などのプラグインを使わずに手軽にチェックする方法を共有します。
Chrome や Safari の Developer Tools を使ったり、iOS Simulator を使う方法もありますが、"親指の触り心地 ( touch & feel )" を細かくトライしたい時におすすめです。

ワンラインで説明すると、 `iPhone の Personal Hotspot を経由して、アクセスする` です。
ピンと来る方がいたら、そのことで合っていると思います。
概念だけ分かればこの Tip の目的は達成されると思いますが、簡単に手順を記載します。

# 手順
* Rails アプリを localhost で起動します。( ここでは、port=3000 とします。)

* iPhone の Personal Hotspot を起動して、PC から接続します。

* IP アドレスを調べます。( e.g. ifconfig )

```zsh
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	ether 5c:f9:38:95:d5:d4
	inet6 fe80::5ef9:38ff:fe95:d5d4%en0 prefixlen 64 scopeid 0x4
	inet 172.20.10.4 netmask 0xfffffff0 broadcast 172.20.10.15
	nd6 options=1<PERFORMNUD>
	media: autoselect
	status: active
```

* ( Personal Hotspot を提供している ) iPhone のブラウザから、IP アドレス宛に、ポート番号をつけて接続します。この場合の例: `172.20.10.4:3000`

確認できましたか？未確認ですが、Rails アプリ以外でもこの方法は使えると思います。
Railsで保存したsessionのcookieを消す方法

意外とめんどくさかったのでメモ。もちろんブラウザの設定からクッキーを消すこともできるけどそれもブラウザごとに違うし色々めんどくさいのでRails側でやる方法。

まず 「Session 消し方 Rails」とかで検索すると出てくるので

`rake db:sessions:clear` とか `rake tmp:sessions:clear` だけど、これじゃ消えない。
エラー画面で reset_session とか session[:user_id] = nil とかもしてみたけど、どうも反映はされないっぽい。

# 解決策
今見てるViewの controller の該当methodに ` session.clear`って書く。これでOK、ちゃんと消えた。
query postsでループさせて記事を取得した際に中身の記事が表示されてしまう

WordPressで記事を取得する際に、query postsで細かい条件を指定して、
記事タイトルとリンクを取得するようにしていたのですが、
なぜか出力させたくない記事内容が出力されるという症状が出ていました。

いちおう解決しましたので、その方法を。

##query postsではなく、WP Queryを使用する。

```php
query_posts('showposts=5&cat=hoge');
while (have_posts()) : the_post();
```
既存のコードでは上記のように'query_posts'で書いていましたが、
下記の'WP_Query'を使用した形に変更。


```php
$loop = new WP_Query( array( 'post_type' => 'post','posts_per_page' => '5','cat'=>"hoge" ) );
while ( $loop->have_posts() ) : $loop->the_post();
```

こうすることで、記事内容が出力されるということはなくなりました。

query_postsについて<a href="http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/query_posts" title="テンプレートタグ/query posts - WordPress Codex 日本語版">公式のドキュメント</a>を確認すると、
「query_postsは決して使うべきではありません」と明言されていました。
query_postsを使用するなら違うメソッドを使えみたいなことも書かれています。


ただ、query_postsを使用していても大丈夫な箇所もあり、
それはなぜ大丈夫なのかが、まだ把握できていないのですが、
わかりましたらまた記事にしたいと思います。

とりあえず、ドキュメントにあるようにquery postsを使用するのはなるべく避けた方が良さそうです。
Mac OSXでファイルディスクリプタの上限数を変える


http://apple.stackexchange.com/questions/32235/how-to-properly-increase-ulimit-n-on-lion を参考に下記2ファイルを変更すればOK

``` /etc/launchd.conf
# 下記2行を追加 (ファイルがなければ作成)
limit maxfiles 8192 20480 
limit maxproc 1000 2000
```

``` /etc/sysctl.conf
# 下記を追加 (ファイルがなければ作成)
kern.maxfiles=20480
```
日本cocos2d-xユーザ会忘年会の様子

12月5日に開催された「日本cocos2d-xユーザ会」の忘年会についてお伝えしたいと思います。
cocos2d-xに関する技術的な情報はありませんので予めご了承ください。

今回の忘年会では私が幹事を務めさせて頂きました。
「秋葉原」、「大人数」という制限の中で調べた結果、秋葉原駅昭和通り口改札からすぐのところにある「宵の月」という居酒屋を予約したのですが、

「場所がわかりづらい」

「普通の雑居ビルじゃないか」

などなど開始早々厳しい意見を頂きました。
迷われた方、申し訳ありませんでした・・・。

しかし、その話題をきっかけにスムーズにトークに入れたと思います。
私はとてもポジティブなので、これはこれで良かったと思っています。



そんな忘年会の様子がこちら⬇

![1488067_466895306680274_1082094304_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/28816/4a097a28-7a62-bb74-3893-62c8618eee28.jpeg)

当日は参加者リストを皆様にお配りしました。
代表取締役、プログラマ、フリーランス、大学生と色々な役職の方が参加されていました。

cocos2d-xについて意見交換をしたり、cocos2d-xで自作したアプリを見せ合ったりと、とても盛り上がりました！


最後は恒例のXポーズで写真撮影。　
写真を撮って頂いたRobertさんは合成で追加しております！
Robertさん、撮影ありがとうございました！


![961233_10201195993682239_1714857172_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/28816/0c82698e-76a6-bb25-d094-81705ebb4f9d.jpeg)


今後もcocos2d-xを盛り上げていきましょう！


----------------------------------------------------------------------------------------------------------------
以下、今月開催されるcocos2d-xのイベント情報です。

----------------------------------------------------------------------------------------------------------------

12月13日
【日本最大級】cocos2d-Xmas Special by #gumistudy
~Chukong Technologies (cocos2d-x開発元)他登壇！~
【日本初解説！cocos2d-x 3d extensionとは！？】【cocos2d-xを語り尽くす！】

http://atnd.org/events/45331

----------------------------------------------------------------------------------------------------------------

12月19日
【#TechBuzz】第15回Shinjuku.cocos2d-x 〜少人数ハンズオン勉強会〜
パズドラ風ゲーム（パズル部分）をつくってみよう！

http://atnd.org/events/45341

----------------------------------------------------------------------------------------------------------------
今さらだけどIntelliJ IDEAで使えるJavaのブレークポイントあれこれ

IntelliJ IDEAに限った機能ではありませんが、IntelliJ IDEAでJava開発する際に知っておくと便利なブレークポイントを紹介したいと思います。

「そんなの知っている」「今さらJavaか」という声はさておき、この記事をSくんとSさんにささげます。

## ブレークポイントの種類

一口にブレークポイントと言っても実は様々な種類があり、色々な条件でプログラムの実行を中断できるようになっています。今回は、以下のブレークポイントを順に説明します。

* Line Breakpoint
* Temporary Line Breakpoint
* Method Breakpoint
* Exception Breakpoint

## Line Breakpoint - 指定した行でストップ

これは誰もがお世話になっているブレークポイントですね。ソースコードの横っちょのバーをクリックするなり、 `Ctrl + F8` を押すなりすると赤丸が表示されて有効になります。メインメニューの [Run] - [Toggle Line Breakpoint] でもOKです。

![bp1.png](https://qiita-image-store.s3.amazonaws.com/0/33668/108ce630-da1c-c93c-e76e-3c43a794bd13.png)

プログラムが指定行に到達すると実行が中断されるので、その時点の変数の値が期待通りか確認するなどして問題解決にあたります。

## Temporary Line Breakpoint - 指定した行で1回だけストップ

その名の通り1回限りの一時的なブレークポイントです。実行を中断したい行で `Ctrl + Shift + Alt + F8` を押すなり、[Run] - [Toggle Temporary Line Breakpoint] を選択するなりすると以下のスクリーンショットのような赤丸数字1が表示されて有効になります。

![bp2.png](https://qiita-image-store.s3.amazonaws.com/0/33668/3c845c8f-f9c7-a6fd-80d2-5b6896a0ead0.png)

プログラムが指定行に到達すると実行が中断されますが、 **実行を再開した時点で自動的に消滅します（デバッグ実行が完了した後も復活しません）。** まさに一時的なブレークポイントというわけです。正直なところ、ほとんど使わないです…。

## Method Breakpoint - メソッドのIN/OUTを検出してストップ

メソッドブレークポイントは、行に対してではなくメソッドに対して設定するブレークポイントです。実行を中断したいメソッドにカーソルを合わせ、横っちょのバーをクリックするか、[Run] - [Toggle Method Breakpoint] を選択すると、次のスクリーンショットのような赤丸が表示されて有効になります。

![bp3.png](https://qiita-image-store.s3.amazonaws.com/0/33668/ed5dfd7e-ea42-ba12-40a2-83e9b2a32644.png)

メソッドブレークポイントでは、プログラムが指定メソッドに入る時（上の例では13行目）と出るとき（上の例では15行目と22行目）に実行が中断されます。

あるメソッドの事前・事後条件が期待通りか確認したり、複数のreturn文に個別にブレークポイントを設定する手間を省けたりして便利ですが、次の点には注意が必要です。

* デバッグ実行が遅くなる（IntelliJ IDEAからもひっそりと警告されます）
* **未処理の例外が発生してメソッドを出る場合は中断されない**

## Exception Breakpoint - 例外を検出してストップ

例外ブレークポイントは、ソースコードのどこかは分からないけれど、とにかく指定した例外が発生したときに処理を中断するためのブレークポイントです。

設定するには、まずメインメニューから [Run] - [View Breakpoints...] を選択し、以下のブレークポイントダイアログを表示します。（実はこのダイアログは例外ブレークポイントだけのものではなく、すべてのブレークポイントが一覧され、詳細な設定ができる画面になっています）

ダイアログ左上の `+` ボタンをクリックし、[1. Exception Breakpoints] を選択した後、捕捉したい例外クラスを入力します。

![bp4.png](https://qiita-image-store.s3.amazonaws.com/0/33668/00ccda17-fe70-16f6-ee91-357002dd298e.png)

例外ブレークポイントを設定した状態でデバッグ実行すると、その例外が発生した任意の箇所でプログラムの実行が中断されます。例えば、以下の例では20行目に配列境界バグがあるため、swap()メソッドの実行中にIndexOutOfBoundsExceptionが発生しますが、そのタイミングで自動的にプログラムが中断されてデバッグできるようになります。

![bp5.png](https://qiita-image-store.s3.amazonaws.com/0/33668/e364df21-ca03-a0c7-3645-f01d1c5a3c9e.png)

この例ではすべて自分が管理しているコードでスタック階層も浅いのでありがたみが感じられませんが、未処理例外がアプリのトップレベルまで伝達されてきた時に捕捉するのではなく、発生したその瞬間に捕まえてデバッグしたい場合には重宝します。

## まとめと補足

今回は、IntelliJ IDEA Advent Calendar 6日目の記事として、IntelliJでJava開発するときに使えるブレークポイントを簡単に紹介しました。デバッガーの機能の豊富さと、私の気力のなさにより、残念ながら説明できなかったけれど便利な機能は実は他にもまだまだあります。

* フィールド変数の読み書きを検出してストップ
* 特定の評価式が成り立つ場合だけストップ
* ブレークポイント間に依存関係を設定し、あるブレークポイントAにヒットしたときだけ、別のブレークポイントBでストップ
* （ブレークポイント関係ないけど）実行中断して変数の値を上書き

これらについても整理できたらいいなと思いますが、ひとまず今日のこの記事が誰かの役に立てば幸いです。

最後に、同僚が泣くので IntelliJ IDEA Advent Calendar に参加してやってください！
RubyでAWSのSQSを使う


Amazon SQS(Amazon Simple Queue Service)はAmazonが提供するキューサービスです。
>Amazon Simple Queue Service（SQS）は、高速で、信頼性が高く、スケーラビリティに優れ、十分に管理されたキューサービスです。SQS を利用すると、簡単かつコスト効率良く、クラウドアプリケーションのコンポーネントを切り離すことができます。SQS を使用すれば、どんなボリュームのデータでもあらゆるレベルのスループットで転送できます。転送時にメッセージが失われることも、他のサービスが常に利用可能である必要もありません。
(公式HP)

今回はAサーバで受け取ったデータを非同期にBサーバで処理するといった要件が発生したので簡単な使い方を書いておきます。

他にも一気にきたリクエストをとりあえずSQSに登録しておいて、あとからゆっくり処理させるといった使い方もできます。

##Queueの作成
AWS管理コンソール上で作成します。
[Create New Queue]ボタンを押すとダイアログが出るので

Queue Name : queueの名前(1-80文字。英数字と-と_が使える)
Default Visibility Timeout : 一度取得したメッセージを見えなくする時間
Message Retention Period : メッセージを保持する期間
Maximum Message Size : queueに登録できる1メッセージ当たりの最大量
Delivery Delay : 登録したメッセージが見えるようになるまでのDelay
Receive Message Wait time : ロングポーリング時のメッセージがくるまでの待ち時間

を設定します。

##メッセージを登録


```ruby:server_A
# AWSの初期化
AWS.config(
  :access_key_id:<ACCESS_KEY_ID>,
  :secret_access_key:<SECRET_ACCESS_KEY>
)
sqs = AWS::SQS.new

# もしくは
sqs = AWS::SQS.new(
  :access_key_id:<ACCESS_KEY_ID>,
  :secret_access_key:<SECRET_ACCESS_KEY>
)

# 対象のqueueのurlを取得(WEBのコンソール画面から)
queue_url = "https://sqs.ap-northeast-1.amazonaws.com/xxxxx/hogehoge"

# queueに登録するメッセージ
queue_msg = "test queue message"

# queueにメッセージを登録
sqs.queues[queue_url].send_message(queue_msg)
```

処理に成功していれば、AWS管理コンソールの対象のqueueのMessages Availableが増えています。

##メッセージを取得
```ruby:server_B
sqs = AWS::SQS.new
queue_url = "https://sqs.ap-northeast-1.amazonaws.com/xxxxx/hogehoge"

# ロングポーリングでメッセージを取得
sqs.queues[queue_url].poll(:idle_timeout => 10) do |msg|
  # 取得したメッセージを表示
  puts msg.body # => test queue message

  # メッセージの内容で任意の処理
end
```
先ほど登録したメッセージが、表示されます。取得順は、メッセージを登録した順番が保証されるわけではないので注意してください。
:idle_timeoutはメッセージが来るまでの待機時間です。指定しないとずっと待ち続けてレスポンスが返ってきません。

他のサイトで、受け取ったメッセージは明示的に削除しないとqueueに残り続けると書かれていますが、上記のコードのようにQueue#poll及び、Queue#receive_messageでブロック形式を利用してる場合は、途中で例外が発生しない限り、受け取ったメッセージは自動的に削除されるようです。
C++/CX: Visual Studio 2013(Windows 8.1) でコンソールアプリを作るおそらく最も簡単な方法


メニュー: 拡張機能と更新プログラム > オンライン から
**CxxWinRTTemplate for Windows 8.1** をインストールする。
![CxxWinRTTemplate](http://www1.c3-net.ne.jp/episteme/Qiita/cxxwinrt1.png)

これにより、"新しいプロジェクトの追加" に **CxxWinRTTemplate** が現れる。
![CxxWinRTTemplate](http://www1.c3-net.ne.jp/episteme/Qiita/cxxwinrt2.png)

このテンプレートで生成される Source.cpp はこんな。

```cpp:Source.cpp
// Source.cpp : Defines the entry point for the console application.
//

#include <iostream>
using namespace std;

using namespace Platform;


int main(Platform::Array<Platform::String^>^ args)
{
        Platform::Details::Console::WriteLine("Hello World");
        return 0;
}
```
Project Euler No. 18

# Problem

> By starting at the top of the triangle below and moving to adjacent numbers on the row below, the maximum total from top to bottom is 23.
>
> 3
> 7 4
> 2 4 6
> 8 5 9 3
>
> That is, 3 + 7 + 4 + 9 = 23.
>
> Find the maximum total from top to bottom of the triangle below:

>```
              75
             95 64
            17 47 82
           18 35 87 10
          20 04 82 47 65
         19 01 23 75 03 34
        88 02 77 73 07 63 67
       99 65 04 28 06 16 70 92
      41 41 26 56 83 40 80 70 33
     41 48 72 33 47 32 37 16 94 29
    53 71 44 65 25 43 91 52 97 51 14
   70 11 33 28 77 73 17 78 39 68 17 57
  91 71 52 38 17 14 91 43 58 50 27 29 48
 63 66 04 68 89 53 67 30 73 16 69 87 40 31
04 62 98 27 23 09 70 98 73 93 38 53 60 04 23
```

> NOTE: As there are only 16384 routes, it is possible to solve this problem by trying every route. However, Problem 67, is the same challenge with a triangle containing one-hundred rows; it cannot be solved by brute force, and requires a clever method! ;o)

# Code in Haskell

```hs:Euler_018.hs
module Main where
import Data.List

rawdata = 
  ["75",
  "95 64",
  "17 47 82",
  "18 35 87 10",
  "20 04 82 47 65",
  "19 01 23 75 03 34",
  "88 02 77 73 07 63 67",
  "99 65 04 28 06 16 70 92",
  "41 41 26 56 83 40 80 70 33",
  "41 48 72 33 47 32 37 16 94 29",
  "53 71 44 65 25 43 91 52 97 51 14",
  "70 11 33 28 77 73 17 78 39 68 17 57",
  "91 71 52 38 17 14 91 43 58 50 27 29 48",
  "63 66 04 68 89 53 67 30 73 16 69 87 40 31",
  "04 62 98 27 23 09 70 98 73 93 38 53 60 04 23"]

digits = transpose $ map (readlist.words) rawdata
  where readlist a = map (read::String->Integer) a

subleft n = tail n
subright n = tail $ transpose n
findmax [] = 0
findmax n = ((n!!0)!!0) + maximum[findmax (subleft n), findmax (subright n)]

main = print $ findmax digits
```

もうひとつのやり方：

```hs:Euler_018bis.hs
module Main where
import Data.List

rawdata = 
	["75",
	"95 64",
	"17 47 82",
	"18 35 87 10",
	"20 04 82 47 65",
	"19 01 23 75 03 34",
	"88 02 77 73 07 63 67",
	"99 65 04 28 06 16 70 92",
	"41 41 26 56 83 40 80 70 33",
	"41 48 72 33 47 32 37 16 94 29",
	"53 71 44 65 25 43 91 52 97 51 14",
	"70 11 33 28 77 73 17 78 39 68 17 57",
	"91 71 52 38 17 14 91 43 58 50 27 29 48",
	"63 66 04 68 89 53 67 30 73 16 69 87 40 31",
	"04 62 98 27 23 09 70 98 73 93 38 53 60 04 23"]
	
ddigits = reverse $ map (readlist.words) rawdata
	where readlist a = map (read::String->Integer) a

-- 右隣と比較して大きい方を取っていく→要素数がひとつ減る
choose [] = []
choose a@(x:xs) = (maximum $ take 2 a):(choose xs)

--最初の段で大きい方を選択し、2段めに対して項ごとに加算したものに対して再帰
reduce (x:[]) = [x]
reduce (x:y:xs) = reduce (zipWith (+) (choose x) y :xs)

main =  print $ reduce $ ddigits
```


# Answer

1**4

# Comments

２つ目のやつの方が早い。
GoogleAppsScriptメモ：トリガーの利用

GASにはトリガーというものを作ることが出来るのだが、これはかなり便利だと思う。

例えばこんな感じ
##### MorningMail.gs #####
```js
function doGet(){
  var trigger = ScriptApp.newTrigger('mornigMail');  // トリガーで動かす関数名を引数に渡す
  trigger.timeBased()  // トリガーを時間ベースに設定
         .everydays(1)  // 一日おき（毎日）の
         .atHour(7)  // ７時に
         .create();  // 関数を実行するトリガーを作成
}

function morningMail(){
  MailApp.sendEmail("hogehoge@mail.com", "Good morning!", "Let`s eat breakfast!!");
}
```
「Webアプリケーションとして公開」設定をしているのであればそのURLにアクセス（GET）し、
アプリケーションを承認するとトリガーが起動。設定したアドレスに毎朝メールが届くようになる。

タイムベーストリガーには他にも「○時間おき」「×分おき」など様々な設定の仕方があり、
まっとうに使えば（考えようによっては簡単にスパム行為ができてしまうわけだが）簡単に処理を自動化させられるので色々と夢が広がる。
Project Euler No. 17

# Problem

> If the numbers $1$ to $5$ are written out in words: one, two, three, four, five, then there are $3 + 3 + 5 + 4 + 4 = 19$ letters used in total.
>
> If all the numbers from $1$ to $1000$ (one thousand) inclusive were written out in words, how many letters would be used?
>
> NOTE: Do not count spaces or hyphens. For example, $342$ (three hundred and forty-two) contains $23$ letters and $115$ (one hundred and fifteen) contains $20$ letters. The use of "and" when writing out numbers is in compliance with British usage.

# Code in Haskell

```hs:Euler_017.hs
module Main where

lc = length . br
br 1 = "one"
br 2 = "two"
br 3 = "three"
br 4 = "four"
br 5 = "five"
br 6 = "six"
br 7 = "seven"
br 8 = "eight"
br 9 = "nine"
br 10 = "ten"
br 11 = "eleven"
br 12 = "twelve"
br 13 = "thirteen"
br 14 = "fourteen"
br 15 = "fifteen"
br 16 = "sixteen"
br 17 = "seventeen"
br 18 = "eighteen"
br 19 = "nineteen"
br 20 = "twenty"
br 30 = "thirty"
br 40 = "forty"
br 50 = "fifty"
br 60 = "sixty"
br 70 = "seventy"
br 80 = "eighty"
br 90 = "ninety"

br n	
  |100>n = (br ((div n 10)*10))++(br (mod n 10))
  |1000>n && (mod n 100 ==0) = (br (div n 100)) ++ "hundred"
  |1000>n = (br ((div n 100)*100))++"and"++(br (mod n 100))
  |1000==n = "onethousand"
main = print answer	
  where answer = sum $ map lc [1..1000]
```

# Answer

2***4

# Comments

メンドクサイ。
predis [An error has occurred: Error while reading line from the server ~hoge]

predisで通信をテストしていたところ、
下記のエラーが出て、一時的に通信が遮断

```php:errorログ
An error has occurred: Error while reading line from the server ~~
```

redis.confファイルのtimeout を 0にして再起動
predisで接続時にread_write_timeout=0を追加して発生しなくなった
Project Euler No. 16

# Problem

> $2^{15} = 32768$ and the sum of its digits is $3 + 2 + 7 + 6 + 8 = 26$.
> What is the sum of the digits of the number $2^{1000}$?

# Code in Haskell

```hs:Euler_016.hs
module Main where

breakdigits 0 = []
breakdigits n = (mod n 10): breakdigits (div n 10)

main = print answer
	where answer = sum $ breakdigits (2^1000)
```

# Answer

1***

# Comments

なんのひねりもなくてごめんなさい。
Project Euler No. 15

# Problem

> Starting in the top left corner of a 2×2 grid, and only being able to move to the right and down, there are exactly 6 routes to the bottom right corner.
> ![p_015.gif](https://qiita-image-store.s3.amazonaws.com/0/33744/ba8f76b1-7caf-b1d4-991c-0aad4192c6d6.gif)
> How many such routes are there through a 20×20 grid?

# Code in Haskell

```haskell:Euler_015.hs
module main where

main = print $ div (product [21..40]) (product [1..20])
```

# Answer

1**********0

# Comments

まあ、そのなんだ、小学校以来久々にお目にかかりました。
Androidの通信まわりの実装について考える [メモ]


複数の通信があって戻り値のパターンが各通信毎にある場合を想定しています。
通信結果はJSONで受けとります。
AsyncTaskにはバグがあるという噂なので新しいAsyncTaskLoaderを使います。

AsyncTaskLoaderについて
- 時代は AsyncTask より AsyncTaskLoader
http://archive.guma.jp/2011/11/-asynctask-asynctaskloader.html

※4以外は実装可能か試していません

## 1. 1つのAsyncTaskLoaderを使い戻り値はJSONにする。JSON→欲しい戻り値にするメソッドは別のクラスにまとめる



### メリット

- 単純な作りなのでわかりやすい
- 通信クラスのソース量がすくない

### デメリット

- JSON→欲しい戻り値にするメソッドとURLの対応表がどこかに必要でソースから追うことができない
- 上記が必要なので最初とっつきにくそう

## 2. 1つのAsyncTaskLoaderを使い戻り値は総称型にする

AsyncTaskLoader内の処理はIDで分ける

###メリット
- AsyncTaskLoaderを作った人が意図した使い方のような気がする。

###デメリット

- どんなObjectが返ってくるのか調べるために通信側のソースまたは他の呼び出し部分を参考にする必要がある。

## 3. 各通信毎にAsyncTaskLoaderを用意する

### メリット

- 作りが単純
- どんな戻り値が返ってくるのか明確

### デメリット

- Loaderクラスの数がかなり多くなる
- 似たソースがかなり多くなってしまう

## 4. 通信クラスを作って各通信毎にメソッドを用意。戻り値は各通信のメソッド毎にインターフェースを用意する。内部の実装はAsyncTaskLoader

非同期で結果を受け取る方法
http://qiita.com/ux_design_tokyo/items/2c742c792093bc607be6

ActivityまたはFragmentではなく通信クラスをAsyncTaskLoaderのコールバック先にする。

### メリット

- どんな戻り値が返ってくるのか明確

### デメリット
- インターフェースを各メソッド毎に書くので少しソース量が多くなる

## どの方法で実装する？

ソースは若干増えますが、メソッドを使う側がわかりやすい4で実装してみようと思います。

実際に実装してみました

http://qiita.com/ux_design_tokyo/items/d07bc5953b7611ce7523
Project Euler No. 14

# Problem 

> The following iterative sequence is defined for the set of positive integers:
>
> $n \rightarrow \frac{n}{2} $($n$ is even)
> $n \rightarrow 3n + 1$ ($n$ is odd)
>
> Using the rule above and starting with 13, we generate the following sequence:
> $13 \rightarrow 40 \rightarrow 20 \rightarrow 10 \rightarrow 5 \rightarrow 16 \rightarrow 8 \rightarrow 4 \rightarrow 2 \rightarrow 1$
>
> It can be seen that this sequence (starting at $13$ and finishing at $1$) contains 10 terms. Although it has not been proved yet (Collatz Problem), it is thought that all starting numbers finish at $1$.
>
> Which starting number, under one million, produces the longest chain?
>
> NOTE: Once the chain starts the terms are allowed to go above one million.

# Code in Haskell

```hs:Euler_014.hs
module Main where
import Data.List

collatz n	
  | even n = div n 2
  | otherwise = 3*n+1

-- collatzSeries n = (takeWhile (/=1) $iterate collatz n)++[1]
collatzLength n = 1+ (count (/=1) $ iterate collatz n)
  where
    count cond [] = 0
    count cond (x:xs)
      | cond x = 1 + count cond xs
      |otherwise = 0

main = print $ (flip lookup) collatzLL $ maximum $ map fst collatzLL
  where collatzLL = [ (collatzLength a, a) | a<-[1..999999]]
```

# Answer

8****9

# Comments

相変わらず遅い（-Oオプションで6秒）。うーん。先行き不安だ。何かがおかしいのだと思うが、これもどうすればいいかはよくわからん。nのCollatz列長を求める際に、列の途中でnより小さいmに行き当たったら、それ以上計算せずにmの列長を返して加算するようにすれば効率化するのかもしれない。
WordPress の functions.php 内に独自 Class を書く

WordPress の functions.php 内に独自 Class を書く場合は、new する前に global で定義しないと読み込めません。当然、呼び出す側（header.php など）でも global で定義しないといけません。

```php::functions.php
<?php
class Hoge {
	public $fuga = 'Qiita';
}
global $hoge;
$hoge = new Hoge();
```

```php::header.php
<?php
global $hoge;
echo $hoge->fuga;
```

もっといいやり方があったら教えてください(・∀・)
Install Zenphoto on Arch Linux

[Zenphoto](http://www.zenphoto.org/)をArch Linuxに入れて使い始めました。

## 必要なPackageをインストール
```bash
pacman -S imagemagick php-cgi php-apache php-pear
pecl install imagick
```
## PHPのmysql用のextentionを有効にする

- /etc/php/php.iniを修正

```bash
vi /etc/php/php.ini
```

- 以下の行のコメントアウトを解除

```vim:php.ini
extension=mysqli.so
extension=mysql.so
extension=pdo_mysql.so
extension=gd.so
```

- 以下の行を追加

```vim:php.ini
extension=imagick.so
```

## PackageをDownload
```bash
cd /usr/local/src
wget https://github.com/zenphoto/zenphoto/archive/zenphoto-1.4.5.7.tar.gz
tar xvfz zenphoto-1.4.5.7.tar.gz
mv zenphoto-zenphoto-1.4.5.7 /srv/http/zenphoto
chown -R http:http /srv/http/zenphoto/
```

## DBを作成
```bash
mysql -u root -p
Enter password: ******
```
```mysql
MariaDB [(none)]> CREATE DATABASE zenphoto CHARACTER SET utf8;
Query OK, 1 row affected (0.12 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ghost              |
| ghost_dev          |
| mysql              |
| performance_schema |
| test               |
| zenphoto           |
+--------------------+
7 rows in set (0.00 sec)

MariaDB [(none)]> GRANT ALL ON zenphoto.* to zenphoto@localhost;
Query OK, 0 rows affected (0.09 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.05 sec)

MariaDB [(none)]> SET PASSWORD FOR zenphoto@localhost=password('YOUR PASSWORD');
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> exit
Bye
```

## Apacheの設定を追加

- PHP Moduleを使えるよう設定を追加

```bash
vi /etc/httpd/conf/httpd.conf
```

```vim:httpd.conf
# PHP Module
LoadModule php5_module modules/libphp5.so
AddHandler php5-script php
Include conf/extra/php5_module.conf 
```
- VirtualHostの設定を追加

```bash
vi /etc/httpd/conf/extra/httpd-vhosts.conf
```

- 以下の設定を追加

```vim:httpd-vhosts.conf
### zenphoto
<VirtualHost *:80>
    ServerAdmin root@example.com
    DocumentRoot "/srv/http/zenphoto/"
    ServerName zenphoto.example.com
    AddDefaultCharset Off
    ErrorLog "/var/log/httpd/zenphoto.example.com/error_log"
    CustomLog "/var/log/httpd/zenphoto.example.com/access_log" common
    <Directory /srv/http/zenphoto/>
        AllowOverride All
    </Directory>
</VirtualHost>
```

- Log Directoryを作成

```bash
mkdir /var/log/httpd/zenphoto.example.com/
```

- Apacheの設定に問題が無いことを確認後、再起動

```bash
httpd -t
Syntax OK
systemctl restart httpd
systemctl status httpd
```

## zenphotoの設定

- zp-dataディレクトリのpermissionを600に変更

```bash
cd /srv/httpd/zenphoto
chmod 600 zp-data
```

- DB用の設定を追加する

```text
Database engine : MySQL
Database admin user : zenphoto
Database admin password : YOUR PASSWORD
Database host : localhost
Database name : zenphoto
Database table prefix : (Blank) 
```

その他全てOKなら[GO]というボタンが出るので進む。

## ユーザを作成
Username, Password等入力して完了。
Mac OSXのファイルopen/saveのダイアログで直接パスを入力する方法


WindowsからMacに移行してからずっとストレスだったことの一つは、ファイルを保存したり開いたりする際のダイアログでパスを直接入力できないこと。

アイコンをクリックしてディレクトリをたどるのが嫌なのでわざわざターミナルを開いて`open path/to/file`とかしてたけど以下のショートカットキーを叩けばダイアログ内でパスを入力するためのダイアログが表示される。

```
Cmd+Shift+G
```


参考： http://www.tuaw.com/2008/12/30/mac-101-enter-directory-paths-when-in-open-save-dialogs/
Instagram風のイメージピッカー、DLCImagePickerControllerを使ってみた


日本語の資料がほとんど見つからなかったのでメモ。

# インストール

CocoaPodsからインストールするのが簡単です。`DLCImagePickerController`を入れましょう。

```ruby:Podfile
pod 'DLCImagePickerController'
```


# 呼び出し

`DLCImagePickerController`のインスタンスを生成して`UINavigationController:presentViewController:`で表示します。

`DLCImagePickerController:init`では`DLCImagePicker.xib`が使用されてる（ようにハードコードされている！）ので、見た目をカスタマイズしたい場合には`initWithNibName:bundle:`を使用してカスタマイズしたXIBファイルを食べさせてください。

```objectivec
DLCImagePickerController *picker = [[DLCImagePickerController alloc] init];
picker.delegate = self;

// customize here
picker.outputJPEGQuality = (CGFloat) 0.9;  // UIImageJPEGRepresentationの品質
picker.requestedImageSize = CGSizeMake(1024, 1024);  // 表示に利用するサイズ？

[self.navigationController presentViewController:picker animated:TRUE completion:nil];
```


# 受け取り

`DLCImagePickerControllerDelegate`プロトコルを実装します。これはUIImagePickerとほぼ同様のインターフェイスを持ったプロトコルですが、 **NSDictionary内にUIImageではなくNSDataが格納されいてる点に注意** してください。画像データ取得時のキーは`@"data"`です。

```objectivec
- (void)imagePickerController:(DLCImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    // 画像データは info[@"data"] にNSDataオブジェクトとして格納されている
    UIImage *image = [UIImage imageWithData:info[@"data"]];

    // UIImagePickerControllerも併用するのであればUIImagePickerControllerOriginalImage等にフォールバックする
    if (!image) {
        image = [info objectForKey:UIImagePickerControllerOriginalImage];
    }

    // UIImageをお好きなように調理してください
}
```

# 撮影サンプル

モノクロフィルタを選ぶとこんな感じ。撮影部分の周りについている各種ボタンは標準搭載のものです。

![Screenshot 2013.12.06 16.19.47.png](https://qiita-image-store.s3.amazonaws.com/0/29860/4fae1f69-a2b0-0198-c002-e55ead47de2a.png "Screenshot 2013.12.06 16.19.47.png")

-

# トラブルシュート

## GPUImage 0.1.2でコンパイルが通らない

Blur関連のメソッドが変更されておりコンパイルが通りません（[issue #45](https://github.com/gobackspaces/DLCImagePickerController/issues/45)）。GPUImage 0.1.1を利用してください。
Git の push にフックして Jenkins のビルド実行するメモ


Jenkins に、以下を Git のリポジトリURLに指定したジョブがあるとする

```
ssh://<gituser>@<git-server-url>/path/to/Module/
```

そのジョブの設定で、「SCMをポーリング」にチェックを入れておく (スケジュールは特にいれなくていい)

git リポジトリ側で、 post-receive フックに以下を追記する

```
$ cd /path/to/.git/hooks
$ vi post-receive
curl http://<jenkins-server-url>/git/notifyCommit?url=ssh://<gituser>@<git-server-url>/path/to/Module/
```

push すると以下のような表示がでるようになり、url に指定したリポジトリ設定があるジョブがキックされるようになる。

```bash
$ git push Module master
remote: Scheduled polling of Module-git
To git@local-git.shanon.co.jp:/home/git/gitroot/Coco
```
Boxenでインストールしたアプリを完全に削除する方法

流行りにのってBoxenを使って端末のセットアップをしてみた。
その際に、BoxenでいれたHomebrew以外のアプリを/Applicationから削除したら再インストールすることができなくて困ったので調べた結果を書いておく。


## インストールからアンインストールまで
まず、BoxenでBetterTouchToolを次の設定でインストールした。

```rb
  package {
    'BetterTouchTool':
      source   => "http://www.boastr.de/BetterTouchTool.zip",
      provider => compressed_app;
  }
```

その後、AppCleanerを使ってBetterTouchToolアンインストールしたところ、/Applicationからは消え去っているのに、script/boxen を何度実行しても再インストールされなかった。


## 解決方法

Boxenでいれたアプリをどうやって削除するのか悩んだが、次のコードをみて解決した。
[compressed_app.rb#self.uninstall_compressed_app](https://github.com/boxen/puppet-boxen/blob/master/lib/puppet/provider/package/compressed_app.rb#L91)

93行目で

```rb
 "rm -f '/var/db/.puppet_compressed_app_installed_#{name}'"
```

と、インストールしたものを削除している。

そこで、

```shell-session
  rm -f /var/db/.puppet_compressed_app_installed_BetterTouchTool 
```

とすることで、script/boxen を実行するとインストールされた。


あとで気がついたけど、公式のところに書いてあった。
[our-boxen/docs/faq.md at master · boxen/our-boxen](https://github.com/boxen/our-boxen/blob/master/docs/faq.md)


## Homebrewで入れたものの場合

brew uninstall で削除すればよい。
CeylonでHTTPサーバを作ってみる

[前回](http://qiita.com/newta/items/4220874649ec3e92bdb0) はJavaのクラスを使って
HTTPサーバを作りましたが
今回はCeylonのモジュールのみでHTTPサーバを作ってみます。

#モジュール設定に追加
まずはモジュール設定ににceylon.netを追加します。

```ceylon

module com.hello.ceylonserver "1.0.0" {
    import ceylon.net "1.0.1";
}
````

今回は一行だけですね。

#ではCeylonコード

```ceylon
import ceylon.io {
	SocketAddress
}
import ceylon.net.http.server {
	Endpoint,
	Response,
	Request,
	newServer,
	startsWith
}
 
void runServer() {

    value server = newServer {

        Endpoint {

            path = startsWith("/hello");

            service(Request request, Response response) =>
                    response.writeString("hello world");
        }
    };
 
    server.start(SocketAddress("localhost", 8080));
}
````

こんな感じでしたー。

シンプルですね。

特に説明無くても分かっちゃいますね。


一番べたにいろんなパスを追加するにはEndpointを複数渡してあげればOKです。

```ceylon
import ceylon.io {
	SocketAddress
}
import ceylon.net.http.server {
	Endpoint,
	Response,
	Request,
	newServer,
	startsWith
}

void runServer() {

    value server = newServer {

        Endpoint {

            path = startsWith("/hello");

            service(Request request, Response response) =>
                    response.writeString("hello world");
        }
        ,
        Endpoint {
            path = startsWith("/ceylon");
            
            service(Request request, Response response) =>
                    response.writeString("hello ceylon");
            
        }
    };
 
    server.start(SocketAddress("localhost", 8080));
}


````

こんな感じにすると
> http://localhost:8080/ceylon

にアクセスすると
> hello ceylon

が表示されます。

もちろんEndpointを追加するのではなく
受け取った後に処理を分岐するようにしても良いかと思います。

自由ですね。


シンプルにHTTPサーバも作れちゃいます。
どうでしょ？

Ceylon面白いかもしれないです。

今回はまだ説明していない呼び出し方法を使ってしまいました。
まだ良く分からないかもって人は
その辺は [次回](http://qiita.com/newta/items/cf0116c2f99f7fdf80ae) に書いているので見てみてね。
Automatically Change UIView's Frame In Relation to the Keyboard

This would be my first post on Qiita :), since Japanese is not my first language, I am going to start with an English post and work my way to writing Japanese posts. This post shows you how to change the frame of your view when the keyboard frame changes. Certain UI design puts elements right above the edge of the keyboard (see below), and that's where this technique comes in handy. 
![iOS Simulator Screen shot Dec 6, 2013, 1.30.06 PM.png](https://qiita-image-store.s3.amazonaws.com/0/32442/08ff4636-dcfb-9509-ded9-04fcd1571dc3.png)

When you start typing in language which uses Kanji, like Japanese or Chinese, the keyboard will provide suggested combinations of words, which may cause overlaying views like this:
![iOS Simulator Screen shot Dec 6, 2013, 1.30.10 PM.png](https://qiita-image-store.s3.amazonaws.com/0/32442/ad29c7ec-ecbb-617d-f46d-d251b3e62928.png)

When this happens, you can use **UIKeyboardWillChangeFrameNotification** to move up your views and avoid your UI to be covered by the keyboard, and adding a small bouncy animation would not hurt. This will also ensure that whatever you placed right above the keyboard stays where it should be when the user is typing in any other language. 
![iOS Simulator Screen shot Dec 6, 2013, 1.31.15 PM.png](https://qiita-image-store.s3.amazonaws.com/0/32442/c269b044-3948-1d7b-89f4-5d8c39fb79f8.png)

Let's code!

Firstly, add a **NSNotificationCenter** to detect the change of keyboard frame:
<pre>[[NSNotificationCenter defaultCenter] addObserver:self 
                  selector:@selector(keyboardWillChangeFrame:) 
                   name:UIKeyboardWillChangeFrameNotification object:nil];</pre>

Then implement the *keyboardWillChangeFrame:* method as the following:

<pre>-(void)keyboardWillChangeFrame:(NSNotification *)notification{
    
    NSValue *frameValue = notification.userInfo[UIKeyboardFrameEndUserInfoKey];
    CGRect frame = [frameValue CGRectValue];
    
    frame = [self.view convertRect:frame fromView:nil];
    CGFloat originY = frame.origin.y - 80;
    self.layoutView.frame = CGRectMake(0, originY, 320, 80);
    CGFloat textviewHeight = self.view.bounds.size.height - frame.size.height - 80;
    self.textView.frame = CGRectMake(0, 0, 320, textviewHeight);
    
}</pre>

The **notification.userInfo[UIKeyboardFrameEndUserInfoKey]** will return an instance of NSValue which contains information about the keyboard's frame. Therefore all you need to do it to set your view's position in relation to this information. that's all you need to do :)
Project Euler No. 12

# Problem

> The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:
> 
> $1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...$
> 
> Let us list the factors of the first seven triangle numbers:
>
> $1:\ 1$
> $3:\ 1,3$
> $6:\ 1,2,3,6$
> $10:\ 1,2,5,10$
> $15:\ 1,3,5,15$
> $21:\ 1,3,7,21$
> $28:\ 1,2,4,7,14,28$
>
> We can see that 28 is the first triangle number to have over five divisors.
>
> What is the value of the first triangle number to have over five hundred divisors?

# Code in Haskell

```hs:Euler_012.hs
module Main where
import Data.List

numsOfDenom 1 = 1
numsOfDenom n =   product $ map (((+) 1).length) $ group $ factoring n [] [2..n] 

factoring n fs (x:xs) 
  | n == 1 = fs
  | (mod n x == 0) = factoring (div n x) (x:fs) (x:xs)
  | otherwise = factoring n fs xs

trinum = [ (div (n*(n+1)) 2, numsOfDenom (div (n*(n+1)) 2)) | n<-[1..] ]

main = print $ solve 500 trinum
  where
    solve n (x:xs) 
      | (snd x)>n = fst x
      |otherwise = solve n xs 
```

# Answer

7******0

# Comments

ghciではとても遅い。ghc -O でコンパイルすれば1秒かからないものの、多分何かがダメなのだろう。がよくわからん。まあ後で考えるとしてとりあえず次行くか。
Groovyのちょっとしたこと「Groovyの2.2がリリースされました。その１」

[リリースノート](http://groovy.codehaus.org/Groovy+2.2+release+notes)に新機能がまとめられています。

今回の新機能は、

-  Implicit closure coercion
-  @Memoized AST transformation for methods
-  Bintray's JCenter repository 
-  Define base script classes with an annotation
-  New DelegatingScript base class for scripts
-  New @Log variant for the Log4j2 logging framework
-  @DelegatesTo with generics type tokens
-  Precompiled type checking extensions
-  Groovysh enhancements
-  OSGi manifests for the “invoke dynamic” JARs

ということなので、1つずつ確認してみましょう。

## Implicit closure coercion

クロージャが暗黙的にインターフェースなんかに変換されるってことらしいですね。

適当に検証してみましよう。

以下のコードを、2.2.1で実行します。

```Groovy:ImplicitClosureCoercion.groovy
/*
2.2.x added Implicit closure coercion
*/

interface StringFilter{
  def filter(String source);
}

class SemicollonRemover{
  static String remove(String source,StringFilter filter){
    filter.filter(source)
  }
}

println "I'm Groovy $GroovySystem.version"
println SemicollonRemover.remove('hello;world;') {s->s.replaceAll(';','')}
```

```text:Out
I'm Groovy 2.2.1
helloworld
```

通ります。

なお、同様のことを2.1.xで実行するには、

```Groovy
println SemicollonRemover.remove('hello;world;') {s->s.replaceAll(';','')}
```

この部分を、以下のようにします。

```Groovy
println SemicollonRemover.remove('hello;world;' , {s->s.replaceAll(';','')} as StringFilter)
```

なんとなく書きやすくなっている気がしますね。

次回は、@Memoized AST transformation for methodsです。

とうやらメモ化をしてくれるアノテーションのようですね。
HiveMQ Installation



## Requirements

* Ubuntu 12.04LTS
* Install path is /opt/hivemq (linked from /opt/hivemq-{version})


## Installation

### Install JDK

```
$ sudo add-apt-repository ppa:dlecan/openjdk
$ sudo apt-get update
$ apt-get install openjdk-7-jdk
```

###Install HiveMQ

HiveMQ documentation is helpful to install HiveMQ. Please refer it as well. 
http://www.hivemq.com/docs/hivemq/1.4.1/


```
$ cd /opt
$ wget --content-disposition http://www.hivemq.com/downloads/releases/latest
$ unzip hivemq-{version}.zip
$ ln -s hivemq-{version} hivemq
```

### Create HiveMQ user

```
$ sudo useradd -d /opt/hivemq hivemq
```

### Make scripts executable and change owner to hivemq user
```
$ sudo chown -R hivemq.hivemq /opt/hivemq-{version}
$ sudo chown -R hivemq.hivemq /opt/hivemq
$ cd /opt/hivemq
$ sudo chmod +x ./bin/run.sh
```

### Register starup
```
$ sudo cp /opt/hivemq/bin/init-script/hivemq /etc/init.d/hivemq
$ sudo chmod -x /etc/init.d/hivemq
$ sudo update-rc.d hivemq defaults
```

### Starting HiveMQ

```
$ sudo service hivemq start
```

If you see any errors at starting hivemq, please start with ``/opt/hivemq/bin/run.sh`` as debug.

## Install Plugin

Download plugins from here. http://www.hivemq.com/plugins/

All plugins described on the web page is just located in /opt/hivemq/plugins



## Configuration

Configuration file is located in /opt/hivemq/conf directory.

### SSL/TLS

Please refer http://www.hivemq.com/docs/hivemq/1.4.1/#hivemqdocs_ssl_tls as well.
http://mosquitto.org/man/mosquitto-tls-7.html is also helpful.

Edit configuration file.

```/opt/hivemq/conf/configuration.properties
ssl.enable=ture
ssl.port=8883
ssl.protocol=TLS
keystore.location=/opt/hivemq/conf/certs/server.key
keystore.password={password}
truststore.location=/opt/hivemq/conf/certs/ca.cert
truststore.password={password}
ssl.clientAuthenticationMode=none
ssl.handshakeTimeout=0
ssl.hybridMode=true
```

Generate a certificate authority certificate and key.

```
$ openssl req -new -x509 -days 1024 -extensions v3_ca -keyout ca.key -out ca.crt
```

Generate a server key, sign requests to send to the CA, send the CSR to the CA.

```
$ openssl genrsa -des3 -out server.key 2048
$ openssl req -out server.csr -key server.key -new
$ openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out
server.crt -days 1024
```

Copy key and cert file.

```
$ sudo cp server.key ca.crt  /opt/hivemq/conf/certs
```

Restart HiveMQ.

And here is a command creating client certification. Please enter the command on CA server.

```
$ openssl genrsa -des3 -out client.key 2048
$ openssl req -out client.csr -key client.key -new
$ openssl x509 -req in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 1024
```
brew update で to_sym エラーが出た時の対処方法



## エラー内容

以下がでた

```
% brew update
Error: undefined method `to_sym' for nil:NilClass
Please report this bug:
    https://github.com/mxcl/homebrew/wiki/troubleshooting
/usr/local/Library/Homebrew/cmd/update.rb:134:in `report'
/usr/local/Library/Homebrew/cmd/update.rb:132:in `each_line'
/usr/local/Library/Homebrew/cmd/update.rb:132:in `report'
/usr/local/Library/Homebrew/cmd/update.rb:36:in `update'
/usr/local/Library/brew.rb:91:in `send'
/usr/local/Library/brew.rb:91
```


## 対処方法

```
% brew doctor
Your system is ready to brew.
$ brew update
Updated Homebrew from XXXXXXXX to XXXXXXXX.
==> Updated Formulae
```
Groovyのちょっとしたこと「Scriptのローカル変数のスコープ」

GroovyのScriptは、暗黙的に実行可能クラスとなりますが、ローカル変数はそのクラスのFieldではありません。

そのため、メソッドを定義した場合、そのメソッドからScriptのローカル変数を呼ぶことはできません。

つまり、以下のコードはエラーになります。

```groovy:FieldNG.groovy
def myVar = 'myvar'
def callMyVar() {
  println myVar
}
callMyVar()
```

クロージャのスコープは、クロージャ自身もローカルに定義されていますので以下はエラーになりません。

```groovy:LocalOK.groovy
def myVar = 'myvar'
def callMyVar = {
  println myVar
}
callMyVar()
```

フィールドとして宣言したい場合は、以下の様なAnnotationを用いてAST変換を行います。

```groovy:FieldOK.groovy
import groovy.transform.*

@Field
def myVar = 'myvar'
def callMyVar(){
  println myVar
}
callMyVar()
```

スクリプトを書くとき、クロージャではなくメソッドを定義する癖のある人はハマるかもしれませんね。
R で 1000 を 1,000 みたいに区切り文字を入れたい #rstatsj

`prettyNum` を使うと便利。

```r:コード
x <- 1:10 * 1000000
prettyNum(x, big.mark=",", big.interval=3, scientific=FALSE)
```

```:結果
 [1] " 1,000,000" " 2,000,000" " 3,000,000" " 4,000,000" " 5,000,000"
 [6] " 6,000,000" " 7,000,000" " 8,000,000" " 9,000,000" "10,000,000"
```

参考： http://stat.ethz.ch/R-manual/R-devel/library/base/html/formatc.html
XmonadでJavaのGUIアプリケーションが正常に動作しない場合

コンポーネントの表示領域がやけに小さい、メニューバーをクリックしてもメニューがすぐに消えてしまう、等の事象への対応。

こちらに解答がある。
http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Hooks-SetWMName.html

`~/.xmonad/xmonad.hs`を以下のように編集する。

```hs
import XMonad
import XMonad.Hooks.SetWMName -- これを追記

main = do
  xmonad $ defaultConfig
    {
      startupHook = setWMName "LG3D" -- これを追記
    }
```

そして、`$ xmonad --recompile`で設定を再コンパイルし、`Super + q`でXmonadを再起動する。
Project Euler No. 10

# Problem

> The sum of the primes below $10$ is $2 + 3 + 5 + 7 = 17$.
> 
> Find the sum of all the primes below two million.

# Code in Haskell

```haskell:Euler_009.hs
module Main where
import Data.Numbers.Primes

main = print answer
  where answer = sum $ takeWhile (<2000000) primes
```

# Answer

1**********2

# Comments

手抜き以外のなにものでもありませんが、今後もPrimesパッケージを
ありがたく使わせていただきます。ナムナム（Project Eulerの趣旨的にそれでいいのかは知らない）。
爆速JSONPでWebAPIに動的なパラメータでリクエストする

爆速JSONPそのものは、固定のパラメータでしかWebAPIにリクエストできませんが、scriptタグ自体を動的に生成してしまえば、動的なパラメータでリクエストすることができます。

- [JSONP WebAPIを爆速で使いこなせるフレームワーク](http://techblog.yahoo.co.jp/programming/bakusoku-jsonp/)
- [爆速JSONPをオープンソース化しました](http://techblog.yahoo.co.jp/programming/bakusoku-jsonp2/)

```html:example.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>動的に爆速JSONPを使う</title>
</head>
<body>

<!-- 出力先 -->
<div id="bakusoku-jsonp-output"></div>

<!-- このJavaScriptは出力先のdivタグより後ろに記述してください -->
<script>
(function(){
  var company = prompt('電力消費量を調べます。どの電力会社を調べますか？\n(hokkaido/tohoku/tokyo/chubu/kansai/kyusyu) ');
  switch (company) { //エラーチェック
    case 'hokkaido': case 'tohoku': case 'tokyo':
    case 'chubu': case 'kansai': case 'kyusyu':
      break;

    default:
      alert('その電力会社は対応していません');
      return;
  }

  //ひたすら爆速JSONP用のscriptタグを作っていく
  var tag = document.createElement('script');
  tag.src = 'http://i.yimg.jp/images/yjdn/js/bakusoku-jsonp-v1-min.js';
  tag.setAttribute('data-url', 'http://setsuden.yahooapis.jp/v1/Setsuden/latestPowerUsage');
  tag.setAttribute('data-p-output', 'json');
  tag.setAttribute('data-p-appid', 'YOUR_APPLICATION_ID'); //appidは自分のものを使ってね
  tag.setAttribute('data-p-area', company); //ここで動的要素を注入！
  tag.innerHTML = '現在の電力消費量は{{ElectricPowerUsage.Usage.$}}kWです。';

  //タグを挿入！
  document.getElementById('bakusoku-jsonp-output').appendChild(tag);
})();
</script>

</body>
</html>
```
HTMLのテーブルにCSSで斜線を引く方法

## はじめに
* HTMLのtableでthやtdに斜線を引く方法をご紹介
* tableのwidth, heightを設定しても若干表示はOS/ブラウザで表示が変わってくるのでその対応方法にも触れておく

## 書き方
### HTMLの記述
* [ここ](https://raw.github.com/rafaelp/css_browser_selector/master/css_browser_selector.js)からjsファイルを落としてくる

```html
<script src="css_browser_selector.js" type="text/javascript"></script>
```

### CSSの記述

```css
/*  斜線を引きたいタグにクラスslashをつけているとき(数値は適当) */

/* Windowsだけにあてたい場合 */
.win .slash {
    background: linear-gradient(12deg, white, white 48%, gray 49%, gray 51%, white 52%, white);
}
/* Macだけにあてたい場合 */
.mac .slash {
    background: linear-gradient(10deg, white, white 48%, gray 49%, gray 51%, white 52%, white);
}
/* Windows Chromeだけにあてたい場合 */
@media screen and (-webkit-min-device-pixel-ratio:0) {
  .win .slash {
      background: linear-gradient(8deg, white, white 48%, gray 49%, gray 51%, white 52%, white);
  }
}
```

----

* 参考文献：http://html999.sitemix.jp/tips/48.html

# ～ただの宣伝～
* [全国のSeleniumer必読](http://qiita.com/oh_rusty_nail/items/b8ba525d31ea7c522856)
* Seleniumerといっていますが、Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
Backtraceを、おしゃれな色をつけたHTMLに変換して返す

### バックトレースをHTMLにして返す。外からはこれを使う。
    def backtrace_highlight(raw_backtrace)
      raw_backtrace.collect { |trace| to_html( trace ) }.join('<br />')
    end

### バックトレースの行をHTMLにして返す
    def to_html(backtrace_line)
      file_path, line_number, method = backtrace_line.split(':')
      if project_code?(backtrace_line)
        "<b>#{font_tag( file_path, '#E74C3C' )} #{font_tag( line_number , '#E67E22')} #{font_tag( method, '#C0392B' )}</b>"
      else
        "#{font_tag( file_path, '#95A5A6' )} #{font_tag( line_number , '#BDC3C7')} #{font_tag( method, '#7F8C8D' )}"
      end
    end

### fontタグを作る
    def font_tag(text, color = '#000')
      %!<font color="#{color}">#{text}</font>!
    end

    # プロジェクトのコードかどうかを確認する
    def project_code?(backtrace_line)
      backtrace_line.index(Rails.root.to_s) == 0
    end
bash で git コマンドのブランチ名などを補完するには


git-completion.bash を導入する。

[git/contrib/completion/git-completion.bash at master · git/git](https://github.com/git/git/blob/master/contrib/completion/git-completion.bash)

# 導入方法

+ [git/contrib/completion/git-completion.bash](https://github.com/git/git/blob/master/contrib/completion/git-completion.bash) をダウンロードして適当な場所に配置(例えば ~/.git-completion.bash)
+ ~/.bashrc に `source ~/.git-completion.bash` の一行を加える

これだけ