トップ 最新 追記

Route 477



2009-05-01

[ruby] Diamondback Ruby = Ruby+型チェック

省略形はDRubyだそうな。おいおい、dRuby(drb)と思いっきり被ってるんだが…'D'だからいいってことかいな。

それはそれとして、進化の方向性としては正しいと思う。

存在しないメソッド呼び出しの静的検出とか、コメント行による型指定とかができるみたい。


2009-05-04

[ruby] Rubyの本リスト

るびまに「これまでに出たRuby本」みたいな常設記事があってもいいのかも

[[ruby][idea] Re: Rubyist Magazine - Ruby の歩き方 - Greenbear Diary (2009-02-10)より引用]

という話を昔書きましたが(忘れてないよ!)、そういうリストを作っておられる方を見つけてしまった。

単にこのリストにリンクするのでも役立ちそうですね。

[esobook] 奇妙な言語本のレビューをいただきました

久しぶりにamazonを見たら、レビューが一件増えていた。

Ruby初心者にオススメします, 2009/3/28

[Amazon.co.jp: Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~: 原 悠: 本より引用]

「ネタだよね?」と言われることもあるけど、「Ruby初心者の2冊目の本におすすめ」というフレーズはわりと本気のつもりで 書いてた。なので、そういう方向で役立てていただいてとても嬉しいです。

ところで、実はいま献本用の在庫が2冊余ってるんだけど、どうしようかなぁ。1冊はるびまのプレゼントに出すとして*1、もう一冊。

  1. 応募者の中から抽選でプレゼント。
  2. 応募者の中で一番実年齢が若い人にプレゼント(以前twitterで「金がなくて買えない」という人が居た気がするので)。
  3. 「俺の考えた言語」コンテストを開き、人気投票一位の人にプレゼント。

どれがいいでしょう?

4839927847

*1 プレゼント企画があればだけど

本日のツッコミ(全1件) [ツッコミを入れる]

okkez [SSB の Ruby タグもなかなか。 http://stack.nayutaya.jp/tag/ruby]


2009-05-06

[web] CSSを「ちゃんと」書けるようになりたい

僕のCSS知識はとほほのスタイルシート入門で止まっている。 borderとかcolorとかは分かる。(positionとかfloatとかはちょっと怪しい。)

ちゃんと書ける、というのは、

  • marginやpaddingはとりあえず0にするものなのか
  • 文字のサイズはem, px, pt, %のどれで指定すべきなのか
  • divを3カラムに並べる方法
  • ブラウザの非互換を踏まないために気をつけること

とかいう「常識」を身につけたい、ということだ。

なんかお薦めの本とかサイトとかありませんかね。

追記

コメント欄とかブックマークコメントで いろいろアドバイスをいただきました。ありがとうございます。

muscovyduckさん:

id:K-Onoさん: 4774136840 4839929734

とりあえずホップ本とCSSNite本買っとけばいいんじゃないか。

id:Layzieさん: 4798010928

うーん…。取りあえず、コーダーの人のブログを読むとかかなあ。俺は「Web標準の教科書」で基本を覚えた気がするけど。

id:rh-kimataさん: 4774127833 4774136840

 W3Cの仕様書、といいたいところだけど通読するのは大変なので、"セオリー・オブ・スタイルシート (Quick Master of Web Technique)" と "実践 Web Standards Design ~Web標準の基本とCSSレイアウト&Tips~" をお勧めする (両方とも書籍)

id:ks1234_1234(すみけん)さん:

 自著宣伝になるし古いが、ひとまず。http://www.asahi-net.or.jp/~jy3k-sm/css1/2003maki/index.html ▼自分はBODYに絶対値を指定して、あとは相対値がいいと1998年に書いたが、プロ制作現場はどうなさってるんでしょね

Yuguiさんからも一票。

okkezさん: 4839918066 4839918074

id:Layzieさん:

リンク元から:

本日のツッコミ(全6件) [ツッコミを入れる]

Before...

okkez [http://stack.nayutaya.jp/author/247 この二冊が手を動かして覚えるには良かった。 ..]

Layzie [エントリ書いてみました。よければ参考にしてください。 http://d.hatena.ne.jp/Layzie/20..]

yhara [本文に追記しました。ありがとうございます!>皆様]


2009-05-11

[sinatra] MOONGIFTさんに取り上げられました

いろんなOSS/フリーウェアを紹介されているMOONGIFTさんにて、Sinatraの話題が。

SinatBBSだなんて、思いっきり名前被ってるなーと思ったら、gihyo.jpの記事のために 作ったやつだった(笑)。(まさかこんな形で載ることになるとは…)


掲示板を選んだのはコードがシンプルというのもあるけれど、 実はRuby-KENT構想というのを考えていて、KENT WEBのCGIを Sinatraで再実装したら面白いんじゃないかなと思っていたのだった。

んで、実際にCGIに乗せてみたらエラーでうまく動かせなかったので、記事には書かなかったんだけど、 最近直ったみたいだし(?) もう一度トライしてみようかな。


gihyo.jpの方は、Ramazeの紹介がアップロードされました。 Sinatraと同じくシンプルなフレームワークですが、よりRubyらしさを大事にする感じなので、Sinatraはラジカルすぎるわという方も ぜひ触ってみてほしいところです。


2009-05-12

[ramaze] Ramazeの読みは「ラマゼ」で合ってるのか

manveruさんは「らめぃず」と発音してたよ? >Ramaze(「ラマゼ」と読みます)

[はてなブックマーク - Ruby Freaks Lounge:第11回 自由なWebフレームワーク,Ramaze|gihyo.jp … 技術評論社より引用]

一応、

  • リニューアル前のramaze.netで、左上のロゴに片仮名で「ラマゼ」と書かれてたのと、
  • インタビュー

it’s called Ramaze (pronounced ra-ma-ze, Japanese style, even if the name comes from Ruby-Amaze).

[Ramaze: a Ruby framework that will amaze | Zen and the Art of Programmingより引用]

という記述から「ラマゼ」説を採用しました。

でもmanveruさん自身はそう読んでないのか…w 「Ruby + Amaze」が名前の由来だそうなので、作者にとっては自然にそう読めてしまうのかも知れないですね。

[css] 960 Grid Systemについて調べてみた

画像の説明

CSSフレームワークの一つである、960 Grid Systemについて調べてみた。

960 Grid Systemでは、その名の通り横幅960pxの空間を12(もしくは16)に区切って、その中にdivを配置していく。 この960pxという数値は、

  • 最近のマシンなら横1024pxはあるよね
  • 960はいろんな数値(2, 3, 4, 5, 6, 8, ...)で割り切れる

というところから決められたみたい。

とりあえずデモを見てもらえればどんなものかは分かると思う。

解析

ソース を見てみる。12カラムと16カラムの指定があるけど、ここでは12カラムの方だけ見る。

.container_12 {
  margin-left: auto;
  margin-right: auto;
  width: 960px;
}

まず.container_12というスタイルがあり、全体をこれで囲むことになる。これの幅が960pxになっている。

次に、実際に配置されるgrid unitのスタイルの定義がある。

.grid_1 ... .grid_12{
  display: inline;
  float: left;
  margin-left: 10px;
  margin-right: 10px;
}
.container_12 .grid_1 {  width: 60px;}
...
.container_12 .grid_12 {  width: 940px;}

.container_12 .prefix_1 {padding-left: 80px;}
...
.container_12 .prefix_11 {padding-left: 880px;}

.container_12 .suffix_1 {  padding-right: 80px;}
...
.container_12 .suffix_11 {padding-right: 880px;}

要するに、grid unitのために

  • divの幅を規定するスタイル(.grid_n, nはカラム数)
  • divの左端を規定するスタイル(.prefix_n, nは左側にあるカラムの数)
  • divの右端を規定するスタイル(.suffix_n, nは右側にあるカラムの数)

があって、これを使って好きな位置に並べてねということらしい。

基本的に.grid_*だけを使えば良くて、例えば横に3つgrid unitを並べるなら、.grid_4, .grid_4, .grid_4とすればいい(12カラムの場合)。 空間を空けたいときに.prefix_*や.suffix_*を使うらしい。

縦方向のサポートは特になくて、.clearというスタイルを使って「次の段」に進むだけ。.clearはこんなの。

/* http://sonspring.com/journal/clearing-floats */

.clear {
  clear: both;
  display: block;
  overflow: hidden;
  visibility: hidden;
  width: 0;
  height: 0;
}

最後に.alphaと.omegaというスタイルがあって、これはgrid unitの中に別のgrid unitを入れたいときに使う。

.alpha {
  margin-left: 0;
}
.omega {
  margin-right: 0;
}

感想

当然だけど、CSSフレームワークは単なる道具であって、格好いいサイトを作るにはそれなりのデザインセンスが必要だということが分かった (現実は非情である)。新聞紙みたいな複雑なレイアウトが簡単にできるだけでも楽しいけどね。

公式からリンクされてるチュートリアル でも、「CSSフレームワークは全てを解決するわけじゃない」「960 Grid Systemでプロトタイプをさくっと作り、それを育てていこう」 みたいに書かれてますね。

あと http://960.gs というドメイン名がいいね。

[git] Githubでのgem公開は、masterからしかできない

Gems will only be built when the gemspec version is bumped on the master branch.

[GitHub RubyGemsより引用]

ということはですね、master(という名前のブランチ)はリリースブランチとして使わないといけないってことだよね。

masterを開発版のHEADとして使ってると、「既存のリリースにバグがあったので再リリースしたい」っていう時に困る。

-o-o-o-o-o-o master
 |
 o-o v1.0.0
   |
   o-o v1.0.1 #このブランチのgemspecをpushしても、gemはビルドされない(´・ω・`)

みんなこの辺どうしてるんだろうなぁ。

(5/27追記:default branchに設定したブランチからgemリリースできるようになった !))

[ruby] Ruby Tab Sweep (2)

1.8/1.9共用のgemを作る方法

Nokogiri作者のアーロンさんより。

NokogiriのWindows版バイナリが入ったgemを作ってるんだが、1.8と1.9の両方に対応する簡単な方法はないか?という話。

提案されている方法は、1.8用/1.9用両方の*.soが入ったでかいgemを作って、実行時にRUBY_VERSIONを見てロードする.soを決める、という感じ。

Sinatraの子供たち

Sinatraの最大の発明は「アプリ書くのに、クラス定義とか要らないよね」っていうやつだ。

ネームスペースの衝突を避けるためのgem、Akidoka

Akidoka…。何語なんだ。

2.0が出た暁にはこういうのも要らなくなるのかな。

CSSメタフレームワーク、Compass

よく分からんが、

  • Blueprintや960 Grid SystemといったCSSフレームワークを、Rubyから便利に使うためのもの
  • Sassを利用している
  • Rails/Merb/Sinatra/Merb/Webby/Staticmaticに対応

…というとこまで分かった。「SassからBlueprint等を使うためのプラグイン」みたいに思っとけばいいのかなぁ。

JSでmp3を再生するためのjQueryプラグイン、jPlayer

ダウンロードするとswfファイルが1つと、jQueryプラグイン(.js)が1つ入っている。簡単でいいね。(しまった、Ruby関係ない)


2009-05-13

[git] githubでは「あるファイルの最新版」にリンクすることができない?

例えばRamazeの、lib/ramaze/helper.rbというファイルのURLは

のようになっていて、これはファイルに変更があると「最新版」のURLではなくなってしまう。

github上で「あるファイルの最新版」にリンクする方法はないのかなぁ。

本日のツッコミ(全3件) [ツッコミを入れる]

もろはし [http://github.com/manveru/ramaze/blob/master/lib/ramaze/he..]

Constellation [http://github.com/manveru/ramaze/raw/master/lib/ramaze/hel..]

yhara [もろはしさん、Constellationさん: おお、できてますね。ありがとうございます!]


2009-05-18

[ruby] Tab Sweep

MITがSICPをやめた件について、ワドラー先生のコメント

「ライブラリが重要なのもわかるけど、組み立て方の基礎が不要になったわけじゃないだろ」

github公式(?)gemspecメーカー

俺はrtask + 手書きでやってるけど。

もう一つ。githubのgemがビルドされたかどうかを監視するものらしい。忙しいあなたに。

プログラミング言語Nu

「Macのための、Lisp風文法+Ruby風意味論の言語」らしい。謎すぎる。 コード例

_why先生プレゼンツ、Rubyでファミコンぽい音を鳴らすためのライブラリ

portaudioというライブラリに依存しています。

例はREADMEに載ってるけど、もう一つ:

require 'bloops'

b = Bloops.new
b.tempo = 140

s1 = b.sound Bloops::SQUARE
s1.punch = 0.5
s1.sustain = 0.9

b.tune s1, "16:c6 16:b5 16:a 16:g 16:b 16:a 16:g 16:f 16:a 16:g 16:f 16:e 16:c 16:d 16:e 16:g 1:c6 "
b.tune s1, "8 16:c6 16:b5 16:a 16:g 16:b 16:a 16:g 16:f 16:g 16:f 16:e 16:d 16:c 16:d 1:e "
b.tune s1, "8 16 16:c6 16:b5 16:a 16:g 16:f 16:a 16:g 16:f 16:e 16:f 16:e 16:d 16:c 1:g "

b.play
sleep 1 while !b.stopped?

見ただけで何のテーマ曲か分かった人は、PC-98ユーザだったはず(笑)。

Rack環境でruby-debugを使うためのミドルウェア

ruby-debugの呼び出しをRackのミドルウェアとして実現したもののよう。

Rackを使ってるフレームワークならどれでも使える、ということなのかな。こうやって RubyのWebフレームワーク汎用のライブラリが増えるのは良いですね。

今年のRubyConfは11/19-11/21

行きたい。


2009-05-22

[ruby][git] gemspecの作り方がわからない?ならばjewelerだ

githubなりrubyforgeなりでgemを公開するときに必要となるのがgemspecファイルですけれども、 これは手書きするのははっきりいってめんどい。それをなんとかしてくれるgithubおすすめの ツールができたらしい。

その名もjeweler。

使い方は上のページに書いてあるけど、Rakefileに

begin
  require 'jeweler'
  Jeweler::Tasks.new do |gemspec|
    gemspec.name = "the-perfect-gem"
    gemspec.summary = "TODO"
    gemspec.email = "josh@technicalpickles.com"
    gemspec.homepage = "http://github.com/technicalpickles/the-perfect-gem"
    gemspec.description = "TODO"
    gemspec.authors = ["Josh Nichols"]
  end
rescue LoadError
  puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
end

みたいに追記するだけ。そうしたら、

$ rake version:write
$ rake version_required

でVERSIONファイルを初期化する。(あ、人によってはこのへんの作業が必要になるかも)

あとは、

$ rake gemspec

でgemspecファイルができて、

$ rake build

でpkg/以下にgemがビルドされる。さらには

$ rake release

というコマンドがあって、これはgemspecを作り、タグを切って、githubにpushまでしてくれる。楽ちんですね。

バージョン番号を上げるときは

$ rake version:bump:major
$ rake version:bump:minor
$ rake version:bump:patch

のいずれかを使う。

gemspecの内容のいじり方はWiki参照

(追記:githubで公開するときは、リポジトリの設定で「RubyGem」を有効にするのを忘れずに^^; gemstalkerを入れておくと、 $ gemstalk yhara lifelog とかでgithubでgemが公開されたときに教えてくれるようだ。)


2009-05-26

[ramaze] Ramazeの解説記事を書きました

公開されましたね。

今回はこんな↓サンプルアプリです。HTML入れて120行です。

TH400_ramaze-wordsfile.jpg

ramaze-usersも最近また更新してるのでよろしくお願いします。 「ここさえ見ればアプリが書けるサイト」が目標です。

まあそんなわけで、Sinatra概要Sinatra実践Ramaze概要Ramaze実践と続いた連載もこれで無事終わりました。良かった良かった。

[softs] ブラウザのタブの話とか

ブラウザのタブってそんな、数十も開くのが一般的なんでしょうか?

[ブラウザのタブ - ema log (2008-02-03)より引用]

一般的かは分かりませんが、いまこの瞬間はOperaのウィンドウが3つあって、それぞれ10以上のタブが開かれてますね。

主な原因は多分「タブをこまめに閉じる癖がつかない」ってことなんですが、 もう一つ「複数の作業を並行しているから」っていうのもあるかも知れません。

タブが10を超えると、1ウィンドウでは確実にカオスになるので、「やっている作業」 ごとにタブを分ける。例えば開発用のウィンドウなら、「開発用」に1つ開くのではなくて、 作業中のプロジェクトに対して1つずつ、ウィンドウを用意する。 どこか旅行に行くなら、それ用のウィンドウを開いて、そこで宿とか地図とかの調査をする。 んでこれらとは別にもう一つ「メイン」のウィンドウがあって、Gmailとかカレンダーとか絶対復習(さりげなく宣伝) とかはそこに置いてあります。「暇ができたときに見るタブ」がメインウィンドウにある感じかな。

とまあ、このようにウィンドウを分ける習慣が付いたおかげで、一時よりははるかにカオス度を抑えることができるようになりました。 が、未だに量が多いのが「LDRから開いたままの『あとで読む』タブ」なんで、とりあえず手近なウィンドウでLDR開く癖を直さないと…。

結論としては、タブの量に大きな差を与えているのは、一点集中型の性格なのか、複数並行型の性格なのかという違いではないかと思う所存です。


蛇足。本質的には、「タブを閉じる」っていう操作が不要だと思っています。 それくらい機械で勝手に判断すべき。 長いこと開きっぱなしで見てないタブとか、 多分必要ないんだから、自動的に閉じてくれればいい気がする(「自動的に閉じた」という情報が残っていればいい)。

本日のツッコミ(全3件) [ツッコミを入れる]

ku-ma-me [連載お疲れさまでしたー。ramaze-users 期待してます。 タブもだけど、油断するとターミナルエミュレータも数..]

yhara [ありがとうございます。 screenは、10を超えると数字キーで移動できないので、一桁に抑えてますね。 閉じるとカ..]

ramaze数寄者 [Ramazeの紹介記事を拝見しました。あまり、情報がないので大変たすかりました。 「Ramazeは第7回で紹介した..]


2009-05-27

[prog][memo] 最近、新しいプログラミング言語のニュースが多くないか

もう一個くらいあったような気がするけど忘れた。


2009-05-28

[ruby][memo] Re: コマンドラインのmp3 id3 タグ編集ツール

僕も最近同じようなことをした。

iTunesはCDリッパーとしてはとても優れているのだけど、残念ながらID3タグが付いてないMP3の扱いが壊滅的で、 不用意に昔読み込んだmp3とかを食わせるとひどいことになる(ぜんぶ「不明なアルバム」に突っ込まれる)。

だからディレクトリ構成で管理する方が好きなんだ俺は…という愚痴はおいといて、とりあえず mp3にID3タグを付ける方法を考えなくてはならない。それも、できるだけ手軽に。

Windowsならフリーウェアがいくらでもありそうな気がしたけど、今回はコマンドラインでなんとかできないか調べてみた。 すると、id3v2というツールがあるらしい(sudo port install id3v2)。

んで、なんやかんやあって、こんな感じでファイル名をタグに変換した。ときどき文字化けするのでそれは手作業で。

[softs] SVK終了のお知らせ

Subversionを分散型VCSとして使うためのソフト、SVKの新規開発終了のアナウンスがあったようだ。 少なくともあと1年半は、Subversionの最新版に追随はするけど、新機能とか性能改善とかはもう入れないそうな。

作り始めた当時(2003)はバックエンドにSubversionを利用するのは良い選択肢だったけど、 最近は限界を感じることもあったようだ(複雑なマージとか)。

ともあれ、CVS/SVNの世界と、(思ったより早く広まった)分散型VCSの世界の間を、 SVKはいい感じに橋渡しできたんじゃないかな、とのことで、 cvs→svn→svk→hg→gitと以降してきた僕もこれは完全に同意するところ。

お疲れさまでした。

via http://shyouhei.tumblr.com/post/114349647/first-things-first-to-answer-the-subject-of-this


2009-05-29

[ruby][games] DXRubyすげー

DXRubyという、RubyからDirectXを使ってゲーム作るためのライブラリを作られているのですが。

20090528110656.jpg

30fpsで9600個…だと…!?

(5/29追記:12500個!)

Ruby/SDLがどれくらいか忘れたけど、こんなには出せなかったような。

ところで

マップ描画をRuby1.9.1で動かすと結構速い。

まあ、Exerbが出ないことにはいかんともし難いのも事実で、Ruby1.9系は動向を見つつも、まだしばらくは様子見ということになるだろう。

[Ruby191の速さ - mirichiの日記より引用]

Exerbって1.9は未対応でしたっけ。

最近出たocraっていうアプリを使うとRubyスクリプトを Windows用の自己解凍ファイルにできるらしいですが。(まだ試してない) 1.9も対応済みらしい。まあインタプリタごと圧縮する方式だからできるか。


蛇足だけど、Rubyゲーム界の問題は、みんな(俺を含め)フレームワークを作るのに忙しくて、ゲーム本体を作る人が足らないことだと 思います。フレームワーク作るのが楽しすぎるのがいかんのだ(フレームワークを作るのは、箱庭というか、世界をひとつ作ることだから、 たぶん言語設計に近い。言語>フレームワーク>ライブラリの順でこの要素が大きい。って前書いたことがあるな)。

本日のツッコミ(全5件) [ツッコミを入れる]

Before...

yhara [「ディスク容量が潤沢なんだから、インタプリタごと配布すればいいじゃん」ってことでしょうか?]

Yuya [いらない子は言い過ぎか。:-) インポートテーブルを書き換えるなどの小手先を使うと、どうしても互換性に問題があるの..]

arton [> そもそもRubyGemsがまともに動作しないのが致命的 まあ、そうかな。というか、requireのところも引っか..]