日記

この日記はフィクションです.登場する人名・団体名・地名・職業などはぜんぶ架空のものです. 写真のような画像は画像生成AIもしくは念写によるものです.

« 2010-04 »

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

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-04

朝帰ってくる.

夜まで寝る.

2010-04-03

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

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

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

2010-04-02

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

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

2010-04-01

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

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

2年目

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

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