« 2008年4月 | メイン | 2008年6月 »

2008年5月30日

技術系勉強会が楽しくなるかもしれないこと
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

Keitaです。

最近、世の中では勉強会に参加される方も多くて僕個人も勉強会に参加させてもらったり、開催のお手伝いをさせてもらうことが多くなりました。
勉強会にもいろいろあって、もはやカンファレンスじゃん?みたいなのもあったりするのですが、個人的には小規模なものが比較的好きです。

そこで、僕が技術系の勉強会に参加するにあたって、よりその勉強会を楽しむために何をしているかをさらしてみようかと思います。

ノートパソコンを持っていく

ノートパソコンは技術系勉強会にいくとほとんどの人が持っていっています。 ちょこっと話している内容を試したり、ustで放送したり(ちゃんと許可はとりましょう)いろいろできて便利です。場合よっては電源や、延長コードとかももってくるといいでしょう。


インターネット接続環境を確保する


インターネットに接続していたほうが何かと便利です。たとえば、発表中にわからない単語があったりすしたら調べることができます。
発表するときにはネット環境が必要なことがあるかもしれません。
こういうときに、会場で、無線LANなどをお借りすることもできますが、人数が多いときに最大接続数をオーバーしたりトラブルがつき物です。
私は、イーモバイルなどの、安定してつながる環境を用意しています。(というか、家のインターネットへの接続もイーモバイルなんですけど。)

懇親会に参加する

懇親会にはぜひ参加しましょう。といっても飲み会の場合が多いのですが、ポロリな情報もあったりしていろいろ面白いです。

参加者意識をもつ

カンファレンスならともかく、勉強会なのですから聞き手ではなく参加者として振舞うと、いろいろ得なことがあります。もしあなたが口下手だったり人見知りするタイプだったらむしろ発表するといいと思います。 発表にはスライドというメモがあるわけですから、比較的口下手でもしゃべりやすいです。 そして、もし発表したならば、懇親会や休憩時間に誰かが話しかけてきてくれたりして、可能性が広がります。 直接人に話しかけるより、プレゼン資料を読むだけで自分をアピールできるって考えると、とても気持ちが楽にならないでしょうか。

試してみる

勉強会で興味がでていたものを、試してみるのはすごく重要です。 発表者の人の発表がうまい場合に、わかったつもりになってしまうことが多いのですが、発表した内容そのままでもいいので、一回試してみると、明らかに理解度が深まることがあります。

感謝する

会場を貸してくれた方に、発表者に、開催した人に、参加した人に感謝していると、なんだかとってもやさしい気持ちになれます。

レポートとかをブログに書く

ブログに書くまでが勉強会らしいです。(私はあまり書かないのですがやっぱり書いたほうがいろいろ幸せにはなります。)できれば、行われたことだけじゃなくて感想とかもそこらへんに書いてあると、開催者としては、たとえ悪いことが書いたとしてあっても参考や励みになります。

と、いうわけできれいごとを並べてみましたが、個人的には上のようなことを意識しています。
勉強会によって刺激をうけて技術共有ややる気が出てくれば、きっとあなたの開発効率はあがると思います。

以上、ご参考になれば幸いです。

2008年5月21日

いまさらコマンドラインの便利さを主張してみる
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

尾藤正人(a.k.a BTO)です

僕の偏見かもしれませんが、Webプログラマの方の多くはコマンドラインをうまく活用できてないように感じます。
コマンドラインを使いこなすには最初にある程度の勉強が必要で、その敷居の高さのせいであまり便利さが感じられないのかも。
そこで、今更ながらコマンドラインの便利さを高らかに主張してみます。

ワイルドカード

ワイルドカードという特殊文字を使うと特定パターンのファイル名を簡単にしてできます。
これは知ってる人も多いので、詳細は割愛。

ワイルドカードでうまくいかない場合は後述するfindコマンドを使います。

zshのワイルドカード

zshのワイルドカードを使うと、ちょっとしたfindコマンドのようなファイル名のマッチができます。
簡単に紹介すると次のようなことができます。

echo **/foo # 再帰的に 'foo' にマッチ
echo *(/)    # ディレクトリだけマッチ
echo *(.)    # 標準ファイルだけマッチ
echo *(@)    # シンボリックリンクにだけマッチ

パイプ処理

僕がコマンドラインが好きな最大の理由がパイプ処理です。
パイプ処理の仕組みは非常に単純で、入力と出力をパイプのようにどんどん加工していくだけです。

パイプ処理は組み合わせて簡単に複雑なことができる

パイプ処理を使うと様々なコマンドラインツールを組み合わせて処理することができます。
パイプ処理のおかげで、UNIXのツールは一つ一つが単純な処理だけ行えばよくなり、組み合わせることで複雑な処理がいとも簡単に行えるようになります。

パイプ処理を使って簡単な処理を組み合わせて複雑な処理を実現するのはプログラミングに似てます。
プログラミングも一つ一つの処理は単純ですが、組み合わせることで複雑な処理が実現できます。
違いはパイプ処理の方が早く、短く目的を実現できるところでしょうか。

パイプ処理の例

例えば、subversionで新規ファイルを全てaddするとかは、こんな感じでできます。

svn status|grep '^?'|awk '{print $2}'|xargs svn add

これぐらいの機能ならGUIアプリでも提供されてるでしょうが、例えば画像ファイルだけ追加したい場合はどうでしょうか。
GUIアプリの場合はアプリ自体に機能がなければお手上げですが、コマンドラインならいとも簡単に実現できます。

svn status|grep '^?'|grep '¥.gif$'|awk '{print $2}'|xargs svn add

パイプ処理で活用したい文字列処理ツール

UNIXにはパイプ処理を活用するツールがいろいろあります。
特に、sed, awk, perl, rubyのようなパイプ処理で使いやすい文字列処理を提供しているツールを活用するのがいいでしょう。
perlやrubyのような汎用的な言語を一つマスターしておくと、応用範囲が格段に広がります。
個人的にはsed, awkをよく使い、少し複雑な処理にはrubyを使ってます。

findで対象範囲を絞り込み、xargsで効率よく実行する

findとxargsを使うとコマンドラインの活用範囲が一気に広がります。
findを使って処理対象のファイルの絞り込みが行え、xargsを使うことでコマンドを効率よく実行することができます。
提供されているコマンドがどんなに単純な処理しか行えなくても、findとxargsを組み合わせることによっていとも簡単に複雑な処理が行えるようになります。

xargsに関してはディノのhnwさんが大変素晴らしい記事書いてくれてるので、そちらを参考していただければと思います。

いまさらxargsの便利さを主張してみる

ヒストリ

コマンドラインを活用する上で、非常に重要なのがヒストリです。
実行したコマンドがどんどんたまっていくヒストリは自分自身の財産です。
ヒストリにたまっているコマンドに素早くアクセスすることで、目的の処理を素早く行うことができるようになります。

ヒストリを使いこなす上で重要なのが、素早く目的のコマンドにアクセスすることです。
僕がよく使ってるヒストリ検索方法を紹介してみます。
使っているシェルはzshです。
zshでしか使えない機能もあるので、この機会にzshに乗り換えてみるのもいいかもしれません。

Ctrl+r

インクリメンタルなキーワード検索です。

Ctrl+p, Ctrl+n

Ctrl+p でヒストリの一つ前に戻ります。
Ctrl+n でヒストリの一つ次に進みます。
前後に目的のコマンドがあることがわかっている場合に有効です。

Meta+p, Meta+n

zshでしか使えません(たぶん)。
cshでも使えるようです。
入力したコマンドで始まるヒストリの履歴のみ、Ctrl+p, Ctrl+nと同じようにたどります。
例えば、"mysql" と入力してMeta+p, Meta+nを押すとmysqlで始まるヒストリだけたどれます。

Ctrl+o

zshでしか使えません(たぶん)。
Enter(Ctrl+m)の代わりにCtrl+oで実行すると、実行後のプロンプトにヒストリ内の次のコマンドが自動で入力されます。
ヒストリ内の一連のコマンドを実行するときに便利です。
言葉で説明するのが難しいので、実際に使ってみるとわかると思います。

grep $HOME/.historyhistory|grep foo

ヒストリを直接grepします。
乱暴な方法ですが、非常に便利です。

まとめ

コマンドラインの便利さが伝わったでしょか(伝わってないかな)。
プログラミングしてない人にプログラムの便利さを伝えるのが難しいように、コマンドラインを使ってない人にコマンドラインの便利さを伝えるのはなかなか難しいのかもしれません。

プログラミングは最初は慣れるまで時間がかかりますが、慣れたら非常に便利です。
コマンドラインもプログラミングと同じで、慣れるまで時間がかかりますが、慣れたら非常に便利です。
コマンドラインもプログラミングと似たようなエッセンスがありますので、ぜひともチャレンジしてみてはいかがでしょうか。

2008年5月17日

[書評] Database Media
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

gotandajinです。

今日は書籍「Database Media」の書評、ご紹介をさせて頂きます。

当書籍は5章立ての構成となっており、最後の第5章が弊社代表取締役社長、山田進太郎の執筆となっています。

「Database Media」というタイトルですが、第5章では技術的な仕組みとしてのデータベースについてフォーカスするというより、海外のものを主に昨今注目されているウェブサービスを幅広く紹介(例えばFacebook,Twitterなど、またその他ニッチなものまで)、また、今後のウェブ業界におけるキーワードの1つであろうOpen Socialについて触れ、ウェブ業界に与える影響について考察しています。今、海外のウェブ業界で旬なものについて多く触れているので、その辺りの全体像をざっとおさらいしておくのには丁度よいかもしれません。

ご興味がお有りの方は是非手に取ってみて頂ければと思います。

新・データベースメディア戦略。オープンDBとユーザーの関係が最強のメディアを育てる
橋本 大也 宇佐美 進典 潮 栄治 佐藤 崇 山田 進太郎
インプレスジャパン
売り上げランキング: 3515
おすすめ度の平均: 5.0
5 メディア事業者必読の書

2008年5月14日

第2回 AMNブログ読者アンケートにぜひご協力ください。
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

gotandajinです。

AMN(Agile Media Network)というブログネットワークがあります。
ウノウラボもパートナーブログの1つとして参加しているのですが、今回そのAMNでブログ読者に向けてアンケートを行っています。

今回のアンケートは2回目で、1回目(2007年3月)の結果はこちらで見れるようになっています。

お手すきな方いらっしゃいましたら、ぜひご協力ください。

↓アンケートのURLです。
http://agilemedia.jp/form.php

2008年5月13日

ソーシャルスクラップブック「clipp」とImageFlow
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

五十川です。

ウノウではただいま「clipp(クリップ)」と名付けた新しいサービスを試験的に公開しています。これはソーシャルブックマーク+ミニブログといった体のもので、ページのURLやタイトルに加えて、文章の抜粋や画像のサムネイルなどに、自分のコメントを添えて登録できるというもので、気になったページを“切り貼りして”保存し、他者と共有する、“ソーシャルスクラップブック”といった趣のサービスです。

※ clippは試験公開ということで現在は招待制とさせていただいておりますが、興味をお持ちいただいたかたは、clippのユーザ登録ページからメアドを登録しておいていただくと、招待状を送付させていただけると思いますので、是非どうぞ。

さて、clippでは画像を扱えるという特徴を活かして、画像をiTunes/iPodのCoverFlow風に表示する機能を用意してみました。

clippの各ユーザ毎のページには、サイドバーなどに「ImageFlow」というリンクがあるのですが、これをクリックすると、下図のように、そのユーザが登録している最新のサムネイル画像が一覧表示され、マウスのホイールやキーボードの矢印キーなどを使って、画像を次々「めくって」表示することができます。

ImageFlow JavaScript for clipp

この「ImageFlow」はオリジナルのものではなく、既によく知られているFinn Rudolphさん作のImageFlow JavaScriptを若干改変し、Ajaxによる処理などclippで必要な機能を追加したものです。

Finn RudolphさんのImageFlowの原型は、Michael L. Perryさんが、スクラップブックのコンサルタントである夫人の作品を紹介するために作られたCover flow in Javascriptだそうです。Finn Rudolphさんのものはこれに、Adomas PaltanaviciusさんのMouse wheel programming in JavaScriptを利用したマウスホイールの制御をはじめとしたさまざまな改良を施されたものです。

ImageFlowはプレインのJavaScriptで他のライブラリなどに依存しないので、改変が比較的容易で、Finn Rudolphさん自身によるHacked version for Lightbox2Hacked version for Highslide JSなどの画像エフェクトライブラリとの組み合わせや、Tobias Wetzelさんによるmootoolsフレームワーク用のMooFlowなど、さまざまなバリエーションが作られています。

clippのウェブサイトで配信されるJavaScriptはYUI Compressorでminifyしたものなので、以下にminify前のソースを掲載しておきます。

※ これはあくまでclipp用で、汎用のものではないので、そのまま利用いただけるわけではありませんが、なんらかの参考になるようでしたら幸いです。

おまけ: リフレクション画像(鏡像)について

iTunes/iPodのCoverFlow風表示にはリフレクション画像が必須ですが、Finn RudolphさんのImageFlowではこれを、GD2を使った、Richard DaveyさんのEasy PHP Reflectionsで動的に作成しており、これは配布パッケージにも同梱されてます。一方Imagick PHPを使ってリフレクション画像を作成する手順は、Imagick PHPの開発者Mikko Koppanenさんのブログの記事、Creating a reflectionに掲載されています。またMooFlowでは、リフレクション画像をCanvas要素などを使ってクライアント側で描画するように改良されています。

2008年5月12日

Mercurialでバージョン管理
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

stoplightで最大化したターミナル上でzshとscreenとEmacsを立ち上げ、 明朝体フォントでプログラミングするbokkoです。

今回はバージョン管理システムの1つであるMercurialについて紹介します。

ウノウではSubversionとTracを組み合わせて開発を行っていますが、 僕個人では今年の春ぐらいからEmacsやzsh、screenなどの各種設定ファイルをMercurialでバージョン管理しています。

Mercurialとは?

Mercurialは分散型のバージョン管理システムです。 これに対して、CVSやSubversion(以下SVN)は集中型のバージョン管理システムにあたります。 分散型と聞くと難しそうなイメージがわくかもしれませんが、 CVSやSVNに比べてると、より手軽にバージョン管理を行うことができるというのが、 Mercurialに対する僕の印象です。というのもCVSやSVNでは、まず単一のリポジトリを作成した後、 バージョン管理したいファイルをリポジトリにimportして、コピーをチェックアウトし、 コピーを編集してからその差分をリポジトリにコミットします。 これに対して、Mercurialではバージョン管理の対象そのものがリポジトリになります。 このため、単に1つのマシン上で編集の履歴を保持したりするだけの場合、 集中型よりも手軽に扱うことができます。もちろん、複数のマシンでファイルの同期を取るといったことも可能です。

とりあえず使ってみる

概要だけではあまりピンとこないと思いますので、実際に使ってみましょう。 使用しているMercurialのバージョンは1.0です。 例えば、以下のディレクトリでバージョン管理を行いたいとします。

$ pwd
/Users/username/mercurialSample
$ ls
test.txt
$ cat test.txt
test
$

リポジトリの初期化

リポジトリの初期化は下記のコマンドを実行するだけです。

$ hg init
$

何も表示されませんが成功すれば.hgというディレクトリができているはずです。 バージョン管理をやめたくなったらこのディレクトリを削除するだけでOKです。

$ ls -a
.               ..              .hg             test.txt

また、initコマンドで初期化しただけでは、test.txtはリポジトリには追加されていません。

$ hg status
? test.txt
$

addとcommitでリポジトリにtest.txtを追加します。

$ hg add test.txt
$ hg status
A test.txt
$ hg commit -m "test" test.txt
$ hg status
$

基本的なコマンド

ファイルの追加や削除、差分の更新やコミットはCVSやSubversionとほとんど同じなので、 CVSやSVNを使ったことのある人なら特に困ることなく、使えるでしょう。

$ hg add test.txt
$ hg remove test.txt
$ hg update test.txt
$ hg commit test.txt
$ hg diff test.txt

リポジトリの複製

上記のように特に分散型というのを意識せずに単純に個人でローカルだけで 手軽に差分を保持するということができるのも僕がMercurialを気に入っている理由の一つですが、 もちろんCVSやSVNのようにネットワークを介した複数のマシンの間で同期を取ることもできます。 ここでmacというホストとubuntuというホストの間でさっきのリポジトリを共有することを考えてみましょう。 何故macとubuntuかと言うと、実際に僕がMacとParallesDesktopにインストールしたUbuntuとの間で、 Mercurialを使って設定ファイル等の同期を取っているからです。 まず、mac上にある先程のリポジトリをubuntu側から複製してみましょう。 リポジトリを複製するにはcloneコマンドを使います。

$ pwd
/home/username
$ hg clone ssh://username@mac//Users/username/mercurialSample mercurialSample

macがホスト名、/を一つ挟んだ後の文字列がリポジトリのルートディレクトリへのパス、 その次が複製側で作成するリポジトリのルートディレクトリの名前です。 問題がなければ、これで上記コマンドを実行したubuntu側のディレクトリに リポジトリができます。また、このリポジトリの.hgにあるhgrcというファイルに どこからリポジトリを複製したのかが記録されています。

[paths]
default = ssh://username@mac//Users/username/mercurialSample

pathsコマンドで確認することも可能です。

$ hg paths
default = ssh://username@mac//Users/username/mercurialSample

ローカルリポジトリの内容をリモートリポジトリに反映

CVSやSVNではチェックアウトしたコピーから単一のリポジトリに対してコミットを行いますが、 Mercurialでは通常、コミットはローカルのリポジトリに対してのみ行います。 単にコミットしただけでは別のマシンのリポジトリに変更内容は反映されません。 前者のリポジトリをローカルリポジトリ、後者のリポジトリをリモートリポジトリと言います。

例えば、さっき複製したubuntu側のリポジトリの内容を変更してみます。

$ cat test.txt
test
ubuntu
$ hg status test.txt
M test.txt
$ hg commit -m "add ubuntu" test.txt
$

これでubuntu側のリポジトリの内容が変更されました。 これをmac側のリポジトリにubuntu側から反映させるにはpushコマンドを使用します。

$ hg push ssh://username@mac//Users/username/mercurialSample

pushコマンドが成功したら、mac側のリポジトリでupdateコマンドを使用します。

$ hg update
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cat test.txt
test
ubuntu
$

リモートリポジトリの内容をローカルリポジトリに反映

逆に別のマシンで変更されたリポジトリの内容を自分のリポジトリに反映させるには pullコマンドを使用します。ubuntu側で変更された内容をmac側から取り込んで見ましょう。

$ hostname
ubunutu
$ cat test.txt
test
ubuntu
more ubuntu
$ hg status
M test.txt
$ hg commit -m "add more ubuntu" test.txt
$
$ hostname
mac
$ pwd
/Users/username/mercurialSample
$ hg pull ssh://username@ubuntu//home/username/mercrurialSample

pullコマンドが成功したら、updateコマンドを実行します。

$ hg update
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cat test.txt
test
ubuntu
more ubuntu
$

ファイル無視の設定

ソースコードなどのバージョン管理をしていると、 一部例外としてバージョン管理の対象に含めたくないファイルが出てきます。 例えば、makeコマンドで生成される実行ファイル、etagsで生成されるTAGS、またEmacsが生成する 一時ファイル(末尾に~が付いたファイルや各種拡張が生成する一時ファイル)などがあります。 Mercurialでは.hgignoreというファイルをリポジトリのルートディレクトリに作成して、 ファイル無視に関する設定を記述することができます。 僕の環境では以下のような設定をしています。

.hgignore

syntax: glob
*~
.semantic.cache
.DS_Store
TAGS

また、僕は使っていませんが、正規表現による指定もできます。

syntax: regexp
^t

.hgignoreの設定を共有する

ただ、上記のやり方だと新しいリポジトリを作成する度に設定ファイルを用意する必要があります。 すべてのリポジトリで.hginoreの設定を共有するには、 ホームディレクトリに以下の内容の.hgrcとさっきの.hgignoreを作成します。

.hgrc

[ui]
ignore=~/.hgignore

.hgrcにはほかにもいろいろな設定を記述することができるので、 興味のある方は本家のチュートリアルを読んでみるとよいでしょう。 日本語版もあります。


2008年5月 1日

コマンドラインから使うBitTorrentクライアント
このエントリーをブックマークに追加 このエントリーをlivedoorクリップに追加

yukiです。

唐突ですが、BitTorrentクライアントは何をお使いでしょうか?これまで私はずっとBitComet を使ってきましたが、私の非力な自宅マシンだとどうしても負荷が高く、その間は何も出来ないような状態に陥っていました。GUIから使おうとすると、見やすさや使いやすさはさすがに良いのですが、あまりの負荷とその間何も出来ない状況はあまりよろしくないと考え、今回はUNIX系でCLIから操作できるクライアントはないだろうか、と探していて見つかったEnhanced CTorrentをご紹介することにします。

Enhanced CTorrentは、C++で書かれたCtorrentをベースにしたBitTorrentクライアントです。Ctorrentからバグフィックスや改良・軽量化を重ねており、現在のバージョンは3.3.1になっています。

Enhanced Ctorrentは現在はSorceforgeでバグレポートやダウンロードができますので、早速使ってみました。

インストール

インストールは非常に簡単で、普通にwgetで落としてきて展開し、configureしてmake installします。

% wget http://jaist.dl.sourceforge.net/sourceforge/dtorrent/ctorrent-dnh3.3.1.tar.gz
% tar zxvf ctorrent-dnh3.3.1.tar.gz
% cd ctorrent-dnh3.3.1
% ./configure
% make
% sudo make install

torrentファイルからダウンロードする

早速torrentファイルをダウンロードして、ダウンロードしてみましょう。 やり方は非常に簡単で、これだけです。

ctorrent [torrent.file]

これだけで同じディレクトリ内にダウンロードが開始されます。
注意点としては、デフォルトだと2706-2106番ポートを使うようになっていますが、オプションでポートを指定することが出来ます。とても簡単なうえ、デーモンとして起動することも出来ますのでバックグラウンドで動作させたい場合にも非常に便利です。

  [PR] 転職


About 2008年5月

2008年5月にブログ「ウノウラボ Unoh Labs」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2008年4月です。

次のアーカイブは2008年6月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

ウノウサービス