タグ

ブックマーク / holidays-l.hatenadiary.org (28)

  • CDATAセクションを正しくエスケープする方法 - ヒルズで働く@robarioの技ログ

    <![CDATA[(ここ)]]> (ここ)は確かにHTMLエスケープしなくてもいいんだけど、(ここ)に予期せぬ"]]>"が現れるとそこでCDATAセクションが終わってしまう。 だから(ここ)に"]]>"という字面が現れないようにしないといけないので、 全ての ]]> を ]]]]><![CDATA[> に置き換える。 分断の仕方によって他にも書き方があって、パターンは以下の通りになる。 ]]]]><![CDATA[> ]] ]]> <![CDATA[ > ↑"]]" ↑CDATA終了 ↑CDATA開始 ↑">" ]]]>]<![CDATA[> ] ]]> ] <![CDATA[ > ↑"]" ↑CDATA終了 ↑"]" ↑CDATA開始 ↑">" ]]]><![CDATA[]> ] ]]> <![CDATA[ ]> ↑"]" ↑CDATA終了 ↑CDATA開始 ↑"]>" ]]>]]<![

    CDATAセクションを正しくエスケープする方法 - ヒルズで働く@robarioの技ログ
    otsune
    otsune 2010/12/12
  • Re: Time::Piece::MySQL とタイムゾーン - Yet Another Hackadelic - ヒルズで働く@robarioの技ログ

    Time::Piece::MySQL とタイムゾーン (訂正あり) - Yet Another Hackadelic Unix timeにタイムゾーンの概念を持ち込むのは気持ち悪いです。 得られたUnix timeに対してタイムゾーンに対応する目的で数値を加算減算してはいけないと思います。 何故ならUnix timeは「UTCにおける1970/1/1からの経過秒数」だからです。 タイムゾーンがJSTになっていて、NOW()はJSTにおける時刻を返しているという前提で話を進めますが、 (当然のことながら、UNIX_TIMESTAMP()はUTCにおける時間を返している) 何が話をややこしくしているかというと、 $ perl -MTime::Piece -MTime::Piece::MySQL -e 'my $t = Time::Piece->from_mysql_datetime("2010

    Re: Time::Piece::MySQL とタイムゾーン - Yet Another Hackadelic - ヒルズで働く@robarioの技ログ
    otsune
    otsune 2010/11/07
  • colordiffの文字単位版ccdiffを作ったid:yappo++ - ヒルズで働く@robarioの技ログ

    diffに色付けしたかったけど、colordiffみたいな行単位じゃなくて、文字単位で色付けしたい。 id:yappoのString::Diff - Simple diff to String - metacpan.org使ってccdiff(charactor color diff)というのをでっちあげた。 ってか後から単語単位の方がいいかなと思った。 でwdiffとcolordiffの組み合わせとか試してみたけど、 % cat foo.patch | wdiff -d | colordiff だと、日語の扱いもおかしくて何か出力が微妙で…。 Text::WordDiff - Track changes between documents - metacpan.orgも軽く試したけど「行単位で単語単位(説明難しい…)」ができないっぽくてやめた。 String::Diffより最適なモジュー

    colordiffの文字単位版ccdiffを作ったid:yappo++ - ヒルズで働く@robarioの技ログ
    otsune
    otsune 2010/11/06
  • voidコンテキストの使われ方 - ヒルズで働く@robarioの技ログ

    まあ、PP のモジュールが void context であることを判定につかってるケースってほとんどないんですけどね。 ないですねぇ。自分もそんなの書かないし。 ちなみにClass-MOPではlib/Class/MOP/Method/Wrapped.pmでvoidコンテキスト関連の処理が書かれてますね。(前のエントリの最後に書いたのと同じ用途) ラップ系はvoidコンテキストの面倒を見ないといけないですからね。 これまでの流れだと「そもそもvoidコンテキストって何に使うねん」って思ってる人もいそうなので例を挙げておきます。 voidコンテキストの実用例としては、例えばPod::Simple::RTF(Perl5.9.3以降ならコアモジュール)にあって、lib/Pod/Simple/RTF.pmのsub rtf_escで出現します。コメントも付いてて処理も平易なので、何やってるかは見れば分

    voidコンテキストの使われ方 - ヒルズで働く@robarioの技ログ
    otsune
    otsune 2009/06/03
  • 動的パッチは一つのモジュールにまとめてuseした方が良いかも - ヒルズで働く@robarioの技ログ

    言語的に云々という話ではなくて、複数人で開発するときにハマりそうなので(というかハマったので) 動的にパッチを当てるには # gotoするよ版 BEGIN { use UNIVERSAL::require (); if ( Foo->require ) { my $orig = Foo->can('func'); no warnings qw(redefine); *Foo::func = sub { my ($foo) = @_; # shiftしない方が楽なことが多い # pre-process... goto &{$orig}; # post-processが必要な場合は記事の最後で }; } } とするのが定石(Hook::LexWrap使えっていう話もあるけど筋とは違うので割愛)だと思いますが、これをどこでやるかという話。 とあるCatalystControllerで変なデバッ

    動的パッチは一つのモジュールにまとめてuseした方が良いかも - ヒルズで働く@robarioの技ログ
    otsune
    otsune 2009/06/01
  • Catalyst::Runtimeのバージョンチェックをしているようでしていない件 - ヒルズで働く@robarioの技ログ

    Catalyst::Helperが出力するMyApp.pmに、 use Catalyst::Runtime '5.70'; ってあるじゃないですか。 あまりHelper使わないから気付かなかったけど、良く見たら文字列になってるんですよね。ってことは、Catalyst::Runtimeバージョン5.70以上を要求してるわけじゃなくて、sub importに'5.70'という引数を渡してるだけなんですよ。 これを use Catalyst::Runtime 5.70; このように書くとバージョンチェックが働いて、Catalyst::Runtimeのバージョンが5.70未満だとコンパイルエラーになります。 $ perl -e "use Catalyst::Runtime '5.70';"; $ perl -e "use Catalyst::Runtime 5.70;"; Catalyst::Ru

    Catalyst::Runtimeのバージョンチェックをしているようでしていない件 - ヒルズで働く@robarioの技ログ
    otsune
    otsune 2009/05/12
  • Perlから外部コマンドを実行する - ヒルズで働く@robarioの技ログ

    最近Perlから外部コマンドを実行する場合は、openやsystemなどを使わずにIPC::Cmdを良く使っている。 特に深い理由はないんだけど、 IPC::Cmdは5.009005からコアモジュールに入っている それなりに綺麗に書ける $IPC::Cmd::VERBOSEを真にしておけば、実行するコマンドの内容を出力してくれる 戻り値も「標準出力,標準エラー出力,その両方」が、改行区切りで配列になって戻ってくるのも地味に便利 (『かえりち』だと『返り血』に変換されるので、昔から『もどりち』って言うようにしてる>id:amachang) とかかなあ。多分1番目の理由が大きい。コアモジュールに凝ってるのかもしれない。 ログ吐きにはLog::Message::Simple使うようになったし。 まあLog::Message::Simpleは、daemontools付属のmultilogと相性が良

    Perlから外部コマンドを実行する - ヒルズで働く@robarioの技ログ
    otsune
    otsune 2009/04/30
  • Re: ギークなお姉さんは好きですか 不正なメールアドレスを見抜く正規表現 - ヒルズで働く@robarioの技ログ

    ギークなお姉さんに初めてのトラックバック。 DTIブログ サービス終了のお知らせ の最後にあるfubaさんのnegative wordsを見て猛烈に最適化してみたくなった。 use utf8; use Regexp::Assemble; binmode STDOUT=>'utf8'; @words = split /\|/, 'ヘルプ|へるぷ|help|諦め|苦しい|つらい|希望がない|だめ|ダメ|死|しぬ|しにたい|自殺|たすけて|助けて|働きたくない|やだ|むり|やめたい'; print Regexp::Assemble->new->add(@words)->re; (?-xism:(?:(?:(?:働きたく|希望が)な|つら|苦し)い|(?:たす|助)けて|し(?:にたい|ぬ)|や(?:めたい|だ)|[だ諦]め|help|へるぷ|ヘルプ|むり|ダメ|自殺|死)) Regexp::As

    Re: ギークなお姉さんは好きですか 不正なメールアドレスを見抜く正規表現 - ヒルズで働く@robarioの技ログ
    otsune
    otsune 2009/03/17
  • 殺すぞ - ヒルズで働く@robarioの技ログ

    プロセスを。 SIGSTOP や SIGTSTP(^Z) で停止された process は、 基的には SIGCONT を送って再開させてやらない限りは止まったままです。 死ぬことすらままなりません。 なので、一般には kill -TERM && kill -CONT で終了させます。 この順番にするのは、再開してから死ぬまでの時間的猶予を与えないための常套手段ですね。 あー、常套手段なのか。知らなかった。

    殺すぞ - ヒルズで働く@robarioの技ログ
    otsune
    otsune 2008/12/08
  • findとxargsの組み合わせ - ヒルズで働く@robarioの技ログ

    http://hirkaz.blogspot.com/2008/09/blog-post_01.html こういうのを見るとどうしても $ find ~/dev/php -name '*.php' -a -print0 | xargs -0 nkf --overwrite -w -Lu と書き直したくなる。元のままだとスペースを含んだファイル名を扱えないからね。 一応説明しておくと、元のコードでは"foo bar.php"というファイルがあった場合、xargsが"foo"と"bar.php"を処理しようとしてエラーになってしまう。 そこで、findで-print0を使うと"\0"区切りで出力してくれて、xargsに-0を指定すると引数を"\0"区切りとして扱ってくれるので"foo bar.php"として処理してくれる。 ファイル名にスペース入れるなっていう話もあるけど、Windowsな人は

    findとxargsの組み合わせ - ヒルズで働く@robarioの技ログ
    otsune
    otsune 2008/10/27
  • Shipwrightちょっとだけ使ってみたよ - ヒルズで働く@robarioの技ログ

    参考:Shipwright - dann@catalyst - Catalystグループ Shipwright-1.01使ってみたよ。CPANモジュール群をSubversionリポジトリで管理できるよ。 どっかの誰かが『CPANモジュール群のバージョンを各マシンで合わせるためにrpmに変換して云々』ってのをやってたと思うけど、Shipwrightの用途は多分そんな感じです。 Subversionリポジトリにコミットすることになるので、野良パッチのバージョン管理も出来るかもね。 インストール 普通にCPANから。 # cpan Shipwright Shipwrightはsvnが必要です。 svkにも対応していてsvkが無い環境だとインストール時にエラーになるけど、運用上svkを使わないんだったらcpan -f Shipwrightで問題無いよ。 初期化 $ shipwright creat

    Shipwrightちょっとだけ使ってみたよ - ヒルズで働く@robarioの技ログ
    otsune
    otsune 2008/03/08
  • JavaScriptで外部ライブラリを読み込むためのスクリプトをCodeRepos.orgに上げた。 - ヒルズで働く@robarioの技ログ

    Sjaxを使わないJavaScript Loader - ヒルズで働く@robarioの技ログ と JavaScriptから外部JavaScriptを読み込む方法 - ヒルズで働く@robarioの技ログ の改良版です。この二つの記事は忘れてもらって結構です。 前振りとか ライブラリを読み込みたい(><) 「script要素をappendChildする」でやると読み込み完了を待ってくれないので「setTimeoutで3000ms後に処理」とか、嫌だ。 そこで「指定したプロパティが存在するか」を監視するスクリプトloader.js.incを書きました。http://coderepos.org/share/に置いてあります。 http://coderepos.org/share/browser/lang/javascript/misc/loader.js.inc http://coderep

    JavaScriptで外部ライブラリを読み込むためのスクリプトをCodeRepos.orgに上げた。 - ヒルズで働く@robarioの技ログ
  • Plagger-v0.7.17でparser error : Input is not proper UTF-8, indicate encoding ! - ヒルズで働く@robarioの技ログ

    なにやらPlagger-v0.7.17(svn trunk)で parser error : Input is not proper UTF-8, indicate encoding !とか言われました。Plagger FAQにはWebService::Bloglinesバージョンアップしたら直るよ、とか書いてあったのですが、Bloglinesを使ってないのにこのエラーが出ていたので困っていました。 んで、Diff from WebService-Bloglines-0.09 to WebService-Bloglines-0.10を参考に↓のパッチ当てたら直ったっぽい。 % diff lib/Plagger/FeedParser.pm.orig lib/Plagger/FeedParser.pm --- lib/Plagger/FeedParser.pm.orig 2007-07-09

    Plagger-v0.7.17でparser error : Input is not proper UTF-8, indicate encoding ! - ヒルズで働く@robarioの技ログ
  • 社内IRCの設置その後 - ヒルズで働く@robarioの技ログ

    社内IRCの設置 ついに揉め事が起きたため、今日話し合いの場を設けました。もちろん想定の範囲内です。 何事も最初からすんなり行くとは思ってません。障害がある方が燃えるじゃないですか、と自分を励まして頑張ってます。 現状、大きく分けて運営チームと開発チームに分かれているのですが、運営チーム曰く 情報共有は十分にやっているつもりだ IPMessengerやE-mailに対してメリットを感じない ということでした。 運営チームだけで扉を閉じた会議室で会議を行い、決定事項のみをE-mailでメーリングリストに流す。決まり台詞は「既に決定済みなので反論は受け付けません。」これで「情報を十分に共有している」と言えるのか疑問です。どうやら「情報共有」とは議事録をE-mailで送りっぱなしにすることを指しているようです。しかし「情報」には、『知識』『アイデア』『判明している問題点』『改善案』などなど、他に

    社内IRCの設置その後 - ヒルズで働く@robarioの技ログ
    otsune
    otsune 2007/08/04
  • 対話的に実行されているかどうかを調べるIO::Interactive - ヒルズで働く@robarioの技ログ

    プログラムが対話的に実行されているかどうかで処理を分けるにはIO::Interactiveを使うと非常に楽です。 use IO::Interactive qw(is_interactive); if (is_interactive) { print {*STDOUT} q{Now, interactive}; # negotiate with human } % perl -MIO::Interactive=is_interactive -e 'print {*STDOUT} q{Now, interactive} if is_interactive' Now, interactive % : | perl -MIO::Interactive=is_interactive -e 'print {*STDOUT} q{Now, interactive} if is_interactive'

    対話的に実行されているかどうかを調べるIO::Interactive - ヒルズで働く@robarioの技ログ
    otsune
    otsune 2007/08/04
  • 第3回社内勉強会〜reStructuredText勉強会〜 - ヒルズで働く@robarioの技ログ

    第3回社内勉強会〜reStructuredText勉強会〜 の資料を公開します。 ファイルをCodeRepos.orgに移行しました。 プレゼン reStructuredText(ソーステキスト) 一式ダウンロード 勉強会の質疑応答で出てきた、資料に書いてないこと rest2webっていうツールもあるよ cpanにText::Restructured - Perl implementation of reStructuredText parser - metacpan.orgがあるよ

    第3回社内勉強会〜reStructuredText勉強会〜 - ヒルズで働く@robarioの技ログ
    otsune
    otsune 2007/06/29
  • 第2回社内勉強会〜IRC勉強会〜 - ヒルズで働く@robarioの技ログ

    というわけで社内IRC勉強会を開きます。 というわけで社内IRC勉強会を開きました。その時の資料を公開します。江島さんの記事(http://blog.japan.cnet.com/kenn/archives/002189.html)を参考…という名のコピペしちゃいましたがっ!(><) あとブクマコメントしてくださった方の発言を勝手に使っちゃいました。すみません(><) 少しでも誰かの役に立てれば、当に嬉しいです(><) ファイルをCodeRepos.orgに移行しました。 プレゼン:02IRC.html ダウンロード:02IRC.zip 色々突っ込みを受けそうですが、お手柔らかにお願いします(><) 資料中「IPMessengerは儀礼的沈黙が無いかもしれない」と書いてますがそれは間違いで、ある種の儀礼的沈黙はあります。IPMessengerで全員で会話をしようと思っても「迷惑だと思う人

    第2回社内勉強会〜IRC勉強会〜 - ヒルズで働く@robarioの技ログ
    otsune
    otsune 2007/06/23
  • CPANモジュールのアンインストール - holidays-l開発ブログ

    エントリの続きはこちら→CPANモジュールのアンインストール(改良版) - ヒルズで働く@robarioの技ログ あるCPANモジュール(以下ディストリビューションと呼びます)をアンインストールしてみます。 まずは色々紹介しながら回りくどくやってみます。最後に簡単な方法を紹介します。 消したいディストリビューションを確認 自分が消したいディストリビューションが分からなかったら、 % perldoc -tT perllocal | grep Module # 見た目より速さ優先ならこっち % grep Module `perldoc -l perllocal` でインストール履歴が出ます。perllocal.podにはインストールしたディストリビューションの一覧が時刻と共に記録されていて「昨日インストールしたアレアレ…何だっけ?」という時には割と使えます。 モジュール名とディストリビューショ

    CPANモジュールのアンインストール - holidays-l開発ブログ
  • holidays-l開発ブログ - Perl::Criticでコーディングスタイルを統一

    Perl::Critic - Critique Perl source code for best-practices. - metacpan.orgをコーディングスタイルを統一するために使っています。 (実際には字面としてのコーディングスタイル(コードレイアウト?)はPerl::Tidy - metacpan.orgが担当しているわけですけども、ここでは「use strictを入れる」「PODを付ける」なども含めてコーディングスタイルと言ってます) コーディングスタイルに唯一絶対的に正しいなんてものはないわけで(だから宗教論争にもなるわけで)、機械的に統一することで揉め事はなくなります。 しかしその時に.perlcriticrcなんかを使ってコーディングスタイルをデフォルトから変更してしまうと元も子もありません。 .perlcriticrcに何を設定するかで揉めますし、例えその時に揉めな

    holidays-l開発ブログ - Perl::Criticでコーディングスタイルを統一
    otsune
    otsune 2007/05/17
  • Perlで既存のファイルを書き換える時のBest Practicesは? - ヒルズで働く@robarioの技ログ

    何か今日sed -iのようなことをしたくなったのですが、読み書き両用モード(+<)でopenしてseekしてtruncateして云々というのが面倒だったのでテンポラリファイル使ってごにょごにょしてしまいました。 すんなりできる方法を助言を頂きたく。。。 条件 ファイル一覧は、抽出条件が複雑なためスクリプト内で生成されます(コマンドラインから与えられません)。 できればコアモジュールだけで・・・ ※1番目の条件は、ファイル一覧抽出後にそれらを引数にしてexecするという手もありますね。と書いてみたものの、引数が多くなるとダメになってしまうので、この案は却下。 use File::Temp; use File::Copy; foreach my $file (qw(foo.txt)) { # open temporary file my $out = File::Temp->new; open

    Perlで既存のファイルを書き換える時のBest Practicesは? - ヒルズで働く@robarioの技ログ
    otsune
    otsune 2007/01/10