2012年11月28日水曜日

出口が見えてきた

今週は辛い作業になるだろうと思っていたが、意外と簡単に出口が見えてきた。
10年前の俺が残した文書がずいぶん役立った。
ありがとう。10年前の俺。確かに受け取ったぞ。

今日は早めに帰って来たので、先週までやっていたラインアセンブラのしらみつぶしテスト用コードの改造作業を始めた。
今日はそのコードを探すだけ。
今年の3月にUbuntuに乗り換えたので、古い機械のHDD内をあさらなければならない。
もうずいぶん前に書いたものなので、どこにしまったか忘れてしまった。数年前、異常に忙しい暑い夏にPCが壊れ、応急的に安いPCを買ってきて作業を続行し、その冬に新型機を買い、暑さで壊れたPCと応急PCから、少しずつデータをコピーしていた(なかなかまとまった時間がとれなかった)。
そのせいで、非常にごちゃごちゃしたディレクトリ構成になっていた。
また、何で開発していたかもよく覚えていない。Virtualマシン上のLinuxでの開発だったか、Cygwin上での開発だったか、Borland C++ Builderを使っていたか、Eclipseを使っていたか。Eclipseは、Windows上で動くものが3本(一本は特定のマイコン専用)入っていて、Linux上で動くものが1本あった。
findで探そうにも、ファイル名を忘れているので手がでない。

しばらく探して、やっと見つかった。
その他、懐かしいものも色々見つかった。
タイムスタンプを確認すると2010年12月にいじったのが最後だ。つまり、その時点でdisasmの作業は終わっていた。
約2年放置していた事になる。
最後にいじってから、しばらく東京をはなれており、その後年度末のドタバタが始まり、3.11があった。
妙に忙しかったり、暇でも電気がなかったりして、いつの間にやらほったらかしモードになった。
今年になってだいぶ落ち着いたが、3月にUbuntuへの乗り換えをしてしまったため、使い方の習得や開発環境の再構築、VAIO C1-VRX/K用のFrameBufferドライバ改造など、余計な事をたくさんやっていた。

この数年だけでも色々なことがあったものだ。
夜に一時間だけで書いているコードなので、あまり頭を使わないでもいい書き方になっている。
しかしながら、重要な部分へのコメントは書いてあり、その当時の努力を感じる。
未だに、昼にばっちり働いて、夜に別の作業をするには勢いをつけないといけない。帰宅途中に「帰ったら、やるぞ!」みたいに気分を盛り上げておいて、帰り着いたらすぐに作業を始める。
その当時もそのように踏ん張っていたのだろう。

どんなに困難な作業でも、諦めずに続ければ、いつかは出口に到達できる。
自宅での作業も出口が見えてきた。
明日は発掘されたソースの改造方法を検討しよう。

2012年11月25日日曜日

雲見で潜ってエネルギー充填

雲見へ行ってきた。最高の海況で楽しめた。

天気は最高。水温20℃(俺のダイコンでは19℃)。透明度20m以上。
ロクハンなので、寒くない。水温的には、5mmでもイケたかも。
わずかに流れがあるが、流れる方向へのダイビング。
ドリフトダイビングになるほどでは無かったが、結構な距離を移動してもほとんど疲れない。
波、うねりはほ無し。

今回は、生姜のお茶を持っていって、みんなで飲んだ。
フィリピンで買ったフィリピン製、日本で買った日本製、日本で買った中国製の3種類を持っていったが、みんな日本製の生姜茶を選んでいた。「フィリピン製もピリリとして、おいしいよ。」と奨めてみたが、ダメだった。
自分はフィリピン製の生姜茶と中国製の生姜茶を飲んだ。
生姜茶をたくさん持っていったので、カメラは無し。

シマシマが無くなって、顔が黒くなっている超巨大イシダイを何匹も目撃した。
透明度の高さから広範囲が見渡せるためだろう。たぶん見えにくいだけで、ふだんからそれくらいはいるのだろう。
24アーチのテングダイも穴からでて外にいた。
キラキラ光るキビナゴの群れを下から見上げたり、ムレハタタテダイの群れがいたりと、群れモノも多かった。
ショップのボスの後ろをついて行っているとき、ボスのキックでイソギンチャクがひらりと舞い上がった。
そして、その下に小さなタコがいた。
タコはビックリして、すぐに穴に逃げ込んでいった。
エビがいるのでタコも多いと思うが、いつも隠れていてあまりみえない。

帰りに、大渋滞に巻き込まれ、19時ごろに厚木。
下道で移動していたので、厚木で夕食にした。厚木に住んでいたころ、しゃぶしゃぶ食べ放題だったお店が、ビフテキ、ハンバーグ、パスタを注文すると、サラダバー、カレーライス、パン、デザートが食べ放題になるお店になっていた。
そのお店で、ビフテキを食べた。
もちろん、サラダ、カレーライス、デザートも食べた。

明日からは、10年以上前に作った機械の中へ深く潜航して問題の調査をしなければならない。
しばらくは本当の海には潜れないだろう。
年末年始を心置きなく楽しむには、この仕事を綺麗に解決する必要がある。
デバッガ無しで作った装置だ。しかもOSにBugがあったため、メーカに少し修正してもらったものだ。
OSはその当時でも、もう少し良いものもあったが、そのメーカが出していたミドルウエア(FATドライバとTCP/IPプロトコルスタック)を利用したかったので、そのOSになった。
結局、装置開発時、OSやミドルウエアの不具合修正やチューニングをかなり行った(もちろんデバッガ無しで)。
その当時は今よりも若かったからできたが、今またそこへ潜るとなると、体力的にきついだろう。
わかっていても、またやらねばならない。

今日の海と食事が明日からのエネルギーとなってくれることを望む。

2012年11月24日土曜日

ラインアセンブラ3

結局、昨日の夜、食後にPUSHM, POPMも書いた。
過去に作ったMotorola-Sレコードにしたバイナリを逆アセンブラでアセンブリ言語化して、それをラインアセンブラに食わせた。
昨日の段階で、サイズが同じになることは確認していた。

今日になって、バイナリを逆アセンブラに食わせて、そこから出てくるコードをラインアセンブラに食わせて、それを最初に入力したバイナリと比較するテストプログラムを作成した。

色々な部分で間違いが見つかった。
対向試験で逆アセンブラにも間違いが見つかるかとも思ったが、間違いがみつかったのはラインアセンブラのみだった。夜1時間ずつ、2週間で書いたものだ。特にバイナリの合成なんて、昨日半日で書いたものだ。こんなもんだろう。
1~2時間で完全に一致するようになった。
テストに用いたデータはCコンパイラが吐いたバイナリなので、あまりトリッキーなコードではない。
多分まだまだBugがあるだろう。

洗濯物をしたり、なんだかんだで、今日はこれくらいしかできなかった。
明日は海へ潜りに行く予定。

2012年11月23日金曜日

ラインアセンブラ2

例のこれが、だいたいまとまってきた。
字句解析、構文解析、命令とオペランドのデコード、Emulated命令→Native命令変換までは、先週と今週の月~木までかけて帰宅後1時間ずつで実装した。
ダイビングに行ったり、飲み会に行ったりしていたので、あまり集中できず時間がかかった。

今日の朝、Emulated命令→Native命令の動作確認をした。
いくつか間違いが見つかった。
毎日1時間ずつだと、途中で考えが変わったり、また全体を見ないので、不整合を見落としやすい。
昼には単体の動作確認も終わり、いよいよバイナリコードの合成処理を実装し始めた。

似たような命令体系の部分でくくって、系列ごとに実装しながら、単体テストを行った。
(細かくは見ていない。来週以降、しらみつぶしにテストする予定)
テストと同時進行なので、夕方になっても実装作業が終わらなかった。
2命令(POPM, PUSHM)の実装を残して、疲れて来たので作業終了。
明日には、実装が終わるだろう。

来週からは、アセンブラ部分の結合テスト。
事前に作ってある逆アセンブラと組み合わせて、テストをする予定。
逆アセンブラ作成時に、しらみつぶしにテストするコードを用意していた。
それを使えば、テストプログラムの用意も楽だろう。

この手のコードはテストプログラムがとても大切だ。
ソースコードも重要だが、同じくらいテストプログラムも重要である。

2012年11月13日火曜日

ラインアセンブラ

既に2年前になる。

友人にたのまれて、某16bitマイコンのラインアセンブラ、逆アセンブラ付きモニタを作っている。
一回は一応動いた(その後に色々不具合が発見されている)のだが、ラインアセンブラのコードが気に入らず、作り直している。

逆アセンブラやラインアセンブラは、単純だが量がある。
特にアセンブラでどこまで受け付けるかの見極めが難しい。

例えば、リテラル値を数式で入れられるようにした。ペリフェラルレジスタの操作等でベースアドレス+オフセットのように入力できて良いなと思ってのことだ。
数式の処理を実装するときに、C言語の演算子を使うことにした。
括弧で計算順序の調整もできる。10進数、16進数、2進数に加えて、C言語のように8進数も使える。
そして、止めときゃいいのに、三項演算子にまで手を出した。
そんなものリテラル値計算のどこに役立つんだよとも思いながらも、どうせ実装するんなら、全部みたいなノリでうっかりやってしまった。
三項演算子を含め、数式処理は正常に動作しているが、無駄にコードがでかく可読性も悪い。
そんな部分が随所にある。

時間のある時に、何日間かまとめてやればすぐに終わる作業だ。
しかし、毎日30分から1時間の作業の繰り返しでは、前日の作業は忘れてしまう。
毎日作業ができれば良いが、なかなかそうもいかない。一週間や一ヶ月開いてしまうこともよくある。
このような状況では、問題を切り分け、局所化して、小さな作業単位の組み合わせにせざるおえない。
部分的に「もう少し作り込んでも良いよな。」と思ったらヤバい。全体が見えていないのに、その部分だけを掘り下げてしまうと、完成後に全体を見るとアンバランスな感じになる。

それで結局作り直し。

今日はまた全体の設計を検討した。
メモ書きをたくさん書いた。メモ書きにしておけば、通勤電車の中でも検討できる。
明日も多分検討の続き。週の中頃以降から、まとめる作業に入る。
シンプルで、改造しやすい実装にしようと思っている。

2012年11月4日日曜日

海の民、山の民

今週、海へ行かなかった。理由はこれだ。
海に入らないと、なんか調子が悪くなる。風邪気味で、くしゃみや鼻が出る。季節の変わり目だ。寒くなっている。止む終えまい。
そういえば、南国Philippine在住の江戸川氏(仮名)も同様の事を言うそうだ。

私の両親は、どちらかといえば山の民。
(特にオヤジは山奥出身)
しかしながら、それらから生まれた我々兄弟は、皆海が好きだ。
別に山が嫌いと言うわけではない。むしろ、遺伝的には山に適合しているはず。
海の方が刺激が多く、楽しく感じる。それだけだ。山もおもしろい。
あえて言えば、里がつまらない。街が嫌いなだけだ。大都市は大嫌い。

江戸川氏も、元は山の民だという話を聞いたことがある。
小さな島が集団を作った国Philippineなので、どこに住んでも海との関わりは切れないという考えもあるが、日本も大差は無いだろう。
そういった意味では、同じかもしれない。お互い元々貧乏人だし。

季節の変わり目。
この冬を乗りきるためにも、今月の中頃には海に入っておかないと。
さもなくば、余計に金がかかることになるかもしれない。

2012年10月31日水曜日

日本向けNexus7 32GB 値段アップ

同じ値段で、32GBモデルが出ると思っていたのに、とんでもないことに ¥5,000- もアップ。
GIZMODEの記事

金が無いっていう時なのに、このタイミングでの値上げはなんだ!!
もう買わない。絶対に買わないぞ!!

2012年10月30日火曜日

ケチケチマシーン

9月にCebuでダイビングをしていたので、10月は締めてかからないといけないと思って、かなり食費を削っていた。
しかしながら、終わってみれば(まだ1日あるけど)、かなりの出費だった。
  • 国内でのお泊まりDiving x1
  • 国内での日帰りDiving x2
  • 定期券
  • ゲージ(残圧計とコンソール)の交換
  • 長い長いズボン

  • 先月中頃になるが、やや高価なウクレレを知人から安くで購入したり、BlueTooth Keyboardを買ったりもしていた。
    そのせいで、今月の頭の時点でかなり来ていたのだった。

    その状態から、細々としたもの「LED電球 x2」「米10Kg」「保存用食料」「高いラーメン」も、ボディブローのようにじわりじわりと効いてきたと思う。

    12月になれば、やはりなんだかんだで、出費がかさむ。
    そうなれば、11月を如何に乗りきるかが、勝負だ。

    11月は、ケチケチマシーン猛レースだ。
    ブラック魔王には負けないぞ!

    2012年10月28日日曜日

    井田へ行ってきた

    雨は無かったが、曇り。
    天気はいまいちだったが、レア物がたくさん見れたので良かった。

    以下の3つは、シリキスズメダイなのだが、Flashを焚くと、実際の色よりも薄くなってしまう。
    これは、本当の見た目に近い色になった。
    上がってきたところで、Flashを禁止して撮影した。

    小さな小さなクマドリカエルアンコウがいた。
    体長1cmにも満たないような個体。この写真のどこにいるかわかるかな?
    中央部を拡大すると… 見えるでしょ。
    Super-macroではなく、通常Macroで撮影してしまったため、あまり近づけなかった。 まあいいか、と思ってそのまま撮影したが、やはり失敗だな。 これはニシキフウライウオ。どこにいるかわかるかな?
    もう一匹の小さな小さなクマドリカエルアンコウ。 これも体長1cmぐらい。今度はSuper-macroで撮影。
    中央部の拡大。ピントはあっているけど、手前の藻がじゃまだ。
    あとは流して撮影。カメラの練習。

    ニシキフウライウオやカエルアンコウがたくさんみれて良かった。

    今月頭の時点では、この前の海洋公園と、今回の井田の予定は逆だった。
    しかし、諸事情があり、急遽逆転したのだが、結果的にはその方が良かった。
    どちらの海も写真はいまいち(自分が悪い)だったが、見応えがあった。

    2012年10月26日金曜日

    Ubuntu 12.04 にした

    先日、母艦のUbuntuを12.04 "Precise Pangolin" に入れ替えた。
    半年前に出ていたが、ずっと無視していた。
    新しすぎるやつは不安定なので、半年ぐらい待っていたのだ。

    入れ替えて驚いたのは、動きがかなり軽くなったことだ。
    ネットワークまわりが軽くなった感じ。NASへのアクセスも軽い感じがする。
    Kernelが3.2.xになったためか?
    最近、GCCも新しいパッケージになっていたので、最適化の性能が上がったのかもしれない(想像)。

    もちろん、困ったこともおきた。パネル上から
  • パネル内にスピーカアプレットがなくなってしまった。
  • インプットメソッドの表示がなくなった。
  • 日付時刻表示に時刻しか表示されなくなった。

  • さらに、以前はALT+右クリック(さらに前は右クリックのみ)でパネルのメニューが出たのに、出なくなった。
    Internetで調べたら、ALT+右クリックではなく、ALT+Windows+右クリックに変更になったそうだ。
    Happy Hacking Keybordには、Windowsキーは無いので、操作できない。
    他の方法を探すと、"GNOME Classic(No effect)"でログインするとALT+右クリックで操作できるようになることがわかった。

    一旦ログアウトして、"GNOME classic(no effect)"でログインし直し、パネルのメニューを表示させる。
    スピーカーの絵を探すが、見つからない。
    Googleで探すと、Ubuntu日本語フォーラムで、こんな記事が見つかった。
    以下の部分の上2行を実行したら、スピーカーのアプレットが表示された。
    sudo apt-get install dconf-tools
    dconf reset -f /org/gnome/gnome-panel/
    nohup gnome-panel --replace &
    
    インプットメソッドの表示は、この記事を参考にした。

    日付時刻表示は、この記事を参考にした。
    dconf-editorを起動して、以下のように書き換えた。
    半年待っただけあって、多くの問題の解決方法が簡単に見つかる。 とにかく、dconf-editorが必要だった。
    dconf-editorをinstallすると、メニューの「アプリケーション」→「システムツール」のなかに "dconf Editor"ができる。
    GUIでも設定をちょこちょこ変更できる。
    他にも色々いじれるようなので、もう少し見ておこう。
    色々調整をしたので、ついでに以前から自宅のプリンタ(Canon LBP-1310)がまともに動作しないことについても調べた。
    Googleで検索すると、Canonがドライバを配っていることがわかった。
    まず、中途半端にinstallされているプリンタを削除する。Ubuntuの「システム設定」内の「プリンター」とかかれたアイコンをクリックして、「プリンター」のダイアログを表示し、左下の[+|-]ボタンの'-'をクリックしてプリンタを削除する。
    CanonのHTML形式のドキュメントを読みながら、設定をした。
    途中の、
    # /usr/sbin/lpadmin -p [プリンタ名] -m [PPDファイル名] -v usb:/[デバイスファイルパス] -E
    
    それぞれ伏せ字の部分は、
    項目入力備考
    [プリンタ名]lbp1310任意の名前でよい
    [PPDファイル名]CNCUPSLBPSERIESLJ.ppdドライバ添付のREADME-lips4-2.5x.txtを参照
    [デバイスファイルパス]usb://Canon/LASER%20SHOT%20LBP-1310?serial=040311100830/usr/sbin/lpinfo -v で取得
    何と長いのだろう。あまりの長さに、信用できなかった。
    とした。
    すなわち、発行するコマンドは以下のようになる。
    # /usr/sbin/lpadmin -p lbp1310 -m CNCUPSLBPSERIESLJ.ppd -v usb://Canon/LASER%20SHOT%20LBP-1310?serial=040311100830 -E
    折り返しちゃって、なんだかわからない。
    折り返さずに表示すると、こんな感じ。
    # /usr/sbin/lpadmin -p lbp1310 -m CNCUPSLBPSERIESLJ.ppd -v usb://Canon/LASER%20SHOT%20LBP-1310?serial=040311100830 -E
    
    残りの作業も、ドキュメントにしたがって粛々と行う。

    作業完了後に、システム設定のプリンターを開いてテストページを印刷すると、ちゃんと印刷できた。
    いくつかpdfファイルを印刷した。問題ない。
    lprでテキストファイルを印刷してみた。一応、印刷できたが、あまりにもシンプル過ぎる。ついでに、日本語がでない。
    フィルタを入れ替えようかとも思ったが、geditで印刷すると、ちゃんと日本語も出るし、ファイル名やページ番号もつく。
    これでいいや。

    一応、普通に使えるようになった。
    軽くなったのがとてもよい。
    2017/11/22 プリンタ登録コマンドの折り返さない例を、スクロールするようにした。