2010-06-12 UbuntuでDwarf fortressを動かそうという奇特な人へ

2010-03-31
■ Windowsがどんなにクソだろうがインストールしておくべき3つの理由
先に言っておきますが、拙者はわずか1年前まではWindows一本の人で、その他のOSなんかクソだと思ってました。
Macに最初に触れたのは、卒業後初めて就職した会社で、共有ディレクトリにMacバイナリぶちこんで壊しまくるのを目の当たりにしてこんなクソOSつかわねー!と心に誓いました。あと、その後出会ったムカつく奴が大概Mac信者だったから(これが一番デカい
鯖管の仕事ではCentOS,RHEL,FreeBSDなどをメインに使ってましたが、デスクトップ環境にXを使うのとか2,3回試したきりで、使い物にならなくてすぐやめました。単なる技術的趣味で使う意図以外、私のスキルじゃ開発やらネット巡回さえまともに行えないものだと思ってました。
一年前までは。
VistaのようなクソOSのバージョンアップを見送り、私がWinXPでくねくねしている間に、気がつけば世間はあっという間に様変わり。
OSXはBSD系にMacのツラを被せたOSとなり、Ubuntuは「まず"使える"こと」を目標にリリースと共に洗練を繰り返していて、フリーライセンスのOSにもかかわらずぶったまげるほどのCOOLさと完成度を備えるに至っていました。
そんなわけで、定期的に訪れる技術的興味に惹かれてまたも新OSを試し始めたのが一年前。ちょうどiPhoneの開発も手がける事になり、不慣れなMac機を客先に借りる事になったのも一年前のこと。
そのときはどうせすぐWindowsに帰ってくると思ったんです。だってフリーソフトいっぱいあるし。使いやすいし。
でもね。OSX/Ubuntuに触れて、Windowsの時間は10年前から止まってるみたいに感じました。で、Windows7出たけど、デスクトップがクネクネするから何だっつーのよ。とか。
でもね。Windows7とか実は使った事無いんです。世間が7発売で盛り上がってる頃、私は生まれて初めてWindows以外のOSの世界に飛び込んで、キャッキャウフフの最中だったんですから。
Windows嫌いじゃないんです。少なくとも15年はお世話になったし。NT3.5時代からだもの。だけど、僕にとっての「選択肢」が初めて出現したんだと思うんだ。だから、自分がPCに期待するアクションをそれぞれどう感じたかの評価をまとめてみようと思う。
起動から使えるようになるまで
Ubuntu:超はぇえ
OSX:早い
Windows:クソ遅い
ちなみにほぼ同一スペックのCore2Duo 2.4〜3GHzマシンでの体感。
Eclipse
仕事が開発だけに、どこでも動くSubversionクライアントとエディタ兼用で3年前ぐらいからEclipseを使うようになりました。一つには仕事のメインツールだけに、これが動かないと話にならないのですが幸いJavaで書かれてるのでOSを気にしなくてよかったのでWin離れに一役買いました。
Winである必要なし
ブラウザ
IEはそもそもブラウザとして論外なので動かなくて問題無いです。もっとも銀行系やらIE以外のブラウザサポートを拒絶してる時代がありましたが、最近はさすがにFirefox/Safariぐらいは対応してくれるようになりました。IE専用とか書かれるとそれだけで「見る/使う必要がない」と判断してるので全く困りません。
Safariは使わずにChromeかFirefoxなので、どちらも(ほぼ)最新版がOSX/Ubuntuで動くので全く問題なし。
数年前までSleipnr使ってましたが、ロボなんとかというアドウェアが同梱されるようになってすぐに捨ててFirefoxに乗り換え。ここんとこChromeでしたがTomblooすごすぎでやっぱりFirefoxにもどってきました。Winで使ってた時はクソ重いブラウザだと思ってたけどOSX/Ubuntu64で動かすとアホ早いので問題なしです。
Win以外でつかうほうがいいです。でもIEの動作確認には必要。ものすごいバッドノウハウ。
TweenやらTwitやらTwitter専用クライアントを乗り換えてきましたが、複数のOSを渡り歩くようになってからはPeraPeraPrvさんのお世話になってます。こちらもJavaクライアントなのでOSを気にせず使い勝手が変わらないのはすばらしいの一言。
最初コメ付きRTがなくてがっかり・・・とTweetしたら「設定でOffになってるだけ」と教わりました。P3ではQTと言うようですね。
自分が使う機能は過不足無くあるのでWinである必要なし。
SSH
開発やら鯖管の仕事では必須のツール。インストール直後からアイコン一発で起動するOSX/Ubuntuサイコー。TeraTermやらPuttyやらGuevaraやら、お世話になったけど、単なるSSHが一番よかったです。
Winじゃソフト入れて設定作業しないとつかえない。Winイラネ。
メール,ToDo管理,RSSリーダー
3年以上前からネット経由なので専用クライアントでやる気なし。
Winイラネ
IM
OSXはちと面倒かも。MSN/GoogleTalk/Skypeがメインなので、別途クライアントいれないと?統合ツールあるのかな。調べてない。
Ubuntuは全部しゃべれる奴が最初から入ってます。すばらしい。
Ubuntuさいきょー!
ニコニコ動画
結論は「Winが最適」
理由はUbuntuのFlashプラグインでは日本語入力がまともにできず、コメントがつけれないため。じゃあOSXでやればいいじゃん?ていうけど、OSXはゲストにはなれないのでそうすると、ゲストOSとしてWinまたはネイティブWinで動かすしかない。
OSX・・・といいたいところだがWindows無いとだめかなぁ・・・
DirectXゲーム
FPS好きなので、やはりフルスペック動作させるには仮想マシンじゃ厳しいんでしょうね・・・というわけでこればっかりはWindowsの一人勝ちです。そりゃMacでもゲームは出てますが、やりたいゲームはWindows(かXBOX)にしかないのですが我が家はコンシューマ機を買わない方針なのでWinゲーム1本。こればかりは譲れない。
こればかりはWindowsじゃないとだめ。
まとめ
いままでWindowsを使い続ける理由がたくさんあったので数えてみようなどと思った事はありませんでした。今日、自分がPCに期待することをこうして並べてみると、もはやWindowsを維持する必要はたった3つになりました。
まだまだWindowsとつきあう日々は長そうです。
2010-03-24
■ [雑感]Firefoxのメニューバーとか消してみる
ちなみにFirefox3.6,Ubuntu9.10での話。
- Personal Menuをいれる。「メニューバーで非表示にする項目」は全部選択。
- Hide Menubarをいれる。
- userChrome.cssに下記を追記。
(場所がわかんねー!って人はChromEditでも入れるとよろしい。[ツール]->[ChromEdit Plus]->[ChromEdit]でいきなり編集できる。)
/* prevent menubar shows after pressing alt */ toolbar[autohide="true"]{visibility:collapse} /* prevent menus shows up after pressing alt+* */ toolbar[autohide="true"]>*{display:none}
これはHide Menubarの機能によりALTキーで(すでに空っぽになった)メニューツールバーがトグル表示されるのがうざったいのでuserChrome.cssでそもそも出てこないようにする為。
2009-01-30 [PHP]第39回PHP勉強会@関東にいってきました

Event Entry::第39回PHP勉強会@関東に株式会社ディノさんにお邪魔してきました。
下の階がウノウ/サノウさんでびびったw
・AuthComponentをちゃんとテストしてみようとおもた。
・ディストリビューターとして貢献できるのはうれしいことだな、と改めて認識。今後もビビらずにテストケース書いてチケット投げてみよう。
・SetクラスをhogeらないとCakePHPのモデルは冗長にしか感じないだろうなぁ。
・PythonのTrac,RubyのRedMineとくればPHPはChawってことですね!
・gitの作者が日本人だとは知りませなんだ。しかも一人とか。yandodさん曰く「世界に誇っていい」と全くその通りかと思います。
・docrtineがすごいよさそうに見えたのでひさびさにsymfonyに戻ってみようかな、と一瞬思いました。
・アシアルの中の人に聞いたらVS.PHPが継子扱いでワロタw
・Fabien働き過ぎ><
以上備忘録でした。
2009-01-20
■[prototype.js]Event#fire()でネイティブイベントも対応させる
どにかならんもんか・・・と思っていたら、見事に先人の知恵を発見
Prototype.js 1.6.0 - Event.fireでNative DOM Eventを呼び出し可能にする
ただし
ファイルで公開されてないので引用そのままコードコピペって追記!(暴挙
Object.extend(Event, (function() {
// DOM Level 3 events
var W3C_MOUSE_EVENTS = $w('click mousedown mousemove mouseout mouseup');
var W3C_KEYBOARD_EVENTS = $w('keydown keyup keypress');
var W3C_BASIC_EVENTS = $w('abort change error load reset resize scroll submit unload');
function createDOMEvent(aEventName, aEventParams)
{
var event;
if(W3C_MOUSE_EVENTS.include(aEventName)) {
var p = Object.extend({
bubble: true,
cancelable: true,
view: window,
detail: 0,
screenX: 0,
screenY: 0,
clientX: 0,
clientY: 0,
ctrlKey: false,
altKey: false,
shiftKey: false,
metaKey: false,
button: 0,
relatedTarget: null
}, aEventParams);
if(document.createEvent) {
event = document.createEvent('MouseEvent');
event.initMouseEvent(aEventName, p.bubble, p.cancelable, p.view, p.detail, p.screenX,
p.screenY, p.clientX, p.clientY, p.ctrlKey, p.altKey, p.shiftKey, p.metaKey,
p.button, p.relatedTarget);
} else {
// TODO: IE
event = doument.createEventObject(); // ここ追加!
Object.extend(event, p);
event.eventType = 'on' + aEventName;
}
} else if(W3C_KEYBOARD_EVENTS.include(aEventName)){
var p = Object.extend({
bubble: true,
cancelable: true,
view: null,
ctrlKey: false,
altKey: false,
shiftKey: false,
metaKey: false,
keyCode: 0,
charCode: 0
}, aEventParams);
if(document.createEvent) {
event = document.createEvent('KeyboardEvent');
event.initKeyEvent(aEventName, p.canBubble, p.cancelable, p.view, p.ctrlkey, p.altKey, p.shiftKey, p.metaKey,
p.keyCode, p.charCode);
} else {
// TODO: IE
event = document.createEventObject();
Object.extend(event, p);
event.eventType = 'on' + aEventName;
}
} else if(W3C_BASIC_EVENTS.include(aEventName)) {
var p = Object.extend({
bubbles: true,
cancelable: true
}, aEventName);
if(document.createEvent) {
event = document.createEvent('HTMLEvents');
event.initEvent(aEventName, p.bubbles, p.cancelable);
} else {
// TODO: IE
event = doument.createEventObject();
Object.extend(event, p);
event.eventType = 'on' + aEventName;
}
}
return event;
}
return {
fire_with_native_events: function(element, eventName, eventParamsOrMemo) {
var event = createDOMEvent(eventName, eventParamsOrMemo);
if(event) {
event.memo = eventParamsOrMemo; // ここも追加!
document.createEvent? element.dispatchEvent(event) : element.fireEvent(event.eventType, event);
} else {
Event.fire(element, eventName, eventParamsOrMemo);
}
}
};
})());
// Replace an Element#fire
Element.addMethods({
fire: Event.fire_with_native_events
});
- prototype.jsのロード後に読み込むとfire()でネイティブイベントもよしなにしてくれます。
