タグ

ブックマーク / hakobe932.hatenablog.com (10)

  • 正規表現のoオプションにPerlの暗黒面を見た - はこべにっき ♨

    Perlの正規表現のoオプションてご存じでしょうか? うちはあまり使ったことがなかったのですが,効率のよい正規表現処理を行うときには便利なオプションです. oオプションを使うと,その正規表現のコンパイルが1回しか行われなくなります.たとえば,正規表現の評価が繰り返しのなかで現れると,コンパイルが何度も行われて効率が悪くなります.そういったときにoオプションを付与しておけば,正規表現コンパイルのオーバーヘッドを最小限にとどめることができます. chomp(my $pattern = <>); for my $n (0..100000000000) { # すごく回数の多いループ # oをつければ正規表現がコンパイルされるのははじめの1回だけなので安心 if ($n =~ m/^$pattern$/o) { say "match!"; } } 正規表現が静的な場合は,Perlはこのような最適化

    正規表現のoオプションにPerlの暗黒面を見た - はこべにっき ♨
  • タブをgrepするFirefoxアドオン - TabGrep - はこべにっき ♨

    限りなく需要がニッチそうだけど、Firefoxのタブをgrepするアドオンを作成してみました。Firefoxアドオンとか作るのが初めてなので練習もかねて。 うちは、今見ているページが少しでも後から必要そうならタブに残しておいて、しかも、あんまり消さずにずっと残しておく癖があります。なので、油断していると、以下のようなタブの状況になりがち。 Tab Mix Plusの多段タブ機能がなかったら死んでる。 こうなってしまうと何が困るかというと、それまでに開いたタブがかなり見つけにくくなってしまうことです。どこに開いたか忘れてしまって、同じページを表示しているタブがいくつもあるとかいうことにもなりがち。 そこで、大量のタブの中から自分の欲しいタブだけを見つけるために作ってみたのが、TabGrepです。 TabGrepをインストールするとFirefoxのツールメニューに"Grep tabs"というメ

    タブをgrepするFirefoxアドオン - TabGrep - はこべにっき ♨
  • Perlで例外オブジェクトをeval & catch - はこべにっき ♨

    ひさびさにPerlベストプラクティスネタ。 Perlで例外処理というと、evalして$EVAL_ERROR(= $@)の文字列を判定するしかないと思っていたのだけれど、ちゃんと例外オブジェクト使う方法があった。やっぱりなんでもありだなPerlは。 PBPによると、例外オブジェクトは自分で作ることもできるのだけれど、いくつも注意しなければならないポイントがあるようだ。 文字列変換(q{""})のオーバーロード 例外をキャッチしたかを返すcaughtメソッド エラーメッセージの出力先の変更 このあたりが正しく実装できていなければだめ。しかしながら、CPANにちょっとお伺いをたてるだけで、例外用のException::Classといういかにも便利そうなモジュールを利用できるらしい。 このException::Classを利用して、Perlの例外オブジェクトを定義してみた。 use warning

    Perlで例外オブジェクトをeval & catch - はこべにっき ♨
  • Amazonの検索結果ページでnを二回押すと次のページに移動するのか - はこべにっき ♨

    タイトルの通り。Amazonの検索結果ページで2回nを押すと次のページに移動するのなー。 AmazonJavaScriptを覗いてみると、以下のようなコードがちらちら見えます。 registerKeyHandler('32', 'keydown', fullResultScroll); registerDoubleKeyHandler('80', 'keyup', function() { tpFollowLink('pagnPrevLink') }); registerDoubleKeyHandler('78', 'keyup', function() { tpFollowLink('pagnNextLink') }); "スペース"、"p"、"n"にそれぞれ、スクロールダウン、前の検索結果、次の検索結果にがバインドされているんですね。結構Amazon使うけど全然知りませんでした。以下

    satoship
    satoship 2007/10/16
    そうだったのか
  • MacPortsでステキなUNIXツールをインストール - はこべにっき#

    2011/5/22追記: 最近のオススメは、homebrewです。ぼくもいまはhomebrew使ってます。 先日、研究室にあたらしいMac Book Pro 17"が届いた。各種操作がいちいちキビキビ動いて快適すぎる。 このMacにも、うち的最重要MacアプリケーションのひとつであるMacPortsをインストールした。 MacPortsはFreeBSDのportsというパッケージ管理システムと似たようなことを、Mac OS Xでも行うためのソフトウェアだ。有名なコマンドラインツールはほとんどこれを使えば揃えることができる*1。うちが普段使っている、perlvimもzshもscreenも全部MacPortsでインストールしたもの。 Macでライブラリやツールがなくて困ったときはとりあえず、MacPortsに聞いておけばなんとかなることも多い(例: pygameってMac OS Xで動くんだ

    MacPortsでステキなUNIXツールをインストール - はこべにっき#
    satoship
    satoship 2007/05/30
    MacPorts
  • コマンドラインからiTunesの曲を検索 - はこべにっき ♨

    iTunesで管理している曲ファイルの場所をコマンドラインから調べれるようにします。 iTunesのライブラリのxmlを読み込んで指定の曲を調べるスクリプトをためしに書いてみました。iTunesのライブラリのxmlは~/Music/iTunes/iTunes Music Library.xmlです。 XMLをパースしたりせずに、正規表現とフラグ変数で強引にやってみると以下のような感じになりました。 use strict; use warnings; use IO::File; use Carp; use Encode; use Perl6::Say; use URI::Escape; my $itunes_lib_file = shift; my $keyword = decode_utf8(shift); my $fh = IO::File->new; $fh->open($itunes

    コマンドラインからiTunesの曲を検索 - はこべにっき ♨
  • iTunesで再生している曲の情報をYAMLに吐き出すAppleScript - はこべにっき ♨

    tell application "iTunes" set yaml to "" set newline to " " repeat with t in every track of current playlist set entry to "- title: " & name of t & newline set entry to entry & " album: " & album of t & newline set entry to entry & " artist: " & artist of t & newline set entry to entry & " path: " & POSIX path of (location of t as string) & newline set yaml to yaml & entry & newline end repeat yam

    iTunesで再生している曲の情報をYAMLに吐き出すAppleScript - はこべにっき ♨
  • PlaggerからのメールをMac OS XのMailで読む - はこべにっき ♨

    Gmailてマシンや回線によっては、かなりもっさりとした動作になってしまう。Plaggerで作ったフィードのメールをつぎつぎと読みたい時などは結構そのもっさり感がストレスに。 どうにかなんないかなーと思ってたら、Kansai.pmで聞いたmiyagawaさんの話によると、Beckyとかの普通のメーラでGmailを受信して読むとさくさく見れて良いらしい。それならばということで、うちもMac OS XのMailでGmail受信してフィード読むことにしてみた。 そしたらなにやら、Mac OS XのMailとPlaggerの相性がかなり良い感じじゃね?ってことに気づいた。 これがMailの画面の一部。表示メニューから選べる、スレッドにまとめる機能がかなりいい感じに効いてる。 当然、Gmailを直接読むよりレスポンスがきびきびしていて読みやすいし。操作もスペースと矢印キーを駆使すればキーボードだけで

    PlaggerからのメールをMac OS XのMailで読む - はこべにっき ♨
  • なんだTwitterがおもしろいぞ - はこべにっき ♨

    twitterがなかなかおもしろくて、それなりにちゃんとupdateして使ってみている。はこべtwitterはこちら(http://twitter.com/hakobe) 基的に自分が今何やってるか書いて登録して行くだけのサービスのよう。メッセンジャーのステータス部分だけとりだしたようなもんだと聞いて何がいいのかよくわからなかったものの使ってみるとなかなかおもしろい。 チャットするほどではないけど、なんとなくみんなに伝えたいというか、そういう微妙な距離のコミュニケーション用かしらね。 そういうコミュニケーションはこれまでメッセンジャーのステータスや、表示名(「はこべ@研究室で修羅場」の@以降ぶぶん)なんかでできたのだけど、twitterはそれ専門のサービスなんでかなり高機能になっている。 メッセのステータスはどんどん失われて行くけど、twitterだとtimelineとして残るのでその人

    なんだTwitterがおもしろいぞ - はこべにっき ♨
  • Plaggerをインストールしてみてわかったこと - はこべにっき ♨

    やっとこPlaggerを使えるところまでたどり着けた。livedoor Readerの更新FeedがGmailにどさっと届いたよ。おもしろい。 さて、Plaggerにたどり着くまでには、いくつものモジュールインストールとそのテストの失敗、たくさんの妥協、汗、涙、睡眠不足などの困難が伴ったわけだ*1。そのおかげでCPANやPerlについてわかったことをあげてみることにした。 CPANは便利でおもしろい WWW::YouTubeとかHatena::FormatterとかMac::Glueとか。もっとセンセーショナルなモジュールもたくさんあるよね。CPAN漁ったりPlaggerの依存で入るモジュールを眺めていると、こんなのもモジュール化されてるのか!っておどろくことが多い。もうほんと自分でコード書く必要あるのかというほどの充実ぶり。 CPAN漁りにはモジュールに関するいろんな情報があつまったCP

    Plaggerをインストールしてみてわかったこと - はこべにっき ♨
    satoship
    satoship 2007/04/06
    CPAN でテストに失敗した時の対処法が載っている
  • 1