日記
この日記はフィクションです.登場する人名・団体名・地名・職業などはぜんぶ架空のものです. 写真のような画像は画像生成AIもしくは念写によるものです.
2010-04-30
新卒の人たちが会社に来た.
dotファイルのrank=same
Graphvizでクラスの依存関係を出したりする. ノードのrankってsame以外指定できないの? 同じランクにしたいものを集めるのが面倒くさい.
Chromeを使わないで放置してたら何か言われた
ひどい.読めない.

2010-04-26
会社のLTで何を発表しようか悩んでいる. 良いネタが無いなぁ
2010-04-25
秋葉原に行って安い放射温度計を探したが,良さそうなのが無かった. やっぱりそれなりのものは,それなりの値段なのか.
2010-04-24
ブラウザ三国志オフ.おなかいっぱい食べてきた.
2010-04-22
たとえ楽しみな予定でも,予定が埋まるということで,少し憂鬱になるのは いったいどういうことなのか.
2010-04-21
phpunit自体がPHPで書かれているせいで,テスト対象に致命的な問題が含まれていると テストがそこで止まってしまうのがとても不便.
2010-04-20
phpunit --configuration
XMLで設定書けます.
http://www.phpunit.de/manual/current/ja/appendixes.configuration.html
説明だけだとよく分からないので,phpunitのソース読んだほうが早いかも.
ディレクトリやファイルの指定が,設定ファイルからのパスではなくて, カレントディレクトリからのパスなのが書くときに少し不便だな.
2010-04-19
とりあえずLinux環境を
Linux環境がほしくなったので,VMware Playerで. どうせ,ssh経由で使ってるのでVMware Serverのほうがよさそうだな. 今回は,Ubuntuにしました. VMware用のイメージが用意されていたので,それを使う.
aptitudeの使い方見たら,
この aptitude にはスーパー牛さんパワーなどはありません。
とか出てきて,意味不明.調べたらapt-getのイースターエッグのことを指してるのか. そして,「ウワバミに食べられた象」ですか.
ssh,ncurses-dev,bison,flex,texinfoをインストール
2010-04-18
今日も寝る. 2日間で30時間以上寝ている.
目が覚めて,気づいたらSSHのRFCを読んでいた.
viからvimに
今まで素のviを使っていたのだけど,会社でvimを使うようになったので 家の環境もvimにしておく.
折角なのでデフォルトで色分けするようにして,バックスペースも使えるようにした.
2010-04-17
寝る日.
2010-04-15
今日も有給とってあるので休み.
朝起きて,2時間くらい無線LANルータで遊んで,昼寝して,起きたら外が暗い.
MZK-WNHとかU-Bootとか
MZK-WNHを買ったのは良いけど,ファームウェアが腐ってて使い物にならないので, どうにかしたい.
スペック
以前にも書きましたが,OSやクロックとかも判明したので.
- CPU Ralink RT3050F 320MHz
- Flash 29LV320 4MByte
- SDRAM A3V28S40ETP 16MByte
- OS Linux 2.6.21
- ほか U-Boot,squashfs,BusyBox
シリアルコンソール
とりあえず,半田付けしてシリアルコンソールを使えるように. MZK-WNH側のRxがプルアップされてないので, RS-232Cのレベル変換回路がオープンコレクタになっている場合は プルアップを忘れずに.実は少しはまりました.

57600kbps,ストップビット1,8ビット,パリティなし,で接続.
U-Boot
U-Bootが使われているのでメニューに従って起動時に急いで「4」を入力すると コマンドラインモードに入れます.
圧縮されたカーネルイメージはbfc50000に入っているようなので, 適当にメモリダンプしてみると,ファームウェアのイメージがそのまま入っていました. 起動時のMTDのメッセージを見れば,だいたいフラッシュメモリ上の配置が分かります.
とりあえず,tftp経由でLinuxのカーネル起動できた. これでファームウェア壊しても安心. カーネルにUSBドライバが入ってるみたいだけど, 基板上にそれらしいパターンがないなぁ.残念.
FreeBSD上で作業してるのだけど,Linuxのカーネルいじったり squashfs使ったりするのでLinux環境もほしいなぁ.
ドライバを探してみた感じだと,DD-WRTには,raethがあるな.
2010-04-14
なんだか,瞼が腫れているので眼科に行ったらものもらいだといわれた.
Google TechTalk Tokyo 2010 Spring
行ってきた. 正直,Googleの環境にはちょっと惹かれる. D社も好きなのだけど.
食べ物もあったのだけど,話とかしてたらあまり食べれなかった.
2010-04-13
今日はたくさん働いた気がするのは,仕様書作る作業がつまらなかったからかも.
新人研修の夕食と 我々の食事の水準が違いすぎるな. 片方は誕生日パーティだった気がするが,後者がそれだと言ったら誰が信じるだろうか.
2010-04-12
新卒研修の夕食が豪華で羨ましい. 一年前はインフルエンザで大変だったな….
2010-04-08
正規表現でPHPのコードをパースする
正規表現はテキスト処理の必需品ですが,構造化された文字列を処理するのはちょっと(?)難しいです.
ただ,PCREの拡張正規表現を使うと,比較的簡単にプログラムのコードのようなものから 必要な情報を抜き出すことができます.
ちゃんとしたパーサがあれば使うことに越したことはありませんし, 正確な情報が取れますが,手っ取り早く済ませたい場合, やはり正規表現で書くことになると思います.
$code = preg_replace('/([\"\'])([^\1\\\\]|(\\\\.))*?\1/',' _STR_ ',$code); // 文字列を置き換える
$code = preg_replace('/\/\/.*/',' _COMMENT_ ',$code); // コメントを置き換える
$code = preg_replace('/\s+/',' ',$code); // 連続する空白をスペースに
$code = preg_replace('/((?<=[^\w_])\s+(?=[\w_]))|((?<=[\w_])\s+(?=[^\w_]))/','',$code); // 余分な空白削除
preg_match_all( <<< RE_END
/
(
# 記号
\{ | \} |
# 予約語
(?<=[^\w])
(?:if|else|elseif|catch|try|switch|for|foreach)
(?=[^\w])
)
# 予約後に続くパラメータ等
((?<=[\w])\s*[^;\{\}:]+)?
/x
RE_END
, $code, $match)
本当は複数行コメントとか色々ありますが,とりあえずこんな感じで書けると思います.
拡張正規表現の後方一致検索(?<=)や前方一致(?=)は正規表現の先頭や末尾でしか 使わない人をたまに見かけますが,途中に入れてトークン切り出しの制約を 付けると便利です. 上のように書いておけば,$match[1]に記号や予約語が,$match[2]にパラメータに あたる文字列が入っているので,後々扱いやすくなります.
ただ,関数の宣言や呼びだしとか,変数への代入とかの情報も欲しくなると, 恐ろしいことになるので気を付けた方が良いでしょう. 複数の正規表現で書ければ良いのですが,前後関係の情報が失われてしまうので できません. preg_系の関数がマッチした位置を列挙できれば良いのですが….
PHPプログラマっぽい日記を書きました.
2010-04-07
UMLのモデルとかって,勝手にコードと同期してくれるのが常識と思ってたんですが, 世の中そうでは無いの?
XMIでUMLを書く
OMGが策定している,メタデータをXMLで書くときの仕様です. astah(Jude)はUMLをXMIで入出力する機能があるのですが,Professional版でないと 使えません. Communityだとjudeファイルしか入出力できなくて, しかも内部データをシリアライズしたっぽい中身で,他のソフトではやたら使いにくい.
手元に,古いバージョンのProfessionalのライセンスがあったので,試しにXMIを出力して,それを編集しながら書式を確認します.
XMI.header 要素
XMI.header要素には,出力したソフトの情報やバージョン等が入っています. モデルの内容には影響しないので,気にする必要なさそうです.
XMI.content 要素
主な情報は,XMI.content要素に含まれています. judeで必要なデータは,UML:ModelとXMI.extensionです.
UML:Model
UMLで表現されるデータはUML:Model要素に入っています.
例:
<UML:Model xmi.id="model001" name="no_title" xmlns:UML="org.omg.xmi.namespace.UML">
<UML:Namespace.ownedElement>
<UML:Class xmi.id="c001" name="テスト">
<UML:ModelElement.namespace>
<UML:Namespace xmi.idref="model001"/>
</UML:ModelElement.namespace>
<UML:Classifier.feature>
<UML:Attribute xmi.id="attr001" name="属性テスト">
<UML:ModelElement.namespace>
<UML:Namespace xmi.idref="c001"/>
</UML:ModelElement.namespace>
<UML:Feature.owner>
<UML:Classifier xmi.idref="c001"/>
</UML:Feature.owner>
</UML:Attribute>
</UML:Classifier.feature>
</UML:Class>
</UML:Namespace.ownedElement>
</UML:Model>
「テスト」というクラスに「属性属性テスト」がある場合はこんな感じです. 属性に対して,ownerとnamespace両方を指定しないと行けないあたりが冗長で面倒ですが, 仕方ないみたいです.
属性に型情報を付けておかないと,judeで読み込んで編集する際に おかしなことになりますが,ここでは無視.
XMI.extension
プロジェクトに含まれる図の情報とか.
色や線のスタイル等の情報もここに入っています.
続く(?)
svgで出力するプログラム書いてみた
PHPのソースをパースしてsvgでアクティビティ図のようなフローチャートのような ものを出力するプログラム書いてみた. コード中のコメントとかを適当に使ってくれます.

真面目にパースしているわけでは無くて,怪しげな正規表現で必要な情報を 取得しています.これは完全ではありませんが, コーディング規約とかに反していなければ問題ない気がします.
仕事中に書いてたような誤解を受けそうですが, 休憩中と仕事後に書いてます. …ちゃんと仕事してます.本当です.
2010-04-06
YUREXを分解する
土曜日にチームラボの電子工作祭りに行った際, YUREXを特価で買いました.
危うく,買っただけで放置してしまうところだったので,箱を開けることに.

とても高級感のある箱に入っています. カヤックと明和電機のコラボという正気を疑う組み合わせ.

緩衝材のスポンジもしっかりしています.さすが12,600円.

中身を取り出してみると,意外と安っぽ…じゃなかった,コンパクトで軽量な 実用性を意識したつくりになっています.
LCDも10桁あるので,文字通り生涯カウンタとして使えます.
早速組み立てて使ってみたいところですが,分解します.

邪魔なバーは取っ払いましょう.

一旦は機械的なバーの動きに変換されますが,センサー部では光学的に読み取っているようです. 非接触です.さすが,12,600円.
基盤の裏も見たいので,基盤をはずして液晶もはがします.

L24C02Bが左右に配置されていて,何かと思いましたがEEPROMのようです. なぜか2つも使うという贅沢なつくり.
CPU等は,樹脂で固められてるので,何を使っているのか判別できません. ただ,USBがつながっているほうは,P1.1 P1.0とかあるので,TIのマイコンっぽいなぁ. あと,LCDをコントロールしている方は,MISO,MOSIとかあがあるのでSPI経由で プログラムできるマイコンでしょう.SSBとあるのでこれは….
時間があればEEPROMの中身を読んだり, マイコンが何か調べてプログラム見たりしたいけど,そこまでする魅力がある デバイスなのかと問われると….
2010-04-05
PHPで関数呼び出しっぽい文字列を抽出する正規表現
文字列から,関数呼び出しのような部分を抜き出して,関数と引数を取得してみる.
簡略化するために文字列とか途中のコメントの処理は抜きで.
<?php
$s = 'a=( testfunc((1+1),1+1*(1+1),123,f(1,2)) +1)';
if (preg_match('/(?P<func>\w+)\s*\( (?P<params> (?: (?:[^()]+) | (?P<p>\( (?: (?>[^()]+) | (?P>p) )* \) ) )* ) \)/msx',$s,$match)) {
$f = $match['func'];
$s = $match['params'];
preg_match_all('/\G( (?: (?:[^(),]+) | (?P<p>\( (?: (?>[^()]+) | (?P>p) )* \) ) )+? )(?:,|$)/msx',$s,$match);
echo $f."\n";
print_r($match[1]);
}
2010-04-03
今日はチームラボで勉強会(?).というか,電子工作祭り. みんなすごいな. また機会があったら今度は何か発表したい.
カヤックの人が会場でYUREXを売っていたので 1つ買ってみた.
@crexistaのところで誕生日パーティしてもらった.
2010-04-01
エイプリルフールってコスプレとかするイベントだったっけ?と考えた日.
夜:なんだか風邪っぽい.
2年目
今日,入社式やってたらしい.
社会人になって1年経ちました. 今までやっていたプロジェクトも一段落ついたので,少し休みたいなぁ.