ブックマーク / blog.nomadscafe.jp (26)

  • prototype.jsのものすごく簡単な使い方。 : blog.nomadscafe.jp

    prototype.jsのものすごく簡単な使い方。 はてなダイアリーの方にprototype.jsでHTMLを汚さないロールオーバースクリプトというエントリーを書いたのだが、prototype.jsの入手方法やらすごく簡単な使い方がないようなので、書いてみます。 prototype.jsはJavaScriptのライブラリ(中身はJavaScriptです)で、これを使うとJavaScriptを組むのがかなり楽になるというものです。話題のAjaxのプログラミングも簡単にできます。 ライブラリは、 http://prototype.conio.net/ からダウンロードできますが、TOPページにあるファイルはちょっと古いものなので、Browse the darcs repositoryというリンクを辿り、 http://dev.conio.net/repos/prototype/dist/ から

    kak
    kak 2005/12/28
  • HTML::Template 2.8 Release でHTML::Template::Plugin::Dotを再テスト : blog.nomadscafe.jp

    HTML::Template 2.8 Release でHTML::Template::Plugin::Dotを再テスト HTML::Templateのバージョン2.8がリリースされました。 いくつか変更点はあるのですが、 - Bug Fix: Changed HTML::Template to help sub-classes by called _new_from_loop() via ref($self) rather than hard-coding the package name. [Mark Stosberg] とある通り、HTML::Templateとハードコーディングされているところがなくなって、サブクラスが作りやすくなってます。んで、このpatchを出していたMark Stosbergさんが作っているHTML::Template::Plugin::Dotが正しく使えるよ

    kak
    kak 2005/12/23
  • HTTP::Server::Simple::CGIの使い方 : blog.nomadscafe.jp

    HTTP::Server::Simple::CGIの使い方 HTTP::Server::Simple::CGIのhandle_requestに渡される二つ目のパラメーターは、CGI.pmのオブジェクトです。ソースコード中の sub handler { my $self = shift; my $cgi = new CGI(); eval { $self->handle_request($cgi) }; if ($@) { my $error = $@; warn $error; } } で作成されてます。なので、handle_requestでは、 sub handle_request { my ($self,$q)=@_; $q->param('hoge'); $q->header; } などとすることができますです。 ちなみに環境変数もセットしてくれるので、$ENV{'PATH_INFO

    kak
    kak 2005/12/21
  • CGI::Application用(デバッグ)サーバ : blog.nomadscafe.jp

    CGI::Application用(デバッグ)サーバ CGI::Application用(デバッグの機能はまだない)サーバを作ってみた。 とりあえず動いた版ソース CGI::Application::HTTP ↑アップロードしていたファイルが古いものでした。修正しました(2005-12-17 16:37) 使い方は、 package MyApp; use strict; use warnings; use base qw(CGI::Application::HTTP); package main; MyApp->new()->run(3000); 最後の3000はポート番号。これを # perl server.pl You can connect to your server at http://example.com:3000 と出力されてPort 3000でCGI::Appが動きます。

    kak
    kak 2005/12/17
    すばらしい!!Good Job
  • へぇボタンCGI : blog.nomadscafe.jp

    kak
    kak 2005/12/15
  • Movable Type へぇ Plugin : blog.nomadscafe.jp

    Movable Type へぇ Plugin この間の「へぇボタンCGI」に続き、Movable Type用のPluginを作ってみた。 mod_hee_0.01.zip Download プラグインにすると、表示するためだけにCGIを読み出さないようにすることができるので軽くなるのではないかと思ったのと、MT::PluginDataのテストのため へぇボタンをクリックすると自動的にエントリーの再構築もします。これが負荷だったりするので、一応、連打や連続押しを制限するような機能をJavaScriptでつくってます。 Pluginの使用方法 圧縮ファイルを解凍してください。 [MT]ディレクトリに「mt-hee.cgi」をアップロード [MT]/pluginディレクトリに「mod_hee.pl」をアップロード [MT]/lib/MT/Appディレクトリに「Hee.pm」をアップロードしてくだ

    kak
    kak 2005/12/15
    GJ
  • 12 Things I dislike with CGI::Application : blog.nomadscafe.jp

    12 Things I dislike with CGI::Application タイトルはmiyagawaさんからインスパイア。12個も書いてない。 1.runメソッドへ機能が集中しすぎ CGI::Applicationをいじり始めると気になるのは、runメソッドへ機能が集中しすぎているところだと思う。 しかもちょっとスパゲティ。 sub run { my $self = shift; my $q = $self->query();#クエリーを呼び出し #RUNMODEの決定 my $rm_param = $self->mode_param() || croak("No rm_param() specified");# my $rm; if (ref($rm_param) eq 'CODE') { $rm = $rm_param->($self); 〜〜〜略〜〜〜 #__CURRENT

    kak
    kak 2005/12/15
  • SafariでXMLHttpRequestの時にキャッシュから読んでしまう件 : blog.nomadscafe.jp

    SafariでXMLHttpRequestの時にキャッシュから読んでしまう件 Safari(1.3)でXMLHttpRequestによって何かしらにリクエストを送ったときに、サーバへリクエストせずにCacheから読んできてしまう事がある。かなり困りもの。 http://www.bitterpill.org/logid/1117777362000 で解決方法らしきものを見つけた。 xmlReq.setRequestHeader('If-Modified-Since', 'Wed, 15 Nov 1995 00:00:00 GMT'); をいれると良いらしい。 prototype.jsで使う場合は、 new Ajax.Request("/example",{ method:'get', requestHeaders: ['If-Modified-Since','Wed, 15 Nov 1995

    kak
    kak 2005/12/12
  • mysql_auto_reconnect : blog.nomadscafe.jp

    mysql_auto_reconnect FemoはFastCGIで動かしているのですが、FastCGIで最後に悩んだのは、しばらくアクセスがないと(開発中など)MySQLのコネクションが切れて、 Caught exception in engine "DBD::mysql::st execute failed: MySQL server has gone away などとエラーがでてしまうところです。再接続してくれません。 いままで気にもしなかったのですが、普通のCGIやmod_perlで動かしている場合には、DBD::mysqlみるとmysql_auto_reconnectというフラグが自動的にOnになります。 FastCGI(Catalystの方?)では$ENV{GATEWAY_INTERFACE}も$ENV{MOD_PERL}もないので、どうもmysql_auto_reconnec

    kak
    kak 2005/12/11
  • メモ&カレンダーWebアプリケーションつくりました。 : blog.nomadscafe.jp

    メモ&カレンダーWebアプリケーションつくりました。 Tagがつけられるメモ帳Webアプリケーションをつくってみました。次のキラーアプリらしいカレンダー機能もついています。 http://femo.nomadscafe.jp/ ↓Helpで使っているスクリーンショット メモのTagとして、2005-12-09と日付をいれるとカレンダーの方に整頓される仕組みです。カレンダーでもTagCloud風にメモ件数の多い日は字が大きく表示されます。 Catalyst + Ajax + TypeKey認証 + Tagging + はてな記法と話題の技術を使い派手に実装しました。TypeKeyのアカウントを持っていればログインだけで使えるのでぜひお試しください。ご意見もくださいませ。

    kak
    kak 2005/12/09
    Good Job!!
  • Class::DBI::SweetでのJOIN : blog.nomadscafe.jp

    Class::DBI::SweetでのJOIN Class::DBI::Sweetのjoinをつかった検索を試してみた。 ソースコードは作っているアプリケーションからの抜きだしなので足りないところがあるかも。 EntryとそのTagを想定して、 package Entries; __PACKAGE__->table('entries'); __PACKAGE__->columns(All=>qw/id title text created_on/); __PACKAGE__->has_many("tags"=>'Tags'); 1; package Tags; __PACKAGE__->table('tags'); __PACKAGE__->columns(All=>qw/id entry_id tag/); __PACKAGE__->has_a('entry_id'=>'Entries'

    kak
    kak 2005/12/07
  • CatalystのStatic::SimpleとSessionの相性が悪い : blog.nomadscafe.jp

    CatalystのStatic::SimpleとSessionの相性が悪い CatalystのCatalyst::Plugin::Static::SimpleとCatalyst::Plugin::Session(::State::Cookie)の相性が悪い。最悪の場合セッションキーが消されてしまう。 原因はprepare_actionの実行順で、解決策としてはプラグインのロードの順番なのだが、 use Catalyst qw/Static::Simple Session/ とした場合、 prepare_actionはStatic::Simpleの方が先に実行される。ところがStatic::Simpleのprepare_actionは、 return $c->NEXT::ACTUAL::prepare_action(@_); で終わるため、Sessionではなく、SUPER:: prepar

    kak
    kak 2005/12/01
  • Data::Page::Navigationリリースしました : blog.nomadscafe.jp

    Data::Page::Navigationリリースしました CPANのindexerが復活したようなので午前中にアップしたData::Page::Navigationもでてくるようになりました。 関連エントリー 1st Data::Pageとページナビゲーション 2nd Data::Page::Navigation いい感じのページナビゲーション 使い方は、 use Data::Page::Navigation; とuseするだけです。 あとは普通に my $pager = Data::Page->new(100,10,2); とData::Pageのオブジェクトを生成します。すると、表示するページ番号のリストをつくるpages_in_navigationメソッドが使えるようになってます。 my @list = $pager->pages_in_navigation(); Catalys

    kak
    kak 2005/11/30
    Good Job!
  • Data::Page::Navigation いい感じのページナビゲーション : blog.nomadscafe.jp

    Data::Page::Navigation いい感じのページナビゲーション Data::Pageとページナビゲーションのコードを微妙にリファクタリング。 Time::Piece::MySQLのようにプラグイン的な使い方ができたらいいかなぁに対応。 Data::Page::Navigationと名前をつけてみたけどどうだろう。 使い方は use Data::Page::Navigation; my $total_entries=30; my $entries_per_page = 5; my $pages_per_navigation = 5; Data::Page->pages_per_navigation($pages_per_navigation); my $pager = Data::Page->new( $total_entries, $entries_per_page, $cu

    kak
    kak 2005/11/28
  • Data::Pageとページナビゲーション : blog.nomadscafe.jp

    Data::Pageとページナビゲーション 検索などで多くのページがヒットしたときの、ページナビゲーション << 3 4 5 6 *7 8 9 10 11 12 >> の部分をうまく扱って、100ページ分とかあっても、前後のページのみ表示するモジュールを探していたんだけど、良いのが見つからない。 Data::Pagesetというのがあるんだけど、思ったのと違う。 トータルエントリーが30、1ページ5つのエントリーとして、ナビゲーションのリンクは4つとした場合に、Data::Pagesetでは、 ページ1の場合 *1, 2, 3, 4 ページ2の場合 1, *2, 3, 4 ページ3の場合 1, 2, *3, 4 ページ4の場合 1, 2, 3, *4 ページ5の場合 *5, 6 ページ6の場合 5, *6 となってしまいます。*がついているところは現在のページを表してます。 希望としては、

    kak
    kak 2005/11/27
    まずは思ったことを形に。後はリファクタリングで対応。
  • blog.nomadscafe.jp: FormValidatorとDBIx::Class::WebFormの組み合わせはいい。

    FormValidatorとDBIx::Class::WebFormの組み合わせはいい。 Scaffoldなどではすでに使われているのだけど、FormValidator::Simple(Data::FormValidator)とDBIx::Class::WebForm(Class::DBIの場合はClass::DBI::FromForm)、この組み合わせはヤバいね。非常に楽ができてしまう。 研究中のCatalystアプリの部分だけど、タイトルと、内容、時間(年〜秒まで6つのフォーム)があって、それをDBに入れる場合、 my $result = $c->form( title=>[qw/NOT_BLANK/], text=>[qw/ANY/], {created_on=>[qw/d_year d_month d_day d_hour d_min d_sec/]}=>[qw/NOT_BLANK

    kak
    kak 2005/11/27
  • Class::DBIでComunをData::SerializerでSerializeして保存。 : blog.nomadscafe.jp

    Class::DBIでComunをData::SerializerでSerializeして保存。 Class::DBIでobejctやreferenceを保存の続き。 どんぞこ日記さんのところで紹介されてるData::Serializerを採用した。ソースは追記に貼付けてます。 Data::Serializerを使ったので、Serializeに使うモジュールをいくつか選択できて、暗号化、圧縮、エンコード等ができるようになります。暗号化は便利かも。 使い方は前回と同じだけど、Data::Serializerのconfig用のserialize_configメソッドがついて package Foo; use base 'Class::DBI'; use Class::DBI::Plugin::SerializeColumn; __PACKAGE__->columns(All => qw/id

    kak
    kak 2005/11/22
  • 「Class::DBI で疑似的カラム」をちょっと機能強化と、Class::DBIにStorable::freezeなデータ : blog.nomadscafe.jp

    「Class::DBI で疑似的カラム」をちょっと機能強化と、Class::DBIにStorable::freezeなデータ nipotanさんの「Class::DBI で疑似的カラムを扱う」で(自演)紹介されてるClass::DBI::Plugin::PseudoColumnsなんですが、ObjectやHASHをStorableでSerializeしてデータベースに突っ込む方法を便利にできるプラグインとしてちょっと気になった。 ただ、2つほど弱点があって create/insert時に使えない SerializeがData::Dumperオンリー このあたりが解決されると使いやすいと思うのでいじってみた。 podを書いてないんだけど、ソース一式はこちら→Class-DBI-Plugin-SerializeColumns-0.01.tar.gz。なかなかうまく動かなくていろいろ変更している

    kak
    kak 2005/11/22
  • Class::DBIでobejctやreferenceを保存 : blog.nomadscafe.jp

    Class::DBIでobejctやreferenceを保存 「Class::DBI で疑似的カラム」をちょっと機能強化で書いたモジュールをもとにClass::DBI でobejctやreferenceをシームレスに保存できるプラグインを書いてみた。 使い方 package My::Film; use base 'Class::DBI'; use Class::DBI::Plugin::SerializeColumn; __PACKAGE__->columns(All => qw/id title props/); __PACKAGE__->serialize_column('props'); などとクラスを書いて、 My::Film->create({ id=>1, title=>'四月物語', props =>{year=> 1998,director=>'岩井俊二'} }); とでき

    kak
    kak 2005/11/22
  • order by rand() : blog.nomadscafe.jp

    order by rand() id:naoyaさんが書いている インデックスをかけてるテーブルでも、結局ランダムなので全件捜査してから値を返す。プライマリーキーに対して rand() する場合でも O(1) ではないのですよね。なんか回避する方法があったりするのかな order by rand()は最近知った方です。 通常ランダムで返す必要がある場合データベースではなくプログラム側で、2度SQLを発行してます。 my ($count) = $dbh->selectrow_array('select count(*) from table'); my $offset = int rand $count; my $ret = $dbh->selectrow_hashref('select * from table limit ?,1',{},$offset); これで対応してました。 やって

    kak
    kak 2005/11/19