結構前の「近況」です。
特に配布物には変更は無し。追加も無し。
Palm関係の方で、携帯電話などの小型端末で用いられるFEPの新しい方式が話題になってました(これ)。要はキーの数を減らしたいと。そのために、かなを入力させずに、かなの子音部分のみ入力させて変換させるもののようです。例えば、「私は頭が痛い」は「wtshatmgata」になります(ア行の子音はaとする)。 面白そうだったので、Rubyを使って実験してみました。さすがにコンソール画面でやると死にそうだったのでWindows上で本計画の部品を使ってモックアップ組んでみました。
辞書はPalmのJ-OS用の変換辞書をRubyでパースしました。残念ながら活用に関する情報が落ちていたため、活用する品詞に関しては実験を放棄。上の例文なら「私は頭が痛」まで を目標に。変換方法は単語毎に人間が変換を指示する方式。(スペースの入力で)
結果としては、当たり前ながら、「変換候補がむちゃくちゃ多い」でした。
実際は入力単語間の関係などから単語の出現予測とかをするそうですが、それ抜きではひどいことになりそうです。
しかしながら私の経験上からは、そういうAIっぽいものや文章予測のものってまっとうな動きをするとは思えず、したがってこの変換方法も「どうだかな〜」という感じを持ちました。単に私の入力が変なだけかもしれませんが。
いやあ、しかし、Hashって素晴らしいですねえ。
また、あっさりこういうことが実験できてしまうRubyって素晴らしい。
で、これをやってるときに思ったのですが、本計画のコンボボックスの選択が変更されたときに火を吹くメソッドって、selchangeだったんですね。selchangedじゃなくて。エディットコントロールだとchange。changedじゃなくて。
はっきり言って不統一です。混乱します。ということで、そのうち変えます。
changedに変えます。
やりたいことはいろいろ溜まってきているのですが、こういう新しいことを 始めちゃうから、消化できないんだよなあ...
swin側、vruby側両方の更新。
swin側、Fontのパラメータにcharset追加。LWFactory#newfontとかFont#params、CommonDialog#chooseFontなどに変更
vruby側は上記swin側の変更に伴うものの他、FontStructというテキストの属性情報を扱う構造体を作成。VRCommonDialog#chooseFontの返り値はこれになりました。
現状ではLWFactory#newfont()への引数は
等のようにしていましたが、f[0]の代わりにf.paramsとして下さい。
f=chooseFont
@screen.factory.newfont(f[0])
そのほか、RichEditまわりの強化。
ずーと悩んでいたのは、"\0"と書くところを'\0'と書いてハマってたのでした。
Cのノリで書くとハマります。ふう。
あとRichEditのサンプル付けました。
ちょっと前にMoonWolfさんがruby-listに出されたgetrd、RubyLexの良いサンプルでした。なるほど、ああやって使うものだったのか。
richeditで動きがおかしいのはフォントだけらしい。
ちょっといろいろさわる予定なので、既存のモノと互換性とか無いような変更が加わる
可能性があります。というか、フォントのこと知らなさすぎ>私
手元ではとりあえずCHARSETに関してパラメータが追加されています。
いい加減、配列ではわかりにくいので、Structにするかも... ←いろいろ
19日の文、事どもなどってなんじゃらほい。源氏物語とか読み出した影響か?
とりあえずアホなprintf()が残っていたのを消しました。swin側更新。同時にRAAも更新。 (予定)
うーむ。richeditは謎が多い。ちゃんと動きませんな。って、動かない、って書いてましたっけか。
作業は出来てないのですが、発見された事どもなど
swin側、SWin::Dialog#newに、デバッグ用のしょうもないprintf文が残っているじゃないですか。消します。RAA更新したら出て来るなあ。こういうの。
Menu関係で使っているAPIって、半分滅びかかったAPIを使ってたようです。 修正すると断言はしませんが、したいような気が。
vruby側、VRDialogは何故newで作られるようになっとるのでしょうか。他のウインドウとの統一を考えるとVRLocalScreenから作るべきでしょう。で、修正します。
richeditに対して、RichTextを用いて書式付きでテキストをアクセスする手段がわからない。
コールバックを使わねばならない?
そうすると「Callback」なんてクラスを作らねばならないかも。Ruby本体はOSからみてシングルスレッドで動くべきだろうから、すっごく危険。(無理とは限らない)
だいぶ前に戯音匠者さんから聞いた話を使うべきなのかなあ。でもなるべくなら避けたい。
vruby側、RichEditコントロールで、フォントや色を変えられるようにしました。
また、richedit2.0があったらそっちを使います。
EM_SETCHARFORMATが動かないというのは単なるポカミスでした。
swin側、001008でraaを変更しに行きます。結構長くほったらかしでした。
さすがに32KBだか64KBだかの壁があるエディットコントロールは不満が多いので
RichEditコントロールに手を付けました。VRRichedit。
しかし今現在はサイズの壁の無いエディットコントロールとしてしか使えません
(メソッドを全然実装していない)
当方では3MBのファイルが開けることまでは確認しました。Rubyであっさり3MBの
Stringが作れたことにもちょっと驚き。驚くようなことじゃないような気もするけど。
ex.
addControl VRRichedit,"richedit","",0,0,200,400
@richedit.text = open('bigfile-3MB.txt').read
p @richedit.text.size
richedit2.0があったらそれを使うようにしようとしていたのですが、EM_SETCHARFORMATを
成功させることが出来ず、さらにデフォルトのフォントが変なので断念。
richedit1でもEM_SETCHARFORMATを成功させることが出来ません。どうしてだろう...
これが駄目だったのでricheditの実装が止まったのでした。
選択範囲の取得・設定などのメソッドは16bitの時のままなので、
この辺は現状では巨大ファイルなどでちゃんと動かないかもしれません。
Windowやリソース系などがFactoryから生み出すように浮かせて実装しているにも関わらず、
Win32APIを直呼びしてたら駄目ですね。適当に浮かせます。
Win32APIのインスタンスを保持するモジュールを一つ作り、ウインドウなどクラスにinclude。で、Windowなどのインスタンスが生成されたときに初期化するようにすればいいかな。
ううむ。スレッド殺したらスタックはそのまま? なんてひどい... >Windows
swin側変更。メッセージへの返り値の件、WindowだけでDialogへの作業を忘れてたのでそれ。
dialogで死ぬのはうちだけでした。Makefileの不備。ヘッダを書き換えたら*.oも 作り直しましょう。
UnicodeじゃなくてANSI(SJIS)形式でメッセージをもらえるようにswin側と vruby側双方改変。VRMessageHandlerの所から変えてます。
4000円で安売りしてた2MBのRuputer買っちゃいました。gccでプログラムできる腕時計として遊べることを期待。PDAとしてはちょっと辛そう。
この機械の最大の欠点は「プログラム起動がめんどくさすぎる」ことでしょう。Palmを
使っている後だからそう思うのかもしれませんが、腕時計にWindowsのエクスプローラみたいなのを載せなくても...
しかし、waba載せてる人が居るらしい。
近頃rubyが死ぬときにバージョンを表示して死にますが、こういうもんなんでしょうか。 cygwin版でもlinux上のでも出ます。
dialogを開くときにruby死ぬようになってますね。修正する予定。
Tabに乗っけたコモンコントロールのメッセージが一部拾えない件、なんとコントロールからはUnicode形式のメッセージが飛んで来ていたのでした。(普通のANSI(SJIS)のとはMessageのIDが違う)
これに対処するにはコンテナ側がWM_NOTIFYFORMATに応答し、ANSI形式でメッセージ送るように返事をしなければ行けません。
と、ここに来て気づきましたが、現在のWindow#msghandlerは値をメッセージ送信元に返せるようになってませんね。(げげげ)
ということで、メッセージの返値を設定できるように変更予定。Msg#retval=() なんていうメソッドを追加します(多分)。実は作業したんですが、tabコントロールの問題が解決するようには、まだ出来てません
公開が何時になるかは不明っす。しかし、ついにUnicode/SJISの問題が浮上か...
Rubyのソースを解釈するにはrubylexなんてのがあったんですねえ。これ使えばいいのか...
本編手つかず。よそ様のお話。HotLists巡りも。
artonさんのRuby256本の邪道編が出たことだし、というわけでもないのですが、
ActiveScriptRubyで遊んでみました。普通にwin32oleででも、
WScript.Shellはなかなか使えそうなObjectらしい。
あと、ActiveScriptRubyのDHTML。実はDHTMLは初体験に近く、
想像が付くとは言え、ちょっと驚き。(普段、NetscapeでもJavascript止めてるせいかな?)
やっぱり本計画にもOLEコントロールのコンテナ欲しい...
ただ、本計画と私の知識はCOMの世界の外側に居ますので、
MoonWolfさんとこの
web巡回のdailydoc、いきなりサンプルにこのページを加工したのが入ってて驚きました。
毎度の御来場、ありがとうございます。
ちと手が回りきってませんので、まだ試用できてません。
typo魔人様、名称簿集とか*5とか、さりげにさすが... (って、読んで気分害されちゃうと困っちゃうんですが)
ZnZさんとこの、yieldで渡したモノをどこかにとって置いたら...の話。 変数のスコープはイテレータで閉じられますけど、オブジェクトは外に持ち出せるんですよね。前にやってた画像処理の拡張ライブラリはもろにこれに引っかかってます。 まあ、持ち出すな(外部のスコープの変数に代入するな)、って仕様にしておけば いいんでしょうけど、どうにかしてトラップできるのかな。
また長くなってしまった...
いろいろ試してみましたが、TabControlの上に貼ったTreeviewのWM_NOTIFYが一部拾えません。謎。VRTabControlを無理矢理VRPanelと置き換え(tab作成はダミーで潰し、selectedTabは0を強制的に返すだけ)たら問題ありません。うーむ。
ついでにtypo発見。2カ所間違えてるので問題が発覚しませんでした。 我ながらnofityってなんだ? (特に問題ないので公開物の修正はしてません。) しかしtabのこの問題、内部のバグ出しに役立ってますね。
MoonWolfさんところ、結構な勢いで開発が進んでますね。私は減速中なんで
うらやましい。
ってここに書いてたら読みますか?
(巡回スクリプトの前バージョンの定義ファイルには、ここ入ってましたよね。)
tabにコモンコントロール(Treeview)を貼ってみたところ、クリックとか基本的なメッセージしか拾えませんね。コモンコントロール自身にはフィルタとかかかってるんでしたっけ? なんとかせねば。
上記追求中にvrinitが2回呼び出されていることを発見し、修正。 結構基本的なところでした。すんません。
rubyのmswin版はCTRL-C関係、厄介そうですね...
私はよくわかっていませんが、コンソール関係がなんか変だということだけは感じてます。
特にWin9xのはDOSのを引きずってるってのがあるので、余計に変なのかもしれませんけど。
(昔はDOSのゲームがそのまま出来て嬉しいこともあった)
artonさんがWindowsでrubyを使うための本を出されたそうですね。(邪道?)
まだ発売日前なのに見たという方がちらほら...
artonさんの所のActiveScriptRubyですが、うちでVBのサンプルが走らなかったのは
VBのバージョンが古かったせいでした。「インストールに失敗する」という誤解を招きそうな表現で書いちゃってましたね...
で、興味を引いたsitehwndですが、あまり関係ありませんでした。使ってる行をコメントアウトしても関係ないんだもん。(この件、artonさん本人からも情報頂きました。)
ruby-1.6.1。普通にconfigureしてmakeで標準の拡張ライブラリができん... -DUSEIMPORTLIB(だったっけ?)を外すとmakeは通るようになるものの、動かないのではしょうがない。cygwin側の問題のように思えたのでcygwinを1.1.4にアップデートすると 問題が無くなりました。駄目だったのは1.1.2だったような(もはやわからない)。 しかしWindowsで使うときは--with-default-kcode=sjis付けちゃいますね。やっぱ。
makeは比較による依存ツリーの作成だから、そういう意味で抽象的に設計できないものかなあ。などと考えてみたり。(日付)比較と存在チェックが出来るtargetクラスと、それを元にactionを動かすmakeの大元クラス。でもファイルくらいでしか使わないかな。 いや、作業スケジュールの作成とか...は考えたくないですな。今の所(自爆)。
せっかくタブを実装したので、おまけのページのrbとrdを見るやつ、一つにまとめてしまおうかと思ったのですが、やる暇無し。まあ、そのうち。
なぜか作業が進んでいます。こういうのを逃避といいます。
両方とも更新。とはいえ、swin側はシステムカーソルをセットしたときには、その カーソルオブジェクトを保持するようにしただけです。
vruby側は、タブコントロール実装しました。そのままだとタブの選択に応じた各コントロールの表示非表示まで自力でせねばならず、利用時にめんどくさいので左記動作を自動で行うVRTabbedPanelってのを作っています。サンプルも追加。
その他、VRPanelがvruby.rbに戻りました。
しかし、イベントハンドラが複数ある場合の処理に難があると感じています。
super使えばいいやと思ってましたが、忘れますね。
かなり本計画の根幹に関わる問題かも。
ruby-1.6でクラス変数って新しいスコープが誕生してますが、勉強中
本計画だとウインドウクラスを覚えてる所をクラス変数にすると嬉しいんでしょうか。
当該部分、イマイチ何故現状のようになってるのか自分でも忘れてしまってますが(汗)
久々にswin側更新。ruby-1.6の導入に手間取り、結局現在はバイナリ配布を使わせていただいております。でもswin.soを作るためにmkmf.rb書き換えたりしてるのでした...
swin側変更点。
・Windowなどのクラスでnew特異メソッドを使うとエラーを返すように
・Windowに、propertiesというメソッド追加(返り値はハッシュ)
Window#propertiesは、window.properties["font"]=font
てな感じで利用予定。変数fontの寿命が尽きてもフォント自身がGCで削除されない
ように使います。fontだけじゃなくて他にもいろいろ利用予定。
もうじきマジで更新が激遅になるかも...
すんませんが、作業全然進んでません。ruby本体まわりで作業発生中。
rubyを1.6に上げるとMarshalのフォーマットが変わってるんですね。
ruby-1.4でdumpしたものをruby-1.6でloadしようとするとWarningをもらいます。
ちょっとはVisualuなおまけにある
rbdview.lzhに入っている物はruby-1.4でdumpしたものが入ってますので、ruby-1.6では
Warningもらいます。そのうちruby1.6の分も作っておきます。というか、rubyのバージョンを見て切り替えればいいんですね。
本線でなく、寄り道中。また話が長くなってしまった...
ActiveScriptRubyのサンプルにあった、sitehwndというメソッド(プロパティ?)に
非常に興味を覚え、ActiveScriptRubyのインストールに挑戦。敗北。パスを通しても
なんとか.OCXが無いと言われます。しょうがないのでアンインストールしたら、.rbに
関連付けていた項目が全部消されてしまいました...
参考
REGEDIT4
[HKEY_CLASSES_ROOT\rb_auto_file\shell\run]
"EditFlags"=hex:01,00,00,00
[HKEY_CLASSES_ROOT\rb_auto_file\shell\run\command]
@="ruby.exe -Ks \"%1\""
[HKEY_CLASSES_ROOT\rb_auto_file\shell\run_without_console]
"EditFlags"=hex:01,00,00,00
@="run without console"
[HKEY_CLASSES_ROOT\rb_auto_file\shell\run_without_console\command]
@="rubyw.exe -Ks \"%1\""
で、とりあえずmingwから始めてみることに。(脈絡無い?) ebanさんとこにbmingwを取りに行ったら rb2exeなんてものが。
で、昔から作ってみようと思っていたものを作ってしまいました。複数のrubyスクリプトを1本にまとめるアーカイバ。しかも実行できるというやつ。
requireとloadを上書き定義します。で、アーカイブ内のファイルをrequireとloadで読めます。実行されるのはアーカイブ内の最初のファイル。ちょっと名前空間を汚してしまいます。REAR__というモジュールが内部で増えます。
アーカイバのスクリプトはこれ(rear.rb)
名前はrarにしようかと思ったのですが、それは
ふなださんのところに既に
あります。で、実行可能と言うことにちなんでeを入れてrearにしました。
$ ruby rear.rb -create archive.rb script.rb script2.rb ....
という感じでアーカイブを作成します。
ruby archive.rbとすると、script.rbが実行されます。script.rbでrequire 'script2'
としていると、script2.rbはアーカイブ内から読み込まれます。さすがにshared-libraryはアーカイブに加えられませんが、$:に実行時のarchive.rbのパスを追加するので、同じ所に置いておけば読めるようになるはず。
$ ruby rear.rb -list archive.rbでアーカイブ内のリスト表示。
$ ruby rear.rb -extract archive.rbでアーカイブの展開。
rb2exeと一緒でrear.rb自体がアーカイブ(とはいえファイル1つしか入ってません)になってます。Unixでも動くでしょう。そのうちRubyもののページに上げます。
Winだと1つにまとめた物をrb2exeでEXEに出来ます。
rb2exe、うちのWin98環境が悪いのかもしれませんが、DOSプロンプトが死んだり、ウイルスチェッカーが発狂したり(システムを道連れにする事もあります)、作成したexeがrm出来なくなったりします。ちょっと戦々恐々。
rear.rbもrb2exeして使えるようにした(exe化したrearでアーカイブを作成すると、exeを作成する)はずなのですが、うちだと"wb"でオープンしてもtextモードの動作をしてstubを壊してしまいます。うーむ。
Visualuなおまけのページの
rubyファイルとRDのビューア、タブをスペース2つとして
見なすように変更しました。タブが入っていても、規則正しく入っていればそれなりに動きます。
上のrear.rbを使って、
$ ruby rear.rb -create rbv.rb rbview.rb cview.rb rbswiz.rb
とすると、rbv.rb一本にまとめられます。rb2exeでrbv.exeにしてもそのまま使えます。
$ rbv some.rbなどと出来ます。
とかやってると、mingwさえ導入できてないのでした。
本業多忙とpalm側2件(PalmSyncとSecretDA)に用事があり、こちら側はちょっと 止まるような気がします。残業枠特別拡大は嬉しくな〜い。まだしばらくは猶予があるかも。
Visualu(?)なおまけにある、rbdview.lzhですが、rbdwiz.rbの中の RDDocumentWizardには、無駄なメソッドが一つ消し忘れたまま残っています。 rbview.rbで眺めてて気づいたのでした。一応役に立ちました(汗)。
richeditはややこしい...
ということで、swin側、vruby側、共に更新。イメージリストまわり。
イメージリストが追加されたので、vruby側の要求するswinバージョンも上がってます。
使い方とかリファレンスもちょっと更新
rscutil.rbというビットマップをダンプしてbase64かけるものが付属しています
ちょっとはVisualuなおまけってページを 作りました。RubyのソースをみるやつとRDを目次付きで見るものを載せ、GUIビルダのバラック建て(長らく更新してません。今回も更新してません)を移動しておきます。
そういや最近サンプルが増えてませんね。でも、treelist.rbがイメージリスト使うようになりました。
PalmSyncの件をこっちで書いちゃってすみませんね〜。でも向こうは結構(私の使用においては)安定しちゃったので手を入れてません。私の使用方法も安定しちゃったんですね。デフォルトではPreferenceを保存しないので、Palmがクラッシュすると一発では戻りませんのでご注意を。
画像処理物を出せるのはいつの日か...
ちと仕事で疲れてしまったので、いろいろ公開用にまとめきれませんでした。 ってことで今日も公開無し。 でもImageListは作成やBitmapの追加などが出来てます。
rbswiz.rbですが、手元ではRDの目次作るのも入りました。
で、利用例がこういう感じ。(画面例)。
画面例の表示ファイルはOptionParserの古いのを借りております。
(000909注: ファイルを上書きしちゃったのでOptionParserのではなく、vrcomctl.rbの画面例になっております)
いやはや、この表示ソフト、前のrubyソース用のがあったのであっさり出来ました。この辺りの生産性の高さはさすがruby。すばらしい。
あ、rubyソース用の方の画面例が「もっと前の...」に沈みましたね。
こんなのでした。そのうち整理して再掲示します。
ImageListまわりの他、 Bitmapを外部ファイルじゃなくてrubyスクリプト内に埋め込むためのユーティリティrscutil.rbとか、VRScreen#start(form)←(showFormしてmessageloopに入る)とかが 次ぐらいで。
moonwolfさんとこはPalmSync始められましたか。自分で作っておきながら何ですが、 かなり癖が強いかと思います。相性が合うかな。 (私向けに作りましたので私は特に問題なく使っておりますが)
眠い。ではおやすみなさい... 明日は早起きして出張だ...
ImageListの絵が壊れる件、壊れてるんじゃなかったんです。
TreeViewにアイテムを作る際、iImageを有効にするようにマスクを外すの忘れてました。
というわけで、変なiImageが設定されてると謎な絵が出るらしいことが分かりました。
(だからどうって事はないのですが)
公開はvruby側でTreeviewとListviewまわり作ってからにします。
フォントやカーソルなど、リソース系の寿命管理、利用側のオブジェクトにrb_iv_系の関数で適当にインスタンス変数として貼り付けたらうまく行くのかな?
とりあえずToDoにある名前の付け替えが先ですが。
moonwolfさんとこのスクリプトが起動してます?
うちのトップにUser-Agent無しのお客さんが来てますね。
飲み会の連続につき作業停止中
ImageListですが、TreeViewに貼り付けると絵が壊れてるんですよね。 Bitmapを使ったのがまずい?アイコンはまだ未実装。やってみなければ。
画像処理系のもとっととまとめねば...
ううむ。残件多し。(個人的には他にも...)
上に書いてる「当面」のToDoも山盛りですな。ぐえ。
年末の京都、平日ですが有給って手もあったんですねえ。 問題は取れるかどうかですけど。なんか調査するネタが有ったら仕事にしてしまうとかか?
stdout/stderr、昔(DOS時代)はなにか常駐物を入れて対処してたような気がしますが、
もはや記憶の彼方...
makeもロングファイルネームが使えるのが、コンパイル済みで且つフリーで出てないかと探したけど見あたらないですね。探し方が足りないだけ?
the g is silent.の方のご尊顔、私も初めてです。しかし英語読み切れん...
ImageListに手を出してます。(まだ公開してません)
多分最初はImageListを作れて足せて引けて壊せるだけです。でもTreeviewなんかには
使えるんじゃないかなあ。
rbswiz.rbですが、動的に生成されたオブジェクトのメソッドに関してはいい加減な対応です。これをきっちりするには文法解析までせねばならず、やってられません。
ただ普通のメソッドに対しても、現状の正規表現はおそらく無駄が多すぎるので修正したほうが良いでしょう。(ここら辺は試行錯誤が要るでしょうが、現状のは数分で作ったものです)
昨日のrbswiz.rbですが、!や?で終わるメソッド名の取得が
腐っていたのと、特異クラスを認識しないというバグがあったので修正しました。
あと、aliasやattr系も入れようかと思ったのですが、これらは条件文の中に
入っていることも多いようなので、止めてしまいました。aliasは"def"の入ってる配列に
追加すればそのまま動きます。attr系は":"のために正規表現を書き換えないと駄目です。
しかし、こういうのを作ると、VisualuRuby計画(仮称)においても、 ImageListやRichEditに触手が伸びそうです。
本計画のスクリプトをコンソール版rubyで実行し、ruby側からsystem()でrcs関係呼び出したら、コンソールは大元のを利用するじゃないですか。DOSプロンプトがもう一つ開くものとばかり..... 普通にruby -e'system("ls")' でもそうなりますね。不勉強でした。
なひ様、HotLinks更新ありがとうございます。
vruby側、VRText#visibleStartLineが動かないバグ発見に付き、一ヶ月半ぶりに vruby側修正。
3webと争ってばかりでもつまらないと、 こういうのを作ってたので(画面例)、上記バグを 発見しました。rubyのソースをブラウズするのに便利です。が、ちゃんと動作させるには いろいろ条件があります。これでも結構いけてる気がするのですが...
ブツは、rubyのソースを読んで宣言部分のインデックスを作るrbswiz.rbと、それをVisualuRuby計画(仮称)を用いてGUI風(画面例)に表示するv.rbです。v.rbはドラッグドロップも受け付けます。コマンドラインも受け付けます。ただしソースの編集は無意味です。注意。
特に、宣言部分のインデックスを作るrbswiz.rbの方は、Unixでも
ruby rbswiz.rb hogehoge.rb
とすればコンソールにそれらしい物のを吐きますので、遊んでいただければ幸いです。左端の数字は行番号。
rbswiz.rbですが、ソース中のインデントがしっかりしていることが前提で動作します。 また、ヒアドキュメントの類は正しく認識しません。そのため、以下の場合は誤動作する場合があります。
ちょっとはVisual(u)でしょ? vruby系のファイルでクラス数の多いのを見るとなかなか壮観です。
うーん。演算子のまわりはスペースを入れなくちゃいけませんか。
全部入れて回ると文字通り間が抜けた感じがするので、適当に埋めちゃってます。わたし。
隠しページの写真見ましたよ。>某氏
実はruby-list関係者で顔を知ってる人はほんのちょっと
(しかも全部web上の画像)なのです。
3webさんからは、「ご案内が不充分であったこと深くお詫び申し上げます。」との
謝罪をもらいましたが、いくらなんでも作業が雑すぎな部分が多いので
未だメールのやりとりが続いています。
ただ、ちゃんと返事くれるところは評価。某所で「黙殺される」と聞いてたので。
ひょっとして彼も私もクレイマーへの道を歩んでいたのでしょうか。
3webに言わせると、HTTPの返事に 302 FoundとLocation: hogehogeって書いとくと
URLの変更は無いということだったそうだ。
事実関係がないと単なる中傷になってしまうので書いておくと、
事前にもらった文章はこれ。
お客様のホームページのURLは、これまでと変更はございません。 (「http://www.osk.3web.ne.jp/~ユーザーID」で表示可能です。)ということで、全然納得できませんが、しょうがないのでHotLinksのほうにURLの 変更をお願いしました。3webにも案内の不備はわびてもらったし。 (でも質問メールのやりとりは続行中。)
画像処理の方で「Rubyのオブジェクト生成はコスト高」を再認識。
オブジェクトの再利用をすると5分の作業が、再利用無しでは45分に...(pentium133)
単なる画像のコピー(1280x1024)だったので、差が露骨に出る対象ではありました。
休息中。なら早く寝ろ >自分
SWin::Bitmapの機能拡張。
・newBitmap(width,height) :白紙のビットマップ作成
・bitcount : 1pixel当たり何ビット?
・to_fullcolor :フルカラーのビットマップでなければフルカラーに変換したものを返します。フルカラーなら自分自身を返します。今の所4/8/24bit per pixelの場合のみ有効
・[] : bmp[x,y]の色を[R,G,B]の配列で返します。今の所4/8/24bit per pixelの場合のみ有効
・[]= : bmp[x,y] = [R,G,B] で、(x,y)の色を設定します。フルカラーのときのみ有効
そのまんまBitmapなので、[0,0]は左下です。注意。
例
require 'swin'
bmp = SWin::Bitmap.loadFile("c:\\windows\\花見.bmp")
bmp2 = bmp.to_fullcolor
if [4,8,24].include?(bmp.bitcount) then
p bmp[10,10]
p bmp2[10,10]
bmp2[10,10] = [0,0,0] #ちょっと書き込んでみる
p bmp2[10,10]
end
bmp2.saveFile("24.bmp") #フルカラーで保存
サーバが変なのでHotLinksにうまく更新を拾ってもらってませんねえ。
3web側にメールのやりとりしてみましたが、なんか「どんくさい」を通り越してるような
感じ。方針変更か作業に失敗したかで、それを隠す。実は隠れてないんだけど。
(とこっちにはキツめに書いてみましたが、3web様はこちらは読んでないでしょう。)
URL変更しろって言ってきました。ついでなのでwebスペース自体の変更も考え中。
でも今年度の契約更新は厳しそうだ。期限8/31。
そういや、昔作ったBitmap<->Arrayのモジュール、「ちょろっとだけ公開」などと いいながら、URL間違ってました。ここですね。 私ももう使いませんし、使う人いるのかどうか知りませんが、訂正しときます。
ついでにjpegまで使えるようになった画像処理用のクラスを出そうかと思いましたが、 今は、ぐちゃぐちゃなのでパス。(こっちは現在Win以外でも使えます。extconf.rbあたりにいろいろ細工してswin(swin.h)が使える場合はSWin::Bitmapと繋いだりする予定)
また近況が長いけど、例が入ったせいもあるから可としよう。
3webのサーバのメンテがあったようですが、案の定おかしくなってますね。
URLの変更はないはずですのでよろしく。
サーバ機が入れ替わると聞いていたのに変わってないぞ。しかもhostnameやunameから
実行パーミッションが落ちてるのは何故だ?unameのパーミッションを落としても、
ログイン時に表示されてるんだけどなあ...
ruby-chanの開発終了ですか。彼女のおかげで本計画も知名度が上がったと思います。 感謝します。そして様々な情報をありがとうございました。>よしだむ様
今度はrubyの落とし穴ですね。やはり例外的な仕様や、省略による混乱が生じるところに 穴があるのかな。
夏バテ? 本日作業無し。多分来週まで無しです。
どうも最近、自分の書いてる文章が変な気がします。疲れてるのかなあ。
(あとから読むと「これじゃ意味が伝わらんだろ」ってのもありますし、
ポイントが2つ混じってしまってる文章も...)
画像の方は、jpeglibが使えるようになったところでデジカメ写真のHTMLアルバムでも 作成してみるか。などと、興味が発散中。危険。
たしかに、command.comは前時代の遺物的ですが、アレとつき合わずにWindowsでrubyを 使うのは難しいと思います。NT系列だとcmd.exeってのがあるんでしたっけ? こちらはよく知りません。
新500円硬貨は夏休み中にスーパーの釣り銭としてgetしました。色が変ですよね。
昨日の分、typoしてることを中田様にご指摘いただきました。うう。
ということで、某ファイルのサイズが1byte増加しました。
あまりこんなコトで迷惑をかけていてもしょうがないのでruby1.5の導入を考えます。
でも、もうすぐ1.6?
画像処理がらみの方で、libjpeg(jpeglib?)使ってみました。あっさり使えます。
すばらしい。libjpegのソースに付いてきたバラの写真(227x149)だとRGB反転が
2.5秒(Linux/Pentium133MHz)でした。実はいじくってるうちにちょっと
遅くなってしまいました。(画像フォーマットを浮かせるため)
require 'bscanner'
b = PBitmap.load("testimg.jpg")
b.scan do |scanner|
c=scanner[0,0]
c.red=255-c.red
c.green=255-c.green
c.blue=255-c.blue
end
b.save("img.jpg")
いい加減、畳込みとかやってみないと。あと、SWin::Bitmapと繋げること。
Rubyのドキュメント関係、怒濤の勢いで進んでますね。
るびきちさんとこにUndocumentedな諸々のドキュメント(変な表現だ)も集まってます。
初心者向けの本も出るとのこと。「インストールで嫌になった」
「なんかわけわからん」で終わりでは困りますもんね。
るびきちさんは、One Clickインストールがお好みらしいですが、Rubyはruby.exeをダブルクリックして使用するものではないので、使用前の心構えとして「コマンドラインを触らせる」のもいいかと私は考えちゃいます。普通のWindowsアプリではないので...
GUIによる開発環境が整ったら、その時はOne Clickインストールもいいですね。って、
人ごとではなく、本計画も早くそういう次元にたどり着きたいものです。
こういう意味では助田さんの所のRubyWinはとてもいいですよ。忘れちゃいけません。
昔ruby-chanも動いたような気がしますが今のやつはどうかわかりません。確か一発では動かなかったので。RubyWin最新版はcygwinで使えないし...
initializeメソッドを有効にしたつもりでしたが、やっぱりというか何というか、
ruby-1.5では動かなかったようです。中田様がRuby on Windows - 海賊版のページでパッチ出して下さって
ました。勉強しながら取り込み。
いつもありがとうございます。
実は、現在、画像処理がらみのを作ってたりしますので、本計画がおろそかになっています。1000x1000の画像(24bitというか32bitカラー)の各色輝度を半分に落とす処理、
Pentium133(Linuxですけど)で、1分くらい。しかし複雑なことやらせるとなあ...
画像をそのまま配列にすると遅くてしょうがないので、拡張ライブラリ作りました。
こういう感じ。(気が向いたら公開します)
b=PBitmap.new(1000,1000) #空の1000x1000
.....初期化....
b.scan do |scanner|
scanner[0,0]/=2
end
scannerが全pixel舐めます。scanner[ox,oy]が、舐めてるpixelからオフセット(ox,oy)
のpixelのカラー。scanner[0,0].redだとscannerのいるpixelの赤成分になります。
Rubyのインストール支援がMLで話題になってますね。私はcygwinを元から使っていたので
Windowsでは、何も考えずにそのまんまcygwin版ruby(ソースからインストール)を使い始めました。Windows固有の話ってのは、本計画始めるまで余り意識しませんでした。
とりあえずrubyを使いたいって人には、コンパイラの種類がどうしたとか、面倒くさいだけでしょう。「C言語もしくはコンパイル言語を使いたくないからRuby」って人も
いるかもしれませんから、敷居は下げとく必要がありますね。
中田さんがruby本体からの相対パスを見るようなバイナリを作られてますが、PATHの問題さえ何とかなったらそれこそ適当に展開するだけ、でしょうか。個人的にはAUTOEXEC.BATはインストーラに余り勝手に触って欲しくはないのですが...
とはいえ、ruby.exe/dllをc:\windowsなどへ放り込んで、ライブラリ群の位置をレジストリで調べるってのもなんだか。
プロバイダが来週、なんかごちゃごちゃ作業するそうです。サーバーが不調ならそのせいでしょう。
半月ぶりです。お久しぶりです。しかしなんか調子が出ないので更新が遅いかも。
挨拶だけでは何なので、SWinのLWFactory,Window,Dialog,Bitmapでinitializeメソッドを有効にしました。これでいいと思うんだけど...
京都ですか。近くて良いなあ、と思ったら平日ですか...
中田様からのパッチに従ってmessageBox系を改変しました。SWin::Windowのメソッドとして使用する場合は特に仕様変更ありません。デバッグ用に作っていたNullMsgBoxなんていうグローバル関数がobsoleteになります。代わりにSWin::Application.messageBoxが 出来ました。
最近やってるビットマップと配列の変換、ちらっと公開しておきます。
これ。さすがにrubyで書いた物よりは速いですが、
フルカラーのビットマップを配列に落とすときはちょっと時間がかかるかなあという感じですが、逆は結構速いです→1320x760のビットマップで1秒くらいby P3-504MHz
ただし、大ビットマップを変換しようとすると結構頻繁に「メモリが足りません」を
食らいます。(メモリスワップの量を制限してるからかな?)
あと、例によってビットマップの配列を処理しようとするとやたらと時間がかかります。
アーカイブ内のt3.rbが、ビットマップの輝度を半分にするだけのやつですが、遅さを体感してみて下さい。うちでは30秒程度かかります。大行列専用のクラスが必要ですね。
どうも申し訳ないです。SWin::Window#close腐ってました。 こんなところでunregister_sw()したらウインドウの破壊が捉えられなくて後処理出来ませんね。中田様ページでのご指摘、サンキューでした。RAAも変更。
と思ったら中田様からメールいただいてましたね。パッチ感謝します。 MessageBoxのほうは、また次で...
昨日の花見.bmp、今日処理させてみたら1秒かからないくらいになってました。 何故に?よくわからんなあ、と思いつつ1600x1200のフルカラーで同様の処理(条件が いろいろ違いますが)をさせてみたら、こちらは1分程度かかります。全ピクセルの 輝度を倍にするだけで○十分。算術関数なんか使った日には○時間ほどかかりそうな気配。途中経過をカウントさせてたのですが、やってられないくらい遅かったです。やはりNArrayかなにかのお世話にならねば...
で、Cでビットマップと配列の変換をするCの拡張ライブラリを作ってたりするのでした。
どうも、どこかで潜在的SEGVをやってるらしくて、現状の挙動が変です。
ビットマップを示す文字列がいつの間にか変化するう。
時々ALLOCA_N()から処理が帰ってきませんし。
v1.5からのObject#initializeの引数の数が変わったこと、あちこちで問題が出てますね。というより、皆さんちゃんとinitialize有効にしてたんですね。こちらもやるかなあ。 そういや、taintedの問題も...
夏休み、ほぼ確定(させたつもり)で、来週から2週間ほど音信不通かも。