日向夏特殊応援部隊

俺様向けメモ

q4m を rpm 化する with checkinstall

作業メモです。

src.rpm の取得

# cd /usr/src/redhat/SRPMS
# wget http://dev.mysql.com/get/Downloads/MySQL-5.1/MySQL-community-5.1.42-0.rhel5.src.rpm/from/http://ftp.iij.ad.jp/pub/db/mysql/

rpmbuild --recompile

ビルド時のソースツリーが必要なので recompile

# rpmbuild --recompile --define 'community 1' /usr/src/redhat/SRPMS/MySQL-community-5.1.42-0.rhel5.src.rpm

checkinstallrpm

make 時に MYSQL_LIBDIR をつけてるのは libmysqlclient.so のパスの解決の為。

# cd /usr/local/src
# wget http://q4m.31tools.com/dist/q4m-0.9.tar.gz
# tar xfz q4m-0.9.tar.gz
# cd q4m-0.9
# ./configure --prefix=/usr --with-mysql=/usr/src/redhat/BUILD/mysql-5.1.42 
# checkinstall -R --pkgname q4m --pkgversion 0.9 \
  --pkgrelease 0.glibc23 --pkggroup Applications/Databases \
  --maintainer zigorou@cpan.org \
  make MYSQL_LIBDIR=/usr/lib install

必要なら rpmbuild --rebuild もして置いた方が良いかも。

あけましておめでとうございます

だいぶ出遅れてしまいましたが皆さんあけましておめでとうございます。本年もどうぞよろしくお願いいたします。

今年の活動ですが、Webアプリ関連の話は続けるとして OpenSocialモバゲーオープンプラットフォームの話題をどんどん出して行こうかなと思ってます。

また id:TAKESAKO さんのご好意により、デブサミ2010mixiよういちろうさんとお話させて頂く事となりました。

近年OpenSocialに対応したSNSやプラットフォームが増え外部の開発者が自由にソーシャルアプリを作って公開出来るようになってきました。 mixiアプリモバイル、モバゲーオープンプラットフォームの登場によりモバイルで動作するソーシャルアプリが続々と登場してきています。そこでモバイル向けソーシャルアプリの仕組みと現在の対応状況、今後の展開について2大プラットフォームであるmixi,モバゲータウンの両担当者からお聞きし、新しいモバイル向けソーシャルプラットフォームの可能性を探って行きます。

ってな感じのセッションです。皆様ふるってご来場下さい。

モバゲータウンmixi アプリモバイルなどでも提供されてて、現在 TVCM でやっている怪盗ロワイヤルだとか、その他諸々ソーシャルゲームを提供してたりしていて、ある種現在の典型的なモバイル向けのブラウザゲームの作り方なんかも話したりするかもしれません。

このデブサミに来るまでに是非一度触って遊んで見て下さい。モバゲーの怪盗ロワイヤルは下記の QRCode から登録出来ます。

登録してくれるともれなく僕に 1000 モバコインが入ります(ぉぃ
携帯電話から見ている奇特な方はこちらから登録できます。

それでは本年もよろしくお願いいたします。

探索パスにあるコンポーネントを読まないようにする

訂正 (2009-12-09T12:55:19+09:00)

id:charsbar さんに教えて貰ったんですが依存してる Module::Pluggable::Object の except, only とかを使えば普通に出来た罠。

__PACKAGE__->config(
  setup_components => ['MyApp::Web::Model::Damepo',]
);

とかで同様の事が出来ます。

詳しくは Module::Pluggable の Advanced Usage に書いてあります。

以下、元のエントリ

以下は、上の奴で出来るから要らない知識です!!!


d:id:ZIGOROu:20061105:1162755013 に昔書いた通り、Catalyst の setup_components は config で探索パスを追加する事は出来ます。これは現在のバージョンでも変わってなくて、MyApp::Web だとすると、

__PACKAGE__->config(
  setup_components => +{
    search_extra => [
      '/path/to/dir'
    ],
  }
);

みたいに追加すればいい。ドキュメントにも書いてある。

が、ちょっと自己都合で外したいみたいのは出来ないみたい。setup_components で対象となるモジュールのロードは load_components に依存してるみたいなので、とりあえずやっつけでこんな風にしといた。

sub locate_components {
    my $class = shift;
    my @comps = $class->next::method(shift);

    my $config = $class->config->{locate_components};
    my %ignore_comp_map;
    my $ignore_comp_regex = '';

    if ( ref $config ) {
        if ( exists $config->{ignore_components} ) {
            %ignore_comp_map =
              map { ( $_ => undef ) } @{ $config->{ignore_components} };
        }

        if ( exists $config->{ignore_components_regex} ) {
            $ignore_comp_regex = $config->{ignore_components_regex};
        }
    }

    $ignore_comp_regex = qr|$ignore_comp_regex| if ($ignore_comp_regex);

    if ($ignore_comp_regex) {
        @comps =
          grep { $_ !~ m/$ignore_comp_regex/; }
          grep { not exists $ignore_comp_map{$_} } @comps;
    }
    else {
        @comps =
          grep { not exists $ignore_comp_map{$_} } @comps;
    }

    return @comps;
}

としておくと、

__PACKAGE__->config(
  load_components => +{
    ignore_components => [
      'MyApp::Web::Model::Damepo',
    ],
    ignore_components_regex => [
      'Foo|Bar'
    ],
  }
);

みたいな感じ。

同じソースツリーだけどデプロイ先をクラスタ化して、読み込むコンポーネントを変えてメモリ消費量がホゲホゲとか考えるなんてシーンも無きにしもあらずって気がするんだけど*1、そういう場合こういう枠組みがあると良いなと思うんですが、実は既にあったりするんですかね。

とりあえず next 嫌いです。

*1:ちなみに今回はそういうニーズではなく必要になった

SQL_CALC_FOUND_ROWS を毎回忘れるのでメモっておく件

LIMIT 〜 OFFSET なんか使う SELECT 文をページ送りとかしたい場合、全体の件数が必要だったりして、

SELECT * FROM people LIMIT 50 OFFSET 0;
SELECT COUNT(guid) FROM people;

みたいな感じの事やりたい訳だけど MySQL の場合だと、そういう枠組みがあるんですよね。

さっきのクエリはこんな風になる、

SELECT SQL_CALC_FOUND_ROWS * FROM people;
SELECT FOUND_ROWS();

これ、使いたいなと思った時に毎回忘れてググってたので備忘録として書いた。

生 DBI ユーザーのための DBI Cookbook (3)

d:id:ZIGOROu:20090814:1250262134 のさらに続編です。

現在接続している dbh 全てを disconnect したい場合

use strict;
use warnings;
use DBI;

### なんかいっぱい接続したりとかする

my %drhs = DBI->installed_drivers;
for my $drh ( values %drhs ) {
  for my $dbh (@{$drh->{ChildHandles}}) {
    eval { $dbh->disconnect; };
  }
}

こんな感じ。永続環境で1リクエストをさばく間は DBI->connect_cached() で接続するとして、それらを最後に明示的に disconnect するとかで使えると思う。

今日の SQL::Abstract

SELECT * FROM hogehoge WHERE hoge_flags & 2 = 0; 

みたいのを作りたい場合、

use strict;
use warnings;

use Data::Dump qw(dump);
use SQL::Abstract;

my $sql = SQL::Abstract->new;
my ($stmt, @bind) = $sql->select("hogehoge", ["*"], +{ hoge_flags => \[ "& ? = ?", 2, 0 ] });

とかで出来る。

もうここまで来ると変な呪文みたいだ。

OpenSocial mobile のシーケンス

先日の idcon #6 にて発表した際に使ったシーケンスです。資料自体は大分グレーなので公開しませんw

例によってシーケンスのテンプレとして WebSequenceDiagrams - Draw sequence diagrams online in seconds こちらもご利用下さい。