チケットのカテゴライズ

自分用のメモです。
Trac(TracLight)のチケットのフィールドをカテゴライズしようとソースコードに少し手を入れてみました。

手を入れたファイル:< install_dir >\python\Lib\site-packages\Trac-0.11.ja1-py2.5.egg\trac\ticket\templates\ticket.html
320行付近

<tr py:for="row in group(fields, 2, lambda f: f.type != 'textarea')" py:with="fullrow = len(row) == 1">
  <py:for each="idx, field in enumerate(row)">
     <!-- 追加コード はじめ -->
     <py:if test="'application_error'==field.name">
       <tr></tr>
       <tr ><td align="center" colspan="4" height="30px">---------- ほげほげ項目 ----------</td></tr>
    </py:if>
    <py:if test="'due_close'==field.name">
       <tr></tr>
       <tr ><td align="center" colspan="4" height="40px">---------- ぴよぴよ項目 ----------</td></tr>
    </py:if>
     <!-- 追加コード おわり -->

上記のようにコードを加えると、以下のようにチケットのフィールドをカテゴライズすることができます。

そもそも、なんでこんなことをしようと思ったかというと、

チケットにバグ以外の内容も登録してみようかな

カスタムフィールドがいるなぁ

カスタムフィールドが多くて何のフィールドを使えばいいかわかりづらいorz

じゃ、カスタムフィールドをカテゴライズしてみよう

っという流れでした。



かなり汚いコードですが、とりあえず目的は達成。
もっとスマートの方法が色々とありそうなので、Tracマスターのコメント求むm(_ _)m

Visual Studio orz

Visual Studio2005でプロジェクトのプロパティを開こうとすると、突如

ページを読み込もうとしているときにエラーが発生しました。
基になるRCWから分割されたCOMオブジェクトを使うことはできません。

というエラーが発生するようになってしまいました。


で、色々調べてみると、私と同じ現象の方を見つけました。
その方のブログを見ていると、最近リリースされ私もインストールしていたMicrosoft Source Analysis for C#(StyleCop)を使っていました。

そこで、これは怪しいかもとStyleCopのページを調べてみると、そのものズバリのバグが登録されていました。

http://code.msdn.microsoft.com/sourceanalysis/WorkItem/View.aspx?WorkItemId=9


この問題はversion4.3で修正されるようです。早くリリースされると良いのですが。
あと、ルールのドキュメント(http://blogs.msdn.com/sourceanalysis/pages/source-analysis-4-2-rules.aspx)もまだ揃ってないので、これも早くリリースされないかなぁ。

Amazonから高知の図書館の蔵書を検索

Firefox3がリリースされたということで、これを機会にブラウザをFirefoxに移行しました。
FirefoxではGreasemonkeyを使うことで、ブラウザの表示をカスタマイズできます。
ということで、http://blog.champierre.com/archives/542を参考に、amazonに高知図書館横断検索と高知大学図書館検索のリンクを追加するスクリプトを作成してみました。

上図のように、価格の上に図書館検索へのリンクが表示されます。
このリンクをクリックすると、その書籍が図書館にあるか検索します。
結構便利です。

ただし、これには大きな欠陥があります。
というのも、高知の図書館にはあまりにも技術書がなく、僕が読みたい書籍の検索結果は大体0件になるのです。
さみしいorz

ちなみに、ソースコードはこちら。

// ==UserScript==
// @name           amazon_kochi_library
// @namespace      http://d.hatena.ne.jp/iox
// @description    Kochi Library Lookup from Amazon book listings.
// @include        http://*.amazon.*
// ==/UserScript==


libsearch();

function libsearch() {
  document.body.parentNode.innerHTML.match(/name=\"ASIN\" value=\"[^4]*(4(\d{8}|-[\d-]{9}-)[\dX])/);
  if (RegExp.$1!=''){
    var asin = RegExp.$1
    var header = document.evaluate("//div[@id='priceBlock']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
    if (header) {
      // Create Kochi Prefecture Library Link
      var spl_link = document.createElement('a');
      spl_link.setAttribute('href', 'http://pref-liball.kochinet.ed.jp/agent/servlet/books?alllibraries=1&isbn=' + asin);
      spl_link.setAttribute('title', 'To Kochi Library');
      spl_link.setAttribute('target', '_blank');
      spl_link.innerHTML = '
» 高知図書館横断検索で検索'; header.parentNode.insertBefore(spl_link, header); // Create Kochi College Library Link spl_link = document.createElement('a'); spl_link.setAttribute('href', 'http://opac.iic.kochi-u.ac.jp/cgi-bin/exec_cgi/ibibser.cgi?ISBN_PRMKEY_bib=' + asin); spl_link.setAttribute('title', 'To Kochi College Library'); spl_link.setAttribute('target', '_blank'); spl_link.innerHTML = '
» 高知大学総合情報センター図書館で検索'; header.parentNode.insertBefore(spl_link, header); } } }

追記(2008/07/17)
同じことをしている人を発見!!
http://d.hatena.ne.jp/claddvd/20060929/p1

フォーマット文

Tracのコードをとある用事で調べていたときに悩んだことを記録しておきます。

python

# -*- coding: utf-8 -*-
format = '%14s:  %-10s  |   %14s:  %-10s';

print format % ('FirstName', 'Taro', 'LastName', 'Python');
print format % ('Origin', u'東京',   'Sex', 'male' );

のように書くと出力が

     FirstName:  Taro        |         LastName:  Python
        Origin:  東京          |              Sex:  male

となり | の位置がずれてしまいます。


これは"東京"という文字が表示としては半角英数4文字分のスペースをとっているにもかかわらず、UNICODEにより2文字と数えられることによって発生しているようです。

このような英語と日本語を混ぜて使うっていうケースは結構あると思うんですが、Pythonの人達はどうしてるんでしょうか。

クロージャ

http://www.apple.com/aperture/のようなjavascript使ったかっこいいサイトに憧れ、最近サイ本でjavascriptの勉強を始めているわけですが、p349に勉強になったコードがあったのでメモを。



まず、make()という関数があるのですが、この関数は指定されたタグ名、属性、子要素を持つHTML要素を生成します。

シンタックスは、

make(tagname, attribute, children)

です。

これは次のように使います。

var table = make("table", {border:1}, make("tr", [make("th", "Name"),
                                                  make("th", "Type"),
                                                  make("th", "Value")]));

これだとテーブルをたくさん使う場合には、少し面倒です。
そこで本書では次のように、指定されたタグを使ってmake()を呼び出す関数を返すmaker()を定義しています。

function maker(tag){
	return function(attrs, kids){
		if(arguments.length == 1) return make(tag, attrs);
		else return make(tag, attrs, kids);
	}
}

これを使って、テーブル関係のタグを生成する関数を定義しておくことにより、

var table = maker("table"), tr = maker("tr"), th = maker("th");

次のように、テーブル作成処理を簡素化して書けます。

var mytable = table({border:1}, tr([th("Name"), th("Type"), th("Value")]));

maker()で上手くクロージャを使っています。なるほど!!

CCNAを取得

CCNA(Cisco Certified Network Associate)を取得しました。
その受験記を。


試験は1000点満点で僕は896点でした。849点が合格点なのでなんとかといったところでしょうか。
各セクションの成績は以下のとおりです。


Planning and Designin 90%
Implemntiotion and Operation 87%
Troubleshooting 90%
Techonology 76%


Techonologyのセクションは成績が悪いのですが、これにはものすごく心当たりがあります。
ちなみに、Technologyセクションは、以下の内容のようです。

Technology
階層型モデルによるネットワーク通信の説明
スパニングツリー プロセスの説明
LAN 環境の主な特性の比較対照
ルーティング プロトコルの特性の評価
TCP/IP 通信プロセスおよび関連プロトコルの評価
ネットワークデバイスのコンポーネントの説明
パケット制御に関するルールの評価
WAN の主な特性の評価

http://pvthunk.blog98.fc2.com/blog-entry-1.html

で何が心当たりかというと、試験の中でSTPに関する問題があり、ルートブリッジになるスイッチの決め方を知っていないと解けない問題がありました。
ルートブリッジは、ブリッジプライオリティとMACアドレスの小さいものがルートブリッジになるのですが、これを僕は大きいものと反対に覚えてしまっていたのです。
この決め方を知っていないと解けない問題が3問ぐらいあり、これをすべて落としてしまったのが痛かったです><
(問題の内容としては、ネットワーク図があり、どのポートがブロックポートになるかといったような問題でした。)


あと気になったのは、問題の日本語がわからない箇所があったこと。
問題の内容はちょっと忘れてしまいましたが、原文がどうなっていたのか気になるところです。


さて、次はCCNPかなぁ。
でも、CCNPは4つも試験を受けなければいけないので、お金がかかりすぎるなぁ・・・