2010/12/31

Cygwin/Xインストールメモ

VMWare on Windows XPを、virtualbox on Debian lenny(5.0)に移行した。
移行にあたり、以前はリモートデスクトップでホストOS(Windows XP)にアクセスしていたのが利用できなくなった。
そのため、クライアントのWindowsにフリーのX Serverが導入できるCygwinをインストールした。

ここからsetup.exeをダウンロードしてインストール。
Install from Internetを選んでネットから直接パッケージをインストールする。



インストールする対象とユーザはデフォルトのまま。


一時ファイル置き場は適当に選ぶ。

ダウンロード元は個人的な好みでiijを選択。

X Serverを起動するのに必要な最低限のパッケージをインストールする。
  • X11/xorg server 1.9.3-1
  • X11/xinit 1.2.1-1
  • X11/X-start-menu-icons 1.0.4-1
  • Net/openssh 5.6p1-2

これでインストール準備完了。

debian上のプログラムをWindows上に表示できるかテストする。
スタートメニューからCygwin-X/XWin Serverを起動。続いて、表示先を指定してリモートにあるプログラムを起動する。

$ export DISPLAY=:0.0
$ ssh -Y username@remote_hostname_or_ip_address
接続できたら、xclockを起動してみる。
$ xclock &
無事起動したらテスト完了。

続いてXDMCPを使ってログインしてみる。
Debianのログイン画面左下のメニューからリモートアクセスを許可できるので許可する。続いて、Cygwin/Cygwin Bash Shellを起動してXWinを起動する。

$ XWin.exe :0 -query remote_hostname_or_ip_address
無事Windows上にdebianのログイン画面が表示されたら成功。

2010/12/29

ライセンス和訳

ライブラリを探すときはライセンスがいっつも面倒です。
参考になる和訳識別子をメモ。

2010/11/08

これがWikipediaの裏側、知られざる大規模システムの実態「Wikipedia / MediaWiki におけるシステム運用」

これがWikipediaの裏側、知られざる大規模システムの実態「Wikipedia / MediaWiki におけるシステム運用」 @ GIGAZINE
めちゃくちゃ勉強になる。
これが世界トップクラスのサーバか。
Googleの100万台以上のサーバに対してWikipediaが350台で動いているというのが驚き。
徹底的にキャッシュを考えることでここまで減らせられるんだなぁ。

2010/09/11

Windows 7の魅力を伝えたい動画



インタフェースはAppleばかり注目されますが、Win7は微妙におせっかいに使いやすくなってますね。
「Win+左右」と「Win+Shift+上下」と「Win+数字」が気に入りました。

2010/08/24

Oracle、Java 特許侵害で Google を提訴、Android 配布中止求める

Oracle、Java 特許侵害で Google を提訴、Android 配布中止求める

ネットを漁ってるとGoogleさん真っ黒っぽいので、どうするつもりなんでしょうね。
Android携帯を使っている1ユーザとしては、Oracleさん程々にして欲しいです。

で、本題はコメントの中にあったfreepantentsonlineをメモ。
今後の人生で使うことがあるかは疑問だけど、米国特許をオンラインで眺めることができるらしい。

2011/01/25追記: 参考

2010/07/31

ESXiでホットバックアップしよう

しなです。久しぶりに小ネタでも。

VMWARE PLAYER上でサーバを動かして,Windows Updateの時に一緒にバックアップ(ネットワーク越しのコピー)していたのですが。

最近,仮想ディスクが大きくなって,どんどんバックアップの間の
パワーオフ(&コピー)の時間が長くなってきたのです。
80GBでも100Mbpsだと2時間コース。

ふとぐぐれば,ESXiだとホットバックアップもどきが取れるらしい。

せっかくの夏休み(&レイオフ)中なので試してみることに。


まずD510を買ってESXiをインストールする。
http://d.hatena.ne.jp/shibason/20100117/1263711644

ホットバックアップのスクリプト(backupServer.sh)と説明はこちらのを参考にいじってます。
http://www.witkitty.com/wordpress/2009/07/05/esxi-backup-part2/

仮想ディスクのバックアップをとるとき"-d monosparse”を削除しています。
これだと,バックアップ先のフォルダ名を変えるだけでリストアできるので。


Remote Tech Support モード(SSH)を有効にしてSSHでログイン
チャレンジレスポンス認証を使う。


cd /vmfs/volumes/datastore1/
./backupServer.sh [Guestname]


cronに登録する
http://www.masatom.in/pukiwiki/VMware/ESXi/%A5%D0%A5%C3%A5%AF%A5%A2%A5%C3%A5%D7%B1%BF%CD%D1/#o2db64a9


なんだかんだでホットバックアップはできたみたいなので満足。


世代バックアップもできそうなのですが,それをやるにはHDDの増設が必要になるんで次の機会に(´・ω・`)

2010/07/02

Macのアプリケーションバンドル時のカレントディレクトリをどうするか

仕事でQtを使ってマルチプラットフォームの環境で動くアプリケーションを作っているんですが、個人的に結構泣かされてるのがMacのbundleの仕組みです。
bundleの仕組みを簡単に説明すると、Macではアプリケーション配布時、フォルダの下に実行ファイル用のフォルダやリソース用のフォルダが作られ、その中にファイルが設置されます。
それだけ聞くと「Windowsと同じでは?」と思いますが、Finder(Windowsで言うexplorer)からアプリケーションを開くときはファイルが保存された親フォルダをダブルクリックして起動します。つまり、Finderからはフォルダが単体のアプリケーションに見えるわけです。
Macだけを対象としたアプリケーション開発をするなら、インストールもアンインストールも楽で、開発者にとってはブラボーは仕組みなんですが、マルチプラットフォームを対象としたアプリケーションを作っている場合は、カレントディレクトリ差異に煩わしさがありました。
これは「きっとMacやQtを使いこなしてないしょぼい開発をしているから発生する問題に違いない」と思っていましたが、ネットで解決方法を見つけてびっくりです
QDir dir(QCoreApplication::applicationDirPath());
#if defined(Q_OS_WIN)
if (dir.dirName().toLower() == "debug" || 
    dir.dirName().toLower() == "release")
{
 dir.cdUp();
}
#elif defined(Q_OS_MAC)
if (dir.dirName() == "MacOS")
{
 dir.cdUp();
 dir.cdUp();
 dir.cdUp();
}
#endif
QDir::setCurrent(dir.absolutePath());
cdで移動してるだけやんけ!
でも、よく考えたら下手に自動で何かされるよりいいのか。

2010/06/10

MSのCEOバルマー氏、「iPad」を語る--「誰もが買えるものではない」

 MSのCEOバルマー氏、「iPad」を語る--「誰もが買えるものではない」
CNET Japanより

「昨日、ある人がわたしとの会議の中で、iPadを使ってメモを取ろうとした。それは楽しい体験だった。その会議はあまりはかどらなかった」(Ballmer氏)

MSのCEOバルマー氏、「iPad」を語る--「誰もが買えるものではない」
なんというKYw

iPad自体はパソコンに取って代わるものにはならないんじゃないかなぁーと思ってます。ユーザの欲求には限度がないからです。ですが、消費者の時間を取りあう媒体として考えるなら、家庭用PCは厳しいでしょうねぇ…。

2010/05/31

国内ホスティングサービスのネガティブな比較(その1)

ホスティングサービスを何社か利用する機会があったので愚痴を込めて比較メモ。
下記はネガティブ内容を書いています。仕事で使う人は鵜呑みにしないできちんと調べて契約して下さい。

スマイルサーバ
ここからの移行を担当したのだが、そのときに泣かされたのが「スマイルサーバ以外のIPアドレスをDNSに登録できない」という縛り。
囲い込みの手法の一つなんだろうが、なんだそれ…と思った。

WebARENA
仮想専用サーバーのSuitePROをよく利用している。root権限を取得してイロイロできるサービスとしては最も安いと思われる。
ブラウザから利用できるコントロール画面がついており、再起動やOSの再インストール、3世代丸ごとバックアップできるのも非常に便利だ。
費用対効果を考えると小さな案件にこれだけ適したものを見つけるのは難しい。
が…。
WebARENAの恐ろしいところは、サービス品質が低いことだと思う。実際にあった被害としては
  • 有料の自動バックアップシステムが数日動作せず、こちらから問い合わせるまで通知すらなかった。謝罪もなかった。という事が数カ月に1度起こる。
  • 多少重い処理を行っていると、サービスを停止させられてしまった。
といった具合である。使う人はご注意あれだ。
ただ、私はそれでもWebARENAを現在最も愛用している。
「そういうもの」と割り切って、堅牢な運営でなんとかなる案件が多いからだ。

2010/04/23

XML応用技術の仕様一覧

XML応用技術の仕様一覧

業界・用途別のXMLで定義された仕様をリストアップしてくれている。
リファレンス用にメモ。オイラ程度が考えようとする仕様なんて既にあるのが常です。車輪の再発明はできるだけ防ぎたい。

2010/04/21

Detexify2 - LaTeX symbol classifier


Detexify
手書き入力から適切なTeXのコマンドを提示してくれる。
未だにTeXに触れることがある職場なのでありがたい。

2010/04/19

格安で「本をスキャンしてPDFに変換する」お手伝いはじまる

 格安で「本をスキャンしてPDFに変換する」お手伝いはじまる @ /.J
本の置き場所と検索には困っているので非常に嬉しいサービスだ。1冊100円もお手頃感がある。ビジネスとして成立しうるのか怪しいが、個人的には技術書を全てPDF化したい。ただ…
  • 発売後2年以内の書籍しか対応しない
  • 5,000円以上の書籍は対応しない
この2点が邪魔だ…。

2010/04/05

XPERIAファーストインプレッション

やっとXPERIA手に入れました。まだ全然使いこなせていません。

・POBox Touch。打ち間違い防止機能もあり、使い勝手はなかなかの物。
・私の場合、片手で打つときは縦にして使い、両手で打つときは机の上に横に置いて使用する。
・まだ慣れていないため打ち間違いは多い。
・自分の思ったよりも下の方をタッチしてしまう。


・私の場合は機種変だったので、iモードは解約。
・残すことも可能だけど、iモード.netの契約料も含めると月1500円ぐらい増えそうなので諦め。
・一応iモード時代のアドレスは180日は有効(=他の人にアドレスを取られない)とのこと。
・スマートフォンでもiモードに対応させる噂があるのでそれまで待つのも手か。

・付属のメーラーはPOP before SMTPに対応してなかった。
・POPを別のアドレスにしつつ、SMTPサーバはsmtp.gmail.comを指定することにする。
・WordやExcelも一応見られる。

・付属のカレンダーアプリケーションはいまいち。速攻Calendar Padに乗り換え。

・TwitterアプリはTwidroidを使用。設定は全部英語だが、機能がシンプル。
・ただバックグラウンドでTLを取りに行くのは電池の消耗が激しくなりそうなのでいまのところ止めている。
・XPERIAの使用感を
http://twitter.com/jihna2002
でつぶやくつもり。

・XPERIAで私が最も期待していたのはカメラ機能。
(もっていたデジカメが結構古かったので)
・撮った画像をそのままPicasaにアップ、と考えていたがFOMA回線だと遅すぎてつらい。
(バックグラウンド処理できるとはいえ)
・画像や動画のアップは流石に無線LAN必須か。
・人物はまあまあ綺麗に撮影できる。
・ただ私の場合はどうしても手ブレで、風景等は撮るのが難しかった。
・以下、撮影した画像を全く加工しない状態でアップ。



・ワイヤレスステレオヘッドセット
http://www.sonyericsson.co.jp/product/accessories/hbh-ds205mk2/
これはすぐにIYHしちゃうかも。

久々にわくわくしています。

2010/03/19

c2talkサービス終了

ソーシャルカレンダ c2talk サービス終了

http://www.c2talk.net/contents/archives/70

昨年10月からオフィシャルカレンダの更新がばったり
止まっていたので、ある程度予想はできましたが・・・。

使えるオフィシャルカレンダが充実してたし
なかなか出来の良いソフトだったので残念。

2010/03/13

Cadence SKILL言語

Cadence社のスクリプト言語"SKILL"の日本語でのWikiがありました。

●SKILL備忘録Wiki

http://wikiwiki.jp/aiou/

LISPもどきの言語をCライクにした感じの言語で
いろんな言語にちょっとづつ似てる分、
アタマの中で混ざってなかなかとっさに
文法が思い出せないことが多いです。

これは便利。

Windows XPでのC#の動作の重さを解消する方法 (2)

C#でウィンドウ最小化時のスワップアウトを阻止する方法のつづき。

● WndProcをoverrideすることによって、ウィンドウメッセージ処理をinterruptできる。

http://www.atmarkit.co.jp/fdotnet/dotnettips/467wndproc/wndproc.html

知らなかった・・・。そんなことできるんだ。

● 最小化処理をinterrupt
先のコレ

http://support.microsoft.com/kb/293215/en-us

をC#で実装すると、こう

http://d.hatena.ne.jp/babydaemons/20080507/1210150398

なる。
これでフォームを最小化するだけでスワップアウトが発生するのは
防ぐことができる。

●ただし、

これをやると、最小化時にタスクバーからも表示が消えるので
タスクトレイにアイコンを置いておいて、そこから復帰させる用途じゃないと
そのままは使えない。
まぁ、そこまでしてスワップを避けたいソフトって常駐ソフトぐらいだから
まぁいっか。

2010/03/11

Windows XPでのC#の動作の重さを解消する方法

C#で組んだアプリがどうもなーんかモッサリ動作に感じる原因が
やーっと分かりました。

● フォームを最小化した後、復帰するときにすごく重いことがある。

最小化したフォームを復帰させるとき非常に重たいことがある。
PCがフリーズした状態で徐々にゆっくりフォームが表示されていく
感じ。時々起こるこれが実際以上に体感速度をすごく遅くしてる。

● 原因はフォーム最小化時のスワップアウト

http://d.hatena.ne.jp/NyaRuRu/20051022

Windows XPはフォームを最小化するとプロセスの"working set"を
縮小する。タスクマネージャのプロセスのメモリ使用量をみてると、
フォームを最小化したときに使用量がぐっと減るのが分かる。

http://d.hatena.ne.jp/NyaRuRu/20071010/p1
http://d.hatena.ne.jp/NyaRuRu/20071027/p1

この状態で他のプロセスがメモリを消費すると、簡単にスワップアウトしてしまう。
で、さらにスワップ状態でGCが動いたりすると、とても重たい処理に発展しちゃったり
することがあるらしい。
.netのメモリ消費量の多さとこのへんの動作の重さがが重なって結果的に
とっても重くなってる感じがする。

● で、どうやって回避するか

Firefoxとかのメモリを食うアプリは最小化時のスワップアウトを回避してるらしい。
これ、

http://support.microsoft.com/kb/293215/en-us

によると、WM_SYSCOMMANDメッセージのSC_MINIMIZEコマンド
の処理中にWorking Setの圧縮が行われているそうなので、
ここをinterceptすることでスワップアウトを阻止できるそうだ。
ただ、メッセージハンドラを直接触れない(多分)C#ではこのままの方法は
とれない。

● タスクトレイを使う方法

常駐型のソフトに関してはタスクトレイに常駐させてしまう方法をとることができる。
まずはNotifyIconを使ってタスクトレイにアイコンを配置して、
フォームの方の最小化ボタンはMinimizeBoxプロパティで禁止してしまう。
で、FormClosingイベントでフォームのVisibleをFlaseにするようにする。
VisibleをFalseにした際には問題のスワップアウトは発生しないようで、
これで動作は非常に快適になった。

●で、普通に最小化したいときはどうするのか

最小化ボタンを押したときに最小化前に発生するイベントが無いのが問題。
CloseしたときのFormClosingに相当するものがあればいいんだけど。
Layoutイベントで
this.WindowState==FormWindowState.Minimized
となるときを拾えば最小化前に処理を発生させることはできそうなんだけど、
FormClosingでのe.Cancelに相当するものが無い。
すなわち、最小化前にVisibleをfalseにすることはできても、
その後で発生するMinimizeを止めることができない。

さて、どうしたものか・・・。

Newspaper economics

Newspaper economics
Googleによる「新聞の滅亡は我々のせいではない」という事を示している資料。
色々とスケールに作為的なものを感じましたが、面白い資料でした。ただ、一番面白いと思ったのは下の資料。

mobile phoneによる広告シェア争いこそが正念場ってことでしょうか。消費につながる広告をおさえないとねぇ。

2010/03/02

【ニコニコ動画】工業技術の大誤算1/2


最近ニコニコを目覚ましにしてたんですが、こいつを目覚ましにしたら600メートルの塔から落ちる夢を見て一気に目が覚めました。
いや、湖に沈む夢でなくて良かった…

動画の内容は非常に面白いです。
座礁の原因が船長の泥酔というわかりやすい理由だけではなくシステムの欠点があったとか、ダムの崩壊理由が法律にあったとかエトセトラエトセトラ。
TOYOTA叩きも単に感情のはけ口に終わらずに、きちんとフィードバックされると良いですなぁ。

2010/02/21

IRCとTwitterの同期

しなです。小ねたをひとつ。

連絡を取るときは,過去にいろいろ作った関係上IRCを使うことが多いのです。
しかし,最近はTwitterもあるので同期できないか調べてみた。

#まぁ某所のログはすでに10年以上たまってるし。
#PCや携帯からもIRCログが読めるので,何とか有効活用したかったってのもあるんだけど。

ググればいくつか出て来るんだが,今回はサーバーを使わない方向で。

といってもLimeChatのサンプルスクリプトにそのもの(「Twitter にポスト」)があるんだけどね。
このままだと /tw ステータス って打ち込まないといけないし。あとめんどくさい。
なのでイベントを変えて処理を追加してみた。


function event::onChannelText(prefix, channel, text)
{
  if (prefix.nick == myNick) {
    // 自分が送信した時の処理
    // Twitter へPOST
    var user = '....';                 // Twitter username
    var pass = '.....';                // Twitter password
    
    var req = new ActiveXObject("Microsoft.XMLHTTP");
    if (req) {
      req.onreadystatechange = function() {
        if (req.readyState == 4) {
          log('POST OK: ' + req.responseText);
        }
      }
      req.open('POST', 'http://twitter.com/statuses/update.json', true, user, pass);
      req.send('status=' + encodeURIComponent(text));
    }

  } else {
    // 受信した時の処理
    // なにもしない
  }
}


あとはLimeChat上の設定でこのスクリプトを使うようにしてやればよい。


しかしクライアントでJavascript使えるのは便利かもな

2010/02/09

Debianにvirtualboxをインストール

2011/07/29 追加:
virtualboxの公式ページが充実しましたね。そこみながらインストールするのが最新版が使えて良いと思います。

最近は同僚に勧められてVMWareからvirtualboxに移りました。いろいろと良い点はあるのですが、個人的に気に入っているのはスナップショットの履歴を取れることや、リモートデスクトップをサポートしていないguest OSにリモートデスクトップでアクセスできることでしょうか。XServerって遅くてイライラするんですよね...。
で、Debian 5.0(lenny)にvirtualboxをインストールしたのでメモ。

# aptitude install virtualbox

aptitudeを使ってサクッと起動しようとすると、モジュールを組み込めと叱られた。

Please install the virtualbox-ose-modules package for your kernel and execute 'modprobe vboxdrv' as root.
VBox status code: -1908 (VERR_VM_DRIVER_NOT_INSTALLED).
終了コード:
0x80004005
コンポーネント:
Console
インターフェース:
IConsole {d5a1cbda-f5d7-4824-9afe-d640c94c7dcf}

rootになって組み込む。

# modprobe vboxdrv

毎回モジュールを組み込むのは面倒なので、/etc/modulesにもvboxdrvを追加しておく。
今度こそ起動...と思ったら、またエラーが出た。

The VirtualBox kernel driver is not accessible to the current user. Make sure that the user has write permissions for /dev/vboxdrv by adding them to the vboxusers groups. You will need to logout for the change to take effect..
VBox status code: -1909 (VERR_VM_DRIVER_NOT_ACCESSIBLE).
終了コード:
0x80004005
コンポーネント:
Console
インターフェース:
IConsole {d5a1cbda-f5d7-4824-9afe-d640c94c7dcf}

どうもvboxusersグループの権限が必要なようだ。てことで、virtualboxを起動したいユーザをグループに追加。

# gpasswd -a ユーザ名 vboxusers

やっと無事に起動。
解像度を自由にいじれるようにするため、ドライバをインストールする。本家で公開されているdebianパッケージからVBoxGuestAdditions.isoイメージを抽出する。

# dpkg-deb -x virtualbox-3.1_3.1.2-56127_Debian_lenny_amd64.deb foo
# find -name \*.iso
foo/usr/share/virtualbox/VBoxGuestAdditions.iso

見つかったisoイメージをGuest OSにマウントさせればドライバをインストールすることができる。

2011/07/01 追記:
バージョンアップされて変わったのか、virtualboxをインストールしただけではリモートデスクトップでアクセスできなくなっていました。拡張パックをインストールする必要があるんですね。気づかずにしばらくあがきました。トップページからExtension Packをダウンロードしてインストールです。

$ wget http://download.virtualbox.org/virtualbox/4.0.10/Oracle_VM_VirtualBox_Extension_Pack-4.0.10-72436.vbox-extpack
$ VBoxManage extpack install http://download.virtualbox.org/virtualbox/4.0.10/Oracle_VM_VirtualBox_Extension_Pack-4.0.10-72436.vbox-extpack

2011/07/29 追記: 今はextpackをダウンロードしてダブルクリックするだけでインストールできました(virtualbox-4.1/Debian Squeeze)。時代の進歩すげー。

2013/08/17 追記: 我ながら何度同じミスをしたら気がすむのだろうか。「リモートデスクトップはコンピュータに接続できません。次のいずれかが原因です。」と出た場合は、きちんとホストOSのIPアドレスを入力しているか確認すること。ゲストOSのIPアドレスではない!

2010/01/26

Firefoxでブックマークを新しいタブで開く方法

Firefoxでブックマークを開く際に、
「新しいタブで開く」をデフォルトにするために、

Oretab
http://espion.just-size.jp/archives/09/181191625.html

というアドインを使わせていただいていたのですが、
Firefoxが3.6にバージョンアップして、
上記のアドインが使えなくなってしまいました。

代わりに以下のアドインで同様の機能が実現できるようです。

Tab mix Plus
https://addons.mozilla.jp/firefox/details/1122

2010/01/20

【ニコニコ動画】気象衛星ひまわり第三話「ひとりぼっちの宇宙」


list
( ;∀;)イイハナシダナー
アイマスがわかって、理系の人は楽しめるかと(対象セマッ!)
事業仕分け見てて思いましたが、税金を使う関係者はその重要性を洗脳レベルでわかりやすく説明する義務がありますね。
めちゃくちゃ重要で、評価されない仕事ですが...

2010/01/17

Mabinogi on Wine

Ubuntu 9.10にWindows APIエミュレータのWineをインストールしてマビノギを動かしてみました。
問題なく動いて驚き。さすがバージョン1.0を出すのに15年かかっただけあるw


以下はその手順。
まず、NVIDIAやATIのドライバをインストールする。

# aptitude install envyng-core envyng-qt


メニューの[アプリケーション][システムツール]からenvyngを起動して、自分が使っているビデオカードのドライバをインストールする。

リポジトリとパッケージリストを追加する。

# wget -q http://wine.budgetdedicated.com/apt/387EE263.gpg -O- | sudo apt-key add -
# sudo wget http://wine.budgetdedicated.com/apt/sources.list.d/jaunty.list -O /etc/apt/sources.list.d/winhq.list


リポジトリを更新する。

# sudo aptitude update


追加したリポジトリからWineをインストール。

# sudo aptitude install wine


Wine便利ツールのwinetricksをインストール

# wget http://www.kegel.com/wine/winetricks
# chmod 755 winetricks
# sudo chown root.root winetricks
# sudo mv winetricks /usr/local/bin


winetricksを使って、WineにフォントとDirectX9をインストールする。

# winetricks



d3dx9とallfontsにチェックをいれてOKを押す。
マビノギをインストールするため、jp_mabinogi_setup_167.exeをダウンロードしてWineから起動。

# wine jp_mabinogi_setup_167.exe


以上。

モリアンサーバに(何もできない)キャラがいるのでよろしく。

2010/01/15

東証システム、全面刷新の真相

東証システム、全面刷新の真相 @ ITPro
非常に楽しく読ませてもらいました。
世界が違いすぎて、こんなシステム屋さん達もイルノネーという感じですがw
一つびっくりしたのが


ITProより抜粋

2005年までの東証のシステム部門では、ITベンダーにシステム開発を依頼する際、RFP(提案依頼書)を書かずにITベンダーに口頭あるいは書面で大まかな要件を伝え、見積りを出してもらうケースが少なくなかった。要件定義の中身は、「現行業務を忠実にシステム化してもらいたい」、あるいは「現在のシステムを参考にしてもらいたい」といったレベル。実質的にはベンダーに要件定義書を作らせていた。

東証システムの開発体制丸投げ体質からの脱却を目指す

東証でこんなレベルなのか…と、思いました。
ですが…
実は別の考え方もできると思うんですよねー。
システム屋頭で考えれば駄目な事例ですが、丸投げをすることによって空いた時間をどこに費やすかが重要です。社員を利益生成機として考えると、丸投げは必ずしも駄目な事じゃなかったりすると思うのです。思想ノ問題デスケドネ。技術ブログなのであえて逆を書いてみましたw
補足でアクセンチュア視点の記事も書いて欲しいなぁーw

2010/01/11

ファイルサーバのデータを暗号化

個人情報をきっちりと暗号化することにした。
Debian lenny(と、Ubuntu 9.10)で構築したシステムをcryptsetup-luksを利用してファイルシステムごと暗号化したものに変更する(lennyからsqueeze、wheezyと安定継続稼働中)。

まず、現状を把握する(全く覚えてないのでw)。
現在利用しているファイルシステムを確認。

# mount
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
procbususb on /proc/bus/usb type usbfs (rw)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/sdb1 on /share type ext3 (rw,errors=remount-ro)

(ハードディスクを増設した場合や、mountしてない場合はfdisk -lが便利)

/dev/sdbを暗号化パーティションにしてext3のファイルシステムを作ることにする。

手始めに、暗号化したときのコストがどの程度か測るために、暗号化前の処理速度を測ることにした。
が…。
どんなハードディスクを使ってたっけな?w

# cat /proc/scsi/scsi
Attached devices:
...
Host: scsi2 Channel: 00 Id: 00 Lun: 00
Vendor: ATA Model: Hitachi HDS72202 Rev: JKAO
Type: Direct-Access ANSI SCSI revision: 05


HitachiのHDS72202か。
カタログスペックを調べようと思ったらぐぐっても見つからない...
ま、いっか。
ベンチマークツールをインストールして速度を測ってみる。

まず読み込み速度。

# aptitude install hdparm
# hdparm -Tt /dev/sdb
/dev/sdb:
Timing cached reads: 7408 MB in 2.00 seconds = 3707.32 MB/sec
Timing buffered disk reads: 396 MB in 3.00 seconds = 131.95 MB/sec


書き込みも測ってみる。

# time dd if=/dev/zero of=/share/hoge ibs=1M obs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 3.8181 s, 281 MB/s
real 0m3.823s
user 0m0.156s
sys 0m2.256s


さて、本番。

カーネルをコンパイルする。

2010/01/17 追記
Ubuntu 9.1やDebian6以上などの、最近のディストリビューションの場合はカーネルの再コンパイルの必要はない。
カーネルがサポートしていない場合、cryptsetup時に以下のようなエラーメッセージが出る。その場合はカーネルを正しく作り直すべし。

Command failed: Failed to setup dm-crypt key mapping.
Check kernel for support for the aes-cbc-essiv:sha256 cipher spec and verify that /dev/sda3
contains at least 258 sectors



カーネルコンパイルの手順は次のようになる。

# aptitude install make gcc
# aptitude install kernel-package fakeroot
# aptitude install linux-source
# cd /usr/src
# tar xvjf linux-source-2.6.26.tar.bz2
# cd linux-source-2.6.26


設定を引き継ぐため古いコンフィグファイルをコピーする。

# cp /boot/config-2.6.26-2-amd64 .config


昔のコンフィグをマージする。

# make oldconfig


続いて、暗号化モジュールをカーネルに組み込む。
グラフィカルなカーネル設定(gconfig)を立ち上げるため、以下のライブラリをインストールする。

# aptitude install libgtk2.0-dev libglade2-dev


続いて、設定画面を呼び出す。下記のコマンドは、Root Terminalから呼び出せばXの設定は必要ない。

# make gconfig


[Device Drivers]->[Multiple devices driver support(RAID and LVM)]->[Device mapper support]
[Device Drivers]->[Multiple devices driver support(RAID and LVM)]->[Device mapper support]->[Crypt target support]
の2つをYにして、カーネルに組み込む。
コンパイルして、インストールする。

# make-kpkg clean
# fakeroot make-kpkg --initrd --revision=20100111.1224 kernel_image kernel_headers modules_image
# cd /usr/src
# dpkg -i linux-headers-2.6.26_20100111.1224_amd64.deb linux-image-2.6.26_20100111.1224_amd64.deb


再起動後、やっとこさ暗号化ファイルシステムを作成。
まず、dm-cryptの設定ツールであるcryptsetupをインストールする。

# aptitude install cryptsetup


暗号化アルゴリズムにaes、ハッシュアルゴリズムにsha256、キーサイズに256を指定する。

# cryptsetup --verbose -y luksFormat -c aes-cbc-essiv:sha256 --key-size 256 /dev/sdb1
WARNING!
========
This will overwrite data on /dev/sdb1 irrevocably.
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.


ここで気をつけなくてはいけないことは、大文字でYESと答えないとCommand failedというメッセージが表示されて終了してしまうことである。
なんつーユーザーフレンドリーなインターフェース。まるでおいらが作ったアプリケーションみたいだ。

論理パーティションを作成して適当な名前(encrypted_sdb1)をつける。

# cryptsetup luksOpen /dev/sdb1 encrypted_sdb1
Enter LUKS passphrase:
key slot 0 unlocked.
Command successful.


Device-Mapperに暗号化レイヤが用意されたか確認。

# ls -l /dev/mappaer
crw-rw---- 1 root root 10, 59 2010-01-11 15:41 control
brw-rw---- 1 root disk 254, 0 2010-01-11 15:45 encrypted_sdb1


後は通常のパーティションと同じように扱える。パーティションを他と同じようにext3でフォーマットする。

# mkfs.ext3 /dev/mapper/encrypted_sdb1


マウントする。
※/dev/sdb1を直接mountして使うと壊れてしまうらしいので注意

# mkdir /share
# mount -t ext3 /dev/mapper/encrypted_sdb1 /share
# df
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/sda1 59526528 4525292 51977404 9% /
tmpfs 3551324 0 3551324 0% /lib/init/rw
udev 10240 860 9380 9% /dev
tmpfs 3551324 76 3551248 1% /dev/shm
/dev/mapper/encrypted_sdb1
1922857324 200160 1824981616 1% /share


よしよし。
さて、暗号化によりどの程度遅くなったか確認する。

# hdparm -Tt /dev/mapper/encrypted_sdb1
/dev/mapper/encrypted_sdb1:
Timing cached reads: 6934 MB in 2.00 seconds = 3469.98 MB/sec
Timing buffered disk reads: 228 MB in 3.03 seconds = 75.35 MB/sec


読み取り速度はcachedで7%の速度低下、bufferedで43%の速度低下。両極端な結果が出たな。cachedの速さもびっくりだけど、bufferedの速度低下もびっくりだ。
続いて書き込み速度のテスト。

# time dd if=/dev/zero of=/share/hoge ibs=1M obs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 14.2425 s, 75.4 MB/s
real 0m14.245s
user 0m0.160s
sys 0m2.240s


74%の速度低下。キッツー。
用途によっては使い物にならないですね、コレ。

今後マッピングの解除とunmountは以下のようにする。

# umount /share
# cryptsetup luksClose encrypted_sdb1


今後マッピングとmountしたい時は次のようにする。

# cryptsetup luksOpen /dev/sdb1 encrypted_sdb1
# mount -t ext3 /dev/mapper/encrypted_sdb1 /share

もし、

Command failed: No key available with this passphrase.

というエラーメッセージが出た場合は、dm_cryptモジュールが読み込まれているか、lsmodを実効して確かめる。

次はUPS買うかな...

2013/06/28 追記:
squeezeに移行すると、lennyで作った暗号化ファイルシステムがマウントできないという悲鳴の声がネット上でちらほら見かけました。どうも暗号化するときのデフォルト設定が、変わったのが原因(?)ぽいですね。とりあえず上記の暗号化アルゴリズムとハッシュアルゴリズムを選択した場合は、再マウント時に何もトラブルなりませんでした。カーネルも再コンパイルが必要なくなり、modprobe dm_modしてからcryptsetupするだけで問題なしです。また、Debian7ではそれすら必要なかったです。楽になったなぁ…。

2013/06/04 追記:
他のベンチマークがあったので追記 - The Cost Of Ubuntu Disk Encryption
結構いろいろな測定方法が紹介されてる。今度参考にしようっと。

2011/07/29 Debian squeeze環境下でlennyで暗号化したシステムをマウントする方法を末尾に追加。

2009年 下半期 分析

2009/07/01〜2009/12/31までのアクセス状況を振り返ってみた。

総セッション数5,684で2008年下半期の上半期の3,346に比べれば60%増。少ないながらも、なかなか順調です。

2009年下半期の人気のあるコンテンツは以下の順位でした。
1. EnterキーでTabキーのようにフォーカスを移動させるJavaScript(prototype.js使用)
2. VMWare guest OS(CentOS 5)の解像度変更
3. KAKASI - 漢字→かな(ローマ字)変換プログラム
4. 学生は無料でWindows Server 2008をもらえる
5. VMWareゲストOS(Windows2000)の解像度をワイド対応にする
6. VC++ 2005でコンパイルしたexeが配布できなくなった
7. MRTGでYAMAHA RT57iの転送量を監視
8. VMWare ゲストOS上のlinuxの時刻が狂う
9. 日めくり美人
10. Direct3D on VMWARE

ちなみに…、このブログを訪れる人で一番多い検索キーワードは「日めくり美人」でした。待てやw

2010/01/05

@icon変換を使ったWindowsアイコンの作成の仕方

画像ファイルからwindows アイコンファイル(.ico)を生成するのに
「@icon変換」というツールを使わせていただいているのですが、
http://www.vector.co.jp/vpack/browse/pickup/pw5/pw005478.html

多数の解像度/色数を含んだicoファイルの作り方が意外と難しくて
いつも困るのでメモ。

詳細はここを参考に。
http://msdn.microsoft.com/ja-jp/library/ms997636.aspx

1. @icon変換を起動
ドラッグドロップで画像ファイルを@icon変換に放り込む。

本来は
サイズ 48x48, 32x32,16x16 + 色 4,8,24 bit
の組み合わせがあるのがベスト。

色数&サイズの小さいものから並べ、たほうがいい?かも。

2. リスト→ライブラリ編集

3.一連のアイコンをすべて選択し、
 右クリック→選択アイテムをグループ化する。

4.ツール→グループごとにマルチアイコンに保存

普通に「マルチアイコンとして保存」すると「.ico」ファイルでなく、
 「.icl」ファイルができてしまう。

Windows XP SP3 + @icon変換 ver 1.21で確認

C#のエスケープシーケンス

C#で使えるエスケープシーケンスをよく忘れるのでメモ。

> http://www.melma.com/backnumber_120830_237603/

\' シングルクォーテーション
\" ダブルクォーテーション
\\ 円マーク
\0 null
\a ビープ音
\b バックスペース
\f 改ページ
\n 改行
\r キャリッジリターン
\t 水平タブ
\v 垂直タブ
\x16進数 16進エスケープシーケンス
\u16進数 UNICODE文字 0000 ~ FFFF

エスケープシーケンスを使いたくない場合には、
以下のように””の前に@をつけると
エスケープシーケンスが効かなくなる。

NG> filepath="c:\temp\test.text"
OK> filepath="c:\\temp\\test.text"
OK> filepath=@"c:\temp\test.text"

2010/01/03

64bit対応Adobe Flash PlayerをIceweaselにインストール

現在メインの趣味用OSをWindows XPからDebian Lenny(64bit版)に移行テスト中。
ブラウザはFirefox(Iceweasel)を愛用してるんだが、64bit版のflashプラグインは用意されていない様子。
おいらは趣味がニコニコ動画というリア充なのでとても困る。Adobe Labsから拾ってインストールする方法を覚書。

Adobe Labs - Downloadsから、Adobe Flash Player 10 for 64-bit Linuxをダウンロード。解凍して、$HOME/.mozilla/pluginsにlibflashplayer.soを置けば終了。pluginsディレクトリがなければ作るべし。

追記
2010/02/08 上記のライブラリはアホほど安定していない。普通に32bit版を使うべし。