OmniAICreator/Qiita-1.07M huggingface dataset:
BEAR.Sunday 1.0

# BEAR.Sunday 1.0

0.xとしてバージョンを重ねてきましたが、1.0のリリース準備中です。
このAdventカレンダーではフレームワークの紹介や開発手法について書いてみたいと思います。

## パッケージ構成

BEAR.Sundayは以下の３つのオブジェクトフレームワークで構成されています。

 * **アスペクト指向プログラミングフレームワーク**
 * **DIフレームワーク** 
 * **ハイパーメディアフレームワーク**

対応するBEAR.Sunday1.0で予定しているバージョンは以下のとおりです。

 * Ray.Aop `v2.0`
 * Ray.Di `v2.0`
 * BEAR.Resource `v1.0`

## インストール

### Hello  World

色々説明する前にとりあえず、インストールして動かしてみましょう。
`0.x`では`BEAR.Sunday`パッケージはインターフェイスやアノテーションなどの"抽象"しかなく、動作をさせることができませんでしたが現在`develop-2`で開発しているバージョン1.0は`BEAR.Sunday`が単体動作します。

```
$ git clone https://github.com/koriym/BEAR.Sunday.git
$ cd BEAR.Sunday/docs/demo/MyVendor/HelloWorld
$ composer install
$ cd www
$ php -S 0.0.0.0:8080
```
jQuery UI:Draggableエレメントをクリックで最前面へ

Draggableのstackオプションを使うことで、ドラッグ時にエレメントを最前面を持ってくることができます。例えばこんな感じ

```js
	$('.draggable-box').draggable({ stack: ".draggable-box" });
```

これでもまぁいいんだけど、やっぱりクリックしたときに最前面に来てほしい。

ということで書いてみた。

```html:click-on-top.html
<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="utf-8">
	<title>Draggable test</title>
	<style type="text/css">
	.draggable-box {
		height: 100px;
		width: 100px;
		border-style: solid;
	}
	#id1 {
		background-color: #8080ff;
		border-color: #0000ff;
		z-index: 1;
	}
	#id2 {
		background-color: #ff8080;
		border-color: #ff0000;
		z-index: 2;
	}
	#id3 {
		background-color: #80ff80;
		border-color: #00ff00;
		z-index: 3;
	}
	</style>
</head>
<body>
	<div>
		<div id="id1" class="draggable-box"></div>
		<div id="id2" class="draggable-box"></div>
		<div id="id3" class="draggable-box"></div>
	</div>

	<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
	<script src="http://code.jquery.com/ui/1.11.2/jquery-ui.min.js"></script>
	<script>
	$('.draggable-box').draggable();

	$('.draggable-box').mousedown(function () {
		var boxes = [],
		    self = this,
		    myIndex;

		$('.draggable-box').each(function (i) {
			boxes[i] = {
				box: this,
				zIndex: Number($(this).css('z-index'))
			};
			if (this === self) {
				myIndex = i;
			}
		});
		boxes[myIndex].zIndex = boxes.length + 1;
		boxes.sort(function (a, b) {
			if (a.zIndex < b.zIndex) return -1;
			if (a.zIndex > b.zIndex) return 1;
			return 0;
		});

		boxes.forEach(function (item, i) {
			$(item.box).css('z-index', i + 1);
		});
	});
	</script>
</body>
</html>
```

mousedownイベントで、クリックされたエレメントのz-indexの値を一番大きい値に変更しています。z-indexの値がどんどん大きくなるのは好きじゃないので、ソートして値を振り直しています。

stackオプションでも結局はz-indexの値を再設定しているようですが、素直に一番大きい値に変更するだけのようで、z-indexの値がどんどん大きくなるっぽい。
ニート・無職のためのOculus Riftを用いて就職する方法

![B3SWV1DCMAAXaWm.png](https://qiita-image-store.s3.amazonaws.com/0/26030/04c7442f-ac55-440f-a3ab-250bc4aff9f3.png)
クソコラはカオスの縁であるから、進化を最大化し人間を就職に導く。
OculusRiftにも同じ事が言える。

注：主にニート、無職向けの記事です。

#結論

人間は、面白ガジェット（例えばOculusRift）を使って、
デモをしていると就職出来る場合がある。(ただし1年前の事例 ＆ n=1)

実際は運だが、運が来る可能性を上げる方法がある。
それは被せることである。

ロジック
→ガジェット被せる
→こやつ…ガジェット好きな面白い奴な可能性が低くないのでは…
→どや、うちで？
→就職

なので、ニートや学生さんはOculusRiftやガジェットを
活用して就職して厚生年金に入って将来多めに年金を貰おう！


#どういう話か
筆者は今年の初め、立派なニートだった。
現在は職に就いている。
この職はOculus Rift DK1の力によって得たものである。
"Oculus Riftで、デモを行っていたら就職"
そういうことである。

#そんな…そんなバカな話があるかッ…！。
常識的に考えて
ニート（しかも真のNEET(Not in Education, Employment or Training)）を仕事に誘うのは
営利企業にとって無茶である。
なぜ、無茶は実行されたのか。

<b>それは、たまたま僕の運が良かったからだ！！1！（クワッ）</b>

人生は運。


#やはり運…人生は運なのか…。
とはいえ、
ただ、運が良かっただけではない。
むしろ筆者の運の悪さといったらない。

しかし、でも、なぜならば！
もし筆者がOculusRiftを持っておらず、
デモを行っていなければ、
スカウトはなかったはずである。

筆者の運は良かった、とても良かったが、
"OculusRiftでデモをすることが就職につながった"、
これは確かなことで、現実だったということである。


#どうすれば、どうすれば…ええんじゃ…。

さて、OculusRiftを用いて就職するパターンは
以下の3つが考えられる。

1・OculusVR社に就職する。
2・OculusRift等のコンテンツを作成する仕事につく。
3・OculusRiftと関係のない仕事につく。

1、2は実力があればイケるので頑張って下さい。
ニート・無職には実力がありません。
基本的にそういうもののはずです。
ニート・無職には実力がない。そういうものです。

では、そういうニート・無職はどうしたら良いのか。
何かを一発当てる必要があります。

#OculusRiftは凄い、だが俺が凄くなったわけではない。

OculusRiftは凄い。没入感が凄い。
これはもう明らかな凄さである。
ここで重要なのは、
ニート・無職は凄くない場合が多いということである。

ニート・無職は凄くない。
OculusRiftは凄い。
ニート・無職は凄くないが、
OculusRiftは凄く凄い。
（これが理（ことわり）…。）


#事例を検証だ！
筆者の場合は、
勉強会に行って特に意味も無くOculusRiftを被せて回っていました。
イベント後の懇親会などではお酒パワーの力もあり、楽しんで貰える場合も多かったです。
Oculusを被せて就職とは考えていませんでした。楽しかったので別にそれで良しのやつでした。
ですが意図せず以下のメソッドを繰り返してしまっていたことが、
結果として就職に繋がることとなりました。

##OculusRiftDeSyuusyoku(){

//以下1~4を繰り返すと5に発展する可能性が生まれ、6に進む場合がある。

1.面白そうな技術系勉強会・イベント等に行く

2.さりげなくOculusを取り出す。
![20140803101521.jpg](https://qiita-image-store.s3.amazonaws.com/0/26030/198fac03-1d30-650f-2220-5ef044b1a6c2.jpeg)

3.被せる。（ファーストOculusが肝心）
![ダウンロード (1).jpeg](https://qiita-image-store.s3.amazonaws.com/0/26030/1977f32e-052f-9f4e-d63d-3e2f3ba60b50.jpeg)


4.なんとなく名刺を交換するなどして、連絡方法を伝える。


5.連絡が来る
![a2bcfdec.png](https://qiita-image-store.s3.amazonaws.com/0/26030/5f9c0f61-ca3a-3e88-3c8a-b038377ab075.png)


6.就職

![91684_201305282016239337_2.jpg](https://qiita-image-store.s3.amazonaws.com/0/26030/80a6ec34-a4e0-edaa-64e8-1ce96e258e30.jpeg)

}

僕からは以上です。

一年前の事例で、現在は単純に被せるだけで事が発展するのは厳しいと思います。
ですが、ニート・無職こそガジェット系のアプリを作ったりして
就職活動すると面白いかも知れません！

「ほー、普段はなにやっておられるんですか？」
→「無職です」のコンボ is 基本です。

就職できなくても、作ってると適度に面白いですし、
お金も気を付ければさほどかからないので、是非お試し下さい。
(ガジェット代は就職できれば回収できます（出来ればです（白目））)

個人的に最近のお勧めは、Chromebook + クローム拡張です。あとは、OculusRiftDK2、LeapMotion、それからWebRTCとか…。それとやっぱりJAVA/PHP（LAMP）です！特にJAVAやPHPは就職に有利です！！！１！（うわーん！）




明日は dvorak__ さんです。よろしくお願いします！
crosswalk on Tizen IVI 3.0 を動かす

# 注
先週投稿の [Tizen IVI 3.0 on VMware を動かす](http://qiita.com/naohikowatanabe/items/2c75d5c1e2be8c9bf580) の続きです。

アプリ何も無いじゃんありえん、と思ったので動かしてみた話。

Tizen IVI 3.0 からアプリ実行環境が crosswalk になったのを思い出し、
ガツガツやったらいつものオレンジ立方体の WebGL サンプルアプリがぐるぐるまわるやつ動いた。

# 使用機材

| 使用機材 | 注 |
|:--------|:--|
| Windows 7 64bit | Tizen IVI on VMware Player 環境が動く前提|
| Ubuntu12.04 | vmdk イメージ作成用 |
|Tizen IVI 3.0 image|Oct 28, 2014 3.0-M3-Oct2014 milestone|


# 手順

## Tizen アプリパッケージ作成(xpk)

Ubuntu にて。
基本的には、
https://crosswalk-project.org/documentation/getting_started/run_on_tizen.html
を参考にする。

サンプルコンテンツをダウンロードする。
https://crosswalk-project.org/documentation/samples.html
crosswalk-samples-0.8.tar.gz
解凍後の webgl/ ディレクトリのコンテンツを動かすことにする。

make_xpk.sh を作成。

```shell:make_xpk.sh
#!/bin/bash -e
#
# Purpose: Pack a CrossWalk directory into xpk format
# Modified from http://developer.chrome.com/extensions/crx.html
if test $# -ne 2; then
  echo "Usage: `basename $0` <unpacked dir> <pem file path>"
  exit 1
fi

dir=$1
key=$2
name=$(basename "$dir")
xpk="$name.xpk"
pub="$name.pub"
sig="$name.sig"
zip="$name.zip"
trap 'rm -f "$pub" "$sig" "$zip"' EXIT

[ ! -f $key ] && openssl genrsa -out $key 1024

# zip up the xpk dir
cwd=$(pwd -P)
(cd "$dir" && zip -qr -9 -X "$cwd/$zip" .)

# signature
openssl sha1 -sha1 -binary -sign "$key" < "$zip" > "$sig"

# public key
openssl rsa -pubout -outform DER < "$key" > "$pub" 2>/dev/null

byte_swap () {
  # Take "abcdefgh" and return it as "ghefcdab"
  echo "${1:6:2}${1:4:2}${1:2:2}${1:0:2}"
}

crmagic_hex="4372 576B" # CrWk
pub_len_hex=$(byte_swap $(printf '%08x\n' $(ls -l "$pub" | awk '{print $5}')))
sig_len_hex=$(byte_swap $(printf '%08x\n' $(ls -l "$sig" | awk '{print $5}')))
(
  echo "$crmagic_hex $pub_len_hex $sig_len_hex" | xxd -r -p
  cat "$pub" "$sig" "$zip"
) > "$xpk"
echo "Wrote $xpk"
```

make_xpk.sh に実行権限つけて、
キー作って、
xpk ファイル作って、
Tizen IVI 3.0 on VMware 環境へ送る。

```
$ chmod +x make_xpk.sh
$ openssl genrsa -out ~/mykey.pem 1024
$ ./make_xpk.sh webgl/ mykey.pem
$ scp webgl.xpk root@111.222.333.444:/home/app
```

# 実行
Tizen IVI 3.0 on VMware にて。

インストールして、実行。

xwalkctl --install 時に、 xwalk.********
という文字列（アプリ ID）が表示されるのでメモる。

```
$ xwalkctl --install .webgl.xpk
$ xwalk-launcher xwalk.******
```

立方体がクルクル回る。
ドラッグで更に回る。


## スクリーンショット

![crosswalk_sample_webgl.png](https://qiita-image-store.s3.amazonaws.com/0/35514/ef5f5927-fd2e-81da-c7c6-fb4583e6c4cc.png)


# 参考
https://crosswalk-project.org/documentation/getting_started/run_on_tizen.html
Windowsローカル環境で使う、elasticsearch-1.4.1 + kibana-4.0.0-BETA2.0  kibana Discover編 その１

[前回](http://qiita.com/Aco-gt/items/b588f11d1242b27a7c42)は、データ投入について説明しました。
今回は、Kibanaを操作する上で必須となるインデックス登録とDiscoverについて説明したいと思います。
#1. kibana インデックス登録
*  http://localhost:5601/  にアクセスします。
*  Settings-Indicesを選択してConfigure an index patternの画面でIndex name:"epa-http_log_index"、Time-filed name: "@timestamp"をリストボックスから選びます。
*  Createボタンをクリックします。  
![2014-12-01_211645.png](https://qiita-image-store.s3.amazonaws.com/0/60838/e843e54b-768e-4470-d865-7b013bf7f609.png)   
 デフォルトで作成されるフィールドとデータ投入の際に設定されたmappingの情報が表示されます。
@timestampがdate型、sizeがnumber型、その他のフィールドはstring型で登録されていることがわかります。
![2014-12-01_212209.png](https://qiita-image-store.s3.amazonaws.com/0/60838/691fb8f5-3e1f-2570-aef9-521bb10c3406.png)

#2. Discover
*  ここでは登録したデータのどの範囲を参照するかを指定します。右上のボタン（時計マーク）をクリックします。

![2014-12-01_212303.png](https://qiita-image-store.s3.amazonaws.com/0/60838/b072685a-af2a-f8d1-2d53-6fb394459f64.png)

*  ひとまず登録したログの最初から終わりまですべてを含む範囲を設定します。取り込んだログを直接参照して調べても良いのですが、ログをダウンロードしたページhttp://ita.ee.lbl.gov/html/contrib/EPA-HTTP.html  の「Measurement」項目にログの収集期間が1995/08/29 23:53:25～1995/08/30 23:53:07と記載されていますのでその範囲を設定します。
*  Absolute（絶対時間）を選んで時刻を直接入力し「Go」ボタンをクリックします。画像のような棒グラフが表示されると思います。

![2014-12-01_220903.png](https://qiita-image-store.s3.amazonaws.com/0/60838/0bb0aec4-d58a-bd81-4f28-07e2b9d1f3d7.png)  
グラフが表示されたところでデータの登録がきちんとできているか再度チェックします。同じくログをダウンロードしたページの「Measurement」項目に下記アクセス数の記載があります。
"There were 47,748 total requests, 46,014 GET requests, 1,622 POST requests, 107 HEAD requests, and 6 invalid requests."
データ投入編で説明しましたが invalid requestsである6レコードは今回取り込まずスキップしました。ですので取り込んだ総ドキュメント数（行数）は、47,748 － 6 ＝ 47,742となり、グラフの右上に表示されている「47742 hits」と一致しています。
今回はここまでで、[kibana Discover編 その２](http://qiita.com/Aco-gt/items/f1d5b8a88b94fb14e47c)  に続きます。
Raspberry PiをClojureから触る時のあれこれ

# ご挨拶

どうも今晩は、[Xcoo, Inc.](https://xcoo.co.jp/)にてインターン生をしていますBOXPです。

大分前にRaspberry Pi Bを購入した僕ですが、9月頃になれない手つきで半田ごてを握り、モーターのドライブ回路を作り繋いだ結果、思いっきり回路を焼いてしまい壊してしまいました… 

 その後、まるで焼かれたRaspberry Piの意思を継ぐかのようにRaspberry Pi B+が発売されたので早速購入しました

 既出の様な気もしますが、Clojureでledを点滅させるまでのあれこれをまとめておきます

# 下準備

※既に[Raspbian](http://www.raspbian.org/)・[WiringPi](http://wiringpi.com/)がRaspberry Piにインストールされているものとして書きます
（インストール方法は[Raspberry Pi Documentation](http://www.raspberrypi.org/documentation/installation/installing-images/)が参考になります)

Clojureを実行するために以下のパッケージをインストールしましょう

- oracle-java7-jdk
- leiningen

# REPLを立ち上げる

作業用のディレクトを準備します

```bash
cd ~/
mkdir -p program/clojure
cd program/clojure
lein new raspi-test
```

手前味噌ではありますが、簡素なライブラリを作りましたのでproject.cljの:dependenciesに追記します
ついでにcore.asyncも追記します

```clj
[raspberrypi "0.1.0-SNAPSHOT"]
[org.clojure/core.async "0.1.346.0-17112a-alpha"]
```

REPLを立ち上げます

```bash
lein trampoline repl :headless
```

ライブラリの前準備をします

```clj
(use 'raspberrypi.core)
(require '[clojure.core.async :refer [go <! timeout]])
```

# ledを点滅させる

最初にgpioを使ってする事と言えば、Blink(LEDチカチカ)ですよね
まず、ledが繋がれた[ピン番号](http://wiringpi.com/pins/)をもとに、ledを定義します。

```clj
(def pin "0")
```

```clj
(def my-led (->PIN pin))
```

ledに電流を流す前に、ledが接続されたピンを出力に設定します

```clj
(set-out! my-led)
```

前準備が出来たので、実際に点滅させてみます

```clj
(go (while true
      (<! (timeout 500))
      (write my-led 1)
      (<! (timeout 500))
      (write my-led 0)))
```

これで、0番ピンに接続されたledが点滅します

# まとめ

とにかくREPLを立ち上げるまでの時間が長く、trampolineを付けて起動しないとあまりにも起動に時間がかかりすぎてタイムアウトを起こします

今回はClojureをそのまま使いましたが、使い勝手としてはClojureScriptを使った方が良いかもしれません

快適な開発が出来ると信じて、近いうちにClojureScriptでも試してみます
cabal sandbox を使った pandoc インストール


PandocはHaskellで書かれており、最新版のPandocを利用するには、Haskell PlatformのCabalというパッケージマネージャを用いてビルドする必要があります。

しかし、Cabalは依存関係の解決が苦手で、俗に言うDependency HellやCabal Hellといった依存関係のトラブルに巻き込まれがちです。

最近のHaskell Platformにはsandboxという機能がついており、これを使うと依存関係のトラブルを大きく減らすことができます。
今回は、このsandboxを使ってPandocをインストールしてみましょう。

以下、Unix系OS（Mac, Linuxなど）を前提とします。

## 1. Haskell Platformをインストールする
既に済んでいる場合は2.へ飛ぶ。

### Macの場合(Homebrew)

```Bash
brew install ghc Haskell Platform
```

### その他の場合
<https://www.haskell.org/platform/> からHaskell Platformのインストーラをダウンロードする。

## 2. Cabal本体をアップグレードする

```Bash
cabal update
cabal install cabal-install
```

GHCが古いと言われたら、以下の手順でGHCを削除する。

* Homebrewの場合は`brew remove ghc Haskell Platform`でいけるはず。
* インストーラを使った場合：

```Bash
cd /Library/Haskell/bin
./uninstall-hs # バージョン番号を見つける
./uninstall-hs thru <バージョン番号> --remove
```

## 3. cabal sandbox をセットアップする

```Bash
mkdir pandoc
cd pandoc
cabal sandbox init
```

## 4. Pandocをインストールする

```Bash
cabal install pandoc
```

この後時間がかなりかかるので、コーヒーブレイク。

## 5. Pandocのバイナリをパスの通ったところに置く
Pandocのバイナリが`$(pwd)/.cabal-sandbox/bin`にできているので、これをコピーするかシンボリックリンクを作成します。

パスの通ったところならどこに置いてもよいですが、下記がおすすめです。
* `~/.cabal/bin` （事前にパスを.bash_profileなどに設定する必要あり）
* `/usr/local/bin`

例えば、シンボリックリンクを作成する場合は以下の通りです：

```Bash
ln -s $(pwd)/.cabal-sandbox/bin ~/.cabal/bin
```

以上で完了です。`pandoc -v`でバージョン情報が表示されたら成功です。
【第1回】2014/12/1時点でのdockerインストール方法




![ccc.jpg](https://qiita-image-store.s3.amazonaws.com/0/33834/cc4032f7-8544-0f76-0bc0-be48730df78d.jpeg "ccc.jpg")


早くも12月ですね。今年はいかがだったでしょうか。
私は、1月に立てた目標をクリアしました。来年は何を目標にしようかな。
ハードル高いほうが燃えますね。

と、いうことでdockerをインストールしてみます。

# 環境
OS:OS X Yosemite 10.10.1

# dockerインストーラをダウンロード
[こちら](https://github.com/boot2docker/osx-installer/releases/tag/v1.3.2)よりBoot2Dockerをダウンロードします。(私の環境が悪いのか30分かかりました。)

これをインストールすると、以下が入ります。
* Boot2Docker 1.3.2 (Docker v1.3.2, Linux v3.16.7)
* Boot2Docker Management Tool v1.3.2
* Docker Client v1.3.2
* VirtualBox v4.3.18-r96516

つまり、VirtualBox上でdocker用のLinuxが動くわけですね。
パッケージ化されてインストールが簡単になりました。

ダウンロードが完了したら、実行してインストールします。
あら簡単ですね。

# dockerの初期化と起動
    $ boot2docker init
    $ boot2docker start

因みに停止するときは

    $ boot2docker stop

# docker接続用の設定
    $ export DOCKER_TLS_VERIFY=1
    $ export DOCKER_HOST=tcp://192.168.59.103:2376
    $ export DOCKER_CERT_PATH=/Users/Jun/.boot2docker/certs/boot2docker-vm

# 因みにdockerをアップグレードする場合は
新しいboot2dockerを[ダウンロード](https://github.com/boot2docker/osx-installer/releases/tag/v1.3.2)してインストール。
そして

    $ boot2docker stop
    $ boot2docker download
    $ boot2docker start

# 試しにdockerを動かしてみる
小さなdockerイメージをダウンロードして、「Hello from Docker.」と表示してくれます。

    $ docker run hello-world




以上、インストールでした。
[次回](http://qiita.com/iron-breaker/items/d54058c5ac120be7ca87)は、dockerのチュートリアルをやります。
ShellScriptでメール送信

```sh:sendmail1.sh
#!/bin/sh
to=to@addr.ess
from=from@addr.ess
SUBJECT="題名"
BODY="本文"

echo "${BODY}" | mailx -s "${SUBJECT}" -r ${from} ${to}
```
or

```sh:sendmail2.sh
#!/bin/sh
to=to@addr.ess
from=from@addr.ess
SUBJECT="題名"
FILE="本文ファイル名"

cat "${FILE}" | mailx -s "${SUBJECT}" -r ${from} ${to}
```
mailxコマンドがない場合はmailを使う（たぶんその場合は-r ${from}では上手くいかない）
OSXのインターネット共有はDHCPが必ずついてくる


Raspberry PiをMacの有線LANに繋いで設定していたけど、RasPiからインターネットに出られなかったので、Macのインターネット共有機能を使おうと思い至った。

単純に「システム環境設定→共有」からインターネット共有を有効にしただけだと駄目で、MacからRasPiにも繋がらなくなってしまった。

![141201.png](https://qiita-image-store.s3.amazonaws.com/0/2492/39d5820b-f3d0-4560-4e58-ac3b8589b9e5.png "141201.png")

## 原因

原因はインターネット共有の仕様。

* IPフォワーディング
* NAPT(IPマスカレード)

この2つだけやってくれれば良かったのに、どうやらDHCPサーバーも一緒に付いてくるみたい。

インターネット共有を有効にした時点で、Macの有線LANポートに設定してあった固定IPアドレス(192.168．1.2)はどこかにいってしまって、代わりにブリッジ接続用にインターフェースと新しいセグメントのIPアドレス(192.168.2.1)が設定されていた。

RasPiのIP設定をDHCPに変更してあげるとすんなり繋がった！

### DHCPリースのログ

ちなみに、MacではDHCPリースの情報は``cat /var/log/system.log``にログとして流れてきます。

```
cat /var/log/system.log | grep OFFER
```

こんな感じで絞ってあげると見やすい。
Graphvizでハマったこと

# graphvizとは
テキスト記述(dot言語)で関連図を生成できる凄いツール。

# サイト
配布元　http://www.graphviz.org/
定番チュートリアル　http://homepage3.nifty.com/kaku-chan/graphviz/

# やりたかったこと
- とあるDBの職業一覧を階層化して見たかった。
- 件数は7000件くらい

# ハマったこと
## でかい関連図はpng出力とかjpeg出力は難しい
carino-rendererを使うと図形が潰れて出力されてしまった。

```command
C:\>dot -Tpng test.txt -o c:\temp\sample.png

dot: graph is too large for cairo-renderer bitmaps. Scaling by 0.0341323 to fit

C:\>
```
---
【対応方法】
png出力とかjpeg出力を諦める。svg形式なら大きくても大丈夫。

## でかい関連図を出力すると見難い(醜い)
1つの階層に30項目ほどぶら下がるような図ができあがった。縦は収まるのに横が延々とスクロールが続いてしまう形に。

---
【対応方法】
階層図・グラフの表記方向を上→下(初期設定)から左→右（dot言語で"graph [rankdir = LR];"を追加）に変更。


## でかい関連図を出力すると線が重なってしまう
階層の項目と 階層と階層をつなぐ線がぶつかってしまった。このままだと線を追いかけづらく読みにくい。

---
【対応方法】
階層の感覚を広げる。dot言語で”ranksep=10;”を追加。
全体的に幅広くなってしまったが、読みやすくなった。

# 最後に
テキストから関連図が作れるGraphviz、面白いです。大量のデータの関連性をみるとか、上下関係を調べるようなときに簡単に使える便利なツール。

# 今回使用したデータ
## githubに登録しました。
https://github.com/yyano/jobs-directory
## 使い方
```command
C:\>dot -Tsvg test.txt > c:\temp\work.svg
```
## 表示方法
work.svgが生成されるので、Internet Exploereなどで表示してください。
fortranでの擬似乱数生成



C言語などでは乱数生成には生成するためのseedが必要になる．


fortranでも同様にシードが必要になるので，それも含めて擬似乱数生成の備忘録


使用するのはこの以下の2つ

```fortran:random_number(harvest)
harvest !実数のスカラか配列
```

```fortran:random_seed([size][put][get])
size !シードを格納するのに必要な配列サイズを取得．
put !シードを設定．
get !現在のシードを取得．
```

シードが配列であるのもよくわからないんですが，配列の長さも環境によってまちまちなようで，シードのサイズの取得から行わないといけないと．

```fortran:シードを変えてみる例
integer :: seedsize
integer,allocatable :: seed(:)
real :: rnd

call random_seed(size=seedsize) !サイズ取得
allocate(seed(seedsize)) !配列確保
call random_seed(get=seed) !現在のシードを取得
seed(1) = 1234567890 !ここでは10桁程度の適当な値

call random_number(rnd) !rndに乱数をセット
```

こんな具合に乱数を生成することが出来ます．
seed(1)を変えるだけでも生成される乱数は変わる．ただ，値は大きく変えないと，乱数自体も大きく変化しないらしい．


ちなみに，時間と組み合わせると毎回異なった乱数を生成できる．

以下はさっきのを少しだけ変えただけのもの

```fortran:system_clock(count,count_rate,count_max)を利用した例
integer :: seedsize
integer,allocatable :: seed(:)
real :: rnd
integer :: c !時間を入れる

call system_clock(count=c) !時間を取得
call random_seed(size=seedsize)
allocate(seed(seedsize))
call random_seed(get=seed)
seed = c !時間を全部に代入

call random_number(rnd) !rndに乱数をセット
```

seed(1)だけ変えて連続で実行しても値が変わらなかったので，全部変えて実行したらいろいろな値を吐いてくれました．
GAMEBOY開発ざっくり

#日本のGAMEBOY開発事情
廃れぎみ。

#海外のGAMEBOY開発事情
Game Jamが行われる程度に盛ん。
[GBJam 3 | Game Jolt Jams](http://jams.gamejolt.io/gbjam3)

#開発方法
C言語かアセンブラ。
開発環境の紹介は明日します。

#動作方法
基本的にはエミュレーターを使います。
下記のうちどれかを用意すれば実機でも動作可能。
・既存品を改造した何か
・自作カートリッジ
・flash cart

#flash cart？
いわゆる[マジコン](http://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%B8%E3%82%B3%E3%83%B3)的なアレ。

#開発例（ゲーム）
・[Flappy Bird on Game Boy - YouTube](https://www.youtube.com/watch?v=L1arYXOawP8)

#開発例（ゲーム以外）
・[LSDj](http://www.littlesounddj.com/lsd/)
・[nanoloop](http://www.nanoloop.com)
ニフティクラウド + 標準イメージ CentOS 6.4 で docker を使う

ニフティクラウドの標準イメージ CentOS 6.4 で docker を使うための手順について書きます。

## サーバー作成

CentOS 6.4 を選択しサーバーを作成します。ログインできさえすれば他の設定は何でもいいと思います。

## yum に EPEL リポジトリを追加

<pre>
# rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
# cp /etc/yum.repos.d/epel.repo  /etc/yum.repos.d/epel.repo.org
# vi /etc/yum.repos.d/epel.repo # mirrorlist の https になっている箇所をすべて http に変更します
# yum repolist # epel が追加されたことを確認
</pre>

## カーネルのマイナーバージョンアップ (2.6.32-358.el6.x86_64 -> 2.6.32-504.1.3.el6.x86_64.debug)

<pre>
# yum update -y
# vi /etc/grub.conf # 2.6.32-504.1.3.el6.x86_64.debug が追加されたことを確認し、default を 0 に書き換えます
# reboot -h # 再起動してバージョンアップを適用します
</pre>

## docker インストール

<pre>
# yum install -y docker-io
# service docker start
# chkconfig docker on
</pre>

あとは普通に docker run とか docker build とかできるようになります。
カーネルのマイナーバージョンアップ後の番号に .debug とついているのがやや気になりますが、とりあえず動作確認手順を書いておきます。

## 追記：コンパネでサーバーが警告マークになってしまう場合の対処

上記までの手順だと、コンパネから見たサーバーが三角黄色の警告マークのステータスになってしまいます。
これを回避するために、[Dockerハンズオン資料 - Qiita](http://qiita.com/zembutsu/items/3a396dd1e9d16193b0ba "Dockerハンズオン資料 - Qiita")に書いてあるように下記のコマンドをホスト側で実行しました。

<pre>
/usr/bin/vmware-config-tools.pl --default
</pre>
Ubuntu12.04でgitg0.2.7を使う

Ubuntuのバージョン上げるのはめんどくさいけどgitgのバージョンだけ上げたい時。
apt-getでは0.2.4が最新なのでソースからインストール。

```
wget https://git.gnome.org/browse/gitg/snapshot/gitg-0.2.7.tar.xz
tar xf gitg-0.2.7.tar.xz 
cd gitg-0.2.7/
./autogen.sh 
./configure 
make
sudo make install
```

途中
> ./configure: line 14559: syntax error near unexpected token `maximum'
> ./configure: line 14559: `GNOME_COMPILE_WARNINGS(maximum)'

が出たら、gnome-commonを入れる
```
sudo apt-get install gnome-common
```
自分の環境ではgnome-commonをインストール→アンインストール→インストールすると動いた。



起動時に
> gitg: error while loading shared libraries: libgitg-1.0.so.0: cannot open shared object file: No such file or directory

のエラーが出たら
```
sudo ldconfig
```

本当は0.3系を入れたいけど現状はこれで我慢。
WPF - CanvasをBitmapに変換して画像ファイルとして保存する



WPF で図形を作成する場合、Canvas を利用するのが手っ取り早い。だけど残念ながら Canvas クラスには描画した図形を直接ビットマップ形式の画像ファイルとして保存するメソッドは用意されていない。

Canvas を画像ファイルとして保存するには、RenderTargetBitmap クラスのインスタンスを作成し BitmapSoruce に変換した後、保存したい形式の BitmapEncoder に食わせてエンコード、FileStream に保存するという手順を踏む。この時、RenderTargetBitmap でビットマップに変換する前に Canvasn に対して、Measure メソッドと Arrange メソッドを呼び出してレイアウトを再計算させる必要がある。でないと画像が保存されない。

定型の処理なので、Canvas クラスの拡張メソッドとして実装してやると使い勝手が良い。

```csharp:CanvasExtensions.css

// Canvas クラスの拡張メソッドとして実装する
public static class CanvasExtensions
{
    // Canvas を画像ファイルとして保存する。
	public static void toImage(this Canvas canvas, string path, BitmapEncoder encoder = null)
    {
    	// レイアウトを再計算させる
       var size = new Size(canvas.Width, canvas.Height);
       canvas.Measure(size);
       canvas.Arrange(new Rect(size));

       // VisualObjectをBitmapに変換する
       var renderBitmap = new RenderTargetBitmap((int)size.Width,       // 画像の幅
                                                 (int)size.Height,      // 画像の高さ
                                                 96.0d,                 // 横96.0DPI
                                                 96.0d,                 // 縦96.0DPI
                                                 PixelFormats.Pbgra32); // 32bit(RGBA各8bit)
       renderBitmap.Render(canvas);

       // 出力用の FileStream を作成する
       using (var os = new FileStream(path, FileMode.Create))
       {
           // 変換したBitmapをエンコードしてFileStreamに保存する。
           // BitmapEncoder が指定されなかった場合は、PNG形式とする。
           encoder = encoder ?? new PngBitmapEncoder();
           encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
           encoder.Save(os);
       }
    }
}

```

使い方は↓のような感じ。

```csharp:sample.css

// Canvas をビットマップ形式の画像に保存する
private void SaveCanvas()
{
    // CreateCanvas() は描画済みのCanvasを返すとする
    var canvas = CreateCanvas();
    
    // PNG形式で保存
    canvas.toImage(@"C:¥Path¥To¥Test.png");
    
    // JPEG形式で保存
    var encoder = new JpegBitmapEncoder();
    canvas.toImage(@"c:¥Path¥To¥Test.jpg", encoder);
}

```
PostgreSQLで1回以上連続するスペースで文字列を配列に分割する

#不確定回連続する記号をデリミッタに用いる
UNIXのコマンドラインの文字列を取り敢えず1列のテキスト型のカラムとして挿入し、PostgreSQLの内部でSQLで、要素ごとに分割するための記事です。

例えば、ls -l コマンドでファイル名とファイル容量を取得する場合、データとデータの間に不特定かつ複数回のスペースが連続しstring_to_array関数では対応出来ない場合が有ります。

```shell-session:lslog.txt
-rw-rw-r-- 1 root root    319  9月 29  2010 hoge.txt
-rw-rw-r-- 1 root root   2543  9月 30  2010 huga.txt

```
上記1行目のrootと319の間にはスペースが4つ、2行目のrootと2543の間にはスペースが3つ出現します。これをどちらも1つのデリミッタとして分割するのが今回の目標です。
##regexp_split_to_array関数
PostgreSQL 8.3から導入された[regexp_split_to_array関数](https://www.postgresql.jp/document/8.3/html/functions-string.html)は、文字列を正規表現で定義されたデリミッタを用いて配列化する関数です。

複数回のスペースを配列化する正規表現は、ドュキュメント内に記述例があります

```sql:regexp_split_to_array
SELECT 
 regexp_split_to_array( line , E'\\s+')
FROM lslog
```
####実行結果
{-rw-rw-r--,1,root,root,319,9月,29,2010,hoge.txt}
{-rw-rw-r--,1,root,root,2543,9月,30,2010,huga.txt}

スペースが連続しても、それを1つのデリミッタとして用いられていることが確認できました。

####E'\\\s+'の意味
regexp_split_to_arrayの第2引数のE'\\\s+'には、文字列中のバックスラッシュの取り扱いをE''と記述することにより、エスケープ文字列として取り扱うことを宣言しています。また正規表現では、\\\s（スペース記号）が+（1回以上）連続する文字列をデリミッタとして用いる事を表現しています。
iOSアプリを開発するときに使ってる便利なサービス


## ランキング分析

### Appinfo

http://iphone.appinfo.jp/

![スクリーンショット 2014-12-01 23.01.54.png](https://qiita-image-store.s3.amazonaws.com/0/8292/3a70bc25-3ff6-c69d-d5e6-cc6a9820517c.png)


1日毎の順位をグラフで見ることができます。ほぼ毎日チェックしてます。

### iPhone & iPad 最新人気アプリ
http://iphone.308413110.com/

![rank.png](https://qiita-image-store.s3.amazonaws.com/0/8292/53cd6d11-9b89-8cf8-e8bc-633cf4cc12d9.png)


こちらは1時間毎の細かい順位をチェックすることができます。レビューサイトなどに紹介された直後にどのくらい順位が上昇するかチェックするときに便利です。

## ユーザーレビュー

### Appbot
https://appbot.co/

![スクリーンショット 2014-12-01 23.18.34.png](https://qiita-image-store.s3.amazonaws.com/0/8292/e2eacf9b-4065-ff96-1ae7-397b0ffda67b.png)


AppStoreに投稿されたユーザレビューを毎日メールで送ってくれます。また、自分のアプリが「おすすめ」に採り上げられた際や、Twitterなどで言及された際にも教えてくれます。めっちゃ便利です。

## アプリレビュー
http://appreviewtimes.com/

### Average App Store Review Times
![スクリーンショット 2014-12-01 23.24.22.png](https://qiita-image-store.s3.amazonaws.com/0/8292/8b91746b-4328-ae03-c6b1-38ea9ecae02c.png)


現在、アプリ審査に何日ぐらいかかるか？の __目安__ を教えてくれます。Twitterに投稿されたツイート等からデータを収集しているようです。

アプリ審査にかかった日数をハッシュタグ [#iosreviewtime](https://twitter.com/hashtag/iosreviewtime) 付きでツイートすることにより、自分もデータ収集に協力することができます。私も毎回ツイートするようにしてます。

## アプリアイコン

### MAKEAPPICON

http://www.makeappicon.com/

![スクリーンショット 2014-12-01 23.52.25.png](https://qiita-image-store.s3.amazonaws.com/0/8292/cd8129a5-3554-6930-fdbf-2998834a19ad.png)

1024x1024ピクセルの画像を放り込むと、アプリ申請に必要なすべてのアイコンサイズを生成してくれます。いつもお世話になってます。

### icon Drop

http://icondrop.net/

オシャレなアプリアイコンがたくさん紹介されており、とても参考になります。
AWS CloudFront用にSSL証明書をアップロードする


CloudFrontは便利なコンテンツ配信ネットワークですが、独自ドメインでSSL通信を行うには、AWSにSSL証明書をアップロードしなければいけません。アップロードにはAWSのコマンドラインインターフェースを用います。ホームフォルダにpemというフォルダを作り、そこに証明書、秘密鍵、中間証明書を置いて、場所を指定します。

```
aws iam upload-server-certificate --server-certificate-name {適当な名前} --certificate-body ~/pem/cert.pem --private-key ~/pem/key.pem --certificate-chain ~/pem/inter.pem --path /cloudfront/{適当な名前}/
```

すると以下のようなエラーが

```
A client error (MalformedCertificate) occurred when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.
```

ポイントは file:// を付けることでした。

```
aws iam upload-server-certificate --server-certificate-name {適当な名前} --certificate-body file://cert.pem --private-key file://key.pem --certificate-chain file://inter.pem --path /cloudfront/{適当な名前}/
```

証明書ファイルが置いてあるフォルダまで移動し、上記のコマンドを打ちました。これで証明書のアップロードができました。
file://を付ける点がはまりどころだったので、メモ代わりに残しておきます。
mPDF 1ページ目をLandscape（横向き）表示するときの注意


mPDFの1ページ目を横向きにする場合、用紙サイズに **-L** を付けないと横向きにならない。

```php:例1
$mpdf = new mPDF('ja', 'A4-L');
```

mPDF関数の第11引数（$orientation）で向きを指定することができるのに、それだけでは意味がない様子・・・。

ちなみに、2ページ目以降はAddPage関数の第1引数（$orientation）に **L**（Landscape：横向き）か **P**（Portrait：縦向き） を指定してあげればOK。

```php:例2
$mpdf->AddPage('L');
```

小一時間ハマったのでメモ。
sdeでavx512を使う

# このカレンダーについて
労力の最小化を目標としています。

# sdeでavx512を使う
さてまずは動作確認できる環境が欲しいのでsdeとgccを使って…て書こうとしたが、
http://syoyo.wordpress.com/2014/01/09/sde-gcc-4-9-%E3%81%A7-avx512-%E5%91%BD%E4%BB%A4%E3%82%92%E8%A9%A6%E3%81%99/

すでにsyoyoさんが書こうとしていた内容とほぼ同じものを書いていたのでリンクだけ貼っておく。

# (sdeとは関係無いけど)参考
https://software.intel.com/sites/landingpage/IntrinsicsGuide/
見やすいので使いましょう。

https://software.intel.com/en-us/intel-isa-extensions
まだ実装が世に出てないけど定義されてる命令の説明です。

https://gcc.gnu.org/wiki/cauldron2014?action=AttachFile&do=get&target=Cauldron14_AVX-512_Vector_ISA_Kirill_Yukhin_20140711.pdf
拡張された部分の解説など
Vagrant Share memo


* "Vagrant Cloud" の "Vagrant Share" を使えば秒速でWebアプリを公開できる。
* そして秒速で抹消できる。
* デモンストレーションには最適！

## 1. JOIN VAGRANT CLOUD

1. [Vagrant cloud](https://vagrantcloud.com/)
2. click "JOIN VAGRANT CLOUD"
3. input "Username" + "Email" + "Password" + "Password confirmation"
4. join now!

## 2. Vagrant setup

* [Vagrant setup](http://qiita.com/watanayu19700101/items/d4efc02007a62a3bdca5)

* vmにsshで繋いでapacheかnginxをインストールして起動

## 3. Log in to Vagrant Cloud

```
$ Vagrant login

# Vagrant Cloudのユーザ名とパスワードを入力
Username or Email: ＜username＞
Password (will be hidden):＜password＞
```

## 4. Share your Vagrant

```
$ Vagrant share

==> default: Detecting network information for machine...
    default: Local machine address: 192.168.33.10
    default: Local HTTP port: 80
    default: Local HTTPS port: disabled
==> default: Checking authentication and authorization...
==> default: Creating Vagrant Share session...
    default: Share will be at: gullible-panther-8668
==> default: Your Vagrant Share is running! Name: gullible-panther-8668
# これがURL
==> default: URL: http://gullible-panther-8668.vagrantshare.com
```

## 4. Browser　access

## 5. Exit

```
Ctrl + c
```
requirements.txtを分割する


ローカルの開発環境、開発コードの結合環境、商用環境など、1つのプロジェクトで環境ごとに複数の[Requirements File](https://pip.pypa.io/en/latest/reference/pip_install.html#requirements-file-format)を使いたいケースがあると思います。そんなときはファイルを分割しましょう。

…とこないだ知ったことをメモります。

# 手順
## Requirements Fileの保存用ディレクトリを作る

環境別のRequirements Fileを保存するためにディレクトリを作成します。

```bash
cd /project/root/directory
mkdir requirements
```


## これまでのファイルを共通ファイルにする

これまで使っていたrequirements.txtを共通ファイルとして置きましょう。

```bash
mv requirements.txt requirements/common.txt
```


## 各環境用のファイルを作成する

商用環境用のファイルの例。vi等々のエディタで`requirements/prod.txt`ファイルを作成します。`-r`オプションにより`common.txt`を取り込みます。

```python:requirements/prod.txt
# requirements for production
-r common.txt
# この下に商用環境専用のパッケージを列挙する
```

開発環境であれば`dev.txt`などのファイルを作ればよいでしょう。

```python:requirements/dev.txt
# requirements for development
-r common.txt
# この下に開発環境でしか使わないパッケージを列挙する
```


## requirements.txtの代わりを作る

herokuなど`requirements.txt`を直接参照するプラットフォーム向けに、エイリアスとなる`requirements.txt`を作成します。


```python:requirements.txt
# Mirrors prod
-r requirements/prod.txt
```


## 最終的なディレクトリ構造


```
.
├── requirements.txt
└── requirements
    ├── common.txt
    ├── dev.txt
    └── prod.txt
```

# 参考

* [How to customize a requirements.txt for multiple environments?](http://stackoverflow.com/questions/17803829/how-to-customize-a-requirements-txt-for-multiple-environments)
Stringクラスにひらがな・カタカナ変換をextensionする


## ひらがな・カタカナについて

- "ひらがな"とは、0x3041の"ぁ"から0x3096の"ゖ"とする
- "カタカナ"とは、0x30A1の"ァ"から0x30F6の"ヶ"とする
- 半角カタカナは無視

## コード

```swift:
extension String {
    func katakana() -> String {
        var str = ""
        
        // 文字列を表現するUInt32
        for c in unicodeScalars {
            if c.value >= 0x3041 && c.value <= 0x3096 {
                str.append(UnicodeScalar(c.value+96))
            } else {
                str.append(c)
            }
        }
        
        return str
    }
    
    func hiragana() -> String {
        var str = ""
        for c in unicodeScalars {
            if c.value >= 0x30A1 && c.value <= 0x30F6 {
                str.append(UnicodeScalar(c.value-96))
            } else {
                str.append(c)
            }
        }
        
        return str
    }
}

```

```swift:
var hoge = "ほげピヨ"
hoge.katakana()     //"ホゲピヨ"
hoge.hiragana()     //"ほげぴよ"
```
template間で変数を共有させる


Jadeのテンプレート内でページ固有の変数を使いたいとき、

```index.jade
- var path = "./"
extends /layout/_application
```

のように記述しても /layout/_application のテンプレート内ではpath変数は認識されない。

これを解決するためにはblockを用いる。

/layout/_application 内で、変数をimportするための
blockを置いておくことでテンプレートに変数を渡すことが可能となる。

```/layout/_application.jade
doctype html
block vars
html(lang="ja")
  head
    meta(charset="UTF-8")
    title タイトル
    link(rel="stylesheet", href="#{path}css/main.css", media="screen, print")
```

```index.jade
extends /layout/_application
block vars
  - var path = "../"
```
CocoaPods を OS X アプリ開発で使う

# はじめに

[OS X Advent Calendar](http://qiita.com/advent-calendar/2014/osx/about) を始めてみました。

OS X アプリ開発は、今のところ iOS アプリ開発ほどの人気はないようですが、今後はもう少し広がっていくような雰囲気も感じます。このため、OS X アプリを開発する場合の Tips がもっと集まったらいいな、という想いで始めました。

また、OS X アプリ開発に限らず、開発で OS X を使う場合の Tips がもっと集まったらいいな、という想いもあります。やっぱり Mac が好き。やっぱり OS X が好き。

このため、今回の OS X Advent Calendar は OS X アプリ開発に限定せず、テーマを広くして「OS X に関することなんでも」ということにしました。

まだ OS X Advent Calendar は参加者を募集していますので、ぜひご参加ください。

# CocoaPods を OS X アプリ開発で使う

今回は、CocoaPods を OS X アプリ開発で使う話をします。

CocoaPods は現状 Swift 非対応（Bridging Header を使うという手はある）で、アプリ開発が Objective-C から Swift に移行しつつある中、CocoaPods が今後どういう方向に進むかは何とも言えないところではありますが・・・。

CocoaPods は iOS アプリ開発では当然のように使われてきました。しかし、OS X アプリ開発では、昔ながらの外部ライブラリを手動で管理する方法が使われている場合も多いかと思います。

しかし、実のところ OS X アプリ開発でも簡単に使うことができます。Podfile の書き方は iOS の場合と同じで、`platform` 指定を `osx` にするだけです。

```
source 'https://github.com/CocoaPods/Specs.git'

platform :osx
xcodeproj 'Hoge.xcodeproj'

pod 'Hoge'
...
```

実際に使用している例として、[CotEditor の Podfile](https://github.com/coteditor/CotEditor/blob/develop/Podfile) も参考になるかと思います。

# OS X 向けの Pod を作る

通常、iOS 向けの Pod は、静的ライブラリとしてビルドされ、アプリにリンクされます。

OS X 向けもそれでもいいのですが、OS X アプリ開発で外部ライブラリを使う場合は framework の形で扱うのがより自然だと思います。したがって、OS X 向けの Pod は、framework としてビルドし、アプリにリンクする形にしたいです。

しかし実は、CocoaPods は framework の扱いはあまり上手ではありません。Xcode でのビルド時に framework をビルドしてリンクする、という形で workspace を生成してくれないのです。

では CocoaPods で配布されている OS X 向け Pod はどうなっているのか、と見てみると、実は多くは、ビルド済みの framework を単にコピーしてアプリにリンクする形になっています。まあ、リリース版 framework の配布の場合はそれもありかもしれませんが、自分で framework をいじって Pod として管理したいと思うと、少々面倒な感じになってしまいます。

そこで多少なりとも負荷を軽減するため、podspec 内の `prepare_command` で framework をビルドするという手を使っています（OgreKit の CotEditor modified 版の [OgreKit.podspec](https://github.com/coteditor/OgreKit/blob/8fc6f1e9f4166b1fe49cb5c6e27f3e2bd28c6ac7/OgreKit.podspec) から抜粋）。

```
s.prepare_command = <<-CMD
                      xcodebuild -target All
                      mv build/Default/OgreKit.framework .
                      CMD
```

Pod の更新時には、いったん Pods フォルダを削除して `pod install` しなおすことで framework がビルドされます。ちょっと面倒ではありますが、別プロジェクトで framework をビルドするよりは pod コマンド1つですむほうが、幾分かは楽であると思います。

# まとめ

以上、CocoaPods を OS X アプリ開発で使う場合に iOS と違う点について記述しました。
表データの処理にはCurrentRegionが便利

# はじめに

Excel VBAを書く時、CurrentRegionという非常に便利なAPIがあるのですが、
自分の周りには知っている人がいなかったので紹介します。

Excelでドキュメントが書かれる場合、やはり表形式になることが多いと思います。
したがって、VBAでも表データを処理することが少なくないでしょう。

そんな時便利なのが「CurrentRegion」です。

# CurrentRegion とは

正確には「RangeオブジェクトのCurrentRegionプロパティ」ですが、
これはざっくり言うと「表のRangeオブジェクトをいい感じに取得できるAPI」です。

実際にコードを見たほうが速いと思いますのでご覧下さい。

# サンプル１

次のような表データ（赤枠内）を処理するサンプルコードです。

![2014-12-01_21h03_06.png](https://qiita-image-store.s3.amazonaws.com/0/18659/fedd687d-4071-48cb-812f-f59432d5ad3f.png)

```vb:Main.bas
Option Explicit

Private Const SHEET_NAME As String = "Sheet1"
Private Const CELL_POS As String = "A2"

Public Sub Main()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets(SHEET_NAME)
    
    Dim tbl As Range
    Set tbl = ws.Range(CELL_POS).CurrentRegion
    
    Debug.Print "表の範囲 - " & tbl.Address
    
    Set tbl = tbl.Offset(1, 1).Resize(tbl.Rows.Count - 1, tbl.Columns.Count - 1)
    
    Debug.Print "表の範囲(リサイズ後) - " & tbl.Address
    
    Dim r As Range
    Dim c As Range
    For Each r In tbl.Rows
        Debug.Print "-----"
        For Each c In r.Columns
            Debug.Print c.Value
        Next
    Next
End Sub
```

```text:結果
表の範囲 - $A$2:$E$5
表の範囲(リサイズ後) - $B$3:$E$5
-----
 11 
 12 
 13 
 14 
-----
 21 
 22 
 23 
 24 
-----
 31 
 32 
 33 
 34 
```

以下がCurrentRegionを使っている箇所です。

```vb
Set tbl = ws.Range(CELL_POS).CurrentRegion
```

この場合、CELL_POSは「A2」なわけですが、
セル（A2）は「\$A\$2:\$E\$5」の範囲の表に含まれていると自動で判定され、
その範囲（\$A\$2:\$E\$5）のRangeオブジェクトを返してくれます。

仮にCELL_POSを「B3」のようにしても、同じ範囲のRangeオブジェクトが返却されます。

ただ、実際に処理したいのは赤枠の中（\$B\$3:\$E\$5）だけなのに、
これだとヘッダー部分もRangeオブジェクトに含まれてしまっています。

そこで、OffsetとResizeを使ってRangeオブジェクトの範囲を調整します。

```vb
Set tbl = tbl.Offset(1, 1).Resize(tbl.Rows.Count - 1, tbl.Columns.Count - 1)
```

これで目的の範囲（\$B\$3:\$E\$5）のRangeオブジェクトが取得できました。

あとはFor Eachなどを使って目的の処理を行えばいいですね！

# サンプル２

もう一つサンプルを挙げてみましょう。今度は表にタイトルがある場合です。

![2014-12-01_21h04_17.png](https://qiita-image-store.s3.amazonaws.com/0/18659/96bde99e-0702-4f25-cc22-c3d434c7fa82.png)

```vb:Main.bas
Option Explicit

Private Const SHEET_NAME As String = "Sheet2"
Private Const CELL_POS As String = "A2"

Public Sub Main()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets(SHEET_NAME)
    
    Dim tbl As Range
    Set tbl = ws.Range(CELL_POS).CurrentRegion
    
    Debug.Print "表の範囲 - " & tbl.Address
    
    Set tbl = tbl.Offset(2, 0).Resize(tbl.Rows.Count - 2, tbl.Columns.Count)
    
    Debug.Print "表の範囲(リサイズ後) - " & tbl.Address
End Sub
```

```text:結果
表の範囲 - $A$2:$D$6
表の範囲(リサイズ後) - $A$4:$D$6
```

セルがタイトルの位置（A2）を示しているとして、CurrentRegionで得られるのはタイトルを含んだ表の範囲（\$A\$2:\$D\$6）です。

そこで、見出しとヘッダの2行分を縮小してやればよいですね。

```vb
Set tbl = tbl.Offset(2, 0).Resize(tbl.Rows.Count - 2, tbl.Columns.Count)
```

# 最後に

表サイズが固定されている場合は範囲を決め打ちしてもよいと思いますが、
そうでない場合は、CurrentRegionが強力な武器になってくれることでしょう。
マカーの人が Xamarin について勘違いしていそうな５つのこと


　今年も始まりました [Xamarin Advent Calendar 2014](http://qiita.com/advent-calendar/2014/xamarin) 。
　思えば[昨年の Advent Calendar](http://qiita.com/advent-calendar/2013/xamarin) は、5名の方に参加していただいたものの「ほとんど俺」みたいな感じでしたが、今年はたくさん方に登録してもらえてとても嬉しいです。この1年の Xamarin の躍進ぶりを象徴していると思います。

　そんな Xamarin ですが、Microsoft とのパートナーシップが強力なおかげで、Windows系の開発者には広く知られて（そういう戦略なのは分かります）いますが、普段 Mac で iOS/Android アプリを開発してますみたいな人にはあまりリーチできていないかなあと思います。

　そこで初日の今日は、マカーの人が、勘違い・思い込んでいそうなことをいくつか払拭してみたいと思います。

## Q1. Xamarin を使うには、Visual Studio が必要なんでしょ？

A1: **必要ありません。** 「Xamarin Studio」という専用の統合開発環境で開発できます。私は Mac + Xamarin Studio で開発していますが、まったく問題を感じていません。
　また、iOSアプリのView部分は、Xcodeと同じ ``.storyboard`` ファイルを使用しますが、Xcode を使う必要もありません。Interface Builder と同じ（か部分的にはそれ以上）の機能を持つ [UIデザイナー](http://developer.xamarin.com/guides/ios/user_interface/designer/)が、Xamarin Studio には搭載されています。

## Q2. Xamarin を使うには、Windows が必要なんでしょ？

A2: **必要ありません。** Mac のみで完結します。むしろ Windows だけでは iOSアプリのビルドができないので、[Mac にリモート接続](http://developer.xamarin.com/guides/ios/getting_started/installation/windows/introduction_to_xamarin_ios_for_visual_studio/)する必要があり、これがしばしばトラブルになります。（主にデモでｗ
　Microsoft がアピールするとどうしても Windows+Visual Studioの説明になってしまいますが、それはまやかしです（言い切った！

## Q3. Xamarin社って、Microsoft の子分みたいなもんでしょ？

A3: Xamarin社は独立した企業であり、Microsoftとは対等な立場です（と私は思っています）。「Microsoft に買収されればいいのに」という声をよく聞きますが、私は独立した企業である現在のポジションが Xamarin社にとってベストだと思っています。Microsoftにとってはモバイル開発者にリーチする重要なピースであり、Xamarin社としても他にないマーケットです。
 また、今年の Xamarin の大イベント [Evolve2014](https://evolve.xamarin.com/) には、Microsoft の他に IBM, Amazon, Google, Salesforce, Dropbox と言った、他ではちょっと見られないような豪華なスポンサー群になりました。これも Xamarin の中立な立ち位置がなせる技だと思います。
あ、最近の [.NETのオープン化](http://www.publickey1.jp/blog/14/jitnet_core_rutimenet_framework.html) の流れは、Xamarin の CTO であり Monoプロジェクトの生みの親であるスーパーハッカー、[ミゲル・デ・イカザ](https://twitter.com/migueldeicaza)氏が少なからず関係していると思っています。

## Q4. C# 覚えるのしんどい

A4. **あなたはあの Objective-C を覚えたのでしょう？**

## Q5. Swift の方が C# よりイケてるじゃん？

A5. 後発である Swift がイケてるのは誰もが認めるところでしょう（かつて Java に対する C# がそうであったように）「Swift は関数型言語だ」という意見には、Xamarin は F# を提案します。[Xamarinには F# の MVP（勝手に”数学ガール”だと思っている）](http://blog.xamarin.com/introduction-to-f-with-xamarin/)も居ます(←訂正:Xamarinの人じゃなかったです)し、日本でも [F#+Xamarin でアプリ開発されている型](http://www.slideshare.net/kusokuzeshiki/xamarinmvvm-crossf)も居らっしゃいます。

# まとめ

　ちょっと宗教論争っぽくなりかけたので、ここまでにしておきます。強く主張したいのは、モバイルアプリ開発者なら iOS だけ、Android だけ知っていても良いアプリは作れないでしょう。両方のプラットフォーム、開発言語、哲学を理解する必要があります。 **Xamarin だから Swift を覚えなくていいという事はありません。** 
　
　でも、同じ（少なくとも同じような機能をもった）アプリの同じロジックを、異なる言語でそれぞれ書いて、その後数年保守し続ける現状は、本当に最適なのでしょうか？同じコード、あるいは同じバイナリが iOS/Android で動作すれば、保守費用は半分です（SIer みたいな言い方だｗ）。

　「共通にできる選択肢、あるいはプラットフォームの文化にあわせて別々にできる選択肢」を自然な形で提供するのが Xamarin、 Java も Swift も C# も覚えて C# で D.R.Y するのが Xamarin です。

　最後に宣伝ですが、 **Build INSIDER** というWebサイトで「Xamarin逆引きTips」という連載をしています。 

* [Xamarin逆引きTips - Build Insider](http://www.buildinsider.net/mobile/xamarintips)

　これは、.NET Framework は今まであまり使った事がない iOS/Android アプリ開発者をターゲットにしていて、説明もほぼ全てが Mac+Xamarin Studio を使って書いています。興味持ったら読んでもらえると嬉しいです。

　本日まったく登場しなかった Visual Studio や Windows Phone などの話は、明日以降登場すると思いますので、お楽しみに！それでは初日はこの辺で。
Rockhand でワンソースマルチサイズスプラッシュ画像生成


こんにちは，[@isseium](http://twitter.com/isseium) です．
この記事は， [Titanium Advent Calendar 2014](http://qiita.com/advent-calendar/2014/titanium) の2日目の記事になります！

Titanium で iPhone/Android 両対応のアプリを開発しているとき，スプラッシュ画像を大量に作る必要があって苦労した経験，誰もがありますよね！

なんてったって，こんなに作らないといけません．（[参考](http://docs.appcelerator.com/titanium/3.0/#!/guide/Icons_and_Splash_Screens))

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

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


スプラッシュウィンドウは比率が 320x480 だったり， 800x480 だったりまちまちで単純に拡大・縮小しては画像が伸びてしまいます．しかも配置がめんどくさい！！！（特にAndroid）

## やりたいこと

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

上のような1枚の正方形ファイルと背景色を指定したら下のようなスプラッシュウィンドウ用画像をコマンド一発で作る！

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

## Rockhand を使おう

Rockhand は，Titanium開発で発生しがち面倒な作業を自動化したユーティリティ群です．
といっても僕が個人的に作っているだけです．いまは ShellScript で書かれています．
https://github.com/isseium/rockhand


- ワンソースマルチサイズアイコン生成（ rockhand icon ）
- ワンソースマルチサイズスプラッシュ生成（rockhand splash）

の2つの機能しかありません．

いちおうTitaniumと同じApacheライセンスでゆるく配布しています．
fork & Pull Request 歓迎しています．

## 実行方法

### 動作環境

imagemagick さえ入っていればLinuxなどの環境でも動くと思います．

- alloy **1.3.1** ※諸事情で古いAlloyでのみ確認してます...上位でも大丈夫かと思いますが，近々更新したいです
- Mac OS X Merverics
- ImageMagick 6.8.9


### 実行方法

1. ベースとなるアイコンを用意します（透過png）
2. 実行します


```bash
$ ./rockhand splash <ベース画像> <Titaniumプロジェクトホーム>
```

例えば，images/defaults.png をベースに背景色が緑のスプラッシュ画像を生成するにはこんな感じになります．

```bash
./rockhand splash -b "#00FF00" images/default.png ~/repos/TiSample            
generating...  width=320        height=480      filename=/Users/issei/repos/TiSample//app/assets/iphone/Default.png     depth=72
generating...  width=640        height=960      filename=/Users/issei/repos/TiSample//app/assets/iphone/Default@2x.png  depth=72
generating...  width=640        height=960      filename=/Users/issei/repos/TiSample//app/assets/iphone/Default@2x.png  depth=72
（以下略）
```

とっても簡単ですね！

## Happy Titanium Programming!!

3日目は，[TitaniumMobile勉強記](http://h5y1m141.hatenablog.com/) でいつもお世話になっている [@h5y1m141](http://qiita.com/h5y1m141@github) さんです！


## おまけ

こちらもどうぞ！！

- [Node.jsでiOSのアプリに必要なアイコン画像をまとめて生成する](http://qiita.com/h5y1m141@github/items/239d3f583c673287334f)

<blockquote class="twitter-tweet" lang="ja"><p>Titanium アドベントカレンダーの最後に，「明日は <a href="https://twitter.com/h5y1m141">@h5y1m141</a> さんです！」と書いて，h5y1m141さんのqiitaリンク開いたら，自分がいま投稿しようとしている内容に似ていることが書かれていたときの顔をしています</p>&mdash; KOMATSU Issei (@isseium) <a href="https://twitter.com/isseium/status/539341584202883072">2014, 12月 1</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
Jadeでエスケープせずに変数展開


コンテンツは外部でjson管理しておいてhtmlには直接書かず、
ビルドする際にのみjsonからhtmlに展開するというやり方を個人的にやることが多いのだが、

変数展開の際にメタ文字がエスケープされないようにする方法について。

今までのJade記法の例 (僕の場合)

```index.jade
p.character_name #{character.name}
```

こういうふうにして変数展開していた。しかしこれではメタ文字がエスケープされてしまう。

エスケープされないようにするには、

```index.jade
p.character_name!= character.name
```


という風に書く。
ちなみに以前の書いたけど、属性値も同様に

```index.jade
p(data-url!="#{url}")
```

というように書けばエスケープされない。
node webkit めも


## 概要

html5 + CSS3 + JS で各OSで動くGUIアプリが作れる。

[公式ページ](https://github.com/rogerwang/node-webkit)

`npm install -g nodewebkit`

すると`nodewebkit`コマンドが使えるようになる。

## 使い方

package.jsonとindex.htmlを用意し、


```package.json
{
	"name": "myApp",
	"main": "index.html"
}
```

の様に設定し、index.htmlをそれなりに書く。
`nodewebkit`と唱えると、アプリが起動するはず。

gulp.jsなどで使いたければ、

```gulpfile.js
var gulp = require('gulp'),
	exec = require('child_process').exec;

gulp.task('run', function () {
	exec('nodewebkit');
});

```

のようにするとよい。

## Native UI API

GUIらしい操作や設定についてはNative UI APIを使う。
マニュアルは[ここ](https://github.com/rogerwang/node-webkit/wiki/Native-UI-API-Manual)にある。

TypeScriptユーザーへの型定義ファイルも用意されているので、
`tsd query node-webkit -s -a install`
で導入してありがたく使いましょう。

## 参考
[node-webkitを触ってみた](http://umi-uyura.hatenablog.com/entry/2014/06/28/012308)

[Web制作者でもネイティブアプリが作れる！node-webkitを使ってみよう。](http://liginc.co.jp/web/programming/node-js/129596)
【Lua】tarantool のご紹介

# tarantoolのご紹介

tarantoolというのがあって、触ってみたかったので触ってみる。

http://tarantool.org/

Key-value storeとapplicationサーバが
合わさったフレームワークのようだ。

# 本当はMacOS X上でやりたかったが...

MacOS Xであれば、homebrewでtaranntoolをビルドできるらしかった。
が、この記事を書いている時点では、ビルドが通らない！
なんでだって思ったらPRが出てた...

[Mac OS support #638](https://github.com/tarantool/tarantool/issues/638)

# Ubuntuで環境を構築

[Vagrant](https://www.vagrantup.com/) + [bento](https://github.com/opscode/bento)を利用し、Ubuntuで環境を構築することにした。

## bentoプロダクトのVagrant.boxを追加する

bentoプロダクトのVagrant.boxを追加する

```
> vagrant box add bento-Ubuntu-14.04 http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_ubuntu-14.04_chef-provisionerless.box 
```

暫し待つ

## ansibleのインストール

ansibleのインストールをする。

```
> brew install ansible
```

## Vagrantのインストール

バイナリファイルを公式から落としてくると楽。

https://www.vagrantup.com/downloads.html

## Vagrantの環境をgit clone

環境整えるのがめんどくさすぎるので
ansible-playbookとVagrantfileを同梱した。

https://github.com/futoase/environment-for-tarantool


## Vagrant環境の立ち上げ・provisioning

リポジトリをgit clone

```
> git clone git@github.com:futoase/environment-for-tarantool.git
```

以下のコマンドでVagrant box立ち上げ、provisioning開始

```
> cd environment-for-tarantool
> vagrant up --provision
```

手動でtarantoolをインストールし、サンプルを動かしたい場合、
luarockのリストに[tarantool/http](https://github.com/tarantool/http/)を追加しないといけない。

```
> luarocks --local install http://rocks.tarantool.org/http-scm-1.rockspec
```

# tarantoolのテストをする

tarantool.orgのトップにあるサンプルを実行してみる

```lua:tarantool.lua
#!/usr/bin/env tarantool

box.cfg{}
hosts = box.space.hosts
if not hosts then
  hosts = box.schema.create_space('hosts')
  hosts:create_index('primary', { parts = {1, 'STR'} })
end

local function handler(self)
  local host = self.req.peer.host
  local response = {
    host = host;
    counter = hosts:inc(host);
  }
  self:render{ json = response }
end

httpd = require('http.server')
server = httpd.new('0.0.0.0', 8080)
server:route({ path = '/' }, handler)
server:start()
```

## サーバの起動

先ほどのファイルをVagrantfileのあるディレクトリに移動し、
サーバの起動を行ってみる。

```
> cd environment-for-tarantool
> vagrant ssh
> cd /vagrant
# vagrant にログイン後、taranatool.luaを/vagrant以下に作成する
> chmod +x ./tarantool.lua
> ./tarantool.lua
```

## 動作確認

リロードするとカウンターが増えていく。

![Screen Shot 2014-12-01 at 20.56.13.png](https://qiita-image-store.s3.amazonaws.com/0/3985/ea0e0dc4-e9ad-da49-a2a1-f392f53bd1c2.png)

# 気になる点

[tarantool lua package](http://tarantool.org/doc/user_guide.html#lua-and-packages)
をみると、[YAML](http://tarantool.org/doc/user_guide.html#sp-yaml)や[JSON](http://tarantool.org/doc/user_guide.html#sp-box-cjson)、他[MsgPack](http://tarantool.org/doc/user_guide.html#sp-msgpack)や[uuid](http://tarantool.org/doc/user_guide.html#sp-box-uuid)などウェッブサービスを実現するためのサーバに必要となりそうなライブラリが同梱されている。

これらを使ってテストしたかったが、
環境を整えている時点で終わってしまった... orz
Swift メソッドの外部引数名【メモ】

#Swift メソッドの外部引数名

Swiftのメソッド呼び出しで、引数名を書くとき、外部引数名を指定できることを知らなかったのでメモ。
特に第1引数名を書けないのが読みにくいなあと感じていたので、制御しやすくなってありがたいです。



##外部引数名を指定すると　

```swift:メソッド定義
func dispAdd(#num1:Int, num2:Int){
    println(num1 + num2)
}
```

メソッド引数の先頭の引数名（この場合だとnum1）の前に、**#** をつけると、外部からこのメソッドを呼び出すときに、以下のように記述できる。
　

```swift:メソッド呼び出し
    dispAdd(num1:2, num2:3)
```

```vim:【実行結果】
5
```

##外部引数名を指定しないと
もちろん、外部引数名を指定しなくてもメソッドの使い方が変わるわけではないのだけれど、**#** なしたどメソッドの第1引数名は呼び出すときに書けない。
（おそらくObjective-Cからの名残で、第1引数名は通常、メソッド名に含めるようになっているから？）

```swift:メソッド定義
func dispAdd(num1:Int, num2:Int){
    println(num1 + num2)
}
```
```swift:メソッド呼び出し（第1引数名num1を書けない）
    dispAdd(2, num2:3)
```

--
なので、以下のようにメソッド名を工夫しないと、一つ目の引数の意味が呼び出し時にわかりにくい。

```swift:メソッド呼び出し
    dispAddWithNum1(2, num2: 3)
    dispAddWithNum(2, addNum: 3)
```
※Objective-Cで慣れたけれど、個人的にはやはり違和感がありました。

##外部引数名を省略させるには

第1引数も第2引数もどちらも引数名を省略するには（Javaっぽい呼び出し）
2番目以降の引数名の前に **_** をつけると、呼び出し時に引数名を書けなくなる。

```swift:メソッド定義
func dispAdd(num1:Int,_ num2:Int){
    println(num1 + num2)
}
```
```swift:メソッド呼び出し（第1,第2どちらも書けない）
    dispAdd(2, 3)
```

　
参考：[Developers IO:Swift / デザインパターン](http://dev.classmethod.jp/referencecat/ios8-swift-design-pattern/)
gulp-compassの設定（暫定版）


##目的

gulp-compassを使ってcssを生成させたいけど、よくわからなかったので調べて自分の目的を満たす程度の説明を書き残そうと思う。


##前提

gulpfile.jsは、次のように書けばいいというのは難しくないと思う。必要なものをrequireして、compassというタスクを登録。

src内にあるscssファイルをコンパイルしてdistに放り込みたいと思う。

```gulpfile.js
var gulp = require('gulp'),
    plumber = require('gulp-plumber'),
    compass = require('gulp-compass');

gulp.task('compass', function () {
  gulp.src(["src/**/*.scss"])
    .pipe(plumber())
    .pipe(compass({
      //　ここに設定を書く
    }))
    .pipe(gulp.dest('./dist'));
});
```

設定する項目はconfig_file, project, css, sassの項目。

##したこと

config_fileは適当にそこらからコピペ。もしくは、`compass init`で作られるものとかを拾ってくる。他と被らないようにファイル名をcompass_config.rbとしておく。
gulpfileが置いてあるところから見てどこどこのファイル・ディレクトリを…ってしたいので、gulpfileのあるディレクトリをprojectに設定。
cssはいきなり目的の場所に置くのは気持ち悪いので、tmp/sccあたりを指定。sassはソースのあるところを指定するのでsrcを登録。
.sass-cacheというディレクトリができるので、.gitignoreに登録しておく。

結果、次のように書いた。

```gulpfile.js
    .pipe(compass({
      config_file: 'compass_config.rb',
      project: __dirname,
      css: 'tmp/css',
      sass: 'src'
    }))

```

まだ設定に雑なところがあるけど、必要になるまで気にしない。