<?xml version="1.0" encoding="utf-8" ?>


<?xml-stylesheet href="/higeorange/rssxsl" type="text/xsl" media="screen"?>


<rdf:RDF
	xmlns="http://purl.org/rss/1.0/"
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xml:lang="ja">
<channel rdf:about="http://orera.g.hatena.ne.jp/higeorange/rss">
	<title>opera:hige</title>
	<link>http://orera.g.hatena.ne.jp/higeorange/</link>
	<description>opera:hige</description>

	<dc:creator>higeorange</dc:creator>
	<items>
	<rdf:Seq>
		<rdf:li rdf:resource="http://orera.g.hatena.ne.jp/higeorange/20090607/1244382997"/>
		<rdf:li rdf:resource="http://orera.g.hatena.ne.jp/higeorange/20090607/1244357432"/>
		<rdf:li rdf:resource="http://orera.g.hatena.ne.jp/higeorange/20090530/1243611450"/>
		<rdf:li rdf:resource="http://orera.g.hatena.ne.jp/higeorange/20090515/1242392238"/>
		<rdf:li rdf:resource="http://orera.g.hatena.ne.jp/higeorange/20090511/1242025329"/>
	</rdf:Seq>
	</items>
</channel>
<item rdf:about="http://orera.g.hatena.ne.jp/higeorange/20090607/1244382997">
	<title>[userjs] フィードプレビューなしで Opera Mail にフィードを登録する</title>
	<link>http://orera.g.hatena.ne.jp/higeorange/20090607/1244382997</link>
	<description> // ==UserScript== // @name quick add to Opera Mail // @namespace http://opera.higeorange.com/ // @include * // ==/UserScript== (function() { if(window.opera &amp;&amp; opera.feeds &amp;&amp; (select = document.getElementById(&#39;readers&#39;))) { opera.feeds.su</description>

	<content:encoded><![CDATA[
		<div class="section">
<pre class="syntax-highlight">
<span class="synComment">// ==UserScript==</span>
<span class="synComment">// @name      quick add to Opera Mail</span>
<span class="synComment">// @namespace http://opera.higeorange.com/</span>
<span class="synComment">// @include   *</span>
<span class="synComment">// ==/UserScript==</span>

(<span class="synIdentifier">function</span>() <span class="synIdentifier">{</span>
    <span class="synStatement">if</span>(<span class="synStatement">window</span>.opera &amp;&amp; opera.feeds &amp;&amp; (select = <span class="synStatement">document</span>.getElementById(<span class="synConstant">'readers'</span>))) <span class="synIdentifier">{</span>
	opera.feeds.subscribeNative(<span class="synStatement">location</span>.href);
	<span class="synComment">// location.href = 'http://reader.livedoor.com/subscribe/' + location.href; こう書けば外部のサービスでもいける</span>
	history.back(); <span class="synComment">// 元のページに戻る場合</span>
    <span class="synIdentifier">}</span>
<span class="synIdentifier">}</span>)();
</pre>

			<p>外部サービスを使うんだったら，ブックマークレットでいいんだけどね。</p>
		</div>
]]></content:encoded>

	<dc:creator>higeorange</dc:creator>
	<dc:date>2009-06-07T22:56:37+09:00</dc:date>
	<dc:subject>userjs</dc:subject>
</item>
<item rdf:about="http://orera.g.hatena.ne.jp/higeorange/20090607/1244357432">
	<title>[userjs] フィード追加画面に自分の好きな フィードリーダーを追加してみる</title>
	<link>http://orera.g.hatena.ne.jp/higeorange/20090607/1244357432</link>
	<description> Opera 10 Beta*1になってから フィードを表示させたときに色々なフィードリーダーで購読できるオプションが付いたのでそれに自分の好きなものを追加できる UserJS を書いてみた。 // ==UserScript=</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p><a class="keyword" href="http://orera.g.hatena.ne.jp/keyword/Opera">Opera</a> 10 Beta<span class="footnote"><a href="http://orera.g.hatena.ne.jp/higeorange/#f1" name="fn1" title="正確にはちょっと前?">*1</a></span>になってから フィードを表示させたときに色々なフィードリーダーで購読できるオプションが付いたのでそれに自分の好きなものを追加できる <a class="keyword" href="http://orera.g.hatena.ne.jp/keyword/UserJS">UserJS</a> を書いてみた。</p>			<br>

			<p><a href="http://f.hatena.ne.jp/higeorange/20090607154516" class="hatena-fotolife" target="_blank"><img src="http://f.hatena.ne.jp/images/fotolife/h/higeorange/20090607/20090607154516.jpg" alt="f:id:higeorange:20090607154516j:image" title="f:id:higeorange:20090607154516j:image" class="hatena-fotolife"></a></p>			<br>

<pre class="syntax-highlight">
<span class="synComment">// ==UserScript==</span>
<span class="synComment">// @name      add more feedreaders</span>
<span class="synComment">// @namespace http://opera.higeorange.com/</span>
<span class="synComment">// @include   *</span>
<span class="synComment">// ==/UserScript==</span>

(<span class="synIdentifier">function</span>() <span class="synIdentifier">{</span>
    <span class="synIdentifier">var</span> select;
    <span class="synIdentifier">var</span> feed_readers = <span class="synIdentifier">{</span>
        <span class="synConstant">'livedoor Reader'</span>: <span class="synConstant">'http://reader.livedoor.com/subscribe/%u'</span>,
    <span class="synIdentifier">}</span>;
    <span class="synStatement">if</span>(<span class="synStatement">window</span>.opera &amp;&amp; opera.feeds &amp;&amp; (select = <span class="synStatement">document</span>.getElementById(<span class="synConstant">'readers'</span>))) <span class="synIdentifier">{</span>
        <span class="synStatement">for</span>(<span class="synIdentifier">var</span> i <span class="synStatement">in</span> feed_readers) <span class="synIdentifier">{</span>
            select.appendChild(<span class="synStatement">new</span> Option(i, feed_readers<span class="synIdentifier">[</span>i<span class="synIdentifier">]</span>.replace(<span class="synConstant">'%u'</span>, <span class="synStatement">location</span>.href)));
        <span class="synIdentifier">}</span>
    <span class="synIdentifier">}</span>
<span class="synIdentifier">}</span>)();
</pre>

			<p>追加する場合, feed_readers オブジェクトに キーに名前、バリューに購読するときの URL を書く。URL の %u 部分がフィードの URL になる。</p>
		</div>
		<div class="footnote">
			<p class="footnote"><a href="http://orera.g.hatena.ne.jp/higeorange/#fn1" name="f1">*1</a>：正確にはちょっと前?</p>
		</div>
]]></content:encoded>

	<dc:creator>higeorange</dc:creator>
	<dc:date>2009-06-07T15:50:32+09:00</dc:date>
	<dc:subject>userjs</dc:subject>
</item>
<item rdf:about="http://orera.g.hatena.ne.jp/higeorange/20090530/1243611450">
	<title>[widget] タイマーウィジェット テスト</title>
	<link>http://orera.g.hatena.ne.jp/higeorange/20090530/1243611450</link>
	<description> widget.hide() した後, widget.show() するとそのウィジェットは必ずアクティブになる。(すべての環境でそうなるかどうか未確認, WindowsXP + Opera 10.0 alpha で確認)。これを利用してタイマーアプリが</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>widget.hide() した後, widget.show() するとその<a class="keyword" href="http://orera.g.hatena.ne.jp/keyword/%e3%82%a6%e3%82%a3%e3%82%b8%e3%82%a7%e3%83%83%e3%83%88">ウィジェット</a>は必ずアクティブになる。(すべての環境でそうなるかどうか未確認, WindowsXP + <a class="keyword" href="http://orera.g.hatena.ne.jp/keyword/Opera">Opera</a> 10.0 alpha で確認)。これを利用してタイマーアプリができるんじゃないと思って作ってみた。</p>			<br>

			<p><a href="http://opera.higeorange.com/widgets/timer.zip" target="_blank">ダウンロード</a></p>
		</div>
]]></content:encoded>

	<dc:creator>higeorange</dc:creator>
	<dc:date>2009-05-30T00:37:30+09:00</dc:date>
	<dc:subject>widget</dc:subject>
</item>
<item rdf:about="http://orera.g.hatena.ne.jp/higeorange/20090515/1242392238">
	<title>[widget] FriendFeed 用ウィジェット作った</title>
	<link>http://orera.g.hatena.ne.jp/higeorange/20090515/1242392238</link>
	<description> 最近, FriendFeedがはやってるかもしれないと思い作ってみた。 (イメージ画像) ダウンロード 注意: バグがふんだんに含まれています。 実装した機能 ユーザフィード閲覧 (http://friendfeed.com/[user</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>最近, FriendFeedがはやってるかもしれないと思い作ってみた。</p>
			<p><a href="http://f.hatena.ne.jp/higeorange/20090518212649" class="hatena-fotolife" target="_blank"><img src="http://f.hatena.ne.jp/images/fotolife/h/higeorange/20090518/20090518212649.jpg" alt="f:id:higeorange:20090518212649j:image" title="f:id:higeorange:20090518212649j:image" class="hatena-fotolife"></a></p>
			<p>(イメージ画像)</p>			<br>

			<p><a href="http://opera.higeorange.com/widgets/friendfeed/friendfeed-20090518-1.zip" target="_blank">ダウンロード</a></p>
			<p>注意: バグがふんだんに含まれています。</p>			<br>

			<h4>実装した機能</h4>
			<ul>
				<li>ユーザフィード閲覧 (http://friendfeed.com/[username] で表示されるもの)</li>
				<li>ユーザフレンドフィード閲覧 (http://friendfeed.com/ で表示されるもの)</li>
			</ul>
			<h4>更新履歴</h4>
			<ul>
				<li>20090518-1
				<ul>
					<li>デザイン修正 (アイコンは <a href="http://www.famfamfam.com/lab/icons/silk/" target="_blank">famfamfam.com: Silk Icons</a> を使った。)</li>
					<li>tinyurl など短縮 URL 展開を停止。確認中</li>
				</ul>
				</li>
			</ul>
			<h4>これから</h4>
			<ul>
				<li>キャッシュ機能をつける。今はリロードするとすべて古いのが消える状態。</li>
				<li>デザインをもっとどうにかする。</li>
				<li>ポスト機能</li>
				<li>フィルター機能 (ユーザ, サービスで絞込み)</li>
				<li>ユーザアイコン</li>
				<li>気が向けばもっと</li>
			</ul>
			<p>jQuery を使った。</p>
		</div>
]]></content:encoded>

	<dc:creator>higeorange</dc:creator>
	<dc:date>2009-05-15T21:57:18+09:00</dc:date>
	<dc:subject>widget</dc:subject>
</item>
<item rdf:about="http://orera.g.hatena.ne.jp/higeorange/20090511/1242025329">
	<title>Speed dial + livedoor Readr or Weather</title>
	<link>http://orera.g.hatena.ne.jp/higeorange/20090511/1242025329</link>
	<description> Speed Dial の 使いかたを考えてみる - opera:hige - チーム俺等 にコードを張っていなかったことにコメントがきて気づいた。 Thx, LDRマニア. ちょっと手直ししてはっつけとく。 livedoor Reader 未読 #</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p><a href="http://orera.g.hatena.ne.jp/higeorange/20070516/1179245238" target="_blank"> Speed Dial の 使いかたを考えてみる - opera:hige - チーム俺等</a> にコードを張っていなかったことにコメントがきて気づいた。 Thx, LDRマニア.</p>
			<p>ちょっと手直ししてはっつけとく。</p>
			<h4><a class="keyword" href="http://orera.g.hatena.ne.jp/keyword/livedoor">livedoor</a> Reader 未読</h4>
<pre class="syntax-highlight">
<span class="synPreProc">#!/usr/local/bin/ruby</span>
 
<span class="synPreProc">require</span> <span class="synSpecial">'</span><span class="synConstant">open-uri</span><span class="synSpecial">'</span> 

username = <span class="synSpecial">&quot;</span><span class="synConstant">higeorange</span><span class="synSpecial">&quot;</span> <span class="synComment"># livedoor のユーザネーム</span>
p = <span class="synIdentifier">URI</span>.parse(<span class="synSpecial">&quot;</span><span class="synConstant">http://rpc.reader.livedoor.com/notify?user=</span><span class="synSpecial">#{username}&quot;</span>).read
unread = p[<span class="synSpecial">%r{</span><span class="synConstant">\d+</span><span class="synSpecial">}i</span>]
print <span class="synSpecial">&quot;</span><span class="synConstant">Content-Type: text/html</span><span class="synSpecial">\n\n&quot;</span>
print <span class="synSpecial">%Q{</span><span class="synConstant">&lt;html&gt;&lt;head&gt;&lt;title&gt;livedoor reader Unread&lt;/title&gt;</span><span class="synSpecial">}</span>
print <span class="synSpecial">&quot;</span><span class="synConstant">&lt;/head&gt;&lt;body&gt;</span><span class="synSpecial">&quot;</span>
print <span class="synSpecial">%Q{</span><span class="synConstant">&lt;p style=&quot;font-size:300px&quot;&gt;</span><span class="synSpecial">#{unread}</span><span class="synConstant">&lt;/p&gt;</span><span class="synSpecial">}</span>
print <span class="synSpecial">&quot;</span><span class="synConstant">&lt;/body&gt;&lt;/html&gt;</span><span class="synSpecial">&quot;</span>
</pre>

			<h4>天気</h4>
<pre class="syntax-highlight">
<span class="synPreProc">#!/usr/local/bin/ruby                                                              </span>
<span class="synPreProc">require</span> <span class="synSpecial">'</span><span class="synConstant">open-uri</span><span class="synSpecial">'</span>
<span class="synPreProc">require</span> <span class="synSpecial">'</span><span class="synConstant">rexml/document</span><span class="synSpecial">'</span>

city_number = <span class="synConstant">70</span> <span class="synComment"># http://weather.livedoor.com/forecast/rss/forecastmap.xml 参照</span>
url = <span class="synSpecial">&quot;</span><span class="synConstant">http://weather.livedoor.com/forecast/webservice/rest/v1?city=</span><span class="synSpecial">#{city_number.to_s}</span><span class="synConstant">&amp;day=</span><span class="synSpecial">&quot;</span>
date = <span class="synIdentifier">Time</span>.now
<span class="synStatement">if</span> date.hour &lt; <span class="synConstant">12</span> <span class="synComment"># 昼12 時までは今日の天気、それ以降は明日の天気</span>
    url += <span class="synSpecial">'</span><span class="synConstant">today</span><span class="synSpecial">'</span>
<span class="synStatement">else</span>
    url += <span class="synSpecial">'</span><span class="synConstant">tomorrow</span><span class="synSpecial">'</span>
<span class="synStatement">end</span>

xml = <span class="synIdentifier">URI</span>.parse(url).read
wt = <span class="synIdentifier">REXML</span>::<span class="synIdentifier">Document</span>.new(xml).root
tt = wt.elements[<span class="synSpecial">'</span><span class="synConstant">./image/title</span><span class="synSpecial">'</span>].text
to = wt.elements[<span class="synSpecial">'</span><span class="synConstant">./image/url</span><span class="synSpecial">'</span>].text
tc = wt.elements[<span class="synSpecial">'</span><span class="synConstant">./title</span><span class="synSpecial">'</span>].text
tmax = wt.elements[<span class="synSpecial">'</span><span class="synConstant">./temperature/max/celsius</span><span class="synSpecial">'</span>].text
tmin = wt.elements[<span class="synSpecial">'</span><span class="synConstant">./temperature/min/celsius</span><span class="synSpecial">'</span>].text

print <span class="synSpecial">&quot;</span><span class="synConstant">Content-Type: text/html</span><span class="synSpecial">\n\n&quot;</span>
print <span class="synSpecial">&quot;</span><span class="synConstant">&lt;html&gt;&lt;head&gt;</span><span class="synSpecial">&quot;</span>
print <span class="synSpecial">%Q{</span><span class="synConstant">&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;charset=UTF-8&quot;&gt;</span><span class="synSpecial">}</span>
print <span class="synSpecial">&quot;</span><span class="synConstant">&lt;title&gt;Weather&lt;/title&gt;&lt;/head&gt;&lt;body&gt;</span><span class="synSpecial">&quot;</span>
print <span class="synSpecial">%Q{</span><span class="synConstant">&lt;h1 style=&quot;font-size:80px&quot;&gt;</span><span class="synSpecial">#{tc}</span><span class="synConstant">&lt;/h1&gt;</span><span class="synSpecial">}</span>
print <span class="synSpecial">%Q{</span><span class="synConstant">&lt;p&gt;&lt;img src=&quot;</span><span class="synSpecial">#{to}</span><span class="synConstant">&quot; alt=&quot;</span><span class="synSpecial">#{tt}</span><span class="synConstant">&quot; width=&quot;600&quot; heigth=&quot;600&quot;&gt;&lt;/p&gt;</span><span class="synSpecial">}</span>
print <span class="synSpecial">%Q{</span><span class="synConstant">&lt;p style=&quot;font-size: 80px&quot;&gt;最高/最低気温: </span><span class="synSpecial">#{tmax}</span><span class="synConstant">/</span><span class="synSpecial">#{tmin}</span><span class="synConstant">&lt;/p&gt;</span><span class="synSpecial">}</span>
print <span class="synSpecial">&quot;</span><span class="synConstant">&lt;/body&gt;&lt;/html&gt;</span><span class="synSpecial">&quot;</span>
</pre>
			<br>

			<h4> sinatra 編</h4>
			<p>これだけだとあれなんで sinatra で未読数を JSON で返すのもやってみた。</p>
<pre class="syntax-highlight">
<span class="synPreProc">require</span> <span class="synSpecial">'</span><span class="synConstant">open-uri</span><span class="synSpecial">'</span>
<span class="synPreProc">require</span> <span class="synSpecial">'</span><span class="synConstant">rubygems</span><span class="synSpecial">'</span>
<span class="synPreProc">require</span> <span class="synSpecial">'</span><span class="synConstant">sinatra</span><span class="synSpecial">'</span>
<span class="synPreProc">require</span> <span class="synSpecial">'</span><span class="synConstant">haml</span><span class="synSpecial">'</span>

get <span class="synSpecial">'</span><span class="synConstant">/ldr/:username</span><span class="synSpecial">'</span> <span class="synStatement">do</span>
  <span class="synIdentifier">@username</span> = params[<span class="synIdentifier">:username</span>]
  p = <span class="synIdentifier">URI</span>.parse(<span class="synSpecial">&quot;</span><span class="synConstant">http://rpc.reader.livedoor.com/notify?user=</span><span class="synSpecial">#{@username}&quot;</span>).read
  <span class="synIdentifier">@unread</span> = p[<span class="synSpecial">%r{</span><span class="synConstant">\d+</span><span class="synSpecial">}i</span>]
  <span class="synIdentifier">@callback</span> = params[<span class="synIdentifier">:callback</span>]
  content_type(<span class="synSpecial">'</span><span class="synConstant">text/javascript; charset=utf-8</span><span class="synSpecial">'</span>)
  erb <span class="synIdentifier">:ldr</span>
<span class="synStatement">end</span>
</pre>

			<h5> views/ldr.erb</h5>
<pre>
&#60;%= @callback %&#62;({&#34;unread&#34;: &#60;%= @unread %&#62;})
</pre>

			<h5>実際に動いている例</h5>
			<p><a href="http://sinatra.higeorange.com/ldr/higeorange?callback=unread" target="_blank">http://sinatra.higeorange.com/ldr/higeorange?callback=unread</a></p>			<br>

			<p>なお XREA で sinatra を動かすのに参考にした記事</p>
			<ul>
				<li><a href="http://dgames.jp/dan/?permalink&date=20090508_01" target="_blank">Sinatraをさくらインターネットで動かしたときのメモ - Jewel-mmo開発日記</a></li>
				<li><a href="http://bangbangshoot.sakura.ne.jp/tdiary/?date=20090426" target="_blank">これ日記なん？ - sinatra+cgiが動いた... , さくらインターネットでsinatra , さくらインターネットでsinatra 2</a></li>
			</ul>

		</div>
]]></content:encoded>

	<dc:creator>higeorange</dc:creator>
	<dc:date>2009-05-11T16:02:09+09:00</dc:date>
</item>
</rdf:RDF>
