今年はtako3の重さを改善したいと思います。
平成24年。
すた丼うまい
ハートキャッチ
プリキュア
aaaaaaaaaaaaaaaaaaaaaa
Autotools | No Starch Press
http://nostarch.com/autotools.htm →pageinfo
autotools とか libtool とかよく分からないのでとりあえずサンプル弄るのが楽だった。
Content Scripts - Google Chrome Extensions - Google Code
http://code.google.com/chrome/extensions/content_scripts.html →pageinfo
content scriptからクロスサイトなXHRするプロトタイプ - 心魅 〜 cocoromi 〜
http://d.hatena.ne.jp/umezo/20091114/1258193365 →pageinfo
Google Chrome の content script で、UnsafeWindow 的な空間でコードを実行 - って、なんでですか0 - subtech
http://subtech.g.hatena.ne.jp/secondlife/20091228/1262001989 →pageinfo
とか見て Chrome 対応を。
Tako Info for All Pages for Greasemonkey
http://userscripts.org/scripts/show/12712 →pageinfo
Tako Info for All Links for Greasemonkey
http://userscripts.org/scripts/show/14409 →pageinfo
平成23年。
Octobot | High Throughput Distributed Task Queue Worker
http://octobot.taco.cat/ →pageinfo
RabbitMQ とか使えるタスクワーカ、タコだし、動かしてみようと。
cd
git clone http://github.com/cscotta/Octobot.git
したら、
cd Octobot/
ant jar
で、octobot.jar 作って、
http://octobot.taco.cat/docs/octodocs-v03.pdf →pageinfo
PDF 見ながらタスク作る。
mkdir -p com/example/tasks
vi com/example/tasks/TacoTask.java
で、JSON 見たいので、
package com.example.tasks;
import org.apache.log4j.Logger;
import org.json.simple.JSONObject;
public class TacoTask {
private static Logger logger = Logger.getLogger("TacoTask");
public static void run(JSONObject task) {
//String payload = (String) task.get("payload");
//logger.info("OMG, GOT A TACO: " + payload);
logger.info("OMG, GOT A TACO: " + task.toString());
}
}
ちょっと変えて、
javac -cp jar/octobot.jar com/example/tasks/TacoTask.java
jar cf tasks.jar com
コンパイルすれば tasks.jar が出来るので、あと
vi example-config.yml
example-config.yml の
Octobot:
queues:
- { name: tacotruck,
protocol: AMQP,
host: localhost,
port: 5672,
vhost: /,
priority: 5,
workers: 1,
#username: cilantro,
#password: burrito
username: guest,
password: guest
}
metrics_port: 1228
email_enabled: false
email_from: ohai@example.com
email_to: ohno@itsbroke.com
email_hostname: localhost
email_server: smtp.gmail.com
email_port: 465
email_ssl: true
email_auth: true
email_username: username
email_password: password
# startup_hook: org.example.taquito.StartupHook
# shutdown_hook: org.example.taquito.ShutdownHook
ユーザとパスを guest に。
で、RabbitMQ にタスクキュー入れようとしたんだけど、
jsonrpc-channel で上手く publish できなかったので、rabbithub で。
cd
hg clone http://hg.rabbitmq.com/rabbitmq-public-umbrella
make checkout
make
git clone http://github.com/tonyg/rabbithub.git
make -C rabbithub all
でビルドしたら、
sudo cp rabbithub/dist/rabbithub.ez /usr/lib/rabbitmq/lib/rabbitmq_server-2.1.0/plugins/
だけコピーすれば、他の amqp_client mochiweb rabbitmq-mochiweb は jsonrpc のが有るので
sudo /etc/init.d/rabbitmq-server restart
で動く。で、
cd
cd Octobot/
./octobot
octobot 動かして、
curl -v -d'{"task":"com.example.tasks.TacoTask","args":"hogehogehoge"}' http://localhost:8080/rabbithub/endpoint/q/tacotruck
rabbithub からキュー入れたら、
Launching Octobot...
Options specified: -server -DconfigFile=/home/horaguchi/Octobot/example-config.yml -Dlog4j.configuration=/home/horaguchi/Octobot/log4j.properties
0 [main] WARN Settings - Warning - unable to load Octobot / startup_hook from configuration file.
1 [main] WARN Settings - Warning - unable to load Octobot / shutdown_hook from configuration file.
2 [main] INFO Octobot - Launching Introspector...
5 [main] INFO Octobot - Launching Workers...
10 [Introspector] INFO Introspector - Introspector launched on port: 1228
11 [main] INFO Octobot - Attempting to connect to AMQP queue: tacotruck with priority 5/10 (Worker 1/1).
12 [main] INFO Octobot - Octobot ready to rock!
12 [Worker] INFO Queue Consumer - Opening connection to AMQP / tacotruck...
12 [Worker] DEBUG Queue Consumer - Attempt #1
129 [Worker] INFO Queue Consumer - Connected to RabbitMQ
13171 [Worker] INFO TacoTask - OMG, GOT A TACO: {"args":"hogehogehoge","task":"com.example.tasks.TacoTask"}
動いた。
octobot 2 つとか動かしてても、どっちかだけ実行するっぽい。
JSONRPCError - Internal error: badmatch - rabbitmq-discuss | Google グループ
http://groups.google.com/group/rabbitmq-discuss/browse_frm/thread/4b99da544f1f839b →pageinfo
tonyg's rabbithub at master - GitHub
http://github.com/tonyg/rabbithub →pageinfo
RabbitMQ 2.1.0 が出たので Upgrade した。
http://lists.rabbitmq.com/pipermail/rabbitmq-announce/attachments/20100915/ee935f85/attachment.txt →pageinfo
/etc/apt/sources.list に
deb http://www.rabbitmq.com/debian/ testing main
を追加しておいたので、
sudo apt-get update
sudo apt-get upgrade
と簡単だった。
RabbitMQ ≫ Blog Archive ≫ Management plugin - preview release - Messaging that just works
http://www.rabbitmq.com/blog/2010/09/07/management-plugin-preview-release/ →pageinfo
ついでに rabbitmq-management も入れてみた。
RabbitMQ - Plugins
http://www.rabbitmq.com/plugins.html →pageinfo
cd /usr/lib/rabbitmq/lib/rabbitmq_server-2.1.0/plugins/
# rabbitmq-jsonrpc-channel
sudo wget http://www.rabbitmq.com/releases/plugins/v2.1.0/mochiweb-2.1.0.ez
sudo wget http://www.rabbitmq.com/releases/plugins/v2.1.0/rfc4627_jsonrpc-2.1.0.ez
sudo wget http://www.rabbitmq.com/releases/plugins/v2.1.0/rabbitmq-mochiweb-2.1.0.ez
sudo wget http://www.rabbitmq.com/releases/plugins/v2.1.0/rabbitmq-jsonrpc-2.1.0.ez
sudo wget http://www.rabbitmq.com/releases/plugins/v2.1.0/rabbitmq-jsonrpc-channel-2.1.0.ez
# rabbitmq-management
#sudo wget http://www.rabbitmq.com/releases/plugins/v2.1.0/mochiweb-2.1.0.ez
sudo wget http://www.rabbitmq.com/releases/plugins/v2.1.0/webmachine-2.1.0.ez
sudo wget http://www.rabbitmq.com/releases/plugins/v2.1.0/amqp_client-2.1.0.ez
#sudo wget http://www.rabbitmq.com/releases/plugins/v2.1.0/rabbitmq-mochiweb-2.1.0.ez
sudo wget http://www.rabbitmq.com/releases/plugins/v2.1.0/rabbitmq-management-2.1.0.ez
sudo /etc/init.d/rabbitmq-server restart
と簡単だった。
RabbitMQ Management HTTP API
http://hg.rabbitmq.com/rabbitmq-management/raw-file/tip/priv/www-api/help.html →pageinfo
management の方は詳細な API 説明がついてるんだけど、
[rabbitmq-discuss] RabbitMQ HTTP interface
http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2009-April/003490.html →pageinfo
[rabbitmq-discuss] rabbitmq-jsonrpc "shortcut" HTTP calls?
http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2010-May/007047.html →pageinfo
[rabbitmq-discuss] RabbitMQ JSON-RPC via GET rather than POST
http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2010-June/007797.html →pageinfo
jsonrpc の方は見つけられてない。
rabbitmq-server が依存張ってる erlang-base が
1> erlang:system_info(otp_release).
"R12B"
古いと、rabbit-mochiweb プラグインがコケる。
{"Kernel pid terminated",application_controller,"{application_start_failure,rabbit_mochiweb,{shutdown,{rabbit_mochiweb_app,start,[normal,[]]}}}"}
ので、ソースからインストールして、
cd otp_src_R14A
./configure --prefix=/usr/local/erlang/dev --enable-smp-support --enable-kernel-poll --enable-hipe
make
sudo make install
パスを通した後
export PATH=/usr/local/erlang/dev/bin:$PATH
いろいろ落として、
cd /usr/lib/rabbitmq/lib/rabbitmq_server-2.0.0/plugins/
sudo wget http://www.rabbitmq.com/releases/plugins/v2.0.0/mochiweb-2.0.0.ez
sudo wget http://www.rabbitmq.com/releases/plugins/v2.0.0/rfc4627_jsonrpc-2.0.0.ez
sudo wget http://www.rabbitmq.com/releases/plugins/v2.0.0/rabbitmq-mochiweb-2.0.0.ez
sudo wget http://www.rabbitmq.com/releases/plugins/v2.0.0/rabbitmq-jsonrpc-2.0.0.ez
sudo wget http://www.rabbitmq.com/releases/plugins/v2.0.0/rabbitmq-jsonrpc-channel-2.0.0.ez
sudo /usr/sbin/rabbitmqctl status
sudo /etc/init.d/rabbitmq-server restart
リスタートすると、jsonrpc 入りで立ち上がって動いた。
Erlang R14A (dev) を試してみた - Twisted Mind
http://d.hatena.ne.jp/Voluntas/20100522/1274537353 →pageinfo
RabbitMQ JSON-RPC test
http://dev.rabbitmq.com/www-examples/test/index.html →pageinfo
RabbitMQ - Debian
http://www.rabbitmq.com/debian.html →pageinfo
を見て RabbitMQ 入れる。
sudo vi /etc/apt/sources.list
# 以下を追加
# deb http://www.rabbitmq.com/debian/ testing main
wget http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
sudo apt-key add rabbitmq-signing-key-public.asc
sudo apt-get update
sudo apt-get install rabbitmq-server
sudo /usr/sbin/rabbitmqctl status
# 以下を確認
# [{running_applications,[{rabbit,"RabbitMQ","2.0.0"},
# ...
円高だし海外 VPS 借りようと、
iPhone アプリが目についたので Linode を。
Linode - 自由度が高い VPS サービス - ボンノウドットコム Wiki
http://wiki.bonnou.com/Linode%20-%20%E8%87%AA%E7%94%B1%E5%BA%A6%E3%81%8C%E9%AB%98%E3%81%84%20VPS%20%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9 →pageinfo
を見ながら、
Linode - Linode Facilities Speedtest
http://www.linode.com/speedtest/ →pageinfo
ping して一番早いっぽかった Fremont, CA に Linode 512 で借りた。
Linode - Xen VPS Hosting
http://www.linode.com/ →pageinfo
> Plan Monthly Storage Transfer
> Linode 512 $19.95 16GB 200GB
↑12ヶ月まとめて 10% OFF で $221.84 だった。
Linux VPS Guides and Technical Articles - Linode Library
http://library.linode.com/ →pageinfo
user tako 機能、使わないので消そうと思う。
> wikibana に来てましたっけ?
Wiki ばな、第 8 回コッソリ聴きに行きました。
http://wikibana.socoda.net/wiki.cgi?%c2%e8%c8%ac%b2%f3Wiki%a4%d0%a4%ca →pageinfo
10 回は行けず…。
嗚呼、私を削除してください。嗚呼、私の痒いところを削除してください。嗚呼
おきゃーく、おかy−く、おっけーおけーななつのうーみはー♪ちょーおのーりょくしょーねん、はびるーにーせいー♪
akaaakaakaaakaaakkkkkk
はてなんだろう。
WEBDAV は HTTP ってことで curl で操作できるようになっておこうと。
Hosting a WebDAV folder using Tomcat 6 ≪ Java/JEE
http://numberformat.wordpress.com/2010/02/28/hosting-a-webdav-folder-using-tomcat-6/ →pageinfo
この記事にあるように WebdavServlet が Tomcat で簡単に動いたからそれで試験したけど、
Apache2 の mod_dav が多いらしい。
cURL - How To Use (マニュアルページ日本語訳)
http://www.hcn.zaq.ne.jp/___/unix/curl_manpage.html →pageinfo
http://localhost:8080/webdav →pageinfo が WEBDAV レポジトリとすると、
# ls (xpath コマンド使う)
$ yes '' | cpan -i XML::XPath
$ curl -s -XPROPFIND localhost:8080/webdav | xpath '//prop/displayname/text()'
# put (末尾が / でディレクトリ指定)
$ curl -Thoge localhost:8080/webdav/
# get
$ curl localhost:8080/webdav/hoge
$ curl localhost:8080/webdav/hoge > hoge
# rm
$ curl -XDELETE localhost:8080/webdav/hoge
# mkdir
$ curl -XMKCOL localhost:8080/webdav/test
# rmdir (中になんかあっても消える)
$ curl -XDELETE localhost:8080/webdav/test
# mv
$ curl -XMOVE localhost:8080/webdav/test -H 'Destination: /test2'
/ はリポジトリからの位置っぽい。
# cp
$ curl -XCOPY localhost:8080/webdav/test -H 'Destination: /test2'
ファイルもコピーされた。
あと LOCK とかあるらしい。
WebDAV - Wikipedia
http://ja.wikipedia.org/wiki/WebDAV →pageinfo
ヒント: コマンド・ラインXML処理
http://www.ibm.com/developerworks/jp/xml/library/x-tipclp/ →pageinfo
NginxHttpDavModule
http://wiki.nginx.org/NginxHttpDavModule →pageinfo
サブ実装で、PROPFIND できず Web フォルダとかで弾かれた。
Welcome to Apache Jackrabbit
http://jackrabbit.apache.org/ →pageinfo
JCR 実装で、WEBDAV も対応してるらしい。
WebDAV と Windows クライアント
http://plan9.aichi-u.ac.jp/webdav/win.html →pageinfo
Windows Vista で Web フォルダをダブルクリックしてもフォルダを開けないことがある
http://support.microsoft.com/kb/943523/ja →pageinfo
Vista なので最初からパッチ当てて試したら動いた。
作成したフォルダをダブルクリックでは開けず、
右クリック→開くが必要というバグも再現。
Excel でダイナミックマクロを使いたかったので、とりあえず Windows にフックするのを作ろうと。
グローバルフックを利用する必要があるので、
.netでグローバルフックを掛ける方法。 - くらげのChangeLog
http://d.hatena.ne.jp/ku__ra__ge/20070529/p9 →pageinfo
より
覚書/C♯/グローバルフック - PukiWiki
http://azumaya.s101.xrea.com/wiki/index.php?%B3%D0%BD%F1%2FC%A2%F4%2F%A5%B0%A5%ED%A1%BC%A5%D0%A5%EB%A5%D5%A5%C3%A5%AF →pageinfo
ここを見て、C# で書こうと思った。
C# は書いたことが無かったので、とりあえず
Microsoft Visual Studio 2008 Express Edition
http://www.microsoft.com/japan/msdn/vstudio/express/ →pageinfo
から
Visual C# 2008 Express Edition with Service Pack 1
http://go.microsoft.com/?LinkId=9348303 →pageinfo
をインストールした。で、
システムトレイ(タスクトレイ)にアイコンを表示するには? − @IT
http://www.atmarkit.co.jp/fdotnet/dotnettips/392notifyicon/notifyicon.html →pageinfo
を参考に、システムトレイにアイコンを表示させて、設定項目をつけて、
フォームを表示させずにトレイアイコンを表示する: .NET Tips: C#, VB.NET, Visual Studio
http://dobon.net/vb/dotnet/form/hideformwithtrayicon.html →pageinfo
を参考に、トレイ以外にフォームができることを確認した。で、
タスクトレイにアイコンとバルーンを表示する(1/2):CodeZine
http://codezine.jp/article/detail/421 →pageinfo
を見ながら、なんとかアイコンをタスクトレイに入れた。
Keys 列挙体 (System.Windows.Forms)
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.keys.aspx →pageinfo
SendKeys クラス (System.Windows.Forms)
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.sendkeys.aspx →pageinfo
を見ながら Keys と SendKeys の違いにハマったり、
appConfig と applicationConfig の違いにハマったり、
部分繰り返しに対応してなかったり、
そもそもマクロ展開が遅いんだけど、一応動いた。
horaguchi / global-dynamic-macro / wiki / Home ― bitbucket.org
http://bitbucket.org/horaguchi/global-dynamic-macro/wiki/Home →pageinfo
Express 登録まであと 22 日。
あ
あああああ
hbbbbbb
平成22年。
うykjぎぃうkj
tako3 のグループ数が 5000 になった。URL は 20002 ぐらい。
Java ってる。
Wireshark: Go deep.
http://www.wireshark.org/ →pageinfo
Wireshark というパケット解析ソフトが便利そう。
髪切った。
初っ端東北バレした。
明日から働く。
QuickTime インストールしたら勝手に mp4 が QuickTime に関連付けられて、
元に戻そうと 編集→設定→QuickTime 設定→ブラウザ→ファイルの種類 で
mp4 のチェック外そうとしたら何故か外せなくなってた。
どうしようかと思ったけど、コンパネ→既定のプログラム→関連付けを設定する から
普通に設定し直せた。何なんだろう。
ちょっと覚えておくといいかもしれないお金の計算方法を2つほど - IDEA*IDEA 〜 百式管理人のライフハックブログ 〜
http://www.ideaxidea.com/archives/2008/03/2_2.html →pageinfo
> * 年収を計算するには時給を倍にして1000をかけるだけです。
例えば時給1,000円だったら1,000×2×1,000なので200万円になります。
> * 逆に時給を計算する方法。年収を2で割って1000で割ります。
年収500万円だったら2,500円ですね。
で、3600 を時給で割れば一円辺りの秒数が分かって、100 倍すれば 100 円玉の秒数に。
携帯で撮った写真の公開にはモバツイッター使ってたんだけど、
twitter's fotolife - ネットまだ繋がらないので
http://f.hatena.ne.jp/twitter/20090315225832 →pageinfo
640x480 の写真が何故か 450x338 に縮小されていて
元の大きさの写真がどこに行くのかがよくわからないので flickr を使ってみることに。
酒とつまみ on Flickr - Photo Sharing!
http://www.flickr.com/photos/horaguchi/3362612530/ →pageinfo
モバツイッターと同様、投稿用メアドに画像に添付して送ればアップロードができる。
メールの件名が title、本文が description になった。
これを twitter にマルチポストする方法もあるようだけど、
別段マルチポストする必要も無さそうなのでそのままで。
tako3 source: 18bf76111dcc
http://tako3.com/src/rev/18bf76111dcc →pageinfo
http://tako3.com/json/all/20081019 →pageinfo とかで過去にもアクセスできるように。
*.blogspot.com の URL リストから blogger の profile を wget と sed で抽出した。
wget http://tako3.com/json/search/blogspot -O tako3.json
cat tako3.json | sed 's/.*"h/h/;s/".*//' > tako3.txt
wget -i tako3.txt -O all.txt
cat all.txt | sed '/rel="me"/!d;/s/.*"h/h/;s/".*//' > profile.txt
平成21年。
Amazon.co.jp: 理科系の作文技術 (中公新書 (624)): 木下 是雄: 本
http://www.amazon.co.jp/dp/4121006240 →アフィ →pageinfo
を買った。
はてなブックマーク - ブック・マークパンサー - 2008年12月3日
http://b.hatena.ne.jp/mattn/20081203#bookmark-11141035 →pageinfo
より
Mercurial 1.1 released - ursmの日記
http://d.hatena.ne.jp/ursm/20081203/1228311073 →pageinfo
> Web インターフェースの改善
>デフォルトのスタイルが格好良くなりました。あと、Mercurial の公式リポジトリみたいなリビジョングラフが出ます。
らしいので、tako3 のを 1.1 に上げよう、と。
インストールにはシェルを使うので前は CORESERVER のお試しでやったんだけど、
もうお試し切れてるので、どうしようかと思って検索すると
XREA FREE で Mercurial を - miau's blog?
http://miau.s9.xrea.com/blog/index.php?itemid=818 →pageinfo
>■CGI 経由でインストール
って記事があったので、これを参考に
http://www.selenic.com/mercurial/release/mercurial-1.1.tar.gz →pageinfo
1.1 をインストールした。
できた lib と bin を適当に配置しただけだけど。
hgweb.cgi は前のがそのまま動いたので、
この機会に style を変えて新しくしたっぽさを出そうと思ったんだけど、
気に入ったスタイル cail の CSS が IE でバグるのでソースを読むと
class の複数指定で、バグってないスタイルのソースを読んで、
white-space: pre 指定してる <div> 全部に <pre> 入れて修正した。
あと、何故か URL に必ず hgweb.cgi が入るようになってて、
どうしようかと思って検索すると
Mercurial を DreamHost で使う
http://8-p.info/mercurial-dreamhost.html →pageinfo
> URI をきれいにする
># clean URI
>import os
>os.environ['SCRIPT_NAME'] = os.getenv('SCRIPT_URL')[:-len(os.getenv('PATH_INFO', ''))]
>...
ってズバリ記事があったので写したら、
なんか os.getenv('SCRIPT_URL') が None になったので、もう
>os.environ['SCRIPT_NAME'] = '/src'
にしたら動いた。
tako3 source: revision graph
http://tako3.com/src/graph/55d7faccee08 →pageinfo
グラフも見れたけど一直線。
tako3 のグループ数が 4002 になった。URL は 16008 ぐらい。
URL 入力用テキストエリアは onchange と onmouseout で fixTextArea を呼ぶようになってたんだけど、
onchange だけにして、onmouseout 分は post ボタンの onmouseover で呼ぶように追加した。
tako3 source: changeset 3e74ad8b3756
http://tako3.com/src?rev/3e74ad8b3756 →pageinfo
最初、改行のためだけにキーボード触るのが嫌で onchange で末尾に改行入れてたんだけど、
長めのリスト時にスクロールバーが出るのを解決するために
rows を MAX (rows, 10) にする処理も入れたら post しようとクリックした瞬間 submit ボタンが逃げるので、
一行追加が多いのを見て、
現在のリスト長と rows の差が 2 行未満のときに 5 行追加って逃げる頻度を減らしたんだけど、
それでもやっぱり逃げるときはあったので
責めてクリックする前に逃げるようにしようと onmouseout を併用するようにしたら、
URL をペースト→左手でタグを入力してるときに右手のポインタが onmouseout
→末尾改行追加でカーソルが末尾へ→ポインタでカーソルを元の位置に
→左手で入力してるときに右手で onmouseout→末尾追加→ループってなったので。
統合スパムフィルタ「スパムちゃんぷるー」のデータに基づくDNSBL(β)
http://spam-champuru.livedoor.com/dnsbl/ →pageinfo
>"チェックしたいIPアドレスを逆につなげたもの" + ".dnsbl.spam-champuru.livedoor.com"を正引きして下さい。
とのこと。is_blacklisted に追加しといた。
tako3 source:is_blacklisted.php
http://tako3.com/src?file/fb451953d438/is_blacklisted.php →pageinfo
>function is_blacklisted($addr) {
> $chklist = array(
> 'dnsbl.spam-champuru.livedoor.com',
> 'niku.2ch.net',
> 'list.dsbl.org'
> );
> $ip = explode(".", $addr);
> if ($ip) {
> $rev = "{$ip[3]}.{$ip[2]}.{$ip[1]}.{$ip[0]}";
> foreach ($chklist as $host) if (checkdnsrr("$rev.$host", 'A')) return TRUE;
> return FALSE;
> }
>}
tako3 source: changeset f850f6ee5975
http://tako3.com/src?rev/f850f6ee5975 →pageinfo
tako3 の依存関係図も作った。
neato で作った図。
http://tako3.com/dependency.png →pageinfo
必要なのは実線、そうでもないのは破線で、
サブルーチンは家、関数は六角形にした。
Suggest a web application on Wakoopa
http://wakoopa.com/submit →pageinfo
アイコン右クリしたら Suggest 機能に気付いた。
TechCrunch Japanese アーカイブ » Wakoopaがデスクトップアプリに加え、Webアプリの利用状況も追跡スタート
http://jp.techcrunch.com/archives/20081009wakoopa-begins-tracking-web-apps-alongside-their-desktop-counterparts/ →pageinfo
>ユーザーのデスクトップアプリ利用状況を追跡・共有する
>ソーシャルネットワーク「Wakoopa」の開発チームが、
>ネットワーク内で利用頻度トップの常連アプリにFirefoxとSafariが出ていることに気づき、
>これをGOサインとばかりにWebアプリ利用状況の計測もスタートした。
とのこと。
horaguchi on Wakoopa
http://wakoopa.com/horaguchi →pageinfo
俺が使ってるのは9割ぐらい Web らしいので、Web アプリの内訳も分かるなら便利そう。
で、一番上のサイトからまた引用すると
>Webアプリを定義づけ、特定する作業でWakoopaはちょっと壁にぶち当たっている。
>サイトは文字通り全てWebアプリと見なすことが可能だが、
>実践目的で考えるとある程度の線引きは必要だ
>(例えばPicnikは誰が見てもWebアプリだが、
>従兄弟が作ったジオシティーズのページはどう考えたって違うよね)。
>そこでWakoopaはこの分類に、ここのCrunchBaseのAPIを活用した。
>CrunchBaseに収録されているサイトは大体が対象の資格を満たしているからだ。
らしい。
crunchbase-api | Google グループ
http://groups.google.com/group/crunchbase-api?pli=1 →pageinfo
CrunchBase, The Free Tech Company Database
http://www.crunchbase.com/ →pageinfo
一番使ってるのは tako3 なので、Add Service Provider ってとこから
New Service Provider Submission
http://www.crunchbase.com/service-providers/new →pageinfo
申請しといた。
tako3 web checkopml
http://tako3.com/web/checkopml →pageinfo
を作った。
tako3 web checkopml: http://reader.livedoor.com/user/y_yanbe/opml
http://tako3.com/web/checkopml/http://reader.livedoor.com/user/y_yanbe/opml →pageinfo
OPML 入れると htmlUrl || xmlUrl リンクのリストが表示された後、tako3 links が勝手に走る。
tako3 増えてきたような気がしたのでこれで FeedDemon の OPML をカバーしようと思ったんだけど、
割と足りてなくて途中で疲れた。
前に作った web/opml でも URL を getako して一覧ぐらいはできるんだけど、
json は URL だけなので、タイトル出すためだけに新しく。
タイトルをタグの1つとして追加するって手を考えたけど、
そうすると本文とか時間とか全部入れたくなりそうで、
順番決めても決めなくても煩雑になりそうな。
多分、本文やタイトルをタグ状に細かくすると思うんだけど、それはまだ。
FIREGESTURES :: Changelog
http://www.xuldev.org/firegestures/changelog.php?lang=ja →pageinfo
>FireGestures 1.1.5 − 2008年9月20日 リリース
>+ キープレスジェスチャ用コマンド「マウスが通過したリンクの URL をコピー」を追加。
に今気づいた。とても便利だと思う。
カップ焼チキン食べた。
使ったお湯がスープになるので、お湯を捨てに行く手間が要らず楽だった。
ただ、手元に適当なカップが用意できない環境だと、逆に面倒だとは思う。
日清食品:製品情報:製品リスト:焼チキン カップ
http://www.nissinfoods.co.jp/product/p_1787.html?new=1 →pageinfo
日清食品:製品情報:製品リスト:焼チキン カップ カレー味
http://www.nissinfoods.co.jp/product/p_1788.html?new=1 →pageinfo
unidiff で、先頭に - が来た時の挙動が怪しいので適当に修正した。
http://www.horaguchi.net/js_unidiff/test.html →pageinfo
はてなグループに動画を貼るのに、ニコニコを使った。
ニコニコ動画の再生プレーヤーを表示する(niconico記法) - はてなダイアリーのヘルプ
http://hatenadiary.g.hatena.ne.jp/keyword/%e3%83%8b%e3%82%b3%e3%83%8b%e3%82%b3%e5%8b%95%e7%94%bb%e3%81%ae%e5%86%8d%e7%94%9f%e3%83%97%e3%83%ac%e3%83%bc%e3%83%a4%e3%83%bc%e3%82%92%e8%a1%a8%e7%a4%ba%e3%81%99%e3%82%8b%ef%bc%88niconico%e8%a8%98%e6%b3%95%ef%bc%89 →pageinfo
を見ると [http://www.nicovideo.jp/watch/sm4689996:movie] って書くようで、実際貼れるんだけど、
動画のサイズが 512 x 384 になってないような。
エディタやコンソールだと、ズレてるのが分かりやすいという。
:movie:w5** みたいにサイズは指定できるらしく、
ニコニコのページをキャプチャしてペイントで測ると表示部の横幅は 544px だったので、
[http://www.nicovideo.jp/watch/sm4689996:movie:w544] としたら 512 x 384 の動画になった気がする。
パブリックドメイン・クラシック
http://public-domain-archive.com/classic/ →pageinfo
BGM はここから。
haskell.g.hatena.ne.jp/horaguchi - haskell
http://haskell.g.hatena.ne.jp/horaguchi/ →pageinfo
Haskell の勉強のモチベーションにするために、はてなグループに日記を作った。
分かりやすく見えるよう、ですます調にした。
GHC はインストールしてあったけど、
興味を持った人がインストールするかも知れないと思ったので GHC のインストールの記事を書いた。
文書で書いたら数行だったので画像を入れようと、ページを開いてキャプチャして、
ペイントで切り取って保存して、次アップロードをしようとしたら
アップロード画面で SWF なんとかってエラーが出たので
Flashblock の設定画面から haskell.g.hatena.ne.jp をホワイトリストに加えた。
アップロード画面が表示されるようになったので、
アップロードしたら [f:id:horaguchi:*** みたいのが挿入されてるので保存されたっぽいと思って
次々キャプチャ→トリミングして保存→アップロードして、間に文書を少し入れて、
割とそれっぽくできてるはずと思って保存して見たら画像が全部長辺 450px になってた。
フォトライフのも全部 450px になってて、
アップロード毎に上書き保存してたのでキャプチャからやり直した。
アップロード画面のオプションを開くと画像サイズに 450px とあって、
画像の長辺が 450px を超えると 450px にリサイズ後、保存されるようで、
毎回 450px になってるのでオプションでいちいち大きい値にしてアップロードした。
要望されたことが無いんだろうかと思ってググったら、
写真をオリジナルサイズでも保存できるオプションを追加しました - はてなフォトライフ日記 - 機能変更、お知らせなど
http://hatena.g.hatena.ne.jp/hatenafotolife/20080814/1218710745 →pageinfo
>写真をオリジナルサイズで保存するには、「設定」ページの「フォトライフの設定 > 画像サイズ」より、
>「オリジナルサイズの画像を保存」にチェックを入れてください。
フォトライフの設定 > 画像サイズでこの 450px を設定することができるらしいので設定した。
CafePress から届いていた。
http://www.horaguchi.net/files/1221720366.jpg →pageinfo
開けてみたら、注文したメッセンジャーバッグだった。
http://www.horaguchi.net/files/1221720411.jpg →pageinfo
多分恥ずかしいと思う。
iamjap : iamjap
http://www.cafepress.com/iamjap →pageinfo
注文してから、だいたい2週間ぐらい。
送料は7ドルだったので、だいたい2730円くらい。
ClubT:オリジナルデザインTシャツ
http://clubt.jp/ →pageinfo
日本にも同様のサービスが出来ていた。
今んとこ CafePress より高そうだけど、分かりやすいかも。
はてなブックマーク - machuのブックマーク / 2008年09月15日
http://b.hatena.ne.jp/kmachu/20080915#bookmark-10025204 →pageinfo
より
ギークなお姉さんは好きですか $_GETを安易に受け入れちゃダメ!
http://lovecall.14.dtiblog.com/blog-entry-47.html →pageinfo
>文字コード指定は mysql_set_charset を使うべし
>× mysql_query("set names utf8");
>○ mysql_set_charset("utf8");
と見かけて、tako3 temp に SET CHARACTER SET 使ってたのでググったら
PHP 5.2.3リリース
http://blog.ohgaki.net/php_5_2_3a_oa_oa_fa_s →pageinfo
より
MySQL :: MySQL 3.23, 4.0, 4.1 Reference Manual :: 17.7.3.51 mysql_real_escape_string()
http://dev.mysql.com/doc/refman/4.1/en/mysql-real-escape-string.html →pageinfo
>If you need to change the character set of the connection,
>you should use the mysql_set_character_set() function rather than
>executing a SET NAMES (or SET CHARACTER SET) statement.
>mysql_set_character_set() works like SET NAMES
>but also affects the character set used by mysql_real_escape_string(), which SET NAMES does not.
書き換えた方がいいらしいので書き換えた。2007年の6月らしい。
tako3 source: changeset 57bf74bb7581
http://tako3.com/src?rev/57bf74bb7581 →pageinfo
PHP: mysql_set_charset - Manual
http://jp.php.net/manual/ja/function.mysql-set-charset.php →pageinfo
RFC1459: Internet Relay Chat Protocol (IRC)
http://www.haun.org/kent/lib/rfc1459-irc-ja.html →pageinfo
RFC 1459 (rfc1459) - Internet Relay Chat Protocol
http://www.faqs.org/rfcs/rfc1459.html →pageinfo
Python でシンプルな IRC クライアントを作成する
http://www.codereading.com/codereading/python/python-irc-client.html →pageinfo
ともちゃ日記 -大学などでのアレゲな私生活?!-
http://tomocha.net/diary/?20030118#200301182 →pageinfo
ここらへんを見てみると、簡単なプロトコルに見えたので、
ExternalInterface で flash.net.Socket を JS から使うためだけのを作って試してみることに。
Download Flex 3 - Flex SDK - Confluence
http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+3 →pageinfo
無料のこれを落としてきて、インストールして、
ExternalInterface - ActionScript 3.0 言語およびコンポーネントリファレンスガイド
http://livedocs.adobe.com/flex/3_jp/langref/flash/external/ExternalInterface.html →pageinfo
Socket - ActionScript 3.0 言語およびコンポーネントリファレンスガイド
http://livedocs.adobe.com/flex/3_jp/langref/flash/net/Socket.html#includeExamplesSummary →pageinfo
ここらへんをコピペして、
mxmlcの使い方とコンパイルオプションを勝手に解説 - ◆nemu90kWw.の雑記
http://d.hatena.ne.jp/nemu90kWw/20060716/p1 →pageinfo
これを参考にコンパイルして、
Adobe Flex 3 ヘルプ
http://livedocs.adobe.com/flex/3_jp/html/help.html?content=wrapper_13.html →pageinfo
これを参考に object タグを書いたら動いた。
www.horaguchi.net - flash.net.Socket JavaScript Gateway Sample
http://www.horaguchi.net/flash_socket_js/ →pageinfo
http://www.horaguchi.net/flash_socket_js/sample.html →pageinfo
サンプルの chat1.ustream.tv のように、843 番にポリシーがあると普通に接続できるんだと思う。
ブラウザ上で動く IRC ボットのサンプルが欲しいんだけど、まだ見つけてない。
まず IRC クライアントを探してみたんだけど、これもそんなに無いような。
Mibbit
http://www.mibbit.com/ →pageinfo
iframe タグをコピペすることでどのページからでも IRC クライアントが使えるらしい。
Flash が見当たらないので、Comet っぽいことをしてるんだろうか。
ボットを使う必要が無ければこれで普通に。
実体の、embed.mibbit.com は HTML + JavaScript のようなので
これをそのまま表示して bookmarklet でも使えばボット走らせるぐらいはできそうだけど、
http://embed.mibbit.com/widgetclient_1024.js →pageinfo
>/* All source code is (c) Mibbit.com. Unauthorized use/reverse engineering/copying is prohibited. */
との一文が。
WishList/Scripting - Mibbit
http://wiki.mibbit.com/index.php/WishList/Scripting →pageinfo
要望はあるようだ。
サーバが弄れないとするとソケットを使う必要があるので
Java Applet か flash で JavaScript から呼べるライブラリが欲しい。
SourceForge.net: Net-Bits.Net Flash IRC Chat Client
http://sourceforge.net/projects/netbitsflashirc →pageinfo
は XMLSocket を使ってるのでサーバが限られるらしい。
flexircclient - Google Code
http://code.google.com/p/flexircclient/ →pageinfo
as3irclib - Google Code
http://code.google.com/p/as3irclib/ →pageinfo
動くかも知れないけれど、リリースが少なくてメンテされてるのかどうか分からないのが少し。
akihiro kamijo: ソケットポリシーファイルと Flash Player セキュリティ
http://weblogs.macromedia.com/akamijo/archives/2008/03/_flash_player_1.html →pageinfo
flash.net.Socket を使うときは接続先サーバの 843 番から
ソケットマスターポリシーファイルと呼ばれる XML が返ってくる必要があるらしい。
Ustream の IRC サーバ、chat1.ustream.tv の 843 番からもポリシーファイルが返ってくる。
【 sed 】 文字列の置換,行の削除を行う:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230879/ →pageinfo
Manpage of SED
http://www.linux.or.jp/JM/html/GNU_sed/man1/sed.1.html →pageinfo
これらを見ながら sed を、少し実装した。
tako3 command help: sed
http://tako3.com/sed →pageinfo
正規表現で置換するのが欲しかったので、とりあえず文は1つだけで、コマンドは a c i s ぐらいしか。
ホールドスペースとかも実装すれば色々できそうなんだけど、できすぎる気も。
http://tako3.com/command#cat%20http://tako3.com/search/b.hatena →pageinfo
こういうのを
http://tako3.com/command#cat%20http://tako3.com/search/b.hatena%20|%20cut%20-f1 →pageinfo
feed を外して
http://tako3.com/command#cat%20http://tako3.com/search/b.hatena%20|%20cut%20-f1%20|%20shuffle%20 →pageinfo
ランダムに20件選んでから
http://tako3.com/command#cat%20http://tako3.com/search/b.hatena%20|%20cut%20-f1%20|%20shuffle%20|%20head%20-20%20|%20sed%20s/^(.*)$/$1favorite/g%20|%20list →pageinfo
favorite を表示とか。
Ubiquitous Gists ― GitHub
http://github.com/blog/158-ubiquitous-gists/ →pageinfo
Feed のアイコンがでかかったので、
Feed Icons - Home of the Standard Web Feed Icon
http://www.feedicons.com/ →pageinfo
http://www.feedicons.com/downloads/feedicons-devkit.zip →pageinfo
にある feed-icon.svg を GIMP で読み込んで 1000 px のを作った。
http://www.horaguchi.net/files/1220786774.png →pageinfo
getako する userscript の target を _blank にした。
Tako Info for All Pages – Userscripts.org
http://userscripts.org/scripts/show/12712 →pageinfo
Tako Info for All Links – Userscripts.org
http://userscripts.org/scripts/show/14409 →pageinfo
All Links の方で、リンクが多いと固まるのが嫌だったので、これを機に固まらないように修正。
ループを再帰にして、関数呼ぶときに setTimeout 使うようにしただけだけど。
あと、tako3 のトップページのデザインを少し変えた。
新しくファイルに追加された行を IRC に流すボットを作った。
gist: 8940 ― GitHub
http://gist.github.com/8940 →pageinfo
サンプルが無いか探してみたところ、
Twisted の examples にあった ircLogBot.py が近そうだったのでそれで。
Python とか知らないけど。とりあえず
Python標準リリース
http://www.python.jp/Zope/download/pythoncore →pageinfo
にあった
http://www.python.org/ftp/python/2.5.2/python-2.5.2.msi →pageinfo
をインストールして、
Twisted
http://twistedmatrix.com/trac/ →pageinfo
にあった
http://tmrc.mit.edu/mirror/twisted/Twisted/8.1/Twisted_NoDocs-8.1.0.win32-py2.5.exe →pageinfo
をインストールした。
http://tmrc.mit.edu/mirror/twisted/Twisted/8.1/Twisted-8.1.0.tar.bz2#md5=a575f29ead4cc02c54e9061d0e6ac7c3 →pageinfo
あと examples が欲しいのでこれも落とした。
Windows/Mac OS X/Linux/BSDで動作するフリーのIRCサーバ「InspIRCd」 - GIGAZINE
http://gigazine.net/index.php?/news/comments/20080128_inspircd/ →pageinfo
あと、localhost で使うので IRC サーバもインストールした。
設定に少し手間取ったけど、だいたい GIGAZINE の通りに。
で、Twisted-8.1.0/doc/words/examples/ircLogBot.py を動かしながら改造した。
Python のスレッドとか知らないけど、threading.Thread(target=self.メソッド) で動くようだったのでそれで。
ディレクトリを読み込む方法ググったら glob の解説がでてきたのでそれで。
とかやってたらそれなりに動き始めたので満足した。
http://gist.github.com/8940.txt →pageinfo
関数1つぐらいしか追加してない。
あとはこれを ircLogBot.py って名前で保存して、
$ ircLogBot.py channel *.log
とか実行すれば、#channel に接続して、*.log の中で一番新しいファイルの差分を流し始める、はず。
命名規則とかオーバーヘッドとか、改善点はある気がする。
OPML を SimpleXMLElement でパースして返す json/web/opml を追加した。
tako3 source: changeset 778bf639b96e
http://tako3.com/src?rev/778bf639b96e →pageinfo
PHP: 例 - Manual
http://jp2.php.net/manual/ja/simplexml.examples.php →pageinfo
json だけじゃあれなので、Web インターフェースも。
tako3 web
http://tako3.com/web →pageinfo
上の web は前に作った、HTML の URL だけ抜き出すやつ。
大抵 OPML って URL がたくさんあって、そのまま view とか list とかは少ないと思うので、
各ページにある command へのリンクに cat だけのを追加した。
http://tako3.com/command#cat%20http://tako3.com/web/opml/http://reader.livedoor.com/user/tokyoenvious/opml →pageinfo
千件とか四千件になってくるとやはり重そうなので、一応 Expires と Last-Modified を吐くように。
これだけあると grep をちゃんと使いたいので、メタ文字と引用符( ' " )でのエスケープを実装した。
http://tako3.com/command#cat%20http://tako3.com/web/opml/http://reader.livedoor.com/user/tokyoenvious/opml%20|%20grep%20b.hatena\|delicious\|clip.livedoor%20|%20list →pageinfo
tako3 source: changeset 23eac93c14c7
http://tako3.com/src?rev/23eac93c14c7 →pageinfo
Creole パーサとやってることは同じで、全体を何度も replace する。
どっかで名前付いてた気もするけど。
最新 10 件とかなら、LDR には feed があるからそのまま cat で。
http://tako3.com/command#cat%20http://reader.livedoor.com/user/tokyoenvious%20|%20list →pageinfo
http://gist.github.com/5165 →pageinfo というpageのraw fileの最新版は http://gist.github.com/5165.txt という url で入手可能 - 天下泰平 The Whole World is peaceful.
http://d.hatena.ne.jp/taizooo/20080902/1220332162 →pageinfo
らしい。ので、前書いたのは
tako3 command: cat http://tako3.com/temp/ubiq | http://gist.github.com/7947.txt?a_link
http://tako3.com/command#cat%20http://tako3.com/temp/ubiq%20%7C%20http://gist.github.com/7947.txt?a_link →pageinfo
これで大丈夫に。
短いし、アップデートの手間が無い分便利そう。Mercurial だと rev/tip。
iamjap : CafePress.com
http://www.cafepress.com/iamjap →pageinfo
作った。
外部JavaScriptの動的ロード - 0x集積蔵
http://d.hatena.ne.jp/os0x/20080827/1219815828 →pageinfo
JavaScript の動的ロードについて、タイマを使いたくない場合、
script エレメントの onload に callback を入れることで IE 以外は何とかなって、
IE は onreadystatechange に入れれば何とかなりそう、という話だと思う。
動的ロードと聞くと JSAN で、
あれはパスの優先順位や名前空間対策があるけど XMLHttpRequest だから、
今のブラウザだとスクリプトの場所が同じドメインに限られるという。
tako3 の機構は JSAN の真似で、script エレメントを使うことでドメイン制限を無くした代わりに、
グローバルに読み込むので名前空間が適当になっている。
その上、タイマで目的のスクリプトが定義されたかどうかだけ見ているので、
タイムアウトは分かっても 404 みたいなエラーは検出できず
優先順位を設定するためには時間がかかる、という。
ロードされたタイミングが分かればロード済み && 未定義を 404 と判断できるので、便利そう。
ので、上のページにあったテストページを勝手に改変してテストしてみた。
script loader
http://www.horaguchi.net/files/404_no_test_dayo.html →pageinfo
IE6 と IE7 では、
>document.body.appendChild:http://ss-o.net/js/onready_test.php
>document.body.appendChild:http://ss-o.net/js/onready_test.php
>document.body.appendChild:http://ss-o.net/js/onready_test2.php
>readyState:loading:http://ss-o.net/js/onready_test.php
>readyState:loading:http://ss-o.net/js/onready_test.php
>readyState:loading:http://ss-o.net/js/onready_test2.php
>readyState:loaded:http://ss-o.net/js/onready_test2.php
>callback:http://ss-o.net/js/onready_test2.php
>readyState:loaded:http://ss-o.net/js/onready_test.php
>callback:http://ss-o.net/js/onready_test.php
>readyState:loaded:http://ss-o.net/js/onready_test.php
>callback:http://ss-o.net/js/onready_test.php
となっていて、404 かどうか関係無く onreadystatechange だけ呼ばれて、onload は呼ばれない。
Firefox 2.0.0.16 と Firefox 3.0.1 では
>document.body.appendChild:http://ss-o.net/js/onready_test.php
>document.body.appendChild:http://ss-o.net/js/onready_test.php
>document.body.appendChild:http://ss-o.net/js/onready_test2.php
>error:http://ss-o.net/js/onready_test2.php
>load:http://ss-o.net/js/onready_test.php
>callback:http://ss-o.net/js/onready_test.php
>load:http://ss-o.net/js/onready_test.php
>callback:http://ss-o.net/js/onready_test.php
となっていて、404 だと onload は呼ばれずに onerror、
後は onload が呼ばれて onreadystatechange は呼ばれない。
Safari 3.1.2 では
>document.body.appendChild:http://ss-o.net/js/onready_test.php
>document.body.appendChild:http://ss-o.net/js/onready_test.php
>document.body.appendChild:http://ss-o.net/js/onready_test2.php
>load:http://ss-o.net/js/onready_test2.php
>callback:http://ss-o.net/js/onready_test2.php
>load:http://ss-o.net/js/onready_test.php
>callback:http://ss-o.net/js/onready_test.php
>load:http://ss-o.net/js/onready_test.php
>callback:http://ss-o.net/js/onready_test.php
となっていて、404 かどうかに関係無く onload だけ呼ばれて onreadystatechange は呼ばれない。
Opera 9.52 では
>document.body.appendChild:http://ss-o.net/js/onready_test.php
>document.body.appendChild:http://ss-o.net/js/onready_test.php
>document.body.appendChild:http://ss-o.net/js/onready_test2.php
>readyState:interactive:http://ss-o.net/js/onready_test.php
>readyState:interactive:http://ss-o.net/js/onready_test.php
>readyState:interactive:http://ss-o.net/js/onready_test2.php
>load:http://ss-o.net/js/onready_test.php
>callback:http://ss-o.net/js/onready_test.php
>readyState:loaded:http://ss-o.net/js/onready_test.php
>callback:http://ss-o.net/js/onready_test.php
>load:http://ss-o.net/js/onready_test.php
>callback:http://ss-o.net/js/onready_test.php
>readyState:loaded:http://ss-o.net/js/onready_test.php
>callback:http://ss-o.net/js/onready_test.php
となっていて、onload も onreadystatechange も両方呼ばれるけど、404 だと何も呼ばれない。
と、結構バラバラで、ややこしくなりそうなのが少し。特に何も呼ばれないとかに対応するのが。
普通の場合はロード時にどっちか必ず呼ばれるようなので、
パスが分かっているコードを HTML が弄れない環境でロードするとき、
bookmarklet とか userscript みたいの書くとき結構使えると思う。
Twitter / 33: minubufferとかvimpなんとかとかtako3...
http://twitter.com/33/statuses/900224474 →pageinfo
より
Twitter / 33: ubiquityやばい、設定画面がページ(説明とかビデ...
http://twitter.com/33/statuses/900205297 →pageinfo
ubiquity でググってみると
Mozilla Labs » Blog Archive » Introducing Ubiquity
http://labs.mozilla.com/2008/08/introducing-ubiquity/ →pageinfo
Labs/Ubiquity - MozillaWiki
https://wiki.mozilla.org/Labs/Ubiquity →pageinfo
などがひっかかった。
コマンドラインインターフェース、CLI で簡単にマッシュアップできる Firefox のアドオンらしい。
プロトタイプが公開されていて、インストールすると
CTRL + SPACE でコマンドを入力できる窓が開くようになる。
コマンドの候補がインクリメンタルサーチのようにずっと表示されているので、
どんなコマンドがあるのか分かりやすくて便利だと思う。コマンドの候補が無くなると、
google や amazon-search への引数にも。
検索系のコマンドはプレビューがあるのもあって、インクリメンタルサーチになっている。
Ubiquity Commands/Verbs
http://theunfocused.net/moz/ubiquity/verbs/ →pageinfo
コマンドのソースを見ると、CmdUtils.CreateCommand 関数に
name や execute プロパティを持ったオブジェクトを渡してコマンドの定義をするらしく、
jQuery も使えるらしい。パイプみたいのは見当たらないけれど。
サードパーティ製のコマンドがもう結構出てるけど、ライセンスは MPL が多いんだろうか。
コマンドの履歴やブックマークみたいのを共有できるようなのも見たいような。
ブラウザだと、どこで実行したかってことも記録しないとダメそうだけど、
bookmarklet とか、userscript とか、実行させる URL が決まっているのも多いから一緒に。
tako3 command: cat http://tako3.com/temp/ubiq | list 30
http://tako3.com/command#cat%20http://tako3.com/temp/ubiq%20%7C%20list%2030 →pageinfo
真似をして、コマンドを表示するようにした。
下に全部のリンクがずっとあるだけだけど。
tako3 command: cat http://tako3.com/temp/ubiq | http://gist.github.com/raw/7947/0b4a52717958cc786fccbc7a3bd1851c71a35044?a_link
http://tako3.com/command#cat%20http://tako3.com/temp/ubiq%20%7C%20http://gist.github.com/raw/7947/0b4a52717958cc786fccbc7a3bd1851c71a35044?a_link →pageinfo
tako3 command は何でも実行して、どんな HTML でも入るので気をつけてください。
tako3 のグループ数が 3017 になった。URL は 12070 ぐらい。
hg push と hgweb.cgi の間のパケットを WinDump で見てみると、
cmd=unbundle にバイナリを POST しているようで、先頭には HG10BZ とあった。
HG10BZ でググると HG10GZ HG10BZ HG10UN みたいのが引っかかって、
これは hg push の前に cmd=capabilities で受け取る文字列にも
unbundle=HG10GZ,HG10BZ,HG10UN と、含まれていた。
unbundle は hg bundle で作った bundle ファイルをレポジトリに適用するコマンドらしく、
試しに hg bundle でファイルを作ってみると先頭に HG10BZ が付いていて、
hg bundle したのを cmd=unbundle に POST してやれば push になるのかな、と思った。
BZ GZ UN というのは多分 BZ は bzip2、GZ は gzip だろうから UN は未圧縮のことだろうと思って
http://selenic.com/repo/index.cgi/hg/raw-file/438e02b4be73/mercurial/commands.py →pageinfo
ソースを見てみるとやっぱりそれっぽい。未圧縮なら読み書きできるかもと思って
よく見ると hg bundle 時にオプションで指定できそうなんだけど、
Windows バイナリの 1.0.1+20080525 では指定できなかった。
仕方ないのでノートに VMware Player をインストールして、Most Downloaded に並んでた
Ubuntu 8.04 Desktop with VMware Tools を落としてきて user user で起動して mercurial をインストールして
stable じゃない方のレポジトリをクローンしてきて make all とやったらなんかエラーが出たので
python-dev や asciidoc をインストールしたり /etc/mercurial/hgrc.d/hgext.rc の hgext.hbisect= 行をコメントアウトしたりして
make all 通したけどまだ mpatch がどうとか言われたので sudo make install したら動いた。
hg bundle --type none changes.hg で先頭が HG10UN の bundle ファイルが作れた。
読んだらバイナリで意味分かんなかった。
直接 push するのは面倒そう。
tako3 source: changeset ec29fa3f8495
http://tako3.com/src?rev/ec29fa3f8495 →pageinfo
コマンドの履歴をホイールでも上下できるようにしたけど、
ヌルヌルだと1つずつ上下させるのが結構面倒だった。
カクカクだと普通に使える感じかも。
Mouse wheel programming in JavaScript
http://adomas.org/javascript-mouse-wheel/ →pageinfo
だいたいこれを参考にしたけど、
onmousewheel をメインにして、効かないときは DOMMouseScroll のが使われるように。
効かないとき、て Firefox だけど、そのうち onmousewheel も使えるようになるかも知れないから、
onmousewheel が呼ばれたときに DOMMouseScroll を無効にするようにした。
ので、IE 6, 7 と Firefox 2, 3 と Opera 9.5 と Safari 3.1.2 で一応。
tako3 copy
http://tako3.com/home/add →pageinfo
で URL を投稿すると、public tako を変更することなく、user tako にその URL をそのままコピーすることができる。
その後 update か update all をやれば、その URL を含んだグループ情報をコピーすることになる。
grouping の機能は全く無いので、空行はあっても無くても同じ。
また、public tako を変更することなく、タグを付けることもできる。
これを使って、前に少し調べたのと iddy とハチロク世代にあった生年情報をタグにしてみた。
一応、公開されてるのに書かれてたものだけ。
del.icio.us が delicious.com になったようなので
REPLACE
INTO addresses
SELECT REPLACE(sub.address, "http://del.icio.us/", "http://delicious.com/"), sub.time
FROM addresses AS sub
WHERE sub.address LIKE "http://del.icio.us/%"
を実行した。その内 del.icio.us の方は消すかも。
Googleの検索結果をフィルタリングできる「&as_qdr」オプションとは? | IDEA*IDEA
http://www.ideaxidea.com/archives/2008/04/googleas_qdr.html →pageinfo
Google の検索結果画面で使う bookmarklet。
javascript:location.href+='&as_qdr=d' →pageinfo
デフォルトで表示されて欲しいけど。
はてなダイアリーへのリンクの URL で、末尾のスラッシュを抜かして書く人がいるけれど、それだと
View HTTP Request and Response Header
http://web-sniffer.net/?url=http%3A%2F%2Fd.hatena.ne.jp%2Fhoraguchi&submit=Submit&http=1.1&gzip=yes&type=GET&uak=0 →pageinfo
302 が返される。IE や Firefox とかで見てる分には、違いに気がつきにくいとは思うけど、
getako に失敗するので気がついた。これは、新しい風習だろうか。
HTTP ヘッダで、スラッシュ有り無し、どっちがアクセスするのに合理的な URL か分かるのは良いほうで、
似たような、http://example.com/user/entry パターンを取っているサービスは、
大抵、http://example.com/user と http://example.com/user/ どっちでもアクセスできるので、ややこしいことに。
だいたい、そのサービス内でのリンクがそのまま各所で使われるので、
Google でもそっちが上位になるだろうことが分かるんだけど、
サービス内で統一されていないとか、好みでスラッシュ無しで使ってるとかだと、どっちが来るかわからなくなったりする。
開発者向け情報 - [パストラック(Pathtraq)]
http://pathtraq.com/developer/#help_normalize_url →pageinfo
http://api.pathtraq.com/normalize_url2?url=http://d.hatena.ne.jp/horaguchi →pageinfo
>"http://d.hatena.ne.jp/horaguchi"
http://api.pathtraq.com/normalize_url2?url=http://d.hatena.ne.jp/horaguchi/ →pageinfo
>"http://d.hatena.ne.jp/horaguchi/"
Pathtraq のはそういう正規化では無いらしい。
Favicon API (ファビコン) α版
http://favicon.aruko.net/ →pageinfo
を使って、1つ目のリンクに favicon 画像をつける favicon.js を追加した。
http://tako3.com/favicon.js →pageinfo
tako3 command: cat http://tako3.com/search/b.hatena | shuffle | head -10 | list | favicon
http://tako3.com/command#cat%20http://tako3.com/search/b.hatena%20%7C%20shuffle%20%7C%20head%20-10%20%7C%20list%20%7C%20favicon →pageinfo
ただ、こんな風に使っていいものなのかどうか。
だいたい、リンクは 0000FF rgb(0, 0, 255) で、既読は 800080 rgb(128, 0, 128) のようで、
HSV にするとそれぞれ (240, 1, 1) と (300, 1, 0.5) になって、既読は明度が半分という。
そこで URL の文字列から色相を計算して、明度・彩度を保ったままリンクの色を勝手に変える bookmarklet を作った。
javascript:(function(){var%20s=document.createElement('script');s.src='http://www.horaguchi.net/files/link2rainbow.js';document.body.appendChild(s)})() →pageinfo
けど、単に見辛いと思う。
Welcome to Adobe GoLive 5
http://aozoragaigo.fc2web.com/kiroku/how.html →pageinfo
できた。
http://www.horaguchi.net/files/1217273770.jpg →pageinfo
キーボードのカーソルの上下で履歴を辿れるようにした。
キーボードを使った操作は、GreaseMonkey もあるだろうし、そんなに使うようには作ってないんだけど、
簡単なキーマッピングなら Rogueliki のをそのまま使えるので、これぐらいは一応という。
ログインしてないと意味無いけど。
はてなブックマーク - COLLECTION & COPY / 2008年07月24日
http://b.hatena.ne.jp/brazil/20080724#bookmark-9410508 →pageinfo
より
Greasemonkey: tinyshell.user.js - mayokara note
http://mayokara.info/note/view/307 →pageinfo
>Minibufferとの差異
>
> * 標準出力を表示できる
> * 付属コマンドが違う
> * 補完機能がしょぼい
> o 一応TABを押せば全コマンドから絞り込みをかけた結果が出ます
> * コマンドの返り値が配列ではなく文字列
あんま関係無いけど、
これもコマンドが実行できるらしく、文字列を受け渡しするようになっている。
> calc: function(STDIN, ARGV, $0){
> var stmt = (ARGV.length > 0) ? ARGV.join(" ") : STDIN.replace(/\s+/g, " ");
> try {
> with (Math) { return eval(stmt); }
> } catch(e) {
> throw $0 + ": " + e;
> }
> },
$0 でエラーハンドリングみたいなことをしてるんだろうか。
繋がりで、Jarminal という言葉が。
Jarminal - termial of JavaScript on browser
http://labs.37to.net/docs/ver0.01/jarminal.html →pageinfo
今のところ、ブラウザに依存しない汎用デバッグツールのような位置付けらしい。
資料の中で、他の JavaScript のシェル実装の概略も。
>jarminal.command.list.mycommand = {
> desc : 'my command',
>
> /**
> * 引数には入力された
> * コマンドの情報が
> * オブジェクトとして入ってくる
> */
> func : function(input){ /* code */ }
>};
jsh
http://www.asahi-net.or.jp/~xe4r-kmt/jsh/jsh.html →pageinfo
コマンド列の1つ1つが、既存のページやアプリケーションに対応していると考えると、
コマンド列をただ呼び出すだけなら、それはランチャーみたいなもので、
手順が共通化されて履歴や補完があったとしても、
キーボードで文字列を入力させる必要はやっぱり無さそうというか、
アイコンをクリックとかショートカットキーとかマウスジェスチャの方が便利そう。
やっぱり引数やパイプやもろもろで、今までのそういう操作をまた操作できるってところが。
ショートカットキーやアイコンをクリックやマウスジェスチャでも、
設定すれば操作の操作はできるし、実際、コマンドでも履歴から辿ることが多いと思うんだけど、
コマンドになると、それがステートレスになって、履歴に残るので、検索とか共有とか。
別にコードとか URL とか他の表現でも、表現できるならそこは同じだけど。
tako3 command を location.hash 無しで読んだときに、
実行したコマンドのリストを表示して、それをクリックすることで実行できるようにした。
保存も表示も、ログインしてないとしないけど。
Manpage of GREP
http://www.linux.or.jp/JM/html/GNU_grep/man1/grep.1.html →pageinfo
Manpage of CUT
http://www.linux.or.jp/JM/html/GNU_textutils/man1/cut.1.html →pageinfo
それぞれ、grep.js cut.js として、今は使いそうなオプションだけ、とりあえず実装した。
http://tako3.com/grep.js →pageinfo
http://tako3.com/cut.js →pageinfo
http://tako3.com/command#cat%20http://del.icio.us/horaguchi →pageinfo
http://tako3.com/command#cat%20http://del.icio.us/horaguchi%20|%20grep%20com →pageinfo
http://tako3.com/command#cat%20http://del.icio.us/horaguchi%20|%20cut%20-f2- →pageinfo
grep は NG ワード機能の代替として使う気だったので、-f と -v をつけた。
http://tako3.com/command#cat%20http://twitter.com/horaguchi%20|%20grep%20-v%20-f%20http://del.icio.us/horaguchi →pageinfo
この -f は内部では Command.js で cat を呼んでいて、
cat は http://tako3.com/* のときは getako3 -feed、それ以外は googlefeed | gfselect link categories
で URL からテキストを取得している。今のところ。
http://tako3.com/cat.js →pageinfo
http://tako3.com/getako3.js →pageinfo
http://tako3.com/googlefeed.js →pageinfo
http://tako3.com/gfselect.js →pageinfo
この googlefeed | gfselect link categories で得られるテキスト、というのは tako3 への入力テキストと同じで、
tako3 の feed を googlefeed | gfselect link categories しても、得られるテキストは入力テキストと同じだけど、
cat では Auto Discovery の手間を省くために
tako3 のだけ getako3 -feed で url feedUrl 形式のを取ってきてるので、
tako3 のアドレスを cat したときには入力テキストと微妙に食い違う。これはその内どうにか。
それで、grep -f に使う用に、入力テキストから json と feed の API を用意する tako3 temp を作った。
リンクを含めないフィードが valid か怪しかったけど、
RSS 2.0 Specification (RSS 2.0 at Harvard Law)
http://cyber.law.harvard.edu/rss/rss.html#hrelementsOfLtitemgt →pageinfo
>All elements of an item are optional, however at least one of title or description must be present.
item のリンクは optional らしいのでそうした。
tako3 temp: sample-of-my-article
http://tako3.com/temp/sample-of-my-article →pageinfo
こういう temp があると、
http://tako3.com/command#cat%20http://tako3.com/search/b.hatena%20|%20shuffle%20|%20head%2020%20|%20list%20|%20grep%20-f%20http://tako3.com/temp/sample-of-my-article →pageinfo
http://tako3.com/command#cat%20http://tako3.com/search/b.hatena%20|%20shuffle%20|%20head%2020%20|%20list%20|%20grep%20-v%20-f%20http://tako3.com/temp/sample-of-my-article →pageinfo
上のリンクで含む記事を、下のリンクで含まない記事を見れる。
list や view で返されるのは最終的な、innerHTML に代入するための HTML を含んだ文字列の配列なので、
それを grep すると概要・題名・中身をまとめて検索していることに。
Twitter / ryo: @hirameki tako3がXFNやFOAFの形式...
http://twitter.com/ryo_grid/statuses/859953479 →pageinfo
>@hirameki tako3がXFNやFOAFの形式でデータを吐いて、それをGoogleにクロールさせる。
tako3 は本人以外の投稿が主なので、rel="me" は付けづらいというか、
本当の rel="me" と区別する必要はあると思うので、今のところ rel="me" は難しそうだと思ったのがとりあえず。
Google Social Graph API と fooo.name:TKMR.blog.show
http://blog.tkmr.org/tatsuya/show/412-google-social-graph-api-fooo-name →pageinfo
fooo.name の方は、ログインした OpenID で編集してるのもあって rel="me" に対応しているようだ。
神林 亮さんのプロフィール | iddy
http://iddy.jp/profile/ryo_grid/ →pageinfo
iddy の方は、ソースを見たところ rel="me" が付いてないようだけど、
付けても問題無さそうだったので、フィードバックセンターに要望しておいた。
で、XFN には他に tako3 で使えそうなのが無いようなので、FOAF にしようと。
はてなブックマーク - ヘルプ - はてなポイントを贈る
http://b.hatena.ne.jp/help/tipjar#autodiscovery →pageinfo
はてなの Account Auto-Discovery を参考にすると、
<Person>
<holdsAccount>
<OnlineAccount>
<accountName>kanbayashi</accountName>
<accountServiceHomepage rdf:resource="http://d.hatena.ne.jp/" />
</OnlineAccount>
</holdsAccount>
<holdsAccount>
<OnlineAccount>
<accountName>kanbayashi</accountName>
<accountServiceHomepage rdf:resource="http://b.hatena.ne.jp/" />
</OnlineAccount>
</holdsAccount>
...
</Person>
と書けるけど、これだと URL からアカウント部分とサービスの URL を探さないといけないので、
セマンティック・マイクロブログ [11] FOAFによるマイクロブログ作者の表現
http://www.kanzaki.com/works/2008/pub/0615hww.html#s11 →pageinfo
を参考に
<Person>
<holdsAccount>
<OnlineAccount>
<isPrimaryTopicOf rdf:resource="http://d.hatena.ne.jp/kanbayashi/" />
</OnlineAccount>
</holdsAccount>
<holdsAccount>
<OnlineAccount>
<isPrimaryTopicOf rdf:resource="http://b.hatena.ne.jp/kanbayashi/" />
</OnlineAccount>
</holdsAccount>
...
</Person>
と書くことにして、実装してみた。
tako3 source: changeset 2caa863564a8
http://tako3.com/src?rev/2caa863564a8 →pageinfo
http://tako3.com/foaf/http://twitter.com/ryo_grid →pageinfo
ただ、これを Google がクロールして、適切に貯めてくれるかどうかは、微妙だと思うけど。
Social Graph API - Google Code
http://code.google.com/apis/socialgraph/ →pageinfo
Amazon の→アフィを dp のやつにも対応させたついでに、
URL のメタリンクに pageinfo を使うようにした。
pageinfo
http://app.muumoo.jp/page/ →pageinfo
Amazon.co.jp: イノベーションの神話: Scott Berkun, 村上 雅章: 本
http://www.amazon.co.jp/dp/4873113458 →アフィ →pageinfo
を売店で買った。
oreilly.co.jp -- Online Catalog: イノベーションの神話
http://www.oreilly.co.jp/books/9784873113456/ →pageinfo
にサンプルの PDF がある。
ftp://ftp.oreilly.co.jp/download/Innovation_ch01.pdf →pageinfo
json - YubNub.org
http://yubnub.org/kernel/man?args=json →pageinfo
YubNub には、json コマンドも作られていて、
json -cmd url g test -callback tako3 みたいにすると、
tako3({"cmd":"url g test","data":"http://www.google.com/search?q=test","url":"http://yubnub.org/parser/url?command=g+test"})
ってだけ表示されるページに飛ぶことができる。
StartCommand API - StartCommand ソーシャルコマンドサービス
http://www.startcommand.com/static/api →pageinfo
StartCommand の API は XML 形式だけど、XSLT はできそうだし、
API はあるということで、JSON が出てくる可能性も。
ただ、実際に行われる処理はそんなに難しくないので、コマンドの実行結果よりも
コマンドのソース http://www.google.com/search?q=%s が取れた方が便利そう。
ラインベースの場合、コマンドを全ての URL に実行してリンク、みたいなことはよくしそうで、
その場合、いちいちサーバにアクセスすると負荷とか処理時間とか大変そうだし。
Source for "Minibuffer" – Userscripts.org
http://userscripts.org/scripts/review/11759 →pageinfo
Minibuffer のコマンドは window.Minibuffer.addCommand で定義されているようなので、
正規表現でソースから抽出してきて、Firefox の関数を補足して、動くものは動きそう。
ただ、複数の関数を仕込んだような複雑のだと、実行前に必要なところだけ読み込むのは難しそうなので
ページで実行=window.Minibuffer に一度ロードして、コマンド部分にアクセスする、のが妥当のような。
Pages tagged with "shell+web" on del.icio.us
http://del.icio.us/tag/shell+web →pageinfo
Pages tagged with "command+web" on del.icio.us
http://del.icio.us/tag/command+web →pageinfo
他にも、シェルを Web 上で行うものはあって、実装が JavaScript に限らないし、
今後出てくるものも考えると、既存のと同名のコマンドのオプションはとりあえず
man ページにあるものをそのままパクる方向で。
ただ、コマンドには標準入力以外にファイルを指定できるものがほとんどで、
対応しようとすると、URL をファイルとして扱う方法に標準的なものが無くて実装依存になるし、
-f tmp/test と --file=tmp/test の処理とかやっかいだったし、
これ共通化するライブラリ入れるならフレームワークにっていうのは多そうだけど。
引数の処理も、とにかく C と合わせるかも知れないし、
引数は第2以降、this からの他にもマップだけシェル側でしておくかも知れないし、
パイプの間も配列じゃなくて文字列にしたい人が多いかも知れない。
とりあえず cat とか grep とかあったら、似たような挙動するようには作ると思うので、
コマンド列とそこからの応用ぐらいは使えるような。
Creating Commands - Yubnub
http://www.editthis.info/yubnub/Creating_Commands →pageinfo
YubNub では、コマンドと引数は基本的に、URL とそれに含まれる GET パラメータに対応しているようだ。
実際に実行するのは URL とパラメータを受け取ったアプリだけど、ユーザ側からすると
テキストボックスへのコマンドの入力、でアプリの実行結果を得られたことに。
他のコマンドへのエイリアスもあるけど、コマンドとの対応=ソースは一行になっているようだ。
このソースを流用して YubNub もどきを作るのも簡単そうな。
Advanced Syntax for Creating Commands - YubNub.org
http://yubnub.org/documentation/describe_advanced_syntax →pageinfo
>Combining Commands
>You can now combine commands together. For example, g {random 100}.
パイプのように、出力を入力に流すときは { } で囲むようだ。
random 100 だけを実行すると乱数だけが書かれたテキストのページに飛ぶので、これは
サーバが { } 内のコマンドを実行して URL を GET して、それを引数に再度コマンドを実行する仕組みだろうか。
Golden Eggs (ge) - YubNub.org
http://yubnub.org/kernel/golden_eggs?args= →pageinfo
StartCommand ソーシャルコマンドサービス
http://www.startcommand.com/ →pageinfo
ゲートウェイで変換する - StartCommand ソーシャルコマンドサービス
http://www.startcommand.com/help/gateway →pageinfo
>google 人気 サイト >kana >pdf
> で繋げるとコマンドの第一引数に前のコマンドの実行結果が渡されるのかと思ったけど、
この kana というのは URL を渡すゲートウェイという別の機構で、名前空間も別らしい。
ということは、コマンドはまず URL を返すようになっているという。ソースも一行だった。
あんま関係無いけど、この gateway と alias のページのタイトルが今逆になっている。
Pipes: Rewire the web
http://pipes.yahoo.com/pipes/ →pageinfo
Yahoo! Pipes は全部サーバ側で実行されるので、出力コマンドや、繋ぎにも使えそう。
GUI で部品を配置するので、複数のコマンドを繋げる操作が分かりやすく書けそう。
HTML 以外にも RSS や JSON に対応している。
ソースは分からないので Pipes 上でだけ編集できるんだと思う。
Source for "Minibuffer" – Userscripts.org
http://userscripts.org/scripts/review/11759 →pageinfo
Minibuffer のコマンドは JavaScript なのもあって、コマンドは関数に対応していて、
パイプで繋げると、前の出力は次の関数の引数になる、んだと思う。
引数の名前からも標準入力・出力、ラインベースの処理なので、配列で回していくようだ。
ソースは、JavaScript。
立方体できた。
http://www.horaguchi.net/files/1215701030.jpg →pageinfo
一本の長い紐にしてから36個ごとに折っていって幅6個のテープを作って、
動画のように長さ6個で畳んでいったら上手く行った。
tako3 source: changeset 5b6beb6c1123
http://tako3.com/src?rev/5b6beb6c1123 →pageinfo
http://tako3.com/js/getako →pageinfo で、getako がロードされるタイミングを
今までの window.tako3 -> json/all -> window.getako から window.getako, window.tako3 -> json/all
に変更したので、json/all でデータが入ったかどうか確かめるための、getako.loading プロパティを追加した。
この変更で、今まで作った2つのユーザスクリプトに影響が。
Tako Info for All Pages – Userscripts.org
http://userscripts.org/scripts/show/12712 →pageinfo
Tako Info for All Links – Userscripts.org
http://userscripts.org/scripts/show/14409 →pageinfo
前のバージョンのままだとエラーも出ずに 0 tako が頻発するので、
使っている人全員に更新を呼びかけたいんだけど、Greasemonkey には更新確認機能が無いらしい。
セキュリティホールとか、無いと大変だと思うんだけど。
Latest topics > Page Concaterと日経ビジネスオンラインとGreasemonkeyと自動更新 - outsider reflex
http://piro.sakura.ne.jp/latest/blosxom/mozilla/extension/2007-04-13_pageconcater.htm →pageinfo
We Ain't Seen Nothin' Yet. : Greasemonkeyスクリプトに自動更新チェック機能をつける方法 改
http://blog.fulltext-search.biz/articles/2007/10/06/upgrade-automatically-checking-for-available-updates-in-greasemonkey →pageinfo
We Ain't Seen Nothin' Yet. : Greasemonkeyスクリプトに自動更新チェック機能をつける方法
http://blog.fulltext-search.biz/articles/2007/09/15/automatically-check-for-available-updates-in-greasemonkey →pageinfo
>この更新チェック機能をあなたのGreasemonkeyスクリプトに導入するためには,
>大きく以下の3つの手順が必要です.どれも簡単なものです.
> 1. スクリプトの名前やダウンロードURL,詳細ページのURLなどの情報を修正
> 2. サンプルスクリプトのコード部分を自身のスクリプトの最後に追加
> 3. スクリプトファイルと同じディレクトリに*.user.js.versionという名前のファイルを置く
The NeoCube - 将来が不安
http://d.hatena.ne.jp/ryocotan/20080501/p2 →pageinfo
より
The NeoCube
http://www.theneocube.com/ →pageinfo
一番上の記事で動画を見て、その日ぐらいに Google Checkout で注文したのが7月1日に発送され、
今日郵便受け見たら届いてた。
http://www.horaguchi.net/files/1215661677.jpg →pageinfo
このでかいのが 6x6x6 個なので、カタログのように立方体にしようとして
奮闘してたけど、諦めた。結構難しい。
www.horaguchi.net - Command.js
http://www.horaguchi.net/js_command/ →pageinfo
タグをインポート・エクスポートするのに
とりあえず feed を使うことに決めた、のがもう一ヶ月以上前。
エクスポートは feed を書き出せばいいだけで簡単なんだけど、
インポートは feed を取ってこないといけないので、どうしようか悩んでいた。
feed の表示には Google AJAX Feed API を使っていたので、
それを使えばまだクロールしなくて良さそうなのでそれで何とか、
view や bookmarks や copy と同じように実装するついでに、貯まってきたし、ある程度共通化もしようと。
どれも、tako3 api から受け取ったリストを、エントリーやテキストのリストに変換する系だったので
それぞれの機能を pipe みたいに繋げられるようにしようとは思ってたけど、
Google AJAX Feed API が callback を取ってロード時に実行する、非同期系なので割と面倒臭かった。
どうすれば簡単になるか考えて結局、関数の返値じゃなくて返オブジェクトの、
loading プロパティが false になるまでずっと setTimeout で監視する実装にした。
ので、基本的に配列を受け取って配列を返す関数を組み合わせることに。
ずっと setTimeout で監視するならどうせと全部 createElement('script') で読み込むようにしたので、別鯖のも。
Command.js を使って view や bookmarks を組み立て直すと、
実行する HTML を分ける必要が無いように見えたので、専用ページを1つにしてコマンド列を引数にしようと。
コマンドなので専用ページの API はコマンドプロンプトに似せようと思って、最初、
http://tako3.com/$head%2010%7Cshuffle%7Cview#http://www.horaguchi.net/ →pageinfo みたいに考えてたけど、
これだとコマンド列ごとに別の HTML と認識されるし、コマンドがサーバで実行されるように見えるので
hash は #cat%20http://tako3.com/http://www.horaguchi.net/%7Chead%2010%7Cshuffle%7Cview と与えるように。
# がプロンプトにも見えるので http://tako3.com/#cat%20http://tako3.com/http://www.horaguchi.net/%7Chead%2010%7Cshuffle%7Cview
にしようとしたけど、よく使うトップページが重くなりそうなのでやめて、
ページの名前を shell にしようか prompt にしようか悩んだけど、
分かりやすさを考えて command に。
大きく、hash では http://www.horaguchi.net/ だったのが
cat コマンドの引数で http://tako3.com/http://www.horaguchi.net/ になっていて、これは今まで
tako3 から引いた結果が [ ] だったら与えられた URL の feed をそのまま表示してたものを、
tako3 に feed を作ったのもあって、tako3 に限らず、引数の feed のリスト、という形に一般化しようと思ったため。
結果、tako3 以外から引く場合、例えば cat http://del.icio.us/horaguchi | view とやると
ブックマークされた記事1つ1つの feed を取ってきて表示し始めるので、
今までの、与えられた URL の feed をそのまま表示、するコマンドは
echo http://del.icio.us/horaguchi | view みたいな。
bookmarks は名前から出力が分かりにくいので list に改名した。
autoreload も関数にして、最後に繋げる cat http://tako3.com/http:/www.horaguchi.net/ | view | autoreload ことで
だいたいオートリロードできるように。
bookmarks で使っていた cookie 用の textarea は、データがあることを考えてそのまま、
これは cookie コマンドで取得できて、入力があった場合は設定もできるように。
cat コマンドは引数が http:.//tako3.com/* の場合は feed の代わりに jsonp で代用するんだけど、
インポートに使う copy コマンドではタグと API との兼ね合いからどちらも feed で取得するように。
それぞれ、feed をとるのは googlefeed、tako3 jsonp は getako3 というコマンドで、
getako3 の方は分かりやすいのかどうか微妙だけど。
tako3 の textarea に onchange="if(this.value.slice(-1)!='\n'){this.value+='\n'}" を付け足して、末尾が改行になるようにした。
サイリューム - Wikipedia
http://ja.wikipedia.org/wiki/%E3%82%B5%E3%82%A4%E3%83%AA%E3%83%A5%E3%83%BC%E3%83%A0 →pageinfo
>シュウ酸ジフェニルと過酸化水素との混合溶液の化学発光により蛍光を放つ。
夜店でよく見る例のブレスレット。
シュウ酸ジフェニル - Wikipedia
http://ja.wikipedia.org/wiki/%E3%82%B7%E3%83%A5%E3%82%A6%E9%85%B8%E3%82%B8%E3%83%95%E3%82%A7%E3%83%8B%E3%83%AB →pageinfo
>シュウ酸ジフェニルと蛍光色素 (dye) との混合物に過酸化水素(濃度約35%)が混ざると、
>シュウ酸ジフェニルが過酸化水素で酸化されながら分解し、
>2分子のフェノールと1分子の過シュウ酸エステル (ROOC-COOOH) が生じる。
>過シュウ酸エステルはさらに酸化を受けて 1,2-ジオキセタンジオン(図の四員環化合物)となる。
>1,2-ジオキセタンジオンは自発的に分解して2分子の二酸化炭素に変わるが、
>このときに蛍光色素にエネルギーを与えて励起させる[2]。
>励起された蛍光色素はエネルギーを光 (hν) として放出しながら基底状態に戻る。
とのこと。
diff O(np) javascript implementation « ku
http://ido.nu/kuma/2007/10/01/diff-onp-javascript-implementation/ →pageinfo
に Unified Diff で出力する関数をくっつけた。
www.horaguchi.net - JavaScript unidiff
http://www.horaguchi.net/js_unidiff/ →pageinfo
元々、
John Resig - Javascript Diff Algorithm
http://ejohn.org/projects/javascript-diff-algorithm/ →pageinfo
ここのを弄ってたんだけど、test.html の例みたいなときの動作が怪しかったのと
google-diff-match-patch - Google Code
http://code.google.com/p/google-diff-match-patch/ →pageinfo
これをラインベースにする方法が分からなかったので。
Unified Diff と言っても引数はテキストそのものなので +++ --- は出力してない。
はてなブックマーク - ポール・マッカートニー取調室 / 2008年06月06日
http://b.hatena.ne.jp/otsune/20080606#bookmark-8855807 →pageinfo
より
[観] 複数のソーシャルブックマークサイトに重複投稿されているコメントがうざい件
http://watcher.moe-nifty.com/memo/2008/06/socialbookmark.html →pageinfo
tako3 bookmarks では 同じエントリがあるとタイトルがいつも並んで表示されてたりするので、
投稿時間が同じ場合同じエントリと判断して1つにまとめるようにしている。
それでも、del.icio.us とはてブとか、複数のサービスをまたいで投稿してるようなもの、
マルチポストは微妙にタイムスタンプが違うので、いつも並んで表示されたり。
投稿時間がある程度近い記事に絞って getako すればいいかとも思ったけれど、
network や favorite や watchlist から見る記事には使えないから結局。
これに対応するためには、feed の URL とエントリの author から、author 固有の URL、
tako3 に使えるような URL を別途導けるようなリストを作る必要が。
ただその場合、feed の URL とエントリの正しい author、両方とも知ってないと DB から引けないけれど。
前書いたラボブログのも似た感じで。
今のところは、AND が使える NG ワード機能で一人ずつ。
そもそもなんで SBS はマルチポストするのかと考えると、
URL からブックマークを引いたり、network や favorite や watchlist みたいのを作るのが、
フィードがある割に1つのサービス内で完結してるのが多いからかな、と。
マルチポストするのは面倒そうだから、する必要が無い方向に行く気がするので、
NG ワード機能みたいに手作業でもなんとかなるかなと思ったんだけど、これが
違うサービスでもまとめて見れる、じゃなくて、
他のブックマークにも同時に投稿できる、みたいな方向だと、どんどん増えていきそうな。
ラボブログみたいな、複数の人が持ち回りで書いてるやつは、
読みたい内容のものも多いんだけど、tako3 には追加しにくいというか、
そもそも誰が書いてるのか明らかにされてないことがあって、
書いてあっても、個人別ページへのリンクは無かったりして。
リンクがあってもプロフィールだけだったり、個人の記事がまとまってなかったり、
まとまってても feed は全体のだけだったり、そして、記事の URL に
その URL が含まれる http://blog.example.com/AUTHOR/2008/06/03/kiji.html ことは更に少なくて、
だいたい http://blog.example.com/2008/06/03/kiji.html みたいのが多くて、
http://blog.example.com/ →pageinfo と AUTHOR を別に関連付ける必要があって。
これは気持ち的なものかとも思ったけれど、ブログツールの仕様が大きいような気がする。
実際にそういう仕様のラボブログは見ないけど、既存のブログサービスでは
http://blog.example.com/AUTHOR/2008/06/03/kiji.html →pageinfo みたいな URL は別に珍しくないから、
その流れで http://blog.example.com/ に全体の新着記事と feed と検索窓付けてデザインをそれっぽくすれば、
そういう仕様のブログになって便利のような。突っ込んだはてグルみたいな。
これは、たまたま tako3 が人別のグルーピングを基本にしていて、
前方一致での簡易フィルタ機能がそこそこ機能してそうだからどうせならってだけなので、
同様に、http://blog.example.com/AUTHOR/perl/game/2008/06/03/kiji.html って感じで
カテゴリやタグも URL に追加すれば便利かとも思ったけれど、
順不同では前方一致での簡易フィルタには使えないので、
検索対象に URL 文字列も含むような検索をするときぐらいしか。
タグを編集したい、ってのに対応しにくいのもあって。
feed が全件配信してればいいんだけど。
Twitter検索 : タグ
http://twitter.1x1.jp/search/?source=&keyword=%E3%82%BF%E3%82%B0&lang=&text=1 →pageinfo
より
Big Sky :: twitterユーザに対してタグ付け出来るウェブサービス「Tagtter」作った。
http://mattn.kaoriya.net/software/lang/python/20080519102721.htm →pageinfo
より
Tagtter - Find twitter's fun on tag cloud!
http://mattn.appspot.com/tagtter/ →pageinfo
真ん中より引用すると
>lomoさんが言ってた
>>caramel*vanilla » Twitterユーザーにタグ付けするWebサービスが欲しい
>>共通点のあるユーザーを効率的に探したい
>>... 誰かなんとかしてくれませんか?
>>http://caramel-tea.com/2008/05/twitter_tagging/
>を作ってみた。
とのこと。今のところ Twitter 専門のようだけど、
記事ごとでなく、サイトごとにタグを付けるシステムで、
こういうサイトがでてきたってことは、tako3 に
タグをインポート・エクスポートできる仕組みを追加する必要が。
タグ付けするシステムとしては SBS の他にも、
flickr や YouTube もタグを付けられるようになってるので、
そこらからタグをインポートすることを考えると、feed に書き出すのが妥当な気も。
どうせ feed には書き出しそうというのもあって。
サイト別に記事を分類できる SBS なら、feed からタグの活用も。
tako3 hatebu tagging: http://mattn.kaoriya.net/
http://tako3.com/hatebutagging#http://mattn.kaoriya.net/ →pageinfo
はてブの人気エントリのタグランキング。
tako3 source:copy.php
http://tako3.com/src?file/3a77a4507083/copy.php →pageinfo
tako3 copy を実装した。
tako3 copy: group/generation1986.g.hatena/search/twitter.com
http://tako3.com/copy#group/generation1986.g.hatena/search/twitter.com →pageinfo
なんか URL をコピーしたいときに。
あと、ログインしてると自分の tako にコピーもできる。
今のところ、URL とそのグループ、ではなくて、その URL だけ、をコピーするので、
update all とかしなければグループの他の URL はコピーされない。更新情報も弄らないので、
コピーしたからと言って contributor の上の方に表示されるわけじゃないし、
tako3 recent にも上がってこない、という。
tako3 copy: all/join/web/http://del.icio.us/horaguchi
http://tako3.com/copy#all/join/web/http://del.icio.us/horaguchi →pageinfo
copy のフォームだけは、改行の他にスペース単位でも URL を認識するように。
tako3 のグループ数が 2009 になった。URL は 8037 ぐらい。
OpenIDを使ってみよう:CodeZine
http://codezine.jp/a/article/aid/1356.aspx?p=2 →pageinfo
>OpenIDの入力フォームにはOpenIDのロゴをつけるようにしましょう。
>OpenID Authentication 1.1 の 3.2 章でそのことが記載されています。
>またCSSは次のように定義すると良いでしょう。
OpenID のログインフォームにアイコンを付けた。
tako3 OpenID
http://tako3.com/openid/ →pageinfo
白の背景にしか合わなかったので勝手にそれっぽいアイコンを作った。
Add a Link to Hatena's Logo – Userscripts.org
http://userscripts.org/scripts/show/26037 →pageinfo
>www.hatena.ne.jp -> www.hatena.ne.jp/sample
デスクトップで使ってたやつだけどノートの方に持って行くのが面倒で
ずっと URL を書き換えて見てたけどいい加減面倒になったので。
tako3 source:COPYING
http://tako3.com/src?file/def6faf167d0/COPYING →pageinfo
一応 Public Domain を明記。
tako3 source:update_contributor.php
http://tako3.com/src?file/e50f126b2908/update_contributor.php →pageinfo
home/update を実装した。
tako3 にログインしていると見れる tako3 home の仕様を変えた。
前のソースの SQL は
tako3 source:home.php
http://tako3.com/src?file/3ad42f884c76/home.php →pageinfo
みたいに UNION を使ってまで無理矢理全部取ってきて
結局 PHP 側で後処理させるっていうものだったんだけど、それは
・全員側で一緒でもユーザ側で分割されてたら別グループ
・全員側のグループになくてもユーザ側のグループにあったら全員側と一緒に表示
・全員側で別グループでユーザ側で一緒なら一緒グループ
・全員側にあってユーザ側にないアドレスを色付ける
・ユーザ側にあって全員側にないアドレスもその内色付けたい
みたいに、ユーザ側の編集を全員側と独立させて行った場合に配慮するためで。
でも、そもそも使ってみるとユーザ側も全員側も同時に編集するしかないし、
home で何を表示してるのかもよくわからなくなってしまった気がする。
なので、基本的にグループの数を全員側とユーザ側で同じだと考えて、
全員側の更新順でグループを表示させるように変更した。
ていうか home では全員側に無いアドレスが表示されないっていう。
tako3 source:home.php
http://tako3.com/src?file/3212f5b3d7e9/home.php →pageinfo
そうすると全員側に無いアドレスがユーザ側にあった場合に
home には表示されないので hide = ユーザ側からの削除ができなくなるけど、
それは後で home./update とか書いて。
404 を買った。
前買った 404 の尻ポケに穴が空いたので、財布と小銭入れの左右を逆にしたんだけど
穴が広がってきて財布すら落ちそうになってきたため。
Radio Soulwax Live-get Yer Yoyo's Out!: Pt.3【CD】-2 Many Dj's/音楽/HMV
http://www.hmv.co.jp/product/detail/2714584 →pageinfo
Booming Back At You(3ボーナストラック)【CD】-Junkie Xl/音楽/HMV
http://www.hmv.co.jp/product/detail/2694770 →pageinfo
を買った。