2010-03 << 2010-04 >> 2010-05

2010-04-30 (金)

新卒の人たちが会社に来た.

*dotファイルのrank=same

Graphvizでクラスの依存関係を出したりする.ノードのrankってsame以外指定できないの?同じランクにしたいものを集めるのが面倒くさい.

*Chromeを使わないで放置してたら何か言われた

ひどい.読めない.

chrome.png

2010-04-27 (火)

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-16 (金)

プロジェクトの打ち上げ.ご馳走様でした.

寒いと思ったら,雨じゃないものが降ってるんですが.

森下から歩いて帰る.寒い.

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のレベル変換回路がオープンコレクタになっている場合はプルアップを忘れずに.実は少しはまりました.

mzk-wnh01.jpg

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でアクティビティ図のようなフローチャートのようなものを出力するプログラム書いてみた.コード中のコメントとかを適当に使ってくれます.

test_activity.png

真面目にパースしているわけでは無くて,怪しげな正規表現で必要な情報を取得しています.これは完全ではありませんが,コーディング規約とかに反していなければ問題ない気がします.

仕事中に書いてたような誤解を受けそうですが,休憩中と仕事後に書いてます.…ちゃんと仕事してます.本当です.

2010-04-06 (火)

*YUREXを分解する

土曜日にチームラボの電子工作祭りに行った際,YUREXを特価で買いました.

危うく,買っただけで放置してしまうところだったので,箱を開けることに.

CIMG0002.jpg

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

CIMG0004.jpg

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

CIMG0005.jpg

中身を取り出してみると,意外と安っぽ…じゃなかった,コンパクトで軽量な実用性を意識したつくりになっています.

LCDも10桁あるので,文字通り生涯カウンタとして使えます.

早速組み立てて使ってみたいところですが,分解します.

CIMG0010.jpg

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

CIMG0014.jpg

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

基盤の裏も見たいので,基盤をはずして液晶もはがします.

CIMG0016.jpg

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-04 (日)

朝帰ってくる.

夜まで寝る.

2010-04-03 (土)

今日はチームラボで勉強会(?).というか,電子工作祭り.みんなすごいな.また機会があったら今度は何か発表したい.

カヤックの人が会場でYUREXを売っていたので1つ買ってみた.

@crexistaのところで誕生日パーティしてもらった.

2010-04-02 (金)

やっぱり風邪ひいたっぽい.起きたらのどが少し痛い.

明日は,チームラボ行って来る.13時とか出社時間より早いんですが….

2010-04-01 (木)

エイプリルフールってコスプレとかするイベントだったっけ?と考えた日.

夜:なんだか風邪っぽい.

*2年目

今日,入社式やってたらしい.

社会人になって1年経ちました.今までやっていたプロジェクトも一段落ついたので,少し休みたいなぁ.