2007年11月アーカイブ

Tweditor (つえでたー)
http://tweditor.11op.net/

Tweditor とは

Tweditor(つえでたー)はTwitterのまとめサイトを「手動」で作成するためのサービスです。 まとめページを作成するために、勝手に 「Twitter 検索」を利用しています。

誰かが作ったまとめページを閲覧することもできます。

相当な見切り発車なのでものすごく使いにくいです。

できること、できないこと

誰でも以下のことができます。
  • まとめページの作成
  • まとめページの閲覧

今のところ、以下のことはできません。


  • まとめページの削除

  • 自分の作ったまとめページの修正

  • 検索結果10ページを超えるページの作成(固まる)


まとめページの作り方


誰でもまとめページを作ることができます。
まとめページは Twitter 検索の結果を並べ替えたり、必要ない post を削除したりすることで作成します。

  1. メニューの「ページ作成」でまとめページ作成画面へ
  2. 検索式を入力してTwitter 検索の結果を表示する
  3. 結果を並べ替えたり、削除したりしてまとめページを作成する
  4. タイトル、作成者、コメントを入力し、「save」ボタンを押して保存する
  5. セッション有効期限内であれば、「save」ボタンで上書き保存できます。(セッションの有効期限が切れると上書き保存できなくなります)

誰でもページ作成できる件

会員制にするべきかどうか、現時点でも決めかねています。 とりあえず、オープンな状態で様子を見ようと思っています。


今後の展望とか、TODOとか



  • ページ作成画面をもっと使いやすくしたい

  • 検索結果ページ10ページ前後で使い物にならないくらい重くなるので、修正したい

  • OpenID 使った会員制にして、せめて自分の作ったページの修正・削除ができるようにするのはアリかも

  • で、guest ユーザには制限をかけるとか

  • Twitter 大喜利のまとめを作りたい

  • モテたい

開発動機

Twitter 始めてみて、1ヶ月くらいたったけど、いまだに Favorites 機能をどう使ったらよいのかがわからない。 いや、気に入った(気になった)発言を Favorites に入れたらよいんだろうけど、 Twitter のおもしろさって発言の流れの中にあるんじゃないかと思うのだ。(というか、思ってた。favotterすごいおもしろいし。) だったら、発言の流れそのものを切り取ることができたらおもしろいんじゃないかと思ったのが表向きの動機。


単に、Twitter 大喜利のまとめが読みたかったの。


twitter API を使った簡易認証

[観] Twitter API 仕様書 (勝手に日本語訳シリーズ)を参考に、twitter API を使った簡易ログインを作ってみた。

これを使うと、twitter アカウント情報を求めることなく、
twitter アカウント情報を取得できる。


JSONP の処理には jsr_class.js を使った。



var req = 'http://twitter.com/statuses/friends_timeline.json?callback=login';
var bObj = new JSONscriptRequest(req);
bObj.buildScriptTag();
bObj.addScriptTag();

function login(jsonData) {
var req = 'http://twitter.com/statuses/user_timeline.json?callback=getUser';
var bObj = new JSONscriptRequest(req);
bObj.buildScriptTag();
bObj.addScriptTag();
}
function getUser(jsonData) {
var user = jsonData[0].user;
var text = user.name + "さん、こんにちは。"
document.getElementById('result').innerHTML = text;
}


実行サンプル

わざわざ API を2回呼び出してる理由は後述。


このブラウザで twitter にログイン済みだとそのままユーザ名が表示され、
未ログインの場合はtwitter アカウントによる BASIC認証を求められる。
user_timeline を読みに行ってるので、自分の post が1回もないユーザではちゃんと動作しないはず。

このままではちゃんとした認証には使えないと思う。
twitter クローンを作ったけど、自分のサイトで twitter のパスワードの入力を求めるのはちょっとなあ。
って時には使えるかもしれない。
それ以外に用途が思い浮かばない。


あと、同意を求めた上でやらないと倫理的に問題がある気がする。

twitter API を使ったこっそり認証

これは認証ですらない。

上記のサンプルで API を2回呼び出してるのには理由がある。

user_timeline の API はなぜか BASIC 認証を求めてくれないのだ。(2007.11.21 時点)
twitter に未ログインの状態で以下 URL を開くと、
http://twitter.com/statuses/user_timeline.xml

こんな状態になる。


-
Authentication required to request your own timeline.
/statuses/user_timeline.xml

これを利用したこっそり認証のサンプル

結果的には簡易認証と変わらないんだけど、
こっちだと、twitter にログインしてる人のアカウント情報を
twitter に未ログインの場合でも、何やってるか悟られることなく(なくはないけど、わかりにくく)取得することができる。


これはキモイ。
どちらの方法にせよ、 twiiter に関係のないサイトで twitter のアカウント情報を取得できちゃうわけで、
これは考えれば考えるほどキモイ気がする。

表題は K Combinator で書かれています。
1日遅れですが Kansan.JS の感想を。
まず、主催者の Kanasan さん, ujihisa さん、お疲れ様でした。

ID にさん を含む人に敬称を付けるとおもしろいなあと思った。

関西だけであれだけすごい人がいるのかと思うと
眩暈がして吐き気がしてしばらくくらくらしてた。


昨日はここまで書いて力尽きた。ここで終わるのはあんまりなので、
漸く落ち着いてきたところで、メモと記憶を頼りに Kanasan.JS の復習、感想など。



  • 遠足は家に帰るまでが遠足、勉強会は家に帰ってブログに感想書くまでが勉強会!

  • ビルトインオブジェクトとブラウザ固有のオブジェクトがある(後者は window, navigator)

  • prototype.js は Ruby にかなり影響されてるらしい

    勉強会にも、Ruby をやってる人がたくさんいた。


  • 暗黙の型変換

    「!!」は暗黙の型変換を利用した boolean 値への変換である


  • K Combinator, I Combinator, Y Combinator



    • Prototype.K の K は K Combinator の Kらしい。

    • K Combinator は K(a)(b) = a となるもの。

    • I Combinator は I(a) = a となるもの。

    • Y Combinator は正直よくわかりません。


    以上、こちらを参考にした。
    http://openlab.jp/skk/SKK.html
    ところで、Prototype.K はこう定義されてる。

    function(x) { return x }

    あれ?でも K Combinator は K(a)(b) = a となるものだから
    K Combinator は例えばこうなるんじゃないのか。


    K = function(a){
    return function(b){return a}
    }

    Prototype.K はむしろ I Combinator では?
    表題のように、難しい話は俺 K Combinator で単語だけ書きとめてスルーしたので、この辺覚えてない。「むしろ ID だ」っていう話も出てきてたはず。


    combinator の定義はこういうことらしい。コピペ。
    http://www.loveruby.net/ja/misc/ycombinator.html


    ちなみにコンビネータっていうのはプログラム意味論の用語。手続き名も含む「変数」がすべて束縛変数である (引数になっている) λ式のこと。そういうλ式はまわりの環境に依らずに同じ動作ができる……つまり完全に自分自身の意味が固定されている。

    ここは Y Combinator を理解できるまで要復習。



  • lexical scope と dynamic scope があって、javascript は lexical scope である。


    static scope という言い方もするみたい。
    内容は以前にクロージャって何だろうと思った時に理解した部分。
    呼び方は覚えてなかった。最近、単語を全く覚えられない。

    dybamic scope は debug 大変、LISP はそうらしい。


  • prototype と __proto__ の違い


    ActionScript のドキュメントがわかりやすかった。
    http://livedocs.adobe.com/flash/8_jp/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00002584.html

    オブジェクトの作成に使用された、クラスの prototype プロパティ (ActionScript 2.0) またはコンストラクタ関数 (ActionScript 1.0) を参照します。
    ここは後でもちょっと復習する。

  • arguments.callee の読み方は「コーリー」(今まで自分の中でカリーって読んでた)

    こういうの使ってるとプロっぽい。って言ってる時点でアウトか。

  • for ループで出てこないのは dontEnums 属性が設定されてる property で、これは中の人にしかさわれない

    dontEnums 属性の付いてるものは結構一杯あるぽい。 http://d.hatena.ne.jp/brazil/20060521/1148223479

  • for in ループの時、int とか boolean は代入だけど Object は参照らしい。
  • ブラウザによって event Object の取得方法が異なるので、bindAsEventListener がある

    そういえば、自分は prototype.js の bind の実装を見て始めて apply, call を理解した。 それまで this 参照がどこ行くのかよくわからなかった。

まとめ

勉強会はものすごい刺激になった。 自分一人だと絶対に適当なところでスルーしてしまうようなことに対して、 言語仕様や他の言語の知見を元に理解している、しようとしている姿勢には衝撃を受けた。 わからない部分、ちょっとむず痒い部分を誰かが挙げると、 それに対してかなり深い部分から考察が入るので、 その場で理解できなかったことまで含めて、相当の勉強になった。

他の人のレベルがすごすぎて比喩的表現ではなくて、帰途以降吐きそうだ。

今後の自分の方向性を見失いかけてるけど、まあ楽しいと思える範囲でぼちぼちやって行ったらいいや。
SE 方向にズレるとか、なんか会議でおもしろいことを言う人とかの方向性に逃げるのはまだ早い。それも大事なことだけど。もうちょっとプログラマとしてがんばろうと思う。吐かない程度に。