OmniAICreator/Qiita-1.07M huggingface dataset:
trampでリモートファイルを編集するときにauto-save-buffersを停止する


SSH経由で接続しリモートのファイルを自在にEmacsで編集できる`tramp`は非常に便利ですが、`auto-save-buffers`と併用すると文字入力の度にネットワークトラフィックが発生してしまいます。

以下は、`tramp`でリモート編集時には`auto-save-buffers`を停止する方法のメモです。

### 手順1. `auto-save-buffers-enhanced`をインストールする。

`auto-save-buffers-enhanced`の機能を使いたいのですが、以下に投稿があったので（さすがQiia)インストール＆設定をします。

* [Emacsでファイルを自動保存する auto-save-buffers-enhanced](http://qiita.com/ongaeshi/items/8cbd8d3c792476c59a11)

### 手順2. ファイル名の規則でオートセーブの除外設定する

```.emacs.el
(setq auto-save-buffers-enhanced-exclude-regexps '("^/ssh:" "/sudo:" "/multi:"))
```
Githubからの clone を楽にする


いつもマシンをセットアップするときとか、自分の開発しているリポジトリを手元にcloneするときに

``` 
git clone git@github.com:asonas/dotfiles
```

とかやるけど、 `~/.ssh/config`に

```
Host github
  HostName github.com
  User git
```

って書いておくと、

```
git clone github:asonas/dotfiles
```

とできて便利。
Gitのコミットログの先頭に#を使いたい場合の対処


## 例えばコメント文字をダブルクォートに置き換える
```sh
git config --global core.commentchar '"'
```

など。Redmineとかのチケット番号記述に便利

# 参考
[Start a git commit message with a hashmark (#) - Stack Overflow](http://stackoverflow.com/questions/2788092/start-a-git-commit-message-with-a-hashmark)
250万ダウンロードアプリを支えるBokete.pmを覗く

え〜 この記事を書いている今から数えて「昨日」 [ボケて](http://bokete.jp/) に関わるメンバーで忘年会がありまして、当初はほそぼそとやっていたサービスが、例えばiOSとAndroidアプリのダウンロード数の合計が「250万」となり、大きなインパクトを持ちだしたわけで、感慨深いものがあると感じました。

さてそんなことも加味して、そのアプリにもWeb APIを提供している「バックエンド」で使っているとあるモジュールの話をします。それが **Bokete.pm** です。Mojoliciousで動いている部分が現状は大半なので、大抵は

```
$ mojo generate app Bokete::Web
```

のように作成され、ネームスペースをこの場合 **Web層** と分けているという前提で話を進めます。とすると、トップレベルである Bokete.pm には特に書くこともあまり無いように見受けられますが、ボケてのアプリでは設定のロード周りを記述しています。

猫で著名なあずまさんが [Configプラグインで使う実用的な外部設定ファイルの一例](http://qiita.com/azumakuniyuki/items/2fcec597335d5fd011e5) という記事を投稿していましたが、僕の場合はなるべくWeb層以外でMojo/Mojoliciousのモジュールに依存させたくないという方針というかコダワリがありまして自分で設定のローダーを書いています。

といってもtokuhirom氏のWAF **Amon2** の昔のローダーを軽く、いや、かなりパクってます。今では [Amon2::Util](http://search.cpan.org/~tokuhirom/Amon2-6.00/lib/Amon2/Util.pm) の部分ですね。僕がローダーで考慮して結果的にどのようになったかというと…

- 設定ファイルはPerlスクリプト
- 設定ファイルを含めプロジェクトのルート・ディレクトリへのパス解決をする
- 環境変数「PLACK_ENV」を見て開発環境と本番を分ける
- また環境変数「BOKETE_CONFIG」に値があるとそれを設定ファイルとみなす
- *ごにょれば* テスト時にTest::mysqldのconnect_infoなどをある意味動的に渡すことが出来る
- 脱線しますがHarrietとか使うとテスト時は更に便利！

って具合です。ではその Bokete.pm をそのまま貼り付けちゃいます！ボケてのコードをそのまま晒すのはコレが初めて！！

```pl:Bokete.pm
package Bokete;
use strict;
use warnings;
use File::Spec;
use Carp qw/croak/;

our $VERSION = '0.40'; # Delta

sub config {
    my $filename = Bokete->config_file();
    my $config = do $filename;
    croak ("Cannnot load configuration file: $filename") if $@;
    return $config;
}

sub config_file {
    my $filename = $ENV{BOKETE_CONFIG};
    if( !$filename ) {
        my $mode = $ENV{PLACK_ENV} || 'development';
        $filename = File::Spec->catfile( Bokete->base_dir(), 'config', $mode . '.pl' );
    }
    $filename = readlink $filename || $filename;
    croak("Cannot find configuration file: $filename") unless -f $filename;
    return $filename;
}

sub base_dir {
    my $path = ref $_[0] || $_[0];
    $path =~ s!::!/!g;
    if ( my $libpath = $INC{"$path.pm"} ) {
        $libpath =~ s!(?:blib/)?lib/+$path\.pm$!!;
        return File::Spec->rel2abs( $libpath || './' );
    }
    return File::Spec->rel2abs( './' );
}

1;
```

こうすることで、アプリケーションのどこからでも設定情報を `Bokete->config()` で呼び出すことが出来ますね。また上記した通りテスト時にもテンポラリーに立ち上げたMySQLやmemcachedの接続情報を設定ファイルとしてアプリ側に渡して、当然ながら同じインターフェースで取り扱いが出来ます。便利〜

以上。実際にプロダクトで使われている **Bokete.pm** の紹介でした。
メモ: Miix 2 8

リンク集
---------
* [Miix2 を購入しました | SE の雑記](http://engineermemo.wordpress.com/2013/12/07/miix2-を購入しました/)さんのページが詳しい。
* [OEM ライセンス認証 3.0 の環境に任意のエディションをインストール | SE の雑記](http://engineermemo.wordpress.com/2013/07/08/oem-ライセンス認証-3-0-の環境に任意のエディションを/)


ノウハウ
---------
* シャットダウンを選択し、画面がOffになっても正面カメラ横のLEDが付いているうちは電源がついています。
* 画面真っ暗で動いているかよくわからない場合
  * windowsボタンを押して振動したら電源が付いていると判断出来ます。
* 電源長押しでシャットダウン -> 電源を8秒ほど押し続ける必要があります。
* 音量UP押しながら電源ONすると以下メニューが表示されます。
  * Normal Setup (windows起動)
  * Bios Setup (UEFIファームウェアの設定画面)
  * Boot Menu (USBメモリから起動。microsdから起動できません。)
  * System Recovery (Please wait -> Shiftキーを押しながら再起動したときのメニューと同じ)
* UEFIメニューからSecureBootをOffにする。
  * 起動オプション -> トラブルシューティング -> 詳細オプション -> UEFIファームウェアの設定
  * SecureBootをOffにして起動を始めるとBitLockerのパスワードが入力を求められた。
  * [BitLockerとは](http://www.atmarkit.co.jp/ait/articles/1302/28/news114.html)
* Shiftキーを押しながら再起動を実施するとSystem Recoveryの項目が表示されます。
* EFI はFAT32を認識しますが、NTFSは認識しません。

再セットアップ
------------
* 音量UP押しながら電源ON
  * Boot Menu
  * USBメモリを選択 (画面タッチで選択)
* TPM (Trusted Platform Module)の初期化を聞いてきますので Yes。(BitLocker用？)


回復キー
------------
* [BitLocker回復キー](http://windows.microsoft.com/recoverykey)の取得が必要となります。

windows8.1proにするには
-------------
* [Windows 8.1 Pro Pack](http://bbs.kakaku.com/bbs/K0000582148/#tab) 11,250円ほど必要。ライセンスキーのみの購入となります。
クエリ文字列を連想配列にする

覚書きです。

```js:toObject.js

/**
 * toObject.js
 * クエリ文字列を連想配列にする
 * @param  str {String} "?"を含んだURLなどの文字列
 * @return {Object}
 */
function toObject(str) {
  str = str || location.search;
  var result = {}, hash;
  var param = str.substring(str.indexOf('?')+1).split('&');
  for (var i=0; i<param.length; i++) {
    hash = param[i].split('=');
    result[hash[0]] = hash[1];
  }
  return result;
};

```
Mac OSX MavericksでのJenkins導入メモ

#Xcodeのインストール
App StoreからXcodeをインストール

#コマンドラインツールのインストール
##Xcode5の場合
Safariから以下のURLへアクセスして「Command Line Tools(OS X Mavericks)」をダウンロード
※要Developerアカウント
https://developer.apple.com/downloads/index.action
ダウンロード後、インストールし完了

#Jenkinsのインストール
ターミナルから以下のコマンドを実行

```
brew install jenkins
```

#Jenkinsの起動
ターミナルから以下のコマンドを実行

```
java -jar /usr/local/opt/jenkins/libexec/jenkins.war
```
bundle gemっぽいRubyMotionテンプレートを作ってみた


RubyMotion Advent Calendar 2013 11日目です。

予てより作ってみたかったbundle gemしたときのようなRubyMotion用gemテンプレートを作ってみました。

RubyMotionのテンプレートの作成の方法は、RubyMotion Advent Calendar 6日目にmeganemuraさんが [RubyMotion テンプレートの基本/作り方/gem 化](http://qiita.com/meganemura/items/d99fe6ad407d68f8844b) で書いてくれているのでそちらを参考にしてみるとよいでしょう。

さて、使い方は```motion create```コマンドの```--template```オプションにテンプレートのリポジトリを指定して実行するだけです。
試しに```motion_foo```というgemを作ってみる場合は、次のようなコマンドを実行します。

```shell-session
$ motion create motion_foo --template=https://github.com/toshiwo/bundler_style_template.git
    Create motion_foo
    Create motion_foo/.gitignore
    Create motion_foo/app/app_delegate.rb
    Create motion_foo/Gemfile
    Create motion_foo/lib/motion_foo/version.rb
    Create motion_foo/lib/motion_foo.rb
    Create motion_foo/LICENSE.txt
    Create motion_foo/motion/motion_foo.rb
    Create motion_foo/Rakefile
    Create motion_foo/README.md
    Create motion_foo/resources/Default-568h@2x.png
    Create motion_foo/spec/main_spec.rb
    Create motion_foo/motion_foo.gemspec
````

コマンドを実行すれば、後はmotionコマンドが自動的にgit cloneやtemplateファイルの配置などを行ってくれます。

また、一度templateを使った後は ```~/Library/RubyMotion/template``` にcloneしたtemplateが配置されるので、次回からcloneすることなく、利用することができます。
つまり```motion create motion_bar --template=bundler_style_template```で済むと言うことですね。
(もちろん不要になったら自由に削除もできます)

```shell-session
$ ls -l ~/Library/RubyMotion/template
total 0
drwxr-xr-x  5 toshiwo  staff  170 12 10 20:25 bundler_style_template
```

しかしながら、このテンプレート、 **現時点での最新版であるRubyMotion 2.16では期待通りに動作しません**

このテンプレートを正しく動作させるためには、次のver(恐らく2.17以降)のRubyMotionが必要になりると思います。
(送ったPull RequestはRubyMotionに取り込まれてはいるのですが、そのPRが含まれたverまだリリースされていないのです・・・涙)

2.17がリリースされた際、RubyMotion用のgemを作る際、このテンプレート是非使ってもらえるとうれしく思います。
(あるいはgithubにある[RubyMotion](https://github.com/HipByte/RubyMotion)を使うことで、このテンプレートを使うことも可能です)

***

ここからは、利用者向けにこのテンプレートで生成されるファイルの説明です
生成されるファイルは大きく分けて4種類あります。


まず、このグループはbundle gemした場合と同様のファイルが生成されるようにしてあります。
bundlerでのgemの開発になれている人なら普通に編集しながらgemを開発することができると思います。

* Gemfile
* LICENSE.txt
* Rakefile
* README.md
* motion_foo.gemspec
 

次に、このグループはbundle gemした場合とほぼ同等ですが、```lib/motion_foo.rb```にはRubyMotion用に必要なコードが記述されています。
開発中はほぼ修正することはないと思います。

* lib/motion_foo/version.rb
* lib/motion_foo.rb


3つめのグループは、RubyMotionで```rake spec```を走らせるために必要な```AppDelegate```が入ったファイルとアイコンのファイルです。
作りたいgemによってはAppDelegateの中を変更する必要があるかもしれませんが、恐らくこちらもあまり変更する必要はないと思います。

* app/app_delegate.rb
* resources/Default-568h@2x.png

最後にこのグループのファイルが主にRubyMotion用のgemを開発する際に変更していくファイルになります。

* motion/motion_foo.rb
* spec/main_spec.rb

またmotion createした直後でも、テストが1つが自動で生成されるようになっています。
生成後はまずは```rake spec````してみるの良いかもしれません。


以上で、簡単な生成されるファイルの説明でした。

現在、このテンプレートを使ってRubyMotion用のgemを作っていますが、もしその工程の中で足りない部分やうまく動作しない部分など出てきたらテンプレートともどもアップデートしていく予定なので、良かったら使ってみてください。
Mac OSX MavericksでのApache設定メモ

MacOSX MavericksでApacheを動作させる手順をメモ

#起動時にApacheを自動的に起動
ターミナルで以下を実行

```
sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
```

実行後、Apacheを再起動

```
sudo apachectl restart
```

#httpd.confの編集方法

```
vim /etc/apache2/httpd.conf
```

#DocumentRootの場所

```
/Library/WebServer/Documents
```
IntelliJ IDEAでファイル保存時にcode formatする

# ヒューマンエラーを防ごう

IntelliJ IDEAのMacroとReformat codeの機能を使って、作業ブランチから変更のあった差分だけコードフォーマットを適用するように設定したので、そのメモ。ファイル保存時に設定したコーディング規約に沿って整形されるので、行儀の悪いコードがプロダクトコードに入ることを防げる。

プロジェクト内において定められたコーディング規約に違反しているコードや、単純なミスによる修正は、そのコードを書いた側にも、レビューする側にも負担となる。ましてやそれを手で修正しているのであれば、頻度こそ下がるものの（これは開発者の性格的による側面もありそうだが）、ミスは永遠になくなることはない。

目視には限界があるし、コードの行儀を整えてくれるもの（PHPだと http://cs.sensiolabs.org/ とか）もあるが、バージョン管理下で作業する場合には、作業分とは関係のない変更がコミットに入るのが厄介である。そこで、IntelliJのReformat codeを利用する。Reformatする際に`Only VCS changed text`という便利な項目にチェックを入れておくと、変更箇所だけにフォーマットを適用できる。

Mac版IntelliJ IDEAでのコマンドで記述してあるので、WindowsおよびLinux版を使用している方は適宜読み変えてください。

# 手順

## プロジェクトのコーディング規約に合わせる

`Preferences -> Code Style`

- プロジェクトごとに設定可能
- 使用する言語を適宜設定
- PHPの場合、Set from... -> Predefined Style でPSR1/PSR2やSymfony2等のコーディング規約を拝借できる

## マクロを登録する

![スクリーンショット 2013-12-11 2.51.21.png](https://qiita-image-store.s3.amazonaws.com/0/6436/5ee77f2b-1ce7-420a-bf66-7a4f810bfc0c.png)

 `Edit -> Macros -> Start Macro Recording`

- この後マクロを登録するので、以下のコマンドを実行
- Command + Option + l （エル）
- Command + s（vimmerは:wで）
- Edit -> Macros -> Stop Macro Recording
- 名前をつける。適当にformat and save fileとかで

```
 Reformat codeのダイアログが表示されるので、セレクトボックスは現在のファイルを、下のOnly VCS changed textにチェックを入れる。Do not show this dialog in the futureにもチェックを入れてしまおう。もしこのダイアログを再表示したくなったら、Preferences -> Editor -> Formatting -> Show "Reformat code" dialog にチェックを入れればOK
```

## 保存時に実行されるようキーバインド

![スクリーンショット 2013-12-11 2.51.21.png](https://qiita-image-store.s3.amazonaws.com/0/6436/dc368b43-b204-53c0-0c65-cb232c791145.png)


 `Preferences -> Keymap -> Macros -> format and save file -> add keyboard shorcut`

- Enter Keyboard Shortcutのダイアログが表示される
 - 2回までのキーアクションを登録できる
 - 普通の人はFirst StrokeにCommand + s
 - VimmerはFirst StrokeにShift + ;、Second Strokeにwとかで
- OKを押して、Keymapに登録したアクションが指定されているか確認

## 試してみよう

- 以上で登録は終了。実際に確認してみましょう。

# 最後に

どこかに間違い、アドバイス等ございましたらぜひご指摘ください。また、「変更分だけフォーマットかけたいならこっちの方が早くね？」的なものがありましたらご教授ください。
mruby-simplehttpのhttps対応について

先日、WebPayのアドベントカレンダーにて公開させていただいた[組み込みRubyとWebPayでCAT端末の夢をみる](http://qiita.com/sowawa/items/c1d974319610eada359e)という記事のコメントにて@matsumotoryさんから大変嬉しい「触発されて、simplehttpとhttprequestをHTTPSに対応しておきました。」というコメントを頂きましたので、私も触発されて「mruby-simplehttpのhttps対応」で何が変わったのかという話を書きたいと思います。

@matsumotoryさんには、爆速でhttps対応を取り込んでくれたことに心からお礼申し上げます。

それでは本題へと入って行きましょう。

# httpsが使えるということ

今までのmrubyでは、私の拙い記事で紹介させていただいたようにSSLとソケット使って自前で通信をする必要があり、世の中にあふれるWebサービスをmrubyから楽しく使うことはできませんでした。

mruby-simplehttpは、今回の変更で以下のような記述でhttpsでホストと通信することが出来るようになりました。

```ruby
p SimpleHttp.new("https", "www.google.com").request("GET", "/", {"User-Agent" => "mruby-simplehttp"})
```

WebPayのようなサービスに接続する場合も

```ruby
p SimpleHttp.new("https", "api.webpay.jp").request("GET", "/api/v1/charges", {"Authorization" => "Bearer test_secret_eHn4TTgsGguBcW764a2KA8Yd"})
```

私が書いた[エントリ](http://qiita.com/sowawa/items/c1d974319610eada359e)に比べれば、劇的に簡単にmrubyでWebPayを使えるようになっていますね。素晴らしいですね。

今日の当初の目的としてはここまでなのですが、ここからは@matsumotoryさんに敬意を表して@matsumotoryさんのライブラリ群をフル活用してみたいと思います。

# [mruby-aws-s3](https://github.com/iij/mruby-aws-s3)のhttps対応

simplehttpを使っているライブラリの中で以前からhttpsで通信していないことが気になっていたmruby-aws-s3というライブラリです。AWSのアクセスキーを平文でやりとりするというのはセキュリティ的にいただけないのでこれを機会に修正しましょう。githubで[PR](https://github.com/iij/mruby-aws-s3/pull/1)かけておきます。

# で、言いたいことは

mruby-aws-s3というライブラリは、実は使いようによってはかなりの価値のある使い方をすることができます。

というのも、実はS3上のファイルを独自証明書で配信するには、月額600ドルかけてCloudFrontに独自証明書を導入しなければなりません。CDNとして使われる方は、別に大した価格ではないのですが、S3をホスティングや単純なファイルサーバとして使われている方にはかなり大きな金額です。

[Custom SSL Domain Names and Root Domain Hosting for Amazon CloudFront](http://aws.typepad.com/aws/2013/06/custom-ssl-domain-names-root-domain-hosting-for-amazon-cloudfront.html)
[Amazon CloudFront の独自 SSL 証明書](http://aws.amazon.com/jp/cloudfront/custom-ssl-domains/)

nginxやapache向けに@matsumotoryさんが開発されている[mod_mruby](https://github.com/matsumoto-r/mod_mruby)や[ngx_mruby](https://github.com/matsumoto-r/ngx_mruby)とmruby-aws-s3を連携することでs3を使いながら独自証明書を安価に導入することが可能になります。詳しい解説はこれ以上行いませんが、一般的な使い方であればt1.microを利用したりELB使ったとしても600ドルよりは遥かに安価に実現できます。

（当たり前ですが転送量の多い人はメリットないよ）

普通にRubyでSinatraとかRackとかつないだらいいと思う方もいることと思いますが、Webサーバの組み込みモジュールとしてS3と密連携できるようになるのは個人的にはとても良いと思いました。

というわけで、mruby-simplehttpがhttpsに対応したことでよりmrubyの活用の幅が広がりましたね。@matsumotoryさんの活躍をお祈りして今日のアドベントカレンダーを締めくくらせていただきます。
Portageを便利にブラウズするGUIを作ってみている

個人的に、また、仕事でもいろいろなディストリビューションを触って来ましたが、Gentoo/Linuxは大変すばらしいディストリビューションです。

ドキュメントも揃っており、[Gentooの本家](http://www.gentoo.org/)や[日本語資料](http://www.gentoo.org/doc/ja/)、[12/1の記事](http://qiita.com/naota344/items/60709014309880d28475)になった[GentooWiki](http://wiki.gentoo.org/wiki/Main_Page)、また[naota先生の資料](http://d.hatena.ne.jp/meech/20100826/1282833801)などを読むことによって、大抵のやりたいことが出来るようになります。

しかしながら、UbuntuでGUIに慣れてしまった軟弱者にとっては、[ソフトウエアセンター](https://wiki.ubuntulinux.jp/UbuntuTips/Application/PackageManagementSystem/UbuntuSoftwareCenter)やSynapticのような、パッケージをGUIで閲覧・管理できるツールが欲しいです。ちょっとしたもの（例えば[Porthole](http://porthole.sourceforge.net/)など）は見つかるのですが、いまいち不安定だったり、求めているものとちがうため、常用するには至っていません。

そこで、この機会に elisp で作ってみようと思いました。

- https://github.com/kiwanami/emacs-portage-navi

このリポジトリで作っています。（ごめんなさい！まだまだ途中です。全部は出来てません！！）
必要なものは、portage-utilsとeixです。あらかじめ、eix-updateしておいてください。

ロードパスに置いてみたり、el-getでemacsに読み込ませて、 M-x pona:portage-navi で開始です。
まずは、カテゴリ一覧が出てきます。

![pona1.png](https://qiita-image-store.s3.amazonaws.com/0/603/2fcdbaf6-1d68-32ca-7248-e7ab65342d69.png)

カテゴリをマウスでクリックするなり、カーソールを移動してエンターキーを押すと、そのカテゴリのなかのパッケージ一覧が出てきます。

![pona2.png](https://qiita-image-store.s3.amazonaws.com/0/603/89037910-802f-8c37-4a7e-332b6e0438c1.png)

ここから、パッケージを選ぶと、パッケージの詳細が出てきます。

![pona3.png](https://qiita-image-store.s3.amazonaws.com/0/603/21aadc84-dc05-f75a-cfd7-7dbbb01be9ae.png)

まだ、あまり内容が少ないですが、今後充実させて行く予定です。

また、最初のカテゴリ一覧に「search」というボタンがあり、ここを押す（もしくは M-x pona:open-search-buffer）と、minibufferから検索文字列を入力して、結果を一覧で見ることができます。以下は、javascriptで検索してみた例です。

![pona4.png](https://qiita-image-store.s3.amazonaws.com/0/603/62a50d03-e49f-b4aa-9abf-ffb3be3f78b0.png)

いかがでしょうか。GUIとはいえ、ターミナルで動きますので、リモート先のGentoo/LinuxでもOKです。

単に、コマンドの結果を整形しただけではありますが、Emacsのインクリメンタルサーチが使えますし、画面を行ったり来たりして、ブラウズ出来るため、うまく行けば便利になりそうな気がします。少なくとも、自分が便利に使えるところまでは持っていく予定です。ある程度完成したら、またアナウンスすると思います。

こういうツールが育っていくことで、Gentoo/Linuxがさらに便利になり、ユーザーが増えていくといいなと思っています。
openFrameworksとArduinoを連携させる

ofSerial を使用して **シリアル通信で openFrameworks と Arduino を連携させる** 方法について書きます。

下記書籍を参考にしました。

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4777516393/22301-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51GUHHL9spL._SL160_.jpg" alt="はじめてのopenFrameworks―「クリエイティブ・コーディング」のための「C++」用フレームワーク! (I・O BOOKS)" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4777516393/22301-22/ref=nosim/" name="amazletlink" target="_blank">はじめてのopenFrameworks―「クリエイティブ・コーディング」のための「C++」用フレームワーク! (I・O BOOKS)</a></div><div class="amazlet-detail">泉本 優輝 <br />工学社 <br />売り上げランキング: 799,616<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4777516393/22301-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>

＃上記の本は、厳しいレビューがついていますし、本は薄く、オシャレ感もありませんが、そもそも **国内に2種類しかでてない** oF 専門書のうちのひとつですし、 **Arduino, Wiiリモコン, Kinect** などとのデバイスとの連携方法も載ってて、参考になる部分もあるので、意外とオススメです。

##Arduino側

###回路を組む

<img src="http://f.cl.ly/items/452m1P0o1S2k420N242V/arduino___.jpg">

タクトスイッチの片方をGNDへ、もう片方をデジタルピンの2番に挿しています。


###コード

Arduinoのコードはこんな感じです。

````
const int SW  = 2;

void setup(){

  // シリアル通信開始
  Serial.begin(9600);

  // ピンモード
  pinMode(SW,  INPUT_PULLUP);
}

void loop(){

  // スイッチの値を読み取る
  int value = digitalRead(2);
  
  if (value != HIGH) {
    
    Serial.println(1);
  } 
}
````

タクトスイッチが押されている間、"1" をシリアル通信で送ります。


##openFrameworks側の実装

###メンバ変数を追加

````
int nBytesRead = 0;
ofSerial serial;
char bytesReadString[4];
````

セットアップ

````
void testApp::setup(){

    ofBackground(255,255,255);

    // シリアル通信開始
    serial.setup("/dev/tty.usbmodem1411",9600);
}
````

シリアル通信を開始する `ofSerial::setup` の第1引数にはポート名を指定する必要があるのですが、このポート名は、ArduinoのIDEから、

[Tools] -> [Serial Port]

で確認できます。Arduinoをつないでいるポート名にチェックマークが付いています。


###通信データの読み込みと描画

````
void testApp::update(){

    nBytesRead = 0;
    int nRead = 0;
    char bytesRead[3];
    unsigned char bytesReturned[3];

    memset(bytesReturned, 0, 3);
    memset(bytesReadString, 0, 4);
    
    // シリアル通信で受け取ったデータを読み込む
    while ((nRead = serial.readBytes(bytesReturned, 3)) > 0) {
        
        nBytesRead = nRead;
    };
    
    if (nBytesRead > 0) {

        memcpy(bytesReadString, bytesReturned, 3);
        string x = bytesReadString;
    }
}

void testApp::draw(){

    // 送られてきた文字列を表示
    string msg;
    msg += ofToString(nBytesRead) + " [bytes]" + "\n";
    msg += "read: " + ofToString(bytesReadString);
    ofSetColor(0);
    ofDrawBitmapString(msg, 100, 100);
}
````


##動かしてみる

- モニタ用に Arduino の [Tools] -> [Serial Monitor] を立ち上げておく
- Arduinoのスイッチを押すと、シリアル通信で送られてきた情報が表示される
Riak Controlについて

Riakについて検索したことがあるなら、黒ベースのクールなGUIを目にした人もいるだろう。
しかしRiakのドキュメントを探してもCLIばっかり。
あれは一体どこにあるのか…

## 開発環境で複数台を起動
開発環境riak5台ノードの基本的な操作は[３日目のアドベントカレンダー](http://qiita.com/saisa6153/items/4efa1a2d0316c136e8aa)を参照。
ただし、最初に特定の一台の設定ファイルをちょいといじる。

```
[mymac@localhost riak]$ diff -u dev/dev1/etc/riak.conf dev/dev1/etc/riak.conf.org
--- dev/dev1/etc/riak.conf      2013-12-11 02:08:11.000000000 +0900
+++ dev/dev1/etc/riak.conf.org  2013-12-11 01:21:41.000000000 +0900
@@ -309,11 +309,11 @@
 bitcask.io_mode = erlang

 ## Set to 'off' to disable the admin panel.
-riak_control = on
+riak_control = off

 ## Authentication style used for access to the admin
 ## panel. Valid styles are: off, userlist
-riak_control.auth = off
+riak_control.auth = userlist

 ## If auth is set to 'userlist' then this is the
 ## list of usernames and passwords for access to the
```
その上でクラスタを動かしhttp://127.0.0.1:10018/admin にアクセスすると…
![s_スクリーンショット 2013-12-11 2.17.39 (1).png](https://qiita-image-store.s3.amazonaws.com/0/11737/91342876-786c-3cfc-c892-916a99a58424.png "s_スクリーンショット 2013-12-11 2.17.39 (1).png")
![s_スクリーンショット 2013-12-11 2.16.37.png](https://qiita-image-store.s3.amazonaws.com/0/11737/02c933bc-5749-fa17-149e-adf378467c05.png "s_スクリーンショット 2013-12-11 2.16.37.png")
![s_スクリーンショット 2013-12-11 2.17.45.png](https://qiita-image-store.s3.amazonaws.com/0/11737/9933106a-75dd-6e52-dbf0-d8681a86cf8e.png "s_スクリーンショット 2013-12-11 2.17.45.png")
![s_スクリーンショット 2013-12-11 2.17.53.png](https://qiita-image-store.s3.amazonaws.com/0/11737/135bc5fc-69c9-a7db-cedb-edb4773a9b34.png "s_スクリーンショット 2013-12-11 2.17.53.png")

ふはははは！どうだカッコイイだろう！！
Riakのことが分からないとか言う人達もこれでイチコロだ！！

しかもこのRiak Control、カッコイイだけではなく、クラスタの設定もできるすぐれものだ！
例えば、クラスタの各種ステータスが見れたり、特定のノードをクラスタから安全に離脱させることもできる。
後者の場合、その物理ノードが持っているデータは全て他ノードに移される。
![s_スクリーンショット 2013-12-11 2.25.25.png](https://qiita-image-store.s3.amazonaws.com/0/11737/b6594071-1236-dc49-c98c-d198e4e96760.png "s_スクリーンショット 2013-12-11 2.25.25.png")
あとHTTPSも設定できるので安心！

## まとめ
とはいえ普通はコンソールから使えばいいと思う…
ドットつなぎのキーを使った連想配列を、深い階層の連想配列にする


`{"kinpatch.name":"Tetsuya","kinpatch.familyName":"Takeda"}`

という連想配列と、

`{"kinpatch":{"name":"Tetsuya","familyName":"Takeda"}}`

というのを相互に変換できたら便利かも、と思ったのでやってみた。
（サンプルコードに他意はないです、たまたまテレビで出ていたので）

まずは 深キー→深階層 の変換。

```javascript:mapToDeepMap.js
function makeMap(keyAry,value,tmpMap){
    var key = keyAry.shift();
    if(tmpMap[key]==null){
        tmpMap[key] = (keyAry.length)? makeMap(keyAry,value,{}): value;
    }else{
        if(tmpMap[key].constructor.name=='Object'){
            tmpMap[key] = makeMap(keyAry,value,tmpMap[key]);
        }
    }
    return tmpMap;
}
 
function mapToDeepMap(map){
    var newMap = {};
    for(var key in map){
        makeMap(key.split('.'),map[key],newMap);
    };
    return newMap;
}
 
var sampleMap = {
    "kinpatch.name":"Tetsuya",
    "kinpatch.familyName":"Takeda",
    "date":"2013-12-10"
};
var newMap = mapToDeepMap(sampleMap);
console.log(JSON.stringify(newMap, undefined, 2));
```

次に、深階層→深キー の変換。

```javascript:deepMapToMap.js
function deepMapToMap(map,tmpMap,suffixkey){
    if(suffixkey==null) suffixkey = '';
    if(tmpMap==null) tmpMap = {};
    for(var key in map){
        if(map[key].constructor.name==='Object'){
            deepMapToMap(map[key],tmpMap,suffixkey+key+'.');
        }else{
            tmpMap[suffixkey+key] = map[key];
        }
    }
    return tmpMap;
}
 
var map = {
  "kinpatch": {
    "name": "Tetsuya",
    "familyName": "Takeda"
  },
  "date": "2013-12-10"
};
var newMap = deepMapToMap(map);
console.log(JSON.stringify(newMap, undefined, 2));
```

がんばって書いたけど人が見るとどうなんだろう？
もっと上手に書けたり、そういうライブラリがあるよという人は教えてください。
KnockoutJSの長所／短所とAngularJSとの比較

KnockoutJSを使った開発を1年ほど前に行っていました。
元々はプロトタイピングだけに使う予定でしたが、使い勝手が良かったのでそのまま本開発に取り込みました。

最近、少しAngularについても調査をしていたので、Knockoutと比較できる部分も書きだしてみました。
KnockoutJSの長所／短所、そしてAngularJSとの比較となります。

## 長所：双方向のデータバインディング

Knockoutの最大の長所は、間違いなく強力な双方向のデータバインディングと言えます。
この凄さを試したければ本家サイトのExample各種を試すと良いかもしれません（[参考URL](http://knockoutjs.com/examples/helloWorld.html)）。
あるいは自分自身でサンプル・アプリケーションを作るといいでしょう。
すぐに虜になるはずです。

DOMとJSのモデルを紐付けて、整合性をとる処理を全てフレームワーク側が吸収してくれます。
JS側の記述がシンプルになるので、アプリケーション全体を把握しやすくなります。

## 長所：学習コストの低さ

Knockoutはシンプルです。
AngularだけでなくBackboneと比べても、Knockoutはすぐに身につきました。
元々のシンプルさに加えて、[公式のチュートリアル](http://learn.knockoutjs.com/#/?tutorial=intro)がとてもわかりやすくて素晴らしいのです。
問題をインタラクティブに解くことができるので、素早く理解を深めることが可能です。
（このチュートリアルはあらゆるサービスが目指すべきものだと思いました！）

ただし、学習コストが低いには低いなりの理由があって、Angularほど凝ったことができないから、というのがあります。
Angularと云えばディレクティブですが、このような強力な機能はKnockoutには存在しません。
まあ無くてもとくに困らなかったのですが。

## 長所：柔軟性

KnockoutのViewModel内で、データバインディングを無視してjQueryでDOMを直接処理することに何の規制もありません。自由です。
Knockoutの規則といえばデータバインディングの部分くらいなもので、あとは何しようが勝手です。
AngularではDOMをいじりにくい、みたいな話を聞いたことがありますが、Knockoutではそんなことは無いと思います。やりたい放題です。

また、他のライブラリと組み合わせることでRouterやHistory機能を追加することも可能です。
自分が担当した業務ではjQueryUIをぶち込んで動かしました。
こうした柔軟性はKnockoutの武器と言えそうです。

## 短所：テスタビリティ

Angularでは、DIによるデータの受け渡し、テストを考慮した機能（ngMock）があることからテスタビリティが高いと言われています。
それに比べてKnockoutにはテストを考慮した機能は一切有りません。
自分が業務でKnockoutを利用していたときは、ほとんどKnockoutとは関係無いJSのみをテスト対象としていました。
何かいい方法があるとは思うのですけど、僕は考えることを放棄しました。
誰かベストプラクティスを生み出してください。

## 短所：複数人開発

Angularには、どうも[スタイルガイドがあるようです](https://github.com/mgechev/angularjs-style-guide/blob/master/README-ja-jp.md)。公式ではなさそうですが・・・。
Knockoutには公式のどこを探しても、規模が大きくなったときどうすべきか、という指針がありません。
自分で考えろということでしょうが、そもそもの目的から外れているのかもしれません。

自分が携わった開発ではフロントエンドは自分一人だったのですが、コードが大きくなるに連れて一人なのに混乱してきました。主にKnockoutが保有していない機能を組み込んでいくところでコードが肥大していき、本来Knockoutが持っているシンプルな記述までもが汚染されてしまったのです。
仮に複数人で行っていたらもっと悲惨なことになっていたかもしれません（あるいはマシになっていたかも）。
指針、スタイルガイド、パターンといったベストプラクティスがまだまだ不足している状態です。

## まとめ

単純な機構としてのKnockoutは素晴らしいです。
シンプルで、強力で、見通しが良い。
Rubyのフレームワークで例えると、以下のような印象を受けます。

- Rails ≒ Angular
- Sinatra ≒ Knockout

どちらかを選択するかはアプリの規模によります。
おそらくKnockoutJSが得意とするのは以下の様な形態です。

- 小規模のSingle Page Application
- jQueryだけで扱うには複雑になってしまう機能（複雑なコンタクトフォームなど）
- コードを書くのは基本1人で十分な規模のもの
- プロトタイピング

逆に以下のパターンは苦手という印象。

- 中規模以上のWebアプリケーション
- 複数人での連携した開発
- TDDやBDDを基礎とした開発

ついでに、上記はAngularが得意としている領域です。

## 終わりに

Knockoutは学習コストが低く、手軽です。
AngularやBackboneほどJSプログラミングの知識を必要としません。
それでいて簡単なWebアプリケーションを作成することができます。
この特性はプロトタイピングにも威力を発揮します。
なので、デザイナーやマークアップエンジニアの方がKnockoutを扱えるようになると、できることが格段に増えるのではないかと思うのです。
是非この機会に挑戦してみるのはいかがでしょうか。
ScipyでICA

numpyの勉強を兼ねて久しぶりにICAとか書いてみた.
使ってみると,案外arrayやらmatrixやらの取り扱いが面倒ですね.
なんか良い方法はあるんだろうか？

```python:fast_ica.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import scipy as sp
import numpy as np
import matplotlib.pyplot as plt

def g( val, alpha = 0.01 ):
    return np.tanh( alpha * val )

def gd( val, alpha = 0.01 ):
    return alpha * ( 1.0 - np.asarray( np.tanh( alpha * val ) ) )

def sym_orth( sig ):
    a,b,c = np.linalg.svd( sig * sig.T )
    return np.dot( np.dot( a, np.dot( np.diag( np.sqrt( 1./ b ) ), c ) ), sig )

def fast_ica( sig ):
    m,n = sig.shape

    #白色化
    u,s,v = np.linalg.svd( sig, full_matrices=False)
    v = np.sqrt( n ) * v

    #分離フィルタの初期化
    w = np.random.rand( m, m )
    w = w / np.matrix( [ [ np.linalg.norm( w[ :, x ] ) ] * m for x in xrange( m ) ] ).T
    w = sym_orth( w )

    #ICA
    err = 1.0
    it = 0
    max_iter = 3000
    while 1e-12 < min( err , it < max_iter ):
        last_w = w
        w1 =  np.dot( v , g( np.dot( w.T , v ) ).T )
        w2 = np.multiply( np.dot( gd( np.dot( w.T, v ) ), np.ones( (n, 1 ) ) ) , w )
        w = ( w1 - w2 ) / n
        w = sym_orth( w )
        err = np.sum( np.abs( np.abs(w) - np.abs(last_w) ) )
        it += 1

    #0番目の信号のゲインを基準に分離フィルタを作成
    W = np.dot( np.diag( np.ravel( u[0,] ) ), np.dot( np.diag( s ) , w.T ) )
    return np.dot( W, v )  / np.sqrt( n )

def main():
    #スーパーガウシアンな分布だしラプラス分布で
    s = np.random.laplace( 0., 1.0, ( 2, 10000 ) )
    a = np.asmatrix( np.random.rand( 2,2 ) )
    x = a * s
    y = np.asarray( fast_ica( x ) )
    plt.scatter( y[0,], y[1,] )
    plt.show()
    return

if __name__ == '__main__':
    main()
```
Juliaの開発環境を構築してみる(IJulia)

# Juliaとは？

先日TwitterでRのパッケージRcppやlme4などのパッケージを開発している
Doug Batesという方が `saying "goodbye" to R` してJuliaにシフトする旨
宣言されたということで名前を知りました。

参考
https://stat.ethz.ch/pipermail/r-sig-mixed-models/attachments/20131209/ec911711/attachment.pl
http://d.hatena.ne.jp/amarui/20120221/1329823079

公式サイト http://julialang.org/ のベンチマークを見るとRより圧倒的に速く、更にPythonやGoよりも速いとの事で興味が湧いて触ってみました。

# やること

Mac OS Xに公式サイトに書かれている、IPythonを使ったブラウザベースのJulia開発環
境 `A powerful browser-based graphical notebook interface to Julia.`
を構築してみます。

以下の流れになります。

1. Juliaインストール
2. 環境変数設定
3. Julia起動、IJuliaインストール
4. パッケージインストール
5. IJulia起動

かなり導入の敷居は低いです。

# 本手順の前提条件

* Pythonがインストールされていてpipが使える
* Mac OS X
* Homebrewが利用可能

# 1. Juliaインストール

公式サイトからダウンロードしてきて、他のアプリケーション同様にインストールする
だけです。省略します。

# 2. 環境変数設定

私は以下のように設定しました。

``` r:bash
vim .bash_profile
```

``` r:bash
export PATH=$PATH:/Applications/Julia-0.2.0.app/Contents/Resources/julia/bin
```

``` r:bash
. .bash_profile
```

# 3. IPythonインストール

``` r:bash
pip install pyzmq
pip install tornado
pip install IPython
```

# 4. Julia起動、IJulia,PyPlotパッケージインストール

``` r:bash
julia
               _
   _       _ _(_)_     |  A fresh approach to technical computing
  (_)     | (_) (_)    |  Documentation: http://docs.julialang.org
   _ _   _| |_  __ _   |  Type "help()" to list help topics
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 0.2.0 (2013-11-16 23:44 UTC)
 _/ |\__'_|_|_|\__'_|  |  Official http://julialang.org release
|__/                   |  x86_64-apple-darwin12.5.0

julia> Pkg.add("IJulia")
...
..
INFO: REQUIRE updated.

julia> Pkg.add("PyPlot")
...
..
INFO: REQUIRE updated.

```

以上です、自動でgithubからソースがダウンロードされてビルドされます。
途中でエラーになった際には

``` r:Julia
Pkg.build()
```

で再実行できます。

# 5. IJulia起動

``` r:bash
ipython notebook --profile julia
```

# 5. 試してみる

これでIJuliaがデフォルトブラウザで起動しますので、試しに[New Notebook]で以下の
コードを実行してみると、

``` r:Julia
Pkg.add("RDatasets")
Pkg.add("Gadfly")
using RDatasets
using Gadfly
set_default_plot_size(9inch, 9inch/golden);
plot(dataset("datasets", "iris"), x = "SepalWidth", y = "SepalLength", color="Species")
```

http://julialang.org/
の下部にあるような、みんな大好きRのirisデータセットを使ったD3.jsの綺麗なチャートが出力されます。

![My_First_Julian.png](https://qiita-image-store.s3.amazonaws.com/0/19271/b2496981-6a7f-b04d-b948-7e890d660af4.png)

素敵ですね！！！！
Allegro Common Lisp の excl パッケージをチラ見する

これは、 [Lisp Advent Calendar 2013](http://qiita.com/advent-calendar/2013/lisp) の記事の一つとして書かれました。

-------

# ストーリー

1. Allegro Common Lisp でしっかり動作するLispコードがあった。
2. なんとなく、Armed Bear Common Lisp で動くかどうか試した。
3. あれ、エラーが出る
4. あらら、気づかない内に、Allegro Common Lisp 専用の **excl パッケージ** を使ってたのか。

ということがあり、このexclパッケージの存在が気になっていました。今回は、その内容をざっと見て、「へーそんなのあるのかー」と思ったものをちょっと紹介してみようと思っております。

# どんなものが入っているのか
excl パッケージは、ANSI Common Lisp に対する Allegro 固有の拡張で、固有のパッケージに含まれないものが収められているようです。以下のようなものが入っています。

* [stream 拡張](http://www.franz.com/support/documentation/9.0/doc/streams.htm) :: いわゆる gray stream など
* [国際化](http://www.franz.com/support/documentation/9.0/doc/iacl.htm) :: ストリームに対する external-format 指定の詳細や、localeなど
* [コンパイラ](http://www.franz.com/support/documentation/9.0/doc/compiling.htm) :: コンパイラに対する詳細な指定や、FASLの扱いなど
* OSとのインターフェース :: ファイル操作や、シグナルハンドリングなど
* [同期機構](http://www.franz.com/support/documentation/9.0/doc/smp.htm) :: アトミック操作や、ロックなど
* [正規表現](http://www.franz.com/support/documentation/9.0/doc/regexp.htm)
* [GC](http://www.franz.com/support/documentation/9.0/doc/operators/excl/gc.htm) :: GCの起動や、オブジェクトへの [ファイナライザの登録](http://www.franz.com/support/documentation/9.0/doc/operators/excl/schedule-finalization.htm) など

ほか、 [exit](http://www.franz.com/support/documentation/9.0/doc/operators/excl/exit.htm) なども excl パッケージの内容です。

# 気になった便利(?)オペレータ
## while, until 

* [while](http://www.franz.com/support/documentation/9.0/doc/operators/excl/while.htm)
* [until](http://www.franz.com/support/documentation/9.0/doc/operators/excl/until.htm)

その名の通り、与えた条件が真／偽である間、指定した処理を実行し続けるというもの。先に書いた、「Allegro Common Lisp から別処理系への移植」でうっかり使ってしまっていたのがこれでした。 `loop` マクロで十分なのですが、平易に書けるのでつい使ってしまっていたのかも。

## prefixp

* [prefixp](http://www.franz.com/support/documentation/9.0/doc/operators/excl/prefixp.htm)

第一引数のシーケンスが、第二引数のシーケンスのプリフィックスになってるかどうかを見る。ときどきこういうものを `loop` を駆使して手書きしている気がします。

## if*

* [if*](http://www.franz.com/support/documentation/9.0/doc/operators/excl/if_s.htm)

一番びっくりしたのがこれ。`if` に `then` や `else`, `elseif` といったものを導入し、`cond` よりも括弧の少ない多方向分岐構文を実現しています。また、 `thenret` という、「条件が真だったらとにかくその値を返す」なんてものも含まれてます。

## defadvice と fwrapper

* [fwrapping](http://www.franz.com/support/documentation/9.0/doc/fwrappers-and-advice.htm)

emacs lisp にもある `defadvice` と、改良版の `def-fwrapper` 。Common Lisp なら、 `defmethod` された関数に対してはそうとう融通がきくのですが、普通の `defun` された関数に対してはそうはいきません。 結局、安易に `setf` をぶち込んだりするのですが。。。これからはこっちを使おうかと。

# まとめ
Allegro Common Lisp は、 [そのドキュメントの目次が90項目以上](http://www.franz.com/support/documentation/9.0/doc/contents.htm) あったりします。その入り口をちらっと覗いてみただけのお粗末な記事ですが、なかなか面白いものを見つけられたなと思ってます。

# 余談
Allegro Common Lisp には、80年代のオブジェクトシステムである [Flavors](http://www.franz.com/support/documentation/9.0/doc/flavors.htm) も、含まれているみたいです。
ちょっと面白そう。
emacsのmode-lineのminor-modeなどに色をつける

emacs の mode-line の minor mode の表示が長いので短くしているのですが、単純に短くするとわかりにくいので、色もつけています。

ところが、変数で設定できるようになっているものだと単純に `propertize` して `setq` するだけでは色がつかなかったので、その対処も含めてまとめてみました。

続きは [emacsのmode-lineのminor-modeなどに色をつける](http://blog.n-z.jp/blog/2013-12-11-emacs-color-mode-line.html) です。
CakePHPでリアルタイムにAjaxでバリデーションするプラグイン作りました。

Cakephpは2.3からはHTML5によるバリデーションが自動的にかかるようになりましたが、
やはりモデルで設定したバリデーションをリアルタイムにチェックしたいと思い、
プラグインを作成しました。

https://github.com/nishiyamaosamu/cakephp-ajax-validation

まだ全然作りが甘いので、遠慮無くFork、プルリクエストしてください。
Github初心者の方も歓迎です。githubに慣れてない方も練習台として参加して頂くのも歓迎です！
気軽にどうぞ！
autolayoutの利用する上で知っておくこと


## stroyboardでなにができるか
- 定義してないconstraintを自動的に配置できる
- それぞれのviewになんのconstrantがついているか一覧で確認できる
- constrantは絶対的な指定と相対的な指定のふたつがある
- frameとconstrantで矛盾があれば表示される
- frameとconstrantでどちらに従うか選んで修正することができる

## frameとconstrantとはなにか
- frameとは、storyboard上で指定している位置と大きさ。
- constrantは、viewごとにどのように位置と大きさを指定するか定義している。表示の際は、frameの大きさは関係なくconstrantに従って表示される。

## 相対的に指定とはなにか
- 他のviewのxもしくはyと同じものを指定する
- 他のviewのcenterに合わせる

## 作業手順
- frameを作る
- add missing constraintsを実行する
- viewごとに相対的に指定するのか絶対的に指定するか必要ないのか判断してconstranitを変更する
- エラーが出たら、なにが矛盾しているか確認して、frameとconstrantのどちらを変更するか選んでエラーをなくす

## その他
- retinaで1pxを表現する際は、xcode上ではエラーがでるが、heightに1pxを指定すると動く。
30秒でChatwork APIを使ってマイチャットに投稿する方法


# 1行概要
rubyとHTTP通信ライブラリ`faraday`を使ってChatworkの`マイチャット`に投稿するサンプル。

# 犯行動機
ChatはGETできて半人前、POSTできて一人前。
Skypeとか遠距離恋愛で使ってください。エンジニアの使うものではありません。

# 方法
## 1. faradayのインストール (5秒)

``` shell
$ gem install faraday
Successfully installed faraday-0.8.8
Parsing documentation for faraday-0.8.8
Installing ri documentation for faraday-0.8.8
1 gem installed
```

## 2. ChatworkのマイチャットのグループIDを調べる (5秒)
![Screen Shot 2013-12-10 at 11.03.00 PM.png](https://qiita-image-store.s3.amazonaws.com/0/10272/ff3371de-c62f-52bb-2c57-e5649e6d9f2a.png "Screen Shot 2013-12-10 at 11.03.00 PM.png")

## 3. Chatwork APIのトークンを調べる (5秒)
![Screen Shot 2013-12-10 at 11.06.08 PM.png](https://qiita-image-store.s3.amazonaws.com/0/10272/2ada8651-d3a9-9374-11c5-8c014955f948.png "Screen Shot 2013-12-10 at 11.06.08 PM.png")

## 4. 投稿！ (15秒)

``` ruby:main.rb
require 'faraday'

ROOM_ID = '<ここに2で取得したマイチャットIDを入れる>' # my chat
CHATWORK_TOKEN = '<ここに3で取得したトークンを入れる>'

conn = Faraday::Connection.new(url: 'https://api.chatwork.com') do |builder|
  builder.use Faraday::Request::UrlEncoded
  builder.use Faraday::Response::Logger
  builder.use Faraday::Adapter::NetHttp
end

response = conn.post do |request|
  request.url "/v1/rooms/#{ROOM_ID}/messages"
  request.headers = {
    'X-ChatWorkToken' => CHATWORK_TOKEN
  }
  request.params[:body] = "Hello World!" # => ここに入れる文字が投稿される
end

```

そして実行！

```
$ ruby main.rb
```
PhpStormで他の言語を埋め込む


PhpStormには、PHPのコード中の一部をPHP以外の言語として扱えるLanguage Injectionという機能があります。

文字列の中にHTMLやSQLを書いたときに自然とハイライトされるアレです。

![スクリーンショット 2013-12-10 22.19.29.png](https://qiita-image-store.s3.amazonaws.com/0/3181/5eb8fdad-0a25-c03c-0d2f-c20063995a4e.png "スクリーンショット 2013-12-10 22.19.29.png")

ちなみにSQLはPhpStormでDBの接続設定を行うとテーブルやカラム名の補完やチェックも行ってくれます。すごい。(実際の設定は割愛します)

通常の文字列中で、自動的に言語の判別をしてくれるのはHTMLやSQLの一部の言語だけで、それら以外は手動でLanguage Injectionを設定することが出来ます。`alt + Enter`で現れるコンテキストメニューから`Language Injection`を選択し、候補から選ぶことが出来ます。

![スクリーンショット 2013-12-10 22.27.45.png](https://qiita-image-store.s3.amazonaws.com/0/3181/9af55459-fe94-a2ec-c3e0-5496d04cc9e9.png "スクリーンショット 2013-12-10 22.27.45.png")

![スクリーンショット 2013-12-10 22.28.00.png](https://qiita-image-store.s3.amazonaws.com/0/3181/6c603b2a-eaec-0a51-b017-6bd519b86b04.png "スクリーンショット 2013-12-10 22.28.00.png")

![スクリーンショット 2013-12-10 22.31.45.png](https://qiita-image-store.s3.amazonaws.com/0/3181/276488b3-1a8c-ca68-9407-7205fd430c21.png "スクリーンショット 2013-12-10 22.31.45.png")

シンタックスチェックが行われるのでプレーンテキストではわかりにくかったシンタックスエラーが一目瞭然です。文字列中にHTMLやjavascriptを埋め込むのは若干気が引けますが使わざるを得ないケースは往々にしてあるのでその時は有効活用しましょう。

また、ヒアドキュメントでは終端IDを特定の文字列にすることで自動でLanguage Injectionが行われます。

![スクリーンショット 2013-12-10 22.37.45.png](https://qiita-image-store.s3.amazonaws.com/0/3181/c8215be7-dfba-5af0-718e-d86c6b17c5a3.png "スクリーンショット 2013-12-10 22.37.45.png")

終端IDを言語名にすることでその内側はすべてその言語として扱われます。
文字列中では直接指定できないjavascriptや正規表現も直接指定できるので便利(?)です。あと何気にSQLはPDOやmysqliのプレースホルダに対応しています。


またHTML上でもLanguage Injectionが利用できます。styleタグの中はcss、scriptタグの中はjavascriptとして扱われるのは当然ですが、それ以外の特殊なケースもあります。


![スクリーンショット 2013-12-10 22.46.54.png](https://qiita-image-store.s3.amazonaws.com/0/3181/05b5d862-d143-26b8-a116-04f70d92a8ee.png "スクリーンショット 2013-12-10 22.46.54.png")

javascriptの`executeSql`中の文字列はSQLとして扱われます。
またscriptタグでは中身がtypeで指定されたファイルタイプに応じた言語として扱われます。HTML中にjavascriptで利用するテンプレートを置く際等に利用できます。(ただしテンプレートの種別までは指定できないので物によってはエラーで見苦しいことになります…)

直接利用するシーンはそれほど多くはないと思いますが、埋め込まれたコードの可読性が良くなるので、利用法を覚えておくと役に立つこともあるかもしれません。
個人的にSQLはAcriveRecordを利用しないプロダクトでとても重宝しています。

ということでPhpStormの変態機能Inject Languageでした。
明日からはまた[Vexus2](http://qiita.com/Vexus2)先生のオンステージです！がんばってください！
FuelPHPでのタイムゾーン設定

FuelPHPをインストール後に出る以下のエラー

```php
Error - date_default_timezone_get(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for 'JST/9.0/no DST' instead in COREPATH/classes/fuel.php on line 161
```

このエラーはapp/config/config.phpの97行目付近のタイムゾーンを以下のように設定することで解決します。

```php
'default_timezone'   => 'Asia/Tokyo',
```
Apache-Tomcat構成時の静的ファイルの取り扱い

一つのディレクトリですべてのファイルを管理すると楽でいいが、何も考えないで開発を進めるとTomcatが画像やCSSなどを処理する羽目になるので無駄。

8080ポートではなく、80ポートでtomcatから出力するにはajpで転送する
そのときに転送先を制御することでapacheから画像とかを配信できる

http://www.adminweb.jp/apache/tomcat/
http://open-groove.net/tomcat/ajpconnector/
http://www.adminweb.jp/apache/tomcat/index3.html
実行中のコマンドをバックグランドに切り替える

コンパイルやバックアップなどの時間の見積もりを間違えて、
いつまで経っても終わらない（帰れない）ときの解決方法

1. `Ctrl+z`でジョブを一時停止
2. `bg`でバックグランドで再開させる
3. `jobs`で実行中のジョブを表示
4. `disown`でログアウトしても実行されるようにする

```
$ mysqldump -uroot > dump.sql
# ここでCtrl+z押下
[1]+  Stopped                 mysqldump -uroot > dump.sql
$ bg 1
[1]+ mysqldump -uroot > dump.sql &
$ jobs
[1]+  Running                 mysqldump -uroot > dump.sql &
$ disown %1
```
最初から長くなることがわかっている場合は`nohup`をつけると良い

```
$ nohup mysqldump -uroot > dump.sql &
[1] 12280
nohup: appending output to `nohup.out'
$ logout #しても実行され続ける
```

##### 参考
<a href="http://blog.glidenote.com/blog/2013/09/26/bg-and-disown/">うっかりnohup無しで長時間かかるコマンドを実行したときに後から終了しないようにする - Glide Note - グライドノート</a>
ゲーム制作4日目！！！ ！

#今日のメニュー
・衝突判定実装
・はりぼてスタート画面、ゲームオーバー画面

#衝突判定実装
本日は衝突判定を実装します。
しかし、現在のところオブジェクトが自分の体と頭しかないため、
とりあえず自分の体との衝突判定を実装します。
この機能のテストのために、
スタート画面とゲームオーバー画面の枠を作っておきます。
こちらのサイトを参考に実装します。
[#08 衝突判定をしてみよう](http://dotinstall.com/lessons/basic_enchant_js_v2/11508)

衝突判定には2つの方法があります。
ひとつは`intercect関数`、もう一つは`within関数`です。
intersect関数は、Spriteの大きさをもとに、
２つの要素の衝突判定を行います。
within関数は、２つの要素の中心座標間の距離が、
指定された距離より短いかどうかで衝突判定を行います。
within関数はintersect関数に比べ、
要素間の距離が指定できるという違いがあります。
今回は、within関数を使用し実装を行います。

衝突判定部分を抜粋してソースコードを紹介します。
このコードは、プレイヤーの頭のクラスの中で、
毎フレーム行う処理として定義します。

```js
//衝突判定
//自身の体
if(this.getNext()!=null){
	var body=this.getNext();
	while(true){
		if(body.count<0&&this.within(body,(body.size+this.size)*0.4)){
			game.replaceScene(createGameOverScene());
		}
		if(body.getNext()!=null){
			body=body.getNext();
		}else{
			break;
		}
	}	
}
```

#今日の成果
[今日の成果に飛びます。](https://dl.dropboxusercontent.com/u/35809589/SnakeGame/index.html)
全面青画面がスタート画面です。
画面をクリックすると、ゲームがスタートします。
ゲーム中では左右キーで曲がることができます。
とまることはできません。
下ボタンで増殖します。
自分の体に衝突すると、全面緑色のゲームオーバー画面に飛びます。
ゲームオーバー画面で画面をクリックするとスタート画面に戻ります。
JSのコードをHaxeしたときのこと。

どもー。

最近JSで書かれたアプリケーションを、Haxeに移植しています。んで、まったく難なかったことについてはなす。

# JSのコードをHaxeで書き直したことについて。

さてさてどういうJSコードかというと、JSでかかれたwebアプリケーションのクライアントサイドのJSコードでして、snap.svgでいろいろ描画して、Ajaxでjsonデータとってきたりいろいろしてますた。

結構ちゃんと、JSでクラス化してて、読んでて良いコードですた。んで、やや訳あってHaxeのコードに書きかえますた。

## ほとんどはなんにも問題は起こらなかった!!!

はじめに言っておきますが、結構クラスライクなJSコードでしたので、全く悩むところはありませんでした。すんなり書けますた。

そんなことなんで、あんまりコノJS移植ネタで書くネタが少ないので困ってますww

## 連想配列の型とかの扱いについて。

連想配列にちょっと考えたかなー。


```js
var x = {};
x["ten"] = 10;
x["foo"] = function(x){ return x; }
```

これは実行以前に、連想配列のキーと値が分かれば、構造体にするなりクラスにすれば問題ないのですが、実行時にこういうことされるとDynamicつかうしかないんですよねー。

### Map\<String, Dynamic\>型しかないけど、Dynamicつかいたくない。

けどDynamicは使いたくない。補完効かなくなるし。
まぁ、仕方ないけど、Dynamicを使うしかないんですよねー。

### できるだけ、Dynamicを解消しておく。

なので、Dynamic嫌いなので、さっさとDynamicな変数を解消しておきますた。

```hx
class Sample{
	public static function main(){
		var map : Map<String, Dynamic> = ["one" => 1, "foo" => function(x){ return x; }];
		var foo : Int -> Int = map.get("foo");
		trace(foo(10));
	}
}
```

## まとめ。

### もともとのJSのコードが素晴らしすぎた!!!

JSはDynamic型の変数が多くなるので、できるだけ少なくするテクニックを書きたかったけど、書けずじまいですた。
秒速でねこ画像を集めてネコヒルズ族を目指す

####概要
先日作ったスクリプト
[feedparserで自動的にねこ画像を拾ってくる](http://qiita.com/kurehajime/items/dac4b4cca51e52af3152)
のお陰で猫画像収集が捗る日々…

しかしどうも、実行速度が遅い。
速さが足りない…このスクリプトには速さが足りない。
というわけでどうにか速くできないか改造を施してみる。

####まずは現状分析
とりあえず現行スクリプトがどのくらい遅いのかを計測してみた。
以下、計測ロジックを組み込んだソース。

```py:get_cat.py
# -*- coding: utf-8 -*-
import feedparser
import urllib
import os
import  time

def download_picture(q, count=10):
    u"""qの画像をcount件 取ってくる。"""
    count = str(count)
    feed = feedparser.parse("https://picasaweb.google.com/data/feed/base/all?q=" + q + "&max-results=" + count)
    pic_urls = []
    for entry in feed['entries']:
        url = entry.content[0].src
        if not os.path.exists(os.path.join(os.path.dirname(__file__), q)):
            os.mkdir(os.path.join(os.path.dirname(__file__), q))
        urllib.urlretrieve(url, os.path.join(os.path.dirname(__file__), q, os.path.basename(url)))
        print('download:' + url)

if __name__ == "__main__":
    time1=time.time()
    download_picture("cat", 10)
    time1_2=str(time.time()-time1)
    print("complete!("+time1_2+")")
```

```:結果
complete!(6.05635690689)
```

10枚ダウンロードするのに６秒かかった。
何回か試してみたけどやっぱり大体6秒。
これで24時間に14400枚しかダウンロードできない。
理想には程遠い。

####httplib2
風のうわさでhttplib2というライブラリの存在を知った。
というか標準のよりこっちのほうが定番らしい。
httplib2の特徴(↓)。

* キャッシュが使える。
* gzip圧縮が使える。

素晴らしいじゃないか。
ではさっそく使ってみよう。

```
$ sudo pip install httplib2
```

サクッとインストール。
そしてプログラムを修正。

```py:get_cat2.py
# -*- coding: utf-8 -*-
import feedparser
import httplib2
import os
import time


def download_picture(q, count=10):
    u"""qの画像をcount件 取ってくる。"""
    count = str(count)
    feed = feedparser.parse("https://picasaweb.google.com/data/feed/base/all?q=" + q + "&max-results=" + count)
    pic_urls = []
    http = httplib2.Http(".chache")
    for entry in feed['entries']:
        url = entry.content[0].src
        open(os.path.join(os.path.join(os.path.dirname(__file__), q),os.path.basename(url)),'wb').write(http.request(url)[1])
        print('download:' + url)

if __name__ == "__main__":
    time1=time.time()
    download_picture("cat", 10)
    time1_2=str(time.time()-time1)
    print("complete!("+time1_2+")")
```

変わったところ。

* import文が変わった。
* urllib.urlretrieve()がhttp.request()になった。
* いちいちフォルダの存在確認をしなくなった

さっそく実行！

```:実行結果
まずは元のプログラム。まぁこんな感じ。
complete!(5.79861092567)

改良版。ん？
complete!(5.06348490715)
改良版2回め。おお…
complete!(1.20627403259)
改良版3回め。うおおおお！
complete!(0.768098115921)
```

っ速い！
これなら十分実用的。秒速と言っても嘘にはならない。

**結論:httplib2を使うと猫画像収集が捗る。**
実例で学ぶDockerコマンド

[Docker Cheat Sheet](https://gist.github.com/wsargent/7049221)というDockerの基礎のまとめが良かったので翻訳してみた（[Docker 虎の巻](https://gist.github.com/tcnksm/7700047)）．このまとめは説明は十分にあるが，例がほとんどない．実例を使って，コンテナとイメージに関する基礎コマンドをまとめてみる．

## OS XでDockerを使う場合

vagrantを使ってる場合は今すぐ1.4にバージョンを上げる．
[Download Vagrant - Vagrant](http://www.vagrantup.com/downloads.html)より.dmgをダウンロードしてきてインストール. 

``` bash
vagrant init precise64 http://files.vagrantup.com/precise64.box
```

Vagrantfileを以下のようにすれば，すぐにDockerを使える．

``` rb
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "precise64"
  config.vm.provision :docker do |d|
    d.pull_images "ubuntu"
  end  
end
```

ログイン

```bash
vagrant ssh 
```

## 準備

コンテナのIDをいちいち保持しておくのは面倒，忘れるので，以下のaliasをホスト側で設定しておくと直近に起動したコンテナのIDを呼び出すことができるようになり便利 （[15 Docker tips in 5 minutes](http://sssslide.com/speakerdeck.com/bmorearty/15-docker-tips-in-5-minutes)）．


``` bash
alias dl='docker ps -l -q'
```

## コンテナ

コンテナを作成する．`-d`オプションでバックグラウンドで実行する．

``` bash
docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
```

コンテナを停止する．

``` bash
docker stop `dl`
```

コンテナを起動する．

``` bash
docker start `dl`
```

コンテナを再起動する．

``` bash
docker restart `dl`
```

起動中のコンテナに接続する．

``` bash
docker attach `dl`
```

コンテナ内のファイルをホストにコピーする．

``` bash
docker cp `dl`:/etc/passwd .
```

ホストのディレクトリをコンテナにマウントする．

``` bash
docker run -v /home/vagrant/test:/root/test ubuntu echo yo
```

コンテナを削除する．

``` bash
dockr rm `dl`
```

## コンテナの情報

起動中のコンテナを表示する．停止中のコンテナも表示するには，`-a`オプション．

``` bash
docker ps
```

コンテナの情報（IPなど）を表示する.

``` bash
docker inspect `dl`
```

コンテナのログを表示する．

``` bash
docker logs `dl`
```

コンテナのプロセスを表示する．

``` bash
docker top `dl`
```


## イメージ


コンテナからイメージを作成する．タグ名は\<username>/\<imagename\>が[奨励されている](http://docs.docker.io/en/latest/use/workingwithrepository/#committing-a-container-to-a-named-image)

``` bash
docker run -d ubuntu /bin/sh -c "apt-get install -y hello"
docker commit -m "My first container" `dl` tcnksm/hello
```

Dockerfileからイメージを作成する．

``` bash
echo -e "FROM base\nRUN apt-get install hello\nCMD hello" > Dockerfile
docker build tcnksm/hello .
```

イメージ内にログインする．`-rm`オプションをつけるとコンテナの停止後にそのコンテナは破棄される．

``` bash
docker run -rm -t -i tcnksm/hello /bin/bash
```

イメージをリモートレポジトリにアップロードする．あらかじめ[Docker index](https://index.docker.io/)にアカウントを作成しておく必要がある．今回の例は[こちら](https://index.docker.io/u/tcnksm/hello). 

``` bash
docker login
docker push tcnksm/hello
```

イメージを削除する．

``` bash
docker rmi tcnkms/hello
```

## イメージの情報

イメージ一覧を表示する.

``` bash
docker images
```

イメージの詳細情報(IPなど)を表示する．

``` bash
docker inspect tcnksm/hello
```

イメージのコマンド履歴を表示する．

``` bash
docker history tcnksm/hello
```
rspecを導入してみた


## テストしてますか！？
僕は非常にテストが苦手です。
なんでだろうと思い起こすと、自分の性格が関係しているのだと思います。
動くところをすぐに見たくて、早く動かしてみたくなってしまうんです。
テストを書いておくと動作確認が早くできます。
`使い捨て`か`プロトタイプ`でもない限り、テストは必要です。
という事で、テストを`rspec`で書いてみようと思います。

## minitestを使ってみる
標準でインストールされている`minitest`を使ってみてから`rspec`と比較してみましょう。
`Meme`クラスに`i_can_has_cheezburger?`のメソッドを作成します。
なれるまでは大変なのですが、テストから書いてみましょう。

> `OSX 10.9` `ruby 2.0.0-p353`で操作確認しています。

```ruby:test_meme.rb
require_relative 'meme'
require 'minitest/autorun'

class TestMeme < MiniTest::Unit::TestCase
  def setup
    @meme = Meme.new
  end

  def test_that_kitty_can_eat
    assert_equal "OHAI!", @meme.i_can_has_cheezburger?
  end
end
```

`i_can_has_cheezburger?`のメソッドを定義しましょう。
戻り値は`nil`でいいです。

```ruby:meme.rb
class Meme
  def i_can_has_cheezburger?
    nil
  end
end
```

さて、実行してみます。

```shell-session
$ ruby test_meme.rb
MiniTest::Unit::TestCase is now Minitest::Test. From test_meme.rb:4:in `<main>'
Run options: --seed 60940

# Running:

F

Finished in 0.024583s, 40.6785 runs/s, 40.6785 assertions/s.

  1) Failure:
TestMeme#test_that_kitty_can_eat [test_meme.rb:10]:
Expected: "OHAI!"
  Actual: nil

1 runs, 1 assertions, 1 failures, 0 errors, 0 skips
```

`OHAI!`という文字列が返ってくることを期待しているが、実際は`nil`が返っているのでテストは失敗しているという結果です。
`i_can_has_cheezburger?`メソッドに`OHAI!`を返すようにしてテストを実行してみます。

```ruby:memo.rb
class Meme
  def i_can_has_cheezburger?
    "OHAI!"
  end
end
```

さて、実行してみます。

```bash
$ ruby test_meme.rb
Run options: --seed 60679

# Running tests:

.

Finished tests in 0.000784s, 1275.5102 tests/s, 1275.5102 assertions/s.

1 tests, 1 assertions, 0 failures, 0 errors, 0 skips
```

今度は成功しました。
他のテストの書き方もあるようなので紹介します。

```ruby:meme_spec.rb
require_relative 'meme'
require 'minitest/autorun'

describe Meme do
  before do
    @meme = Meme.new
  end

  describe "when asked about cheeseburgers" do
    it "must respond positively" do
      @meme.i_can_has_cheezburger?.must_equal "OHAI!"
    end
  end
end
```

テストが失敗したときに`when asked about cheesebergers`と表示されるので、ここにどんなテストかを書いておけば、debugには役に立ちそうです。

## RSpecを使ってみる

さて、そろそろRSpecを使ってみましょう。まずは、インストールからですね。

```ruby:Gemfile
source "https://rubygems.org"

gem "rspec", "~> 2.14.1"
```

```bash
$ bundle install --path=vendor/bundle
Fetching gem metadata from https://rubygems.org/.........
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Installing diff-lcs (1.2.5)
Installing rspec-core (2.14.7)
Installing rspec-expectations (2.14.4)
Installing rspec-mocks (2.14.4)
Installing rspec (2.14.1)
Using bundler (1.3.5)
Your bundle is complete!
It was installed into ./vendor/bundle
```
さーてインストールできたぞ。

```ruby:meme_rspec.rb
require_relative 'meme'

describe Meme do
  before do
    @meme = Meme.new
  end

  describe "when asked about cheeseburgers" do
    it "must respond positively" do
      @meme.i_can_has_cheezburger?.should eq("OHAI!")
    end
  end
end
```

そして、早速実行。

```bash
$ bundle exec rspec meme_rspec.rb
.

Finished in 0.00108 seconds
1 example, 0 failures
```
## 最後に
`minitest`と`RSpec`を使ってみました。
今回のケースだけでいうとどちらも同じような書き方ができることが分かりました。
次回は、もう少し深く`RSpec`を使ってみようと思います。
テストが好きになってきました。（言い聞かせているwww）