Skip to content

Instantly share code, notes, and snippets.

@ishiduca
ishiduca / each-line.js
Created September 29, 2012 10:28
イケてない 行処理 #Node.js
'use strict';
function onData (chunk) {
var chunks = chunk.split(this.spliter);
var i = 0, last = chunks.length - 1;
for (; i < last; i++) {
this.rs.emit('line', chunks[i], this.lines++);
}
this.buf = chunks[last];
}
@ishiduca
ishiduca / baobab.js
Created October 3, 2012 01:50
BaoBab - a Simple FIFO JobQueue
function BaoBab () { this.queue = []; }
var BBP = {
push: function (f) {
(typeof f === 'function')
&& this.queue.push(f);
return this;
}
, release: function () {
var f = this.queue.shift();
@ishiduca
ishiduca / index.md
Created October 30, 2012 02:30
Smart::Options と Data::Validator でコマンドラインツールを書く(仮)

Smart::Options と Data::Validator で コマンドラインツール

ちょっとしたコマンドラインツールを書くのに、Smart::Options は入力データをパースするのに楽ちんです。 なんですけど、もう少し複雑なことをやらせようとするとデータのバリデーションした方がいいなってなる。なので、Data::Validator を通してバリデーションさせてみる

流れ

  • Smart::Optionsでコマンドラインからの入力データをパース
  • パースしたデータはData::Validatorを通してバリデーションを行う
  • パースしたデータのキー名毎に作業をマッピング && 作業させる
@ishiduca
ishiduca / README.md
Created November 6, 2012 12:40
FriendFeed-Realtime - inspired from AnyEvent::FriendFeed::Realtime

FriendFeed-Realtime

subscribe to FriendFeed Real-time API. inspired from AnyEvent::FriendFeed::Realtime

Usage

var FriendFeedRealtime = require('friendfeed-realtime');

var client = new FriendFeedRealtime({
@ishiduca
ishiduca / README.md
Created November 8, 2012 11:12
FriendFeed-Realtime-Stream - inspired form AnyEvent::FriendFeed::Realtime

FriendFeed-Realtime-Stream

subscribe to FriendFeed Real-time API. inspired from AnyEvent::FriendFeed::Realtime

Usage

var createFriendFeedRealtimeStream = require('friendfeed-realtime-stream');
var stream = createFriendFeedRealtimeStream({
 user: 'your_username'
@ishiduca
ishiduca / cloneRegExp.js
Created November 10, 2012 12:17
RegExpのクローンを試す
function cloneRegExp (reg) {
if (! (reg instanceof RegExp)) throw new Error('TypeError: "reg" is not "RegExp"');
var _source = reg.source;
var _string = reg.toString();
var pos = _string.lastIndexOf('/');
return new RegExp(_source, _string.slice(pos+1));
}
@ishiduca
ishiduca / multiple-cookies.js
Created November 23, 2012 05:36
node-multiple-cookies # 複数の "Set-Cookie" ヘッダを送る
var qs = require('querystring');
function Cookies (req, res) {
this.res = res;
this.parse(req);
}
(function (cp) {
cp.parse = function (req) {
req || (req = {});
this.cookies = {};
if (!req.headers || !req.headers.cookie) return;
@ishiduca
ishiduca / Neko.js
Created November 27, 2012 04:13
コンストラクタ(のプロトタイプオブジェクト)にアクセスする
var Neko = function (voice) { this.voice = voice || 'nyan' };
Neko.prototype.say = function () { console.log(this.voice) };
var tora = new Neko('nii');
tora.say(); // 'nii';
// コンストラクタのプロトタイプオブジェクトにアクセスする
Neko.prototype.say.apply({ voice: 'wahn' }); // wahn
// コンストラクタへアクセスできれば、そのプロトタイプオブジェクトへアクセスするのは難しい話ではないけど
@ishiduca
ishiduca / dup.js
Created November 28, 2012 00:40
読み書き両用ストリームのひな形
// writeStreamとして受け取るデータは素通し
var stream = require('stream')
, util = require('util')
;
function DuplexStream () {
this.readable = true;
this.writable = true;
this.source;
this.on('pipe', function (src) { this.source = src }.bind(this));
@ishiduca
ishiduca / app.js
Last active December 11, 2015 00:38
呼び出されるモジュール側から呼び出し(実行スクリプト)側のパスを取得する
#!/usr/bin/env node
var path = require('path');
var waf = require('w-a-f');
waf().use(require(path.join(__dirname, 'middleware/wan'))())
.use(require(path.join(__dirname, 'middleware/nyan'))())
.use(require(path.join(__dirname, 'middleware/guu'))())
.resume();
// wan