OmniAICreator/Qiita-1.07M huggingface dataset:
SSLを有効にしたNginxが自動起動しなくなった時の対処法

ある日のこと、SSLを有効にしたNginxが、サーバ再起動時に自動的に立ち上がらなくなった。

いろいろ調べたところ、どうやらSSLの秘密鍵にパスフレーズが設定されていて、Nginx起動前にパスフレーズの入力が求められていることが原因みたい。

以下のサイトによると、秘密鍵からパスフレーズを削除すればよいとのこと。

[Nginx SSL passphrase at startup | Pandemonium Illusion](http://pandemoniumillusion.wordpress.com/2008/04/21/nginx-ssl-passphrase-at-startup/ "Nginx SSL passphrase at startup | Pandemonium Illusion")

まず、秘密鍵を退避。

```
$ cp cert.key cert.key.org
```

次に、`cert.key`をパスフレーズなし秘密鍵で上書き。コマンド実行時にパスフレーズを求められるので正しく入力する。

```
$ openssl rsa -in cert.key.org -out cert.key
```

最後に、安全のため秘密鍵のパーミッションを変更。

```
$ chmod 400 cert.key
```

このあと、Nginxを再起動して正しくアクセスできるかを確認すればOK。

今まではNginxの終了・起動時に毎回パスフレーズの入力を求められていたけど、それもなくなった。
Feed Post Sample


Facebook APIを使ってFeed Postするサンプル
iphoneのSafariで確認済み

## see also
https://developers.facebook.com/docs/guides/mobile/web/

```html
<!DOCTYPE html>
<html>
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
<body>
<div id="fb-root"></div>
<button onClick="loginuser()">login</button>
<div id="user-info"></div>
<img src="xxxxxx">
</body>
</html>
<input type="text" id="memo">
<button onClick="postFeed()">postFeed</button>
<script>

	function postFeed(){
		var obj = {
			method: 'feed',
			redirect_uri: 'http://localhost/feed.html',
			link: 'xxxxx',
			picture:'oooooooo',
			caption:'test',
			description:'testtest'
		};
		FB.ui(obj, function(response){
			console.log(response);
		});
	}

(function(d){
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "//connect.facebook.net/en_US/all.js";
     ref.parentNode.insertBefore(js, ref);
}(document));

window.fbAsyncInit = function(){
    FB.init({
      appId      : 'ooooooo', // App ID
      channelUrl : '//localhost/channel.html', // Channel File
      status     : true, // check login status
      cookie     : true, // enable cookies to allow the server to access the session
      xfbml      : true  // parse XFBML
    });
    FB.Event.subscribe('auth.statusChange', handleStatusChange);
}


function loginuser(){
	FB.login(function(response){
		console.log(response);

	}, {scope: 'publish_actions'});
}

function handleStatusChange(response) {
	console.log(response.authResponse);
  document.body.className = response.authResponse ? 'connected' : 'not_connected';
  if (response.authResponse) {
	console.log(response);

	updateUserInfo(response);
  }
}
function updateUserInfo(response) {
 FB.api('/me', function(response) {
	 console.log(response);
   document.getElementById('user-info').innerHTML = '<img src="https://graph.facebook.com/' + response.id + '/picture">' + response.name;
 });
}
</script>
```
hubot-twitterアダプタをinstallしてbin/hubotするとTypeErrorで困ってる件


hubotをTwitterアダプタ被せて使おうと思ったらダメでしたって話です。

	$ bin/hubot -a twitter -n TWITTER_USERNAME

	ERROR Cannot load adapter twitter - TypeError: Object #<Object> has no method 'robot'
	TypeError: Object #<Object> has no method 'robot'
    at Object.<anonymous> (hubot/node_modules/hubot-twitter/src/twitter.coffee:7:28)
    at Object.<anonymous> (hubot/node_modules/hubot-twitter/src/twitter.coffee:169:4)



ここから最新のhubotをダウンロードして、パス通したり書いてある通りしました。hubot自体はちゃんと動きました。
https://github.com/github/hubot/

	$ export PATH="node_modules/.bin:$PATH"
	$ bin/hubot
	Hubot> hubot echo hello
	Hubot> hello


そしてTwitterアダプタをインストールしました。
https://github.com/MathildeLemee/hubot-twitter

	$ hubot -a twitter
	$ npm install


で、package.jsonのdependenciesも追加しました。

    "hubot-twitter": ">= 2.0.4",
    "hubot": ">= 2.0.0"


なんでダメなのかわからなくて困っています、、、ふぅぅ。
秘密鍵からパスフレーズを取り除く


以下のコマンドを実行することで、パスフレーズ付きの秘密鍵からパスフレーズを取り除くことができる。

```
openssl rsa -in <パスフレーズ付き秘密鍵> -out <出力先ファイル名>
```

パスフレーズを取り除いたあとの秘密鍵の取り扱いには注意しましょう。（パーミッションなど）
Capistranoでの配備時に`Could not parse PKey: no start line`エラーが発生した時の対処法


`cap`コマンドを実行した時に以下のようなエラーが発生することがある。
```
ArgumentError: Could not parse PKey: no start line
```

パスフレーズ付きの秘密鍵を使おうとしていて、かつそれに対応する公開鍵が存在していないことが原因のよう。

以下のコマンドを実行して、対応する公開鍵を出力すればいいとのこと。

```
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
```

参考：
[net-ssh 2.6.0 issues · Issue #286 · capistrano/capistrano](https://github.com/capistrano/capistrano/issues/286 "net-ssh 2.6.0 issues · Issue #286 · capistrano/capistrano")
PadrinoでRESTfulなURLを作ろう


Padrinoの好きなところはsinatraよりURLを管理しやすくて、Railsのroutes.rbのように別ファイルで設定するわけではないのが自分的には楽なところ。

基本は全部[Padrinoのドキュメント](http://www.padrinorb.com/guides/controllers)にあるんですが、そこら辺の自分なりのまとめを。



例としてブログシステムのURLを作るとして。

```ruby:posts.rb
# 投稿用のコントローラ
UrlTest.controllers :posts do

  # 全投稿を持ってくる。タイムライン的なものを取得するなら。こんな感じかな。
  # /posts
  get :index do
  end

  # 下書きを全部取得するなら
  # /posts/drafts
  get :drafts do
  end

  # 指定したIDの投稿を取得する。
  # /posts/:id
  # 例) /posts/150
  get :index, :with => :id do
    # withで指定した名前でparamsに入れてくれるので
    # 以下のようにIDを取得して投稿の検索に使える。
    Post.find params[:id]
  end

  # 指定したブログの投稿を全部取得する。
  # /blogs/:blog_id/posts
  # 例) /blogs/10/posts
  get :index, :parent => :blogs do
    # parentで複数形を指定しても単数形_idでparamsに設定してくれる
    blog = Blog.find params[:blog_id]
    # で、取得したブログに紐付けた投稿を取得したりしやすい。
    blog.posts
  end

  # あるユーザーの投稿を全部取得する
  # /users/:user_id/posts
  # 例) /users/123/posts
  # もちろん数字じゃなくても受け取れる
  # 例) /users/kakkunpakkun/posts
  get :index, :parent => :users do
  end

  # あるユーザーの指定したブログでの投稿を全部取得する
  # /users/:user_id/blogs/:blog_id/posts
  get :index, :parent => [:users, :blogs] do
    # parentの配列で指定した順にURLを作ってくれる
    # で、受け取ったparamsからこんな風に検索するのに使えたりする。
    User.find(params[:user_id]).blogs.find(params[:blog_id]).posts
  end

  # 指定した年月の投稿を全部取得する
  # /posts/:year/:month
  # 例) /posts/2012/12
  get :index, :with => [:year, :month] do
    # withの配列で指定した順にURLのパスを作ってくれる
    year  = params[:year]
    month = params[:month]
  end

  # 指定したブログに指定したユーザーがある年月に投稿した投稿を全部取得する
  # /blogs/:blog_id/posts/:year/:month
  get :index, :with => [:year, :month], :parent => :blogs do
  end

  # 上の例にさらにユーザーを指定する
  # /users/:user_id/blogs/:blog_id/posts/:year/:month
  get :index, :with => [:year, :month], :parent => [:users, :blog] do
  end

  # さらにその中で下書きだけにする
  # /users/:user_id/blogs/:blog_id/posts/drafts/:year/:month
  get :drafts, :with => [:year, :month], :parent => [:users, :blog] do
  end

  # いやいや、年月を入れるなら/2012/12/postsという感じにしないとでしょというならこれかな。
  # mapを使い始めると管理大変になってくるけど。。
  get :year_month_posts, :map => "/:year/:month/posts" do
  end
end
```

特にこういうURLはWebAPIを作成するときにうれしい。すごくWebAPI向きだと思ってて、最初にPadrinoを使った時もWebAPIを提供したくて使った。

ところどころ「そんなURL必要か？」というのもあるけどそこはあくまで例ということで。


時々組み立てようとしてるURLをどのコントローラに書けばいいのか迷うけど、要はなんの情報を扱いたいのかで考えれば迷わずに済む。
MagicalRecordでCoreDataをMagical簡単に！

「CoreData？何だか難しそう。。。」
「CoreData？簡単なアクセスも冗長だよねぇ」
「というかCoreData面倒じゃね？」

はい、私もそう思ってました。
じゃあ外部Libraryに頼ろう！と思い色々調べた結果、「MagicalRecord」が簡単そうだと。

導入〜保存までの一連の流れを備忘録を兼ねて書いておきます。

1.gitからdownload
[ここ](https://github.com/magicalpanda/MagicalRecord.git "MagicalRecord")からローカルに保存

2.プロジェクトの取り込み

1で保存したMagicalRecordからMagicalRecordディレクトリをProjectにコピー

3.プロジェクト構成変更

・〜Prefix.pchに以下の内容を追加

```objective-c:〜Prefix.pch
    // #define MR_SHORTHANDがないと以下のcreateEntityが使えない
    #define MR_SHORTHAND
    #import "CoreData+MagicalRecord.h"
```

4.CoredataのModelを生成

ここはGoogle先生に聞けばいいので省略

5.CoreDataの初期化〜保存

```objective-c:AppDelegate.m
     // 初期化処理を追加
     - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        // 文字列指定だとProjectFileのカレントに作成されます.
        [MagicalRecord setupCoreDataStackWithStoreNamed:@"sample.sqlite"];

        // NSURLを渡すと指定された場所に作成されます。
        // 以下の例ではLibrary/Cache以下に作成されます。
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,    NSUserDomainMask, YES);
        NSString* path = [paths objectAtIndex:0];
        path = [path stringByAppendingPathComponent:@"sample.sqlite"];
        NSURL* url = [NSURL fileURLWithPath:path];

        [MagicalRecord setupCoreDataStackWithStoreNamed:url];
    }

    // CleanUp処理を追加
    -(void)applicationWillTerminate:(UIApplication *)application {
          [MagicalRecord cleanUp];
    }
```

6.データを生成 and 保存

```objective-c:ViewController.m
     // ViewControllerの適当なボタン押下Event
     // PersonModelが定義されている前提
     // Personはname及びageの属性を保持
     -(IBAction) addEntity:(id)sender {
        NSManagedObjectContext *context = [NSManagedObjectContext MR_defaultContext];
         Person* person = [Person createEntity];
         // 値を設定.
         person.name = @"hoge";
         person.age = 15;
         // 値を保存
         [context MR_saveNestedContexts];
     }
```

以上の流れで保存までできます。
CoreDataをガチで書くより簡単なのでおすすめかもしれません。
（もしかして何か間違ってるかもしれないので、その時はご指摘ください。。。）
git push heroku master でnodeのバージョンがちげーよと怒られる時


    $ git push heroku master

       npm ERR! Not compatible with your version of node/npm: connect@2.3.4
       npm ERR! Required: {"node":">= 0.5.0"}
       npm ERR! Actual:   {"npm":"1.0.106","node":"0.4.7"}


package.jsonで宣言してるNode.jsのバージョンが古いよ！

って怒られてます。
古いサンプルをそのまま動かしてるとこういうこともあるようです。

`package.json`のNode.jsのバージョンを新しくして解決。


#####package.json

    "engines" : {
    "node": "0.8.x",
    "npm":  "1.1.x" },


このとき、注意。

1. {}のあとにカンマ忘れずに
2. nodeのバージョンが0.9.xだとエラー出るので0.8.xにした。herokuのnodeのバージョンが0.9ではないみたいなので、最新にすればいいってもんでもないみたい（2012.12.24時点）
3. package.jsonを変更したら `git add .` して `git commit` すること

単純なことだけど、結構ハマりポイントですというかハマったし。
誰得なAlexandriaの紹介

# Alexandriaとは

[Alexandria](http://common-lisp.net/project/alexandria/)はCommon Lispのユーティリティライブラリです。必須ではないけれどあったら便利な関数やマクロが収録されています。

ここではAlexandriaに収録されている関数やマクロの中で、割と日の目を見ないものをみっつ紹介します。本当は真面目にド定番なのを紹介した記事を書いていたのですが、Firefoxさんが固まって電子の海へ還っていきました。正直ワロタ。

----

# destructuring-case

destructuring-caseはcaseとdestructuring-bindの組み合わせです。

> destructuring-case keyform &body clauses

という感じのマクロで、それぞれのclauseは

> ((case-keys . destructuring-lambda-list) form*)

という構造になっています。

手っ取り早く説明すると、keyformのcar部に対してcase-keysを使ってcaseでマッチングさせ、マッチしたらdestructuring-lambda-listに従ってcdr部をdestructuring-bindで分解し、その中でformを実行します。言葉にしたら訳わかりませんね。こんな感じです。

```
(destructuring-case '(:x 0 1 2)
  ((:x x y z) (list x y z))
  ((t &rest rest) :else))
;=> (0 1 2)

(destructuring-case '(:y 0 1 2)
  ((:x x y z) (list x y z))
  ((t &rest rest) :else))
;=> :ELSE
```

リストに対する簡易なパターンマッチングという感じですが、keyformのcdr部を無視したい場合のタイプ数とかを考慮すると、あれっ？　意外と使いにくい？　と思えてくる一品です。多分気のせいじゃないです。

----

# format-symbol

マクロを定義するときに

```
(intern (format nil "~a-~a" x y) :package)
```

なんて感じのコードを書いたことは割とあるんじゃないでしょうか。

format-symbolを使えばこう書けます。

```
(format-symbol :package "~a-~a" x y)
```

あんまり差がないように見えるのは心が汚れているせいです。ピュアな人には違いが分かってもらえると思います。

----

# map-iota

loopはあんまり好きじゃないけどdotimesもどうよ、な人に新たな救世主が！

```
(loop for n to 10 do (print n))
(dotimes (n (1+ 10)) (print n))
```

がこう書けます。

```
(map-iota #'print 10)
```

Alexandriaのiota関数を使って作ったリストに、第一引数の関数を適用するって感じです。戻り値は第二引数で固定なので、副作用が目的の場合に使うと良いでしょう。

---

# まとめ

割と誰得っぽい風味のアイテムをみっつ紹介しましたが、Alexandriaにはwith-gensymsやonce-only、define-constant、compose、curry、mappendなどの定番かつ便利な関数やマクロも多く収録されています。使っていない人は一度試してみてください。使ってる人も、コードやドキュメントを読み返すと、意外な発見があるかもしれません。
HerokuでDailyCron以上のことをさせる方法

ここが超絶参考に。

Herokuでcron？もう古いかも、それ
http://marutanm.hatenablog.com/entry/20110719/p1

> ProcfileでClockwork gemをつかったclockプロセスを指定してやることにより、cronを使わずともタスクスケジューリングできてしまうのです。

> 通常rackアプリに使われるwebプロセスを動作させず、clockプロセスだけを動作させれば無料ですね。

Botなどつくるのには最適。
あざぁす。
Capistranoによるdeploy後にsitemapを再生成する


[sitemap_generator](https://github.com/kjvarga/sitemap_generator "kjvarga/sitemap_generator · GitHub")というgemを使うと、RailsアプリケーションのXML Sitemapを簡単に出力することができる。

sitemap_generatorはCapistranoにも対応していて、deploy後に自動的にsitemapを再生成することが可能。

方法は簡単。`deploy.rb`に以下を記述すればOK。

```
after "deploy", "refresh_sitemaps"
task :refresh_sitemaps do
  run "cd #{latest_release} && RAILS_ENV=#{rails_env} bundle exec rake sitemap:refresh"
end
```

ドキュメントでは`bundle exec`がない記述が紹介されてるけど、こちらのほうが安全。
praat: TextGridデータを利用した音声データの分割方法


自分でも忘れてた。

1. Soundオブジェクトと対応するTextGridオブジェクトを指定
2. Extract - > Extract all intervals…を指定
3. Tier numberに希望のtierを番号で指定する。このときPreserve timesにチェックすると通しの時間軸情報が利用される

以下疑似スクリプト

```praat:
select SoundName$plus TextGridName$Extract all intervals... 1 yes
#この場合だとtier 1のannotationデータで通しの時間軸情報で分割される
```
関数===オブジェクト？

```javascript
// 関数を定義してみる。この関数がnewした際のコンストラクタにあたるらしい。
var obj = function(x){ this.x = x; };

// プロパティabcを設定してみる。
// 関数はオブジェクト？
obj.abc = "abc";

console.log(obj);
// function (x){ this.x = x; }

// 関数は初めからprototypeというプロパティを持っている。
console.log(obj.prototype);
// [object Object]

// prototypeはプロパティを持っていない。
for(var elem in obj.prototype){
  console.log(elem);
}
//

// prototypeのプロパティを設定してみる。
obj.prototype.get = function(){ return this.x; };
obj.prototype.set = function(x){ this.x = x; };

for(var elem in obj.prototype){
  console.log(elem);
}
// get
// set

// 関数のプロパティの有無の確認(prototypeは含まない)。
console.log(obj.hasOwnProperty("abc"));
// true
console.log(obj.hasOwnProperty("get"));
// false

// objからオブジェクトを作成してみる。
var A = new obj(3);
console.log(A.get());
// 3
console.log(A.set(4));
// undefined
console.log(A.get());
// 4

var B = new obj("hoge");
console.log(B.get());
// hoge
console.log(B.set("foo"));
// undefined
console.log(B.get());
// foo

// 当然、Aオブジェクトには影響がない。
console.log(A.get());
// 4


console.log(A.prototype);
// undefined

// エラー！
// 関数とオブジェクトは別物みたいね。
// var C = new A("hoge");
```

こういう連鎖が出来るのかと期待していたw。

```javascript
var a = function(){};
var b = new a();
var c = new b();
var d = new c();
```
プレゼント企画 新テーマを題材にした「テーマ作成事例」 

これは、[XOOPSアドベント・カレンダー2012](http://qiita.com/advent-calendar/2012/xoops-themes-templates/participants "XOOPSアドベント・カレンダー2012")のリレーブログ記事です。

#プレゼント企画 新テーマを題材にした「テーマ作成事例」 

作成するテーマは、文字どおりクリスマスらしいテーマ x-mas。
ベースは「2012年のトレンド満載テーマその１　trend2012」を利用します。

さて、trend2012がどのようにしてx-masに変わるのか？
そのエッセンスをお届けしたいと思います。

・・・と、ここに転載しようかと思ったのですが、少々長いので私のサイトの記事をご覧くださいませ。

[詳しくはこちらをご覧ください。](http://xoops123.com/modules/xpwiki/index.php/XOOPS%E3%81%A7Web%E3%82%B5%E3%82%A4%E3%83%88%E3%82%92%E4%BD%9C%E3%82%8D%E3%81%86/%E3%83%86%E3%83%BC%E3%83%9E%20x-mas%20%E4%BD%9C%E6%88%90%E4%BA%8B%E4%BE%8B "詳しくはこちらをご覧ください。")
helm(anything)をより便利に使うための tips

helm(anything)は単に補完機能の強化という意味で用いるだけでも
強力なツールなのですが、いくつかの機能を覚え、使いこなすことで
さらに強力なツールとして使うことができます。
そのための tipsを紹介しようと思います。

[http://d.hatena.ne.jp/syohex/20121224/1356330903](http://d.hatena.ne.jp/syohex/20121224/1356330903)
隠れマルコフモデル(HMM)の式変形をちゃんとやる

# はじめに
みんな！メリークリスマス！
[Machine Learning Advent Calendar 2012](http://qiita.com/advent-calendar/2012/machinelearning)の24日目を担当させて頂く[@teramonagi](https://twitter.com/teramonagi)です。想像以上にガチンコ勢だらけでビックリです。お手柔らかにお願いします。

# 本日の内容
さて、内容ですがみんな大好きPRML
![PRML（下巻）](http://ec2.images-amazon.com/images/I/418MuoJetFL._SL500_AA300_.jpg)
の第13章「系列データ」に載っている２つのトピック

+ HMMの最尤推定（Baum-Welchアルゴリズム）
+ フォワード・バックワードアルゴリズム

について、詳しく式変形した計算ノートを作成しましたというお話です。
計算ノート自体は**[Githubにて公開いたしております](https://github.com/teramonagi/Document/tree/master/HMM
)**
ファイル本体はこちら⇒**[ファイル（PDF)](https://github.com/teramonagi/Document/blob/master/HMM/HMM.pdf?raw=true)**

一応チェックはしていますが、誤字脱字やら計算ミスがあると思いますので、皆さまからのプルリクエストお待ちしております！

# 最後に
主催者である@naoya_tさん、このような機会を作っていただきありがとうございました。
栄えあるラスト12月25日を飾るのはtakminさんです。宜しくお願い致します。
Sphinx+pLatex+dvipdfxmで美文書作成tips

@adachi_cです。

Sphinxからlatex経由でpdf作成のtips的な話です。

といっても、セットアップだとかmakeの方法については本家サイトを見ればわかるので、そっちを参照してください。

sphinxのセットアップについては以下の記事を参照してください。
http://sphinx-users.jp/index.html

sphinxからlatex経由でpdf出力については以下の記事を参照してください。
http://sphinx-users.jp/cookbook/pdf/latex.html

latexだと経験がない人にこれで書けというのが難しいですが、Sphinxなら経験がなくても書いてもらうことが簡単です。そもそも記法が簡単なので。今回は私含めて5人で本を作り、私含む全員Sphinx初心者でしたが簡単にそろえることができました。一時間で習得して原稿あげてきた人もいました。

Sphinxはドキュメント作成のためのツールで、ノリとしてはOctpressに似てますが、私はOctpressより簡単だと思いました。

さて、普通にsphinxから
make latexpdfja
とすると、texが動的に生成され、そこからpdfも出力されます。

ですが、細かな部分がきちんとなっていません。例えば、letterbookサイズのPDFができてしまっています。b5jでなければ、同人誌の印刷屋さんに出せないので大変です。

なので、Sphinxで.rstができたあと、
make latex
としてください。
そうすると、_build/以下に、a.tex(aはプロジェクト名とする)ができてるんで、そいつに細かい修正をいれればOKです。

たとえば、b5にするには、

```latex:a.tex
-\documentclass[letterpaper,10pt,dvipdfmx]{sphinxmanual}
+\documentclass[b5j,10pt,dvipdfmx]{sphinxmanual}
```

として、
$platex a.tex && dvipdfmx -p b5 a.dvi
とすればb5サイズのpdfができます。

そうしたら、今度は左右上下のマージン余白がおかしいことになってたりすることが多いのですが、以下のようなコードを入れて調整します。

```latex:a.tex
\setlength{\hoffset}{0cm}
\setlength{\voffset}{0cm}
\setlength{\textwidth}{16.7cm}
\setlength{\textheight}{23cm}
\setlength{\marginparwidth}{1cm}
\setlength{\marginparsep}{1cm}
```

あと、画像の入る大きさで、改ページ位置がずれてるんで、これも直す。

```latex:a.tex
-\includegraphics{photo_k03.jpg}
+\scalebox{0.600000}{\includegraphics{photo_k03.jpg}}
```

白黒にするには、

```latex:a.tex
\expandafter\def\csname PYG@tok@gd\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.63,0.00,0.00}{##1}}}
````

のようなコードがSphinxからの自動生成で吐かれているので、これを全部消す。

とりあえずそんなところですかね。
あと、sphinxにはブロック図や数式を出力する便利なプラグインがついてて、これも環境依存、truetypeフォントをロードするであることが多いので、OSが違う人同士で編集する場合、注意が必要です。


さて、そんなわけでこうやって仕上げた美文書は、コミックマーケットの東のレガリア@３日目東X26aというサークルに出品してますので、皆さんお越し下さい。
今回は私はドラゴンクエストX自動レベル上げについて記載してます。表紙も素朴な感じでとてもいい！

ではでは。ありがとうございました。
sassでanimationを記述するためのmixin


こんな感じで実現した。
但し、sassのバージョンが3.2以上である必要がある。

``` sass:animation.sass
=keyframes($name)
  @-webkit-keyframes #{$name}
    @content
  @-moz-keyframes #{$name}
    @content
  @-ms-keyframes #{$name}
    @content
  @keyframes #{$name}
    @content

=animate($name: fadeIn, $duration: 1s, $delay: .2s, $function: ease, $mode: both)
  +experimental(animation, $name $duration $delay $function $mode)  
```

## 使い方

```
+keyframes(sample-animation)
  from
	font-size: 100px
  to
    font-size: 10px

div
	+animation(sample-animation, 1s, 0s, ease-in-out)
```

## 参考
http://thecssguru.freeiz.com/animate/
Ember.js アイテム追加時にアニメーションさせる

Ember.jsは、配列に要素追加時などに自動で反映してくれるのがいいところですが、時には要素追加時にアニメーションなどの特殊な効果を追加したい時があります。
Ember.ViewのdidInsertEventフックを使うことで、これを実現できます。

サンプルコードを以下に示します。

```html
  <script type="text/x-handlebars">
    {{#each todos}}
      {{view App.TodoView content=this}}
    {{/each}}

    <button {{action "appendTodo"}}>Append Todo</button>
  </script>

  <script type="text/x-handlebars" data-template-name="todo">
    <div class="Todo">
    Todo Item
    </div>
  </script>
```

.TodoクラスはCSSで、display: noneに設定されています。App.TodoViewがDOMに追加されたタイミングでアニメーションしながら表示します。

```javascript
App.TodoView = Ember.View.extend({                                                       
  templateName: 'todo',                                                                  
  content: null,                                                                         
  didInsertElement: function() {                                                         
    this.$('.Todo').show(1000);
  }
});
```

App.TOdoViewのdidInsertElementで、アニメーションしながらTodoアイテムを表示するように指定しています。簡単ですね。

以下のページで実際の動作を確認できます。

http://kmdsbng.github.com/emberjs_array_animation_sample/
GCDでトランザクション

@adachi_cです。
GCDを使うことでObjective-Cプログラミングが一気に楽しくなります。簡単に書くと、

* マルチスレッド化
* 非同期I/O
* 排他制御

このあたりのことがカジュアルに実装できるんですね。@synchronizedや、pthreadに比較して早いと。しかし、iPhone4かそれ以前だとシングルコアなので、性能が出ないのではと思うこと、あるいは実行したいタイミングであるコンテキストが実行されない、なども多々あり…ということの留意も必要です。

さて、今日はもっと基本の話で、23日目にBlocksで、モデルをシングルトンにして、UI更新をBlocksにするといいよという話をしました。
モデルをシングルトンにするとは、以下のようなことで、AVAudioPlayerManagerというクラスを用意して、このクラスはシングルトンなので、静的に一つだけインスタンスが作られる。


```Objective-C:AVAudioPlayerManager.m
+ (AVAudioPlayerManager*)sharedAVAudioPlayerManager;
```

```Objective-C:AVAudioPlayerManager.m
@implementation AVAudioPlayerManager

+ (AVAudioPlayerManager*)sharedAVAudioPlayerManager
{
    static dispatch_once_t pred = 0;
    __strong static id _vrObject = nil;
    dispatch_once(&pred, ^{
        _vrObject = [[self alloc] init];
    });
    return _vrObject;
}

```

あらゆるビューなどからは、AudioPlayer関連の操作は全部このインスタンスにアクセスさせて、このシングルトンの状態をきっちりトランザクションする、ということであちこちにAudioPlayerインスタンスを作って、同期させる必要がなくなるし、メモリ確保、解放で落ちる心配もありません。排他制御が複雑でどうしようもなくなるという心配もありません。

ではトランザクションさせるのはどうやるかというと、シングルキューでやる。

```Objective-C:AVAudioPlayerManager.m

//トランザクション用シングルキュー
static dispatch_queue_t transaction_queue;
static dispatch_queue_t get_transaction_queue() {
    if (transaction_queue == NULL) {
        transaction_queue = dispatch_queue_create("transaction_queue", NULL);
    }
    return transaction_queue;
}

```

状態の種類を用意する。

```Objective-C:AVAudioPlayerManager.h

typedef enum{
	NotReady = 0 ,
	Ready,
	Running
} PMStat;

@interface AVAudioPlayerManager : NSObject <AVAudioPlayerDelegate>
{
    AVAudioPlayer *player;
    
    PMStat runningStatus;
}

-(void)prepare; //NotReady -> Ready
-(void)start; // Ready -> Running
-(void)teardown; // Running -> NotReady
```

で、このシングルトンの状態を３つ定義しました。NotReady,Ready,Runnningです。つまり、シングルトンを操作するために、prepare, start, teardownという基本的なメソッドが3つ必要になるという話になると思います。

```Objective-C:AVAudioPlayerManager.m

-(void)prepare{
	dispatch_sync(get_transaction_queue(),^{
		if(runningStatus != NotReady){
			return;
		}
		/*準備処理、AudioUnitまわりの初期化やAVAudioPlayerにURLを設定するなど*/
	    runningStatus = Ready;//うまくいったら、最後に状態かえる
	});
}

-(void)start{
	dispatch_sync(get_transaction_queue(),^{
		if(runningStatus != Ready){
			return;
		}
		/*再生処理など*/
	    runningStatus = Running;//うまくいったら、最後に状態かえる
	});
}

-(void)teardown{
	dispatch_sync(get_transaction_queue(),^{
		if(runningStatus != Running){
			return;
		}
		/*AudioUnitまわりの終了処理など*/
	    runningStatus = NotReady;//うまくいったら、最後に状態かえる
	});
}
```

という感じで、トランザクションさせる。状態がおかしければ、実行されないことが保証される。で、ここから、たとえばメソッドをなるべく拡張したくないが、拡張する場合も、どの状態なら受け付けて、どういう状態に遷移するのか、きっちり設計したうえで、上記のような実装で実装すればOK。

外から呼び出すときは、

```Objective-C:AVAudioPlayerManager.m

[[AVAudioManager sharedAVAudioPlayerManager] prepare];
[[AVAudioManager sharedAVAudioPlayerManager] start];
[[AVAudioManager sharedAVAudioPlayerManager] teardown];

```

みたいな感じでどこからでも気軽に呼び出すことができる。トランザクションされているので、排他制御できてないことによる矛盾や不正なメモリ領域の参照で落ちることはない。

こういうトランザクション的なことをきちんとやっておけば、あとあとかなり混乱が防げるし、23日で書いたBlocksでUI更新する方法と組み合わせるのがまぁオススメですねという話でした。

以上、25日目でした。ありがとうございます。
Blocksとdelegateの基本

@adachi_cです。

今日はBlocksとdelegateのわりと基本的な話をしようと思います。まず、言いたいこと。

* delegateで書いていたところをBlocksで書くことで、だいたいコードの量が減るのでできるだけdelegateやめましょう。
* @propertyも減らしましょう。後任の人ができたときに見づらくてもうかなわないのでこれは私からお願いです。あと、dispatch_async+@propertyでカジュアルな書き換え／参照の合わせ技もやめて欲しい感じですね。
* モデルでシングルトンで書けるところはもうシングルトンでお願いします。UIの更新もBlocksでいいのでは。

とりあえず、このへんのことをスッキリやれるのがBlocksとGCDなんで、その辺のことに2日アドベントカレンダーをいただいて、皆さんに説明できたらいいなと。



たとえば、キーパッドのビューコントローラがあって、AボタンとBボタンがある。で、それを押したら他のビューに通知して、他のビューのUI更新したい。

従来の場合だと、キーパッド側でこのようにプロトコルを書いて

``` Objective-C:KeypadViewController.h
@protocol KeypadViewDelegate
-(void)aPushedUpdate:(id)sender;
-(void)bPushedUpdate:(id)sender;
@end

@interface KeypadtViewController : UIViewController {
    id  delegate_;
}
@property IBOutlet UIButton *aButton;

-(IBAction)aPushedUpdate:(id)sender;
-(IBAction)bPushedUpdate:(id)sender;

@end

```

以下のように、他のビューに通知すればいいですね。

```Objective-C:KeypadViewController.m

-(IBAction)aPushedUpdate:(id)sender
{
	[delegate aPushedUpdate:sender];
}
```

で、通知受ける側はdelegate実装する。

```Objective-C:GameViewController.h
@interface GameViewController: UIViewController<KeypadViewDelegate>{
	KeypadViewController *keypadViewController;
}
@property IBOutlet UIVIew *view;
-(void)aPushedUpdate:(id)sender;
@end
```

```Objective-C:GameViewController.m

#pragma mark KeyPadViewDelegate
-(void)aPushedUpdate:(id)sender
{
	/*UIの更新処理を書く*/
	[self.view update];
}
```

まず、これをBlocksでやればdelegate書かなくていいと。
@property定義しないかわりに、Block型変数を定義します。これはcopyだとiOS4.3のバグで落ちますので、assignにしておきます。

```Objective-C:KeypadViewController.h

typedef void(^__view_update)();
@interface KeypadtViewController : UIViewController
    
@property IBOutlet UIButton *aButton;
@property (assign) __view_update *onAPushed;

-(IBAction)aPushedUpdate:(id)sender;
-(IBAction)bPushedUpdate:(id)sender;

@end

```

```Objective-C:KeypadViewController.m
-(IBAction)aPushedUpdate:(id)sender
{
	if(self.onAPushed){
		self.onAPushed();
	}
}
```
こんな感じで短いです。

で、UI更新したいビューのほうは以下のように、デリゲート実装する必要ない。

```Objective-C:GameViewController.h
@interface GameViewController: UIViewController{
	KeypadViewController *keypadViewController;
}
@property IBOutlet UIVIew *view;
@end
```

init時に更新処理をコピーする。

```Objective-C:GameViewController.m
-(id)init{
	self.keypadViewController = [^{
		dispatch_sync(dispatch_get_main_queue(), ^{
			/*UIの更新処理を書く*/
			[self.view update];
		});
	} copy];
}
```

こんな感じでかなり短いし簡単で見やすいので、デリゲートやめようという話と、あと、これがKeypadViewControllerみたいなViewControllerじゃなくて、モデルの場合、シングルトンにしてしまって、そいつにcopyして、トランザクションするようにすると、解放処理考える必要もないし、アプリが落ちる心配も減ります。それは25日のやつで説明します。

以上、23日目でした。ありがとうございます。
MacBook Pro を手に入れて最初にやったこと


この記事は [Hadoop Advent Calender の第23日目](http://www.zusaar.com/event/437104)です．この記事では，私が MacBook Pro を手に入れてすぐにやったことをまとめていきます．

### 開発環境を整える

なにはともあれ，開発環境を整えましょう．

1. [XCode](https://developer.apple.com/xcode/) をインストールする．
2. [Java 1.6](https://developer.apple.com/xcode/) をインストールする．
3. [homebrew](http://mxcl.github.com/homebrew/) をインストールする(インストール方法は，homebrew のページの一番下段)．
4. git，maven3，protocol buffers を homebrew 経由でインストールする．

```
    brew install git maven maven protobuf-c
```

### 動作確認をする

この際ですから，インストールした java/git/maven/protoc がまともに動作することを確認したいところですね．これらの動作確認を一気に行うには，以下のコマンド実行します．

```
git clone git://git.apache.org/hadoop-common.git
cd hacoop-common
mvn package -Pdist -DskipTests 
```


SUCESS と出たら，やりましたね！うまく動作している証拠です．せっかくなので，hadoop-common ディレクトリ中にある *.java ファイルを変更して，再度

```
mvn package -Pdist -DskipTests 
```

とすると，なんと皆さん独自の Hadoop ディストリビューションが出来上がります！

### 次のステップ

たまたまですが，shiumachi さんの記事[hadoop コミュニティ開発メモ](http://d.hatena.ne.jp/shiumachi/20120114/1326469091) のうち，"用意するもの" の項の用意ができてしまいました．引き続き，[shiumachi さんの記事](http://d.hatena.ne.jp/shiumachi/20120114/1326469091)の事前準備の項に従い，Hadoop コミュニティにパッチを投稿するとよいでしょう．

Have a nice hack!
Scene Managerの使い方[有料Asset]

Unityでシーンを遷移するときってヽ(ﾟ∀ﾟ)ﾉ ﾊﾟｯと切り替わってしまって美しくないと思ったことありませんか？
中には自前でフェードのスクリプトを作っている方もいると思いますが、そんな時間がない！とかめんどくさがり屋の僕のような方にお得なアセットです。

## 本家URL
[http://docs.ancientlightstudios.com/display/SCEMA/Scene+Manager](http://docs.ancientlightstudios.com/display/SCEMA/Scene+Manager)
ページ内の動画でこんなことができるよ！というのが確認できます。
ちなみにAsset Storeで買った時点では$35でした。

## 使い方

### インポートする
![インポートする](https://dl.dropbox.com/u/46503306/qiita/sm1.gif)
まずはAsset Storeからプロジェクトにインポートします。

### シーンをいっぱい作る
![シーンをいっぱいつくる](https://dl.dropbox.com/u/46503306/qiita/sm2.gif)
こんな構成で作ってみます

* タイトル画面
* ステージ１
* ステージ２
* ステージ３
* ステージ４
* ステージ５

### 設定ファイルを作る
![Configurationディレクトリ](https://dl.dropbox.com/u/46503306/qiita/sm3.gif)
Scene Managerの設定ファイルは設置場所が決まっています。
「Resources」ディレクトリを作成し、その中に任意の名前でもう一つディレクトリを作成します。
今回は「Configuration」という名前で作ります。

![Create](https://dl.dropbox.com/u/46503306/qiita/sm4.gif)
作成したディレクトリ内で「右クリック→Create」を表示させ「Scene Configuration」を選択すると、

![設定ファイル](https://dl.dropbox.com/u/46503306/qiita/sm5.gif)
設定ファイルができました！

### シーンを登録する
![Inspector](https://dl.dropbox.com/u/46503306/qiita/sm6.gif)
設定ファイルのInspectorをみるとこんなかんじです。
プロジェクト内のシーンファイルが全て見えるようになっています。
サンプルのシーンが邪魔です。

ボタンの説明をすると

* 「level」→ゲームでごりごり動くシーン
* 「screen」→タイトル画面や結果画面などあんまり動かないシーン
* 「ignore」→選択したシーンをゲームから外す
* 「First Screen」→最初の画面
* 「After last Level」→最後のレベルの後に遷移する画面

詳しくは[こちら](http://docs.ancientlightstudios.com/display/SCEMA/Reference)

これを
![シーン設定](https://dl.dropbox.com/u/46503306/qiita/sm7.gif)
こんな感じに設定します。
設定したら「Activate」ボタンを押して設定を反映させます。

その後、おもむろに「File→Build Setting」を見てみると・・
![BuildSetting](https://dl.dropbox.com/u/46503306/qiita/sm8.gif)
なんと今設定したシーンがちゃんと登録されているではありませんか！ステキ！抱いて！

### ラッパーをつくる
公式リファレンスによると、ラッパーを作れとのこと。
Assetに含んでおいてくれればいいのに。

```csharp:GameEnvironment.cs
using System;
using UnityEngine;
public class GameEnvironment {

 private static GameEnvironment instance;
 private SMSceneManager sceneManager;

 public static GameEnvironment Instance {
   get {
     if (instance == null) {
       instance = new GameEnvironment();
     }
     return instance;
   }
 }

 public SMSceneManager SceneManager {
   get {
     return sceneManager;
   }
 }

 private GameEnvironment() {
   sceneManager = new SMSceneManager(SMSceneConfigurationLoader.LoadActiveConfiguration("{任意のディレクトリ名}"));
   sceneManager.LevelProgress = new SMLevelProgress(); 
 } 
}
```
これを作っておくとどこからでもstaticで呼べます。
任意のディレクトリ名は先程Resourcesの下に作ったディレクトリ名を入れます。
今回の場合「Configuration」です。
ちなみに[リファレンスにあるサンプル](http://docs.ancientlightstudios.com/display/SCEMA/Reference)はtypoしてました。

### シーンを遷移させる
今回は
タイトル→１→２→３→４→５→タイトル→１→２→・・・
このように遷移させたいと思います。

まずタイトルシーンから最初のレベルに遷移したいので

```csharp:Title.cs
GameEnvironment.Instance.SceneManager.LoadFirstLevel();
```

ステージシーンでは次のステージに遷移したいので

```csharp:Stage.cs
GameEnvironment.Instance.SceneManager.LoadNextLevel();
```

これらをそれぞれシーン内のオブジェクトにくっつけます。

そしてできたサンプルが→[こちら](https://dl.dropbox.com/u/46503306/qiita/SceneManagerTest.html)

少しイジってフェード以外の効果を出してみました。
しかしこの効果Mobileでは動かなかった・・

とはいえシーン管理はとてもしやすそうでいい感じです。
これからのアップデートに期待です。
Rake で自分のマシンのセットアップを省力化する


Rake とは「Ruby で書かれた Make っぽいもの」でだいたい合っている。

単にタスクに必要な処理をまとめておいて呼ぶ、くらいの使い方でも便利ではあるけれど、Make をリスペクトして用意されたファイルタスクなどを絡めるともっとおもしろいことができる、という話。

## ファイルタスク

リファレンス・マニュアルなどに詳しい説明があるが、簡単に表現すると「あるファイルを作るためのタスク」である。

典型例でいうと実行バイナリの生成など。必要なヘッダにリンクしつつ適切なパラメータとソースファイルをコンパイラに渡す、といったことをファイルタスクが責任をもって定義する。

## タスクの事前条件

タスクには、それが必要とする事前条件を定義することができる。

たとえばコンパイルを実行するタスクならば、必要なファイルや準備を定義したタスクを事前条件に指定しておくことで、必要であれば事前にそれらを実行する。

これがけっこう賢くて、たとえば事前条件にファイルを指定しておいて、かつそのファイルに対してファイルタスクを定義しておくと、ファイルが存在しないときにそのファイルタスクが実行される。

## 開発ツールを Homebrew でインストールする

OS X におけるパッケージ管理ソフトウェアとして [Homebrew](http://mxcl.github.com/homebrew/) を使っている。

Git や Z shell (zsh) は日常的に使う開発ツールで、新しいマシンをセットアップする際には、まず入れる。

Git と Z shell, この2つくらいならシェルスクリプトに `brew install zsh git` とか書いておくくらいで事済むが、たとえば wget も入れたいとか、hub も入れたいとか、日常的に使うツールはだんだん多くなってきたりする。

## Homebrew と Rake

最近の Homebrew は `$HOMEBREW_ROOT/opt/$formula` から `$HOMEBREW_ROOT/Cellar/$formula/$latest_version` への symlink を張るようになっている。

つまり `$HOMEBREW_ROOT/opt/$formula` に対するファイルタスクを定義しておくと自動化がしやすそう。

```ruby
HOMEBREW_ROOT = '/usr/local'

namespace :homebrew do
  file File.join(HOMEBREW_ROOT, 'opt', 'zsh') do
    sh 'brew', 'install', 'zsh'
  end

  namespace :zsh do
    desc 'Install zsh with Homebrew'
    task :install => [File.join(HOMEBREW_ROOT, 'opt', 'zsh')
  end
end
```

これで `rake homebrew:zsh:install` を実行すると、Z shell がインストールされていない場合のみ `brew install zsh` を実行しようとする。

## 発展

 * Ruby のインストール
   * `~/.rbenv/versions/$version` が存在しなければ

などもできる。

https://github.com/aereal/dotfiles/blob/master/Rakefile にもっといろいろ書いてある。

## おわり

標準ライブラリはいろいろおもしろいライブラリがある。
iPhone用のWebインスペクタを使おうとすると「調査可能なアプリケーションがありません」といわれる


参考リンク
[iOS6からの新機能！iPhone Safariで表示したページのデバッグがすんごく楽になるWebkit Webインスペクタがスゴい](http://www.yoheim.net/blog.php?q=20120913)

#現象
上記の記事の通りに進めて、Safariのメニューで開発→xxxのiPhoneを選択すると「調査可能なアプリケーションがありません」と言われる。

#解決策
iPhoneのSafariの設定メニューで、プライベートブラウズをオフにする
CoffeeScriptでクロージャ関数をつくる



クロージャとは、「静的な変数を持つ関数」
その関数を繰り返し呼んだとしても、
ある変数の値をリセットせずに保持し続ける。





```クロージャ関数の定義
closure = ->

  x = 0 //これが静的変数となる。

  //関数で関数を返す。
  //この関数に処理をかく。
  return childFanc = ->
	x++
	alert x
```

```結果
closureTest = ->
  //クロージャ関数の生成
  clsr = closure()

  clsr() # 1
  clsr() # 2
  clsr() # 3
  clsr() # 4
  clsr() # 5
```
TitaniumのWebView内Javascript開発の効率化

この記事は、[Titanium mobile Advent Calendar 2012](http://atnd.org/events/34644)の24日目の記事です。

###Titaniumでハイブリッドアプリ
去年あたりからUI部分はHTML5で構築しながらも端末の豊富な機能の利用できるハイブリッドアプリが一つのトレンドかと思います。

もちろんUIとネイティブ側どちらもJavascriptで開発できるTitaniumも充分その流れに乗る資格はあるでしょう。

しかしTitaniumのWebViewではJavascriptのエラーや動的なDOMの構造の把握が難しく__お世辞にも開発環境として効率的とはいえません。__

###餅は餅屋
そもそもリモートサーバーとAjaxで通信するのもTitanium側にTi.App.fireEventでイベントを送るのもシリアライズされたデータの受け渡しという点では変わりがないはず。

だとすれば__Titanium側へのイベントの送受信をリモート(ローカル)サーバーで代用できれば貧弱なWebViewの代わりにブラウザを使って開発ができてみんなが幸せになれる__、、、かも。

これを実現するためにTitanium側へfireEventの呼び出しをちょっと工夫してAjax通信のように

```javascript:ajax.js
ajax({
    url: "http://~",
    params: {a: 'foo', b: 'bar'},
    success: function(data) { },
    error: function(data) { },
    complete: function(data) { }
});
```

レスポンスをコールバックで処理するようにしておくと__イベントの送受信先としてサーバーとTitaniumを切り替えて開発することが簡単になりそうです。__

###Ajax風にTitanium.App.fireEventを呼び出す
実際にやってみましょう。やり方はいろいろあるかと思いますがここではTi.App.addEventListener()一回きりで使い捨てる方法をとってみます。

```javascript:index.js
//他のリクエストを処理中かどうか
var isConnected = false;
_ajaxLikeRequest = function (attr) {
    var complete, error, fakeUrl, params, success, _callback;
    fakeUrl = attr.url || '';
    params = attr.params || {};
    success = attr.success || function () {};
    error = attr.error || function () {};
    complete = attr.complete || function () {};

    //Titanium側からレスポンスが帰ってきた時に呼び出されるコールバック
    //iOSではsetTimeoutでcallstackを断ち切らないとうまく動作してくれない。    
    _callback = function (data) {
        setTimeout(function () {
            //すぐにコールバックはunbind
            Ti.App.removeEventListener('response', _callback);
            if (data.status === 'success') {
                success(data);
            } else {
                error(data);
            }
            complete();
            isConnected = false;
        }, 0);
    };
    Ti.App.addEventListener('response', _callback);

    //Titanium側のグローバルイベントを呼び出す     
    Ti.App.fireEvent('dispatch', {
        fakeUrl: fakeUrl,
        params: params
    });
    isConnected = true;
};
```

WebView側からのEventを受信するネイティブ側はこのような感じになります。

```javascript:app.js
//webViewが発信したグローバルイベントを受信してfakeUrlで振り分ける
_dispatch = function (e) {
    if (e.fakeUrl === 'ti/hello') {
        _fakeServerRequest(e.params);
    } else if (e.fakeUrl === 'ti/goodbye') {
        _fakeServerRequest(e.params);
    }
};

//処理後webViewにグローバルイベントでレスポンスを返す。
_responseToWebView = function (data) {
    Ti.App.fireEvent('response', {
        status: data.status,
        message: data.message
    });
};

Ti.App.addEventListener('dispatch', _dispatch);
```

実際の例は[こちら](https://github.com/ofl/AjaxLikeRequest/tree/master/Resources)
もしTi.App.fireEventでデータのシリアライズ方法を詳しく調べたい場合は[こちら](https://gist.github.com/4362175)

また今回の例はWebView(HTML)側=>Titanium側へのイベントの受け渡しですが、逆方向やWebView以外のWindow間などでも同じように使えるかと思います。

### ハイブリッドアプリをTitaniumで開発する上で今後調べておきたいこと
1. mobilewebに関する日本語情報が少ない。今回のAdvent Calendar 2012でも取り上げる人がいなかった。
2. AlloyがTitaniumerに一般化することでWebView内のJavascriptにもunderscore.jsでテンプレートを使うことが一般的になるか？
3. SenchaやJquery mobileからナビゲーションなどを省いたもっと手軽なフレームワークがあってもよさそう。
How to check coding style by PHP CodeSniffer


1) Install phpcs by cloning from git repository:

```
git clone git://github.com/squizlabs/PHP_CodeSniffer.git
```

2) Make symbolic link to phpcs:

```
cd PHP_CodeSiniffer
ln -s "$(pwd)/scripts/phpcs" ~/bin/phpcs
```

3) Now, try dumping help messages:

```
phpcs -h
```

4) Sniff codes:

```
phpcs --standard=PSR2 /path/to/codes
```

Then, you will see warnings for about violating conding starnd PSR2 :)

## By the way, what is Qiita?

Visit [Qiita and Kobito - Great Duet to manage your knowledge.](http://qiita.com/items/392a2ff258a3c26adbfe) ;)
C言語のMakefileを作る

```bash:Makefile
CC = gcc 
CFLAGS = -O3 -Wall
LIBRARIES = -lm -pthread
OBJECTS = main.o sub1.o sub2.o
PROGRAM = main

all: $(PROGRAM)

$(PROGRAM): $(OBJECTS)
    $(CC) $(OBJECTS) $(CFLAGS) $(LIBRARIES) -o $(PROGRAM)

clean:
    rm -f *.o $(PROGRAM)
```

## 参考
[Make と Makefile の説明](http://www.unixuser.org/~euske/doc/makefile/)
Unityチュートリある 3日目


おっす、オラえいや！いっちょやって3日。

## ギークハウス武蔵小杉ではUnityクリエイターを養成しているわ

ギー杉たん曰く、

![ギー杉たん](https://www.dropbox.com/s/br741i1xv32kkpq/Screen%20Shot%202012-12-23%20at%2016.58.15.png?dl=1)

[1日目](http://qiita.com/items/f242565a83a4ef5d6e1a)、[2日目](http://qiita.com/items/580da3032382ba1b87ba)と引き続いて、今日もチュートリあります。

### Tutorial 4: [Parenting](http://unity3d.com/support/documentation/video/4.html)

簡単な内容なのでざっと行きましょう。

準備のために前回同様に、新規のプロジェクトを作成します。
今回のプロジェクト名はTurorial4とでもしておきましょう。

Turorial4では、簡単な車のモデルを作ります。
車体に見立てたCubeと、車輪に見立てたCylinderを組み合わせて、車を作ります。
CubeとCylinderのモデルを組み合わせて、Sceneでオブジェクトを移動させた時に一緒に動くようモデル同士に関連をもたせましょう。

* ます、Cubeを配置してz方向に拡大して直方体にします。
* 次に、車輪に見立てたCylinderを配置して、z方向に90°倒します。Command+C、Command+Vで同じCylinderをコピーしておきましょう。
* [参考画像1]車に見えるようにCubeとCylinderをずらして配置します。
* この時点で、車体であるCubeをSceneViewで選択してずらすと、車輪であるCylinderを置いてけぼりにしてしまいます。
* [参考画像2]HierarchyViewで、CylinderをドラッグしてCubeにDropします。
* 上の操作により、CubeとCylinderは親と子の関係になり、Cubeを動かした時には、Cylinderも連動して動くようになります。

[参考画像1] 大体こんな感じに見えるように車を作る。
![車](https://www.dropbox.com/s/bzmhh6010dfi74h/Screen%20Shot%202012-12-23%20at%2021.05.53.png?dl=1)

[参考画像2] 親子関係を作って車の移動などを連携させる。
![階層](https://www.dropbox.com/s/oy01svftaffdezs/Screen%20Shot%202012-12-23%20at%2021.07.29.png?dl=1)

ここまで、Tutorial4でした。

以上です。
とりあえずTwitter/Facebookにつぶやかせたい！というようなプラグイン


ゲームとか作っていると、TwitterやFacebookにつぶやかせたい時があると思います。
なので作りました。

[SocialConnector](https://github.com/anchan828/social-connector)

![](https://a248.e.akamai.net/camo.github.com/528a62a44ff37cb1b86a93e43202cbfea8a28fed/687474703a2f2f636c6f75642e6769746875622e636f6d2f646f776e6c6f6164732f616e6368616e3832382f736f6369616c2d636f6e6e6563746f722f323031322d31322d303925323030322e30372e30362e706e67)

使い方は簡単。

```cs:Sample.cs
///=================
/// Twitter
///=================

SocialConector.PostMessage ( SocialConector.ServiceType.Twitter, "text" );


///=================
/// Facebook
///=================

SocialConector.PostMessage ( SocialConector.ServiceType.Facebook, "text" ); 

```

1つのAPIを叩くだけ。iOSとAndroid両対応。

ですが、iOSはSocial.frameworkを使用しているためiOS6以上限定。(iOS5のTwitter.frameorkくらいは対応しようかなぁ…)

AndroidはSendActionなのでAndroid2.1以上で使用できます。
chpwd内のlsでファイル数が多い場合に省略表示する

``zsh``では``chpwd``関数を定義することで、ディレクトリ移動後に任意のコマンドを実行することができます。

zshユーザの多くは、``chpwd``内で``ls``を実行するよう設定しているのではないでしょうか。

しかし、移動先のディレクトリに大量のファイルやディレクトリが存在していると、lsの結果で画面が一杯になってしまいます。
移動するたびにこれでは正直困ります。

そこでファイル数が多い場合には省略表示する``chpwd``の設定を紹介します。

どんな感じになるかというと…

![screenshot](https://gist.github.com/raw/3935922/109603accc9e77dc59c504d66e1e27e493417d16/screenshot.png)

いかがでしょう、これでうっかりファイル数の多いディレクトリに移動してしまっても大丈夫です。

コードは以下

```sh
chpwd() {
    ls_abbrev
}
ls_abbrev() {
    if [[ ! -r $PWD ]]; then
        return
    fi
    # -a : Do not ignore entries starting with ..
    # -C : Force multi-column output.
    # -F : Append indicator (one of */=>@|) to entries.
    local cmd_ls='ls'
    local -a opt_ls
    opt_ls=('-aCF' '--color=always')
    case "${OSTYPE}" in
        freebsd*|darwin*)
            if type gls > /dev/null 2>&1; then
                cmd_ls='gls'
            else
                # -G : Enable colorized output.
                opt_ls=('-aCFG')
            fi
            ;;
    esac

    local ls_result
    ls_result=$(CLICOLOR_FORCE=1 COLUMNS=$COLUMNS command $cmd_ls ${opt_ls[@]} | sed $'/^\e\[[0-9;]*m$/d')

    local ls_lines=$(echo "$ls_result" | wc -l | tr -d ' ')

    if [ $ls_lines -gt 10 ]; then
        echo "$ls_result" | head -n 5
        echo '...'
        echo "$ls_result" | tail -n 5
        echo "$(command ls -1 -A | wc -l | tr -d ' ') files exist"
    else
        echo "$ls_result"
    fi
}
```

Macの場合は、``gls``が使用可能ならそちらを優先して使用します。

``ls``のオプションや省略表示を行う行数のしきい値などはお好みに応じて変更して下さい。
上記コードでは10行より多い場合は、前後5行づつ表示するようになっています。

gistにもあげました。
[chpwd for zsh - gist](https://gist.github.com/3935922)
iOS用の脈拍計測ライブラリ作った


https://github.com/y-matsuwitter/PulseRateMeter
コレ。

カメラに指を当てて計測するタイプです。
今のところ、実測値の±5くらいの精度で計測できてるっぽい。
が、失敗することもあるので、今後精度向上を頑張る。
praat: TextGridデータの利用方法

せっかく苦労してannotateしたデータなのでしゃぶりつくしたいということで。

1. TextGridオブジェクトを指定
2. Analyse > Extract one tier…で特定のtierを書き出す
#番号で指定
3. 書き出されたTextGridオブジェクトを指定してDown to Table…でTableオブジェクトを作成する
4. でき上がったTableオブジェクトを指定してSave > Save as tab-separated file…
5. タブ区切りファイルが指定された場所に保存される

以下疑似スクリプト

```praat:
1: select TextGridName$2: Extract one tier... 13: Down to Table... no 6 yes no
#3行目の設定
#Include line number: no Time decimals: 6 Include tier names yes Include empty intervals no4: Save as tab-separated file... SavePoint$#上の行を List... yes とすると列番号込みでInfo windowに表示```
iOSでTi.UI.WebView内のTi.APP.fireEventが実行できる仕組み

Titaniumのネイティブ側とWebViewのHTML内のJavascriptでメソッドの実行やデータを橋渡しする仕組みとしては、evalJS()とTi.App.fireEvent/Ti.App.addEventListenerの二通りがあります。

iOSではもともとevalJSにあたる機能は用意されていますがWebViewからネイティブ側を呼び出せるようにはなっていません。ではどうやって実装されているのでしょうか？。

WebViewでHTMLをロードした際にTitaniumは [こちら](https://gist.github.com/4362175)のJavascriptを追加します。
このうち、HTML側で呼び出されたTi.App.xxxやTi.API.xxxは

```javascript:webview.js
Ti.App.fireEvent = function (name, evt) {
    Ti._broker('App', 'fireEvent', {
        name: name,
        event: evt
    })
};
```

のようにTi._broker(module, method, data)を呼び出します。
次にTi._broker()では「app://〜」で始まるURLにidやデータをシリアライズしたパラメータを追加したXMLHttpRequestを発行します。

```javascript:webview.js
Ti.App._xhr = XMLHttpRequest;
Ti._broker = function (module, method, data) {
    try {
        var url = 'app://' + Ti.appId + '/_TiA0_' + Ti.pageToken + '/' + module + '/' + method + '?' + Ti.App._JSON(data, 1);
        var xhr = new Ti.App._xhr();
        xhr.open('GET', url, false);
        xhr.send()
    } catch (X) {}
};
```

「え、もしかしてTitaniumは内部にサーバーを起動させていて、、、？」いやそんなことはなく、単にネイティブ側はWebViewから呼び出されるURLの宛先を監視していて、そのうちapp://〜についてパラメータを解析することで実行するTitanium側のメソッドや引数を決定しているようです。


逆にネイティブ側からHTML側のTi.App.addEventListener (name, callback)でイベントを受け取る仕組みは、

```javascript:webview.js
Ti.App._listeners = {};
Ti.App._listener_id = 1;

//(略)

Ti.App.addEventListener = function (name, fn) {
    var listeners = Ti.App._listeners[name];
    if (typeof (listeners) == 'undefined') {
        listeners = [];
        Ti.App._listeners[name] = listeners
    }
    var newid = Ti.pageToken + Ti.App._listener_id++;
    listeners.push({
        callback: fn,
        id: newid
    });
    Ti._broker('App', 'addEventListener', {
        name: name,
        id: newid
    })
};
```

で受け取るイベントをlisteners配列を登録しておきます。
そしてネイティブ側は登録されたlistenersに対するイベントがfireされるとTi.App._dispatchEvent(type, evtid, evt)を呼び出します。

```javascript:webview.js
Ti.App._dispatchEvent = function (type, evtid, evt) {
    var listeners = Ti.App._listeners[type];
    if (listeners) {
        for (var c = 0; c < listeners.length; c++) {
            var entry = listeners[c];
            if (entry.id == evtid) {
                entry.callback.call(entry.callback, evt)
            }
        }
    }
};
```

こうしてネイティブとHTML内でメソッドやデータを受け渡しが他のグローバルイベントと同じ書き方で手軽に利用できる点はTitaniumのCoolな部分ではないでしょうか。
Emacs中毒者に贈るJDEEによるJava開発環境の構築

今更？って声が聞こえてきそうですが、JDEEの紹介です。
JavaをEmacsで使いたいって方はどうぞ。
http://mikio.github.com/article/2012/12/23_emacsjdeejava.html
Ubuntu12.04 プリンタの設定が出来ない？

GUIが以前のものと変わっていた。
なぜかプリンタの設定ができない場合がある。


   >ファイアウォールデーモンが起動していません

具体的にはこんなメッセージが出る。

FireWall使ってないので、余計なお世話だ。
どうやらこれはバグらしい。

    $ system-config-printer

をTerminalで入力すると、以前のGUIが立ち上がる。
こちらは問題なく設定できるようだ。
Ember.jsで高機能なテーブルを表示する

Ember Tableというテーブル表示ライブラリを使うことで、高機能なテーブルを表示できます。
遅延読み込みにも対応しており、大量のデータを表示するのに効果を発揮します。(100万行のデータを表示するサンプルは、非常に高速に動作しています。) 

(Ember Table)[http://addepar.github.com/ember-table/]

Ember Tableは以下のような機能を持っています。

* 表示要素の書式をカスタマイズ(金額表示、日付表示などは組み込みで用意されてる) 
* レイティング入力
* 折れ線グラフ
* 棒グラフ
* 合計行表示
* データをajaxで遅延読み込み
* ツリーデータの子要素の展開/非表示切り替え


以下表示サンプルのコードです。まずテンプレートです。

```html
<script type="text/x-handlebars" data-template-name="application">
  <div class='presentation-container'>
    {{view Ember.Table.TablesContainer controllerBinding="tableController"}}
  </div>
</script>
```

Ember.Table.TablesContainer を使って表示します。シンプルですね。

```coffeescript
App.TableSimpleExample.TableController = Ember.Table.TableController.extend
  hasHeader: yes 
  hasFooter: no
  numFixedColumns: 0
  numRows: 1000000
  rowHeight: 30

  columns: Ember.computed ->
    columnNames = ['open', 'high', 'low', 'close', 'volume']
    entryColumn = Ember.Table.ColumnDefinition.create
      columnWidth: 100
      headerCellName: 'Entry'
      getCellContent: (row) -> row['index'];
    dateColumn = Ember.Table.ColumnDefinition.create
      columnWidth: 150
      headerCellName: 'Date'
      getCellContent: (row) -> row['date'].toDateString();
    columns= columnNames.map (key, index) ->
      name = key.charAt(0).toUpperCase() + key.slice(1)
      Ember.Table.ColumnDefinition.create
        columnWidth: 100
        headerCellName: name
        getCellContent: (row) -> row[key].toFixed(2)
    columns.unshift(dateColumn)
    columns.unshift(entryColumn)
    columns
  .property()

  content: Ember.computed ->
    App.TableSimpleExample.LazyDataSource.create
      content: new Array(@get('numRows'))
  .property 'numRows'
```

columnsメソッドは、列の定義を返します。各列の名前、書式、幅を指定しています。
contentメソッドが、データを返します。LazyDataSourceを使って、遅延読み込みを行なっています。
numRowsは項目の数です。1000000行が設定されています。行が表示される段階で実データを取得します。読み込まれます。

最後にLazyDataSourceの定義を見てみましょう。

```coffeescript
App.TableSimpleExample.LazyDataSource = Ember.ArrayProxy.extend
  objectAt: (idx) ->
    row  = @get('content')[idx]
    return row if row
    date = new Date();
    date.setDate(date.getDate() + idx)
    row =
      index: idx
      date:  date
      open:  Math.random() * 100 - 50
      high:  Math.random() * 100 - 50
      low:   Math.random() * 100 - 50
      close: Math.random() * 100 - 50
      volume: Math.random() * 1000000
    @get('content')[idx] = row
    row
```

ここでは外部からデータを読み込んでくることはせず、ランダム値を使ってサンプルデータを生成しています。

このサンプルの実際の動作は、以下のページで確認できます。

http://kmdsbng.github.com/ember_table_sample/examples/table_simple/

Ember Tableには、データをajax経由で動的に読み込んでくるサンプルもあり、遅延読み込みにも対応しています。

大量のデータの表示に耐えうるライブラリだと感じました。
配列から重複している要素を抽出する

重複「している」要素のみを返します。

```php
function arrayGetDuplicate($array){
	$duplicate = array();
	$already = array();
	
	foreach ($array as $key=>$value){
		foreach ($array as $key2=>$value2) {
			if($key == $key2){
				continue;
			}
			if(in_array($key2, $already)){
				continue;
			}
			if($array[$key] == $array[$key2]){
				$already[] = $key;
				$duplicate[] = $array[$key] ;
			}
		}
	}
	return $duplicate;
}
```
Cocos2d v2.0で画面を縦表示にする

AppDelegate.mとInfo.plistを以下のように修正することで動いた。

```objc:AppDelegate.m
// Supported orientations: Landscape. Customize it for your own needs
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    //return UIInterfaceOrientationIsLandscape(interfaceOrientation); ←修正前
    returnUIInterfaceOrientationIsPortrait(interfaceOrientation); // ←修正後
}
```

```:Info.plist
Supported interface orientations

Item 0 Landscape (left home button)
↓
Item 0 Portrait (bottom home button)

Item 1 Landscape (right home button)
↓
Item 1 Portrait (top home button)
```
BubbleWrapでジェスチャーを検知する


##インストール

まずは``BubbleWrap``をインストール。

```ruby:Gemfile
gem 'bubble-wrap'
```

```ruby:Rakefile
require 'bubble-wrap'
Bundle.require
```

```sh
bundle install --path vendor/bundle
```

##使い方

###スワイプの検知

スワイプを検知してみる。
方法は指定したジェスチャーにブロックを渡すだけ。
スワイプの方向を指定したい場合は戻り値の``direction``プロパティで指定する。

```ruby
@left_swipe = @main_text.when_swiped do
  p 'swipe left.'
end
@left_swipe.direction = UISwipeGestureRecognizerDirectionLeft

@right_swipe = @main_text.when_swiped do
  p 'swipe right.'
end
@right_swipe.direction = UISwipeGestureRecognizerDirectionRight

# 上はUISwipeGestureRecognizerDirectionUp
# 下はUISwipeGestureRecognizerDirectionDown

```

###タップの検知

```ruby
# 2本指タップ
@two_finger_tap = @main_text.when_tapped do
  p 'two finger.'
end
@two_finger_tap.numberOfTouchesRequired = 2

# ダブルタップ
@double_tap = @main_text.when_tapped do
  p 'double tap.'
end
@double_tap.numberOfTapsRequired = 2
```
##検知できるジェスチャー

- when_tapped
- when_pinched
- when_rotated
- when_swiped
- when_panned
- when_pressed

##注意点

GitHubのページにあるサンプルでは``whenTapped``とあるけど使うと古いから``when_tapped``を使えとコンソールに出力される。

##参考
- [rubymotion/BubbleWrap · GitHub](https://github.com/rubymotion/BubbleWrap)
- [iPhone開発 スワイプイベントの設定 UISwipeGestureRecognizer ios 逆引き サンプル | Linux & App Labs By pt106](http://blog.77jp.net/iphone%E9%96%8B%E7%99%BA-%E3%82%B9%E3%83%AF%E3%82%A4%E3%83%97%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AE%E8%A8%AD%E5%AE%9A-uiswipegesturerecognizer-ios-%E9%80%86%E5%BC%95%E3%81%8D-%E3%82%B5%E3%83%B3)

##全ソース

[rubymotion-samples/GestureByBubbleWrap at master · toshinori/rubymotion-samples · GitHub](https://github.com/toshinori/rubymotion-samples/tree/master/GestureByBubbleWrap)
UbuntuでRailsを実行すると「Could not find a JavaScript runtime.」エラーが発生する


#環境
| OS | Rails Version |
|:---|---|
|Ubuntu 12.04| 3.2.9

#事象
```console
$ bundle exec rails server
/home/kyamada/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/execjs-1.4.0/lib/execjs/runtimes.rb:51:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
  	from /home/kyamada/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/execjs-1.4.0/lib/execjs.rb:5:in `<module:ExecJS>'
   	from /home/kyamada/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/execjs-1.4.0/lib/execjs.rb:4:in `<top (required)>'
   	from /home/kyamada/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/coffee-script-2.2.0/lib/coffee_script.rb:1:in `require'
   	from /home/kyamada/.rbenv/versions/1.9.3-p194/
・・・
```

#解決策
NodeJsをインストール

```console
$ sudo apt-get install nodejs
```

Gemfileに以下を追加

```ruby:Gemfile
gem 'libv8'
gem 'execjs'
gem 'therubyracer', :platforms => :ruby
```

bundle installして、再実行

```console
$ bundle install
$ bundle exec rails server
=> Booting WEBrick
=> Rails 3.2.9 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
```