Error: I'm afraid this is the first I've heard of a "atom" flavoured Blosxom. Try dropping the "/+atom" bit from the end of the URL.
iTunesのグリッドビューっぽいUIを作るjQueryプラグイン #2
かっこわるかったので書き直しました。IEでだいぶ高速化! テストも書きました。
Remedieでも使われてます。わーい\(^o^)/。ぱたぱた。
変更点:
テスト書くのが楽しい。jQueryのプラグインなのでQUnit使ってみたけど、JSSpecの方が好きです。
Flickrの撮影ステータスに35mm相当の焦点距離を追加するGreasemonkeyスクリプト
Flickrの写真のメタデータページには焦点距離(Focal Length)がExifデータそのままのものしか表示されません。例: Flickr: More detail about 猫背
8.4mm!! デジカメは機種によってセンサーの大きさが違うので、この写真どうやって撮ってるんだろう?と疑問に思ってデータを見ても全然分かりません。はやくなんとかしないと・・。ということでカメラ毎に35mm換算して表示するGreasemonkeyです。
入れるとこんな表示:
GRはテレコン装着するとExifデータも反映される!
機種ごとに違う画角の倍率データはwedataを使ってデータベース化しています。まだまだデータが少ないので、自分の持っているカメラが対応していない時など追加してもらえるとうれしいです。wedataはアカウントを作れば誰でも追加、編集出来ます。
ぐぐる。
カメラで調べる。例えば自分のカメラのワイド端が35mm換算で何mmなのかを知っていれば、レンズの表記(「f =5.1mm」など)や撮った写真のExifデータから計算出来ます。GX200だと
ワイド端24mm/実際の5.1mm = 4.705882352941177
のような感じ。
GM_*が削除されたので何もしませんGM_xhrの代わりにJSONPを使いましたSHUFFLE! 5巻を2冊買わない為のGM #3
久々にいじりました。歴史的な経緯でタイトルがおかしいですが、要はAmazonのカートから同じアイテムを複数注文しようとすると警告を出すGMです。
変更点は
GM_*のないGreaseKitでも動くようにしたカートのアイテムが多くて1ページに収まらなくなると2ページ目以降がチェックされない問題があります。
Amazonでは数の変更は更新ボタンを押さないと反映されません。入力を変更した時点で警告を非表示にするのはUI的によくないかもなー。なおした。
iTunesのグリッドビューっぽいUIを作るjQueryプラグイン

iTunes、iPhoto、Aperture辺りのこれ。
サンプル。画像の上を左右にマウス移動させるとぱたぱたと画像とリンクが変わります。棚からレコードを選ぶような行為がメタファーなのかな。個人的には好きなUIです。
使おうと思って作ったのになかなか余裕が無いですね! githubに置いてみました。pushを忘れる。
#Amazonの商品ページにアフィリエイト用のHTMLを表示するGM #4
久々に使おうとしたら動かなかったので直しました。
GreaseKit 1.5を常用するようになってGM_xmlhttpRequestが使えなくなったのでJSONPに変更したり、AmazonがjQuery使い始めてた(noConfrictが使われているので$()ではなくjQuery()でアクセスします)のでコード短くしたり。jQueryはGM作りがだいぶ楽になりますね。
Fx3ではPermission denied to call method Location.toString
エラーが出て使えないかも。誰か直すといいお^^
Pipes でニコニコポップアップ
Pipes に Fetch Page 機能が追加されてたことに気付いたので ニコニコの HTML を JSONP 化してステータスをポップアップ表示させる JS 書いてみました。
Amazon のやつを使い回し。Pipes 何でも出来るなぁ。ページ紹介用の HTML を作るブックマークレットは coderepos にあります。
#Amazon のアイテムページにコピペ用のアフィリエイトタグを追加する GM #3
久々に買ったもの紹介しようと思ったら以前のコードが動かなかったので最近の環境に合わせて書き直し。時の流れにより GreaseKit (名前も Creammonkey から変更)でも GM_xmlhttpRequest使えるようになってたり、Pipes がかわいくなってたりしたのを反映しました。
AWSAccessKeyIdとAssociateTag、あとはテンプレートをいじって。まあ個人用ですが。GM と Pipes の JSON は相性良すぎて作るのが楽しいです。
コミットミスしまくるので svk 止めました。svn はまだ安心して使える。GM ばかり書いてないで、みんなに付いていきたいな。このところずっと中途半端な感覚。
GreaseKit 1.3 はかなり出来がいいと思います。Mac で Safari の人は入れてみるといいよ。
#新生銀行を使いやすくする Greasemonkey スクリプト
公開自体は少し前にしてたんだけど…。勝手にフィードバック:新生銀行を見てそれ GM で出来るんじゃねと思って作りました。
user script: shinseiwand.user.js
をします。暗証番号とパスワード以外の入力をスキップ。スクリプトのidに口座番号、tableにセキュリティカードの項目を埋めて使う感じ。ログイン前後の手間を入れると10秒とまではいかないけど、かなり短縮出来ました。
どうぞ自己責任でご利用ください。
いろいろめどそうだと思ったけど結構すぐ書けた。怒られるのがこわい。
#とらのあなのカートに商品のリンクを追加する Greasemonkey スクリプト 0.2
Gmail の IMAP がやっときたーってことで、久々にとらのあなからの新着メール見て買い物(ぉ。昔作った GM が便利だよ俺。ついでにメンテしました。最近は画像が充実してるみたいなので、直接カートに画像表示させることに。
画像クリックでページに飛びます。Greasemonkey と GreaseKit で確認しました。
そしてまた coderepos コミットログミスった。
#IM に LDR のフィードステータスを定期的に通知してみる
type さんの im.kayac.com、あとでと思いつつなかなか手を付けられてなかったのですが、本人が記事書いてたのを機に試してみました。寝る時間がガリガリ削れる・・。
とりあえず LDR からこのサイトのフィード情報取って来て表示させる通知スクリプト。
ldr_notifier.rb:
#!/usr/bin/env ruby
require 'rubygems'
require 'hpricot'
require 'json'
require 'net/http'
require 'digest/sha1'
feed_uri = 'http://feeds.feedburner.com/carbonfairy/note'
im_username = 'yoko'
im_key = ''
Net::HTTP.start('reader.livedoor.com', 80) do |http|
r = http.get("/about/#{feed_uri}")
doc = Hpricot(r.body)
subs = (doc/'#subscribers-count').inner_html
rate = (doc/'#avg-rate').inner_html
message = "Feed status: #{subs} users, #{rate} avg."
sig = Digest::SHA1.hexdigest("#{message}#{im_key}")
Net::HTTP.start('im.kayac.com', 80) do |http|
print "sending \"#{message}\"... "
r = http.post("/api/post/#{im_username}", "message=#{message}&sig=#{sig}")
data = JSON.parse(r.body)
puts data['error'].empty? ? data['result'] : data['error']
end
end
IM:
Feed status: 290 users, 3.58 avg.
kan tan。サーバで回しておけば remember the milk みたいなリマインダになったり。一方通行の情報はまとめてもいいかもと思った。ボットボット。GTalk に送れば Gmail からログも取れる。im.kayac.com は名前考えるのがめんどくさかった説w。
はてなグラフ作成用のスクリプトにも追加してみる。実績の伸びなさに涙目。アイマス全実績解除無理だろ・・常考。モテメン P が900ポイントすごい! むきむき。
同じことをやる Dashboard ウィジェット昔作ったのを思い出した。LDR 擬人化絵に挫折して放置中・・。
SHUFFLE! 5巻を2冊買わない為の GM #2
今まで作ったユーザスクリプトの中で一番のお気に入りは SHUFFLE! 5巻を2冊買わない為の GM 。タイトルがアレなせいか(SHUFFLE! 5巻に限らず既に買ったものには警告を表示しますw)いまいちブクマされてないけど便利だから使うといいですよ!! これで安心と思っていたのですが、なぜか手元にいもうと温泉!が2冊ある事実。どうやら注文前に2回カートに入れてそのまま気付かず注文してしまったみたいです。罠だ。涙目で GM 書いた。
カート画面で数量が2点以上になっていると数量欄を赤で囲んで警告します。今回から Creammonkey では Safari 3 Beta + Creammonkey 1.1 でないと動かないようになってますのでご注意下さい。
今回既に本棚に同じのあった!よりも2冊一度に届く方がショックが大きいことに気付いた。目を逸らすことの出来ない現実、的な。最初 Amazon が間違えたのかと思ったよ・・。
ちょうど Twitter で温泉オフの話題が出てて超タイムリーとか思いました。皆さんもぜひ2冊買って下さい。
#今ログインしている Twitter アカウントを表示する Greasemonkey スクリプト 現在のTwitterでも動くように作り直しました。 コードはGitHubに移しました。
複数アカウント持ってると誤爆 Follow が酷いので><。 右上メニューの「Sign out」からアカウント切り替えしないとおかしなことになります。リニューアル前はページから簡単に取れたのに。。
福赤つかい分けてる人いるんだ。
使ってるのは1つですが Twitter ツール用のアカをいくつか持ってるので!
最近 CodeRepos のコミット権もらったのでそっちに上げることにしました。間違ってコミットログに「Nice boat.」って書いて送っちゃったりとろくなことをしない。
#各ユーザスクリプトツールの window、unsafeWindow
毎回忘れるのでまとめてみました。
window.test = 'foo';
unsafeWindow.test = 'bar';
の順で指定した際のコンソールの値です。
| window.test | unsafeWindow.test | note | |
|---|---|---|---|
| Greasemonkey 0.7.20070607.0 (Fx 2.0.0.7) | foo | bar | 値は別々に保持される |
| Creammoney 1.0 (Safari 3.0.3 (522.12.1)) | bar | bar | window = unsafeWindow |
| fub test IE 7/WinXP | undefined (宣言時にエラー) | bar | window は読み込み専用(変数を宣言した場合も window に属さない) |
| Opera 9.5 Alpha 4404 | foo | undefined (宣言時にエラー) | unsafeWindow がない |
全部違うww。最近統一されてきたと思ったけど unsafeWindow に関しては
var w = typeof unsafeWindow != 'undefined' ? unsafeWindow : window;
がまだ必要なようです。
#Creammonkey 版どこでもスター greasemonkey (の紹介)
for fub でおk^^。マージしてもらった。と言ってもGM_registerMenuCommand判定付けてもらっただけ。キャッシュの削除は ~/Library/Application Support/Creammonkey/values.plist を直接いじる感じで。
Safari 3 beta でもObject.toSource()が使えないことを知った。GM_getValue() / GM_setValue()は何でも出し入れ出来たら便利なのに。
ソース見てたら script 要素に load イベント登録しててへーと思った。これは Safari でも動く模様。
それにしても Safari はデバッグしにくすぎる。
#ゲイツポイントを円換算する chokan プラグイン
スク水が1,776円なのが分かったりします。
yksk: 1200gp --twittan: 1,200ゲイツポイント = 1,776円
gates_point.rb
require 'chokan/plugin_base'
class GatesPoint < Chokan::PluginBase
def initialize(config, chokan)
super
@suffix = @config['suffix'] || 'gp'
end
def on_privmsg(prefix, channel, message)
case message
when /^(\d+)#{@suffix}$/i
notice(channel, exchange(Regexp.last_match[1]))
end
end
private
def exchange(gp)
yen = gp.to_i * 1.48
"#{format(gp)}ゲイツポイント = #{format(yen)}円"
end
def format(i)
i.to_s.gsub(/(\d)(?=(\d{3})+(?!\d))/, '\1,').sub(/\.0+$/, '')
end
end
svn 置きたい。
#