Rubyの最近のブログ記事



movatwitterその他のtwitterクライアントだと発言にフッター(スラドにおける署名であるとか, 参加してるコミュニティの宣伝とかが書いてあるあれ)がつけられるけど, ターミナルからつぶやけるクライアントであるtermtterではデフォルトではできないみたい(ちゃんと調べたわけではないので, もしできるなら教えてください)。


幸いtermtterは拡張が簡単なので, 設定できるようにしてみる. あっさりできて楽しい.


インストール先を調べる


まず, termtterがインストールされているディレクトリを見つける.ソースからインストールした人は問題ないですが, gemから入れた人はややこしいところに入ってます.


調べるには以下のコマンドで:



$ gem which termtter
(checking gem termtter-1.3.1 for termtter)
/usr/lib/ruby/gems/1.8/gems/termtter-1.3.1/lib/termtter.rb

termtter.rbと同じディレクトリにpluginsディレクトリがあるので, ここに作成したプラグインを格納するみたい.上記の場合だと/usr/lib/ruby/gems/1.8/gems/termtter-1.3.1/lib/pluginsになります.


hookをpluginsディレクトリに入れる


上記のpluginsディレクトリに, ftr.rbというファイルを作成して, 以下のような内容で保存します.



# -*- coding: utf-8 -*-

Termtter::Client.register_hook(
:name => :add_footr,
:points => [:pre_exec_update],
:exec_proc => lambda {|cmd, arg|
arg << " #{config.footer}"
}
)

hookっていうのは割り込みみたいなものだと考えればいいのかなあ. svnにもあったはず...


cmdは割り込んだコマンドで, argが引数です. pointsが割り込みのタイミングで, :pre_exec_updateはアップデートの実行前を指定することになるらしい.


フッタの内容はconfigファイルから読み込んでいるので, これを設定すれば動きます.


設定の変更


2ヶ所変更の必要があります.


フッタ内容の設定

冒頭にconfig.user_nameやconfig.passwordが書いてあるので, その辺でconfig.footerを設定します.



config.user_name = 'tnzk'
config.password = 'shachihoko'
config.footer = '[10/21 18:30- つくらぐ#6 http://bit.ly/utlug6]'

こんな感じ.


ftr.rbの読み込み

プラグインの自動読み込みを以下の記述で設定します.



Termtter::Client.init do |t|
t.plug 'ftr'
end

Termtter::Client.initのブロック自体はデフォルトで存在するはずなので, そこにt.plug 'ftr'を追記するだけでOKです.


自動読み込みが不要ならこっちは書かなくても大丈夫です. termtterを起動してからplug ftrコマンドを実行すれば, 同じように有効化されます.




当然のことだけど、コンパイルを要する言語では当然それが文法チェックの役割を果たしてくれて、結果として文法上の間違いを含んだプログラムを実行するといったことは発生しえない。


これがスクリプト言語だと、文法に問題のある部分こそ実行できないものの(実行できるならそこには問題があるとはいえない)、問題に突き当たるまでは実行を進めてしまう。


これが厄介で、例えば:



  1. DBにファイルのパスを書き込む

  2. そのパスに実際にファイルを作成する


といったような記述をした(設計の良し悪しは別のはなしとして)とき、2の実行時に失敗してファイルが書き込めなかったりすると、実際には存在しないファイルがフロントエンドからは存在するように見えてしまう。よくあるバグだ。


そういうわけで文法チェッカーみたいなのがないかなーと思っていたら、今日ふと見つけた。



$ ruby -cw script

とすると、実行することなしに文法のチェックのみを遂行できる。



  • cだけでも文法チェックを実行して、問題がなかった場合にその旨を表示することはできるが、-wも加えると具体的にどんなエラーがあるのかも確認できる。


たとえば次のようなスクリプトなら、



#!/usr/bin/ruby

arr = ["Hello", "Good-bye", "So long", "and Hello!" # ココが残念
puts arr.join(",")

次のように診断される:



$ ruby -cw patricia
patricia:4: syntax error, unexpected tIDENTIFIER, expecting ']'
puts arr.join(",")

参考




必要になったので探してみるとさすが先達。



使うのも簡単。




$KCODE="u" # 文字コードは utf-8
require 'extractcontent.rb'

# オプション値の指定
opt = {:waste_expressions => /お問い合わせ|会社概要/}
ExtractContent::set_default(opt)

html = '' # 解析対象 html
body, title = ExtractContent::analyse(html) # 本文抽出

Webページの本文抽出 (nakatani @ cybozu labs)


オプションはいろいろ設定できるようだけど何もデフォルトでもかなりの精度。




帰ってきたらねみんぐのサーバの容量がパンクしそうになってて、慌てて自動削除実装したり、ちょこちょこミスしてたところを修正してる内に、いつも間にか寝入ってました。


そういうわけで一日遅れましたが、昨日、Ruby勉強会に参加してきました!すごい楽しかったです。


個人的に一番面白かったのは石川さんの「人工知能で学ぶ Ruby (入門)」。Excelで動作するRPGゲームを題材に、その主人公の行動を自動化しよう、というものだった。


これがSCTで制作してるSEAとかなり近い。SEAはこの主人公がロボットで、2体のロボットの動作を別々の人が書き、戦わせてみたら面白いんじゃない?というもの。まだ課題がたくさんあって形になっていないけど、うまくできたら校内で大会でも開いてみたいと思ってる。でも、仮想とはいえRubyの処理系を作るのは難しそうだからRubyは使えないかもしれない。今のところCとLispを予定してる。


もしよかったら石川さんに詳しい話を伺いたいのだけど、ブログとかWebサイトとかの場所を知らないのが残念。ご存知の方は教えてくれるとうれしいです。


id:cuzicさんのRuby on Windowsの即売会もありました。サインももらいました。あと、Ruby会議2007のストラップも!先着8名限定でした。9人目以降の方、ごめんなさい:)



Rubyist Magazine出張版 Ruby on Windows

Rubyist Magazine出張版 Ruby on Windows







今週末の土曜日(08/01/12 Sat)に、Ruby/Rails勉強会@関西に参加しに大阪国際大学に行ってきます。どうやら結局、地元から行くのはひとりっぽいです。寂しい;o


でもだからこそ、色んな知識や技術を持って帰りたいと思う。ちょうど部内にWebプログラミングに興味を持ち始めた子がいるし。Rubyも使ってみてもらってるから、次回かその次くらいは一緒に行けるかな。行けるといいなあ。


id:lonlon2007さん、id:rosylillyといっしょに作ってるWebサービスも、勉強会のある土曜日に合わせて金曜日の公開を目標にしてる。俺からすれば雲の上みたいな人たちがたくさんいる場で、少しでも「こういうこと頑張ってる子どももいるんだよ、後続には期待してよね!」ってアピールしたい。それで今回いっしょに頑張ってくれてるみんなに、いつも迷惑かけてる俺としては少しでも恩返しがしたいと思う。


それと、幸いなことに本当にひとりきりってわけじゃないみたいで。Rubyist SNSで見かけて声をかけさせて頂いたんだけど、どうやら同い年の人がいる(はてなな人でした: id:watura)。いるし、第22回の勉強会にもいらっしゃるようだ。あなたの学校ではこういう活動はどんな評価を受けてて、どんな賛同者がいて、どんな障害があって、どんなスタンスに落ち着いてるのかとか――聞きたいことと伝えたいことを考えればきりがないほど。他の学校の同じ趣味を持った人と話す貴重な機会だ。


ところで、名札があるといいということなんですが、名札ってよくITな仕事の人が首からかけてる感じのやつがイイ感じなんでしょうか。他の種類を適当に持って行っても構わないんでしょうか。備えられることは備えたいので準備したいんだけど、ひとり変なのだったらヤだしなあ。




コード



t = Time.now
startTime = t.to_f # 開始時刻を保存

a = 0
for i in 1..10000 # ( n = 10000, 100000, 1000000, 10000000, 100000000)
a += i
end
t = Time.now
endTime = t.to_f # 終了時刻を保存

puts ( endTime - startTime).to_s + "秒 : " + a.to_s

1からnまでの数値を足し合わせていくコード。nは10000, 100000, 1000000, 10000000, 100000000の5パターンで、それぞれ5回ずつ実行してその平均を取った。


ちなみに共通のコードが1.9.0でも1.8.6でも動作した。非互換の部分が含まれていなかったようだけど、どういった部分で互換性がないのか知りたい。








1.9.01.8.61.9.0:1.8.6
100000.0154s0.0158s1.03
1000000.162s0.138s0.825
10000001.86s2.17s1.16
1000000018.9s22.3s1.18
100000000362s386s1.06

平均して、1.9.0は1.8.6に比べて1.05倍速いようだ。n = 100000のとき1.9.0のほうが時間がかかっている。それ以外は1.9.0が速いようなので、何かしら例外的な状態にあったと思う。これについては後々もう一度調べてみようと思う。




第22回Ruby/Rails勉強会@関西


年明け間もなく、1月12日に第22回Ruby/Rails勉強会@関西が催される。


Rubyを本格的に使い始めたのはごく最近のことだけど、どうやら短い間にすっかり虜にされてしまったみたいなので、勉強会にも参加したいと思っている。Railsも使いこなせるようになりたいし。


勉強会には毎回、噂に聞き知る方々がいらっしゃっているようで、私の知らないたくさんのことを持って帰ってくることができると思う(「お前なんか知能が低すぎるので来ないでください」って言われても文句は言えないです)。


Ruby 1.9.0、リリース


そんな折、Ruby関西のMLで「誰か第22回の勉強会で、1.9.0の使用報告をする人はいませんか」という話が流れていた。1.9.0は昨日リリースされた。重要な変更点がたくさんあるそうだ。とても面白そうなので、誰かしらこのテーマで発表するだろうと思う。


1.9.0は安定版ではなく、”ブリーディング・エッジ”だそうで、エンタープライズで利用するにはまだ不確定な部分がたくさんあるという。しかし個人的に使う分には何ら問題がないそうなので、私は使ってみたいと思っている。先進的な機能があるなら早めに触れておきたい。


そういうわけで恐らく1.9.0の使用報告は興味深く拝聴することになると思っていて、であれば1.9.0がどのようなものなのか、触り程度でも予習しておきたい(あわよくば発表だってしてみたいのだ)。1.9.0を試してみようと思った動機はそんなところ。


こういうとき、どんなことをすればいいかわからないの


経験がなくて未熟で馬鹿な私は、とりあえず1.9.0がどういうものなのか調べてみることにした。


まつもと×笹田、Ruby 1.9を語る - @IT



  • YARV: VMを使って動いている

  • Fiber: Enumeratorの実装に用いられている


構文木で扱うスタイルから、VMを使う形に移行したことによって、プログラムの動作は早くなった、というようなことが載っていた。とするとまず比べてみるべきは速度の違い。ベンチマークみたいなことをして調べてみればいいのかしら。


次に、Enumeratorについて。1.8までのブロックでは、複数の配列を順かつ同時に(なんだこの表現?)処理しようとすると煩雑な手順が必要だった。これを手軽に扱えるようにしたものがあるということなので、こちらも試してみたい。


また、ruby-devで変更点についてまとめてあるっぽいので、これも訳してみる。というかまずはこれからか。


クリスマスリリースのお知らせ


[ruby-dev:32713] pre-release note for the christmas release.


要約すると、



  • 以前アナウンスしていた1.9.1ではなく、1.9.0のリリースになるが、すべての非互換の変更は既に加えられている

  • 1.9は非互換であり、1.8で書かれたプログラムは動作しない恐れがある

  • 移植手順の解説や移植ツールなどは、今回のリリースでは提供されない


というような内容。移植ツールとかが、もしかしたら出てくるかもらしい。


性能の比較


Ruby1.9における最大の変化はVMの採用で、それによって実行速度が1.5倍程度速くなっているという。


ただし速くなったというのはRuby自体の性能で、Cで書かれたライブラリなどの速度が速くなったわけではないので、いわゆる「Rubyの普通の処理」(変数の代入やループの処理など)が速くなったということになる。


ベンチマークの手法に明るくないので色々調べてみたのだが、具体的なことが見つからなかったので、Wikipediaの記述を参考にした。





これから何日かかけて、Ruby1.9.0と1.8.6の間での性能の比較を行おうと思う。



  • 特定の処理を終えるまでにかかる時間

  • 特定の時間内に処理できた回数(未実行)

  • メモリ消費量の推移(未実行)



ちょっとびっくり。これで授業中暇になったら遊べるね。




Tumblr APIの和訳が進行しているよう。時間ができたら最近気になりつつあるRubyで何か作ってみたいな。


PIC Ruby Compiler

| コメント(0) | トラックバック(0)



一年生からプログラミングが非常に不評だった、という話の続き。


いきなりアセンブリを教えようとしたから拒絶された、Cとか高級言語なら受け入れてくれたはず、なぜなら別の(機械チームの)子にRubyで教えたら好評だったから、という論調でCにしない?というような話を顧問としてた(この話が二進数の件に通じてます)。でもアセンブラのほうがシンプル、そもそも機械の子はプログラミングに興味があった、ということから少なからず怪しい理屈。でもまあ物は試しでしょ、みたいな流れになった。


でも手元にPIC C Compilerがない。BCCもない。落とせばいいけど全部のマシンに入れるのが面倒い。


そこで人間コンパイラどうよ、みたいなことに。


いや何のことはない、一年生が書いたCのコードを、俺(ないし顧問(ないか(笑)))がアセンブリコードに書き換えるという荒業。昔は実際そうだったらしいし。いやそれはアセンブラだっけか(笑


冗談半分で実行には至らなかったけど、結構面白そうだなと思った。エキセントリックなコードを突きつけられたコンパイラの嫌な気持ちがわかるかも知れない、というような感じで。


ていうかこのところそれほど忙しくないので、PIC用のコンパイラでも作ってみようかな、と考えてる。せっかくだし興味が湧いてきたRubyでとか、それなら機械の子といっしょにとか、色々面白いネタに昇華しようと思案中。


Rubyでコンパイラ書くなら、Rubyコード─コンパイル→PICアセンブリのほうが面白いかな。


このアーカイブについて

このページには、過去に書かれたブログ記事のうちRubyカテゴリに属しているものが含まれています。

前のカテゴリはReportです。

次のカテゴリはSCTです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

Powered by Movable Type 4.32-ja