phpしか知らないプログラマってさ

作成者:mattz 作成日:水, 05/28/2008 - 17:16

以前にとあるperlスクリプトをphpで書き直すってのをやってもらった訳です。ちょっとそのまんま転載するのは憚られるので、少し変えて掲載します。

if( $str =~ /ABC/ ){
  $flag = 1;
}elsif( $str =~ /DEF/ ){
  $flag = 2;
}elsif( $str =~ /GHI/ ){
  $flag = 3;
}else{
  $flag = 1;
}

要するに、変数$strに"ABC"を含んでたら$flagに1、変数$strに"DEF"を含んでたら$flagに2、変数$strに"GHI"を含んでたら$flagに3、どれでもなかった場合も$flagに1を代入しろ、っつーことです。これをphpに翻訳したA君(仮名)はこういうコードを書いた。

if( strpos( $str, "ABC" )){
  $flag = 1;
}elsif( strpos( $str, "DEF" )){
  $flag = 2;
}elsif( strpos( $str, "GHI" )){
  $flag = 3;
}else{
  $flag = 1;
}

んで、その書き直された方のphpの方のどれでもなかった場合に$flagに代入する値を1じゃなくて0にするねっていう改修を僕がやったんですが、このphpのコードの問題点に気付いてなくてへへぇ簡単簡単とかいって単純にこうやっちゃったもんですから、

}else{
  $flag = 0;
}

バグ作っちゃいましてね。死ね。俺。ちなみに改修前のソースでなぜ問題が起きなかったかというと、$strには"DEF"や"GHI"で始まる文字列が入ってく ることはないんですね。故に、"ABC"で始まる文字列が入ってきたとしてもelseブロックに処理が流れるもんですから結果として$flagには期待通りに1が入 っていたという。

てゆーかなんでpreg_match使わない訳?

てゆーかstrposのオンラインマニュアルにも

警告

この関数は論理値 FALSE を返す可能性がありますが、FALSE として評価される 0 や "" といった値を返す可能性もあります。 詳細については 論理値 の セクションを参照してください。この関数の返り値を調べるには ===演算子 を 使用してください。

て書いてあんだろうがよ、気付けよ、馬鹿。

てゆーかstrposなんか使ったことねーよ。使うなよ。

カテゴリ別のRSSを配信したい

作成者:mattz 作成日:水, 05/28/2008 - 11:48

2009/10/16 追記

思うところあって、こちらで公開したpipeは削除しました。

もしも、このブログのカテゴリ毎のRSSを取得したくなったなら、まずはそのカテゴリのページを表示して(サイドバーのタグクラウドから探すとか、そのタグがつけられたエントリを表示してタグ一覧から探すとかすればよいです)そのページをRSSリーダに放り込めばよかろうかと思います。

元の文は以下に残しておきますが、現在は内容的には無意味です。


そんなにニーズがあるとも思えないんですけど、まぁ中にはOpera関係のエントリだけでいいのにお前が何の漫画読んでるかなんて興味ねーんだよ、的な人もいるかも知れないので、このブログのRSSをカテゴリ別に配信できるようにしてみたい、と思った。

最初はMT4のテンプレートをカスタマイズしてやる方法というのを模索していたのですが、Movable Typeのテンプレートって、よく分かんないんですよね、 私。よく分からないまま、言われるがままにコピペで設定してみて言われた通りにならないと対処のしようがない、というか実際そうだった訳なんですが、結局のところうまくいかなかった。

じゃぁどうしようかってんで、Yahoo!Pipesに頼ってみることにしました。

で、出来上がったのがこれ(試行錯誤の末にえらい間抜けなことをしているので、View Sourceとかは是非して、もっといいやり方を教えて下さい。実 はカテゴリじゃない、comicタグとかでも抽出できたりするタグつけるのやめた。いいやカテゴリだけで。)。「取得したいFeedのカテゴ リ」ってところに左の方に並んでる、カテゴリをコピーして入力して、[Run Pipe]を押してもらえれば結果が表示されるんで、More Options→Get as RRSとかしてもらえればいいのですが、それも面倒なので、サイドバーのカテゴリ一覧の右か左かにボタンをつける、くらいのことはテンプレートいじりできそうなので、その内やりますった

2009/05/15 追記

Pipe自体は今も有効ではありますが、旧ブログの方を更新していないものですから、ここに書いてあることはほぼ無意味です。

というか、サイドバーに表示されている「タグクラウド」ってやつ(Drupalのtaxonomyモジュール)がその辺のことはよきにはからってくれるので、無用になりました。

ADAMAS

作成者:mattz 作成日:火, 05/27/2008 - 22:36

PEACE MAKERに続いて、こちらも皆川ブランド買い。一応「宝石使い」とかいうキーワードだけは知ってましたが 、詳細は全く知らずに買いました。

多分皆川作品では初じゃないかな、という女性主人公の流崎麗華というお蝶婦人を髣髴とさせる名前の若い女性。宝石を通じて尋常ではないパワーやさ まざまな人間離れした能力を発揮するという、いかにも漫画の主人公な人物。

皆川亮二ってエログロは似合わないし、基本的に少年漫画向けの人だと思うんだけど、なんで青年誌に描くんだろうか。少年誌だと女性主人公って描け ないのかなぁ。小学館となんかあったのかね?まぁ、どっから出版されても面白ければそれでいいんだけど。という訳で、ADAMASは僕のような皆川好きには当たり前に面白いです。

河童のクウと夏休み

作成者:mattz 作成日:火, 05/27/2008 - 20:35

僕は河童は居た、あるいは居る、と思ってます。でなきゃ日本中に河童や河童に類する物の怪に関する伝承がある理由が説明できない。日本中どころか 似たような話は海外にもあるそうですから、絶対河童は居たはずです。水木しげるも荒俣宏もそう言ってる[要出典]。

まぁ、それはともかく「河童のクゥと夏休み」です。昨年のロードショーの時に観てますが 、なかなかの秀作です。買えとは申しません(買っても損はしないと思いますけど)が、レンタルででも一度観てみてください。かなり涙腺を刺激しますよ。まぁそういうの嫌いな人もいるでしょうけど。

有名な話ですから今更ここに書くこともないでしょうが、この作品を監督した原恵一という人は、「クレヨンしんちゃん」の映画版なんかもいくつか手 がけている人です。「クレヨンしんちゃん」のしんちゃん、誤解している人も多いですが、映画だけでなくTVアニメの方でも実にいい子なんですよ。いたずらしたり粗相したりはしますけど、なんだかんだ言いながら家族は大事にしてますしね。

だいぶ話がそれました。ともかく、「河童のクゥ」は秀作です。内容だの受賞歴だのは、リンク先をご覧下さい。なお映像ソフトとしてはご紹介した「 ぬいぐるみ同梱版」の他にコレクターズBOX【通常版】てのがございます。よろしければどうぞ。

PEACE MAKER (1)を購入した

作成者:mattz 作成日:月, 05/26/2008 - 11:53

まったく内容を知らないまま、作:皆川亮二というだけでのブランド買い。

ガンマンとしては天才だけど、それ以外はちょっと抜けたところがあり、生活能力の希薄そうなホープ・エマーソンという名の主人公、こう言ってはなんだがほぼD-LIVE!!の斑鳩悟。そういや亡き父も天才ってところも一緒だな。(敵役も含めた)キャラクタ、ストーリーや設定にも大きな驚きは感じないが、アクションシーンのカッコよさは健在。

驚きは感じないと言いましたが、魅力がないわけでは決してなく、今後の展開には大いに期待できそうです。

やっと2回目行けました、BPUMP

作成者:mattz 作成日:日, 05/25/2008 - 23:00

なかなか2回目が行けないままに、3ヶ月近く経ってしまいました。久しぶりですし、大して 上達とかしてませんけど、楽しく遊んできました。

でも指が痛い。プログラマ向きのスポーツじゃないかもしれない。いや、走ったりするような激しいものじゃないし結構頭も使いますので、向いてるっ ちゃ向いてるんですが、如何せん指にダメージが残る。今も打ちにくいったらありゃしない。

2ログビューア(7)-そろそろちゃんとした形にする、その前に

作成者:mattz 作成日:金, 05/23/2008 - 18:59

ちょっとずつ形にするべくコードは書いているのだが、今のところ断片的なものしかできていないので、今回はコードを晒すんじゃなくていくつかメモ を。

リスト
perlでいうarray。
配列に順にアクセスするには
for attr in list:
  print attr
添え字
first_attr = list[0]
辞書(dictionary)
いわゆる連想配列
キーと値をセットで取り出して処理するには
for k, v in dict.iteritems():
  print "%s = %s" % ( k, v )
キーから値を取得
value = dict['key']
printf的なもの
pythonでなんていうのかは知らないけど。要するに
print "%s = %s" % ( k, v )

他にもやり方は色々あるようだけど、とりあえずはこれで。+で繋ぐよりはスマートだし。

正規表現
なんつーか、perlやphpと随分と作法が違うのでとっつきにくく感じるが、さっさと慣れてしまおう。
正規表現 HOWTO
osモジュール
環境変数の取得はos.getenv(key)ってな感じで。

ページ