トップ 最新 追記
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|10|12|
2009|02|03|06|07|10|11|12|
2010|01|02|03|04|07|09|10|11|12|
2011|01|03|04|05|06|07|08|10|
2012|01|06|08|09|10|12|
2013|01|02|03|04|07|09|11|12|
2014|01|03|04|05|06|09|
2015|04|
2016|01|08|
ここは旧えびめもです。えびめも2に移行します(2016/12/1)

2004年04月01日

仕事

東京出張。CQ出版社セミナー講師。来ていただいた皆様。ありがとうございました。

スタバ?

またスタバぱくりの立ち飲みコーヒースタンドかな?と思いきや緑茶カフェだった。

くろみつ抹茶ラテのライトシロップ(きなこフレーバー)。結構美味だった。

さくら



六本木アークヒルズのさくらを見に行った。綺麗だ。
(クリックすると大きくなります)

2004年04月05日 晴れ

さくら

また我が町にもさくらの季節がやってきた。

満開から散り始める頃のさくらが一番好きだ。


(all pictures / CANON IXY digital 400)

2004年04月06日

日記

某誌でお世話になっている O氏のWeb日記ページを発見する。かなり濃ゆい(笑)。奥さんも別アカウントで日記を書いているようで、照らし合わせて読んでみると大変面白い。アンテナに追加。

片付かない

オフィスが片付かない。机の上が片付かない。メールの返信が片付かない。伝票の整理が片付かない。

片付かないのはキューにJOBが溜まりすぎるからだ。受付タスクの優先度は(取りこぼしを防ぐために)最優先で回っていて要求が発生すると共にTODOキューに突っ込んでいる。処理要求が発生していない(比較的のんびりした時間に)逐次実行でJOBを片付けていこうと考える。ところがキューは満タンになる。受付タスクは「まだおわらないかまだおわらないか」とせっつく。せっつくせいで処理タスクが進まない。結果、受付タスクが上手いこと走らない。

これを優先度逆転現象 (Priority Inversion) と呼ぶ。対策としては、優先度継承(priority inheritance protocol)を行い、重要な仕事が舞い込んできたらTODOキューに加えると共にさっさとやっつけてしまいなさい。という実生活では当たり前の行動をとれば回避できるのであった。


2004年04月10日

サルサ

エルココへ。すいてました。今日はsalsa oneとla habanaが両方とも飲み放題だったらしく、飲みたい人達はそちらへ行ったのだね。というわけですいてました。


2004年04月13日

うわあ

更新が一週間も空いてしまいました。

Ken Thompson氏

古い話ですが、今日 Ken Thompson氏の有名なback door事件を知った(氏はUNIXを作った男の一人である)。backdoorとは、システムやプログラムの作者が、作者しか知りえない秘密の手順を組み込んでおき、あとでそのシステムへ侵入するための裏口を作っておくことである。広い意味で言えばゲームの裏技やアクションゲームの主人公の無限増殖などもこの類のものだろう。

氏は初期の(1970年代初頭の)UNIXシステムのlogin コマンドにバックドアを仕込んでおき、ログイン名ktと、とあるパスワードを入力すると、そのアカウントが存在しなくてもシステムに侵入できる仕掛けを入れておいた。しかもそれを氏が1984年に論文で発表するまで誰も見破れなかった。というのだ。

その恐るべき手法は次の通りである。もし login.c にバックドアを記述しておいたらすぐに見つかってしまうだろう。氏はCコンパイラに仕掛けを作りこんでおき、login.cをコンパイルするときに、バックドアコードを挟み込むような特殊な仕掛けを用意しておいたのだ。それにもう一案、これだけではCコンパイラのソースコードを見たときにインチキが発覚してしまう。そこで、Cコンパイラをコンパイルするにはコンパイラが必要だという点に着目し、Cコンパイラのソースコードの中に、『"login.c を見つけたら書き換える"コードを挟み込むコード』を挟み込んだ。そしてそのコンパイラでコンパイルすると、コンパイルされた新しいコンパイラにもlogin.cを書き換えるバイナリコードが含まれるようになったのだ。そうすると、コンパイラのソースコードにはlogin.cを書き換えるというインチキ部分が無くても、コンパイラのバイナリの中には未来永劫login.cにバックドアを挟み込むインチキ部分が含まれるようになったのだ。

この恐るべきhackに関しては1985年(実に今から20年前)に論文が出ている模様なので、興味のある諸兄は読んでみると面白いと思う。

http://www.acm.org/classics/sep95/

そしてそこでの教訓は、オープンソースだからといって安全だと過信してはいけない。ということだ。上記の例では、login.c のソースコードのどこをどう見てもバックドアなど発見できない。同じように linux-2.4.24.tar.gz のどこを見てもバックドアを発見できないかもしれない。しかし、自分のマシンのgccコンパイラに、バックドアを書き込むコードが含まれているとしたら。そしてそれが gcc-3.0.3.tar.gz を見ても発見できないとしたら(gcc-3.0.3.tar.gzを書き換えるコードがgccに入っていたとしたら)。ソースコードには見えないhackがこの世に存在する可能性を頭に入れておいて損は無いだろう。

May the Source be with you.

本物のプログラマは pascal を使わない

さて、伝説の本物のプログラマの話に影響を受けたところで、これまた懐かしい『本物のプログラマは pascal を使わない(bit誌1985)』をlinkしておく。

http://www.ne.phy.saitama-u.ac.jp/~okamura/misc/real-progstory-j.html
ここで語られている本物のプログラマは真の漢だと尊敬できるhackerだ。そういえば、tkane君やおいらも、高校時代に

 0000: C3 00 00
を自作Z80ボードに書き込んでM1とRDのクロックを計測してマイコンが走っているかを確認したりしたもんだ。本物のプログラマは道具に頼らない。上記の論文の中には「4Mバイトのコアダンプからバグを見つける」といった神業も紹介されているが、
本物のプログラマはコンピュータの前に居なくても、遠隔地にいる人間にレジスタを読み上げさせ、
バグの箇所を推測し、遠距離電話だけでシステムを修復させることができる
といった姿は真に尊敬し目指したい目標だ。
・本物のプログラマはビーチで砂にフローチャートを描く
にはなりたくないな。笑
パーティでは部屋の片すみでオペレーティング・システムのセキュリティと
それをどうやって破るかを話しているのが,本物のプログラマである. 
笑えないなぁ。あ、久しぶりに本物のプログラマ達と飲みたくなってきたなぁ。秋葉原のPROTOどうですか?無線LANあるし。笑

さて、本物のプログラマは道具に頼らない。ソースコードデバッカなど、デバックができないヤツが使うもんだ。

デバッグなどLED 1個あれば十分
と意気込んでいても、現実には効率が悪すぎるよね(A^^;;
実際に今友人がH8マイコンのコーディングをしていて、シリアルポートは全部使用されていてprintfデバックもできないと悩んでいるので、アイディアを考えてみよう。7セグLEDでもつければステータスを1つ表示できるけど、7セグLEDをつなぐだけのbitの余裕も無い(し、配線がめんどくさい)。そこでだ。1byte程度のステータスを出力する方法を考えてみた。
・未使用D/Aポートを使い、テスターで電圧を読む! (工作もいらず簡単)
・ソフトウェア シリアルポートで手クロックでデバックメッセージを出力する
・タイマカウンターを使い、周波数出力をして周波数カウンターでステータスを読む(正確だね16bitくらい行けそう)
・D/Aが無いならタイマカウンターでPWM出力をしてコンデンサで平滑してテスターで電圧を読む。
・てかむしろ1bit D/Aで AUDIO出力して音声出力!!
いくらでもできるじゃーん。
がんばれ

2004年04月14日

レースコンディションについて

去る2004/4/2に東京でlinuxデバイスドライバのセミナーを開催しました。来ていただいた皆様ありがとうございました。セミナーの最後で
interruptible_sleep_on() でプロセスを休眠させる手法はえてして良くない。
wait_event_interruptible() を使うべし。使い方は宿題です。
で締めましたが、『よく分からないよ〜』というメールをいただきましたのでこの場を借りて少し解説します。ちょうど最近の linux-users-ml でも話題になっていた話です。

http://search.luky.org/linux-users.a/msg02066.html

interruptible_sleep_on(&待ち列)はプロセスが休眠する自動詞的な関数です。ぶっちゃけこれを呼ぶと寝てしまうのです。何が良くないかというと

1  hogehoge_read(){   // read ドライバメソッド内部で
2   
3    if(受信データが無いなら){
4      interruptible_sleep_on(&待ち列);
5      // データが無いなら sleep に入って、
6      // データが到着したら割込みルーチンで起こしてもらう予定
7  }
というコードは良くないのです。3行目のif文の判定の直後にデータが到着したら、割り込みルーチンが先に呼ばれ、割込みルーチンでwakeupが実行されて空振りし、その後sleepに入って寝てしまうのです。従ってif文の判定からデータ到着までが1パケット分ズレます。こういう状況を race condition (競合状態)と呼びます。割込みルーチンとプロセス間でデータの競合が起こるなら割り込みを止めてしまえと
1    hogehoge_read(){   // read ドライバメソッド内部で
2   
2.5  cli();    //割込み禁止
3    if(受信データが無いなら){
3.5    sti();  //割込み許可
4      interruptible_sleep_on(&待ち列);
5      // データが無いなら sleep に入って、
6      // データが到着したら割込みルーチンで起こしてもらう予定
7  }
のように書いてもダメです。sti()が実行された途端に保留されていた割込みが実行されるので意味がありません。『interruptible_sleep_on() が割込み禁止で呼んでも良い』という仕様だったら簡単だったんですけけど、愚痴っていても仕方ありません。 そこで interruptible_sleep_on() は使うな。wait_event_interruptible()マクロを使えとなります。
wait_event_interruptible(待ち列,条件式);
こいつはマクロなので関数呼び出しとは少し様子が違います。待ち列には&をつけず、2番目の要素は条件式になります。プログラムはこんな感じ
    err = wait_event_interruptible(待ち列,(もしデータが無いなら));
    if(err)
      return err;
    if(signal_pending(current))
      return -ERESTARTSYS;
もっとたくさんのサンプルが見たい? /usr/src/linux/drivers の下を見れば沢山出てきますよ〜

サルサ

レディヤン春日井のemikoさんのキューバンサルサのレッスンに2時間。5/2のキューバンサルサフェスタまで後2回しか練習できないけど、皆が和気藹々と練習してて切羽詰った義務感も感じないので本番も楽しめそうだ。


2004年04月15日

goto

gotoの綺麗でクールな使い方 linux-2.4.24/drivers/acorn/scsi/eesox.c から引用
eesoxscsi_probe(struct expansion_card *ec)
{
途中すげー略してあります。
        ret = fas216_init(host);
        if (ret)                  //エラー
                goto out_free;
 
        ret = request_irq(host->irq, eesoxscsi_intr, 0, "eesox", &info->info);
        if (ret) {                //エラー
                printk("scsi%d: IRQ%d not free: %d\n",
                       host->host_no, host->irq, ret);
                goto out_remove;
        }
 
        ret = fas216_add(host);
        if (ret == 0)
                goto out;		// ここが正常ルート
//エラー発生時
        if (host->dma_channel != NO_DMA)
                free_dma(host->dma_channel);   // dma開放
        free_irq(host->irq, host);             // 割込み開放
 
 out_remove:
        fas216_remove(host);
 
 out_free:
        scsi_unregister(host);                 //scsi登録開放
 
 out_region:
        release_region(base + EESOX_FAS216_OFFSET, 16 << EESOX_FAS216_SHIFT);   // I/Oポート開放
 
 out:
        return ret;
}
登録A>登録B>登録C とやってエラーが出たときに 解除C>解除B>解除A としなければならない。こんな場面で goto を使うと美しく書けるので linuxカーネルでは goto を良く使います。

サルサ

『最近サルサの話が少ない〜』とサル友から言われましたが、害のあることもかけないので害のない事を書きましょ。

ぺんぎnという生物です。好きな技はツバサです。飛べません。

2004年04月16日

映画

イノセンスは見たしアップルシードも見なかんな。けどキャシャーンの方が面白そうだ。


2004年04月17日

サルサ

salsa club elcocoが bar elcocoになり、最後には居酒屋 得留此処になっていた。

↑男子寮状態のelcocoの外のスペース。
『サルサなんて面倒くせーもん踊ってられるか』という塾長の"男"発言に大いに盛り上がり、酒と泪と男と女(by河島英五)の大合唱で盛り上がる男ども(なぜCDがあったか不明)。
elcocoには店の外にテーブルがあって、この季節は最高だ。オープンエア(?)で休めるclubって少なくて貴重だよね。外のテーブルは男子寮状態で夜が更けていくのであった。

2004年04月19日

orkut

K猫さめから orkutのInvitationメールが届いた。あやうくspamと思って消すところだった(1日300通以上の英文spamが来てるので)。1メール1秒で斜め読みして消しているので危ないところだった(笑

Profile登録が面白かったが長すぎてだんだん飽きてきた

my idea of a perfect first date ...
five things i can't live without ...
my bedroom you will find ...
なんか英会話教室のpracticeのようだ。懐かしい。

仕事

新入社員君が入社。期待してるので頑張ってくれぃ。(^-^) 研修も無く早速jobがまわってくるという過酷な職場ですが、楽しんでいきましょう。


2004年04月22日

AVRマイコン

先日のTiny12での試作は取り掛かる時間が無くてなかなか進まない。AVRマイコンの選定を見直してみた。
1. 8pinか20pinか → 8binでは若干I/Oが足り無いので20pinにしたい。
2. AT90LS2313かTiny26Lか → 今後はTiny26なんだろうけど開発機材がないなぁ。

上のピン配置図を見ても分かるとおり、この2種類はまるっきり互換性が無い。左のAT90LS2313よりも右のTiny26のほうが新しく近代的だ(VccとGndの隣接配置って意味で)。大昔から続くVccとGndのたすきがけ配置は今となっては無意味というか逆効果で、こんなに電源が離れていたらパスコンをかましてもL成分が大きくなってしまう。もっともAVRマイコンだったら速度も4MHz前後でたいしたこと無いから影響ないと思うけど。
型番内蔵発振I2CICE200対応ADC価格
AT90LS2313×××\390@digikey
Tiny26L×10bit\292@digikey
とりあえずTiny26を買っておくか。ICEが使えないけどgccが使えてシリアルが使えるなら、printデバッグができるだろう。Tiny26をサポートしているICEってあるのかな?

と思ったら、ATMEL純正 ICE40がTiny26をサポートしているらしい。でも高い。$995 だって。


2004年04月23日

仕事

忙しひ。

サルサ

またエルココのMihoレス間に合わなかったので深夜の岐阜でも行くかぁとか思ったが、元気が無かったので結局会社で働いてた。


2004年04月24日

サルサ

土曜日だ!!喜び勇んでエルココに出陣。今日は春日井のN子さんもエルココに初登場だ。だが、しかし!10時くらいにいつもどおり賑わいを見せたものの今日のエルココはなんか人が少ないぞ。12時前後にふとフロアを見ると踊っている人は3ペアくらいしかいないじゃないか。皆どこへ行ったのだろう。後日聞いたところ、アバナもサルサワンもどこもかしこも人が少なかったらしい。連休前なので控えてるのかな。


2004年04月25日

サルサ

いよいよサルサフェスタが5/2と目前に迫ってきました。Emikoさんのチーム(といってもほぼ全員が参加)の練習をcaveで3時間。カタチになってきたようで、本番が楽しみ(^-^)


2004年04月26日

電池ボックス

電池ボックスの振動対策で悩む。振動で電池が揺れ、電極が一瞬離れてしまいマイコンがリセットされる。

オシロスコープで観察すると20msec程度の瞬停が観察される。100uFのケミコンや0.22Fのスーパーキャパでは除去できなかった。電池をすべり防止ゴムで巻いてもダメ。

電池を横向きにして衝撃を与えてもたまに結構落ちやすい。スプリングレス電池ケースを探してくるしかなさそうだ。

AVRマイコン

先日、男ならデバッグなどLED一本あれば十分だ。と書いたが、既においらはLEDデバッグなんて出来ない軟弱な体になってしまってました。純正のICE(In circut emulater) ICE200が世代交代で安くなってたので買いました。

届いた商品。ICE200とAVRISP。いずれもATMEL純正

内容物はこんな感じ

いやぁすばらしい。まるで地獄から天国です。レジスタ見ながらステップ実行で原因が一発でつかめた。これが無かったときの苦労はもうトンでもない事で...ICE様さまです。原因が分からず数日間苦労してたので、既に元を取りました。

差し上げます

古いですがモニター一体型のPCがあります。Panasonic Woody。ほとんど骨董品同然ですが動作します。ご自分でOSを入れたりメンテできる方で、欲しい方がいらっしゃいましたら差し上げます。

なんとタッチパネル付き!です。Pentium120MHz、SIMMメモリ付きです。OSはありません。気長に待ちます。

2004年04月27日

デジタルオシロスコープ

テクトロ買っちった (^o^)/ アマチュアリズムが崩れてるなぁとか思うが納期には逆らえません。文明の力を借ります。