<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns="http://purl.org/rss/1.0/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:admin="http://webns.net/mvcb/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">
  <channel rdf:about="http://www.fraction.jp/log/category/56/">
    <title>Program/JavaScript -- BONNOH FRACTION 14</title>
    <link>http://www.fraction.jp/log/category/56/</link>
    <description>世の中に寝るより楽はなかりけり&lt;br /&gt;浮世の馬鹿は起きて働く</description>
    
    <dc:creator>Yuanying</dc:creator>
	<dc:date>2011-12-29T14:38:52+09:00</dc:date>
	<admin:generatorAgent rdf:resource="http://webby.rubyforge.org/?v=0.9.4"/>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://www.fraction.jp/log/archives/2011/03/03/common-key-cryptosystem-with-nodejs" />
        <rdf:li rdf:resource="http://www.fraction.jp/log/archives/2011/03/02/websocket-proxy" />
        <rdf:li rdf:resource="http://www.fraction.jp/log/archives/2011/02/10/change-bing-maps-to-google-on-garmin-connect" />
        <rdf:li rdf:resource="http://www.fraction.jp/log/archives/2011/01/27/node-js-installation" />
        <rdf:li rdf:resource="http://www.fraction.jp/log/archives/2008/04/03/1-52" />
        <rdf:li rdf:resource="http://www.fraction.jp/log/archives/2008/01/11/User_Script_for_usability" />
        <rdf:li rdf:resource="http://www.fraction.jp/log/archives/2007/10/01/Safari_30Site_Alteration_CSS" />
        <rdf:li rdf:resource="http://www.fraction.jp/log/archives/2007/08/1210" />
        <rdf:li rdf:resource="http://www.fraction.jp/log/archives/2007/08/1196" />
        <rdf:li rdf:resource="http://www.fraction.jp/log/archives/2007/07/1191" />
      </rdf:Seq>
    </items>
  </channel>
  <item rdf:about="http://www.fraction.jp/log/archives/2011/03/03/common-key-cryptosystem-with-nodejs">
    <title>Node.js で共通鍵暗号</title>
    <link>http://www.fraction.jp/log/archives/2011/03/03/common-key-cryptosystem-with-nodejs</link>
    <description>Stack Overflow の Node.js and crypto libraryそのまんまだが…。とりあえずメモがてら。暗号化'123|123123123123123'という文字列を暗号化する。暗号化するのに利用する鍵(Password)は「InmbuvP6Z8」。var crypto = require('crypto');var cipher = crypto.createCipher('aes-256-cbc','InmbuvP6Z8');var text = &quot;123|1231231...</description>
    <content:encoded><![CDATA[
        <p>Stack Overflow の <a href="http://stackoverflow.com/questions/4497135/node-js-and-crypto-library">Node.js and crypto library</a>
そのまんまだが…。とりあえずメモがてら。</p>

<h2>暗号化</h2>

<p>'<code>123|123123123123123</code>'
という文字列を暗号化する。</p>

<p>暗号化するのに利用する鍵(Password)は「<code>InmbuvP6Z8</code>」。</p>

<pre><code class='prettyprint'>var crypto = require('crypto');
var cipher = crypto.createCipher('aes-256-cbc','InmbuvP6Z8');
var text = "123|123123123123123";
var crypted = cipher.update(text,'utf8','hex');
crypted += cipher.final('hex');

console.log(crypted);</code></pre>


<p>以上で、'<code>12443a347e8e5b46caba9f7afc93d71287fbf11169e8556c6bb9c51760d5c585</code>'
という暗号化された文字列を得る。</p>

<h2>複合化</h2>

<pre><code class='prettyprint'>var crypto = require('crypto');
var decipher = crypto.createDecipher('aes-256-cbc','InmbuvP6Z8');
var dec = decipher.update('12443a347e8e5b46caba9f7afc93d71287fbf11169e8556c6bb9c51760d5c585','hex','utf8');
dec += decipher.final('utf8');

console.log(dec);</code></pre>


<p>簡単。</p>

<p>次は公開鍵暗号のやり方を調べる。<a href="http://www.amazon.co.jp/gp/product/4274065421?ie=UTF8&amp;tag=bonnohfract00-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4274065421">マスタリングTCP/IP SSL/TLS編</a>を読みながらだが…。</p>

<dl class="amazon"> 
  <dt><img src="/log/2011/03/4165T404E2L.jpg" width="160" height="228" alt=""></dt> 
  <dd>マスタリングTCP/IP SSL/TLS編 [単行本]</dd> 
  <dd>価格： ￥ 4,725 国内配送料無料</dd>
  <dd>Eric Rescorla (著), 齋藤 孝道 (著), 古森 貞 (著), 鬼頭 利之 (著)  </dd>
  <dd> 
    <a href="http://www.amazon.co.jp/gp/product/4274065421?ie=UTF8&amp;tag=bonnohfract00-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4274065421">Amazon で見る</a><img src="http://www.assoc-amazon.jp/e/ir?t=bonnohfract00-22&amp;l=as2&amp;o=9&amp;a=4274065421" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
  </dd> 
</dl>




        
    ]]></content:encoded>
    <dc:subject>Program/JavaScript</dc:subject>
    <dc:subject>Program/技術</dc:subject>
    <dc:creator>Yuanying</dc:creator>
    <dc:date>2011-03-03T17:00:54+09:00</dc:date>
  </item>
  <item rdf:about="http://www.fraction.jp/log/archives/2011/03/02/websocket-proxy">
    <title>WebSocket を通す ReverseProxy が欲しいの</title>
    <link>http://www.fraction.jp/log/archives/2011/03/02/websocket-proxy</link>
    <description>Node.js で socket.io 使ってウェブチャット作って遊ぶ！とかやってると、そのうち作ったアプリを自宅サーバとかで公開したくなるのが人の世の常というものですが。とくに考えずに自宅サーバで作ったアプリを動かそうとすると、「Node.js で作ったアプリをポート3000番で動かしてー、フロントサーバとして Apache か nginx を置けば良いやー」って感じで上の図のような構成になると思いますー。が (そもそもイベントループが売りの Node.js のフロントサーバが Apache っ...</description>
    <content:encoded><![CDATA[
        <p><a href="http://nodejs.org/">Node.js</a> で <a href="http://socket.io/">socket.io</a> 使ってウェブチャット作って遊ぶ！
とかやってると、そのうち作ったアプリを自宅サーバとかで公開したくなるのが人の世の常というものですが。</p>

<p>
<img  src='/log/2011/03/nodejs01.png'
      width='258' 
      height='336' 
      alt=''  />
</p>


<p>とくに考えずに自宅サーバで作ったアプリを動かそうとすると、
「Node.js で作ったアプリをポート3000番で動かしてー、フロントサーバとして Apache か nginx を置けば良いやー」
って感じで上の図のような構成になると思いますー。が (そもそもイベントループが売りの Node.js のフロントサーバが Apache ってどうなの？ってのは置いといて。)</p>

<p>ふと気づく。クライアントからの WebSocket が届いてねえ！</p>

<p>はい、対応してないんですよね、Apache も nginx も、WebSocket のプロキシは。</p>

<p>仕方ないので無理矢理動かそうとすると、Node.js アプリが動いてるポートを開くことになる。
こんなんするんだったら、フロントサーバいらないんじゃないって気もするが。</p>

<ul>
<li><a href="http://havelog.ayumusato.com/develop/javascript/e213-socket_xhrpolling_cookie_tips.html">socket.ioを試すときは，ポートの開き忘れとcookieに注意 ::ハブろぐ</a></li>
</ul>


<p>
<img  src='/log/2011/03/nodejs02.png'
      width='258' 
      height='336' 
      alt=''  />
</p>


<h2>node-http-proxy</h2>

<p>ということで、ちょろっと調べてみたところ、
WebSocket に対応したリバースプロキシ発見。
なんと node.js 製…。</p>

<ul>
<li><a href="https://github.com/nodejitsu/node-http-proxy">nodejitsu/node-http-proxy -GitHub</a></li>
</ul>


<p>こいつをフロントサーバとして Port 80 で動かして、後ろに Port 3000 で動くウェブアプリを置くとすると、
以下のような設定になるっぽい。</p>

<pre><code class='prettyprint'>var httpProxy = require('http-proxy');
    
httpProxy.createServer({
  router: {
    'localhost': 'localhost:3000'
  }
}).listen(80);</code></pre>


<p>名前ベースで振り分けもできる。</p>

<pre><code class='prettyprint'>var httpProxy = require('http-proxy');
    
httpProxy.createServer({
  router: {
    'foo.com': '127.0.0.1:8001',
    'bar.com': '127.0.0.1:8002'
  }
}).listen(80);</code></pre>


<p>イベントベースのウェブサーバで WebSocket も対応してるので、
フロントサーバとして Apache からの置き換えも考えちゃうなーこれは。</p>

<p>と、いいつつ、、、設定ファイルの書き換えが面倒なので全然手を付けてないが…。</p>

        
    ]]></content:encoded>
    <dc:subject>Program/JavaScript</dc:subject>
    <dc:subject>Program/技術</dc:subject>
    <dc:creator>Yuanying</dc:creator>
    <dc:date>2011-03-02T12:38:38+09:00</dc:date>
  </item>
  <item rdf:about="http://www.fraction.jp/log/archives/2011/02/10/change-bing-maps-to-google-on-garmin-connect">
    <title>Garmin Connect の地図が Bing でウザイ</title>
    <link>http://www.fraction.jp/log/archives/2011/02/10/change-bing-maps-to-google-on-garmin-connect</link>
    <description>年末に買った GPS 付き心拍モニタである Garmin Forerunner 310XT は久しぶりのヒットであった。      Garmin Forrunner 310XT   Garmin - Forerunner 310XT　ハートレートモニターバンドル なんといってもランニングをしている分においては iPhone のなんちゃってランニングアプリより、バッテリの持ちが良い。サイコンとして使うのに頑丈である。GPS の精度が良い。腕につけるのでペースを頻繁に確認することができる。心拍計がつい...</description>
    <content:encoded><![CDATA[
        <p>年末に買った GPS 付き心拍モニタである Garmin Forerunner 310XT は久しぶりのヒットであった。</p>

<dl> 
  <dt><img  src='/log/2010/12/garmin-310xt-med.jpg' width='240' height='240' alt='Garmin Forrunner 310XT' /></dt> 
  <dd><a href="http://www.awin1.com/cread.php?awinmid=1857&amp;awinaffid=92712&amp;clickref=&amp;p=http://www.wiggle.co.uk/ja/-737256306/">Garmin Forrunner 310XT</a></dd> 
  <dd><a href="http://www.awin1.com/cread.php?awinmid=1857&amp;awinaffid=92712&amp;clickref=&amp;p=http://www.wiggle.co.uk/ja/-884988305/">Garmin - Forerunner 310XT　ハートレートモニターバンドル</a></dd> 
</dl>


<p>なんといってもランニングをしている分においては iPhone のなんちゃってランニングアプリより、</p>

<ol>
<li>バッテリの持ちが良い。</li>
<li>サイコンとして使うのに頑丈である。</li>
<li>GPS の精度が良い。</li>
<li>腕につけるのでペースを頻繁に確認することができる。</li>
<li>心拍計がついている。</li>
</ol>


<p>などなど、メリットは盛りだくさん！！
もちろん、記録したデータはイマドキですもの、
<a href="http://connect.garmin.com/">Garmin Connect</a> というウェブサービスにアップロードして、
オンラインで確認することができる。</p>

<p>ただ、、ただひとつ惜しい点を挙げると言えば、、、走行ログを確認しようとすると、
Garmin Connect がサポートしているオンライン地図が Bing になってしまうという点なんですよね…。</p>

<p>「なんで Google Maps じゃないんだ、醜くてやだやだいやだあああ。」
と、叫んでたら、あるところにはあるものですな、Garmin Connect の地図を Google Maps にしてしまうという、
Chrome 拡張、「<a href="http://www.facebook.com/pages/Gfix/171855459510617">Gfix</a>」。</p>

<p>…。</p>

<p>惜しい。</p>

<p>なんで Safari 拡張じゃないんだよお。</p>

<h2>Safari 拡張、 ConnectMapFix</h2>

<p>
<img  src='/log/2011/02/dashboard.png'
      width='367' 
      height='249' 
      alt=''  />
</p>


<p>と、いうことで作ってみました。Gfix の Safari 版。
っつーか API を Safari 拡張に変えただけ。</p>

<ul>
<li><a href="http://www.fraction.jp/projects/ConnectMapFix/ConnectMapFix.safariextz">ConnectMapFix</a></li>
<li><a href="https://github.com/yuanying/ConnectMapFix">yuanying/ConnectMapFix - GitHub</a></li>
</ul>


<p>
<img  src='/log/2011/02/Gfix.png'
      width='366' 
      height='128' 
      alt=''  />
</p>


<p>一応、オリジナルの作者さんにも断っておきましたが、何か問題があるようでしたらメッセージお願いします。
(日本語通じないと思いますけど…。)</p>

        
    ]]></content:encoded>
    <dc:subject>Apple</dc:subject>
    <dc:subject>Program/JavaScript</dc:subject>
    <dc:subject>トライアスロン</dc:subject>
    <dc:creator>Yuanying</dc:creator>
    <dc:date>2011-02-10T12:14:46+09:00</dc:date>
  </item>
  <item rdf:about="http://www.fraction.jp/log/archives/2011/01/27/node-js-installation">
    <title>Node.js インストールログ</title>
    <link>http://www.fraction.jp/log/archives/2011/01/27/node-js-installation</link>
    <description>WebSocket とか試してみたくなったので Node.js とか色々インストールしてみた。そのログ。環境は、Mac OS X 10.6MacPorts 1.9.2インストールしたものは、Node.jsnpm (Node Package Manager)express (Sinatra Like な Node.js 上のウェブフレームワーク)Socket.IO (WebSocket を色々なブラウザで使えるようにしたクライアント/サーバライブラリ。)Node.js のインストール。[yuanyi...</description>
    <content:encoded><![CDATA[
        

<p>
<img  src='/log/2011/01/install-node-js.png'
      width='281' 
      height='179' 
      alt=''  />
</p>


<p>WebSocket とか試してみたくなったので Node.js とか色々インストールしてみた。そのログ。</p>

<p>環境は、</p>

<ul>
<li>Mac OS X 10.6</li>
<li>MacPorts 1.9.2</li>
</ul>


<p>インストールしたものは、</p>

<ul>
<li><a href="http://nodejs.org/">Node.js</a></li>
<li><a href="http://npmjs.org/">npm</a> (Node Package Manager)

<ul>
<li><a href="https://github.com/visionmedia/express">express</a> (Sinatra Like な Node.js 上のウェブフレームワーク)</li>
<li><a href="http://socket.io/">Socket.IO</a> (WebSocket を色々なブラウザで使えるようにしたクライアント/サーバライブラリ。)</li>
</ul>
</li>
</ul>


<h2>Node.js のインストール。</h2>

<pre><code>[yuanying@Leaf] ~
$ sudo port install nodejs
[yuanying@Leaf] ~
$ node -v
v0.2.2
</code></pre>

<h2>npm のインストール</h2>

<p>/opt/local の下のパーミッションを変えるのが推奨だよとかいわれたので、よくわからんけどパーミッションを変えてインストール。</p>

<pre><code>[yuanying@Leaf] 
$ sudo chmod -R g+w /opt/local/
Password:
[yuanying@Leaf] 
$ curl http://npmjs.org/install.sh | sh
[yuanying@Leaf] ~
$ npm -v
0.2.16
</code></pre>

<h2>express と Socket.IO のインストール</h2>

<pre><code>[yuanying@Leaf] 
$ npm install express
[yuanying@Leaf] 
$ npm install socket.io
</code></pre>

<p>ふむ…。とりあえず以上。遊ぶのは明日。</p>

<h2>参考文献</h2>

<ol>
<li><a href="http://nodejs.jp/nodejs.org_ja/docs/v0.2/api.html">Node.js API リファレンス</a></li>
<li><a href="http://www.florian-kubis.de/2010/09/howto-install-node-js-on-mac-snow-leopard-with-express/">HowTo: Install node.js on Mac Snow Leopard with Express</a></li>
</ol>


        
    ]]></content:encoded>
    <dc:subject>Program/JavaScript</dc:subject>
    <dc:creator>Yuanying</dc:creator>
    <dc:date>2011-01-27T15:30:32+09:00</dc:date>
  </item>
  <item rdf:about="http://www.fraction.jp/log/archives/2008/04/03/1-52">
    <title>ブックマークレットで、はてブフィッシング</title>
    <link>http://www.fraction.jp/log/archives/2008/04/03/1-52</link>
    <description>ソーシャルブックマークユーザーのIDとPASSをいとも簡単に抜き取る手口*ホームページを作る人のネタ帳ちょっと昔の記事(一年前)の話だけど、少し思いついたので補足を。このエントリではブログの「B!」ボタンに気をつけようって話だったけど、はてなブックマークのコメント欄にブックマークレットを使ってるから平気だっていう記述がちらほら見つかったが、それはちょっと違うんじゃないかなーと。ブックマークレットを使ってフィッシング例えばテスト用につくってみたページがあるのですが、フィッシング用テストページこのペー...</description>
    <content:encoded><![CDATA[
        <ul>
<li><a href="http://e0166.blog89.fc2.com/blog-entry-95.html">ソーシャルブックマークユーザーのIDとPASSをいとも簡単に抜き取る手口*ホームページを作る人のネタ帳</a></li>
</ul>


<p>ちょっと昔の記事(一年前)の話だけど、少し思いついたので補足を。</p>

<p>このエントリではブログの「B!」ボタンに気をつけようって話だったけど、
<a href="http://b.hatena.ne.jp/entry/http://e0166.blog89.fc2.com/blog-entry-95.html">はてなブックマークのコメント欄</a>に
ブックマークレットを使ってるから平気だっていう記述がちらほら見つかったが、
それはちょっと違うんじゃないかなーと。</p>

<h2>ブックマークレットを使ってフィッシング</h2>

<p>例えばテスト用につくってみたページがあるのですが、</p>

<ul>
<li><a href="http://www.fraction.jp/log/2008/04/test.html">フィッシング用テストページ</a></li>
</ul>


<p>このページをポップアップ型のブックマークレットを利用してブックマークしてみてみると、
見事別サイトに飛ばされていることがわかる。</p>

<p>ポップアップされたページはURLの確認ができないので、
そのページが本物かどうかもわかりゃしない。オソロシイ。</p>

<p>しかもたった4行のスクリプトをサイトに追加するだけでおk。</p>

<pre><code class='prettyprint'>
window.oldOpen = window.open;
window.open = function(url, name, option) {
  window.oldOpen('http://www.fraction.jp/log/2008/04/phishing.html', name, option);
}
</code></pre>




        
        <div class="extendText">
            <p><a href="http://www.fraction.jp/log/archives/2008/04/03/1-52">more...</a></p>
        </div>
        
    ]]></content:encoded>
    <dc:subject>Program/JavaScript</dc:subject>
    <dc:creator>Yuanying</dc:creator>
    <dc:date>2008-04-03T01:52:14+09:00</dc:date>
  </item>
  <item rdf:about="http://www.fraction.jp/log/archives/2008/01/11/User_Script_for_usability">
    <title>ユーザビリティをちょこっと改善するユーザサイドスクリプト</title>
    <link>http://www.fraction.jp/log/archives/2008/01/11/User_Script_for_usability</link>
    <description>「ユーザビリティの大切さに気づいてもらう - inucaraの日記」を読んだところ、「オートフォーカス」をいつも私の作るウェブアプリケーションでは怠けて実装してないことに気がついた。確かに、ログイン画面とかでテキストフィールドにフォーカスが当たっていないと超不便！これからはちゃんと自分の作るアプリケーションでは、テキストフィールドをフォーカスしよう…。ユーザーサイドスクリプト今までならば話はそれで終わっていたのですが、少し考えてみるにウェブの画面でテキストフィールドがあった場合、フォーカスが当たっ...</description>
    <content:encoded><![CDATA[
        <p>「<a href="http://d.hatena.ne.jp/inucara/20080110/usability">ユーザビリティの大切さに気づいてもらう - inucaraの日記</a>」を読んだところ、「オートフォーカス」をいつも私の作るウェブアプリケーションでは怠けて実装してないことに気がついた。</p>
<p>確かに、ログイン画面とかでテキストフィールドにフォーカスが当たっていないと超不便！</p>
<p>これからはちゃんと自分の作るアプリケーションでは、テキストフィールドをフォーカスしよう…。</p>
<h2>ユーザーサイドスクリプト</h2>
<p>今までならば話はそれで終わっていたのですが、少し考えてみるにウェブの画面でテキストフィールドがあった場合、フォーカスが当たっていて困ることって少ないんじゃないだろうか？と思った。</p>
<p>むしろフォーカスがデフォルトで当たっていた方がいいんじゃない？？</p>
<p>そして今の私には簡単にブラウザの機能を追加する、強力なツールがある。そう、ユーザサイドスクリプトだ！</p>
<p>ってことで作ってみました。ページを開くたびにテキストフィールドがあったら強制的にフォーカスするスクリプト。</p>
<pre><code class='prettyprint'>// ==UserScript==
// @name        Input Focuser
// @author      Yuanying
// @namespace   http://www.fraction.jp/
// @description Focus input text field.
// @include     http://*
// @version     0.1
// ==/UserScript==

(function() {
  var inputs = document.getElementsByTagName('input');
  for (var i=0; i&lt;inputs.length; i++) {
    var input = inputs[i];
    if (input.getAttribute('type') == 'text') {
      input.focus();
      return;
    }
  }
})();</code></pre>
<p>ぶっちゃけやってることは簡単です。DOMを操作して一番最初にヒットしたテキストフィールドにフォーカスをあてるだけ。</p>
<h2>動作環境</h2>
<p>以下の環境で動作を確認しています。</p>
<ul><li>Mac OSX 10.5 + Safari 3.0.4 (5523.10.6) + GreaseKit 1.3</li></ul>
<h2>インストール</h2>
<p>最新版を以下からダウンロードしてください。</p>
<ul><li><a href='http://www.fraction.jp/repos/user_js/trunk/web_usability.user.js'>Web Usability Script</a></li></ul>
<h2>変更履歴</h2>
<dl><dt>ver 0.2.0.20080112</dt><dd>フォーカスを当てた時にスクロールが発生する場合にはフォーカスしないように修正。</dd><dt>ver 0.1.0.20080112</dt><dd>初期リリース。</dd></dl>
<h2>その他</h2>
<p>チェックボックスやラジオボタンの周辺のテキストにラベルを貼ったりとかもしてみたい。</p>
<h3>何でもオートフォーカスすれば良いってもんじゃない？</h3>
<p>何でもオートフォーカスするような環境になった事が無いので、ユーザビリティが悪くなるのかどうかわからない。ということで実験。</p>
<p>最初、フォーカスがあたるテキストフィールドがスクロールした場所にあると、ページがそこにスクロールしてしまうのでかえって使いづらいなと思ったけど、それを直してみたらなかなか。</p>

        
    ]]></content:encoded>
    <dc:subject>Program/JavaScript</dc:subject>
    <dc:creator>Yuanying</dc:creator>
    <dc:date>2008-01-11T18:41:27+09:00</dc:date>
  </item>
  <item rdf:about="http://www.fraction.jp/log/archives/2007/10/01/Safari_30Site_Alteration_CSS">
    <title>Safari 3.0でSite Alteration CSS</title>
    <link>http://www.fraction.jp/log/archives/2007/10/01/Safari_30Site_Alteration_CSS</link>
    <description>SafariStand 3.0a3でSite Alterationが復活したようだが、どうもうちのMacでは調子が悪いらしくちゃんと動作しない。そこでSite AlterationしてかけたいCSSをユーザスクリプトに変換して、Creammonkeyを通して利用する事にした。このアイディア自体は以前のエントリ (OSXライクなGoogle Readerテーマを「WebKit Nightly Builds」で使う) で利用した考え方だが、Userstyles.orgが提供するユーザスタイルシートをす...</description>
    <content:encoded><![CDATA[
        <p><a href='http://hetima.com/safari/stand.html'>SafariStand 3.0a3</a>でSite Alterationが復活したようだが、どうもうちのMacでは調子が悪いらしくちゃんと動作しない。そこでSite AlterationしてかけたいCSSをユーザスクリプトに変換して、Creammonkeyを通して利用する事にした。</p>
<p>このアイディア自体は以前のエントリ (<a href='http://www.fraction.jp/log/archives/2007/04/1117'>OSXライクなGoogle Readerテーマを「WebKit Nightly Builds」で使う</a>) で利用した考え方だが、<a href='http://userstyles.org/'>Userstyles.org</a>が提供するユーザスタイルシートをすべてユーザスクリプトの形でも提供しているのを見て触発された。</p>
<p>具体的には以下のスクリプトを使う。</p>
<h2>ソースコード</h2>
<pre><code class='prettyprint'>#!/usr/bin/env ruby
#
#  Created by Yuanying on 2007-10-01.
#  Copyright (c) 2007. All rights reserved.

require 'open-uri'

open(ARGV[0]) do |io|
  puts &lt;&lt;CSS
// ==UserScript==
// ==/UserScript==
var css = "#{io.read.gsub('"','\"').gsub(/\n/, "\" +\n\"")}";
if (typeof GM_addStyle != "undefined") {
	GM_addStyle(css);
} else if (typeof addStyle != "undefined") {
	addStyle(css);
} else {
	var heads = document.getElementsByTagName("head");
	if (heads.length &gt; 0) {
		var node = document.createElement("style");
		node.type = "text/css";
		node.appendChild(document.createTextNode(css));
		heads[0].appendChild(node); 
	}
}
CSS
end</code></pre>
<p>このスクリプトでスタイルシートをユーザスクリプトに変換してCreammonkeyに読み込ませる。</p>
<h2>使い方</h2>
<pre>$ ruby user_js_converter.rb http://www.fraction.jp/~yuanying/greader.css > greader.user.js</pre>

        
    ]]></content:encoded>
    <dc:subject>Apple</dc:subject>
    <dc:subject>Program/JavaScript</dc:subject>
    <dc:creator>Yuanying</dc:creator>
    <dc:date>2007-10-01T03:55:12+09:00</dc:date>
  </item>
  <item rdf:about="http://www.fraction.jp/log/archives/2007/08/1210">
    <title>機能拡張板はてブビューワ v0.4 をリリースしました</title>
    <link>http://www.fraction.jp/log/archives/2007/08/1210</link>
    <description>機能拡張板はてブビューワ v0.4 をリリースしました。あ、もしかしてOperaで動かなくなったかも…。変更点タグを表示するように修正タグクラウドを表示して欲しいという要望があったので、とりあえず暫定処置として個々のブックマークに対してつけられたタグを表示するように変更してみた。コメントがついていないブックマークも表示するように修正上記の修正に伴って、コメントがついてないブックマークにもタグがつけられている可能性があるので、すべてのブックマークを表示するように変更した。最小化/最大化の状態および初...</description>
    <content:encoded><![CDATA[
        <p><a href='http://www.fraction.jp/log/archives/2007/07/1191'>機能拡張板はてブビューワ</a> v0.4 をリリースしました。</p>
<p>あ、もしかしてOperaで動かなくなったかも…。</p>
<h2>変更点</h2>
<h3>タグを表示するように修正</h3>
<p>タグクラウドを表示して欲しいという要望があったので、とりあえず暫定処置として個々のブックマークに対してつけられたタグを表示するように変更してみた。</p>
<h3>コメントがついていないブックマークも表示するように修正</h3>
<p>上記の修正に伴って、コメントがついてないブックマークにもタグがつけられている可能性があるので、すべてのブックマークを表示するように変更した。</p>
<h3>最小化/最大化の状態および初期サイズ値を記憶するように修正</h3>
<p>たまにすべてのページに対してはてブビューワのウィンドウがしゃしゃり出てくるのがウザイなと感じたので、最小化/最大化状態と、初期サイズ値を記憶するように修正した。</p>
<p>最小化しておくと、ページを遷移しても最小化した状態が記憶されてるので便利。</p>
<p>あと、ドラッグして変更したウィンドウサイズもついでに記憶するようにしておいたので、わざわざソースをいじらなくても初期ウィンドウサイズを変更できるようになった。</p>
<h3>画像およびデザインに関するデータをすべてスタイルシートに外部化</h3>
<p>どっちにしろ埋め込んでるから外から見たら変わらないけど、メンテナンスが楽になった。</p>
<p>デザインも簡単に変えれるようになったのでカスタマイズするのも良いかも。</p>

        
    ]]></content:encoded>
    <dc:subject>Program/JavaScript</dc:subject>
    <dc:creator>Yuanying</dc:creator>
    <dc:date>2007-08-22T05:25:51+09:00</dc:date>
  </item>
  <item rdf:about="http://www.fraction.jp/log/archives/2007/08/1196">
    <title>はてブコメントビューワ をキープレスで起動</title>
    <link>http://www.fraction.jp/log/archives/2007/08/1196</link>
    <description>「機能拡張版 はてブコメントビューワ」をキープレスで起動 する修正方法を公開してくれてる人がいました。確かに開くページ全部 b.hatena.ne.jp に問い合わせるのは、たまにウザく感じたりします。(b.hatena.ne.jp に問い合わせて欲しくないページ開くときもあるしw) ので私も同じような修正を加えて、0 キーを押した時にコメントビューワを開くようにしてみました。なかなか具合がよろしいので trunk にもこの変更追加しようかなーと思わないでも無いんですが、問題が。Greasemon...</description>
    <content:encoded><![CDATA[
        <p><a href='http://d.hatena.ne.jp/mofigan/20070804'>「機能拡張版 はてブコメントビューワ」をキープレスで起動</a> する修正方法を公開してくれてる人がいました。</p>
<p>確かに開くページ全部 b.hatena.ne.jp に問い合わせるのは、たまにウザく感じたりします。(b.hatena.ne.jp に問い合わせて欲しくないページ開くときもあるしw) ので私も同じような修正を加えて、<code>0</code> キーを押した時にコメントビューワを開くようにしてみました。</p>
<p>なかなか具合がよろしいので trunk にもこの変更追加しようかなーと思わないでも無いんですが、問題が。</p>
<h2>Greasemonkey のキーバインディング変更はどこまで許されるか</h2>
<p>スクリプトをインストールしたユーザが <code>Ctr + d</code> とか <code>0</code> キーとかに機能を割り当てるのは良いんですけど、既存のウェブページとかなりかち合うんじゃないかとか。デフォルトでインストールした時に <code>Ctr + d</code> とか <code>0</code> キーに割り当ててるのはさすがにまずいよね…。</p>
<p>んで、割り当てられてなさそうな <code>Ctr + Shift + o</code> とかにしてみたら、今度は Safari で動かない。</p>
<h2>解決策</h2>
<p>とりあえず今考えてるのは「hatebu」と、キーを叩くとウィンドウが現れるようにしようかと。</p>
<p>ついでにウィンドウサイズ最適化や最小化もキープレスで行えるようにしたり。</p>

        
        <div class="extendText">
            <p><a href="http://www.fraction.jp/log/archives/2007/08/1196">more...</a></p>
        </div>
        
    ]]></content:encoded>
    <dc:subject>Program/JavaScript</dc:subject>
    <dc:creator>Yuanying</dc:creator>
    <dc:date>2007-08-06T04:45:52+09:00</dc:date>
  </item>
  <item rdf:about="http://www.fraction.jp/log/archives/2007/07/1191">
    <title>機能拡張版 はてブコメントビューワ</title>
    <link>http://www.fraction.jp/log/archives/2007/07/1191</link>
    <description>worris さん作の はてなブックマークコメントビューワの機能拡張板を作ってみました。機能オリジナルと比べて以下の点が拡張されています。ドラッグしてサイズ変更が可能なコメントウィンドウ。最小化ボタン。サイズ最適化ボタン。Mac OSX ライクなウィンドウ。動作環境以下の環境で動作を確認しています。Mac OSX 10.5 + Safari 3.0.4 (5523.10) + GreaseKit 1.4Mac OSX 10.5 + Firefox 3.0b2 + Greasemonkey 0.7....</description>
    <content:encoded><![CDATA[
        <p>worris さん作の <a href='http://worris.sakura.ne.jp/hbcview.html'>はてなブックマークコメントビューワ</a>の機能拡張板を作ってみました。</p>
<p><img src='http://www.fraction.jp/log/2007/07/hatebu-viewer.png' width='380' height='313' alt='Hatena Bookmark Comments Viewer with OSX like thema.' /></p>
<h2>機能</h2>
<p>オリジナルと比べて以下の点が拡張されています。</p>
<ul><li>ドラッグしてサイズ変更が可能なコメントウィンドウ。</li><li>最小化ボタン。</li><li>サイズ最適化ボタン。</li><li>Mac OSX ライクなウィンドウ。</li></ul>
<h2>動作環境</h2>
<p>以下の環境で動作を確認しています。</p>
<ul><li>Mac OSX 10.5 + Safari 3.0.4 (5523.10) + <a href='http://8-p.info/greasekit/'>GreaseKit</a> 1.4</li><li>Mac OSX 10.5 + Firefox 3.0b2 + <a href='https://addons.mozilla.org/ja/firefox/addon/748'>Greasemonkey</a> 0.7.20080121.0</li><li>Mac OSX 10.4.10 + <a href='http://jp.opera.com/'>Opera</a> 9.22</li></ul>
<p>機能拡張板 はてブコメントビューワを利用するのには Greasemonkey をインストールした Firefox、もしくは GreaseKit をインストールした Safari、または Opera が必要です。</p>
<h3>参考</h3>
<ul><li><a href='http://www.fraction.jp/log/archives/2007/11/05/GreaseKit_for_Leopard'>LeopardでGreaseKitを動かす</a></li></ul>
<h2>ダウンロード</h2>
<ul>
<li>
<script type="text/javascript">
google_ad_client = "pub-7301724253634317";
google_ad_output = "textlink";
google_ad_format = "ref_text";
google_cpa_choice = "CAAQrcyNyQIaCP8u7NAymfG-KJG44YcBMAA";
</script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</li>
</ul>
<h3>最新バージョン</h3>
<ul><li><a href='http://www.fraction.jp/repos/hatebu.viewer/tags/REL-0.4.3/hatebu-viewer.user.js'>機能拡張板 はてブコメントビューワ ver 0.4.3.20080227</a></li></ul>
<h3>古いバージョン</h3>
<ul><li><a href='http://www.fraction.jp/repos/hatebu.viewer/tags/REL-0.4.2/hatebu-viewer.user.js'>機能拡張板 はてブコメントビューワ ver 0.4.2.20080204</a></li><li><a href='http://www.fraction.jp/repos/hatebu.viewer/tags/REL-0.4.1/hatebu-viewer.user.js'>機能拡張板 はてブコメントビューワ ver 0.4.1.20080122</a></li><li><a href='http://www.fraction.jp/repos/hatebu.viewer/tags/REL-0.4.0/hatebu-viewer.user.js'>機能拡張板 はてブコメントビューワ ver 0.4.0.20070822</a></li><li><a href='http://www.fraction.jp/repos/hatebu.viewer/tags/REL-0.3.2/hatebu-viewer.user.js'>機能拡張板 はてブコメントビューワ ver 0.3.2.20070728</a></li><li><a href='http://www.fraction.jp/repos/hatebu.viewer/tags/REL-0.3.1/hatebu-viewer.user.js'>機能拡張板 はてブコメントビューワ ver 0.3.1.20070727</a></li><li><a href='http://www.fraction.jp/repos/hatebu.viewer/tags/REL-0.2.0/hatebu-viewer.user.js'>機能拡張板 はてブコメントビューワ ver 0.2.0.20070726</a></li></ul>
<h2>変更履歴</h2>
<dl>
<dt>ver 0.4.3.20080227</dt>
<dd><a href="http://www.fraction.jp/trac/rana2/ticket/15 title="View ticket">#15</a> GreaseMonkey のセキュリティアップデートに対応。(Thx k0y さん)</dd>
<dt>ver 0.4.2.20080204</dt>
<dd><a href="http://www.fraction.jp/trac/rana2/ticket/12" title="View ticket">#12</a> GM_setValue関数の不具合修正。</dd>
<dt>ver 0.4.1.20080122</dt>
<dd>GreaseKit 1.4に対応。(GM_*Value関数が無い場合にも動作するように修正。)</dd>
<dt>ver 0.4.0.20070822</dt>
<dd>タグを表示するように修正。</dd>
<dd>コメントがついていないブックマークも表示するように修正。</dd>
<dd>最小化/最大化の状態および初期サイズ値を記憶するように修正。</dd>
<dd>画像およびデザインに関するデータをすべてスタイルシートに外部化。</dd>
<dt>ver 0.3.2.20070728</dt>
<dd>文字サイズ変更時にタイトルバーのデザインが崩れる問題修正。</dd>
<dd><del>というか、間違えて REL-0.3.1を直接修正してしまった罠。</del></dd>
<dt>ver 0.3.1.20070727</dt>
<dd>最適サイズ変更時のバグ修正。</dd>
<dd>タイトルバーのデザイン修正。</dd>
<dd>一部のサイトでデザインが崩れるバグ修正。</dd>
<dt>ver 0.2.0.20070726</dt>
<dd>初期リリース。</dd>
</dl>
<h2>検討課題</h2>
<ul><li><a href='http://www.fraction.jp/trac/rana2/query?status=new&status=assigned&status=reopened&component=hatebu.viewer&order=priority'>チケット</a></li></ul>
<p>tracで管理しているので、バグや機能改善などの希望がありましたら気軽に<a href='http://www.fraction.jp/trac/rana2/newticket'>チケット切って</a>ください。</p>
<h3>Safari 2.x で動かない</h3>
<ul><li>最大化しようとすると開きすぎてしまう。</li></ul>
<h3>毎回はてブにアクセスしてうざい</h3>
<p><a href='http://d.hatena.ne.jp/mofigan/20070804'>「機能拡張版 はてブコメントビューワ」をキープレスで起動</a>より。</p>
<p>現在はGreaseMonkey/Creammonkeyの機能で自分で非有効化すればいいんじゃないかな、と思ってるが暇だったらキープレスで表示/非表示モードを変更できるように修正する予定。</p>
<h3>はてブ以外のサービスへの対応</h3>
<p>確か他の同じようなGreasemonkeyスクリプトでやってた気がする。それ参考にすればすぐにできそうなので暇だったらやる。</p>
<h3>タグクラウド表示機能</h3>
<p>そのページにつけられてるタグをクラウド表示？</p>
<p>とりあえずブックマークにつけられた個々のタグは、表示するように変更。</p>
<h2>ライセンス</h2>
<p>オリジナルのライセンスに準じます。</p>
<script type="text/javascript">
google_ad_client = "pub-7301724253634317";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_cpa_choice = "CAEQpdWw2wIQ6dSw2wIQrdSw2wIQ8dOw2wIQtdOw2wIQ-dKw2wIQvdKw2wIQgdKw2wIQxdGw2wIaCIYk_Rhoc0yzKMG793Mowbv3cyjBu_dzKMG793Mowbv3cyjBu_dzKMG793Mowbv3cyjBu_dz";
</script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>

        
    ]]></content:encoded>
    <dc:subject>Program/JavaScript</dc:subject>
    <dc:creator>Yuanying</dc:creator>
    <dc:date>2007-07-26T01:33:06+09:00</dc:date>
  </item>
</rdf:RDF>

