「Hatena Inc.」を含む日記 RSS

はてなキーワード: Hatena Inc.とは

2012-04-05

Galaxy NEXUS お勧めアプリ

APV PDF Viewer

https://play.google.com/store/apps/details?id=cx.hell.android.pdfview

Adobe Flash Player 11

ADOBE SYSTEMS

https://play.google.com/store/apps/details?id=com.adobe.flashplayer

Angry Birds

ROVIO MOBILE LTD.

https://play.google.com/store/apps/details?id=com.rovio.angrybirds

Advanced Task Killer Froyo

RECHILD

https://play.google.com/store/apps/details?id=com.rechild.advancedtaskkillerfroyo

Android メーカー

GOOGLE INC.

https://play.google.com/store/apps/details?id=com.google.android.apps.androidify

Angry Birds Rio

ROVIO MOBILE LTD.

https://play.google.com/apps

Angry Birds Seasons

ROVIO MOBILE LTD.

https://play.google.com/store/apps/details?id=com.rovio.angrybirdsseasons

Angry Birds Space

ROVIO MOBILE LTD.

https://play.google.com/apps

B!KUMA Girls

HATENA INC.

https://play.google.com/store/apps/details?id=com.hatena.android.bkuma.girls

Cache Cleaner

JRUMMY16

https://play.google.com/store/apps/details?id=com.jrummy.cache.cleaner

多分効果があるだろうけど微妙

これでキャッシュ削除後、設定からアプリを見るとまだキャッシュが残ってる^^;

Battery Mix (バッテリーミックス)

AYANO

https://play.google.com/store/apps/details?id=jp.smapho.battery_mix

CallFilter

TELEMARKS.CO.JP

https://play.google.com/store/apps/details?id=jp.co.telemarks.CallFilter2

Car Conductor: Traffic Control

DROIDHEN CASUAL

https://play.google.com/store/apps/details?id=com.droidhen.car3d

Chrome Beta

GOOGLE INC.

https://play.google.com/store/apps/details?id=com.android.chrome

Duel: Blade & Magic

NOUMENA INNOVATIONS

https://play.google.com/store/apps/details?id=com.noumena.ikof

GBookmark

PUTENDAR

https://play.google.com/store/apps/details?id=com.amlegate.gbookmark

Google Chrome to Phone

GOOGLE INC.

https://play.google.com/apps

Google Reader

GOOGLE INC.

https://play.google.com/store/apps/details?id=com.google.android.apps.reader

Google 日本語入力

GOOGLE INC.

https://play.google.com/store/apps/details?id=com.google.android.inputmethod.japanese

Ks Uninstaller

KUGO

https://play.google.com/store/apps/details?id=com.kugoweb.uninstaller

KINGDOM CONQUEST 【RPGロールプレイング

SEGA CORPORATION

https://play.google.com/store/apps/details?id=jp.co.sega.kingdomconquest

Lep's World

NER BROTHERS

https://play.google.com/store/apps/details?id=at.nerbrothers.SuperJump

MX 動画プレーヤー

MX TECHNOLOGIES

https://play.google.com/store/apps/details?id=com.mxtech.videoplayer.ad

My docomo

NTT DOCOMO

https://play.google.com/store/apps/details?id=jp.co.nttdocomo.mydocomo

NHK ラジオ ニュース

JOHN YOO

https://play.google.com/store/apps/details?id=nadaptrend.nhk

NHKネットラジオ らじる★らじる

NHK ( JAPAN BROADCASTING CORP

https://play.google.com/store/apps/details?id=jp.nhk.netradio

NicoRo α^2

SHISEI

https://play.google.com/store/apps/details?id=jp.sourceforge.nicoro

QRコードスキャナ

ZXING TEAM

https://play.google.com/store/apps/details?id=com.google.zxing.client.android

Shazam

SHAZAM ENTERTAINMENT LIMITED

https://play.google.com/store/apps/details?id=com.shazam.android

SmartTraining

AWWA

https://play.google.com/store/apps/details?id=com.awwa

Smart Tools - ツールボックス(有料)

SMART TOOLS CO.

https://play.google.com/store/apps/details?id=kr.aboy.tools

Whipper+

HAAPPSS

https://play.google.com/store/apps/details?id=jp.HAappss.Whipper2

dメニュー

NTT DOCOMO

https://play.google.com/store/apps/details?id=com.nttdocomo.android.docomo_market

iRunner

DROIDHEN CASUAL

https://play.google.com/store/apps/details?id=com.droidhen.irunner

pixiv

PIXIV INC

https://play.google.com/store/apps/details?id=jp.pxv.android

tSpyChecker

TAOSOFTWARE CO.,LTD

https://play.google.com/store/apps/details?id=jp.co.taosoftware.android.spychecker

radiko.jp for Android

株式会社RADIKO

https://play.google.com/store/apps/details?id=jp.radiko.Player

twicca

TETSUYA AOYAMA

https://play.google.com/store/apps/details?id=jp.r246.twicca

イノティア戦記3~カーニアの子供たち~(有料)

COM2US/アーケードアクション

https://play.google.com/store/apps/details?id=com.com2us.inotia3.normal.paidfull.google.jp.android.common&feature=search_result

イラディア

MocoGame

https://play.google.com/store/apps/details?id=jp.mapp.yusha&feature=search_result

エルスの天秤(有料)

AZOOZA/アーケードアクション

https://play.google.com/store/apps/details?id=jp.azooza.android.els&feature=search_result#?t=W251bGwsMSwyLDEsImpwLmF6b296YS5hbmRyb2lkLmVscyJd

スマホ最適化のたしなみ

adc.club

https://play.google.com/store/apps/details?id=com.adcall.smartoptimize&feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5hZGNhbGwuc21hcnRvcHRpbWl6ZSJd

いまいちキャッシュ削除に不安が残る。ただ、重い時に最適化を行うと軽くなる。

では~。

2008-04-24

天空の城はてな '08

 

社長、ここは一体……?」

はてなの中枢だ。

 上の社屋などガラクタにすぎん。はてなの技術は、全てここに結晶しているのだ。

 お前たちはここで待て。ここから先は社員しか入れない聖域なのだ。」

 

「なんだこれは?!

 f-starがこんなところまで…… 一段落したら全て焼き払ってやる!!」

「おおお……見たまえ。この巨大なサーバラックを。

 これこそ、はてなの力の根源なのだ。

 素晴らしい。500日もの間、社長の帰りを待っていたのだ!」

言葉を慎みたまえ。君ははてな王の前にいるのだ。

 これから社長の帰還を祝って、諸君にはてなの力を見せてやろうと思ってね……

 見せてあげよう。はてなサービスを!」

どぎゃーん

「ふはっはっはっはっ……素晴らしい。

 最高のショウだと思わんかね?

 見ろぉ! ブックマーカーゴミのようだ!!!!」

「何をする!

 くそぉ……返したまえ……いい子だから。さあ!

 ……はっはっはっ、どこへ行こうというのかね?」

 

「そのセッションCookieを大事に持ってろ! itkzのタッパーと引き替えだ!」

 

「立て! 鬼ごっこは終わりだ!

 ……終点がデータセンターとは、上出来じゃないか。こっちへこい!」

「これがデータセンターですって?

 ここはタコツボよ。うさんくさいユーザーの。

 会社が滅びたのに、サービスだけ生きてるなんて滑稽だわ。

 あなたにrootは渡さない!

 

 今は、Hatena Inc.がなぜ滅びたのか、私よくわかるの。

 シリコンの谷の歌にあるもの。

 

 “烏丸御池に根をおろし、風と共に生きよう。

  サーバラックと共に冬を越え、犬とともに鴨川を走ろう。”

 

 どんな素晴らしい理想を掲げても、

 かわいそうなブックマーカーたちをあやつっても、

 京都を離れては生きられないのよ!」

はてなは滅びぬ。何度でも甦るさ

 はてなサービスこそ、人類の夢だからだ!!」

「落ち着いてよく聞くんだ。

 ……滅びのIDを教えて。ぼくも一緒に言う。」

「えっ……」

「ぼくの左手に、手を乗せて……」

 ……

時間だ!答えを聞こう!!」

「「DASM!」」

 

 

 

2007-11-01

Shibuya.ex-Hatena - Rediscover Hatena KK

About Us

Shibuya.ex-Hatena は主に東京近辺のはてな退職者による非営利団体です。各個人の生活の向上を目的に、勉強会ならびにカンファレンスの開催、情報交換などを行うコミュニティを目指しています。

Shibuya.ex-Hatena株式会社はてな退職し、新天地へと踏み出すことを望む方であればどなたでも無料で参加できます。

Rediscover Hatena KK

6年。

世界はてなの真の実力を発見するのに要した時間である。

2001年近藤淳也人力検索により開始されたはてなは、「日本グーグル」などと呼ばれもした、ともすれば過剰とすらいい得る評価を経て、あたりのそこここに満ち充ちていた「Hatena Inc. とは、そして、はてなスターとはなんだったのか」という思いによって、ふたたび曲がり角にさしかかった。

はてなは、日本社会の「あちら側」と「こちら側」とを取り結ぶ、もっとも古くてもっとも新しい、そして、もっとも重要企業だ。はてなでの時間を総括し、次の10年を自らの手で創り出すために、我々は Shibuya.ex-Hatena を結成した。

Shibuya.ex-Hatena Conference #0

2007年11月1日(木)に Shibuya.ex-Hatena 初のイベント、Shibuya.ex-Hatena Conference #0 を開催します。

開催日時
参加
Ustream 中継
  • ありません

2007-07-28

はてなワールドの予想

自己採点は60点? Hatena Inc.が過ごしたシリコンバレーでの1年間:インタビュー - CNET Japan

このインタビューみてて、いままではてなワールドってなんだろーなーと検討もつかなかったんだけどピンときてしまった。

予想する。

はてなワールドGUIベースの自己認識が可能な状態でのネットブラウジングだ。

以前はみんなそこを目指してきた。

自己の存在が視認できる状態での行動。

RPGも初期の迷路のころは自己視点だけだった。これがWEBブラウジングだ。

RPG2.0とやらはドラクエのように自分が「どれ」だか認識できた状態でアクションをおこす。

もちろんこの傾向はネットにもあった。

卑近としてはセカンドライフもそうだ。

だが、はてなはおそらくセカンドライフのように自己のワールド内にコンテンツを誘致しようとせずにいままでどおり既存のコンテンツを利用するだろう。

そう、わんわんワールドグーグルMAPを利用したように。

ページ内を歩き回るスクリプトがあったように。

はてな技術レベルDBmySQLレベル育ちだしコンパイルできるような言語の土壌があまりない。

MMOのようなワールドの創出はあまり考えられない。

だが、すでにぼくらはその予兆をはてなテストにより見て取ることができた。

ブログペットが自分のブログから出れない時代はここで終わるかもしれない。


なんてことを思った。だとしたら面白い。リリース楽しみになってきた。

はてなワールドって何だと思う?

にゃー。

2007-07-19

/* Ten */
if (typeof(Ten) == 'undefined') {
    Ten = {};
}
Ten.NAME = 'Ten';
Ten.VERSION = 0.06;

/* Ten.Class */
Ten.Class = function(klass, prototype) {
    if (klass && klass.initialize) {
	var c = klass.initialize;
    } else if(klass && klass.base) {
        var c = function() { return klass.base[0].apply(this, arguments) };
    } else {
	var c = function() {};
    }
    c.prototype = prototype || {};
    c.prototype.constructor = c;
    Ten.Class.inherit(c, klass);
    if (klass && klass.base) {
        for (var i = 0;  i < klass.base.length; i++) {
	    var parent = klass.base[i];
            if (i == 0) {
                c.SUPER = parent;
                c.prototype.SUPER = parent.prototype;
            }
            Ten.Class.inherit(c, parent);
            Ten.Class.inherit(c.prototype, parent.prototype);
        }
    }
    return c;
}
Ten.Class.inherit = function(child,parent) {
    for (var prop in parent) {
        if (typeof(child[prop]) != 'undefined' || prop == 'initialize') continue;
        child[prop] = parent[prop];
    }
}

/*
// Basic Ten Classes
**/

/* Ten.JSONP */
Ten.JSONP = new Ten.Class({
    initialize: function(uri,obj,method) {
        if (Ten.JSONP.Callbacks.length) {
            setTimeout(function() {new Ten.JSONP(uri,obj,method)}, 500);
            return;
        }
        var del = uri.match(/\?/) ? '&' : '?';
        uri += del + 'callback=Ten.JSONP.callback';
        if (!uri.match(/timestamp=/)) {
            uri += '&' + encodeURI(new Date());
        }
        if (obj && method) Ten.JSONP.addCallback(obj,method);
        this.script = document.createElement('script');
        this.script.src = uri;
        this.script.type = 'text/javascript';
        document.getElementsByTagName('head')[0].appendChild(this.script);
    },
    addCallback: function(obj,method) {
        Ten.JSONP.Callbacks.push({object: obj, method: method});
    },
    callback: function(args) {
        // alert('callback called');
        var cbs = Ten.JSONP.Callbacks;
        for (var i = 0; i < cbs.length; i++) {
            var cb = cbs[i];
            cb.object[cb.method].call(cb.object, args);
        }
        Ten.JSONP.Callbacks = [];
    },
    MaxBytes: 8000,
    Callbacks: []
});

/* Ten.XHR */
Ten.XHR = new Ten.Class({
    initialize: function(uri,opts,obj,method) {
        if (!uri) return;
        this.request = Ten.XHR.getXMLHttpRequest();
        this.callback = {object: obj, method: method};
        var xhr = this;
        var prc = this.processReqChange;
        this.request.onreadystatechange = function() {
            prc.apply(xhr, arguments);
        }
        var method = opts.method || 'GET';
        this.request.open(method, uri, true);
        if (method == 'POST') {
            this.request.setRequestHeader('Content-Type',
                                          'application/x-www-form-urlencoded');
        }
        var data = opts.data ? Ten.XHR.makePostData(opts.data) : null;
        this.request.send(data);
    },
    getXMLHttpRequest: function() {
        var xhr;
        var tryThese = [
            function () { return new XMLHttpRequest(); },
            function () { return new ActiveXObject('Msxml2.XMLHTTP'); },
            function () { return new ActiveXObject('Microsoft.XMLHTTP'); },
            function () { return new ActiveXObject('Msxml2.XMLHTTP.4.0'); },
        ];
        for (var i = 0; i < tryThese.length; i++) {
            var func = tryThese[i];
            try {
                xhr = func;
                return func();
            } catch (e) {
                //alert(e);
            }
        }
        return xhr;
    },
    makePostData: function(data) {
        var pairs = [];
        var regexp = /%20/g;
        for (var k in data) {
            var v = data[k].toString();
            var pair = encodeURIComponent(k).replace(regexp,'+') + '=' +
                encodeURIComponent(v).replace(regexp,'+');
            pairs.push(pair);
        }
        return pairs.join('&');
    }
},{
    processReqChange: function() {
        var req = this.request;
        if (req.readyState == 4) {
            if (req.status == 200) {
                var cb = this.callback;
                cb.object[cb.method].call(cb.object, req);
            } else {
                alert("There was a problem retrieving the XML data:\n" +
                      req.statusText);
            }
        }
    }
});

/* Ten.Observer */
Ten.Observer = new Ten.Class({
    initialize: function(element,event,obj,method) {
        var func = obj;
        if (typeof(method) == 'string') {
            func = obj[method];
        }
        this.element = element;
        this.event = event;
        this.listener = function(event) {
            return func.call(obj, new Ten.Event(event || window.event));
        }
        if (this.element.addEventListener) {
            if (this.event.match(/^on(.+)$/)) {
                this.event = RegExp.$1;
            }
            this.element.addEventListener(this.event, this.listener, false);
        } else if (this.element.attachEvent) {
            this.element.attachEvent(this.event, this.listener);
        }
    }
},{
    stop: function() {
        if (this.element.removeEventListener) {
            this.element.removeEventListener(this.event,this.listener,false);
        } else if (this.element.detachEvent) {
            this.element.detachEvent(this.event,this.listener);
        }
    }
});

/* Ten.Event */
Ten.Event = new Ten.Class({
    initialize: function(event) {
        this.event = event;
    },
    keyMap: {
        8:"backspace", 9:"tab", 13:"enter", 19:"pause", 27:"escape", 32:"space",
        33:"pageup", 34:"pagedown", 35:"end", 36:"home", 37:"left", 38:"up",
        39:"right", 40:"down", 44:"printscreen", 45:"insert", 46:"delete",
        112:"f1", 113:"f2", 114:"f3", 115:"f4", 116:"f5", 117:"f6", 118:"f7",
        119:"f8", 120:"f9", 121:"f10", 122:"f11", 123:"f12",
        144:"numlock", 145:"scrolllock"
    }
},{
    mousePosition: function() {
        if (!this.event.clientX) return;
        return Ten.Geometry.getMousePosition(this.event);
    },
    isKey: function(name) {
        var ecode = this.event.keyCode;
        if (!ecode) return;
        var ename = Ten.Event.keyMap[ecode];
        if (!ename) return;
        return (ename == name);
    },
    targetIsFormElements: function() {
        var target = this.event.target;
        if (!target) return;
        var T = (target.tagName || '').toUpperCase();
        return (T == 'INPUT' || T == 'SELECT' || T == 'OPTION' ||
                T == 'BUTTON' || T == 'TEXTAREA');
    },
    stop: function() {
        var e = this.event;
        if (e.stopPropagation) {
            e.stopPropagation();
            e.preventDefault();
        } else {
            e.cancelBubble = true;
            e.returnValue = false;
        }
    }
});

/* Ten.DOM */
Ten.DOM = new Ten.Class({
    getElementsByTagAndClassName: function(tagName, className, parent) {
        if (typeof(parent) == 'undefined') {
            parent = document;
        }
        var children = parent.getElementsByTagName(tagName);
        if (className) { 
            var elements = [];
            for (var i = 0; i < children.length; i++) {
                var child = children[i];
                var cls = child.className;
                if (!cls) {
                    continue;
                }
                var classNames = cls.split(' ');
                for (var j = 0; j < classNames.length; j++) {
                    if (classNames[j] == className) {
                        elements.push(child);
                        break;
                    }
                }
            }
            return elements;
        } else {
            return children;
        }
    },
    removeEmptyTextNodes: function(element) {
        var nodes = element.childNodes;
        for (var i = 0; i < nodes.length; i++) {
            var node = nodes[i];
            if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) {
                node.parentNode.removeChild(node);
            }
        }
    },
    nextElement: function(elem) {
        do {
            elem = elem.nextSibling;
        } while (elem && elem.nodeType != 1);
        return elem;
    },
    prevElement: function(elem) {
        do {
            elem = elem.previousSibling;
        } while (elem && elem.nodeType != 1);
        return elem;
    },
    scrapeText: function(node) {
        var rval = [];
        (function (node) {
            var cn = node.childNodes;
            if (cn) {
                for (var i = 0; i < cn.length; i++) {
                    arguments.callee.call(this, cn[i]);
                }
            }
            var nodeValue = node.nodeValue;
            if (typeof(nodeValue) == 'string') {
                rval.push(nodeValue);
            }
        })(node);
        return rval.join('');
    },
    onLoadFunctions: [],
    loaded: false,
    timer: null,
    addEventListener: function(event,func) {
        if (event != 'load') return;
        Ten.DOM.onLoadFunctions.push(func);
        Ten.DOM.checkLoaded();
    },
    checkLoaded: function() {
        var c = Ten.DOM;
        if (c.loaded) return true;
        if (document && document.getElementsByTagName &&
            document.getElementById && document.body) {
            if (c.timer) {
                clearInterval(c.timer);
                c.timer = null;
            }
            for (var i = 0; i < c.onLoadFunctions.length; i++) {
                    c.onLoadFunctions[i]();
            }
            c.onLoadFunctions = [];
            c.loaded = true;
        } else {
            c.timer = setInterval(c.checkLoaded, 13);
        }
    }
});

/* Ten.Style */
Ten.Style = new Ten.Class({
    applyStyle: function(elem, style) {
        for (prop in style) {
            elem.style[prop] = style[prop];
        }
    }
});

/* Ten.Geometry */
Ten.Geometry = new Ten.Class({
    initialize: function() {
        if (Ten.Geometry._initialized) return;
        var func = Ten.Geometry._functions;
        var de = document.documentElement;
        if (window.innerWidth) {
            func.getWindowWidth = function() { return window.innerWidth; }
            func.getWindowHeight = function() { return window.innerHeight; }
            func.getXScroll = function() { return window.pageXOffset; }
            func.getYScroll = function() { return window.pageYOffset; }
        } else if (de && de.clientWidth) {
            func.getWindowWidth = function() { return de.clientWidth; }
            func.getWindowHeight = function() { return de.clientHeight; }
            func.getXScroll = function() { return de.scrollLeft; }
            func.getYScroll = function() { return de.scrollTop; }
        } else if (document.body.clientWidth) {
            func.getWindowWidth = function() { return document.body.clientWidth; }
            func.getWindowHeight = function() { return document.body.clientHeight; }
            func.getXScroll = function() { return document.body.scrollLeft; }
            func.getYScroll = function() { return document.body.scrollTop; }
        }
        Ten.Geometry._initialized = true;
    },
    _initialized: false,
    _functions: {},
    getScroll: function() {
        if (!Ten.Geometry._initialized) new Ten.Geometry;
        return {
            x: Ten.Geometry._functions.getXScroll(),
            y: Ten.Geometry._functions.getYScroll()
        };
    },
    getMousePosition: function(pos) {
        // pos should have clientX, clientY same as mouse event
        if ((navigator.userAgent.indexOf('Safari') > -1) &&
            (navigator.userAgent.indexOf('Version/') < 0)) {
            return {
                x: pos.clientX,
                y: pos.clientY
            };
        } else {
            var scroll = Ten.Geometry.getScroll();
            return {
                x: pos.clientX + scroll.x,
                y: pos.clientY + scroll.y
            };
        }
    },
    getElementPosition: function(e) {
        return {
            x: e.offsetLeft,
            y: e.offsetTop
        };
    },
    getWindowSize: function() {
        if (!Ten.Geometry._initialized) new Ten.Geometry;
        return {
            w: Ten.Geometry._functions.getWindowWidth(),
            h: Ten.Geometry._functions.getWindowHeight()
        };
    }
});

/* Ten.Position */
Ten.Position = new Ten.Class({
    initialize: function(x,y) {
        this.x = x;
        this.y = y;
    },
    subtract: function(a,b) {
        return new Ten.Position(a.x - b.x, a.y - b.y);
    }
});

/*
// require Ten.js
**/

/* Ten.SubWindow */
Ten.SubWindow = new Ten.Class({
    initialize: function() {
        var c = this.constructor;
        if (c.singleton && c._cache) {
            return c._cache;
        }
        var div = document.createElement('div');
        Ten.Style.applyStyle(div, Ten.SubWindow._baseStyle);
        Ten.Style.applyStyle(div, c.style);
        this.window = div;
        this.addContainerAndCloseButton();
        document.body.appendChild(div);
        if (c.draggable) {
            this._draggable = new Ten.Draggable(div, this.handle);
        }
        if (c.singleton) c._cache = this;
        return this;
    },
    _baseStyle: {
        color: '#000',
        position: 'absolute',
        display: 'none',
        zIndex: 2,
        left: 0,
        top: 0,
        backgroundColor: '#fff',
        border: '1px solid #bbb'
    },
    style: {
        padding: '2px',
        textAlign: 'center',
        borderRadius: '6px',
        MozBorderRadius: '6px',
        width: '100px',
        height: '100px'
    },
    handleStyle: {
        position: 'absolute',
        top: '0px',
        left: '0px',
        backgroundColor: '#f3f3f3',
        borderBottom: '1px solid #bbb',
        width: '100%',
        height: '30px'
    },
    containerStyle: {
        margin: '32px 0 0 0',
        padding: '0 10px'
    },
    // closeButton: 'close.gif',
    closeButton: 'http://s.hatena.com/images/close.gif',
    closeButtonStyle: {
        position: 'absolute',
        top: '8px',
        right: '10px',
        cursor: 'pointer'
    },
    _baseScreenStyle: {
        position: 'absolute',
        top: '0px',
        left: '0px',
        display: 'none',
        zIndex: 1,
        overflow: 'hidden',
        width: '100%',
        height: '100%'
    },
    screenStyle: {},
    showScreen: true,
    singleton: true,
    draggable: true,
    _cache: null
},{
    screen: null,
    windowObserver: null,
    visible: false,
    addContainerAndCloseButton: function() {
        var win = this.window;
        var c = this.constructor;
        var div = document.createElement('div');
        win.appendChild(div);
        Ten.Style.applyStyle(div, c.containerStyle);
        this.container = div;
        if (c.handleStyle) {
            var handle = document.createElement('div');
            Ten.Style.applyStyle(handle, c.handleStyle);
            win.appendChild(handle);
            this.handle = handle;
        }
        if (c.closeButton) {
	    var btn = document.createElement('img');
            btn.src = c.closeButton;
            btn.alt = 'close';
            Ten.Style.applyStyle(btn, c.closeButtonStyle);
            win.appendChild(btn);
            new Ten.Observer(btn, 'onclick', this, 'hide');
            this.closeButton = btn;
        }
        if (c.showScreen) {
            var screen = document.createElement('div');
            Ten.Style.applyStyle(screen, Ten.SubWindow._baseScreenStyle);
            Ten.Style.applyStyle(screen, c.screenStyle);
            document.body.appendChild(screen);
            this.screen = screen;
            new Ten.Observer(screen, 'onclick', this, 'hide');
        }
    },
    show: function(pos) {
        pos = (pos.x && pos.y) ? pos : {x:0, y:0};
        with (this.window.style) {
            display = 'block';
            left = pos.x + 'px';
            top = pos.y + 'px';
        }
        if (this.screen) {
            with (this.screen.style) {
                display = 'block';
                left = Ten.Geometry.getScroll().x + 'px';
                top = Ten.Geometry.getScroll().y + 'px';
            }
        }
        this.windowObserver = new Ten.Observer(document.body, 'onkeypress', this, 'handleEscape');
        this.visible = true;
    },
    handleEscape: function(e) {
        if (!e.isKey('escape')) return;
        this.hide();
    },
    hide: function() {
        if (this._draggable) this._draggable.endDrag();
        this.window.style.display = 'none';
        if (this.screen) this.screen.style.display = 'none';
        if (this.windowObserver) this.windowObserver.stop();
        this.visible = false;
    }
});

/* Ten.Draggable */
Ten.Draggable = new Ten.Class({
    initialize: function(element,handle) {
        this.element = element;
        this.handle = handle || element;
        this.startObserver = new Ten.Observer(this.handle, 'onmousedown', this, 'startDrag');
        this.handlers = [];
    }
},{
    startDrag: function(e) {
        if (e.targetIsFormElements()) return;
        this.delta = Ten.Position.subtract(
            e.mousePosition(),
            Ten.Geometry.getElementPosition(this.element)
        );
        this.handlers = [
            new Ten.Observer(document, 'onmousemove', this, 'drag'),
            new Ten.Observer(document, 'onmouseup', this, 'endDrag'),
            new Ten.Observer(this.element, 'onlosecapture', this, 'endDrag')
        ];
        e.stop();
    },
    drag: function(e) {
        var pos = Ten.Position.subtract(e.mousePosition(), this.delta);
        Ten.Style.applyStyle(this.element, {
            left: pos.x + 'px',
            top: pos.y + 'px'
        });
        e.stop();
    },
    endDrag: function(e) {
        for (var i = 0; i < this.handlers.length; i++) {
            this.handlers[i].stop();
        }
        if(e) e.stop();
    }
});

/* Hatena */
if (typeof(Hatena) == 'undefined') {
    Hatena = {};
}

/* Hatena.User */
Hatena.User = new Ten.Class({
    initialize: function(name) {
        this.name = name;
    },
    getProfileIcon: function(name) {
        if (!name) name = 'user';
        var pre = name.match(/^[\w-]{2}/)[0];
        var img = document.createElement('img');
        img.src = 'http://www.hatena.ne.jp/users/' + pre + '/' + name + '/profile_s.gif';
        img.alt = name;
        img.setAttribute('class', 'profile-icon');
        img.setAttribute('width','16px');
        img.setAttribute('height','16px');
        with (img.style) {
            margin = '0 3px';
            border = 'none';
            verticalAlign = 'middle';
        }
        return img;
    }
}, {
    profileIcon: function() {
        return Hatena.User.getProfileIcon(this.name);
    }
});

/* Hatena.Star */
if (typeof(Hatena.Star) == 'undefined') {
    Hatena.Star = {};
}

/*
// Hatena.Star.* classes //
**/
if (window.location && window.location.host.match(/hatena\.com/)) {
    Hatena.Star.BaseURL = 'http://s.hatena.com/';
} else {
    Hatena.Star.BaseURL = 'http://s.hatena.ne.jp/';
}
Hatena.Star.Token = null;

/* Hatena.Star.User */
Hatena.Star.User = new Ten.Class({
    base: [Hatena.User],
    initialize: function(name) {
        if (Hatena.Star.User._cache[name]) {
            return Hatena.Star.User._cache[name];
        } else {
            this.name = name;
            Hatena.Star.User._cache[name] = this;
            return this;
        }
    },
    _cache: {}
},{
    userPage: function() {
        return Hatena.Star.BaseURL + this.name + '/';
    }
});

/* Hatena.Star.Entry */
Hatena.Star.Entry = new Ten.Class({
    initialize: function(e) {
        this.entry = e;
        this.uri = e.uri;
        this.title = e.title;
        this.star_container = e.star_container;
        this.comment_container = e.comment_container;
        this.stars = [];
        this.comments = [];
    },
    maxStarCount: 11
},{
    flushStars: function() {
        this.stars = [];
        this.star_container.innerHTML = '';
    },
    bindStarEntry: function(se) {
        this.starEntry = se;
        for (var i = 0; i < se.stars.length; i++) {
            if (typeof(se.stars[i]) == 'number') {
                this.stars.push(new Hatena.Star.InnerCount(se.stars[i],this));
            } else {
                this.stars.push(new Hatena.Star.Star(se.stars[i]));
            }
        }
        if (se.comments && !this.comments.length) {
            for (var i = 0; i < se.comments.length; i++) {
                this.comments.push(new Hatena.Star.Comment(se.comments[i]));
            }
        }
        this.can_comment = se.can_comment;
    },
    setCanComment: function(v) {
        this.can_comment = v;
    },
    showButtons: function() {
        this.addAddButton();
        this.addCommentButton();
    },
    addAddButton: function() {
        if (this.star_container) {
            this.addButton = new Hatena.Star.AddButton(this);
            this.star_container.appendChild(this.addButton);
        }
    },
    addCommentButton: function() {
        if (this.comment_container) {
            this.commentButton = new Hatena.Star.CommentButton(this);
            this.comment_container.appendChild(this.commentButton.img);
        }
    },
    showStars: function() {
        var klass = this.constructor;
        // if (this.stars.length > klass.maxStarCount) {
        //     var ic = new Hatena.Star.InnerCount(this.stars.slice(1,this.stars.length));
        //     this.star_container.appendChild(this.stars[0]);
        //     this.star_container.appendChild(ic);
        //     this.star_container.appendChild(this.stars[this.stars.length - 1]);
        // } else {
        for (var i = 0; i < this.stars.length; i++) {
            this.star_container.appendChild(this.stars[i]);
        }
    },
    showCommentButton: function() {
        if (this.can_comment) {
            this.commentButton.show();
            if (this.comments.length) this.commentButton.activate();
        } else {
            // this.commentButton.hide();
        }
    },
    addStar: function(star) {
        this.stars.push(star);
        this.star_container.appendChild(star);
    },
    addComment: function(com) {
        if (!this.comments) this.comments = [];
        if (this.comments.length == 0) {
            this.commentButton.activate();
        }
        this.comments.push(com);
    },
    showCommentCount: function() {
        this.comment_container.innerHTML += this.comments.length;
    }
});

/* Hatena.Star.Button */
Hatena.Star.Button = new Ten.Class({
    createButton: function(args) {
        var img = document.createElement('img');
        img.src = args.src;
        img.alt = img.title = args.alt;
        with (img.style) {
	    cursor = 'pointer';
	    margin = '0 3px';
            padding = '0';
            border = 'none';
            verticalAlign = 'middle';
        }
        return img;
    }
});

/* Hatena.Star.AddButton */
Hatena.Star.AddButton = new Ten.Class({
    base: ['Hatena.Star.Button'],
    initialize: function(entry) {
        this.entry = entry;
        this.lastPosition = null;
        var img = Hatena.Star.Button.createButton({
            src: Hatena.Star.AddButton.ImgSrc,
            alt: 'Add Star'
        });
        this.observer = new Ten.Observer(img,'onclick',this,'addStar');
        this.img = img;
        return img;
    },
    ImgSrc: Hatena.Star.BaseURL + 'images/add.gif'
},{
    addStar: function(e) {
        this.lastPosition = e.mousePosition();
        var uri = Hatena.Star.BaseURL + 'star.add.json?uri=' + encodeURIComponent(this.entry.uri) +
            '&title=' + encodeURIComponent(this.entry.title);
        if (Hatena.Star.Token) {
            uri += '&token=' + Hatena.Star.Token;
        }
        new Ten.JSONP(uri, this, 'receiveResult');
    },
    receiveResult: function(args) {
        var name = args ? args.name : null;
        if (name) {
            this.entry.addStar(new Hatena.Star.Star({name: name}));
            //alert('Succeeded in Adding Star ' + args);
        } else if (args.errors) {
            var pos = this.lastPosition;
            pos.x -= 10;
            pos.y += 25;
            var scroll = Ten.Geometry.getScroll();
            var scr = new Hatena.Star.AlertScreen();
            var alert = args.errors[0];
            scr.showAlert(alert, pos);
        }
    }
});

/* Hatena.Star.CommentButton */
Hatena.Star.CommentButton = new Ten.Class({
    base: ['Hatena.Star.Button'],
    initialize: function(entry) {
        this.entry = entry;
        this.lastPosition = null;
        var img = Hatena.Star.Button.createButton({
            src: Hatena.Star.CommentButton.ImgSrc,
            alt: 'Comments'
        });
        img.style.display = 'none';
        this.observer = new Ten.Observer(img,'onclick',this,'showComments');
        this.img = img;
    },
    ImgSrc: Hatena.Star.BaseURL + 'images/comment.gif',
    ImgSrcActive: Hatena.Star.BaseURL + 'images/comment_active.gif'
},{
    showComments: function(e) {
        if (!this.screen) this.screen = new Hatena.Star.CommentScreen();
        this.screen.bindEntry(this.entry);
        var pos = e.mousePosition();
        pos.y += 25;
        this.screen.showComments(this.entry, pos);
    },
    hide: function() {
        this.img.style.display = 'none';
    },
    show: function() {
        this.img.style.display = 'inline';
    },
    activate: function() {
        this.show();
        this.img.src = Hatena.Star.CommentButton.ImgSrcActive;
    }
});

/* Hatena.Star.Star */
Hatena.Star.Star = new Ten.Class({
    initialize: function(args) {
        if (args.img) {
            this.img = args.img;
            this.name = this.img.getAttribute('alt');
        } else {
            this.name = args.name;
            var img = document.createElement('img');
            img.src = Hatena.Star.Star.ImgSrc;
            img.alt = this.name;
            with (img.style) {
                padding = '0';
                border = 'none';
            }
            this.img = img;
        }
	new Ten.Observer(this.img,'onmouseover',this,'showName');
	new Ten.Observer(this.img,'onmouseout',this,'hideName');
	if (this.name) {
            this.user = new Hatena.Star.User(this.name);
            this.img.style.cursor = 'pointer';
            new Ten.Observer(this.img,'onclick',this,'goToUserPage');
        }
        if (args.count && args.count > 1) {
            var c = document.createElement('span');
            c.setAttribute('class', 'hatena-star-inner-count');
            Ten.Style.applyStyle(c, Hatena.Star.InnerCount.style);
            c.innerHTML = args.count;
            var s = document.createElement('span');
            s.appendChild(img);
            s.appendChild(c);
            return s;
        } else {
            return this.img;
        }
    },
    ImgSrc: Hatena.Star.BaseURL + 'images/star.gif'
},{
    showName: function(e) {
        if (!this.screen) this.screen = new Hatena.Star.NameScreen();
        var pos = e.mousePosition();
        pos.x += 10;
        pos.y += 25;
        this.screen.showName(this.name, pos);
    },
    hideName: function() {
        if (!this.screen) return;
        this.screen.hide();
    },
    goToUserPage: function() {
        window.location = this.user.userPage();
    }
});

/* Hatena.Star.InnerCount */
Hatena.Star.InnerCount = new Ten.Class({
    initialize: function(count, e) {
        this.count = count;
        this.entry = e;
        var c = document.createElement('span');
        c.setAttribute('class', 'hatena-star-inner-count');
        Ten.Style.applyStyle(c, Hatena.Star.InnerCount.style);
        c.style.cursor = 'pointer';
        c.innerHTML = count;
        new Ten.Observer(c,'onclick',this,'showInnerStars');
        this.container = c;
        return c;
    },
    style: {
        color: '#f4b128',
        fontWeight: 'bold',
        fontSize: '80%',
        fontFamily: '"arial", sans-serif',
        margin: '0 2px'
    }
},{
    showInnerStars: function() {
        var url = Hatena.Star.BaseURL + 'entry.json?uri=' +
        encodeURIComponent(this.entry.uri);
        new Ten.JSONP(url, this, 'receiveStarEntry');
    },
    receiveStarEntry: function(res) {
        var se = res.entries[0];
        var e = this.entry;
        if (encodeURIComponent(se.uri) != encodeURIComponent(e.uri)) return;
        e.flushStars();
        e.bindStarEntry(se);
        e.addAddButton();
        e.showStars();
    }
});

/* Hatena.Star.Comment */
Hatena.Star.Comment = new Ten.Class({
    initialize: function(args) {
        this.name = args.name;
        this.body = args.body;
    }
},{
    asElement: function() {
        var div = document.createElement('div');
        with (div.style) {
            margin = '0px 0';
            padding = '5px 0';
            borderBottom = '1px solid #ddd';
        }
        var ico = Hatena.User.getProfileIcon(this.name);
        div.appendChild(ico);
        var span = document.createElement('span');
        with(span.style) {
            fontSize = '90%';
        }
        span.innerHTML = this.body;
        div.appendChild(span);
        return div;
    }
});

/* Hatena.Star.NameScreen */
Hatena.Star.NameScreen = new Ten.Class({
    base: [Ten.SubWindow],
    style: {
        padding: '2px',
        textAlign: 'center'
    },
    containerStyle: {
        margin: 0,
        padding: 0
    },
    handleStyle: null,
    showScreen: false,
    closeButton: null,
    draggable: false
},{
    showName: function(name, pos) {
        this.container.innerHTML = '';
        this.container.appendChild(Hatena.User.getProfileIcon(name));
        this.container.appendChild(document.createTextNode(name));
        this.show(pos);
    }
});

/* Hatena.Star.AlertScreen */
Hatena.Star.AlertScreen = new Ten.Class({
    base: [Ten.SubWindow],
    style: {
        padding: '2px',
        textAlign: 'center',
        borderRadius: '6px',
        MozBorderRadius: '6px',
        width: '240px',
        height: '120px'
    },
    handleStyle: {
        position: 'absolute',
        top: '0px',
        left: '0px',
        backgroundColor: '#f3f3f3',
        borderBottom: '1px solid #bbb',
        width: '100%',
        height: '30px',
        borderRadius: '6px 6px 0 0',
        MozBorderRadius: '6px 6px 0 0'
    }
},{
    showAlert: function(msg, pos) {
        this.container.innerHTML = msg;
        var win = Ten.Geometry.getWindowSize();
        var scr = Ten.Geometry.getScroll();
        var w = parseInt(this.constructor.style.width) + 20;
        if (pos.x + w > scr.x + win.w) pos.x = win.w + scr.x - w;
        this.show(pos);
    }
});

/* Hatena.Star.CommentScreen */
Hatena.Star.CommentScreen = new Ten.Class({
    base: [Ten.SubWindow],
    initialize: function() {
        var self = this.constructor.SUPER.call(this);
        if (!self.commentsContainer) self.addCommentsContainer();
        return self;
    },
    style: {
        width: '280px',
        height: '280px',
        overflowY: 'auto',
        padding: '2px',
        textAlign: 'center',
        borderRadius: '6px',
        MozBorderRadius: '6px'
    },
    handleStyle: {
        position: 'absolute',
        top: '0px',
        left: '0px',
        backgroundColor: '#f3f3f3',
        borderBottom: '1px solid #bbb',
        width: '100%',
        height: '30px',
        borderRadius: '6px 6px 0 0',
        MozBorderRadius: '6px 6px 0 0'
    },
    containerStyle: {
        margin: '32px 0 0 0',
        textAlign: 'left',
        padding: '0 10px'
    },
    getLoadImage: function() {
        var img = document.createElement('img');
        img.src = Hatena.Star.BaseURL + 'images/load.gif';
        img.setAttribute('alt', 'Loading');
        with (img.style) {
            verticalAlign = 'middle';
            margin = '0 2px';
        }
        return img;
    }
},{
    addCommentsContainer: function() {
        var div = document.createElement('div');
        with (div.style) {
            marginTop = '-3px';
        }
        this.container.appendChild(div);
        this.commentsContainer = div;
    },
    showComments: function(e, pos) {
        var comments = e.comments;
        if (!comments) comments = [];
        this.commentsContainer.innerHTML = '';
        for (var i=0; i<comments.length; i++) {
            this.commentsContainer.appendChild(comments[i].asElement());
        }
        if (e.starEntry && !e.can_comment) {
            this.hideCommentForm();
        } else {
            this.addCommentForm();
        }
        var win = Ten.Geometry.getWindowSize();
        var scr = Ten.Geometry.getScroll();
        var w = parseInt(this.constructor.style.width) + 20;
        if (pos.x + w > scr.x + win.w) pos.x = win.w + scr.x - w;
        this.show(pos);
    },
    bindEntry: function(e) {
        this.entry = e;
    },
    sendComment: function(e) {
        if (!e.isKey('enter')) return;
        var body = this.commentInput.value;
        if (!body) return;
        this.commentInput.disabled = 'true';
        this.showLoadImage();
        var url = Hatena.Star.BaseURL + 'comment.add.json?body=' + encodeURIComponent(body) +
            '&uri=' + encodeURIComponent(this.entry.uri) +
            '&title=' + encodeURIComponent(this.entry.title);
        new Ten.JSONP(url, this, 'receiveResult');
    },
    receiveResult: function(args) {
        if (!args.name || !args.body) return;
        this.commentInput.value = ''; 
        this.commentInput.disabled = '';
        this.hideLoadImage();
        var com = new Hatena.Star.Comment(args);
        this.entry.addComment(com);
        this.commentsContainer.appendChild(com.asElement());
    },
    showLoadImage: function() {
        if (!this.loadImage) return; 
        this.loadImage.style.display = 'inline';
    },
    hideLoadImage: function() {
        if (!this.loadImage) return; 
        this.loadImage.style.display = 'none';
    },
    hideCommentForm: function() {
        if (!this.commentForm) return;
        this.commentForm.style.display = 'none';
    },
    addCommentForm: function() {
        if (this.commentForm) {
            this.commentForm.style.display = 'block';
            return;
        }
        var form = document.createElement('div');
        this.container.appendChild(form);
        this.commentForm = form;
        with (form.style) {
            margin = '0px 0';
            padding = '5px 0';
            // borderTop = '1px solid #ddd';
        }
        //if (Hatena.Visitor) {
        //    form.appendChild(Hatena.Visitor.profileIcon());
        //} else {
        //    form.appendChild(Hatena.User.getProfileIcon());
        //}
        var input = document.createElement('input');
        input.type = 'text';
        with (input.style) {
            width = '215px';
	    border = '1px solid #bbb';
            padding = '3px';
        }
        form.appendChild(input);
        this.commentInput = input;
        var img = this.constructor.getLoadImage();
        this.loadImage = img;
        this.hideLoadImage();
        form.appendChild(img);
        new Ten.Observer(input,'onkeypress',this,'sendComment');
    }
});

/* Hatena.Star.EntryLoader */
Hatena.Star.EntryLoader = new Ten.Class({
    initialize: function() {
        var entries = Hatena.Star.EntryLoader.loadEntries();
        this.entries = [];
        for (var i = 0; i < entries.length; i++) {
            var e = new Hatena.Star.Entry(entries[i]);
            e.showButtons();
            this.entries.push(e);
        }
        this.getStarEntries();
    },
    createStarContainer: function() {
        var sc = document.createElement('span');
        sc.setAttribute('class', 'hatena-star-star-container');
        sc.style.marginLeft = '1px';
        return sc;
    },
    createCommentContainer: function() {
        var cc = document.createElement('span');
        cc.setAttribute('class', 'hatena-star-comment-container');
        cc.style.marginLeft = '1px';
        return cc;
    },
    scrapeTitle: function(node) {
        var rval = [];
        (function (node) {
            if (node.tagName == 'SPAN' &&
                (node.className == 'sanchor' ||
                 node.className == 'timestamp')) {
                     return;
            } else if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) {
                return;
            }
            var cn = node.childNodes;
            if (cn) {
                for (var i = 0; i < cn.length; i++) {
                    arguments.callee.call(this, cn[i]);
                }
            }
            var nodeValue = node.nodeValue;
            if (typeof(nodeValue) == 'string') {
                rval.push(nodeValue);
            }
        })(node);
        return rval.join('');
    },
    headerTagAndClassName: ['h3',null],
    getHeaders: function() {
        var t = Hatena.Star.EntryLoader.headerTagAndClassName;
        return Ten.DOM.getElementsByTagAndClassName(t[0],t[1],document);
    },
    loadEntries: function() {
        var entries = [];
        //var headers = document.getElementsByTagName('h3');
        var c = Hatena.Star.EntryLoader;
        var headers = c.getHeaders();
        for (var i = 0; i < headers.length; i++) {
            var header = headers[i];
            var a = header.getElementsByTagName('a')[0];
            if (!a) continue;
            var uri = a.href;
            var title = '';
            // Ten.DOM.removeEmptyTextNodes(header);
            var cns = header.childNodes;
            title = c.scrapeTitle(header);
            var cc = c.createCommentContainer();
            header.appendChild(cc);
            var sc = c.createStarContainer();
            header.appendChild(sc);
            entries.push({
                uri: uri,
                title: title,
                star_container: sc,
                comment_container: cc
            });
        }
        return entries;
    }
},{
    getStarEntries: function() {
        var url = Hatena.Star.BaseURL + 'entries.json?';
        for (var i = 0; i < this.entries.length; i++) {
            if (url.length > Ten.JSONP.MaxBytes) {
                new Ten.JSONP(url, this, 'receiveStarEntries');
                url = Hatena.Star.BaseURL + 'entries.json?';
            }
            url += 'uri=' + encodeURIComponent(this.entries[i].uri) + '&';
        }
        new Ten.JSONP(url, this, 'receiveStarEntries');
    },
    receiveStarEntries: function(res) {
        var entries = res.entries;
        if (!entries) entries = [];
        for (var i = 0; i < this.entries.length; i++) {
            var e = this.entries[i];
            for (var j = 0; j < entries.length; j++) {
                var se = entries[j];
                if (!se.uri) continue;
                if (encodeURIComponent(se.uri) == encodeURIComponent(e.uri)) {
                    e.bindStarEntry(se);
                    entries.splice(j,1);
                    break;
                }
            }
            if (typeof(e.can_comment) == 'undefined') {
                e.setCanComment(res.can_comment);
            }
            e.showStars();
            e.showCommentButton();
        }
    }
});

/* Hatena.Star.WindowObserver */
Hatena.Star.WindowObserver = new Ten.Class({
    initialize: funct


  

2007-06-30

株主でもないけど

近藤さん日本法人はてな社長を辞めて新しい人を迎え入れた方が良いのではないか、と思ったりする。

はてなが他のウェブサービスとは一線を画するのは、社長である近藤さんが持ち前の好奇心や向上心で実行動をして日本リアルネットワークガンガン顔を出して会社を引っ張っていたからこそと思っていまして、初期の「他のベンチャー会社を一日オフィスにしてみる」なんかは見ていて「おもしろいなあ」と感じられたわけです。

近藤さんはここ最近「そうだ、京都行こう」みたいな日記ばかりで、この前なんかは日本に「来ました」と日本というフィールドには興味をなくしているとしか思えず、はてな日本でのウェブサービスを向上させていくには近藤さん社長で居続けることは株式会社はてな成長の障害になりかねないと思ってしまいます(梅田さんなどの他の取締役日本いないし)

今の日本法人はてなは、実際の社内活動は知りませんけど、はてなという会社を維持しているだけと見えてしまっていて、個性的な社員の人たちもいるけど、あくまで「社員」という立場でしかないから対外的な活動をするにあたってはあまり期待はできないというか。

積極的な対外活動ができたのは近藤さんが「社長」であるから、他のベンチャー会社も話を聞いてくれたわけで、「はてな社員」が持ち込んだって相手にしてくれるかはわからない。最近会社で「お外に遊び」に行ったりしないんですか?

会社法を知らないので適当に書きますが、はてなホールディングス(HH)を作って、株式会社はてなHatena Inc.子会社にしてHHとHatena Inc.近藤さん社長株式会社はてな日本フィールドバリバリと先へ行こうとするようなバイタリティーのある人をトップにして欲しいなあ。

こんなことを書くのは多分はてなが大きくなって「見えなく」なったからなんだろうなあ。大きくなっていることは別に文句は無いのですが。

2007-03-26

はてな愛の劇場

secondlife「もう我慢できねぇ! こんな会社、辞めてやる!」

naoya「待てよsecondlife! あと少し、もう少しだけでも!」

wanpark「……諦めろよ、naoya」

naoya「wanpark? おまえまでそんなことを言うのか!?」

wanpark「Hatena inc.は失敗し、会長は野生に返り、望夫はあちら側に行ってしまった……お終いだよ……」

naoya「まだ社長がいる! 社長さえいれば!」

wanpark「いまの社長は一行ポエム生産するだけの機械(マシーン)だ……それはnaoya、おまえがいちばん理解しているはずだぜ……」

naoya「…………」

wanpark「じゃあな。またいつか、どこかで会おうぜ」

riko「あたいもここで降りさせてもらうよ」

naoya「rikoたん……」

riko「このまま一緒に沈没するのはまっぴらごめんだ。あたいは好きにやらせてもらう」

naoya「いままでありがとう、rikoたん」

riko「……あんたたちのこと、嫌いじゃなかったよ」

kiyohero「いってしまいましたね」

naoya「kiyohero、おまえはどうするんだ?」

kiyohero「旅に出てみようと思います。世界各地を見て回りたい。そして多くの人に、はてなで起こったことを伝えたいんだ……」

naoya「そうか。おまえならきっとやれるよ、kiyohero」

kiyohero「ありがとう、naoyaさん。さようなら……」

naoya「ふふふ、みんないなくなっちまったな……」

naoya「だけど社長、俺はずっと傍にいるから……」

naoya「いつまでも傍にいるから……」

jkondo今日はてな以外アイデア今日はてな以外アイデア今日はてな以外アイデア今日はてな以外アイデア……」

2007-01-16

Hatena Inc.iPhoneの輸入代行を行うと発表

どうせ電話としては使わなそうだし

WiFiが使えれば十分なので

発売後すぐ手に入れたい

表題はまだ嘘ですが

お願いd:id:jkondo

2006-12-28

天空のなんか

社長、ここは一体……?」

はてなの中枢だ。

 上の社屋などガラクタにすぎん。はてな技術は、全てここに結晶しているのだ。

 お前たちはここで待て。ここから先は社員しか入れない聖域なのだ。」

 

「なんだこれは?!

 はまちやがこんなところまで…… 一段落したら全て焼き払ってやる!!」

「おおお……見たまえ。この巨大なサーバラックを。

 これこそ、はてなの力の根源なのだ。

 素晴らしい。700日もの間、社長の帰りを待っていたのだ!」

言葉を慎みたまえ。君ははてな王の前にいるのだ。

 これからHatena Inc.の復活を祝って、諸君にはてなの力を見せてやろうと思ってね……

 見せてあげよう。はてなサービスを!」

どぎゃーん!

「ふはっはっはっはっ……素晴らしい。

 最高のショウだと思わんかね?

 見ろぉ! ブックマーカーがゴミのようだ!!!!」

「何をする!

 くそぉ……返したまえ……いい子だから。さあ!

 ……はっはっはっ、どこへ行こうというのかね?」

 

「そのUSBメモリを大事に持ってろ! 小娘の命と引き替えだ!」

 

「立て! 鬼ごっこは終わりだ!

 ……終点がサーバルームだとは、上出来じゃないか。こっちへこい!」

「これがサーバルームですって?!

 ここはお墓よ。あなたとあたしの。

 会社が滅びたのに、サービスだけ生きてるなんて滑稽だわ。

 あなたにrootは渡さない!

 

 今は、Hatena Inc.がなぜ滅びたのか、私よくわかるの。

 シリコンの谷の歌にあるもの。

 

 “鉢山町に根をおろし、風と共に生きよう。

  サーバラックと共に冬を越え、犬とともに社歌を謳おう。”

 

 どんな素晴らしい理想を掲げても、

 かわいそうなブックマーカーたちをあやつっても、

 渋谷区を離れては生きられないのよ!」

はてなは滅びぬ。何度でも甦るさ

 はてなサービスこそ、人類の夢だからだ!!」

ハテナ。落ち着いてよく聞くんだ。

 ……滅びのIDを教えて。ぼくも一緒に言う。」

「えっ……」

「ぼくの左手に、手を乗せて……」

 ……

時間だ!答えを聞こう!!」

「「ダスム!」」

2006-11-23

WinnyにせよYouTubeにせよ

革命的なサービスは反則スレスレのところを突いてくるなぁ、と。

はてなもそういうあたりを狙ってみては。

あ、日本じゃ無理かな。

Hatena inc.に期待。

 
ログイン ユーザー登録
ようこそ ゲスト さん