2009-12-23[n年前へ]
■続 rubyscript2exe.rb のエラー
Rubyスクリプトを実行形式(Windowsで言えば.EXE形式)にするrubyscript2exe.rbというスクリプトがある。このスクリプトは、ただ一つのファイルを(変換したいRubyスクリプトと同じディレクトリに置くだけで使うことができるので)実に便利で重宝する。
しかし、このrubyscript2exe.rbが動作しないことがある。そんなシチュエーションのひとつは以前書いた、rubyscript2exe.rbが"Frozen String error"を出力し動かない場合である。
そして、他にも、
uninitialized constant Gem::RubyGemsVersion (NameError)とか
Couldn't execute this command (rc=256):というメッセージが吐かれ、Rubyスクリプトを実行形式に変換することができないことがある。
そんな時は、DOSプロンプトから、
set RUYBOPT=とか、
set RUBYOPT=-Ke -rkconvとか、適当にRUBYOPTを設定してやると、rubyscript2exe.rbが動くようになる。つまり、
ruby rubyscript2exe.rb hoge.rbという具合で、hoge.rbをhoge.exeに変換することができるようになる。
2012-01-21[n年前へ]
■エラー・ダイアログを吐いて休憩中の「公共システム」たち
PCが不調になり、意味不明の言葉が貼り付けられた「ダイアログ」を表示したまま、そのまま動かなくなってしまうことがよくあるものです。こういった「ダイアログ」を吐いたままシステムが「動かなくなる」のは、決して手元のPCだけ、というわけではありません。
羽田空港の一角で、壁に埋め込まれた巨大ディスプレイに「問題が生じたためPower Pointが終了しました」というダイアログが出ていました。
「珍しいこともあるものだ」と思ったのも束(つか)の間、よくよく周りを眺めてみれば「ダイアログを画面中央に”出現”させ停止しているディスプレイ」が結構あることに気づかされます。
たとえば、「両替レート」を映し出しているかに見えて実はエラーダイアログを表示したままの巨大ディスプレイ、そしてその近くではJavaアップデート関連のエラーダイアログを映し出している空港内の両替コーナーディスプレイ、HTTPエラー500番を表示したままのキャッシュディスペンサー、Windowsメッセンジャー関連のエラーを吐いたままウンともスンとも言わずに眠っている空港情報システム…。
24時間、休むこと無く働いているように見える公共システムも、よくよく眺めてみれば…実はスヤスヤ眠っていたりもするのです。働くばかりでなく・一休みしている「機械」を見ると、何だか人よりも人らしい、逆に言えば、人が機械より人らしくない、そんなように思えてきたりもするのです。
2012-04-15[n年前へ]
■例外補足で演算子をオーバーロードするエクセルHack!
エクセル(表計算ソフト)の「表空間と値の拡張」を考える!?の続き、エクセルで「複素数」をセルに入力し、"=A+B"といった”普通の記述の”入力で複素数演算を実現させる、という「Excelの独自型」…まず、その実装方法が面白いです。
①複素数セルA1、A2に対し、=A1+A2のように入力
②#VALUE!エラーが出るので、それを検出(Workbook_Changeを利用)
③検出したセルに対し、入力数式を複素数演算用関数を用いた数式に変換(ここは、数式を解析して汎用に変換する機能が必要ですが、これはたぶんできる)
④変換後の専用関数による数式で計算し、そのまま値を返す
この方針を眺めると、 ”エラーを検出し、エラーの元になった文字列をもとに、拡張処理を実行させる”という実装方法が、"No method"例外を補足し、”見つからない”関数名を元にSQLパターン等を生成し、その関数名で「したいこと」を実現するというRuby on Rails のコードを連想します。
例外補足で演算子をオーバーロードする、という面白く・楽しいエクセル Hackです。