2008年10月31日金曜日

岐路

 何かサービスを始めようと思うと、データセンタの利用等についても考えなければなりません。Amazon S3 サービスは、選択肢のひとつですが、日本では転送速度が遅いとか、使い勝手にもう一工夫ほしいとか、いろいろあります。Amazon のブログによると、Akamai のようなCDNサービスを始める計画らしく、これが実現すると、イノベーションが加速する事は間違いなさそうです。

 S3サービスを利用したサービスで、1人当たり1回につき600kb、30 request を20回行い、1日に100人が利用したと仮定すると、1Gあたり 0.15$ なので、一ヶ月に 0.0006 * 20 * 100 * 31 days * 0.15 $ * 110 yen = 613.8 円 の転送料と、30 * 20 * 100 * 31 / 10000 * 0.01 $ * 110 yen = 204.6 円 のリクエスト料になります。もし、転送速度が一定で使い物になるならば、ものすごい事です。

 一方で、マイクロソフトは Software + Service を掲げ、既存のビジネスパートナーと協力して、サービス志向型の業態を創り上げましょう!と真剣に提案しています。つい先日発表されたWindows Asureは、その解答のうちのひとつですが、その記事の中に Amazon と協調してサービスを提供するとあります。

 イノベーションが受け入れられる要素として、「移行コストが低い事」というのがあり、ブラウザの世界では、ActiveXコントローラは失敗し、生のブラウザだけで動作する JavaScript が主流になってしまいました。Write Once Run AnyWhere の標語と共に席巻した Java の Applet さえ主流に成り得ずに、Sun は、せめて Flash の地位ぐらいは取ろうと Java の軽量化に励んでいます。

 ここで熟考しなければならないのは、.Net である Silverlight, Moonlight の立ち位置です。マイクロソフトの力が低下してきているとは言え、一般ユーザには、まだウィンドウズが主流です。OSのシェアを握っている間に、.Net を核としたサービスを上記のようなデータセンターと共に構築できるならば、まだまだ捨てたもんじゃないかもしれない。

 Google Gears の狙いのひとつにトラフィック量の低減というのがあると思いますが、.Net ならば、もっとスマートにトラフィック量の低減を実現できるかもしれません。そうすると、サービスを提供するために必要な費用を更に下げる事ができます。運用コストが下がるならば、サービスを提供する側もそちらに流れてみよう・・・という潮流が起これば、.Net を利用するための移行コストが下がるという事を意味します。

 もうひとつ無視できない潮流に、アナログ放送の空き 130Mhz が開放され、次世代通信規格と共にモバイル革命が起こる事があります。実は、HDDからSSDと同じように、パソコンからモバイル機器へのパラダイムシフトが始まっているのではないか?と感じるのですが、モバイルに焦点を当てた場合に .Net はどうなんだろう?という疑問も残ります。

 今、難しい選択の岐路に立たされているような気がしてなりません。

boost::asio syslog daemon service for windows

なんだかんだと、デバッグでよく利用するので、思いきってウィンドウズのサービスにしました。



単純に UDP で、メッセージを受け取って書き出すだけなので、syslog に則ったフォーマットである必要も無いです。boost::asio::io_service はクライアント側で使うには重いぞなもし…って場合は、以下のような感じでいけると思います。


void udp_send( const char* buf, size_t len ) {
WSAData wsaData;

SOCKET sock;
struct sockaddr_in addr;

if( !WSAStartup(MAKEWORD(2,0), &wsaData) ) {
sock = socket(AF_INET, SOCK_DGRAM, 0);
if( sock != INVALID_SOCKET ) {
addr.sin_family = AF_INET;
addr.sin_port = htons(514);
addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
sendto(sock, buf, len, 0, (struct sockaddr *)&addr, sizeof(addr));
closesocket(sock);
}
WSACleanup();
}
}

2008年10月30日木曜日

錯覚

 なんか最近、情報化社会に関する思考の流れが皆同じになってきて、語られる内容に統一性が出てきたような錯覚を覚えます。流れが見えるような気がして怖いです。ここから更に一歩抜け出すのは容易ならぬ事ですね・・・。

boost::asio syslog

以前cppllにポストしたものですが、boost-1.36.0用に焼き直したものを貼っときます。

// syslog daemon sample
#include <boost/asio.hpp>
#include <boost/bind.hpp>

class syslog_daemon {
public:
syslog_daemon(
boost::asio::io_service& io_service,
short port = 514
) :
io_service_(io_service),
socket_(
io_service,
boost::asio::ip::udp::endpoint(boost::asio::ip::udp::v4(), port)
)
{
invoke_recieve();
}

void handle_receive_from(
const boost::system::error_code& error,
size_t bytes_recvd
) {
if( error ) {
} else {
if( bytes_recvd > 0 ) {
std::string log;
log.assign( &data_[0], &data_[bytes_recvd] );
std::cout << log << std::endl;
// do logging
}
invoke_recieve();
}
}

private:
void invoke_recieve() {
socket_.async_receive_from(
boost::asio::buffer( data_, buffer_length ),
sender_endpoint_,
boost::bind(
&syslog_daemon::handle_receive_from,
this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred
)
);
}

private:
enum { buffer_length = 4096, };
char data_[ buffer_length ];
boost::asio::io_service& io_service_;
boost::asio::ip::udp::socket socket_;
boost::asio::ip::udp::endpoint sender_endpoint_;
};

int main() {
try {
boost::asio::io_service io_service;
syslog_daemon sd( io_service );
io_service.run();
} catch( std::exception& e ) {
std::cout << e.what() << std::endl;
}
return 0;
}



// syslog send sample
#include <string>
#include <boost/asio.hpp>
#include <boost/date_time/date_facet.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

//! syslog facility code
enum syslog_facility {
kernel_messages = 0,
user_level_messages = 1,
mail_system_messages = 2,
system_daemons = 3,
security_authorization_messages = 4,
messages_generated_internally_by_syslogd = 5,
line_printer_subsystem = 6,
network_news_subsystem = 7,
subsystem = 8,
clock_daemon = 9,
security_authorization_messages2 = 10,
ftp_daemon = 11,
ntp_daemon = 12,
log_audit = 13,
log_alert = 14,
clock_daemon2 = 15,
local_use0 = 16,
local_use1 = 17,
local_use2 = 18,
local_use3 = 19,
local_use4 = 20,
local_use5 = 21,
local_use6 = 22,
local_use7 = 23,
};

//! syslog severity code
enum syslog_severity {
emergency = 0, // system is unusable
alert = 1, // action must be taken immediately
critical = 2, // critical conditions
error = 3, // error conditions
warning = 4, // warning conditions
notice = 5, // normal but significant condition
information = 6, // informational messages
debug = 7, // debug-level messages
};

//! get syslog PRI part
/*!
@retval syslog PRI part string.
*/
std::string get_pri_part(
syslog_facility facility, //!< [in] facility code
syslog_severity severity //!< [in] severity code
) {
std::ostringstream oss;
oss << "<" << (facility * 8 + severity) << ">";
return oss.str();
}

//! get syslog HEAD part
/*!
@retval syslog HEAD part
*/
std::string get_head_part(
const boost::posix_time::ptime& ptime,
const boost::asio::ip::address_v4& address
) {
typedef boost::date_time::time_facet<boost::posix_time::ptime, char> ldt_facet;
ldt_facet* facet = new ldt_facet("%b %d %H:%M:%S");
std::ostringstream oss;
oss.imbue( std::locale( std::locale::classic(), facet ) );
oss << ptime << " " << address << " ";
return oss.str();
}

//! get syslog MSG part
/*!
@attention
@retval syslog MSG part
*/
std::string get_msg_part(
const std::string& tag, //!< [in] tag
const std::string& msg //!< [in] message
) {
BOOST_ASSERT( tag.size() <= 32 );
std::ostringstream oss;
oss << tag << ":" << msg;
return oss.str();
}

class syslog_transfer {
public:
syslog_transfer(
boost::asio::io_service& io_service ) :
io_service_(io_service),
resolver_(io_service),
socket_(
io_service,
boost::asio::ip::udp::endpoint( boost::asio::ip::udp::v4(), 0)
)
{
}

void connect( const std::string& host_name, const std::string& port ) {
boost::asio::ip::udp::resolver::query query( boost::asio::ip::udp::v4(), host_name.c_str(), port.c_str() );
iter_ = resolver_.resolve( query );
}

void transfer( const std::string& log ) {
boost::asio::ip::udp::resolver::iterator iter = iter_;
socket_.send_to( boost::asio::buffer( log, log.size() ), *iter );
}

private:
boost::asio::io_service& io_service_;
boost::asio::ip::udp::resolver resolver_;
boost::asio::ip::udp::resolver::iterator iter_;
boost::asio::ip::udp::socket socket_;
};

#include <sstream>

int main() {
std::ostringstream oss;
boost::posix_time::ptime ptime = boost::posix_time::second_clock::local_time();
boost::asio::ip::address_v4 addr = boost::asio::ip::address_v4::from_string( "192.168.1.1" );
oss << get_pri_part( log_audit, notice ) << get_head_part( ptime, addr )
<< get_msg_part( "tag", "message" );
boost::asio::io_service io_service;
syslog_transfer st( io_service );
try {
st.connect( "localhost", "514" );
st.transfer( oss.str() );
} catch( std::exception& e ) {
std::cerr << e.what() << std::endl;
}
return 0;
}

ファイルの追加は、どこぞにアップしてリンクするしかないのかな?

追記:いまどき void main は無いだろ・・・と、from_string の部分のバグを修正しました。

2008年10月29日水曜日

YahooBBのDHCPアドレス

 高木さんのブログにIPV4においてもプロバイダのTCP/IPアドレスがランダムに変化しているかどうか調べて欲しいと書いてあったので、自分の環境で不真面目ながらも、IPアドレスを追跡してみました。結論から言うと、「ルータ・モデムをリセットしない限り、IPアドレスは変化しない」でした。
 2008/07/27 0:01:00 から 2008/8/18 12:16:00 までは、A.B.C.114/22 (7回確認)
この後、ノートパソコンが故障したので、モデムを一旦リセットしている。
2008/10/13 から 2008/10/29 0:29:00 まで A.B.C.76/22 (4回確認)
のままです。
 タイトルにもある通り、YahooBB で ADSL 12M を契約しています。

 個人情報特定を気にするならば、モデムは定期的にリセットした方が良いのかもしれません。

2008年10月27日月曜日

古いノートにUbuntu

 今では、どうしようもなく遅くて使い物にならないノートパソコンに Ubuntu を入れてみました。ソニー製のPCG-SR9M/K というノートです。このノート、PCMCIAカードでCD-ROMを接続しなければならないので、普通にLinuxをインストールしようと思っても、うまくいきません。実際、今まで何かとトライしてきましたが、失敗続きでした。
 今回、試みた方法は、Ubuntu-Server 版をインストールするという方法です。インストーラを起動してから、初期の入力画面が現れず、反応しなくなったので、CDをイジェクトして、再度CDを挿入しました。しかし、この操作は不要かもしれません。こうすると、コマンドプロンプト環境ながら、Ubuntuがインストールできます。ちなみに、LANはUSBに接続するタイプのものを最初から接続しながらインストールしました。
 次に、デスクトップ環境の構築に入ります。

$ sudo apt-get install ubuntu-desktop
$ sudo apt-get install ubuntu-desktop-ja

と、タイプして再起動するだけです。
 まぁ、今時のリッチなLinux環境は、それなりにマシン・スペックが必要なので、快適か?と問われれば、どうなんでしょう…って所で落ち着いてしまうのですが…。

味噌

 数年前に四国へキャンプ旅行した時に出会った味噌の話をします。
料理に使う味噌を物色しているときに、どうせなら地元産の味噌を使おうという事でマルヤス味噌をチョイスしました。この味噌は、麦味噌で、大麦から作られているので、大豆アレルギー・小麦アレルギーでも食べられます。キャンプの時に食べた味噌の味が忘れられなくて、家に帰ってからもネットで調べて取り寄せ、今でも愛用しています。
 お勧めの食べ方は、
  • マヨネーズと味噌を半分づつ混ぜて、キュウリやラディッシュなど野菜スティックにつける
  • 豚のロース肉に、この味噌を塗りラップに包んで冷凍する(もちろん焼いて食う)
  • 高知の食材である鰹節でタップリ出汁をとり、味噌汁にする
  • 豚のロース肉と同様に、白身魚に塗って冷凍
というような感じです。あと、我が家では、自家製味噌とブレンドして使ったりしています。
 知り合いに味噌を製造している方がいて、その方の話によると、店頭で売っている袋に入った味噌は、アルコールを加えるなどして、菌を殺し醗酵を止めるそうです。ところが、この味噌、通販では、麹も生きたまま蔵出し味噌を送ってくれます。現代人には酵素が不足しているそうで、食を見直してみるのも良いと思うのですが、いかがでしょうか?

 追伸:残念ながら広告料は入りません:-)。完全、口コミな記事です。

 

2008年10月25日土曜日

行動ターゲッティング

 最近、ユーザの行動を追跡して個人の趣向を把握し、超B2Cビジネスに繋げようという事に関する記事が多くなっています。これは、プライバシーの問題が絡んでくるためで、「Aさんは、こんな趣向の人ですよ」というような有難くない情報が、ビジネスを行う上で価値ある情報として流通してしまうからです。
 これを逆手に取れないだろうか?と考えてみたアイデアを発表してみようと思います。

HTTPのリクエストには、
Host: grayhole.blogspot.com
UserAgent:....

などと、今でも多様な情報が付随しています。そこで、ブラウザに、

自分が興味を持っている分野
X-User-Interest: 'Kayak', 'Outdoor', 'IT', 'Programing Language'

現在、ブラウジングしている目的
X-Browsing-Purpose: 'ぽにょ'

というヘッダ情報を付加してみるというのはどうでしょうか?X-Browsing-Purpose なんかは、検索入力項目と連動させても、面白いかもしれません。X-User-Interest は、Ontologyを使って表現すると、売上に直結する情報だけに、一挙に、この分野が発展するかもしれません。

 公に採用されれば、行動ターゲッティングというプライバシーの問題も緩和されるかもしれません。問題は、これをユーザが設定するかどうか?という部分が大きいと思います。

書くこと

 次は、あれについて書こう、これについて書こう!と、考えていても、いざ書く時には、何について書こうとしていたのか忘れていたりします。歳かな?

2008年10月24日金曜日

ひさびさにJavaを弄った

 私のJavaの知識はJDK1.3 前後の知識で止まっています。久しぶりに、やや本格的にJavaを書こうとすると、コード中に @Override とか @SuppressWarnings とかが出てきて面食らってしまいました。
@Override によってオーバーライドのタイプミスを防げるらしい。
@SuppressWarnings は、C++で言うところの #pragma で警告の抑止ってところらしい。
JavaGenericsが面白そうで、java.nio.ByteBuffer で利用してみようかと構想したけど、型に応じたメソッドが用意されていて、単純にキャストして良いものかどうかが、判断できずに諦めました。
思わず sizeof 演算子を使おうとして考え込むなど、慣れるまでには時間がかかりそうです…。

2008年10月23日木曜日

Rails ActiveRecord 備忘録

モデル User と Hoge があり、Hoge から、多対1の関係で User にリレーションを2箇所設定したい場合、はて?どうしたものか?となった。


class User < ActiveRecord::Base
has_many :Hoges
...
end

class Hoge < ActiveRecord::Base
belongs_to :user, :foreign_key => 'user_id'
belongs_to :manager, :class_name => 'User', :foreign_key => 'manager_id'
...
end

class HogesController < ApplicationController
active_scaffold :hoge do |config|
config.columns = [..., :user, :manager, ...]
config.columns[:user].form_ui = :select
config.columns[:manager].form_ui = :select
...
end
...
end
keyword: rails active_record table relation same column

2008年10月22日水曜日

孤立

しかし、ほんとBloggerって孤立してるよな・・・。違った意味で感心する。

Software and Service

 マイクロソフトは、Software and Service を提唱しています。言い分は、よくわかります。今、ソフトウェアの価値は、どんどん低下し、ほとんど価値が無くなってしまいました。プログラマはプログラムを組んでお金をいただく職業です。そこで、何かプログラムを創出しようと思うと費用がかかるので、Softwareは無料には成り得ないはずだ!という事だと理解しています。
 しかし、ロングテールで開発が成立するようなメジャーな分野(例えばエディタ)では、無料でも成立します。また、広告を行うためのプラットフォームとして無料でソフトウェアを配布する場合には、無料で成立しなくても無料を強いられます。私の頭では、どう考えても Software and Service ではなくて、Software for Service という時代になっていくという結論にしか至りません。
 そうすると、オープンソースとか、そんな事は関係なく、自社の価値を高めるための秘密のSoftwareというのが流行するのではないか?と思っています。
 聖人君子は除いて、一般人の感覚では、人に施す事ができるのは自分に施す余裕があるからです。一般人にも施しを受けるからには聖人君子たらんを強要するGPLは、正直言って嫌いです。そのGPLがバージョン3では、インターネット上でコンテンツを公開するために利用しても公開を強要するという項目が話題になっていましたが、秘密のSoftwareという時代に対する措置という事なのかもしれません。
 ブラウザに変わって .Net が主流になる時代は来るのでしょうか?

2008年10月21日火曜日

Railsについて思うこと

 実はRuby On Rails に(ゾッコン)はまりました。やってみて思った事を書きます。

  1. 生産性は高く素晴らしい!しかし、レールが敷かれている限りにおいては・・・
  2. 安定稼動しないのでアプリケーションとして提供するには、不満
  3. 革新的な技術がどんどん導入されて楽しいが、バージョンアップに伴うアプリケーションメンテナンスが大変
 active_scaffold と JasperReports の組み合わせで、型どおりのアプリケーションを作成するのは速く、生産性が高いわけですが、ちょっと細かい事をしようと思うと、とたんに難しくなります。みんなで新しいレールを敷設してまわれば楽しいわけですが、レールを外れた場合に生産性が高いか?と問われれば、極めて疑問を感じます。

 社内の日報管理システムをRoRで組みました。実際に長期稼動をしてみると、安定しているのですが、別の環境の別システムでは、システムが止まるので、1日1回に cron でリスタートをかけるという選択をしました。サービスとして選択するのは、まだ厳しいのではないかと感じます。

 Rubyの環境がアップデートされた場合に、rails が急に動作しなくなるといった事があります。また、railsのバージョンが上がると、後方互換性は捨てられていくわけですが、古いバージョンには脆弱性というものが付き物です。古いバージョンはサポートされなくなるので、ブラウザの挙動が変更された場合などにも対応されなくなります。そこで、railsのバージョンも追随したい訳ですが、レールを外れるほどに追随するための作業が大量に発生します。正直、つらいです(Zope & Plone に似た状況)。

 私の感覚では、RoRは斬新で素晴らしいけれども、仕事に向いているとは、必ずしも言えない。です。

2008年10月20日月曜日

プログラマのための眼鏡

 年齢と共に体力は落ちていきます。若い頃には、長時間モニタを見ていても視力に影響が無い状態であっても、ある年齢から徐々に視力は奪われていきます。振り返って考えてみると、私の場合は32歳ぐらいからだったように思います。
 遠くを見るのに比べて、近くを見るという作業は、まず、焦点が近いという他に左目と右目の角度が普段よりも内側へと寄ります。このように、とても不自然です。
 若いときに比べて眼の筋力が落ちると、長時間モニタを見ることにより、疲れて焦点を合わせるのと、凝視角度を内側へ寄せる事ができなくなります。その状態を繰り返していると、不自然な眼の筋力の使い方をするために、視力が落ちるだけでなく、乱視になります。
 40歳になったある日、視力も0.7を切り、モニタを正視する事ができなくなりました。これでは仕事に支障があるので、眼鏡屋さんへ行き、OA用のカラーレンズで近々と呼ばれる眼鏡を少し遠視を入れて作ってもらいました。ところが、眼鏡屋さんへ行った時が最悪の状態だったので、眼が疲れていない状態で、この眼鏡をかけると余計つらくなりました。この調整をしてもらうために再度、眼鏡屋さんを訪れました。
 眼が寄るような感じで辛いと事情を話したところ、眼鏡のフレームを凹型に曲げて(鼻の部分を顔側へ、外側を顔と反対側へ)調整してくれました。近々の眼鏡というのは、凝視角度を内側へ寄せるような構造をしているそうで、作り上、プロ仕様のOA用途に向いているとは思えません。
 それでも違和感が残るので、別の眼鏡屋さんで、上記を踏まえた相談をして、もう一本OA用眼鏡を作成しました。今度の眼鏡は、普通の眼鏡に遠視を入れてもらっただけの状態(この時には、視力が更に落ちていたので近視用眼鏡の度数を落とした状態)、即ち、度数を単純に足し算・引き算しただけの状態です。
 これはバッチリでしたが、一度落ち始めた視力の悪化は、なかなか留まる事を知りません。現在は42歳ですが、眼の状態に応じて両方の眼鏡を使い分けています。

 もし、若いプログラマが、このブログを目にする事があるならば、近々でなく引き算で遠視を入れた状態、かつ、OA用カラーレンズの眼鏡を作り、モニタを見る時には、その眼鏡を使用する事をお勧めします。1万5千円ぐらい投資する価値は十分にあります。
 若いときには「モニタを凝視しないで、焦点をモニタになるべく合わせずプログラミングしている」などと眼鏡不要と考えていましたが、年齢による衰えは確実かつ平等に、誰にでも訪れます。

砂粒

敢えて、リンク無しの宣伝無しでブログを始めると、一体どのようになるのか…。GoogleAnalyticsで見ると、始めて一週間では、ほぼ私以外には見ていない事がわかる。嫁さんのブログだと、始めてから割りとすぐに交流が始まったのに比べると、えらい違いです。
さすがにTracbackすらインプリメントしていないGoogleのBloggerサービスでは、プロフィールにおける趣味のカテゴリを通じて以外に接点が一切無く、とても硬派です。OpenSNSなどと必死にSNSの世界を検索の及ぶ世界へと繫ぎ止める戦略を打ってでているGoogleですが、インフォ・コモンズに関しては音痴なのではないでしょうか?
インターネット上で、秘密の日記状態って、なんか素敵だ・・・。面白いから、このまま続けてみよう。

2008年10月15日水曜日

TrackBack

選択を誤ってしまったorz...
まさか、Googleの提供するBlogサービスに、Trackbackの機能が無いなんて一秒たりとも想像すらできなかった。
この際だから、はっきり書こう。

 トラックバック機能の無いブログなんて、存在する価値が無い
 トラックバック機能の無いブログなんて、存在する価値が無い
 トラックバック機能の無いブログなんて、存在する価値が無い
 トラックバック機能の無いブログなんて、存在する価値が無い
 トラックバック機能の無いブログなんて、存在する価値が無い
 トラックバック機能の無いブログなんて、存在する価値が無い
 トラックバック機能の無いブログなんて、存在する価値が無い
 トラックバック機能の無いブログなんて、存在する価値が無い
 トラックバック機能の無いブログなんて、存在する価値が無い
 トラックバック機能の無いブログなんて、存在する価値が無い
 トラックバック機能の無いブログなんて、存在する価値が無い
 トラックバック機能の無いブログなんて、存在する価値が無い
 トラックバック機能の無いブログなんて、存在する価値が無い

Haloscan というサービスで、トラックバック機能を付加できる事がわかったが、冗談も休み休みにしてほしい。という訳で、Bloggerは閉鎖します。Googleという会社が凄いのか、単なる烏合の衆なのか、わからなくなりました。携帯サイトのクローラはYahooのように Docomo, au, Softbank のフリをしてクロールするという高度な事もせず、ウェブ・マスタ・ツールに頼りきり、しかも、ウェブ・マスタ・ツールでは、URLに?や&を含める事ができない。これは高木さんのブログに書かれているように、Googleには技術力なんて皆無なのではないか?

雁首そろえて、はてな・・・という選択は自分の性に合わないし、かと言って、サービスが独立していて、設定した内容と不整合の生じるlivedoorも自分の性に合わない・・・。ごちゃごちゃとしたレイアウトは嫌だし、会社のサーバにブログを設置するのは、趣旨に反する。

残された道は、自宅サーバ…。つうと、ADSLから光に契約し直して常時稼働のサーバを設置する交渉を嫁さんとしなければならないが、通るとも思えない…。設定するならWordpressで、Akismet+SpamKarma2の組み合わせなんだろうけど…。

そうか、WindowLiveか!まじ?

Hyper-v セットアップ スイッチ エラー 2

 OSから再インストールしてみたが、状況は変わらなかった。どうやら、サービス・パックにより1NICにつき1外部仮想ネットワークという構成へと制限されたのではないか?と推察するしかない。
 そこで、外部仮想ネットワークをひとつ作成してから、ネットワーク接続の詳細を開いて、NICの設定で、マイクロソフト仮想スイッチプロトコルのチェックを外してから、再度、仮想ネットワーク・マネージャで外部仮想ネットワークを作成すると、2つ目の外部仮想ネットワークの作成に成功した。何が違うのか注意深く、外部仮想ネットワークの違いを見てみると、2つ目は、マイクロソフトRPCサービスのチェックが有効にできない。Ping系の低レベルなネットワーク層の実装が影響しているのかもしれないです。
 毎回、ネットワーク接続の詳細からNICの設定で、マイクロソフト仮想スイッチプロトコルのチェックを外せば、マイクロソフトRPCサービスが使えませんが、外部仮想ネットワークを増やす事が可能なようです。

2008年10月14日火曜日

windows , ubuntu, Android SDK インストール

追記(2010/05/08)

そろそろ、この記事の情報は古くなりつつあります。Ubuntu 10.04 からは、sun-java6 が標準パッケージから外れたようです。こちらを参考にされた方が良さそうです。私自身、android sdk をいじる時間なんて、これっぽっちも無い状態なので、64環境でも動作するようになったのかどうか検証すらしていません。この記事を書いた時点(2008/10/14)では、64環境では32で構築しないと動作しませんでした。

JDKのインストール

ウィンドウズの場合は、SunMicroSystemのページから最新の Java SE SDK をダウンロードしてインストールします。
Ubuntuの場合は、Javaを入れます sun-java6-bin 以下のコマンドに同じ

$ sudo apt-get install sun-java6-bin
ただし、Ubuntu x86_64環境の場合には ia32-sun-java6-bin の方を入れます。

$ sudo apt-get install ia32-sun-java6-bin

Eclipseを入れる


ウィンドウズ版では、これらをショートカットしてeclipse 日本語パッケージが配布されているので、おしまいです。解凍して、C:/Program Files/ | C:/Program Files (x86)/ フォルダの下にでも移動しておきましょう。

Ubuntu の場合eclipse から "Eclipse IDE for Java EE Developers" をダウンロードします。

64bit環境の場合でも、Linux32bit版を選択して下さい。

$ sudo tar xvf eclipse-jee-ganymede-SR1-linux-gtk.tar.gz
$ sudo mv eclipse-jee-ganymede-SR1-linux-gtk /usr/local/eclipse3.4

次に pleiades から 日本語化プラグインをダウンロードします。

$ sudo unzip pleiades_1.2.3.p6.zip
$ sudo cp -r features /usr/local/eclipse3.4
$ sudo cp -r plugins /usr/local/eclipse3.4
$ sudo cp -r readme /usr/local/eclipse3.4
$ sudo rm -rf features
$ sudo rm -rf plugins
$ sudo rm -rf readme
$ sudo rm -f *.cmd

pleiades は、eclipse3.4 をインストールしたフォルダに下に features, plugins というディレクトリが存在するのでマージします。
eclipse.ini をエディタで編集し、最後の行に以下を追加します。

-javaagent:/usr/local/eclipse3.4/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

尚、エディタの起動がわからない方は

$ gksudo gedit /usr/local/eclipse3.4/eclipse.ini&

とでもしてください。 そして、

$ /usr/local/eclipse3.4/eclipse -clean

とします。次回以降は

$ /usr/local/eclipse3.4/eclipse

でOKです。


Android SDKを入れる

android sdk pageから、SDKをダウンロードし、解凍します。

ウィンドウズ版では、"C:/Program Files/android" というディレクトリにでもコピーして下さい。x64 環境では "C:/Program Files (x86)/android" というディレクトリになります(長い元のディレクトリ名でも可)。

Ubuntuでは、
$ unzip android-sdk-linux_x86-1.0_r1.zip
$ sudo mv android* /usr/local
$ cd /usr/local
$ sudo ln -s android-sdk-linux_x86-1.0_r1 android-sdk
とします。

以下は共通の操作です。

eclipse を起動します。 メニューの「ヘルプ」>「ソフトウェア更新...」を選択し、「使用可能なソフトウェア」タブを選択します。右脇の「サイトの追加」というボタンを押すとダイアログが表示されるので、「ロケーション」に

https://dl-ssl.google.com/android/eclipse/

を入力し「OK」ボタンを押します。
「使用可能なソフトウェア」の中に「"https://dl-ssl.google.com/android/eclipse/"」が追加されたので、チェックを入れて、「インストール」ボタンを押します。
「次へ」「同意して完了」「eclipse再起動」という流れになります。
メニューの「ウィンドウ」>「設定」を選択し、「android」を選択します。統計情報をGoogleに送信するかどうか聞かれるので、自分の判 断でどうするか選択してください。Android SDK のロケーションが未設定だと怒られますが、これから設定します。

Android 設定
SDK ロケーション

SDK ロケーションに 絶対パスで C:\Program Files\android-sdk もしくは /usr/local/android-sdk と指定します。自分の環境に合わせてください。
環境変数 Pathの設定は、特に必要ありません。


Ubuntu 補足


上記の SDK ロケーションのパスを設定する段になって、"Failed to get the required ADT version number from the SDK" といったエラーが出る事があります。

/usr/local/android-sdk/tools/emulator

を実行すると、

"WARNNING: Cannot write user data file '/home/oki/.android/SDK-1.0/userdata-qemu.img': Permission denied

となってます!よくわからないですが

$ cd
$ cd .android
$ sudo chown -R yourname:yourname SDK-1.0
$ cd SDK-1.0
$ chmod 666 *.img

とでもしておけば、この問題は回避できました。しかし、

NAND: could not create temp file for system NAND disk image: Permission denied

root 権限で開発しろって事?んがぁ


$ chown -R yourname:yourname android-sdk-linux_x86-1.0_r1

で開発しろって事のようです。

Hyper-v セットアップ スイッチ エラー

 ネットワーク管理は、無駄に時間をとられる事が多い。今回のも、そんな手品のひとつです。
 Hyper-vにおいては、ホストOSとゲストOSのNICは別々にするのが常識らしい。まぁ、今時NICなんて安いからゴージャスに決めるのも良いかもしれないが、稼働率の低いサーバをたくさん抱えている場合には、一々NIC1枚なんて割り当ててられないし、稼働したいゲストOSの組み合わせもTPOに応じて変わってきます。弊社では12台中のどれか4台が稼働すれば十分なんて使い方がしたいわけです。なのに外部仮想ネットワークは、どうも1NICに2ゲストOSしか割り当てられないらしい。1NICに3ゲストOS目を入れようとしたところで、「セットアップ スイッチ エラー」うんぬんのエラーメッセージが発生するようになりました。
 ところが、このエラーメッセージが出てからというもの、1NICに2仮想ネットワークを再度追加しなおすという事すらできなくなりました。まあ、検索したけれども情報が無いのなんの‥・。日本語の情報源は諦めて setup switch error virtual network というキーワードでようやく見つけたのが、このページ
 どうやら、皆一様に同じ問題に突き当たっているようです。Hyper-vを再インストールしようと、ネットワークカードのドライバを再インストールしようと、堅牢なウィンドウズは不整合になったと思われる情報を堅持します。で、結論は、OSから再インストールですよー。

Android SDK

休日は、Android SDKの開発環境を整えました。と言っても、何かを作るあては、ありません(^^;。よせばいいのに、Windows環境に加えて、Ubuntuでの環境も構築してしまいました。時間があれば手順を書くこともあるかも・・・。
風邪をひいてしまった・・・。

2008年10月11日土曜日

OS

 ここ2年で Linux を使う機会が増えてきました。メインはWindowsですが、ウェブ・サーバ等を構築するにはLinuxの方が楽だと思います。マイクロソフトには大変お世話になっているので、こんな事を書くのも気がひけるのですが、IISは気に入らない方向へと進化してて付き合いきれないです(C|C++のISAPIを捨てるな!.NetのISAPI書くぐらいならApache2をとります)。
 随分昔の話になりますが、Linuxを設定するのは大変でした。まず、ネットワークに繋がらなければ、面白くもなんともない。せめてXだけでも動作させようとしても解像度・周波数・インタレス・+ー微調整をトライ&エラーで繰り返し、やっと使える感じ・・・。それが、今やインストーラ一発で比較的新しいパソコンでもホイホイとインストールできます。会社のウェブサーバはセキュリィティを考慮に入れてSELinuxのあるCentOSをチョイスしましたが、最近のお気に入りは、Ubuntu。
 会社の環境と、自宅の環境も Windows と Ubuntu のデュアル・ブートにしてあります。しかも、最近はリソースをクラウド(ここではイントラも含むウェブサーバの意)に置く事が多いので、何の支障もありません。

  1. OpenOfficeのレイアウトが、ウィンドウズ環境で見た場合と、Linux環境で見た場合で改行位置等が違いバラバラである
  2. Linuxにおける端末のフォントが汚くて見にくい(TrueTypeを入れても)
  3. 品質は上がったとは言え、Linuxの方は、まだまだ足りないなと思う事が多い
  4. 無線LANの設定は、Linuxは相当苦労する(この問題は解消しつつあります)
  5. 逆にウィンドウズは、やっぱりな・・・情けないだろ・・・と思うことも多い
  6. さすがに離れた両親のパソコンにLinuxを入れる度胸はない
といったあたりの違いで落ち着くでしょうか?

で、サーバが多いので仮想化も導入して稼働率を上げようとXenを導入していたのですが、長時間稼働するとお亡くなりになるため、Hyper-Vでしょ・・・と設定していました。Hyper-Vは、仮想ネットワークの設定がやたらと難しいです。それでも、仮想端末も含めて、やはり快適です。まだ出たばかりなので、まともな解説本はありません。どの本も仮想ネットワークの設定がわからないので、ゲストOSひとつにつきNIC1枚を割り当てる方法しか触れていません。まともな解説書が欲しい・・・。

2008年10月10日金曜日

時間が・・・

 いざ、ブログをはじめたものの、時間が無いときている・・・。手広くやりすぎて(やらざるをえない)生産性が低くなっているのも自覚しているが、他の人は、もっと生産性が低いので参ってしまう。働きすぎかな・・・。

2008年10月9日木曜日

スパム

 「いきなり規約違反の疑いがある」と言われて出だしから停滞する。
grayhole って、何か変な slung だったか?と調べてしまった。
ま、放置プレーには慣れているからいいけど、放置プレーは良くない。
人が全く介在しない仕組みは、難しいですね・・・。グーグルの欠点は
自主性に任せきりな所にあるのではないか?と感じます。
投稿確認の文字ですが、私は機械学習より劣るので読めません(成功率は低い)。

2008年10月7日火曜日

情報革命

 19世紀にイギリスで産業革命が起こり、大量生産と植民地時代を築きました。20世紀にはエネルギー革命が起こり、ライフスタイルに変革をもたらしました。そして21世紀に入り、我々の身に起こっている事が情報革命です。これは、「グリッド時代」という本に書かれていた事の受け売りです。
数年前までは、コマーシャルでITだのICTだの、何をかっこつけてるんだ?と軽く考えていましたが、この事について真剣に考えなければならなくなりました。今、破竹の勢いで時代が変革しています。
 私の職業はITに携わる事ですから、変革している個々の事象については把握していました。しかし、情報革命が起こっているという事が、こんなにも重要な事だという認識を得たのは、ここ2・3年の話です。ブログをはじめるにあたって、まずは、この事の重要性を書きたかった。

「情報革命」

 この事を意識できていない人は、敗者へと転落していく可能性が高いのだ。毎日毎日、時代が変革していく音が聞こえてきそうだ。この事を意識できていない人でも、違った形で何か違和感を覚えているはずだ。まずは、認識するところからはじめよう。

2008年10月6日月曜日

目的

1.ブログをする気はなかったのだが、インターネットの主たる収益である広告とは、どの程度のものなのか皮膚感覚として実感したいという気になった。
2.マネジメントに引っ張られてしまったので、捨てたものがある。boost develpment, boost users ML の購読、アルゴリズム系のコーディング遊び、など。ストレス解消になるのかどうかは疑問だが、どこかでバランスを取る必要がある。ライフスタイルの保険としてブログをしなければならないと感じた。