つまりこういう↓のを見たときに、「やってみればいいじゃない!お金出すよ?」とか言ってみたい。
とてもおもしろそうなんだけど、運営資金が回収できるだけのビジネスモデルはなかなか思いつかなくて。
こういうときに、とりあえず1000万円くらいあきらめていいお金があれば、とりあえず一年やってみて、それから考える、とかできるんじゃないのかな、と。
実際やってみると、意外なところが苦労することが分かったり、意外と苦労しないポイントも見えてくると思うから、今考えているのとは全然違うアイデアだって浮かぶかもしれない。
というわけで、こういうときに「じゃあやってみなよ♪」ってお金の出せるパトロンになれるとステキだな、と思う次第。
あ。「じゃあそのために今日から努力を...」「本気でお金持ちになりたかったら本気でビジネスを...」とかそういうお説教に用はないです。最終的にお金持ちになった時、そういうお金の使い方をしたいよね、というお話です。
マクドナルドや喫茶店で各自勝手にもくもくと作業する「もくもく会」を開催してみました。
2008-07-16 - もくもく会ポータル
開催といっても何をしたわけでもなく、目印(もぎゃ)を出して勝手に開催を宣言しただけです。それをみて誰か来たら儲け物、こなくても黙々と予定通り作業すればいい、それがもくもく会。
予想通り誰も来ませんでしたが、仕事は淡々と進めることができました。
まあ今後も気が向いたらやろうかと思うので、興味がある方はもくもく会ポータルをウォッチしてみてくださいませ。
おわり。
...いやでもさ。まずいことがあった時に出力されるはずのエラーログに変数の値を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 <== [Tue Jul 08 08:43:04 2008] [error] [client 192.168.11.128] PHP Notice: Undefined variable: access in /var/www/someapp/html/graph/someapp.php on line 7 [Tue Jul 08 09:13:41 2008] [error] [client 192.168.11.128] PHP Parse error: syntax error, unexpected T_STRING in /var/www/someapp/html/graph/someapp.php on line 2 ==> /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)
なんではまるかというと、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でも、「それはまずかったと思う」と指摘されています。
(Re: error when irb not installed: msg#00092)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. :(
メンテナの方がパッケージを分けたのにはそれなりの理由があるのだと思いますし、
#サーバ上だと、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には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"
正式な理由としては退職と独立のご報告に書いたのですが、そもそもなんでそんなふうに思ったのか、そのきっかけ。
当時の職場の近所に公園があって。自分、よくそこでお昼ご飯を食べていました。
その日も、マクドナルドを食べ終わって、まだ時間があったのでベンチにゴロン。
なんていい天気なんだ!
これは絶対にお昼寝をしていくべき!!ここでお昼寝をしなかったらいつするのだ??もしかして自分は今日ここでお昼寝をするためにこの世に生を受けたんじゃないのか!?
...これがきっかけです。ホントの話。
圧縮新聞とか、二つ名メーカーで有名なニート、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時間くらいは開発の時間を確保して、この時間にお客様から受けたソフトを開発したり、いいめもの開発を進めたり、それ以外にも作りたいと思ったら作る、まあそんな感じの生活です。
引っ越しは好きではないので一回しかしていないし、友達と遊ぶのも月に一回くらいですけど。
あと、自由な時間が増えても、やる気とかそのほかのリソースがボトルネックになるので思ったほど自分の思った物はつくれなくて、この点はちょっと誤算でしたが、ともあれ、お昼寝したいときにお昼寝ができる生活は実際実現できています。
「そんなのいつまでも続くはずがないだろう」って言われるかもしれないです。
実際、特定の一社に売り上げが依存してしまっているので、「来年は契約しません」って言われるとちょっと困ったことになります。
けれども、ここ一年間、いいめも関係で、何度かおもしろいビジネス展開のお話がありました。それ以外でも、「こういうことやってくれませんか?」っていうお話はいくつかいただいております。
自分で自由にできる時間を確保してあれば、そういうお話に対して即座にリソースをつっこんで対応することができます。
今の時点ではまだ次の足場は緩いですが、これを繰り返すことで、今の生活を確保することは不可能ではないんじゃないのかな、と思っています。