タグ

ブックマーク / blog.kyanny.me (8)

  • 作りたいプログラムもないのにプログラミング言語を学ぶ意味はあるか - @kyanny's blog

    多くのプログラミング言語を学ぶ意味はあるか - 刺身☆ブーメランのはてなダイアリーの最後に書いた通り、実際に何か仕事をするプログラムを書かなかったとしてもプログラミング言語を学ぶ意味はあると思うので、同様に、作りたいプログラムがなくてもプログラミング言語を学ぶことそれ自体の意味は依然としてある、と思う。でもウェブをみててそういう意見の人をあまりみたことがないので悲しい。http://blog.practical-scheme.net/shiro/20100817-theme-and-structureもちょっと違う気がするしなぁ。それでもこういう意見にはとても励まされるのだけど。 俺はブログで割と長めの文章を書くことが多い(と思ってる)けど、これも明確に「目的があって書いている」というほどではないしなぁ。なんとなく書いて吐き出さないと気持ち悪い、という程度のものだ。 たぶん、「まず目的あり

    作りたいプログラムもないのにプログラミング言語を学ぶ意味はあるか - @kyanny's blog
    kits
    kits 2010/08/19
    目的のためにプログラムを書くというのはむしろ実際的な活動であり、明確な目的が無い方が「自己実現活動」のように思う。
  • HTML::Element と HTML::TreeBuilder で盆栽 - @kyanny's blog

    HTML::Element とか HTML::TreeBuilder で HTML 構文木をいじることを盆栽と呼ぶらしいですが、最近よく盆栽してていろいろ覚えたことがあるのでメモ。 as_HTML() で HTML エンティティに変換させない HTML::Element#as_HTML を呼ぶと HTML 文字列が返るのだけど、これを引数なしで呼ぶと "all unsafe characters" が HTML エンティティに変換(エンコード)される。これは普通あまり望ましくないので(変換などせずそのまま出して欲しいことのほうが多い)、それを回避するには my $html = $elem->as_HTML('');と、空文字列を渡してやる。 HTML::TreeBuilder のインスタンスに対して as_HTML() を呼ぶと タグをつけられてしまう これはサブクラスの HTML::Tr

    HTML::Element と HTML::TreeBuilder で盆栽 - @kyanny's blog
    kits
    kits 2009/11/09
    XML::LibXMLの場合を考えてみたい。
  • MT形式のエクスポート用に出力をエスケープする - @kyanny's blog

    MT 形式はブログデータのエクスポート/バックアップにおける業界標準といっていいが、フィールドの区切り文字(デリミタ)に "-----\n" と "--------\n" を使っている(五つまたは八つのハイフンの連続に改行文字がついたもの)。これは正規表現で表すと qr/^(-{8})(\n)$/ と qr/^(-{5})(\n)$/ にマッチする。 ブログの文とかコメントの文とか、なんでもいいけど MT 形式でエクスポートしたときにデータが複数行になり得るフィールドでは、データ内にデリミタと全く同じパターンが現れる可能性がある(複数行を許可していないフィールド、例えば TITLE: などは、行頭にハイフンが現れないので上記の正規表現にはマッチしない)。 デリミタと同じパターンがデータの途中で出現してしまうと、パーサにそこがデータの終端だと誤認識されてしまい、データが欠損する。これを防

    MT形式のエクスポート用に出力をエスケープする - @kyanny's blog
    kits
    kits 2009/10/23
    文字クラス[\r\n|\r|\n] は [\n\r|] と同じなのでデータに"|"が含まれているとうまく行かないと思う。/ view rawで見たソースがうまく動かなかった。(バックスラッシュがU+00A5(円記号)に置き換わっている様子)
  • Config::Pit の使い方をやっと理解できた - @kyanny's blog

    pod にかいてあるとおりにすれば何も困ることなかった・・・。 SYNOPSIS にかいてあるコードを一度は実行してみるべきだなぁ。 いままで、 ppit set example.com とかやって値をセットしようとしてたんだけど、それだと --- {} こんなひな形ができて、 YAML よくわからないのでたいていシンタックスエラーで怒られたりしてた。 {} が不要なのに消し忘れる、とか。不要なものをわざわざ入れておくわけがないので使い方がおかしいんだろうとは思っていたけど、 pod に書いてあるとおりにしてみたらあっさり解決した。 #!/usr/bin/env perl use strict; use Config::Pit; my $config = pit_get('example.com', require => { username => 'your usernaem on ex

    Config::Pit の使い方をやっと理解できた - @kyanny's blog
    kits
    kits 2009/10/09
    スクリプトで実行するのが先でppitコマンドは補助、ということか。 http://subtech.g.hatena.ne.jp/cho45/20080102/1199257680
  • ワンライナーをもっと上手に書く余地がありそうだ - @kyanny's blog

    一行野郎(one-liner)はperlにおまかせ を読んだ。 MO=Deparse ってのがあるのか。これはワンライナーが思うように動かなくて悩むときに役立ちそう。一発で動かせないほど複雑なプログラムならワンライナーで済ませるべきではない、という意見もありそうだけど・・・。 a で awk っぽく、ってのも面白いけど、一番感心したのは最後の何気ない % history | perl -nle'/perl/ and $p++;END{print $p}'だった。 改行区切りのテキストファイルを一行ずつ読み込んで何かする場合に -n とか -p が便利なことは知っていたけど、たとえば各行が何かの数字で全部足したい、みたいなときに $ cat numbers.txt | perl -nle '$n+=$_; print $n'とやると計算途中の数字がずらずら出てきてダサイ。なので -e 'wh

    ワンライナーをもっと上手に書く余地がありそうだ - @kyanny's blog
    kits
    kits 2009/01/29
    -lneオプションでEND{ }ブロックを活用。
  • '\xf1\xd9' みたいな16進数文字列を変数展開?して「騙」って漢字にしたい - @kyanny's blog

    うまく説明できないけど、 #3. のブロックが pass して欲しい。 #!/usr/local/bin/perl # $Id$ use strict; use warnings; use Test::More; plan 'no_plan'; use Encode; my $kanji = '騙'; { #1. pass my $hex = "\xf1\xd9"; is $hex, to_euc($kanji); }; { #2. fail my $hex = '\xf1\xd9'; is $hex, to_euc($kanji); }; { #3. fail... my $hex = '\xf1\xd9'; # ここでうまいこと $hex = "\xf1\xd9" 的なことをしたい is $hex, to_euc($kanji); }; sub to_euc { encode('euc

    '\xf1\xd9' みたいな16進数文字列を変数展開?して「騙」って漢字にしたい - @kyanny's blog
    kits
    kits 2008/12/28
    packがだめだったのは (.*?) のため($1 eq '' になる)。 s/\\x([\dA-Fa-f]{2})/pack('H2', $1)/eg でいいはず。
  • +{} という書き方について - @kyanny's blog

    先日 +{} という書き方を紹介したところ (http://d.hatena.ne.jp/a666666/20081114/1226662515)、質問のコメントをいただいたので、「プログラミング Perl」に書かれている解説を紹介します。下手に自分の言葉で説明するよりもずっと正確なので。 プログラミング Perl VOLUME1 第3版 285 ページ 「8.2 リファレンスを生成する」より抜粋 ブラケットには適用されない注意点が1つある。ブレースは(ブロックを含め)ほかの用途にも使われるので、文の先頭にブレースを置く場合には、その前に + か return を置いて曖昧さをなくして、開きブレースがブロックの開始ではないことを Perl に知らせなければならない場合もある。例えば、新しいハッシュを作って、そのハッシュへのリファレンスを返す関数を書く場合、次のような選択肢がある: sub

    +{} という書き方について - @kyanny's blog
    kits
    kits 2008/11/27
    perlrefに同様の解説あり。 http://perldoc.jp/docs/perl/5.8.8/perlref.pod
  • 再帰?は難しい - @kyanny's blog

    以下のようなことがしたかったけど、うまくいきませんでした。 my @categories; my @links; sub extract_bookmark_recursively { my $bookmarks = Netscape::Bookmarks->new($file); for my $bookmark (@{$bookmarks->elements}) { if ($bookmark->isa("Netscape::Bookmarks::Category")) { push @categories, $bookmark->title; extract_bookmark_recursively($bookmark); } elsif ($bookmark->isa("Netscape::Bookmarks::Link")) { push @links, { bookmark =>

    再帰?は難しい - @kyanny's blog
    kits
    kits 2008/02/05
  • 1