ここ一年の僕とLinux

ここ最近、アホな長文テキストに気を取られてしまって、こっちをすっかり忘れてた。

俺氏、openSUSEと縁が切れず

一度、完全、Xubuntuオンリーな状態になったものの、結局、デスクトップ機は、openSUSEに戻すことに。現在、12.3。もうすぐ13.1が出る。ネットブックは、相変わらず、Xubuntu。

enlightenment DR16 と DR17

ただし、一方で、KDE4(openSUSEのデフォルトデスクトップ環境)については、やっぱりメモリを食うねえなんてことが気になってまして。特に、ウェブブラウザがバカみたいにメモリを使うようになった昨今では、なかなか、バカにできないお話です。なので、一念発起し、『巷で噂のイカしたアイツ』こと、enlightenmentを試して見ることに。

openSUSEの場合、DR16の方はenlightenment、DR17についてはe17で、各種パッケージマネージャなどから検索を掛けると出てきます。(最初、DR17を入れようとして、enlightenmentの方を導入してしまい、軽く戸惑いました。)

僕の個人的な感想で言うと、DR16の方は、以前、Fluxboxを導入した時に似た戸惑い——デスクトップ上の各パネルやウィジェットのようなものの用途や使い方が分かりづらい。日本語化があまり進んでいない……などなど。——がありましたが、DR17の方は、すんなり入れました。

DR16については、モノの数分で放棄してしまったため、分かりませんが、DR17については、デスクトップ上の、左クリックでメインメニュー(各種アプリケーションや設定画面、ログアウト画面を呼び出す、スタートメニュー的なもの)が、右クリックで、『お気に入りメニュー』(自分でアプリケーションを登録して使う、クイックランチャ的なもの)、ミドル(ホイール)クリックで、今、開いているウィンドウの一覧が出ます。パネルの設定は、パネルの上で右クリック。これだけ分かっておくと、苦労なく入れます。

それから、地味に馴染みづらいところで、一般的に『(ウィンドウの)最小化』と呼ばれる動作が、『アイコン化』と呼び替えられているので、そこも注意。アイコン化した際、デスクトップ上やパネルにIBoxというガジェットを出しておくと、そこに格納されますが、それを出していないと、ただただ、ウィンドウが、画面上から消えます(が、ミドルクリックのウィンドウ一覧や、alt+tabから呼び出せるので、御心配なく)。

というわけで、今現在、openSUSE上では、DR17を使ってますが、何も立ち上げない状態で、メモリの使用量は、半分程度——うちの環境では、800MB(KDE4)から、400MB(E17)まで減少。——に減らせております。

あと、注意すべき点は、アップデートマネージャ的なもの(packagekit Update Appletか?)なども、設定しないと、自動起動しないので、必要な人は、その辺の設定を、e17の設定パネルからアプリケーションタブ内にあるスタートアップアプリケーションの項目で設定を。僕は、2,3日に一度、端末エミュレータから、zypperでアップデート掛けてます。

sudo zypper ref && sudo zypper lu

sudo zypper up

一行目で、リポジトリの更新と、アップデートの有無の確認。アップデートがあり、適用するのであれば、二行目。ここでは、コマンドは、全て、短縮コマンド。面倒だったら、aliasにでも設定しよう。

未だに、tarのオプションが頭に入らない

それでも、何とか、簡単な使い方は、いくらか覚えた。

cオプションはアーカイブ作成、xは展開、jがbzip2で圧縮解凍、zがgzipの圧縮解凍、あとは、ファイルを指定するfオプションに、お馴染み、vオプションは、処理したファイル一覧を詳しく表示。

ただ、差分をどうこうとか、アーカイブに追加とか言われると、manやハンドブックの類が手放せない。

とは言え、去年辺りの、ファイルやディレクトリの上で右クリックして、あっしゅく!とかやってた頃からすると、微妙な進歩……?

sedを使ってHTMLファイルを編集

と、まあ、上記の節のように、今まで、どうにか遠ざけていた、CUI経由の操作も、少しづつ、少しづつ、慣れようとしてきた、この一年。フルに使いこなせてる自信は無いものの、簡単なことであればsedで済ませる位の事はできるようになってきた僕。

もう数カ月前になりますか、うちのページをHTML5からISO-HTMLに書き換えたのですが、十数ページを一つ一つ編集するのは、さすがにかったるい。自動でできるところはやってしまえ、という事で、思い切って、sedでやってみました。

やったことを、大まかに分類します。

文書型宣言の置き換え
<!DOCTYPE html>から<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HyperText Markup Language//EN">へ。
文字コード指定の置き換え
<meta charset="UTF-8">から、<meta http-equiv="content-type" content="text/html; charset=UTF-8">へ。
HTML5独自の新要素などの削除・置き換え
header、hgroup、section、article、time、mark各要素の開始、終了タグを削除。
aside、figure、footer、nav、figcaptionを、それぞれ、div class="aside"、div class="figure"、div class="footer"、p class="nav"、p class="caption"各要素に置き換え。

この書き換えを、sedにて、作業ディレクトリ以下の、全てのHTMLファイルに適用。上記以外の細かい編集(内容の手直しなども含む)は、手作業で済ませた。

本当は、全部、一枚のスクリプトファイルにまとめて処理すればいいんだけど、ここでは、一つづつ振り返ります。

ちなみに、この処理を実行するには、$ grep -lr DOCTYPE | xargs sed -i 'command'とする。

コマンドをスクリプトファイルにまとめて、一気に処理する場合は、$ grep -lr DOCTYPE | xargs sed -f script-file-nameとする。

sedが、単体では、複数のファイルを処理してくれないので、grepで選び出した『DOCTYPE』という文字列を含むファイルのリストを、パイプでxargsに通し、xargsがリストを分割してsedへ流す、という形。

以下では、sedのコマンドだけを抜き出して、各作業を見る。

今回使うコマンドは、s/正規表現/置換文字列/、もしくは、s/正規表現/置換文字列/gの形。

なお、この手の作業には付き物の注意ですが、作業前に、作業対象ファイルのバックアップを取りましょう。

文書型宣言の置き換え

文書型宣言については、まあ、シンプルに。

スラッシュ(/)の前の、バックスラッシュ(\)は、エスケープ記号。スラッシュが、sedのコマンドの区切り文字に使われているので、前方の正規表現や、後方の置換文字列の中にある、単なる文字として解釈させたいスラッシュ記号は、バックスラッシュ(\)でエスケープしておく。

文字コード指定の置き換え

これも、上記と、ほぼ同様。

s/<meta charset="UTF-8">/<meta http-equiv="content-type" content="text\/html; charset=UTF-8">/

HTML5独自の要素を削除

使えない要素の開始・終了タグのうち、自分のページで再利用のし様がないものを、削除します。うちのページでは、こんなふうになりました。

s/<\/?(header|hgroup|section|article|time|mark)[^>]*>//g

正規表現が分からんという人のために補足。

"<"のあとに、"/"が『ゼロ、または、一個("?")』あって、『削除対象のタグ名のいずれか("(header|hgroup|section|article|time|mark)")』が続いたあとに、『">"以外の文字("[^>]")』が『ゼロ個、もしくは、複数("*")』繋がって、>で終わる文字列を、空文字列に置換(削除)します。このコマンドの末尾にある『g』は、同じ条件に適合する箇所が現れるたび、この処理を繰り返すという意味。『g』を付けないと、一番最初に条件にマッチした箇所しか処理されません。

HTML5独自の要素の置き換え

今回の場合、aside、figure、footer、nav、figcaptionについては、それぞれ、似たようなクラス名を振ったブロック要素に置き換えられそうなので、置き換える。

s/<aside[^>]*>/<div class="aside">/g

s/<figure[^>]*>/<div class="figure">/g

s/<footer[^>]*>/<div class="footer">/g

s/<nav[^>]*>/<p class="nav">/g

s/<figcaption[^>]*>/<p class="caption">/g

s/<\/(aside|figure|footer)>/<\/div>/g

s/<\/(nav|figcaption)>/<\/p>/g

上から5行は、開始タグの置換。最後の二行が終了タグの置換。

上5行は、前の節でやったことの応用。

下2行は、"<"と"/"が続いたあとに『asideか、figureか、footer("(aside|figure|footer)")』が入って、さらに、すぐ後ろを">"で閉めたものを、DIV要素の終了タグに。また、"<"と"/"のあとに『navか、figcaption("(nav|figcaption)")』が来て、さらに、すぐ">"で閉めたものを、P要素の終了タグに、それぞれ書き換えている。