「Bind」を含む日記 RSS

はてなキーワード: Bindとは

2012-09-18

perl SQL::Makerはスゲー便利 その2

http://anond.hatelabo.jp/20120917013417 の続き。

前回は、使ってるモジュールしか書かなかったんで、具体的な使い方を、

my $condition = SQL::Maker::Condition->new;

$condition->add('colom1' => "$value1");                          # colum1 = $value1
$condition->add('colom2',{'like' => "%$value2%"});               # colum2 like '%$value1%'
$condition->add('colom3',{'between' => ["$value3","$value4"]});  # colom3 between $value3 and $value4

my $q = SQL::Maker::Select->new(driver => 'XXXXX');              # XXXXXは、MySQL等の指定をする

# where句に条件を設定
$q->set_where($condition);                                       

# where句を抽出select項目やテーブルの指定を全くしてないので、$sql_conditionには
# "FROM WHERE (colum1 = ?) and (colom2 like ?) and (colom3 between ? and ?)" という文字列がセット
my $sql_condition = $q->as_sql();                                

# "FROM" を消して、WHERE句だけにする 
$sql_condition =~ s/FROM//;                                      

# 設定した条件の配列
my @binds = $q->bind;                                            

# SQLの読み込み(条件部分をのぞくopen my $fh, "<", "./sql.txt";
my $sql = do{ local $/; <$fh>};
close $fh;

# 生成したWHERE句とソート順をSQLに追加
$sql = $sql.$sql_condition;

# コネクションを取得
my $conection = DBI->connect($datasource) or die ( 'could not connect' );
my $sth = $conection->prepare($sql);

# 条件に値を埋め込む
for(my $i = 0; $i<= $#binds; $i++){
    $sth->bind_param($i+1,$binds[$i]);
}

# SQLの実行
$sth->execute;


という形でやってます

増田だとpre記法でも「<」「>」が正しく変換されないんで、読み替えてください。

やろうと思えば、select項目や読み込むテーブルもPGの中で指定して組み立てることも

出来るんだけど、そこまでやると面倒くさいし、そこまで動的にコントロールする必要

サイトでは無かったんで、条件部分のみ動的に変更できるようにしてます

動的SQLperlで作ろうと思っている人の参考になれば幸いです。

参考

http://search.cpan.org/~chiba/SQL-Maker/lib/SQL/Maker/Select.pm

http://search.cpan.org/~chiba/SQL-Maker/lib/SQL/Maker/Condition.pm

風俗口コミ横断SEARCH

http://fko-s.info/index.html

2010-12-03

こないだ

電波を使う通信業者のサービス向けに IPv6 対応仕事してきた。

ping が通ると、やっと時代が変わってきた気になる。

憂鬱なものも、たくさんある。

ユーザに払いだされる IPv6 アドレスへの、DNSでの名前解決とか。

逆引きできないとサービスアクセスできなくなるところがあるし。

BIND だと /12 (32bit中の12bit) でも BIND だけでメモリが 1.2GB くらい必要なのに、64bit 以上の名前解決なんか無理。

IPv4と同じノリでいると、痛い目に遭うのが目に見えてる…orz

とりあえず IPv6 では、逆引き不要論を唱えてみたい

どんな不具合があるのか知らんし。

2010-11-19

さくらVPS(ubuntu)で独自ドメインしてみた(日記6)

初回:http://anond.hatelabo.jp/20101118000033

前回:http://anond.hatelabo.jp/20101119000741



以上で独自ドメインの鯖への割り当ての変更は完了できた。

VPS側に特にBIND入れる作業は不要の様子。


以下、参考文献

http://blog.mobf.net/archives/157

https://wiki.ubuntulinux.jp/UbuntuTips/DedicatedServer/ApacheVirtualHost

http://tobysoft.net/wiki/index.php?Ubuntu/apache2

日記5

初回:http://anond.hatelabo.jp/20101118000033

前回:http://anond.hatelabo.jp/20101118220620


直近でやりたいことを整理してみる。


今からやること

2010-07-26

linuxプロセスファイルディスクリプタを送る方法

linuxではファイルディスクリプタを使い、例えばソケットやファイルの操作などを行います。その際、あるディスクリプタを他のプロセスに送りたいことがあるかもしれません。ここではその方法を解説します。

方法

  1. ディスクリプタ送受信用のソケットを、それぞれのプロセス作成
  2. ソケットの補助データ(後述)を送るための、msghdr構造体を用意
  3. 実際に送信し、別プロセス側で受信する
1, ディスクリプタ送受信用のソケットを、それぞれのプロセス作成

ディスクリプタを別プロセスに送信するためには、送受信用のソケットを作成する必要があります。この場合は特に、unix domainのUDPソケットを作成する必要があります。

unix socketとはネットワークを介さずに使えるソケットインターフェースです。接続アドレスファイル名で指定されます。このためソケットを作った後はそのファイル作成されます。ただし、送受信データはそのファイルではなくカーネル内のメモリに保存されます。

ソケットはsocketシステムコールにより作成します。その際、第一引数にAF_LOCALを、第二引数にSOCK_DGRAMを指定することで所望のソケットを得ることができます。なお、受信側ソケットの場合は、bindにより受信アドレスを設定する必要があります。

#define UNIX_SOCKET_PATH "/tmp/socket2010"

int make_socket(int is_receiver)
{
    // create the unix domain udp socket.
    int sock = socket(AF_LOCAL, SOCK_DGRAM, 0);

    if (is_receiver) {
        struct sockaddr_un addr; // include sys/un.h

        unlink(UNIX_SOCKET_PATH);

        memset(&addr, 0, sizeof(addr));
        addr.sun_family = AF_LOCAL;
        strcpy(addr.sun_path, UNIX_SOCKET_PATH);
        bind(sock, (struct sockaddr *)&addr, sizeof(addr));
    }

    return sock;
}

2009-01-21

毎朝読対訳:就任演説(5)

http://anond.hatelabo.jp/20090121125115

 For everywhere we look, there is work to be done.

(M)どこを見回してもすべき仕事がある。

(A)あらゆるところに、なすべき仕事がある。

(Y)なすべき仕事は至る所にある。

 The state of the economy calls for action, bold and swift, and we will act - not only to create new jobs, but to lay a new foundation for growth.

(M)経済状況は、大胆で迅速な行動を求めている。我々は新しい職場創造だけでなく、成長のため新しい基盤を作らねばならない。

(A)経済状況は、力強く迅速な行動を求めている。私たちは行動する。新たな雇用を創出するだけではなく、成長への新たな基盤を築くためにだ。

(Y)米国経済は、大胆かつ迅速な行動を求めている。そして我々は新規の雇用創出のみならず、新たな成長の礎を整えることができる。

 We will build the roads and bridges, the electric grids and digital lines that feed our commerce and bind us together.

(M)我々は道路や橋、電線やデジタル通信網をつくり、我々の商業を支え、我々の結びつきを強めなければならない。

(A)商業の糧となり、人々を結びつけるように、道路や橋、配電網やデジタル回線を築く。

(Y)道路や橋を造り、電線やデジタル通信網を敷き、商業を支え、我々を一つに結び付ける。

 We will restore science to its rightful place, and wield technology's wonders to raise health care's quality and lower its cost.

(M)我々は科学を本来あるべき場所に引き戻し、技術活用医療の質を引き上げると共にコストを下げる。

(A)科学を本来の姿に再建し、技術の驚異的な力を使って、医療の質を高め、コストを下げる。

(Y)科学を本来あるべき地位に戻し、医療の質を引き上げながら、そのコストは減らす。

 We will harness the sun and the winds and the soil to fuel our cars and run our factories.

(M)太陽、風や土壌を使って我々の自動車の燃料とし、工場を動かす。

(A)そして太陽や風、大地のエネルギーを利用し、車や工場の稼働に用いる。

(Y)太陽、風や土壌を利用して自動車を動かし、工場を動かす。

 And we will transform our schools and colleges and universities to meet the demands of a new age.

(M)我々の学校や単科大、大学を新たな時代の要請にあわせるようにする。

(A)新しい時代要請に応えるように学校大学を変革する。

(Y)新時代の要請に合うよう学校や単科大、大学を変えていく。

 All this we can do.

(M)これらすべてが我々には可能だ。

(A)これらすべては可能だ。

(Y)我々はすべてのことを成し遂げられる

 And all this we will do.

(M)これらすべてを我々は実行するのだ。

(A)そしてこれらすべてを、私たちは実行する

(Y)し、行っていく。

 Now, there are some who question the scale of our ambitions -

(M)我々の志の大きさに疑問をはさむ人もいる。

(A)私たちの志の大きさに疑念を抱く人がいる。

(Y)我々の野望の大きさについて疑念を抱く人がいる。

  - who suggest that our system cannot tolerate too many big plans.

(M)我々のシステムでは大きすぎる計画は達成できないという人々だ。

(A)我々のシステムではそんなに多くの大きな計画は無理だ、と言うのだ。

(Y)我々のシステムは多くの大きな計画に耐えられないと指摘する人もいる。

 Their memories are short.

(M)彼らは覚えていないのだ。

(A)だが、そうした人たちは忘れるのが早い。

(Y)だが、彼らは忘れている。

 For they have forgotten what this country has already done; what free men and women can achieve when imagination is joined to common purpose, and necessity to courage.

(M)彼らはすでにこの国が成し遂げたことを忘れているのだ。想像力が共通の目的に出会った時、必要が勇気と出会った時、自由な男女に達成できることを忘れているのだ。

(A)これまで我が国が成し遂げてきたこと、そして、共通の目的勇気の必要性に想像力が及んだとき、自由な人々がどんなことを成し遂げられるかを、忘れているのだ。

(Y)彼らはこの国が何を成し遂げたかを忘れている。想像力が共通の目的と出合った時、必要が勇気と結びついた時、自由な男女が何を達成できるかを忘れているのだ。

 What the cynics fail to understand is that the ground has shifted beneath them -

(M)皮肉屋が理解できないのは、彼らの下で大地が動いたということだ。

(A)皮肉屋たちは、彼らの足元の地面が動いていることを知らない。

(Y)皮肉屋が理解できないのは、彼らがよって立つ地面が動いたということだ。

 - that the stale political arguments that have consumed us for so long no longer apply.

(M)我々を余りに長期間、消耗させた使い古しの政治論議はもはや適用されない。

(A)つまり、これまで私たちを消耗させてきた陳腐な政争はもはや当てはまらない。

(Y)長い間、我々を疲れさせてきた陳腐な政治議論はもはや通用しない。

 The question we ask today is not whether our government is too big or too small, but whether it works -

(M)今日、我々が問うのは、政府が大きすぎるか小さすぎるかではなく、機能しているかどうかだ。

(A)私たちが今日問わなくてはならないことは、政府が大きすぎるか小さすぎるか、ではなく、それが機能するかどうかだ。

(Y)我々が今日問うべきなのは、政府の大小ではなく、政府が機能するか否かだ。

 - whether it helps families find jobs at a decent wage, care they can afford, a retirement that is dignified.

(M)家庭が人並みの収入を得られるよう仕事を見つけ、威厳をもって引退できるよう助けているかどうかだ。

(A)まっとうな賃金仕事や、支払い可能な医療・福祉、尊厳をもった隠退生活を各家庭が見つけられるよう政府が支援するのかどうかだ。

(Y)家族が人並みの給与仕事を見つけたり、負担できる(医療保険や、立派な退職資金を手に入れることの助けに、政府がなるかどうかだ。

 Where the answer is yes, we intend to move forward.

(M)答えが「イエス」の施策継続する。

(A)答えがイエスならば、私たちは前に進もう。

(Y)答えがイエスの場合は、その施策を前進させる。

 Where the answer is no, programs will end.

(M)「ノー」の施策は廃止する。

(A)答えがノーならば、政策はそこで終わりだ。

(Y)ノーならば終わりとなる。

 And those of us who manage the public's dollars will be held to account - to spend wisely, reform bad habits, and do our business in the light of day -

(M)公金を預かる我々は、説明責任を果たさなければならない。適切に支出し、悪い習慣を改め、誰からも見えるように業務を行う。

(A)私たち公金を扱う者は、賢明に支出し、悪弊を改め、外から見える形で仕事をするという、説明責任を求められる。

(Y)公的資金管理する者は適切に支出し、悪弊を改め、誰からも見えるように業務を行う。

 - because only then can we restore the vital trust between a people and their government.

(M)それによって初めて、国民政府の間の重要な信頼を回復できる。

(A)それによってようやく、政府国民との不可欠な信頼関係を再建することができる。

(Y)それによって初めて、国民政府の間に不可欠な信頼を回復できる。

 Nor is the question before us whether the market is a force for good or ill.

(M)市場が正しいか悪いかも、我々にとっての問題ではない。

(A)市場が良い力なのか悪い力なのかも、問われていることではない。

(Y)問うべきなのは、市場の良しあしでもない。

 Its power to generate wealth and expand freedom is unmatched,

(M)富を生み出し、自由を拡大する市場の力は比肩するものがない。

(A)富を生みだし、自由を広めるという市場の力は、比類なきものだ。

(Y)富を作り自由を広げる市場の力に比肩するものはない。

 , but this crisis has reminded us that without a watchful eye, the market can spin out of control - and that a nation cannot prosper long when it favors only the prosperous.

(M)だが、今回の金融危機は、注意深い監視がなされなければ、市場は制御不能になり、豊かな者のみを優遇する国は長く繁栄することはできないことを我々に気付かせた。

(A)しかし、今回の(経済)危機は、市場は注意深く見ていないと、制御不能になるおそれがあることを、私たちに思い起こさせた。また、富者を引き立てるだけでは、国は長く繁栄できない、ということも。

(Y)だが、今回の(経済)危機は、監視がなければ、市場は統制を失い、豊かな者ばかりを優遇する国の繁栄が長続きしないことを我々に気づかせた。

 The success of our economy has always depended not just on the size of our Gross Domestic Product, but on the reach of our prosperity; on our ability to extend opportunity to every willing heart -

(M)我々の経済の成功は国内総生産の規模だけでなく、繁栄が享受される範囲や、望む人すべてに機会を広げる能力にかかってきた。

(A)私たちの経済的な成功は、国内総生産(GDP)の規模だけではなく、繁栄がどこまで到達するかに常に依存してきた、つまり、意欲のある人にどれだけ機会を広げられたかだ。

(Y)我々の経済の成功はいつも、単に国内総生産(GDP)の大きさだけでなく、我々の繁栄が広がる範囲や、機会を求めるすべての人に広げる能力によるものだった。

 - not out of charity, but because it is the surest route to our common good.

(M)慈善としてではなく、公共の利益に通じる最も確実な道としてだ。

(A)慈善心からではなく、それが、私たちの共通の利益への最も確実な道筋であるからだ。

(Y)慈善としてではなく、公共の利益に通じる最も確実な道としてだ。

2008-10-11

http://anond.hatelabo.jp/20081011203455

たぶんapacheアクセスログか何かをmoreでちゃっちゃと表示するだけで

草なぎ君がBINDパッチ当てて直す奴だっけ。あれが思いうかんだ。

そういえば、昔のクラックって、YouTubeワリオランドシェイク見たいな事やってるよね。さすがだよね。

それにひきかえ、マトリックスときたら、sshdをクラックしてるんだからスクリプトキディもいいところだよな。

2008-07-22

[]関連エントリーのツリーをたどれるグレモン

結局概要表示機能追加した。unsafeWindow使いまくり大丈夫かいな。

// ==UserScript==
// @name	Hatena Bookmark Tree Expander
// @namespace	http://anond.hatelabo.jp/
// @include	http://b.hatena.ne.jp/entry/*
// ==/UserScript==
// <div class="info">
//   <ul id="similar_entries" class="bookmarklist">
//     <li></li>
//   </ul>
// </div>
// <div class="info">
//   <ul id="referred_entries" class="bookmarklist">
//     <li id="referred-entry-\d+"></li>
//   </ul>
// </div>
// <div class="info">
//   <ul id="relation_diary" class="bookmarklist">
//     <li id="diary-{id}-\d+"></li>
//   </ul>
// </div>
(function() {

function main() {
	loadBookmarkCommentViewer();
	similar.prototype.rootAppend();
	referred.prototype.rootAppend();
}

function HBTM(target) {
	this.target = target;
	this.targetXPath = "//ul[@id='"+target+"']/li";
	this.targetRegExp = new RegExp('<ul id="'+target+'"(.|\\s)*?</ul>');
}
HBTM.prototype = {
	openIcon:
		'<img width="15" height="15" class="icon" style="opacity: 0.6" src="http://anond.hatelabo.jp/images/common/open.gif"/>',
	closeIcon:
		'<img width="15" height="15" class="icon" style="opacity: 0.6" src="http://anond.hatelabo.jp/images/common/close.gif"/>',
	loadingIcon:
		'<img width="13" height="13" class="icon" src="http://anond.hatelabo.jp/images/common/loading.gif"/>',
	commentIcon: function(url) {
		return '<img class="hatena-bcomment-view-icon" src="http://r.hatena.ne.jp/images/popup.gif" onclick="iconImageClickHandler(this, \''+url+'\', event);">'
	},
	create: function() {
		this.comment = document.createElement("span");
		this.comment.innerHTML = this.commentIcon($X("string(descendant::a/@href)", this.node).value());
		this.open = document.createElement("a");
		this.open.href = "javascript:void(0)";
		this.open.innerHTML = this.openIcon;
		this.close = document.createElement("a");
		this.close.href = "javascript:void(0)";
		this.close.innerHTML = this.closeIcon;
		this.close.style.display = "none";
		this.loading = document.createElement("span");
		this.loading.innerHTML = this.loadingIcon;
		this.loading.style.display = "none";
		this.node.appendChild(this.comment);
		this.node.appendChild(document.createTextNode(" "));
		this.node.appendChild(this.open);
		this.node.appendChild(this.close);
		this.node.appendChild(this.loading);
		this.open.addEventListener("click", bind(this.openAct, this), false);
		this.close.addEventListener("click", bind(this.closeAct, this), false);
	},
	openAct: function() {
		this.open.style.display = "none";
		if (this.tree) {
			this.tree.style.display = "block";
			this.close.style.display = "inline";
		} else {
			this.loading.style.display = "inline";
			this.load();
		}
	},
	closeAct: function() {
		if (this.tree) {
			this.tree.style.display = "none";
			this.close.style.display = "none";
			this.open.style.display = "inline";
		}
	},
	load: function() {
		var url = $X("string(descendant::a[starts-with(@href, '/entry/')]/@href)", this.node).value();
		GM_xmlhttpRequest({
			method: "GET",
			url: "http://b.hatena.ne.jp"+url,
			onload: bind(this.loadCallback, this)
		});
	},
	loadCallback: function(result) {
		var match = result.responseText.match(this.targetRegExp);
		if (match) {
			var sandbox = document.createElement("div");
			sandbox.innerHTML = match[0].replace(this.target,"");
			this.tree = sandbox.firstChild;
		} else {
			this.tree = document.createElement("ul");
		}
		this.append();
		this.loading.style.display = "none";
		this.close.style.display = "inline";
	},
	append: function() {
		this.tree.style.backgroundColor = "transparent";
		this.tree.style.listStyleType = "circle";
		this.node.appendChild(this.tree);
		$X("li", this.tree).each(function(n) {
			var a = $X("a",n).node();
			var c = $X("count(//li/a[@href='"+a.href+"'])").value();
			if (c > 1) n.parentNode.removeChild(n);
		});
		$X("li", this.tree).each(bind(function(node){new this.constructor(node)}, this));
	},
	rootAppend: function() {
		$X(this.targetXPath).each(bind(function(node){new this.constructor(node)}, this));
	}
};

function similar(node) {
	this.node = node;
	this.create();
}
similar.prototype = new HBTM("similar_entries");
similar.prototype.constructor = similar;

function referred(node) {
	this.node = node;
	this.create();
}
referred.prototype = new HBTM("referred_entries");
referred.prototype.constructor = referred;

function loadBookmarkCommentViewer() {
	var head = document.getElementsByTagName("head")[0];
	var script = document.createElement("script");
	script.type = "text/javascript";
	script.src = "http://b.hatena.ne.jp/js/BookmarkCommentViewerAllInOne.1.2.js";
	head.appendChild(script);
	var css = document.createElement("link");
	css.rel="stylesheet";
	css.href="http://d.hatena.ne.jp/css/base.css";
	css.type="text/css";
	css.media="all";
	head.insertBefore(css, head.firstChild);
	window.addEventListener("load",function(){
		var BCV = unsafeWindow.BookmarkCommentViewer;
		BCV.options['screenshot'] = true;
		var asyncCommnetView = BCV.asyncCommnetView;
		BCV.asyncCommnetView = function(url, onCompleteCallback) {
			var div = asyncCommnetView(url, function(){
				onCompleteCallback.apply(this, arguments);
				new unsafeWindow.Ten.XHR("http://b.hatena.ne.jp/entry/rss/"+url, {}, function(result) {
					if (! result.responseText.match(/<description>(.*?)<\/description>/))
						return;
					if (! RegExp.$1)
						return;
//					var desc = document.createTextNode("desc: "+RegExp.$1);
					var desc = document.createElement("li");
					desc.appendChild(document.createTextNode("desc: "+RegExp.$1));
					div.lastChild.insertBefore(desc,div.lastChild.getElementsByTagName("li")[0]);
				});
			});
			return div;
		};
		BCV.asyncCommnetView.origin = asyncCommnetView;
	}, false);
}

function bind(f,o) {return function() {return f.apply(o, arguments)}}

function $X(xpath, context) {
	if (!(this instanceof $X))
		return new $X(xpath, context);
	this.xpath = xpath;
	this.context = context || document;
}
$X.prototype = {
	evaluate: function() {
		var result = document.evaluate(this.xpath, this.context, null, this.type, null);
		switch (result.resultType) {
			case XPathResult.STRING_TYPE : return result.stringValue;
			case XPathResult.NUMBER_TYPE : return result.numberValue;
			case XPathResult.BOOLEAN_TYPE: return result.booleanValue;
			case XPathResult.FIRST_ORDERED_NODE_TYPE: return result.singleNodeValue;
		}
		return result;
	},
	node: function() {
		this.type = XPathResult.FIRST_ORDERED_NODE_TYPE;
		return this.evaluate();
	},
	value: function() {
		this.type = XPathResult.ANY_TYPE;
		return this.evaluate();
	},
	each: function(func) {
		this.type = XPathResult.ORDERED_NODE_SNAPSHOT_TYPE;
		var result = this.evaluate();
		for (var i=0; i<result.snapshotLength; i++)
			func(result.snapshotItem(i));
	}
};

main();

})();

2008-05-13

GuiceSeasar2 を連携させてみたよ

[参考文献]

    S2 は、.dicon ファイルで定義をだいぶ簡略化できる。パフォーマンスはどうなんだろう。誰かテストしてくれいw

    app.dicon

    <?xml version="1.0" encoding="UTF-8" ?>

    <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN" "http://www.seasar.org/dtd/components24.dtd">

    <components namespace="client">

    <include path="hello.dicon" />

    <component class="org.seasar.guice.Client" />

    </components>

    hello.dicon

    <?xml version="1.0" encoding="UTF-8" ?>

    <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"

    "http://www.seasar.org/dtd/components24.dtd">

    <components initializeOnCreate="false">

    <component class="org.seasar.guice.HelloServiceImpl" />

    </components>

    HelloService.java、HelloServiceImpl.java は、上記 ITPro と内容が同じなので省略。

    Module.java

    package org.seasar.guice;

    import org.seasar.framework.container.S2Container;

    import org.seasar.framework.container.SingletonS2Container;

    import org.seasar.framework.container.factory.S2ContainerFactory;

    import com.google.inject.AbstractModule;

    import com.google.inject.name.Names;

    public class Module extends AbstractModule {

    S2Container container = null;

    public Module(S2Container container){

    this.container = container;

    }

    @Override

    protected void configure() {

    bind(S2ContainerFactory.class).annotatedWith(Names.named(container.getPath()));

    bind(Client.class).toInstance(SingletonS2Container.getComponent(Client.class));

    }

    }

    Client.java

    package org.seasar.guice;

    public class Client {

    private HelloService helloService = null;

    public void setHelloService(HelloService helloService) {

    this.helloService = helloService;

    }

    public void execute() {

    helloService.sayHello();

    }

    }

    Main.java

    package org.seasar.guice;

    import org.seasar.framework.container.S2Container;

    import org.seasar.framework.container.factory.SingletonS2ContainerFactory;

    import com.google.inject.Guice;

    import com.google.inject.Injector;

    public class Main {

    private static final String PATH = ".\\app.dicon";

    public static void main(String[] args) {

    SingletonS2ContainerFactory.setConfigPath(PATH);

    SingletonS2ContainerFactory.init();

    S2Container container = SingletonS2ContainerFactory.getContainer();

    Module module = new Module(container);

    Injector injector = Guice.createInjector(module);

    Client client = injector.getInstance(Client.class);

    client.execute();

    }

    }

    実行結果

    java -cp ?? org.seasar.guice.Main

    2008/05/13 21:19:22 org.seasar.framework.log.Logger info

    情報: Running on [ENV]product, [DEPLOY MODE]Normal Mode

    Hello, world!

    実行環境JDK 7 (build 1.7.0-ea-b24)

    2007-09-01

    9月になったし、もうそろそろ書いておくか

    これから就職活動するバカはいないだろうけど、そういう人もいるだろうから少し書いておこう。

    どちらかというと、アンチMS派なUnix技術者Windowsだけの世界で仕事をする辛さを。

    Unix技術者は、業務実績にSolaris/AIX/Linuxって書いてあってもちゃんと質問しろ。Windows仕事は無いですよね?って。

    僕が食べるために職を手にしているこのIT業界というのは、バッドノウハウMicroSoftExcelで出来ている。

    その為、僕が手にしたUnixの知識は、特定の仕事以外でしか役に立たないし、使わない。

    viだろうが、TeXだろうが、Xの知識よりも、MFCVBAのちょっとした知識のあるヤツが上にみられる。

    ExcelWindowsの知識があればそれだけで仕事になるからだ。

    いいか、viTeX、Xなんて捨てちまえ、Excelがあればそれでいいのだ。

    Unix技術者でいうハッカーとはなんだろう。

    MSでは、ActiveXを使ってCOMを操作し、クライアントレジストリを操作し、IE単体でできないことをやってしまうヤツがハッカーと思われている。

    VBAマクロで作ったなんちゃってツールを3時間で作れるほうが、

    perlruby/pythonで、より少ない時間で作ったツールよりも凄く思われてしまう。

    そして、それができるヤツの方が、Unix技術者よりもよりハッカーであり、技術力があると思われている。

    ブラウザを例にしたが、

    javascriptでalert/confirmを出すよりも、vbscriptでMsgBoxの方が多くのことができるから、

    javascriptNumberの計算よりも、vbscriptでDecimalを使った方が倍密度の計算ができるから、

    vbscriptを駆使できるヤツは、凄く重宝される。

    いいか、javascriptで汎用的に書くのなんてナンセンスだ。javascriptなんて捨てちまえ、覚えるのはJScript実装(WSH)だ。

    この業界、何が不満になるかというと、

    MSの、もっというとWindowsのことしか知らないヤツが多すぎるということ。

    そういうヤツらは、Windowsだったらこんなこともできるのに、なぜUnix/Linuxだとこんなこともできないのか。と言う

    そういうヤツらは、Windowsの未修正バグの合間を縫いながら中途半端な実装しかしない。

    だって、中途半端(もしくは大雑把)な実装で動いているものの中で動くから。それ以上に実装しようとしてもできないのだ。

    いいか、win32のメッセージングの仕組を覚えるんだ。無理矢理send_keyみたいなコードを書けるようにしろ。

    コマンドを連結するよりも、結果に近いコードを書くんだ。線形になろうがヤツらは気にしないだろう。

    ヤツらは、javapythonをバカにする。

    何故か。

    それは、.NETで作ればお客さんの要望が実現でき、Excelと連携できるからだ。

    ヤツらは、C/Sの世界でこそ役に立つ技術者だが、Webの世界に連れてきてはならない。すぐに実装がIEだけになる。

    ヤツらにLLを覚えさせるのは無理だ。

    クロージャなんて知らないし、高階関数カリーなんてコードを教えてみろ。後から辛くなるのは自分だ。

    ヤツらにはPHPを教えておけ、それだけで満足する。すごいヤツになった気にさせれる。

    バッドノウハウ慣れしているヤツらはそれを使ってコードを書いてもらえ、rubyで書かせるよりも修正が20倍楽だ。

    いいか、まとめるぞ。

    今まで一生懸命Unix勉強してきたのは無駄だ。いますぐ忘れるんだ。

    Excelを今から覚えろ。VBAを覚えろ。そしてMSの動きを身に着けるんだ。

    Windowsでは単位がFormだ。それが標準出力標準入力と思え。ときどきSheetとかWorkbookになるぞ。

    ストリームファイル操作には気をつけろ。Unixの気分でいると思わぬところで抜けが出るぞ。

    IRCは使うな。Jabberを使うな。メッセンジャーを使え。移行のお薦めはGaimだ。Windows版がある。

    viの使用頻度を減らせ、変なコマンドを身に着ける前に、秀丸マクロを書けるようにしろ、Notepadのショートカットを覚えとけ。

    BindとかApache(Httpd)の知識はいらない。IISだ。ActiveDirectoryだ。

    文字コードはCp943cを何がなんでも押せ。Shift_JISっていう大雑把な伝えかたはダメだ。絶対cp943cにしろ。UTF8/UTF7との格闘で身も心もぼろぼろになるぞ。

    汎用性なんて無いんだ。Windowsというプラットフォームがあれば。



    ああ、心が渇いていく。

    ログイン ユーザー登録
    ようこそ ゲスト さん