<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>blog.aklaswad.com</title>
    <link rel="alternate" type="text/html" href="http://blog.aklaswad.com/" />
    <link rel="self" type="application/atom+xml" href="http://blog.aklaswad.com/atom.xml" />
    <id>tag:blog.aklaswad.com,2012-12-15://2</id>
    <updated>2013-04-19T05:47:01Z</updated>
    
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 5.2.2</generator>

<entry>
    <title>[git] コミットメッセージの最初の空行までがsubjectです。</title>
    <link rel="alternate" type="text/html" href="http://blog.aklaswad.com/2013/000519.html" />
    <id>tag:blog.aklaswad.com,2013://2.519</id>

    <published>2013-04-19T04:31:47Z</published>
    <updated>2013-04-19T05:47:01Z</updated>

    <summary>コミットメッセージの最初の空行までがsubjectです。最初の一行、ではありません。 subjectは、git log --onelineとかgit log --format=&quot;%s&quot;とかした時に使われます。なので、 Clean up my room * Wash whole dishes * Mop the bathtub * Throw away magazines このようなコミットメッセージの書き方をすると、自分の中ではsubjectと本文がわかれていても、 $ git log --oneline 988f5e7 Clean up my room * Wash whole dishes * Mop the bathtub...</summary>
    <author>
        <name>aklaswad</name>
        <uri>http://blog.aklaswad.com/</uri>
    </author>
    
    <category term="git" label="git" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://blog.aklaswad.com/">
        <![CDATA[<p>コミットメッセージの最初の空行までがsubjectです。最初の一行、ではありません。</p>

<p>subjectは、<code>git log --oneline</code>とか<code>git log --format="%s"</code>とかした時に使われます。なので、</p>

<pre>Clean up my room
* Wash whole dishes
* Mop the bathtub
* Throw away magazines
</pre>

<p>このようなコミットメッセージの書き方をすると、自分の中ではsubjectと本文がわかれていても、</p>

<pre>
$ git log --oneline
988f5e7 Clean up my room * Wash whole dishes * Mop the bathtub * Throw away magazines
</pre>

<p>こんな風につながって一行になってしまいとても読みにくいです。</p>

<p>今度から気をつけましょう > 自分</p>]]>
        
    </content>
</entry>

<entry>
    <title>WebSocketの仕様を調べていたら頭がどうにかなりそうだった。</title>
    <link rel="alternate" type="text/html" href="http://blog.aklaswad.com/2012/000517.html" />
    <id>tag:blog.aklaswad.com,2012://2.517</id>

    <published>2012-12-29T04:45:00Z</published>
    <updated>2012-12-29T05:48:33Z</updated>

    <summary> .websocket-protocol { background-color: #fee; margin: 1.0em 0; padding 5px; } .websocket-api {background-color: #eef; margin 1.0em 0; padding 5px; } pre { padding: 5px; margin 5px; } strong.redwarning { color: #f00; } WebSocketを使ってゴニョゴニョしているのだが、handshakeの失敗時のエラーをどう扱うべきなのか、よくわからない。WebSocket Protocol の仕様と WebSocket API の仕様で書いてあることが違う。 protocol仕様を読む限り、サーバーはhandshakeを拒否する場合適切なHTTPエラーコードを返さなくてはいけない、と書いてある。が、クライアント側のウェブブラウザ上のjavascriptでそれを期待しているとエラーイベントからはHTTPエラーコードは受け取れない。WebSocketの異常終了コード1006が固定でセットされている。 そこでAPI仕様を読むと、これらを行わない理由が赤字で大きく書いてある。...</summary>
    <author>
        <name>aklaswad</name>
        <uri>http://blog.aklaswad.com/</uri>
    </author>
    
    <category term="api" label="API" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="websocket" label="WebSocket" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="仕様" label="仕様" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://blog.aklaswad.com/">
        <![CDATA[<style>
.websocket-protocol { background-color: #fee; margin: 1.0em 0; padding 5px; }
.websocket-api {background-color: #eef; margin 1.0em 0; padding 5px; }
pre { padding: 5px; margin 5px; }
strong.redwarning { color: #f00; }
</style>


<p>WebSocketを使ってゴニョゴニョしているのだが、handshakeの失敗時のエラーをどう扱うべきなのか、よくわからない。WebSocket Protocol の仕様と WebSocket API の仕様で書いてあることが違う。<br />
protocol仕様を読む限り、サーバーはhandshakeを拒否する場合適切なHTTPエラーコードを返さなくてはいけない、と書いてある。が、クライアント側のウェブブラウザ上のjavascriptでそれを期待しているとエラーイベントからはHTTPエラーコードは受け取れない。WebSocketの異常終了コード1006が固定でセットされている。</p>
<p>
そこでAPI仕様を読むと、これらを行わない理由が赤字で大きく書いてある。
<ul><li>オープンリダイレクタが設置されたサイトで脆弱性になるので、handshakeのレスポンスはHTTPとして扱わない。</li>
<li>悪意あるスクリプトに攻撃の準備としてネットワーク環境の調査に使われるのを防ぐため、接続失敗の理由をスクリプトに通知してはいけない。</li>
</ul>
</p>
<p>接続失敗の理由を開示してはいけない、というのは特定のシチュエーションの場合、と限定してあるのだが、この一文
<blockquote>A server that did not complete the opening handshake (e.g. because it was not a WebSocket server).<p><a href="http://dev.w3.org/html5/websockets/">http://dev.w3.org/html5/websockets/</a></p></blockquote>
が示す範囲がよくわからなくて、これがもし403とか返した場合も該当するなら、サーバーはHTTPエラーコードを返さなくてはいけないがブラウザはエラーコードを握りつぶさなくてはいけない、ということになる。実際API仕様にもHTTPステータスを受け取れるとは書いてないし、そういうもんだと言われればそれまでだが、実際のところ困る。<br />
chromeのコードもはっきりそうなっているっぽくて( @gtk2k さんに教えていただきました。ありがとうございます。 )、101以外のHTTPステータスを受け取っても、特に個別の動作はしないし、エラーイベントのどこを探してもHTTP statusが見つからない。リダイレクトもしない。<q>Unexpected response code: 403</q>という文字列がエラーコンソールに出てくるけど、javascriptからは拾えなそう。</p>

<p>一体どうすれば良いのかわからず、原本 <a href="http://tools.ietf.org/html/rfc6455">http://tools.ietf.org/html/rfc6455</a> および <a href="http://www.w3.org/TR/websockets/">http://www.w3.org/TR/websockets/</a> と、そこから辿れる旧バージョンを参照した。以下の様な時系列で変更が行われた模様。</p>

<h3>WebSocket Protocol hybi-05以前</h3>
<p>プロトコル仕様に以下の記述がある。</p>
<ul><li>記述1 ユーザーエージェントは、一部のシチュエーションではエラーの理由をスクリプトに伝えてはいけない</li>
<li>記述2 handshakeのレスポンスとして101以外を受け取った時、WebSocket接続を終了する</li>
</ul>
<div class="websocket-protocol">
 <blockquote><pre>User agents must not convey any failure information to scripts in a
   way that would allow a script to distinguish the following
   situations:
<p><a href="http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-05#section-7.1.1">http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-05#section-7.1.1</a></p></pre></blockquote>
<blockquote><pre>If the status code received from the server is not 101, the client
      MUST fail the WebSocket connection.
<p><a href="http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-05#section-5.1">http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-05#section-5.1</a></p></pre></blockquote>
</div>

<h3>WebSocket Protocol hybi-06 February 25, 2011</h3>
<p>プロトコル仕様から記述1が消える</p>
<div class="websocket-protocol">
<p><a href="http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-06#section-7.2.1">http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-06#section-7.2.1</a></p></div>

<h3>ietf のメーリングリスト 28 Mar 2011</h3>
<p>プロトコルレベルではHTTPをサポートするべきという方向に話が進む</p>
<div class="websocket-protocol"><p>(超意訳)これ(オープンリダイレクタの問題)って俺達の問題じゃなくてWHATWGの問題だよね。リダイレクトや認証機能が無しなんてやってらんないから入れちゃおうぜ。もしブラウザが当面リダイレクトをサポートしないって事になってもOK。後でブラウザ側の挙動だけ変えれば済むなら楽だし。</p>
<blockquote><pre>I don't think it is "our problem".     I think it is a "W3C/WHATWG
HTML-5 WG problem".

This is essentially an API issue for the browser websocket object.
There are plenty of ways around this (adding optional follow
redirects, exposing redirect responses etc. etc.),   but I think it is
the W3C and WHATWG HTML-5 working groups that should be where such
matters are decided.

As a web developer I really rather not have to go without redirection
and other common auth methods - and I take responsibility for my
servers not being open redirectors..... but would understand if the
W3C/WHATWG decided not to support these features - at least initially.

However, we should make the protocol such that if/when the API does
support these features, then it will only be an in browser change and
not an update of the protocol.<p><a href="http://www.ietf.org/mail-archive/web/hybi/current/msg06954.html">http://www.ietf.org/mail-archive/web/hybi/current/msg06954.html</a></p></pre></blockquote></div>

<h3>WHATWG のメーリングリスト Mar 29 2011</h3>
<p>APIレイヤでHTTPを理解するかは先送りの方向に</p>

<div class="websocket-api"><p>(超意訳)(HyBiのスレッドではHTTP使う方向になってるぜ、という話を受けて)オープンリダイレクタの問題はセキュリティ上の大穴だという意見に同意だ。httpが犯した過ちとそこで起こった問題を繰り返すべきではない。この問題は先送りにして、当面APIレベルではリダイレクトには対応しない、という方向で。</p>

</p><blockquote><pre>I absolutely agree that redirects are a big source of security
problems. If we are going to support them for websocket then I think
we need to learn from the mistakes of http as to not repeat the
problems that occurred there.

(中略)

But I'm totally fine with punting on this for the future and just
disallowing redirects on an API level for now.</pre>
<p><a href="http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2011-March/031079.html">http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2011-March/031079.html</a></p></blockquote></div>

<h3>WebSocket Protocol hybi-07 April 22, 2011</h3>
</p>記述2部分が変更 101以外はHTTPとして処理する</p>
<div class="websocket-protocol">
<blockquote><pre>If the status code received from the server is not 101, the client
      handles the response per HTTP procedures.  Otherwise, proceed as
      follows.
<p><a href="http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-07#section-5.1">http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-07#section-5.1</a></p></pre></blockquote>
</div>

<h3>WebSocket API r1.210 May 24, 2011</h3>
<p>旧記述2相当の内容がAPI仕様に引越し</p>
<div class="websocket-api">
<blockquote><q>Block redirects in WebSockets (whatwg r6148)</q><pre>+    When the user agent <i>validates the server's response</i> during
+    the "establish a WebSocket connection" algorithm, if
+    the status code received from the server is not 101 (e.g. it is a
+    redirect), the user agent must fail the websocket
+    connection.
<p><a href="http://dev.w3.org/cvsweb/html5/websockets/Overview.html#rev1.210">http://dev.w3.org/cvsweb/html5/websockets/Overview.html#rev1.210</a></p></pre></blockquote>
</div>

<h3>WebSocket Protocol hybi-08 June 7, 2011</h3>
<p>handshake失敗時にサーバーはエラー理由をHTTP error codeで表現しなさい、という記述が登場</p>
<div class="websocket-protocol">
<blockquote><pre> If the server does not wish to
          accept this connection, it MUST return an appropriate HTTP
          error code (e.g. 403 Forbidden) and abort the WebSocket
          handshake described in this section.
<p><a href="http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-08#section-5.2.2">http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-08#section-5.2.2</a></p></pre></blockquote>
</div>

<h3>WebSocket Protocol RFC6455 PROPOSED STANDARD December 2011</h3>
<p>現在のhandshakeのレスポンスの扱い protocolバージョン</p>
<div class="websocket-protocol">
<blockquote><pre>Any status code other than 101 indicates that the WebSocket handshake
   has not completed and that the semantics of HTTP still apply.  The
   headers follow the status code.
<p><a href="http://tools.ietf.org/html/rfc6455#section-1.3">http://tools.ietf.org/html/rfc6455#section-1.3</a></p></pre></blockquote>
</div>

<h3>WebSocket API r1.271 Jul 11, 2012</h3>
<p>記述1相当の内容が一年五ヶ月ぶりにAPI仕様として復活。</p>
<div class="websocket-api">
<blockquote><q>Clarify what codes are exposed in case of error, since this text was mysteriously removed from the RFC at some point. (whatwg r7175)</q><pre>+   User agents must not convey any failure information to scripts
+   in a way that would allow a script to distinguish the following
+   situations:
<p><a href="http://dev.w3.org/cvsweb/html5/websockets/Overview.html#rev1.271">http://dev.w3.org/cvsweb/html5/websockets/Overview.html#rev1.271</a></p></pre></blockquote>
</div>

<h3>WebSocket API W3C Candidate Recommendation 20 September 2012</h3>
<p>現在のhandshakeのレスポンスの扱い APIバージョン。 赤くて目立つようにHTTPは混ぜるな危険とwarning。</p>
<div class="websocket-api">
<blockquote><pre>When the user agent validates the server's response during the "establish a WebSocket connection" algorithm, if the status code received from the server is not 101 (e.g. it is a redirect), the user agent must fail the WebSocket connection.

<strong class="redwarning">Following HTTP procedures here could introduce serious security problems in a Web browser context. For example, consider a host with a WebSocket server at one path and an open HTTP redirector at another. Suddenly, any script that can be given a particular WebSocket URL can be tricked into communicating to (and potentially sharing secrets with) any host on the Internet, even if the script checks that the URL has the right hostname.<p><a href="http://www.w3.org/TR/websockets/#the-websocket-interface">http://www.w3.org/TR/websockets/#the-websocket-interface</a></p></strong></pre></blockquote>
</div>

<p>というわけで、プロトコル仕様ではhandshakeのレスポンスはHTTPとして扱う方向になっているが、API仕様ではこれを無視する。将来的に統一するならAPI仕様が変更される。というのが現状のようです。接続失敗の理由をスクリプトから隠す件については結局良くわかりませんでした。MLはgoogle先生が最初に教えてくれた周辺しか読んでないので、他にも色々議論があったのかもしれません。</p>

<p>実際どう対処すればよいか。少なくとも現時点のブラウザの実装がエラーコードを隠蔽してしまう以上、サーバー側の実装をするときにhandshakeの結果をHTTPで返しても無駄な気はする。handshakeしてから即closeするか、またはエラー診断用のHTTPのエンドポイントを用意するとか。うーん。</p>]]>
        
    </content>
</entry>

<entry>
    <title>When and where my laptop was running?</title>
    <link rel="alternate" type="text/html" href="http://blog.aklaswad.com/2012/000514.html" />
    <id>tag:blog.aklaswad.com,2012://2.514</id>

    <published>2012-12-15T04:36:33Z</published>
    <updated>2012-12-15T06:31:07Z</updated>

    <summary>勤怠表提出の自動化などが目的で、持ち歩いているラップトップのWi-Fiの接続先をログに取るようにしていたのだが、結構ログが溜まってきたので視覚化してみた。 http://aklaswad.com/where.html OSXでは接続しているSSIDなどの情報は以下のコマンドで取得できる。 /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I この結果をパースして、SSIDに変化があったらファイルに追記するという簡単なperlスクリプトを、cronでぶん回しているだけ。接続先のSSIDのバリエーションなどはたかが知れているので、SSIDに対応した処理も行える。自分は、日付が変わってから最初にオフィスのネットワークに接続したらfoursquareでチェックインするようにしてる。のでスクリプトに直接APIKeyなど書いてあるので公開しません;) 今回は、ログファイルをパースして、グラフっぽいHTMLを書き出してみた。これもcronで一日一回生成してscpでサーバーに投げるようにした。オフィスのネットワークやモバイル(wimax/iPhone)など接続先にあわせて色分けしたので、時期や季節によって行動パターンが違うのがわかって面白いと思う。寒くなると冬眠するがごとく活動時間が短くなっている様がよくわかりますね(震え声 ちなみに2011年3月の空白期間は、ラップトップのロジックボードがやられて起動不能だった+修理期間で、地震は直接の原因ではなかったりする。...</summary>
    <author>
        <name>aklaswad</name>
        <uri>http://blog.aklaswad.com/</uri>
    </author>
    
    
    <content type="html" xml:lang="en-us" xml:base="http://blog.aklaswad.com/">
        <![CDATA[<p>勤怠表提出の自動化などが目的で、持ち歩いているラップトップのWi-Fiの接続先をログに取るようにしていたのだが、結構ログが溜まってきたので視覚化してみた。</p>

<ul><li><a href="http://aklaswad.com/where.html" target="_blank" title="When and where my laptop was running?">http://aklaswad.com/where.html</a></li></ul>

<p>OSXでは接続しているSSIDなどの情報は以下のコマンドで取得できる。<br />
<pre><code>/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I</code></pre><br />
この結果をパースして、SSIDに変化があったらファイルに追記するという簡単なperlスクリプトを、cronでぶん回しているだけ。接続先のSSIDのバリエーションなどはたかが知れているので、SSIDに対応した処理も行える。自分は、日付が変わってから最初にオフィスのネットワークに接続したらfoursquareでチェックインするようにしてる。<ins>のでスクリプトに直接APIKeyなど書いてあるので公開しません;)</ins></p>

<p>今回は、ログファイルをパースして、グラフっぽいHTMLを書き出してみた。これもcronで一日一回生成してscpでサーバーに投げるようにした。オフィスのネットワークやモバイル(wimax/iPhone)など接続先にあわせて色分けしたので、時期や季節によって行動パターンが違うのがわかって面白いと思う。寒くなると冬眠するがごとく活動時間が短くなっている様がよくわかりますね(震え声</p>

<p>ちなみに2011年3月の空白期間は、ラップトップのロジックボードがやられて起動不能だった+修理期間で、地震は直接の原因ではなかったりする。</p>

<p></p>

<p><br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>MacBook Air(2011 Mid / Lion)買ったので環境構築メモ</title>
    <link rel="alternate" type="text/html" href="http://blog.aklaswad.com/2011/000510.html" />
    <id>tag:blog.aklaswad.com,2011://2.510</id>

    <published>2011-12-04T13:15:29Z</published>
    <updated>2012-03-16T07:54:26Z</updated>

    <summary> ins { display: block; margin: 0; padding: 1em; background: #eef; border: 1px solid #ccd; color: #000; } h1 ins, h2 ins, h3 ins, h4 ins, h5 ins, h6 ins, p ins, pre ins, address ins, li ins, dt ins,...</summary>
    <author>
        <name>aklaswad</name>
        <uri>http://blog.aklaswad.com/</uri>
    </author>
    
    
    <content type="html" xml:lang="en-us" xml:base="http://blog.aklaswad.com/">
        <![CDATA[<style>
ins {
  display: block;
  margin: 0;
  padding: 1em;
  background: #eef;
  border: 1px solid #ccd;
  color: #000;
}
h1 ins, h2 ins, h3 ins, h4 ins, h5 ins, h6 ins, p ins, pre ins, address ins, li ins, dt ins, dd ins {
  display: inline;
  margin: 0;
  padding: 2px 5px;
  text-decoration: none;
  background: #eef;
  border: 1px solid #ccd;
  color: #000;
}
</style>

<p>11inch 全部盛り USキーボード。人生初のUS配列。<br />Lionでperl/node.js/coffeeScriptあたりの開発環境を整える際の自分用メモ。(一部追記あります。)</p>]]>
        <![CDATA[<h3>環境設定編</h3>

<h4>OSのセットアップ時</h4>
<p>キーボード配列はUS。OSの言語設定は日本語を選択</p>

<h4>ファンクションキーを有効に</h4>
<p>環境設定 > キーボード > キーボード > F１、F２などの...をチェック</p>

<h4>ことえりを有効に</h4>
<p>環境設定 > 言語とテキスト > 入力ソース でことえりを探してチェックを入れる。 あとでgoogleIME入れる。</p>

<h4>Dock周りを整理</h4>
<ul>
	<li>左に移動して自動で隠れるように。</li>
	<li>とりあえずterminalをdockに</li>
	<li>Finder開いて左メニューのアプリケーション > ユーティリティー > ターミナルをDockにドラッグ</li>
</ul>

<h4>capslockとcontrol入れ替え</h4>
<p>環境設定 > キーボード > キーボード > 修飾キー</p>

<h4>spotlight起動のショートカットを殺す (ctrl+spaceはemacsで使うので)</h4>
<p>環境設定 > キーボード > キーボードショートカット</p>

<h4>Chromeインストール</h4>
<p>同期一発で前と同じ環境になる超便利</p>

<h4>MissionControlはとりあえず放置</h4>
<p>今まで(SnowLeopard)、あまりcommand+tabは使わずspacesでやりくりしていた(command+←/→で移動してた。押しやすくて便利だった)が、いろいろ弄ってみても前と同じ動作にならなそうなので、別の方法を探す。アプリケーションの切り替えをcommand+←/→に当ててみようかしら。 => アプリケーションの切り替えの設定場所が分からないので後回し。しばらくデフォルトの設定で使って慣れることにする。</p>

<div><ins datetime="2011-12-11T12:50:27+09:00">(追記)ReederやTwitterでのマウスジェスチャが動かなくて難儀していたが、以下の設定で動くようになった。
<ul>
	<li>環境設定 > トラックパッド > その他のジェスチャ > ページ間をスワイプ で 『2本指または3本指でスワイプ』を選択</li>
</ul>
参考 <a href="http://dbarg2.blog102.fc2.com/blog-entry-1211.html">Lionで3本指スワイプによるブラウザの戻る＆進むなどを有効にする方法（追記） - MacBookの小部屋</a></ins></div>

<h4>ターミナルの設定</h4>
<p>以前の設定を持ってくる方法はわからなかった。
とりあえず環境設定から</p>
<ul>
	<li>起動 > 起動時に開く > 次の設定の新しいウィンドウ > Proに変更</li>
	<li>設定 > 左ペインでProを選択 > 左ペイン下部のデフォルトボタンでデフォルトに設定</li>
	<li>設定 > Pro > テキスト > テキストをアンチエイリアス処理を有効に。フォントをOsaka 14pxに変更。</li>
	<li>設定 > Pro > シェル > 次の指定プロセス以外が実行中の場合のみ にemacsを追加</li>
	<li>設定 > Pro > キーボード > メタキーとしてoptionキーを使用 をチェック</li>
	<li>設定 > Pro > 詳細 > オーディオベルのチェックを外す</li>
</ul>

<h3>アプリインストール編</h3>
<h4>Growl</h4>
<p>AppStoreで買った。170円くらい。今までお世話になってた人はキチンとお金払おうね！お金は払いたくないけどgrowl嫌いだけど使いたいけどっていう人は自分でビルドして使うことも出来るらしいよ!</p>
<p><a href="http://growl.info/downloads">http://growl.info/downloads</a>からGrowlNotify(コマンドラインツール)もダウンロードしてインストール。後でcoffeescript-growlで使う。</p>

<h4>XCodeのインストール</h4>
<p>AppStoreから。無料。終わらないので一晩放置、と思ったら中途半端な時間に落ちてきてた。</p>

<h3>homebrew編</h3>
<h4>homebrewをインストール</h4>
<pre class="code">sudo mkdir /usr/local
/usr/bin/ruby -e &quot;$(curl -fsSL https://raw.github.com/gist/323731)&quot;
</pre>

<h4>mysql</h4>
<pre class="code">brew install mysql
unset TMPDIR
mysql_install_db --verbose --user='********' --basedir=&quot;$(brew --prefix mysql)&quot; --datadir=/usr/local/var/mysql --tmpdir=/tmp
cp /usr/local/Cellar/mysql/5.5.15/com.mysql.mysqld.plist ~/Library/LaunchAgents/
launchctl load -w ~/Library/LaunchAgents/com.mysql.mysqld.plist
</pre>

<h4>node</h4>
<pre class="code">brew install node</pre>

<h4>emacs</h4>
<p>デフォルトではemacs-22が入っているが、whitespace-modeを使うためemacs-23を入れ直す。</p>
<pre class="code">brew install emacs</pre>

<h3>perlbrew + cpanm 編</h3>

<h4>perlbrew</h4>
<pre class="code">curl -kL http://xrl.us/perlbrewinstall | bash
echo &quot;source ~/perl5/perlbrew/etc/bashrc&quot; &gt; .bashrc
perlbrew install perl-5.14.2
perlbrew switch perl-5.14.2
perlbrew install-cpanm</pre>

<ins datetime="2011-12-08T00:22:43+09:00">(追記)Lion特有？自分の環境では、古いperl(5.8.9とか)がすんなり入らなかった。しばらく困ったが、patchperlだけ再インストールしたら上手く行った。
<pre class="code">perlbrew install-patchperl
perlbrew install perl-5.8.9</pre>なんか本当にoverwriteするかと聞かれるのでyesと答える。</ins>

<ins datetime="2011-12-08T00:44:31+09:00"><h4>（追記)Task::Plack</h4>
EVが入らないという罠あり。<code>cpanm Task::Plack</code>で順当にこけた後に、<a href="http://llvm.org/bugs/show_bug.cgi?id=9891">http://llvm.org/bugs/show_bug.cgi?id=9891</a>のパッチをあてる。
<pre class="code">cpanm Task::Plack
cd ~/.cpanm/latest-build/EV-4.03/
patch -p0 &lt; /path/to/patch-for-ev
cpanm .
cpanm Task::Plack</pre>
とかそんな感じで。
参考: <a href="http://torus.tumblr.com/post/10720272072/lion-plack-ev">Lion で Plack をインストールすると EV のテストでエラーがでる。</a></ins>

<h4>DBD::mysql (うろ覚え)</h4>
<pre class="code">mysql -u root
mysql&gt; create database test character set utf8;
mysql&gt; grant all privileges on *.* to (ログインネーム)@localhost;
mysql&gt; \q
cpanm DBD::mysql</pre>

<h3>node編</h3>

<h4>npmをインストール</h4>
<pre class="code">curl http://npmjs.org/install.sh | sh</pre>

<h4>QUnit</h4>
<p>qunit-tapで使うため、npmでみつかるnode-qunitではなく、本家を直接インストール。しょっちゅう使うのでグローバルに。</p>
<pre class="code">npm install -g https://github.com/jquery/qunit/tarball/v1.2.0</pre>

<h4>QUnit-tap</h4>
<p>これもグローバルに</p>
<pre class="code">npm install -g qunit-tap</pre>

<h4>CoffeeScript</h4>
<pre class="code">npm install -g coffee-script</pre>

<h4>coffeescript-growl</h4>
<p>coffeescriptのコンパイル結果をgrowlで通知してくれる。更新されていないようなので、適当に直してインストールした。</p>

<pre class="code">git clone https://github.com/wesbos/coffeescript-growl.git
cd coffeescript-growl
patch -p0 &lt; fix.patch
npm install -g .</pre>

<pre class="code">index 8f0ed15..0cd0a59 100644
--- coffeescript-growl.coffee
+++ coffeescript-growl.coffee
@@ -1,11 +1,11 @@
-sys = require('sys')
+util = require('util')
 exec = require('child_process').exec
 CoffeeScript = require &quot;coffee-script&quot;
 
 App = {}
 
 App.puts = (error, stdout, stderr) -&gt;
-	sys.puts(stdout)
+	util.puts(stdout)
 
 App.icon = &quot;#{__dirname}/i/coffee.png&quot;
 
diff --git package.json package.json
index 760efb4..3aadc24 100644
--- package.json
+++ package.json
@@ -11,7 +11,7 @@
   },
   &quot;main&quot;: &quot;coffeescript-growl.js&quot;,
   &quot;engines&quot;: {
-    &quot;node&quot;: &quot;&gt;= 0.4.8 &lt; 0.5.0&quot;
+    &quot;node&quot;: &quot;&gt;= 0.6.0 &lt;= 0.6.4&quot;
   },
   &quot;dependencies&quot;: {},
   &quot;devDependencies&quot;: {}
</pre><h3>Apache編</h3>

<h4>デフォルトで入っているApacheを使う</h4>
<p>環境設定 > 共有 > Web共有をチェック
 /private/etc/apache2/users/(ログイン名).confが自動生成されていると思うので、cgiなど使えるように編集する</p>
<pre class="code">&lt;Directory &quot;/Users/(ログイン名)/Sites/&quot;&gt;                                                                                                                                                              
    Options Indexes -MultiViews ExecCGI FollowSymLinks                                                                                                                                           
    AllowOverride All                                                                                                                                                                            
    Order allow,deny                                                                                                                                                                             
    Allow from all                                                                                                                                                                               
    AddHandler cgi-script .cgi                                                                                                                                                                   
    AddHandler fastcgi-script .fcgi                                                                                                                                                              
&lt;/Directory&gt; </pre>


<ins datetime="2011-12-12T12:33:35+09:00">
<h4>(追記)varnish</h4>
<p>varnishを80番で起動して、Apacheやplackupしたサービスはリバースプロキシする事にした。</p>
<pre class="code">brew install varnish</pre>
<p>今あるformulaでは起動スクリプト的なものはついてこないみたいなので、自分でplistを書く。"varnish plist"とかでググればたくさん見つかる。<br />
80番ポートをリッスンするにはシステム権限で起動する必要があるので、plistを/Library/LaunchDaemons/に置く。ファイルオーナーもroot:wheelとかに変更しておく。</p>
</ins>


<h3>以上</h3>
<p>ほかにもいろいろやった気がするけど忘れた。おわり。</p>]]>
    </content>
</entry>

<entry>
    <title>コンピュータ音楽―歴史・テクノロジー・アート</title>
    <link rel="alternate" type="text/html" href="http://blog.aklaswad.com/2011/000508.html" />
    <id>tag:blog.aklaswad.com,2011://2.508</id>

    <published>2011-10-30T12:26:18Z</published>
    <updated>2011-10-30T13:39:47Z</updated>

    <summary>前回の記事で書いたsonificatorの開発が思いの外面白く、勢い余って買ってしまった。コンピュータで作曲や音声合成を行うための理論が網羅的に解説されている大著。 コンピュータ音楽―歴史・テクノロジー・アートCurtis Roads 青柳 龍也 後藤 真孝 「訳者らあとがき」によれば原著は1996年とのことで、実に15年前の内容。記述が古い箇所が多いことも否めない。例えば、現在のDAWのようにMIDIイベントとオーディオ波形が並んで表示されているシーケンサー画面について「グラフィカルな表現は、純粋な MIDI データとオーディオ波形間の時間的な対応を見るのに便利である(p 608)」と解説してある。 まだ同時には再生できなかったのだ! 理論的な部分での充実度は尋常ではなく、多くのシンセサイザーやエフェクターの原理から、グラニュラーシンセシスの理論的背景まで、自分には十分すぎる範囲がカバーされている。殆どの場合、今でも不足を感じることは無いと思う。 十年くらい前に音楽系のプログラミングに凝っていた時期があって、その時に図書館で借りて頑張ってひと通り読んだ。ここ5-6年はソッチ系のことを殆どやっていないので、大分忘れてしまった。素人の手習いに過ぎないが、また頑張って読もうと思う。当時は手元に置いておきたくてもあまりに高くて手が出なかったが。。。いや、今でも十分財布に厳しいぞ。もとを取るためにもsonificatorはしばらくいじり続けたいと思います。...</summary>
    <author>
        <name>aklaswad</name>
        <uri>http://blog.aklaswad.com/</uri>
    </author>
    
    <category term="books" label="books" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="dsp" label="dsp" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="music" label="music" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sonificator" label="sonificator" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://blog.aklaswad.com/">
        <![CDATA[<p>前回の記事で書いたsonificatorの開発が思いの外面白く、勢い余って買ってしまった。コンピュータで作曲や音声合成を行うための理論が網羅的に解説されている大著。</p>

<p><a href="http://www.amazon.co.jp/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E9%9F%B3%E6%A5%BD%E2%80%95%E6%AD%B4%E5%8F%B2%E3%83%BB%E3%83%86%E3%82%AF%E3%83%8E%E3%83%AD%E3%82%B8%E3%83%BC%E3%83%BB%E3%82%A2%E3%83%BC%E3%83%88-Curtis-Roads/dp/4501532106%3FSubscriptionId%3D15SMZCTB9V8NGR2TW082%26tag%3Dblogaklaswadc-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4501532106" target="_blank">コンピュータ音楽―歴史・テクノロジー・アート</a><br />Curtis Roads 青柳 龍也 後藤 真孝 <br /><a href="http://www.amazon.co.jp/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E9%9F%B3%E6%A5%BD%E2%80%95%E6%AD%B4%E5%8F%B2%E3%83%BB%E3%83%86%E3%82%AF%E3%83%8E%E3%83%AD%E3%82%B8%E3%83%BC%E3%83%BB%E3%82%A2%E3%83%BC%E3%83%88-Curtis-Roads/dp/4501532106%3FSubscriptionId%3D15SMZCTB9V8NGR2TW082%26tag%3Dblogaklaswadc-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4501532106" target="_blank"><img src="http://ecx.images-amazon.com/images/I/418SQGVQHQL._SL160_.jpg" border="0" alt="4501532106" /></a><img src="http://www.assoc-amazon.jp/e/ir?t=blogaklaswadc-22&l=ur2&o=9" width="1" height="1" style="border: none;" alt="" /><br /></p>

<p>「訳者らあとがき」によれば原著は1996年とのことで、実に15年前の内容。記述が古い箇所が多いことも否めない。例えば、現在のDAWのようにMIDIイベントとオーディオ波形が並んで表示されているシーケンサー画面について「<q>グラフィカルな表現は、純粋な MIDI データとオーディオ波形間の時間的な対応を見るのに便利である<sapn class="page-number">(p 608)</span></q>」と解説してある。 まだ同時には再生できなかったのだ!</p>

<p>理論的な部分での充実度は尋常ではなく、多くのシンセサイザーやエフェクターの原理から、グラニュラーシンセシスの理論的背景まで、自分には十分すぎる範囲がカバーされている。殆どの場合、今でも不足を感じることは無いと思う。</p>

<p>十年くらい前に音楽系のプログラミングに凝っていた時期があって、その時に図書館で借りて頑張ってひと通り読んだ。ここ5-6年はソッチ系のことを殆どやっていないので、大分忘れてしまった。素人の手習いに過ぎないが、また頑張って読もうと思う。当時は手元に置いておきたくてもあまりに高くて手が出なかったが。。。いや、今でも十分財布に厳しいぞ。もとを取るためにもsonificatorはしばらくいじり続けたいと思います。<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>YAPC ASIA 2011で刺激されてJavaScriptに没頭してsonificator作った。</title>
    <link rel="alternate" type="text/html" href="http://blog.aklaswad.com/2011/000506.html" />
    <id>tag:blog.aklaswad.com,2011://2.506</id>

    <published>2011-10-22T05:13:25Z</published>
    <updated>2011-10-22T05:13:32Z</updated>

    <summary>YAPC ASIA 2011行ってきました。 cho45さんのWAFの話とか、普段書いているコードに直結するような話で興味深い話も多かったのですが、それ以上に、techno-catさんやHaruka Kataokaさんの音楽関係のトラックにとても刺激を受けました。そういえば、自分がプログラムを始めたきっかけって、テクノとかエレクトロニカとか、そんな音楽やりたくてじたばたしているうちに片足突っ込んだのがはじまりだったよな、ということを思い出したりして、まあ、いわゆる初期衝動？に立ち返ったような気持ちになりました。 で、この一週間モンモンとしているうちに、今やるならWeb Audio APIだよななどと思いつつ色々いじってたら、こんなのが出来ました。 sonificator すべてJavaScriptで書かれていて、Web Audio APIを利用してブラウザ上でリアルタイムに動作するプログラムで、DOM構造をそれっぽい音楽に変換して演奏します。ブックマークレットから起動できます。最近のchromeでしか動きません。今のところ、いわゆるIDMとかエレクトロニカといった感じの音にチューニングされてます。ちょっとした画像効果付きなので、そっち系統の音が好きな方は、好きなサイトで実行して放置すると良い感じなんじゃないかと思います。 自分のお気に入りは、Facebookのウォール部分です。予め先の方までAutoPagarizeしておいて垂れ流すと、とても気持ち良いです。みなさんも試してみてください。 Perlのパの字も無いところに落ち着きましたが、言語に拘らずいろんな方向に刺激を与えてくれるのもYAPCの良いところですね。この土日も仕事とも言語とも関係なく、好きなコード書きたいという気持ちが、今の僕には溢れてます。...</summary>
    <author>
        <name>aklaswad</name>
        <uri>http://blog.aklaswad.com/</uri>
    </author>
    
    <category term="googlechrome" label="Google Chrome" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="javascript" label="javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sonificator" label="sonificator" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="webaudioapi" label="Web Audio API" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="yapcasia" label="yapcasia" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://blog.aklaswad.com/">
        <![CDATA[<p>YAPC ASIA 2011行ってきました。</p>

<p>cho45さんのWAFの話とか、普段書いているコードに直結するような話で興味深い話も多かったのですが、それ以上に、techno-catさんやHaruka Kataokaさんの音楽関係のトラックにとても刺激を受けました。そういえば、自分がプログラムを始めたきっかけって、テクノとかエレクトロニカとか、そんな音楽やりたくてじたばたしているうちに片足突っ込んだのがはじまりだったよな、ということを思い出したりして、まあ、いわゆる初期衝動？に立ち返ったような気持ちになりました。</p>

<p>で、この一週間モンモンとしているうちに、今やるならWeb Audio APIだよななどと思いつつ色々いじってたら、こんなのが出来ました。</p>

<ul><li><a href="http://aklaswad.github.com/sonificator/">sonificator</a></li></ul>

<p>すべてJavaScriptで書かれていて、Web Audio APIを利用してブラウザ上でリアルタイムに動作するプログラムで、DOM構造をそれっぽい音楽に変換して演奏します。ブックマークレットから起動できます。最近のchromeでしか動きません。今のところ、いわゆるIDMとかエレクトロニカといった感じの音にチューニングされてます。ちょっとした画像効果付きなので、そっち系統の音が好きな方は、好きなサイトで実行して放置すると良い感じなんじゃないかと思います。</p>

<p>自分のお気に入りは、Facebookのウォール部分です。予め先の方までAutoPagarizeしておいて垂れ流すと、とても気持ち良いです。みなさんも試してみてください。</p>

<p><iframe src="http://player.vimeo.com/video/30919126?title=0&amp;byline=0&amp;portrait=0" width="500" height="281" frameborder="0" webkitAllowFullScreen allowFullScreen></iframe></p>

<p>Perlのパの字も無いところに落ち着きましたが、言語に拘らずいろんな方向に刺激を与えてくれるのもYAPCの良いところですね。この土日も仕事とも言語とも関係なく、好きなコード書きたいという気持ちが、今の僕には溢れてます。</p>]]>
        
    </content>
</entry>

<entry>
    <title>MTのワンライナーを素早く書く</title>
    <link rel="alternate" type="text/html" href="http://blog.aklaswad.com/2011/000505.html" />
    <id>tag:blog.aklaswad.com,2011://2.505</id>

    <published>2011-06-16T02:36:47Z</published>
    <updated>2011-06-16T03:51:13Z</updated>

    <summary><![CDATA[通常、MTのパッケージはシステムレベルにインストールされません。そのため、lib/ とextlib/ へのパスを実行時に追加する必要があります。 例えば、EntryオブジェクトをDumpするワンライナーは以下のようになります。 $ perl -Ilib -Iextlib -MMT -MData::Dumper -e 'MT-&gt;new; print Dumper(MT-&gt;model(&quot;entry&quot;)-&gt;load(42))' また、プラグインごとのlibディレクトリへのパスは、MTのインスタンス作成時に動的に追加されます。そのため、MTのプラグインを開発中、コンパイルチェックをしたい時などに直接実行する事ができません。 $ perl -Ilib -Iextlib -Iplugins/MyPlugin/lib -c plugins/MyPlugin/lib/MyPlugin.pm 長いですね。 そこで、以下のようなモジュールを、perlのパスの通った場所に設置します。 package T; use strict; use warnings; use lib qw( lib extlib ); use MT; BEGIN {...]]></summary>
    <author>
        <name>aklaswad</name>
        <uri>http://blog.aklaswad.com/</uri>
    </author>
    
    <category term="movabletype" label="movable type" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="perl" label="perl" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="小ネタ" label="小ネタ" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://blog.aklaswad.com/">
        <![CDATA[<p>通常、MTのパッケージはシステムレベルにインストールされません。そのため、lib/ とextlib/ へのパスを実行時に追加する必要があります。<br />
例えば、EntryオブジェクトをDumpするワンライナーは以下のようになります。</p>

<pre class="code">$ perl -Ilib -Iextlib -MMT -MData::Dumper -e 'MT-&gt;new; print Dumper(MT-&gt;model(&quot;entry&quot;)-&gt;load(42))'</pre>

<p>また、プラグインごとのlibディレクトリへのパスは、MTのインスタンス作成時に動的に追加されます。そのため、MTのプラグインを開発中、コンパイルチェックをしたい時などに直接実行する事ができません。</p>

<pre class="code">$ perl -Ilib -Iextlib -Iplugins/MyPlugin/lib -c plugins/MyPlugin/lib/MyPlugin.pm</pre>

<p>長いですね。</p>

<p>そこで、以下のようなモジュールを、perlのパスの通った場所に設置します。</p>

<pre class="code">package T;
use strict;
use warnings;
use lib qw( lib extlib );
use MT;
BEGIN { MT-&gt;new };
1;</pre>

<p>名前は、T.pmです。これで</p>

<pre class="code">$ perl -MT -MData::Dumper -e 'print Dumper(MT-&gt;model(&quot;entry&quot;)-&gt;load(42))'
$ perl -MT -c plugins/MyPlugin/lib/MyPlugin.pm</pre>

<p>などと、perlにMT専用オプションが追加されたような錯覚を覚える事が出来ます。</p>]]>
        
    </content>
</entry>

<entry>
    <title>githubのwikiエンジン「Gollum」を試してみた。</title>
    <link rel="alternate" type="text/html" href="http://blog.aklaswad.com/2011/000502.html" />
    <id>tag:blog.aklaswad.com,2011://2.502</id>

    <published>2011-01-22T16:53:48Z</published>
    <updated>2011-01-22T16:54:29Z</updated>

    <summary>Gollumは、githubのwikiエンジンのコア部分がオープンソースとして公開されたものです。軽量なWebServerとして動作するので、ローカルマシン上で起動してすぐに、ブラウザ経由でwikiページの閲覧や編集が可能になります。使用感をメモしておきます。 https://github.com/github/gollum インストールと起動 Gollumはrubyで書かれたwikiエンジンです。gemからインストールする事が出来ます。 起動するには、任意のgitリポジトリへ移動(またはオプションでパスを指定)してgollumコマンドを実行します。 $ sudo gem install gollum $ git init my_wiki $ cd my_wiki $ gollum これで、デフォルトでポート4567にウェブサーバが起動するので、ブラウザでlocalhost:4567にアクセスしてすぐにwikiページの作成が可能です。 特徴 バックエンドがgit gollumはストレージとして、一般的なDBエンジンではなくgitを利用しています。ブラウザからページを追加してみるとわかりますが、wikiページがファイルと一対一で対応するという直感的に分かりやすい構造になっています。ワーキングコピーでそれらのファイルを直接編集してgit commitすることでwikiに反映させることもできます。 githubのwikiもgitリポジトリとしてアクセス可能になっているので、githubからwikiをガバっとcloneしてローカルマシン上のGollumで確認しながら大量にページ追加作業をし、まとまったところでgithubにpushといった形でのgithubと連携することで、かなりの作業の効率化が可能かと思います。 オマケ的な利点として、画像などのファイルを直接git addする事でリポジトリに含めて管理、参照するといったことも挙げられます。(現時点ではGithubのwikiにはファイルアップロードのインターフェースがないので) 複数のマークアップフォーマットに対応 必要なライブラリをインストールする事で、以下のマークアップフォーマットを利用できます。フォーマットはwikiページごとに設定できます。 ASCIIDoc Creole Markdown Org Pod RDoc ReStructuredText Textile MediaWiki (gemから落とせる最新版(1.1.1)には含まれていない模様) また、github...</summary>
    <author>
        <name>aklaswad</name>
        <uri>http://blog.aklaswad.com/</uri>
    </author>
    
    <category term="github" label="GitHub" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="gollum" label="Gollum" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="memo" label="memo" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="wiki" label="Wiki" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://blog.aklaswad.com/">
        <![CDATA[<p>Gollumは、githubのwikiエンジンのコア部分がオープンソースとして公開されたものです。軽量なWebServerとして動作するので、ローカルマシン上で起動してすぐに、ブラウザ経由でwikiページの閲覧や編集が可能になります。使用感をメモしておきます。</p>

<ul>
	<li><a href="https://github.com/github/gollum">https://github.com/github/gollum</a></li>
</ul>

<h3>インストールと起動</h3> 
Gollumはrubyで書かれたwikiエンジンです。gemからインストールする事が出来ます。
起動するには、任意のgitリポジトリへ移動(またはオプションでパスを指定)してgollumコマンドを実行します。

<pre> 
$ sudo gem install gollum
$ git init my_wiki
$ cd my_wiki
$ gollum
</pre> 

<p>これで、デフォルトでポート4567にウェブサーバが起動するので、ブラウザでlocalhost:4567にアクセスしてすぐにwikiページの作成が可能です。</p>

<h3>特徴</h3> 
<h4>バックエンドがgit</h4>

<p>gollumはストレージとして、一般的なDBエンジンではなくgitを利用しています。ブラウザからページを追加してみるとわかりますが、wikiページがファイルと一対一で対応するという直感的に分かりやすい構造になっています。ワーキングコピーでそれらのファイルを直接編集してgit commitすることでwikiに反映させることもできます。</p>

<p>githubのwikiもgitリポジトリとしてアクセス可能になっているので、githubからwikiをガバっとcloneしてローカルマシン上のGollumで確認しながら大量にページ追加作業をし、まとまったところでgithubにpushといった形でのgithubと連携することで、かなりの作業の効率化が可能かと思います。</p>

<p>オマケ的な利点として、画像などのファイルを直接git addする事でリポジトリに含めて管理、参照するといったことも挙げられます。(現時点ではGithubのwikiにはファイルアップロードのインターフェースがないので)</p>

<h4>複数のマークアップフォーマットに対応</h4>

<p>必要なライブラリをインストールする事で、以下のマークアップフォーマットを利用できます。フォーマットはwikiページごとに設定できます。</p>

<ul><li>ASCIIDoc</li>
<li>Creole</li>
<li>Markdown</li>
<li>Org</li>
<li>Pod</li>
<li>RDoc</li>
<li>ReStructuredText</li>
<li>Textile</li>
<li>MediaWiki (gemから落とせる最新版(1.1.1)には含まれていない模様)</li>
</ul>

<p>また、github 独自拡張のwiki内リンク記法が利用できます。</p>

<h3>はまったところ</h3>

<p>ワーキングコピーではなくgitリポジトリそのものを見ているので、ファイルベースで作業した場合、git commitするまで反映されない、ということに気づくまで小一時間はまった。</p>]]>
        
    </content>
</entry>

<entry>
    <title>Github の MT のリポジトリブラウザに Fogbugz へのリンクを追加する Chrome extension 書いた。</title>
    <link rel="alternate" type="text/html" href="http://blog.aklaswad.com/2011/000501.html" />
    <id>tag:blog.aklaswad.com,2011://2.501</id>

    <published>2011-01-11T15:00:12Z</published>
    <updated>2011-01-11T15:03:34Z</updated>

    <summary>Happy new year! Happy Github! ということで、Movable Type のリポジトリがgithubに移行してとても楽しみなのですが、コミットログにFogbugzのケース番号書いてあってもWebから見たときにリンクにならないので不便です。のでとりあえずChrome extensionでなんとかします。 GithubType.crx https://github.com/movabletype/ 以下で、コミットログからfogbugzのcase番号らしきものを拾って、近くにリンクを追加します。だけです。もっと良い方法をご存知の方教えてください。...</summary>
    <author>
        <name>aklaswad</name>
        <uri>http://blog.aklaswad.com/</uri>
    </author>
    
    
    <content type="html" xml:lang="en-us" xml:base="http://blog.aklaswad.com/">
        <![CDATA[<p>Happy new year! Happy Github!</p>

<p>ということで、Movable Type のリポジトリがgithubに移行してとても楽しみなのですが、コミットログにFogbugzのケース番号書いてあってもWebから見たときにリンクにならないので不便です。のでとりあえずChrome extensionでなんとかします。</p>

<ul>
	<li><a href="http://blog.aklaswad.com/GithubType.crx">GithubType.crx</a></li>
</ul>

<p>https://github.com/movabletype/ 以下で、コミットログからfogbugzのcase番号らしきものを拾って、近くにリンクを追加します。だけです。もっと良い方法をご存知の方教えてください。<br />
</p>]]>
        
    </content>
</entry>

<entry>
    <title>MTDDC HOKKAIDO行ってきた。</title>
    <link rel="alternate" type="text/html" href="http://blog.aklaswad.com/2010/000497.html" />
    <id>tag:blog.aklaswad.com,2010://2.497</id>

    <published>2010-12-25T05:27:10Z</published>
    <updated>2010-12-25T06:52:33Z</updated>

    <summary>一週間経ってしまいましたが、MTDDC HOKKAIDOのまとめ。...</summary>
    <author>
        <name>aklaswad</name>
        <uri>http://blog.aklaswad.com/</uri>
    </author>
    
    <category term="hokkaido" label="hokkaido" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mtddc" label="mtddc" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="psgi" label="psgi" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://blog.aklaswad.com/">
        <![CDATA[<p>一週間経ってしまいましたが、MTDDC HOKKAIDOのまとめ。</p>]]>
        <![CDATA[<h3>[DAY 1] MTDDC HOKKAIDO</h3>

<p>朝５時半に起きて羽田へ。毎朝のように寝坊した旨をTwitterにつぶやいている身としては、そもそも飛行機に間に合うかが一番の難関でしたが、なんとかよたよたと家を出ました。北海道は大雪だったがなんとか無事飛行機も着陸し、会場へ。MTDDCスタート!</p>

<p>やはり自分的には、技術よりのトークの方が興味ありました。残念ながら受付にいて壁越しにしか聞けませんでしたが、ka2hiroさんのテンプレートタグの話と、pirolix氏の分散処理の話が面白かったです。</p>

<p>自分のLTは、開発中のリスティングフレームワークについて、ざっとした説明とライブコーディングをやりました。資料おいておきます。</p>

<ul>
	<li><a href="http://blog.aklaswad.com/mtddc_sapporo.html">http://blog.aklaswad.com/mtddc_sapporo.html</a></li>
</ul>

<p>前日まで「時間が余っているので15分くらいやって」と言われていたのが、直前になって「やっぱ時間無いので7分以内で」となってしまい、だいぶ端折ってしまいました。リスティングフレームワーク上でのリスト作成の雰囲気が少しでも伝わったらと思います。</p>

<h3>[DAY 2] Hack-a-thon</h3>

<p>かつて無いほど大勢の参加者があり、楽しかったです。</p>

<p>自分はドラッグアンドドロップで複数ファイルをアップロードするインターフェイスの試作をやってました。マルチブラウザ対応等、いろいろ足りない部分が多くすぐには公開できませんが、ちょこちょこと手を入れていこうと思います。</p>

<p>Hokkaido.pmの方が多く参加されていた事もあり、PSGI絡みの話が多かったのが興味深かったです。<br />
触発されて、以前書いたパブリッシュ側のPSGIアプリのデモもやろうと思ったのですが、Plackのインストールがコケてしまい間に合いませんでした。残念。一応コードさらしておきます。</p>

<p><script src="https://gist.github.com/576237.js?file=gistfile1.pl"></script></p>

<h3>[DAY 3] Freetime</h3>

<p>三日目は夕方のフライトの時間までフリータイム。小樽まで足を伸ばして、寿司と、前日の打ち上げでとてもおいしかった小樽ビールの本家のビアホールと、ウニいくら丼と、食い倒れてました。とてもおいしかったです。</p>

<p>おわり。</p>]]>
    </content>
</entry>

<entry>
    <title>registryメソッドの説明的な何か。</title>
    <link rel="alternate" type="text/html" href="http://blog.aklaswad.com/2010/000487.html" />
    <id>tag:blog.aklaswad.com,2010://2.487</id>

    <published>2010-11-07T16:06:01Z</published>
    <updated>2010-11-07T16:13:11Z</updated>

    <summary>MTのあちこちで使われている registry メソッドについて、自分の知っている範囲でですが、説明的なものを書いてみました。 テストとしてサンプルコードが埋め込まれているので、prove 出来ます。 podで説明文を書いてあるのですが、後で気付いたのですが、perldoc では文字化けして読めませんでした＞＜ 直接コードとpodを読んで、実行してみる等してみてください。 何かのお役に立てれば。...</summary>
    <author>
        <name>aklaswad</name>
        <uri>http://blog.aklaswad.com/</uri>
    </author>
    
    
    <content type="html" xml:lang="en-us" xml:base="http://blog.aklaswad.com/">
        <![CDATA[<p>MTのあちこちで使われている registry メソッドについて、自分の知っている範囲でですが、説明的なものを書いてみました。<br />
テストとしてサンプルコードが埋め込まれているので、prove 出来ます。<br />
podで説明文を書いてあるのですが、後で気付いたのですが、perldoc では文字化けして読めませんでした＞＜<br />
直接コードとpodを読んで、実行してみる等してみてください。<br />
何かのお役に立てれば。<br />
</p>]]>
        <![CDATA[<p><script src="https://gist.github.com/666207.js"> </script></p>]]>
    </content>
</entry>

<entry>
    <title>Re: Movable Typeのプラグインファイル構成について</title>
    <link rel="alternate" type="text/html" href="http://blog.aklaswad.com/2010/000486.html" />
    <id>tag:blog.aklaswad.com,2010://2.486</id>

    <published>2010-11-06T07:41:36Z</published>
    <updated>2010-11-06T08:09:10Z</updated>

    <summary>少し説明を追加、アップデートしました。 小粋空間さんで、プラグインのファイル構成について解説されている記事が公開されています。 Movable Typeのプラグインファイル構成について: 小粋空間 その中で、自分の過去の発表で YAML ファイルでの perl コードの実行について話した内容に触れられていたのですが、それを読んで、自分の発言が誤解されるような言い方になっていたようなので、整理してみます。 要点を順に書くと、こんな感じになります。 Movable Type の registry では、サブルーチンが期待されているなら、文字列を自動的に perl コードとして展開する場合がある plugin の定義ファイルである config.yaml ファイルではこの機能を最大限利用することで直接 perl コードを埋め込める(ようになっている設定値が多数用意されている) ただし、テーマの定義ファイルである theme.yaml ファイルを扱う際には、セキュリティ向上を目的に、基本的にこの機能を使わないよう開発している ですから、plugin のスタートポイントがfoo.plである場合と、config.yamlである場合に、セキュリティ的な安全性の差は(現在の所)ありません。小粋空間さんのところで触れられた安全性の話は、plugin と theme の違いの話だとご理解ください。 2) について補足しておくと、registry 内でサブルーチンが期待される場合(例えばテンプレートタグの登録での、実行ルーチンの指定部分)、「sub {」で始まる文字列を直接指定する事で、perl として実行させる事が出来ます。 以下は、実際にプラグインとして動作するconfig.yamlファイルの例です。 tags: function:...</summary>
    <author>
        <name>aklaswad</name>
        <uri>http://blog.aklaswad.com/</uri>
    </author>
    
    <category term="movabletype" label="Movable Type" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="registry" label="registry" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://blog.aklaswad.com/">
        <![CDATA[<p><ins datetime="2010-11-06T17:06:48+09:00">少し説明を追加、アップデートしました。</ins></p>

<p>小粋空間さんで、プラグインのファイル構成について解説されている記事が公開されています。</p>

<ul>
	<li><a href="http://www.koikikukan.com/archives/2010/11/06-020202.php">Movable Typeのプラグインファイル構成について: 小粋空間</a></li>
</ul>

<p>その中で、自分の過去の発表で YAML ファイルでの perl コードの実行について話した内容に触れられていたのですが、それを読んで、自分の発言が誤解されるような言い方になっていたようなので、整理してみます。</p>

<p>要点を順に書くと、こんな感じになります。</p>

<ol>
	<li>Movable Type の registry では、サブルーチンが期待されているなら、文字列を自動的に perl コードとして展開する場合がある</li>
	<li>plugin の定義ファイルである config.yaml ファイルではこの機能を最大限利用することで直接 perl コードを埋め込める(ようになっている設定値が多数用意されている)</li>
	<li>ただし、テーマの定義ファイルである theme.yaml ファイルを扱う際には、セキュリティ向上を目的に、基本的にこの機能を使わないよう開発している</li>
</ol>

<p><ins datetime="2010-11-06T17:06:20+09:00">ですから、plugin のスタートポイントがfoo.plである場合と、config.yamlである場合に、セキュリティ的な安全性の差は(現在の所)ありません。小粋空間さんのところで触れられた安全性の話は、plugin と theme の違いの話だとご理解ください。</ins></p>

<p>2) について補足しておくと、registry 内でサブルーチンが期待される場合(例えばテンプレートタグの登録での、実行ルーチンの指定部分)、「sub {」で始まる文字列を直接指定する事で、perl として実行させる事が出来ます。<br />
以下は、実際にプラグインとして動作するconfig.yamlファイルの例です。</p>

<pre>
tags:
    function:
        Foo1: sub { return "Hello foo1" }
</pre>]]>
        
    </content>
</entry>

<entry>
    <title>ActionStreams + AnyEvent</title>
    <link rel="alternate" type="text/html" href="http://blog.aklaswad.com/2010/000484.html" />
    <id>tag:blog.aklaswad.com,2010://2.484</id>

    <published>2010-10-18T17:23:28Z</published>
    <updated>2010-10-18T17:37:47Z</updated>

    <summary>ActionStreamsで更新チェックする時に、AnyEvent::HTTPを使って並列ダウンロードするようにしてみました。sixapart / mt-plugin-ActionStreamsからforkして、anyeventブランチを切ってゴニョゴニョしてます。 http://github.com/aklaswad/mt-plugin-ActionStreams/tree/anyevent AnyEventが見つかれば自動的に利用するようにしてありますので、特別な設定は不要です。 10程度のストリームの処理で、ベンチマーク(ストップウォッチで目視)では約三倍ほど速くなってます。ストリームの数が増えれば、もっと差が出るかもしれません。...</summary>
    <author>
        <name>aklaswad</name>
        <uri>http://blog.aklaswad.com/</uri>
    </author>
    
    <category term="actionstreams" label="ActionStreams" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="anyevent" label="AnyEvent" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="anyeventhttp" label="AnyEvent::HTTP" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="hack" label="hack" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype" label="Movable Type" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://blog.aklaswad.com/">
        <![CDATA[<p>ActionStreamsで更新チェックする時に、AnyEvent::HTTPを使って並列ダウンロードするようにしてみました。<a href="http://github.com/sixapart/mt-plugin-ActionStreams">sixapart / mt-plugin-ActionStreams</a>からforkして、anyeventブランチを切ってゴニョゴニョしてます。</p>

<ul>
	<li><a href="http://github.com/aklaswad/mt-plugin-ActionStreams/tree/anyevent">http://github.com/aklaswad/mt-plugin-ActionStreams/tree/anyevent</a></li>
</ul>

<p>AnyEventが見つかれば自動的に利用するようにしてありますので、特別な設定は不要です。</p>

<p>10程度のストリームの処理で、ベンチマーク(ストップウォッチで目視)では約三倍ほど速くなってます。ストリームの数が増えれば、もっと差が出るかもしれません。</p>]]>
        
    </content>
</entry>

<entry>
    <title>YAPC::Asia 2010</title>
    <link rel="alternate" type="text/html" href="http://blog.aklaswad.com/2010/000483.html" />
    <id>tag:blog.aklaswad.com,2010://2.483</id>

    <published>2010-10-16T15:26:56Z</published>
    <updated>2010-10-16T16:12:39Z</updated>

    <summary>行ってきました。YAPC、というかPerlのイベント自体に初参加だったのですが、とてもエキサイティングな二日間を過ごせました。ふっとMTを持ちあげてくれたyusukebeさんのトークには特に感謝したいです。色々吹っ切れた気がします。...</summary>
    <author>
        <name>aklaswad</name>
        <uri>http://blog.aklaswad.com/</uri>
    </author>
    
    
    <content type="html" xml:lang="en-us" xml:base="http://blog.aklaswad.com/">
        <![CDATA[<p>行ってきました。YAPC、というかPerlのイベント自体に初参加だったのですが、とてもエキサイティングな二日間を過ごせました。ふっとMTを持ちあげてくれた<a href="http://twitter.com/yusukebe">yusukebe</a>さんのトークには特に感謝したいです。色々吹っ切れた気がします。</p>]]>
        
    </content>
</entry>

<entry>
    <title>テンプレートの依存関係を表示するプラグインを作ってみました。</title>
    <link rel="alternate" type="text/html" href="http://blog.aklaswad.com/2010/000477.html" />
    <id>tag:blog.aklaswad.com,2010://2.477</id>

    <published>2010-05-28T04:32:26Z</published>
    <updated>2010-05-29T14:47:10Z</updated>

    <summary>Include Map という名前のプラグインです。 なにが起こるの？ テンプレートの編集画面に、そのテンプレートをインクルードしているテンプレートの一覧を表示します。 以下のような依存関係の一覧画面を追加します。 どこでダウンロードするの？ ダウンロードはgithubからお願いします。画面右上、上から3段目の「Download Source」ボタンから、最新のパッケージをダウンロードできます。 使い方は？ IncludeMapプラグインは、テンプレートの編集を監視し、内部的に依存関係の記録を行います。ですが、現在のところプラグインのインストール時にはこの記録は作成されません。 運用中のMovable Typeにこのプラグインを追加して利用する場合、事前にブログ/ウェブサイトの一覧画面からPlugin Action &gt; Rebuild Include Mapを実行してください。 インストールに成功すると、メニューの「デザイン &gt; Include Map」から、各ブログごとのテンプレートの依存関係表を開くことが出来ます。この画面はIEでは動作しないかもしれません。 ご利用は計画的に このプラグインはMTのデータベースに変更を加えます。また、開発途中のため、今後大きな変更が加わる可能性もあります。実運用中の環境へのインストールはお勧めしません。テスト用途でのご利用をご検討ください。...</summary>
    <author>
        <name>aklaswad</name>
        <uri>http://blog.aklaswad.com/</uri>
    </author>
    
    <category term="movabletype" label="Movable Type" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="plugin" label="plug-in" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="テンプレート" label="テンプレート" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-us" xml:base="http://blog.aklaswad.com/">
        <![CDATA[<p>Include Map という名前のプラグインです。</p>

<h3>なにが起こるの？</h3>

<ul>
	<li>テンプレートの編集画面に、<strong>そのテンプレートをインクルードしている</strong>テンプレートの一覧を表示します。</li>
	<li>以下のような依存関係の一覧画面を追加します。</li>
</ul>

<p><a href="http://blog.aklaswad.com/images/include_map.png"><img alt="include_map.png" src="http://blog.aklaswad.com/assets_c/2010/05/include_map-thumb-500x175-112.png" width="500" height="175" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></p>

<h3>どこでダウンロードするの？</h3>

<p>ダウンロードは<a href="http://github.com/aklaswad/mt-plugin-include-map">github</a>からお願いします。画面右上、上から3段目の「Download Source」ボタンから、最新のパッケージをダウンロードできます。</p>

<h3>使い方は？</h3>

<p>IncludeMapプラグインは、テンプレートの編集を監視し、内部的に依存関係の記録を行います。ですが、現在のところプラグインのインストール時にはこの記録は作成されません。<br />
運用中のMovable Typeにこのプラグインを追加して利用する場合、事前にブログ/ウェブサイトの一覧画面からPlugin Action > Rebuild Include Mapを実行してください。</p>

<p>インストールに成功すると、メニューの「デザイン > Include Map」から、各ブログごとのテンプレートの依存関係表を開くことが出来ます。この画面はIEでは動作しないかもしれません。</p>

<h3>ご利用は計画的に</h3>

<p><strong>このプラグインはMTのデータベースに変更を加えます。また、開発途中のため、今後大きな変更が加わる可能性もあります。実運用中の環境へのインストールはお勧めしません。テスト用途でのご利用をご検討ください。</strong></p>]]>
        
    </content>
</entry>

</feed>
