2010-04-30 (金)
新卒の人たちが会社に来た.
*dotファイルのrank=same
Graphvizでクラスの依存関係を出したりする.ノードのrankってsame以外指定できないの?同じランクにしたいものを集めるのが面倒くさい.
*Chromeを使わないで放置してたら何か言われた
ひどい.読めない.
この日記はフィクションです.登場する人名・団体名・地名・職業などはぜんぶ架空のものです. なので実際のものとは何も関係がありません. それから,写真のように見える画像はCGもしくは念写によるものです.
新卒の人たちが会社に来た.
Graphvizでクラスの依存関係を出したりする.ノードのrankってsame以外指定できないの?同じランクにしたいものを集めるのが面倒くさい.
ひどい.読めない.
会社のLTで何を発表しようか悩んでいる.良いネタが無いなぁ
秋葉原に行って安い放射温度計を探したが,良さそうなのが無かった.やっぱりそれなりのものは,それなりの値段なのか.
ブラウザ三国志オフ.おなかいっぱい食べてきた.
たとえ楽しみな予定でも,予定が埋まるということで,少し憂鬱になるのはいったいどういうことなのか.
phpunit自体がPHPで書かれているせいで,テスト対象に致命的な問題が含まれているとテストがそこで止まってしまうのがとても不便.
XMLで設定書けます.
http://www.phpunit.de/manual/current/ja/appendixes.configuration.html
説明だけだとよく分からないので,phpunitのソース読んだほうが早いかも.
ディレクトリやファイルの指定が,設定ファイルからのパスではなくて,カレントディレクトリからのパスなのが書くときに少し不便だな.
Linux環境がほしくなったので,VMware Playerで.どうせ,ssh経由で使ってるのでVMware Serverのほうがよさそうだな.今回は,Ubuntuにしました.VMware用のイメージが用意されていたので,それを使う.
aptitudeの使い方見たら,
この aptitude にはスーパー牛さんパワーなどはありません。
とか出てきて,意味不明.調べたらapt-getのイースターエッグのことを指してるのか.そして,「ウワバミに食べられた象」ですか.
ssh,ncurses-dev,bison,flex,texinfoをインストール
今日も寝る.2日間で30時間以上寝ている.
目が覚めて,気づいたらSSHのRFCを読んでいた.
今まで素のviを使っていたのだけど,会社でvimを使うようになったので家の環境もvimにしておく.
折角なのでデフォルトで色分けするようにして,バックスペースも使えるようにした.
寝る日.
今日も有給とってあるので休み.
朝起きて,2時間くらい無線LANルータで遊んで,昼寝して,起きたら外が暗い.
MZK-WNHを買ったのは良いけど,ファームウェアが腐ってて使い物にならないので,どうにかしたい.
以前にも書きましたが,OSやクロックとかも判明したので.
とりあえず,半田付けしてシリアルコンソールを使えるように.MZK-WNH側のRxがプルアップされてないので,RS-232Cのレベル変換回路がオープンコレクタになっている場合はプルアップを忘れずに.実は少しはまりました.
57600kbps,ストップビット1,8ビット,パリティなし,で接続.
U-Bootが使われているのでメニューに従って起動時に急いで「4」を入力するとコマンドラインモードに入れます.
圧縮されたカーネルイメージはbfc50000に入っているようなので,適当にメモリダンプしてみると,ファームウェアのイメージがそのまま入っていました.起動時のMTDのメッセージを見れば,だいたいフラッシュメモリ上の配置が分かります.
とりあえず,tftp経由でLinuxのカーネル起動できた.これでファームウェア壊しても安心.カーネルにUSBドライバが入ってるみたいだけど,基板上にそれらしいパターンがないなぁ.残念.
FreeBSD上で作業してるのだけど,Linuxのカーネルいじったりsquashfs使ったりするのでLinux環境もほしいなぁ.
ドライバを探してみた感じだと,DD-WRTには,raethがあるな.
なんだか,瞼が腫れているので眼科に行ったらものもらいだといわれた.
行ってきた.正直,Googleの環境にはちょっと惹かれる.D社も好きなのだけど.
食べ物もあったのだけど,話とかしてたらあまり食べれなかった.
今日はたくさん働いた気がするのは,仕様書作る作業がつまらなかったからかも.
新人研修の夕食と我々の食事の水準が違いすぎるな.片方は誕生日パーティだった気がするが,後者がそれだと言ったら誰が信じるだろうか.
新卒研修の夕食が豪華で羨ましい.一年前はインフルエンザで大変だったな….
正規表現はテキスト処理の必需品ですが,構造化された文字列を処理するのはちょっと(?)難しいです.
ただ,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プログラマっぽい日記を書きました.
UMLのモデルとかって,勝手にコードと同期してくれるのが常識と思ってたんですが,世の中そうでは無いの?
OMGが策定している,メタデータをXMLで書くときの仕様です.astah(Jude)はUMLをXMIで入出力する機能があるのですが,Professional版でないと使えません.Communityだとjudeファイルしか入出力できなくて,しかも内部データをシリアライズしたっぽい中身で,他のソフトではやたら使いにくい.
手元に,古いバージョンのProfessionalのライセンスがあったので,試しにXMIを出力して,それを編集しながら書式を確認します.
XMI.header要素には,出力したソフトの情報やバージョン等が入っています.モデルの内容には影響しないので,気にする必要なさそうです.
主な情報は,XMI.content要素に含まれています.judeで必要なデータは,UML:ModelとXMI.extensionです.
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で読み込んで編集する際におかしなことになりますが,ここでは無視.
プロジェクトに含まれる図の情報とか.
色や線のスタイル等の情報もここに入っています.
続く(?)
PHPのソースをパースしてsvgでアクティビティ図のようなフローチャートのようなものを出力するプログラム書いてみた.コード中のコメントとかを適当に使ってくれます.
真面目にパースしているわけでは無くて,怪しげな正規表現で必要な情報を取得しています.これは完全ではありませんが,コーディング規約とかに反していなければ問題ない気がします.
仕事中に書いてたような誤解を受けそうですが,休憩中と仕事後に書いてます.…ちゃんと仕事してます.本当です.
土曜日にチームラボの電子工作祭りに行った際,YUREXを特価で買いました.
危うく,買っただけで放置してしまうところだったので,箱を開けることに.
とても高級感のある箱に入っています.カヤックと明和電機のコラボという正気を疑う組み合わせ.
緩衝材のスポンジもしっかりしています.さすが12,600円.
中身を取り出してみると,意外と安っぽ…じゃなかった,コンパクトで軽量な実用性を意識したつくりになっています.
LCDも10桁あるので,文字通り生涯カウンタとして使えます.
早速組み立てて使ってみたいところですが,分解します.
邪魔なバーは取っ払いましょう.
一旦は機械的なバーの動きに変換されますが,センサー部では光学的に読み取っているようです.非接触です.さすが,12,600円.
基盤の裏も見たいので,基盤をはずして液晶もはがします.
L24C02Bが左右に配置されていて,何かと思いましたがEEPROMのようです.なぜか2つも使うという贅沢なつくり.
CPU等は,樹脂で固められてるので,何を使っているのか判別できません.ただ,USBがつながっているほうは,P1.1 P1.0とかあるので,TIのマイコンっぽいなぁ.あと,LCDをコントロールしている方は,MISO,MOSIとかあがあるのでSPI経由でプログラムできるマイコンでしょう.SSBとあるのでこれは….
時間があればEEPROMの中身を読んだり,マイコンが何か調べてプログラム見たりしたいけど,そこまでする魅力があるデバイスなのかと問われると….
文字列から,関数呼び出しのような部分を抜き出して,関数と引数を取得してみる.
簡略化するために文字列とか途中のコメントの処理は抜きで.
<?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]); }
今日はチームラボで勉強会(?).というか,電子工作祭り.みんなすごいな.また機会があったら今度は何か発表したい.
カヤックの人が会場でYUREXを売っていたので1つ買ってみた.
@crexistaのところで誕生日パーティしてもらった.
エイプリルフールってコスプレとかするイベントだったっけ?と考えた日.
夜:なんだか風邪っぽい.
今日,入社式やってたらしい.
社会人になって1年経ちました.今までやっていたプロジェクトも一段落ついたので,少し休みたいなぁ.