Shuhei Kagawa

MyDNS.jp 用に biffpop をビルド

Jan 4, 2010

無料ダイナミック DNS サービスの MyDNS.jp では、IP アドレスの通知にメールサーバへのアクセスという方法を採用しています。 POP のクライアントソフトとして説明ページでおすすめされていた biffpop をビルドする際につまずいたのでメモ。 環境は Ubuntu Server 9.10 64 bit。

ソースをダウンロードして make すると、下記のようなエラー。

cc -O3 -DIPv6 -DKILLLIST -DUSE_SSL -c -Wall biffpop.c -o biffpop.o biffpop.c:24:25: error: openssl/ssl.h: No such file or directory biffpop.c:25:25: error: openssl/err.h: No such file or directory biffpop.c:47: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘attribute’ before ‘*’ token biffpop.c: In function ‘main’: biffpop.c:124: error: ‘_RE_SYNTAX_POSIX_COMMON’ undeclared (first use in this function) biffpop.c:124: error: (Each undeclared identifier is reported only once biffpop.c:124: error: for each function it appears in.) biffpop.c:127: warning: implicit declaration of function ‘SSL_load_error_strings’ biffpop.c:128: warning: implicit declaration of function ‘SSL_library_init’ biffpop.c:129: error: ‘ctx’ undeclared (first use in this function) biffpop.c:129: warning: implicit declaration of function ‘SSL_CTX_new’ biffpop.c:129: warning: implicit declaration of function ‘SSLv23_client_method’ biffpop.c:130: warning: implicit declaration of function ‘ERR_print_errors_fp’ biffpop.c:138: warning: implicit declaration of function ‘SSL_CTX_free’ biffpop.c:139: warning: implicit declaration of function ‘ERR_free_strings’ biffpop.c: In function ‘readConfigFileSub’: biffpop.c:439: warning: implicit declaration of function ‘re_compile_pattern’ biffpop.c:440: warning: assignment makes pointer from integer without a cast make: *** [biffpop.o] Error 1

OpenSSL は入っているのにおかしいな、と思ったのですが、libssl-dev がいるっぽいです。 openssl/ssl.h: No such file or directory [Archive] – Qmailrocks.org Forum

sudo apt-get install libssl-dev
make

まだ少しエラー。

cc -O3 -DIPv6 -DKILLLIST -DUSE_SSL -c -Wall biffpop.c -o biffpop.o biffpop.c: In function ‘main’: biffpop.c:124: error: ‘_RE_SYNTAX_POSIX_COMMON’ undeclared (first use in this function) biffpop.c:124: error: (Each undeclared identifier is reported only once biffpop.c:124: error: for each function it appears in.) biffpop.c: In function ‘readConfigFileSub’: biffpop.c:439: warning: implicit declaration of function ‘re_compile_pattern’ biffpop.c:440: warning: assignment makes pointer from integer without a cast make: *** [biffpop.o] Error 1

今度は regex.h のエラー。ソースを見てみると _RE_SYNTAX_POSIX_COMMON#ifdef __USE_GNU で囲まれています。 __USE_GNU をオンにするには #define _GNU_SOURCE するか cc -D _GNU_SOURCE すれば良いらしい。

・・・ということまではわかりましたが、よく考えると上記二つは -DKILLLIST-DUSE_SSL をつけなければ起きないエラーです。SSL も正規表現によるメールの削除も、今回の用途には必要ありません。

Makefile を よく読むと #FLAGS = -O3 # for mydns.jp system simple function と書いてありました。 親切にも MyDNS ユーザ用のオプションが用意されていた訳です。 この行のコメントを外し、フルオプションの方( FLAGS = -O3 -DIPv6 -DKILLLIST -DUSE_SSL # full option IPv6, Kill List & SSL )をコメントアウトすると、ビルドできました。 めでたしめでたし。

irb で日本語表示

Dec 31, 2009
$irb
irb(main):001:0>puts "あああ"
"\343\201\202\343\201\202\343\201\202"
=> nil

上の例のように、日本語出力が読めない問題。

$KCODE に使用中のターミナルの文字コードを設定すれば良いようです。 UTF-8 なら $KCODE = 'u' 、EUC-JP なら $KCODE = 'e' など。 irb コマンドのオプションでも指定できます。 irb -Ku とか irb -Ke とか。

via irb で日本語出来た – 只今 Ruby 勉強中 – Rubyist

ascii コード

Dec 9, 2009

How else would you get away with swearing in a paper? – CollegeHumor picture を訳してみました。

Poem.

You translated my poem, I congratulate you. I wish I could rhyme with poem, but its very hard to. I just beguiled you,

irb で下のような関数を書いてから、ひたすら 0 と 1 を打ち込み・・・。

class String
  def bin
    Integer('0b' + self)
  end
end

def decode(ascii)
  0.step(ascii.size - 1, 8) do |num|
    puts ascii[num..(num + 7)].bin.chr
  end
end

作る方は簡単でしょうが、読む方は大変です。