2007-01-01から1年間の記事一覧

ExtのTree

Ext 2.0のTreeウィジェットの使い方。 ツリー構造のデータは「あるノードに対応する子ノードのリスト」。子ノードリストは情報を持つURLからJSON形式でその都度取得し、JavaScriptで静的に定義しない。 子ノードのリストを返すURLは、ノードIDをPOSTするとJS…

DojoでTreeを使う

ドキュメントを読んだりいろいろ試したりしているが、なにか誤解してるかもしれない。 dijit.Treeウィジェットに、ツリー構造の中身をdojo.dataを使って指定する。 dojo.data.ItemFileReadStoreを使うとJSONで書けるなる(XMLとかCVSでデータを書けるオブジ…

Ubuntuでpkgsrc

Ubuntu 7.10をVMWare Fusionにインストールしてあるが、Ubuntu上でpkgsrcを使うには以下のパッケージが必要だった。 sudo apt-get install build-essential sudo apt-get install libncurses5-devNFSマウントはこれが必要。 sudo apt-get install portmap nf…

Text::ASCIITableで整形表示

ASCII ART風の「表」の形式を作成するモジュール。setColsで列のタイトルを設定してaddRowで行のデータを追加して行き、drawメソッドで表形式の文字列を取得する。 use Encode; use utf8; use Text::ASCIITable; my $tbl = new Text::ASCIITable(); $tbl->se…

Twitterのhome画面のtimeline

Net::Twitterで、APIの仕様はよく知らなくてもいろいろできる。home画面で表示されるtimelineの情報の取得は以下のようにする。 use Net::Twitter; my $twit = Net::Twitter->new(username=>"????????", password=>"????????" ); my $timeline = $twit->foll…

textproc/php-jsonをインストール

Ext 2.0のアーカイブを展開したすると examples/tree/get-nodes.php というファイルが出来るが、このスクリプトでは json_encode 関数が使われている。phpをpkgsrcからインストールしている場合は textproc/php-json をインストールした後、${LOCALBASE}/etc…

DBIのbind_columns

SELECT文を使ってデータを取得する場合、DBIから配列やハッシュで取得する以外に「列と変数を bind する」という方法がある。以下のようなテーブルがあるとする。 CREATE TABLE table1 ( id integer PRIMARY KEY, name text, email text ); 結果をハッシュで…

DBIx::Class::Schema::Loaderのクラスをカスタマイズする

人のデータを表すテーブルがあるとする。 CREATE TABLE person ( id integer PRIMARY KEY, first_name text, last_name text ); first_nameとlast_nameをつなげた full_name という仮想的な列があると便利。 package TestDB; use base qw/DBIx::Class::Schem…

Adobe AIR (Flex)のテキストファイルの読み込み方

プログラムの初期化時にテキストファイルを読み出して表示する。 ファイル自体を表現するクラスの「File」 ファイル中のバイト列を表現するクラスの「FileStream」 を組み合わせて使う。 <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" title="Read File" creationComplete="initApp()"> <mx:Script> </mx:script></mx:windowedapplication>

Ext 2.0のAccordion

「Accordion」と呼ばれているインターフェースは、実は使い所が難しいような気がしてきた。 <head> <script type="text/javascript" src="ext-2.0/adapter/ext/ext-base.js"></script> <script type="text/javascript" src="ext-2.0/ext-all.js"></script> <script type="text/javascript"> Ext.onReady(function() { var panel = new Ext.Viewport({ layout:'acco…</head>

Dojo 1.0のAccordion

いつの間にかものすごいWebサイトにドキュメントが用意されているDojoのAccordionレイアウトの使い方。少し前まで「ドキュメント無いな〜」という感じだったのに。AccordionContainerの中にAccordionPaneを入れればOK。 <html> <head> <script type="text/javascript" src="dojo/dojo.js" djConfig="parseOnLoad: true"> </script> <script type="text/javascript"> dojo.require("dijit.layout.Acc</head></html>…

Adobe AIR (Flex)のNativeMenu(Windows)

Adobe AIR Beta 2 + Flex 3 で Windows 上でプログラムを作るときにNativeMenuを使う方法。ドキュメントや、Web検索で見つかるサンプルと少し違うような……。 <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" title="Hello World" creationComplete="initApp()"> <mx:Script> </mx:script></mx:windowedapplication>

DBIx::Class の newメソッドでレコードを作った場合に serial が増分されるタイミング

DBIx::Class で new をつかって新しい行を作っても、insert を実行するまでは serial から id の割り当てはしないらしい。実験データベース CREATE TABLE url_path ( id serial PRIMARY KEY, url text UNIQUE, title text not null ); INSERT INTO url_path(…

nkf のオプション

メモ コード in out UTF-8 -W -w ISO-2022-JP -J -j EUC-JP -E -e Shift_JIS -S -s 適当に推測するとよく間違う。

Dojo 1.0のタブ

こちらは TabContainer の中に ContentPane titleはつけないとクリックするところが出てこない レイアウト周りはExt 使うより易しい気がする。 <html> <head> <script type="text/javascript" src="dojo/dojo.js" djConfig="isDebug: true, parseOnLoad: true"></script> </head></html>

Dojo 1.0のレイアウト

以前にExtでやった「左にメニュー、右にコンテンツ」みたいなレイアウト(http://d.hatena.ne.jp/jgoamakf/20071105)を Dojo 1.0 でやった場合のソース。 LayoutContainer の中に ContentPane 場所は layoutAlign で指定 がポイントか? <html> <head> </head></html>

bbsmenu.html の Parse

最初にbbsmenu.htmlをダウンロードする。 ftp http://menu.2ch.net/bbsmenu.html 「<BR><BR>」で始まっている行がセクションの始まりなので、文字列を取得して現在のセクションに設定する。 空行でセクションの終わり。 セクションの始まりと終わりの間にでてきたリ…

Ext 2.0 のTabPanel

API Documentのサンプルと一緒。 <script type="text/javascript"> Ext.onReady(function() { var tab_panel = new Ext.TabPanel({ renderTo: 'tab-area', activeTab: 0, deferredRender: false, items:[ { contentEl: 'tab0-div', title: 'Tab 0' }, { contentEl: 'tab1-div', title: 'Tab </script>…

Ext 2.0 でレイアウト

とりあえず左右に分けてみた。「左側にメニューがあって……」みたいな画面ならこれでOK。 <html> <head> <script type="text/javascript" src="ext-2.0/adapter/ext/ext-base.js"></script> <script type="text/javascript" src="ext-2.0/ext-all.js"></script> <script type="text/javascript"> Ext.onReady(function() { var viewport = new Ext.Viewport({ layout…</head></html>

PRIMARY KEY、UNIQUEが2つ以上の列で構成されているときのfind

テーブルを作る。 CREATE TABLE table1( c1 integer, c2 text, PRIMARY KEY(c1, c2) ); INSERT INTO table1 VALUES(1, 'a'),(2, 'b'),(3, 'c'),(4, 'd'),(5, 'e'); findの引数にはPRIMARY KEYになっている列の値を全て指定する。 $row = $db_schema->results…

UNIQUEを設定したフィールドを使って検索する

UNIQUEフィールドを持つテーブルをつくる。 CREATE TABLE table2( c1 integer CONSTRAINT c1_unique UNIQUE ); INSERT INTO table2 VALUES(1),(2),(3),(4),(5); % psql -f testdb2.sql -d testdb1つのテーブルについて複数のUNIQUE制約を設定することができ…

PRIMARY KEYを設定したフィールドを使って検索する

PostgreSQLでテーブルをつくる。 CREATE TABLE table1( c1 integer PRIMARY KEY ); INSERT INTO table1 VALUES(1),(2),(3),(4),(5); % createdb testdb % psql -f testdb.sql -d testdbPRIMARY KEYに指定したフィールドの値を使って検索する。 package TestD…

Feed::FindでRSS auto discoveryする。

Feed::Findというモジュールに、「RSS・Atomの auto discovery」が実装されている。 use Feed::Find; my @feeds = Feed::Find->find('http://d.hatena.ne.jp/jgoamakf/'); for my $feed_url (@feeds) { print $feed_url, "\n"; } % findrss.pl http://d.hate…

HTTP::Requestにデータを追加する

HTTP::Asyncを使うとき、HTTP::Requestにデータを追加できれば便利な気がする。例えば「あるURLに定期的にアクセスするプログラムで、2回 404 が続いたら別の処理をしたい」場合、前回のステータスをHTTP::Requestに保存できると、GETの結果を処理するときに…

DBIx::Classでhas_manyするとLEFT JOINになる

こういうデータベースを作って CREATE TABLE table1( id integer PRIMARY KEY, data1 text ); CREATE TABLE table2( table1_id integer REFERENCES table1(id) PRIMARY KEY, data2 text ); INSERT INTO table1 VALUES(1, '1-1'); INSERT INTO table1 VALUES(…