September 18, 2008

キー配置の変更, Ubuntu on Libretto






最近また会社の評価環境でLinuxホストが必要になったので、我が愛機であるLibretto先生に登場してもらいました。インストール方法は「ノートパソコンにUbuntuをインストール」を参照のこと。

インストール直後に早速気になったのがCapsLock。Aキーの左にあるこのキーが、なぜ必要のないCapsLockに割り当てられているのか、理解に苦しむ。日本語キーボードレイアウトを策定した昔の人、出て来い!

これを、より有用なCtrlキーに割り当てた奮闘記をメモ。




1) $ sudo apt-get install xorg
2) $ vim ~/.Xmodmap
--
remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Control_L
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L
---
3) $ startx
4) $ xterm -geometry 213x46+0+0
5) $ xmodmap ~/.Xmodmap

(解説)
1) Xサーバ、というかXorgがないと、key eventをcaptureしてswapしてくれるXの機能(xmodmap)が機能しないので、これをinstall。
2) 設定ファイルを作成
3) Xを起動。そっけないWindows Managerとxtermが起動する。xtermはexit(Ctrl+D)で閉じる。
4) Librettoの解像度を意識して新たにxtermを起動。環境に合わせて"213x46"の部分を調整しよう。LibrettoはこれでFullscreenのxtermが起動する。フォントサイズが小さいっっっ!フォントサイズはXresourcesファイルでフォントを変更すると調整できるのだが、検証中。
5) xmodmapを起動して、お望みのキー配置に変更。

(参考にしたサイト)
http://www.gentoo.org/doc/ja/xorg-config.xml
http://nwtr.at.webry.info/200503/article_21.html

July 28, 2008

Postfixの基本設定

postfix



Postfix

 仕事では実は使ったことはないけど、何度も検証・評価した経験があるPostfix。sendmailはわかるとして、意外とqmailの経験も長い。
 そんなほげおのMTAに対するイメージ↓

sendmail → 堅物、シンプル(単体のbinaryとconfig)、sendmail.cfを直接(ry


qmail → 変わり者、軽快(軽いbinaryとconfig)、The big qmail picturesとのにらめっこ


postfix → 優等生、基本設定が意外と難解(今回はココではまった・・・)







さて、Postfixの基本設定をまとめておく。ちなみに環境はUbuntu

$ sudo apt-get install postfix qpopper
$ cd /etc/postfix
$ sudo cp -p main.cf main.cf.default
$ sudo vim main.cf
--
mynetworksにSMTPクライアントのアドレスを追記
(例)mynetworks = 127.0.0.0/8, 172.20.0.0/24

home_mailboxにMailboxかMaildirを追記

inet_interfacesにallなどと記入。loopback-onlyとかだとNG。


 main.cfの各設定は、このサイトを参考にしました。
 注意事項としては、main.cfの設定変更後にpostfixに、設定の再読み込みか再起動をさせるのだが、inet_interfacesの設定変更後は、postfixを再起動させなければならない点に注意。私はこれにはまりました。


▼設定の再読み込み

$ sudo postfix reload



▼再起動

$ sudo postfix stop && sudo postfix start



▼設定変更後の再起動/再読み込み/送受信テストを行うときは、ログを参照しておきましょう。

$ tail -f /var/log/mail.log



▼また、postfixがTCP25番ポートで待ち受けているかどうかも、必ず確認すること。

$ netstat -ant | grep :25
tcp     0     0 0.0.0.0:25     0.0.0.0:*     LISTEN






(2008.7.31追記)


 Postfixのmain.cfのhome_mailboxと、qpopperが取りにいくMailboxのPathがマッチしていなかったために、POP3でメールが取れないという状況でしたので、修正します。



 正しくは、以下の2点をマッチングさせる必要があります。



  • qpopperは各ユーザのメールボックスは、/var/mail/以下にあるユーザ名のファイルを取りにいく

  • Postfixで受信したメールも、/var/mail/以下に保存する必要がある



 したがって、main.cfはdefault(何も指定しない)という状態でマッチさせます。




 ちなみに、stringsコマンドでqpopperが/var/mail/を見ているんだなということがわかります。/var/spool/mailは/var/mailへのシンボリックリンクです。






$ strings `which in.qpopper` | grep "/var/"
/var/spool/popbull
/var/mail
/var/spoolpop



 イメージはこんな感じ。/var/mail/usernameが一致している必要がある▼



てすと

postfix



Postfix

 仕事では実は使ったことはないけど、何度も検証・評価した経験があるPostfix。sendmailはわかるとして、意外とqmailの経験も長い。
 そんなほげおのMTAに対するイメージ↓

sendmail → 堅物、シンプル(単体のbinaryとconfig)、sendmail.cfを直接(ry
qmail → 変わり者、軽快(軽いbinaryとconfig)、The big qmail picturesとのにらめっこ
postfix → 優等生、基本設定が意外と難解(今回はココではまった・・・)

さて、Postfixの基本設定をまとめておく。ちなみに環境はUbuntu

$ sudo apt-get install postfix qpopper
$ cd /etc/postfix
$ sudo cp -p main.cf main.cf.default
$ sudo vim main.cf
--
mynetworksにSMTPクライアントのアドレスを追記
(例)mynetworks = 127.0.0.0/8, 172.20.0.0/24

home_mailboxにMailboxかMaildirを追記

inet_interfacesにallなどと記入。loopback-onlyとかだとNG。


 main.cfの各設定は、このサイトを参考にしました。
 注意事項としては、main.cfの設定変更後にpostfixに、設定の再読み込みか再起動をさせるのだが、inet_interfacesの設定変更後は、postfixを再起動させなければならない点に注意。私はこれにはまりました。

 設定の再読み込み

$ sudo postfix reload


 再起動

$ sudo postfix stop && sudo postfix start



 設定変更後の再起動/再読み込み/送受信テストを行うときは、ログを参照しておきましょう。

$ tail -f /var/log/mail.log



 また、postfixがTCP25番ポートで待ち受けているかどうかも、必ず確認すること。

$ netstat -ant | grep :25
tcp     0     0 0.0.0.0:25     0.0.0.0:*     LISTEN

July 23, 2008

TFTPをUbuntuでやってみた





TFTP

FTPやWindowsファイル共有やrcpがあれば出番がなかなかないTFTPですが、簡易プロトコルゆえに制限環境下(要は機能制限をかけられた環境下)では重宝される時もあります。特に、ネットワーク機器のconfigやOSのバックアップやリストア。CiscoもIOSやconfigはTFTPサーバを利用することができます。

WindowsでTFTPサーバを用意する時に役立っていたのは、3CDaemon。かなり古いソフトウェアだけど、まだ生きてるんだね・・・。

Linux環境があれば、tftpdを動かせばできるんじゃね?という感じなので、Ubuntu-8.04で試してみた。


▼TFTPに関するパッケージhあ何があるか詮索

apt-cache search tftp



▼tftpdとtftpをインストール
sudo apt-get install tftpd tftp

▼inetd.confから、tftpdのディレクティブを確認する
grep tftp /etc/inetd.conf

▼TFTPのディレクトリを適当に準備
sudo mkdir /srv/tftp
sudo chmod 777 /srv/tftp

▼テスト
tftp 127.0.0.1

June 8, 2008

ノートパソコンにUbuntuをインストール




 自宅サーバを立てたいなという年に1回は起こる動機によって、前愛機である"Libretto L5/080TNKW"が借り出された。
 これまでは自作タワーPCにUbuntuで立てていたけど、騒音と電気代の関係であまり長続きしなかった。ノートパソコンであればその点大丈夫。
 その手順を簡単にメモ。



  1. インストーラーを準備する。Ubuntu 8.04 LTS Serverを選択。このバージョンのUbuntuだと、無線LANインターフェースをデフォルトで認識してくれるのでとても助かる。
  2. Librettoでインストーラーを立ち上げる。パーティションは、10GB(/)、500MB(swap)、7GB(/home)、隠しパーティションにWindowsXPのリカバリーデータを残しておく。
  3. 普通にインストール。SSHサーバは必ずインストールしよう。
  4. 再起動後に下記メッセージが出て起動不能。

    The kernel requires the following features not present on the CPU 0:6
    Unable to boot - please use a kernel appropriate for your CPU

  5. ここのサイトを参考に、linux-genericパッケージをインストールする。LibrettoはCrusoeなのでこんなバグにハマってしまうのだろう。
  6. NTFSを別途マウントしたい場合は、ここのサイトを参考に /etc/fstab を書き換えよう。


 最近はノートパソコンへのLinux導入がうまくサポートされてきたので、一昔のような苦労をしなくて良くなった。そんな一昔前の苦労があってこそ、今の楽に思える状況があるんだろうなとも思うけど。




▼ 2008/9/18 追記




リンク先にあるgeneric kernelのinstallationもメモっておく。

1)CD bootしてResuce Blocken Systemを選択。
2)ウィザードを進めていくと、Resuceするドライブを選択する画面になるので、root file systemを選択。/dev/hda1とかかな。
3)Execute a shell in the installer environment
4)Internet connectoinとDNS resolvingを確認するかsetupする
5)# chroot /target
6)# aptitude update
7)# aptitude install linux-generic
8)reboot, Ctrl+Alt+Del
9)boot直後にESCを押してgrubメニューでlinux genericを選択しbootする
10)/boot/grub/menu.lstを編集し、linux genericでdefault bootするようにする。
11)ついでに、Librettoの隠しパーティションを起動できるようにしておく
> > http://hogeo.jp/blog/memo/2008/07/libretto_l5.html

June 2, 2008

Ruby入門:ERBによるHTML内でのRuby実行


rupauk's scrapbook ~ programming notes by striatic



 前回の続きで、RubyによるWeb API開発環境を整える準備です。

 HTMLにRubyを組み込む場合、通常では /usr/local/bin/ruby インタプリタを呼び出して、Rubyのコードを読ませて、結果的にHTMLを出力するでしょう。
 その場合の大きな問題点があって、HTMLのコードをひとつひとつprint文の連続になってしまうことです。HTMLのタグをいちいちprintしまくるなんて、汚すぎて見れたものじゃないです。

 PHPのようにHTMLで <?php ・・・ ?> とくくって、HTMLの中にコードを組み込む形にしないと、ほんとしんどい。

 ソリューションとしては、eRubyかERBを使用するということです。私の使っているサーバはeRubyが利用可能な状態ではなさそうなので、ERBに頼ることにしました。
 手順としては以下の通り。


  1. rubyのパスを確認する
  2. erb.cgiを用意する。
    ここからerb-cgi.txtをダウンロードしてerb.cgiとしましょう。chmod +x erb.cgi などとすることを忘れずに。

  3. .htaccessで、特定の拡張子(rhtmlなど)は、用意したerb.cgiに読ませるようにする。環境によって適宜読み替えてください。

    AddHandler rubypage .rhtml

    Action rubypage /cgi-bin/erb.cgi

  4. ERBで読ませるサンプルコードを書きましょう。

    <html>

    <body>

    Hello <%= "Ruby" %> World!

    </body>

    </html>


  5. 作成したrhtmlファイルなどにアクセスしてみましょう。


 これで、ERBによってうまくHTMLにRubyを埋め込むことが出来ますね。

参考:http://earth.cubic-sight.net/2007/10/erbkml_12.html
参考:http://kahori.com/ruby/earrings/

June 1, 2008

Ruby入門:初心者による初心者のためのRuby環境準備


ruby's in the sand by bill dwyer




 都合2度目のRubyへの挑戦。
 まずは環境準備です。
 最近導入したWindows Vistaでの導入だけど、まあ多分問題なくいくでしょう。


1.必要なファイルをダウンロードする

 必要なものは、Active Script RubyとRDEとRubyリファレンスマニュアルです。
 下記を参照して入手しておきましょう。

http://homepage2.nifty.com/sakazuki/rde/setup.html


2.Actuve Script Rubyのインストール

 ダウンロードしたインストーラを実行してインストールすると、デスクトップにruby consoleのショートカットが出来ます。
 これは、環境変数のPATH変数を変更しなくても、RubyへPathを通してくれてコマンドプロンプトを起動してくるもので、とりあえずこのショートカットからコマンドプロンプトを起動することにします。
 ruby consoleから ruby -v と入力して、Rubyが使えることとバージョンでも確認しましょう。


3.RDEに必要なPathを入力

 RDEインストール直後に出てくるオプションウィンドウのRuby設定項目で、Ruby本体とHTML HelpファイルのPathを指定する。


4.インターフェースを日本語に

 RDEのオプションから、Config FileにRDE\TranslatonsにあるJapanese_*.xmlファイルを指定する。
 また、ツールメニューのエディタ設定で、フォントをMSゴシックに、文字セットを日本語にしておこう。


5.サンプルコードでRubyを試す

 指定したURLのはてなブックマークの件数を調べるコードを書いてみましょう。


require 'xmlrpc/client'



pages = [

'http://www.google.co.jp/',

'http://www.yahoo.co.jp/'

]



client = XMLRPC::Client.new2('http://b.hatena.ne.jp/xmlrpc')

client.proxy('bookmark').getCount(*pages).each { |page, count|

puts "#{page} : #{count}"

}



 適当にファイルを保存しておきつつ、F5キーを押すか、実行メニューから実行を実行すると(笑)、RDEの左下にあるコードウィンドウで結果出力を確認できます。


http://www.yahoo.co.jp/ : 24

http://www.google.co.jp/ : 1884

Complete(0)


 インターネットに接続されている環境であれば、直接Web APIにリクエストを送って、このようにすぐ結果を確認できます。
 後はそれをHTMLに組み込んで、ウェブサーバにアップして、ブラウザで確認することを繰り返せばよいでしょう。
 ウェブサーバではRubyを使える環境であることをあらかじめ確認しておいてください。自前のサーバならともかく、レンタルサーバなら使わせてもらえない場合もあります。
 私が利用しているロリポップのサーバは使えるので、一応問題はなさそうです。


6.今後のRuby入門

 ひとまず私の場合は、RubyでWeb APIのサンプルコードを書き続けて、Rubyの文法力とWeb APIのノウハウをためていこうと思います。
 トレーニングや勉強する際には、モチベーションがあがるやっていて楽しいことを目標におくべきです。「やらなければならない」というような真面目な義務感は意外と長続きしません。
 私はウェブコンテンツを作ることとプログラミングが好きなので、これを目標にします。その参考になるリンクをメモメモ〆(゜ー゜)

MASHUPEDIA
Disapar Journal

 うーん、ググれどググれど、RubyでWeb APIを呼び出すサンプルコードは見つかりません。というか、そもそもWeb APIを呼び出すこととRubyの文法は別でまったく別物なのに、どうしてか"ruby web api"と検索してしまうのは初心者だからでしょうか。きっとそうなのでしょう。
 またとりあえず、RubyでWeb APIをやりたい人がたくさん訪れるウェブサイトになるためにも、いろいろとコードを書いて試してみることにします。自分のウェブサイトのアクセス数が伸びることも大事なモチベーションです。楽しいことです。

May 13, 2008

RubyかPythonの二択で悩んでいる人がしっておくべきこと


Compare with Logitech by kayakleader




Ruby(ルビー)は、まつもとゆきひろ(通称Matz)により開発されたオブジェクト指向スクリプト言語であり、従来Perlなどのスクリプト言語が用いられてきた領域でのオブジェクト指向プログラミングを実現する。Rubyは当初1993年2月24日に生まれ、1995年12月にfj上で発表された。名称のRubyは、プログラミング言語Perlが6月の誕生石であるPearl(真珠)とほぼ同じ発音をすることから、まつもとの同僚の誕生石(7月)のルビーを取って名付けられた。

Wikipediaより引用


Python(パイソン)は、Guido van Rossumによって作られたオープンソースのプログラミング言語。オブジェクト指向スクリプト言語の一種であり、Perlとともに欧米で広く普及している。イギリスのテレビ局 BBC が製作したコメディ番組『空飛ぶモンティ・パイソン』にちなんで名付けられた。Pythonには爬虫類のニシキヘビの意味があり、Python言語のマスコットやアイコンとして使われることがある。

Wikipediaより引用

 どちらも比較的新しめで、ウェブとの親和性が高く、これからの成長性がありそうな言語としてよく比較される(私の頭の中では・・・)。
同時に思うのは、どちらを始めに集中して学ぼうかということ。どっちもやればいいじゃんと言うのは愚問で、精神と時の部屋があれば入りたい思いではある。

 そういう時に必ず使うツールがGoogle Trends。Googleでの検索トレンドをグラフ比較してくれる。国や期間も指定できて、リサーチにはもってこい。
 そこで、RubyとPythonのトレンドを検索してみる。

 まずは、日本でのトレンド。


 Search volumeとNews reference volume共に、Rubyが常に上回っている状態。今後もこの差は開きそうだ。

 では、アメリカではどうか。


 2005年を境にRubyがPythonを上回っている。日本生まれの言語が、Googleが愛用する言語に勝っているのだろうか。


(ちょっと考察)

 検索リクエスト件数が増えているタイミングが、日本でもアメリカでも2005年からである。その時に何があったかというと、Ruby on Railsの登場である。
 37SignalsのプログラマーであるDavid Heinemeier Hanssonらによって2005年に日の目を見たRuby on Railsは、Web 2.0のトレンドの波に乗って大きな注目を浴び始めた。その裏にはまつもとゆきひろが生み出したRubyがいたわけだ。
 RubyとRuby on RailとWeb 2.0はセットと考えるのが良いかもしれない。

(考察終わり)

 自分がやりたいのもウェブプログラミングであり、舞台はWeb 2.0。日本でも話題が多く学びやすいRubyがいいんじゃなかろうか。
 ついでに私のこのブログも、妙にRuby関係で検索してたどり着く人も多いので、いっそのことRubyに飛びついても良い気がするのである。


 "Web API Ruby"でGoogle検索すると、ほげおメモがトップに来るのがちょっとした自慢?