« 2006年8月 | メイン | 2006年10月 »

2006年9月28日

使いやすいハードウェア環境を目指して
このエントリーをはてなブックマークに追加 このエントリーをlivedoorクリップに追加

naoya です。
今まで、ウノウラボでは使いやすいソフトウェアを多数紹介されています。対して、使いやすいハードウェアを紹介する機会はほとんどなかったと思います。
今日は、僕がこれまでやってきた使いやすいハードウェア環境を紹介します。

ノートパソコン

ウノウでは、基本的にノートパソコンで作業するため、ノートパソコン選びがとても重要な要素です。 僕はノートパソコンを選ぶときは、キーボードが打ちやすいかどうかを重視しているので、ThinkPad x60 を使っています。ThinkPad x60 のキーボードタイピングは、、ThinkPad x2x の頃に比べると若干悪くなっていますが、それでもノートパソコンの中では一番のキーボードタイピングがいいノートパソコンだと思います。 ウノウではさまざまなノートパソコンを使っていますが、中にはノートパソコンから別の USB キーボード(Happy Hacking Keyboard)を接続して使っている強者もいます。 ただし、最近 Mac もはやっているので、難しい選択です。個人的には、ハードウェア面からみると ThinkPad、ソフトウェア面からみると Mac という感じがしています。

マウス

僕はずっとマウスは ThinkPad x60 のトラックポイントを使い続けていましたが、たまに手がつかれることがあったので、思い切って別のマウスを購入してみました。マウスは、最近発売されたロジクールの VX Revolution を選択しました。店頭でさわった感じだと、デスクトップ用の MX Revolution の方がよかったのですが、ノートパソコンを使っているのでノートパソコン用のマウスを選択しました。 さらに、ロジクールのマウスユーティソフトウェアを導入して、デフォルト設定から中央のスクロールボタンを押したときのアクションと OS 側のマウス設定に、マウスの Search ボタンを Document Flip というウィンドウを簡単に切り替えられる機能を使うように設定を変更しました。

冷却クーラー

ThinkPad x60 は、デュアルコアプロセッサのためか使い続けているとキーボード全体がけっこう暑くなります。キーボードが暑くなってしまうと、手に汗をかきながら作業することになってしまうのでノートパソコン用の冷却クーラーを購入しました。今使っている冷却ーラーは、ロアス PCF-001 というものですが、今では生産中止になっています。ですので、他のメーカーのものでも十分ですが、選ぶときに注意したいのはファンの速度が二種類から選択できるようになっているものを選択した方がいいです。そうでないと、けっこうファンの音が気になります。 冷却クーラーを導入すると、ノートパソコンを背面から冷やしてくれるのでキーボード全体がそんなに暑くならず、さらにキーボードが傾くので、二つの改善効果がでました。

あとは、最近ウノウで導入されたマルチモニターも使うことで、なかなかの使いやすいハードウェア環境ができたと思います。

これからも、使いやすいハードウェアとソフトウェアの組み合わせを追求して、作業環境を日々改善していきたいですね。

2006年9月27日

「2流のテスター」は要らない!(2)
このエントリーをはてなブックマークに追加 このエントリーをlivedoorクリップに追加

こんにちは! やまもと@テスト番長です。

その1を書いてから間が空いてしまいました。

No More Second Class Testers! という面白いコラムを、引き続きご紹介しましょう。

なぜ1流のテスターでなければいけないか

テスターは商品開発における重要な役割を果たします。
テスターは開発中の製品の情報とテストに関する情報を提供します。

テスターには少なくとも3種類の相手(客)がいます。
・開発者には、分かりにくい箇所、テスタビリティ、そして動作しない箇所について報告します。
・ユーザーには、サポート係を通して製品の情報を提供します。
・開発マネージャーには、リリースのリスクについて情報を提供します。

1流のテスターは、コードが書かれている前にシステムのデザインとアーキテクチャを評価することができるくらいクリエイティブです。 コーディングが進む間、テストの準備を整えます。テストカヴァレッジを測定し、リリース可能なくらい、システムのリスクが低くなっているかを調査します。

3種類の相手(客)がいるっていうのはまさにその通りですね。
でも自分の考えでは、QAは第一にユーザーの味方だと思っているので
ここに書かれているユーザーへの効果はちょっと控えめかな?と思います。


では、1流のテストグループを組織するにはどうしたら良いでしょうか?
理想を思い浮かべて、それに向かって努力してみるのもいい方法です。

1流のテスターは何を行うか

理想的なテスターは何を行うでしょうか?テスターは製品をテストするだけではありません。私は、テスターをプロジェクトの調整役として、技術レビューアとして、モデレータとして、デザインチームのメンバーとして、そしてテストツールの開発者として役立てました。

私がテストチームを組織したとき、深い技術的知識と様々なテスト技術(自動化を含む)を持った人々を主に雇いました。開発者は自分の書いたコードを完璧にテストすることはできません。

Robert Glassは'Facts and Fallacies of Software Engineering'で
彼らが自分達のコードを「完全に」テストしたと考えたとき、ロジックの55%~60%がテストされたと述べています。
更に、Capers Jonesは'Assessment and Control of Software Risks'で
系統的なブラックボックステストがテストできるのはコードの30%未満に過ぎないと断言しています。

あなたの製品について考えてみてください。どんな種類のテストを必要としているでしょうか?
私なら、要件ごとにテストをする人ではなく、境界値分析、同値分割、結合テスト、探索的テストが出来て製品を最初から終わりまでテスト出来るかそれを学ぶことの出来る人を雇います。

Cem Kanerは"Recruiting Software Testers"の中で、その製品の専門家をテストグループに加えると大いに役に立つと述べています。多くの複雑な製品において、彼は正しいです。
私は製品のヘビーユーザーだけで構成された多くのテストチームを見てきましたが、残念ながらそれらは2流でした。ヘビーユーザーと技術のあるテスターを組み合わせた場合は極めて有効でした。

1流のテスターは何を知っているか

理想的なテスターは何を知っているでしょうか?
製品により必要な知識は違っています。
技術知識を評価するとき、私は技術的専門知識の4つの領域を評価します。

・機能的な知識 すなわち、様々なテストの手法に精通しているか
・製品分野の知識 製品の機能についての知識、どれくらいすばやく学ぶことができるか
・ツール/技術の経験 既にツールか技術経験を持っている人々は、それ無しの人より生産性が高いです。
・産業の専門的技術 

より大きくより複雑な製品は、多くの知識があり製品について学ぶことの出来るテスターを必要とします。

日本で言う「テスター」の守備範囲からは大分離れて来ました。
QAにも普通のエンジニア並に大きなスキルスケールがあるのです。


あなたのチームに足りないものは何でしょう

では、現実とのギャップはどうやって埋めれば良いでしょう?

採用面接ではどのように応募者の能力を判断していますか?
・テストツールを開発することの出来るテスターを雇いたいならば、開発者と同様の試験を課すべきです。
・コードを読んでテストを実施することの出来るテスターを雇いたいならば、コードを見せて、そこからどんなテストを実施しようと考えるか質問してみると良いでしょう。
・テスト技術に精通した人を雇いたいなら、設計について議論する場を設けて設計に基づいてどんなテストを行うか尋ねてみると良いでしょう。
・リスク管理に関心があるなら、過去どんなプロジェクトで何を行ったか尋ね、例えばどんな風に報告をしてくれるのか試してみれば良いでしょう。

テスターによって得意分野は異なります。
あなたはプロジェクトにとってどのスキルが一番好ましいかを見極める必要があります。

ナルホド!確かにその通り。
求職中のQAの皆さんは準備をしておきましょう。

まとめ

1流のテスターはバグ探し以上の働きをします。
あなたの組織で2流のテスターを使う道理はありません。
要求を満たす適切なスタッフを雇ったり、訓練したりしましょう。

いやあ、興味深いです。

日本はソフトウェアQAの認知度が低いせいか、こういうコラムはあまり見かけないですよね。
そもそもテスターという仕事の求人がほぼありませんし。
転職サイトの履歴書に「QAです」と書いておいても、
問い合わせが来たのは年に1~2件だった覚えがあります。
かといって品質が悪いかというと日本の製品の品質は世界でも相当良いワケで、QCは盛んです。
要はエンジニアが品質問題まで担当するという形なのですね。
ISO9001の取得を考慮すると品質管理部が必要なのですが、
設置しても実務には関わらないスタイルもあるようです。

さて、WEBアプリ開発にはどういった組織形態が適しているでしょう?

個人的には技術の進化スピードと仕組みの複雑さ(まさに混沌)からいって、
得意分野で適度に分業化するモデルは有効だと考えています。

このコラムで述べているように「1流のテスター」を使うことも考えると
色々な組織形態のバリエーションがありそうですね。

2006年9月26日

【サイト研究】第4回 topix.net - News 2.0 - (09/25)
このエントリーをはてなブックマークに追加 このエントリーをlivedoorクリップに追加

akano です。

ちょっと新しめのサービスをすぐに「○○2.0」と呼ぶのは日本だけではなく世界中の流行ですが、今回取り上げた topix.net はいわゆる「News 2.0」と呼ばれるサービスです。
とはいっても DiggNewsing のような「ソーシャルニュースサイト(ニュースを投稿したりそれに対する評価やコメントをユーザで共有するサービス)」とは異なり、記事の内容を AI でカテゴリに分類する、という、 Google News と同種のサービスになっています。コメント機能もありますがあまり重視していないようです。

Google News にはない特徴として、アメリカの地域ごとのニュースを抽出する Local Forum Activity のページにあります。アメリカの地図に各地域ごとに「ニュースの多さ/新しさ」を示す円が描かれ、そこをクリックするとローカルなニュースフォーラムに飛びます。またZipコード(郵便番号)を入力することでも地域のフォーラムへと移動します。

http://www.topix.net/forum/geo?city=city/gifford-wa

ただ「アメリカ全土」のニュースを扱う以上、その扱う情報源がアメリカ東部に偏ってしまいます。そのせいかどうか分かりませんが、普段 IT に触れている層からの支持は Digg には及ばないようです。

ウノウメンバーからは、フォーラムの操作性が素晴らしいという意見があるのと同様に、「検索結果」から「フォーラム形成」に移る過程でのノイズ除去のシステムがよく分からないという意見が出ていました。


0925_1st posted from フォト蔵

0925_2nd posted from フォト蔵

2006年9月25日

viの中でSQLを実行する
このエントリーをはてなブックマークに追加 このエントリーをlivedoorクリップに追加

こんにちは,ttsuruoka です.

vi の中で SQL を実行することができるプラグイン,
dbext.vimを紹介します.

機能(一部)

- ex コマンドで SQL 文を入力して,その結果を取得


:Select user_id from users order by rand() limit 7

Result バッファに結果が表示されます

- 選択したテキスト部分のSQLを実行


// プログラム中のSQL
$query = "SELECT * FROM users LIMIT 10";

// 変数が含まれている場合
$query = "SELECT * FROM users LIMIT $n";

// プレースホルダーが含まれている場合
$query = "SELECT * FROM users LIMIT ?";


php 等のプログラムに書かれている SQL をビジュアルモード(CTRL-V)で選択して,
<Leader>se(バックスラッシュを押しながらse)を入力すると,選択範囲のSQLが実行されます.
変数やプレースホルダーが含まれている場合は,実行時に別の値に置き換えることができます.

その他にテーブル,カラムの一覧取得やテーブル名等の入力補完が使えます.


インストールと設定
vim7.0, Linux でのインストール方法:

- dbext.vim の入手


$ wget http://www.vim.org/scripts/download_script.php?src_id=6221 -O dbext_400.zip
$ unzip dbext_400.zip
$ mv doc/dbext.txt ~/.vim/doc/
$ mv plugin/dbext.vim ~/.vim/plugin/

- ドキュメントの有効化
vi の ex コマンドで,


:helptags ~/.vim/doc

- データベースの設定


:DBPromptForBufferParameters

これを実行すると接続するデータベースの設定を聞かれます.
データベースの種類,名前,ユーザー名,パスワードを入力すれば OK です.

以上で vi の中から SQL を実行することができるようになります.


さらに詳しい情報は,


:h dbext.txt

を参照してください.

2006年9月22日

linuxで○○が壊れた時の対処法
このエントリーをはてなブックマークに追加 このエントリーをlivedoorクリップに追加

こんにちは satoです。
障害の多くの場合はハードディスク障害ですが、実際障害が起きた際に、どのように復旧するかをケース別に書いてみようと思います。

hdd のセクタが壊れた

/var/log/message等に kernel: hda: dma_intr: status=0x51などど表示されているとハードディスク障害の可能性が高いです。
badblocks -vs -o hda1.sector /dev/hda1
(かなり時間がかかる)とやると 不良セクタが書き出されたファイル hda1.sector ができます。
fsck -l hda1.sector /dev/hda1
とやると不良セクタを使用しないようになります。いずれにしても早めの交換をお勧めします。

memoryが壊れた

http://blog.miraclelinux.com/mita/cat218683/index.html
に詳しいやり方が書いてありましたので参照しました。memtestであらかじめ不良領域を調べておいてブート時にメモリを使用しないようにする方法です。いずれにしても早く交換することをお勧めします。

svn のリポジトリが壊れた

svn admin recover リポジトリのディレクトリ
とかで復旧できる場合もあります。いろいろがんばってできないときはあきらめて、ダメなときは前日のバックアップから復旧しましょう。無い場合はsvn importしましょう
Berkeley DBはなんかよく壊れる気がするので、最近はfsfsを使用するようにしました
svnadmin create --fs-type fsfs と指定すれば fsfs形式になります

postfixのメールボックスが壊れた

alias等で その人メールの転送先を一時的に変えて メールファイルに sato に対して
 formail -b < sato > sato.new
とやって 一旦エクスポートして、元ファイルと置き換えましょう。

mysqlのテーブルファイルが壊れた

マスターはスレーブからスレーブはマスターから復旧しましょう。無い場合、MyIsamテーブルの場合は repair tableコマンドで修復することができます
http://dev.mysql.com/doc/refman/4.1/ja/repair-table.html
InnoDB形式のデータが壊れた場合は SELECT INTO OUTFILE でファイルに一旦吐き出して、 LOAD DATA INFILE でリストアします。エラーが出る場合には my.cnf の innodb_force_recovery の値を変えてダンプしてみます
http://dev.mysql.com/doc/refman/4.1/ja/forcing-recovery.html

--
 経験的にハードウェア障害の原因は
  HDD 70%
  NIC 10%
  電源 10% 
  その他 10%
 といった感じです。

 メモリーのテストは memtest で行うことができますが、詳細なHDDのテストは HDDのベンダー毎に違うのであらかじめツールを入手しておきましょう。

 Seagate http://www.seagate.com/support_ja/disc/drivers/discwiz.html
 Hitachi(IBM) http://www.hgst.com/hdd/support/download.htm

2006年9月19日

国際派エンジニアになるための道のり
このエントリーをはてなブックマークに追加 このエントリーをlivedoorクリップに追加

こんにちは、ジュンヤです。

海外経験のない典型的理系人間が日常会話レベルの英語を話せるようになるまでの道のりがすごい反響です。このブログは持ち回りで書いていて、はてなブックマーク数を競っていたりもするわけで、英語の勉強方法についていつか書こうと思っていた僕としては、先を越されて「やられたあ」と思いました。

上記エントリに書かれている英会話力の勉強方法は、確かに非常に有効で良く纏まっています。何よりも大切なのは、それを成し遂げることですが、偉いのは実際にこれらの方法を継続して実行したことだと思います。

ウノウラボのブログの読者には、いつかはシリコンバレーなど海外で働くんだと夢見ている方も少なからずいるかと思います。4年半サンフランシスコのソフトウェアの会社で国際化のエンジニアをしていた僕からは、基礎となる英会話力がついた後、では実際に外国で働き、外国人と円滑にコミュニケーションしていくためのコツや心がけについて紹介したいと思います。いわば上記エントリの続編、実践編といったところでしょうか。来るべきその日のために、参考にしていただければと思います。

1)学校では教えてくれない発音のコツ

めちゃめちゃ日本語なまりの英語で通している移住して50年くらいの方とかいましたが、やはり発音は良い方が格好いいですし、ストレスなくコミュニケーションできます。

英語を母国語としないビジネスマンのための発音講座、なんてものがUCバークレーのような大学の社会人向けの講座にあるのですが、そこで教えてもらった僕にとっては目からうろこの方法を紹介します。

その方法とは、簡単に言ってしまうとアクセントの部分だけをきっちり発音する、ということです。これを心がけることで面白いように通じるようになりました。

実例を挙げましょう。アイスクリームのバニラありますよね。これをカタカナ英語で普通に「バニラプリーズ」と言ってもなかなか通じません。アイスクリーム屋で何度も店員にオーダーを繰り返すはめなってしまいます。伝授された方法では、vanilla の(1)どこを強く発音すべきかと(2)その発音、を覚えます。ここだけは覚える努力が必要です。バニラの場合はニの部分がアクセントで、発音はカタカナのニと同じ感じです。そして他の部分の発音はというと、母音をすべて弱い「ウ」とみなしてしまいます。発音記号でいうと e の天地ひっくりかえったやつです。そして極力弱く発音します。子音だけ発音する感じです。v-ni-l、カタカナで表してみると --といった感じでしょうか。goo 辞書だと発音も音声で聞けるので、確かめてみてください。

このルールをすべての単語に適用するのです。アクセントの部分は恥ずかしいくらい強く、他の部分は消え入りそうな、ごまかすような感じで発音してみると、それっぽく聞こえてきます。日本語はもともと発音がフラットな言語なので、このくらい大げさに強弱をつけたほうが本当の発音っぽく聞こえるのです。

2)いいかげんさを身につける

日本人は間違いを犯すのを恐れるため、なかなか英語が上達しない、とは良く言われることです。確かに他の国の人に比べて、日本人は総じてきっちりしていると思います。そのため文法を気にしすぎたり、ここでこんなことを言ったら場違いかな、なんて変に気にし過ぎてしゃべれないのかもしれません。

文法は全く無視、ところどころ自分の国の単語を織り交ぜながらもものすごい勢いでしゃべるラテン系の人とかいましたが、まあスペイン語と英語の単語に似ているものが多いというのを割り引いても、実際に面と向かっていると表情とか手振りなど他の手がかりとなる部分が多く、勢いで不思議と通じるものです。

たとえば疑問文って、語順変えて、三人称だったら Do ではなく Does にして、などまるでパズルのようで、会話で一瞬のうちに最適な形を組み上げるには慣れが必要です。しかし、英語がまだ上達していないうちは、「え、なんて言ったの?」「どこに行くって言った?」などと疑問文をこちらから連発する必要があります。そんなとき僕は、聞き取れなかった部分を What で置き換え、そのままおうむ返しにするという技を使ってました。Let's go to the restaurant. と言われ、restaurant が聞きとれなかったら、Let's go to What? です。文法丸無視ですが、これで充分通じるし、他の聞き取れたと思う部分の確認にもなります。

他の面でも、海外で生活すると物事がうまく運ばないことが多くて、自分がきっちりきっちりしているといちいち気になってストレスを溜めてしまうことになります。日本人のきっちりしているところは美徳ではありますが、ある程度妥協してしまっていいかげんに考えるようにした方が精神衛生上良いということもあります。

3)大きな声でしゃべる。良くしゃべる。

特にアメリカ人は声が大きく、その大きさで普段コミュニケーションをしているので、こちらの声の大きさが小さいと通じるものも通じないといったことになります。日本語を話しているときの声のレベルよりも、意識して少し大きめにしておいた方が良いです。われらがCTOは、この点では全く問題ないので、これも彼が短期間で上達した秘訣の一つなのでしょう。

また、英会話力は数多く練習しないと上達しないので、なるべくたくさんしゃべることです。もともと日本語を話しているときからおしゃべりな人は、英語でもおしゃべりで、上達が早いと言えます。僕自身そうですが、あまり口数が多くない場合は、やはり意識していつもよりちょっとでもいいから多く話すように努めることが必要でしょう。

4)受験英語は役に立たない、なんてウソ

「受験英語なんて実際の英語の役に立たない、だからやってもしょうがない」なんて言う人がいます。これは受験英語をやりたくないがための言い訳だと思います。正しくは、「受験英語だけでは役に立たない、でもそれなりに、いや結構役に立つ」だと思います。

受験英語で覚えた英単語や文法はしっかりした土台となります。会話のときに文法にきっちり沿わなくてもいいと前述しましたが、でもちゃんとわかっているなら正確な文法に沿った言い方をした方が相手にきちんとした印象を与えます。また仕事でメールや報告書を書くときに、ネイティブでも文法間違いやスペルミスをすることが多い中で、外国人であるあなたがちゃんとした英語を書けると、一目置かれて、それだけで文章に説得力を持たせることができるといった効果があります。

だから、今ちょうど英語を勉強しているという人や、文法やボキャブラリーを増やすことをないがしろにしない方が良いと思いますし、受験英語はちゃんとやらなかったよという人は、簡単なところからでいいので文法にも少し気を配るというのが良いと思います。

5)質問する

これは知っておいたほうが良い心がけといったらいいのでしょうか。アメリカではプレゼンなど、相手が一方的にしゃべる機会の後に、「それでは質問はありますか?」と言った後に、質問しないのはある意味失礼であるということを聞いたことがあります。だからそういう場では、聞いているうちから、質問を用意しておくのが肝要です。もし質問がまったく浮かばなかったらどうするかというと、自分がすでに知っていることを質問してみるのです。もしかしたら、自分が知っている答えと違った答えが返ってくるかもしれないし、その質問から別の話題に広がりが生まれるかもしれません。

6)歴史や地理、文学や映画などいろいろなことに興味を持つ

いくら英語ができるようになっても話す話題が何もなければコミュニケーションはできません。特にシリコンバレーのエンジニアの場合は、いろんな国のいろんな人種の人が集まってきています。初対面でまず自分はどこの国出身かを自己紹介して、お次は自分の国ではこうだけど、あなたの国ではどうなの?といった話になります。日本の人口はどのくらいか?面積はどのくらいか?政治制度はどうなっていて、じゃあ例えば500年くらい前の日本はどうだったか、といったことくらいは説明できたほうがいいでしょう。たとえば韓国の人とだったら、韓国の映画や俳優を話題にすれば盛り上がるかもしれませんし、中国の人とは、僕の場合は三国志を知っていてその話をしたり、知っている故事成語の話をしたら、「おお良く知っているなあ」と喜ばれました。ロシアの人とは日露戦争やロシアでは有名な村上春樹作品の話になったりと、いろんな国の人と話をあわせるためには普段から様々な分野に興味を持つ必要があることを痛感しました。

僕はアメリカにいたとき、以下のサイトを良くチェックしていました。「国際派日本人養成講座」の方はちょっと偏っている部分があるかもしれませんが、参考にしてみてください。

国際派日本人養成講座

田中宇の国際ニュース解説

7)偏見を捨てる

これが一番大事なことかもしれません。「○○人は△△だ」という、特にネガティブな偏見を捨てることです。また相手が自分に対して持っている偏見というのもありますが、これもあまり気にしないことです。自分は自分です。

ある国の人に対して非常に悪い印象を持ったとしても、当たり前ですが、その人=その国の人全員、ではないことを常に心がけることです。

国に対してだけでなく、人種や宗教、サンフランシスコだと特にゲイに対する偏見などもすべて捨てて、オープンな心を持たない限り真の国際人にはなれない、というのが僕の考えです。

2006年9月14日

中元さん、平島さん(@マイネット・ジャパン)ウノウに出張オフィス
このエントリーをはてなブックマークに追加 このエントリーをlivedoorクリップに追加

中元さんと平島さん(マイネット・ジャパン)
中元さんと平島さん(マイネット・ジャパン) posted from フォト蔵


akano です。

今日はソーシャルニュースサイトnewsing(ニューシング)を運営している株式会社マイネット・ジャパンさんより、中元さんと平島さんが出張オフィスでウノウに来社されました。


いつも社員が行っているようにお二人にもフリーアドレス、デュアルモニタの環境にて作業を行っていただきました。が、平本さんは一歩進んでWin & Mac のデュアルマシンを実践!! 私自身マカーなので、その作業風景を大変興味深く見せていただきました。自宅に戻ったら眠っているThinkPadを叩き起こそうと思います。


マイネットニュースさんは今年の7月に創業された大変若い会社です。ですがインターネットサービスに関わるおもしろな人々で集まって、楽しく熱を帯びてサービスやビジネスの発想を広げたり、あわよくばパートナーを見つけたりする「創発的ビアガーデン」を開催(弊社代表の山田も参加しました)という、とても面白い試みをされています。運営されているnewsingはウノウのサイト研究にも取り上げさせていただきました。

また、newsingの開発にはPHPのフレームワークEthnaを採用されていらっしゃるとのことで、Ethnaのお手伝いをしている弊社の個々一番=keitaは夜の飲み会を楽しみにしているようです。

ソーシャルニュースサイトというウェブサービスは、アメリカ(英語圏)ではDiggが積極的にサービスを行っていますが、日本ではSNS(mixiなど)やソーシャルブックマーク(はてブなど)、写真共有サイト(フォト蔵など)ほど定着したサービスはまだありません。この大変若い会社がこの分野をどう開拓し日本の文化に定着させていくか、今後の発展が見ものです。

夜の飲み会はお二人以外も駆けつける、とのこと!

海外経験のない典型的理系人間が日常会話レベルの英語を話せるようになるまでの道のり
このエントリーをはてなブックマークに追加 このエントリーをlivedoorクリップに追加

尾藤正人です。

最近僕のアメリカ人の友達がオフィスに来たときに英語で会話をしてたのですが、ようやく僕が本当に英語が話せることが証明できて存在価値を認めてもらえるようになりました。

昔は理科数学しかできない典型的な理系人間で、高専に進学したため受験戦争の荒波から逃れ、英語レベルは中学生止まり。海外に一度も行ったことがない(パスポート持ってない)状態で外国人と普通に会話ができるまでに成長することができました。

英語は読めるんだけど喋るのは苦手という方は多いと思います。なので、僕がどうやって英会話力を見につけたかを紹介したいと思います。

日本語を使わない

これが一番大事です。英和辞典は捨ててもいいぐらいです。日本人は日本語を勉強するときには日本語を使います。英語を勉強するときには英語を使えばいいのです。そもそも言語っていうのは一対一で対応するものではないので、外国語を使うことに無理があります。英語を日本語で勉強してしまうと、いつまでたっても My hobby is golf. みたいなコテコテな日本語英語から抜けられません。

英英辞書を使う

単語の意味を調べたいときには英和辞書は使わずに英英辞書を使います。ネイティブの人が使う英英辞書は説明が難しいので、世の中には英語学習者向けの辞書があります。本屋に行って Learner's dictionary を探せば必ずありますし、最近の電子辞書には初学者向けの英英辞書がついてる機種があります。

Cambridge Advanced Learner's Dictionaryがオンラインで無料で使えますので、僕はよくこれを使ってます。

レベルの低い英語の本を読みまくる

多読法という方法をご存知でしょうか。簡単な英語を大量に読んで英語学習をしようという方法です。

僕が簡単な英語の本を読んでると、よく「そんな簡単な英語を読んでも勉強にならない」という人がいますが、これは間違ってます。本当に勉強にならない人は同レベルの英語の話をネイティブレベルで書ける人です。日本語でも英語でもそうですが、普段の会話で使われる単語は基本的な単語の組み合わせがほとんどです。重要なのはどういうシチュエーションでどういう単語の組み合わせを使うのかを習得することです。

多読法で重要なのは意味が分からない単語が出てきても調べないことです。いちいち調べてたらすぐ飽きてしまいますし、意味の分からない単語がある状態で内容を汲み取る技術は実際の会話でも生かされます。頻出頻度の多い単語は前後の文脈から少しずつ意味が分かってきます。頻出頻度の少ない単語の意味を丸覚えしても、どうせ使わないのだから意味がありません。ボキャブラリーは少しずつ増やしていけばいいのです。自分達もそうやって(無意識に)日本語を学習してきたはずです。

僕がお勧めするのは Penguin Readers です。英語初学者向けに書かれた本でレベル分けがされてるので、少しずつステップアップするのに最適です。僕はこのシリーズは50冊ぐらい読みました。今は児童文学の方にスイッチしてて、最近だと「ピノキオ」とか「ガリバー旅行記」を読んでます。

生の英語を聞きまくる

上記で英語を読む力はついてくるのですが、実際に英語を聞かないと聞く力がつきません。僕のお勧めはVOA News Special English です。アメリカのような移民の国では英語がネイティブでない人が多いので、平易な英語でゆっくりと喋ってくれます。オンラインで聞けますし、トランススクリプトもついてるので何を話しているか文字で確認することもできます。

映画を見るのもいいでしょう。ラブコメディなんかがいいと思います。日常的な言い回しが多いし、何よりみていて楽しい。映画のトランススクリプトは本屋でも売ってるし、オンラインでも見つかります。

シャドーウィングしまくる

シャドーウィングというのは英語を聞いて、それと同じことを自分で声に出すことです。かなり効果があります。日常会話で話す言い回しなんてのは大体決まっていて、何回も口に出して慣れてくると自然に口から出てくるようになります。

シャドーウィング用の教材は少ないですが、探せばあります。CDとトランススクリプトがついてるやつです。できるだけ日本語訳がないものを選びましょう。

以前 youtube で映画を見ながらコテコテのカタカナ英語で話している人の動画がありましたが、あれってすごくいいです。ひたすら練習することが大事です。

実際に英語で話してみる

ここまで下準備をしたら実践あるのみです。といっても日本に住んでて外国人と会話する機会なんてそうそうありません。

僕の場合は Nova に通いました。Nova には VOICE ルームという制度があって、ここではレベル関係なしにただ英語会話をするというシステムです。1回2000円ぐらいで何時間でもいれるので、通常のレッスンよりかなりコストパフォーマンスが高いです。

英会話喫茶というのもあります。都内だと恵比寿とか高田馬場にあります。僕はあまり行ったことはありません。

Nova は先生の質が良くないからダメだという話がよくありますが、それは間違ってると思います。僕の持論では Good English is Bad English. で、日本人にとって分かり易い英語が必ずしも通じるとは限らないからです。現地の人は英語の先生ではないのですから、むしろ英語の教え方を知らない人と普通に話ができるようになるほうが大事だと思います。

まとめ

上記の方法で、早い人で半年ぐらいで話せるようになると思います。僕は大体1年ぐらいかかりましたが。日本語を話す能力がある人は誰でも英語を話す能力を持っていると思います。大事なのは「継続は力なり」ではないでしょうか。

2006年9月13日

Web系エンジニアの目から見たWindows XP
このエントリーをはてなブックマークに追加 このエントリーをlivedoorクリップに追加

Keitaです。
ウノウに入って今2週間目を満喫しています。

ちょうど入ったばかりの時に、環境構築をしたこともあり今回はWindows XPでどういう感じで開発しているかをウノウの環境も合わせて書いていきたいと思います。
というか、hideさんが前のエントリで、Mac OS Xの記事を書いていたので丸パクリです。ごめんなさい。
あと、Developer Enviroments Conferenceの資料は参考になりました。

基本コンセプトは、「エディタがWindows」です。

まず、初期化
まず、インストール直後に、デスクトップをまっさらにします。
壁紙も残しません。
デスクトップの上、ゴミ箱だけです。
なぜかというと、僕、整理整頓が苦手なためほっておくとデスクトップ上にファイルがたまっていくんです。
これを防止するため、デスクトップには、どんなファイルも置かないようにしています。
以前は、起動時に、デスクトップにあるファイルを一括でゴミ箱にいれるプログラムをDelphiで書いて、使用していました。

あとついでに、当然のごとくスタイルをクラシックに変えます。

そして次のファイルをインストールします。

Special Launch
なにはなくてもこのランチャです。更新がとまっているのですが、今のところクリティカルな不具合はありませんし、ショートカットが便利なので使っています。特に、昔自分がつくったスクリーンセイバープラグインを多用していて、席を立つ時に、ctl+alt+s -> ctl-sと押すだけで、スクリーンセイバーが実行されるので激しく楽チンです。あと、左クリックでファイルをドラックアンドドロップすると、ファイルのパスをクリップボードに登録できたりします。

FireFox
FirefoxはいろいろとWeb開発に便利なツールが多いので、そこらへんをインストールしておきます。Selenium IDE, greasemonkeyあたりは必ずいれます。

IE7Opera
当たり前ですが、デバッグ時のブラウザはいろいろなものを使うことにしてます。IE7については、以前のウノウラボの記事を参考にしています。

NoEditor
Diff機能が激しく便利なので入れてます。比較画面をみながらその画面でそのまま修正ができます。とはいえ、UNIX系のツールでだいたい自動的にやってくれるので、まだウノウでは活躍していません。

WzEditor
HTMLの編集に昔からつかっていたエディタです。有料のソフトですけど、個人的には好きで、文章の編集とかによく使っています。

PHP Editor スタンドアローン版
PHP用のエディタはキーバインドがWindows系で色がつけばなんでもいいです。軽いので使っています。

PHPマニュアルとか
chm形式のPHPのヘルプを使っています。基本的にどんな関数があるかは、覚えるようにしていますが、関数名が思い出せないときに使います。

Poderosa
ターミナルはこれを使っています。以前の3.x系はよくおちたのですが、4.x系は落ちません。デザインが今風好きです。

VMware
Linux環境がほしいときに使います。社内の開発はsambaで共有しているので問題ないですが、ssh経由で編集したい時などは、Windows -(samba)- VmwareなLinux - (ssh) - 編集したいサーバとかやって突破しています。(これは別のやり方ありますが)わりと、強引にLinuxの何かが使いたいときは便利です。

試す予定のもの
萌ディタ
PHP Ide

こんなものでしょうか、ちなみに、入力機器は、HHKLiteと、マイクロソフトトラックボールを使っています。マイクロソフトトラックボールは残念ながら生産中止になってしまったので、次のトラックボールを探し中です。

入力機器も含めて、Windowsで便利な環境構築用の何かがありましたら教えてください。

2006年9月12日

Web系エンジニアの目から見たMac OS X
このエントリーをはてなブックマークに追加 このエントリーをlivedoorクリップに追加

hideです。

僕がMac OS Xを使うようになって1ヶ月と少しが経ちました。最初は戸惑うこともあったのですが、だいぶ手に馴染むようになってきました。最近、オープンソース関係のイベントに行くとMacユーザがかなりの割合でいる理由が分かったような気がします。感想としては、
  • UNIXの良い文化を取り入れている
  • DockやDashbordの動きがいちいちカッコいい
  • VMwareやcoLinuxを使わなくてもローカルに開発環境を作れる

今更ながら、BSDベースにしてMicrosoft製のOSとの違いを出していくというAppleの戦略には関心してしまいました。Web系エンジニアの方は、Macを次に購入するPCの候補に入れてみてはいかがでしょうか。


というわけで、あなたがいつかMacユーザになった際に便利なように、最初にインストールするべき10のアプリケーションを紹介します。

1.Firefox

何はなくともまずこれ。Safariでも良いのですが、Windows環境でFirefoxを使っていたなら、今までの資産がそのまま使えます。

2.iTerm

標準のターミナルは、文字化けしたり使い勝手がいまいち良くないのでこちらを使います。タブ表示が可能なほか、UTF-8の他にShift_JIS,EUC-JP等いろいろな文字コードに対応しています。描画が若干遅いのが難点だけど、ウィンドウの透過表示ができるので半透明フェチにはたまらない。

3.VirtueDesktops

OS Xに仮想デスクトップ機能を追加します。開発用のデスクトップ、メールやメッセンジャー用のデスクトップというように分けて使っています。各デスクトップを切り替える際のエフェクトがカッコいいです。次期LeopardにはSpacesという機能が標準搭載されるようです。

4.Quicksilver

ランチャー。Control+escに割り当てていて、アプリケーション名の数文字を入れると、インクリメンタルサーチしてくれて素早く起動することができます。アプリに限らず、Webページの名称でもOKなので、めちゃくちゃ便利。

5.Carbon Emacs

メモやToDoは、howmで管理しているので必須。動作もけっこう軽いです。ウィンドウを半透明化できるので、しつこいけど半透明フェチにはたまらないです。.emacs.elに下記を記述しましょう。

(add-to-list 'default-frame-alist   '(active-alpha . 0.90))
(add-to-list 'default-frame-alist '(inactive-alpha . 0.40))

6.TextMate

RailsのDHHも使っているハッカー御用達のエディタ。PythonプログラムはこのTextMateを使って書いています。使い勝手はかなりいいのですが、一つ大きな問題があって、日本語が通らない! 必然的にロケールデータを分けて国際化せざるを得なくなるので、逆に良かったり。
最初、バックスラッシュが入力できなくて困っていたのですが、[ことえり環境設定]-[入力文字]で“JISキーボードの¥で入力する文字”をバックスラッシュにしたらOKでした。

7.Xcode

これを入れないと始まりません。次に紹介するDarwin Portsのパッケージをコンパイルする際にも必要です。

8.Darwin Ports

足りないUnix系のコマンド類は、このPortsを使ってインストールします。svnとかopensslとかsqliteとか。

9.Sharity

MicrosoftネットワークとかSambaサーバに接続するのにあると便利です。

10.NeoOffice

OpenOfficeよりもこちらのほうが、Macに最適化されていてお勧めです。Mac版のMicrosoft Officeよりも使いやすい気がするのは気のせいかな?

次点
Chmox日本語対応版 … Windowsのchmヘルプを表示するツール
CoreDuoTemp … Intel MacのCPU温度をウィジェットに表示



残念ながらウノウでは、マカーは3人くらいでなかなか情報交換ができません(メインマシンとして使っているのは自分だけ)。
他にも便利がツールがあれば、ぜひコメントやトラックバックで教えてください。特にターミナルやデュアルディスプレイでメニューバーを両画面に表示する方法があれば知りたいです。よろしくお願いします。

【サイト研究】第3回 - Remember the milk - (9 / 11)
このエントリーをはてなブックマークに追加 このエントリーをlivedoorクリップに追加

akanoです。

サイト研究第3回は、無料タスク管理サイト「Remember the milkPV)」です。オーストラリアの二人の若者が作った海外では有名なサイトですが、今回は日本語に対応ということで今回のサイト研究に取り上げました。

このサイトの特徴として非常に快適なAjaxインターフェイスが挙げられます。一つ一つの操作が非常に快適に行うことができます。その部分の作りこみは非常に評価できるのですが、あまり使われていないであろう、「共有タスクに関するメモ」の機能では、そのメモを書いたユーザを特定できず、誰もが変更できるという作りこみの甘さが見受けられました。

ですが、無料のタスク管理ソフトとしては大変高機能で使いやすいという印象を覚えました。


0911_1st posted from フォト蔵

0911_2nd posted from フォト蔵

0911_3rd posted from フォト蔵

参考:無料タスク管理サービス「Remember The Milk」日本語版の使い方GIGAZINE

2006年9月11日

CSSで見る、IE7。
このエントリーをはてなブックマークに追加 このエントリーをlivedoorクリップに追加

Sashaです。 MicrosoftがIE7 RC1(Internet Explorer 7 Release Candidate 1)を公開しましたね。タブ・ブラウジング? RSS? 今ドキ当たり前。タブに出ているサイトのサムネイルが一括して見れるとか、印刷するときに用紙の大きさに合わせて印刷してくれるぴったり機能とかも、「あったらいいな」的機能であったことは確かですが、ウェブデザイナーたちの興味の中心は、今まで私たちの忍耐力をギリギリまで試してきた、IEの CSSへのサポートが、どのように変化するのか、ですよね。せっかくなので、今まで長年にわたって多くの人を悩ませてきたバグたちと照らし合わせながら見ていきましょう。ちなみに、私はまだ一つ一つ検証してませんので、その解決宣言に関する信憑性には責任は負いかねます。悪しからず。

positioniseverything.net では数年前からIEの主要な「勘違い」が指摘されてきました。Microsoftの開発者たちによるIEブログでは、このサイトで指摘された問題をほぼ全て解決!と言っています。具体的には?
  • いないいないばぁのバグ → floatしたdivの横に普通にコンテンツを出したいとき、divをclearすると、なぜかfloatされたdivの横に出る筈のコンテンツが消えるという奇怪な現象を起こらなくしたらしい。先週私はこれと格闘しました → 祝。
  • 勝手に横幅を引き伸ばすバグ → 横幅をpxで設定しているのにもかかわらず、URLなど途中で切れないテキストが入ってしまったとき、勝手に横幅を拡張しないようにしたらしい → 祝。
  • %(パーセンテージ)がわからないバグ → もし、marginを比率で指定している場合、marginはその指定されているboxの横幅を参考にするべきですが、そのbox の横幅が、親のboxの横幅に依存している場合、IEはどうやってmarginを取っていいのか途方にくれる、というバグを修正したらしい → 祝。
  • line-heightがへんてこなバグ → テキスト内にIMG, INPUT, TEXTAREA, SELECT そしてOBJECTが内在しているとき、つまり、text text text <img src="#" /> text text などとなっているとき(絵文字とか、こんな感じですね)、line-heightが突然狂う、というバグを修正したらしい → 祝。
  • 混乱したborderのバグ → IE6では、divのなかに複数のdivがあって、その2つ目以降のdivのmargin-topが、「-1px」など、0より下の値が定義されており、さらにその2つ目のdiv、あるいはそのchild elementにボーダーが設定されているとき、IEは拒否反応を示してやけっぱちになる、という大人気ない行動を改善したらしい → 祝。
  • listのbgが消えるバグ → floatされたdivがrelativeで位置づけられていたとき、中にあるlistに設定されたbackgroundが無視される奇妙な現象を修正したらしい → 祝。
  • ギロチンバグ → boxの中にあるもうひとつのboxが、floatされているがclearされておらず、さらに、floatされているboxのあとに来る、floatされていないコンテンツに含まれるのリンクで:hoverが指定されているとき、floatされている部分の下のほうが、チョッキリ切られてしまうという残酷なバグを修正したらしい → 祝。
  • スクロールできないバグ → ページのコンテンツがrelativeにpositionされており、高さや横幅が定義されてないとき、その中にabsoluteにpositionされたboxたちが存在すると、たとえ(absolute内のコンテンツを見るのに)必要であってもスクロールバーを出さないバグを修正したらしい → 祝。
  • かってにコンテンツを繰り返すバグ → 何回かfloatを繰り返すと、時に、最後にfloatされたelementの中にあったtextがその最後のelementの後に重複して現れるという脅威の現象を壊滅したらしい → 祝。
  • イタリックで横幅がわからなくなるバグ → 読んで字のごとく、イタリックだと横幅を指定しても無視する、という失礼を改めたらしい → 祝。
  • 2倍の値のmarginをつけるバグ → 例えば、float: left; されているに100pxのmargin-leftを指定すると、つまり、floatの方向と、marginの方向が同一だった場合、太っ腹にも与えた marginの2倍である200pxもmarginをくれる、というバグを修正したらしい → 祝。
  • 奇妙なインデントのバグ → inline elementであるイメージやテキストが、floatされたboxに隣接するとき、そのテキストやイメージは、floatされたboxに与えられたはずのmarginを受け継いでしまう、というバグを修正 → 祝。
  • 3pxの悪魔、のバグ → floatされたboxの横に来るテキストは、微妙な3pxの隙間を持つことになる、という奇怪な現象を解決 → 祝。
  • 最初の文字がないバグ → boxの中にboxがあり、内側のboxにテキストが入っており、letter-spacingが設定されているとき、最初の文字が消えてしまう!という怪奇現象を解消 → 祝。
  • inline listのバグ → boxに横幅がpxで指定されており、中にあるlistに 'display: inline'と'white-space: nowrap'が指定してあり、さらのこのlistの横幅が、上側のboxで指定された横幅を上回ってしまう場合、boxは勝手に横幅を拡張してしまう、というバグを改正 → 祝。


ああ、つかれた。ほかにもIEBlogでは直した無数のバグを列挙しています。さて、これでCSSコーダーの頭痛は、いったいよくなるのでしょうか。

IE7 RC1をスタンドアローンで動作させる方法
このエントリーをはてなブックマークに追加 このエントリーをlivedoorクリップに追加

naoyaです。
本日、ウノウ社内でIE7 RC1をスタンドアローンで動作させる方法を教えたところ評判がよかったので、IE7 RC1をスタンドアローンで動作させる方法を書いてみたいと思います。

この方法を使うと、既存のIE6を上書きすることなく、IE7を実行できるのでとても便利です。

  1. IE7 Standaloneから IE7 Standaloneツール(IE7RC1.zip)をダウンロードします
  2. ダウンロードしたツールを解凍します
  3. IEホームページからIE7 RC1をダウンロードします
  4. ダウンロードしたIE7 RC1を、解凍した IE7 Standaloneツールと同じディレクトリにおきます
  5. IE7 Standalone Setup.batバッチファイルを実行します
  6. ie7rc1_standalone.regファイルをダブルクリックしてレジストリを結合します
  7. IE7.batバッチファイルを実行します。15秒間のウェイトのあと、IE7 RC1が起動します。

なお、アンインストールのときは、ie7rc1_cleanup.regをダブルクリックしてレジストリを結合してください。


この方法で、IE7を使うと、下記のような制限事項があります。回避策を知っている方は、ぜひ教えてください。


  • 新規ウィンドウを開くリンクをクリックしても、新しいウィンドウが開かない(ただ、新規ウィンドウを必ずタブで開くように設定すると新規タブが開くますがConnecting...のままとなってしまいページが表示できません) 

  • バージョン情報ダイアログが開かない

この制限事項があると普段使うブラウザとは使うのは難しいですが、自分が構築しているサイトをIE7で閲覧してページの表示を確認するくらいなら十分使えると思います。

なお、利用は自己責任でお願いします。

2006年9月 8日

マルチウィンドウ環境をよくするソフトウェアたち
このエントリーをはてなブックマークに追加 このエントリーをlivedoorクリップに追加

naoyaです。
今回のエントリは、Windows ユーザに限ったエントリです。

今週から、ウノウではデュアルモニタを導入しました。(ちなみに、デュアルモニタは事務の方も今日から使い始めました。)私は今まで、Virtual Dimenstionというソフトウェアを使って仮想デスクトップを構築して使っていましたが、デュアルモニタの導入により仮想デスクトップが必要なくなりました。そのため作業構築は格段に上がっていることを実感できていますが、さらに作業構築を上げるためのソフトウェアがないか調べてみました。

まず見つけたのがMultiMon Taskbarというソフトウェアです。Multion Taskbarを使うと、ホームページを見て分かる通り、ウィンドウのタイトルバーにボタンが一つ追加されて、このボタンを押すと自動的に別のモニタへウィンドウが瞬時に移動します。これはかなり便利です。さらに非プライマリモニタ以外にタスクバーを追加することができますが、これはあえて使わないようにしました。理由は、次のソフトウェアが見つかったためです。

次に見つけたのがULTRAMONというソフトウェアです。このソフトウェアもかなり便利です。特に便利なのは、Smart Taskbar という機能です。Smart Taskbar は、MultiMon Taskbar と同じで非プライマリモニタにタスクバーを表示することができる機能ですが、そのタスクバーにすべてのタスクを表示するのか、それともそれぞれのモニタに表示されているウィンドウのタスクのみを表示するのか切り替えられます。また、スクリーンセイバーをモニタ別に設定できるのもうれしいです。

MultiMon Taskbar + ULTRAMON で、さらにデュアルモニタの作業効率が上がると思いますので、デュアルモニタを使っている人はぜひ試してみてください。

また、ソフトウェアを探しているときにVirtual Task Tipsというソフトウェアを見つけました。このソフトウェアは、タスクバーのタスクにマウスカーソルをもっていくと、そのタスクのウィンドウのスクリーンショットを自動的に表示してくれるソフトウェアです。

このソフトウェアを使っている上で、あと不便だと思うところはマウスカーソルの移動ですね。キーボードショートカットで、モニタ間のマウスカーソル位置を変更したいですが、このプログラムは時間を見て作ってみたいと思います。

2006年9月 6日

LVM + XFSで高速簡単 MySQLバックアップ
このエントリーをはてなブックマークに追加 このエントリーをlivedoorクリップに追加

こんにちは satoです。

Slaveサーバを運用している場合、MySQLのバックアップファイルが
必要になる場面は少ないです。

しかし、プログラムのバグなどで、データベースレコードの内容が
おかしくなってしまい、収集がつかなくり、巻き戻しをする場合などに
バックアップファイルがあると、とても便利です。

ということで、LVMのスナップショット機能でMySQLの
バックアップにチャレンジしてみました。

■前提条件
パーティションはこのような感じです
-----------------------
sda1 boot
-----------------------
sda2 xfs(linuxが入っている)
-----------------------
sda3 ここに作る
-----------------------

■構築時

fdisk /dev/sda
n #新しくパーティションを作成
3 #作成するパーティション番号
enter #パーティションのスタート位置(デフォルト値)
enter #パーティションの終了位置(デフォルト値)
t #パーティションのタイプを変更
3 #変更するパーティション番号
8e #Linux-LVMを選択
w #書き込み & 終了

pvcreate /dev/hda3 #物理ボリュームを作成
vgcreate vg1 /dev/hda3 #ボリュームグループを作成.
lvcreate -L 20G -n lv1 vg1 #論理ボリュームを作成
mkfs.xfs /dev/vg1/lv1 #xfsで初期化
mount /dev/vg1/lv1 /var/lib/mysql #マウント
(起動時にマウントはfstabとかに書き込む)


■バックアップ作成時



hotbackup.sh
-------------------
yes | lvremove -f /dev/vg1/lv1_snap #スナップショットを削除
sync #discにフラッシュ
sync
mysql -u username < hotbackup.sql(*1) #スナップショットを取る
mount -o ro,nouuid /dev/vg1/lv1_snap /mnt/snap #スナップショットマウント
nice cp /mnt/snap /misc/他サーバ/backups #コピー
umount /mnt/snap #スナップショットアンマウント
yes | lvremove -f /dev/vg1/lv1_snap #スナップショットを削除

hotbackup.sql
-------------------
FLUSH TABLES WITH READ LOCK; #テーブルロック
#system xfs_freeze -f /var/lib/mysql(*2) #書き込みを停止
system lvcreate -s -L 10g -n lv1_snap /dev/vg1/lv1 #スナップショット作成
#system xfs_freeze -u /var/lib/mysql #書き込み再開
UNLOCK TABLES; #テーブルアンロック
exit

hotbackup.sh を cronとかに登録

(*1)
パスワードは引数で渡さずにホームディレクトリ内にある .my.cnf
などに書いておくようにする
http://dev.mysql.com/doc/refman/4.1/ja/connecting.html

(*2)
xfs_freeze をしてスナップショットをしたいのですが
なぜか応答が無くなってしまう。
http://marc.theaimsgroup.com/?l=linux-lvm&m=111014382900031&w=2
ということらしい。
これでデータが壊れないかは要検証
10回ほど実験してみましたが、壊れていなかったです。

もうちょっといろいろ試してみて、問題なさそうでしたら、
小さなプロジェクトから実運用してみたいと思います。

参考サイト
http://www.linux.or.jp/JF/JFdocs/LVM-HOWTO.html
http://www.h7.dion.ne.jp/~matsu/feature/uzumi/admin_memo/lvm_xfs.html
http://pantora.net/pages/linux/lvm

2006年9月 5日

田口さん(@百式)、赤松さん(@サイドフィード)ウノウに訪問オフィス
このエントリーをはてなブックマークに追加 このエントリーをlivedoorクリップに追加

赤松さん
赤松さん posted by (C) Shintaroさんの写真


akano です。

今日は、百式の田口さん、サイドフィードの赤松さんがウノウに訪問オフィスで来てくださいました。


朝10時に来社。
ウノウはフリーアドレスなので、好きな席にて仕事を進めていただきました。
また先日導入したデュアルモニタ環境、早速使っていただきました。
昼食は近くのカフェで一緒に。
とても静かと評判のこのオフィスで一日作業をしていただきました。


昨日より導入しているデュアルモニタ開発環境、実は我らがジュンヤがお二人と開発合宿したときに経験したデュアルモニタ環境が快適で、それをウノウの合宿に取り入れたところこれまた好評だったことが導入のきっかけになっています。
また、赤松さんが作成されたサービスを使っていたり、i d e a * i d e a で LifeHack 技を盗んだりしている社員も当然のごとく存在しており、エンジニアとして本当に参考にさせていただいています。

これから飲み会。今夜もどうぞ呑みすぎちゃって下さい!!

PEAR package 作成と公開までの手順
このエントリーをはてなブックマークに追加 このエントリーをlivedoorクリップに追加

こんにちは,ttsuruoka です.

PEAR package の作成と公開までの手順について,
(たまにしかやらないことは忘れてもいいように)ここにメモしておきます.

例として Services_Delicious のパッケージ作成・公開手順:

0. テスト

まずはテストが正常に通る状態であることを確認.
Services_Delicious では .phpt 形式のテストを用意してあるので,これを実行します.

$ cd /path/to/tests  # テストのあるディレクトリに移動
$ pear run-tests
Running 3 tests
PASS Services_Delicious:bug#8528[bug8528.phpt]
PASS Services_Delicious:Req#7293[req7293.phpt]
PASS Services_Delicious:Req#8044[req8044.phpt]
TOTAL TIME: 00:07
3 PASSED TESTS
0 SKIPPED TESTS

テストを個別に実行したいときは,実行するテストを指定します:

$ pear run-tests bug8528.phpt


1. パッケージ定義ファイル(package.xml)の検証

$ cd /path/to/package  # パッケージのあるディレクトリに移動
$ pear pv
Analyzing Delicious.php
Validation: 0 error(s), 0 warning(s)

pear pv は pear package-validate の省略形です.このコマンドによって package.xml 中のタグの閉じ忘れなどの構文エラーをチェックできます.


2. Tarball を作成

$ pear package

Services_Delicious-0.5.0.tgz が出来上がります.


3. パッケージに問題がないか検証

パッケージ情報の確認:

$ pear info Services_Delicious-0.5.0.tgz
About Services_Delicious-0.5.0
==============================
Provides            Classes: Services_Delicious
Package             Services_Delicious
Summary             Client for the del.icio.us web service.
(中略)
Version             0.5.0
Release Date        2006-09-05
Release License     PHP License
Release State       beta
Release Notes       - Fixed bug #8528: Invalid response code
Release Deps        Package PEAR ==
                    Package HTTP_Request ==
                    Package XML_Serializer >= 0.12.0
                    ext openssl ==
Package.xml Version 1.0
Packaged With PEAR  1.4.9

Release Date, Release Notes をよく確認.

インストールパスの確認:

$ pear list Services_Delicious-0.5.0.tgz 
Contents of Services_Delicious-0.5.0.tgz
========================================
Package File            Install Path
docs/api.txt            /usr/local/lib/php/doc/Services_Delicious/docs/api.txt
examples/addPost.php    /usr/local/lib/php/doc/Services_Delicious/examples/addPost.php
(中略)
examples/renameTag.php  /usr/local/lib/php/doc/Services_Delicious/examples/renameTag.php
Delicious.php           /usr/local/lib/php/Services/Delicious.php

pear install したときにどこにファイルが配置されるか分かります.
おかしいところがあれば package.xml を見直します.


4. ローカルにインストール

パッケージを公開する前にまずはローカル環境にインストールします.

# pear install -f Services_Delicious-0.5.0.tgz

古いパッケージを上書きしてインストールするため -f オプションをつけてあります.
インストール後に以下の項目を確認します:
- 正しいファイル名か
- 正しいディレクトリ構成か
- 正しい場所にインストールされているか


5. 公開

公式なパッケージの場合:
PEAR website からアップロード→パッケージのページ確認(http://pear.php.net/package/Services_Delicious)→ PEAR-general メーリングリスト確認 → pear install で確認

非公式なパッケージの場合:
公開ディレクトリにパッケージファイルを置く→ pear install で確認

開発現場にデュアルモニタを導入しました
このエントリーをはてなブックマークに追加 このエントリーをlivedoorクリップに追加

デュアルモニタでの作業
デュアルモニタでの作業 posted from フォト蔵


以前のエントリで開発合宿でのデュアルモニタの採用について話題になっておりましたが、ウノウは今月より、オフィスで行われる通常の開発環境にデュアルモニタの採用を始めました。

早速その日出勤していた全員のエンジニアが導入し、その快適さをがっつり堪能していました。


これからもウノウは新しい技術を積極的に取り入れ、皆様に楽しんでいただけるサービスを開発し続けます。
今後ともどうか宜しくお願いいたします。


モニタ群
モニタ群 posted from フォト蔵
ズラリと並んだモニタを記念撮影。


【参考】 デュアルモニタにすると生産性が30%アップする

【サイト研究】第2階 - Webshots -
このエントリーをはてなブックマークに追加 このエントリーをlivedoorクリップに追加

サイト研究第2階は写真共有サイト Webshots です。
http://www.webshots.com/

Alexa のランキングを見てみると、今年の4月までは flickr と PV を競い合っていた模様です。以降は flickr の急激な伸びに置いてきぼりを食らった形になっています。

今回はサイトリニューアルということで勉強会で取り上げました。

その中で出てきた感想として、競合サイトと比較してデザイン面で劣る点があるという意見があり、また他サービスと比較した際の明確な強みが実感できないという印象を受けました。

0904_1st posted from フォト蔵


0904_2nd posted from フォト蔵


0904_3rd posted from フォト蔵

2006年9月 1日

開発合宿成果~ 放送禁止用語チェッカー
このエントリーをはてなブックマークに追加 このエントリーをlivedoorクリップに追加

こんにちは! やまもと@テスト番長です。

先日の開発合宿は不肖私テスト番長も参加させていただきました。
他のメンバーと違い、プログラマじゃないんで大したものは作れないのですが、
ちょっとしたチェックツールをこしらえてみました。

じゃじゃーん。「放送禁止用語チェッカー!」(ドラえもん風に)

サイト制作をしていると、使ってはいけない表現が混じっていないか
チェックしなければいけないケースがあります。
掲示板の運営などの場合、NGワードをチェックする機能を実装したりしますよね。
今回は、放送禁止用語をハイライトして、修正候補を表示してくれる
ブックマークレットを作ってみました。解説も有れば表示します。

放送禁止用語チェッカー

IEなら右クリックして「お気に入りに追加」 Firefoxなら「このリンクをブックマーク」してください。
使うには、チェックしたいウェブページを開いてお気に入り・ブックマークから起動するだけです。

まだ作りたてなので辞書が弱いですが、追々改善していきたいと思ってます。
あと、形態素解析なんぞこれっぽっちもしていないので時々アホです。ご愛嬌。
宜しければ、ちょっと試してみてくださいねー。


・・・これって、要は単純に辞書と照合するだけのプログラムなので、
中身を入れ替えれば色々な用途に使えそうですナ。というわけで、

お・ま・け

おやじブロガーの皆様必携!あなたは気付かないうちに死語を使っていませんか?

死語チェッカー

ではでは。

Smarty で gettext を使って国際化
このエントリーをはてなブックマークに追加 このエントリーをlivedoorクリップに追加

尾藤正人です。

ウノウでは海外公開を前提に事業を展開しているので、ほぼ例外なくプログラムは国際化されています。先日公開した Melovie もちゃんと国際化されていて、ブラウザの言語の設定を変えると英語で表示されます。

最近テンプレートエンジンで Smarty を使い始めたのですが、そのままでは gettext とうまく組み合わせることができないので、ウノウでは独自の仕組みを入れています。日本語だと Smarty で gettext やってる情報が全然ないので、ウノウでやっている方法を紹介したいと思います。

Smarty で gettext を使うときの一番の問題点はメッセージの抽出です。Smarty は PHP とは文法が異なるので、そのままでは xgettext を使ってメッセージを抽出することができません。PHP 側で全てのメッセージを変数に代入するというのも一つの方法ですが、やはりテンプレートの中に埋め込みたい。

Smarty Gettextというのがあるのですが、strarg() という独自の仕組みで文字列の置換を行っていたので採用は見送りました。普通は sprintf() を使うので。仕組みはそれほど複雑でないので、自分で作りました。

smarty plugin

Smarty の plugin を作って、その中に gettext のメッセージを埋め込みます。

{t}_('Hello'){/t}

置換文字列がある場合はこんな感じに書きます

{t name=$name}_('Hello %1$s'){/t}

plugin は非常に簡単です。次のソースコードを block.t.php という名前で smarty_plugins に保存してください。

block.t.php
function smarty_block_t($params, $content, &$smarty)
{
    if (is_null($content)) {
        return;
    }

    eval('$text = '.$content.';');
    if ($params) {
        $text = vsprintf($text, $params);
    }
    return $text;
}

メッセージ抽出(poファイルの作成)

テンプレートの中に _('Hello') という形で書いてあるので、xgettext でそのまま抽出できますが、xgettext に PHP のプログラムだと誤認させるためにテンプレートの先頭に

{* <?php *}

という1行を入れて無理やり処理させています。このおまじないの1行の挿入はメッセージ抽出スクリプトで自動で行います。

これでうまく行くかなと思って、最初の方はうまくいってたのですが、しばらく使ってみるとうまく抽出されないメッセージが出てきました。まあ、元々無理があった仕組みなんですが。

しょうがないので、テンプレートのファイル名の最後に ',' をつけたファイルに PHP の形式でメッセージ部分だけ取り出したファイルを出力してメッセージの抽出を行うようにしました。これだと xgettext が出力する元のファイル名がほとんど変わらないので、メッセージから元ファイルを探すことが可能になります。

最終的には次のようなスクリプトを実行してメッセージを抽出してます。

create_locale.sh -l ja_JP.UTF-8

create_locale.sh

#!/bin/sh
# vim: set expandtab tabstop=4 shiftwidth=4:
source `dirname $0`/sh_functions

function usage()
{
    echo "Usage: $PROGRAM_NAME -l lang" >&2
    exit $1
}

# init variables
BIN_DIR=$(absdirname $0)
PROJECT_DIR=$(dirname $(dirname $BIN_DIR))
WEBAPP_DIR=$PROJECT_DIR/webapp
PROJECT=`basename $PROJECT_DIR`
lang=

# getopt
opts=`getopt -q -o l: -- "$@"`
if [ $? != 0 ]; then
    usage 1
fi
eval set -- "$opts"
while true; do
    case "$1" in
    -l)
        lang="$2"
        shift 2
        ;;
    --)
        shift
        break
        ;;
    *)
        usage 1
        ;;
    esac
done

# check lang
if [ "x$lang" = "x" ]; then
    usage 1
fi

(
    cd $WEBAPP_DIR
    # insert '{*  $temporary_file
    done

    # create/update po file
    locale_dir="$WEBAPP_DIR/locale/$lang/LC_MESSAGES"
    po_file=$locale_dir/$PROJECT.po
    pot_file=${po_file}t
    mkdir -p $locale_dir
    rm -f $pot_file
    touch $pot_file
    find ! -path '*/\.svn*' ! -path '*.tpl' -type f|xargs xgettext -k_ -kN_ -j -L PHP -o $pot_file
    if [ -f $po_file ]; then
        msgmerge $po_file $pot_file -o $po_file
    else
        mv $pot_file $po_file
    fi
    find ! -path '*/\.svn*' -path '*.tpl,' -type f -exec rm {} \;
)

smarty2php.php

<?php
function do_file($file)
{
    $content = @file_get_contents($file);

    echo '<?php';
    foreach(explode("\n", $content) as $line) {
        preg_match_all('/{\s*t\s*}([^{]*){\s*\\/t\s*}/', $line, $m,
            PREG_PATTERN_ORDER);
        foreach($m[1] as $str) {
            echo $str . ';';
        }
        echo "\n";
    }
}

do_file($_SERVER['argv'][1]);

メッセージファイル(moファイル)の作成

locale/ja_JP.UTF-8/LC_MESSAGES/project.po ができているので、メッセージを変更します。変更したら次のスクリプトを実行してバイナリ形式のメッセージファイル(moファイル)を作成します。再帰的に po ファイルを検索して msgfmt を実行しているだけです。

update_locale.sh

update_locale.sh

#!/bin/sh
source `dirname $0`/sh_functions

# init variables
PROJECT_DIR=$(dirname $(dirname $(absdirname $0)))
WEBAPP_DIR=$PROJECT_DIR/webapp
PROJECT=`basename $PROJECT_DIR`

for pofile in `find $WEBAPP_DIR -name '*.po'`; do
    mofile=${pofile%.po}.mo
    msgfmt -o $mofile $pofile
done

PHP側でのロケールの切り替え

PHPでのロケールの切り替えは Accept-Language を見て行います。次のようなコードをプログラムの先頭に仕込んでおけば、自動的に切り替わるようになります。

$accept_language = '';
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
    $accept_language = array_shift(split(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']));
}
switch ($accept_language) {
case 'ja':
    $language = 'ja_JP.'.mb_get_info('http_output');
    break;
default:
    $language = 'C';
    break;
}
putenv("LANG=$language");
setlocale(LC_ALL, $language);

bindtextdomain(PROJECT_NAME, LOCALE_DIR);
textdomain(PROJECT_NAME);

まとめ

Smarty で gettext を使うのは思ったより大変です。一度やってしまえば、後は簡単に国際化できるようになるので、みなさんも Smarty で gettext 使ってみてはいかがでしょうか。

関連リンク:
5分でわかる PHP で書かれた Web サービスの国際化
5分でわかる PHP で書かれた Web サービスの国際化(その2)
5分でわかる PHP で書かれた Web サービスの国際化(その3)
5分でわかる PHP で書かれた Web サービスの国際化(その4)