Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

タグ

ブックマーク / blog.hide-k.net (7)

  • hide-k.net#blog: Kazuho式フレンド・タイムライン実装をDBICで表してみた

    Kazuho@Cybozu Labs: フレンド・タイムライン処理の原理と実践 奥さん人の中でブームが去った感もあるRDBMSで実現するフレンド・タイムライン処理ですが、そういえばDBICで使ってみたのを思い出したので晒してみます。 要はDBICからストアドプロシージャの叩き方を知りたかっただけなんですけどね。 パッケージ名はWebインターフェースはどーせCatalystで作るでしょってことでCatalyst + Twitter = Catatter…って安直なネーミングですね。 記事中ではプッシュ型とプル型が紹介されているのですが、データ量やfollow, removeの際のコストとか考えたらプル型の方が好みかなってことでプル型を採用してみました。 また、基的にスキーマやストアドプロシージャはオリジナルと同じですが、DBICでPKをマルチカラムにするとめんどっちーのでサロゲートキーを

  • hide-k.net#blog: Catalyst::Model::AdaptorでTheSchwartzをModel化

    今さらTheSchwartzを使い始めました。 で、jobの状態を監視するWebインターフェースをCatalystで作ることになったのですが、いちいちTheSchwartzのインスタンスを作るのが面倒くさい。 でもそのためにModel作るのもアホらしい。 で、Catalyst::Model::Adaptorを使ってMyApp::Model::TheSchwartzを作ってモデルとして使うのをやってみたのでメモ。 HelperスクリプトでMyApp::Model::TheSchwartzを作成 script/myapp_create.pl model TheSchwartz Adaptor TheSchwartz 出来上がったMyApp::Model::TheSchwartzを変更 package MyApp::Model::TheSchwartz; use strict; use w

  • hide-k.net#blog: Catalystでマルチバイトを取り扱うときのまとめ

    #前に社内wikiに書いておいたのを公開してみるテスト。 Catalystでマルチバイトを扱う機会があるのは主に ユーザーがフォームで入力する値 ($c->req->param()) データベースからの入出力 (DBIx::Class) それ以外の文字列の評価 View::TTによる出力の生成 FillInFormによるフォームの埋め込み HTTPレスポンス です。 ここでは以下の条件でまとめてみました。 文字コードはUTF8に統一 データベースにはmysqlを使用 下準備 テンプレート、perlのコードは全てUTF8で書きます。 mysqlの文字コードの指定は/etc/my.cnfに [mysqld] default-character-set = utf8 skip-character-set-client-handshake [mysql] default-character-set

  • hide-k.net#blog: Web::ScraperでCISCO RECORDSをスクレーピング

    いまさらWeb::Scraperを使ってみました。 使うネタがなかったのがスルーし続けた一番の理由だったのですが、それではいけないと思い、CISCO RECORDSの商品情報を取得するスクリプトという、僕以外誰も興味がないスクリプトを書いてみました。 cisco_scraper.pl #!/usr/bin/perl use strict; use warnings; use Web::Scraper; use URI; use YAML; use Data::Dumper; my $uri = shift; my %scraper; $scraper{'link'} = scraper { process 'a', 'name' => 'TEXT'; process 'a', 'uri' => sub { return URI->new_abs( $_->attr('href'), $u

  • hide-k.net#blog: DBIx::Class::ResultSetManagerでResultSetにメソッドを追加

    ActiveRecordなORマッピングはJavaのTorqueを大昔に触ったきりなのでこんな実装デザインが正しいのかどうかわかりませんが、DBIx::Classで package CD::Schema::Albums; use strict; use warnings; use base qw/DBIx::Class/; __PACKAGE__->load_components(qw/Core/); __PACKAGE__->table('albums'); __PACKAGE__->add_columns(qw/ id artist title /); __PACKAGE__->set_primary_key('id'); __PACKAGE__->belongs_to('artist' => 'CD::Schema::Artists'); __PACKAGE__->has_many(

    unity
    unity 2007/06/22
  • hide-k.net#blog: TTでDBICのhas_manyなメソッドを使う

    よくわからない表題ですが要は・・・ MyApp::Schema::TopicsとMyApp::Schema::Commentsが1:nの関係にあるとして package MyApp::Schema::Topics; use strict; __PACKAGE__->has_many('comments' => 'MyApp::Schema::Comments'); 1; こんなアクションで sub list : Local { my ( $self, $c ) = @_; my $topics = $c->model('Topics')->search({}); $c->stash->{topics} = $topics; $c->stash->{template} = 'list.tt'; } TTで素でやる場合 <html> <body> <ul> [% WHILE (topic =

  • hide-k.net#blog: DBIx::Class::DigestColumnsがちょっと便利になった件

    以前、DBIx::Class::DigestColumnsの問題というエントリーでDBIC::DigestColumnsがいまいち使いづらいようなことを書きましたが、今年に入ってアップデートされてちょっと便利になった模様。 ユーザー管理で生パスワードを保存したくない場合には結構便利なコンポーネントです。 テーブルを作って create table users ( id integer not null primary key, username text not null, password text not null ); schemaクラスはLoaderにまかせて package MyApp; use strict; use base qw/DBIx::Class::Schema::Loader/; __PACKAGE__->loader_options( components =>

  • 1