アーキテクトとステークホルダ

アーキテクトの仕事とは何かというと、「ステークホルダの観点を集約し適切なデザインをする」こと。これはinformation architectだろうが、application architectだろうが同じ事で、デザインの対象が情報設計なのかアプリケーションの設計なのかの違いだけ…

本当のハイテク企業になるために

以前、ポールグレアムが、「Yahooに起きてしまった事」として、テクノロジー企業としてスタートしたものが徐々にメディア企業としてハッカー文化が摩耗していくといった話をしていた。Webテクノロジが本当にハイテクだったかはさておき、コミュニケーション…

position:fixedのサポートを検査する

android端末のwebkitや普通のブラウザはposition:fixedをサポートしているけどiOSのwebkitは何故かサポートしていないので、うざい。うざいけど判別しなきゃ行けないのでsnippet var isSupportedPositionFixed = (function (body){ var element = document.c…

memo: monad in javascript

(function(){ //unit: a -> M[b] var unit = function(value){ return { value : function(){return value} }; }; //bind: M[a] -> (a->M[b]) -> M[b] var bind = function(m,proc){ return proc( m.value() ); }; // func a->M[b] var x2 = function(x){ret…

世代間認知不協和

コミュニケーションを媒介するサービスにとって、そのコミュニケーションがどのように育まれているかという点について深い知見を得るというのはとても重要なことだ。コミュニケーションのスタイルというのは日々変化するもので、何が正しくて何が正しくない…

問題解決と眼

近頃は後輩から、「よいプログラムをかけるようになりたいです」という話を聞く。よいプログラムを書きたいという意識それ自体、とてもすばらしいことだと思った。そのときにふと、なにをもって「よい」とするのかといったことについて普段意識することは少…

めも:Sub::Future

継続を使わない場合のget_multiのまとめ方を検討している。 これから、〜〜するぞ!という状態のオブジェクト。つまり継続もどき。 sub hoge { my $self = shift my $cache = $self->get_cache;# この手前で処理を停止させたい if( defined $cache ){ return…

継続でget_multiとかまとめたい。

memcachedのgetsとかJSONRPCのbulkリクエストとかを出来る限り透過的にまとめたい。 Apps::MemcachedはCache::Memcached::Fastのラッパーをイメージしてくだしあ。 Scope::Session::start { my $promised = Apps::Memcached::Promise->new; for my $c (1..5)…

Sessionの生成・破棄を任意のタイミングで制御可能にするScope::Session

@kazeburo先生から解説記事の希望とあれば、まじめにブログ書かないと@kzysにDISられようとも気にも留めない僕ですら、記事を書きます。前段のところを丁寧にまとめると、こりゃ厄介だなと思っていたところ@kazeburo先生の記事が出てきたので、引用しながらS…

メモ:シグナル

シグナルを処理するだけの簡単なサンプルをc/node.js/pythonで。 #include <unistd.h> #include <string.h> static void func(){ write(2,"SIGINT\n",7); } int main(void){ struct sigaction act; //struct sigaction act2; memset(&act,0,sizeof act ); act.sa_handler = func;</string.h></unistd.h>…

JythonとCPython

PythonにはJVMで動作するJythonとネイティブのCpythonが存在していて、 それぞれ異なるGCのメカニズムを採用している。CPythonは、基本的に参照カウント方式で循環参照が発生した場合に限り マーク&スイープらしい。Jythonはというと、JVMに乗っかっているの…

メモ:スマートポインタ

#include <iostream> #include <memory> #include <tr1/memory> #include <string> #include <tr1/tuple> using namespace std; using namespace std::tr1; class Item { private: string value_; public: Item( const char* v="???") : value_(v) { cout << "create Item(" << value_ << ")" << endl; } ~Item</tr1/tuple></string></tr1/memory></memory></iostream>…

メモ:node.jsの拡張

js #!/usr/local/bin/node require.paths.push("./build/default/"); var obj = require("hello"); console.log(obj); cpp #include <v8.h> using namespace v8; extern "C" { void init ( Handle<Object> target ){ HandleScope scope; target->Set( String::New("hello")</object></v8.h>…

CSSTransitionに薄皮

今のところwebkit限定。prefixを-mozに振り分ければfirefoxでも動くかもね。 (function(){ var preventDefault = function(e){ e.preventDefault(); }; this.__defineSetter__('enableTouchSlide',function(enableTouchSlide){ this.__enableTouchSlide = en…

webkitTransitionに薄皮かぶせる。

(function(){ var camelize = function(str){ return str.replace(/-+(.)?/g,function(match,chr){ return chr ? chr.toUpperCase():''; }) }; var getPrefixedObject = function(prefix,obj){ var ret = {}; Object.keys(obj).forEach(function(p){ ret[pre…

iPhoneでタッチしてスライドする動作を抑制したり戻したりする。

(function(){ var preventDefault = function(e){ e.preventDefault(); }; this.__defineSetter__('enableTouchSlide',function(enableTouchSlide){ this.__enableTouchSlide = enableTouchSlide ? true : false; if( this.__enableTouchSlide ){ this.remov…

擬似継続ベースの名前空間ライブラリ

http://github.com/hirokidaichi/namespace-jsそんなわけでgithubに上げました。まだgitのことよくわかっていませんw ドキュメントをなんとなくまとめる 名前空間の定義(define) Namepsace('org.yabooo.dom').define(function(ns){ // ここにライブラリの実…

遅延ロード可能バージョン

たとえばこんなふうに Namespace("org.example.net").define(function(ns){ ns.provide({ HTTPRequest : function(){ console.log("ok");}, HTTPResponse : function(){ console.log("ok");}, }); }); Namespace("org.example.system").define(function(ns){…

普通のバージョン。

Namespace("org.example.net").apply(function(ns){ return { HTTPRequest : function(){ console.log("ok");}, HTTPResponse : function(){ console.log("ok");}, }; }); Namespace("org.example.system").apply(function(ns){ return { Console : { log : …

HTML 5 data- Attributes

こんなかんじ? var $D = (function(){ var camelize = function(string){ return string.replace(/-+(.)?/g, function(match, chr) { return chr ? chr.toUpperCase() : ''; }); }; return function(element){ if( element.dataset ) return element.datase…

Mouse::Roleの難しさ。

一般にRoleとかTraitとかMixinとかは定性的な依存関係を持っている。 こんなかんじで、 こういう関係しか許されてない。(Mixinにインスタンス変数をもてる例もそんなにない)ところで、Mouse::Roleは アクセサをhasシンタクスでつくると、withの順番とかで、…

内部クラス/無名ネームスペース/関数内クラスのダンプ

#include <iostream> namespace hoge { class X { public: void test(){ std::cout << "in hoge namespace X.test" << std::endl;} }; class XX { public: class YY { public: void test(){std::cout << "in hoge namespace XX::YY.test" << std::endl;} }; }; }; name</iostream>…

boost::optionalをつかうとmaybeっぽくできる。

失敗しそうな処理があっても連続的に表記できるってのは if文が連続しがちなCプログラミングに清涼剤を与えてくれるね。 #include <cmath> #include <iostream> #include <boost/optional.hpp> using namespace std; using namespace boost; // double かもしれない 型 typedef optional<double> maybe_dou</double></boost/optional.hpp></iostream></cmath>…

valgrindを使ってみる。

install簡単。 sudo apt-get install valgrind 使い方(メモリまわりのチェック) tool=$hoge でツールの選択。メモリチェッカーをつかって、 leak-check=fullで該当箇所がわかる。 valgrind --tool=memcheck --leak-check=full $command メモリの取り扱いが…

アクセサっぽいもの

#include <iostream> // 特定の型のsetter/getterをかえすmeta function template <class T,class Object> struct accessor_of{ typedef T ( Object::*getter )(); typedef T ( Object::*setter )( const T&); }; // コピーコンストラクタ/=演算子/()演算子を実装した一時オブジェクトをつく</class></iostream>…

Virtual Tableについて

/* Vtable for B1 B1::_ZTV2B1: 3u entries 0 (int (*)(...))0 8 (int (*)(...))(& _ZTI2B1) 16 B1::f1 Class B1 size=16 align=8 base size=16 base align=8 B1 (0x7ff8afb7ad90) 0 vptr=((& B1::_ZTV2B1) + 16u) */ class B1 { public: void f0(){} virtua…

RTTI

#include <iostream> #include <typeinfo> #include <cxxabi.h> using namespace std; class Base { public : virtual void Test(){} int a; }; class Sub : public Base { public : virtual void Test(){} int b; }; #define class_name( X ) demangle( typeid(X).name() ) std::string de</cxxabi.h></typeinfo></iostream>…

難しいコードを分解する話

yaboooブログのパスワードわからなくなったので一時的にこっちに書く。たとえばarrayリファレンスをいろいろな文字列フォーマットに変換する話を徐々にわかりやすく解体する。 複雑なメソッド ひとつのメソッドで StringLister->new->output( 'wiki' => [qw/…

陸の孤島会議とモチベーションについて

学会ジャック@つくば http://www.yabooo.org/archives/96日本野望の会にて先日3/15日に「陸の孤島会議」と称して情報処理学会ジャックを行いました。 ジャックといっても不穏当なものではなく、3件の学会発表のちっちゃなネタを発表し、 その場にいるひとに…

事務局長的野望。

野望の会 野望の会の新年会は、居酒屋にプロジェクタを持ち込んでLTしながら 飲み会をするというカオスな企画でした。どんどこイベントを開いていくので、 このカオスさを味わいたいという人はぜひ、野望の会においでください。 「それ野望の会でできるよ?…