CentOS on VMware Server

備忘録。WindowsマシンにVMware Server 2.0.2 + CentOS 5.4を突っ込むことになったので詳しくメモを取ってみた。

1.VMwareのインストール

VMware Server 2.0.2をダウンロードしてインストールする。この手順は簡単なのでパス。ユーザー登録してライセンスキーを取っておくこと。

2.CentOSのインストールの準備

(1) CentOSのDVDイメージをダウンロード

CentOS 5.4のDVDイメージ(isoファイル)をダウンロードして、C:\imagesに配置した。

(2) VMware管理画面を開く

https://PC名:8333/ui/を開く。ログイン画面が開くので、Windowsアカウントを使ってログインする。ドメイン環境ならば「ドメイン\ユーザー名」+パスワードが使える。

(3) DVDイメージを登録

DVDイメージをVMwareで認識できるようにする為に、新しいデータストアを追加する。画面右上の「Commands」→「Add Datastore」を選択。

Name: DVD
Directory Path: C:\images

CIFSの欄を使えば別のマシンにあるイメージファイルも使えるようだ。

Continue reading

【Perl】PARでexe化するときにファイルを追加する

【Perl】Win32::GUI::LoftでGUIプログラミング」」ではThe GUI Loftを使ってGUIアプリケーションを書いた。

作成したアプリケーションを配布するときにはPAR::Packerでexe化すると便利なのだが、スクリプトファイル(拡張子.pl)の他にGUI定義ファイル(拡張子.gld)もパッケージしないといけない。まずはパッケージ内部のgldファイルを読み込めるようにスクリプトを訂正しよう。

#!/usr/bin/perl
use strict;
use warnings;
use FindBin;
use Path::Class;
use Win32::GUI::Loft;

my $gld = "testGUI.gld";
my $scalar = $INC{ "PAR.pm" }
    ? PAR::read_file( $gld )
    : file( $FindBin::Bin, $gld )->slurp;
my $design = Win32::GUI::Loft::Design->newScalar(
    $scalar, $gld );
my $win = $design->buildWindow;
$win->btnButton1->Change( -onClick => sub { -1 } );
$win->Show;
Win32::GUI::Dialog;

ハイライトした部分が変更点だ。Perlの小ネタ集に書いたが、%INCハッシュの要素を調べることでPARモジュールを読み込んでいるかどうかがわかる。

これによってexe化したファイルから起動しているのかどうか判定しているわけだ。その上で、PAR::read_file関数1を使ってファイルを読み込んでいる。

 

スクリプトを変更した上で、exe化を実行する。

C:\> pp -a testGUI.gld -o testGUI.exe testGUI.pl

-aオプションによってパッケージにファイルを追加している。後は作成したtestGUI.exeを配布するだけだ。

Continue reading

Windowsで英語キーボードを使いたい!

英語キーボードが好きだ。キートップにひらがなが載っていないのでシンプルだし、スペース“キー”ではなくスペース“バー”がど真ん中に鎮座ましましているのがいい。配列だって

  • Shift + ' = "
  • Shift + - = _
  • Shift + ; = :

みたいに、規則的で覚えやすいと思わない? そうでもない? というわけで、昔からHappy Hacking KeyboardとかRealForce英語配列版とかを使い続けている。

自分だけで使うPCならそれで良かったのだが、会社や家族で共用して使うPCだとうまくいかなくなる。WindowsというOSは再起動なしにキー配列を変えることが出来ないという困った仕様なので、自分の使うときだけキーボードをつなぎ替えるような、勝手なことは出来ないのだ1。これは誰しも悩むことのようで、解決してくれるソフトも販売されている。

Continue reading

【Perl】Spreadsheet::XLSXでセルの値に勝手にフリガナが付く件について

Excel 2007形式(XLSX)のファイルをPerlで扱う必要があったので調べてみると、「Spreadsheet::XLSX」というモジュールを見付けた。

Spreadsheet::XLSX – search.cpan.org
http://search.cpan.org/~dmow/Spreadsheet-XLSX-0.12/lib/Spreadsheet/XLSX.pm

そして次のようにXLSX形式のファイルを用意してスクリプトを実行してみたのだが、セルの値にフリガナがくっついて表示されてしまう1

excel01.png

#!/usr/bin/perl -l
use Spreadsheet::XLSX;
my $excel = Spreadsheet::XLSX->new( "Book1.xlsx" );
my $sheet = $excel->{Worksheet}[0];
print $sheet->{Cells}[0][0]{Val};

実行結果

$ perl readexcel.pl
文字列モジレツ

XLSX形式についてよく知らなかったのでまずはそこから調べてみた。

Continue reading

【Perl】Win32::GUI::LoftでGUIプログラミング

Windows + PerlでGUIアプリを作る手段はいくつかあるが、一番手頃で機能もそれなりなのがWin32::GUIを使うことだ。

Win32::GUI at SourceForge
http://perl-win32-gui.sourceforge.net/cgi-bin/index.cgi

ただ、これにはGUIビルダが付いていない。GUIの構築はあくまでスクリプト上で行わねばならないのが辛いところ。それを解決してくれるツールがThe GUI Loftだ。

The GUI Loft
http://www.darserman.com/Perl/Loft/

遙か5年以上前から更新が停止してるのがなんだかもの悲しいが、その分安定してるのだと考えよう。実際に最新のActivePerl 5.10.1 + Windows7環境でも問題なく動くのだから。

Continue reading

【GVim】Proggy + Osakaで快適コーディング

vim_guifontwide.png

Windows版のGVimでフォントを指定するときは「guifont」「guifontwide」の二種類を指定する必要がある……というのを今日初めて知った。前者は半角、後者は全角のフォントを指定する。今までは前者しか指定してなかったので、全角文字についてはレジストリをいじってFontLinkを使うことで対処していた。

Windows 2000/XPのFont Link機能(Font Linking)の紹介
http://blue.ribbon.to/~akene/fontlink.htm

これでも機能的には十分なのだが、変更するのにレジストリエディタを起動するのは億劫だし、OSを再起動しないと有効にならないのが困りもの。でも、わざわざこんな苦労することなかったのだ。

Gvim on Windows: フォント設定: まじかんと雑記
http://magicant.txt-nifty.com/main/2009/03/gvim-on-windows.html

ここに詳細に書かれているのだが、指定すべきオプションは3つある。

Continue reading

【Perl】ユーザーにプロンプトから入力して貰うスクリプト

モジュール「Term::ReadKey」を使うと出来る。これはUnix系OSだけじゃなくてWindows(ActivePerl 5.10.1 build 1007で確認)でも動く。

Term::ReadKey – search.cpan.org

http://search.cpan.org/dist/TermReadKey/ReadKey.pm

例1:文字列を入力して貰う

#!/usr/bin/perl
use Term::ReadKey;
print "type some keys : ";
ReadMode "normal";
chomp( my $line = ReadLine 0 );
print "you typed '$line'\n";

chompしないと最後に改行が付いたままになってしまうので注意。

例2:画面に文字を表示しないで入力

#!/usr/bin/perl
use Term::ReadKey;
print "enter your password : ";
ReadMode "noecho";
chomp( my $line = ReadLine 0 );
ReadMode "restore";
print "\nyou typed '$line'\n";

パスワード入力に使えるだろう。

例3:1文字だけ受け付ける(選択肢を選んで貰う)

#!/usr/bin/perl
use Term::ReadKey;
print "are you Hungry? (y/n)\n";
ReadMode "cbreak";
my $char = ReadKey 0;
ReadMode "restore";
print "you typed '$char'\n";

このスクリプトはWindowsにおいて挙動がおかしい。なぜかエンターキーだけを認識しないのだ(他のキーは全く問題ない)。そのときはTerm::Getchを使おう。

Term::Getch – ReadKeyライクなインターフェースのMSWin32用の代替

http://okilab.jp/document/japanate/perldoc/html/Term-Getch-0.20/Term/Getch.htm

#!/usr/bin/perl
use Term::Getch;
print "are you Hungry? (y/n)\n";
my $char;
1 while ! ( $char = getch );
print "you typed '$char'\n";

例4:文字入力をn秒待つ

#!/usr/bin/perl
use Term::ReadKey;
print "please press key within 3 seconds.\n";
ReadMode "cbreak";
my $char = ReadKey 3;
ReadMode "restore";
print "you typed '$char'\n";

ReadKey関数に正の数字を渡すとその秒数だけ待つ。この例だけはWindowsでうまく動かせなかった。