メッセージ。 - diary
2010-02-20
# [日記] ネタがない
うーん。毎日日記書くのってしんどいなぁ。ネタがない。
ただまぁ、進捗状況について公開し記録するという意味合いで、書きますかね。とりあえず、今日やったこと:就職の面談(前述のとおり酷いドナドナだった。不況って怖い。なおかつ提示してもらった金額が予想以上に安かった)、午後に帰宅したけど、疲れてあまりコードを書いたり勉強したりできなかった。夕方ごろお米が切れそうなので買い物に行って、夜は別の就職口のエントリーシートを書いたり、Amazon S3についてコードを書いたりテストしたり。うーん、こうやってリストアップしてみると、やるべき仕事がこなせてないなぁ…。
ただまぁ、進捗状況について公開し記録するという意味合いで、書きますかね。とりあえず、今日やったこと:就職の面談(前述のとおり酷いドナドナだった。不況って怖い。なおかつ提示してもらった金額が予想以上に安かった)、午後に帰宅したけど、疲れてあまりコードを書いたり勉強したりできなかった。夕方ごろお米が切れそうなので買い物に行って、夜は別の就職口のエントリーシートを書いたり、Amazon S3についてコードを書いたりテストしたり。うーん、こうやってリストアップしてみると、やるべき仕事がこなせてないなぁ…。
2010-02-19
# [就職活動][日記] 就職活動の進捗など
さて。昨日「この日記をできるだけ毎日書く」と決めたので、なにかしら書く。今日は何をしたっけかな。昨日よりはマシな一日だった(雑念を振り払って仕事をした)気がするが…。
とりあえず就職活動について。ぼくは正直言って、正社員になりたいわけではない。正社員という仕組みや社会の有り様に反発を感じることもあるので、正社員には拘らない。自分が役にも立っていないのにお金を貰うのは心苦しいからだ。ただ、現実問題として先方(日本の社会)は「正社員か否か」を前提にものごとを考えているようで、ぼくが仕事を探すうえでも、そういったフレームワークに乗っからざるを得ないところがある。
それで、短・中期的にはぼくの就職活動も「正社員」になることが目標となっている。ところが、ここ1~2か月ほど活動してみて、正社員になる道はそう甘くないようだと感じている。不況ということで求人も減っている中、自分がやりたいこと、この会社で働きたいと思えること、この会社に貢献できそうだ、そういった希望を短期間にマッチングさせるのは難しそうだ。というか、そもそも大半の企業への応募は書類選考で落とされる。
その一方でぼく自身の都合として収入が必要なため、とりあえず派遣のような形で当座の仕事をするしかなさそうだという話になってきている。ただし派遣といっても、ぼくが知っているころのプログラマさんは月に70万とか50万とかを貰っていたはずが、今どきは30万円台半ばぐらいしか貰えないとかいう話も聞こえてきて、自分のケースでもその数字が貰えれば御の字といった感じのようだ。さらに言うと、その数字でも今のぼくには大変有り難いのだが。
なんといっても、ぼくにはまだ職歴があるので、就職氷河期からフリーターをやっていた人なんかに比べるとずいぶん恵まれている。今どきは、バイトの求人でさえ奪い合いだそうで、今日八百屋にキャベツを買いに出かけた先でも、おじさんが「バイトがない」と立ち話をしていた。まぁ、身近で得た知識をもって一般化しすぎるのも危険だが。(毎日日記を書こうとすると、こういった危険な一般化が多くなるから嫌だな…)
まぁそんな感じで、とりあえず明日は一社面談してくれるということで朝が早い。もう1時か。最近早起きしていないから、起きれるかちょっと不安。おやすみなさい。
とりあえず就職活動について。ぼくは正直言って、正社員になりたいわけではない。正社員という仕組みや社会の有り様に反発を感じることもあるので、正社員には拘らない。自分が役にも立っていないのにお金を貰うのは心苦しいからだ。ただ、現実問題として先方(日本の社会)は「正社員か否か」を前提にものごとを考えているようで、ぼくが仕事を探すうえでも、そういったフレームワークに乗っからざるを得ないところがある。
それで、短・中期的にはぼくの就職活動も「正社員」になることが目標となっている。ところが、ここ1~2か月ほど活動してみて、正社員になる道はそう甘くないようだと感じている。不況ということで求人も減っている中、自分がやりたいこと、この会社で働きたいと思えること、この会社に貢献できそうだ、そういった希望を短期間にマッチングさせるのは難しそうだ。というか、そもそも大半の企業への応募は書類選考で落とされる。
その一方でぼく自身の都合として収入が必要なため、とりあえず派遣のような形で当座の仕事をするしかなさそうだという話になってきている。ただし派遣といっても、ぼくが知っているころのプログラマさんは月に70万とか50万とかを貰っていたはずが、今どきは30万円台半ばぐらいしか貰えないとかいう話も聞こえてきて、自分のケースでもその数字が貰えれば御の字といった感じのようだ。さらに言うと、その数字でも今のぼくには大変有り難いのだが。
なんといっても、ぼくにはまだ職歴があるので、就職氷河期からフリーターをやっていた人なんかに比べるとずいぶん恵まれている。今どきは、バイトの求人でさえ奪い合いだそうで、今日八百屋にキャベツを買いに出かけた先でも、おじさんが「バイトがない」と立ち話をしていた。まぁ、身近で得た知識をもって一般化しすぎるのも危険だが。(毎日日記を書こうとすると、こういった危険な一般化が多くなるから嫌だな…)
まぁそんな感じで、とりあえず明日は一社面談してくれるということで朝が早い。もう1時か。最近早起きしていないから、起きれるかちょっと不安。おやすみなさい。
2010-02-18
# [技術] プロセスへの外部からのアタッチ
ここ数日、Haskellで作ったWebアプリケーションCGIに対して、外部からロボットがアクセスすることで負荷が高まっている。サーバーのメモリが少ないからか、OSを道連れにして落ちてしまうことさえしばしばあった。どこかで無限ループしているのか調べたいのだけど、うまく調べる方法がないみたい。もしこれがCで書いたアプリケーションなら、gdbでプロセスにアタッチしてどの関数が動いているのか調べることができる。しかし少し調べたところ、ほかの多くの言語(Haskellや動的言語のメジャーな実装等)では同様の操作ができないようだ。
よく考えてみれば、Paul Grahamが継続ベースのWebアプリケーションで成功したときにも、外部からアプリケーションにアタッチして動作を確認したり変更したりできることがメリットとして挙げられていた。これは本質的に、gdbがやっていることと同じだ。そういう意味でこのような操作ができる機能は重要だし、一方で「プログラムがいまどのように動いているのか」を把握できるC言語(というかgccとgdb)はすごい。このような操作ができないということは、要するに机上デバッグしかできないということだ。
C言語はコンパイラ型の静的プログラミング言語なのに(gccとgdbでは)こういう操作ができる一方で、一段抽象度が高く、VM上で動くことも多い動的プログラミング言語の多くがこの機能をサポートしていないというのは不思議だ。技術的な難易度(とか工数や距離?)でいうと逆だろうと思うから。言い換えるなら、gccやgdbといった処理系が、ほかの処理系に比べて大変作りこまれ、こなれているということなんだろうな。今さら気付いたとも言えるが、gccアプリケーション(gcc -gでコンパイルされたもの)はVM上で動いているのだ。なんてことを考えた。
よく考えてみれば、Paul Grahamが継続ベースのWebアプリケーションで成功したときにも、外部からアプリケーションにアタッチして動作を確認したり変更したりできることがメリットとして挙げられていた。これは本質的に、gdbがやっていることと同じだ。そういう意味でこのような操作ができる機能は重要だし、一方で「プログラムがいまどのように動いているのか」を把握できるC言語(というかgccとgdb)はすごい。このような操作ができないということは、要するに机上デバッグしかできないということだ。
C言語はコンパイラ型の静的プログラミング言語なのに(gccとgdbでは)こういう操作ができる一方で、一段抽象度が高く、VM上で動くことも多い動的プログラミング言語の多くがこの機能をサポートしていないというのは不思議だ。技術的な難易度(とか工数や距離?)でいうと逆だろうと思うから。言い換えるなら、gccやgdbといった処理系が、ほかの処理系に比べて大変作りこまれ、こなれているということなんだろうな。今さら気付いたとも言えるが、gccアプリケーション(gcc -gでコンパイルされたもの)はVM上で動いているのだ。なんてことを考えた。
# [日記] モチベーションが上がらない
うーん。ここ数日というか、1週間ぐらい、モチベーションが上がらないのを実感している。やらなければいけないことがあるが、どうしても雑事や雑念に流されてまとまった仕事ができない。先日どこかで「下流の人間は生きるモチベーション自体が低い」と書かれている記事を読んだけど、自分にも当てはまる。「やらなければいけない」、「これを今やればいいんだ」と分かっているのに、なかなかそれができない。鬱病なのかなぁ。全然だめだ。
でもとにかく、自分がいまどこにいて何をしているのか確認する必要があると思う。スケジュールを立ててそれをちゃんとこなすような習慣に切り替えなければならない。そのためには、アウトプットサイクルを早く(とりあえずこの日記をできるだけ毎日書くとか)しようと思う。このエントリがその一歩目(うまく続けばいいが)。毎日まいにちの仕事が進まなくても、「進まなかったこと」自体をきちんと自覚し外部と調整しなければならない。
それから、なかなか手が動かない理由の一つは、やらなければいけないことが多すぎるということにもある。今やらなければいけない最優先の課題は就職活動なのだが、自己アピールとして「Rubyも一応使えますよ」、「RailsやCakePHP等のWebアプリケーションフレームワークもできますよ」と言えるように、とりあえず触りだけでもそれらを勉強したい。まぁ今からやっても手遅れという説はあるのだが、そうこう言っている間に1~2か月はあっと言うまに過ぎる。過ぎた時間を思って「1~2か月あれば勉強できたはずだった」と悔いるのなら、今から勉強をすることに価値はあるはずだ。
でもとにかく、自分がいまどこにいて何をしているのか確認する必要があると思う。スケジュールを立ててそれをちゃんとこなすような習慣に切り替えなければならない。そのためには、アウトプットサイクルを早く(とりあえずこの日記をできるだけ毎日書くとか)しようと思う。このエントリがその一歩目(うまく続けばいいが)。毎日まいにちの仕事が進まなくても、「進まなかったこと」自体をきちんと自覚し外部と調整しなければならない。
それから、なかなか手が動かない理由の一つは、やらなければいけないことが多すぎるということにもある。今やらなければいけない最優先の課題は就職活動なのだが、自己アピールとして「Rubyも一応使えますよ」、「RailsやCakePHP等のWebアプリケーションフレームワークもできますよ」と言えるように、とりあえず触りだけでもそれらを勉強したい。まぁ今からやっても手遅れという説はあるのだが、そうこう言っている間に1~2か月はあっと言うまに過ぎる。過ぎた時間を思って「1~2か月あれば勉強できたはずだった」と悔いるのなら、今から勉強をすることに価値はあるはずだ。
2010-02-13
# [技術] Gaucheでのテストの書き方(の1ケース)
いままでたくさんGaucheでプログラムを作ってきたが、あまりテストコードを書いたことがなかった。だけどここ数日、ちょっとテストを書く機会があって、けっこう勉強になっている。なかでも、値を返さないような関数のテストをどう書けばいいか分からなかったので、メールでshiroさんに尋いてみた。
そうすると親切に教えていただけたので、せっかくの情報が共有されていないのはもったいないので、ここで公開してみます(shiroさんには許可をもらっています。ありがとうございました)。#<undef>を返す関数のテスト方法とか、valuesを引数なしで呼んだらどうなるかとか、あまり考えたことがなかったので勉強になった。テストの書き方(シンタックスではなくセマンティクス的なもの)って、案外ネットとかを調べても載っていないような気がする。
fujisawa:
shiroさん:
shiroさん:
そうすると親切に教えていただけたので、せっかくの情報が共有されていないのはもったいないので、ここで公開してみます(shiroさんには許可をもらっています。ありがとうございました)。#<undef>を返す関数のテスト方法とか、valuesを引数なしで呼んだらどうなるかとか、あまり考えたことがなかったので勉強になった。テストの書き方(シンタックスではなくセマンティクス的なもの)って、案外ネットとかを調べても載っていないような気がする。
fujisawa:
基本的なことを質問しちゃって恐縮ですが、s3-bucket-create 等で(values)を返しているのは、どういう意図があるんでしょうか? valuesを無引数で呼んだとき、どういう挙動をするのかよく分からず、テストをどう書こうかなーと思案中です。#<undef>を返すわけでもないんですよね…。
shiroさん:
「戻り値が無い」ことを示すためです。まあ別に#tとか適当に返しといてもいいのですが。valuesは渡された引数の数だけの値を返しますから、無引数で呼ぶとゼロ個の値を生成します。call-with-valuesの形で考えるとわかりやすいかも。(call-with-values (lambda () (values)) list) => ()テストについてですが、こういう副作用だけに意味がある操作の場合はそもそも戻り値を見る意味がないので、(1)操作実行後にその効果を別関数で確かめるか、(2)操作の実行が完了したことだけを、別の値を返すことで確かめるか、ということになります。(1)の場合の例:;; まずバケットがavailableであることを確認(test* "bucket-availability" 'available(s3-bucket-availability "test-bucket"));; s3-bucket-create!する。戻り値は見ない。;; 直後にもう一回availabilityを見て、確かに変化したことを確認する(test* "bucket-create" 'taken(begin (s3-bucket-create! "test-bucket")(s3-bucket-availability "test-bucket")))(2)の場合の例:;; まずバケットがavailableであることを確認(test* "bucket-availability" 'available(s3-bucket-availability "test-bucket"));; s3-bucket-create!して、そのあとで適当な値を返す。;; s3-bucket-create!がfailすれば#<test-error>になるはずなので、;; #tが返ってくれば少なくともエラーにはならなかったということがわかる(test* "bucket-create" #t(begin (s3-bucket-create! "test-bucket") #t);; 改めて操作の完了を確認(test* "bucket-availability after create" 'taken(s3-bucket-availability "test-bucket")> )
shiroさん:
関連して、一般に「戻り値が未定義である」という手続きをテストするのにも、戻り値を比較したらだめですね。「現在のバージョンのGauche」ではたまたま#<undef>を返すかもしれませんが、もともと未定義なんですから将来どうなるかはわかりません。意味のない戻り値として最後の式に(values)を使う作法は他の処理系のソースで見たんですが、「戻り値を使わないでね」というメッセージにはなると思います。ちなみに(values)で戻ってくるゼロ個の値 (という言い方も変ですが) を無理やり変数に代入したり引数に使ったりするのはSchemeとしては不正なプログラムです。Gaucheではいちいちエラーにしませんが、その時得られる値はでたらめです (通常、直前の計算でVMのレジスタに残ってる値がそのまま見える)。
2010-02-08
# [社会] どうして最近の若者は結婚しないのか?
んー、これ前に書いたっけかな?
先日、といってもだいぶ前だが、親戚一同が集まる法事があって、食事の席でおじさんから「どうしてあなたは結婚しないの? 最近の若い人は結婚しないの?」と尋ねられた。例によって、そのときはうまく説明できなかったのだけど、でも答えはボンヤリと頭の中に浮かんでいた。
結論としては、若い人が結婚しないのは当然だ。たとばぼくの場合でいうと、ぼくの親父は家を継がなかった。親父の実家は商家をしていて、親父はそこの長男だった。ならば(彼らの価値観で言うと)当然親父は家を継ぐべきだった。なのにどうして継がなかったのか?
それがまさに、「どうして若者は結婚しないのか?」に対する答えだ。「どうして彼らは家を継がなかったのか?」、自分で考えてみればいい。考えてみて答えが分かるなら、「どうして若者は結婚しないのか?」も分かる。というか、当然そのぐらいは彼らも薄々考え、結論に至っているだろう。
「どうして彼らは家を継がなかったのか?」と「どうして若者は結婚しないのか?」は、ある程度同じ意味を持っていると思う。どうして彼らが家を継がなかったのかというと、それはやはり、「家」という制度が時代の中で合理性を失ってきていたからだ。若い人たちが都会に移り住み、小さな商家というものが、大きなスーパーや郊外型のお店に飲み込まれていくことが見えていたからだ。
だから親父は商家を継がずサラリーマンになった。質問をしてきた当のおじさんも、実家の店をもう畳んでしまっている。彼らは、頑ななまでに「家」を守ることをしなかったのだ。ならば、家がないのに、どうして結婚する必要があるのか? 彼らの言う「結婚」というものは、「家を守る」ことを含意している。旧来の「結婚」は、ベクトルとして「家(家系)を守る」ことと一致している。だから、彼らがやってきたことと、ぼくらがやっていることは、そう違いがない。
ここ数十年(あるいは百年以上?)人々は都市に移り住み、その過程で家を捨てさった人も多い。守るべき家を捨てたものが、「どうしてあなたは家を捨てるのか?」と尋ねても仕方がない。彼らだって分かっているだろう。そういう流れなのだと。「家(家系)」という価値観、「結婚」という価値観は薄れつつある。それらは合理性や文化という点で解体され続けている。若者が結婚をしなくなったのは、突然始まった断絶によるものではない。
先日、といってもだいぶ前だが、親戚一同が集まる法事があって、食事の席でおじさんから「どうしてあなたは結婚しないの? 最近の若い人は結婚しないの?」と尋ねられた。例によって、そのときはうまく説明できなかったのだけど、でも答えはボンヤリと頭の中に浮かんでいた。
結論としては、若い人が結婚しないのは当然だ。たとばぼくの場合でいうと、ぼくの親父は家を継がなかった。親父の実家は商家をしていて、親父はそこの長男だった。ならば(彼らの価値観で言うと)当然親父は家を継ぐべきだった。なのにどうして継がなかったのか?
それがまさに、「どうして若者は結婚しないのか?」に対する答えだ。「どうして彼らは家を継がなかったのか?」、自分で考えてみればいい。考えてみて答えが分かるなら、「どうして若者は結婚しないのか?」も分かる。というか、当然そのぐらいは彼らも薄々考え、結論に至っているだろう。
「どうして彼らは家を継がなかったのか?」と「どうして若者は結婚しないのか?」は、ある程度同じ意味を持っていると思う。どうして彼らが家を継がなかったのかというと、それはやはり、「家」という制度が時代の中で合理性を失ってきていたからだ。若い人たちが都会に移り住み、小さな商家というものが、大きなスーパーや郊外型のお店に飲み込まれていくことが見えていたからだ。
だから親父は商家を継がずサラリーマンになった。質問をしてきた当のおじさんも、実家の店をもう畳んでしまっている。彼らは、頑ななまでに「家」を守ることをしなかったのだ。ならば、家がないのに、どうして結婚する必要があるのか? 彼らの言う「結婚」というものは、「家を守る」ことを含意している。旧来の「結婚」は、ベクトルとして「家(家系)を守る」ことと一致している。だから、彼らがやってきたことと、ぼくらがやっていることは、そう違いがない。
ここ数十年(あるいは百年以上?)人々は都市に移り住み、その過程で家を捨てさった人も多い。守るべき家を捨てたものが、「どうしてあなたは家を捨てるのか?」と尋ねても仕方がない。彼らだって分かっているだろう。そういう流れなのだと。「家(家系)」という価値観、「結婚」という価値観は薄れつつある。それらは合理性や文化という点で解体され続けている。若者が結婚をしなくなったのは、突然始まった断絶によるものではない。