2007年12月20日木曜日

Cross Browser


報告です。

我クライアントマシンにメジャーなブラウザが揃いました。

自己満足です。
というか媚びうってwindows,mac tigerを触らしてもらう必要もなくなりました。

safari 3,safari2.0.4,firefox 2.0.0.11,ie6(vmware),ie7(vmware),opera9.22

ちなみに今日の集合写真にはie7さんは欠席です。ie7はワイプでいいかな?!笑


safari 3 ,firefox 2.0.0.11,opera 9はleopard上で普通にインストールすることができます。
ですが、
ie6,ie7はネイティブ環境必須ですのでvmware futionを購入しなければいけませんでした。ですが、mac bookの1Gメモリでは作業に支障がでてしまい。3Gのメモリを積み変えました。コーディング<=>ブラウザーチェックは結構スムーズに作業することができています。

そしてcssで問題が多発するのでできれば入れたいsafari 2.0.4がついにインストールされたので今回、記念して集合写真をとりたくなったというわけです。

safari 2.0.4はfukuoka.pmでお世話になっているmacさん(jaiku名)に教えていただきました。ありがとうございます。

  1. http://tripledoubleyou.subtlegradient.com/stuff/Safari2/からsafari 2.0.4.zipとUpdateSafari2forLeopard.shをダウンロードします。
  2. Safari 2.0.4.zipを解凍し、/Applications内に投げ入れます。
  3. ターミナル.appを実行します。
  4. ダウンロード先へ移動します。cd ダウンロード先
  5. シェルを実行します。sh UpdateSafari2forLeopard.sh
  6. これでSafari 2.0.4が実行できます。open -a Safari\ 2.0.4.app
  7. あとはDocsにつめるなりするとバージョンラベルなんかがついててわかりやすいです。
http://michelf.com/projects/multi-safari/上にあるほかのバージョンもシェルをそれなりに書き換えれば動くかもしれません。

2007年12月17日月曜日

Sledgeベース開発で学んだこと

今日はperlの話です。

自社のASPサービスであるコムログというブログエンジン開発をsledgeフレームワーク上で開発を行っていました。というのは現在、コムログは社員全員で開発するようになり、自社開発されたHiveというフレームワークとこれまた自社開発されたO/Rマッパーで開発されており、一層の機能拡大を行っているので今はSledgeあまりやっていません。

そこでCatalystを勉強していくにあたって過去を振り返ってみようと思います。

CatalystなどをみてるとSledgeは過去の産物のようなイメージになってしまいがちですが、とてもシンプルで規則ただしく初心者だった自分としてはperlでのweb開発する際のベストプラクティスを提供してくれていたと思います。

自分はまだCatalystのCも読めていない乗り遅れ者ですが、Sledge+CDBI開発の知識がいかせればなと思いますね。

さて、sledge開発といえばMVC(model,view,control)= (CDBI or Original Model,TT,Sledge)などを利用した開発になるのですが、設計者によって認識の違いはあるか、もしくは書籍などとは違うかもしれないが、これらの意味を自分の経験上から説明すると。

 ここでのmodelとは物、者、マネージャーオブジェクトやデーターベースアクセスオブジェクト、外部へのアクセスを管理するオブジェクトだったりテンプレートへ上で表現豊かにしてくれるオブジェクト、テンプレート上で汎用性を提供するオブジェクトなど、ビューやコントロール上で専門の仕事を請け負ってくれる者たちです。

コントローラーはモデルであるセッションマネージャーにコンテキスト(その状態を表す構造体またはオブジェクト)を渡しモデルを操作したり、リクエストなどのイベント時にモデルのスキームを提供する。

ビューはそのものずばり、見た目を機械的に制御したり、デザインなどの汎用性を高めてくれたりと見た目を専門に扱うフレームワークのようなものです。

ブログエンジンを作成する上で必要になったモデルは
  • 無数のコンフィグを管理するモデル(リクエストや状態によって必要なコンフィグを探し、アクセサ、抽象コンフィグ項目を提供するのでコンフィグのアクセスに対するレスポンスを保証します)
  • 書き出しパスを管理(望まれる書き出しページリストを作成し、そのキャッシュ化・実行の管理を提供する)
  • 書き出しを管理(ディレクトリー自動作成など書き出しをスムーズに実行できることを保証します)
  • セキュリティーを管理(CSRF防止などセキュリティーを保証します)
  • 絵文字変換を管理(主にViewから呼び出され、どのキャリアからの絵文字データをも統一させ、それぞれにマッチした出力を保証します)
  • 自動実行に対するリソースを管理(非同期でもいい処理はデーモンによるリソースの整列化をすることにより自動処理上でのサーバーの安定性を保証する)
  • メール送信を管理(メール作成ユーティリティーやメール情報の未登録への保証)
  • などなど

こんな感じですね。
細かいのはまだまだありますが、初期はこんなモデル形成になっていました。今のコムログはまた違うけど。
クラス図なんてのがあればいいのですが、クラスの変更がかなりおこなわれているので昔作成したクラス図とはまたぜんぜん違うものになっていました(泣;;。

なんかほぼ設計の話になってしまいましたね。そろそろ自宅へ帰宅したいので今日はこの辺にしておきます。

2007年12月13日木曜日

mac book:leopardでwindows keybord

仕事ではいつもデュアルディスプレーでmac book(メイン)とdell display(サブ)で利用しているのですが、ディスプレイがでかい方で作業したくなり、メインとサブを入れ替えました。

しかし、キーボードをmac bookの方でやるとクリステル姿勢で作業しなくてはいけなくなるので首が寝違えたみたいになってしまいます。
なので以前windows時代に使用していたカチカチキーボード(mechanical keyboard)を使うことにしました。
しかし、問題がoption,ctrl,alt(option)などの入れるが違います。自分はemacsを使っているのでctrlはshiftの上にあってほしい。ここはどうしても変えたかった。

でもさすが、leopard


「システム環境設定」→「キーボードとマウス」→「修飾キー」で変更できる。

しかもだ入力するキーボードによって設定を自動で切り替えてくださるみたい。

自分はmac擁護しているわけではないが、ここまでの気配りができているのはすばらしい。

まいったまいった。

2007年11月25日日曜日

fukuoka.pm第一回定例会開催

いやー 楽しかった。
何がって?
fukuoka perl mongerが開催されたんだよ。

福岡でperlでやっている人が今まで会った事なかったから、非常にうれしかった。
言い過ぎかもしれないけど夢のようでした。
perl関係の勉強会参加するにはshibuya.pmなど東京の方にいかないとなかった(金かかる)。
それをperl歴5年間、思い続けたんだよね。

ではfukuokaとshibuyaとの違いをはっきりしておきたい。
fukuoka.pmでは飲み中心。
shibuya.pmでは技術中心。

fukuokaだめじゃん。

fukuoka.pmとしてはまだほやほやであるが、技術力+さまざまな事例からのベストプラクティス構築+アウトプットしていければと思う。

がんばるばい。

2007年11月19日月曜日

クラスタリングについて

drbd,gnbdなどの記事を上げましたが、なんでそんなことしてるんだという人がいます。ここでクラスタリングについての必要性について記事を書こうと思います。
私はサービスの突然の停止を何回も経験してきました。

まず一つにraid 1の方系運転に気がついていなくて落ちてしまうケース。
これは気がつけばいい話、と思われるかもしれませんが、これには引き継ぎなどによる情報伝達不足などのケアレスミスなどでも起こりえますし、エラー通知などの構成がハードウェアーによって違っていたりして通知されないケースも考えられます。
2つ目にディスク論理エラー(kernel panic)。
論理なのでraidなんて”関係ねー”です。fsckで修復をかけるとまったくディスク領域にアクセスできなくなってしまったりします。怖い怖い
3つ目にハードウェアーの故障
壊れやすい機器として、1位、HDD、2位、電源、3位、メモリ?!っとさまざまです。某D○○○なんかはたちがわるくて運用一週間後とかに初期不良なんかありましたね。
4つ目にメンテナンス中のケアレスミスによるデータ消去またはSQLインジェクションなどのデータ改ざんなども考えられます。

これらの障害要因があるなかで保守コストは一緒というのは割に合わなすぎです。しかもこれらが起った時点で自動的に責任がプログラマーに遷移します。前からいってたじゃんっていうのはいいわけらしいです。

そこで冗長構成をサービスの必須条件にすることで上記の問題を緩和することができます。つまりよく眠れるということです。

しかしそんな予算もって来れないよっとおっしゃる方もいるでしょう。確かにそうです。想定できないものにお金を払うことは現実的には厳しいですからね。

それではどうすればいいか。それはなぞです。というかいい方法を教えてください。

私のやり方は自腹を切るもしくはなんとか説得するということしか思いつきませんでした。

しかし、技術がなければ、説得も運用実績もつくれません。そこで私はこのブログでレポートを書きながら何かサービスを立ち上げ、運用実績を作って行こうと思います。

なんか不平不満みたいになってしまいました(^^;;

ipod touch 一週間後の感想

一週間前にipod touch+leopardをGETしました。

さすがに面白い。UIがいい。洗練されています。

なにより、bsdが使えちゃうところ、簡単なアプリならperlで組めちゃいますね。
apiは用意されていませんが、safari上でlocalhostにアクセスすればlocalweb上でいろんなことができそう。夢が広がりますね。

さて、導入したアプリなんですが、


iphoneから
  • maps
  • mail
  • memo
  • 天気
  • 株価
(iphoneのパッケージから取ってきたのにちゃんと日本語化されちゃってる。)
  • installer(JailBreakMe)から
  • NES(遊び道具)
  • VNsea(VNCViewer・・・用は遠隔GUIを操作できる)
  • Term-vt100(bsdシステムへのターミナル)
  • PDFViewer(PDFを見るやつ)
  • mobileJuhu(モバイルjaiku 使い方がまだわかってない)
こんな感じです。
これらのインストールで困ったなって方がいたらコメントください。

わかる範囲でお答えします。

2007年11月16日金曜日

clusterまでの道のり:drbd編

drbdによるactive/active+gfsを試してみます。わかる人はわかると思いますが、この方法は失敗していますので参考にしようとしている人は見ない方がいいかもしれません。

yum install -y cman lvm2 lvm2-cluster gfs2-utils cluster-cim ricci luci

luci_admin init

yum install -y drbd kmod-drbd

#マシンを再起動
/bin/reboot

#drbd構成を定義
$vi /etc/drbd

この辺はどこでも紹介されているのでこちらでは紹介しません。

#ディスク内に情報を書き込む(何の情報かは不明)
$drbdadm create-md r0
v08 Magic number not found
v07 Magic number not found
About to create a new drbd meta data block
on /dev/data/data1.

==> This might destroy existing data! <==
Do you want to proceed?
[need to type 'yes' to confirm] yes
Creating meta data... initialising activity log
NOT initialized bitmap (32 KB)
New drbd meta data block sucessfully created.
$/etc/init.d/drbd start

経験エラー: >Device has a net-config (use disconnect first)
hostnameが同じだとだめみたい。
/etc/sysconfig/network
-hostname localhost.localdomain
+cm*
$/etc/init.d/network restart

$drbdadm primary all

経験エラー:
State change failed: (-2) Refusing to be Primary without at least one UpToDate disk
Command 'drbdsetup /dev/drbd0 primary' terminated with exit code 11
drbdsetup exited with code 11
解決:
すでにファイルシステムを作成したなどディスクに書き込まれている場合だと、上書きをしないといけないようです。

$drbdsetup /dev/drbd0 primary -o
or
$drbdadm -- --overwrite-data-of-peer primary all

同期が始まります。

両サーバーをactive/active構成にします。

mkfs.gfs2 -p lock_dlm -t cluster1:drbd0 -j 2 /dev/drbd0
mount -t gfs2 /dev/drbd0 /mnt

chkconfig ricci on
chkconfig luci on
chkconfig cman on
chkconfig clvmd on

まとめ。

基本的にdrbdによるActive/Active構成であってもGFS上では不都合が多いようです。
・同じファイルには片方からしか扱うことができません。
  下手に触ってしまうと書き込みプロセスが書き込みロジックで停止してしまいました。Lockが効いており、プロセスも正常に動作していると思い込み、書き込みを待っているようです。
・方系のダウンを実践してみたのですが、lockがinternal(サーバー自身が管理)なため、一度落としてしまうと正常なサーバーのファイルシステムを落とし、drbdadm create-md r0を実行しなくてはいけません。

よってdrbdによるactive/active構成は難しいということがわかったのですが、本題はここではありません。
gnbd+clvm+gfs+cman・・・を実践したいと思います。

ためにならない情報開始

遅ればせながらブログをはじめようと思う。

今更なぜブログを始めようと思ったのか。それは技術の溜め込みすぎで公開用にまとまっていない情報が私のマシン(相棒)に入っており、このままだったらせっかく時間をかけて溜め込んだ情報が台無しじゃんと思い、メモ用紙代わりに残していこうと思っているからです。

っと言っても最新の情報などありません。基礎的な情報だったり、ほかの情報に比べると屁です。(笑)

技術情報についてはいっさい責任を老いかねますのでこの情報による不具合などのご報告はご遠慮いただきたい。

よろしくおねがいします。