2010年9月16日木曜日

[VPS]: 自宅サーバとVPSの運用コスト比較

前回の記事でも書いたとおり,EC2 Micro InstanceやさくらVPSなど,1000円前後のVPSサービスが最近熱い.
そこで,これだけ安くなってくると自宅サーバの電気代を下回るのではないかと思い,ざっくりコスト計算をしてみることにした.

前提など

シナリオとしては3通り.EC2はドル払いになるので為替変動の影響を受けるのと,転送量などの従量課金特性があるので今回は定額のさくらVPSを指標として利用した.
  • さくらVPSで運用
  • 自宅サーバ(デスクトップPC)で運用.初期投資は既存のものを使いまわすので無料
  • 自宅サーバ(ノートPC)で運用.初期投資は既存のものを使いまわすので無料

2010年9月12日日曜日

EC2 Micro InstanceとSmall Instanceのコスト比較

先日AmazonがEC2のMicro Instanceという新しいInstance Typeを発表した.
EC2というのはAmazonの提供しているレンタルサーバサービス(VPS)のようなもの.
Instance TypeというのはEC2用語でスペック別のサーバタイプに相当する.

今回はこれまで最小スペックだったSmallと新しく発表されたMicroの間でコスト比較をしてみる.


2010年8月13日金曜日

[Git]: gitサーバマシン上で行う初期設定

GitSubversionはもはやチーム開発に無くてはならないツールとして定着してきているが,Subversionがインストールしただけでとりあえず動くのに対し,Gitは初期設定をしてやらないとうまく動かない.
といってもそんなに面倒なわけではないので,とりあえず以下のコマンドを実行しておけば問題ない.

git config --global user.name "Your Name"
git config --global user.email youremail@example.com
git config --global core.editor emacs
git config --global color.ui true

特にcolor.uiの設定をするのとしないのではコンソールで作業をするときの効率が大きく違ってくる.
core.editorも設定しておかないと,debian系ディストリビューションだったりするとnanoが起動したりしてワケが分からなくなるので自分の使っているエディタに設定しておくべき.

2010年8月6日金曜日

[Qt]: Qt Creatorを使ったオブジェクト指向プログラミング授業資料

今更だが,去年にQtを使った授業資料を作成したことを思い出した.せっかくなのでここでURLを晒してみる.

オブジェクト指向プログラミング

当時1.0系が出た直後のQt Creatorを使ってやってみたのだが,かなり難航したのを覚えている.
僕は教育体験という形で授業資料を作ったのだが,Javaとは違い人によって動いたり動かなかったりしたのが大変だったなあ.
# なぜかARMの開発環境をインストールしている学生がいて,GCCがconflictしてたりなんてこともあった

そんなわけで,もう1年も経って情報は古いけど,見てみたい人はどうぞ.サポートはしません.
内容としては,初めてオブジェクト指向プログラミングをやる人のための授業なので,詳しい人は見る価値はあまり無いです.

[iPhone]: データ通信が不安定なときの対処法

iPhoneを使っているとたまに3Gデータ通信が不安定になり,完全に繋がらなくなる時がある.
特に大容量のデータ通信を続けて行なったときなんかに多い.
そういった時は「設定」メニューから「機内モード」を一時的にONにし,3Gが一時停止したのを確認したあとOFFにすることで,3G周りを再起動すると繋がるようになることが多い.

個人的な推測になるが,Softbank側で帯域制限か何かをやっているのではないかと思う.3Gを再起動することで,新しいIPを拾うので,それで回避できるのかも.
でもまあ,本気で帯域制限しようと思ったらSIM IDを使って帯域制限するだろうと思うので,この予想は外れてる気がしないでもない.

とりあえずの対症療法ということで.

2010年8月5日木曜日

[Mac]: 17インチMacBook Proでのノマドワーキング

17インチMacBook Pro Mid 2010を買ってからそれまでのコーディングライフが大きく変わった.
これまで自宅や仕事先など,大画面ディスプレイがないとがっつりコーディングするつもりになれなかったのが,このマシンのおかげでどこでも作業できるようになった.

いわゆる最近流行りのノマドワーキングへの一歩を踏み出して2ヶ月ほど経ったので,僕なりに考えた利点や使っているツールなどを書いていこうと思う.ツールなどはWebアプリケーション向けだが,ノマドワーキングの利点などは他の分野でも同じだと思う.

2010年7月29日木曜日

[iPhone][b-mobile]: b-mobile SIMをiPhone 3Gに刺してiPad Wifiを繋ぐ

今更ながらb-mobileSIM U300を買ってみた.目的はiPhone 3GをWifiテザリング端末として利用すること.

iPad Wifiは自炊した本を読んだりするのには非常に便利なのだが,ちょっと大きい画面でTwitterを見たり,Evernoteのノート更新をしたいと思ったときにいちいちWifiのあるところまで行くのがなかなか面倒だったりする.
と言ってもiPad 3Gの為だけに新しくもう一回線契約するのも固定費がかさむ.現状iPad Wifiをインターネットに繋ぐにはWifi経由でインターネットに接続するしか無いので,こちらの記事にあるようなモバイルルータという機器を使う事になる.

しかし,このモバイルルータが実は結構高い.大体3万円〜5万円くらいするので,2年で減価償却すると考えても月1500円程度の固定費が発生するのと同じになる.
モバイルルータとは別に3G網の回線契約も必要になるので,このコストはちょっと受け入れ難い.

そんな時,手元にiPhone 3Gがあれば,これをモバイルルータとして使う事ができるので,その方法をまとめてみた.
接続イメージは下図の様な形になる.


2010年7月26日月曜日

[Mac OS X]: Kasperskyが重くて色々と不具合が起きる時には

最近Mac OS X用のアンチウイルスソフトとしてKaspersky Anti-Virus (Mac OS X)を使い始めたのだが,どうもこいつがお行儀が悪い.
具体的には,常にCPUの1コアを占有して100%の負荷がかかった状態になり,バッテリをバカ食いしてしまうというもの.
もちろん,CPUを1コア占有しているので,他の処理もそれに引っ張られて重くなってしまっている.

最初は定期的に行われる全スキャンか何かが原因かと思ったのだが,数日たっても一向に終わらないので何かおかしいと思っていた.
その内SpacesやExposeの挙動までおかしくなり始め,にっちもさっちも行かなくなってしまった.
そんな時の対処法をまとめてみた.

[Mac OS X]: Lyrics Master - iTunesの曲に歌詞を自動設定し,iPhone/iPodで閲覧する

仕事にプライベートに,音楽を聴きながら何か作業をすることは非常に多いが,たまにはじっくり歌詞を見ながら曲を聴きたいこともある.特に,iPhoneやiPodに歌詞を登録しておいて,移動中などのスキマ時間に読みたいということはあるだろう.

そんな時,うたまっぷ歌ネットなどのサービスを使って歌詞を調べ,一つ一つ設定していくということはできなくもない.
ただ,歌詞サイトは大体コピペできないような設定がされているので,これが実に面倒だったりする.

これを自動化してくれるソフトがLyrics Masterだ.

Lyrics Masterを起動した状態でiTunesの曲を流していれば,自動的に歌詞を収集,登録してくれる.

2010年7月25日日曜日

[PHP][Symfony][Doctrine]: DoctrineでIDをキーにレコードを取り出す

いくつかの案件でSymfony 1.4+Doctrineを使ってみて大体勝手が分かってきたので,メモ.

Doctrineで以下のテーブルがあったとする.

BlogPost:
columns:
title:
type: string(255)
body:
type: string()
この場合,自動的にidというフィールドが追加され,作られるテーブルは以下の通りになる(MySQL使用時).

mysql> show fields from blog_post;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| title | varchar(255) | YES | | NULL | |
| body | text | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
ここで,IDを指定して1レコードだけ引っ張ってくる方法にはいくつかある.


$q = Doctrine_Query::create()
->from('BlogPost bp')
->where('bp.id = ?', $id);
$records = $q->execute();
if(count($records) > 0){
$record = $records[0];
}


$q = Doctrine_Query::create()
->from('BlogPost bp')
->where('bp.id = ?', $id);
$record = $q->fetchOne();


$record = Doctrine::getTable('BlogPost')->find($id);

最初の方法ではlimit文が付かないので,その分遅くなる.後の二つは発行されるSQLも同じ.
最後の方法は非常に手軽なので,覚えておくと楽.

2010年7月21日水曜日

[プログラミング]: 開発現場における怖い話



こんなのを教えてもらった.

自分は幸いこういったどうしようもない開発環境で働かされたことはないが,実際にこういう環境で働いている人と話したことはある.
チーム開発ではある程度全体の規約に従ったコーディングをしないといけないのは分かるけど,どう見ても非効率な規約があったりするのも事実.

エディタとかまで制限されるときついよね.

2010年7月19日月曜日

[PHP]: mb_convert_kana()がうまく動かないとき

PHPにはmb_convert_kana()という英数時,スペースの半角文字と全角文字を変換する関数がある.
この関数は日本語を処理するときに非常に便利な関数なのだが,どうもうまく動かない時があるようだ.

そんな時は
mb_convert_kana($str, 'as');
としていたのを
mb_convert_kana($str, 'as', 'utf-8');
としてやると上手くいくことがある.もちろん第三引数の文字コードは環境に応じて変える必要がある.

恐らく,PHPの文字コードauto_detectが上手く動いていないのだと思うが,自分が開発している中では結構この不具合の発生率は高い気がする.

mb_convert_kana()周りで不具合があったときは確認してみるといいと思う.

2010年2月22日月曜日

[PHP][Symfony]: Symfonyプロジェクト内にSymfonyライブラリを含める

require_once dirname(__FILE__).'/../lib/vendor/symfony/autoload/sfCoreAutoload.class.php';
多数のSymfonyプロジェクトを扱っていて困るのは、既にリリースして安定稼働中のSymfonyプロジェクトと、新規で開発するSymfonyのバージョンが異なるというケースだ。
一応Symfony公式ページではupdate方法も書かれているが、安定稼働中の本番サイトのバージョンアップはやはりリスクが大きい。
なので、バージョンの違うSymfonyを共存させる方法を書いておく。

基本的にはSymfonyのライブラリディレクトリを丸ごとプロジェクトディレクトリ内(SF_ROOT以下のどこか)にコピーし、コンフィグファイルにそのディレクトリを指定してやれば良い。

古いバージョンのSymfonyだと、config/config.phpというファイルがあり、ここにSymfonyのパスを指定するようになっている。これを「dirname(__FILE__)."/../pear/symfony"」などに変えてやれば良い。

$ cat config/config.php
<?php

// symfony directories
$sf_symfony_lib_dir = '/usr/local/lib/php/symfony';
$sf_symfony_data_dir = '/usr/local/lib/php/data/symfony';
最近のバージョンの場合は、config/ProjectConfiguration.class.phpというファイルに設定があるので、最初にあるinclude行を

require_once dirname(__FILE__).'/../lib/vendor/symfony/autoload/sfCoreAutoload.class.php';

といった形で書きかえる。これでプロジェクトを丸ごと他のサーバに移動したときなども、問題なくSymfonyごと移行することができる。

[Windows Vista]: Windows Vistaでハイパーターミナルを使う

仕事でとあるシリアルデバイスを叩くことになったのだが、手元のVistaにハイパーターミナルが入っていなかった。どうやらVistaには標準でハイパーターミナルはインストールされていないらしい。
他のシリアル通信ソフト(SerialDebuggerなど)を使えば良いのだが、デバイスのマニュアルにはハイパーターミナルを使った利用方法しか書いていなかったので、一応ハイパーターミナルでいじるほうが無難と思い、調べてみた。


どうやらWindows XPからhypertrm.exeとhypertrm.dllを持ってくれば動くらしい。hypertrm.exeはC:\Program Files\Windows NTにあり、hypertrm.dllはC:\WINDOWS\system32にある。
これらの二つのファイルをローカルの同じフォルダにコピーしてくれば動作する。ただ、新しい接続のプロファイルを設定する際のアイコンが以下のように全て白くなってしまう。


別に実害はないのでこのまま利用しているが、もしかすると他にも悪影響があるかもしれない。
ちなみに、普通にシリアルターミナルやファイルの送受信を使っている範囲では問題は出なかった。


2010年2月19日金曜日

[VMWare]: VMWare Playerを使っていてもメモリサイズを変更する方法

前回の記事に関連して,VMWare Playerを使っているときの仮想マシン構成の変え方について.

基本的にVMWareはMacであれWindowsであれLinuxであれ,拡張子vmxというファイルに設定が書かれている.vmxファイルはただのテキストファイルなので,テキストエディタで編集することができる.変更可能な項目については以下のサイトが詳しい
仮想マシン構成.vmx - VMware まとめ Wiki
よく変更する項目としては,以下の二種類くらいだろう
  • memsize: メモリサイズ.MB単位で記述する
  • *.present: デバイスを有効にするかどうか.TRUEで有効,FALSEで無効
とりあえずこれだけ覚えておけばVMを他に持って行ったときも安心だと思う.

2010年2月18日木曜日

[VMWare]: VMWare FusionのVMイメージはWindowsのVMWare Serverでは動かない

手元のMacBook AirのVMWare FusionでWindows Vistaを走らせ,その上でVisual Studioを走らせて開発していたのだが,いかんせんMacBook Airではパワー不足で開発に支障が出るほどの遅さ(主にメモリサイズが原因)のため,余っていたWindowsマシンにVMをコピーして走らせることにした.

その時のmemo
※:最終的にはVMWare Serverでは動かなかったため,VMWare Playerをインストールして動かした.

コピー元環境
  • MacBook Air
  • VMWare Fusion 3
  • VM: Windows Vistaの載った合計25GB程度のイメージ
コピー先環境
  • Thinkpad X61 tablet
  • VMWare Server 2.0.2

 単純にMacBook AirとThinkpadをLANで接続し,ホームディレクトリの「Virtual Machines」ディレクトリ内にあるVMイメージをThinkpadへコピーし,VMWare Server側でAddしてみたところ,vmware-hostdが強制終了してしまった.何度か再起動して試してみても,毎回VMを読み込むところで落ちる.
 調べてみたところ,どうやらFusionの採用しているvmdkのバージョンにVMWare Serverが対応していないのが原因のようだ


 一応VMWare Fusion側でvmdkをダウングレードしてからVMWare Serverに持ってくれば起動できるようだが,25Gのイメージをまた処理してコピーし直す時間が惜しかったので,VMWare Playerを試してみた.バージョンは3.0

VMWare Player

VMWare Playerは仮想マシンの構成変更ができないのでやや不便なのだが,一応vmxファイルを直接編集すればメモリ量の変更などの最低限の修正は可能.インストール時にVMWare Serverをアンインストールさせられるので注意.

インストール後は,vmxファイルがVMWare Playerに関連づけられるので,ダブルクリックすればVMが起動した.
こちらはきちんと最新のvmdkに対応しているようで,問題なく起動した.

2010年2月9日火曜日

[Linux]: Linuxでコマンドラインからテープバックアップ

昔書いたテープバックアップのスクリプト.PHPだけど.
商用のバックアップソフトなどを使わないフリーソフトのみの構成.

  1. mtコマンドのためにmt-stパッケージをインストールする
  2. テープデバイスのデバイスファイルを確認する(ここでは/dev/nst0)
  3. mt -f /dev/nst0 statしてきちんとデバイス情報が取れるかを確認
  4. 以下のスクリプトを実行.TAPE_DEV, BACKUP_DIRは必要に応じて書き換える

#!/usr/local/bin/php
<?php
define('MT', '/bin/mt');
define('TAPE_DEV', '/dev/nst0');
define('BACKUP_DIR', '/home');

$descriptorspec = array(
0 => array("pipe", "r"), // stdin is a pipe that the child will read from
1 => array("pipe", "w"), // stdout is a pipe that the child will write to
);

$cwd = BACKUP_DIR;
$process = proc_open(MT.' -f '.TAPE_DEV.' stat', $descriptorspec, $pipes, $cwd);
$onlineFlag = false;

if (is_resource($process)) {
while($buff = fgets($pipes[1], 4096)){
if(strpos($buff, "ONLINE") !== false){
$onlineFlag = true;
}
}

if($onlineFlag){
ini_set('max_execution_time', 0);
system("tar zcf ".TAPE_DEV." ".BACKUP_DIR);
system(MT." -f ".TAPE_DEV.' eject');
}

$return_value = proc_close($process);

echo "command returned $return_value\n";
}
?>

ちなみにこのスクリプトではnst0を対象としているので,書き込んだ後テープは自動で巻き戻されない(no rewindのn).
毎回巻き戻しをしたければ,st0を対象にすれば良い.

2010年2月5日金曜日

標準化とガラパゴス

絵文字が開いてしまった「パンドラの箱」第7回--そして舞台はダブリンから東京へ

携帯/モバイル端末における絵文字の標準化についての話.

元々この種の利用は日本が先んじており,議論されている標準化のベースも日本の携帯電話の影響を非常に強く受けている.
なのに,標準化に出てきている企業はGoogle/Apple,EUが中心という何ともガラパゴス日本らしい話.

ものづくりの強い日本と言われていたのが中国などの台頭によって弱まってきた昨今,僕はソフトウェア・情報産業にもっと力を入れていかなければ行けないと思っている(自分がソフトウェア屋なこともあるが).
ハードウェアは様々な仮想化・抽象化・標準化により,どこが作っても大差ないという状況になってきてしまっている.現在市場に出回っているノートPCやデスクトップPCは仕様だけ見ればほとんど同じような製品であり,実際にその中身も台湾のOEM製品で組み立てられており,そこに日本の技術力を見ることはできない.
唯一例外と言えば,モバイルに代表される特殊な基盤を使わないと行けない小型端末なのだが,日本以外ではB5サイズクラスの小型PCに対する需要は低く,悪い意味でガラパゴス化していってしまっているように感じる.

日本国内の技術を元にした標準化が進むことによって,国内で作っていた製品をそのまま海外で販売する事が容易になるし,ソフトウェアの修正も最小限で済む.良いことづくしに見えるのだが,国内キャリアはそうは思っていないようで,相変わらず国内の少ないパイを奪い合っている.
# 他にも日本発の技術の標準化という看板が付くので,国際的な発言権の様なものが得られるかもしれない

あ,でもキャリアとしては端末自体を作っているわけではないから標準化に取り組む意義は薄いのかも知れない.でも絵文字の標準を決めているのはキャリア側だからキャリアがこういったことに取り組むしか無いと思う.うむむ

ちょっと怖いのは,国内キャリアがこういった国際標準化を無視し続けていつの間にか標準が決まり,日本以外の各国が日本と違う標準で製品を作り続けたとする.そして,いつか必ず日本もグローバル化の波に呑まれるその時,日本だけが全然違う物を使っていて波に乗り遅れてしまうというシナリオだ.
波に乗り遅れてしまえばその後は後追いとなるしかないため,主導権を握ることは難しいだろう.その内国内キャリアも外資に乗っ取られてしまう,なんてこともあるかも知れない.

主導権を取れるはずなのに取りに行かない,というこの状況は危険なものなのではないだろうか?

2010年2月2日火曜日

ホリエモンのメルマガ「堀江貴文のブログでは言えない話」を購読してみた

ホリエモンのメルマガ「堀江貴文のブログでは言えない話」を購読してみた.

第一回の内容は割と穏やかで,朝青龍関連の話題と近況報告,あとは本人が逮捕されたときのことについて書く獄中記の連載第一回という内容だった.
可もなく不可もなくといった内容で,今後はとりあえず様子見と言ったところ.

まぐまぐのページではサンプル号として第一回配信の内容が見られるし,1ヶ月は購読無料なので興味のある人は購読してみては?

[書籍]: フリー~〈無料〉からお金を生みだす新戦略



最近あちこちで平積みされている本.著者はかの有名なAmazonのロングテール戦略についての本を書いたクリス・アンダーソン.内容についてはAmazonのレビューなどを参考にして欲しい.

この本では「稀少」と「潤沢」についての話が書かれており,具体的な過去の例などを通じてこれまで稀少だった物が潤沢になると世の中はどうなっていくのかということについて言及している.
「稀少」なモノに人はお金を払うが,「潤沢」なモノは無料(もしくは無視できるほど安い価格)で提供されるため,それ自体で経済的利益を得ることは難しい.
しかし,潤沢なモノそれ自体で稼がなくても,それによって得られる非経済的な価値(評価と注目)をうまく使えば,それを元に稀少なモノを提供することでお金を稼ぐことはできる,という話.
例えば,ニコ動なんかで趣味で高品質な作品をUPしている人の所に出版社や起業が書籍化や広告コンテンツの作成を依頼するなんていうモデルもこれに含まれるのではないかと思った.

しかし,この本の後半にも書かれていたが,リーマンショック以前の経済状況であればそうした非経済的な価値(例えばユーザー数やアクセス数など)を集めていれば,どこかの起業(西海岸ならGoogle)がその内買収してくれるという回収モデルが確立していたが,現在ではなかなかそうはいかず,早い段階で経済的な利益を得る必要があるという問題が出てきている.
この問題については現在進行中なのでどうなっていくのか分からないが,とにかく話題性を集めてexitする,という戦略はやりにくくなったように思える.

何にせよ,この本はWeb界隈のビジネスに興味がある人,特にこれから自分でサービスを立ち上げてみようと少しでも考えている人にはお勧めだと思う.既存のビジネスモデル(海外なのでそのまま国内では使えないと思うが)の具体例などもあるため,参考になる.
本が分厚くて読む気が起きず,2週間ほど詰んでいたのだが単に紙が分厚いだけだった(350ページくらい)ので,1〜2日もあれば読み切れると思うのでぜひ.