<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="ja">
<title>dTblog | デザインとプログラムの境界をさまようブログ</title>
<link rel="alternate" type="text/html" href="http://www.deftrash.com/blog/" />
<modified>2010-07-18T04:38:17Z</modified>
<tagline>デザインから開発まで色んな局面でWebと関わる人のよもやま話。</tagline>
<id>tag:www.deftrash.com,2010:/blog//3</id>
<generator url="http://www.movabletype.org/" version="4.25">Movable Type</generator>
<copyright>Copyright (c) 2010, deftrash</copyright>

<entry>
<title>なぜAdobeは映像系ソフトだけクロスアップグレード可にしたか</title>
<link rel="alternate" type="text/html" href="http://www.deftrash.com/blog/archives/2010/07/adobe_marketing.html" />
<modified>2010-07-18T04:38:17Z</modified>
<issued>2010-07-18T03:15:39Z</issued>
<id>tag:www.deftrash.com,2010:/blog//3.533</id>
<created>2010-07-18T03:15:39Z</created>
<summary type="text/plain">今回は、前回の記事「Adobe 製品を Windows と Mac でスイッチする方法」を違う角度から見てみます。 今回の CS5 へのアップグレードポリシーを...</summary>
<author>
<name>deftrash</name>
<url>http://www.deftrash.com/</url>
<email>dtadmin@deftrash.com</email>
</author>
<dc:subject>marketing</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.deftrash.com/blog/">
<![CDATA[<p>今回は、前回の記事<a href="http://www.deftrash.com/blog/archives/2010/07/adobe_windows_mac.html">「Adobe 製品を Windows と Mac でスイッチする方法」</a>を違う角度から見てみます。</p>

<p>今回の CS5 へのアップグレードポリシーを見ていくと、Premiere をはじめとする映像系ソフトの扱いが特別であることが分かります。<a href="http://kb2.adobe.com/jp/cps/832/cpsid_83259.html">Creative Suite 5 アップグレードに関する注意点</a>から引用すると、「Premiere Pro、After Effects、Soundbooth、Production Premium へのアップグレードに関しましては、異なるプラットフォーム (異なる言語は不可) へのアップグレードが可能です。」とあったり、「Adobe Premiere / Premiere Pro については、すべてのバージョンよりアップグレードいただけます。」とあります。</p>

<h3>Adobe のマーケティング戦略</h3>

<p>これらの特別ルールの目的は、Premiere ユーザの囲い込みを続けることだと推察できます。さらに、新規 Premiere ユーザの獲得も視野に入った施策でしょう。</p>

<p>Adobe はクリエイティブ系ソフトウェアでは市場では寡占的地位を築いてきており、2005 年の Macromedia 買収合併後はさらにその傾向が進み、グラフィック系については揺るぎない絶対的な地位にあるわけです。強力なライバル不在のため、のびのびとした価格設定と、平日の営業時間以外は顧客の相手をしないという強気の姿勢を崩しません。これがリーダー企業の競争戦略なのだと言われればそうなのかもしれませんが、ムカつきますね。</p>

<p>しかし、こと映像系に限ってはそうではありません。かつて <a href="http://japan.cnet.com/news/tech/story/0,2000056025,20059771,00.htm">Premiere は Final Cut Pro に敗北して Mac 市場から撤退しています</a>し、映像編集系ソフトとしてのマインドシェアは低いです。プロユースでも需要はいまいちで、After Effects を除いて、Adobe の映像ソフトは微妙な立ち位置でしょう。</p>

<h3>実際にシェアはどんなもんか</h3>

<p>シェアが分かる資料が見つからなかったので、<a href="http://bcnranking.jp/">BCNランキング</a>を参照してみます。いずれも 2010年6月のカテゴリ別ランキングです。</p>

<p>まずは、対照としてグラフィック系ソフトの販売ランキング。</p>

<table class="basic">
<thead>
<tr><th width="40">順位</th><th width="100">販売元</th><th>ソフトウェア</th></tr>
</thead>
<tbody>
<tr><th>1</th><td>セルシス</td><td>IllustStudio パッケージ版</td></tr>
<tr><th>2</th><td>セルシス</td><td>ComicStudioPro 4.0</td></tr>
<tr class="notice"><th>3</th><td>アドビ</td><td>Adobe Illustrator CS5 日本語版 Windows版 学生・教職員個人版</td></tr>
<tr class="notice"><th>4</th><td>アドビ</td><td>Adobe Illustrator CS5 日本語版 Windows版</td></tr>
<tr><th>5</th><td>メガソフト</td><td>3Dマイホームデザイナー LS3</td></tr>
<tr><th>6</th><td>メガソフト</td><td>3Dマイホームデザイナー LS3 間取りがわかる!書籍付</td></tr>
<tr class="notice"><th>7</th><td>アドビ</td><td>Adobe Creative Suite 5J Design Standard Mac 学生・教職員個人版</td></tr>
<tr class="notice"><th>8</th><td>アドビ</td><td>Adobe Illustrator CS5 日本語版 アップグレード版 Windows版</td></tr>
<tr class="notice"><th>9</th><td>アドビ</td><td>Adobe Illustrator CS5 日本語版 Macintosh版</td></tr>
<tr class="notice"><th>10</th><td>アドビ</td><td>Adobe Illustrator CS4 日本語版 Windows版 </td></tr>
</tbody>
</table>

<p>続いて、これまた対照として画像処理系ソフトのランキング。</p>

<table class="basic">
<thead>
<tr><th width="40">順位</th><th width="100">販売元</th><th>ソフトウェア</th></tr>
</thead>
<tbody>
<tr class="notice"><th>1</th><td>アドビ</td><td>Adobe Photoshop Elements 8.0 日本語版 Windows版</td></tr>
<tr class="notice"><th>2</th><td>アドビ</td><td>Adobe Photoshop CS5 日本語版 アップグレード版 Windows版</td></tr>
<tr><th>3</th><td>エプソン</td><td>デジカメde!!ムービーシアター3</td></tr>
<tr class="notice"><th>4</th><td>アドビ</td><td>Adobe Photoshop Lightroom 3.0J アップグレード版 Win/Mac版</td></tr>
<tr class="notice"><th>5</th><td>アドビ</td><td>Adobe Photoshop Elements 8.0 日本語版 乗換え/UPG版 Windows版</td></tr>
<tr class="notice"><th>6</th><td>アドビ</td><td>Adobe Photoshop CS5 日本語版 アップグレード版 Macintosh版</td></tr>
<tr><th>7</th><td>ジャストシステム</td><td>感動かんたん!フォトムービー2 通常版</td></tr>
<tr class="notice"><th>8</th><td>アドビ</td><td>Adobe Photoshop CS5 Extended 日本語版 Win 学生・教職員個人版</td></tr>
<tr class="notice"><th>9</th><td>アドビ</td><td>Adobe Photoshop CS5 日本語版 Windows版</td></tr>
<tr class="notice"><th>10</th><td>アドビ</td><td>Adobe Photoshop Elements 8.0 日本語版 Win版 学生・教職員個人版</td></tr>
</tbody>
</table>

<p>CS5 発表直後とは言え、両分野ともに Adobe のシェアの大きさがうかがえるランキング結果です。</p>

<p>一方、映像編集系ソフトではどうかというと、こんな感じです。</p>

<table class="basic">
<thead>
<tr><th width="40">順位</th><th width="100">販売元</th><th>ソフトウェア</th></tr>
</thead>
<tbody>
<tr><th>1</th><td>サイバーリンク</td><td>PowerDirector8 Ultra 特別優待版</td></tr>
<tr><th>2</th><td>コーレル</td><td>VideoStudio Pro X3 特別優待版</td></tr>
<tr><th>3</th><td>コーレル</td><td>VideoStudio Pro X3</td></tr>
<tr><th>4</th><td>コーレル</td><td>VideoStudio Pro X3 アカデミック版</td></tr>
<tr><th>5</th><td>コーレル</td><td>VideoStudio Ultimate X3 通常版</td></tr>
<tr><th>6</th><td>コーレル</td><td>VideoStudio Pro X3 アップグレード版</td></tr>
<tr><th>7</th><td>ペガシス</td><td>TMPGEnc Authoring Works 4</td></tr>
<tr><th>8</th><td>コーレル</td><td>VideoStudio Ultimate X3 特別優待/アップグレード版</td></tr>
<tr class="notice"><th>9</th><td>アドビ</td><td>Adobe Premiere Elements 8.0 日本語版 Windows版</td></tr>
<tr><th>10</th><td>コーレル</td><td>VideoStudio Ultimate X3 アカデミック版</td></tr>
</tbody>
</table>

<p>9位にギリギリ入っているといった感じです。CS5 発表直後だというのに、それらはトップ10には入ってきていません。まあ、そんなもんですね。</p>

<p><br />
<h3>まとめ</h3></p>

<p>Adobe としては、Premiere を再度 Mac 市場に投入したし、Win から Mac への乗り換えユーザが増えているという事実から、この市場のみチャレンジャーとしての戦略に切り替えたのだと思います。こうした背景を考えると、仮にシェア奪回が実現できた場合、この戦略は捨てられる可能性が高そうです。つまり、Premiere はじめ Adobe の映像系ソフトがシェアを伸ばしたとき、またクロスアップデートは認められなくなり、アップグレード対象製品も他製品と同様の縛りにしてしまうでしょう。製品ごとにポリシーが違うのは、内部の管理コストもかかるわけで、変えたがっているに違いないでしょう、と。</p>

<p>しかしながら上で見たようなシェア具合であり、こんな作戦で効果が上がるのかは不透明というか、ぶっちゃけシェアは落とさないけれども伸ばしもできずにハマるんじゃないかと推測しています。その場合は、再度市場から撤退するとか、クローズドでやっていくという流れに行き着くことも考えられるため、やはり今のアップグレードポリシーのままでいることは無いでしょう。</p>

<p>そんなわけで、映像系ソフトのクロスアップデートを考えている方は、今のうちですよ！ Adobe 先生の気が変わらないうちに、ぜひ。<br />
</p>]]>
<![CDATA[<p>ちなみに、iPhone で Flash を締め出したことで、Apple と Adobe の関係がうまくいっていないのは周知のことだけれども、先に仕掛けたのは Adobe だったと言えるのかもしれません。すなわち、2003 年頃に、Premiere や FrameMaker などのいくつかの主要製品を Mac 市場から撤退させることで Adobe が Apple を揺さぶったことがあったけれども、それ以来の怨恨ではないのかな、と。</p>

<p>当時の Apple と Adobe の関係性で言えば、Adobe の方が上だったでしょう。今では逆の立場ですよね。ジョブスは Flash の性能問題を挙げたりしてのらりくらりしているが、仕返しという感情的な理由はあるんじゃないかな、とぼんやり思ったのでした。<br />
</p>]]>
</content>
</entry>

<entry>
<title>Adobe 製品を Windows と Mac でスイッチする方法</title>
<link rel="alternate" type="text/html" href="http://www.deftrash.com/blog/archives/2010/07/adobe_windows_mac.html" />
<modified>2010-07-18T03:09:02Z</modified>
<issued>2010-07-18T01:48:54Z</issued>
<id>tag:www.deftrash.com,2010:/blog//3.532</id>
<created>2010-07-18T01:48:54Z</created>
<summary type="text/plain">5月末に発売された Adobe CS5 に遅ればせながらアップグレードしました。今回のポイントは、Windows 版から Mac 版にクロスアップグレード（異な...</summary>
<author>
<name>deftrash</name>
<url>http://www.deftrash.com/</url>
<email>dtadmin@deftrash.com</email>
</author>
<dc:subject>software</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.deftrash.com/blog/">
<![CDATA[<p>5月末に発売された Adobe CS5 に遅ればせながらアップグレードしました。今回のポイントは、Windows 版から Mac 版にクロスアップグレード（異なるOS間でのアップグレード）を実現したことです。</p>

<p>数年前から Mac の環境は手元にあるものの、なかなか Windows から移行することができなかった。理由は、高額な Adobe 製品群がすべて Windows 版であり、それらを Mac 版に交換することができなかったから。Adobe に救済を求めて聞いてみたことがあったけれども、「Mac版を新規に購入してください」というけんもほろろな回答しか得られず、結局 Windows 環境でクリエイティブを続けてきました。</p>

<p>こういう同士も少なくないと思いますが、朗報ですよ！</p>

<p>あまり知られていませんが、なんと CS5 ではクロスアップグレードができます。Adobe 製品を Windows 版から Mac 版に切り替えることができます。もちろん逆に Mac 版から Windows 版へのスイッチということもできます。</p>

<p>Adobe 製品は以前からアップグレードポリシーとして、クロスアップグレードを認めてきませんでした。これは CS5 でも同様なのですが、例外的に <a href="http://kb2.adobe.com/jp/cps/832/cpsid_83259.html#Caution_5">Premiere Pro、After Effects、Soundbooth、Production Premium へのアップグレードは、異なるプラットフォーム (異なる言語は不可) へのアップグレードが可能</a> になっています。今回はこの特例を利用するわけです。</p>

<p>このあたりの情報は Web 上に少ないので、一応、自分の例を書いておきますと、CS3 Design Premium Windows 版から、CS5 Production Premium Mac 版へのクロスアップグレードにしました。CS5 のインストール時に、現在利用中のプロダクトのシリアルを入力しろと求められますが、ちゃんと CS3 Windows 版のシリアルでパスできました。</p>

<p>映像系パッケージ群に限られる方法ではありますが、自分と同じようにグラフィックと映像という守備範囲の人ならドンピシャで使えます。</p>

<h3>ほかに方法ないの？</h3>

<p>あります。</p>

<p><a href="http://kb2.adobe.com/jp/cps/832/cpsid_83259.html#Caution_5">カスタマーサービスに電話すると、何とかしてくれるかもしれないらしい</a>です。上で、以前相談した際には新規購入を薦められた話を書きましたが、ちょっと態度は軟化しているのかもしれません。</p>

<p>ただ、先のパッケージを使ったクロスアップグレードと異なるのは、以前のシリアルを破棄する代わりに新しいプラットフォームでのライセンスを得ることができる点です。つまり、シリアルが破棄されると、やっぱ前のOSに戻りたい、というときの可逆性がない。ここはグレーゾーンなので棒読みしますが、普通にクロスアップグレードすると、Mac では CS5 が使えるし、Windows では以前のパッケージが使えるという状態になりますね。あら、ナニコレ不思議。</p>

<h3>もっと、ほかに方法ないの？</h3>

<p>あらためて CS5 のアップグレード対象製品を見てみると、そのなかに「Macromedia Studio 8」という文字があるのに気が付きました。私の記憶が確かならば、Studio 8 は Mac と Windows のハイブリッド版として販売されていた気がします。</p>

<p>つまり、Studio 8 さえ手元にあれば、好きな CS5 製品の Windows 版もしくは Mac 版にアップグレードできるということなんじゃないでしょうか。これ、すなわち最強。原理的にはできますよね、普通に。</p>

<p>結論、Macromedia 最高です。溜池山王時代が懐かしく恋しいです。</p>

<p><br />
</p>]]>
<![CDATA[<p>ちなみに上記いずれの施策も、おもに以下の理由から、いつ Adobe が止めてしまうか分からないので、プラットフォームの移行を検討している方は、早めに決断した方が良いと思います。</p>

<ul>
<li>映像系のみ特別扱いする戦略は今だけの可能性が高い</li>
<li>カスタマーサポートも昔と今で態度が違うので、いつ元に戻るか分からない</li>
<li>CS6 からは Studio 8 がアップグレード対象から外れるかもしれない</li>
</ul>

<p><br />
</p>]]>
</content>
</entry>

<entry>
<title>SIer が業績悪化しているのに何も変わらない</title>
<link rel="alternate" type="text/html" href="http://www.deftrash.com/blog/archives/2010/06/sier.html" />
<modified>2010-06-06T14:50:07Z</modified>
<issued>2010-06-06T07:18:46Z</issued>
<id>tag:www.deftrash.com,2010:/blog//3.531</id>
<created>2010-06-06T07:18:46Z</created>
<summary type="text/plain">SIer のなかの人は思考が止まってしまっているんでしょうか。 SIer 各社の業績が軒並み悪化しているにも関わらず、現場では新しい提案があるわけでもなく、それ...</summary>
<author>
<name>deftrash</name>
<url>http://www.deftrash.com/</url>
<email>dtadmin@deftrash.com</email>
</author>
<dc:subject>misc.</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.deftrash.com/blog/">
<![CDATA[<p>SIer のなかの人は思考が止まってしまっているんでしょうか。</p>

<p>SIer 各社の業績が軒並み悪化しているにも関わらず、現場では新しい提案があるわけでもなく、それならどうやって業績回復のストーリーを実現するつもりなのかと思わされるような話がチラホラ。あとは、現状理解に乏しく需給関係が崩れつつあるにも関わらず、当然の顔で値上げ交渉をしかけてきたりする。バカなのかな、と思うわけです。</p>

<h3>まずは状況整理</h3>

<p>上場大手 SIer 各社の直近の状況を見てみます。</p>

<table class="basic">
<thead>
<tr>
<th>企業名</th>
<th>売上高</th>
<th>前年比</th>
<th>営業利益</th>
<th>前年比</th>
<th>来期予測</th>
<th>今年比</th>
</tr>
</thead>
<tbody>
<tr>
<th>NTTデータ</th>
<td>1,142,940</td>
<td>100.3%</td>
<td>81,689</td>
<td>82.9%</td>
<td>1,200,000</td>
<td>105.0%</td>
</tr>
<tr>
<th>野村総合研究所</th>
<td>338,629</td>
<td>99.2%</td>
<td>40,077</td>
<td>80.6%</td>
<td>350,000</td>
<td>103.4%</td>
</tr>
<tr>
<th>伊藤忠テクノソリューションズ</th>
<td>290,391</td>
<td>94.5%</td>
<td>21,569</td>
<td>99.5%</td>
<td>300,000</td>
<td>103.3%</td>
</tr>
<tr>
<th>日本ユニシス</th>
<td>271,084</td>
<td>87.4%</td>
<td>7,105</td>
<td>44.7%</td>
<td>280,000</td>
<td>103.3%</td>
</tr>
<tr>
<th>CSKホールディングス</th>
<td>169,518</td>
<td>82.3%</td>
<td>4,176</td>
<td>-</td>
<td>160,000</td>
<td>94.4%</td>
</tr>
<tr>
<th>新日鉄ソリューション</th>
<td>152,158</td>
<td>94.2%</td>
<td>10,790</td>
<td>93.8%</td>
<td>156,000</td>
<td>102.5%</td>
</tr>
<tr>
<th>富士ソフト</th>
<td>141,682</td>
<td>85.8%</td>
<td>3,293</td>
<td>45.0%</td>
<td>142,000</td>
<td>100.2%</td>
</tr>
<tr>
<th>住商情報システム</th>
<td>127,317</td>
<td>94.8%</td>
<td>6,423</td>
<td>71.1%</td>
<td>135,000</td>
<td>106.0%</td>
</tr>
<tr>
<th>日本システムディベロップメント</th>
<td>34,933</td>
<td>84.0%</td>
<td>4,248</td>
<td>56.5%</td>
<td>37,400</td>
<td>107.1%</td>
</tr>
<tr>
<th>SRAホールディングス</th>
<td>34,053</td>
<td>81.5%</td>
<td>1,997</td>
<td>52.3%</td>
<td>35,500</td>
<td>104.2%</td>
</tr>
</tbody>
</table>

<p>ほぼ減収減益で、営業利益については、富士ソフトを筆頭に半減しているところもあるという悲惨な状態。NTTデータだけは増収減益になっていますが、前年度はゆうちょなど銀行系の大型受注があったので、それでも売上高が横ばいだったということは、他社と傾向が異なるものではありません。</p>

<p>各社がそろって減収の要因に挙げているのが、企業のIT投資抑制にともなう受注減少。加えて、証券業向けのサービスを展開しているところは、業界自体の低迷でダメージが大きかった模様。流通系は堅調だったみたいですね。</p>

<p>インド・中国へのオフショアリングの更なる推進や、経費や外部委託費の圧縮など、ITゼネコンの多重構造を考えるに、涙なしには語れなさそうなコスト削減を行っているのも、各社共通です。敢えてここに関係ない話題を挟みますが、<a href="http://www.tsr-net.co.jp/news/status/fiscal_year/1201087_1635.html">2009年度の全国企業倒産状況</a>にあるとおり、情報通信業の倒産が6.7%増というのはリアルです。さて、そうしたコスト削減活動があるなかで、なお減益となっているのは、受注減少分がコスト削減効果を上回ったということ。いかに市場環境が悪いかが分かります。</p>

<h3>SIer は変わらないのか</h3>

<p>こうした市況下にあるものの、ほとんどの SIer が今期は 5% 前後の成長を見込んでいるのは、興味深いです。市況が回復し、クラウド関連事業が伸びるという見方なわけです。</p>

<p>確かに、大企業を中心にIT投資は底を打ったという見方もあるし、足元を見るとコスト削減の旗印のもとにプライベート・クラウドを推進し、導入した企業が増えてきているという事実があります。冷えきったIT投資意欲を、バズワードの独自解釈をもとに構築したソリューションで刺激して需要を生み出そうというあたりは、「いつもの感じ」で素晴らしい。この前まで Saas で大騒ぎしていたものを、一気にクラウドという上位概念で包み込んで一掃してしまう手法には惚れ惚れするわけです。そうしたなか、NTTデータがクラウドという単語より BizXaas という固有名詞で押しているのが、なんともクールです。</p>

<p>クラウドを標榜しつつ、SIer 根性はプラットフォーマーは目指さないし目指せない。その妥協点として着地したプライベート・クラウドでは、これまでの業務知識やノウハウは活きるかもしれないが、未来を作るわけではないと思うわけです。コスト削減効果はあるのかもしれませんが、例によってパッケージングを変えただけに過ぎないとも見えるわけです。</p>

<p>本質的な変化を取れないのは、SIer というポジショニングの宿命なんでしょうか。ソリューションのリパッケージングで延命していくやり方では、二番底は超えられないんじゃないかと思います。</p>

<h3>稼働率は上げたいけど供給者目線</h3>

<p>利益率アップは至上命題とばかり、SIer の外部委託費はさらに大幅削減とかいう話になっています。内製化傾向にあるユーザ企業にやられた仕打ちを、右から左に受けながすカツヤマー流。数年前の偽装請負禁止に次いで、二次請け・三次請けの会社からは、青息吐息が聞こえてきます。</p>

<p>大手 SIer にとっては、コスト削減効果を甘受しながら、受注減で低下している社内のエンジニア稼働率を上げられる施策ではあるものの、空洞化してしまったあとの社内で仕事を回せといっても回せないという、ウソかホントか区別つかない話が聞こえてくるなど、現場の混乱もなかなか。そこで安価なオフショアという選択肢になるのだろうけれども、ようやく落ち着いてきたと言われるオフショア開発も、最終的に下請け会社に回っていって、そこのSEがほとんどを作り直すなんていう、これまたウソかホントか区別つかない話も聞こえてきます。いろいろ心配です。</p>

<p>個人的に衝撃だったのは、そういう環境化にあって供給過剰で稼働率の下がっているエンジニアなのに、なぜか単価を上げようとかいう話が横行しているという話です。これは一次だけでなく二次請けやっているあたりの中堅どころでもそう。需給関係とか経済の仕組みは無視なんでしょうか。システム系は価格弾力性があまりないとは思いますが。</p>

<p>逆に三次・四次くらいをずっとやってきて、もはや売上が地べたを這っているソフトハウスさんなんかだと、びっくりするぐらい低単価で提案してきて、逆の意味で恐いなんて話も聞きます。それは赤字にならなければ良い、という覚悟の現れらしいですが、ぜひ各 SIer にもそういった姿勢を学んでいただきたく。</p>

<h3>結局、言いたかったこと</h3>

<p>SIer は自分のおかれた立場をちゃんと理解した上で、本質的な戦略を考えて実行して欲しいなと思うわけです。現状認識が甘いまま、サイズオーバーな提案をしようものなら、足元すくわれちゃうと思うんですよね。</p>

<p>プライベート・クラウドや仮想化によるコスト削減ソリューションは売れると思いますが、それはこれまで売れていたところには売れるし、売れていなかったところには売れないという話のような気がします。だから、中小 SIer が色気を出してクラウドサービスに入っても、ほとんど上手くいかないと思うわけです。ましてやグローバル化をや。</p>

<p>ぜひ某社には、きっちり考えてがんばっていただきたいと思います。</p>]]>

</content>
</entry>

<entry>
<title>FileCache と Memcached を比較する</title>
<link rel="alternate" type="text/html" href="http://www.deftrash.com/blog/archives/2010/05/filecache_memcached.html" />
<modified>2010-05-02T16:17:45Z</modified>
<issued>2010-05-02T07:20:32Z</issued>
<id>tag:www.deftrash.com,2010:/blog//3.530</id>
<created>2010-05-02T07:20:32Z</created>
<summary type="text/plain">設計方針として「Memcached より先に FileCache を見るように」という話を聞いたので、「えー、それって性能的にどうなんだろうか？」と思い、簡単に...</summary>
<author>
<name>deftrash</name>
<url>http://www.deftrash.com/</url>
<email>dtadmin@deftrash.com</email>
</author>
<dc:subject>perl</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.deftrash.com/blog/">
<![CDATA[<p>設計方針として「Memcached より先に FileCache を見るように」という話を聞いたので、「えー、それって性能的にどうなんだろうか？」と思い、簡単にベンチマークをとってみました。</p>

<p>環境としては、同一セグメント内のまったく別のホストに Memcached サーバを立てました。つまり、I/Oコストだけでなく通信コストなども含めての比較をしています。</p>

<p>ちなみに、このベンチのために、<a href="http://www.deftrash.com/blog/archives/2010/05/install_memcached.html">わざわざ memcached を入れるところ</a>から始めました。もちろん連休で時間があるからです。</p>

<p>ソース。</p>

<pre class="code">
#!/usr/bin/perl -w
use strict;
use warnings;
use utf8;
<br />
use Cache::FileCache;
use Cache::Memcached::Fast;
use Benchmark qw(:all);
<br />
our $c = 0;
<br />
my $count   = 10000;
my $compare = timethese(
    $count,
    {
        filecache => sub {
            $c = 0;
            my $cache = Cache::FileCache->new({
                namespace           => 'test',
                default_expires_in  => 600,
                cache_root          => '/tmp',
            });
            my $data = $cache->get('key' . $c++);
            unless ( defined $data ) {
                $cache->set('key' . $c++, 'value');
            }
            return $data;
        },
<br />
        memcached => sub {
            $c = 0;
            my $cache = Cache::Memcached::Fast->new({
                servers     => ['192.168.50.102:11211'],
            });
            my $data = $cache->get('key' . $c++);
            unless ( defined $data ) {
                $cache->set('key' . $c++, 'value');
            }
            return $data;
        },
    },
);
<br />
cmpthese $compare;
</pre>

<p>10000 回の R/W の結果はこちら。</p>

<pre class="code">
Benchmark: timing 10000 iterations of filecache, memcached...
 filecache:  5 wallclock secs 
 ( 4.55 usr +  0.76 sys =  5.31 CPU) @ 1883.24/s (n=10000)
 memcached:  7 wallclock secs 
 ( 0.26 usr +  0.15 sys =  0.41 CPU) @ 24390.24/s (n=10000)
             Rate filecache memcached
filecache  1883/s        --      -92%
memcached 24390/s     1195%        --
</pre>

<p><s>なんと FileCache の圧倒的な勝利。ネットワークコストが大きかったのか、想定外の差が出て驚きました。冒頭の設計方針に一理あるということは分かりました。疑ってすみません。しかし何か根本的なところを間違っていそうな気もしなくはないなあ。</p>

<p>最近は、ディスクI/Oをとにかく敵対視する日々が続いていたけれども、先入観というか偏りのある発想になってしまってはいけないですね。反省。</p>

<p>ちなみに、「じゃあ Memcached やめて FileCache を積極的に使っていこうぜ！」とはもちろんならないです。それぞれの環境に応じて求められるものは変わってくるし、分散であったり failover しやすかったりという優位性があるので、それなりの規模で総合的に判断すると、 Memcached に軍配が上がるんではないでしょうか。逆に言えば、スタンドアローンだったり、Webサーバ1台・DBサーバ1台みたいな環境であれば、FileCache の方がメリットが大きそうですね。</s></p>

<p>ベンチの見方を盛大に誤っていまして、上記でまったく逆の考察をしていますが、誤爆です。やはり超圧倒的に Memcached が高速でした。wallclock secs を見ていたのですが、普通に秒間処理で測るんですよね。10倍以上の性能差です。</p>

<p>なので、考察としては、よほどネットワークコストが大きいとか、ディスクI/Oに対してメモリが不足しているとか、共用環境で memcached 立てられないといった限定的な環境以外では、FileCache の出番は無いということです。今回の検証は HDD でしたが、SSD にしても改善される性能は 2-3 倍程度でしょうから、Memcached の優位性は変わらないでしょう。</p>]]>

</content>
</entry>

<entry>
<title>CentOS に memcached をインストールする</title>
<link rel="alternate" type="text/html" href="http://www.deftrash.com/blog/archives/2010/05/install_memcached.html" />
<modified>2010-05-02T07:12:22Z</modified>
<issued>2010-05-01T06:38:06Z</issued>
<id>tag:www.deftrash.com,2010:/blog//3.529</id>
<created>2010-05-01T06:38:06Z</created>
<summary type="text/plain">以前は yum でサクッとインストールできたと記憶しているのだけど、今は yum でインストールできないようなので、ソースからインストールしました。手間がかかっ...</summary>
<author>
<name>deftrash</name>
<url>http://www.deftrash.com/</url>
<email>dtadmin@deftrash.com</email>
</author>
<dc:subject>linux</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.deftrash.com/blog/">
<![CDATA[<p>以前は yum でサクッとインストールできたと記憶しているのだけど、今は yum でインストールできないようなので、ソースからインストールしました。手間がかかったので、次回へのメモとして、ログを残しておきます。</p>

<p>まず、memcached が使うイベント通知APIの libevent のバージョンを確認。 </p>

<pre class="code">
# rpm -q libevent
libevent-1.1a-3.2.1
</pre>

<p>1.1系と古いので、新しいものを入れます。ソースは<a href="http://www.monkey.org/~provos/libevent/">公式サイト</a>から、安定版のうち最新のものを持ってきます</p>

<pre class="code">
# cd /usr/local/src
# wget http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz
# tar xvfz libevent-1.4.13-stable.tar.gz
# cd libevent-1.4.13-stable
# ./configure --prefix=/usr/local/libevent
# make
# make install
</pre>

<p>続いて、 memcached をインストールします。ソースは<a href="http://code.google.com/p/memcached/downloads/list">公式サイト</a>から。</p>

<pre class="code">
# cd /usr/local/src
# wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz
# tar xvfz memcached-1.4.5.tar.gz
# cd memcached-1.4.5
# ./configure --with-libevent=/usr/local/libevent/
# make
# make install
</pre>

<p>起動コマンドを作ってサービス登録します。といっても、そのままコピーですが。キャッシュ容量やポート番号を変えるなどしたい場合は、このスクリプトのなかをいじりましょう。</p>

<pre class="code">
# cp /usr/local/src/memcached-1.4.5/script/memcached.sysv /etc/rc.d/init.d/memcached
# chkconfig --add memcached
# chkconfig --list memcached
</pre>

<p>用意が整ったところで、起動します。</p>

<pre class="code">
# /etc/rc.d/init.d/memcached start
</pre>

<p>ここで、起動せずに次のようなエラーが出ることがあります。</p>

<pre class="code">
memcached: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory
</pre>

<p>今回は libevent を /usr/local/libevent にあるものを使うため、ldconfig してあげなければいけませんでした。</p>

<pre class="code">
# echo "/usr/local/libevent/lib" > /etc/ld.so.conf.d/libevent.conf
# ldconfig
</pre>

<p>このあと起動すれば、問題なく立ち上がると思います。動作確認をします。</p>

<pre class="code">
$ telnet localhost 11211
stats
STAT pid 11440
STAT uptime 71
STAT time 1272779578
STAT version 1.4.5
STAT pointer_size 32
STAT rusage_user 0.000000
STAT rusage_system 0.010000
STAT curr_connections 10
STAT total_connections 11
STAT connection_structures 11
STAT cmd_get 0
STAT cmd_set 0
STAT cmd_flush 0
STAT get_hits 0
STAT get_misses 0
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 7
STAT bytes_written 0
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT threads 4
STAT conn_yields 0
STAT bytes 0
STAT curr_items 0
STAT total_items 0
STAT evictions 0
STAT reclaimed 0
END
</pre>

<p>stats と打つとステータスが、バーっと流れるので確認しましょう。プロンプトを抜けるときには、いつもどおりで quit と打てば OK。</p>

<p>最近セットアップを自動化しているせいで、こうしてソースから入れるのは2年ぶりくらい。ldconfig とか忘れてしまっていて、やり方を思い出すのに、ムダに時間かかってしまいました。うーむ。</p>

<p>以上、おつかれさまでした。<br />
</p>]]>

</content>
</entry>

<entry>
<title>LWP でベーシック認証に対応する</title>
<link rel="alternate" type="text/html" href="http://www.deftrash.com/blog/archives/2010/03/lwp_1.html" />
<modified>2010-03-29T02:50:13Z</modified>
<issued>2010-03-29T02:40:10Z</issued>
<id>tag:www.deftrash.com,2010:/blog//3.528</id>
<created>2010-03-29T02:40:10Z</created>
<summary type="text/plain">自分メモ。 LWP で ベーシック認証のかかったページにアクセスするには、authorization_basic を使えば良いらしい。簡単だ。 #!/usr/b...</summary>
<author>
<name>deftrash</name>
<url>http://www.deftrash.com/</url>
<email>dtadmin@deftrash.com</email>
</author>
<dc:subject>perl</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.deftrash.com/blog/">
<![CDATA[<p>自分メモ。</p>

<p>LWP で ベーシック認証のかかったページにアクセスするには、authorization_basic を使えば良いらしい。簡単だ。</p>

<pre class="code">
#!/usr/bin/perl
use strict;
use LWP::UserAgent;
use HTTP::Request;
<br />
my $req = HTTP::Request->new(GET => "https://foo.bar.com/basic/auth.html");
$req->authorization_basic('account', 'password');
my $ua = LWP::UserAgent->new();
my $res = $ua->request($req);
<br />
if ($res->is_success) {
    print $res->content;
} else {
    print $res->code;
}
</pre>]]>

</content>
</entry>

<entry>
<title>特定のサイズのファイルを生成する</title>
<link rel="alternate" type="text/html" href="http://www.deftrash.com/blog/archives/2010/02/dd_command.html" />
<modified>2010-02-24T15:07:13Z</modified>
<issued>2010-02-24T14:58:37Z</issued>
<id>tag:www.deftrash.com,2010:/blog//3.526</id>
<created>2010-02-24T14:58:37Z</created>
<summary type="text/plain">ファイル操作のテストなどで、特定の大きさのファイルを作成したいときがあります。そんなときは、 dd コマンドを使うと簡単に作ることができます。 dd if=/d...</summary>
<author>
<name>deftrash</name>
<url>http://www.deftrash.com/</url>
<email>dtadmin@deftrash.com</email>
</author>
<dc:subject>linux</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.deftrash.com/blog/">
<![CDATA[<p>ファイル操作のテストなどで、特定の大きさのファイルを作成したいときがあります。そんなときは、 dd コマンドを使うと簡単に作ることができます。</p>

<pre class="code">
dd if=/dev/zero of=test_file bs=1M count=10
</pre>

<p>上記の例だと、カレントディレクトリに「test_file」という10MBのファイルが生成されます。便利。</p>]]>

</content>
</entry>

<entry>
<title>MySQLでBLOB/TEXT型カラムにインデックスを張る</title>
<link rel="alternate" type="text/html" href="http://www.deftrash.com/blog/archives/2009/11/mysql_keylength.html" />
<modified>2009-11-30T17:47:10Z</modified>
<issued>2009-11-30T14:01:29Z</issued>
<id>tag:www.deftrash.com,2009:/blog//3.525</id>
<created>2009-11-30T14:01:29Z</created>
<summary type="text/plain">MySQL で新たにテーブルを作ったり、プライマリキー、ユニーク制約、またはインデックスを作成する際、下記のようなエラーが発生することがあります。 ERROR ...</summary>
<author>
<name>deftrash</name>
<url>http://www.deftrash.com/</url>
<email>dtadmin@deftrash.com</email>
</author>
<dc:subject>db</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.deftrash.com/blog/">
<![CDATA[<p>MySQL で新たにテーブルを作ったり、プライマリキー、ユニーク制約、またはインデックスを作成する際、下記のようなエラーが発生することがあります。</p>

<pre class="code">
ERROR 1170 (42000): BLOB/TEXT column 'text_field' used in key specification without a key length 
</pre>

<p>結論として回避策から書くと、BLOB型またはTEXT型の場合は、インデックス作成時にキー長を明示してあげる必要があります。</p>

<pre class="code">
create index new_index on table_name(text_field(100));
</pre>

<p>このエラーは、MySQL が BLOB型もしくはTEXT型 （これらに順ずる TINYTEXT型 や LONGTEXT型を含む）のような可変長カラムでは、その先頭から最大255文字分しかインデックスできないという制約から来ているようです。解決策は上記のとおり、キー長を明示するか、変わりに255以下で <var>VARCHAR(100)</var> のようなカラムを使って、そちらをインデックスとして使うといった工夫が考えられます。</p>

<p>考えてみれば当然と言える話ではあります。</p>

<p>題目を索引することはあれど、本文を索引した書籍など見たことがないですし、そこに意味がないことは誰もが分かるでしょう。たとえ本文を索引にするとしても、冒頭の一節というのが関の山。この MySQL の仕様は、理に適っている気がします。逆に本文を索引したい、つまり全文検索用の FULLTEXT インデックスであれば、TEXT型カラムにもちろん作成することができます。</p>

<p>このエラーに遭遇したときは、上記のような解決法もひとつの手ではありますが、そもそも TEXT型カラムを主キーにしたり、インデックスを張ろうという設計が正しいかどうかを考えてみた方が良いでしょう。</p>

<p>例外は、百人一首的に冒頭の一節から引きたいか、50音順インデックスを使うようなケースだけじゃないでしょうか。LIKE 検索で、先頭数文字で引っかけたい場合。それも、通常は最低1000 レコードを超えてこないとインデックスが効いてこなかったりするので、さらにレアケースな気がします。</p>

<p>エラーが起きるとついつい今すぐで回避方法を探してしまいがちですが、そもそもエラーになるような設計が正しいかどうか考えるクセは付けておきたいもんです。結局、そういう考え方が未来の自分を救ったりするんだから。</p>

<p><br />
</p>]]>

</content>
</entry>

<entry>
<title>perl で配列に要素が含まれているか調べる方法</title>
<link rel="alternate" type="text/html" href="http://www.deftrash.com/blog/archives/2009/10/perl_contains.html" />
<modified>2009-10-03T08:06:03Z</modified>
<issued>2009-10-03T07:50:30Z</issued>
<id>tag:www.deftrash.com,2009:/blog//3.524</id>
<created>2009-10-03T07:50:30Z</created>
<summary type="text/plain">ある配列に特定の要素が含まれているかどうか知りたいとき、 java では List#contains が用意されていますが、どうやら perl では標準で用意さ...</summary>
<author>
<name>deftrash</name>
<url>http://www.deftrash.com/</url>
<email>dtadmin@deftrash.com</email>
</author>
<dc:subject>perl</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.deftrash.com/blog/">
<![CDATA[<p>ある配列に特定の要素が含まれているかどうか知りたいとき、 java では List#contains が用意されていますが、どうやら perl では標準で用意されていないんですね。ここら辺を自前で書くのが perl 流といったところでしょうか。</p>

<pre class="code">
#!/usr/bin/perl -l
<br />
my @array = qw/a b c d e f g/;
undef %tmp;
for (@array) { $tmp{$_} = 1; }
<br />
print $tmp{"a"} ? 'true' : 'false';
print $tmp{"h"} ? 'true' : 'false';
</pre>

<p><a href="http://www.perl.com/doc/FAQs/FAQ/oldfaq-html/Q5.5.html">数値配列で有無をチェックする場合は、vec を使う方法で軽くできるとのこと。</a></p>]]>

</content>
</entry>

<entry>
<title>perl で mkdir -p</title>
<link rel="alternate" type="text/html" href="http://www.deftrash.com/blog/archives/2009/09/perl_mkpath.html" />
<modified>2009-09-08T05:01:35Z</modified>
<issued>2009-09-08T04:49:17Z</issued>
<id>tag:www.deftrash.com,2009:/blog//3.523</id>
<created>2009-09-08T04:49:17Z</created>
<summary type="text/plain">perl で mkdir -p 同様のことをするには、File::Path の mkpath を使うと良いらしい。 #!/usr/bin/perl -w use...</summary>
<author>
<name>deftrash</name>
<url>http://www.deftrash.com/</url>
<email>dtadmin@deftrash.com</email>
</author>
<dc:subject>perl</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.deftrash.com/blog/">
<![CDATA[<p>perl で mkdir -p 同様のことをするには、File::Path の mkpath を使うと良いらしい。</p>

<pre class="code">
#!/usr/bin/perl -w
<br />
use strict;
use warnings;
use File::Path;
<br />
my @dir = mkpath ('/data/test/1/2/3/');
for (@dir) {
    print $_ . "\n";
}
</pre>

<p>実行結果は、作成したディレクトリパスの配列。以下は、/data/test が存在していた場合の結果。</p>

<pre class="code">
/data/test/1
/data/test/1/2
/data/test/1/2/3
</pre>

<p>ラクチンです。危なく自分でループ回すところでした。</p>

<p>なかなか便利なモジュールのノウハウが蓄積されないので、やりたいことがあったら、まずはモジュールを探してみる癖を付けるようにしたいなあ。perl ってサクサク書けるので、ちょっとした処理だったら自前でサブルーチン用意してしまっているんですが、本当はもったいないですよね...。</p>

<p>学習ベースの防備録として今後モジュール関連ネタ、メモしていきます。</p>]]>

</content>
</entry>

<entry>
<title>mysql のスレーブを再構築する</title>
<link rel="alternate" type="text/html" href="http://www.deftrash.com/blog/archives/2009/08/mysql_slave.html" />
<modified>2009-11-29T08:53:44Z</modified>
<issued>2009-08-15T14:24:17Z</issued>
<id>tag:www.deftrash.com,2009:/blog//3.522</id>
<created>2009-08-15T14:24:17Z</created>
<summary type="text/plain">レプリケーションができていないのでログを見てみたら、「Client requested master to start replication from imp...</summary>
<author>
<name>deftrash</name>
<url>http://www.deftrash.com/</url>
<email>dtadmin@deftrash.com</email>
</author>
<dc:subject>db</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.deftrash.com/blog/">
<![CDATA[<p>レプリケーションができていないのでログを見てみたら、「Client requested master to start replication from impossible position」というエラーが出力されていた。確かに、「show slave status」で表示されるポジションが、バイナリログ内に見つからない...。</p>

<p>不整合の度合いがハンパないのと、運用から切り離されているサーバだったので、スレーブをゼロから再構築することにした。以下、そのときの手順メモ。</p>

<p>まず、マスターの更新を止めてデータをdumpします。</p>

<pre class="code">
mysql> FLUSH TABLES WITH READ LOCK;
</pre>

<p>スレーブ開始にそなえてポジションを確認。</p>

<pre class="code">
mysql> SHOW MASTER STATUS \G
         File: db01-bin.010
     Position: 5432
 Binlog_Do_DB: db_name
Binlog_Ignore: 
1 row in set (0.00 sec)
</pre>

<p>データをdumpします。</p>

<pre class="code">
$ mysqldump -uroot -hdb01 db_name > /tmp/db_name.dump
</pre>

<p>マスターの更新ロックを解除。</p>

<pre class="code">
mysql> UNLOCK TABLES;
</pre>

<p>マスター側の操作はここまで。続いて、スレーブの再構築の作業に入ります。最初に、これまでのレプリ情報を削除してしまいます。</p>

<pre class="code">
# /etc/rc.d/init.d/mysqld stop
# rm /var/lib/mysql/master.info
# rm /var/lib/mysql/relay-log.info
# /etc/rc.d/init.d/mysqld start
</pre>

<p>データベースをゼロから作るため、今までのデータベースを削除して作り直し。</p>

<pre class="code">
mysql> DROP DATABASE db_name;
mysql> CREATE DATABASE db_name;
</pre>

<p>マスターのdumpデータをリストア。</p>

<pre class="code">
# scp db01:/tmp/db_name.dump /tmp/
# mysql -uroot -hdb01 db_name < /tmp/db_name.dump
</pre>

<p>レプリケーションの設定を最新のものに。ポジションとログファイルは、先ほど「SHOW MASTER STATUS」した結果のものを使用します。</p>

<pre class="code">
mysql> STOP SLAVE;
mysql> CHANGE MASTER TO 
  MASTER_HOST='db01',
  MASTER_USER='repl',
  MASTER_PASSWORD='password',
  MASTER_LOG_FILE='db01-bin.010',
  MASTER_LOG_POS=5432;
</pre>

<p>スレーブを開始します。</p>

<pre class="code">
mysql> START SLAVE;
</pre>

<p>これでレプリケーションが正常に行われるはずです。「SHOW SLAVE STATUS」やログにエラーなど発生していないことを確認しましょう。うまくいかない場合は、しかるべきときに mysqld のプロセスがきちんと停止していなかったとか、dump がうまくいっていなかったとか、そういったところだと思います。手順が少ないので、問題になる場所も限られます。</p>

<p>ここまで書いて気付いたのですが、スレーブが複数ある場合は、何もマスターの更新を止めてやる必要がないですね。そして、もっとシンプルな手順でできそう。</p>

<p>お疲れさまでした。</p>]]>

</content>
</entry>

<entry>
<title>vim で開発するときに知らないと損する小技</title>
<link rel="alternate" type="text/html" href="http://www.deftrash.com/blog/archives/2009/07/vim_tips.html" />
<modified>2009-07-05T15:52:58Z</modified>
<issued>2009-07-05T14:57:25Z</issued>
<id>tag:www.deftrash.com,2009:/blog//3.521</id>
<created>2009-07-05T14:57:25Z</created>
<summary type="text/plain">転職を機に perl を書くようになって以来、vim 一本で開発のすべてを行っています。 かつては、何と java を vi で書いていたこともあったし、運用で...</summary>
<author>
<name>deftrash</name>
<url>http://www.deftrash.com/</url>
<email>dtadmin@deftrash.com</email>
</author>
<dc:subject>linux</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.deftrash.com/blog/">
<![CDATA[<p>転職を機に perl を書くようになって以来、vim 一本で開発のすべてを行っています。</p>

<p>かつては、何と java を vi で書いていたこともあったし、運用でしばしば vi を使う機会があったので、基本的な操作は身に付いていたんですが、本格的に vi を使うようになって色々と便利な技があることを知ったのでシェアメモ。</p>

<p>まずは、文字コード変換。</p>

<pre class="code">
:e ++enc=shift_jis
:e ++enc=iso-2022-jp
:e ++enc=euc_jp
</pre>

<p>これができないと、そもそも vim 一本で開発することができないという話。テンプレ編集やメール系の開発するときに便利すぐる。</p>

<p>続いて画面分割</p>

<pre class="code">
:sp
</pre>

<p>これで画面が上下に分割して編集できます。画面を切り替える場合は、Ctrl+w を2回。プログラムを書いていて、「あ、これって他はどうしてるんだっけ？」と思って一時的に参照したい場合に便利です。</p>

<p>現在カーソルのある画面を閉じる場合は、</p>

<pre class="code">
:close
</pre>

<p>現在カーソルのある画面以外をすべて閉じて、通常モードに戻す場合は、</p>

<pre class="code">
:only
</pre>

<p>diff のように行単位で違いを眺めながら編集したい場合は、</p>

<pre class="code">
Ctrl+w → v
</pre>

<p>これで垂直分割になります。純粋に 2ファイルの diff を見るのならば、vimdiff で OK なんですが。</p>

<p>分割したそれぞれの画面で別のファイルを表示するには、その画面に切り替えて、</p>

<pre class="code">
:e ファイル名
</pre>

<p>これで、新しいファイルの編集モードに入れます。</p>

<p>ファイルを開くという意味では、編集中のファイルにあるパスにカーソルを合わせて</p>

<pre class="code">
gf
</pre>

<p>これで、そのパスにあるファイルを開くことができます。これ、ヤバイです。芋づる式にプログラムを編集できます。grep 結果をファイルにリダイレクトしておいて、あとで開いて順番に見ていきながら編集する場合に重宝しました。</p>

<p><br />
画面分割は、「screen 使えば良いんじゃないの？」という話もありますが、ちょっとした比較には vim の画面分割はダントツに力を発揮します。特に、ノートPCやサーバのコンソールのように、小さい画面で頑張らないといけない時なんかは、知っていると知らないとでは作業効率に雲泥の差が出ますよ、ホントに。</p>

<p>ということで便利技をいくつか書いてきましたが、要するに「java × eclipse の開発は便利で良かったなぁ」ということです。 vim でどんなに頑張っても、さすがにアレにはかなわないですね。<br />
</p>]]>

</content>
</entry>

<entry>
<title>MySQLのレプリ遅延の原因を調べる方法 </title>
<link rel="alternate" type="text/html" href="http://www.deftrash.com/blog/archives/2009/06/mysql_repli.html" />
<modified>2009-06-07T19:34:54Z</modified>
<issued>2009-06-07T18:57:53Z</issued>
<id>tag:www.deftrash.com,2009:/blog//3.520</id>
<created>2009-06-07T18:57:53Z</created>
<summary type="text/plain">MySQLのレプリ遅延の原因には、大きく分けて、転送遅延とSQL実行遅延の2つがあります。 転送遅延は、マスタでバイナリログに出力されたSQLクエリが、スレーブ...</summary>
<author>
<name>deftrash</name>
<url>http://www.deftrash.com/</url>
<email>dtadmin@deftrash.com</email>
</author>
<dc:subject>db</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.deftrash.com/blog/">
<![CDATA[<p>MySQLのレプリ遅延の原因には、大きく分けて、転送遅延とSQL実行遅延の2つがあります。</p>

<p>転送遅延は、マスタでバイナリログに出力されたSQLクエリが、スレーブのリレーログに出力されていないケース。SQL実行遅延は、SQLクエリがリレーログに出力されたが、実行が遅れているケース。レプリ遅延時の問題の切り分けとして、まずどちらのケースに該当しているかを判断する必要があります。</p>

<h3>転送遅延の判定方法</h3>

<p>マスタでの SHOW MASTER STATUS の結果と、対象スレーブでの SHOW SLAVE STATUS の結果を比較します。比較する項目は、以下のとおり。</p>

<table class="basic">
<col span="2" width="120" />
<thead>
<tr><th>比較元(MASTER)</th><th>比較先(SLAVE)</th><th>説明</th></tr>
</thead>
<tbody>
<tr><td>File</td><td>Master_Log_File</td><td>読取対象のバイナリログファイルの比較</td></tr>
<tr><td>Position</td><td>Read_Master_Log_Pos</td><td>読取完了した位置の比較</td></tr>
</tbody>
</table>

<p>この2項目で差がある場合、転送遅延が起こっている。マスタとスレーブのサーバ間に何らかの問題が起こっていると考えられるので、その線で本質的な問題を追っていくことになります。</p>

<h3>SQL実行遅延の判定方法</h3>

<p>転送に遅延がなかった場合、こちらの調査に移ります。</p>

<p>対象スレーブでの SHOW SLAVE STATUS から、次の項目同士を比較して判断します。</p>

<table class="basic">
<col span="2" width="120" />
<thead>
<tr><th>比較元</th><th>比較先</th><th>説明</th></tr>
</thead>
<tbody>
<tr><td>Master_Log_File</td><td>Relay_Master_Log_File</td><td>SQLスレッドが最後に実行したバイナリログ</td></tr>
<tr><td>Read_Master_Log_Pos</td><td>Exec_Master_Log_Pos</td><td>読取完了と実行完了の位置比較</td></tr>
</tbody>
</table>

<p>スレーブ側における、I/OスレッドとSQLスレッドの処理差から、つまりSQLの実行処理がどのくらい遅れているのかを調べることができます。SQL実行遅延の場合、スレーブの負荷が何らかの理由で高まっているケースなどが考えられます。マスタに比べてスレーブサーバの処理性能が劣るような場合、更新クエリが詰まることも考えられます。結構、厄介な話。</p>

<p>SQL実行遅延の場合、ほっときゃ直るケースも多かったりするのですが、転送遅延の場合は抜本的な対策が求められることが多いような気がします。両者とも各環境に応じたノウハウの積み上げから、最終判断をする必要はありますが。</p>

<p>ちなみに、そもそもの話として、レプリ遅延を監視するには、SHOW SLAVE STATUS のSeconds_Behind_Master という項目を見る方法が手っ取りばやいです。ただ、MySQL4.1.1以降から対応らしいので、MySQL4.0系では、<a href="http://d.hatena.ne.jp/ringmaster/20080411/1207908692">こちらで紹介されているような方法</a>は良いですね。</p>

<p>SHOW MASTER STATUS 、SHOW SLAVE STATUS で見られる項目の説明については、<a href="http://dev.mysql.com/doc/refman/4.1/ja/show-slave-status.html">本家</a>が一番わかりやすいと思います。</p>

<p>良いレプリ運用ライフを！<br />
</p>]]>

</content>
</entry>

<entry>
<title>iモード2.0に見るドコモ様の不敵な態度</title>
<link rel="alternate" type="text/html" href="http://www.deftrash.com/blog/archives/2009/05/i20.html" />
<modified>2009-05-25T17:10:39Z</modified>
<issued>2009-05-25T15:45:12Z</issued>
<id>tag:www.deftrash.com,2009:/blog//3.518</id>
<created>2009-05-25T15:45:12Z</created>
<summary type="text/plain">cookie や javascript  に対応したことで話題の iモードブラウザ2.0 ですが、一方で搭載機種が次々に発売停止や発売延期になっているようです。...</summary>
<author>
<name>deftrash</name>
<url>http://www.deftrash.com/</url>
<email>dtadmin@deftrash.com</email>
</author>
<dc:subject>mobile</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.deftrash.com/blog/">
<![CDATA[<p>cookie や javascript  に対応したことで話題の iモードブラウザ2.0 ですが、一方で搭載機種が次々に発売停止や発売延期になっているようです。</p>

<p><a href="http://www.nttdocomo.co.jp/info/notice/page/090522_01_m.html">「docomo PRIME series N-06A」の一時販売停止及び「docomo STYLE series N-08A」の販売延期のお知らせ</a><br />
<a href="http://www.nttdocomo.co.jp/info/notice/page/090525_01_m.html">「docomo PRIME series P-07A」の一時販売停止のお知らせ</a></p>

<p>伝え聞いたところでは、月末発売予定だった SH-06A と F-09A も販売延期になる模様。</p>

<p>発売日に販売停止という異例の事態が、さらにここまで拡大してくると、「あいかわらずＮ社のデスマ品質はハンパねぇなあー」とか、笑えなくなってくる。SH あたりが本当に販売延期となると、いよいよドコモ側の仕様の問題という見方が強まるんじゃないでしょうか。いずれの機種でも、同じ脆弱性が見つかっていると聞きますし。</p>

<p>そもそもこの問題自体、発売後にコンテンツプロバイダーからの脆弱性の指摘を受けて発覚したもの。（実際、ユーザーからの問い合わせなどは今のところなし）にもかかわらず、ドコモからコンテンツプロバイダー側に一切の説明はなし。いくつかの公式サイトに聞いたところでは、詳細情報は下りてきていないそう。</p>

<p>ドコモ様の不敵っぷりは、相変わらずです。</p>

<p>正直これだけのバージョンアップなので、今回問題となっている脆弱性だけで終わるとは思えず、今後ひきつづき見つかっていくでしょう。そこを共に乗り越えていくべきコンテンツ・プロバイダーとの距離感は、iモード2.0 普及の必要条件だと思うんですが。</p>

<p>機能的には可能性があると思っている iモード2.0 なので、ぜひキャリアとコンテンツプロバイダーが連携しながら、迅速な普及を行っていって欲しいですね。</p>]]>

</content>
</entry>

<entry>
<title>iモードブラウザ2.0の衝撃</title>
<link rel="alternate" type="text/html" href="http://www.deftrash.com/blog/archives/2009/05/imode20.html" />
<modified>2009-05-25T17:11:26Z</modified>
<issued>2009-05-24T14:37:39Z</issued>
<id>tag:www.deftrash.com,2009:/blog//3.517</id>
<created>2009-05-24T14:37:39Z</created>
<summary type="text/plain">docomoより、かねて噂になっていた iモードブラウザ2.0 の仕様が発表されました。 iPhone や BlackBerry 、そして Android 携帯...</summary>
<author>
<name>deftrash</name>
<url>http://www.deftrash.com/</url>
<email>dtadmin@deftrash.com</email>
</author>
<dc:subject>mobile</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://www.deftrash.com/blog/">
<![CDATA[<p>docomoより、かねて噂になっていた <em>iモードブラウザ2.0</em> の仕様が発表されました。</p>

<p>iPhone や BlackBerry 、そして Android 携帯といったスマートフォン群の躍進を、iモードも黙って見ているわけはなかった。スマートフォン・ブラウザに対抗すべく、かゆいところに手が届く機能性を備えた、エポック・メイキングなアップデート。コンテンツ・プロバイダーへの衝撃は大きいですね。</p>

<p><a href="http://www.nttdocomo.co.jp/service/imode/make/content/browser/browser2/new_function/index.html">作ろうiモード：iモードブラウザ2.0新機能一覧</a></p>

<p>新機能の詳細は、上記のドコモ公式サイトをご覧いただくとして、いくつか重要な機能をピックアップしていきます。</p>

<h3>FLVとWMA 動画対応</h3>

<p>Flash Video と Windows Media ファイルに対応。FLVのプログレッシブダウンロード、WMのストリーミング配信で最大10MBまで再生可能。これまで工夫をこらした配信で盛り上がってきた携帯動画の世界も、これで一気に敷居が低くなって裾野が広がりそう。</p>

<h3>Ajax 対応</h3>

<p>JavaScript に対応というのが機能の本質。しかし、XMLHttpRequest も使用可能で、広がりは無限大の機能拡張のため、あえて「Ajax 対応」と銘打ちました。</p>

<p>実際にどのくらい従来の Javascript と互換性があるかまでは未検証ですが、ECMA-262 3rd に準拠しているなら、prototype や jquery といったライブラリも、そのまま使えるかもしれません。（ブラウザキャッシュが500KBまでなので、必要部分のみに圧縮する必要はありそう）</p>

<h3>Cookie 対応</h3>

<p>これが一番びっくりした新機能。</p>

<p><a href="http://www.ietf.org/rfc/rfc2965.txt">RFC 2965</a> 準拠の最小実装で、PCブラウザよりも制限は厳しめですが、セッション管理などを行うなら十分な仕様を満たしています。そう、ついにクッキーを使ったセッション管理ができる！</p>

<p>アクセス解析、視聴率測定、行動ターゲティングなど、幅広い展開が期待できるところ。</p>

<p>今回の対応で、ようやくdocomoでもリファラーの取得ができるようになったことを踏まえ、このあたりは非常に活発化するんじゃないでしょうか。正確な解析ができるようになって ROI を明確にできるようになれば、不況で伸び悩んでいると言われるアフィリエイト、純広枠への出稿の増加や、SEO / SEM への投資を誘導できるかも。モバイル市場拡大につながる可能性から、この cookie 対応には驚かせられました。エポック・メイキング。</p>

<p><br />
さて、今後おそらく他社のブラウザもこの機能性に追従し、上回ってくることを考えれば、PCウェブと携帯ウェブの垣根がほとんど無くなる瞬間というのも、そう遠い未来の話ではなくなるのかもしれないなーと感じています。もちろんその間には、先に挙げたスマートフォンとの競争もあるし、コンテンツプロバイダーの盛衰もあって、にわかには想像しがたい話ですが、「iモード、次の10年」という括りでは夢物語ではないはず。そうなったとき、果たして強いのはPCポータル群か、モバイルコンテンツプロバイダーか、それとも。</p>

<p>一方、現在に目を移せば、これだけの機能追加が、果たして市場にスムーズに浸透するのかという懸念がありますね。iモードブラウザ1.0 をバージョンアップできるわけではない以上、2.0 対応にどれだけのコストを割いていくかの判断を、コンテンツプロバイダーは迫られるわけで。</p>

<p>そんな折に、こんなニュース。</p>

<p><a href="http://www.nttdocomo.co.jp/info/notice/page/090522_01_m.html">「docomo PRIME series N-06A」の一時販売停止及び「docomo STYLE series N-08A」の販売延期のお知らせ </a></p>

<p>ブラウザに脆弱性があったということらしいですが、Javascript と cookie に対応したら、そういったセキュリティ面での問題がナーバスでしょう。セキュリティ対応という、コンテンツプロバイダーに求められる技術レベルが高くなれば、それも 2.0 対応コンテンツ普及への足かせとなりうるわけです。この販売停止騒動で、衝撃をくらったコンテンツプロバイダーも多かったんじゃないでしょうか？</p>

<p><br />
だらだら書いてきましたが、Android 携帯をふくめ、今年夏以降のモバイル市場の変化には敏感でありたいですね。面白くなりそうです。（その前に、某バンクが夏を超えられるかという噂も聞きますが...）</p>]]>

</content>
</entry>

</feed>