はじめに
ちょっと必要になって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さん
まだ読んでない><
-
パーフェクトJavaScript (PERFECT SERIES 4)posted with amazlet at 11.12.29井上 誠一郎 土江 拓郎 浜辺 将太
技術評論社
売り上げランキング: 2169
はじめに
どのブランチがどのブランチの上に乗っかるか,というルールが複数定義されたファイルを読んでひたすら git rebase を行うためのツール「git-rebase-matsuri」というのを書いてみたので,本エントリで軽く紹介します.
※ とあるコミットポイントにおいてちょっとした主要なコミットが発生したおかげで,そこから派生していたすべてのブランチに対して git rebaase する作業が発生することを,私は勝手に「rebase祭り」などと呼んでおります.
背景
「この機能の実装を進めて」「ちょっとあれを直してほしい」先方からそんな要求がくるたびに,その数だけトピックブランチを,公開状態のコミットポイントから生やして作業しています.で,こちらが作業を完了して報告,公開向けの準備の指示を仰ぐのですが,そこから返信がこなくなります.(まぁお忙しいのでしょうね.)その結果,「公開待ち」な状態のブランチが増えてきます.
コミットツリーは次のような感じになります:
そこで飛び込んでくる「これ,あのお客さんにどうしても対応したいから,すぐに実装して反映してほしい」といった要求.私の少量メモリな脳内ではスワップを起こしていますが,対応しなければなりません.そしてその修正を先に公開します.
(本エントリを書いている最中にも,何か1件飛び込んできましたw)
コミットツリーは次のような感じになります:
さて,本来の開発作業に戻りますか.しかし,安心して開発を再開するには,コミットツリーを次のようにしておきたいところですね:
まぁ git rebase しまくればよいだけですが,いかんせんメンドイ!
使い方
インストール
...というタイトルで,Perl Advent Calendar 2011 の Casual Track に,13日目のエントリを書かせていただきました.
今回の皆既月食,雲だらの名古屋でこのUstを見ていました:
幸い名古屋でも皆既のあたりから雲が切れ始め,お仕事場前の道路から見上げたら,肉眼ではっきりと見ることができました.
そんなわけで,手持ちのカメラで撮ったものをざっとまとめてみました.
他にも重複してるっぽい写真を含め,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 }最近の閲覧数
- [emacs] インデントをハイライトしてくれる「Highlighting indentation」で脱・インデント迷子
- IRC初心者がIRCを通知ツールとして使ってみる,または個人的IRC環境のメモ
- UbuntuとCentOSとにおけるlogrotateの挙動の違いでハマった
- aquaさんで開通間近の新東名高速道路を走ってきた
- Textile記法で手軽にWikiっぽく記録を残しておくツール「SiTeWiki」を作ってみた
- 「GTDme」というオレオレGTDツールを作って使い始めようとしています
- [git][perl] rebase祭りを支援するツール「git-rebase-matsuri」というのを書いてみた
- [perl] Cache::FileCacheが保存するファイルの中身を覗いてみるメモ
- Kansai.pm #14 へおジャマさせていただいてきた
- HTTPSとバックエンドなPlackアプリケーションとPlack::Middleware::ReverseProxyとHTTPヘッダ「X-Forwarded-HTTPS」と
最近のエントリ
- [perl] Image::Sizeで画像サイズを取得できないことがある件とその(アドホックな)対処方法
- 5月連休とaquaさん
- [perl][php] Textile記法+GeSHiでシンタックスハイライトするためのText::Textile::Pluggableプラグインを書いてみた
- [perl] Markdown記法をプラグインっぽく拡張できる「Text::Markdown::Pluggable」というモジュールを書いてみた
- [perl] Textile記法をプラグインっぽく拡張できる「Text::Textile::Pluggable」というモジュールを書いてみた
- aquaさんで入鹿池を2周してきた(約2年ぶり2回目)
- aquaさんで山崎川とか天白川とかの桜を眺めてきた(おまけで豊橋少々)
- サイクルショップカワタさんなツーリング@奈良
- 「魔法少女まどか☆マギカ展 名古屋会場」の写真いくつか
- Kyoto.pm #1に参加 & LTに飛び入らせていただいてきた
カテゴリー
タグ
-
actionscript
amon2
announce
bicycle
bookmarklet
cafe
cooking
cpan
della.js
dqwindowmanager
eating
elisp
emacs
event
gps
gtd
html
http
image
iphone
javascript
lifelog
linux
mac
mono
music
mylifehacks
mysql
mywebservice
neko
nicograph
onomichi
pc
perl
photo
plack
study
svn
tool
travel
twitomonitor
twitter
wcan
windows
wordpress
最近のコメント
-
No Responses.
最近のトラックバック
-
No Responses.
















