テストメールを簡単に送るノウハウ

いいめものおかげなのかどうなのか分からないのですが、メールを受け取ってアレコレするというシステムのご依頼をわりといただいています。
で、そういうシステムを作るとき、試しにそのシステムにメールを送ってみる、という作業が欠かせません。
宛先を入れて、本文を適当に日付とか入れて、送信ボタンを押して…

こういうとき、Yahoo!メールとかgooメールのアカウントを一個持っておくと便利です。
一回メールを送信したあと、
goo_mail1.PNG
送信後の画面でリロードすれば、
goo_mail3.PNG
同じ内容のメールをもう一通送ることができます。
普通に使っていると、そりゃまずいだろ、と思うような機能なのですが、こういうときは便利です。

お金持ちになりたい理由

つまりこういう↓のを見たときに、「やってみればいいじゃない!お金出すよ?」とか言ってみたい。
ギークハウスプロジェクト計画 – phaのニート日記
とてもおもしろそうなんだけど、運営資金が回収できるだけのビジネスモデルはなかなか思いつかなくて。
こういうときに、とりあえず1000万円くらいあきらめていいお金があれば、とりあえず一年やってみて、それから考える、とかできるんじゃないのかな、と。
実際やってみると、意外なところが苦労することが分かったり、意外と苦労しないポイントも見えてくると思うから、今考えているのとは全然違うアイデアだって浮かぶかもしれない。
というわけで、こういうときに「じゃあやってみなよ♪」ってお金の出せるパトロンになれるとステキだな、と思う次第。
あ。「じゃあそのために今日から努力を…」「本気でお金持ちになりたかったら本気でビジネスを…」とかそういうお説教に用はないです。最終的にお金持ちになった時、そういうお金の使い方をしたいよね、というお話です。

もくもく会をやってみた。

マクドナルドや喫茶店で各自勝手にもくもくと作業する「もくもく会」を開催してみました。

2008-07-16 – もくもく会ポータル


携帯百景(ケイタイヒャッケイ)


開催といっても何をしたわけでもなく、目印(もぎゃ)を出して勝手に開催を宣言しただけです。それをみて誰か来たら儲け物、こなくても黙々と予定通り作業すればいい、それがもくもく会。

予想通り誰も来ませんでしたが、仕事は淡々と進めることができました。

まあ今後も気が向いたらやろうかと思うので、興味がある方はもくもく会ポータルをウォッチしてみてくださいませ。

phpでapacheのログにログを出す方法

 error_logでエラーログに出せばよい。

おわり。



…いやでもさ。まずいことがあった時に出力されるはずのエラーログに変数の値をprintfデバッグするのはどうなのさ? ファイルを分けたい時もあるでしょ?

そういう時は、apache_note関数とapacheのhttpd.confの記述を組み合わせる。



httpd.confに

<VirtualHost *:80>
ServerName test1.example.com
ServerAlias localtest1.example.com
DocumentRoot /var/www/someapp/html/
    LogFormat "%h %l %u %t \"%r\" %>s %b %{phpdebug}n" phpdebug_log
    CustomLog /var/www/someapp/log/phpdebug_log phpdebug_log
ErrorLog /var/www/someapp/log/error_log
TransferLog /var/www/someapp/log/access_log
</VirtualHost>



 こんな具合にLogFormatとCustomLogを書いておく。



で、PHPの方では、

apache_note("phpdebug", "php debug message: {$_SERVER['REMOTE_ADDR']} ({$_SERVER['HTTP_USER_AGENT']})");



こんな感じでログを出す。



すると、CustomLogで書いたファイル名のファイルにログが出力される。


[daisuke@hige ~]$ sudo tail -f /var/www/someapp/log/phpdebug_log
192.168.11.128 - hoge [08/Jul/2008:09:13:33 +0900] "GET /graph/someapp.php HTTP/1.1" 200 4856 php debug message: 192.168.11.128 (Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15)
192.168.11.128 - hoge [08/Jul/2008:09:13:48 +0900] "GET /graph/someapp.php HTTP/1.1" 200 4856 php debug message: 192.168.11.128 (Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15)
192.168.11.128 - hoge [08/Jul/2008:09:16:37 +0900] "GET /graph/someapp.php HTTP/1.1" 200 4856 php debug message: 192.168.11.128 (Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15)



こうしておけば、apacheの通常のログと同様にログファイルを扱うことができるので、ログのローテーションとかパースに既存の仕組みを使うことができて嬉しい。


おまけ



 別のファイルに出すと、tailでログを監視するときerror_logと二つのウィンドウを開かないといけないじゃないかって?

tailはなんとファイル名を複数監視することができる。


[daisuke@hige ~]$ sudo tail -f /var/www/someapp/log/error_log /var/www/someapp/log/phpdebug_log
==> /var/www/someapp/log/error_log  /var/www/someapp/log/phpdebug_log <==
192.168.11.128 - hoge [08/Jul/2008:09:13:33 +0900] "GET /graph/someapp.php HTTP/1.1" 200 4856 php debug message: 192.168.11.128 (Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15)
192.168.11.128 - hoge [08/Jul/2008:09:13:41 +0900] "GET /graph/someapp.php HTTP/1.1" 200 - -
192.168.11.128 - hoge [08/Jul/2008:09:13:48 +0900] "GET /graph/someapp.php HTTP/1.1" 200 4856 php debug message: 192.168.11.128 (Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15)
192.168.11.128 - hoge [08/Jul/2008:09:16:37 +0900] "GET /graph/someapp.php HTTP/1.1" 200 4856 php debug message: 192.168.11.128 (Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15)


CentOS 5のRuby、はまり処

 CentOS5.2でyumを使ってrubyを入れると、ruby 1.8.5が入る。一応rails動くからいいかなぁ、などと思って使おうとすると、意外とはまったのでメモ。



なんではまるかというと、Rubyのパッケージが複数に分かれていて、yum install rubyとしただけだと、意図するものが入らない。


  • ruby
  • ruby-devel
  • ruby-irb
  • ruby-libs
  • ruby-rdoc
  • ruby-ri



普通にRubyを使おうと思ったら、上記全部入れておく必要がある。



でないと、こんなことになる。



例1:railsを入れたときにwarning

(rdocがないから)


[furukawa src]$ sudo gem install rails --remote
Bulk updating Gem source index for: http://gems.rubyforge.org
Successfully installed rake-0.8.1
Successfully installed activesupport-2.1.0
Successfully installed activerecord-2.1.0
Successfully installed actionpack-2.1.0
Successfully installed actionmailer-2.1.0
Successfully installed activeresource-2.1.0
Successfully installed rails-2.1.0
7 gems installed
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require': no such file to load -- rdoc/rdoc (LoadError)
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
from /usr/lib/ruby/site_ruby/1.8/rubygems/doc_manager.rb:68:in `load_rdoc'
from /usr/lib/ruby/site_ruby/1.8/rubygems/doc_manager.rb:38:in `generate



例2:sqlite-rubyを入れたとき、ヘッダがないといわれる

(ヘッダファイルがないから)


[furukawa src]$ sudo gem install sqlite-ruby
Building native extensions.  This could take a while...
ERROR:  Error installing sqlite-ruby:
ERROR: Failed to build gem native extension.
/usr/bin/ruby extconf.rb install sqlite-ruby
can't find header files for ruby.
:



例2:sqlite-rubyを入れたとき、irbがないといわれる

(irbがないから)


[furukawa src]$ sudo gem install sqlite-ruby
Building native extensions.  This could take a while...
Successfully installed sqlite-ruby-2.2.3
1 gem installed
/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require': no such file to load -- irb/slex (LoadError)
from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'
:



Rubygem-develでも、「それはまずかったと思う」と指摘されています。

Maybe it should more gracefully fail. I was using CentOS at the
time, and had installed ruby with 'yum install ruby'. It is an additional
install 'yum install irb' to get irb. :(

(Re: error when irb not installed: msg#00092)



 メンテナの方がパッケージを分けたのにはそれなりの理由があるのだと思いますし、

#サーバ上だと、Rubyで書いたプログラムさえ動けばいいからかなぁ?



とはいえ、Rubyはirbも含めてRubyだと思っている人にとって見ればびっくりする状況だと思うので、とりあえず情報提供としてブログに書いておきます。





(追記)

yum一発でなんでも入る状況が空気のように当然になっていて、逆に動かないときだけ非難されちゃうメンテナの方はとても大変だと思います。この記事も、別にメンテナの方を非難したいわけではなくて、当面困らないための情報提供として書かせていただいた次第。日本語で書いて通じるかどうか知りませんが、メンテナの方々にはとても感謝していることを、ここに明記しておきます。

ブログパーツの作り方まとめ

 いいめもプロジェクト久しぶりのリリースとして、【いいめもウォーキング】というのを開発中です。

 携帯電話からの情報蓄積にこだわってきたいいめもとしては、自動でメールを送ってくれる仕組みはとても興味深く見ています。

F906i のウォーキングチェッカー(万歩計)を使ってみる : 僕は発展途上技術者


とはいえ、歩数の管理は携帯だけで完結していますので、じゃあブログパーツにしますか、ということになりました。

テケトーに引数を受け取ってHTMLを生成するCGIは書けますが、ブログパーツってどうするの?と思って調べながら作ったので、簡単にまとめです。

ブログパーツの仕組み

 たいていのブログでは、

<script src="hogehoge.js"></script>

というようなコードを書くことで、外部にあるJavaScriptを実行することができます。


<script src="http://example.com/hogehoge.js"></script>

と書けば、他のサーバにあるJavaScriptを実行することもできます。

すると、上のhogehoge.jsが

document.write('いいめもウォーキング');

となっていれば、結局、

<script src="http://example.com/hogehoge.js"></script>

の位置に「いいめもウォーキング」が差し込まれることになるわけです。

つまり、HTMLとCSSでブログパーツを書いて、それをdocument.writeで出してあげればいいことになります。


ユーザーごとに表示を変える

 このままだと、すべてのユーザーが同じコードを表示することになってしまいます。

ブログパーツとしては、自分のサイトの情報を表示してもらいたい。

そのためには、何らかの形で、ユーザーIDを渡してもらう必要があります。

そこで、PHPなりRubyなりPerlなり、言語はなんだっていいので、引数でユーザーIDを受け取って、そのユーザー向けのブログパーツコードを返すCGIを用意すれば、ユーザーごとに違うデータを返すことができるようになります。

「それって簡単に他人の情報を見られちゃうよね?認証とかなくていいの?」と一瞬思ったのですけど、考えてみたらブログ上に表示された時点でだれでも見られる情報ですから、認証は不要です。



ちなみにいいめもウォーキングでは、あえてCGIを使いませんでした

サーバー上に、各ユーザー向けのブログパーツがずらりと置いてあります。



hogehoge-000001.js

hogehoge-000002.js

hogehoge-000003.js


ユーザーさんには、hogehoge-(ユーザーID).jsを呼び出してもらいます。

動的に生成しなくても、ユーザーさんから歩数計データが送られてきたタイミングでブログパーツが丸ごと更新される、ので、あとは静的データで十分、という考え方です。

キャッシュとか考えなくていいので、とっても楽ちんですが、デザインが変わった際、動的にデータが差し替わらないのが難点といえば難点ですね。


文字コードについて

 当初、文字化けするので文字コードごとにブログパーツを用意していたのですが。

<script type="text/javascript" charset="UTF-8" src="http://example.com/hogehoge.js"></script>



という具合にして文字コードを指定してあげることができるみたいです。こうすると、一つのコードでたいていのブログに対応させることができます。


今の悩み

 ブログによってサイドバーのサイズが違うのです。



ブログパーツの作り方:横幅は何ピクセル?:WebClip – ウェブのニュースと Second Life (セカンドライフ) – CNET Japan
というような話もあって、実際千差万別。

こちらは小サイズが横幅160ピクセル。大サイズ横幅424がピクセル。

このように複数選べると理想的。もし企業でやるならこのほうがいいかもしれない。ブログの本文でコメントつきで紹介してもらうときなど、大サイズを掲載してもらえるかもしれない。



ショート/トール/グランデ(S/M/L)とサイズ別のブログパーツを生成することは難しくないですが、そうするしかないのかなぁ。何かもうちょっといい手はないものか。