2008-10-07

日本の祝日についての参考になる情報

Google Calendar API で日本の祝日データを取得 - floatingdays さん

国民の祝日については、国立天文台の暦要綱によってデータファイルを更新していました。外部の情報が使えたら便利だな。

2008-08-28

script.aculo.us の Sortable にまつわる制限

table の行(tr)は、ダメなんですね。

http://github.com/madrobby/scriptaculous/wikis/sortable-create より、

Notes

Important: You can use Sortable.create on any container element that contains Block Elements, with the exception of TABLE, THEAD, TBODY and TR. This is a technical restriction with current browsers. A sortable nested somewhere inside a table won’t work well under IE unless the table has a “position:relative” style. If you use the css display: table property, sortable lists will work a little, but doesn’t allow true drag and drop of the elements.

TABLE, THEAD, TBODY と TR を除く、ブロック要素を含むどんなコンテナ要素でも、Sortable.create を使うことができます。これは、現在のブラウザーによる技術的な制限です。テーブルに「position:relative」というスタイルがないと、テーブルの中のどこかでネストされた sortable はIEではうまくいかないでしょう。もし、css の display: テーブルプロパティを使っている場合、要素の本当のドラッグアンドドロップを許容しないのを除いて、sortable リストは、少しだけ動くでしょう。

If you want your sortable list to be scrollable, wrap the list in a div and set the div to scrollable as apposed to making the ul element scrollable. Also, in IE you must set “position:relative” on the scrollable div.

sortable リストをスクロールできるようにしたい場合、リストを div で包んで、スクロール可能にした ul 要素と div をスクロール可能に設定してください。 また、IEでは、あなたは「position:relative」をスクロール可能なdivに設定しなければなりません。

Got it working using tbody as container and TR as the sortables (IE6 (pc) and Firefox (mac/pc).

tbody をコンテナとし、TR を使えば sortable は IE6(pc) と Firefox(mac/pc) で動作します。

A call to Sortable.create implicitly calls on Sortable.destroy if the referenced element was already a Sortable.

参照された要素がすでに Sortable であるならば、Sortable.createへの呼び出しは暗黙のうちにSortable.destroyを呼び出します。

tbody の中の tr では動作しました。引っかかる書き方だなぁ。

後で見つけたけど、こちら

マウスで握って並び替える。 - ザリガニが見ていた...。 さん

が、参考になりました。

2008-07-01

mscgen

Trac に Graphviz の調べものをしていた時に見つけた mscgen というものがあるみたいです。


A Message Sequence Chart GENerator ということでシーケンス図を dot 記法に似た文字情報から生成できるようです。未導入。あとでやってみるときの備忘録。

考えを整理するときや人に説明するときにシーケンス図は、とても有用。これなら、元図が行方不明になったりして散らかることもないし、修正もその場で可能。是非、導入したいな。

2008-05-22

Trac に Graphviz

ダイアグラムをチケットに貼りたいときに、OpenOffice Draw を使ってましたがノード数が少ない簡単なものの時は面倒でした。整形済みテキストマークアップ {{{...}}} で ASCII アートすると、今度は修正が大変。

TracGraphviz が使える GraphvizPlugin があることは知っていたけど、一度挑戦してうまく行ってなかったが今回、再チャレンジで成功。なんのことは無い、「エラーメッセージをよく読みましょう」と、いう類のことでした。

こんな環境です。

まず、Graphviz を単体で動くようにしておきます。RHEL 5 用のパッケージを使いました。

  • graphviz-2.16.1-1.el5.i386.rpm
  • graphviz-gd-2.16.1-1.el5.i386.rpm

GraphvizPlugin では、PNG 出力を使うため graphviz-gd が必要だったことが最初の躓き。

echo "digraph G {Hello->World}" | dot -Tpng >hello.png


これが、動作すれば OK だと思う。



次に GraphvizPlugin 。ここからダウンロードした、graphvizplugin.zip を展開して



# cd graphvizplugin/0.10
# python setup.py bdist_egg
running bdist_egg
~~~
~~~
creating 'dist/graphviz-0.6.11-py2.4.egg' and adding 'build/bdist.linux-i686/egg' to it
removing 'build/bdist.linux-i686/egg' (and everything under it)

# python setup.py install
running install
~~~
~~~
Installed /usr/lib/python2.4/site-packages/graphviz-0.6.11-py2.4.egg
Processing dependencies for graphviz==0.6.11
Finished processing dependencies for graphviz==0.6.11


これで、サイトワイドにインストールできたので httpd 再起動。



Trac の WebAdmin で Plugins に graphviz 0.6.11 が現れるので enabled して、Apply changes 。



trac.ini に 以下追加



[graphviz]
cmd_path = /usr/bin
cache_dir = /キャッシュ/への/フルパス
cache_manager = yes
cache_max_size = 10000000
cache_min_size = 5000000
cache_max_count = 2000
cache_min_count = 1500


cache_dir は、web サーバーが書き込めるディレクトリにする。これで、以下のマークアップで日本語を含むダイアグラムが表示されました。



{{{
#!graphviz
digraph sample {
node [fontname="/usr/share/fonts/japanese/TrueType/sazanami-gothic.ttf"];
こんちわ -> みなさん;
}
}}}

2008-04-24

dojo.io.bind ではない?

現時点での最新版 Dojo Toolkit 1.1.0 を使ってます。
情報は少なくないのですが実際にやってみると、どうもかみ合わないと思ったら、

Dojo Porting Guide: 0.4.x to 0.9

0.9 以降と 0.4 以前のリリース間では、後方非互換とのこと。 dojo.io.bind については、 IO Transports [AJAX] にあるように dojo.xhrXXX に変更になったみたいです。

では、HTML フォームの submit を抑止し、XmlHttpRequest する実験の続き

以下のようなコードになりました。

    function receiveData(response, ioArg) {
}

function onSubmitTestForm() {
var testFormNode = dojo.byId('TestForm');
var deffered = dojo.xhrPost({
url: testFormNode.action + '.json',
handleAs: 'json',
load: receiveData,
form: testFormNode});
}

function init() {
var formWidget = dijit.byId('TestForm');
dojo.connect(formWidget , 'onSubmit', 'onSubmitTestForm');
}

dojo.addOnLoad(init);
...
...
<form id="TestForm" onsubmit="return false;" action="..." method="post" dojotype="dijit.form.Form">



  1. form タグの onsubmit で return false し、送信抑止。


  2. ページの onLoad 時に init 関数内でフォームの onSubmit イベントに onSubmitTestForm を接続


  3. フォームの送信時に onSubmitTestForm が実行され、フォームの内容を伴った Post リクエストが行われる。


  4. レスポンスを受け取ると、receiveData が実行される。



と、いう動作を firebug と デバッガ で確認できました。



嵌ったところが一箇所あって、




  • dojo.connect() では、第1引数に dijit.byId() で取得したオブジェクト


  • dojo.xhrPost() の form 引数には、dojo.byId() で取得した DOM node



でした。dojo.xhrPost() に、dijit.byId() を使うと、form.getAttributeNode is not a function なんてのが firebug のエラーに捕捉されてました。