もしくはtumblogger?なんか使い方が違う気がしてきた。ネタへの嗅覚が弱いというか。もっと刹那を切り取る感じでいかなければならないように思われるのだが、となると他にツッコミ向けのスペースが欲しいなあ。
Know Your Enemy/Rage Against The Machine, Swallowed In The Sea/Coldplay, Zee Deveel/Incubus, Supermassive Black Hole/Muse, Fall In Love With A Girl/The White Stripes, Shape Of Things To Come/Audioslave, The Lifting/R.E.M., Fault/Taproot, Starcrossed/Ash, Enterlude/The Killers, Too Bad/Nickelback, Some Might Say/Oasis, The Sign/Foo Fighters, Finally Awake/Hoobastank, We Suck Young Blood/Radiohead, Space Dementia/Muse, Breakout/Foo Fighters, Free Me/Foo Fighters, Virginia Moon/Foo Fighters, Van Tango/Franz Ferdinand, Oil And Water/Incubus, Bang And Blame/R.E.M., Parabola/Tool。
プレーヤの自動選曲も悪くないが、邦楽が引っ掛らないのが難か。
IncubusとRage Against The MachineとToolはガチだなあ。他は体調次第なとこがあるけど。
長い文字列の変換で止まる。
require 'rjb' include Rjb JString = import('java.lang.String') sjis_kj = "\x8a\xbf\x8e\x9a\x83\x65\x83\x4c\x83\x58\x83\x67" 500.times do sjis_kj += sjis_kj $KCODE = 'sjis' s = JString.new(sjis_kj) s.toString() GC.start end
zsh/2 971 [1] % ~/ruby18/bin/ruby test_kj2.rb test_kj2.rb:10:in `new': unknown exception (NullPointerException) from test_kj2.rb:10 from test_kj2.rb:7:in `times' from test_kj2.rb:7
SEGVならわかるが、Java側からNullPointerExceptionが飛んでくるのは理解できない。しかし限界なので寝る。あとOpenBSDのコードをさらっと見るTODO。priorityの件。
当然すぎて書くのも憚られるが、どんな言語だろうと未定義の定数を使っちゃいけない、というだけの話。
phpの連想配列の添字は必ずダブルクオートで囲むこと!?それって、PHPの仕様が未定義の定数を使用した場合、ちょうどstringとして コールしたかのように(CONSTANT vs "CONSTANT")、 PHPはその定数自体の名前を使用したと仮定します。
だからあまり問題が表面化だけであって、たかがダブルクオート、されどダブルクオート、、、いい勉強になりました
って、そういうことじゃないでしょう。
シンタックスがわかった上で未定義の定数を使うようなプログラマはもうこれ。
あー、こりゃ全然楽しみ方がわかんないや。誰か手取り足取り教えてください。
のでは。いい会社はあるだろうけど。nihilistなのでなんとも言えんけど無意味な対話を見て思う。不人気というよりミスマッチという一文が正鵠を射ている。
まあ少なくともTISとかNTTデータとかでSIやるのがどれだけ空虚なのか晒されたわけで、中の人とかこれから就職しようかとか言う人には逆に良かったんじゃなかろうか。獄門かこれは。
OpenBSDで動きませんかねえ?
その業界が好況かどうかを考える場合、売上より、可処分所得に対する割合で見たほうがいいんじゃないのかなー。北米はサブプライムローン問題以前は一応好況だったわけだし、そもそも可処分所得が多かったという可能性もあるのでは。
まあコンシューマにしか適用できないけど。
IBMのサイトなのに充実している。
RSS配信とかがないのでチェックしていなかったが、何件かあるね。インストールできない件が多い。まあgemで配ってるものの中でもインストール時に気をつかうほうだとは思うが、解決方法は今のところない。jdk-configコマンドとかがあればいいのだが。
RoRで受信したファイルをInputStreamにしたいと書いてあるようだが仕様の勘違いだよな。
Javaクラスのインスタンスをinspectした時何だかわからないってのとRjbのjava.lang.StringのインスタンスとRubyのStringが比較できない件は、理解できなくもない。JavaクラスのインスタンスとRubyクラスのインスタンスを混ぜて使っても、ある程度違和感がないようにすればいいのかね。
Windowsで謎のエラーが出るのは、JAVA_HOMEにスペースが含まれるパスをダブルクォート付きで設定されている時("c:\jdk1.6.0_03 with space")に出る様な感じ。スペースなしで環境変数に指定すれば動作するみたい。
というのを誰か英語で書いてほしい…。
どうでもいいけどATOKいいなやっぱ。
単にSolarisでのやり方がわかんないんだけど、SunFreeware.comからRubyをとってきてインストールしようとすると同じようなエラーになって、mkmf.logは以下。
have_header: checking for jni.h... -------------------- no "cc -E -I. -I/opt/csw/lib/ruby/1.8/i386-solaris2.8 -I. \ -I/usr/jdk/jdk1.5.0_13/include -I/usr/jdk/jdk1.5.0_13/include/solaris \ -I/opt/csw/include -I/opt/csw/include -xO3 -xarch=386 -xspace -xildoff \ -I/opt/csw/include -I/opt/csw/include -KPIC \ -I/usr/jdk/jdk1.5.0_13/include -I/usr/jdk/jdk1.5.0_13/include/solaris \ conftest.c -o conftest.i" /usr/ucb/cc: language optional software package not installed checked program was: /* begin */ 1: #include/* end */ --------------------
報告してくれた人の環境のRubyがどこから来たか聞いて、gemのインストールログを見て、同じだったら追加ソフトウェア入れろでFAなのかね。
追加ソフトウェアってどれ?
HDD空き領域がギリギリなのでイメージ消そうかどうか思案中。
コンパニオンDVDのとこが違うということは、コンパニオンDVDからソフトウェアを追加してみればいいってことかというTODO。HDD空けなきゃ。
追記:具合が悪くなってきたのでよくわかんないまま明日へ。
同じメッセージに関するドキュメントがあるんだけど、そのパッケージがどこにあるのかわかんない現状。
どうにも行位置と呼出順が合わない気がするのだが。
もっそい頑張った。何やってるかはソース見てもらえばわかる。個人的には、各記事にはてブボタン付けたのはシュールだと思う。ソースの下の方に書いてある。コメントにはてブボタン付けたい。あとコメントにはて☆付けたい(←付けた)。
内容をテキストファイルで上げておくので使いたければ適当にどうぞ。保証はしません。
makerss.rb見て思ったけど、フィードのアドレスをヘッダ、フッタで参照する方法が無いのな。
土曜日はtumblrとtwitterとRSS三昧過ぎてダメな日。Solarisを入れようとしたのだが、パーティションの分け方の関係上、インストールできないことが判明してガッカリ。Windows消すかntfsresizeしてUbuntu入れ直すべきかもしれない……!!!
日曜日は鬼剣舞で一関市大東町京津畑地区まで行ってきた。田舎住まいの俺が物珍しく眺めるくらい山の中で携帯も圏外だけど、距離的にはそれほどでもない。冬はわからんけど。なんか活気があったなーというか戸数が当方より全然多いらしい。ショックだ。真剣に見ていただいたので皆喜んでおりました。
あと防火点検をやったそうな。来年6月から火災報知器の設置が義務化されますのでよろしくお願いします。乾燥する季節になってまいりましたので火の元には充分ご注意ください。といったところ。
ソース書いてないと、すごく……後ろめたいです……。
rjbタグ新設。jdk1.6.0+rjb_trunkで以下のコードが実行できる。どう考えても呼出前にIntegerとかに変換してるからなのだが、ずっとこんな感じだっけ?
def test_autoboxing assert_equal(false, Rjb::primitive_conversion) test = import('jp.co.infoseek.hp.arton.rjb.Test') tr = import('java.util.TreeMap') tree = tr.new tree.put(1, 128) tree.put(2, 256) test.setSortedMapS(tree) assert_equal 128, tree.get(1).intValue assert_equal 256, tree.get(2).intValue end
Hashのキー,値にFixnumがそのまま使える点に注目。
あんまり関係ないけどさ、以下は覚えておくべき。
Integer.hashCode():この Integer オブジェクトが表すプリミティブ型 int 値に等しい。
Integer.equals():結果が true になるのは、引数が null ではなく、このオブジェクトと同じ int 値を含む Integer オブジェクトである場合だけです。
Collections Framework インタフェース内の多数のメソッドは、equals メソッドとの関連で定義されます。たとえば、containsKey(Object key) メソッドの仕様は、「このマップコレクションに (key==null ?k==null : key.equals(k)) を満たすキー k が含まれる場合にのみ、true を返す」というものです。."この仕様は、「null 以外の引数 key を使用して Map.containsKey を呼び出すと、キー k で key.equals(k) が呼び出される」と理解すべきではありません。実装は、最初に 2 つのキーのハッシュコードを比較するなど、equals 呼び出しを回避するための最適化を自由に実装できます。(Object.hashCode() 仕様では、等価ではないハッシュコードを保持する 2 つのオブジェクトは等価ではないことが保証されます)。通常、さまざまな Collections Framework インタフェースの実装で、実装者が適切と判断するなら、基盤となる Object メソッドの指定された動作を自由に利用できます。
コンストラクタでヒープエラーが発生してもわからない件に対処するため例外のチェックを足した。JNIのAPI呼出と例外のチェックはもうセットでもいい気がするんだけど、うまくまとめらんないかね。ラップするかマクロでやるぐらいしか思いつかない。
まあそれはいいんだけど、Object.finalize()をオーバーライドしても、プロセスが終了するまでに実行されていない気がするのだが、シスプリ©Yuguiで試しているので出力されないだけかも。さて…。
Java-RubyをまたぐGC
Ruby側のGCのタイミングをObjectSpaceで拾うことができるので、そこからJava側にGC対象のオブジェクトを知らせることで何とか実現。単にJavaをラップしている代理オブジェクトはこれでいけた。
ただし、Javaから呼ばれるRubyオブジェクトについては、JavaとRubyの両方から要らないと判断されない限り捨てられない。いろいろ考えた結果、これらのオブジェクトは手動で削除することにした。
[yajbについていろいろ より引用]
究極的にはこの辺の気がするけど荷が重い。とりあえずyajbのソースを読むというTODO。
俺が使っているバージョンの話。
日々の出力のほうにLINK要素が既にあるのでそこはいい(が未来方向に進むのはどうか?)。
plugin/00default.rbを編集してLINK要素のHREF属性に絶対URLが出るように変更する。うちでは#{@conf.base_url}
で取れてるけど他は知んない。
skel/diary.rhtmlを編集して全体を<div class="autopagerize_page_element">
で囲む。
skel/day.rhtmlを編集して下のHR要素を<div class="autopagerize_insert_before">
で囲む。
便利かどうかはわからんけど試してみるべし。
しかしまあ、当然皆やってるよな。
Module::instance_methodでレシーバと関連付いてないメソッド(UnboundMethod)が生成される。元に戻したい場合は、そのメソッドが定義されているクラスその物に対してもう一度bindしてあげる必要がある。しかーし、Object.methodで取得してbind→ダメ、method.inspectからクラス名を取り出してModule.const_getで取得してみる→ダメ。以下メモ。
eval.c:umethod_bind if (FL_TEST(data->rklass, FL_SINGLETON)) { rb_raise(rb_eTypeError, "singleton method bound for a different object"); } ruby.h #define SPECIAL_CONST_P(x) (IMMEDIATE_P(x) || !RTEST(x)) #define FL_ABLE(x) (!SPECIAL_CONST_P(x)) #define FL_TEST(x,f) (FL_ABLE(x)?(RBASIC(x)->flags&(f)):0) #define FL_SINGLETON FL_USER0 struct RBasic { unsigned long flags; VALUE klass; }; FL_SET(klass, FLAG)でセットする FL_SINGLETONがセットされているのはclass.cの VALUE rb_singleton_class_clone(obj)とVALUE rb_make_metaclass(obj,super)
method_missingで頑張るという手もなくもないが、それをRuby(ruby_1_8)が受け付けるか微妙だ。
"Biz360 spider (blogsmanager@biz360.com; http://www.biz360.com)"
"Modiphibot/0.9 (Rev.Nagayama1; http://www.modiphi.com/)"
"Mozilla/5.0 (SnapPreviewBot) Gecko/20061206 Firefox/1.5.0.9"
"disco/Nutch-1.0-dev (experimental crawler; www.discoveryengine.com; disco-crawl@discoveryengine.com)"
core.rbのコードは、eval.cのdefine_methodのとこに載ってる方法とだいたい同じなのね。instance_evalの中でdefine_methodしてるぐらいの違いしかない。ということはRubyのバグじゃないのか。
どうでもいいけど、Rubyは低レベルなところを抽象化してくれてるだけで、その思想とか哲学自体が変更可能だ。つまり、仕様は無いからソース読め。
あれ、クラスメソッドとモジュールメソッドって、意味的に、何か違うの?違わんらしい。どのみちクラスかモジュールの特異メソッド扱い。
instance_eval(rb_obj_instance_eval())の中では特異クラス扱いなのね。ということは、instance_evalする時に呼び元がModuleかClassなら特別視する必要がある?でなければUnboundMethod::bind()かModule::instance_module()あたり。でもあれか。クラスの特異クラスって今のRubyには無いよな。じゃあエラーになるのはやっぱり変か。
Kagemusha的には結局これだけかね。
Index: eval.c =================================================================== --- eval.c (リビジョン 13964) +++ eval.c (作業コピー) @@ -9340,7 +9340,7 @@ Data_Get_Struct(method, struct METHOD, data); if (data->rklass != rklass) { - if (FL_TEST(data->rklass, FL_SINGLETON)) { + if (TYPE(data->rklass) != T_CLASS && FL_TEST(data->rklass, FL_SINGLETON)) { rb_raise(rb_eTypeError, "singleton method bound for a different object"); } if (TYPE(data->rklass) == T_MODULE) {しかしこれはどうなんだろうか。
irb(main):001:0> module Foo;def self.aa;:aa;end;end => nil irb(main):002:0> Foo.aa => :aa irb(main):003:0> Foo.method(:aa).unbind.bind(Foo) => #<Method: Foo.aa> irb(main):004:0> Foo.method(:aa).unbind.bind(Foo).call => :aa irb(main):005:0> class Bar;end => nil irb(main):006:0> Foo.method(:aa).unbind.bind(Bar) TypeError: bind argument must be an instance of Module from (irb):6:in `bind' from (irb):6
Object#finalizeの実行は保証されていないでしょう
まさしくその通りであり心より恥じる。
Rjbが参照を解放してるかどうか見たい。Runtime#addShutdownHookか。あとでやる。
読了。俺の思うスティーブン・キングらしさとは違うけど、悪くない。つか「ヘッドダウン」いいよ。
irb(main):029:0> class String irb(main):030:1> alias_method :original_initialize, :initialize irb(main):031:1> def initialize(str = '') irb(main):032:2> original_initialize(str) irb(main):033:2> @double = str*2 irb(main):034:2> end irb(main):035:1> attr :double irb(main):036:1> end => nil irb(main):037:0> x = "" => "" irb(main):038:0> x.double => nil irb(main):039:0> x = String.new("hoge") => "hoge" irb(main):040:0> x.double => "hogehoge" irb(main):041:0>
呼ばれてほしい訳ではないが。
ソース見りゃ済む話だけど、要は自分で定義したクラスとかだとrb_class_new_instance()からrb_obj_call_init()が呼ばれるのだが、CレベルでStringを生成する際は大概rb_str_new2?を使用する故initializeが呼ばれぬのだよ。
ruby_1_8の話であり他は知らん。
手続き型言語の構文が二十数年かけてRubyとかPythonに結晶化したように、関数型言語の構文もいつか結晶化するんだろう、いやむしろ世界のどこかに関数型言語のRubyとかPythonみたいなものがもうあるんじゃないか、とか書こうと思ったんです。
でも待てよと。
関数型言語のRubyとかPythonみたいなものって、Lisp系言語の事じゃないの?Rubyのコードが平易に見えるのは、動的型であるのも理由の一つでしょ。型付手続き型言語はC以来あんまり変わってないよな。平易な型付手続き型言語って見たことないかもしれん。
じゃあ型付関数型言語の構文が平易になるのはまだ先か?
MinCaml忘れてた。
追記:型付→静的型。単に字数が少ないからじゃないかという気もする。じゃあ長い変数名つけたら同じか。例えばlib/date.rbのメソッドの中でy,m,dという変数名を多用しているが、これがyear,month,dayだったらやや重くなる(気がする)。と考えると、そのものズバリな変数名(databaseConnectionとかtableSalesOfMonthとか)をいちいち付けるのは野暮。しかしそれにしてもスコープの広い変数の名前は長くなる
。まあlib/date.rbというかDateでy,m,dと書いたら普通year,month,dayのことだろう、という暗黙の同意があるから問題がないのであって、つまり普遍的な事象に関する文脈に沿った変数名だから短くてもいい。しかし、では普遍的な事象でない場合どうなのかとも思う。唐突にSIの話になるがプログラマはそのプログラムを書いている間は出来うる限り業務のプロでもあるわけだが、その仕事が終わってしばらくしてから読む場合、暗黙の同意を元にした変数名では読めないのではないか。
バランスの問題に過ぎないとも思う。
どうでもいい追記:井上陽水で「型がない」。
真に型のない言語ってあるのか?
Before...
<< 桑島雄一郎 [メールかRSSで配信してくれないとチェックしきれないですね。 文字列ってhttp://www.kuwashima.o..]
<< arton [メールモニター機能はRubyforgeは持っています。左上のほう(ディスカッションフォーラムと書いてある行の下)をチ..]
<< 桑島雄一郎 [ログインしてないと表示されないんですね>モニター機能 BTSもどこかからモニターできるんですか?]
<< arton [全然記憶にないし、見てもわからないですが、バグレポートが登録されるとメールが来ます。プロジェクトオウナーだからかな?]
<< 桑島雄一郎 [admin画面で設定できるみたいですけど、設定を変えるとどうなるのかよくわからないのでやめときます。 RSSもMLも..]