OmniAICreator/Qiita-1.07M huggingface dataset:
tmuxでOSXのクリップボードと連携

tmux、バージョン1.8からこれでいけるようになっていたとのこと

```bash
$ brew install reattach-to-user-namespace
```

設定に下記を追加

```tmux.conf
# Setup 'v' to begin selection as in Vim
bind-key -t vi-copy v begin-selection
bind-key -t vi-copy y copy-pipe "reattach-to-user-namespace pbcopy"

# Update default binding of `Enter` to also use copy-pipe
unbind -t vi-copy Enter
bind-key -t vi-copy Enter copy-pipe "reattach-to-user-namespace pbcopy"
```

`set-option -g prefix C-t`しているのでC-gなら`-t`のところを`-g`でできます。

参考：[http://robots.thoughtbot.com/tmux-copy-paste-on-os-x-a-better-future](http://robots.thoughtbot.com/tmux-copy-paste-on-os-x-a-better-future)
参考：[http://qiita.com/kkabetani/items/e37ac1e4e0b53c418a35](http://qiita.com/kkabetani/items/e37ac1e4e0b53c418a35)

これで`C-t`でコピーモードに入って`v`で選択範囲を指定して
`enter`でクリップボードへコピーされるようになります。

知らなかった。ライフチェンジングだ。
さくらVPSで設定したこと

さくらVPSを導入したときにやったこと一覧を。
#ハマったら
SSHやアクセス制限してると自分がログインできなくなることがしょっちゅうあるので（自分だけかも）。
`https://secure.sakura.ad.jp/vpscontrol/`
ここから直ログインして設定し直す。
#OS入れ替え
上記コントロールパネルでUbuntuに入れ替え。
#パッケージマネージャ
`aptitude`コマンドでパッケージを操作する。
##パッケージリスト更新
`aptitude update`
副作用は無いので気軽にやる。
##インストールされているパッケージのアップグレード
`aptitude full-upgrade`
パッケージを最新版にする。たぶん大丈夫だけど、不具合が起きる可能性はある。
##パッケージの検索
`aptitude search キーワード`
##インストールされているパッケージ一覧
`dpkg -l`
aptitudeではできない？
##特定のパッケージ情報
`aptitude show パッケージ名`
#SSH設定
##ログ
` /var/log/auth.log`
`tail -f /var/log/auth.log`などとやって監視する。不正ログインがたくさん来るのでRSAアクセスやdenyhostsなどで対処するとよい。
##RSAアクセス
公開鍵アクセス（だっけ？）パスワードログインよりずっと安全。
###鍵作成
ユーザーのhome(`cd`で来るところ)で鍵を作る。

```
ssh-keygen -t rsa
cd .ssh
mv id_rsa.pub authorized_keys
```

一緒に出来るid_rsaはSFTPなどで自分のパソコンに持ってくる。
###設定
/etc/ssh/sshd_configを編集

```
PermitRootLogin no
PasswordAuthentication no
UsePAM no
```

ルートログイン禁止、パスワードログイン禁止、PAM？
###sshd再起動
`service ssh restart`
##denyhostsによるアクセス拒否
RSA鍵はめんどくさい。安全度は落ちるが、denyhostsを使うと不正ログインを拒否できる。
###インストール
`sudo aptitude install denyhosts`
###設定
`/etc/denyhosts.conf`に設定する。

```
PURGE_DENY = 4w
PURGE_THRESHOLD = 2
DENY_THRESHOLD_INVALID = 3
DENY_THRESHOLD_VALID = 3
DENY_THRESHOLD_ROOT = 1
HOSTNAME_LOOKUP=NO
ADMIN_EMAIL =
```

`/etc/hosts.deny`に拒否ホストが自動で追加される。自分自身のIPが追加されてしまった場合は直ログインして消す。
##自動ログイン
ターミナルから自動ログインしたい。
###TereTermの場合
[TeraTerm](http://sourceforge.jp/projects/ttssh2/)
以下のようなマクロを書く。

```
; sakura login
connect 'xxx.xxx.xxx.xxx /ssh /2 /auth=password /user=[user] /passwd=[pw]’
setsync 1
wait '~$’
sendln 'sudo su -‘
wait 'password for’
sendln ‘[pw]'
```

xxx.xxx.xxx.xxxはIPアドレス
[user]はユーザー名
[pw]はパスワード

拡張子を.ttlにしてTera Term Macro実行ファイルに関連付けておくとよい。
###Macの標準ターミナルの場合
対話式にコマンドを実行できるexpectコマンドを使う。

```
#!/usr/bin/expect
set timeout 10
spawn ssh -l [user] xxx.xxx.xxx.xxx
expect "password:"
send "[pw]\n"
expect ":~$"
send "sudo su -\n"
expect "[user]:"
send "[pw]\n"
interact
```

xxx.xxx.xxx.xxxはIPアドレス
[user]はユーザー名
[pw]はパスワード

どちらもパスワード直書きのいきなりrootにsuしてセキュリティ的にはザルなので気をつけて。
#LAMP
ApacheとPHPとMySQLを導入。
##インストール
`aptitude install apache2 php5 mysql-server php5-mysql phpmyadmin`
##ドキュメントルート
`/var/www`
##MultiViewsを切る
`/etc/apache2/conf.d/site-available`で`-MultiViews`を追加。
これをやらないと拡張子無しのファイルに勝手に拡張子をつけるのでいろいろ面倒。
##phpmyadminの安全性を高める
phpmyadminフォルダを推測されにくい名前にリネームしておくとよい。
リネームしたら`/etc/apache2/conf.d/phpmyadmin.conf`のaliasも同じ名前に変更しておく。
##MySQL
設定ファイルは`/etc/mysql/my.cnf`

```
default-character-set=utf8
skip-character-set-client-handshake
```

##php.ini
`/etc/php5/apache2/php.ini`
##Apache
ログ `/var/log/apache2/access.log`
エラーログ `/var/log/apache2/error.log`
テトロミノ認識(2012.10.6の過去問)


1日1個 @nabetani さんの作った問題を解く、どう書くAdventCalendarの6日目です。

今日の問題は http://nabetani.sakura.ne.jp/hena/ord4tetroid/ にあります。

```hs
module Doukaku.Tetromino (solve) where
import Data.Char (ord)
import Data.List (sort)
import Data.List.Split (splitOn)

type Pos = (Int, Int)

solve :: String -> String
solve = (: []) . check . normarize . parse

parse :: String -> [Pos]
parse = map (\ (x:y:_) -> (num x, num y)) . splitOn ","
  where
    num c = ord c - ord '0'

normarize :: [Pos] -> [Pos]
normarize poss = sort . (if xmax - xmin > ymax - ymin then trans else id) . move $ poss
  where
    minmax xs = (minimum xs, maximum xs)
    (xmin, xmax) = minmax . map fst $ poss
    (ymin, ymax) = minmax . map snd $ poss
    move ps = map (subtract xmin >< subtract ymin) $ ps
    trans ps = map (\ (x, y) -> (y, x)) $ ps
    (><) f g (x, y) = (f x, g y)

check :: [Pos] -> Char
check [(0, 0), (0, 1), (0, 2), (0, 3)] = 'I'
check [(0, 0), (0, 1), (1, 0), (1, 1)] = 'O'
check [(0, 0), (0, 1), (0, 2), (1, 0)] = 'L'
check [(0, 0), (0, 1), (0, 2), (1, 1)] = 'T'
check [(0, 0), (0, 1), (0, 2), (1, 2)] = 'L'
check [(0, 0), (1, 0), (1, 1), (1, 2)] = 'L'
check [(0, 1), (1, 0), (1, 1), (1, 2)] = 'T'
check [(0, 2), (1, 0), (1, 1), (1, 2)] = 'L'
check [(0, 0), (0, 1), (1, 1), (1, 2)] = 'S'
check [(0, 1), (0, 2), (1, 0), (1, 1)] = 'S'
check _ = '-'
```

端に寄せて縦列の方が長い状態にしてソートするという正規化をして、後は力技のパターンマッチです。今日はコメント不要ですね。
foreverメモ

[forever](https://github.com/nodejitsu/forever)はNode.jsのデーモン化ツール。
[nodemon](https://github.com/remy/nodemon)のほうが高機能っぽい？
#インストール
`npm install forever -g`
npmはNode.jsのパッケージマネージャ。-gはグローバルインストール。付けないとアプリごとのローカルインストールになる。
#使い方
##起動
`node app`
の代わりに
`forever -w start app.js`
-wはファイルの変更を監視して自動的に再起動。便利。
##現在動いているプロセス表示
`forever list`
##ログ表示
`forever logs app.js`
##停止
`forever stop app.js`
RadStudio XE4のHelpにてWe are sorryが出るときの対処方法

[Delphi Advent Calendar 2013](http://qiita.com/advent-calendar/2013/delphi) 12/06 の記事です。

RadStudioなどのIDEを使用しているなかで、個人的によく使うのがヘルプです。最近、そのヘルプに関して遭遇した不具合とその対応を紹介したいと思います。

## 環境
もしかしたらバージョンなどによってそもそもの不具合が生じないかもしれません。
試した環境は以下の通りです。
- Windows7 Professional (32bit)
- RadStudio XE4 Update1適用済み (ただし、XE2からupdateしたもの) 
- IE 9 (version 9.0.22)


## 症状
MSDN関連のヘルプがRadStudioのHelp機能から閲覧できません。

以下の手順で症状が発生します。

1. RadStudio XE4のヘルプにて「検索」タブにて検索をする。
1. SHGetSpecialFolderLocation
で検索すると、「MSDN オンライン(英語)」のカテゴリにて100個ほど検索結果が出てくる。
1. そのリストのうち、
SHGetSpecialFolderLocation function(Windows)
を選択すると、
「We are sorry. The page you requested cannot be found」
(下の画像)となる。
ぱっと見たところ、ヘルプが見つからないと思えてしまう。

![WeAreSorry.png](https://qiita-image-store.s3.amazonaws.com/0/32870/d2a4ad17-de4a-5ea6-b2b9-3029d49acb31.png)

実はwebページ自体は本来のリンク先に実在しているようで、なぜかヘルプからは見えない状態なのです。
試しに「ショートカットのコピー(T)」にてURLアドレスをコピーしたものをIE9のブラウザのURL入力欄に入れると、問題なく表示されます。

## 対応方法
「新しいウィンドウで開く」を使うことで、ヘルプがきちんと表示されるようになります。

SHGetSpecialFolderLocation function(Windows) の上において、右クリック、「新しいウィンドウで開く(N)」を選択する。こうすると、新しいタブに説明ページがきちんと表示されます。


### 補足1
自分の環境では、APIの種類によって、「We are sorry ...」が出るものと出ないものがありました。
SHGetFolderPath はきちんと見れ、SHGetKnownFolderPathでは「We are sorry...」が表示されます。

### 補足2
「新しいウィンドウで開く(N)」にて表示できるようになったページは、「We are sorry..」にならなくなります。PCの再起動後には、また「We are sorry...」になるような感じですが、再現条件はいまいちわかりません。

### 補足3
設定を変更することで、回避できるなら、その方法を知りたいものです。
Project Euler No. 9


# Problem

> A Pythagorean triplet is a set of three natural numbers, a < b < c, for which, $a^2 + b^2 = c^2$. For example, $3^2 + 4^2 = 9 + 16 = 25 = 5^2$. There exists exactly one Pythagorean triplet for which $a + b + c = 1000$. 
> 
> Find the product $abc$.

# Code in Haskell

```haskell:Euler_009.hs
module Main where

stream = [ (a,b,1000-(a+b),a*b,a*b*(1000-a-b))
           | a<-[1..500], b<-[1..500], a<b, b<(1000-a-b) ]
isPythTriple (a,b,c,d,e) = d == 1000*(500-c)


main = print answer
  where answer = head $ filter isPythTriple stream
```

# Answer
3******0
Project Euler No. 8


# Problem

> Find the greatest product of five consecutive digits in the 1000-digit number.
> 
> $73167176531330624919225119674426574742355349194934$
> $96983520312774506326239578318016984801869478851843$
> $85861560789112949495459501737958331952853208805511$
> $12540698747158523863050715693290963295227443043557$
> $66896648950445244523161731856403098711121722383113$
> $62229893423380308135336276614282806444486645238749$
> $30358907296290491560440772390713810515859307960866$
> $70172427121883998797908792274921901699720888093776$
> $65727333001053367881220235421809751254540594752243$
> $52584907711670556013604839586446706324415722155397$
> $53697817977846174064955149290862569321978468622482$
> $83972241375657056057490261407972968652414535100474$
> $82166370484403199890008895243450658541227588666881$
> $16427171479924442928230863465674813919123162824586$
> $17866458359124566529476545682848912883142607690042$
> $24219022671055626321111109370544217506941658960408$
> $07198403850962455444362981230987879927244284909188$
> $84580156166097919133875499200524063689912560717606$
> $05886116467109405077541002256983155200055935729725$
> $71636269561882670428252483600823257530420752963450$

# Code in Haskell

```haskell:Euler_008.hs
module Main where

rawdigits =
	  "73167176531330624919225119674426574742355349194934\
	  \96983520312774506326239578318016984801869478851843\
	  \85861560789112949495459501737958331952853208805511\
	  \12540698747158523863050715693290963295227443043557\
	  \66896648950445244523161731856403098711121722383113\
	  \62229893423380308135336276614282806444486645238749\
	  \30358907296290491560440772390713810515859307960866\
	  \70172427121883998797908792274921901699720888093776\
	  \65727333001053367881220235421809751254540594752243\
	  \52584907711670556013604839586446706324415722155397\
	  \53697817977846174064955149290862569321978468622482\
	  \83972241375657056057490261407972968652414535100474\
	  \82166370484403199890008895243450658541227588666881\
	  \16427171479924442928230863465674813919123162824586\
	  \17866458359124566529476545682848912883142607690042\
	  \24219022671055626321111109370544217506941658960408\
	  \07198403850962455444362981230987879927244284909188\
	  \84580156166097919133875499200524063689912560717606\
	  \05886116467109405077541002256983155200055935729725\
	  \71636269561882670428252483600823257530420752963450"

breakup [] = []
breakup (x:xs) = [x]: breakup (xs)

sproduct n [] = []
sproduct n a@(x:xs)
  | (length a) < 5 = 0 : sproduct n xs 
  |otherwise = (product (take n a)) : sproduct n xs

digits = map (read :: String -> Integer) (breakup rawdigits)

main = print answer
  where answer = maximum (sproduct 5 digits)
```

# Answer

4***4

# Comments

複数行に渡る文字列リテラルの表記法を探すのが一番の難関だったような……Cとは違うのね。というか、わりと新しい言語なのにヒアドキュメントがないのはなんでなんだぜ？　←　情弱
Project Euler No. 7


# Problem

> By listing the first six prime numbers: $2, 3, 5, 7, 11, 13$, we can see that the 6th prime is $13$.
> 
> What is the 10,001st prime number?

# Code in Haskell

```haskell:Euler_007.hs
module Main where

--有名だが凄まじく非効率的

--primes = 2:(sieve [3,5..])
--sieve (x:xs) = x:(sieve [ a | a<-xs, mod a x /= 0])


--Richard BirdによるSieve of Eratosthenes

primes = 2:(section [3..] composites)
  where
    composites = union [multiples p |p<-primes]
    multiples n = map (n*) [n..]

section (x:xs) (y:ys)
  | x < y = x : (section xs (y:ys))
  | x == y = section xs ys
  | x > y = section (x:xs) ys 

union = foldr merge []
  where
    merge (x:xs) ys = x:merge' xs ys
    merge' (x:xs) (y:ys)
      | x < y = x : merge' xs (y:ys)
      | x == y = x : merge' xs ys
      | x > y = y : merge' (x:xs) ys

main = print answer
  where answer = primes!!10000
```

# Answer
1****3

# Comments

有名なsieveの1行コードは恐ろしく非効率的である、ということも今回初めて知ったという安定の情弱ぶりである。この古典的な1行コードをボコっている、Melissa O'Neilによる、[sieveはlist構造ではなくpriority queueで実現しろ（大意）](http://www.cs.hmc.edu/~oneill/papers/Sieve-JFP.pdf)、という論文は勉強になりました。Priority Queueとか初めて知った情弱です。リストがどうしても時間的に不利なのはしょうがないよね。コードにあるのは、O'Neilの論文に掲載されていた、Richard Bird大先生による「エラトステネスの篩」をあくまでリストで実現したもの（論文ではお前らみんなリストが好き過ぎ、と軽くdisられている）。

まとめ：Data.Numbers.Primes パッケージから素数の無限リスト(Primes)と素数性述語(isPrime)使え。
Rails4 で spork を動かすと`uninitialized constant ActiveModel::Observing (NameError)`になる時の対処法

Rails 4.0 でSporkを動かすと uninitialized constant ActiveModel::Observing (NameError) と出る - Qiita [キータ]
http://qiita.com/kimihito_/items/74342a3be0f828610536

ここに書いてあるとおりなんですが、
`gem search spork --pre` したら `1.0.0rc3` じゃなくて `1.0.0rc4` が出てたのでそっちを入れました。

Gemfile に `gem 'spork', '1.0.0rc4'`と書いて `bundle update spork` すればOK。
Project Euler No. 6


# Problem

> The sum of the squares of the first ten natural numbers is,
> $1^2 + 2^2 + ... + 10^2 = 385$
> The square of the sum of the first ten natural numbers is,
> $(1 + 2 + ... + 10)^2 = 552 = 3025$
> Hence the difference between the sum of the squares of the first ten natural numbers and the square of the sum is $3025 − 385 = 2640$.
> 
> Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum.

# Code in Haskell

```haskell:Euler_006.hs
module Main where

--総和の自乗と自乗の総和の差についての漸化式
diffSqr 0 = 0
diffSqr n = (n-1)*(n^2) + diffSqr (n-1)

main = print answer
  where answer = diffSqr 100
```

# Answer

2******0
Emacsでユーザ定義関数の説明を取得する機能作りました


PHPである程度の規模のシステムをいじっていたら、関数名から処理は分からないけど、コメントはメモ程度に書いてあるって状況にもよく遭遇しました。
それらをgtagsでファイルを移動しながら何度も確認しにいったら非常に時間がかかったので、呼出元から取得できるget-user-comment.el(α版)を作りました。
![get-user-comment.el](http://cdn-ak.f.st-hatena.com/images/fotolife/s/sanryuu/20131206/20131206020004.gif)
http://d.hatena.ne.jp/sanryuu/20131206/1386266196
Keynoteに美しくスニペットを貼る


プレゼンテーションを作ってて、綺麗にsyntax-highlightingさせたい！という需要は高いはず

![Screen Shot 2013-12-06 at 01.52.02 .jpg](https://qiita-image-store.s3.amazonaws.com/0/10009/7eca6357-3de8-e84c-9fbc-daeeda36d639.jpeg "Screen Shot 2013-12-06 at 01.52.02 .jpg")

# Pygmentsを使う

**Pygments**という、syntax-highlightingを簡単に生成できるPython製のライブラリがあるのですが、それを使うと簡単に生成できる

## Pygmentsのインストール

```shell
pip install pygments
```

or

```shell
easy_install pygments
```

## pygmentizeを使ってハイライト

**Pygments**には、`pygmentize`というCLIが付属しているので、それを使ってやると、shellから簡単に装飾できる。

[Pygments — Documentation — Command Line Interface](http://pygments.org/docs/cmdline/ "Pygments — Python syntax highlighter")

Keynoteに貼り付けるためには、リッチテキストで書き出してやれば良い

```shell
pygmentize -f rtf my/beautiful/code.py | pbcopy
```

必要に応じて`-l`オプションでLexerとして、言語を指定できる。通常は指定しなくても拡張子から自動判別してくれるっぽい。

対応言語は[こちら](http://pygments.org/languages/ "Pygments — Python syntax highlighter")

## Keynoteに貼り付ける

上記のコマンドを実行すると、すでにクリップボードにハイライトされたソースコードが格納してあるので、あとはKeynoteにペーストするだけ。

![Screen Shot 2013-12-06 at 01.58.47 .jpg](https://qiita-image-store.s3.amazonaws.com/0/10009/0663e020-af25-c715-360c-d4c88e95eda4.jpeg "Screen Shot 2013-12-06 at 01.58.47 .jpg")

美しい。

適宜、文字サイズや背景色を変更してください。

## ちなみに

クリップボードにあるコピーしたスニペットをそのままハイライトさせたい場合は、`pbpaste`から流し込んでやるだけで良くて、さらにお手軽です

```shell
pbpaste | pygmentize -f rtf -l python | pbcopy
```
knockout.jsでそこそこ多めのデータセットを扱う際の注意点

## はじめに
クライアントサイドMVVMフレームワークであるknockout.jsに関する話題。
数百〜数千件のデータを扱うときの注意点・ハマりどころについて。

## ObservableArray
配列の監視を行う`ObservableArray`を用いる場合に、こんな処理を書くとパフォーマンスは著しく低下する。数百件のデータを扱うのに10秒近くかかる。

```js
var ViewModel = function() {
  this dataset = ko.observableArray([]);

  this addDataset = function(items) {
      var i;
      var length = items.length;
      for (i = 0; i < length; i++) {
          dataset.push(new Result(items[i])); // ここがボトルネック
      }
  };
};
```

ここでの`dataset.push()`はknockoutが提供するメソッドで、jsの標準関数と同等の働きをしつつ、リスナに対して変更を通知する（ちなみにdatasetはあくまで関数である）。この書き方では１件１件pushされる度に通知が飛ぶために、パフォーマンスは著しく下がる。オブジェクトを生成して１件１件配列に突っ込んでいるのだからもちろん遅いのだが、ドキュメントをさらっと読んだだけだとうっかりハマってしまうので注意。

knockoutの挙動で「?」となったら、ソースコードを見てみると案外すぐ分かったりする。
（今回は[この辺](https://github.com/knockout/knockout/blob/f80f37800045edd2bbdb2b3510d9dda9822dfe11/src/subscribables/observableArray.js#L103)）

これを改善するためには、datasetの変更を1度で済ませる必要がある。通知自体は、`observable.valueHasMutated()`関数によって行われるので、このような書き方が考えられる。参照を持つ配列に一度渡してから最後に通知する方式だ。

```js
var ViewModel = function() {
  var self = this;

  this dataset = ko.observableArray([]);

  this addDataset = function(items) {
      var underlyingArray = self.dataset();
      var i;
      var length = items.length;
      for (i = 0; i < length; i++) {
          underlyingArray.push(new Result(items[i]));
      }
      self.dataset.valueHasMutated();
  };
};
```

## kncokout.utilsとapply()を用いる

もっとシンプルな方法は、knockout.utils内にある便利な関数を使うことだ。

```js
var ViewModel = function() {
  var self = this;
  this dataset = ko.observableArray([]);

  this addDataset = function(items) {
    var newItems = ko.utils.arrayMap(items, function(item) {
      return new Result(item);
    };
    self.dataset.push.apply(self.dataset, newItems);
  };
};
```

大量のデータを配列に追加してViewに通知するときには、通知回数について意識すべきである。このような場面にはよく遭遇するので、覚えておきたい。
groonga-databse-inspectを使ってMilkodeのデータ使用量を分析する

Groongaの夕べ4の懇親会にて、

    (質問者様) Milkodeって大体容量どれ位使うの？
    (私) え？(ちゃんと測った事無いぞー)

ということがあったので、しっかりと答えられるようにしておこうと思いました。Rroonga3.1.0からgroonga-database-inspectというコマンドが追加されたのでそれを使って調べてみます。

先に結論を書いてしまうと登録したいパッケージの2.5倍位でした。どうやって調べたかを今から説明します。

[[本文へ]](http://ongaeshi.hatenablog.com/entry/groonga-data-inspect)
Leap Motion Controllerが接続されているかどうか調べる

Leap Motion ControllerをJavaScript（leapjs）で扱う時の話です（WebSocket経由で触るなら他の言語でも同じだろうと思います。SDKは知らない）。

Leapが接続されている時だけ専用の操作を有効化したい、というのは普通のことだと思います。
そこで、「今現在Leapが接続されているかどうか」を取得したくなるわけですが、実は、この為のAPIという物がありません。Leapが発火する幾つかのイベントを監視することで、自分で状態管理をすることになります。

まず、`connect`イベント。
これはJavaScriptがLeapのWebSocketサーバーに接続した時に発火します。気を付けないといけないのは、 **たとえLeapが接続されていなくても** このイベントは発火する、ということです。
Leap自体が無くてもWebSocketサーバー自体はずっと上がってて、Leapの接続を待っているみたいです。

なので`connect`ではなくて`deviceConnected`を見張っておけば、実際にLeapが接続した時が分かると思いきや、これもだめ。最初からLeapを繋いだ状態で、（leapjsを使う）アプリケーションを起動した時に発火しません。`connect`は発火するのですが、その時にLeapが接続しているかどうかは分かりません。

ではどうすればいいのかというと、`ready`を待ち受けます。`ready`は、WebSocketサーバーに接続し、かつLeapが利用可能になった時に発火するので、後からLeapを繋げた時も、アプリ起動時に既に接続済みだった時も、どちらも検知することができます。

これを踏まえると、今現在、Leapが接続されているかどうかを知るには、次のように状態管理すればいいことになります。

1. 初期状態では「未接続」とする
2. `ready`になったら「接続済み」とする
3. `deviceDisconnected`になったら「未接続」とする
4. `deviceConnected`になったら「接続済み」とする
5. `disconnected`になったら「未接続」とする
システムで実際にライブラリ関数 or システムコールが使えるかを確認する

## はじめに
システムコールやライブラリのバインディングを書くときに,
実際にシステム上でそのシステムコールやライブラリ関数の呼び出しが
行えることを確認したいことがあります.

一般的にはシステムコールにしてもライブラリ関数にしても, ヘッダファイルの
特定のマクロを読み出したり, バージョンを調べたりということである程度回避
できます. しかしすべてのシステム, ライブラリがそのようなものを提供しているわけでは
ないですし, ときには間違っていることもあります.

確実な方法は実際にその関数を呼び出すファイルがコンパイル・リンク
できることを確認することです. `configure`が行っていることですね.

この目的を実現するためのモジュールが`Devel::CheckCompiler`です.
(この機能のためだけのモジュールではなく, 他にも便利な機能もあります.
全容が気になる方はドキュメントを確認してみてください)


##リポジトリ
https://github.com/tokuhirom/Devel-CheckCompiler


##サンプルコード
以下は [Linux::Socket::Accept4](https://github.com/tokuhirom/Linux-Socket-Accept4)で実際に使われている例です. `accept4`システムコールは古いシステムには備わっていないのでそのチェックをします.

`check_compile`関数は実際にコンパイルを行う関数ですが, `executable`を `1`に
設定することでリンクまで行います. リンクまで行えて実行ファイルが作れたら `1`,
失敗の場合はそれ以外が返ります. これにより,  目的のシステムコール, ライブラリ関数が
実際に使えるかどうかを確認することができます. 

```pl
package builder::MyBuilder;
use strict;
use warnings;
use utf8;
use 5.010_001;
use parent qw(Module::Build);
use Devel::CheckCompiler 0.04;

sub new {
    my $self = shift;
    if ($^O ne 'linux') {
        print "This module only supports linux.\n";
        exit 0;
    }
    if (check_compile(<<'...', executable => 1) != 1) {
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif
#include <sys/socket.h>

int main(void)
{
    return accept4(0, (void*)0, (void*)0, 0);
}
...
        print "This module only supports linux 2.6.28+ and glibc 2.10+.\n";
        exit 0;
    }
    $self->SUPER::new(@_);
}

1;
```

###リンクオプションを渡す必要がある場合
リンク時ライブラリオプションが必要な場合は, `check_compile`関数の `extra_linker_flags`に
文字列 or 文字列のリストを渡してください.

```pl
#!/usr/bin/env perl
use strict;
use warnings;
use Devel::CheckCompiler;

if (check_compile(<<'...', executable => 1, extra_linker_flags => '-laa') != 1) {
#include <aalib.h>
int main(void)
{
     aa_flush((void*)0);
     return 0;
}
...
    print "NG\n";
    exit 0;
}

print "OK\n";
```

##おわりに
`Devel::CheckCompiler`を用いて, システムで実際にライブラリ関数 or システムコールが
使えるかどうかを確認する方法について示しました.

問題等ありましたら [githubの issues](https://github.com/tokuhirom/Devel-CheckCompiler/issues)までお願いします. (tokuhiromさんのリポジトリですが, 私もメンテナです)

明日は @yak_ex さんです. お楽しみに.
miのモード設定をバックアップするAppleScript

OS Xのいろいろな設定をバックアップするツールのモジュールの一つとしてつくったもの。

## 準備

以下のAppleScriptと簡単なシェルスクリプトを同じフォルダに配置します。

```applescript:mode.scpt
#!/usr/bin/env osascript

tell application "/Applications/mi.app"
  activate
  delay 1.0
  activate
end tell

tell application "System Events"
  tell process "mi"
    click menu item "モード設定..." of menu "mi" of menu bar item "mi" of menu bar 1
    delay 0.2
    tell tab group 1 of window "モード設定"
      click radio button "管理"
      delay 0.2
      click button "モード設定全体のバックアップ保存" of group 1
    end tell
  end tell
end tell

tell application "Finder"
  activate
  delay 0.5
  set output to (posix path of (the selection as alias))
  return output
end tell
```

```zsh:mode.sh
#!/bin/sh

mi_config_path=`/usr/bin/env osascript ./mode.scpt`
sleep 0.5
mv "$mi_config_path" "$1"
```

## 実行

次に以下のようなコマンドをタイプします。

```shell-session
$ chmod +x mode.sh
$ ./mode.sh mode-backup.zip
```

すると、カレントディレクトリに __mode-backup.zip__ というアーカイブが書き出されます。このファイルがバックアップデータなので、保管しておきます。

## なにをしているのか

1. `mode.scpt`はmiを起動し、モード設定のバックアップを書き出す処理を実行させる
2. `mode.sh`は書き出されたアーカイブをFinder経由で取得し、カレントディレクトリに移動させる
mrubyをHerokuで動かす

これは，[mruby advent calendar 2013](http://qiita.com/advent-calendar/2013/mruby)の６日目の記事です．

ネタですが，Herokuでテキストを返すだけのHTTPサーバを構築してみます．
手順ですが，ローカルでビルドしてサーバを動かしてみてから，その手順をbuildpackに移植しています．今回書いたコードは，[mruby-buildpack](https://github.com/take-cheeze/mruby-buildpack)と[mruby-test-server](https://github.com/take-cheeze/mruby-test-server)にpushしてあるので，必要でしたら参照してください．
ちなみに，node.jsをよく引き合いにだすのは，今回はmruby-uvを使っているからと，わたしがnode.jsでしかherokuにdeployしたことがないからです．

まず，ローカルでの動作確認ですが，[mruby-uv](https://github.com/mattn/mruby-uv)と[mruby-http](https://github.com/mattn/mruby-http)の使い方の確認からはじめて，自前の*build_config.rb*でビルドして，mrubyでサンプルを元に書いたスクリプトを動かすといった流れでした．
ただ，ビルドの手順が鬼門でして，libuvのビルドから始めました．なぜかというと，node.jsのを使おうかと思ったのですが，何個かのuv.hを読んだ結果，最新のmasterにあるのと安定版ではエラー処理の方法が若干違うので諦めたからです．それと，Herokuでビルドするときにlibuvがインストールしてあるのかも不安でした．gypというビルドシステムを使っているようなのですが，gypを入れるのが煩雑そうだったので，とりあえずそこにあった生Makefileを使って静的ライブラリをビルドしてなんとかなりました．
mruby-uvもlibuvのバージョン間に互換性がないので，[特別にpatchを書いて](https://github.com/take-cheeze/mruby-uv/tree/compile_fix)使っています．gemで:branchを指定できたのは助かりました．
それから，node.jsアプリみたいに環境変数を使いたかったので，[mruby-env](https://github.com/iij/mruby-env)も入れて，動作確認に使っていたOS X向けのframeworkの設定やらをやって，なんとか"Hello World!"を返してくれるようになりました．
ここら辺の試行錯誤は，mruby-test-serverのrun-local.shに生かされています．

続いて，mruby用のbuildpackの作成に入りました．
その前に，「buildpackとはなんぞや？」なんですが簡単に言うと，gitリポジトリにあるコードをHerokuで動かせるようにするシェルスクリプトです．基本的なことは[ここ](https://devcenter.heroku.com/articles/buildpacks)に書いてあります．Ruby, node.jsなどメジャーな環境は大体既存のがあるので普通は自前で書くなんてことはないのですが，対応してないような言語を使うような場合は必要です．[サードパーティ製のbuildpack](https://devcenter.heroku.com/articles/third-party-buildpacks)もあるので参考にしたり，意外なbuildpackを見つけて面白がったりしてました．
[mrubyにも既存のbuildpackがある](https://github.com/schneems/mruby-buildpack)のですが，これはビルド済みのmrubyを使うので今回は特に使いませんでした．mrubyはbuild_config.rbを書いてなんぼです．
そして，実際のbuildpackを書き方なんですが，[そうゆう人向けのページ](https://devcenter.heroku.com/articles/buildpack-api)があるのでこの通りに書いていけばいいです．detect/compile/releaseの３つのスクリプトを書いて，リポジトリにpush，そのリポジトリのURLをアプリにconfigコマンドでBUILDPACK_URLに設定するのが基本になります．detectはただのbuild_config.rbを探すだけ，compileはrun-local.shの焼き直し，releaseはserver.rbをデフォルトで実行する設定を出力するだけでした．.profile.d/にPATHを設定するスクリプトを置くとか色々ありますが，大したことはしてないです．一応，一から書いたので，[C](https://github.com/atris/heroku-buildpack-C)と[node.js](https://github.com/heroku/heroku-buildpack-nodejs)のbuildpackはちょろちょろ読みました．
そんな感じで大体buildpackが書けたら，BUILDPACK_URLを設定してpushして何度か試行錯誤すればHello World!を返してくれるようになります．

「コンソールとかただのテキストで出力されるHello World!とかださい」とずっと思っていたのですが，ちゃんとこの12文字を見ることができた時は大変感慨深かったです．
最後に，実際にmrubyで動いてるテキストでHello World!しか返せないhttpサーバは http://mruby-test-server.herokuapp.com/ なので是非みてってください．
シビック・テックの観点からみたデータ・ジャーナリズムについて

#データ・ジャーナリズムって何？

データ・ジャーナリズム…言葉の意味はなんとなくわかるけど、既存のジャーナリズムとどう違うのか？「データ・ジャーナリズム・アワード」というものがあるのですがそこでの賞の定義をみると姿が浮かび上がってきます。

Data-driven investigative journalism 
データを分析・調査して新たな事実を見つけ出す調査報道

Data storytelling (text, visualisation, video…) 
データを可視化しそれを活用することで読者の理解を深める

Data-driven applications (mobile or web) 
公共データを提供するアプリケーション

Data journalism website or section 
データ・ジャーナリズムのウェブや記事

みていくと、データ・ジャーナリズムで注目される側面は２つあるといえそうです。
「データ分析」と「テクノロジーを活用した表現手法」です。これらをうまく活用し、ジャーナリズムとしての価値を向上させることが求められます。

「オープンデータ」「データ・ビジュアライゼーション」という別の潮流とのかかわり合いがあり、相互作用しあいそうですね。おっ。シビック・テックに少し近づいてきました。

#アメリカのメディア業界再編

大治朋子さんという毎日新聞社の記者さんが2006年〜2010年にワシントン特派員時代に「日本のメディア界では考えられないようなダイナミックな動きを日々目の当たりに」し、新書のかたちでルポをまとめています。「アメリカ・メディア・ウォーズ ジャーナリズムの現在地」です。

業界再編は二つ大きなキーがあって、一つは収入源の複相化、もう一つは調査報道の役割の見直しや拡充といいます。

そこでキーになるのがメディアのNPO化です。
新聞が経済的な危機を向かえているなか、注目されているのが、調査報道の役割の維持と拡大です。調査報道というのは「社会で隠蔽されている、あるいは気付かれずにいる重要な問題や課題について、深く掘り下げて調べ、これまで知られていなかった事実を暴露したり改善の必要性を提唱する報道」というものです。

公的な情報を丹念に集め、それを精査分析して再提示する。ウォーターゲット事件などの秘密の情報源から情報を取得し足で稼ぐタイプのハイリスク・ハイリターンな調査報道とは対照的なもので、歩どまりがよく、一定の労力とコストでそれなりの成果をひねり出せるローリスク、ローリターン／ハイリターンなデータ集積型の調査報道として注目されています。

経済的な危機から支局を絞り込んでいっている大手メディアにかわり、既存メディアと比べられないほどの少人数で確実な成果を出さなければならない手段としてデータ集積型の調査報道を指向し、大手メディアが撤退したワシントンにローカルな支局を置くという攻めの手段に出て、ニッチな需要に切り込み、その複合作用で存在感をしめしているNPOもあります。

# それでは日本ではどうなのか
日本では試みが始まったばかりですが、模索する動きが今年になってから活発化しています。
ジャーナリズムに求められる職域が多様化していくことに対応することを念頭に、先日「データジャーナリズム・キャンプ＆アワード2013」が開かれました。

・自分の専門分野とは異なる2つの分野の講義を受け、互いのスキル理解を深める
 
・エンジニア、アナリスト、デザイナー、ジャーナリストで4人１組のチームになり、アイデアを出し合い方向性を決定する

というところにポイントがおかれ、旧来的なジャーナリストの定義を超えたスキルを持つ人達が集まりました。大手メディアの現役ジャーナリストと、それ以外の職業のひとたちが一緒になって、社会的問題をデータで可視化しようという試みが始まりました。私はデザイナーとして参加しています。

# 溶けて広がるジャーナリズムの定義
ジャーナリズムを構成する要素が多様化して溶け出すといいますか、すべてを旧来的の定義のジャーナリストがやるのではなく、多様なスキルや役割をチームで受け持つやり方が模索されています。社会的な問題意識にもとづき、オープンに公開されたデータを利用して、ウェブサービスやアプリを作って世の中に広く訴えること…というと自分でもできることがあるかも、と思えてきませんか？
testem + mocha + istanbul で網羅性の高いテスト駆動開発

==========

testem というテスト自動実行ツール、 mocha というテストフレームワーク、 istanbul というカバレッジツールを使って、網羅性の高いテスト駆動開発を実現します。

testem はグローバルにインストールしておきます。

```Bash:インストール
npm install -g testem
```

テストに利用するツールをインストール。これらのツールは、Jenkins や Travis などのCI環境でも使えるように、プロジェクトの devDependencies に入れておきます。

```Bash:インストール
npm install mocha --save-dev
npm install istanbul --save-dev
```

プロジェクトルートに、 testem.json を作成し mocha の設定を追加します。src_files は、ライブラリの対象となる JS とテストコードのJSを指定します。

```json:testem.json
{
  "framework": "mocha",
  "src_files": [
    "*.js",
    "lib/**/*.js",
    "test/test.*.js"
  ],
  "launchers": {
    "Mocha": {
      "command": "node_modules/.bin/istanbul cover node_modules/mocha/bin/_mocha --print none --report html -- test/test.*.js -R tap",
      "protocol": "tap"
    }
  },
  "launch_in_dev": [
    "Mocha"
  ]
}
```

testem を実行します

```Bash:testemの実行
testem
```

![スクリーンショット 2013-12-06 0.46.37.png](https://qiita-image-store.s3.amazonaws.com/0/20309/f8d50add-ff10-653c-1aa8-3fad33e6691f.png "スクリーンショット 2013-12-06 0.46.37.png")

テストが完了すると、 coverage の下にHTMLが生成されているので、coverage/index.html をブラウザで開きます。

```
open coverage/index.html
```

![スクリーンショット 2013-12-06 0.49.30.png](https://qiita-image-store.s3.amazonaws.com/0/20309/8a25163e-3340-973e-3c63-f8ffe053964f.png "スクリーンショット 2013-12-06 0.49.30.png")

![スクリーンショット 2013-12-06 0.51.50.png](https://qiita-image-store.s3.amazonaws.com/0/20309/06c58cbf-b39f-31af-42fc-ca72cc82cd2e.png "スクリーンショット 2013-12-06 0.51.50.png")

ソース・ファイルを変更するたびに、カバレッジのHTMLも更新されるので、楽しくテストコードを書きながらカバレッジ率を高めて、網羅性の高いテストを実現できます。
DocPad の Twitter Bootstrap で Glyphicons を使うために

DocPad の skelton のひとつに Twitter Bootstrap がありますが、デフォルトでは Glyphicons が使えないみたいです。使えないというか css ファイルのパスが違っているようで、アイコンが表示されません。
プロジェクトフォルダ直下にある docpad.coffee を下記のように修正すれば楽しい Glyphicons ライフがお待ちかねです。

```
styles: [
  "/vendor/twitter-bootstrap/dist/css/bootstrap.min.css"
  "/styles/style.css"
]
```

 [Icons by Glyphicons · Issue #12 · docpad/twitter-bootstrap.docpad · GitHub](https://github.com/docpad/twitter-bootstrap.docpad/issues/12)
自作directive内でng-modelをきちんと動作させる

追記：`require: '^ngModel'`で解決しました。

自作directive内でng-modelを使ってみました。

デモ：[Plunker - ng-model in a my directive.](http://embed.plnkr.co/D4BvhL/preview)

作ってみるとわかりますが、自分で作ったdirectiveからng-modelを使おうとおもったらけっこう大変！
なんとisolated scope内では親スコープのngModelControllerを参照できないんですね。
ただ、isolated scopeにしないとせっかくのAngularJSでテンプレートが使えないという(複数個要素を作ると干渉するので)。

これを解決するために`scope.$new()`で子スコープを作って、`$compile`を使ってテンプレートを手動でコンパイルした上で、さらに手動で親と子をバインドしてみました(以下コード例)。面倒くさいですが、現状わかっている範囲だと、こんなかんじで実装しないとng-changeが動かなかったり、ngModelControllerの便利なメソッドも使えないのでこれがベストかと思われます。

*修正前*：

```js:app.js
var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
  $scope.name = 'World';
  $scope.onChange = function () {
    console.log('name is changed!');
  };
  $scope.onChange2 = function () {
    console.log('name is changed!!');
  }
  $scope.onChange3 = function () {
    console.log('name is changed!!!');
  }
});

app.directive('hoge', function ($compile) {
  var template = '<label>{{label}}</label><input ng-model="model" type="text">';
  return {
    restrict: 'E',
    replace: true,
    require: '?ngModel',
    template: '<div></div>',
    link: function (scope, element, attrs, ngModelCtrl) {
      // 子スコープを作って
      var child = scope.$new();
      // テンプレートをコンパイルして
      element.append($compile(template)(child));
      attrs.$observe('label', function() {
        child.label = attrs.label;
      });
      // 親から子にバインドして
      scope.$watch(attrs.ngModel, function (value) {
        child.model = value;
      });
      // 子から親にバインドする
      child.$watch('model', function (value) {
        ngModelCtrl.$setViewValue(value);
      });
    }
  }
});
```

```html:index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>AngularJS Plunker</title>
    <script>document.write('<base href="' + document.location + '" />');</script>
    <link rel="stylesheet" href="style.css" />
    <script data-require="angular.js@1.2.x" src="http://code.angularjs.org/1.2.3/angular.js" data-semver="1.2.3"></script>
    <script src="app.js"></script>
  </head>

  <body ng-app="plunker">
    <div ng-controller="MainCtrl">
      <input ng-model="name" ng-change="onChange()">
      <p>Hello {{name}}!</p>
      <hoge ng-model="name" label="{{name}}" ng-change="onChange2()"></hoge>
      <hoge ng-model="name" label="Bar" ng-change="onChange3()"></hoge>
    </div>
  </body>
</html>
```

-----

*追記*：

`require: 'ngModel'`のところを`require: '^ngModel'`にすることで親ディレクティブのコントローラーを参照できるようです。よくみたらチュートリアルに書いてあったという。

```js:app.js
app.directive('hoge', function() {
  return {
    restrict: 'E',
    require: '^ngModel',
    scope: {
      label: '@'
    },
    template: '<div><label>{{label}}</label><input ng-model="model"></div>',
    replace: true,
    link: function(scope, element, attrs, ctrl) {
      scope.$watch('model', function (value) {
        ctrl.$setViewValue(value);
      });
      
      scope.$parent.$watch(attrs.ngModel, function (value) {
        scope.model = value;
      });
    }
  }
});
```

・・・ずいぶん簡単になりました。
Rroongaとスレッドプログラミング

<ins>コメントで重要な指摘を貰っているので、そちらも参照のこと</ins>

遅くなってしまって、済みません。

以前自分の日記に書いた内容の焼き直しですが、Groongaアドベントカレンダーの四日目です。四日目です！（エントリーの作成日時は見ないでくださいね）

複数のスレッドから[Rroonga](http://ranguba.org/#about-rroonga)（を通したGroongaデータベース）を触る時には、同時にDBを開かないように気を付けなくてはなりません（とは言え、そもそもそういう状況になるのがよくないので、見直したほうがいいです）。

例えばこんなユーティリティ関数を作って

```ruby
def open
  Groonga::Database.open @db_file do |db|
    yield db
  end
end
```

複数のスレッドから触ると……

```ruby
$stderr.sync = true
threads = []
1000.times do |i|
  $stderr.print "#{i}: start\n"
  threads << Thread.new(i) {
    $stderr.print "#{i}: open\n"
    open do |db|
      $stderr.print "#{i}: before\n"
      Groonga['Items'].add i.to_s
      $stderr.print "#{i}: after\n"
    end
  }
end

threads.each &:join
```

ほとんどの場合、最後まで実行されず途中で例外でストップすると思います。

これは、データベースを触る時にちゃんとロックすることで回避することができます。

```ruby
  require 'monitor'
  # :
  # monitorのセットアップ
  # :
  threads = []
  1000.times do |i|
    $stderr.print "#{i}: start\n"
    threads << Thread.new(i) {
      $stderr.print "#{i}: open\n"
      synchronize do
        open do |db|
          $stderr.print "#{i}: before\n"
          Groonga['Items'].add i.to_s
          $stderr.print "#{i}: after\n"
        end
      end
    }
  end

  threads.each &:join
```

ということを自分の日記に書いたら、[須藤さん](https://twitter.com/ktou)からこんな突っ込みを頂きました。
https://twitter.com/ktou/statuses/339355624703930368

> @KitaitiMakoto Groonga["..."]は普段使いの時に便利になるためのショートカットで、共通のGroonga::Contextを使うんです。普通に使う分には便利にするけど、複雑なことをしたいならそこは自分でカバーしてね！という方針です！

というわけで、[Groonga::Context](http://ranguba.org/rroonga/ja/Groonga/Context.html)を調べてみました。

ドキュメントを読んでも、使い方がはっきりとは分からないのですが、`open_database`というのが怪しいのでこれを使って`open`を書き換えてみます。

```ruby
def open
  Groonga::Context.new.open_database @db_file do |db|
    yield db
  end
end
```

すると、おお、ちゃんと完走する。

    $ ruby groonga-context.rb
      :
    994: after
    995: before
    995: after

しかも、monitorを使った場合の40%くらい速い！

    $ time ruby groonga-monitor.rb
      :
    real	0m5.404s
    user	0m4.512s
    sys	0m0.768s
    $ time ruby groonga-context.rb
      :
    real	0m3.134s
    user	0m2.420s
    sys	0m0.620s

というわけで、（なるべくそんなことしないほうがいいと思うけど）マルチスレッド環境でRroongaを使う場合は`Groonga::Context`を使うようにしましょう。
GitHubでカジュアルにhaxelibを公開する


## haxelibってなんぞ

Haxeをインストーラーから導入した場合、標準でhaxelibというdistributorが付属してきます。
つまるところ、Rubyでいうところのgemにあたるようなツールです（登録されているライブラリの数は少ないですが）。

そんなhaxelibですが、Haxe3からgit経由でのインストールに対応しました。

haxelib2以前は、依存性のないモジュールをガンガン外部化したいという欲求に対して、公式のhaxelibだとあまりに個人的なコードや中途半端なexternの登録にためらいが生じがちで、かといっていちいちzipを作ったりプロジェクトのsubmodule化するというのも面倒です。

gitならば、GitHubやBitbucketや適当なリポジトリに公開しているコードをそのまま使えてカジュアルハッピーですね。


### 公式ドキュメント

[Using haxelib](http://haxe.org/doc/haxelib/using_haxelib)

[Haxelib 3](http://haxe.org/doc/haxelib/haxelib2)

　　

## 前準備

- haxelib.json

    Pythonでいうところのsetup.pyみたいなものですね。
    作者やプロジェクトの名前から、依存モジュールまでを記述します。
    git経由ならいらないような気もするのですが、作法的にも書いておいた方が良いとおもいます。

    ver2まではhaxelib.xmlだったのですが、ver3からはJSONに対応して、そちらが推奨になりました。
    XMLを書くのは疲れるので嬉しいですね。

以下は、公式にあがっている例になります。

```json
{
  "name": "useless_lib",
  "url" : "https://github.com/jasononeil/useless/",
  "license": "MIT",
  "tags": ["cross", "useless"],
  "description": "This library is useless in the same way on every platform",
  "version": "1.0.0",
  "releasenote": "Initial release, everything is working correctly",
  "contributors": ["Juraj","Jason","Nicolas"],
  "dependencies": {
    "tink_macros": "",
    "nme": "3.5.5"
  }
}
```

各設定項目に関しては、みたまんまなので特に説明はいらないですね。


## 実践

### 登録

では実際に雰囲気を掴むために、挨拶モジュールをつくってみましょう。
プロジェクト構成は以下のようになります。

```
.
├── greet
│   └── Hello.hx
└── haxelib.json
```

中身は以下のとおり。

```json:haxelib.json
{
  "name": "greet",
  "url" : "https://github.com/yourname/greet/",
  "license": "MIT",
  "tags": ["cross"],
  "description": "greet everyone",
  "version": "0.0.1",
  "contributors": ["yourname"],
  "dependencies": {
  }
}
```

```javascript:Hello.hx
package greet;

class Hello {

    public static function japanase(): String {
        return "こんにちわ";
    }

    public static function english(): String {
        return "Hello";
    }

    public static function chinese(): String {
        return "您好";
    }

    public static function nonnon(): String {
        return "にゃんぱすー";
    }
}
```

packageの指定に注意してくださいね。
後はこれを適当なリポジトリに突っ込んでしまいましょう。


### 呼び出し

```bash
# haxelib git <project-name> <git-clone-path> <subdirectory>
$ haxelib git greet path-to-your-repository
```

でインストールできます。
なお、プロジェクト名がかぶった場合は容赦なく上書きされるようなので気をつけましょう。

upgradeコマンドを使うことで更新（pull）を行えます。

それでは実際にimportして呼び出せるかためしてみませう。

```
.
├── Main.hx
└── build.hxml
```


```ini:build.hxml
# -libでどのモジュールを利用するのかを明示する必要がある
-lib  greet

-neko main.n
-main Main
```

```javascript:Main.hx
package ;

import greet.Hello;

class Main {

    public static function main() {
        trace(Hello.japanase());
        trace(Hello.english());
        trace(Hello.chinese());
        trace(Hello.nonnon());
    }
}
```


```bash:result
# ビルド
$ haxe build.hxml
# 実行
$ neko main.n
Main.hx:8: こんにちわ
Main.hx:9: Hello
Main.hx:10: 您好
Main.hx:11: にゃんぱすー
```

どうでしょう、うまくいきましたでしょうか。

細かいことをしだすとまたなにかハマったりするかもしれませんが、こんな感じでとりあえず公開するだけならかなりカジュアルにやらかせます。

情報が少ないせいかhaxelibを利用している人を見かけませんが、少しづつ使う人が増えるといいなと思いました。以上！

次は @shohei909 さんの「実用！Haxe黒魔術使い入門」です、よろしくお願いします。
細かすぎて伝わらない Xamarin にして良かった事(その1)


それ Xamarin じゃなくて C# じゃん！とかのツッコミはナシでｗ
まあ Java よりも Objective-C よりも C# がイイから選んでいるわけで。
サンプルコードは Xamarin.Android ですが iOS でも同じです。

## 1. イベントのマルチキャストができる！

``setOnClickListener`` とかリスナー系が全部 ``Event`` になっているので、複数のリスナを登録可能、削除もできます。

```csharp:MainActivity.cs
protected override void OnCreate(Bundle bundle)
{
    /** 省略 **/

    Button button = FindViewById<Button>(Resource.Id.myButton);

	// Label 変えます
    button.Click += delegate
    {
		button.Text = string.Format("{0} clicks!", count++);
    };

	// Logcat にも出しちゃう
	button.Click += (sender, e) => Android.Util.Log.Debug("Main", "Clicked!");

	// .NET2.0 な方の書き方
	button.Click += button_Click;
}

// Toast にも出そ
void button_Click(object sender, EventArgs e)
{
	Toast.MakeText(this, "Clicked!", ToastLength.Short).Show();
}
```

## 2. ``var`` が使える！

C# なら ``var`` 使わなきゃ。

```csharp:using_var
Dictionary<String, Object> map = new Dictionary<Piyo, Hoge>(); // 長いよ…
var map = new Dictionary<Piyo, Hoge>();

//Button button = FindViewById<Button>(Resource.Id.myButton);
var button = FindViewById<Button>(Resource.Id.myButton);
```

Variant じゃないですから、念の為。

## 3. Runnable がラムダ式で書ける！

Android-Java では ``Activity.runOnUiThread`` や ``Handler.post`` って Runnable を受け取るようになっていて、大抵無名クラスにするので、長ったらしい記述になってしまいますが、Xamarin.Android では、Runnable に加えて ``Action`` も受け取ってくれ、これはラムダ式で書けるので非常にスッキリ書けます。
Runnable にかぎらずラムダ式の恩恵は大きいのですが(イベントハンドラとか)。

```csharp:UsingLambdaInsteadOfRunnable.cs
var button = FindViewById<Button>(Resource.Id.myButton);

button.Click += (s, e) =>
{
    button.Text = "Progress...";

    Task.Factory.StartNew(() =>
    {
        // Fat な処理
        Thread.Sleep(3000);

        // UIスレッドで実行
        this.RunOnUiThread(() => button.Text = "Finished.");
        /*// Java だとこんな長ったらしいコードが書かないといけない
        MainActivity.this.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // hogehoge
            }
        }); */
    });
};
```

ちょっと話がそれますが、``Activity.runOnUiThread`` 自体、Android 固有の API なので、プラットフォーム依存を減らそうと思ったら ``SynchronizationContext`` を使います。

```csharp:UsingSynchronizationContext.cs
var button = FindViewById<Button>(Resource.Id.myButton);

var syncContext = SynchronizationContext.Current;
button.Click += (s, e) =>
{
    button.Text = "Progress...";

    Task.Factory.StartNew(() =>
    {
        // Fat な処理を別スレッドで
        Thread.Sleep(3000);
    }).ContinueWith(t => syncContext.Post(state =>
    {
        // UIスレッドでの処理
        button.Text = "Finished.";
    }, null));
};
```

## 4. async/await が使える！

それはそうと上のコード、async/await を使ったらたったの3行ですよ！
Android の ``AsyncTask`` とか、iOS の GCD とか、ほぼ捨てられますよ。

```csharp:UsingAsyncAwait.cs
var button = FindViewById<Button>(Resource.Id.myButton);

button.Click += async (sender, e) => 
{
    button.Text = "Progress..."; // UIスレッド
    await Task.Run(() => Thread.Sleep(3000)); // ワーカースレッド
    button.Text = "Finished."; // UIスレッド
};
```

とりあえずこんなところで。
他にも、気づいたら書きます。
bashの機能だけでPATHから項目を削除する機能を作る

思いつくままに書いてみる。

forは、使わないぞ…

```bash:.bashrc
: 一覧する
function path_list () {
  local IFS=:; local PATH=($PATH); IFS=$'\n'; echo "${PATH[*]}"
}
```
呪文が出来上がった…

```bash:.bashrc
: 削除する
function path_remove () {
  export PATH=$(
    IFS=$'\n'
    PATH=($(
      IFS=:
      for i in $PATH ; do if [[ "$i" != "$1" ]] ; then echo "$i" ; fi ; done
    ))
    IFS=:
    echo "${PATH[*]}"
  )
}
```
コマンド置換は使わなくてもできた。

```bash:.bashrc
: 削除する (効率化)
function path_remove () {
  local IFS=:
  local i A=($PATH)
  for i in ${!A[*]}; do if [[ "${A[$i]}" == "$1" ]] ; then unset A[$i]; fi; done
  export PATH="${A[*]}"
}
```
```bash:.bashrc
: 最後に足す/移す
function path_append () { path_remove "$1"; export PATH="$PATH:$1"; }
: 最初に足す/移す
function path_prepend () { path_remove "$1"; export PATH="$1:$PATH"; }
```
こうやって使う。

```bash:Bash
$ path_remove "$(cygpath -u 'C:\Program Files (x86)\Windows Kits\8.1\bin\x64')"

```

先行事例

[環境変数PATHをわかりやすく表示する](http://qiita.com/tanaka51/items/840061ea9715fc7602ee)
[$PATH から特定のパスだけを削除する](http://qiita.com/ironsand/items/10e28d7589298090ec23)
[関数「greppath」を作って、環境変数PATHにパスが含まれていない時だけPATHにパスを追加する](http://qiita.com/h12o@github/items/2a4dc1d6862da2af0972)

※質問： ↑上のような感じで他の記事へのリンクを追加する簡単な方法はある？
HDL書く人も知っておきたいオープンドレインの知識

こんばんは@natsutanです。参加者の皆様がHDLバリバリなので、gkbrですが、ぼくは、HDLのことはほとんど知らないので、臆せずに基板寄りの記事を書いていきたいと思います。

# オープンドレイン

という前振りはさておき、社内勉強会で使った資料を公開します。
普段はHDL書く人も、これくらいは知っていて欲しいなという所をまとめました。

http://www.slideshare.net/minorunatsutani/kdmsopen-drain

FPGAですとコンフィグ周辺の信号がオープンドレインだったりするので、回路設計する人は注意してくださいまし。
Sublime TextでTabを押した際にスペース4つと認識される。

プログラムを書く時や、簡単なメモを取るときに
<a href="http://www.sublimetext.com/3" title="Sublime Text - Download">Sublime Text</a>を使っています。

Sublime Textを使用時に表題の問題が発生していましたが解決したのでその方法を。


##Tabがスペースと認識される

普通はTabを押すと、----が挿入されるのですが、部分的に・・・・になってしまうという状況です。

この場合、行を選択した状態で、メニューから
View→Indentation→Convert Indentation to Tabsを選択すると、Tabに変換してくれます。

あとは設定で、Tabを押した時にスペースが入らないように、
Settings - Userで

```php:Settings
"translate_tabs_to_spaces": false
```


と設定しておくと、次回からスペースが入らないようになります。

ただ、この設定を行った場合でも、コードをコピペした際は、
スペースと認識される場合があるので、その際は、上記の手順で、
View→Indentation→Convert Indentation to Tabsとする必要があります。
Qiita: ストックした記事をインクリメンタルサーチするAlfred 2 Workflow

コードを書いている時に、ストックしておいたQiitaの記事を検索したくなるシーンが最近増えてきた。

そこで、以前作った[Qiitaの記事をインクリメンタルサーチするAlfred 2 Workflow](http://qiita.com/o_ame/items/f23e75bfc11e9e7b3a08)に、ストックした投稿を検索するコマンドを追加した。

![s1.png](https://raw.githubusercontent.com/uetchy/alfred-qiita-workflow/master/screenshots/qiita-workflow.png)

この Workflow は [Githubリポジトリ](https://github.com/uetchy/alfred-qiita-workflow)から[ダウンロード](https://github.com/uetchy/alfred-qiita-workflow/archive/master.zip)できる。

## 使い方

1. `qiita setup <personal access token>`でQiitaの[アクセストークン](https://qiita.com/settings/tokens/new)を保存
2. `qiita stocks <query>`でストックした記事の検索
3. `qiita search <query>`で普通の検索

## まとめ

最初Pythonで書いていたものをRubyで書きなおして日本語ワードも受け付けるように修正したので、かなり使いやすくなった気がする。

→ [Goで書き直した](http://qiita.com/uetchy/items/eb85286b207807f09940)
Riak(に関係する)勉強会について

新しいことの勉強を始めるとき、またその分野の最新情報を得るため、勉強会は有効な手段のひとつだ。
Basho社主催のRiak関連イベントにはほぼRiak開発者が来て、面白い発表をしてくれる。
日本語でのドキュメント・活用事例が多くないRiakにおいては、貴重な情報源の一つと言える。（もちろんベストな情報源は本家のドキュメントとGitHub）
Riakのイベントって何があるのかわからない、行ってもこわい人しか居なさそう、そんな懸念を払拭できる情報を提供できれば幸いである。

## [Riak Meetup Tokyo](http://connpass.com/series/300/)
赤坂のYahoo!Japanで開催されている、募集定員100名以上の大規模なイベントだ。
企業におけるRiakの活用事例、海外のRiak事情、開発の現場の話など、興味深い内容だ。
この内容は[Youtube](http://www.youtube.com/user/ydnjp)に上がっているため、イベントに参加できなくても内容の把握は可能だ。
[Drink up](http://connpass.com/series/352/)というものもあり、Basho社所属のRiak開発者や、実際にRiakを使っている人などから酒を呑みつつ面白い話を聞くことができる。しかもBashoの奢り！！

## [Riak Source Code Reading](https://github.com/kuenishi/riak_scr_jp)
プロジェクタでRiakのソースコードを映して、ただただ解説したり読んだり議論したりするイベント。
和やかな雰囲気でゆるく始まり、Bashoの人がRiakに関するErlangコードを説明する流れ。
RiakはErlangで書かれているため躊躇してしまうかもしれないが、特異なシンタックスはその場で軽く解説してくれるし、処理に関する本質的な内容は口頭で説明してくれるので、Erlangの細かいシンタックスがわからなくても大丈夫。
むしろ分散システムを支えるアルゴリズムの議論が高度になることがある。
とはいえ我々ユーザ視点から考えるとこれら全てを理解する必要はなく、単純に知的好奇心を満たすことが楽しめるのが重要だ。
Riak、Erlang、データベース、分散システムなど専門分野への興味が乏しくても、学ぶ動機や興味があるなら参加してみよう！
優しい専門家とビールとジンジャーエールがあなたを待っている！

## [分散合意本読書会](http://www.zusaar.com/event/949005)
Bashoという企業主催ではなく、全く別の個人的に開催されている勉強会シリーズ。
これはガチ。マジで難しい。ついていくことが困難なレヴェル。
分散システムにおいて、値を決定することは非常に重要かつ困難なテーマの一つだ。
これはデータベースに限った話ではなく、例えば人工衛星での宇宙線によるビットフリップ対策もこれ。
Bashoの開発者の人も度々来ていて、教科書の読みあわせを行っている。
分散システムを支える最前線のテーマ。
ちなみに、僕は参加していないが、分散合意本読書会主催者の御徒町さんが開催している[分散DB本読書会](http://www.zusaar.com/event/2207003)は、よりRiakに近い内容を扱っているようだ。多分、分散トランザクションとか。

## まとめ
Bashoの勉強会に行くとビールが呑める。
Rspecのテスト進捗状況が可視化できるFuubarがいい感じ！

# ちょっと不便なRspecのテスト
Rspecでテストを書いている人は多いと思うんですが，Rspecのテストちょっと不便じゃありませんか？

例えばテスト実行中

```rspec
......F.....F....F.......
```

+  あとどれくらい残ってるの！？いつ終わるの？(どれくらいのテストが残っているかわからない)

+ テスト落ちたなら，それ先に見せてよ！(どのテストが失敗したかわからない，でも一応最後までテストを実行したい，けど終わるまで結果がわからない)

うーん，やっぱりちょっと不便．

# そんな時に便利なFuubar
https://github.com/jeffkreeftmeijer/fuubar

こちらの[ビデオ](http://vimeo.com/16845253)を見てもらうとFuubarがどういうものかわかると思います．
Fuubarのいいところは

- 落ちたテストからFaiure/Errorメッセージを出してくれる．
- 残りのテスト数がわかる
- 予想終了時間が表示される

素晴らしい！

## インストール

Fuubarを使うには

```
gem install fuubar 
```

して，テスト実行時に`--format Fuubar`をつけるだけ

```
rspec --format Fuubar spec
```

もしも気に入ったのなら`.rspec`に

```
--format Fuubar
```

を追加すると，`--format Fuubar`を付けなくても常にFuubarのフォーマットで表示されるようになります．

# 参考記事
[Fuubar: the instafailing RSpec progress bar formatter](http://jeffkreeftmeijer.com/2010/fuubar-the-instafailing-rspec-progress-bar-formatter/)
[【翻訳】Fuubar: instafailing な RSpec プログレスバーフォーマッタ ](http://keijinsonyaban.blogspot.jp/2010/11/fuubar-instafailing-rspec.html)
GradleでOpenJPAのenhanceタスクを実装

ネットに転がっている方法を寄せ集めただけですが。

いくつかの*persstence*.xmlを使っている場合にも対応しています。

元のクラスも（何に使うのかはわからんが）残しています。

```text:openjpa.gradle
def relativize = {file->
  projectDir.toURI().relativize(file.toURI()).toString()
}

task(enhance,dependsOn:classes) << {
  description 'OpenJPA enhancer task.'
  ant.taskdef (
    name : 'openjpac',
    classpath : project.runtimeClasspath.asPath,
    classname : 'org.apache.openjpa.ant.PCEnhancerTask'
  )
  def resurcesDir = sourceSets.main.output.resourcesDir
  def mainOutDir = relativize(sourceSets.main.output.classesDir)
  def jpacOutDir = relativize(sourceSets.main.output.classesDir) - ~/\/$/+ '_jpa/'
  def orgDir = relativize(sourceSets.main.output.classesDir) - ~/\/$/+ '_org/'
  ant.mkdir(dir:orgDir)
  ant.copy(todir:orgDir){
    fileset(dir:mainOutDir){
      include(name:'**')
    }
  }
  resurcesDir.eachFileRecurse(groovy.io.FileType.FILES) {
    propertiesFile ->
    ant.mkdir(dir:jpacOutDir)
    if(propertiesFile.name ==~ /.*persistence.*\.xml/){
      def propertiesFilePath = relativize(propertiesFile)
      ant.openjpac(
           classpath:project.runtimeClasspath.asPath,
           addDefaultConstructor:true,
           enforcePropertyRestrictions:true,
           directory:jpacOutDir
      ){
        config(propertiesFile:propertiesFilePath)
      }
    }
    ant.move(todir:mainOutDir){
      fileset(dir:jpacOutDir){
        include(name:'**')
      }
    }
    ant.delete(dir:jpacOutDir)
  }
}

jar {
   dependsOn enhance
}
```
XAMPP(Windows7) の MySQL を早くする

http://lazesoftware.com/blog/12/0926/

ここに乗っていることそのままですが。

Windows 7 で localhost を指定して接続しに行くと

DNS で名前解決されるようになるらしいので

127.0.0.1 等のループバックアドレスを使いましょう。

というお話。

TestLink とかもこれで少し早くなります。
増やす減らす二倍する(2013.8.18の過去問)


1日1個 @nabetani さんの作った問題を解く、どう書くAdventCalendarの5日目です。

今日の問題は http://nabetani.sakura.ne.jp/hena/ord13updowndouble/ にあります。

```hs
module Doukaku.UpDownButton (solve) where
import Data.Set (Set, empty, singleton, member, union, elems, fromList, difference)

solve :: String -> String
solve = show . minope empty . singleton . read

minope :: Set Int -> Set Int -> Int
minope done new'
  |   1  `member` new' = 1
  | (-1) `member` new' = 1
  | otherwise = 1 + minope (done `union` new') (new `difference` done)
  where
    new = fromList $ do
      x <- elems new'
      (if x `mod` 2 == 0 then [x `div` 2] else []) ++ [x + 1, x - 1]
```

単純な幅優先探索です。ただし、増加列を考えると値をオーバーしただけだと枝刈りできず判定が面倒かなと直感的に感じたので、ゴールから初めて2で割っていく戦略をとってます。すでに登場した数と奇数を捨てる感じです。

実はこの問題、初めは算術的に解けるかなと https://github.com/hiratara/doukaku-past-questions-advent-2013/blob/96787f588a9c730a74926a14f3edd7bcf25d10fa/src/Doukaku/UpDownButton.hs という回答を書いていたのですが、テストを通すことができず失敗しました。与えられた数値を2進数に直すと、`1`は「+1、×2」で2個分、`0`は「×2」で1個分のカウントをすればOKという考え方で、連続する`1111`のようなシーケンスは`1000(-1)`のように少ないシーケンスに置き換えられ、これで簡略化すれば解が得られると予想しました。しかし、`59 = 111011`のようなシーケンスは`100(-1)10(-1)`という簡略化だけでは最適解が出ず、これをさらに`1000(-1)0(-1)`のようにする必要があることがわかりました。他にも簡略化があるとすればキリがないので、この方法は今回は諦めました。

http://qiita.com/Nabetani/items/89fb0e2e712d4b396535 に他の方の回答もありますので、見ると参考になるでしょう。
ゲーム制作計画11日目！

本日は、前回の投稿の続きを行っていこうと思います。
前回は、
enchant.jsでスマホ向けゲームを作り始めるための基礎知識(http://www.atmarkit.co.jp/ait/articles/1302/06/news029_2.html)
を参考に、enchant.jsの基礎を学んでいました。
前回、静止画を画面に表示する方法、
背景の色の設定方法などを学びました。
本日は、画像を動かす部分などを行います。

##エラー表示方法
本日、プログラムを写している中で、
写し間違いをし、実行ができなることがありました。
エラーの表示のさせ方がわからなかったので、
http://sample.reflet.jp/detail/305.html
こちらのサイトを参考に、エラーが表示されるようにしました。
自分はchromeを使用しているのですが、
ショートカットキーはCtrl+Shift+jのようです。

##画像のフレームの変え方
画像のフレーム（例えばkumaのフレームならkuma.frame）をずらしていくことで、
走っているふうにアニメーションさせることができます。
これがフレーム数を0,1,0,2の繰り返しにすると綺麗に走っているようになるのですが、
うまい計算式を思いつかなかったので、
最終的に配列を順番に読むことにしました。
こんな感じ。

```js
var kumaFrameList=new Array(0,1,0,2);
```

順調に配列も習得！

本日は画像がぱたぱたするようになったところで終わりにします。