gist

2008年12月6日土曜日

オープンソース仮想OS「VirtualBox」で Vista を動かす(Mac OS X 10.5 Leopard)

オープンソースの仮想OSに「VirtualBox」というアプリケーションがあります。仮想OSソフトウェアとは、簡単に言えばコンピュータ上に仮想のコンピュータを作り、好きなOSを入れてグヘヘ・・・というソフトウェアです。Macで言えば、VMWare、Parallels など、Windowsで言えばVirtual PC と同じ機能でありますな。天下のSun Microsystems様が提供されております。こんな変態ソフトがタダかよ。

購入したVMWareが泣いております。僕の財布もな。

せっかくなのでインストール手順を紹介します。
その前に実行環境。

ホスト環境
24インチiMac (MB325J/A)
OS: Mac OS X 10.5.5
CPU: 2.8GHz Intel Core 2 Duo
メモリ: 2GB 800MHz DDR2 SDRAM

ゲストOSWindows Vista Ultimate 32bit
インストールDVDかイメージをご用意くださいませ。

ソフトウェアフリークの皆さんには暗黙の了解ですが、各自の責任でやってくださいね。


全体の流れ
  1. VirtualBoxをダウンロードする
  2. VirtualBoxをインストールする
  3. Vistaをインストールする
  4. VistaにPlugInをインストールする

1. VirtualBoxをダウンロードする

VirtualBox公式サイトのダウンロードページに今すぐ進む。

VirtualBox 2.0.6 for OS X hosts Intel Macs をクリックしてダウンロードします。


2. VirtualBoxをインストールする
ダウンロードが完了すると「VirtualBox」がマウントされます。
画面左上の「1 Double click on this icon:」の下のパッケージ「VirtualBox.mpkg」をダブルクリックします。
「続ける」ボタンをクリックして次に進みます。
使用承諾契約が表示されるので「続ける」ボタンをクリックする。
同意するかどうか聞いてくるので、「Agree」ボタンをクリックして同意します。

インストールするパッケージを選択します。まあ、デフォルトのままでいいと思います。インストール先を変更するか聞いてきます。今回はデフォルトのまま「インストール」ボタンをクリックします。
パスワードを入力するダイアログが表示されます。自分のパスワードを入力して「OK」ボタンをクリックすると、インストールが始まります。
インストールできたようです。
ダウンロード直後の「VirtualBox」のマウント画面を表示して、「2 Run the VirtualBox application from the Application Folder:」の下のアイコンをダブルクリックしてアプリケーションフォルダを開きます。
VirtualBoxがインストールされています。
以上でインストール完了です。

3. VirtualBoxにVistaをインストールする

アプリケーションフォルダの「VirtualBox」をダブルクリックすると最初に登録フォームが開きます。任意なのでキャンセルしてもおk。
以下が起動直後になります。
画面左上の「新規」ボタンをクリックします。
新規仮想マシン作成ウィザードが開きます。「次へ」。
仮想マシン名とOSタイプを選択します。今回、名前は「Vista」、OSタイプを「Windows Vista」にして「次へ」ボタンをクリック。
ちなみに、OSのタイプはこれくらい。Windows Server 2008にも対応かよ!Virtual PC 2007だって対応していないのにっ。変態っ!
で、メモリを決めます。2GBしか積んでいないのに32Bit CPUの最大3584MBまで選べるのか?とりあえず512MBに設定しました。後から変更できるしね。
ハードディスクを設定。「新規」ボタンで新たに作ろう。
新規仮想ディスク作成のダイアログに進む。
可変か、固定か。説明は書いてあるとおり。今回は可変を選択した。
サイズと仮想ディスクの場所を選択。今のところ20GBあれば十分。
確認ページが表示される。仮想ハードディスクの場所がライブラリとかに。まあいいや。「完了」ボタン。

仮想ハードディスク作成完了。「次へ」ボタン。
最終確認。「完了」ボタン。
仮想マシン「Vista」が左側のペインに一個追加されている。
Vista 電源オフ、をダブルクリックしていざ起動。
マウスキャプチャの説明が表示される。仮想OSの画面をクリックすると、マウスがゲストOSになる。ホストに戻るときは左コマンドキーで戻れるよ。だそうです。次回からこのメッセージを表示しない、にチェックして「OK」ボタン。
初回ウィザードが開きます。これからVistaをインストールするよ。「次へ」。
インストールメディア、メディアソースを設定。インストールメディアがCDの場合はそのまま次へ。
いよいよCDで起動する。この画面のときにVistaのインストールDVDを入れよう。
お、インストールが始まった。

いろいろやりまして、Vistaインストール完了。
4. VistaにPlugInをインストールする

Vistaインストール直後は、マウスの挙動がおかしいし、ゲストOSから抜けるのに左コマンドキーを押すのがうざい。ネットワークやサウンドのドライバも一気にいれたい。ので、Vistaを起動しているときに、VirtualBoxのメニューバーで「デバイス」>「Guest Additionsのインストール」を選択する。

自動再生しなかったよ。。。
なので、コンピュータ開くといる。

今度はマウスが変。左クリックがシフトを押しながらクリック状態のようだ。
こういう場合は、コマンド起動。
「D:¥vboxwindowsadditions-x86.exe」をたたく。
インストールが始まります。ああ、Sun様。
同意して、
インストール先を選択。
ドライバのインストール認証を聞かれるので、「Sun様からのソフトウェアを常に信頼する」にチェックして「インストールする」ボタンをクリックする。
インストール完了。

Vistaを再起動して終了です。

インストール直後の状態よりもマウスがサクサク動くようになりました。少し重いかもしれませんが、メール、Office位なら全く問題なしです。

2008年11月3日月曜日

ファイル管理ソフトウェアのUI

ファイル管理ソフトウェアの開発をさせていただきました。

今回はUIを担当しました。
そこで感じたことを少々。
ファイル管理ソフトウェアといえば、WindowsならExplorer、MacならFinderになると思います。
これらのアプリケーションには、良いUIをつくるための基本要素がほとんど含まれていると感じます。

画面が左右に分かれていて、左側にはフォルダの一覧、右側にはファイルの一覧が表示されます。ユーザーはフォルダをダブルクリックしてフォルダ構造を潜っていき、目的のファイルを探すというのが基本形かと思います。

ですが、ファイル管理ソフトウェアは、GUIベースのOSが誕生してからの歴史が詰まったアプリケーションなわけです。
ですから、そのUIには他のアプリケーションを凌駕する考え抜かれたUIが多くあるのです。

たとえば、右クリック。どこでクリックしても選択したオブジェクトに対して今何ができるか、すぐにわからなくてはなりません。フォルダであれば、新規作成、削除、名前の変更。ファイルであれば開く、削除、名前の変更、選択したオブジェクトに合わせて使用できる機能を提供するのがキモになります。

「移動」はどうでしょう?オブジェクトの移動はドラッグアンドドロップでできなくてはなりません。
「削除」のダイアログは、ユーザにとって不要なモノかもしれませんので、「今後表示しない」ようにできなくてはなりません。
「検索結果」はどうしたらクリアできるでしょうか?

様々なアプリケーションでユーザーインターフェースを考える機会があります。そのとき、Explorerはどうか、Finderならどうかを考えると意外と使いやすいアプリケーションに近づくかもしれません。

最もユーザに直接触ってもらってテストを繰り返し、良いモノに近づけていくことが基本であることには変わりませんが。

2008年10月4日土曜日

undefinedとnullの比較

ActionScript2.0では、undefinedとnullは同値として扱われます。
ただし、「厳密な比較」をすることで、区別することができます。

undefined==null は、true (比較演算子)
undefined===null は、false (厳密な比較演算子)

また、ActionScript2.0のBoolean型には、4つの状態が存在します。
true
false
null
undefined

bool値を評価する場合、true以外のnullやundefinedをfalseと見なすか、例外を投げるのか決めておいた方が無難です。

var isTrue:Boolean;

if ( isTrue )
{
trace ( "isTrueはtrueです" );
}
else
{
trace("isTrueは、undefinedかnullかfalse");
}

2008年8月28日木曜日

データベース内のすべてテーブルの行数を出力するプロシージャ

DECLARE @table_name varchar(128), @row_count int, @query nvarchar(255)

DECLARE tables_cursor CURSOR FOR
SELECT
name
FROM
sysobjects
WHERE
type = 'U'
ORDER BY
name

IF object_id('tempdb..#TablesRowCount', 'U') IS NOT NULL
DROP TABLE tempdb..#TablesRowCount

CREATE TABLE #TablesRowCount( TableName varchar (128), Rows int )

OPEN tables_cursor;
FETCH NEXT FROM tables_cursor INTO @table_name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @query = N'SELECT @row_count = COUNT(*) FROM ' + @table_name
EXEC sp_executesql @query, N'@row_count int OUTPUT', @row_count OUTPUT
INSERT INTO #TablesRowCount VALUES (@table_name, @row_count)
FETCH NEXT FROM tables_cursor INTO @table_name
END

SELECT * FROM #TablesRowCount

CLOSE tables_cursor
DEALLOCATE tables_cursor

2008年7月31日木曜日

人に伝わる文章の書き方

私は人に伝わる文章を書けるようになりたいと思っています。
ググってみると、人に伝わる文章の書き方というサイトを見つけました。これから勉強しようと思います。

私は、いつまでたっても上手に書くことができません。一番の原因は、状況把握がとても下手だからということです。私には、状況や事象を理解する前に行動してしまう悪い癖があります。考えがまとまらないうちに、とりあえず書いてしまいます。そのため、冗長で的を得ない読みにくい文章を書いてしまうのです。

私は自分をアマチュアのデザイナだと感じています。デザイナの一つのテーマは"効果的に伝えること"だと思いますが、今の私ではできません。

このサイトで人に伝わる文章を実践し、自信をつけたいと考えています。

2008年7月28日月曜日

iPhone SDKは1.25GB

面白いアプリを考えたので、iPhone 開発に本格的に着手。まずはSDKダウンロード。

…1.25GB

林檎怖いよ。容量書いてよ。
Hello worldまでの道のりは長い。

2008年7月23日水曜日

WPFのMCTS提供開始

7/15からWPFのMCTSが提供されました。
さっそくチャレンジしてみようと思います。

2008年7月20日日曜日

iPhone節電—5つのコツ

1日持たない!と罵られる iPhone。
節電のコツを少し。

1. 画面の明るさを最低に。自動調整機能をOFF。
2. 外出したらWiFiはOFF。
3. 必要な時以外、位置情報サービス(GPS)をOFF。
4. iPhone以外に携帯があれば、メールの自動受信をOFF。
5. 使い終わったらスリープボタン。

これで2日持ちました。
他にもありそう。

2008年7月7日月曜日

[Windows]ODBCの画面を開くコマンド

コマンドを指定して実行で、「odbcad32」でEnter。

ほかのショートカット系のコマンドについては、
http://pasofaq.jp/windows/admintools/cpllist.htm
が参考になります。

2008年6月25日水曜日

インターネットVPNとフレッツグループアクセスの共存

ip route default gateway pp 2
ip route 192.168.2.0/24 gateway pp 1
ip route 192.168.3.0/24 gateway tunnel 1
ip filter source-route on
ip filter directed-broadcast on

ip lan1 address 192.168.1.1/24

pp select 1
pp always-on on
pppoe use lan2
pp auth accept pap chap
pp auth myname (フレッツグループアクセスのユーザID) (パスワード)
ppp lcp mru on 1454
ip pp mtu 1454
pp enable 1

pp select 2
pp always-on on
pppoe use lan2
pp auth accept pap chap
pp auth myname (インターネット接続のユーザID) (パスワード)
ppp lcp mru on 1454
ppp ipcp ipaddress on
ip pp address (固定IPアドレス)
ip pp mtu 1454
ip pp nat descriptor 1
pp enable 2

tunnel select 1
ipsec tunnel 101
ipsec sa policy 101 1 esp 3des-cbc md5-hmac
ipsec ike local address 1 192.168.1.1
ipsec ike pre-shared-key 1 text (事前鍵パスワード)
ipsec ike remote address 1 (IPSec接続先の固定IPアドレス)
tunnel enable 1


nat descriptor type 1 masquerade
nat descriptor address outer 1 (固定IPアドレス)
nat descriptor masquerade static 1 1 192.168.1.1 udp 500
nat descriptor masquerade static 1 2 192.168.1.1 esp

ipsec auto refresh on

dhcp service server
dhcp server rfc2131 compliant except remain-silent
dhcp scope 1 192.168.1.100-192.168.1.191/24

dns service off
dns server (プロバイダから割り当てられたDNS)
dns private address spoof on

2008年6月21日土曜日

インデックスの整合性エラーを修復する手順

問題のあるデータベースに対して DDBC CHECKDB を実行します。
実行結果にインデックスの整合性エラーが出力された場合、以下のコマンドでインデックスのエラーを修復できます。

DDBC CHECKDB(dbname, 'repair_rebuild')

2008年6月20日金曜日

障害後のMDFファイルとLDFファイルだけで復旧させる方法

トランザクションログがない状態で、障害発生後のMDFファイルとLDFファイルで復旧させる方法を説明します。この方法で復旧できない場合は、直近のバックアップファイルでの復旧となります。

1. 復旧準備

(1) 該当のデータベース物理ファイル(mdf、ldf)を、別のディレクトリに移動
(2) Enterprise Manager から、問題のデータベースと同じ名前、同じデータファイル名、同じログファイル名を作成します。
(3) SQL Server を停止
(4) 手順(1)にて移動させたデータベース物理ファイル(mdf、ldf)を、手順(2)で作成した新規のデータファイル、ログファイルに上書きコピー
(5) SQL Server を起動

※この時点ではまだデータベースにはアクセスできない

2. DBCC DBRECOVER
2-1 未確認モード解除

use master
go
sp_configure 'allow updates',1
go

reconfigure with override
go

-- 未確認モード解除
update master..sysdatabases set status = 16 where name = 'データベース名'
go


2-2 DBCC DBRECOVER
DBCC DBRECOVER ('データベース名', IGNOREERRORS)

※この時点で「未確認」のままであれば、緊急モードで DDBC REBUILD_LOG を実施。

2-3 DBCC CheckDB

DBCC CHECKDB ('データベース名')

2008年6月19日木曜日

復旧モデルがシンプルの場合の障害対策の限界

SQL Server 2000では、データベースを作成すると復旧モデルはシンプルが初期値になります。
復旧モデルがシンプルの場合、障害対策には限界があります。


障害発生時、現場のSQL Serverに対して以下のコマンドでトランザクションログを救出します。

BACKUP LOG database_name TO DISK='filepath'
WITH NO_TRUNCATE

しかし、このコマンドは、復旧モデルがフル、または一括ログに設定されている場合に限り、有効です。
復旧モデルがシンプルの場合、直近のフルバックアップで復旧するしかありません。


MDFファイル破損、トランザクションログなしで、障害後のLDFファイルからデータを復旧したい

2008年6月13日金曜日

エラーが発生したらロールバックする

BEGIN TRANSACTION MyTransaction
INSERT INTO Patient VALUES ('テスト患者', '2004/1/5')
SELECT @ins_error = @@ERROR

IF @ins_error = 0
BEGIN
COMMIT TRANSACTION MyTransaction
END
ELSE
BEGIN
PRINT 'エラーが発生したのでロールバックします'
ROLLBACK TRANSACTION MyTransaction
END

SQL Server 2005では構造化例外が使用可能なようです。
まだまだ現役のSQL Server 2000の全機能のうち、僕の会社では2%も使っていないと思われます。Excel以下のひどい扱いです。せめてトランザクションが使えるようになってほしいです。何だか言っていることが悲しいです。

2008年6月6日金曜日

ATOKにしようと決めた瞬間

急性上気道炎→旧成城木藤園

を変換されたとき、旧日本庭園をイメージしたので、会社のPCをATOKにします。これで3個目。

2008年6月3日火曜日

getURL関数でPOSTすると、初回実行時のデータが送信される

ActionScript 2.0のgetURL関数を使ってデータを送信する場合、

var mc:MovieClip = _root.createEmptyMovieClip("mc", 0);
mc.getURL("送信先のURL", "_self", "POST");
mc.removeMovieClip();

とコーディングします。
最後にremoveMovieClip関数を呼び出して、初回実行時のデータを呼び出さないようにします。


参考URL:苦い開発「getURL()でPOST送信」

2008年6月2日月曜日

ブラウザの[×]ボタン押下時に画面遷移をキャンセルさせる

HTMLの<header>タグ内にJavaScriptで以下のように記述します。

window.onbeforeunload = function(){
    return '本当に終了しますか?';
}

FireFox 2.0以降ではブラウザから以下のような確認メッセージが表示されます。


[キャンセル]ボタンを押すと画面遷移しません。[OK]ボタンを押すと画面が閉じられます。

確認画面へのメッセージは、スクリプトの返り値として(return)記述します。

2008年5月31日土曜日

.net framework 3.5対応のMCTSは日本で受験できない

結論:できません。

日本のMicrosoftのサイトには、2008年2月~3月にかけてリリースされると記載されています。

しかし、日本のMCTSの試験一覧には上記の試験がありません。少なくても日本語の試験は、開発中と推測されます。

英語のMCTSの試験一覧には上記の試験があり、すでに合格した方もいるようです。

「日本での試験実施までの間、勉強してください」というMicrosoftからの電波親心を受信した方は、Amazonでトレーニングブックを購入できます。英語ですが。