2007年7月アーカイブ
最近話題の「はてなスター」を入れてみました。
ついさっき設置完了しました。
この発想はひじょーに面白いですね。
昔ははてなは技術者嗜好なアプリケーションを作っていたイメージで、ちょっと一般人には敷居が高いイメージでしたけど、Rimoといい、このはてなスターといい、一般ユーザーフレンドリーな感じがします。
設置も、Javascriptをblogに加えるだけとお手軽なのも良い感じ。
条件はブログのエントリタイトルに<h3>で囲っている事と、タイトルにパーマリンク(記事単体への固定のリンク)があることです。多くのblogがタイトルは<h3>で、パーマリンクがついていると思うのですが、もしついていなかった場合は、パーマリンクって言葉が一般ユーザーにわかるのでしょうか??ちょっと気になります。
とはいえ、その辺りは段々Hackされてくるんでしょうけどね。
ちなみにid:naoyaさんのblogによると、id:jkondoさんの発案みたいです。とても「らしい」サービスな感じがしています。
ちょっと本棚を片付けようと思ったら、2時間かかってしまいました。
ちょっと前みたいにさらしてみる。
今回は雑誌をメインに削除!削除!削除!!

結構なボリュームがあります。
ひぃ、ふぅ、みぃ・・・・とにかく沢山捨てました!
で、メインの本棚はというと・・・

カオスだった状態からちょっと綺麗になりました!!
まだちょっと入りきれていないけど、どうせもう少ししたら引っ越すからいいか。
一応ジャンル別に纏めたつもり。一部良く使う本は、すぐ取り出せる位置(本棚中央)に。
だいたいRubyとRailsの本、あとは、Emacsとか、正規表現とか、シェルスクリプトの本。
デザパタGoF本は迷ったけど、そんなにしょっちゅう見ないから端に。
さて、あとは・・・・・

このパンドラボックスをどうするかだ・・・
全然片付けてないじゃん!!とかいわないよーに。
なんと、大好きだったスカイ・クロラシリーズの続編が!!
スカイ・クロラシリーズって、てっきりフラッタ・リンツ・ライフで終わりだと思っていたので、本屋で驚喜。
このシリーズは最終刊のスカイ・クロラから発売されているので、何処が終わり(始まり?)か解らないんです。
スカイ・クロラから段々さかのぼって書かれているんです。
メインの登場人物は必ず繋がっているんですけど、ちゃんと一冊一冊が独立した作品になっているのです。
この書き方は上手いなぁ・・・といったところ。
来年にはアニメ化されるそうですね。草薙の声優が誰になるのか楽しみ♪
これからサーバー構築する友人へ
サービスを公開するLinuxサーバーを構築するときに何点か意識をしておかないと後で面倒な事になります。
運用に一度乗ってしまうと、そう易々と設定を変えられないことに起因するんですが、実際にサーバー構築して、運用に乗っけてから失敗したなぁ・・・って事が在ったので、書いておきます。
サーバーのディレクトリやアプリの構成は統一すべし
Linuxをインストールする際に、出来るだけサーバー構成を統一しましょう。
ディレクトリ構成だけでなく、アプリケーションのインストール先や、設定ファイルの置き場等は絶対同じにしていた方がいいです。
何故かと言うと、トラフィックが増大してきた時に、一台ではまかないきれなくなってきます。
そうすると、MPP環境を構築する事になると思うのですが、MPP環境を構築するとき、サーバーの構成が違っていると、か・な・り面倒です。
並列化するソフトウェアを使う場合、サーバー構成が同じであることが条件であるソフトが結構在ります。
大体台数が増えてくると、いちいちサーバーの違いなんて覚えていられません。
アプリを稼働させる前にバックアップ計画を
特にDBにかんしてですが、バックアップ計画を先に立てておかないと、非常に困ります。
一度運用始まると、アプリケーションの再起動すらなかなか出来ません。
特にDBによっては、バックアップ時にロックをかける事があるので、多少なりとも停止してしまう時間が出来てしまいます。
メンテナンスウィンド(システム停止時間)を何処に置くかをちゃんと考えておかないと、すぐにメンテナンス出来なくなってしまいます。
365日24時間稼働の無停止システムとなると、その難易度は更に増大します。ってか基本的に止められないので、バックアップやバージョンアップが出来ません。初めからHA構成にしておかないと、痛い目見ます。
HAにしたところで、切り替えの時は一時的に停止してしまうと思うので、更に冗長化する必要が在ります。
激しく気を遣ってください。
運用はshellで
どんなに運用計画をシッカリ立てても、人手を介す限りミスは発生してしまいます。
そこで、出来るだけshellスクリプトで自動化しておきましょう。
リリース、バージョンアップ、サーバーのヘルスチェック、設定変更etc...各種shellを用意しておくと便利です。
パスワード認証は破られる
パスワード認証危ないです。ウチのサーバーも一日3000件以上不正アクセスを受けています。
辞書攻撃をくらったりするので、最低でもsshの公開鍵認証は設定しましょう。
それでもセキュリティホールはあるので、Logwatchなどで、ログのサマリーを取得してメールで送るようにしておくと便利。
Rubyを勉強していて知った事の私的メモ。
最近Rubyの本読んでいて知ったTips
Rubyコマンドに "-r profile"オプション渡してプログラム実行すると、各メソッドのコール回数や実行時間のプロファイリングが出来るんですね。
$ ruby -r profile test_helper.rb % cumulative self self total time seconds seconds calls ms/call ms/call name 22.00 1.91 1.91 697 2.74 44.16 Kernel.require__ 17.28 3.41 1.50 6426 0.23 0.28 Object#method_added 7.37 4.05 0.64 576 1.11 27.53 Array#each 2.65 4.28 0.23 6435 0.04 0.04 Module#blank_slate_method_added 2.30 4.48 0.20 730 0.27 63.27 Kernel.require 1.73 4.63 0.15 966 0.16 0.37 Class#inherited 1.61 4.77 0.14 1 140.00 160.00 ObjectSpace.each_object 1.38 4.89 0.12 122 0.98 1.64 RubyToken.def_token 1.27 5.00 0.11 2100 0.05 0.05 Symbol#to_s 1.27 5.11 0.11 392 0.28 0.64 Gem::Specification#copy_of 1.27 5.22 0.11 6492 0.02 0.02 Module#== 1.27 5.33 0.11 113 0.97 0.97 Gem::Specification#installation_path 1.04 5.42 0.09 340 0.26 0.26 Kernel.nil? 1.04 5.51 0.09 249 0.36 0.36 String#to_sym 1.04 5.60 0.09 519 0.17 0.19 Set#add 1.04 5.69 0.09 377 0.24 0.24 Hash#default
てな具合に。
丁度良い実験体が無かったので、Railsのtest_helper.rb使いました。
実際はもっと長く出力されるので、一端ファイルに落とそうとリダイレクトしてみたんですが、
コレ標準出力では無くて、標準エラー出力に出されるんですねぇ。一度誤爆しました。
Safari3をMac Book Proに入れてみました。
・・・が、動作が不安定。
ブックマークからWebサイトを表示しようとしても、表示されていない時が多々。
アドレスから更新すると、表示はされるのですが・・・あれ?
ブックマークの一覧を開く本のアイコンクリックすると・・・落ちる。

ま、まてぇぇぇい!
そりゃ無いでしょ。
オープンベータ版な上、まだ英語版なので、その辺りが原因なのか???
らちが空かないので、基に戻します。
とほほ・・・
一応このblogがちゃんと表紙されることは確認したので、まいいか。
ActiveRecordで取得したテーブルのデータから選択リスト(プルダウン)を作成したいと思ったんです。
出張費精算のアプリを作っていて、"http://localhost/home/list/200707"というURLにアクセスすると、2007年7月のリストを出力する仕様になっています。これにプルダウンで月の選択をすると、リストが切り替わる様にしたいんです。
テーブルは月別の出張費精算テーブルで、こんな構成。
create_table(:monthly_expenses, options) {|table|
table.column :employee_id, :integer
table.column :appropriate_month, :date
table.column :period_from, :date
table.column :period_to, :date
table.column :total_amount, :integer
table.column :prepayment, :integer
table.column :report_date, :date
table.column :status, :integer
table.column :time_stamp, :datetime
}
選択リストはこの月別のリストを切り替える為に使いたいので、欲しいのは、" appropriate_month"だけだったりします。
ずいぶんと余分なモノが混じってしまっています。それだけならまだしも、URLとして使う都合上、"yyyy-MM-dd"形式ではなくて、"yyyyMM"を取得したい。選択リストのテキストには"yyyy年MM月"としてあげたい。
どうやっても変換をかける必要があるんですが、出来ればSQLを書かずにすませたい(単なるこだわりです)。
ActiveRecordに取得カラムを指定は出来ない様子。オブジェクト化するから、当然なんですけど。
取得結果をブロックで処理して、mapしてあげることにしました。
@monthly_list =
MonthlyExpense.find(:all,
:conditions => ["employee_id = ?", employee_id],
:order => "appropriate_month"
).map { |m| [m.appropriate_month.strftime("%Y年%m月"),
m.appropriate_month.strftime("%Y%m")] }
あとは、rhtml側で、ActionHelperを使って、
<%= select(:month, :value, @monthly_list) %></pre>
としてあげれば、OK。
ではなくて、初期値を設定してあげないといけない。
selectの場合は、@month.valueに入っている値がリストにあれば、それを選択状態にしてくれるのですが・・・
monthオブジェクトはselectタグ内部で作成されていので、コントローラー側でセットしようにもオブジェクトが存在しない。
動的にオブジェクトを作成するほうほうが思い浮かばなかったので、クラス定義をしてまいました。
class Month attr_accessor :value end
@month = Month.new @month.value = @monthly_expense.appropriate_month.strftime("%Y%m")
すっごく強引な気がするけど、後で思いついたら直すことに。
最後にonChangeのイベントをとってリクエストを投げて挙げるように修正。
prototype.jsのEvent.observeを使う。
Event.observe($('month_value'),
"change",
function(){
document.location.href = "/home/list/" + escape($F('month_value'));
});
これで一応動作を確認。なんかもっと上手くできる気がするんですけどね。
とりあえず動けば官軍って言うんでこれで我慢します。
Movable Type 4のBeta3を試しに自宅サーバーに入れてみた。
Publishing Platformのデザインが大分変わっていて、普通に迷子になりそう。

結局は慣れだと思うのですが、使い心地は良いです。
まだちょっとしか触っていないんですが、ブログのエントリがWYSWYGなエディタで出来る点と(ちょっと前に仕事で触っていた3.3にも有った気がしますけど)、ファイルアップロードインターフェースと、管理インターフェースが使いやすくなりました。
デフォルトのblog画面も相変わらずカッコイイ。

インストールは3の時と結構変わっていて、ほとんどウィザードで設定します。
- movabletype.orgからダウンロード
- ファイルをサーバーの公開ディレクトリにアップロード
- MySQLのデータベースとユーザーを作成
- アップロードしたディレクトリへのurl/mt-wizard.cfgへアクセス
- 画面の指示に従い設定
だけでOKでした。mt-config.cgiはウィザードが勝手に作ってくれるので、MT3の時の様に書かなくて大丈夫です。
というか、前の癖でごちゃごちゃ書こうとするとはまる。
設定は後でmt-config.cgiを編集すればいいので、DB辺りだけ接続確認すればあとは適当で可。
Beta3から多国語対応と聞いていたので、mt-config.cgiを直接編集する必要が有るかと思いきや、ちゃんとウィザードで言語選択があるので、特別な事をしなくて大丈夫でした。
今このblogがMT3.1なのですが、問題なくバージョンアップできるか試してみようかと思っています。
















