Ubuntu

Perlでエクセル・データを処理する

とある件で、マイクロソフト・エクセル(MS Excel)のデータを取り扱うことになった。というか、入力済みのデータがエクセルのフォーマットという次第。ホントはテキスト・データでくれれば嬉しいのだが、どうも、事務関係はどこもかしこもエクセルばかりのようだ。

幸いなことに、Windowsを起動しなくても、Ubuntu上のOpen Office SpreadSheetで開くことができて、さらに、これを CSV (Comma Separated Values) 形式のテキストファイルとして保存できる。こうなれば、あとは楽である。やっぱりテキストファイルが一番だよねえ。

CSV形式のオプションとして、セパレーターが選べる。コンマで区切るよりもタブで区切る方が、ある意味合理的なので、タブで区切って保存する。これって、Tab Separated Values だから、TSVと呼ぶべきだと思うが、これでもやっぱりCSVと称するのだろうか。

それはともかく、あとは1行ずつ読み込んで処理すればよい。UNIXの標準入力から読み、標準出力に書き出すことにした。実際には、リダイレクトすれば良い。こうすると、プログラムは極めて簡単。入出力を書かなくてよいから。

while (<STDIN>) {
  chomp; # 行末コードを削除
  @data = split /\t/, $_; # $_は1行分のデータ
  # 以下、この配列に対する作業を行う。
}

こんな感じ。UNIXの便利さ、Perlの柔軟さが実感できる。

布教活動中?

朝起きると、家内は既に勉強中らしくパソコンで調べ物などしている。あれ?確か Ubuntu 起動用のCD-ROMを入れっぱなしだったと思うが・・・と聞いてみる。そこにユーザー名とパスワードがあったからログインしたよ、という返事。うーん、そうであったか :mrgreen:

一応、家内のアカウントも別に作ってはあるのだが、まあ、それはよい。とりあえず Ubuntu を抵抗無く使ってくれれば、こちらとしては成功なのである。ログインとログアウト(シャットダウン)の方法だけは覚えたみたいだし、Firefox (ブラウザー) には慣れているし。あとは IE じゃないと上手く表示されないタコなページに遭遇しないことを祈るのみだな。

環境変数の設定と .bashrc と .bash_profile と .profile

最近のUbuntu GNU/Linuxでは、ログイン時に .bash_profile ではなく .profile が読み込まれるらしい。実際、Ubuntu 8.04 (Hardy Heron) をインストールした直後に自分のHOMEを見たところ、.bash_profile はなかった。お勧めの使い方は .profile で .bashrc を読み込み、個人的な設定は .bashrc で行うというもの。それに従って、
export PATH = /usr/local/teTeX/bin:$PATH;
と /usr/local/teTeX/bin にパスを通している。ターミナルから which platex とかやると /usr/local/teTeX/bin/platex と表示されるので、パスが通っていることは間違いなく、実際、ターミナルからは platex hoge.tex とかでちゃんとプログラムが起動する。

ところが、エディターから platex を起動させようとすると、これが動作しない。しかたないので、フルパスを書いていた。これだと動作するのだ。今回、文字コードを判別しながら組版、PDF作成など一連の作業を行う自前の Perl スクリプトを作ったのだが、やはり system(“platex $texfile”) では platex を見つけられないようだった。仕方ないので、やはりフルパスを記述していた。

ふと思いついて、Perlが認識している環境変数を表示させてみた。スクリプトの最後に print(“PATH = $ENV{PATH}”) と書いて、環境変数PATHを表示させる。案の定、/usr/local/teTeX/bin は含まれていなかった。ううむ、何故なんだろう。

そこで、実験。試しに、直接 .profile の方に export PATH=/usr/local/teTeX/bin:$PATH; と書いてみた。おお、ちゃんとPerlも認識している。

結論。要は、見よう見まねに書いていた .profile と .bashrc あたりの設定が適切でなかったということですかね。きちんと勉強したい気もするが、そこまでの時間と余裕がない。とりあえず目的は果たしたということで、現状をメモするだけにしておこうか。

YaTeX(野鳥)をEmacs-snapshotにインストール

備忘録。てっきりインストール先は、/usr/local/share/emacs/site-lisp/ で良いと思って makefile を修正して sudo make install したのだが、まったく反応なし。Emacs-snapshot (Emacs 23) の場合は、/usr/share/emacs-snapshot/site-lisp/ だった。makefile を再び修正してインストール。とりあえず、yatex mode になったので、インストールは成功。これからコンパイル関係の設定をしなくてはならないが、今日は疲れたので、ここまで。

Firefox3.5

Firefoxのヴァージョン3.5が出たらしく、家内のWindowsの方ではアップデートが催促(?)されるというか、自動的にアップデートされたらしく、知らないうちに3.5になっていた(笑)。宣伝文句ほどは速さを感じないものの、確かに動作は以前よりきびきびしている。ということで、Ubuntu/Linux版はまだかなあと待っていたのだが、いつになってもアップデートのお知らせが来ない。

ところが、実はLinux版も既に出来ているようなのだ。何故にアップデートの催促がないのか不思議だが、ともかくサイトに取りに行き、解凍してfirefoxを起動。ブックマークなども既存のを読み込んで、3.5が使えるようになった。

ところが、これが3.0を上書きしていないようで、両者共存になってしまった。/usr/bin/firefox は依然として firefox-3.0 へのシンボリックリンクになっていて、3.5の方は、ダウンロードした場所が ~/firefox/firefox なので、ここを直接起動させないとダメ。ううむ、どうしようかな。これって、firefox本体だけ /usr/bin/ 以下に移して、そこにリンク張ってもダメなんだろうな。同じフォルダーに沢山ファイルあるし。

それから、3.0用のプラグインで3.5に対応できてないのが幾つかあることが判明。特にVideo Downloaderあたりが未対応なのがちょっと痛いかも。ということで、ショートカットを二つ作って、適宜使い分けることにした。ブックマークとかが共通なのが便利なのか危険なのか・・・ちょっと不安もあるのだが。

文字コードを判別してTeXにかけるPerlスクリプト

とある事情で、Ubuntu上ではUTF-8およびShift_JISの2種類のTeX文書を処理している。一々 platex -kanji=utf8 とか platex -kanji=sjis とか、したくないので、文字コードを判別してから組版し、ついでにPDFに変換して文書ビューアで表示させる Perl スクリプトを作ってみた。

ユーザーは自分だけなので、思いっきり手抜きだが、まずまず役立っている。

#! /usr/bin/perl -w
#
# [usage] myplatex hoge
#  hoge.tex の文字コードを判別して、platex -kanji=KANJICODE とコンパイル
#  引き続いて dvipdfmx で PDF を作り、文書ビューアー evince を起動する
#  とりあえず,普段使っている UTF-8 と Shift_JIS のみサポート

use strict;

my $basename;   # hoge
my $texfile;    # hoge.tex
my $dvifile;    # hoge.dvi
my $pdffile;    # hoge.pdf
my $kanjicode;  # UTF-8, Shift_JIS

$basename = $ARGV[0];
$texfile = $basename."\.tex";
$dvifile = $basename."\.dvi";
$pdffile = $basename."\.pdf";

open (INFILE, "<$texfile") || die "File Not Found\n";
close INFILE;

$kanjicode = `nkf -g $texfile`;
chomp($kanjicode);

if ($kanjicode eq "UTF-8") {
 system("platex -kanji=utf8 -interaction=nonstopmode $texfile");
} elsif ($kanjicode eq "Shift_JIS") {
 system("platex -kanji=sjis -interaction=nonstopmode $texfile");
} else {
 die "Not supported\n";
}

system("dvipdfmx $dvifile");
system("evince $pdffile");

熱暴走

かみさんのVAIOにHDDを外付けし、Ubuntu GNU/Linux として使用しているのだが、何と何と、熱暴走なるものを初体験してしまった。システムのアップデートから再起動を促されたので、一旦シャットダウン。さて、再起動しようとするが、途中でカーネル・パニックの表示が出てダウンしてしまう。ええ〜 😯 ワタシ、何もしてないのに〜。今度はリカバリーモードでブートさせるのだが、これも途中でダウン。画面に一瞬、critical temperature らしき文字が出たのに気づいたのが幸いだった。も、もしかして熱が原因でしょうか? 触ってみると、おお、熱い! 😯

ということで、しばらく冷ましてからブートさせる。何事もなかったように起動。ああ良かった・・・。それにしても、カーネルパニックの表示が出たときはビビったなあ。

MePoTeXで悪戦苦闘

図版を作るために、ひさしぶりにMePoTeX (LaTeXからMetapostを呼び出して使うためのマクロ集) を使ったのだが、どうも思う通りに行かず、イライラする。腹立ちまぎれ(?)に状況をメモ。

まず、Mac OS X 上では、何故か pensize が思うように変えられない。\sendMP{…} の中で pickup pencircle scaled 1.2pt などとしても線は細いまま。ええいと、3ptにしたら突然太くなる。いや、3ptは太すぎなんだってば。あれこれやっていると、ペンサイズは変えてないのに、ある場所に \mptDraw{…} と、MePoTeX の描画マクロを加えた瞬間に全体のペンサイズが変更になったり、もう訳が分からんというか、なんじゃ〜これ〜。

原因がマクロ集にあるのか、それともMacのMetapostにあるのか判断できないので、Ubuntu (Linux) 上でやってみようとするのだが、これが上手く動作せずに、これまたイライラ。ちゃんと shell escape のオプションも指定しているのに、何故か sh: mpost not found のエラーメッセージ。おいおい、パスが通ってないのかよ、と思いつつ、シェルから実行してみると、パスは通っている模様。というか、platexと同じ /usr/local/teTeX/bin/ にmpost もあるんですけどね。そういえば、エディターからlatex呼び出すときも、何故か実行ファイルを見つけられなかったことあったよなあ、と思いつつ、mepotex.sty を読んで、mpostを呼び出している部分を /usr/local/teTeX/bin/mpost と、絶対パス指定に変更してみた。いやあ、こんな乱暴、普通あり得んだろう。結果・・・ちゃんと mpost 呼び出されるじゃないすか。うーん、やっぱり、ここかあ。

しかし・・・こんな現象、いくら検索しても出てこない。ってことは、ワタシの設定が間違っている可能性が高い、と思われる。うーむ、パスが通ってるのに何故に絶対パスを記述しないとダメなんでしょうか。理由が分からない。あーイライラするなあ。

メモリー増設

かみさんのVAIOだが、以前からメモリーの増設をしたいと思っていた。Windows XPの方は何故かシステムが肥大化していて、起動しただけで既に400メガバイト使用とか、あり得んだろうという状態。不要な駐在ソフトとか削除すれば多少は違うのだろうが。Ubuntuはまだマシだが、それでも以前のLinuxとは違い、GNOMEなどのGUIはかなりメモリーを使う。起動時で200メガバイトほど、Firefoxがさらに200メガぐらい使うから(いや、タブをあまり開けなければ違うのだろうが)、512MBではぎりぎり。実際、使っているとちょくちょくメモリースワップしている。USBのHDDにシステムを置いているから、仮想メモリーがまた遅いんだよねえ。

という事情で、いよいよメモリー増設に踏み切った。実のところ久しぶりにメモリー関係を検索していたら、以前は8000円ほどしていた1GBのメモリーが4000円を切る値段になっていたので、思わずポチッとクリックしてしまったというのが真相だったりするが :mrgreen: 。探せばもっと安いものもあるみたいだが、まあ、値段よりは安心を優先しよう。いざという時のためにも信頼できるメーカー直販がなにかと良いかなと。

15年くらい前にMac(PB540だったか)でメモリー増設したことはあるが、Windows PCのノートパソコンでは初めて。しかし、世の中進歩しているらしく、簡単に増設できるようになっているんですなあ。あまりのあっけなさに少々拍子抜けなのであった。

さて、作業開始。パソコンをシャットダウンさせ、電源を抜いて温度が下がるまでしばらく待つ。火傷しないようにね。

メモリー増設1

パソコンを分解しなくても、このようにメモリーの部分だけの小窓(?)がある。ネジを緩めてそこを開けばメモリーが見える。しかし油断はできない。これが堅かったりして難儀するんだよな、案外。

メモリー増設2

メモリー両脇のバネを外側に少しひっぱると、留め具がはずれてメモリーが起き上がってくる。おお、これはグッドだ。水平のままだと、どうやって引っこ抜こうかと思っていたよ。

メモリー増設3

メモリースロットもそれほど堅くはなく、簡単に抜けた。256MBを二枚抜く。

メモリー増設4

そして、1GBを二枚挿入。接触不良が怖いので、しっかりと差し込む。

メモリー増設5

メモリーを水平に倒して、両側の留め具をパチンと留めれば完了。作業はものの5分ほどで、あっけなく終了。

あとは蓋を閉め、電源を入れて、お祈りしながら :mrgreen: ブートさせる。いや、これだけは心臓に悪いよなあ。あっさりと起動したので一安心。ちゃんと認識されているかどうか、システム・プロフィールを確認。よしよし、ちゃんと2GBとなっている。

今のところメモリースワップもゼロで、とても快適 :mrgreen:

変換・無変換キー

UbuntuではAnthyという日本語入力を使っているのだが、仮名漢字と英数の切り替えキーを少しカスタマイズした。デフォルトでは左上にある「半角/全角」というキーで切り替えるのだが、左上ということは、左手の小指を使うということになる。これが面倒であり、かつ疲れる。おまけにホームポジションから離れてしまう。

そこで、スペースキーの両隣にある「変換」「無変換」というキーで切り替える方式にした。切り替えるという言い方は厳密には正しくない。変換キーを押せば「ひらがな」モードになり、無変換キーを押せば「英数」モードになる。最初は少々戸惑ったが、慣れるとこれがすこぶる快適なのである。とにかく両手をホームポジションの位置にキープできるのが大きい。今まで日本語キーボードが便利だと思ったことはないのだが、これは素晴らしい。

マックでも同じようにしたいところなのだが、あいにくとマックはUSキーボードなのである。ううむ・・・。まあ、そっちはそっちで、キャップス・ロックキーを切り替えに設定していて、それはそれで使い易いのであったが。