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)とサイズ別のブログパーツを生成することは難しくないですが、そうするしかないのかなぁ。何かもうちょっといい手はないものか。

プログラマががんばって投資家の正体を説明するよ!

自分、投資の専門家ではないので、もしかしたら細かい部分では間違っているかもしれないし、だいたいなんでプログラマがパソコンサポート業の方に向かって投資を説明しなきゃいけないのか、自分でも意味がわからないのですが(笑)、でもなんとなく上手に説明できるような気がしたので試しにやってみます。

話の種ということでご容赦を。

このところ、ガソリン代は毎月約10円ペースで値上がりしてます。

一向に値下がりの気配を見せません。

テレビやラジオで聞く限りでは、アメリカのバブル崩壊(サブプライムショック)のおかげで、投資先を見失ったアメリカの投資家の利益を得るために、原油先物取引に金が流れ込んだために値上がりしているんだそうです。

つまり、ガソリンが値上がりした分は、全て投資家が利益を得るためだけに回っているわけです。

頼むから、どこの誰がそんな迷惑な方法で利益を得ているのか、誰か名前を公表してくれ…。

そういう迷惑なヤツは、とっとと晒し者にされてしまえ!と思っているのは私だけではあるまい。

(パソコントラブル出張修理・サポート日記: いつものガソリンスタンドにて。)

誰って、あなたなのです。

ここでいうあなたというのは不特定多数のみんなという意味で、笹本さん(記事を書いた人)おひとりを名指ししている訳じゃあないですよ。でも、「そんな迷惑な方法で利益を得ている」人を全部晒し者にしたら、たぶん笹本さんご自身のお名前もそこに載るだろうと思います。


笹本さんは、自営業なので国民年金でしょうか。何らかの年金には入っておられますよね?

いろいろ悪評の出ている年金制度ではありますが、(たいていの場合)払ったお金よりたくさんのお金がもらえる制度なのは事実です。

あと、10年預けたらちょっぴり増えて戻ってくる医療保険なんかもかけておられないでしょうか?

毎年10万円払って、無事故だったら10年目に101万円返します、みたいなやつです。

年金も保険も、すっごいお金持ちがいておこづかいをくれているわけじゃないので、何らかの方法で預かったお金を増やさないといけません。

さて、どうやって増やしているのでしょう?


笹本さんみたいに事業をする人に貸し出す方法もあります。

あるいは、事業をしない人でも、教育ローンとかおまとめローンとか、まあ様々な名目でお金を貸して、利子を付けて返してもらうことで、お金を増やす方法もあります。

自分たちで事業をして増やす方法もあります。東京にでっかいビルを建てて企業に貸し出して、かかったお金より賃料の合計が大きくなればお金が増えるよね、とか。

いずれもそれぞれやっていると思うのですが、もっと効率のいい投資のやり方もあります。プロに任せる方法です。

プロは、様々な投資対象を知っていて、その中でもっとも効率のいいやり方を見つけて、投資してお金を増やしてくれます。

素人が自分でパソコンを直せないから笹本さんにお願いするのと同じ理屈で、保険会社や年金組合は、お金を増やしてくれるプロにお願いすることにしたわけです。


これが、笹本さんが言われている「投資家」と呼ばれる人たちの正体です。

投資家ってまるでお金持ちが道楽でやっているみたいに思っておられるみたいで、実際そういう人だっていると思いますが、僕らの年金とか保険で預けたお金だって、投資家によって運用されているのです。

投資家の仕事は、お金を増やすことです。笹本さんが壊れたパソコンを直せなかったら次から仕事がこなくなるのと同様に、投資家の皆様は、お金を増やせなかったら次から仕事がこなくなる運命を抱えています。当然彼らとしては、もっとも儲かると判断されるところに預かったお金を投資「しなきゃいけない」のです。

もうわかったと思いますが、投資家の皆様が今一番儲かる方法はなんだろうと考えた結果、それは原油投資だね、ということになったわけで。

この投資家にお金を預けたのは誰だ!?って保険会社や年金組合で、そこにお金を預けたのは誰だ!?っていうと、結局僕らだったりするわけです。


笹本さんがお客様のパソコンを直した結果、新品のパソコンが売れなくなったじゃないか!日本のGDPが下がっているぞ!(そういう迷惑なヤツは、とっとと晒し者にされてしまえ!)といって批難することはできないですよね?投資家にとっても同じことです。お金を増やすのが仕事ですから、投資対象が値上がりしてみんなが困ったと言われても、そこまで責任とれませんよ、というところだと思うのです。

彼らは彼らなりに、僕らのために一生懸命働いているのです。いえ、お金持ちのためにはもっと一生懸命働いているかもしれませんけど。


そうはいっても、投資で僕らの実生活に悪影響が出てくるようでは困ってしまいます。だいたい、年金の利子よりガソリン代の方が高くつくようでは意味がないのはよくわかります。

そう思うのであれば、そこは、政治の領域です。

お金を増やすために銀行強盗をしてはいけないのと同様に、原油や食料の取引については本当に必要な人以外買ってはいけないことにするとか、そういう取引での利益の税金を高くしてあまりうまみが出ないようにするのか。なんらかのルールを考えるのは政治であって、投資家の仕事ではないのです。

そのやり方もまた難しいからみんな苦労しているのですが。とりあえず、投資家というのは悪の秘密結社の手先ではないんだぞ、というお話でした。

[ruby]ハッシュのソートについてのメモ

なるほど、と思ったので自分の勉強メモ。rubyにおけるハッシュのソートについての考え方。
rubyでハッシュにいろいろデータを入れて取り出すとき、ソートして取り出したいよね、ということがよくある。
そうすると、ハッシュをソートしたいという発想が当然出てくるのだけれど、RubyにはHash::sortというメソッドそのものがない。
なぜか。そもそもハッシュというのは順序が保存されないもの([ruby-list:43857] Hashへの生成順は保障されないのか?)。なので、順番を並べ替えるソートという考え方に意味がない。(ソートしたってその順番通りに並ぶ保証がないのだから)
じゃあ、ハッシュのデータを順序どおりに取り出すときどうするか?そういうときは、順序が保存される配列に変換してからソートを行う。

irb(main):018:0> var = {
irb(main):019:1* 2=>"2",
irb(main):020:1* 1=>"1",
irb(main):021:1* 3=>"3"
irb(main):022:1> }
=> {1=>"1", 2=>"2", 3=>"3"}

#ね、順序が変わったでしょ?

irb(main):023:0> var_sorted_array = var.to_a.sort{|a,b|
irb(main):024:1* (a[0]  b[0])}
=> [[1, "1"], [2, "2"], [3, "3"]]

いったん配列にしたものをソートすることで、順序を決めて取り出すことができる。
使うときはこんなふうに。

irb(main):030:0> var_sorted_array.each{|var|
irb(main):031:1* p var[0]
irb(main):032:1> p var[1]
irb(main):033:1> }
1
"1"
2
"2"
3
"3"

会社を辞めようとおもったきっかけ

そういえば書いていなかった気がする。

正式な理由としては退職と独立のご報告に書いたのですが、そもそもなんでそんなふうに思ったのか、そのきっかけ。




当時の職場の近所に公園があって。自分、よくそこでお昼ご飯を食べていました。

その日も、マクドナルドを食べ終わって、まだ時間があったのでベンチにゴロン。

485715803_235.jpg


なんていい天気なんだ!

これは絶対にお昼寝をしていくべき!!ここでお昼寝をしなかったらいつするのだ??もしかして自分は今日ここでお昼寝をするためにこの世に生を受けたんじゃないのか!?




…これがきっかけです。ホントの話。


週三日働いて食べていくことは可能なんじゃないのか?2

 圧縮新聞とか、二つ名メーカーで有名なニート、phaさんとのtwitterでの話。


pha: 僕には自分のやることをお金に換金したくないという欲求が強くあるのかもしれない

pha: まあもうちょい金銭的に追いつめられたら考え方も変わってきそうだけど。

mogya: 余裕がない状態でお金を稼ごうとするとやりたくないこともやらないといけないと思うのです。

mogya: 余裕があれば、やりたくない仕事はお断りすればいいので、結果的にやりたくないことをやらないですむと思っています。

mogya: 「お金は大事だぞ。これがあれば嫌な奴の言うことをきかないですむからな」とヤン・ウェンリーの父上も言っておりました。

  (注:「金銭は決して軽蔑すべきものじゃないぞ。これがあれば嫌な奴に頭を下げずにすむし、生活のために節を曲げる必要もない。」ですね。)

pha: @mogya 余裕があっても余裕がなくてもお金を稼ぐにはやりたくないことをやらねばならない、とか今思っていたりします・・・

pha: お金を稼ぐということをひたすらやりたくないというか



今とても興味がある話題だったので、つい絡んでしまいました。

自分は、自分の成果物をお金に換えるのが全然苦にならないので、その辺、phaさんの気にされているところに土足で踏み込んじゃっているのかもしれません。もしもそうだったらごめんなさい。


繰り返しになりますが、自分、phaさんの理想にはとても共感しております。

朝は好きな時間に起きて、仕事などで電車に乗ったりどこかのビルディングとかの一室に通ったりする必要はあまり無く(電車やビルや人ごみは僕を消耗させる)、仕事をするとしても週3日くらいで、そのとき自分のやりたいことに没頭できる環境があり(今ならプログラミングとか読書)、作業に飽きたら2時間ほど散歩したり本屋に行ったりして、午後には1時間くらい昼寝をしたりもし、それで周りには喋ったり遊んだりして面白い友達がいて、かつ独りでいる時間と空間もちゃんと確保できて、週に一度か二度友達と遊び、美味しいものを食べて美味しいお酒を飲んだりして、月に一度は小さな旅行をして、引っ越し好きなので一年に一回か二回は引っ越しをして、年に一度は外国に遊びにいったりする、というようなリズムで暮らしていけたら自分は幸せなんだなあと焦点が絞れてきた。まあ今のニート生活をずっと続けて行ければいいという話なんだけど。

(ニート的人生設計 – phaのニート日記)



で、それは、フリーランスをうまく活用すればそれは可能なのではないか、と言ったのですが、

(週三日働いて食べていくのは可能なんじゃないか。 – もぎゃろぐ)

今年の一月に独立して、半年間やってみて、不可能じゃなさそうだ、という感触を得ました。

どうやったか。会社を辞める前にお会いしたお客さんから、一年間、ガバっとまとめてWEB開発を見る契約というのを結びました。

お客さんはこれまでIT以外で活躍してこられた会社さん。そろそろITにも投資したいよね、ということで、こんなウェブショップはどうだろう?こんなサイトって作れないの?というような形で、ITに関して種をまいている状態です。

自分はそれに対して、業界の動向とか、技術的アドバイスと、実際の開発を請け負っています。



お客さんから見たら、社員を一人抱え込んだら年間1000万円(しかも簡単に首を切れない)ですが、自分に頼むことで、それよりずっと安くエンジニアを確保することができました。僕から見たら、いつ昼寝をしてもいい状態で一年分の生活費を確保することができて、Win-Winです。



とりあえずこれで、生活の最低ラインがカバーできました。



このお客さんのためにつっこむ工数は、だいたい週に3ー4日程度。あとは、いいめもとか、HumanDateとか、作りたい物を作る、という感じです。



お客様とは基本メール/チャット/skypeベースでお話をするので、どこに住んでいようとあまり問題になりません。「いついつまでにこんなの作りますね」という約束さえ守れば、時間配分は僕の自由です。

朝は起きたい時間に起きて、風呂に入りたくなったら入って、昼寝したかったらする。

昼間っからヨメと二人で町の商店街に買い物に行って、一個350円のスイカを見つけて驚喜しながら帰ってくる ←おいしかったです(^^)



そんなことしつつも、毎日8時間くらいは開発の時間を確保して、この時間にお客様から受けたソフトを開発したり、いいめもの開発を進めたり、それ以外にも作りたいと思ったら作る、まあそんな感じの生活です。



引っ越しは好きではないので一回しかしていないし、友達と遊ぶのも月に一回くらいですけど。

あと、自由な時間が増えても、やる気とかそのほかのリソースがボトルネックになるので思ったほど自分の思った物はつくれなくて、この点はちょっと誤算でしたが、ともあれ、お昼寝したいときにお昼寝ができる生活は実際実現できています。

「そんなのいつまでも続くはずがないだろう」って言われるかもしれないです。

実際、特定の一社に売り上げが依存してしまっているので、「来年は契約しません」って言われるとちょっと困ったことになります。



けれども、ここ一年間、いいめも関係で、何度かおもしろいビジネス展開のお話がありました。それ以外でも、「こういうことやってくれませんか?」っていうお話はいくつかいただいております。



自分で自由にできる時間を確保してあれば、そういうお話に対して即座にリソースをつっこんで対応することができます。



今の時点ではまだ次の足場は緩いですが、これを繰り返すことで、今の生活を確保することは不可能ではないんじゃないのかな、と思っています。

忙しくなくても作れない。

予告inで今大流行のsatoruさんが、ブログでこんなこと言われていました。
いくら アイデアとか作れる能力があっても そのときにやらないといけないこととか
お仕事があるとどうしても 自分の創作活動に 費やす時間は 削らないといけない事に なるはめになっちまって、そういう状況では やっぱし ロケット級にサービス作っていったり、好きなものを作るのなんて精神的にも 物理的にも 無理っぽいな ってのを実感した。
要は暇なのはめちゃくちゃ大事ってこと。

忙しいと、作れない – satoru.netの自由帳
全くその通りで、「これだ!」と思ったときには一気に時間を突っ込める体制になっていないと、面白いものなんて作れないと思うのですよ。
でも、この自由に時間を突っ込める体制というのが既に矛盾していて。
たとえば週7日24時間フリーな状態になれたとします。そこでサービスAを作ろう!と思ってとりかかったとします。その瞬間からその人は24時間フリーではなくなって、途中で、サービスBを作ろう!と思っても作れなくなります。週7日24時間フリーな人は、実は何にもできない人なのです。
要するに、サービスAを作ろう!と思ったら、Bを作ろう、とか思う前に作り上げてしまわないといけない。いかに短期間で成果をまとめ上げるかが勝負のような気がします。
そうするとやっぱり、個人でWebサービスを作る時に一番大変なことが大事なんじゃないかな。

HumanDate-ja ver0.0.3

HumanDate-ja0.0.3をリリースします。
おもな修正内容は、rails2.0になってActiveSupportの仕様が変わっちゃったことへの追随です。

hideAki :

日にちがうまくでません(T-T;;;

7月は1日か11日にしかなんないですね〜



もぎゃ

そうなのですよ。どうも普通に日付を書いた時の挙動がおかしくて、何とかしないといけないなぁ、と思いながら、先送りになっちゃっています。

(HumanDate 0.0.2 – もぎゃろぐ)



そうなのですよ、と言ったのですが、「そこまでひどかったっけ?」という心の声がしたので、単体テストを走らせてみたら、日付関係のテストが全滅しています。



調べてみると、activeSupportのtime#changeからすでにおかしい。


irb(main):006:0> test = Time.parse(“Mon May 21 23:51:59 +0900 2001”)

=> Mon May 21 23:51:59 +0900 2001

irb(main):010:0> test = test.change(:mday=>25)

=> Mon May 21 23:51:59 +0900 2001



…timeの「分」部分が変更できません。調べてみると、あらびっくり。


*2.0.1* (December 7th, 2007)

* Deprecation: remove deprecated :mday option from Time, Date, and DateTime#change. [Jeremy Kemper]

rails / activesupport / CHANGELOG — GitHub



以前、timeの「分」部分を変えようと思ったら、change(:mday=>25)だったのですが、このラベルがdayに変わってしまったようです。


irb(main):011:0> test = test.change(:mday=>25)

=> Mon May 21 23:51:59 +0900 2001

irb(main):019:0> test = test.change(:day=>25)

=> Fri May 25 23:51:59 +0900 2001



 …rails2.0はrails1.0系と互換性がとれないよ、ということをはっきりさせるためにメジャー番号をあげたわけですから、非互換だからと言って文句は言えないですね。



しょうがないのでこうすることにしました。


irb(main):009:0> test.change(:mday=>25,:day=>25)

=> Fri May 25 23:51:59 +0900 2001



これで、rails1.0系でも、2.0系でもとりあえず動いてくれるはずです。



あと、end_of_monthが0:00じゃなくて23:59を指すことになった仕様変更にも対応しました。



#これなんて、ドキュメントすらキャッチアップされていないような^^;



ずれてます2 – urekatのスカンク日記3
の不具合は治らないままですが、とりあえずHumanDate-ja0.0.3として置いておきます。



HumanDate-ja-0.0.3.gem


hideAkiさんよかったら試してみてくださいませ。

16歳と会ってきた

 ちょっと記事を書くのが遅くなってしまいましたが、最近話題の16歳、16歳フリーランス活動日誌の櫻井さんにお会いしてきました。



ブログにコメント付けたら「会う?」という話になったので、ちょうど用事で東京に出たついででお会いして、あれこれ聞いてきた次第。



 唐突ですが、自分の知っている限り、ネットサービスを作って食べていくことに成功しているのはゴーゴーラボの中の人だけのはずで。 ITMediaに取り上げられるくらいのネットサービスでも、売り上げはたいしたことないからあくまで副業です、とか、独立に成功しても、独自のサービスは広告塔で、実際は受託で食べています、という人が大半のような気がします。実際自分も、まだこの領域です。そんな中、突然現れた16歳、自分でプログラム書けません、という人がどうやってフリーランスで食べているのか、とても興味があります。



もぎゃ「で、どうやって食べていってるの?」

櫻井さん「WEBサービスからの収益で。」

もぎゃ「(ごくりっ!)ど、どんなサービスで?」

櫻井さん「内緒です」



ガーン。かなり執拗に迫ったのですが(ぉぃ)、教えていただけませんでした。差し支えのない範囲で聞いたところだと、


  • 10万円よりは多い金額の収入を得ています。
  • 変な情報商材の販売とか、クレジットカード比較サイトではないです。
  • 別にすごいことをしているわけではなくて、実際、studio15の人だってWEBの収益で食べていっています。
  • 開発は、その手の会社にお願いしました。いい会社を知っていた訳じゃないので、60社くらいメールして、安かったところにお願いしました。

とのこと。studio15の人のサイトを見せていただくと、ウェブ収入を得る方法 – 15Pubという記事がありますね。



ところで、そもそもどうやってそこへたどり着いたの?何をどうやったら、16歳でそういう状態になったのよ?


  • 中学2年生くらいから作り始めて、中学3年生くらいのときには、一応WEBからの収益で食べていけるようになっていました。
  • 最初は、ゲームの攻略サイトを作っていました。これって結構人が集まるので、広告収益も入りますよ。
  • ドラクエの攻略サイトなんかは、50万ヒット/月くらいになるので、作っている人はそれなりの売り上げがあるはず。



聞いていると、何だかすっごい普通のことをしているように思えてきました。実際櫻井さんは、「なんでそんなことを聞くの?」という顔で。

可能性としては、実は櫻井さんはすっごい詐欺師で、全然稼げていないのに涼しい顔をして話をしている!というのもなくはないのですが、仮にこの話を聞いて僕がサイトを作り始めても櫻井さんは一円も得をしないので、たぶんそれはないな、と。実際お話をさせていただいても、そんなタイプには見えなかったし。



ということは、すでに世の中、ふつうにヒットするサイトを作れば数万円程度の収入は得られる時代になっているということでしょうか。理屈言っているより一つ作ってみるのが早いかもしれないですね。