カテゴリ別 2003年 | 2004年 | 2005年 | 2006年 | 2007年 | 2008年
知り合いサイト: よんだもの / 暴想 / Linuxでやる夫 / 新宿Vipper / 僕だけが幸せになればいいのに。
JRuby の開発者 Charles Nutter のブログ Headiusより
JRuby で ActiveRecord のユニットテストがすべて通るようになったとのこと(ただし、データベースに MySQL 使用時)。rails のフルサポートもそう先のことではないかも知れません。
パフォーマンスもよくなっていて、ベンチマークによっては CRuby よりも早いこともあるそう。へぇ。
rails 製のブログソフトでは typo が有名ですが、Mephisto も割と使われているのを見ます。
Mephisto Theme Gallery は Mephisto 用のテーマギャラリーです。34 種類。Mephisto に限ったことではありませんが、英語で見るとシンプルで良いと思ったデザインでも日本語が並ぶとバランスが良くなかったりして悩ましいですね。
なお、Mephisto は最近は開発があまり活発ではありませんでしたが、また動き始めたようです。
Riding Rails: Rails 1.2 Performance 経由
railsbench を使った Rails 1.1 と 1.2 のパフォーマンス比較です。1.2 の方が多少パフォーマンスが良くないようです。GC にパッチをあててヒープサイズを増やしてベンチマークをとっているようですね。action cached page が取り分け遅いといってますが、ベンチはそれでとっているのかな。
結論として、
ということでここにも YARV カーゴが……
Datetime Toolbocks は、Javascript による賢い日付入力フォームです。「2007-04-02」「today」「next friday」といった様々な記述方法で日付を入力できます。Remember The Milk の日付入力などもそうですね。
Remember The Milk は日本語に対応していますが、Datetime Toolbocks は残念ながら未対応です。日本語→英語置換の処理を最初に挟んでやれば日本語での入力もできそうな気がします。
なお、rails 用のプラグインも用意されています。
また、Rails で使えるカレンダー付きの日付入力フォームにはRails Date Kit などもあります。
REST API のクライアントを書こうとして気付いたのですが、もしや Net::HTTP を直接使う以外に手段がないのかな。open-uri は GET メソッドのみですし。
open-uri を GET メソッド以外に対応させるパッチを提案している人がいますね。[#6321] Make open-uri capable of handling HTTP methods other than GET とりあえずこれを使ってみるかな。
追記。今回の使い方ではこのパッチで十分事足りました。open-uri 本体にマージされないかな。
最近の言語戦争。
Artima や DZone といった Java 中心の技術コミュニティサイトで Ruby セクションが新設されたり、JRuby の開発者が Sun に雇用されたり、Netbeans の Ruby プラグインが開発されたりと Java コミュニティで Ruby が注目されているけど、Java 文化には Python の方が合っているんじゃないという投稿です。投稿の筆者の方は理由として、1. 読みやすさと明示性、 2. 成熟、3. 活気のあるコミュニティ、4. ライブラリ を挙げています。
2 3 4 からすると Perl の方がいいのではと思ったりもしますね。個人的には、軽量言語の流行や Java を補完するものとしてスクリプト言語が求められたといった背景と Rails による Ruby の興隆の時期が重なったというタイミングの影響が大きいのではと思います。
オープンソースのワークフローエンジンの Ruby 版なので OpenWFEru。サイトのロゴが「OPENWFE-る」になっていたりして面白いです。ワークフローを定義するソフトウェアとのこと。
quickstart では例として
というワークフローを記述しています。
どういう用途に使うソフトウェアなのかよく分からないので検索してみたところ、ワークフローエンジン - OpenWFE 1.6.2公開 | エンタープライズ | マイコミジャーナル という記事がありました。
OpenWFE 1.6.2のようなワークフローエンジンやビジネスプロセス統合管理ツールは、この業務フローをフレームワークをベースに作成し、業務フローの変更に対して強いシステムを作成する上で重要。最近ではビジネスプロセスをどのように表現するかがキーテクノロジのひとつになりつつある。
なるほど。ワークフローをこれで記述して、人手がいるところは例えば Amazon Mechanical Turkで外だしすれば、「業務を実行」できるようになったりするのかなと勝手に妄想してましたが違いました。
業務フローをモデル化・記述するためのツールなのですね。Ruby で記述した場合はプログラムなので実行すると業務フローをシミュレートできたりすると。GUI をかぶせてドット絵キャラがちまちま動いたりすると楽しいかも。
Rubyでメソッド名とローカル変数名を見分ける易いコーディング規約について教えてください。
Rubyコーディング規約
http://shugo.net/ruby-codeconv/codeconv.htmlによると、ローカル変数もメソッドも小文字とアンダースコア(_)で書くことになっていますが、これだとパッと見で混乱してしまうことが多いので。
大抵の場合は見分けがつくのでそんなに気にすることではないと思います。どちらか分からないことで混乱するようなクラスやメソッドはリファクタリングしましょう。
レシーバも引数もない場合は見た目上変数と区別がつきづらい可能性があります。ただし、
といえます。2、3、4 番目の補足説明をします。
新しいメソッドの名前にはよく使われているメソッドの名前を選ぶからです。読み書きなら read/write gets/puts、イテレートは each など。メソッドの働きを類推しやすくするためや duck typing のためです。
filename = "/etc/hosts"
dir = File.dirname(filename)
filename
このようなコードがあった場合、変数 filename が単独で書かれている 3 行目は ruby プログラムとして正しいですが意味がありません。 識別子が単独で書かれている場合は、
def parse
do_preprocess
do_parse
do_postprocess
end
のように処理の一部分を抽出したメソッドである可能性が高いでしょう。
page = fetch
Ruby は変数のコピーをしたりはしないので、上記のような例で右側が変数の場合には単に同じオブジェクトに異なる変数名をつけるだけになります。意味がないのでそのような書き方はしないでしょう。
もうここまでで 90% (適当)は区別がつくのではないかと思います。
さらに
とすれば完全に区別がつきますが個人的にはこれらの書き方はしません。記述が冗長だったり、慣習とそぐいません。
さて、上の 3 つを採用しない場合に区別がつかないのは
です。
class Foo
attr_accessor :bar
def foo
bar = 10
hoge = 15
end
end
bar = 10 は self.bar=(10) というメソッド呼び出しに他なりませんが、hoge = 15 は変数への代入です。 クラスが小さければ bar= が setter メソッドだと分かりますが、クラスが大きいと困ることがあるかもしれません。
上のようにアクセサを介して自分のインスタンス変数にアクセスすることを Indirect Variable Access といいます。 インスタンス変数へのアクセスを Direct Variable Access、つまり
class Foo
attr_accessor :bar
def foo
@bar = 10
hoge = 15
end
end
と書くようにすればこの曖昧さは解消できますが、Indirect Variable Access が必要なケースもありますので規約化はできないと思います。
これらは引数がなく括弧もつけず動詞でもないメソッドです。Object#object_id、Object#class、Array#size などが該当します。
私の場合変数だったものをこのようなメソッドに置き換えることが良くあります。例えば
class Score
def initialize
@scores = []
end
def add(score)
@scores << score
end
def print_score
total = @scores.inject(0){|sum, i| sum += i}
puts "your score: #{@scores.join(', ')}"
puts "your total score: #{total}"
end
end
score = Score.new
score.add(0)
score.add(2)
score.add(1)
score.add(3)
score.print_score
#=> your score: 0, 2, 1, 3
#=> your total score: 6
というクラスがあるとします。で、合計点だけ出力したくなってメソッドを追加します。
class Score
def initialize
@scores = []
end
def add(score)
@scores << score
end
def print_score
total = @scores.inject(0){|sum, i| sum += i}
puts "your score: #{@scores.join(', ')}"
puts "your total score: #{total}"
end
def print_total_score
total = @scores.inject(0){|sum, i| sum += i}
puts "total score: #{total}"
end
end
total を求める部分が重複しています。気になるのでメソッドに括りだします。 このとき名前を get_total とでもすればメソッドだと明らかですが、
def print_score
puts "your score: #{@scores.join(', ')}"
puts "your total score: #{get_total}"
end
def print_total_score
total = get_total
puts "total score: #{total}"
end
def get_total
@scores.inject(0){|sum, i| sum += i }
end
のように、リテラルに get_total と埋め込むのはキレイじゃないし、一度 total 変数に代入するのもなんだか無駄な気がします。 どのように書くかといえば、
class Score
def initialize
@scores = []
end
def add(score)
@scores << score
end
def print_score
puts "your score: #{@scores.join(', ')}"
puts "your total score: #{total}"
end
def print_total_score
puts "total score: #{total}"
end
def total
@scores.inject(0){|sum, i| sum += i }
end
end
としています。total が親クラスで定義されてたりすると変数かメソッドか分かりにくくなりますが、 それを区別しやすくするために get_total のような書き方をするよりもクラス構成やメソッドの長さや名前の付け方を良くするほうが はるかに可読性が向上するんじゃないかなと思います。
以下のサイトから Ruby 関係の情報を仕入れています(英語圏)。他にもこれを読んどくといいよというのがあったら教えてください。
ruby-talk はとても追いきれないので読んでません。rubyonrails-talk も ANN だけ流し読みしてます。
追記: 誰かすでに書いているだろうなあと思って検索したらやっぱりありました → CodeZine記事 clean up 非常にすっきりしますね。
CodeZine はニュース記事本文の上にインフォメーション欄なるものがあります。スクロールしない状態のファーストビューで記事本文が表示されないので間違ったページにアクセスしてしまったかと思うわけです。
ということで Greasemonkey スクリプトを適当に書いてみました。他のスクリプトのマネです。
// ==UserScript==
// @name condezinehideinformaitoncolumn
// @namespace http://donstopmusic.no-ip.org/diary/
// @description Hide obstacle information column
// @include http://codezine.jp/a/article/*
// ==/UserScript==
(function() {
function addGlobalStyle(css) {
var head, style;
head = document.getElementsByTagName('head')[0];
if (!head) { return; }
style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = css;
head.appendChild(style);
}
addGlobalStyle(
'.bannerleft { display: none; } '
);
})();
全部描画が終わってから最後にインフォメーション欄が消えるのでしばらく待つことになるけどこれはしょうがないか。
日本 Ruby 会議 2007 への参加には、事前にチケットの購入が必要です。日本 Ruby 会議 2007 のチケットは、ローソンチケットにて 4 月 14 日(土) 午前 10:00 より発売開始します。数に限りがありますので、お早めにお買い求めください。
日本 Ruby 会議 2007 サイトが更新されています。チケット販売の詳細が公開されました。今回も瞬殺が予想されます。
スポンサーページも更新されています。IBM、Sun といった名前が並んでいますね。
日経 BP の ITpro が Ruby 関係の記事を集めた特設サイトを作ったとのこと。日経 BP 技術賞ををとったからですかね。
ActiveRecord はカーソル操作をサポートしていないので、バッチ処理などで大量のレコードに更新をかけるとき、単純に find(:all).each{...} などとするとメモリがなくなって困ったりします。
Faking cursors in ActiveRecord ではそんな用途向けのメソッドとして ActiveRecord::Base.each を定義しています。適当な数で区切ってデータベース検索とオブジェクト化をしているだけなのですが、順に更新するだけの用途なら十分でしょう。なお、検索条件が MySQL 限定みたいです。
gnome libgtop のバインディングライブラリ Ruby/LibGTop2 を RubyForge 上でリリースしました。libgtop を使うとプロセスのメモリ使用量などがわかります。
ドキュメントは付属していませんので、使い方などは以前のリリースのときに作ったページを参照ください。
いまはハッシュで結果を返していますが、いずれ Struct で返すように変更予定です。またLibGTop をクラスじゃなくてモジュールにするかもしれません。ということでインタフェイスがしばらく不安定だと思います。
RubyConrefence の主催などをしている Ruby Central は Google Summer of Code のメンターもしています。今年は 41 のアプリケーションの応募があって、最終的には 14 件が Google に受理されたようです。
テスト、ドキュメント、デバグに関するプロジェクトが多い(5件)のが興味深いです。参加者が学生だからかな。
個人的に気になるのはこのあたり。
カート・ヴォネガットが 4/11 (水) になくなったとのこと。小説家としては 1997 年のタイムクエイクで筆をおいていますので、新しい作品がもう読めないことは分かっていましたが、寂しいものですね。
今年は「LL魂」だそうです。
毎年皆さまにお楽しみいただいておりますLightweight Languageイベントですが、本年は以下の日時、場所、タイトルで開催することが決まりました。
- タイトル: Lightweight Language Spirit (通称: LL魂)
- 日時: 2007年8月4日(土)、おそらく朝から夜まで
- 場所: 日本教育会館 一ツ橋ホール
- 会場URL: http://www.jec.or.jp/
今(13:50) ウェブ予約で調べたところ「予定枚数終了」になってました。10:20 くらいまでは予約可能でしたが、いつくらいに売り切れたのかな。
プログラムのページが公開されました。楽しみです。
1セッションあたりの時間が結構タイトです。いずれ部屋を分けて同時に複数セッションをやるようになるのでしょうね。
Twitter 開発者がインタビューで Twitter は rails を使っているがスケーリングの問題がたびたび発生していると答えています。ActiveRecord が複数データベースに同時に接続できないこと(クラス=テーブル単位で別のデータベースに接続はできますが)、Ruby が遅いことを挙げています。前者についてはすべてをキャッシングし、複数のスレーブデータベースを用意することで対処しているそう。
それに対して DHH が Twitter trouble という記事を書いていますがこれは未読。
関連してRails and Scaling with Multiple Databasesという記事では複数(5つ)の PostgreSQL データベースに接続している例を挙げています。
さらに Dr Nic が Magic Multi-Connections: A “facility in Rails to talk to more than one database at a time” でmagic_multi_connections gem という案を示し、rails-core Possible solution to multiple connections で議論をしています。
マスター・スレーブでのデータベース負荷分散について議論がされていますが、この方法では参照系は分散できても更新系はできませんので、更新が盛んなウェブアプリではいずれ壁にぶつかることになります。LiveJournal や mixi のようにユーザデータを複数のデータベースに分けて格納する方法が現時点での最終解?なわけですが、フレームワークでどこまでサポートすべきなのでしょうかね。
というか RDBMS 以外のデータ永続化手段はないのかな。RDBMS は十分に枯れていてノウハウがあるので RDBMS の機能とウェブアプリのデータ永続化への要件にギャップが多少あっても、そう多くないコストで解消できてしまっているわけですが。
がんばってローソンまでいって引き換えようとしたら、番号にマッチする予約はないと言われました。電話番号を間違えて入力して予約してしまったのかなあ……
dzone経由
Ruby Quirks という記事では Ruby の特徴的(変)だと思ったところ 5 点が挙げられています。確かに他の言語を長らく使っていてから Ruby を使うと勝手が違っていて混乱するところはあるでしょうね。それぞれ紹介してみます。
例えば以下のようなコードではオブジェクトの外からインスタンス変数をセットできます。
class Book
def initialize(title, author)
@title, @author = title, author
end
end
book = Book.new('Lost in a Good Book', 'Jasper Fforde')
book.instance_variable_set(:@price, 2000)
p book
#=> #<Book:0xb7a9f33c @author="Jasper Fforde", @title="Lost in a Good Book", @price=2000>
付け加えますと eval 系メソッドを使ってもカプセル化を破壊できます。また Ruby はオープンクラスなので、Book クラスを上書き再定義できますので、カプセル化どころかクラスも破壊できます。
--- book.rb
class Book
def initialize(title, author)
@title, @author = title, author
end
... いろいろメソッドがあるとします
end
--- book_rev.rb
require "book"
p book = Book.new('The Eyre Affair', 'Jasper Fforde')
#=> #
class Book
def initialize(title, author, price)
@title, @author, @price = title, author, price
end
end
book2 = Book.new('Lost in a Good Book', 'Jasper Fforde')
#=> `initialize': wrong number of arguments (2 for 3) (ArgumentError)
この点については「紳士協定を守ろう」に尽きますね。与えられた力を使うには責任が伴います。
Expressions everywhere は Ruby の文法要素の多くが値を返す式ということです。例えばクラス定義も、
c = class Foo
end
p c
#=> nil
のように値を返します。ところで、この場合クラスが返っても良さそうですが、何で nil なのでしょうかね。
Active Class Definitions はクラス定義も実行されることを指します。alias(これは構文でしたね……) や attr_reader などが活用例で、ActiveRecord の has_one や validate などの DSL 的な書き方もそのひとつです。
class Foo
puts "hello"
end
#=> hello
最後の Everything is an Object はクラスもオブジェクトであるというくらいの意味で言っているようです。実際にはすべてがオブジェクトではありません。メソッドは first-class-object ではありませんし、制御構文をオブジェクトとして扱う術はありません(たぶん)。
多重代入があるので変数の入れ替えに一時変数が要りません。
a = 10, b = 20
としたときに、
tmp = b, b = a; a = tmp
とせずとも、
a, b = b, a
で済みます。でも、Ruby で変数の入れ替えって滅多に使わないですよね。
よく議論になるあれです。下のコードでは、
x = 7
[1,2,3].each do |x|
end
p x #=> 3
ブロック変数の x が外側の変数 x を書き換えます。
Ruby としては、将来的にブロックローカルのスコープを導入することでこの問題に対応しようとしていますが、記法について同意が得られず止まっています。
これはまあリファレンスにあるとおりの仕様ですね。
ここで紹介した記事は他の言語と比べて特徴的な仕様という程度に留まっていますが、Ruby の言語仕様への突っ込みでは Ruby で作る Prolog 処理系 (補講) が結構厳しいところを突いています。
ローソンチケットに問い合わせたところ、はたして登録した電話番号が間違っていました。登録電話番号を教えてもらって昨晩無事チケット入手。ありがとうローソンチケットの中の人。
Softies on Rails というブログが少し前から REST について連載しています。REST を概念(DHH の ActiveResource + 執筆者流の解釈べース)から順に説明しており、結局 REST って何なんだという方も腑に落ちるのでは。英語ですが非常に読みやすい文章です。
Part1 では REST が扱うもの「リソース」とは何かという話、Part2 と Part3 では REST の API デザインの話、Part4 で rails における REST の話となっています。
現在のところ書かれている記事は以下の通りです。
ここはセキュリティについてのブログ。今のところは 10 数記事ですが、この調子で記事が増えていけば、いずれこのブログを見れば rails のセキュリティについては一通り勉強できるようになりそうな感じです。
最近島根県/松江市のニュースリリースを良く見ます。今日も Ruby Cityの松江市が「8年間家賃半額」でIT企業を誘致 島根大学が「オープンソースと地域振興」を開講,Rubyのまつもと氏も登壇しテキストも公開 の二つが。
講義も良いですが、大学では成果を外部と共有できるようなプロジェクトをぜひやってほしいと思います。Google Summer of Code の松江版とか。
名前を連呼しないと票が集まらないというのなら、そんな選挙制度をどうにかしてほしい。ふと疑問に思ったのですが、諸外国でも選挙前には選挙カーが蔓延っているのでしょうか。
Ruby Inside より
パケットを作成、送信して、その中身を見れるシェルアプリだそうです。いまのところウェブアプリのデバグでは Firefox の Live HTTP headers でこと足りていますが、使うことがあるかも。
RubyForge: redMine: Modify: 10274 - Japanese user manual
そのうち取り込まれるかもしれません。ただ、元の英文マニュアルがソフトウェアと同期してアップデートはされていないので、最新の 0.5.0 とは内容が食い違ってたり説明のない機能があったりします。
r459 で trunk にコミットされました。
dzone より。
有名どころのプログラミング言語の産地をマッピングしている Google Map のマイマップです。やはり北米に集中していて、欧州が三つ、日本に一つという状態です。そうメジャーではない言語も含めるとどうなのでしょうね。
ソフトウェア技術者が急増していると思われる中国やインドで今後新しい言語が生まれたりしないかな。
ちょっと前の 4/13 に redMine の新しいバージョンがリリースされました。プロジェクトごとの Wiki、時間のトラッキング、検索、RSS/Atom フィードとかなり新機能が増えています。Wiki はまだ機能や使い勝手がいまいちです。
また、このバージョンから日本語リソースが同梱されるようになりましたので、アカウントの言語を日本語にすれば表示が日本語になります。元から多言語化されているのは trac に対するアドバンテージといえますね。
redMine は Jean-Philippe Lang 一人が開発していますが、毎日のようにコミットがあります。4/13 のリリース後には数日コミットがなかったものの、再び猛烈な勢いで開発しています。r456 で issue 変更時のメール送信機能、r456 でマイページに watched issues が追加されています。どこかで燃え尽きないか心配です。
redMine のユーザマニュアルを訳してみましたじゃなくて、間違ってこっちに追記していたので削除。
subversion のレポジトリフォーマットにバージョンがあることを知りました。[ruby-talk:180357] の須藤さんの投稿から拾った svn2rss を実行したところ、
/usr/lib/ruby/site_ruby/1.8/svn/util.rb:58:in `svn_repos_open': subversion/libsvn_repos/repos.c:1754 Expected format '3' of repository; found format '4' (Svn::Error::REPOS_UNSUPPORTED_VERSION)
from /usr/lib/ruby/site_ruby/1.8/svn/util.rb:58:in `call'
from /usr/lib/ruby/site_ruby/1.8/svn/util.rb:58:in `open'
from /usr/lib/ruby/site_ruby/1.8/svn/repos.rb:28:in `_open'
from /usr/lib/ruby/site_ruby/1.8/svn/repos.rb:28:in `open'
from /usr/lib/ruby/site_ruby/1.8/svn/info.rb:48:in `setup'
from /usr/lib/ruby/site_ruby/1.8/svn/info.rb:34:in `initialize'
from /usr/local/bin/svn2rss:176:in `new'
from /usr/local/bin/svn2rss:176:in `main'
from /usr/local/bin/svn2rss:190
という結果に。対象は redmine の anonymous svn です。
gentoo で stable な subversion は 1.3.2 ですが、rubyforge はもっと新しいバージョンを使っているのでしょうね。
svn コマンドを使う分には困ったことがなかったのですが、各種言語のバインディングライブラリを使うときにはレポジトリのフォーマットのバージョンを気にしないといけないのでしょうか。
あ、この svn2rss はワーキングコピーではなくレポジトリにアクセスするんですね。なるほど。リモートのレポジトリの diff を得るにはどうすればいいのかな。コード読んでみよう。
記事タイトルが間違ってますね。記事本文での説明はあっているのにタイトルだけ変だという。
Ola Bini は JRuby 0.9.9 released で、
Performance has improved by 40% over 0.9.8 based on YARV benchmarks
といってますが、「YARV上での性能を40%改善 - JRuby 0.9.9がリリース」記事本文でそう訳されている通り、この「YARV benchmarks」は YARV 付属のベンチマークという意味です。1.9 シリーズ(trunk)にマージされる前には、YARV は YARV として別配布されていたのですが、その tarball には YARV 用のベンチマークプログラムが同梱されていました。trunk だと trunk/benckmark ですね。
moroの日記 - RubyKaigi2007 のタイムライン より
moro さんが日本Ruby会議2007のタイムラインを作っています。このサービス、音声や動画を載せられるといいですね。あと、詳細の情報を見るのに一つ一つクリックが必要なのが面倒かも(かといってポイントでオーバーレイ表示すると鬱陶しいかな)。
こういうイベントは参加者が自分のタイムラインをオーバーレイできると面白いかもですね。つまり、大本のタイムラインに自分のタイムラインを重ねることができると。そうではなくて、タイムラインの各項目にコメントやトラックバックを付けられるようにするという方法もありますが、言及自体もタイムラインになってるとタイムラインという概念に完結できてよさげ。
ささださんが Ruby(1.9) の今後のスケジュールについて書いています。直近では
が大きな動きですね。しかし、m17n についてネット上にまとまった情報はどこにあるのかなあ。……って2年前と同じこと書いてますね。
rails のデプロイツール Capistrano の 2.0 preview がでました。それに合わせて Capistrano: Upgrade Guide という親切なページが用意されています。このページにある主な変更点をいくつか挙げてみます。
What's New in Capistrano 2.0 を見ると、多くの新機能が挙げられています。
私は capistrano を rails のデプロイツールとしてではなく、リモートのホストでタスクを実行するツールとして利用していますが、ますます便利に使えそうな予感です。
2007/05/15 追記。Radium Software で Hackety Hack の記事。うちの日記より100倍わかりやすいのでこっちを読んで下さい。スクリーンキャストもあります。
RubyInside より。
Why's (Poignant) Guide to Ruby (和訳) や try ruby! などなどの作者 _why が子供(や初心者)のための Ruby プログラミング環境 「Hackety Hack」を作ったとのこと。今は Windows 用だけですが、Linux 版や Mac OS X 版も予定しているみたいです。インストールはインストーラを使って適当にクリックしていくだけで終わります。別途 Ruby をインストールする必要はありません。
プログラミングをしてそれを実行する環境を用意していますが、いわゆる IDE とはまったくテイストは違っています。白眉なのが Tutor 機能で、try ruby! の help と類似の機能です。同じ画面上にチュートリアルが表示されるので、それに従って操作をすることで Hackety Hack の使い方と Ruby プログラミングを覚えることができます。ただ、try ruby! は正しいプログラムを書いたかをチェックして進行しますが、Hackety Hack はまだそこまで賢くないようです。
また、書けるプログラムは生の Ruby ではありません。Hackety Hack は実行環境でもありますので、いくつかのことが簡単にできるように拡張してあります。例えば ask メソッドで一行入力用のプロンプトを表示したりできます。
他にもウェブからファイルを落とす Web.download、取得して RSS フィードだったらそれへアクセスもできる Web.fetch といった 気の利いたメソッドが用意してあって、典型的なウェブを利用したプログラムが簡単に書けるように工夫されています。チュートリアルの Lesson3 では、データベース(sqlite)を使ってデータを保存したり読み出したりするプログラムが出てきますが、データベースを使っているとは意識しないですね。
もちろん Hackety Hack の箱庭を超えたことをしようと思えば大変になってきますし、Hackety Hack 環境でしか動かない Ruby プログラムに慣れていると、別の環境で Ruby プログラミングするときに戸惑うかもしれません。でも、プログラミングの楽しさを知るための取っ掛かりとしては非常に良いのではないかと思います。
住友不動産がやってる地域密着型 SNS。
江戸時代は非常に栄えてたものの、ここ数十年はあんまり栄えてない地域に住んでいて思うのは、ネットに載らないような情報、例えばスーパーやクリーニング屋はどこにあって営業時間はいつなのかとか、非常に細々としたものを手軽に知る方法がほしいなということです。食べ物屋は口コミサイトがありますが、私の近所の店はまず載ってません。病院も最近は検索サイトや口コミサイトが増えてきてますが、評判まではわかりませんし。あるいは、どこのコンビニではアフタヌーンを扱ってるといった情報もほしいときがあります(分厚いためか扱ってないコンビニが多い)。
とりあえず登録してみたものの、このサービスは 4/18 に始まったばかりなので、さすがにそういった情報は全然載ってませんでした。同じ地域の登録者数は 100人足らずでした。これは人口の 0.04%。この JIMOT は最初に地域という単位でユーザが分断されますから、Mixi のユーザ数 800 万強=人口の 6.7% という割合よりも高くなければ活発なやり取りはなされないのではないでしょうか。人口の 10% だと数万人。ちょっと厳しそう。
また、地域に関する情報のやりとりがメインとなると、個人が非常に特定しやすくなります。距離的にも精々数 km の範囲なので行こうと思えば徒歩で行けます。この手のサービスが流行るとネット上に限らないトラブルが懸念されますね。
なかださんがメソッド定義に Objective-C スタイルのキーワード引数を使えるようにするパッチを投げています。さすがー。メールからのコピペですが、以下のように書けるとのこと。
class ObjC
def copy:from: p [copy, from] end
end
ObjC.new.copy: "x", from: "y" #=> ["x", "y"]
定義文の方はまだ議論の必要があるようです。また、レシーバが必要な場合には . も必要なので呼び出す時の字面がちょっと不自然な感じがします。とはいえ、キーワード引数の導入は大歓迎です。
rails の render メソッドを例にとりますと、
render :action => "show", :layout => "dialog"
はキーワード引数を使うと、
render action: "show", layout: "dialog"
と書けるようになりますね。これは良い。
この tdiary はタイトルなしでいつも書いているので、日付別やセクション別に表示したときに、title にサイト名と日付しか表示されませんでした。ブックマークしてくれる人が不便そうだということに気付きましたので title_tag プラグインを導入して title が表示されるようにしました。まあ、どちらにせよタイトルの付け方が適当なのでわかりにくいですけどね。
追記:あー。常にその日のすべてのセクションタイトルが表示されるようになってしまいました。セクションのアンカーをクリックしたときには、そのセクションのタイトルだけ表示させるにはどうすればいいのでしょうか。
Javascript 使ってるよなーと思って、そういう風に表示されるサイトのソースを見たところ、highlight プラグインを使えばよいことがわかりました。ということで解決。
最近のコメント:
RSS
![]()
This work is licensed under a
Creative Commons License
(note: text only. w/o web design, citations, (re)distributed softwares).
_ kjana [setter の方は実は ruby も変数への代入と区別出来ないので self.foo = bar と書く必要があっ..]
_ だて [あああ。ほんとですね。昔 self と () を省略せずできるだけ形式的に書こうとしたことがあったのですが、p はど..]