タグ

ブックマーク / zigorou.hatenablog.com (21)

  • 生 DBI ユーザーのための DBI Cookbook (4) - 日向夏特殊応援部隊

    さてと、モバゲーオープンプラットフォームが先日やっと始まりました^^ みなさん是非遊んで下さいです。 d:id:ZIGOROu:20091125:1259163476 のさらに続編です。 ShowErrorStatement でエラー時に発行されていたクエリを表示する #!/usr/bin/perl use Carp; use DBI; my $dbh; eval { $dbh = DBI->connect("dbi:mysql:db=test;host=localhost", "root", "", +{ RaiseError => 1, AutoCommit => 0, ShowErrorStatement => 1, PrintWarn => 0, PrintError => 0, }) or croak($DBI::errstr); $dbh->selectall_arrayref

    生 DBI ユーザーのための DBI Cookbook (4) - 日向夏特殊応援部隊
    oinume
    oinume 2010/02/02
  • SQL_CALC_FOUND_ROWS を毎回忘れるのでメモっておく件 - 日向夏特殊応援部隊

    LIMIT 〜 OFFSET なんか使う SELECT 文をページ送りとかしたい場合、全体の件数が必要だったりして、 SELECT * FROM people LIMIT 50 OFFSET 0; SELECT COUNT(guid) FROM people; みたいな感じの事やりたい訳だけど MySQL の場合だと、そういう枠組みがあるんですよね。 MySQL :: MySQL 5.1 リファレンスマニュアル :: 11.10.3 情報関数 - FOUND_ROWS() さっきのクエリはこんな風になる、 SELECT SQL_CALC_FOUND_ROWS * FROM people; SELECT FOUND_ROWS(); これ、使いたいなと思った時に毎回忘れてググってたので備忘録として書いた。

    SQL_CALC_FOUND_ROWS を毎回忘れるのでメモっておく件 - 日向夏特殊応援部隊
    oinume
    oinume 2009/11/27
    そういえば最近メモしたSQL_CALC_FOUND_ROWS
  • SQL::Interp - 日向夏特殊応援部隊

    SQL::Interp を最近使ったりします。ってのも生 DBI だと IN 文とか placeholder 化するの面倒だし。 と言う訳で下記サンプル。__END__ 以下に結果もつけといた。 #!/usr/bin/perl use strict; use warnings; use Data::Dump qw(dump); use Perl6::Say; use SQL::Interp qw(sql_interp); { my ($sql, @bind) = sql_interp 'INSERT INTO identifier', +{ resource_id => 'xri://=zigorou', canonical_id => 'xri://=!545A.6972.43FA.38AD' }; say dump($sql, \@bind); } { my ($sql, @bind)

    SQL::Interp - 日向夏特殊応援部隊
    oinume
    oinume 2009/08/06
  • 生 DBI ユーザーのための DBI Cookbook (1) - Yet Another Hackadelic

    ちょっと前まで DBI で非同期アクセスなエントリが各所で上がっていましたが皆さん如何お過ごしでしょうか? さてと、、、歴史的な経緯とか歴史的な経緯とかで生 DBI 相当を使ってる方もそれなりにいるでしょう。奥さん、大事な事なんで二度言いましたよ! DBI のインターフェースってまぁそんな使いやすい物じゃないんですが、工夫次第で出来る事もあります。 ちなみにサンプルデータベースとして、MySQL Documentation - Example Databases の world データベースを使っています。 fetchall_arrayref でデータ整形 まず以下のように使ってみます。 #!/usr/bin/perl use strict; use warnings; use Data::Dump qw(dump); use DBI; use Perl6::Say; my $dbh =

    生 DBI ユーザーのための DBI Cookbook (1) - Yet Another Hackadelic
  • cpan コマンドでインストールしたモジュールを調べる - 日向夏特殊応援部隊

    ExtUtils::Install, ExtUtils::Installed を使うと cpan コマンドでインストールしたモジュールについてあれやこれや調べる事が出来ます。 インストールされているモジュール一覧 perl -MExtUtils::Installed -le 'print join "\n" => sort ExtUtils::Installed->new->modules;' 特定のモジュール名が属する dist に含まれるファイル一覧 $ perl -MExtUtils::Installed -le 'print join "\n" => sort ExtUtils::Installed->new->files(shift @ARGV);' YAML::Syck /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi

    cpan コマンドでインストールしたモジュールを調べる - 日向夏特殊応援部隊
    oinume
    oinume 2009/04/19
  • DBD::Mock を使ったテスト - 日向夏特殊応援部隊

    DBD::Mock は DBI のドライバの一つで、DBI を使ったプログラムで意図的な状態を作る事が出来ます。 と言う訳でメモ程度に書いて行きます。 データベースハンドルの取得 use strict; use warnings; use Test::More; use DBI; plan tests => 3; my $dbh = DBI->connect('dbi:Mock:', '', '', +{ AutoCommit => 0, RaiseError => 1 }); ok($dbh, 'Create database handle'); isa_ok($dbh, 'DBI:db'); is($dbh->{Driver}->{Name}, 'Mock', 'Driver information'); で、普通に Database Handle が取れます。 SELECT してる箇

    DBD::Mock を使ったテスト - 日向夏特殊応援部隊
  • モバイル用の OpenID 考 - 日向夏特殊応援部隊

    いつか書こうと思って書いてなかったので。ちなみにモバイルサイト開発は不得手と言うか余り経験が無いので、突っ込み歓迎です。 またモバイルの世界に OpenID なんて(ry ってのは今は考えない。 特徴 携帯電話の場合は個体識別番号って奴があって、それを無条件に垂れ流してるので一意な値と言うのは取れると。 Cookie のサポートはキャリアや機種ごとにまちまち。 許容する URL の最大長問題 (携帯電話のブラウザでアクセスできるURLの文字数に制限はありま… - 人力検索はてな、正確な情報かどうか未確認だけど参考数値として) Cookie と個体識別番号 RP サイドで、アサーションのレスポンスに対する中間者攻撃を防ぐ為に Cookie を事前に発行しておくなんていう対策を採る訳ですが、これは別にリクエスト時の個体識別番号と一致してれば良いので、モバイルでの場合に例外的な扱いはするものの技

    モバイル用の OpenID 考 - 日向夏特殊応援部隊
  • Catalyst Conference #1 まとめ - 日向夏特殊応援部隊

    昨日は直前にエロギークな人のトラブルもありましたが、何とか無事に終える事が出来ました。 参加者の皆さん、お疲れ様でした。 と言う訳でプレゼンのまとめと個人的な感想です。 プレゼン CatalystからModelを切り離せ (g:catalyst:id:dann) 資料 今回の基調講演の一つ。g:gatalyst:id:dannさんのプレゼン。エンタープライズアーキテクチャ的にCatalystを分析して、かくあるべきと言う事を言ってる方は少ないので非常に参考になりました。 WAFにおけるModelとは何ぞやと言う事から、Modelにはどのようなパターンが存在し、それらをWAFではなくAFに落とし込む方法論をModelの分類ごとに手法化って感じ。 素晴らしい、また後で資料読みたい。 Catalyst REST Practice #1 (g:catalyst:id:ikasam_a) 資料 RO

    Catalyst Conference #1 まとめ - 日向夏特殊応援部隊
  • @IT西村さんのOpenIDの記事が秀逸過ぎる件 - 日向夏特殊応援部隊

    いやー、凄い良い記事でした。 OpenIDに欠けている「評判情報」 − @IT OpenIDでログインまたはサービスが利用できるWebサイトは、ユーザー認証のプロセスをほかのサイトに頼っているという意味で「リライング・パーティ」(Relying Party)と呼ばれるが、読者はいくつのリライング・パーティをご存じだろうか?確かに数だけは多いと喧伝されているが、自分が使いそうもないWebサイトがいくら対応していても意味がない。 その通りなんですよね、これ。 OpenIDのIdentityはもう相当数の人が実質的に持っていると言う状況なのに対して、RPとしてのキラーサイトが無いので恩恵に授かれない。 声高にして言いたいが、いわゆる会員サイト的な物を作ろうと思ってる方は、真っ先にOpenID対応(RPとして)を考えて頂きたいと思う。 それが普及と言う点で最も大切な事だと僕は思います。 ブランドや

    @IT西村さんのOpenIDの記事が秀逸過ぎる件 - 日向夏特殊応援部隊
  • Sxipperが提供するOpenIDを使ったFirefox拡張はテラ便利 - Yet Another Hackadelic

    皆様あけましておめでとうございます。 年もよろしくお願い致します。 さて新年初エントリはOpenIDネタから。 Sxipper*1はOpenID 2.0に対応した数少ないOP*2ですが、ここで提供しているFirefoxの拡張機能が物凄い便利です。 これはOpenIDに限った形では無いのですが、 プロフィールデータがローカルで暗号化されて保存されて それらを任意のフォームで可能な限り入力補完してくれて さらにログインフォームと思しきフォームではクリック一つでログイン出来る といった拡張です。VeriSignもその手の拡張*3を作っていますが、余り使い勝手が良くないのに対して、Sxipperの拡張は使い勝手が良いです。 現在、シングルサインオンとセッション管理辺りに関して、工藤さんとたけまるさんが非常に面白い話をしています。 http://blogs.sun.com/tkudo/entry/

    Sxipperが提供するOpenIDを使ったFirefox拡張はテラ便利 - Yet Another Hackadelic
  • OpenID 2.0の時代の幕開け - 日向夏特殊応援部隊

    長らくOpenID 2.0関連のspecの議論が行われていましたが、やっと出ました。 OpenID 2.0…Final(ly)! – OpenID で具体的に何が出たかと言うと以下の二つのspecです。 Final: OpenID Authentication 2.0 - Final Final: OpenID Attribute Exchange 1.0 - Final OpenID Authentication 2.0 1.1から変わった点で、今の所僕が知ってる内容をかいつまんで紹介すると、 用語が変わった Consumer -> RP(Relying Party) IdP -> OP(OpenID Provider)など 後方互換性がある。(openid.ns) XRIの導入 XRDSの導入*1 Association Typeの追加 Discovering OpenID Relyi

    OpenID 2.0の時代の幕開け - 日向夏特殊応援部隊
  • 堅牢なパスワードを強制するテクニック - 日向夏特殊応援部隊

    やっぱりサービス側で堅牢なパスワードをユーザーに強制する仕組みが無いと問題があるサービスと言うのはたくさんあるって事で、Perlで出来る限り簡単にそういう仕組みを作れないかなと。 幾つかピックアップしてみました。 Data::Passwordモジュールを使う 真っ先にこれ。UNIX系OSでのパスワードの強度チェックと似たモジュールのようです。 use Data::Password qw(:all); print IsBadPassword("hogehoge"); 文字列が表示されちゃう場合はNGなパスワード。 このモジュールは辞書設定も出来るようです。 @Data::Password::DICTIONARIESに辞書ファイルを指定しておくとそこの内容も見てくれるみたい。 ありがちなパスワード集はftp://ftp.ox.ac.uk/pub/wordlists/に言語別にあります。 またU

    堅牢なパスワードを強制するテクニック - 日向夏特殊応援部隊
    oinume
    oinume 2007/10/29
    何でもあるなぁCPAN。
  • memcachedのrpmをFedora用に作る - 日向夏特殊応援部隊

    実のところmemcachedはsvn trunkに既にspecファイルが存在します。 http://code.sixapart.com/svn/memcached/trunk/server/memcached.spec しかしこれはFedoraではrpmbuild出来ません。*1 Dagのmemcachedにspecファイルがあるので、そいつを持ってきます。 # cd /usr/src/redhat/SOURCES/ # wget http://www.danga.com/memcached/dist/memcached-1.2.2.tar.gz # cd ../SPECS # wget http://dag.wieers.com/rpm/packages/memcached/memcached.spec # rpmbuild -bb memcached.specこれで /usr/src/

    memcachedのrpmをFedora用に作る - 日向夏特殊応援部隊
  • Re: MySQL最適化のミニtips - 日向夏特殊応援部隊

    元ネタ: http://labs.unoh.net/2007/07/mysqltips.html あまり具体的じゃないので、僕の考えとか。 正しいかどうかは各自の状況だとか実際試すべきなんだけど、参考になれば。 MyISAM、InnoDBなどテーブルタイプ 僕は断然InnoDB派です。 ただ仰るとおり、ログるだけのテーブルとかならMyISAMでもいいとは思うけど。 トランザクションやロック処理などが必要ない場合など、MyISAM形式にも良いところはあるので検討してみる価値はあるかもしれません。 これだけの指摘だとちょっと微妙な気がするです。 MyISAMの使いどころってのは、 ピンで他とリレーションが無い単純追記系のテーブル リレーションがあり、同一トランザクション内での更新系クエリが存在する場合は、トランザクションが期待通りに動かないので、基的にはInnoDBと混在させるべきではない

    Re: MySQL最適化のミニtips - 日向夏特殊応援部隊
    oinume
    oinume 2007/07/20
    元の話が抽象的過ぎなのをうまくフォロー。
  • ClearSilverのPerlバインディングのインストール - 日向夏特殊応援部隊

    ClearSilverは超高速なテンプレートエンジンです。 どのくらい速いかと言えば、id:spritlooseさんがベンチマーク(d:id:spiritloose:20060812)を取ってますので、参考にして下さい。 今日そのPerlバインディングをインストールする際にハマったのでメモ。 configure --prefixオプションが結構曲者です。 # ./configure --prefix=/usr --disable-apache --disable-java --disable-csharp --enable-gettextのように、 apache, java, csharpは除外 gettextによる国際化対応は有効 と言う感じでconfigureすると、Makefileのinstallターゲットは、 install: all ./mkinstalldirs $(DESTD

    ClearSilverのPerlバインディングのインストール - 日向夏特殊応援部隊
  • Yet Another Hackadelic - MogileFS::Plugin::FilePaths, MogileFS::Client::FilePathsを試してみる

    はじめに MogileFS::Client::FilePathsのドキュメントですが、激しく適当に書かれているのと、使い方だとかセットアップの仕方とかは笑えるくらい情報が無いので、ソース嫁しか手段が無い事を予めお断りしておきます。 FilePathsプラグインとは? MogileFSでは実際のファイルシステムのようにパスが存在する訳では無く、実態としては domain key によって管理されています。 特定のdomainに存在するファイルの探索はlist_keysメソッドで探すと言う手法しかデフォルトではありません。 で、MogileFSのサーバー側のプラグインとして、FilePathsプラグインと言う物がありますが、こちらを有効にしておくと実際のファイルシステムのようにパスと言う概念を持ち込む事が出来るようになります。 インストール mogdbsetupコマンドを実行する際にplugi

    Yet Another Hackadelic - MogileFS::Plugin::FilePaths, MogileFS::Client::FilePathsを試してみる
  • JSON文字列化 - 日向夏特殊応援部隊

    JSのデータをJSON文字列化したいー、なんて時があるならば json.orgが公式で出しているjson.jsを使うのが世間では多いみたいなんですが、 これはCoreオブジェクトのprototypeにメソッド追加してるんで、場合によってはハマる人が多い*1みたいです。 http://search.cpan.org/dist/MozRepl/lib/MozRepl/Plugin/JSON.pmでもjson.jsを使っていたのですが、それが嫌だったので止めました。 別の選択としては下記のような物があります。 http://code.google.com/p/trimpath/wiki/JsonLibrary (trimpathの一部?) http://www.thomasfrank.se/json_stringify_revisited.html (上の拡張らしい) で今はjsonString

    JSON文字列化 - 日向夏特殊応援部隊
    oinume
    oinume 2007/05/26
  • Carp::Clanのメリット - 日向夏特殊応援部隊

    すみません、今までずっと知りませんでした。orz... 前々から人のソースに良く出て来るのでなんでかなーと思ったんですけども、ふと気になって調べてみました。 carp, croakの違い 論より証拠 #!/usr/bin/perl use strict; use warnings; package Pack::C; use Carp; sub foo { carp("test"); } package Class::B; sub foo { Pack::C::foo; } package Pack::A; sub foo { Class::B::foo(); } package main; Pack::A::foo(); と、このソースのuse Carpをuse Carp::Clanに変更した物で実行結果が異なります。 use Carp test at carp.pl line 17use

    Carp::Clanのメリット - 日向夏特殊応援部隊
    oinume
    oinume 2007/05/23
  • DBI-1.55は結構良さそう - 日向夏特殊応援部隊

    DBI::Changes - List of significant changes to the DBI - metacpan.orgによれば、 今回は結構意欲的なバージョンアップのようですね。 パフォーマンス面 Changed some handle creation code from perl to C code, to reduce handle creation cost by ~20%. Changed connect_cached and prepare_cached to avoid a FETCH method call, and thereby reduced cost by ~5% and ~30% respectively. handleを生成するコードがperllからCになって、速くなったみたいですね。 それとconnect_cached, prepared_c

    DBI-1.55は結構良さそう - 日向夏特殊応援部隊
  • Module::Pluggable::Fast Source Code Reading - 日向夏特殊応援部隊

    そもそも論ですけど Similar to C but instantiates plugins as soon as they're found, useful for code generators like C. ってあるように、Module::Pluggableと同じインターフェースな訳じゃなくて似てるモジュールです。 似てる 速い すぐインスタンス化する ってのが特徴ですね。 同様にimport経由でpluginの読み込みを行います。 Module::Pluggable::Fast import() sub import { my ( $class, %args ) = @_; my $caller = caller; no strict 'refs'; *{ "$caller\::" . ( $args{name} || 'plugins' ) } = sub { my $sel

    Module::Pluggable::Fast Source Code Reading - 日向夏特殊応援部隊
    oinume
    oinume 2007/04/21