2008年12月25日

Outputz で自分のランキングが分かるようになりました

Outputz の日別のページに自分のランキングが表示されるようになりました。



日々のアウトプットの励みにご利用ください。

また年末は今年のふりかえりとして自分の Outputz を月単位で見てみるのも面白いかもしれません。
みなさま良いお年をお迎えください。

2008年11月21日

Outputz API の URI パラメータに svn:// などが使えるようになりました

Outputz API の URI パラメータに svn:// などが使えるようになりました。
以前は http のみを許可していましたが、他のURIも使いたいというご要望がありましたので変更しました。


許可される URI は具体的には Ruby で URI.parse(uri).host が nil ではない uri です。
ご要望いただきましたユーザー様ありがとうございました。

2008年11月20日

サイボウズ本社の2010年度新卒向け説明会

11/29のサイボウズ本社の新卒採用説明会で講演することになりました。
あわせて当日の座談会で学生さんの質問に本音で答えたりする予定です。
別日程で、社長の畑、奥(id:kazuhooku)の講演もあります。
ご興味のある方はどうぞ申し込んでみてください。

2008年11月19日

Outputz API を公開しました

Outputz にアウトプットを投稿することのできる API を公開しました。

ユーザーの皆さんから Firefox 以外でのアクティビティも Outputz に記録したいとのご要望を頂いていましたが、Outputz API を利用すれば可能になります。

API 仕様


POST 用 URI


http://outputz.com/api/post


パラメータ


  • key : 設定ページに表示されている復活の呪文(他人に知られていはいけない)

  • uri : アウトプットの URI

  • size : アウトプットの文字数

ステータス


投稿が成功した場合は HTTP ステータス 200 が返ります。


エラーの場合はエラーに応じて、400, 500 などのステータスがエラーメッセージとともに返されます。


Ruby でのサンプルコード



require 'net/http'

uri = ARGV.shift
size = ARGV.shift
key = ARGV.shift

Net::HTTP.start('outputz.com', 80) {|http|
response = http.post('/api/post', "key=#{URI.encode(key)}&uri=#{URI.encode(uri)}&size=#{URI.encode(size)}&key=#{URI.encode(key)}")
puts response.body
puts response.code
}


コマンドライン引数に uri, size, key の順で渡せば投稿する事が出来ます。


Gauche(Scheme) でのサンプルコード



(use rfc.http)
(use rfc.uri)

(define (main args)
(receive (status header body)
(http-post "outputz.com"
"/api/post"
(apply format "uri=~a&size=~d&key=~a" (map uri-encode-string (cdr args))))
(format #t "~a: ~a\n" status body)))

Subversion を利用して書いたソースコードを行数をおおざっぱに記録する


上記のスクリプト(post_outputs_by_api.rb)を利用して svn ci 直前に以下のコマンドを走らせる事で、おおざっぱなコード量を記録する事が出来ます。

ruby post_outputs_by_api.rb '適当なURI'\
`svn diff --diff-cmd /usr/bin/diff -x -EbwBu |wc -c` '復活の呪文'

利用にあたっての注意

API の利用は特に制限はありませんが、悪意のあるアクセスや過度に負荷のかかるものはアクセスを禁止する場合もあります。ご注意ください。


投稿アプリなどは、固有のユーザーエージェントを適切に設定していただけると助かります。

2008年11月13日

Outputz アドオンと Tab Mix Plus アドオンの相性問題解消など

| 16:39

Outputz アドオンを入れると、Tab Mix Plus の「検索を新しいタブで開く」が有効にならない不具合を修正しました。

またWassr での「レス」のアウトプットが Outputz で記録されない不具合も修正しました。

Firefox の 「アドオン」 - 「更新を確認」 から Outputz アドオンを更新する事で利用可能になります。


2008/11/10 - 11/16 の Outputz
原稿用紙 26.8枚(10,712文字)

powered by Outputz.

2008年11月12日

Outputz がはてなダイアリーの「その場編集機能」に対応しました

ユーザーの皆さんからご要望の多かった、はてなダイアリーの「その場編集機能」に Outputz アドオンが対応しました。


Firefox の 「アドオン」 - 「更新を確認」 から Outputz アドオンを更新する事で利用可能になります。

2008/11/12 の Outputz
原稿用紙 12.5枚(5,014文字)

powered by Outputz.

2008年11月06日

「今日のあなたのアウトプットは原稿用紙何枚?」 Outputz をリリースしました

本日 Outputz というサービスを公開しました。


Outputz は「自分がインターネットにどれくらいアウトプットしているか?」を自動的に記録し、その結果をグラフで見ることのできるサービスです。



f:id:higepon:20081106123740p:image



使い方


Outputz に行き、Firefox アドオンをインストールしてください。やることはこれだけです。あとは自動的に Outputz があなたのインターネットへのアウトプット量を記録してくれます。


アドオンをインストール後、ステータスバーに以下のようなアイコンが表示されます。クリックすると今までのアウトプットの集計を見られます。


どのサイトに多くアウトプットしているか?、どの時間帯が多いか?、アウトプットの量を文学作品で例えるとどれくらいか?など多彩な集計情報が提供されます。


背景


私たちの生活において、インターネット利用の比重は高くなってきています。Google や Yahoo で検索をし、ブログを書き、Twitterや Wassr でつぶやき、mixi で日記を書くなど。


毎日毎日キーボードを叩き、文字を入力しインターネットへ文字列を送り続けています。これらの日々のアウトプットを積み重ねてみたら、実は馬鹿にできない量なのではないか?そう思い、Outputz を作りました。


週末、月末、年末などの節目に Outputz でアウトプット量を見て日々の生活を振り返ってみると、面白い発見があるかもしれません。


ブログに貼りつけ

Outputz のグラフは、ブログに貼りつけることができます。タグをコピーしてブログに貼りつけてください。


多くのみなさんがアウトプットを公開してくだされば、その人をその人たらしめているアウトプットの傾向が分かって面白いかもしれません。


例えばアルファブロガーの方々は、どういうアウトプットをしているのか?などはとても興味がありますよね。


グラフはその時点でのアウトプットを記録したもので、自動的に更新される事はありません




自分の Outputz のデータを複数のパソコンで共有する


設定タブから「復活の呪文」機能を利用して共有する事が可能です。


英語版


Outputz は英語版もあります。ブラウザの言語設定を日本語以外にし、アクセスすると英語版になります。


もし海外にお友達がいたらぜひ紹介してみてください。インターネットへのアウトプットという概念は国を問わず理解してもらえると思います。

Outputz に送信されるデータについて


Outputz アドオンはOutputz サーバーに



  • URL

  • アウトプット文字数
  • ユーザー識別のためのID


のみを送信し記録します。それ以外の情報(たとえば入力されたテキストデータ)は送信・記録されません。


Outputz が日々の生活のはげみになったり、新しい発見を提供できればうれしいです。

2008年10月31日

Mosh 0.0.7 をリリースしました

Mosh 0.0.7 をリリースしました。

R6RS のUnicode, Bytevector, Sorting などが実装されました。

Mosh の起動速度や g++ でのコンパイル速度が大幅に向上しました。


また以前から -b オプションでサポートされていた R6RS モードがデフォルトとなり -b オプションは廃止されました。

今後 Mosh は起動時から R6RS モードとなります。


追加、変更点の詳細は以下の通りです。


ライブラリシステム


ライブラリの load path の仕組みが実装され、デフォルトでは ./lib や /usr/local/share/mosh/lib などが対象となります。


またライブラリの serialization を実験的にサポートしました。


scripts/pre-compile-r6rs.scm でライブラリの serialization が可能です。

R6RS Unicode


UTF8/UTF16/UTF32 の取り扱いや、文字列の比較、正規化、upcase など種々の Unicode 手続きが実装されました。



R6RS Bytevector


Scheme からバイト列を扱う Bytevector の手続きの多くが実装されました。

バイト列からエンディアンやサイズを指定してデータを取り出したり、格納したりといったことが可能です。


SRFI-8 と SRFI-98 のサポート


SRFI-97 で提案されているように以下のような形式で SRFI ライブラリのロードが出来るようになりました。


  mosh>(import (srfi :98))

#<unspecified>
mosh>(get-environment-variable "HOME")
"/Users/taro"

R6RS REPL

R6RS の REPL が追加されました。 mosh で起動します。


(import ...) なども利用できます。


なお現時点での制限として入力は必ず一行単位でパースされます。


スタックオーバーフロー時のスタック自動伸長


再帰などでスタックオーバーフローした場合に、ヒープが許す限りスタックが自動で伸長されるようになりました。


Fasl のサポート

Fasl (Fast loading)のサポートにより



  • 起動速度の向上

  • g++ での Mosh のコンパイルの速度向上、省メモリ


が実現されました。

Read の全面書き換え


多彩な数値表現のパースを見据えて、read が完全に書き換えられました。


以前は Gauche の read.c をベースにしていましたが、bison/re2c ベースに変更となりました。


read 速度も向上しています。


psyntax の最新化

psyntax ライブラリが最新版に置き換えられました。


ビルド時の Gauche 依存がなくなりました


リリース版ではビルド時に Gauche が不要になりました。


謝辞


今回のリリースまでに多くの方のアドバイス、不具合報告をいただきました。

みなさんありがとうございました。


不具合報告


不具合報告までお願いします。


もし面倒であれば、ここのコメント欄に書いていただくのでもかまいません。

2008年08月28日

Mosh 0.0.6 をリリースしました

Mosh 0.0.6 をリリースしました。

R6RS のエラーシステムの多くが実装され、より柔軟にエラー処理が書けるようになりました。

例えば (car 3) のようにエラーが発生しそうな場合、guard で囲むことにより

(import (rnrs))

(guard
[con
[(message-condition? con)
(display (condition-message con))]]
(car 3))

例外をキャッチすることができます。


また guard で囲まない場合はデフォルトの例外ハンドラにより以下のようなエラーが表示されます。


 Exception:
Unhandled exception

Condition components:
1. &assertion
2. &who: car

3. &message: "pair required"
4. &irritants: (3)

また本リリースでR6RSが要求する Hashtables、Conditions、Enumerations、List utilities 多くの機能が実装されました。

追加、変更点の詳細は以下の通りです。


R6RS モードの速度向上


「R6RS モード(-b オプション)」の起動が大幅に速くなりました。


R6RS Hastables


ハッシュテーブルを利用するための手続きがすべて実装されました。

使用例


(import (rnrs))

(let ([hashtable (make-eq-hashtable)])

(hashtable-set! hashtable 'red 'apple)
(display (hashtable-ref hashtable 'red)))

;; => apple

R6RS Hastables では equivalence function と hash function を自分で定義し独自のハッシュテーブルを作成することもできます。


詳細な仕様はR6RS 13.Hashtablesをご覧ください。


R6RS Records

以下のように構造体を利用することができます。


(import (rnrs))

(define-record-type (point make-point point?)
(fields (mutable x)

(immutable y)))

(let ([p (make-point 3 4)])

(display (point-x p))) ; => 3

構造体は継承をすることもできます。詳細な使い方は6.Recordsをご覧ください。

R6RS Exceptions and conditions


例外とコンディションの仕組みが実装されました。


これにより



  • 例外を発生させる

  • 発生した例外の状況(コンディション)を示す
  • 例外をキャッチしたり、そのまま実行を継続する


といったことが安全に行えるようになりました。


詳細な使い方は7.Exceptions and conditionsをご覧下さい。


細かい追加・内部的な改善など


  • VM 内部で発生したエラーを全て新しいエラーシステムに入れ替え

  • R6RS List Utilities のすべての機能を実装

  • R6RS Enumerations のすべての機能を実装

  • オープンソースで公開されている r6rs-test-suite に対応。以下のテストが通っています。

    • mutable-strings.sps

    • mutable-pairs.sps

    • contrib.sps

    • programs.sps

    • control.sps
    • hashtables.sps

    • records/procedural.sps

    • lists.sps

    • enums.sps


  • equal? が循環参照しているリストでも停止するように

  • dynamic-wind を実装

  • ライブラリプリコンパイルの速度改善

    • g++ への負荷がだいぶ減りました


  • psyntax の静的リンク

  • parameterize のサポート

  • call/cc が多値に対応してなかったバグを修正

  • apply の速度向上
  • IRIE Shinsuke さんによる READ_CHAR のパッチの取り込み

  • IRIE Shinsuke さんによる grass.scm のパッチの取り込み


謝辞


今回のリリースまでに多くの方のアドバイス、不具合報告をいただきました。

みなさんありがとうございました。


不具合報告


不具合報告までお願いします。


もし面倒であれば、ここのコメント欄に書いていただくのでもかまいません。

2008年08月07日

LL Future の「 LL で未来を発明する」に参加します

8/30 のLL Futureにて「LL で未来を発明する」セッションにて話します。

私以外のメンバーが


  • Larry Wallさん => Perl の生みの親

  • まつもとゆきひろさん(ネットワーク応用通信研究所) => Ruby の生みの親

  • 住井 英二郎さん => MinCaml コンパイラを書かれた住井先生

と豪華すぎて緊張しますが、言語処理系を作るという立場から面白い話ができればと思っています。