2010/11/30 火曜日

日記

Filed under: 日記 — staki @ 1:31:58

どうと言うことでもないのだけど。

久方ぶりに相方ちゃんと横須賀をうろうろして、以前何度か一緒に行った竜王ラーメンのとなりの田島家に行きたいという事になって食ってきた訳だけども、すごく久々に行ったんだけど、やっぱ断然竜王の方がウマいと思うんだけどなあ。

味噌っつってのに醤油が来たので、まあいいかと思って食べたんだけど、うーん。ベースは悪くないんだけども。なんか結構田島家派が多い模様なんで不思議なんだけども、あそこは何がおすすめなんだろうか。

***

シンプルな醤油でおいしいと言うと、北武の前略おいしいので近所の人は行くとよろしい。ついでにその近所の定食屋お太幸も。久々に食いたいのだけど、なかなか向こうは行く機会が無くなってしまった。

2010/11/26 金曜日

[haskell]pocket pc 用 の hugs

Filed under: プログラミング — staki @ 0:09:56

Haskell ML の古い記事を見かけて是非とも使いてえと思ったらリンク切れだったので、作者の人にメールでお願いしたら、実に気持ち良くソースを公開して頂いた。ケニー実にいい奴!

http://code.google.com/p/ppchugs/

何分古いものなので、Embedded Visual Tools 3.0 が必要らしいのだけど、どうも見当たらないので 4.0 をダウンロードしてインスコロールしたところ。動いたら楽しかろうなあ。

***

頂いたのは良いのだけれど、クロスコンパイル的なクロスコンパイルとか殆ど初めて(.netアプリだの java の類は別として)な訳で、さてどうなることやら。

アドエスで動けばいいけども…フルキーでちっこいのって他に何かあったっけか?
ジョルナダとかシグマリオンだと大きさ的に NetWalker 持ってるしなみたいな。

***

この手のお楽しみは WindowsMobile(PocketPC)の独擅場だと思ってたんだけども、最近は Android でも色々動くらしい。でも haskell はまだらしい。でも haskell はまだらしい。ククク

2010/11/4 木曜日

Webrick と Instapaper で ldr を端から全文化 proxy (多分役には立たない)

Filed under: インターネット,プログラミング — staki @ 2:15:22

以前書いた似たようなもの(ldr の画像を先読みでキャッシュ(/api/unread?prefetch契機で))と同じく、同じような契機で、ldr から受け取った json のエントリ本文部分を Instapaper に差し替えるナニ。使い方も大体同じ。

ただ、先に言っておくと普通はあんまり役に立たない。

  • すごい遅い。
    Instapaper に差し替えるために、エントリ URL の数だけ Instapaper にアクセスするので。
  • 想像ほど完璧とまでは行かない。
    結構頻繁にプチアク禁ぽいのとかページサイズ超過ぽいのに出くわす。
  • j, k キーあたりが影響を受ける。
    変換結果の id=story をガバッと入れているせいで。要はタイトルが増えちゃうので。
  • 常用するとたぶん規制食らう気がする。

丸ごと rss も LdrFullFeed も使えない・使いたくない状況で、通すと勝手にペロっと変換されるのはまあ、役に立つこともあったりなかったりするかなと言う程度で。
Instapaper を信じるとすれば毒抜きもしなくていいはずだし。

まあ Webrick で中継器書くの簡単で良いですとか、RSS リーダーは中継器が頑張ると色々出来ますねと言うコンセプト版的なものです。
変換メソッドを多段階にして毒抜き処理足して、取得用スレッド処理足して、夜間バッチで補助して、SSLで認証ありにして表に置くとかすれば結構実用になんのかなあ(別物)。

https://gist.github.com/661238

#!/bin/ruby
# -*- coding: utf-8 -*-

require 'webrick'
require 'webrick/httpproxy'
require 'simple-json'
require 'zlib'
require 'stringio'
require 'rubygems'
require 'hpricot'
require 'open-uri'
#require 'thread'
require 'uri'

$WEBRICK_PROXY = nil #'http://localhost:8123/'
$INSTAPAPER_PROXY = nil #'http://localhost:8080/'
$INSTAPAPER_URL = 'http://www.instapaper.com/text?u='
$log = $stdout # open("./errlog.log", "a")
$REG_Uri_Component =/[^0-9a-zA-Z!'()*-._~]/

def debugLog(str)
  $log.puts str
end

def instap(req, res)
  if req.unparsed_uri =~ %r!reader.livedoor.com! and
      req.path =~ %r!/api/unread! and
      req.query_string =~ %r!prefetch! and
      res['content-type'] =~ %r!text/javascript!

    buf = JsonParser.new.parse(
            Zlib::GzipReader.wrap(
              StringIO.new(res.body)){|z|z.read})
    buf['items'].collect! do |i|
      begin
        url = $INSTAPAPER_URL + URI.escape(i['link'], $REG_Uri_Component)
        debugLog '*' + url
        html = OpenURI.open_uri(url,{"Referer" => url,:proxy => $INSTAPAPER_PROXY}){|sio| sio.read }
        i['body'] =  (Hpricot(html)/'#story').inner_html +
          '<p>Instapaper で全文化しました。<a href="' + url + '"></p>'
        i
      rescue => e
        debugLog e.to_str
      end
    end
    Zlib::GzipWriter.wrap(StringIO.new(res.body)){|gz|
      gz.write(JsonBuilder.new.build(buf))
      res['content-length'] = gz.tell
    }
  end
end

handler = Proc.new() do |req,res|
  instap req, res
end

arg = {
  :ProxyContentHandler => handler ,
  :Logger => WEBrick::Log::new($log, WEBrick::Log::DEBUG)
}
arg[:ProxyURI] = URI.parse($WEBRICK_PROXY) if $WEBRICK_PROXY

s = WEBrick::HTTPProxyServer.new(arg)
Signal.trap('INT') do
  s.shutdown
end

s.start

Powered by WordPress

stakilog