ディスプレイの省電力モードを使う

ちょうど今、自宅の FreeBSD 機を 7.0 から 7.2 にアップグレード中です。で、アップグレード後もいろいろ設定しなきゃならんわけですが、いちいちネットで探すのも面倒なので、自分のブログにメモがてら残していきたいなと。情報共有にもなるし。うん。
というわけで、とりあえずディスプレイの省電力モードを使う方法。現在、うちはディスプレイを2台使って、メイン PC はデュアルディスプレイにしてあるんですが、その片方を FreeBSD 機に繋いでいて、適宜入力を切り替えて使っています。ですが、このディスプレイの電源ボタンがどうも接触不良に陥っちゃっていて、あんまり電源の ON/OFF をしていると、そのうち壊れそうで怖いんです。で、Linux と同じように、しばらくキーボード入力とかがなければディスプレイを省電力モードにしてくれるものはないのかなと、いろいろ探ってたらありました。

  • /etc/rc.conf
saver="green"

これだけ。/etc/rc.conf に saver="green" を追加するだけでした。
それにしても、仕事で Linux というか、RHELSUSE ばっか使ってて、最近 FreeBSD のこと忘れてきてて危ない・・・。ちゃんと FreeBSD も触らなきゃ。

ATI Radeon Xpress 200M を使う

ノート PC に openSUSE 11.1 を入れて思ったのですが、デスクトップ効果を有効にすることが出来ない。

個人的に、あのフェードイン/フェードアウトとか、ウィンドウのうにょにょーんと動くエフェクトが好きで、メイン PC の方の openSUSENVIDIA ドライバを入れてさっそくデスクトップ効果を有効にしていたわけですが、ノート PC (LaVie PC-LG17LW/TM) の方は ATI ドライバを入れると X が立ち上がらなくなって困っていたわけです。

そこで、調べていると下記のページを見つけました。

http://en.opensuse.org/ATI_Radeon_Xpress

このページを参考にして、下記のような操作を行うと X が立ち上がり、デスクトップ効果も有効にすることができました。

# init 3
# aticonfig --initial --input=/etc/X11/xorg.conf
# sax2 -r -m 0=fglrx
# init 5

参考にしたページの openSUSE 11.0 のところに書いてあるような、`sax2 -r -m 0=radeon` は実行する必要がなかったです。

ノート PC に openSUSE を入れてみた

上京してすぐ、実家に帰省するときとかに使うノート PC 「LG17FW/TM」という NECLaVie を買っていたわけですが、長年 Windows 機として使っており、彼女と同棲するまではほとんど使っていなかったのですが、同棲が始まった日からメイン PC の方はほとんど彼女が使ってて、俺が Jiemamy へのコミットが行えなくなってしまったため、急遽ノート PC を掘り出して使いまくってたわけですが、最近色々あって SUSE の勉強をしなきゃいけないこともあり、openSUSE をメインに使うことに決定。

というわけで先週の金曜、元々ついていた 80GB の HDD じゃ足りなくなってきたので仕事帰りに 250GB の 2.5 インチ HDD を購入。データのバックアップ等をとった後に再セットアップディスクを使って Windows を入れ直した後、openSUSE 11.1 を入れました。メイン PC と同様、音が鳴らないのですが、まぁ音を出すような使い方は openSUSE ではしないのであまり気にせず。問題は無線 LAN で、このノート PC に搭載されている無線 LAN 機器である ALPS 製の UGJZ1 は中身としては Atheros のものらしく、openSUSE のサイトを見たところ Madwifi というモジュールを組み込んで使わなきゃいけないとか書いてあったので、そうしてみたところ残念ながら繋がらず・・・。

色々やってみた結果、結局 802.11a では繋がらず、802.11g で繋がることがわかり、むしろ Madwifi も必要なかったというオチに。

さて、今度は emobile を使えるように設定してみますかねー。

各フックで動くモジュールのファイル一覧の出し方

Apache2.2の各フックで動くモジュールのファイル一覧 - no strict; no life;

とても参考になるエントリがあったもので、ソースを確認したところ、このリストの出し方として別にモジュールを作らなくても一個ファイルを編集すればいいことが発覚。

SHOW_HOOKS="1"
export SHOW_HOOKS

なんでこれでできるかというと、config.c に以下のように環境変数を拾って、apr_hook_debug_enabled に 1 を代入するから。

  • server/config.c
 418 AP_DECLARE(void) ap_register_hooks(module *m, apr_pool_t *p)
 419 {
 420     if (m->register_hooks) {
 421         if (getenv("SHOW_HOOKS")) {
 422             printf("Registering hooks for %s\n", m->name);
 423             apr_hook_debug_enabled = 1;
 424         }
 425
 426         apr_hook_debug_current = m->name;
 427         m->register_hooks(p);
 428     }
 429 }

何はともあれ、これは便利そうです。

openSUSE 入れました

openSUSE 11.1 を入れました。


Ubuntu 8.10 はインストール直後から起動画面がハングしたり画面表示が変だったり、起動中ずっとビープ音鳴ってたりと不安定だったのに、openSUSE 11.1 は凄く快適です。NVIDIA ドライバを入れたらもっと快適になりました。
これで X-Fi ドライバさえ動けばまじで優秀かも。

少し凝ったヘッダを使いたい

最近、日時業務を効率化させたいなと思って空いた時間にツールを作っているわけですが、業務の一つに蓄積した情報を元に PDF を作成する作業が存在します。まぁ、一覧を出力するようなものですね。Java で PDF 出力といえば何なのかなと調べてみたら、どうやら iText というものが有名だそうです。
そんなわけで、最近ちょくちょく iText を触っているわけですが、その中で一つ気になったことがあるのでエントリを起こします。

よくある書類の一例

業務で使うような書類って、ほとんどにヘッダやフッタがありませんか?左上には書類名、右上には最終更新日時、中央下はページ番号、とかとか。

┌────────────────────────┐
│○×仕様書        最終更新者:鎌田   │
│             最終更新日:2008/12/18│
│                        │
│                        │

こんな感じで、書類の作成ってのにはヘッダやフッタがつきものです。こういう PDF を iText を使って出力させたいとします。
iText ではこういうヘッダやフッタを作るときには HeaderFooter というクラスを使います。

HeaderFooter を使うが・・・

実は、HeaderFooter には Phrase しか与えることができません。つまり、左上とか右上のどちらかは実現できても、両方を一緒に指定することはできないんですね。
さて困った。どうしよう、とよく見てみたら、Phrase を継承した Paragraph というクラスがいて、実はこいつには PdfPTable を add することができます!

PdfPTable を使う

PdfPTable が使えるのならこちらのもの。罫線描画のないカラムが2つある表を作り、1つめを左寄せで、2つめを右寄せで作ってしまえば実現できます。
コード例としては下記の通り。

PdfPTable table = new PdfPTable(2);
table.setWidthPercentage(100.0f);
table.getDefaultCell().setBorder(Rectangle.NO_BORDER);

table.addCell(new Phrase("header-1"));

PdfPCell cell = new PdfPCell(table.getDefaultCell());
cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
cell.setPhrase(new Phrase("header-2"));
table.addCell(cell);

Paragraph paragraph = new Paragraph();
paragraph.add(table);

HeaderFooter header = new HeaderFooter(paragraph, false);
header.setBorder(Rectangle.NO_BORDER);

Document document = new Document();
document.setHeader(header);

こんな感じでできますよ!