• このエントリーをはてなブックマークに追加
  • このエントリをクリップ! このエントリをクリップ!

はじめに

ちょっと必要になって10分ほどで書いてみました.リハビリ.

「ジョブ」の定義とかよく知りません><

使い方

var jobseq = new JobSequencer({ interval: 1000 });
 
jobseq.push(function (o) {
    console.log( o.id );  // 1
});
 
jobseq.push(function (o) {
    console.log( o.id );  // 2
}, 500);
 
jobseq.start();
jobseq.stop();

コールバック関数を順番で追加していき, start メソッドでその順番に,指定したインターバルをおいて実行される感じです.

すべて完了する前に stop メソッドを呼ぶことで,中断することもできます.その後 start メソッドを再度呼ぶことで再開します.

ソースコード

冒頭のリンクを参照頂ければよいのですが,ページ稼ぎのためこちらにもw

window.JobSequencer = function () { return this.init.apply(this, arguments); };
JobSequencer.prototype = {
    init: function (params) {
        params = params || {};
 
        var self = this;
        self._queue   = [];
        self._stopped = false;
        self._count   = 0;
        self.interval = params.interval || 0;
 
        return self;
    },
 
    push: function (f, sec) {
        this._queue.push({ f: f, s: sec || this.interval });
    },
 
    shift: function () {
        return this._queue.shift();
    },
 
    start: function () {
        this._stopped = false;
        return this._exec();
    },
 
    stop: function () {
        this._stopped = true;
    },
 
    _exec: function () {
        var self = this;
        var f_this = arguments.callee;
 
        if ( self._stopped ) { return }
 
        var o = self.shift();
        if ( typeof o !== 'undefined' ) {
            var params = {
                id: ++self._count
            };
 
            setTimeout(function () {
                o.f(params);
                f_this.call(self, []);
            }, o.s);
        }
    }
};

おわりに

順番に追加していった関数を,その順番に実行していく JobSequencer っていう JavaScriptなクラスを書いてみたお話でした.

Amazonさん

まだ読んでない><

  • このエントリーをはてなブックマークに追加
  • このエントリをクリップ! このエントリをクリップ!

ss-1324860051

はじめに

どのブランチがどのブランチの上に乗っかるか,というルールが複数定義されたファイルを読んでひたすら git rebase を行うためのツール「git-rebase-matsuri」というのを書いてみたので,本エントリで軽く紹介します.

※ とあるコミットポイントにおいてちょっとした主要なコミットが発生したおかげで,そこから派生していたすべてのブランチに対して git rebaase する作業が発生することを,私は勝手に「rebase祭り」などと呼んでおります.

背景

「この機能の実装を進めて」「ちょっとあれを直してほしい」先方からそんな要求がくるたびに,その数だけトピックブランチを,公開状態のコミットポイントから生やして作業しています.で,こちらが作業を完了して報告,公開向けの準備の指示を仰ぐのですが,そこから返信がこなくなります.(まぁお忙しいのでしょうね.)その結果,「公開待ち」な状態のブランチが増えてきます.

コミットツリーは次のような感じになります:

ss-1324859692

そこで飛び込んでくる「これ,あのお客さんにどうしても対応したいから,すぐに実装して反映してほしい」といった要求.私の少量メモリな脳内ではスワップを起こしていますが,対応しなければなりません.そしてその修正を先に公開します.

(本エントリを書いている最中にも,何か1件飛び込んできましたw)

コミットツリーは次のような感じになります:

ss-1324860051

さて,本来の開発作業に戻りますか.しかし,安心して開発を再開するには,コミットツリーを次のようにしておきたいところですね:

ss-1324860499

まぁ git rebase しまくればよいだけですが,いかんせんメンドイ!

使い方

インストール

続きを読む »

  • このエントリーをはてなブックマークに追加
  • このエントリをクリップ! このエントリをクリップ!

...というタイトルで,Perl Advent Calendar 2011Casual Track に,13日目のエントリを書かせていただきました.

  • このエントリーをはてなブックマークに追加
  • このエントリをクリップ! このエントリをクリップ!

今回の皆既月食,雲だらの名古屋でこのUstを見ていました:

幸い名古屋でも皆既のあたりから雲が切れ始め,お仕事場前の道路から見上げたら,肉眼ではっきりと見ることができました.

そんなわけで,手持ちのカメラで撮ったものをざっとまとめてみました.

IMGP6399
IMGP6426
IMGP6436
IMGP6455
IMGP6465
IMGP6485
IMGP6524
IMGP6532
IMGP6536
IMGP6553
IMGP6569
IMGP6586

他にも重複してるっぽい写真を含め,Flickrに上がってますのでよろしければ:

  • このエントリーをはてなブックマークに追加
  • このエントリをクリップ! このエントリをクリップ!

PHPでシリアライズしたデータをPerlで復元したり,その逆を行うったりするためのモジュール PHP::Serialization を使ってみたメモ.

なお,Perl は 5.12.2,PHP は 5.3.4.

簡単なデータいくつか(Perl側でシリアライズ)

% perl -M5.12.0 -MPHP::Serialization=serialize -le 'say serialize($_)  for 1, [1], [1 => 2], +{1 => 2}'
i:1;
a:1:{i:0;i:1;}
a:2:{i:0;i:1;i:1;i:2;}
a:1:{i:1;i:2;}
% perl -M5.12.0 -MPHP::Serialization=unserialize -MData::Dump=dump -le 'say dump(unserialize($_))  for qw/ i:1;  a:1:{i:0;i:1;}  a:2:{i:0;i:1;i:1;i:2;}  a:1:{i:1;i:2;} /'
1
[1]
[1, 2]
{ 1 => 2 }

簡単なデータいくつか(PHP側でシリアライズ)

% echo '<?php print serialize(array()) ?>' | php
a:0:{}
% echo '<?php print serialize(array( 1, 2 )) ?>' | php
a:2:{i:0;i:1;i:1;i:2;}
% echo '<?php print serialize(array( 1 => 2 )) ?>' | php
a:1:{i:1;i:2;}
% echo '<?php print serialize(array( '1' => 2 )) ?>' | php
a:1:{i:1;i:2;}
% echo '<?php print serialize(array( 'a' => 2 )) ?>' | php
a:1:{s:1:"a";i:2;}
% perl -M5.12.0 -MPHP::Serialization=unserialize -MData::Dump=dump -le 'say dump(unserialize($_))  for qw/ a:0:{}  a:2:{i:0;i:1;i:1;i:2;}  a:1:{i:1;i:2;}  a:1:{s:1:"a";i:2;} /'
[]
[1, 2]
{ 1 => 2 }
{ a => 2 }

空のリストリファレンス・空のハッシュリファレンス(Perl側でシリアライズ)

空のリストリファレンス,空のハッシュリファレンスを,それぞれ Perl側でシリアライズしてみる:

% perl -M5.12.0 -MPHP::Serialization=serialize -le 'say serialize([]); say serialize(+{})'
a:0:{}
a:0:{}
% perl -M5.12.0 -MPHP::Serialization=unserialize -MData::Dump=dump -le 'print dump(unserialize($_))  for qw/ a:0:{} /'
[]

ハマる予感しまくりなので,何らかのダミーデータを入れておくのがよさげっぽい.

NULL(PHP側でシリアライズ)

% echo '<?php print serialize(NULL) ?>' | php
N;
% echo '<?php print serialize(array(NULL)) ?>' | php
a:1:{i:0;N;}
% echo '<?php print serialize(array(NULL, NULL)) ?>' | php
a:2:{i:0;N;i:1;N;}
% echo '<?php print serialize(array(NULL => NULL)) ?>' | php
a:1:{s:0:"";N;}
% perl -M5.12.0 -MPHP::Serialization=unserialize -MData::Dump=dump -le 'say dump(unserialize($_))  for qw/ N;  a:1:{i:0;N;}  a:2:{i:0;N;i:1;N;}  a:1:{s:0:"";N;} /'
undef
[undef]
[undef, undef]
{ "" => undef }

undef(Perl側でシリアライズ)

% perl -M5.12.0 -MPHP::Serialization=serialize -le 'say serialize($_)  for undef, [undef], [undef => undef], +{undef => undef}'
N;
a:1:{i:0;N;}
a:2:{i:0;s:5:"undef";i:1;N;}
a:1:{s:5:"undef";N;}
% perl -M5.12.0 -MPHP::Serialization=unserialize -MData::Dump=dump -le 'say dump(unserialize($_))  for qw/ N;  a:1:{i:0;N;}  a:2:{i:0;s:5:"undef";i:1;N;}  a:1:{s:5:"undef";N;} /'
undef
[undef]
["undef", undef]
{ undef => undef }
7 of 991...56789...203040...99
  • twitter
  • facebook
  • github
  • hatena bookmark
  • SlideShare
  • flickr
  • foursquare
  • ustream
  • tumblr
  • friendfeed
  • mixi
  • Apple
  • WordPress
  • come icons are powered by komodomedia!