gmail_spam

こういう一言spamって何で送ってくるのかな? それにどうやって防いだらいいのかわからん…。

Programmable web勉強会ってあったらいいな。

毎回1サイトのAPIをお題にしてHackやMashupアプリを持ち寄んの。

http://plnet.jp対応サービス一覧のページと、対応サービスやたら増やしてみました。単にWebサービスの一覧としていいかなとか思いました。

ユーザの方が手動でフィードを登録してる中から登録できそうなサービスを片っ端から対応しました。かなり疲れた…。

登録しまくってみると、これはいい!というところもあれば、これはひ(r という部分もいろいろありました。 さらに増やしたいので知ってるサービスが抜けてたら教えてください。

対応できる条件は、”“(idとかじゃなくて)ユーザ名からフィードURLが推測できるもの”です。 対応っつってもdel.icio.usでいえば、”“http://del.icio.us/rss/##username##”みたいなフォーマット用文字列を手で登録してるだけです。

一個前のエントリをふまえて、http://plnet.jp のJSONP使ったwidgetをIE対応にしてみました。

<div id="widget"></div>
<script type="text/javascript" src="http://plnet.jp/scripts/Plnet/PlnetWidget.js"></script>
<script type="text/javascript">
var widget = new PlnetWidget();
widget.draw('widget', 'komagata'); // target, username
</script>

HTMLの好きな場所に↑を書く。(サンプル) 元のサーバが503出したりしてるので動かない時があるかも。

そもそも以前のエントリ含めて、「ただのブログパーツじゃん、何が嬉しいの?」って話ですが、このPlnetWidget.jsのようなもの自体を”“サードパーティ”が”“HTMLだけで(=サーバ無しで)”作れるとこが嬉しさです。

(function (modules) {
/*
  for (var i = 0; i < modules.length; i++) {
    var script = document.createElement("script");
    script.type = 'text/javascript';
    script.src = modules[i];
    document.getElementsByTagName("head")[0].appendChild(script);
  }
*/
  var script = '';
  for (var i = 0; i < modules.length; i++) {
    script += "<script type=\"text/javascript\" src=\"" + modules[i]  + "\"></script>\n";
  }
  document.write(script);
})([
  'http://plnet.jp/scripts/MochiKit/Base.js',
  'http://plnet.jp/scripts/MochiKit/Iter.js',
  'http://plnet.jp/scripts/MochiKit/DOM.js',
  'http://plnet.jp/scripts/MochiKit/Style.js',
  'http://plnet.jp/scripts/MochiKit/Signal.js',
  'http://plnet.jp/scripts/MochiKit/Async.js',
  'http://plnet.jp/scripts/MochiKit/Logging.js',
  'http://plnet.jp/scripts/AsyncJSONP.js'
]);

外部jsの読み込むタイミングが良く分かんない…。 この後に読み込んだライブラリを使うコードがあるとして、上記スクリプトでは上手くいくんですが、コメントアウトしてる方(appendChildのヤツ)だとタイミングによって読み込めてたり、読み込めてなかったり(IEで)。

MochiKit.jsでもGoogle Ajax Searchでもdocumnet.writeで読み込んでるからこっちが良いんでしょうな。でも何が違うんだろ。

Lispとかに慣れてると何でも無いのかもしれませんが、

(function (list) {
  var tmp = '';
  for (i = 0; i < list.length; i++) {
    tmp += list[i];
  }
  alert(tmp);
})(['foo','bar','baz']);

おしゃれな人のjsによく出てくるこういうの、びっくりしました。 おれもマネしよう。

Development Environment Conference

Development Environment Conference、開発者の開発環境のカンファレンスを 2006年9月8日にデジタルハリウッド大学(秋葉原ダイビル)にて開催しました。

DECon行ってきました。 やっぱりためんなって楽しかった。

  • vim小技
  • svk
  • オートリロード

とかは、すぐにでもやらなきゃ!って思いました。(あとpgrep, pkill知らなかった…。生まれなきゃよかった。) それとしつこいですが、デプロイ管理、運用系のツールが気になる!yumリポジトリ作ったり監視IRCボットとか、Plaggerリリースツールとかおしゃれだなー!(そんなことはない)

6aでは自作みたいですが、Capistrano的なのはperl, PHPにあるのかな?Catalyst、Symphonyとかにはあるのかも。あったら試してみたい。

top - 22:42:03 up 39 days,  5:58,  2 users,  <strong>load average: 100.87, 102.55, 102.72</strong>
Tasks: 616 total,  66 running, 550 sleeping,   0 stopped,   0 zombie
Cpu(s): 57.5%us, 41.3%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.8%hi,  0.3%si,  0.0%st
Mem:    451776k total,   446556k used,     5220k free,      812k buffers
Swap:  1317288k total,  1160684k used,   156604k free,    34596k cached

なんかCPUが可哀想…。

回転と脱線

UmbrelloでUML書くとjavascriptのコードにも落とせます。

javasciptでOOってどうやるの?って思ってる方は参考にしてみてはどうでしょう?

しらなかったー。 のでやってみました。

umbrello_js

/**
  * class Parser
  */
Parser = function ()
{
  this._init ();
}

/**
 * _init sets all Parser attributes to their default value. Make sure to call this
 */
Parser.prototype._init = function ()
{
  /**
   */
  this.m_handler = "";

  /**Aggregations: */

  /**Compositions: */

}

/**
 */
Parser.prototype.parse function ()
{

}

ココでいうと、『プロトタイプにメソッドを追加する。コンストラクタをプロトタイプに実装する。』タイプですな。

あれ、でも最後のParser.prototype.parse function ()とか動くのかな?

引き続きJSONP勉強。

http://plnet.jp に sourceとentriesのjsonフィードを追加してみました。

http://plnet.jp/komagata/json/entries // エントリリスト
http://plnet.jp/komagata/json/entries?raw // 生JSON
http://plnet.jp/komagata/json/entries?count=5 // 5件
http://plnet.jp/komagata/json/entries?callback=hello // JSONP

http://plnet.jp/komagata/json/sources // ソースリスト
http://plnet.jp/komagata/json/sources?raw // 生JSON
http://plnet.jp/komagata/json/sources?count=5 // 5件
http://plnet.jp/komagata/json/sources?callback=hello // JSONP

デフォルトではdel.icio.usと同じで Plnet.entries = {...} というようにしました。

サンプルとして昨日のMochiKitAsyncJSONPを使ってブログパーツ風のものを出してみました。(このラップの仕方、本末転倒かも)

Widgetサンプル (IEで動かないことに今気づきました)

&lt;h1&gt;Plnet Widget&lt;/h1&gt;
&lt;div id="widget"&gt;&lt;/div&gt;
&lt;script type="text/javascript" src="http://p0t.jp/misc/PlnetWidget/scripts/widget.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
var widget = new PlnetWidget();
widget.draw('widget', 'komagata');
&lt;/script&gt;

JSとMochiKitの理解度が低いので何作るにも手間取る…。