水島雄太のブログ

個人的かつ雑多なブログです。

プログラミング

Flocking - Web Audio APIを使用した音響合成エンジン(その1)

FlockingとはJavascriptで実装されたWeb上で動く音響合成エンジンです。 日本語での紹介記事が現時点で皆無なので、紹介したいと思います。 Web Audio APIをラップする形で実装されており、 ブラウザが対応さえしていれば、Flashなどのプラグイン無しでマル…

Homebrewでantがインストール出来ない問題に対処

HomebrewでAntをインストールしようとbrew install antを実行したところ、 以下の様なメッセージが表示された。 ==> Downloading http://www.apache.org/dyn/closer.cgi?path=ant/binaries/apache-ant-1.9.2-bin.tar.gz ==> Best Mirror http://ftp.tsukuba.…

nicosearch をPyPIで公開

ニコニコ検索APIをPythonから使用する簡単なラッパーライブラリを書いたので、試しにPyPIに公開してみました。 https://pypi.python.org/pypi/nicosearch https://github.com/ymizushi/nicosearch インストール方法 pip install nicosearch 使用方法 from ni…

Clojureのevalとmacroのパフォーマンスを比べる

Clojureには他の動的型言語と同様に文字列*1をプログラムとして評価出来るevalという関数があります。 Clojureにはマクロがありますし他の動的型言語と同様にevalは遅いだろうという推測は容易に出来ますので、evalを使わないといけない局面というのはそう多…

Racketのdot記法を使う

Racketのdot記法は、基本的にリストの最後の要素の前に付きますが、 (1 . < . 2)と書くと、(< 1 2)と等価に評価される*1同様にみなされるようです。 dot記法がペアを生成する(cons x y)の省略記法であることを考えると、 この記法は例外的に感じられます。 …

Lispは読みにくい以上に書きにくいと感じている人が多い説

Lispが流行らない理由として「括弧が多い」ということはよく挙げられる要素だと思います。 それでは何故「括弧が多い」ことが敬遠されるかというと、以下の2つが考えられます。 読みにくい 書きにくい そのビジュアル面から、「括弧が多い」ことで「読みに…

RacketのREPLをマシにする

Racket のREPLは素の状態では履歴もemacs標準キーバインドも使えないため、使い勝手が非常に悪いです。 とりあえず XREPL(eXtended REPL) を設定しましょう。 設定方法 $ echo "(require xrepl)" >> ~/.racketrc POSIX互換なら $ racket でREPLが起動する際…

minosound 1.1 をリリース

minosound 1.1 をリリースしました。 バックエンドの部分はClojureで開発していて結構出来ているのですが、 はもうちょっと作りこみたいなーと思ったので、 とりあえずクライアントの部分だけデザイン、UIを変更したり、 WebVIEWでの更新情報告知機能などを…

CloudBeesでのClojureプロジェクトのデプロイ方法

Clojureでよく使われているPaasとしてはHerokuが有名だと思いますが、最近はCloudbeesもよく使われているようなので、私もCloudbeesにプロジェクトをデプロイしてみました。 Cloudbeesはクラウド環境を操作するためのleiningenプラグインが用意されており、…

IDEとVimと生産性

単純に生産性だけを考えると、静的型言語なら確実にIDEの方が生産性が高いように思うし、動的型言語でも最近だとIDEの方に軍配があがることが多いかもしれない。 ただ、実はプログラマにとって生産性はあんまり重要ではなくて、 それよりもどれだけモチベー…

迷路自動生成

先日リリースしたアプリで迷路自動生成を実装してみたので、 まとめてみます。 迷路自動生成の仕様としては、 2次元平面の対角をスタートとゴールとする スタートは必ず一つ ゴールは必ずしも、一本の道で終わってなくても良い 以上の3点となります。 これ…

Homebrewでインストールしたleiningen1.xからleiningen2.xへのUpgrade

2013/04/04現在、Homebrewでインストールされる leiningenが1.x系列なので2.x系列にUpgradeしてみました。 ほぼleiningen/wiki/Upgradingの手順通りです。 直接Cellarいじくっていいのかよくわかりませんので、こうした方が良いよというのがあれば指摘してい…

zshでgit checkoutを叩いた時のリモート補完を無効

最近bashからzshに移行したが、 zshではデフォルトでリモート補完が有効になっているので、 git checkout でブランチ名補完を行おうとした際に、 リモートのブランチ名を探しに行ってしまう。 そのため補完が完了するまで入力を受け付けないという事が頻発す…

Vimでカレント列から行末までをヤンク

Vimではノーマルモードで Dでカレント列から行末までを削除してヤンク、 Cでカレント列から行末までを削除してヤンクして挿入モード に入るのに、 カレント列から行末までをヤンクするコマンドが y$ でしか出来ないので、 nnoremap Y y$ しておけばいいと思…

Pythonのitems()とiteritems()の違い

Python2.xの辞書オブジェクトに対する組み込みメソッド、 items()はkeyとvalueをtupleに格納したlistを生成して返すのに対して、 iteritems()はイテレータを返す。 items()はいちいちリストを生成する分、オーバーヘッドがかかるので、 基本的にiteritemsを…

git rebase

git rebaseするときの注意点 git rebaseはbranchを切ってからのcommitを全て書き換えてしまう(ハッシュも違うものになる)ので、リモートブランチにpushしてから、git rebaseを行うと、そのままではpush出来ず、 間違えてpull してしまうと、同じ内容のコミ…