• MTをアップグレード > 3.34

    長らく放置していたのだが、もそもそとアップグレード。
    特にやらないといけないことはなくて、モジュールを置き換えて、サイトの再構築→終了。

    以前から気にはしていたのだけど、ブログの見た目をStyleCatcherというプラグインでテーマのリポジトリから選択して切り替えられる、ということでこれも試してみた。
    (RSSリーダーで読んでるとまったく関係ないけど。)

    IIROTY!!: StyleCatcher用テーマ・リポジトリのリンク集」で紹介されていたリポジトリを眺めてみる。

    やはり餅は餅屋というか、まっとうにデザインできる人のアウトプットが活用できるのはうれしい。
    ただ、自分としてはwebのデザインはliquidレイアウトが好ましい、と思っているのでなかなか条件に合うデザインがないのがつらいところ。
    ※ちみちみカスタマイズするって選択肢もあるけど、StyleCatcherを使う良さをspoilすることになるしー。
    そんなこんなでこんなテーマを選んでみた。

    決め手は、↓こんな感じ。

    • liquidレイアウトだけど、max-widthを使うことでデザインがくずれすぎないセンを指定してること。
    • H1~の見出し部分で、勝手に大文字にしないこと。
    背景画像の黄色い果物はマンゴーらしい。特にマンゴーが好きってわけじゃないけど、黄色と緑色はなんかきれいだ。

    ついでに、外部のサイトへのリンクにアイコンが付くようにしてみた。
    (これもRSSリーダーで読んでると関係ないか。パーマリンク先を表示するタイプでない限り)
    下記URL参照。
    53 CSS-Techniques You Couldn't Live Without | Smashing Magazine

  • tracとGraphvizPlugin

    {% raw %} pukiwikiにGraphvizプラグインというのがある。
    graphvizはdot言語(?)で記述した構造を画像化するソフトだ。これをwikiのプラグインから使うというもの。 wikiで編集したdot言語が図に置き換わる。

    ここのブログの以下のエントリで使っている図はgraphvizで描いたものだ。

    導入

    • graphvizとlibrsvg2をインストールする。FC3、FC5の場合yumなりでインストールできちゃうはず。
      librsvg2はSVG出力しないか、pngでアンチエイリアスを使わない場合不要っぽいが、うちの環境では何かの依存関係ですでにインストールされていた。
    • GraphvizPluginをダウンロードする。
      今回使用したのは0.9
    • ダウンロードしたアーカイブをどこか適当な場所に展開する。
    • 展開先/graphvizplugin/0.9/ というディレクトリがあるはずなのでcdし「python setup.py bdist_egg」
      展開先/graphvizplugin/0.9/dist/graphviz-0.6.9-py2.3.egg というファイルが出来たはずなので、tracプロジェクトのplugins/ディレクトリにコピーする。 細かいことはREADMEに書いてある。
    • Graphviz Pluginはdotから生成した画像を保存する場所(=IMGのSRCのリンク先)が必要なのでこれを用意する。
      tracdもしくはwebサーバから書き込み可能にしなければならない。環境に応じて適宜。
      うちの環境では以下のディレクトリを使うことにした。
      tracプロジェクト/htdocs/graphviz/
    • trac.iniに[graphviz]セクションを追加する。
      うちの環境では以下の通り。他にもいろいろ設定できるが環境によって必須なのはgraphvizなどのコマンドのpath。
      [graphviz]
      cache_dir = tracプロジェクト/htdocs/graphviz
      png_antialias = 1
    • ここの環境ではtracdを使っているので再起動した。
    Graphvizプラグインを導入し、tracのwikiに以下のように記述すると、
    {{{
    #!graphviz
    digraph G {
        graph [rankdir="LR" size="6,4"]
        t1 [ label="明日は" ]
        t2 [ label="明日の" ]
        t3 [ label="風が" ]
        t4 [ label="吹く" ]
        t5 [ label="吹けば" ]
        t6 [ label="桶屋が" ]
        t7 [ label="儲かる" ]
        t1 -> t2 -> t3 -> t4
        t3 -> t5 -> t6 -> t7
        a->b->c
    }
    }}}
    

    という画像が生成される。日本語も問題ない。

    dot言語については本家Graphviz チュートリアルがわかりやすい。 {% endraw %}
  • 継続的インテグレーションとランプ

    Cruise Control .NETを使って継続的インテグレーションを始めるにあたり、どうしてもやっておきたかったことがある。

    それは、「ビルドの結果をランプを使って目視する」ということだ。というか正直に白状すれば、「ランプで結果を目視」がしたかったから継続的インテグレーションをやってみようと思い立ったのだけど。まさに「本末転倒」「手段が目的になっている」わけだ。でも、なんでもいいんだ、これ面白くない?って言えればw

    パトライトの雄姿。

    ちょっと緑がまぶしかったので、現在は半透明テープを何重か巻きつけて明るさを抑えてある。

    購入したのはパトライト社の「PHE-3FB」。RS232CでPCと接続できる。イーサネットに繋がるモデルもあったけどシリアルインタフェースモデルを選んだ。より安かったので。

    同社の通販サイト「ぱっとクル」で購入。大体35000円。
    (今改めて確認したら、イーサネットに繋がるモデルしかリストにない・・・・シリアルインタフェースは人気ないんだろうか。)

    ランプの点灯・消灯・点滅(あとブザー)に必要なプロトコルの説明が付属していて、プログラムは自分でやってね、という製品。

    構成を考える

    • ビルドサーバはWindowsで、Cruise Control .NETが稼動している。
    • ランプのコントロールプログラムはunix上のスクリプトでさらっと書いてさっさと動かしたい。
    • tracでプロジェクトwebを運用しているlinuxサーバにシリアルポートがついている。
    ということで、以下の構成とした。
    • cgiはGETでパラメータ指定。
      • 赤・緑・黄のそれぞれのランプを、点灯・点滅・消灯の状態にすることができる。
      • ブザー制御について、ブザーがけたたましすぎるのと、夜間ビルドで失敗してブザー鳴りっぱなし、というのも困るので実装しない。
    • CCNETからcgiの呼び出しは、コマンドラインツールでさくっと実現する。
    • cgiはperlで書き(なんでもいいけど)、シリアルポートへの出力は/dev/ttyS0を用いる。

    実装

    cgiスクリプト(perl)
    ※使用は自己責任で。何が起こっても作者は責任を負いかねます。
    • これを適当なURLで参照できるようにwebサーバ内に配置する。http://サーバ/pat0/のような。
      • パラメータは「r」「g」「y」でそれぞれ赤・緑・黄のLEDに対応する。
      • 指定できる値は、それぞれ「on(点灯)」「blink(点滅)」「off(消灯)」
      • 例:赤だけ点灯=http://サーバ/pat0/?r=on&g=off&y=off
      • 例:黄だけ点滅=http://サーバ/pat0/?r=off&g=off&y=blink
    • シリアルポートの設定をしていないので・・・
      • 事前に設定しておくか、制御コードを追加してください。設定すべき状態はPHE-3FBのマニュアルに書いてある。9600baud
      • ここではFedora Core 5を使っているが、デフォルトのままで動くようだ。
    • 参照するシリアルポートが/dev/ttyS0固定なので・・・
      • 適宜変更するか、コンフィギュレーション可能にしてください。
    • /dev/ttyS0はownerがrootでgroupがuucp。otherには読み書き権がないので・・・
      • 今にしてみればsuexecを使うかotherにrwを付与すればよかったのかもしれないが、apacheユーザをuucpグループに加えた。

    セットアップ

    後は、CCNETから呼び出しできるようにccnet.configを設定する。
    使っているCCNETが未だに1.0.1なので、最新版のCCNETだと動かないかも??
    • ビルドタスクの最初にビルド中を表す「黄」点灯状態に。
      <tasks>
          <exec>
              <executable>pat.bat</executable>
              <buildArgs>begin</buildArgs>
              <buildTimeoutSeconds>30</buildTimeoutSeconds>
          </exec>
      
    • pat.batの中身は以下のとおり。パス/URL関係は環境に合わせて適宜。
      @echo off
      set STATUS="%CCNetIntegrationStatus%"
      set url=http://linuxサーバ/pat0/?
      
      if "%1" == "begin" (
        set para="%url%r=off&g=off&y=on"
      ) else (
        if %STATUS% == "Success" (
          set para="%url%r=off&g=on&y=off"
        ) else (
          set para="%url%r=on&g=off&y=off"
        )
      )
      
      curl.exe -s %para% > nul
      
    • ビルド結果のpublish時に再度ランプ点灯。
      ビルド成功なら緑、ビルド失敗なら赤を点灯させる。状態の判定は、pat.batの中で変数環境CCNetIntegrationStatusを参照して行っている。
      <publishers>
          <xmllogger logDir="log" />
      
          <exec>
              <executable>pat.bat</executable>
              <buildTimeoutSeconds>30</buildTimeoutSeconds>
          </exec>
      
  • USB機器を作る - 思いつき編

    以前、Cマガジンで「自分だけのUSB機器を作ろう」という特集を読んだとき、自分で操作できるUSB機器を作ってみたいなぁと思ったもののなんとなくスルーしていた。

    最近ふとしたきっかけで、ストロベリーリナックスの「EZUSB電子工作入門パーツセット」というキットを知った。これは、EZUSB FX2マイコンボードと「EZ-USB電子工作入門」に出てくる作例に対応した部品(掲載のほとんどのパーツ。詳細はストロベリーリナックスのページを参照)がセットになったものだ。
    書籍だけ買ってながめていたら、あれこれ作ってみたいものがふつふつ浮かんできたので、さっそくオーダー。

    土曜日の昼過ぎに申し込んだら月曜日のAMにはもう届いてた。当然不在だったのだが、こういうとき郵便の代引きを使うと24時間荷物を受け取れるから便利だ。深夜に郵便局まで行って受け取ってきた。

    なんせ半田付けなど中学時代以来。電子工作の道具など何も持っていないので道具からそろえることに。

    用意したもの

    • 鉛フリー対応はんだこて
      • 「鉛フリー」というキーワードだけは聞いたことがあった。よくわからんが鉛が溶け出して問題になってるっていうし、これがいいだろう(と考えたのが不幸の始まり。鉛フリー半田があんなに扱いにくいものだとは・・)
      • セラミックヒーターとニクロムヒーターが並んでいた。これまたよくわからんがセラミックがよさそうだ、と適当に選んだ。「鉛フリー対応こて先」って書いてあるし。大洋電機「CXR-40」
    • 鉛フリーはんだ
      • 自分が最後に半田付けしたときは、鉛フリー、なんて書いてある半田なんかあったかな・・・。よくわからんのでこれに。
    • はんだこて台
      • 最初はこて先クリーナーにこてを乗っけられるタイプのものを使っていたが不安定で危ないと思った。
      • なので後から、こてをホールド出来るタイプを買った。

    • テスター
      • ソフトウェアのデバッグの場合、手がかりをいかようにもアウトプットすることが出来るが電子工作の世界はそうはいかんだろう、ということでテスターも購入。
      • アナログタイプとデジタルタイプがあったが、なんとなくアナログタイプを購入。
    • ピンセット
      • 手で持っているとはんだづけするときにやけどしちゃうので必須。
      • はんだづけの場所・角度によっては、こてとピンセットを持ち替えないとはんだづけが難しかった。。。
    • ニッパー
      • リード線を切ったり、部品の足を切ったり。
    • はんだ吸い取り線
      • 修正できるように。

    電光掲示板を作る

    電子回路の知識は皆無だし、はんだづけも中学生のとき教材でラジオ/インターホンを作って以来だ。
    作例どおり作って「電子工作→ファーム作成→転送→動作」という流れに慣れるってセンで。

    最初に組み立てるEZUSBワンボードマイコン
    クリスタル発信器、ポリスイッチ、USBコネクタ、EEPROMソケット、ピンソケット、をはんだづけしてできあがり。 ここで一応疎通確認。細かいことはあちこちに載ってるので割愛。
    • USBポートに接続
    • EZ-USBのドライバをインストール
    • bulkloopというファームを開発キットに添付のIDEでビルドする。
    • EZ-USBコントロールパネルから「Download」ボタンでファームをEZ-USBに転送。
    • 「Cypress EZ-USB Sample Device」でドライバを要求されるのでこれもインストール。
    • bulkloop.exeを実行して動きを確認。

    電光掲示板部分の表。
    LED、抵抗×8、LEDの下方に真ちゅう線×8、をはんだづけ。
    EZUSBボードと比べるとはんだづけが多い&細かくて大変だ。。隣り合うスルーホール間で部品をはんだづけするだけで一苦労。
    一番左の抵抗だけズレているのは、足の切り方があまくてスルーホール3マス分に収まらなかった(^^;)
    はんだ盛りすぎというかなんというか(^^;)

    電光掲示板部分の裏。
    ピンヘッダ、リード線をはんだづけ。
    部品の足やピンをはんだづけするのは割りとすぐに慣れるけど、ピンとリード線をはんだづけするのは手間取るなー。


    EZUSBのボードと電光掲示板のボードをソケットで接続。

    bulkloopと同様に、ファームを転送し、USBホストプログラムを実行して電光掲示板風。
    ファームもUSBホストも書籍についてきたものそのまんま。
    動いたー。

    反省会

    • はんだづけするときは、部品とランドをよく熱する。
      • これをやらないと、はんだがうまくランドまでのっからない。
    • 鉛フリーはんだは、溶けにくい。
      • ネットで調べてみると、扱いにくいものらしい。
      • 既に付けた部分で、しばらくこてをあてないと溶けなくて、やり直しに苦労した。
    • 基盤を固定する万力?があったほうがいいようだ。
      • 左手にピンセットで挟んだリード線、右手にはんだこて、で一度はんだづけしたピンにリード線をつけようとはんだを溶かしていると、基盤が「くるー」っと回転してウキーという気持ちになる(^^;)
    • 電源タップにスイッチのついているものを使ったほうがいいようだ。
      • はんだこてにはスイッチがないので、代わりにON/OFFできるようにタップにスイッチのついているものを選べばよかった。
    • はんだこては、熱したままの状態で放置しない。
      • 実は最初に買ったこて先は、酸化してしまったのか、先端ではんだが溶けないわ乗らないわで使えなくなってしまった。
      • Tipリフレッサーにチャレンジしてみたものの変化なし、ということであきらめて、こて先だけ交換してしまった。
      • リード線の皮膜をむいたり部品の配置をしたり、とはんだづけしないときは、はんだを溶かして塗りつけて電源を切る。
    • リードストリッパーもあったほうがいいようだ。
      • 書籍によれば、上手い人はニッパーで剥けるらしいが、やってみたら切れてしまった。
      • なので、カッターで片側の皮膜を削り、残りを手で剥いてニッパーでカット、という手間がかかった。


    もっと工作部分の練習をしないといかんね。
  • Cruise Control .NETとsubversionで文字化け

    VisualStudioで作成したプロジェクトをCruiseControl.NETを用いてdaily build→Nunitで自動テストしている。ソースコード管理にはsubversionを使っており、ビルドの度に最新バージョンをチェックアウトしている。

    導入したもの

    CCNETの設定で問題になったこと。

    CCNETサービスからsvn.exeが実行できない

    インストール直後につい忘れてしまう。
    subversionリポジトリから最新バージョンを取り出すためにsvn.exeを用いるのだが、環境変数APR_ICONV_PATHに値が設定されていなければならない。この環境変数は上記svn.exeをインストールするとインストーラによって「システムの環境変数」に設定されているのだが、後から起動したサービスには適用されないようだ。一度Windowsを再起動した。

    初回チェックアウトは手作業

    これはCCNETのマニュアルに書いてあるが、一度チェックアウトを行って二回目以降は「svn update」で取り出せる状況を作って置かなければならない。

    svn.exeの出力が文字化けする

    ここがハイライト。
    CCNETがsvnを使ってワーキングコピーを最新化する際、↓のようなコマンドラインで実行されるのだが、ログに日本語が含まれると出力内容が文字化けしてしまう。
    svnのパス log リポジトリURL -r "{2006-08-15T06:42:36Z}:{2006-08-22T14:02:39Z}" --verbose --xml --non-interactive
    コマンドラインで直接実行してみると、コマンドの実行結果はUTF-8で出力されているっぽい。これをCCNETが読み込む際、「nativeなエンコード(=CP932)→UTF-8?にエンコードを変換しようとして化ける」という流れなのだろう。
    文字化けするだけならWebダッシュボードのビルドレポートが悲しくなる程度の問題で済むのだが、どうも文字化けの影響でタグの部分が正しく解釈されないケースがあり、well-formedなXMLと判断されないことがある。こうなるとビルドが失敗してしまうので困る。

    そこでadhocにsvn.exeの出力を単純にUTF-8→MSKANJIに変換するbatを間に挟むことにした。
    • エンコードの変換にはコマンドライン実行できるiconvを用いた。(この辺unixだと苦労が少ないんだけどなー)
      • KaoriYa.netから入手。
      • 今回使用したのは「Libiconv DLL 1.10-20060516 for Windows」。このアーカイブに同梱されているiconv.dllとiconv.exeをどこか適当な場所に置く。
    • 以下のようなbatファイルを作って適当な場所に置く。
      @set SVN="C:\Program Files\Subversion\bin\svn.exe"
      @if "%1" == "log" %SVN% %* | iconv.exe -f utf-8 -t MS_KANJI
      @if "%1" NEQ "log" %SVN% %*
      • パスに空白入っているとダメだけど。ま、環境にあわせてよしなに。
      • 「log」以外のサブコマンドの場合は変換していない。その他のサブコマンドの出力はnativeエンコードになるようなので。
    • ccnet.configのsourcecontrol要素にsvn.batの所在を指定する。
      <sourcecontrol type="svn">
          <trunkUrl>リポジトリのURL</trunkUrl>
          <executable>svn.batのパス</executable>
      </sourcecontrol>
    こんな感じで、無理やり文字化けを回避。
    encoding="utf-8"なのに実体はMSKANJIなXMLが吐き出されるのはちょっと気持ちが悪いがCCNET(厳密には.NET Frameworkか)が気にせず読んでくれるのでヨシとする。