BLOGTIMES
«Prev || 1 · 2 · 3 · 4 · 5 ·... | | Next»
2010/03/14
[ by hsur at 16:31]

Google Apps Scriptで超簡易版RSSリーダーを書いてみた

 

先日、Google Apps Scriptを調べていて、他サイトからデータを引っ張ってこれることが分かったので、試しにRSSを他サイトから引っ張ってくるスクリプトを書いてみました

XMLの解析にXPathとか使えないので、現状ではXMLの解釈がかなりハードコーディングになってしまっているものの、こんな感じで実装できるんだなぁということは確認できました。そのほかにも、User-Agentが標準で出力されないので、自分のサーバにHTTPコネクションが弾かれたり、日本語の情報がきわめて少なかったりと、色々ハマるポイントは尽きないと思います。

最終的に出来たのは下記のような、スプレッドシートの左上のセル(A1)にRSSのURLを入力して、Fetchボタンを押すとRSSを取得して、A2に以下にタイトル、B2以下にURLを出力するというもの。

超簡易RSSリーダー完成版

以下完成までのメモ。

 [続きを読む...]
Category: Tips | | Comment(0) | TrackBack(0) | Permalink |
2010/03/12
[ by hsur at 20:07]

32bit版Windows7で有効活用できないメモリをRAM Diskにしてみた

 
システムのプロパティ

X200にメモリ4GBつけているものの、使っているWindows7が32bit版なので1G近く何もできないメモリがあるような状態だった(画像参照)のですが、ググって調べてみるとそのような領域をRAM Diskとして活用できるらしいので、下記のまとめを参考にRAMディスクの作成に挑戦してみました。

Gavotte Ramdisk まとめWIKI - まとめ(仮)

ram4g.regを実行 (続行確認が数度表示されるので、はい、OK とかクリック)
ramdisk.exeを実行(Vistaは右クリックから「管理者として実行」)
[Install Ramdisk]ボタンをクリック (20秒程度掛かります)
FixedMediaを選択 16MBなり適当に設定 (デフォルトでそうなっていますが、念のため確認のこと)
[OK]ボタンをクリック (「Success」と表示がでるのでOKをクリック)
再起動

自分の場合はNTFSにしたかったので、再起動する前に下記の内容をcmd.exeから実行*1しました。

FORMAT /FS:NTFS /Q /V:RamDisk /A:512 V:
CHKDSK /L:2048 V:
CACLS V:\ /G "NT AUTHORITY\authenticated users:F"
MKDIR V:\TEMP
rdutil V: registry

上記を調べていてCACLSコマンドを使うとNTFSのACLが編集できるというのがわかったのは収穫でした。

あとは環境変数でTEMPやTMPを移行したり、IEのTemporary Internet FilesをRAMディスクに移行しました。読み書きが多い部分なのでちょっとはSSDの寿命延長になるかもしれません。開発関連のtmpもこっちに移行してしまおうと思います。

  • *1: cmd.exeは管理者権限で実行しておく必要があります。
Category: Tips | | Comment(0) | TrackBack(0) | Permalink |
2010/03/11
[ by hsur at 16:21]

Thunderbirdをトラックポイントでスクロールできるようにする

 

X200を使っていて、現状の唯一の不満点はトラックポイントでThunderbird3のスクロールができないことでしたが、下記のエントリを参考にTrackPointの設定ファイルを変更することで回避することができました。これでマウスが使えない電車の中でも快適にメールを読むことができそうです。

 ・せうの日記:TrackPoint未対応のプログラムでスクロール
 ・せうの日記:TrackPointドライバの仕様変更について

自分のX200(Windows7)の場合には%PROGRAMFILES%\Lenovo\TrackPoint\tp4table.datをテキストエディタで開き、Firefoxの定義の直下に下記の内容を追加したあと、tp4serv.exeのプロセスを再起動することでスクロールできるようになりました。

*,*,thunderbird.exe,*,*,*,WheelVkey,0,9

同様の方法でマウスホイールに対応していて、TrackPoint非対応の他のアプリも対応できるようなので、TrackPoint愛用している人は覚えておいて損はなさそうです。

Category: Tips | / | Comment(0) | TrackBack(0) | Permalink |
2010/03/08
[ by hsur at 21:20]

SQLiteの高速化とトランザクション

 

SQLiteはファイルベースだとINSERTがあまり速くないなと思っていたのですが、ググってみると大量にINSERTを発行したい場合は明示的にトランザクションを使うというのが定番のテクニックだということがわかって愕然としました。SQLiteはAUTOCOMMITだとトランザクションが発生しない訳ではなくて、内部的にはINSERTの度にBEGINとCOMMITが発行されてしまうような仕組みなんでしょうかね。

ファイルベースのベンチマーク (INSERT*100回)

$ ./test.rb
                user     system      total        real
AUTOCOMMIT   0.000000   0.010000   0.010000 ( 16.499489)
TRANSACTION  0.010000   0.000000   0.010000 (  0.199884)

インメモリのベンチマーク (INSERT*100000回)

$ ./test2.rb
                user     system      total        real
AUTOCOMMIT   3.150000   0.350000   3.500000 (  3.508833)
TRANSACTION  3.090000   0.340000   3.430000 (  3.444818)

確かにベンチマークを取ってみると、全然速度が違いますね。インメモリの場合もほんのわずかだけ明示的にトランザクションを指定した方が速いようです。同じマシンでもファイルベースとインメモリでインサート速度が劇的に違うところもなかなか興味深いです。

 [続きを読む...]
Category: Tips | / | Comment(0) | TrackBack(0) | Permalink |
2010/02/27
[ by hsur at 16:23]

英語でない部分のスペースを削除する

 

下記のようなわざとスペースがところどころに挿入されている日本語を形態素解析したいと思って、前処理として余計なスペースを取り除く処理を書こうとしたのですが、思いのほか手こずってしまったので、後学のためにメモ。

str = <<EOS
ち ょ っ と ワ ケ あ っ て MS の ナ レ ッ  ジ ベ ー ス  を 検 索 し て い た ら  最 後 に 「The behavior is by design」と 書 い  て あ るのを見つけてしまいました。
EOS

はじめに書いたコード

単純にスペースを削除するようなコードなのですが、英語の部分があると単語が全部つながってしまうのでこれはNG。

puts str.gsub(/ +/,'')
#=>ちょっとワケあってMSのナレッジベースを検索していたら最後に「Thebehaviorisbydesign」と書いてあるのを見つけてしまいました。

最終的に書いたコード

最終的に書いたコードは下記。
文字クラスの指定が16進になっていますが、これが半角の英数字記号を表しています*1

puts str.gsub(/([^\x21-\x7E]) +([^\x21-\x7E])/,'\1\2')
#=>ちょっとワケあって MS のナレッジベースを検索していたら最後に「The behavior is by design」と書いてあるのを見つけてしまいました。
  • *1: ASCIIコード表を確認すると分かりますが、スペースを除く可視文字が !(0x21)~~(0x7e) に存在するためです。
Category: Tips | | Comment(0) | TrackBack(0) | Permalink |
2010/02/25
[ by hsur at 18:32]

Windows7ではネットワークに合わせて通常使うプリンターの管理ができる

 
通常使うプリンターの管理

Windows7でX200のプリンタ設定をいじっていたら、通常使うプリンターの管理という項目が追加いつの間にか追加されていました。これまでロケーションに合わせてデフォルトのプリンタを設定を変更するにはThinkVantage Access Connectionsのようなユーティリティを使う必要がありましたが、プリンタの切り替えはWindows標準でできるようになったようです。設定が分かりにくいところにあること自体はちょっと残念ですけど。

ネットで調べてみたら@ITに詳細な解説が載っていました。

Windows 7でデフォルトのプリンタを場所に応じて切り替える - @IT

実はWindows 7のProfessional/Ultimate/Enterpriseの各エディションには、位置自動認識印刷という仕組みが提供されており、ネットワークの接続先に応じてデフォルトのプリンタ(「通常使うプリンタ」とか「既定」のプリンタなどと呼ばれる)を設定できる。これを利用して仕事の場所に合わせて、デフォルトのプリンタを自動的に切り替える方法を解説する。なおこの機能は、バッテリ駆動が可能なノートPCのみしか利用できないので注意していただきたい。
Category: Tips | | Comment(0) | TrackBack(0) | Permalink |
2010/02/21
[ by hsur at 21:41]

Thunderbirdの移行 (Windows7編)

 

以前Thunderbirdの移行したときのメモを参考にThunderbirdのプロファイルをコピーしようと思ったら、メモしてあるディレクトリがなくてちょっと戸惑ってしまったので改めてメモを残しておきます。結論から述べるとThunderbirdのProfileはWindowsのバージョンに関係なく下記にあります

%APPDATA%\Thunderbird\Profiles\

具体的にはVistaやWindows7では下記の場所にあることが多いようです。

C:\Users\(ユーザー名)\AppData\Roaming\Thunderbird\Profiles\
 [続きを読む...]
Category: Tips | | Comment(0) | TrackBack(0) | Permalink |
2010/02/19
[ by hsur at 23:11]

windows7でctrlとcaps lockを入れ替える

 
PFU Happy Hacking Keyboard Professional JP 墨

普段はHHK Pro JPをつかっているので、CtrlキーはAの隣にあるというのが体に染みついてしまっているので、これまでノートPCではAltIMEというユーティリティでCaps lockとCtrlの入れ替えを行ってきたのですが、いろいろ調べてみるとレジストリの書き換えで実現できるようなので、今回はこの方法にチャレンジしてみます。

具体的には下記の内容のテキストファイル作り、名前をswapCtrlForCaps.regにしてダブルクリックし、マシンを再起動するだけで完了です。
やっていることはレジストリの書き換えなので、実施は自己責任でお願いします。

swapCtrlForCaps.reg

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00, 00,00,00,00, 03,00,00,00, 1d,00,3a,00, 3a,00,1d,00, 00,00,00,00

このレジストリ書き換えの意味については「Archive: Scan Code Mapper for Windows(英文)」に詳しく書かれています。良く読めば、上記がなぜスペースで区切られているのかについて理解できると思います。

Category: Tips | | Comment(0) | TrackBack(0) | Permalink |
2010/02/16
[ by hsur at 23:57]

Rubyのスレッド中の例外でハマった

 

Rubyでスレッドをつかったプログラムを作ったら、凡ミスを修正するのに苦戦してしまったのでメモ。結論から述べると、ThreadはjoinしたときにThread内で起こった例外が再度スローされるので、自分で立てたスレッドを確実にjoinすることがエラーハンドリングでは重要みたい。

例えば下記のコードはhogeという関数は定義されていないので、スレッドt1はこの部分でエラーになるはず。ところが、このプログラムを起動してみると、意図した動作もせず、エラーも出ないという不思議な状態になります。今回はこの状態だったので、手がかりが少なくていろいろと大変でした。

test0.rb

require 'thread'

Thread.abort_on_exception = false ###

q = Queue.new
t1 = Thread.new do
 hoge ###
 10.times do |i|
   q.enq "message! #{i}"
 end
 q.enq nil
end

t2 = Thread.new do
  while i = q.deq
    puts i
  end
end

#t1.join ###
#t2.join ###

test0.rb実行結果

ruby test0.rb
 [続きを読む...]
Category: Tips | | Comment(0) | TrackBack(0) | Permalink |
2010/02/15
[ by hsur at 13:46]

Anemoneというクローラーフレームワークを使ってみる

 

これまでクローラー使い捨てのクローラーは結構力業で作ってきたのですが、さすがにこういうことをやり始めてから1年以上が経ちこのままでは立ちゆかない事がいろいろと顕在化してきたので、クローラーを作るためのフレームワークをいろいろ調べていました。

JavaであればLuceneのサブプロジェクトであるNutchや、Seasarプロジェクトで開発されているS2Robot、PerlであればGunghoあたりに興味があるのですが、後処理の部分はRubyで書いてしまってあるので今回はAnemoneというフレームワークをつかってみることにします。

Anemone - Ruby Web-Spider Framework

Anemone is a Ruby library that makes it quick and painless to write programs that spider a website. It provides a simple DSL for performing actions on every page of a site, skipping certain URLs, and calculating the shortest path to a given page on a site.

The multi-threaded design makes Anemone fast. The API makes it simple. And the expressiveness of Ruby makes it powerful.
 [続きを読む...]
Category: Tips | / | Comment(0) | TrackBack(0) | Permalink |
«Prev || 1 · 2 · 3 · 4 · 5 ·... | | Next»