October 02, 2005
Rubyで2ちゃんねる専用ブラウザ作るぜ 6 〜$ruby -d 23:46
- Permalink
- Comments (2233)
- Trackbacks (0)
Ruby
今日はこれにはまった……スレッドと例外。
あるスレッドで例外が発生し、そのスレッド内で rescue で捕捉されなかっ た場合、 通常はそのスレッドだけがなにも警告なしに終了されます。
requireのし忘れで、スレッドが途中NameErrorか何かを投げて死んでたんだけど、 リファレンスにあるように警告なしに死んでしまうので死んでたことに気づかなかった……。 どっかでループしてんのかと思ったよ。
requireのし忘れなんてのは普段エラー表示に頼ってるんで、モロはまりましたw
rubyに-dオプションをつけると、スレッドの例外も表示するとのこと。 これからは忘れないようにしよう……。
そういえばPerlでは警告レベルをあげるためにuse strict;と-wをつけてたけど、 Rubyだと基本的に何をつけておけばいいんだろう。 なんだか-vやら-wやら-W[lebel]やら-dやら。ヽ(`Д´)ノ ウワァァァン!
テスト。
#test.rb p $DEBUG p $VERBOSE
[yz@localhost test]$ ruby test.rb false false [yz@localhost test]$ ruby -d test.rb true true [yz@localhost test]$ ruby -v test.rb ruby 1.8.2 (2004-11-03) [i386-linux] false true [yz@localhost test]$ ruby -w test.rb false true [yz@localhost test]$ ruby -W test.rb false true [yz@localhost test]$ ruby -W0 test.rb false nil [yz@localhost test]$ ruby -W1 test.rb false false [yz@localhost test]$ ruby -W2 test.rb false true
-dつけとけば両方trueになっていいですかね。
とりあえずスレッドの問題が解決したのでスレを選択・表示できるようになりました。
ただ、今度は大きなスレ読み込むと止まるというまためんどくさそうなバグが。 なんでメインスレッドで読み込んでないのにメインスレッドの応答がなくなるのか……。 datファイルのパースあたりで失敗してるだけだといいんだけど。
October 03, 2005
Rubyで2ちゃんねる専用ブラウザ作るぜ 7 〜gtkmozembed 03:45
- Permalink
- Comments (2305)
- Trackbacks (0)
Ruby
前回のエントリで
ただ、今度は大きなスレ読み込むと止まるというまためんどくさそうなバグが。 なんでメインスレッドで読み込んでないのにメインスレッドの応答がなくなるのか……。
と書いたわけだけど、原因がわかりました。
今作っている2ちゃんねるブラウザではruby-gtkmozembedってのを使ってるんですが、 もとを辿るとGtkMozEmbedという GTKにMozillaを埋め込んだやつみたいで、つまりMozillaなんです。 スレのレンダリングをさぼってMozillaに任せてしまうわけです。 (その代わり、大抵の人が知ってるCSSを使って自由に見栄えを変えられるっていう利点があります)
で、スレのデータ(datファイル)をGETした後HTML化してMozillaに流し込むわけなんですが、
そこのメソッド(render_data,
append_data)がネックになってました。
render_dataは中でappend_dataをやってると思うのでappend_dataに話をしぼって
いきますが、これ、1度に大きなサイズのデータを送ると、そこでフリーズしちゃうみたいです
(Vine Linux 3.2, Ruby 1.8.1, ruby-gnome2 0.13.0, ruby-gtkmozembed 0.3.1)。
まーここんとこオレの環境は調子悪いんで、ほかの人は再現しないかもしれないけれど。
| サイズ(byte) | |
|---|---|
| 55983 | ○ |
| 47450 | ○ |
| 59636 | ○ |
| 60194 | ○ |
| 64892 | ○ |
| 65707 | × |
| 68036 | × |
このデータは、手元にあったテスト用のスレのレスの数を調節して最終サイズを変えていった結果です。 65KByte付近でブラウザが応答しなくなりました。
しょうがないのでHTMLを区切ってそれぞれ順にappend_dataを繰り返してやったらうまくいきました。
どのサイズに区切るかなんですが、微々たる差ですが限界の65000バイトに区切ってappend_dataするのが
一番速いようです(10000〜65000でテスト)。
問題はオレのPCではスレのサイズが100K越えると表示までの遅さが気になってくる点。 「Now Loading...」みたいなのが必要かも。
October 07, 2005
Subversionを覚えても卒業単位にはならない(涙 01:40
- Permalink
- Comments (318)
- Trackbacks (0)
日記
ここんとこは授業に出つつ、Subversionのマニュアルを読んでました。 これからは3分間プログラミング以外はしっかりバージョン管理しながら開発しようかなと。
就職組はあと半年たてば、たくさんの上級者から技術のシャワーを浴びる毎日なわけだけど、 俺は血迷って社会に出るのを2年先伸ばしにしてしまったので、 もうどんどん自分から新しいものを開拓していかないと! でも見方を変えれば社会人と違って自由な時間があと2年もらえるわけで、 好きなことに存分に時間を使える最後の期間っぽくね? よって生活費なんて省みずに本を買うべし(何買おうかな)。 親が元気なうちにスネをかじるぜ(最悪な長男)。
そう言えば今日3年生の実務実習(プログラミング演習と合体したらしい)の説明会に出てたら、 日本の若者は技術力が落ちてるだのソフトウェアの知識がないだのなんだのと、 そりゃもうへこむ話を聞かされたわけで。
まったくおっしゃる通りで。自分も猛反省しつつ禿同。クズですよ。ええ。 情報学について学んでるんだからソフトウェアについては学ばなくて良いっていう俺らの今のカリキュラムは変だ。 どうせSEになるくせに。1,2年の教養とか減らせば時間ありそうじゃない。 そうすれば俺も4年の後期まで卒業が確定しないなんてことにはならなかったのに……。 地球の科学とか教育の心理とか、俺が勉強したって絶対役には立たないし。 本読めばいい、そんなものは。 あーなんか自分がダメなのを必死に大学のせいにしてる俺カワイソス(´・ω・)
で、その実務実習ではグループ作って7日間でショッピングサイトを作るらしいすよ、12月に集中的に。 俺はその時期中間発表とかあって忙しそうだったんで履修やめたけど、 まー7日間とはいえ、そうやって大学生はもっと手を動かしたほうがいいと思うよ。 というか、動かしていれば良かったなと4年間振り返って思ってます。 おもしろいことはたくさんあるのに、技術力がついていかない……。
JavaとRubyのスレッドに関する対応表 03:25
- Permalink
- Comments (2254)
- Trackbacks (0)
Ruby
結城さんの勉強日記の書き方のエントリに
「これは当たり前だからわざわざ書くまでもないな」と思ったことこそ書くようにしよう
と
あったので、あとで忘れた時とか確認したい時のためにメモメモ。
| 機能 | Java | Ruby |
|---|---|---|
| スレッドの定義と生成 |
Threadクラスを継承するか、Runnableインタフェースを実装する。
class A extends Thread{...}
class B impliments Runnable{...}
startメソッドでスレッドを生成。 new A().start(); new Thread(new B()).start(); |
Threadオブジェクトを生成するとスレッドも同時に作られる。
require 'thread'
a = Thread.new{...}
|
| 新しいスレッドの実行部分 |
runメソッドに記述する。
class A extends Thread
{
void run(){ System.out.print("Inspire the Next"); }
}
|
実行部分はThread.newに渡すブロックに記述する。
Thread.new{
puts 'Inspire the Mona'
}
|
| スリープ |
sleep(5000); |
sleep sleep 5000 |
| スレッドの待ち合わせ |
t = new A(); t.start(); t.join(); |
t = Thread.new{...}
t.join
|
| メソッドの排他制御 |
public synchronized void foo(){...}
| なし |
| ブロックを排他制御 |
void foo(){
synchronized(this){...}
}
|
require 'monitor'
class A
include MonitorMixin
def initialize
super
end
def foo
synchronize{...}
end
end
|
| 待つ |
スレッドを、wait()を呼び出しているインスタンスのウェイトセットへ入れる。 wait(); |
new_condで作ったインスタンスのウェイトセットに入れる。
require 'monitor'
class A
include MonitorMixin
def initialize
super
@cond = new_cond
end
def foo
@cond.wait
end
end
|
| ウェイトセットから出す |
notify(); // 眠ってるスレッドを1つ起こす notifyAll(); // 全部起こす |
@cond.signal # 1つ @cond.broadcast # 全部 |
とりあえずこんだけあればスレッドの基本的な扱いには足りるだろうか。 にしても、どっちもすげー忘れてる。完全に消える前にメモれてよかった……。
俺はスレッドについてはJavaのほうが見なれてるので、まだどうしてもJavaで考えてしまいます。 スレッドのプログラミングすることは圧倒的に少ないし。
October 11, 2005
Rubyで2ちゃんねる専用ブラウザ作るぜ 8 〜進捗報告 02:41
- Permalink
- Comments (0)
- Trackbacks (0)
Ruby
えーと、まだ飽きずに作ってますw 先週は学校に行っていたのであんまり 進んでないんだけど、とりあえず進捗報告を。
新スレが色分けされるようになりました。終わり。
まーその前に軽く構造の整理をしたので、このあとはとんとんと進んでいくんじゃないかと。 邪魔が入らなければね。(なんかさっそくあさってのゼミの準備に追われそう)
とりあえずその画像が、最終的な図に結構近いです。あとはメニューバーと 色の調節とCSSとウィジット間のマージンを調整したら、見ため的には大体こんなもん。
見てわかるように、左のペインにスレの一覧が来ます。 で、右のスレの表示部分ではとりあえず上下に画面分割可能です。 右上のちょこちょこ文字があるやつが、開いているスレの一覧のテーブルです。 ここで表示するスレを切替えます。
こんなレイアウトなので、快適に見れるのは1280*1024以上の解像度だと思います。 画像はうちの17インチディスプレイの1280*1024でウィンドウ最大化した状態です。 1024*768だとスレ一覧の幅を縮めてスレタイがちょっと見にくくなるか、 スレの表示部分を縮めてレスがいくつか折り返されるか、どっちかになるんじゃないかな。 まー窮屈ではあると思う。たぶん。
みんなの大好きなWindows XPが古いPCでは快適ではないように、 このブラウザもターゲットをしぼって作ってるわけです。 たくさんのスレタイを画面に並べるのが目標なので、どうしてもこの形になります。 これで見にくい人にはドラッグして配置の変更ができるようにしておけばまーいいんだろうけど、 そこまで知識がありません。使う人が出てくるほど作り込むかもわからんし……。
るびまのプレゼント当たったw 18:02
- Permalink
- Comments (2236)
- Trackbacks (0)
Ruby
言い忘れてたけど、昨日るびま10号が出まして、見たら るびま1周年記念企画のプレゼントでRubyレシピブック 268の技が 当たりましたよ!
やーこういうの今まで生きてて当たったことなくて、どうせ今度も当たらないだろうと、 ちょっと前に実は買ってしまったんですが、何冊あったっていいんすよ! 家と研究室に置いて、暇さえあればパラパラめくります。 こういうテクニックの本は何度読んでも新しい発見があるってもんです。
いやー、日本のRuby周辺はなんか温かいですね。るびまを初めとして、 オフィシャルのリファレンスマニュアルが しっかり日本語であったり、Rubyの作者の日記が読めたり。 うまく言えないけど、プログラミング言語というだけではない、ただならぬものを感じますw
October 12, 2005
金くれ〜 03:20
- Permalink
- Comments (319)
- Trackbacks (0)
日記
金がない……。2カ月に1度の水道料金を払い、3カ月に1度のコンタクト購入、 いろいろあって結局振り込まれていないような気がするバイトの給料、 何故か今月だけ2万円少ない親からの仕送り。 電気代として5000円をとりあえず残して貯金を下ろし、手元には3500円。ヽ(`Д´)ノ ウワァァァン!
コンビニ生活が身に染み着いて、行けば大体500円は出費。 以前は食パン焼いたりしてたのに、それが500円に……。 おかげで繰越金はここんとこほぼ0円。
あー学費の引き落としってまだだよなー。……コソーリ使っちゃおうかなー。 このままだと今度はスカパー代が残高不足になっちゃうよ。 つーかそれ以前に生活ができねーーーー(´Д⊂
スクラブ入り洗顔料の恐怖 20:18
- Permalink
- Comments (322)
- Trackbacks (0)
日記
寝る前にコンタクトを外した時に何かが目に入って、 それがずっととれなくてなかなか眠れないほど痛かったので眼科に行ってきた。
まつ毛だろうと思ってたら、入ってたのはなんと洗顔料のスクラブ。 あのちっこい粒が1つ、上まぶたの裏に貼りついてました。 あんなん1つで痛いのかよ……。
で、今日は医者に言われて片目コンタクトレンズなしで半日生活したんですが、こんなのムリポ。 かたっぽ何も見えないからぼやけるぼやける。 哀れなことにコンタクトがないとまともにパソコンもできない。もう寝るくらいしかすることがないすよ……。
しかし恐ろしいなスクラブ。生活費が1500円になっちまったじゃないか……。 結局今日の食事は夕飯だけ……。今から米炊いて、冷凍してあった豚肉を焼きます。 片目つぶって日記書くのもしんどい。
October 17, 2005
vimで代入文を=でそろえる for Ruby, Perl 02:21
- Permalink
- Comments (2304)
- Trackbacks (0)
Ruby, vim
Align.vimっていう、ここに載せたものより高機能なスクリプトがあります。
代入文がたくさん並んでると、なんか見にくいですよね。
@close_listeners = []
tool_bar = Gtk::HBox.new
@label_title = Gtk::Label.new
@btn_close = Gtk::Button.new('X')
@moz = Gtk::MozEmbed.new
以下のようになったら見やすいよね?
@close_listeners = []
tool_bar = Gtk::HBox.new
@label_title = Gtk::Label.new
@btn_close = Gtk::Button.new('X')
@moz = Gtk::MozEmbed.new
viについてちょっと調べものをしていたら ヽ( ・∀・)ノきゅまきゅまーさんのところで この話がされているのが検索でひっかかって、興味津津。
Emacsについてはコメント欄にリンクが張ってあるんですが、 vimについてはインデントのためのRubyのコードを書いて vimから呼び出すと できてしまうらしい。おおおっ!
まーこういうスタイルの問題は、必ず「こういうの嫌い」って言う人が出てくるもんだけど (オレも以前Cでこのスタイルを見た時は好きではなかった)、 オレは少なくとも上の例については後者の方が見やすく感じるんです。
で、いろいろごにょってみたら、大体挙動がわかった。vimで範囲選択(13,15とか)して 外部のプログラムに渡す(:13,15 !ruby a.rb)と、プログラムでは範囲選択した部分を標準入力から読めると。 そして標準出力に吐き出すとそれがvimの範囲選択した部分とすりかわるみたい。
うむ。ならいっそのことコメントもそろえたらキレイなんジャマイカ?
@nulpo = "ga" #comment @giko = :neko#aa @mona = :nida @nukedo = vs_kuma(3, 4) # func
これは汚い!(わざとw (ノ∀`)
で、作ってみた。
#!/usr/bin/env ruby
src = ARGF.read
l_max = r_max = 0
src.scan(/^\s*(.+?)\s*=\s*([^#]+?)\s*(#.*)?$/) do
l_max = [l_max, $1.length].max
r_max = [r_max, $2.length].max
end
src.gsub!(/^(\s*)(.+?)\s*=\s*([^#]+?)\s*(#.*)?$/) do
if $4.nil?
"%s%-#{l_max}s = %s" % [$1, $2, $3]
else
"%s%-#{l_max}s = %-#{r_max}s %s" % [$1, $2, $3, $4]
end
end
print src
これをindent-equal.rbと名付けて実行権限を与えてパスの通ったところに配置。
そして~/.vimrcに、
au FileType ruby map + : !indent-equal.rb
としてみた。 これはrubyのファイルを開いたときには、indent-equal.rbの実行が+にマップされる。 なんで、Vを使ってビジュアルモードで複数行選択して+を押すと
:`<,`> !indent-equal.rb
と出るのでEnter or Ctrl-m。
すると……
@nulpo = "ga" #comment @giko = :neko #aa @mona = :nida @nukedo = vs_kuma(3, 4) # func
キタ━━━━━━(゜∀゜)━━━━━━ !!!!!
+を押して適用するには、なんかVで選択しないとダメみたい。:13,15+とやっても「コマンドじゃない」と怒られた……。
ちなみにこのプログラムはRubyの代入文を整理するために作ったけど、 Perlでも多分いけます。以下はオレにとっては懐かしい、このブログのコードの一部……。
my $query = new CGI();
my $id = $query->param('id') || 'toppage'; # top page's id is 'toppage'
my $nmz = defined $query->param('query') ? 1 : 0; # namazu flag
my $query = new CGI();
my $id = $query->param('id') || 'toppage'; # top page's id is 'toppage'
my $nmz = defined $query->param('query') ? 1 : 0; # namazu flag
Perlのごちゃごちゃ感がとたんに薄らいだ感じ。
October 18, 2005
VNCを使ってみたよ 20:54
- Permalink
- Comments (2026)
- Trackbacks (1)
Windows
研究室のオレのパソコンはWinなので、もうプログラミングとかまったくする気になりません。 てことで研究室でのプログラミングのためにWin上でLinuxを動かそうとcoLinuxでブルースクリーンになったり QEMUにDebianを入れたりしていたのがこの前の話。 でも羽振りのいいうちの研究室はパソコンを余分に購入したので(来年のためらしい)、 それにLinuxを入れてリモートでやることにしたんです。電源入れてサーバ室に放置です。 もう24時間連続稼働でハードディスクがへたっても、使うのは来年の4年生なのでオレの知ったことじゃないです。 (つーか来年のオレの開発環境はどうしたら……)
まーまぬけなトラブルもありつつ、うまく逝きました。 リモートのデスクトップの領域を透過してくれるMetaVNCを使いました。
壁紙が痛い……。
VNCはデフォルトではウィンドウマネージャがtwmで(´・ω・`)ショボーンなんですが、 @ITの記事を参考に GNOMEになったよ!
こういうのおもしろいなー。自鯖始めたときにXでサーバのEmacsとかMozillaとかが ポコンと手元のパソコンで表示できた時は感動したっけ。 VNCはメニューやタスクバーに触れたりする点がいいすね。
2ちゃんねるブラウザの開発も完全にSubversionに移したし、 これで学校でも開発ができることに。やったー。(´∀`)ノ
October 21, 2005
Tera Term Proでの文字の色 21:26
- Permalink
- Comments (2324)
- Trackbacks (0)
Windows
CygwinはAlt-半角・全角でないとIMEがON/OFFされないうえにいろいろあって問題外だし、 PuttyはかなりよかったけどJapanistの親指キーがなぜか効かないので致命的だしってことで、 LinuxへのsshログインにはTera Term Proを使うことに。
これ、Puttyの使い方を見てたときに「ssh2に対応してないからダメだ」なんて文言を読んだんだけれども、 今はそんなことないみたい。UTF-8もssh2もいける。
さっそくログインしてviを使ってみたら、ハイライトされなかった。もう。
$ export TERM=teraterm
としたらハイライトされるようになった。
でも色が……
なにこのギラギラしたのは。
ぐぐってたら、同じ不満を持つ人の日記が ひっかかったので、同じようにTERATERM.INIのANSIColorのところを変更(s/255/191/g)。
目にやさしい色使いになった。まったく、プログラミングにとりかかるまでにどんだけ時間がかかるんだろう……。
そういえば今日研究室内の見習いvim使い(オレだけ!?)のために、バイブルを 校費で買いましたよ。これで研究室内のスキルがあがってくれるといいですね。
October 23, 2005
ruby-chasenのインストールメモ 23:08
- Permalink
- Comments (2277)
- Trackbacks (0)
Ruby
茶筌をRubyから使うためにruby-chasenを 入れようとしたんだけど、なかなか入らなかった。こういうのは茶筌の本家に行けば情報があるんだろうけど、 なんか昨日今日と落ちてるみたい。ショボーン
こういうときはGoogleのキャッシュがほんとありがたいすね。
> %ruby -rmkmf -e'dir_config("chasen","/usr/local");
> create_makefile("chasen") if have_library("chasen")
>
> を実行しましたが,
have_library("stdc++")
を追加してみてください.
てことで、添付されているextconf.rbを使わずに
$ ruby -rmkmf -e 'dir_config("chasen", "/usr/local");
create_makefile("chasen") if have_library("stdc++") and have_library("chasen")'
としてみたら
Exception `NoMethodError' at /usr/lib/ruby/1.8/mkmf.rb:657 - private method `split' called for nil:NilClass Exception `NoMethodError' at /usr/lib/ruby/1.8/mkmf.rb:657 - private method `split' called for nil:NilClass checking for main() in -lstdc++... yes checking for main() in -lchasen... yes creating Makefile
まーmkmf.rbがなんか言ってるけど、とりあえずこれでおk。 dir_configはリファレンスの説明見るといらないような気もするけど、まーいーや。
Makefileができたので、あとはmake;make install。
注意点というか、はまったのがhave_library("stdc++")とhave_library("chasen")の順番。
$ irb -r mkmf
irb(main):001:0> have_library('chasen')
checking for main() in -lchasen... no
=> false
irb(main):002:0> exit
$ irb -r mkmf
irb(main):001:0> have_library('stdc++')
checking for main() in -lstdc++... yes
=> true
irb(main):002:0> have_library('chasen')
checking for main() in -lchasen... yes
=> true
stdc++が先でないといけないよ、と……。はあ、そうなんですか。 難しいことはワカンネ(´Д`)
October 24, 2005
VNCっておもしろw 20:45
- Permalink
- Comments (314)
- Trackbacks (0)
Windows
これが最適かどうかは置いておいて、VNCはおもしろいです。 WinとLinuxの環境が融合していく感じ。研究室内はプライベートネットワークにしたんで、 VNCの転送量も多めで!

これでもWindowsのデスクトップですよ。どっちかっていうとLinuxに見えるww
なんてうける状況なんだ。「今頃VNCかよプッ」って人はスルーしてね。 俺はやっとこれのおもしろさがわかりかけてるところなんです。
takkan_mがこのリモートのLinuxにsambaを立てたので、 ドラッグ一つでLinuxのhomeディレクトリにファイルを置けるし(scpとかより楽)、 逆にLinuxで作ったファイルがダブルクリックでWin側のアプリを使って開ける(Adobe Readerなど)。 もうレジュメのPDF作るのにcygwinでカタカタ文字コード変換とかやらなくて済みます。
てことで、Winのソフトに依存しているところはWin、 それ以外はリモートのLinuxに置いて、慣れているLinuxのターミナルと Linuxのコマンドを存分に使えます。おお、ついにCygwinさよならかー?
あとはWin側にあるTera TermでLinuxのGUIアプリ(つまり作成中の2ちゃんブラウザ)を 起動できれば、もうLinux環境の中にいるような使い心地に。
VNCのディスプレイ番号は1にしてあるので、Tera Termから
$ DISPLAY=:1.0 gedit
とやったらgeditが出てきたwww よし。
あとは.bashrcにでもexport DISPLAY=:1.0と書いておけば、ホントにLinuxを使っているかのような錯覚に!
しかもJapanistとかiTunesとかMS Officeとか! LinuxとWinのいいとこ取り!
しかもCygwinいらず!!
ちなみにTera Termのためにexportなんてしなくてもgnome-terminal使えばいいじゃんて思うかもしれないけど(実際言われたけど)、 Tera Termなら
- Japanistが使える(大事)
- VNCサーバを落としても作業が続けられる(リモートLinuxのリソースは私物ではないのでvnc立てっぱなしにはできない)
って点を忘れちゃいけない。Tera Term1つでCUI→(vnc起動)→GUI→(vnc終了)→CUIとシームレスに扱えるのは大きいですよ。
October 25, 2005
HDがいっぱい 19:41
- Permalink
- Comments (2309)
- Trackbacks (0)
大学
開発環境として使っている研究室の共用Linuxのハードディスクがいっぱいで作業ができんよー。
grep: 出力の書込み: デバイスに空き領域がありません
grep: 出力の書込み: デバイスに空き領域がありません
grep: 出力の書込み: デバイスに空き領域がありません
grep: 出力の書込み: デバイスに空き領域がありません
grep: 出力の書込み: デバイスに空き領域がありません
grep: 出力の書込み: デバイスに空き領域がありません
grep: 出力の書込み: デバイスに空き領域がありません
grep: 出力の書込み: デバイスに空き領域がありません
grep: 出力の書込み: デバイスに空き領域がありません
grep: 出力の書込み: デバイスに空き領域がありません
grep: 出力の書込み: デバイスに空き領域がありません
grep: 出力の書込み: デバイスに空き領域がありません
grep: 出力の書込み: デバイスに空き領域がありません
grep: 出力の書込み: デバイスに空き領域がありません
grep: 出力の書込み: デバイスに空き領域がありません
grep: 出力の書込み: デバイスに空き領域がありません
grep: 出力の書込み: デバイスに空き領域がありません
:
:
ひー。初めて見た。
ファイルシステム サイズ 使用中 空き 使用% マウント場所 /dev/hda6 62G 59G 592k 100% / /dev/hda3 46M 8.8M 34M 21% /boot none 499M 0 499M 0% /dev/shm
Σ(゜д゜lll)ガーン
見ると、sambaのディレクトリの容量が恐ろしいことになってた。コーパスで溢れてるよ!
このLinuxは共有ストレージとして使うわけではないんだけど、 一時的にそういう使い方をしている。なぜならそのためのサーバがまだ届かないから。 でもこんなでかいとは思ってなかったな。今のところ55Gで、まだあるみたい。 メールスルーしちゃったのは失敗だったなぁ。
すぐには使わないコーパスのほうが大半のはずだから、申し訳ないけど一部消してもらうか。 どうせあのサーバが届いたらまた移すんだし。あ、明日秘書さん休みジャン。 どうしよう……勝手に消すのもよくないしなぁ。
不要ファイル消したらなんとか今やってる作業は続けられることに。 #pre ファイルシステム サイズ 使用中 空き 使用% マウント場所 /dev/hda6 62G 59G 232M 100% / /dev/hda3 46M 8.8M 34M 21% /boot none 499M 0 499M 0% /dev/shm #endpre うーん。
October 26, 2005
Juman/KNPのRubyバインディングってないの? 19:54
- Permalink
- Comments (2204)
- Trackbacks (0)
Ruby
ないの?
今後研究室にRubyistを増やすには必要なんだけど、誰か作ってないのかな……。 ないなら作ってみるのも勉強になるしおもしろいんだけど、 やることがたまってきてるんだよねー、最近。レポートとか(´・ω・`)ショボーン
October 27, 2005
コードが腐っていく 22:33
- Permalink
- Comments (57)
- Trackbacks (0)
Ruby
ここんとこなかなか触れなかったんですが、久々に2ちゃんねるブラウザのプログラムと向き合いました。
まず触っていなかった間にRuby-Gnome2 0.14.0が出て、別パッケージだったruby-gtkmozembedが 吸収されました。
研究室のLinux(Vine 3.2)にブラウザ開発のための環境を作らなければならないんだよね。 とりあえずgtkmozembedだけmakeして入れることに。つーかVineのGtkはまだ2.4だったのか……。 (うちのはSeedなので2.8)
動かしてみると、こんなエラーが。
/usr/local/lib/site_ruby/1.8/gtkmozembed.rb:10: undefined method `set_log_domain' for GLib::Log:Module (NoMethodError)
Ruby/Glibについてはマニュアルがまだ書かれてない。 まーLogって書いてあるし、大丈夫だろうてことでgtkmozembed.rbの10行目をコメントアウト。
それでもまだ動かない。Ruby-Gnome2が古いからなのか、Gtkが古いからなのか、2つくらい メソッドがNoMethodErrorに。これらもコメントアウトしたり置き換えたり。うーん。まーなんとか動いたけど。
にしても、1カ月しか経ってないのにコードが汚く見える。 少し実装の詳細を忘れてしまっただけで読みにくくなるってことは、やっぱりまだまだしょぼいなー俺。 仕方がないのでしばらくリファクタリングします。
October 28, 2005
OpenOffice.org 2.0キタ━!! 04:26
- Permalink
- Comments (1936)
- Trackbacks (0)
Linux
出たよ日本語版。
とりあえず条件反射的にVine 3.2にインストール。
$ tar zxvf OOo_2.0.0_LinuxIntel_install_ja.tar.gz $ cd cd OOO680_m3_native_packed-3_ja.8968/RPMS/ $ su # rpm -ivh *.rpm # cd desktop-integration/ # rpm -ivh openoffice.org-freedesktop-menus-2.0.0-3.noarch.rpm # ←メニューに追加
メニューの追加、うちのKDE 3.4はOKだったけど、Gnomeはしらね。
出たのはいいけど使うのかどうか……。研究室でMS Office買ってくれたからねぇ。 良くないな。お金のあるところにいると環境がMS化してしまう。 何が良くないって、ソフトに頼ってしまって苦労をしたがらない体質になってしまうこと。 「Linuxめんどくせー」って言って避けてる人は、実は損してるんですよ! とついでにLinux厨が煽ってみるテスト。
October 29, 2005
Ruby-Jumanを作りたいんだけど 00:02
- Permalink
- Comments (2228)
- Trackbacks (0)
Ruby
結局やってみようかとw でもムズイお。
SWIGを使って Rubyバインディングを作ろうとしてるわけだが。 まー大体スタンドアロンでjumanを使う場合に呼ばなきゃならない関数ってのはわかったんで そのバインディングを作るだけなんだけど、結果を出力する最後の肝心なところでうまくいかない……。
char **print_best_path(FILE* output); char **print_all_mrph(FILE* output); char **print_all_path(FILE* output); char **print_homograph_path(FILE* output);
こいつらなんだけど、結果をoutputに書き出すようで。これはRuby側としては使いにくい。 そうすると返り値をもらえばいいかと思うんだけど、ホントに返り値に結果入ってるのかな……。 確かこんな感じでやったらfprintfのとこで落ちたんですけど。
char** result; result = print_best_path(NULL); fprintf(stderr, "%s", result[0]);
Cが久々すぎて、なんか大事なこと忘れてるのかな俺。つーか、そもそも返り値に 結果が入っているっていう確証がなかったりするんだが……。
outputのほうを使うとするなら、使い方はこうなるのかな。
result = StringIO.new Juman.print_best_path(result)
でも実際やってみるとTypeErrorが……。
Exception `TypeError' at test.rb:9 - wrong argument type IO (expected Data)
期待されているクラスはDataだと。これ、何……。リファレンスマニュアル見るとnewできないとしか書いてないし、 どう利用すれば……。
ちなみに、Jumanに添付されてるPerl版は別のプロセス作ってJuman動かしてるみたい。 うーん、それもありかなぁ。プロセスについてはほとんど知識がないんだけど、 どういったハンドリングが必要になってくるんだろう。 せっかくだからそっちを勉強するか……さよならSWIG(ノД`)
一応作ってみたやつはJumanのRubyバインディングにあるよ。
例題で学ぶLinuxプログラミング 18:21
- Permalink
- Comments (2312)
- Trackbacks (0)
Linux
Linuxのプロセスについては、なんと自分本持ってました。 『例題で学ぶLinuxプログラミング』がそれで、 以前『Linuxプログラミング―例題で学ぶUNIXプログラミング環境のすべて』と間違えて 買ってしまったという、いわくつきの本w
買ったのは半年前。半分くらい読んで意味さっぱりなので本棚に押し込んでしまったんですが、 やっとこの本が説明している内容がイメージできるように。やっぱり何かを勉強するには、 それ自体をまず見て触ってからやるべきだよね。そのほうが理解が早い。
でもこの本に関しては、意味プーだった原因は翻訳にもあるはず。ひどいんだからこれ。 amazonのレビューでも、
-
あまりにも翻訳がひどすぎる。これでお金を取るのが信じられない。
-
読むのが辛い
-
この訳者・監修者の本は、私は二度と購入しない。
-
訳が悪く、何を言っているか分からない所が多いです。
と酷評されてます。(※強調部分はオレが手を加えました)
例えば、こんな文章があってすごく困る。
ゾンビ・プロセス(zombie process)は親がwaitかwaitpidのある終了状態(exit status)を得る前に終了「してしまった」子のプロセス。
(snip)
反対に、孤児のプロセス(orphan process)は親がwaitかwaitpidを呼ぶ前に終わってしまった子プロセスのことだ。
例題で学ぶLinuxプログラミング
工工エエ(´Д`;)エエ工工 Linux勉強中の人でもすんなり頭に入るの? これ。 親が終了してしまったのか、子が終了してしまったのか、親によって子が終了させられてしまったのか。 うーん。
仕方がないので調べると、Unix Programming Frequently Asked Questions 日本語訳のゾンビプロセスのところに わかりやすい説明が! これを踏まえて前の文を直してみる。
- ゾンビ・プロセス(zombie process)とは、終了した子プロセスのうち、まだその親プロセスによって終了状態の取得がされていない(wait, waitpidが呼ばれていない)ものをいう。
- 孤児のプロセス(orphan process)とは、親プロセスが先に終了してしまって親がいなくなった子プロセスのことだ。
これならオレの鈍い頭でもすっきりだ。
ちなみに孤児になったプロセスはそのあとinitが新しい親になるんだけど、 これはこの文のあとですぐ説明があるので、 ここでは「親がいなくなった」と表現しておく。そのほうが「孤児」っていう名前に納得がいきやすい。 そうすると「ソンビの説明は?」ってことになるけど、これはその文章のあとに書いてあるんで。
扱っている内容は結構いいんだけどなぁ。レビュアーの人も言ってたけど。 gcc、プロセス、シグナル、パイプ……知りたいことばかり。
