Home > 技

2010.08.31

パターン、Wiki、XP ~時を超えた創造の原則

パターン、Wiki、XP ~時を超えた創造の原則 (WEB+DB PRESS plusシリーズ)
江渡 浩一郎
技術評論社
売り上げランキング: 24981
おすすめ度の平均: 4.5

4 歴史を知る
5 オープンなソフトウェア開発を指導する立場の人は読んでおくべき本
4 ソフトウェア設計思想のひとつの系譜
5 名著
5 読んでびっくりの知的興奮。何かを「創造」しようとする人にとっては深いヒントがある。

パターン、Wiki、XP ~時を超えた創造の原則を読みました。
 
自分は2002年にサラリーマンになりました。
一応大手って言われるSIerにしてはめずらしく、内製でやろうって部署に配属されて。
 
30〜40人くらいのアプリ屋のボスがXP信者で、ケントベックとかマーチンファウラーとか、
よく分からないなりにも本読んだりしてました。
 
で、かれこれ8年とかエンジニアやってるわけですが、
そのバックグランドにどんなことがあるのかとか考えもしなかったわけですが、
建築家のアレグザンダーの話、うぉって思っちゃいますねぇ。
 
アレグザンダーの設計で、日本の高校の校舎たてるときに、インクリメンタルに作ってくと
時間とコストがかかっちゃうから、ゼネコンに丸投げしたら、イタいのが出来ちゃったとか、
SIerにいた自分的には笑えないっていうか。。
 
Wikiとかも起源を知らずに使ってたから、そこら辺のLinuxマシンに立ててみて、
”ウィーキー”とかって読んでたしねぇ。。記法とか覚えるのかったるくて、結局みんな書かねぇみたいな。。
 
もし、当時この本読んでたら、いろんな事がまた違った印象なんだろなって。
 
クライスラー社のCOBOLな給与計算システムをSmallTalkで〜、
ってシステムは稼働しなかったとか、上記の高校のエピソードとか、
なんでもかんでもうまくいったわけじゃないってのがちゃんと紹介されてるとことか、
自分的には共感出来るというか。
 
この本は是非若手のエンジニアにも読んでもらいたいですねん。

2010.08.22

SolrにRequestHandlerを追加する

以前Solrをイジった備忘録その1(データ投入編)でEmbeddedSolrServerなんちゅうのを使ってますよ
なんてエントリを書きましたが、その時もRequestHandlerを追加したわけなんですが、
ローカルのUbuntuマシンにSolrの環境作ってて、どうやって追加したのか忘れちゃってたので備忘録的な。
 
RequestHandlerを追加するのはとても簡単で、
例えば↓こんなURL外から叩いたら、System.gc()して欲しいな、なんて局面があったとする。
#そんな局面ねぇよ、なんてのはさておきw
======
http://localhost:8080/solr/hoge?gc=do
======
 
そんな場合は、solrconfig.xmlに↓こんな入れてやります。
#検証用なのでデフォルトパッケージです。。WEB-INF/classesに突っ込んでやります。
======
<requestHandler name=”/hoge” class=”HogeHandler” />
======
 
作るクラスは org.apache.solr.handler.RequestHandlerBase ってクラスがいるので、
そいつを extends してやります。
======
public class HogeHandler extends RequestHandlerBase {
======
 
Eclipseがオーバーライドをするヤツをビヨって作ってくれるので、
後は中身を埋めていくだけなのですが、メインな処理を書くところが↓
======
public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp)
======
 
上記の例だとgcってリクエストパラメータがdoだったらSystem.gc()ってことなので、
↓こんなロジック入れてやります。
======
if (req.getParams().get(”gc”).equals(”do”)) {
  System.out.println(”hogehoge”);
  System.gc();
}
======
 
一個ハマったところが↓こいつ。
SolrQueryResponseのsetHttpCaching
ソース読んだら protected boolean httpCaching=true; で宣言されてました。ってことで、
======
rsp.setHttpCaching(false);
======
 
で、 http://localhost:8080/solr/hoge?gc=do を叩くと、(Tomcatなので)catalina.outに、
↓こんなん出てきてメデタシメデタシっていう。
======
hogehoge
23.964: [GC 24347K->3996K(125632K), 0.0118300 secs]
23.976: [Full GC 3996K->3934K(125632K), 0.0982040 secs]
2010/08/20 15:18:19 org.apache.solr.core.SolrCore execute
情報: [] webapp=/solr path=/hoge params={gc=do} status=0 QTime=144
======
 
さて、ぼちぼち環境出来てきたので、検証始めるか・・・。
 
 

Apache Solr入門

Apache Solr入門

価格:3,780円(税込、送料別)

アプレンティスシップ・パターン —徒弟制度に学ぶ熟練技術者の技と心得

アプレンティスシップ・パターン ―徒弟制度に学ぶ熟練技術者の技と心得
Dave H. Hoover Adewale Oshineye
オライリージャパン
売り上げランキング: 25539

アプレンティスシップ・パターンを読みました。
 
いろいろと考えさせられる一冊でした。
 
自分はSIerで働いていましたが、以下のような理由で、
 ・自社サービスを自社内で開発してるところ〜ってのと、
 ・どうせやるならデカイ事やりたい〜ってので、
3年前くらいに今の会社に転職しました。
 
今の会社がいいなって思ったのは、当時Ruby使ってますよってのを全面に押し出してた事。
 
自分でRuby on Railsを試してて、あまりのお手軽さにビックリしました。
Award on Railsってコンテストに、iKnowのちょーショボい版みたいの作って応募したり。
おまけにデータベースのマイグレーション機能までついてて。
こんなんでガンガン作って世の中に出していきたいって。
 
でも、Rubyの言語仕様や、Ruby on Railsのアーキテクチャに魅せられたわけじゃなかった。
短く書けるし、Javaよりメンド臭くないからいいな、くらい。
開発プロセスにしても、別にアジャイルじゃなくても、なんだってよかった。
とにかく気合入ったヤツらとバンバン作って出して〜って、やっていきたかった。
 
で、転職してどうだったか?っていうと、自分がやりたい事は出来なかった。
SIerにいた頃よりも、無駄だな〜って思える事はかなり減ったのはとても良かったけど、
いろんな価値観や、いろんなレベルのエンジニアがいて。
開発そのもののレベル感やスピード感はたいした事ないなって。
社歴が長くなるほど、自分の立ち位置も、だんだんSIerにいた頃と近くなってきてるような気もするし。
 
なんででしょね。
 
AクラスのヤツらはAクラスのヤツと仕事をしたがる。
BクラスのヤツらはCクラスの〜、とかって話があるけれども、
自分はいっつもB〜Cクラス集団にいるように思う。少なくともAではない。
 
部屋の掃除してて出てきた、まるごとRuby!(vol.1)を読んでて思った。
Rubyの事わかってねーなー俺、と。実はJavaの事だってあんまよくわかってない。
じゃあRubyに長けてるヤツらが、そんな自分と働きたいって思ってもらえるだろうか?と。
 
外から見てて、自分がやりたいような、すげぇスピードで新機能をバンバン出してきてるところもある。
(もちろん、スピード感はあるけど、、、な、ところもあるけれども。。)
Facebookとかそんな感じなんすかね。中の事は知らないから分からないけども。
じゃあ、どうやったらそんな風に仕事できるのかな?って。
 
この本にはどうやってエンジニアとしてサバイブしてくか?ってことが、
すごい分かりやすく、ですよねー的に書いてある。腹落ち。
 
11月で31歳になるわけだけど、改めて勉強しようって思えた。
50歳になった時にイカしたエンジニアでいたいし。
 
大変で長い道のりだけど、毎日本読みながら仲間みつけて頑張ろう。
そんな気持ちになれました。この本読んでとてもよかった。

2010.08.19

UbuntuでApache2とTomcat6の接続(proxy, proxy_ajp, proxy_balancer)

会社ではUbuntuをローカルの開発機にして仕事をしています。
ローカルの場合はTomcatに直接アクセスして~ってやってましたが、
極力本番に近づけた方がいいかなと思ってApache経由でajpでやりくりしてみることにしました。
 
【UbuntuのApache】
 Ubuntuのパッケージ管理でApacheを入れると、
  ・設定ファイルとかは ⇒ /etc/apache2/
  ・再起動とかは ⇒ /etc/init.d/apache2 xxx
  ・ログは⇒ /var/log/apache2
 #てな具合になっています。普段仕事では/usr/local~とかなのでちょっと違和感ありますね。。
 
【Apacheの設定】
 ・使えるモジュールは⇒ /etc/apache2/mods-available
   proxy.load
   proxy_ajp.load
   proxy_balancer.load
 
 うぉ、全部入ってるじゃーんって事で、
 ↓こんなのズゴンって叩くだけでOK
 ====
 a2enmod proxy proxy_ajp proxy_balancer
 ==== 
 
 ・設定ファイル
  /etc/apache2/sites-available/default ってのに
  DocumentRootの定義とかが書いてあるんですが、
  そこに Proxyの情報を記載してあげます。

  - バランサーマネージャーの画面用に
   <Location /balancer-manager>
    SetHandler balancer-manager
    Allow from all ← お試しなので・・・
   </Location>
 
  - バランシング用に
   ProxyPass /balancer-manager !
   ProxyPass /hoge balancer://hoge/ stickysession=JSESSIONID timeout=10
 
  あとは /etc/apache2/mods-available で、、
  ・proxy.conf を Allow from allにしたり(お試しなので…)
  ・proxy_ajp.confを作って AddOutputFilterByType DEFLATE とかやってやったりしつつ
   ↓8009ポートに向けて~的な。
   BalancerMember ajp://localhost:8009/ loadfactor=10 route=hoge keepalive=On min=100 timeout=10 retry=20
 
【Tomcatの設定】
 server.xmlはデフォルトだと8009ポートでajpをリスンするようになっているので特に対応不要です。
 普通に startup.sh 叩いて上げるだけ。
 
ってことで↓Apache再起動してあげたら
/etc/init.d/apache2 restart
 
http://localhost/hoge でTomcatまでアクセスが行って、
http://localhost/balancer-manager でバランシングの設定が出来ます
 
意外とお手軽なもんですねぇ。

2010.08.18

MRUnit(MapReduce用のテストライブラリ)を試す

昨日のHadoopソースリーディング4回目(Hadoopソースコードリーディングまとめ第4回 #hadoopreading)で、
@okachimachiorz1 さんが、MRUnit便利だし使うよね的な事をおっしゃっていて、
どんなもんかなと思ってチョロっと自動テストしてみました。

【環境】
 1. EclipseのMapReduceプラグイン
  hadoop-0.20.2-eclipse-plugin.jar(Hadoopをインストールしたところのcontribに入ってる)を
  eclipseのプラグインディレクトリに突っ込んで再起動すると
  ウィザードでMap/Reduce Projectが作れるようになります。
  ⇒ Hadoopのインストールディレクトリを指定するとそこにパス通してくれる感じ。
 
 2. JUnit4のjarを落としてパスを通す
  HadoopのlibにはJUnit3.8しか入ってなかったので。
  MRUnitのページみたら @Before とかJUnit4のアノテーションが前提みたいになってました。
 
 3. MRUnitのjarを落としてパスを通す
  ググったら↓に置いてありました。
  https://repository.cloudera.com/index.html#nexus-search;classname~MRUnit
  コレ、maven使ってれば依存関係の定義をpom.xmlに入れてやるだけでイケそうですね~
 
 
【実装】
 使い方は↓こんな感じのようなので、、、
 http://www.slideshare.net/emwendelin/testing-hadoop-jobs-with-mrunit
 http://www.cloudera.com/blog/2009/07/debugging-mapreduce-programs-with-mrunit/
 
 ↓こんな感じのMapperに、、
========
public class HogeMapper extends MapReduceBase implements Mapper {
  private Text word = new Text();
  @Override
  public void map(Object key, Object value, OutputCollector output,
      Reporter reporter) throws IOException {
    // TODO Auto-generated method stub
    String line = value.toString();
    StringTokenizer st = new StringTokenizer(line, ",");
    while (st.hasMoreTokens()) {
      word.set(st.nextToken());
      output.collect(word, new IntWritable(1));
    }
  }
}

========
 
 ↓こんな感じのテストしてみました。
========
public class HogeTest extends TestCase {
  private Mapper mapper;
  private MapDriver driver; ←こいつがMRUnitのオブジェクト
  @Before
  public void setUp() {
    mapper = new HogeMapper();
    driver = new MapDriver(mapper);
  }
  @Test
  public void testHogeMapper() {
    driver.withInput(new Text("foo"), new Text("aar,kar,sar,tar,aar"));
    driver.withOutput(new Text("aar"), new IntWritable(1));
    driver.withOutput(new Text("kar"), new IntWritable(1));
    driver.withOutput(new Text("sar"), new IntWritable(1));
    driver.withOutput(new Text("tar"), new IntWritable(1));
    driver.withOutput(new Text("aar"), new IntWritable(1));
    driver.runTest();
  }
}

========
 
インプットのファイルを用意しなくていいから楽チンって感じですかねぇ~

2010.07.31

たまには広告エンジニアっぽい事でも(ヤフーとグーグルのアレ)

2010年07月27日。
インターネット業界で働いている自分のTwitterのタイムラインは
YahooJapanがGoogleのサーチエンジンとリスティング広告の
配信システムを採用するっていうニュースで騒然となりました。
 
自分は日頃↓こんなお仕事してたりします。
・コンテンツ解析をして、そのページに合った広告出したり
・ユーザーの行動を分析して、その人に合った広告出したり
・検索窓に入れられたキーワードに連動する広告出したり
まさに、、な分野なわけです。(まぁ、他にもいろんな事やってますが…)
日々大量データに押しつぶされそうになりながら、
memcached使ったり、Solr使ったり、Hadoop使ったり、
アレやコレや頑張ってるわけです。
 
で、一連の報道とかの中でも、ビジネスの話はアレですが、
自分にとって一番分かりやすいなと思ったのが↓有名な、たつをさんのブログ。
 
[を] Yahoo! JAPAN のウェブ検索と検索連動広告配信システムが Google に変更になります
・米ヤフー(Yahoo! Inc)との日本ヤフー(Yahoo! JAPAN)は別会社である
・現在の米ヤフーのウェブ検索エンジンは YST、検索連動型広告は YSM(旧オーバーチュア)
・YSTとYSMは米ヤフーの技術。だけど近々廃止になる
・米ヤフーはYSTをBingに、YSMをMS adCenterに置き換える
・Yahoo! JAPANは米ヤフーのYSTとYSMを使っていたが廃止になるため他を探していた
・で、YST の代わりに Google 検索を、YSM の代わりに AdWords を使うことになった

 
なんとも腹落ち。くぅ。
 
でもね、同じ業界にいると、廃止になるとか言ってるYSMも、
「xxだからオーバーチュアはすげーよなぁ、
 どうやってやってんだろうね〜?」
なんて話したりしてるようなものだったりするわけです。
HadoopだってYSTで使ってるNutchのために開発されたのが最初だって
象本(Hadoop)に買いてあったし。
 
が、そういうの放り出してもー的な事が起こるんだから、
エンジニアとしてはデッカイ会社に所属してるから
安泰だーなんて思っちゃいけないんだな、とか思うわけです。
 
で、この先どうなるのよ?っていう話で。
Webの広告屋をやってると、最近よく聞くのがAdExchange。
 
AdExchangeって、オンライン広告にまつわる
いろんな関係者が集まるオンライン市場みたいなもんなんだけど、
やれリアルタイムビッダーだの、ややこしくてよく分からなかったりするアレです。
# いや、よくわかってないのは俺だけかも知れぬがw 
 
まぁ、なんつーか、この先にWeb広告業界で流行りそうな感じのヤツなんだけど、
 
 ・Googleは、DoubleClick Ad Exchange
 ・Yahooは、Right Media Exchange
 
それぞれプロダクト持ってるわけです。でもって、YahooJapanは先日、
AdExchangeは米ヤフーのRight Media Exchangeを使うぜ的な発表とかしてましたけど、
YahooJapanはGoogleさんにデータを沢山提供しちゃったりするわけですからねぇ的な。
 
どうなっていっちゃうんでしょうねぇ。
いやー、この業界、目が離せないっていうかなんていうか。
 
っていうか、業界独占だーとか言われちゃってねぇで、
自分らのとこも、この分野にグイグイ食い込んで、
パイを取りにいかなきゃいけないんすけどね。。
 
あと、ネット広告って何やら専門的でややこしいような印象
あるかもしれませんが↓こんな本一冊読んでおけば実は結構問題なかったり
するんじゃないかと思う今日この頃です。

ネット広告ハンドブック 最新知識から出稿の実務、効果測定、技術動向まで
デジタル・アドバタイジング・コンソーシアム
日本能率協会マネジメントセンター
売り上げランキング: 124894
おすすめ度の平均: 4.5

5 大変参考になります。
4 中身の濃い本
4 ネット広告はこれから伸びる。経営者必読の書籍だ。

2010.07.24

Agile Conference Tokyo 2010 に行ってきました。

■ 会場
秋葉原ダイビルという駅から出てすぐのところ。

ちょっと早めに着きましたが、コギレイな会場でした。

受付時にThoughtWorksのトートがもらえました。中には資料とか入ってる。
こういうのも嬉しいですねぇ。

 
 
■ オライリー
カンファレンスといったらコレだろう、、ということで。。
ヤバい書籍たちが10%OFF&xx円以上買うとノベルティーグッズが!

と、その前にガチャガチャをキメるw
 
 
■ Twitter
http://twitter.com/#search?q=agiletokyo
もうどこで何やってもツイッターですねぇ。
参加した人の生の声を聞くにはコレが一番。
会場では左前に #agiletokyo タグを付けてつぶやいた人のが
デッカく出るようになってました。
→ 講演者には見えないようだったので、それだけちょっと残念。
 
 
■ Continous Delivery
ThoughtWorksのJez Humbleさん。
Build and Release Principalとかいってイカした肩書き!

同時通訳なのでリズムが悪いっていうか、とても分かりやすい英語で
ゆっくりと話してくれたので英語だけでよかったのかも的な。。

終始そうだよねーって思いっぱなしだったのですが、その中でもいくつか。

『Always Production Ready』
 グッときちゃいますよねぇ。コレ。
 ”たった一つのバイナリ”って話もあって、
 開発者がコンパイルしたソレは、そのまま全く同じものが
 プロダクション環境まで自動的に行っちゃうような仕掛けをつくろう。
 → 自分がコミットしたものがデリバリされんだからそこに責任を持とう、と。
   Done means released!なんていう、これまたカッコよす。。
 
『Blue-Green Deployments』
 本番環境に全く同じ構成を2つ組んでおきましょう、と。
 で、Active-Standbyにしておいて、Standbyにリリースしたら、
 ネットワーク機器で振り分けをStandbyに向けてリリース完了的な。
 
『Canary Release』
 ABテスト的な。インターネットサービス会社だとよくやる手だと思う。
 これも環境を2つ作っておいて、例えば3分の1だけ出してみて
 評判良ければ全台反映とかそういうの。
 
なんか本が出たりするらしいです。
にしても、ThoughtWorksはいつもカッチョいいのぅ。
日本支社ってなんで無いんだろう。。
 
 
■ Microsoft
TFS(Team Foundation Server 2010)の紹介。
これはヤバすぎたな。。今日からでも使いたいくらい。
 
CI環境はウィザードだけで作れるとか、
アジャイルにチームを管理するためのクライアントソフトは
俄然Excelゴリ押しだったりとか、(なんだかんだでどこでも使ってるしねぇ)
とにかくボタン一個であれもこれも簡単にってのがグッときました。
 
Microsoftのコレ系のプロダクトは、Scrumで作ってるらしくて、
そのフィードバックが盛り込まれてたりもするみたい。
 
CI環境とか、別に.NETじゃなくてもよくて、
mavenとか使ってればEclipseのJavaのプロジェクトでも問題なく使える。
#デモはMacBook上のEclipseからやってました。
 
テストスイートも半端なくて、テスターのオペレーションを録画してくれて、
簡単に再現出来るようになってたり、マルチブラウザで自動的にテストしてくれたり、
なんとも至れり尽くせり。
 
こないだVisualStudioで.NET4のソースを見る機会があったんだけど、
データモデリングからソースのジェネレートから、
Railsのroutes.rbみたいなクラスとかもあったりして、
自分の中でかなり盛り上がってます。Microsoft。
 
 
■ その他
他にもアツい発表がたくさんありましたが、
印象としては、SI系の人や、結構ベテラン系の人もアジャイルに注目してて。
IPAの人の発表もあったし。(非ウォーターフォール型開発に関する調査は興味深い)
 
契約は請負でも目標コスト契約ってのがあるんだーとか、(派遣や準委任とか懐かしい響き)
今までのウォーターフォールのガッツリしたプロセスの中に
どうやってアジャイルのエッセンス持ち込む?とか、
日本では、日本なりに消化してやってこうって感じなのかなぁと。
 
自分のやってる仕事は、常に数人単位でしか動いてないので
大手SI系の人の話とかはどうもしっくりこなかったりします。
#数年前まではモロそっち系の人間だったくせに、、ですがw
 
 
■ 昼飯
せっかく秋葉原ってことで、ガンダムカフェに行ってみました。

メシは期待しない方がいいかと。。値段高い割に的な。。
ただ、店内はガンダムグッズ満載で、好きな人にはいいのかも知れませんね。。
自分も普通にみてましたがそこまでいれこんでたわけでもないので。。。
 
 
■ 書籍系
IBMのセッションで質問したら本くれました。
# ってかローカルにインストールする型のプロジェクト管理ツール系の話だったのに、
# ブラウザで管理できないの?って聞いたら、実はアメリカでクラウド型の作ってますって。。
# 最初からそっちの話が聞きたかったなぁと。。
# あと、IBMさんはいろんな名前の製品があってどれがどれだか。。。汗

 
以下の書籍を買って、セマンティックWebTシャツと、オライリーのトートもらいました♪

 

セキュリティの神話
セキュリティの神話
posted with amazlet at 10.07.24
John Viega
オライリージャパン
売り上げランキング: 143889
おすすめ度の平均: 3.5

5 「銀の弾」は存在しない?
2 未だP7ですが

 

クラウド セキュリティ&プライバシー ―リスクとコンプライアンスに対する企業の視点
Tim Mather Subra Kumaraswamy Shahed Latif
オライリージャパン
売り上げランキング: 5138
おすすめ度の平均: 4.5

4 これまでの総括として役立つリファレンス
5 クラウドセキュリティの1つの標準になるうる本

 

アプレンティスシップ・パターン ―徒弟制度に学ぶ熟練技術者の技と心得
Dave H. Hoover Adewale Oshineye
オライリージャパン
売り上げランキング: 3872

 
他にもpythonでコンピューターの事が勉强出来ちゃう入門書とか
欲しいのいっぱいありましたが、ガマンガマン。。。。

2010.05.07

Capistranoのroleのサーバを実行時に決めたい件

一つ前のエントリでCapistranoの↓の事を記載しましたが、
======
-S, –set-before NAME=VALUE  Set a variable before the recipes are loaded.
======
今日は新たな壁に当たりました。
 
roleの対象サーバをcapコマンドの引数に渡して制御したいけど、
-Sで指定してもtaskの中まで行かないと使えないんですよね、、
 
ネットで探しても、タスクごとにroleを振り分けられるんですよ~的なのは
たくさん見つかりましたが、コレっていうのが出てこず。
# Capistranoでは対象のサーバをroleというので指定します。
# 実行するときは↓こんな風に出てくるわけですけど。
# servers: ["hoge1", "hoge2", "hoge3", "hoge4"]
 
そしたら、roleの設定ってtaskの中でも出来るんですね。
 
↓こんな感じでいい感じに実行時に-Sで渡した値によって
対象のサーバを切り替えられるようになりました。
======
task :hoge_role do
 if “#{hoge}” == “aaa” then
  role :hosts, “hoge1″,”hoge2″,”hoge3″,”hoge4″
 elsif “#{hoge}” == “bbb” then
  role :hosts, “hoge5″,”hoge6″,”hoge7″,”hoge8″
~略~
end
======
 

Railsデプロイ
Railsデプロイ
posted with amazlet at 10.05.07
Ezra Zygmuntowicz Bruce A. Tate Clinton Begin
オライリージャパン
売り上げランキング: 278746

2010.05.06

Capistranoの備忘録

Capistrano自体はレシピファイルの中でRubyでゴリゴリ書けそうな気配ですが、
出来る限りスッキリさせたいもので。
 
自分が担当しているシステムは何十台も並べて~的な感じで、
群構成にしているのですが、xxだったらxxみたいなのがかったるいな、と。
 
ということで、今回はCapistranoを使って、以下の方針でやることにしました。
 
 1. アプリケーション(Webアプリ/検索用アプリ/バッチアプリ)によってCapfileを分ける
 2. それぞれのアプリの中で使う変数をコマンドラインから渡す
 
非常に簡単で、cap –help すれば出てくるのですが、
上記1.は↓の-fでファイルを指定します。
 -f, –file FILE  A recipe file to load. May be given more than once.
上記2.は↓の-Sで変数を指定します。
 -S, –set-before NAME=VALUE  Set a variable before the recipes are loaded.
 
実際には↓のようなコマンドラインになります。
 cap -f web_app_deploy.rb -S cluster_no=1 deploy
 
レシピファイルの中身は↓ザックリこんな感じです。
他にも監視止めたりとかあーだこーだあるのですが、その辺は割愛。
(まだ書いてないだけっていう話もあるw)
出来るだけ細かく分割しておけば、他でも使いまわせそうな予感がします。
=======
task :backup do
 run “cpでバックアップ。パスに#{cluster_no}を使います。”
end
 
task :stop do
 run “ミドルウエア停止用のスクリプト”
end
 
task :remove do
 run “rmでゴミ掃除して”
end
 
task :put do
 run “cpで所定の場所にアプリを置きます。#{cluster_no}な名前のファイル”
end
 
task :start do
 run “ミドルウエア起動用のスクリプト”
end
 
task :deploy do
 backup
 stop
 remove
 put
 start
end
=======
 
明日もCapistranoをイジる予定なので、面白そうな発見があったら、
また載せていきます。

memcachedのデータ初期化

インターネットのサービスをやってると、大体ピークは夜10時~12時くらいで、
朝方とかは結構スカスカだったりします。# 仮想化とかの議論は置いておいて、、
 
memcachedによって性能は担保したいけど、
ココってタイミングではリアルタイムでデータが反映されないと困る
なんていうシチュエーションは、いろんなところにあるんじゃないかと思います。
 
今回は運良く?そのタイミングが朝方だったので、そのタイミングで初期化してしまうことにしました。
 
【使ったもの】
libmemcached(http://sourceforge.jp/projects/freshmeat_libmemcached/)
これを使うと以下のようなコマンドがインストールされます。
 memcapable
 memcat
 memcp
 memdump
 memerror
 memflush
 memrm
 memstat
インストールはtarを解凍してconfigureしてmakeしてmake installするアレです。
↓ここら辺が参考になります。
http://l-w-i.net/t/memcached/0install_002.txt
 
 
【使い方】
簡単です↓だけ。サーバは複数指定できます。
./memflush --servers=サーバ:ポート
 
 
【ピヨったところ】
↓消してみたんです。
=======
$ ./memflush –servers=localhost:11211
$ echo $?
0
=======
 
消えたかなぁと思ってdumpしてみたら、、
=======
$ ./memdump –servers=localhost:11211 | wc -l
30505
=======
ちょ、全然消えてないじゃん的な。
 
もっと細かくみてみるかなと思ってmemstat叩いたら、、
=======
$ ./memstat –servers=localhost:11211
Listing 1 Server
Server: localhost (11211)
  pid: 23442
  uptime: 695770
 ~略~
  curr_items: 30505
=======
dumpした時と同じ件数なんすけど・・・
 
ってことで、ダメ押しでmemcat。
memflushする前は値が取れます。
========
$ ./memcat –servers=localhost:11211 HOGEHOGE
[{”hoge”:null,”hage”:0,”hogeType”:1″hogehogeList”:[{以下略~
========
 
memflushしてやって、
=======
$ ./memflush –servers=localhost:11211
=======
 
その後は値が取れません~
========
$ ./memcat –servers=localhost:11211 HOGEHOGE
memcat: HOGEHOGE not found
========
 
なんかアクセスした時に、どっかの領域から削除されて
dumpとかの対象から外れるっぽいんですよね。
 
memdumpして値が取れてたのに、
========
$ ./memdump –servers=localhost:11211 | grep HOGEHOGE
HOGEHOGE
========
 
memcatしてやって取れなくなったら、
========
$ ./memcat –servers=localhost:11211 HOGEHOGE
memcat: HOGEHOGE not found
========
 
dumpしても取れなくなりました。
========
$ ./memdump –servers=localhost:11211 | grep HOGEHOGE | wc -l
0
========
 
なんだか紛らわしいのぅ。
まぁやりたい事やれそうなので良かったですが。

Next »