「Blogger」を含む日記 RSS

はてなキーワード: Bloggerとは

2010-01-21

ttp://opengl.jp/blogger/2007/05/helmut-schmid.html

デザイナー過去に、そして現在チャレンジしなければならない。 未来チャレンジしなければならない。 しかし何よりもまず、 デザイナー自分に対して 真実でなければならない。 デザイン姿勢である。

2009-12-25

google 2009年

2009年googleの覚え書き

  • streetview
    • 行政指導されるも、対象都市を拡大。撮影高を2.45mから2.05mに。まだまだ揉めそう。

時価総額18兆円 株価618ドル

2009-11-15

海外脱出を推進する総理

科学支出の削減について「こうなったら海外に脱出してやる!」とコメントする科学bloggerと、

税制について「税金の無い国、ウラヤマシス!我々も移住したい!」と発言する総理と、

それぞれいて、ぼくは「過激だなー」と思ってみていたけれど、



これらの話を組み合わせて、

科学研究やDr.の待遇に手厚い国、ウラヤマシス!こうなったら我々も移住してやる!」

と書くと、至って自然な発想に見えてくる不思議

2009-10-07

bloggerで色々書いてたけどトラックバックコメントが来ないのでこっちに移転

日本語読める皆さんおはようございます。

どこから検索引っかかってきたか分からない方こんにちわ


グーグルブログ適当なことを適度に書いてたけど、イマイチ反応なのでなんだかんだはてなに移住しに来ました。

ここで存在感は示せるだろうか。

結局毎日ダラダラとyoutubefacebookしか見ていないのでとりあえづ不特定の人間様にう○こみたいな自分の感じたことを発信していこうとおもみまぷ。

大した情報は引き出せないかと思いますが。


まず、今日楽天オークション落札された商品が4000円程度入金されて、ひさびさにコンビニで買い物。

コンビニって中坊くらいにでき始めた記憶があるけど、たぶんそれ以来初めてかも、20分くらいかごを持ち歩いてふらふら品定めで迷ってしまった。

お金を使えないって不幸せお金を使えるって幸せってしみじみ実感。


そんな私は毎日株のチャートと睨めっこ。

グーグルRss Readerpodcastの音声ファイルをそのまま再生できるので、惰性でグーグルブログ作ってみた。けどこれがまた反応悪いんだぁ...

そのreaderで毎日読売ポッドキャストやら日経ヴェリタスやら株式経済ニュースをこれでもか!ってほどに登録して毎日世界経済勉強しています。

世の人に比べたら勉強のほどにもならないと思うけど、パソコンの前に座りっぱなしの私にはちょうどよいシステムでっす。

ほんっとシステム開発者とかってすばらしい仕事してらっしゃる方だと思う。

ま、そんな2009年10月6日朝6時半も読売ポッドキャストを聞いてます。

あーまた今日も同じ時間が過ぎるのかーーーー何か変えなきゃ。

早く修理に出した携帯電話の料金を払える額を生み出さないとー

Bluetoothキーボードマウスも欲しいし、寒くなってきたからかっちょいい上着も買いたいし、合コンもやりたいし、おいしいごはん食べたいし、ワイン飲みたいし、飲み会開きたいし...今年こそはクリスマス会開きたいなぁー

2009-09-19

http://anond.hatelabo.jp/20090919164623

ありがとうありがとう。

子ども向けのブログ、とかで検索しても、オススメとか注意点とか、よくわからないんだ。

閲覧制限かければ何でもいい、とか、そういうのもよくわからない。

経験談があれば、きいてみたいところ。

WordPressは初めてみたけど、文系の俺にはちょっとハードルが高そうだ。

Blogger検討してみる。

2009-02-05

http://anond.hatelabo.jp/20090205003056

ふーん。

別にそのひとたちが陰口だと思っていようが何だろうがそれはどうでもいいんだけど、元増田はこういうこと書いて何がしたいの?


>「凸するヲチ板住人でもなく、エントリー書いて反応返してくるわけでもない。ツールを全く違う使い方をして自分たちのねぐらにしてる、ねらーBloggerの半端な融合体っていうか、どっちつかずのなりそこない?」


俺ら増田なんて↑コレよりもさらになりそこないの、ブコメid出すことすらできないヘタレの巣窟じゃん。2chで言えばIDの出ない板。自演もやり放題。

ココからはてブ批判とか、おこがましいにも程があるんじゃない?

増田増田同士、うだうだ独り言について突っ込み入れ合ってる程度がお似合いでしょ。はてブ批判ならせめてダイアリでやりなさいな。

元増田だけど

http://anond.hatelabo.jp/20090204134209

今までの同じような話題もそうだったけど、みんな何か勘違いしてんだよね。

陰口を叩いているように見えるはてブブコメ(主にネガコメ)が気持ち悪い、いけすかないって言われてるんだと思ってる人多すぎ。

まぁ中にはそう思ってる人もいるんだろうけど、俺が書いた面子は

ソーシャルブックマークというツールをコメントツールとして使って、実質記事とそれを書いた人に対するレスポンスになっていない使い方をする人間が多数いること

に対して気持ち悪いって言ってた。

ネガコメだとか意見表明だとかっていうコメントの内容関係無し。

書いた人に意見を言いたいの?罵倒したいの?誰かに聞いて欲しいの?意見があるなら直接コメントするなり自分エントリー立てて言及すれば?ヲチしたいならスレッド立ててやれば?なんでソーシャルブックマークコメント機能使ってみんなそんなことしてるの?何がやりたいの?

ってのが根源みたい。

はてなブックマークってソーシャルブックマークなんだって言う程度の認識だったけど、ソーシャルブックマークとしての利用があまりされてないみたいだし、そういうツールとしては価値がないみたいだね」

「凸するヲチ板住人でもなく、エントリー書いて反応返してくるわけでもない。ツールを全く違う使い方をして自分たちのねぐらにしてる、ねらーBloggerの半端な融合体っていうか、どっちつかずのなりそこない?」

ってのが全てを表してるのかも。

2009-01-30

日本人による日本語ブログがひどい

BloggerとかTumblrとかぼーっと見ていて、思ったんです。

どのブログ(だいたい英語)もAdSence貼ってない。一部のブログでは、うわっ、まだポップアップ広告かよ!みたいなことしかけてくるんだけど、それも少数。

それよりも、日本人による日本語ブログがひどい。高確立確率AdSenseに遭遇する。

やれやれ、って感じ。

かく言う私も、ブログでお小遣い程度に収入あったらいいなあ、とか思って、ブログアフィリエイトとかしちゃうけど...。

日本人ってセコい国民なのか!?

2008-10-31

ドロップシッピング

いま私が作っているホームページの6割ぐらいは

Bloggerを使って忍者ホームページ

公開しているわけだが、昨日、忍者ホームページ

簡単にドロップシッピングができるツールを見つけてしまった!

もしもドロップシッピングの超できすぎくんだ!

作成例はコレだが、ものの15分もあれば6つの商品

紹介しただけの簡単なホームページができてしまう!

超できすぎくんでは5つのホームページを作ることが可能だ。

5つ作っても1時間ちょっとぐらいしかかからない。

また、もしもドロップシッピングには全商品を網羅した

csvが提供されているのが、データが大きすぎて

メモ帳で、(ここにshop_idを入れてください)という部分を

変換しようと思ったが、パソコンが固まってしまって

実行できなかった。3年前のパソコンメモリが512MB

では厳しいと実感…ちなみにこのパソコン民事再生法

を申請した九十九ツクモ)電機で購入したものだ。寂しいねぇ…

2008-10-12

http://anond.hatelabo.jp/20081011202246

これか!

ブラッディ・マンデイ」を考察する

http://japan.cnet.com/blog/isidai/2008/10/12/entry_27017004/

いや、演出・小道具担当の人は、よく頑張ってる方じゃないんですか?

ガチ一般人の演出じゃなくて、ちょっと安心した。

それはともかく、ここまで列挙してbloggerにも感心した。どうかと思うけど。

2008-09-22

http://anond.hatelabo.jp/20080922172728

とりあえず落ち着け

×プロパガンナ

プロパガンダ

な。


追記:

×bloger

blogger

ブロガー

もな。


もしかして誤字も含めてネタなのか?

だったら野暮ですまん。

2008-06-06

ブログを比較してみる

あたりを読んでちょっと調べてみる思いつき。

ブログサービス/システム 代表ブログ 前後エントリへのリンク 最近エントリ一覧 月別へのリンク 検索フォーム リンク要素の使用 エントリ一覧 Dateヘッダを現在日時にしない
FC2ブログ FC2インフォメーション
はてなダイアリー はてなダイアリー日記 ※1
ブログ人 ブログ人情報局    
Seesaa ブログ Seesaaからのお知らせ    
Yahoo!ブログ Yahoo!リサーチ公式ブログ    
ヤプログ みかんブログ ※2    
So-net blog What's new? ※2    
アメーバブログ スタッフブログ      
忍者ブログ 忍者ブログ インフォメーション/メンテナンス/障害情報      
goo ブログ gooブログ スタッフブログ      
livedoor Blog livedoor Blog 開発日誌      
tDiary tDiary.org    
Windows Live Spaces スタッフページ    
ココログ 日刊ココログガイド      
楽天ブログ 楽天ブログスタッフBlog      
JUGEM JUGEMお知らせブログ      
Movable Type MT News Blog      
ウェブリブログ 公式ブログウォッチ隊        
Hyper NIKKI System h14m.org 公式日記          
WordPress WordPress > Blog            
Vector maglog おしらせmaglog            
エキサイトブログ                
au one ブログ                
Blogger                
blosxom                

機能の見落としや、代表するブログの選択がまずい、このブログサービスを上げないのはおかしい、などがありましたらごめんなさい。そのあたりのご指摘お待ちしてます。

ウェブリブログ修正(thx d:id:yas-toro

2008-04-09

y_arim氏に言及するのが流行ってるようなので

http://b.hatena.ne.jp/y_arim/20080409 より抜粋

  • 非モテ=モテたくて仕方ない人 anond.hatelabo.jp
    • [anonymous][非モテ][love]いや鬱陶しいぞ。執着なくても、求めてもいない好意を求めてもいない相手から寄せられたりすると。
  • デートで異性の話をしないのはマナーなんだと思った - Attribute=51
    • [blog][blogger][communication][男女]ぼくなんか、二人きりで食事した女の子現在彼氏の話をされたりしたぞ。何度か。いやまあそのへん織り込み済みの友人関係ってだけだが。

ありがちな反応「どう見てもモテるけど贅沢な俺アピールです。本当に有難うございました。」

よく訓練されたはてなー風の反応「非モテ界に新キャラ誕生イケメンモテあてつけ罵倒芸!よっマッチョ!しびれるゼ!イカしてるゼ!(拍手喝采ブクマの嵐)」

  • 他人に言及すれば、自分も言及されるという自覚がない人問題 - ARTIFACT@ハテナ系
    • [web][communication]ところが世の中、明確に言及されているわけでもないのに「俺のことかーっ!!!」と噛み付いてくるクリリンがたくさんいるんだな。ぼくも含めて。この世に人間は二人以上いるので、結局誰もが言及されうる。

この辺見ると、ただ単に中途半端に賢いメタ非モテなんだろね。

2008-02-07

Bloggerblog書きはじめたんだけど

Bloggerblog書いてる有名な人っているんかね

はてダでもよかったんだけど、あれって画像リンク貼れないからやめた

2008-01-18

はてなブックマークの収集スクリプトを書いてみた

ので、その結果を貼ってみます。とりあえず、はてなブックマークが始まってから1ヶ月(2005/2/10〜2005/3/9,1033エントリ)の、ブックマーク数によるベスト10を出しました。

ここで皆さんにお願いがあるのですが、今回のベストX以外にどういう観点でデータを抽出したら良いか(どういう一覧がほしいか)、コメントをいただけませんか?データは集めてみたものの、活用方法に困ってます。

1位:Ajax: Web アプリケーション開発の新しいアプローチ
2位:Google検索コマンドと演算子一覧/Web検索! メタサーチ/
3位:Wikipedia
4位:Google
5位:通知表の所見欄に書きたいけど書けない(性格を表す)言葉を書きかえる一覧表
6位:正しい知識を得たい人の爲のCSS2リファレンス
7位:Jess : Automated Japanese Essay Scoring System
8位:窓の杜 - 【特集】「Firefox」プラグイン特集 第1回
9位:ITmedia
10位:スラッシュドット ジャパン

====================

でした。

当時はまだ「有名サイトトップページにとりあえず貼っておく」みたいな使われ方をしていますね。ブックマークをどう使うか、というスタイルを探していたんでしょうか。

ちなみにこのときのキーワード出現回数のベスト20は

b:keyword:コンピュータ(330回)」「b:keyword:ウェブ(321回)」「b:keyword:一般(147回)」「b:keyword:はてな(77回)」「b:keyword:Google(67回)」「b:keyword:サイエンス(47回)」「b:keyword:blog(42回)」「b:keyword:ゲーム(41回)」「b:keyword:Internet Explorer(33回)」「b:keyword:はてなブックマーク(31回)」「b:keyword:RSS(30回)」「b:keyword:Microsoft(30回)」「b:keyword:JavaScript(29回)」「b:keyword:読書(28回)」「b:keyword:iPod(25回)」「b:keyword:firefox(25回)」「b:keyword:Apple(24回)」「b:keyword:ニッポン放送(23回)」「b:keyword:サービス(23回)」「b:keyword:音楽(20回)」

で、タグベスト20は

b:t:web(88回)」「b:t:blog(65回)」「b:t:ネタ(59回)」「b:t:news(49回)」「b:t:はてな(42回)」「b:t:it(33回)」「b:t:hatena(33回)」「b:t:社会(30回)」「b:t:ニュース(28回)」「b:t:neta(27回)」「b:t:misc(26回)」「b:t:ajax(26回)」「b:t:tool(25回)」「b:t:software(24回)」「b:t:tips(23回)」「b:t:javascript(23回)」「b:t:ブログ(22回)」「b:t:まとめ(21回)」「b:t:livedoor(20回)」「b:t:google(20回)」

でした。当時から「ネタタグって多かったんですかね(タグキーワード現在の付与状況しか分からないので、当時の本当の状態が分からない)。

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-05-18

量は質を生まない

Twitterとは、量が質を産む作業そのものなんじゃないかと思った」

http://stillwantto.be/blog/2007/05/twitternight.html

それは絶対にない。ありえないと言ってもいい。量は質を生まない。

インターネットにおいて、個人の著作のほとんどは書き捨てだ。古のテキストサイトでも、ニュースグループでも、Blogでも、mixiでも、はてなブックマークでも、たくさんのクズが生産され、消費され、忘れられてきた。Twitterがこの列の最後尾に加わっただけの話。ニュースグループを未だにチェックしている人は手を挙げて?せめてログを大事に持っている人は?

いやいや、ニュースグループは長年よく頑張ったじゃないか。Twitterがこんなに長生きするとは思えない。今ログが全部消えても、日本じゃ裁判にさえならないだろう。Bloggerがいつも通り口だけ偉そうな批判を行って、それでおしまいみんな心のどこかでクズを生産していることに気付いているからだ。年寄になってTwitterログを読み直したい?「お爺ちゃん、仕事中に何してたの?」って。

大原則:クズはどれだけ集まってもクズ。別にインターネットに限った話じゃない。雑誌だって本だって映画だって、ほとんどはクズとして生産され、クズとして消費され、クズとして忘れられていくのだ。

そんなことない、例えばクズじゃないBlogもあるじゃないかって?その人は頑張っているんだろう。ちょうどクズ作家の中にクズじゃない作家がいるみたいに。でもBlogというシステムが、クズの山から質を産み出したのか?いいや、ただGoogleの精度を下げて、クズの流通を後押ししただけだ。

はてなブックマークも変わらない。誤解する人がいるけれど、これはただ良いものを流通させるシステムであって、クズに魔法をかけるシステムじゃない。そもそも「綺麗なアイコン50」みたいな記事を流通させるべきなのかは別にして。いや、よく考えてみれば、はてなブックマークには一部のクズ記事を盛り上げる「晒し」という魔法があったな。まったく、素晴らしい発明だよね。

新しいメディアが現れると、必ずこうして「このメディアはクズから質を生みだすのだ」と言いだす人が現れる。これは「僕の生み出すクズをなんとかして」という叫びでもある。もちろん、なんともならない。技術進化を待つより、日本語を学び直したほうがずっと早い。

スタージョンの法則は正しい。「どんなものも90%はクズ」なのだ。増田非モテとか非コミュとか、クズみたいな話ばっかり。でも人間はクズ話が好きだ。いいじゃん、クズで。楽しいんでしょ、Twitter交換日記夏休みの工作、一度だけ書いた小説RPGツクール…クズを作るのに躍起になっていたことも、いつかはいい思い出になるのだ。だから質を生むとか言う口は閉じたまえ。

2007-04-14

ガ島通信 - オライリーがブログエチケット「Blogger's Code of Conduct」を提唱

1. 自分の言葉責任を持ち、基本的な礼儀に従わないコメントは制限する権利を留保する

2. リアルで話さないことはオンラインでも話さない

3.もし緊張が拡大していれば、公にする前にプライベートコンタクトする

4.誰かが不公平な攻撃を受けているとき、熟慮した行動を行う

5.匿名は認めるが、偽名は認めない(匿名=正体は分かるが名前を伏せていることで、日本匿名とは異なるようだ)

6.トロール(怪物?日本で言う「荒らし」のようなものか?)は無視する(要するにスルー力を持てということ)

7.ブログホスティング会社はより強力にサービスを行うことを奨励する(ブログホスティング企業が問題のあるブロガーにもっと対応すべきだ)


これを逆に言うと、


1. 責任に縛られずに発言し、礼儀のなってないコメントでもなるべく制限はしない

2. リアルで話さないことこそ、オンラインでは積極的に発言する

3. プライベートで接触することは避け、パブリックな空間で全てを解決する

4. 誰かが不公平な攻撃を受けているときは、考えるよりさきに感じたままに動く

5. 名前も正体も伏せる

6. 荒らしには積極的に絡み、「スルー力」などと誤魔化さない

7. ブログホスティング会社は「君臨すれども統治せず」を心がける


・・・これ増田だよね。ぜんぶに当てはまるわけじゃないけど。

私はこっちの方が好きです。

2007-04-08

Google Apps(Remember The Milk) VS サイボウズ(cybozu) 4776.t

コモディティ化 - Wikipedia

ディスラプティブ技術 - Wikipedia

スタートアップの始め方

テクノロジーの世界では、常にローエンドがハイエンドを食っている。

安価な製品をより強力にするほうが、強力な製品を安くするよりも簡単なのだ。

だから安価でシンプルというところから始めた製品は徐々に強力なものへと成長していき、水が部屋に満ちるように、

ハイエンド」の製品を天井の方へと押し込めることになる。

Sunはこれをメインフレームに対して行い、IntelはSunに対して行っている。

イノベーションのジレンマ - Wikipedia


米Google、情報共有サイト作成サービス「Google Sites」を発表

誰でも簡単に編集を始められるように、

5種類のテンプレート(Webページ、ブログ、ファイル共有、ダッシュボードリスト)を用意。


企業が部内プロジェクトを遂行したり、

学校行事や宿題の共同作業を行なうためのサイトなどを簡単に作ることができる。


 Google Sitesは、Google Appsに統合されているため、

Google Docs」「Google Calendar」「Picasa」「YouTube」など、

Googleの他のサービスで利用しているコンテンツも簡単に埋め込むことができる。

また、動画や画像、Microsoft Officeファイルなどをアップロードして、

グループ内で共有することも簡単にできる。


Google Apps Google カレンダー  Gmail: Google メール  TODO リスト ゲームもできる!iGoogleの使い方!(Googleパーソナライズド・ホームページ)


Features : Drag-and-drop - Google Docs Help Center


ITmedia Biz.ID:もっと便利にGoogleカレンダーを使う7つのTips


一度設定した予定はドラッグ&ドロップで移動ができる。


「11時から会議」の予定を入力する時、11時のセルをクリックしてはいないだろうか。

実はGoogleカレンダーでは適当にクリックして、簡易入力の吹き出しに「11時に会議」と入力すれば時間を自動的に調整してくれる。


Google Calendar

オンラインサービスなのに、オフラインでも操作できる

Googleカレンダーをオフラインで使う 〜同期ソフト一覧〜

Google Gears (ウェブアプリをオフラインで利用可能に) : ワークスタイル・メモ


Google Calendar の使い方 | グーグル・カレンダーの便利な機能や特徴を紹介します


Outlookサイボウズも窓から投げ捨てよう!

Gmailとの連携でデキルあなたを創る!

話題のAjaxインターフェースサクサク使える次世代型Webスケジューラ「Google Calendar」の使い方!!


デスクトップアプリケーションのように、ドラッグ&ドロップでイベント(予定)を移動させることが可能。


Google カレンダー


Office 7のようにWebブラウザクライアントとするソフトウェアではAjax採用がトレンドだ。

サイボウズもそのトレンドに乗ったといえる。

ただ、青野氏は「Ajaxを使ったドラッグ&ドロップなどは一部の人しか喜ばない」と話し、

メインユーザーの実務的な使い勝手の向上に的を絞って、Ajaxを導入していく考えを示した。


Google Calendarのスケジュール共有機能の使い方 - 『ちよろず。』

また、一つプロジェクト用のアカウントを取っておいて、

皆でスケジュールを登録し合うというような使い方も可能です。


Going My Way: Google Calendar の予定の詳細を見るには、予定の部分をダブルクリック

Gmail英語版はメールからカレンダーへスケジュールが投稿できる(再) | Google Mania - グーグルの便利な使い方


Gmailは現在1億アカウント、1日数百万ペースで増加

かつて電力に起こったのと同じことが起ころうとしています。

20世紀初頭には、企業は電力会社の副社長を雇わなければならないと考えたものですが、今は壁にプラグを差せば電気はやってきますよね。

ITも同じです。ビジネススタートするときに、なぜITプロフェッショナルの“大部隊”を雇う必要があるでしょうか。


Gmail: Google メール


Remember The Milk Remember The Milk: Online to do list and task management


remember the milkに感動


何をする道具か、というと、タスク管理らしい。


やりたいことを書いて、それを管理する道具。期日で並び替えてくれたり、Tagで絞り込めたり、優先度をつけられたり、字数無制限のメモが書き込めたり、一定期間毎にリピート出来たり、「今日が期日」のものをRSSで取得出来たり、時間毎にGoogle talkで話し掛けてくれたりする。


Remember The Milk: Online to do list and task management


Google CalendarにRemember The Milkのタスクを表示する2種類の方法を理解する - Forgot the Milk.

Going My Way: Google Calendar に Remember The Milk のタスクを表示して編集、追加などする方法


Remember The Milk: Online to do list and task management

Remember The Milk - Blog

ページの一番下の Google Calendar のボタンをクリックするだけで

Google Calendarの中に Remember The Milk のタスクリストが表示されます。


「Remember The Milk」カレンダーを追加


Remember The Milk へGmail 経由でタスクを追加するためのブックマークレット | alectrope

clmemo@aka: Google Calendar に Remember the Milk の ToDo リスト情報を読ませる

Remember The Milk - Help / FAQ / Basics / What format can I enter dates and times in?


慧眼

「ドリルを買う客はドリルが欲しいのではなく穴が欲しいのだ。」


マイクロソフト・ジョークス/先見の迷惑


「将来コンピュータの重量は、1.5トン以下になるかも知れない。」

Popular Mechanics誌、科学の果てしなき進歩を予測して、1949


「恐らく世界中のコンピュータ市場の規模は、5台だろう。」

トーマスワトソン、IBM会長、1943


「家庭にコンピュータを欲しいと思う人などいる訳がない。」

ケン・オルソン、Digital Equipmentの創設者・社長・会長、1977


「石油を掘るだって? 地面にドリルで穴を開けて、石油を探すっていうのかい? あんた頭がおかしいよ。」

エドウィンドレイクが、石油採掘プロジェクトに協力を要請したドリル業者たち


生き残る種とは、

もっとも強いものではない。

もっとも知的なものでもない。それは、

変化にもっともよく適応したものである。

ダーウィン


Amazon.co.jp: ザ・ゴール ― 企業の究極の目的とは何か: エリヤフ ゴールドラット, 三本木 亮: 本

最小の努力で最大の効果を得るには、全体最適が常に優先されるべきである。


正しい仕事は何かが正しく定義され、評価されなければ、誰も正しい仕事などするはずがない。

会社に損失を与えてきたのは、人間が正しい仕事を行わない「仕組み」をつくりあげた会社組織そのものである。

ゴールドラット博士


サイボウズ・ラボ


KFS(Key Factors for Success)

Amazon.co.jp: 企業参謀―戦略的思考とはなにか: 大前 研一: 本

「物事には、その結果に影響を与える主要因というのがかならずいくつか存在する。

これらをうまく管理あるいは応用すれば戦略が成功する」


「戦略思考家とは、みずからの担当する職務(役職、業種、業務)において、

つねにKFSがなんであるかという認識を忘れない人のことであろう。

そして、彼は全面戦争ではなく、

KFSに対する限定戦争に”挑戦的”に挑むのである。」


SaaSとソフトウェア屋さん - 37Signalsの答え « bit sized

インストーラブル・ソフトウェアを作るとすると、

多大なお金と時間をテクニカルサポートに費やし、より多くのドキュメントを作成し、開発スピードを遅らせ、

そして最終的には私達のアプリケーションカスタマーエクスペリエンス

うまくコントロールできなくなってしまうでしょう。


Webベースソフトウェアは顧客側の作業を必要とせず、たちどころにすべての顧客に対してアップデートを行うことができます。


Rauru Blog » Blog Archive » コモディティとして供給される科学者

Google にとってユーザの PC はブラウザさえ動けばよい。

Googleアクセスしさえすれば、メールもカレンダーも表計算アプリケーション

全てサーバ上で動いてブラウザ上に表示される。

ユーザが自分のPC上にアプリケーション

インストールしたりアップグレードしたりといったPC管理の必要はほとんど無くなる。


Life is beautiful: ユーザーに尋ねても必ずしも正しい答えは返ってこない

1. サイレント・マジョリティの声は聞こえてこない

 これはMicrosoftで実際にあったことだが、

Outlookのチームではユーザーから寄せられる機能追加のリクエストに従って色々な機能を足していた時期があったが、

その結果不必要な機能ばかり増えて、単純な作業が逆にやりにくくなってしまった(たとえばカスタム・フォームが良い例)。


On Off and Beyond: FlickrファウンダーCaterina Fake、Flickrの起源を語る

ユーザーは既にある機能をもっと欲しがるだけなので、新機能をどうしたらよいかをユーザーに聞くのは不毛。

それより、既に計画中の機能を複数ユーザーに投げて、どれが優先順位が高いかを聞くのがよい。


Speed Feed > Google Calendarはサイボウズにとって悪夢か追い風か? : ITmedia オルタナティブ・ブログ

正直なところサイボウズとしてはあまり気にする必要が無い。

Googleはいまだファイアウォールを越えて、企業システムには入り込んだ実績がほとんどないし、

これからもそれは彼らにとって高すぎる壁になると僕は思っている。


経営企画室 企画のもと: Google との競争をどう生き残れば良いのか

サイボウズの場合どのようなシナリオを想定するかといえば、やはり

「無料のグループウエア ASP の登場」です。

しかしこれは二つの側面から見て、サイボウズに対して直接的な影響を及ぼす可能性は低いと個人的には見ています。

Google Calendar


サイボウズ青野の3日ボウズ日記: Google Calendar

Google Calendar は、サイボウズが提供したい価値とは違うように感じました。

私たちが提供したい価値は、情報共有による知の創造であり、誰でも使える大衆化であり、チームワークの醸成です。

私たちは、私たちなりのアプローチで、世界に価値を提供していきたいと思います。


サイボウズ青野の3日ボウズ日記: イノベーション

今後、新たな破壊的イノベーションによって、私たちサイボウズが存在意義を失う恐れがあります。

私たちも、時代に合わせて変化していかなければなりません。


サイボウズ青野の3日ボウズ日記: サイボウズ Office 7 発売開始


[k] kam.iokan.de: Googleカレンダーから始まる?イントラネット2.0

サイボウズイントラネット1.0)にGoogleカレンダーウェブ2.0


一方でサイボウズからすれば、Googleの破壊的な活動の1つGoogle Apps for Your Domainの動向も気にしているはずですだったりもします。

(おそらく、サイボウズを導入している企業でGoogle Apps...に乗り換える企業は少なく、直接競合することはないんじゃないかと考えてますが)

Google Calendar


会社に必要なのは

共有フォルダ

電子メール

スケジュール機能を備えたグループウェア

あれば事足りるわけで。


大きな企業だと

掲示板や

ワークフロー

ほしくはなるけど、

社内ブログ/社内SNSはそれよりも優先度低いと思う。

何しろなくても仕事できるし、そういうものがあることで、

逆に生産性落としそうだし。

つまり、サイボウズは成功するでしょうが、


Gmailは現在1億アカウント、1日数百万ペースで増加

かつて電力に起こったのと同じことが起ころうとしています。

20世紀初頭には、企業は電力会社の副社長を雇わなければならないと考えたものですが、今は壁にプラグを差せば電気はやってきますよね。

ITも同じです。ビジネススタートするときに、なぜITプロフェッショナルの“大部隊”を雇う必要があるでしょうか。

Gmailの容量が最大250GBまで拡張可能に、実際に増やしてみた

はてなブックマーク - Google カレンダーは113台のサーバで動いている - GIGAZINE

Gmail同士でPOPアクセスする方法

Gmail同士で外部POP(Mail Fetcher)でメールを取り込む裏技

Gmail⇔Google Apps 間の移行やGmailバックアップに!

基本的にGmailも、Google Appsも同じ操作性になっているので、相互のメールの移行に便利です。この機会にGoogle Apps(有料版もあり)へメールを統合するのも良いかもしれません。

 先日Google Appsに対応した日本大学東京女子大学嘉悦大学リアルコムに入る人、

au oneメール利用者、新Livedoorメール利用者などは、自分のGmailデータをひっさげて簡単に移行できる事になります。

その逆もしかり。

 また、いざアカウントが消失した時のバックアップとして別のアカウントに溜め込むのもオススメです。

 バックアップに関しては、送信済みメールも受信されるので便利。


グーグル、日本大学にGoogle Appsを提供--50万人規模での利用も検討:ニュース - CNET Japan

Google Apps Education Editionは教育関係者向けの無償サービス


最終的には卒業生を含め約50万人へのサービス提供

無料でも可用性は低くない:ITpro

大学のOB/OGなど50万人

[N] 日本大学が「Google Apps Education Edition」採用

Gmailの時代到来? - これでも大学職員のブログ -情報センター勤務中-

魅力はなんといっても「2GB以上」の大容量です。

また、情報センターの視点で見ると大学の計画停電などに左右されないのも魅力です。そして何より無料!


両校のログイン画面を見ると、非常に似ています。

 ●日本大学Gmail  ●東京女子大学Gmail

どうやら日本大学に続いてGoogle Appsを導入する大学が現れたらしい - Clear Consideration(大学職員の教育分析)

ネットワークリプレイスに関するお知らせ(出典:嘉悦大学 2007/08/20)

●嘉悦大学Gmail

Google Apps

Google Apps Education Edition は、無料のコミュニケーション/コラボレーション ツールと

学校ドメインのメール アカウント (student@your-school.edu など) を提供


ピクサーが社内システムを「Google Apps for Your Domain」に乗り換え - GIGAZINE

ZDNet Japan Blog - 「エンタープライズ2.0」への道しるべ:Google Appsを全社導入してみる

Google Calendarに移行 - plus ultra blog

Speed Feed > Google Apps Premer Editionを迎え撃つ必要がなくなったことに安堵する。 : ITmedia オルタナティブ・ブログ

Google Apps Premer Editionが登場したことで、

Web型グループウェアおよび法人向メールサーバーの提供企業は、かなり深刻なダメージを受けることは間違いない。

MSエクスチェンジノーツのように業務システムに深く食い込むシステムであれば別だが、

多くのベンチャー中小企業にとって、グループウェアやメールシステムライトなもので十分だし、

日本版SOX法の施行が目前である以上、社内にサーバーをおいて管理する必要のないSaaSモデルはやはり都合がいい。


Gmail、カレンダーをSaaS形式で--Google Apps製品版、日本の料金は年間6300円/人に - イン - ZDNet Japan

[G] - Google Appsで家族ドメイン:Edition比較 無料 or 年額6300円/ユーザ

Standard Edition & Premier Edition


iGoogleにYahoo!も表示できる!好きなページをタブいっぱいに表示するガジェット「Your Page Here」 | Google Mania - グーグルの便利な使い方

例えば、

Googleカレンダーを表示してもいいし(iGoogle用のミニカレンダーでは物足りないですね)、

Yahooカレンダーを表示してもいいし(Google以外でもOK!)、使い道は無限大です。


Google Readerを表示

LivedoorReaderを表示


デフォルトではGoogleカレンダーが設定されています。

別のページを表示させるには、タブ右側の矢印をクリックして、「設定を編集」を選択します。

iGoogle

Personalize Your Homepage

[ぴ] ぴっくあっぷ。: 【iGoogle】 任意のページを追加するガジェット 「Your Page Here」


Google Apps グーグル アプリ

iGoogle Google Picasa 2.7

Google リーダー

Blogger: 無料でブログを作成

ブログの投稿ユーザー 1 人のユーザーがこのブログに投稿できます  投稿ユーザーを追加

ブログの閲覧ユーザー すべてのユーザー  選択したユーザーのみ  ブログの投稿者のみ

Google パック ITmedia News:Google Packに「更新無料」のセキュリティツールが追加

Google Accounts

Gmail (メール) 

Google トーク Google トーク

Google カレンダー https://www.google.com/calendar/render Google Calendar

Docs (ワープロ) & Spreadsheets (表計算) Welcome to Google Docs

Google Apps 無料

Google アプリ 企業向け

Google Apps

[G] - Google Appsで家族ドメインを運用する

[G] - Google Appsで家族ドメイン:Edition比較 無料 or 年額6300円/ユーザ

Standard Edition & Premier Edition

Google Apps for Your Domain を使ってみました! : サインアップ編 - WebOS Goodies

Google Apps for Your Domain を使ってみました! : 管理機能編 - WebOS Goodies


Google カレンダー

test カレンダー


今日から始める「Google カレンダー」特集(前編)

はてなブックマーク - 今日から始める「Google カレンダー」特集(前編)

予定をドラッグで移動できるのは偶然気づいた。びっくり。

Google Calendar

日本の祝日 アメリカの祝日


ITmedia Biz.ID:もっと便利にGoogleカレンダーを使う7つのTips

一度設定した予定はドラッグ&ドロップで移動ができる。


「11時から会議」の予定を入力する時、11時のセルをクリックしてはいないだろうか。

実はGoogleカレンダーでは適当にクリックして、簡易入力の吹き出しに「11時に会議」と入力すれば時間を自動的に調整してくれる。


オンラインサービスなのに、オフラインでも操作できる

Google Calendar


ITmedia Biz.ID:日本語化されたGoogleカレンダーを使ってみました

ログイン方法

カレンダーの入力方法

公開カレンダーの参照方法

Google Calendar


今日から始める「Google カレンダー」特集(後編)

スケジュールごと共有設定が可能。出欠確認やコメント機能も

 Google カレンダーの共有機能は大きく分けて2つある。

1つはカレンダーに登録されたスケジュールごと個別に共有する機能、

もう1つはカレンダーごと共有する機能だ。

また、共有とは少し異なるが、スケジュールの内容をインターネットやブログに公開できる機能も備えている。


ユーザーごとにカレンダーを共有する場合は、空き時間もしくは予定の詳細を閲覧させるだけでなく、

カレンダーの編集権や、さらに他のユーザーと共有する権利を与えることも可能。

1つのカレンダーに対して、複数のユーザーが同等に編集し、その結果をそれぞれのカレンダーに反映することが可能だ。

Google Calendar


Google Calendar の使い方 | グーグル・カレンダーの便利な機能や特徴を紹介します

Outlookサイボウズも窓から投げ捨てよう!

Gmailとの連携でデキルあなたを創る!

話題のAjaxインターフェースサクサク使える次世代型Webスケジューラ「Google Calendar」の使い方!!


一日の予定を指定時間にメールで送信することができる。

⇒ リマインダーとの組み合わせで予定を忘れることも皆無。


イベントに登録できるのはイベント名、日時、場所、詳細情報。さらにコメントを書いたり招待状を送ったり。

イベントの招待状をメールで送信できる。

⇒ 参加・不参加の回答は招待状のリンクをクリックするだけ(Gmail、Google Calendarユーザーでなくても可能)。招待状への回答もGoogle Calendarで確認できる。イベント主催者の強力な味方!

Google Calendar


Googleカレンダーをもっと便利に使うための13のツール&Tips | POP*POP

天気予報アイコンを表示する

GoogleカレンダーでToDoリストを管理する

ブログ上で予定を確認する

Google Calendar


ITmedia Biz.ID:Googleカレンダーのリマインダー機能を活用しよう

携帯電話で受け取るには

多様な通知機能がGoogleカレンダーの特徴の1つだが、

携帯電話向けの通知機能はデフォルトで無効になっている。

携帯電話メールアドレス向けの通知機能を有効にするには、

「国名(デフォルトで日本になっている)」「ユーザー名」「モバイルメールのドメイン」「確認コード」をそれぞれ入力する必要がある。

Google Calendar


fixture.jp/blog » Blog Archive » Googleカレンダーを携帯で見る方法:補足

カレンダーを公開にしなくても携帯から見ることができる方法を発見。


Googleカレンダーを携帯から完全コントロール!:Gmailer

個人用PIMツールとして、とても評価の高いGoogleカレンダー

直感的に操作できるユーザーフレンドリーなインターフェースの完成度は、

もはやGmailの域をも完全に超えてしまっていますね。

そのGoogleカレンダーを携帯から完璧にコントロールできるシステムを発見しましたので、ご紹介したいと思います。

Google Calendar


Googleカレンダーで見るスケジュール管理の方法 (手帳2.0)

あなたは、会社の部下と1時間のミーティングをするとしたら、いつこの予定を入れますか。


Google Calendar を便利に使う 20 の最新 Tips - オンライン快適仕事術


Docs (ワープロ) & Spreadsheets (表計算)


日報

クレーム管理


Excel(エクセル)、Word(ワード)のテンプレート

Excel(エクセル)、Word(ワード)のテンプレート集



「Google Spreadsheets」、順番待ちを避ける裏技は"共有" | ネット | マイコミジャーナル

「閲覧のみ」、「編集を許可」というように相手の権限を設定する。


グループテキストチャットをしながら共同作業を進められる。正に"リアルタイム"コラボレーションである。

このような複数ユーザーによるコラボレーションは、すでにGoogle Calendarで実現しているが、用途はスケジュール管理に限られる。


表計算ソフトならば、スケジュールはもちろん、伝言板、住所録、経費管理など、アイディア次第で様々な目的に利用できる。

Welcome to Google Docs

ToDoリストスケジュール、在庫管理、クレーム管理、日報、労務管理、勤怠管理、FAQ、経費管理、予約管理、設備予約、住所録、伝言板、アポイント調整


チャットをしながら作業ができる表計算「Spreadsheets」

「Spreadsheets」の「Formulas」画面。B12??H12のセルをマウスで選択、

画面右上の「Sum」をクリックして合計を計算しているところ

Welcome to Google Docs


表計算サービスをアポイントメントの調整に活用する : モバイルTPO検索術 第5回 - Business Mobile 

Google Docs & Spreadsheetを使って共同作業を行う

アポイント調整用の表だ。左端に取材先の名称、そして取材先や担当者の都合を書き込むスペースを用意してある。


自分の都合を表に記入していけばよい。表に変更を加えると、変更内容はすぐに反映されるようになっている。

Google Docs & Spreadsheetsの場合、一般的な表計算ソフトと同じように、セルのコピー&ペーストもできる。

マウスカーソル・キーでセルを範囲指定し、CTRL+Cキーでコピー、CTRL+Vキーでペーストだ。

調整しなければならない案件が十数件程度なら、それほど苦労せずに入力できるだろう。


また、Google Docs & Spreadsheet には簡易的なメッセージ機能も備わっている。

「Discuss」タブで文字を入力すれば、その内容が参加者全員に伝えられるので、

メールを使うよりも手っ取り早く参加者間の調整ができるのではないだろうか。


同じような作業はWikiなどを使ってもできる。

Wikiというのは、参加者がページの内容を自由に書き換えられる仕組みのこと。

複数人が無料で使え、なおかつ指定したメンバーだけが閲覧できるWikiサービスとしては、

livedoor Wikiがある(会員登録が必要)。livedoor Wikiでは、簡単な表を作る機能も備わっており、

別のページへのリンクも簡単に張ることができる。案件の内容によっては、こちらを利用するのもよいだろう。

Welcome to Google Docs

livedoor Wiki(ウィキ)- ゲーム攻略に便利な無料Wikiサービス


松井幹彦の「Officeソフト」ウォッチング » 大きなサイズのGoogle Spread

2007-03-29

最近解ってきたんだけど

断片部?のほうが面白いよおまえっていうはてなblogger結構いるねw。

素が面白いけど考えるとつまんない奴っているもんね実際。

うるるんはそれにもう一捻りあるね。マニアックだし、観察しても時間の無駄だけど、

趣味っていうのはそういうもんだろ?w

2007-01-28

Re:http://anond.hatelabo.jp/20070128060129

なるほどな。

blogの場合はブログを開設する、またはブログを書くという動詞と解釈すれば bloggerブロガー)となる訳か。

動詞名詞の両方の意味がある場合は動詞が優先するってことか。

あれ?でもオナニー動詞っぽいのに、オナニストって言うよな。

決してオナニャーと言わない気がするのは俺だけか?

2006-11-22

匿名ダイアリー開始に際して

ブログは、我が国にとどまらず、世界のWebの流れのなかで“小さな巨人”としての地位を築いてきた。古今東西の名文を、無料で手に入れやすい形で提供できるからこそ、人はブログを自分の師として、また青春の想い出として、書きついできたのである。

その源を、文化的にはSixApartのMovableTypeに求めるにせよ、規模の上でGoogleBloggerに求めるにせよ、いまブログインターネット利用者層の多様化に従って、ますますその意義を大きくしていると言ってよい。

ブログ意味するものは、激動の現代のみならず将来にわたって、大きくなることはあっても、小さくなることはないだろう。

はてな匿名ダイアリー」は、そのように多様化した対象に応え、ブックマークに耐えうるエントリを収録するのはもちろん、Web2.0を迎えるにあたって、既成の枠をこえる新鮮で強烈なアイ・オープナーたりたい。

その特異さ故に、この存在は、かつてブログがはじめてWebに登場したときと同じ戸惑いをブロガーに与えるかもしれない。

しかし、<Changing Time, Changing the Internet>時代は変わって、Webも変わる。時を重ねるなかで、精神の糧として、心の一隅を占めるものとして、次なるWebの担い手の若者たちに確かな評価を得られると信じて、ここに「はてな匿名ダイアリー」をリリースする。


元ネタ

http://d.hatena.ne.jp/kenkaian/20061113/1163411855

- 転職ならen
- 派遣ならen
2ページ中1ページ目を表示(合計:26件)