※タイトル及び写真は本文と全く関係ありません。
お久しぶりです。なんやかやあって更新できませんでした。
更新できなかったのは怠けてたとか用事があったからなのですが、ブログのリニューアルを図ったからでもあります。
どうせだから スマートフォンオプション を導入してカコイイサイトにしようとしたら泥沼にはまってしまい、今の今まで時間がたってしまいました。経過についてはそのうちまとめます。
では、ぼちぼち更新していきます。
※タイトル及び写真は本文と全く関係ありません。
お久しぶりです。なんやかやあって更新できませんでした。
更新できなかったのは怠けてたとか用事があったからなのですが、ブログのリニューアルを図ったからでもあります。
どうせだから スマートフォンオプション を導入してカコイイサイトにしようとしたら泥沼にはまってしまい、今の今まで時間がたってしまいました。経過についてはそのうちまとめます。
では、ぼちぼち更新していきます。
ホストに割り当てられたグローバル IP アドレスの変更を検知し、Dyn.com に変更を適用するスクリプトを書いた。
公式に似た機能のスクリプト ddclient がすでにあるのだがそれを車輪の再発明。MooseX::Daemonize
を使ってデーモンにしてみた。
delphinus35/dynupdate – GitHub
https://github.com/delphinus35/dynupdate
# 単純な例 $ dynupdate -u testuser -p testpass -n test.remora.cx restart # 更新間隔と IP アドレス取得 URL を指定 $ dynupdate -u testuser -p testpass -n test.remora.cx -i 3600 -e http://detect.example.com/ restart
MooseX::Daemonize
を使ったデーモンの作り方はいつかまとめよう。
Last.FM から再生履歴を取得して表示するツールです。このページの左のツールバーで動いています。本家にインスパイアして作成したのですが、次の点で拡張しています。
そしてついでに github デビュー。
delphinus35/lastfm – GitHub
https://github.com/delphinus35/lastfm
設置方法などは README.md
と付属の sample.html
に書いているのでそちらを見てください。
Last.FM の API Key の取り方など、細かいことは前回の記事参照。でもまあ、特別なことしない限り付属の API Key をそのまま使って問題ないっぽいです。
ホントは何ヶ月も前にできてたんだけど、ドキュメント書いたりするのが面倒でほったらかしてました。何とか今年中に公開できて良かった。
では、良いお年を!
今更ながら、Prototype.js でクラスの継承とオーバーライドをやってみた記録。
しばらく使ってなかったら、$super()
という便利なものができていた。
// 基底クラス var Parent = Class.create({ // コンストラクタ initialize: function() { // <p> 要素を生成して <body> に挿入 this.ele = new Element('p'); $$('body')[0].insert(this.ele); } // “word”を画面に表示 ,say: function(word) { this.ele.update(word); } }); // Parent を継承したクラス var Child = Class.create(Parent, { // コンストラクタ initialize: function($super) { // Parent のコンストラクタを実行 $super(); } // Parent の say() をオーバーライドする ,say: function($super, word, word2) { $super(word); // “word, word2”という文字列を画面に表示 this.ele.update(this.ele.innerHTML + ', ' + word2); } }); var c = new Child; c.say('One', 'Two'); // -> 画面上に 'One, Two' と表示される。
メソッドを定義するとき第一引数に $super
を与えると、親クラスの同名のメソッドへの参照が与えられる。これを使ってメソッドのオーバーライドが簡単にできるのだ。
第二引数以降は親クラスから順に与えられる。これを使って引数の数すら変えることができる。上の例で言えば、Parent
クラスの say()
メソッドは引数を一つ採るが、Child
クラスの say()
メソッドは二つ採る。
とある Web アプリケーションを作っていたときのこと、Firefox ではまともに動くのに、IE ではバージョンを問わず機能しないことがあった。調べてみると、(珍しいことに)IE の方が仕様に則った正しい動作をしていたためであった。
最初に結論を言うと、毎回違う結果が欲しいのなら、$.getJSON()
よりも $.post()
を使えって話。
GET メソッドによるサーバーアクセスはブラウザにキャッシュされる。同じパラメータでのアクセスを繰り返そうとしても、ブラウザによっては、ローカルキャッシュを返すことでサーバーへのアクセスを行わない。これは GET メソッドの冪等性を考えれば自明のことだ。
冪等性は、大雑把に言って、ある操作を1回行っても複数回行っても結果が同じであることをいう概念である。
(中略)
HTTP の GET 要求は冪等とみなされる。Webの機構は基本的にその前提で要求結果をキャッシュに保持する。HTTP の POST 要求(フォーム送信に使われる)は冪等とはみなされないため、POST 要求はキャッシュされない。
自前のDropboxを実現する1ファイルのシェルスクリプト「vbox」 – MOONGIFT|オープンソース・ソフトウェア紹介を軸としたITエンジニア、Webデザイナー向けブログ
http://www.moongift.jp/2011/08/20110802-2/
早速使ってみたよ。以下の構成で試してみた。
機種(OS) | ホスト名 | |
---|---|---|
サーバー | Mac mini | remora.cx |
クライアント 1 | Macbook Air | remora-air2 |
クライアント 2 | ホスト 1 上の Windows XP | remora-air-win |
小ネタ。はてなブックマーク拡張が Firefox 4.0 に対応した。これは拡張は以前から隠し機能(?)として Vimperator に対応している。
「はてなブックマークFirefox拡張」をFirefox 4.0に対応しました – はてなブックマーク日記 – 機能変更、お知らせなど
http://hatena.g.hatena.ne.jp/hatenabookmark/20110325/1301020900Vimperator ではてなブックマーク拡張を使う – GitHub
https://github.com/hatena/hatena-bookmark-xul/wiki/Vimperator-%E3%81%A7%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%96%E3%83%83%E3%82%AF%E3%83%9E%E3%83%BC%E3%82%AF%E6%8B%A1%E5%BC%B5%E3%82%92%E4%BD%BF%E3%81%86
で、試しに Pentadactyl でやってみると簡単に有効になった。
javascript <<JS if ( typeof hBookmark != 'undefined' ) dactyl.loadScript( 'chrome:hatenabookmark/content/vimperator/plugin/hatenabookmark.js' ,{__proto__: this} ); JS
“liberator
”を“dactyl
”に置換しただけである。
ただ、c / C マッピングは問題ないものの、:hb / :hbt
時に補完リストが現れなかったりする。なんでなんだろ?