2009-05-01
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、もう一冊。
- 応募者の中から抽選でプレゼント。
- 応募者の中で一番実年齢が若い人にプレゼント(以前twitterで「金がなくて買えない」という人が居た気がするので)。
- 「俺の考えた言語」コンテストを開き、人気投票一位の人にプレゼント。
どれがいいでしょう?
4839927847
*1 プレゼント企画があればだけど
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さん:
リンク元から:
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の最大の発明は「アプリ書くのに、クラス定義とか要らないよね」っていうやつだ。
- Twibot: A Ruby Microframework for Building Twitter Bots
- DSLでTwitter bot。
- Building OAuth Compliant Twitter Related Apps in Ruby (with Rails or Sinatra)
- DSLでTwitter + OAuth。
- Sinatra for IRC // RailsTips by John Nunemaker
- DSLでIRC bot。
ネームスペースの衝突を避けるための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
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行です。
ramaze-usersも最近また更新してるのでよろしくお願いします。 「ここさえ見ればアプリが書けるサイト」が目標です。
まあそんなわけで、Sinatra概要・ Sinatra実践・ Ramaze概要・ Ramaze実践と続いた連載もこれで無事終わりました。良かった良かった。
■ [softs] ブラウザのタブの話とか
ブラウザのタブってそんな、数十も開くのが一般的なんでしょうか?
[ブラウザのタブ - ema log (2008-02-03)より引用]
一般的かは分かりませんが、いまこの瞬間はOperaのウィンドウが3つあって、それぞれ10以上のタブが開かれてますね。
主な原因は多分「タブをこまめに閉じる癖がつかない」ってことなんですが、 もう一つ「複数の作業を並行しているから」っていうのもあるかも知れません。
タブが10を超えると、1ウィンドウでは確実にカオスになるので、「やっている作業」 ごとにタブを分ける。例えば開発用のウィンドウなら、「開発用」に1つ開くのではなくて、 作業中のプロジェクトに対して1つずつ、ウィンドウを用意する。 どこか旅行に行くなら、それ用のウィンドウを開いて、そこで宿とか地図とかの調査をする。 んでこれらとは別にもう一つ「メイン」のウィンドウがあって、Gmailとかカレンダーとか絶対復習(さりげなく宣伝) とかはそこに置いてあります。「暇ができたときに見るタブ」がメインウィンドウにある感じかな。
とまあ、このようにウィンドウを分ける習慣が付いたおかげで、一時よりははるかにカオス度を抑えることができるようになりました。 が、未だに量が多いのが「LDRから開いたままの『あとで読む』タブ」なんで、とりあえず手近なウィンドウでLDR開く癖を直さないと…。
結論としては、タブの量に大きな差を与えているのは、一点集中型の性格なのか、複数並行型の性格なのかという違いではないかと思う所存です。
蛇足。本質的には、「タブを閉じる」っていう操作が不要だと思っています。 それくらい機械で勝手に判断すべき。 長いこと開きっぱなしで見てないタブとか、 多分必要ないんだから、自動的に閉じてくれればいい気がする(「自動的に閉じた」という情報が残っていればいい)。
2009-05-27
■ [prog][memo] 最近、新しいプログラミング言語のニュースが多くないか
- why's potion at master - GitHub
- PLOT: Table of Contents
- Circa home
- Programming Nu
- Nimrod Programming Language
もう一個くらいあったような気がするけど忘れた。
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を使ってゲーム作るためのライブラリを作られているのですが。
30fpsで9600個…だと…!?
(5/29追記:12500個!)
Ruby/SDLがどれくらいか忘れたけど、こんなには出せなかったような。
ところで
マップ描画をRuby1.9.1で動かすと結構速い。
まあ、Exerbが出ないことにはいかんともし難いのも事実で、Ruby1.9系は動向を見つつも、まだしばらくは様子見ということになるだろう。
[Ruby191の速さ - mirichiの日記より引用]
Exerbって1.9は未対応でしたっけ。最近出たocraっていうアプリを使うとRubyスクリプトを Windows用の自己解凍ファイルにできるらしいですが。(まだ試してない) 1.9も対応済みらしい。まあインタプリタごと圧縮する方式だからできるか。
蛇足だけど、Rubyゲーム界の問題は、みんな(俺を含め)フレームワークを作るのに忙しくて、ゲーム本体を作る人が足らないことだと 思います。フレームワーク作るのが楽しすぎるのがいかんのだ(フレームワークを作るのは、箱庭というか、世界をひとつ作ることだから、 たぶん言語設計に近い。言語>フレームワーク>ライブラリの順でこの要素が大きい。って前書いたことがあるな)。
□ okkez [SSB の Ruby タグもなかなか。 http://stack.nayutaya.jp/tag/ruby]