VOYAGE GROUP エンジニアブログ

voyagegroup_techのブログ
VOYAGE GROUPエンジニアブログです。

voyage

PerlのO/Rマッパ、 Teng の便利な使い方のご紹介

こんにちは、Research Panel Asiaの大山です。 今回は、Perlで最近ホットなO/Rマッパ、 Teng の便利な使い方を共有いたします。

みなさんは、

sqlite> .tables
user_log_2013_03  user_log_2013_04
user_log_2013_05  user_log_2013_06
user_log_2013_07  user_log_2013_08
こんな要領で、定期的にDBにテーブルが作られていくような仕組みを見たことはあるのでしょうか。 最近のMySQLでは著しくパーティショニング機能が改善されていますが、少し前のバージョンを使用していると 制約と制限 の都合で選びにくかったり、テーブルが巨大になるとスキーマの変更が容易ではなくなるなどの事情で、このような構造を選択する開発現場もあるのではないかと思います。

こういった、決まったスキーマの別名テーブルを扱う状況では、O/Rマッパの実装次第ではなかなか面倒なことになります。素SQL+DBIで実装するのも当然有効な選択肢と思いますが、Tengを使うととても簡単に解決することが可能です。

[MyModel.pm]


package MyModel;
use parent qw(Teng);
1;

[MyModel/Schema.pm]


package MyModel::Schema;
use strict;
use warnings;
use Teng::Schema::Declare;

sub get_table {
    my ($self, $table_name) = @_;
    $table_name =~ s/\d{4}\_\d{2}$/xxxx_xx/;
    $self->SUPER::get_table($table_name);
}

sub get_row_class {
    my ($self, $table_name) = @_;
    $table_name =~ s/\d{4}\_\d{2}$/xxxx_xx/;
    $self->SUPER::get_row_class($table_name);
}

table {
    name 'user_log_xxxx_xx';
    pk 'id';
    columns qw( id hoge fuga );
    row_class 'MyModel::Row::UserLog';
};

1;

Teng::Schema の中で、テーブルと行オブジェクトを扱うところの実装がとても単純になっているので、 このように get_table と get_row_class の2つのメソッドをオーバーライドしてあげるだけで、 扱うテーブル名によってちょっとした挙動の変更ができます。

こうすると、


my $handle = MyModel->new({ connect_info => ['dbi:SQLite:']});

my $item1 = $handle->insert(
    user_log_2013_07 => { hoge => 'hoge' }
);
# => MyModel::Row::UserLog インスタンス

my $item2 = $handle->insert(
    user_log_2013_08 => { hoge => 'hoge' }
);
# => MyModel::Row::UserLog インスタンス

$item1->update({ fuga => 'fuga' });
$item2->update({ fuga => 'fuga' });

$item1->delete;
$item2->delete;
といった具合に、いつものような行オブジェクトの生成ができるので、あとは MyModel::Row::UserLog のようなところに実装を追加していけばよいでしょう。 簡単ですね。

それでは、またお会いしましょう。ごきげんよう。

VOYAGE CUPのインターバル撮影動画を作ってみた

こんにちは、VOYAGE GROUPの水越(@Akiyah)です。

株式会社VOYAGE GROUPにはVOYAGE CUP(去年まではナビリンピック)という社内の運動会・体育祭といったイベントがあります。6チームに分かれて、綱引きや大縄跳び、10人11脚やリレーなどで戦い、優勝を争うというイベントです。
これ、ガチです。私は今回が初めての参加だったのですが、当日の二週間ほど前から昼休みや夜に集まってチームで練習したり、インターネットで綱引きのコツの動画を探して共有したり、みんなで本気で勝ちに行っていました。
私の所属する紫チームは6チーム中3位で、残念ながら優勝は逃してしまったのですが、来年こそ、と言う気持ちです。

さて、そのVOYAGE CUPにGoProというカメラを持ち込んで体育館の隅に置き、インターバル撮影(微速度撮影)をしてみました。VOYAGE CUPが始まる前に設置し、10秒に1回撮影するように設定して置いておきました。

IMGP9154


GoProは170度の広角撮影ができるので、一枚の写真はこんな風になります。

0165

夕方VOYAGE CUPが終わり、ヘトヘトになって着替える前にカメラを回収しました。家に帰って、カメラのデータを確認したら、写真が1126枚撮れていました!やった!
と思ったけど、あれ、、、10秒×1126/60/60≒3.1時間、、、朝から昼頃までしか撮れていないじゃん。。。
改めて計算してみると4GBのSDカードを使っていたので、一枚2.7MBの画像は約1500枚(約4時間)しか入らないわけで、どのみち夕方までは撮れなかったのです。まあいいか。

次の手順は1126枚の静止画の動画変換です。今回はRubyとffmpegを使いました。
まず、ffmpegで処理できるように1126枚のファイルを0001から始まる連番のファイル名にします(ffmpegは0001から始まる連番でないといけないそうなのです)

ruby -e 'Dir.glob("in/*").sort.each_with_index do |f, i| `cp #{f} out/#{(i+1).to_s.rjust(4,"0")}.jpg` end'

こんなRubyのワンライナーを書いて、inフォルダにある画像ファイルをファイル名を変更しながらoutputフォルダにコピーしました。そして次はffmpegの番です。

ffmpeg -i %04d.jpg -b 1200 -aspect 4:3 -f avi -vcodec mpeg4 output.avi 

しばし待って、、、できた!



45秒の動画になりました。ちょこまか動いていますねー。 だけど広角すぎてちっちゃいですね。トリミングしましょう。
ffmpeg -i %04d.jpg -b 1200 -aspect 4:3 -f avi -vcodec mpeg4 -croptop 486 -cropbottom 486 -cropleft 648 -cropright 648 output.avi

ffmpegのコマンドラインに-crop*をつけて上下左右を1/4づつ削って、っと。



できた!
今度はいい感じに体育館全体が画面に広く映っています。完成〜

参考

VOYAGE WiMAXボーイ(36才)をぷにょっとさせた

こんにちは、VOYAGE GROUPの水越(@Akiyah)です。

前回ECナビBlogグレートナビック風を取り上げましたが、ECナビブログライターのからあげ氏からまたしても魅力的なキャラクターが登場しました。イケてる彼の名はVOYAGE WiMAXボーイ(36才)!!!

揚げたて◆VOYAGE WiMAXでクールで素敵なインターネット生活を! << ECナビBlog

なんというイケてさでしょう!
というわけで、また加工してみました。
ぷにょっとさせました。

ぷよっとしたVOYAGE WiMAXボーイ(36才) - wonderfl build flash online


どうですか、ぷにょっとしていますか?
(前回もそうなのですが)この作品はFlashを作って共有するSNS、wonderflを利用して作りました。
フォーク元はNosuke_lkSsvOhBさんのPuyoDotで、フォークボタンを押して画像を取り替えることで今回の作品を手軽に作ることができました。
フォークってステキ!

VOYAGE GROUPのロゴの配色イメージを変えてみた

こんにちは、VOYAGE GROUPの水越(@Akiyah)です。

来月、色彩検定を受けようとしてて、現在勉強中です。色彩検定はお仕事とは直接関係なくて、趣味なんです。私はエンジニアなんですが、社内にはデザイナーもたくさんいて、デザイナーの人に『なんでエンジニアなのに色彩検定受けるの?』といわれることもありますが、まあ、なんとなく、趣味なんですよ。

そこで勉強のついでに、2011年10月1日の社名変更を記念して、VOYAGE GROUPの新しいロゴを10個の代表的な配色イメージにしたがって変えてみました。
細かいことは考えずに、配色イメージのリストを見て、機械的に色を変えましたよ。

注意:会社の方針として、ロゴの色の配色を変える使い方はNGなので、以下はあくまでもここだけの配色の実験です。

VOYAGE-GROUP_black オリジナルのロゴ
VOYAGE-GROUP_1 エレガント(女性的な、気品のある、洗練された、優雅な)
VOYAGE-GROUP_2 カジュアル(明るい、活発な、親しみやすい)
VOYAGE-GROUP_3 クラシック(重厚な、円熟した、伝統的な)
VOYAGE-GROUP_4 クリア(明るい、さわやかな、透明感のある)
VOYAGE-GROUP_5 シック(渋い、洗練された、大人っぽい)
VOYAGE-GROUP_6 ダイナミック(強い、はっきりした、派手な)
VOYAGE-GROUP_7 ウォームナチュラル(穏やかな、素朴な、温もりのある)
VOYAGE-GROUP_8 フレッシュナチュラル(若々しい、新鮮な、さわやかな)
VOYAGE-GROUP_9 モダン(現代的、人工的)
VOYAGE-GROUP_10 ロマンティック(かわいい、可憐な、愛らしい)

どれが好きですか?あたりまえですが、オリジナルのロゴはやっぱりいいですね。その他だとクリアがいいでしょうか。ダイナミックもなかなかいいですね。
色だけ変えるとしっくりこないのは当然で、色を変えたらフォントや文字の色、大きさも変更しないと統一感がなくなっちゃうんですよね。ほかの配色イメージでもフォントや文字の大きさを調整すればもっと素敵なロゴを作れると思います。

ところで、色彩の教科書によると日本の企業のコーポレートカラーは赤系と青系が8割を越えて、続いて緑、黄となっています。
一方、VOYAGE GROUPのコーポレートカラーは黒です。他とはちがう色を選択するというのも、
VOYAGE GROUPの社風なのかもしれません。

記事検索
QRコード
QRコード