Skip to content

Instantly share code, notes, and snippets.

View nakamura-to's full-sized avatar

Toshihiro Nakamura nakamura-to

View GitHub Profile
@nakamura-to
nakamura-to / gist:2144314
Created March 21, 2012 04:22
Visitor Pattern in JavaScript
// see http://d.hatena.ne.jp/ashigeru/20090113/1231855642
var calc = {
add: function (node) {
return visit(this, node.l) + visit(this, node.r);
},
sub: function (node) {
return visit(this, node.l) - visit(this, node.r);
},
val: function (node) {
@nakamura-to
nakamura-to / gist:2170174
Created March 23, 2012 12:18
Soma DbTransaction Usage Example
using System;
using System.Data.Common;
using System.Threading;
using Soma.Core;
namespace DbTransactionExample
{
public static class LocalDbExtensions
{
@nakamura-to
nakamura-to / gist:2190425
Created March 25, 2012 00:38
F# pipeline operator equivalent in JavaScript
function chain(functions) {
return functions.reduceRight(function (next, curr) {
return function () {
var result = curr.apply(null, arguments);
return next.call(null, result);
};
});
}
function pipeline(val) {
@nakamura-to
nakamura-to / gist:2225739
Created March 28, 2012 12:15
private members using Function.prototype.bind
function create(behaviors, context) {
return Object.getOwnPropertyNames(behaviors).reduce(function(obj, name) {
obj[name] = behaviors[name].bind(context);
return obj;
}, {});
}
var Gadget = {
getName: function () {
return this.name;
@nakamura-to
nakamura-to / gist:2236938
Created March 29, 2012 12:27
F#-like partial function application in JavaScript
function fun(f) {
return function curry() {
if (arguments.length < f.length) {
var args = Array.prototype.slice.call(arguments);
return function () {
return curry.apply(this, args.concat(Array.prototype.slice.call(arguments)));
}
} else {
return f.apply(this, arguments);
}
@nakamura-to
nakamura-to / gist:2238031
Created March 29, 2012 14:36
F#-like partial function application in CoffeeScript
fun = (f) ->
curry = () ->
if (arguments.length < f.length)
args = Array.prototype.slice.call(arguments);
() ->
curry.apply(this, args.concat(Array.prototype.slice.call(arguments)));
else
f.apply(this, arguments)
@nakamura-to
nakamura-to / gist:2398326
Created April 16, 2012 12:12
Enabling BindByName to Oracle stored procedure calls in Soma
internal class MyCommandObserver : ICommandObserver
{
public void NotifyExecuting(DbCommand command, PreparedStatement statement, out object userState)
{
OracleCommand oracleCommand = command as OracleCommand;
if (oracleCommand != null && oracleCommand.CommandType == CommandType.StoredProcedure)
{
oracleCommand.BindByName = true;
}
userState = null;
@nakamura-to
nakamura-to / domain_sample.js
Created April 20, 2012 08:28
Node.js Domain sample
var fs = require('fs');
var domain = require('domain');
function countChars(filename, callback) {
var d = domain.create().on('error', function (err) {
callback(err);
});
fs.readFile(filename, 'utf-8', d.intercept(function (_, data) {
callback(null, data.length);
}));
@nakamura-to
nakamura-to / TwoWaySql.java
Created April 23, 2012 03:44
2 Way SQL implementation with Doma
package example;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.Array;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.Date;
import java.sql.NClob;
import java.sql.Time;
@nakamura-to
nakamura-to / gist:2621947
Created May 6, 2012 12:08
IndexedDB event propagation in IE 10 Platform Preview 5
var req = msIndexedDB.deleteDatabase("MyDB");
req.onsuccess = function () {
var req = msIndexedDB.open("MyDB");
req.onupgradeneeded = function (event) {
var db = event.target.result;
var store = db.createObjectStore("MyStore", {autoIncrement: true });
store.createIndex("name", "name", { unique: true });
};
req.onsuccess = function (event) {
var db = event.target.result;