iso tank - プログラムな?話 2009年

新たな問題

前回非常に困ったことになったわけだが、とりあえず別フレーム(leftとか)からスクリプトを呼び出して メインのフレーム(mainとか)のhtmlを書き換える方法に成功したのでまずこの回避策でやっていくことにした。

で、$(function(){})はdocument読み込み時にしか(つまりleftを読み込まないと)動作しないので、mainのページだけで遷移すると イベントを取得できない、つまり書き換えができない。なのでmainを読み込んだら同時にleftも読み込めよという命令をmainの方に入れた。 そしたら全体を更新するとleftを2回呼んじゃうんだよね。効率悪いけど仕方ないよね。

で、

新たな問題。jQuery.ajaxを使ったスクリプトでcache:falseにしていると、ページを再読込してスクリプトを実行するたびに呼び出すxmlファイルのデータサイズ分だけメモリ使用量が肥大化していくことが判明。 たぶんIE6とか古いブラウザ限定で発生するようだ。ChromeとかIE8では再現しなかった。メモリリーク・・・というのだろうか?

とりあえず、IE6の人がいたらこのテストページを開いて、タスクマネージャとかそういうメモリ監視するツールとにらめっこしてみてほしい。 たぶんページを更新するたびに1MBぐらいずつ使用メモリが増えていく。

助けてください。本気で。

俺にプログラミングその他を教えてくれ。できたら今直面している問題を解決して。

ブラウザ:
ソフトウェアベンダーが独自開発したアプリケーションに載っている、これまたベンダー独自開発のIEコンポーネントブラウザ。 ちなみにインストールされているIEのバージョンは6あたり
俺が作ろうとしたプログラム:
jQueryを利用した小さなプログラム。その日の日直や宿直を表示する。
現象:
$.ajaxで、success: function(foo){var(foo)}とすると、その関数は正常に完了するが、そのページでPDFを開こうとするとIEのスクリプトエラーが発生。 「インターフェイスがサポートされていません」と出る。が、そのまま続行するとPDFは普通に開ける。htmlは何のエラーもなく開ける。
サイト:
いまだに<frameset>とか<frame>とか使ってるうんこな内部用サイト。
今のところ判明していること:
  • たとえばjQueryを使わずに”document.write("Hello, World!");”とかすると普通に表示される。 なので発生のタイミングはおそらくjQueryでデータの読み取りに成功して関数が呼び出された直後から。
  • コマンドプロンプトで”regsvr32 urlmon.dll”を実行してからアプリケーションを再起動すると、エラーなくPDFが開けるようになる。 でもPC再起動するとまたエラー発生。
  • うんこなフレームを使ってるサイトなので、ためしにpdfを別ページに開くように”target=_top”とかしたらうまくいった。 どうやらこのプログラムを呼び出しているページにpdfを呼び出そうとすると?エラーが起こるらしい。他のページに移動とかしたが状況まったく同じ。
とりあえずどうしよう:
  • PCにWindowsUpdateをかけてIE近辺のプログラムを更新すれば直るかもしれないが、下手に更新かけてシステムに悪影響が出たらかなり困る。主に俺が死ぬ。 あと作ったプログラムが余計に動くなったらやっぱり俺が悲しみで死ぬ。だいたいプログラム一個の都合でシステムを更新するってどうよ。ねぇ。
  • 日直や宿直を表示する部分をフレーム分けてさらに別ページにしようかと思ったがレイアウト的にカオスになるので困っちゃん。
  • つまりスクリプトを呼び出しているページにPDFを呼び出さなきゃいいわけだから、<frameset>とか<frame>とか書いちゃってるindex.htmlで スクリプトを呼び出して、つまりいわゆるleft.htmlだとかright.htmlだとかいうところの日直表示テーブルを更新できないかとか。 なんかその類のHPを見ると色々方法書いてるんだけど、なぜかうまくいかない。getElementsByTagNameはなにも返さないしcontentWindowも働いていないかも。 しかもそれがjQueryになるとどうすればいいのかもっとわからない。

とりあえず仙台のヨドバシ行ってjQueryの本とajaxの本を買ってきた。今日家帰ったら読んではみるけどこんなピンポイントな解決方法書いてるわけないだろ。

PC、爆発しなさい。

あ、家のPCは爆発しちゃだめだからね。

Google Chrome Extensions

http://d.hatena.ne.jp/os0x/20090625/1245949133

おいらは Google Chrome を使っている。友人に言わせるとなんか色々とHTMLとかCSSとかの対応が悪いらしくて、いまいちらしいけども、今のところとりあえず問題のあるサイトには巡り会ってない。

あ。そういやYahoo! コミックだかが確かChromeだと見れなかったかな?

でまあ、最近Chromeの開発版に、ユーザーが作成した拡張プログラムを追加できる機能が実装された。これはようするにFirefoxのアドオン機能と同じようなもの。

でまあ、なんかほしいもの、作れるモノなら作ってみたいモノをポコポコ思いついたので忘れないうちにリストアップしとく。

  • タブを非表示にする機能。Windowsのタスクバーの「自動的に隠す」みたいにできたり、もしくはまるっきり非表示にできたらいいなあ
  • 特定のタブだけを非表示にする機能。ショートカットキーで復帰できるとか作れないかなあ
  • Chrome上で動く2chブラウザ(Firefoxでいうchaikaとかbbs2chreaderとかmoz2chのようなもの)が作れたらいいなぁ。おいらでも作れるかなあ
  • FirefoxのアドオンをそのまんまChromeで動かせたらすごいと思う

どう考えてもダメ社会人です。ほんとうにありがとうございました。

百姓vsプログラマ

以前、ウチのさなえさんについて書いた。つまり今回もさなえさんについての話題なのである。

「また田植機かよ」「また自分ん家自慢かよ」と思ったそこのあなた。甘い。今回はそれに「ユーザーインターフェース」についての話も加える。 つまりあなたの予感はおおむね66.6%程度当たっている。おめでとう。

ところで全然関係ないけど東風谷さん家の早苗さん、自機化したね。おめでとう。

さて本題。「さなえさんと僕ん家の風景」でも書いたが、さなえさんは色々と素晴らしい。 しかし僕の能力が低く、そのすばらしさをちゃんと説明できてなかったように思うので改めて書くとこうだ。

  • 従来の田植え機は旋回半径が大きいためUターンができなかったが、さなえさんは旋回半径が小さく一発でUターンできる(むしろ旋回半径が小さすぎてたまに曲がりすぎる)
  • しろかき機(さなえZロータ)がついていて、田んぼを平らにならしながら田植えができる上に雑草取りもできる
  • オプションの自動農薬散布機(「らくまきちゃん」「こまきちゃん」「滴下マン」があるが、我が家ではらくまきちゃんを採用)で、自動的に農薬を苗にまきながら田植えできる
  • 田植え中にさなえさんを止める(エンジンを切るのでなく)と、自動的に田植えも止まる
  • さなえさんをバックさせると自動的に田植えが止まり、田植え装置を持ち上げてバックできる状態にする
  • さなえさんをUターンさせると、自動的にちょうどいい位置から田植えがはじまる。
    同時に、マーカー(次にどのあたりに植えればいいかの目印)を引いてくれる

つまるところ徹底的な自動化なのだ(最初の一行以外)。

この自動化がなにをもたらしたか。従来では、例えば「Uターン」という行動ひとつを取っても 「田植え機を停止し、田植えボタンを切って、装置を上げて、ギアをバックに入れ、50センチほど後退してから、90度ターンを二回。ちょうどいい位置に田植え装置を合わせて一度田植機を止め、装置を下ろし、田植えボタンを入れ、前進」 という作業が、 「田植え機を停止し、ギアをバックに入れて、50センチほど後退してからUターン。あとはまっすぐ」。 人間が作業する部分がこれだけになった。

すさまじいまでの簡便化だ。

するとどうか。田植え機に乗る百姓は「本来の田植え作業」そのものに集中できるようになった!  苗や肥料や農薬が切れたら補充するのは今までどおりだが、苗の様子を観察したりできるし、機械操作のミス(田植えボタンを押し忘れちゃったよ! とか)で植え直しすることもほとんど無くなったのだ。

百姓は黙々と田に苗を植え付けていればいい。あとは田植え歌でも歌うか? といったところだが残念ながらうちの地域にはそれっぽいものは伝えられていない。 エンジン音が大きいのでちょっと大声出しても気づかれないとは思うんだけど。

これは、いわゆる「インターフェース」にまつわる問題だと思うんだ(まぁ後のほうはちょっと蛇足だったけど)。

ある作業をおこないたい人が、その目的の作業以外の作業に煩わされることなく、黙々とその作業をおこなうことができる。これは素晴らしいことだと思う。 僕の大好きなジョエル・オン・ソフトウェア開発抽象化レイヤ という記事でも言及されているが、ここの言葉を借りれば、「百姓たちは、田植え機のターンと、苗や田んぼの状態と、苗や肥料や農薬の残量と、田植え歌の選曲以外の田植えに関わる雑事から切り離されている (プログラマたちは、スピードと方角とランチに何を食べるか以外のヨットに関わる雑事からは切り離されている)」。

実際、ひたすら田植えに集中できるようになったおかげで田植えがものすごく簡単に、かつ短い期間で終わるようになった。これはとても良い製品だ。

しかるに、プログラマひいてはメーカーに求められているソフトウェア製品はおそらくこういうものであろうし、それを作る作業者(つまりプログラマ)自身もそういう環境に乗っていなければ、そういう製品を作ることは難しいと思う。

百姓もそうなのだが、一見最底辺のように思える「作業者」が、最も根幹の「ものづくり」に携わっている。 もちろん、脱穀したコメをきれいに包装し販売戦略を練りもっともらしい宣伝文句をつけて販売し利益を上げるのも、マスターアップされたプログラムを製品化し販売戦略を練りもっともらしい宣伝文句をつけて販売し利益を上げるのも、作業者以外の誰かだ。 そしてそれらの作業がなければコメもソフトウェアも売れないのはわかっている。だが百姓が田植えしなければ、プログラマがコーディングしなければ、すべてがはじまらないのだ。 そして作業者である彼らの環境の改善が生産性の向上に結びつくことを僕はかなり直接的に体験した。

そして僕はジョエルさなえさん井関農機のファンになり、口を開く毎に我が家の自慢の田植え機とジョエルの話をこうやってまるで我が事のように喋くるだろう。

僕は彼らのマーケティングにまんまとはまったのだ。おめでとう。