Hatena::ブログ(Diary)

にっき このページをアンテナに追加 RSSフィード

2010/12/19 つくった

[]2次元セルオートマトンを眺めるだけのiPhoneアプリをつくりました 23:37 2次元セルオートマトンを眺めるだけのiPhoneアプリをつくりましたを含むブックマーク 2次元セルオートマトンを眺めるだけのiPhoneアプリをつくりましたのブックマークコメント

2次元セルオートマトンを眺めるだけのiPhoneアプリ「CA2D」をつくりました。

AppStore で公開しているので、iPhone などを持っている方はぜひダウンロードしてみてください。

無料です。

http://itunes.apple.com/jp/app/ca2d/id406159935?mt=8

CA2D では複数の状態を持つ2次元セルオートマトンを扱っています。

CA2D には以下のサイトで紹介されている状態遷移規則を同梱しています。

http://www.mirekw.com/ca/index.html

このサイトでは色々なセルオートマトンが紹介されています。

おもしろいので興味のある方や、セルオートマトンについてもっと詳しく知りたい方は訪れるとよいと思います。

また、このアプリケーションソースコードgithub にあげてみました。

参考になるかわかりませんが、こちらもよろしくお願いします。

https://github.com/slightair/CA2D

2010/09/23 Clojure

[]はじめました 01:15 はじめましたを含むブックマーク はじめましたのブックマークコメント

めずらしく本を買ってお勉強です

プログラミングClojure

プログラミングClojure

がんばるぞー

[][]MacPorts でさくっとインストール 01:15 MacPorts でさくっとインストールを含むブックマーク MacPorts でさくっとインストールのブックマークコメント

MacPorts を使っていればコマンドひとつでインストールできてしまいます。

sudo port install clojure +rlwrap

[][]TextMateClojure のコードを書きたい 01:15 TextMate で Clojure のコードを書きたいを含むブックマーク TextMate で Clojure のコードを書きたいのブックマークコメント

Clojureバンドルもきっとあるだろーと考えて探してみたら、いくつかありました。

ここの clojure-tmbundle を入れてみた。

http://github.com/kek/clojure-tmbundle

cd ~/Library/Application\ Support/TextMate/Bundles/

git clone git://github.com/kek/clojure-tmbundle.git Clojure.tmbundle

osascript -e 'tell app "TextMate" to reload bundles'

このバンドルバンドル内に Clojure の実行環境を持つらしい。

以下のコマンドを打つと Clojure 本体と clojure-contrib ライブラリgithub から取ってきてビルドしてくれる。

./Clojure.tmbundle/Vendor/clj-update-and-build

・・・はずなんだけど clojure-contrib のビルドの時に build.xml が無いと怒られてしまう。

この問題の解決方法が以下のページに書いてありました。(tumblrだけど、元の記事はどこにあるのだろう。見つからなかった)

http://mynameisanler.tumblr.com/post/795157125/setting-up-clojure-in-textmate

ページに書かれている手順にコマンドを打って、いくつかのファイルを書き変えたら、 TextMate で開いている Clojure のコードを一発で動かせるようになりました。

すばらしい。

2009/10/05

[][]HTML5 3days Tech Talk に参加してきた 17:05 HTML5 3days Tech Talk に参加してきたを含むブックマーク HTML5 3days Tech Talk に参加してきたのブックマークコメント

html5-developers-jp 主催の HTML5 3days Tech Talk の 2日目に参加してきました。HTML5 に関して全く知識の無い状態での参加でしたが、わかりやすい説明で話にきちんとついていくことができました。せっかく勉強会に参加したので、ちょっとずつでも HTML5 に触っていこうかなと思いました。

勉強会で話を聞きながら取っていたメモを載せてみます。

html5 で作るオフラインwebアプリケーション

講師:白石 俊平さん

HTML5は日本が熱い!
HTML5 のグループ登録者が増えている。
国で見ると、日本と韓国で盛り上がっているようだ。
日本がHTML5をひっぱっていくぜ。

オフラインwebアプリケーションとは、そのまんま、オフラインで動作するwebアプリケーションのこと。
2007 年に Google Gears が出た。
HTML5 関連の API は Gears からの影響が顕著に表れている。

しかし、Gearsを使ったアプリケーションはそんなに多くない。

普及していない理由
 - ニーズが顕在化していなかった
 - ブラウザプラグインというアプローチが普及を阻害
 - 開発の知識を持った人材が不足していた

しかし時代は変わる!
 - モバイルネット端末の普及
 - ブラウザ自身による実装
 - 標準化により開発者人口増加
もう普及するしかないだろ!

オフラインwebアプリケーションを実現するためのAPI
アプリケーションキャッシュ
 アプリケーションに必要なリソースをローカルにキャッシュするための仕組み
 キャッシュマニフェストファイルを作成する
 マニフェストを text/cache-manifest MIMEタイプで公開
 webアプリケーションhtml要素にmanifest属性を追加してキャッシュマニフェストURLを指定する。
 キャッシュマニフェストとは
  - キャッシュするリソースを書き連ねただけのファイル
  - 文字コードはUTF8
  - 1バイトでも変更があればリフレッシュされる
  - コメント内にバージョン文字列を含めたりする。
    
  でも、キャッシュがあるととても開発しづらい。

  デモ1
   hello1.html の中で <html manifest="hello1.manifest"> とか書いてた。
   manifestファイルでは hello1.htmlキャッシュする指定
   キャッシュするから、マニフェストファイルを変更しないと再読み込みしても内容が変わらない。
  デモ2
   アプリケーションキャッシュjsで制御して、自動更新するデモ
   マニフェストファイルが更新されていたら、新しいファイルを取ってくる。

 web database
   クライアント上で動作するRDB
   SQLを全てつかえる
   オフラインwebアプリケーションを作る上で中心的なテクノロジ
   
   ドメインごとに領域が分れる。
   ひとつのドメインにつき複数の領域を持てる
   
   非同期と同期方のAPIがある
   
   非同期APIは常に利用可能
   結果を全てコールバック関数で受けらねばならないのでコーディングが面倒
   
   同期API
   ワーカ内でしか使えないが、コーディングが楽
   
   デモ
   java scriptSQL文を書いている 
   
   safariの開発者コンソールにデータベースという項目ができてるよ
   
  web stroge
  
    キーバリューストレージ
    web database より簡単に使えるよ
    ドメインごとの領域
    ストレージは二種類
     localstroge 永続期間無制限
     session stroge ウインドウごと、ウインドウを閉じたら消える
     
     localstroge.key = "value"
     var k = localstroge.key
     
  web worker
    バックグラウンドで動くスレッド
    JSで時間かかる処理を行なうとブラウザがかたまる
    
    使うには注意が必要
    スレッドとは厳密には違い、変数を共有できない
    window documentなども不可
    JSフレームワークを使用している場合は注意
    ワーカ間のデータの共有にはメッセージングのAPIを用いる。
    
    ワーカの生成
    new Worker(scriptURL)
    
    メッセージ送信
    worker.postMessage(message)

    メッセージ受信
    worker.onmessage(message)
    
    つらい点
    workerの処理はデバッグで追うことができない
    -> fakeworker.js evalとsetTimerによるweb worker の実装
    
    メッセージングのコードはすぐ複雑になる。
    複数のメッセージをやりとりすると長大なswitch-caseなどになりがち
    -> alexService 
    
    ライブラリ作ったから試してみて。
    
  HTML5(open web platform) 時代のwebアプリアーキテクチャ
  
  理想的なオフラインwebアプリを実現するには大幅に変更する必要がある
  
  オフラインで動作する必要がある
  クライアント内で処理が完結する必要がある
  処理結果の
  
  いままでは
  サーバに処理が集中
  
  これからは
  ローカルDBとデータを読み書き
  任意のタイミングでローカルDBとの差分をDL/UL
  ロジックの大半はローカルに存在する。処理が重くなるのでWorkerを使用。
  
  これらをopen web architecture(仮)ととりあえず呼ぶ
  
  利点
  オフラインでも完全に動作
  高速でリソース消費量も少ない
  ユーザ、もしくはプログラムにより差分UL/DLのタイミングを制御可能
  スマートフォンモバイル向け
  
  オフラインでのweb利用
  あらゆるデスクトップアプリをWebベースに
  ARアプリなどでも応用
  センサーやGPSから得たデータを素早く、記録し、後にアップロード
  サーバからまとめてデータを得てキャッシュしておいてカメラ画像に重ねて表示
  
  問題点
  世界的にみてノウハウの蓄積が少なすぎる
    スクラッチから設計・実装するのは非常に困難
      DBサーバだけでなくクライアントにも持つ事が前提となる設計手法
      差分UL/DL処理の設計と実装(高速かつフェールセーフに)
      クライアントの状態に応じた処理の切り替え
      データ変更が衝突したら
 
  解決策
   初公開
   Alexing Framework      
    
    作成中のオープンソースフレームワーク「Alexing」(仮称)
    
    クラウド向けRESTfulライブラリ+HTML5 O/Rマッパ
    ここでのO/Rとは Object/Relational Object/RESTの双方を表わす

Canvasチュートリアル

講師:羽田野 太巴さん

資料がここで公開されています。

http://www.html5.jp/blog/2009/10/04/html5-3days-tech-talk/

Canvas 
  Webページに図を描く
  canvas要素にAPIが用意されている
  JavaScriptからAPIを通して図を描く

Canvas SVGの比較
Canvas
  JavaScriptを使って描画
  描いてしまった図を個別に認識できない (円とか?)
  描画そのものは高速
  ピクセル操作が可能
SVG
  XMLマークアップで図を表現
  JavaScriptから各要素にアクセス可能
  要素が多すぎると重い
  ピクセル操作はできない
  
Canvas は個々のピクセルを扱う描画を得意とするだろう。
ウィジットは向いていないだろう
Canvasの枠組みだけでは、ボタンなどを認識できない
コントロール部分をHTMLで実現するか、ウィジット全体をSVGで描画した方が良い。

ブラウザの実装状況
  IE以外は実装済IE は ExplorerCanvas excanvas.js があるよ
  
マークアップHTML5にするべき?
XHTML1.0 HTML4.01でも動作する
  doctypeがなんであれ、Canvasをサポートしたブラウザであれば動作する
  でも、HTML5以外のマークアップCanvasを用いたら非準拠になるね
 
canvas要素
<canvas id="sample" width="140" height="140"></canvas>

canvasの描画の前にcanvas要素のコンテキストを取得する。
コンテキストに定義されているメソッドやプロパティを通して実現する。

var canvas = document.getElementById('sample')
(この部分のコードをメモできなかった)

パス
ctx.beginPath();
ctx.moveTo(20,20);

ctx.closePath();
ctx.stroke();

座標系は、左上端が0,0で、右下に向って数字が大きくなっていく。

ここから先は、このメソッドでこんなのが描けるよ、といった話が続いた。Macbook の電池が切れちゃったので、ここでメモはおわり。

勉強会というものに参加することもはじめてだったのでどきどきしましたが、とてもよい時間を過ごすことができました。これからは他の勉強会にも積極的に参加してみたいなと思いました。

2009/08/28

[][]SnowLeopard を入れようと思う 02:00 SnowLeopard を入れようと思うを含むブックマーク SnowLeopard を入れようと思うのブックマークコメント

クリーンインストールするのです。

というわけで今使っているアプリケーションのメモなのです。

Adium - IM クライント

Artwork Gofer - iTunes のアートワークを Amazon から探すソフト

AquaSKK - かな漢字変換システム

CamTwist - 仮想カメラデバイスを作るソフト。

CyberDuck - FTP クライアント

FireFox3.5 - Web ブラウザ / MacOSX 向けに最適化されたものを使っています。http://fox.lazycat.info/

GIMP - 画像レタッチソフト

Growl - 汎用通知ソフト

HappyLHA - LHA 形式の圧縮ファイル解凍ソフト

Inkscape - お絵描きソフト

iScrobbler - Last.fm に今聴いている曲の情報を送信するソフト

LimeChat for OSX - IRC クライアント

MacPorts - UNIX 向けオープンソースプログラムのパッケージ管理ソフト

MikuInstaller - Windows 向けのアプリケーションを動かすソフト

OpenInTextMate - Finder で 開いている/選択している ディレクトリをTextMateで開くためのアプリケーション(apple script)

OpenInTerminalHere - Finder で 開いている/選択している ディレクトリを Terminal.app で開くためのアプリケーション(apple script)

Porticus - MacPorts を GUI で操作するためのソフト。

Quicksilver - 高機能ランチャー+α これがないとはじまらない

Reader Notifier - Google Reader の内容をメニューバーから見ることができるソフト

Skype - チャットソフト

Smultron - テキストエディタ

TextMate - コードエディタ

The Unarchiver - 各種圧縮ファイル解凍ソフト

Transmission - BitTorrent クライアント

VLC - メディアプレイヤー

YoruFukurou - Twitter クライアント

2009/04/22

[][]RubyGems のパッケージを作ってみた & 自前の gem サーバを建ててみた 01:00 RubyGems のパッケージを作ってみた & 自前の gem サーバを建ててみたを含むブックマーク RubyGems のパッケージを作ってみた & 自前の gem サーバを建ててみたのブックマークコメント

RubyGems のパッケージを作り、そのパッケージをインストールするための gem サーバを用意する。

作成した gem を一般に公開するなら、 RubyForgeアップロードすればよいのだろう。

しかし、今回作成するパッケージのプログラムは、限られた利用者だけに公開したいプログラムなので、自前の Web サーバgem ファイルを設置し、 gem サーバとして機能するように設定した。

サーバRubyGems のバージョンは 1.2.0 である。*1

gem の作成

gem を作成するために、パッケージにするプログラムの情報を記述した gemspec ファイルを用意する。

以下のサイトを参考に gemspec ファイルを作成した。

Rubyist Magazine - シリーズ パッケージマネジメント 【第 2 回】 RubyGems (2)

Gem::Specification Reference | RubyGems Manuals

パッケージの作成にあたり、プログラムのファイル配置を調整する必要があった。

参考サイトや、他のパッケージのファイル構成を参考に、bin, lib ディレクトリを作成して、適切な場所にファイルを配置した。

gemspec ファイルが作成できたら、gem build コマンドを用いて gem を作成する。

xxx はパッケージ名である。

gem build xxx.gemspec

うまくいけば、パッケージ名に gemspec で指定したバージョン番号がついた名前の gem ファイルができる。

gem ができたら、うまくインストールできるか試してみる。

gem install xxx.-x.y.gem --test

もし、インストールがうまくいかなかったり、テストに失敗するようならば、コードや gemspec ファイルを修正する。

インストールが成功したら以下のコマンドを実行して、 webrick を用いた RubyGems サーバを立ち上げて、 RDoc ドキュメントも正しく生成されているか確認してみよう。

gem server

ブラウザhttp://localhost:8808/アクセスすれば、RDoc ドキュメントを見ることができる。

gem の設置と公開用の設定

gem ができたら、 Web サーバgem ファイルを設置して、そこから gem パッケージをインストールできるようにする。

gem ファイルを設置するディレクトリに対し、 Web サーバ側で認証の設定をすることで、パッケージの公開範囲を制限することができる。

今回は以下の URL でリモートレポジトリを公開するとする。

http://yourserver/gemserver/

Web サーバの gemserver ディレクトリに gems ディレクトリを作成し、その中に gem ファイルを置く。

gem ファイルを置いたら、以下のコマンドを実行してインデックスを生成する。

gem generate_index -d <gemserver ディレクトリのパス>

その後、Web サーバ側で gemserver ディレクトリ以下にアクセス制限の設定を行った。

クライアント側からインストールできるか試してみる。

gem install xxx --source http://yourserver/gemserver/

これで、自前の gem サーバができた。

公開してよし。こっそり使ってよし。

作成した gem が他の gem を必要とするときは、依存している gem ファイルを自分の gem サーバに置いておくとよい。

または、インストール時に --remote オプションを付けることで、パッケージが見つからない時に標準のリモートレポジトリへ探しにいってくれるようだ。*2

他の gem サーバにある gem ファイルは以下のコマンドで取得できる。

gem fetch パッケージ名

*1:より新しいバージョンの RubyGems が出ている。

*2RubyGems の使い方 - WebOS Goodies