gitインストール

Mac で screen 起動後に pbcopy を動くようにする方法 | Supernova で必要になったのでインストール。

作業履歴

/* macportsからインストール */
$ sudo port install git-core

/* screenのソースを落としてみる */
$ git clone  git://git.sv.gnu.org/screen.git

Perlモジュールをパスを検索

※ 2010/03/06 追記:

普通に「perldoc -l <モジュール名>」で調べられた。。。。今迄知らなかった…。


いつもPerlモジュールのコードを読むときは「perldoc -m モジュール名」としているが、モジュールのパスだけ知りたいときもある。
そんなときのために簡単なコードを書いてみた。

sm.pl

#! /opt/local/bin/perl -w
use strict;

use File::Find;
use File::Spec::Functions;
use File::Basename;
use Getopt::Long;


my $sModPath = ''; # path to Module file (like path/to/module).

my %opt = (
    full_path       => 1,
    m_name          => undef,
);
GetOptions(
    'full_path!'    => \$opt{full_path},
    'm_name=s'      => \$opt{m_name},
) or usage();


init_opt();

find {
    wanted      => \&filter,
    no_chdir    => 1,
}, @INC;


sub filter
{
    if (/$sModPath\.pm$/) {
        if (!$opt{full_path}) { # Only file name required.
            $_ = basename($_);
        }

        print canonpath "$_\n";
    }
}

sub init_opt
{
    if (defined $opt{m_name}) {
        my @aModPath        = split /::/, $opt{m_name};
        $sModPath           = catfile(@aModPath);
    }
}

sub usage
{
    print STDERR "USAGE: $0 [--full_path] [--m_name <module::name>]\n";
    exit 1;
}

使い方

/* 全てのモジュールをフルパスで取得 */
$ sm.pl

/* <module::name>のパスを取得(フルパス) */
$ sm.pl --m_name <module::name>

/* <module::name>のパスを取得(モジュールファイルのみ) */
$ sm.pl --m_name <module::name> --nofull_path

Hadoop始めました

Hadoopを買ったが、早速p.24のサンプルで躓いたOTZ
以下のページを参考にやったらできた。たぶん後で追記する。
自作したHadoopのジョブを動かす - 研究メモ


この本一冊でいけるかと思ったけど404 Not Foundなども併せて読まないと理解できなそうだな。。。


あと、Hadoopのために Java-1.6.x を入れようとして気づいたが、イントールしただけじゃ古いパスを見続けてたり、シンボリックリンクを付け替えないといけなかったり、色々とカオスだった(Mac OSXの場合)。
素直に会社のサーバを使わせてもらったほうがよさそう。

CREATE TABLE release ではまった

以下のようなスキーマを書いたら、syntaxエラーになって小一時間悩んでしまった。

CREATE TABLE release (
...
);

エラーの原因は「release」が予約語だったこと。
それは無いだろうと思って調べなかったら、実際は予約語だったというお話…。


参考: MySQL :: MySQL 5.1 リファレンスマニュアル :: 8.3 MySQLでの予約語の扱い

Macで開発用SMTPサーバを立てたい

どうすればよいか?

postfixをスタート
$ sudo postfix start

ログはここ
$ tail -f /var/log/mail.log

これで無事、SMTPサーバが起動した。(今回はSMTPサーバが動けばよいので詳しくは調べていない)
macのスタート時にSMTPサーバを起動するには「/etc/hostconfig」を以下のように編集すればよいらしい。(確かめていないので間違っているかも)

/etc/hostconfig に 「MAILSERVER=-YES-」を追加
$ sudo vim /etc/hostconfig
...
MAILSERVER=-YES-
...

参考ページ:
guess what?: Macで開発用SMTPサーバをたてたい!:情報源。
OS X ハッキング! (19) システム環境設定と/etc/hostconfigの関係 | マイナビニュース:/etc/hostconfig について




localホスト宛に送信テスト(perlスクリプト):

$ vi email_send.pl
use MIME::Lite;
use Jcode;

$email      = 'hoge@localhost';

$content    = <<"EOF";
Hello!!!!!!!!!!
MIME::Lite test.

EOF

my $msg = MIME::Lite->new(
    From        => 'sample@example.com',
    To          => $email,
    Subject     => 'Email Send Test',
    Type        => 'text/plain; charset=utf-8',
    Encoding    => '7bit',
    Data        => Jcode->new($content)->utf8,
);
$msg->send_by_smtp('localhost');


$ perl email_send.pl

早速ログを見てみると…

Sep 12 22:42:34 macbook postfix/smtpd[4519]: warning: database /etc/aliases.db is older than source file /etc/aliases
Sep 12 22:42:34 macbook postfix/smtpd[4519]: connect from localhost[127.0.0.1]
Sep 12 22:42:34 macbook postfix/smtpd[4519]: NOQUEUE: reject: RCPT from localhost[127.0.0.1]: 550 5.1.1 <hoge@localhost>: Recipient address rejected: User unknown in local recipient table; from=<sample@example.com> to=<hoge@localhost> proto=ESMTP helo=<localhost.localdomain>
Sep 12 22:42:34 macbook postfix/smtpd[4519]: lost connection after RCPT from localhost[127.0.0.1]
Sep 12 22:42:34 macbook postfix/smtpd[4519]: disconnect from localhost[127.0.0.1]

送れてないみたい。。


調べてみると、Postfix の設定で

ローカルユーザ名またはアドレスが $local_recipient_maps にリストアップされていないと、
Postfix SMTP サーバはアドレスを "User unknown in local recipient table" で拒否します。
 デフォルトの設定では、以下に示すように、受信者が UNIX アカウントもしくはローカルエイリアスである、
ローカル配送にデフォルトの Postfix local(8) 配送エージェントを使うことを想定しています:

    /etc/postfix/main.cf:
        local_recipient_maps = proxy:unix:passwd.byname $alias_maps

とある。
情報源:Postfix で知らないローカルユーザを拒否する



それじゃあ受信者を自分のunixアカウントにしてしまえってことで、上に示したコードの「$email = 'hoge@localhost';」を「$email = '<自分のunixアカウント>@localhost';」にしたらうまく行った。

もう一回実行
$ perl email_send.pl


ログを確認。「delivered to mailbox」と出力されているので送信された模様
$ less /var/log/mail.log
...
Sep 12 23:09:36 macbook postfix/local[4590]: 72C62E4B50B: to=<your_account@localhost.localhost>, orig_to=<your_account@localhost>, relay=local, delay=0.02, delays=0.01/0.01/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
...


ログだけでなく、ちゃんと届いているか、メールボックスを確認
$ less /var/mail/<自分のunixアカウント名>
...
Hello!!!!!!!!!!
MIME::Lite test.


※ 実際はメールボックスを「tail -f」しておいてから送信したほうが分かり易いが、説明し易くするため「less」を使用した

届いた!


今回はテストなのでlocalhost宛に送信したが、gmail宛に送信する場合は、postfixの設定やらヘッダのFromやらをvalidな値にしないとgmail側で弾かれてしまうので注意。
参考:MacのマシンからPostfixでGmailに送信できるようにする - F.Ko-Jiの「一秒後は未来」

MacVim 入れた

it's all text を入れた。エディタはmacvim - Vim for the Mac - Google Project Hostingを使うことにする。
MacVimには「mvim」という名前で起動用のシェルスクリプトも入っているので、こいつを「/Applications/mvim」に置いて it's all text 用のエディタとしてパス指定してやればOK。

mac だとEmacsキーバインドが快適に使えるので、ほとんど it's all text は使わないかもしれないけど。。