AeroStream/B30J-6931E BTO に付いていたハードディスクを交換した
BTO に付いていた Seagate のハードディスクが壊れたので、HGST 0S03191 2TB/7200rpm/64MB cache/SATA3.0(6Gb/s) に交換した。もはや、原型をとどめておらず、ほぼ自作マシン化になってしまった(笑
パーツジャンル | 商品名 |
---|---|
CPU | Intel Core 2 Duo E8500 (6MB キャッシュ/3.16GHz/1333MHz FSB/EM64T) |
CPUクーラー | CoolerMaster製 ヒートパイプ構造CPUファン(Hyper L3/騒音レベル18 dB(A)Min/PWM可変式) |
マザーボード | Intel P45 Express チップセット ATXマザーボード (ASUS P5Q PRO) |
メモリ | PC6400 DDR2 SDRAM 4GB (2GB x4枚/PQI/メジャーチップ) |
ビデオカード | nVIDIA GeForce 8800GT/512MB (PCI-Express/DualDVI/TV出力/GDDR3メモリ) |
ハードディスク | HGST 0S03191 2TB/7200rpm/64MB cache/SATA3.0(6Gb/s) x2 |
SSD | INTEL X-25M SSDSA2M080 80GB |
光学ドライブ | Plextor DVDR PX-820SA DL対応 DVD SuperMulti (SerialATA接続/ソフト付) |
PCケース | AeroStream ATXケース (オフホワイト/EX2/571/057R/静音FAN・防塵フィルター搭載/W 200xH 440xD 480mm) |
電源ユニット | Topower製 TOP-530W12R(定格出力530W、Max 630W/静音12cmファン搭載/Silent Engine採用/BLK) |
"内蔵" ハードディスク Touro Desk 0S03001A (2TB) を購入(笑)
11 月 3 日真夜中から明け方のどこかで、主に使っているマシンのハードディスクが逝ってしまった。症状は、I/O error が起こり、読み書きすらできなくなる、/dev/sda が見えなくなる。また、BIOS でハードディスクが認識しないことも起こった。
壊れてしまったハードディスクは、Seagate 7200.11 500GB x 2。BTO でついてきたハードディスクとはいえ、わずか 3.25 年足らずで壊れてしまうなんて、思いもしなかった。最近、SMART による診断結果から、不良セクタが目立っていたことも気になっていたが、今思えば、書き込みの音が少々おかしかった気もする。
Seagete 7200.11 についてググってみると、最初から問題のあったハードディスクであったようです。
- 7200.11不具合 - HDD購入情報 Wiki*
- Seagate製ハードディスクのファームウェアに致命的な不具合、起動不能・アクセス不能になることが判明 - GIGAZINE
- ハードディスクのシリアル番号確認・バッドセクタ修復・各種テストが可能なSeagate製公式フリーソフト「SeaTools for Windows」 - GIGAZINE
- Seagate社、自社製HDDの不具合を認める | スラド ハードウェア
11 月 3 日という文化の日は、文化も堪能することもなく (^^、丸一日、マシンの復旧になってしまった。
"内蔵" ハードディスクを購入(笑)
まずは、午前中に近くのドスパラ千葉店に足を運び、新しい "内蔵" ハードディスクを調達してきた。そう、"内蔵" ハードディスクです(^^
ご存知の方も多いと思いますが、先日のタイでの大洪水 wikipedia:タイ大洪水 による大水害の影響で、今、内臓ハードディスクの相場がタイの大水害前に比べて 2〜3 倍くらいに高騰しています。タイといえば、世界第 2 位のハードディスク生産をしており、たとえば、Western Digital は、ハードディスクの生産の 6 割がタイで製造されている。タイの大水害前に生産されたハードディスクは、すでに大手ベンダなどに在庫確保されているようです。そのために、一般市場に出回るハードディスクは、品不足による価格高騰が起こっているようです。
ところが、(タイの大洪水前に生産された)外付けハードディスクは、まだショップに残っていることも多いようです。現にドスパラ千葉店では、HGST 製ハードディスク搭載の Touro Desk の価格が、たしかにそのままだった。
そこで、私は、"内蔵" ハードディスク Touro Desk 0S03001A (2TB) を購入しました (^^
さっそく、お好み焼きのへら(大、小)とドライバなどの工具を用意して…、以下、サウンドのみをお楽しみください!
「アタッ アタタタタターッ! *「うわーっ ぐしゃ!
*「なんぼのもんじゃーっ! ミス! munepiは すばやく みを かわした!
「アチョ ガスッ ビシュ」 *「う……。
「ズバババーン! かいしんの いちげき! 外側ケースを やっつけた!
はい、内蔵ハードディスクが出てきました!こんなに頑丈に梱包された "内臓" ハードディスクを買ったのは初めてです(笑
私が買った "内臓" ハードディスク Touro Desk 0S03001A (2TB) は、SATA3 (6Gbps) 2TB 7200rpm でした。でも、このハードディスクを USB 2.0 でつなぐのは、転送速度の面でもったいない気がします。
ちなみに、Touro Desk を解体しながら検索していたら、やはり同じ事を考えている人がいました(w こちらの方は、解体方法を検証なさっておられます。私はバキッとやっちゃいましたけど(w
ddrescue
実行例は、wikipedia:Ddrescue に書かれているので、今回やったことを一言記します。
今回、dd で Windows パーティションがわずか 2.2GB/250GB しか抜き出せなかった。ダメもとで ddrescue を使って、一旦ファイルに書きだしてみたところ、1 err. のみだった。すでに壊れかけていたディスク状態だったので、たまたまうまく読み出せたのかもしれない。
$ sudo ddrescue /dev/sda1 sda1-win.img ddrescue-sda1-win.log
LuaTeX-ja で基本版面の四つ角に印が出るようにしてみた。
色んな方のご意見を広く伺いたいという意味でも書いてみます。
製作過程で「版面の領域がどこからどこまでなのか」分かった方が、何かとうれしいことがあります。そこで、hanmen オプション*1を実験的に設けてみました。
\documentclass[b5paper,tombo,hanmen]{ltjarticle} \begin{document} ...
こんな感じで、クラスファイルのオプションに指定すると、下記のように基本版面の四つ角に印がつきます。
この機能は、需要があると勝手に思っていますが (^^;; 、いかがでしょうか?これだと、紙に出力したときに、編集する方にとっても、版面領域の指標になると思います。
この機能の実装方法は、基本的にトンボの analogy です。lltjcore.sty に直接実装してみました。別の実装方法として、ヘッダ、フッタを利用する手もありますが、どうせなら本体に組み込んでおきたいですね。
また、InDesign のレイアウトグリッドに相当する機能は、製作時においてプレビューで役立ちそうですね。これもやってみます。
*1:オプション名「hanmen」の由来は、Requirements for Japanese Text Layout において基本版面が kihon-hanmen となっていることによります。「版面」を「はんづら」と呼ぶ場合もありますが、jlreq の名称を優先しました。
「わたしのやてふ環境」独り反省会
昨日開催された研究集会 TeX ユーザの集い 2011 http://oku.edu.mie-u.ac.jp/texconf11 で LT「わたしのやてふ環境」をやってしまいました。今日はその反省会を独りでやります*1。
TeXユーザの集い 2011 に、発表時のスライド(PDF ファイル) http://oku.edu.mie-u.ac.jp/texconf11/presentations/yamamoto.pdf が公開されております。LT 中にやった(やろうとしていた(^^;;)Demonstration のスクリーンショットも挿入し、加筆したスライドとなっております。参加できなかった方にも伝わるような感じにしました。本記事と合わせてご覧ください。
LT で意識していたこと
- TeX を普通知っている人であれば、「どの方でも楽しんでいただける」
- Emacs を知っている人であれば、「あれこれツッコミどころ満載で、ニヤニヤしていただける」
- TeXnician の方であれば、「あのマクロはこんなアルゴリズムかな?と妄想していただける」
そんな思いで、ネタ仕込みに全力疾走しておりました。
TeX を知っている方であれば、おそらくどなたでも Knuth 巨匠を知っているでしょう。TeX 文章を書くとき、ほとんどの方は何らかのテキストエディタで入力するでしょうし、入力支援も利用している方も多いでしょう。そこで、単に Emacs というテキストエディタで、真面目に馬鹿で、実用性ゼロな、TeX デモンストレーションを仕込んだわけです。
「わたしのやてふ環境」は…、
YaTeX + Anything + Auto Complete Mode + auto-complete-yatex
です。文章で書くと、「ふつうのやてふ環境をベースに、Anything の統一的なインタフェースにより、既存の Emacs の操作性を革命的に変化させて、Auto Complete Mode による強力な動的補完とそのやてふ拡張を備えた環境です。」となります。なお、手元の OS は、VineSeed x86_64 または、Vine Linux 6 x86_64 です。
Vine Linux でお手軽にやてふ環境を構築
「わたしのやてふ環境」は、Vine Linux であれば比較的簡単に整えられます。apt-get コマンドを利用して、auto-install, auto-complete-mode, yatex パッケージをインストールします。
$ sudo apt-get install auto-install auto-complete-mode yatex
Anything
Anything は、M-x auto-install-batch から anything を選択してインストールできます。id:tomoya さんの もう初心者なんて言わせない、Anything で始まる Emacs 道。 - 日々、とんは語る。 が参考になるでしょう。
Auto Complete Mode
Auto Complete Mode は auto-complete-mode パッケージをインストールするだけで既に終わっております。
YaTeX
YaTeX も yatex パッケージをインストールするだけで、ほぼ終わります。
が!!!、Anything の恩恵を授かるためには、1 つ重要な設定を修正しないといけません!vine-default-yatex.el で設定されている、やてふのデフォルト設定でもある begin/end 型環境のショートカットによる補完を無効にする必要があります。つまり、
(setq YaTeX-no-begend-shortcut t)
としないといけません。
実は、Vine Linux 5 がリリースされたとき、vine-default の仕組みを導入しましたが、そのとき yatex パッケージでは (setq YaTeX-no-begend-shortcut t) としていました。そう、私のやてふ設定をそのまま入れていました。ところが、多くのやてふユーザは、デフォルトのやてふのまま使っている方が多く、この設定が受け入れられませんでした*2。
以来、begin/end 型環境は、vine-default-yatex でもやてふのデフォルトの挙動と同じく、「ショートカット」による補完にしております。もし Anything がいつの日か Emacs 標準装備になった暁には、やてふの設定も (setq YaTeX-no-begend-shortcut t) にしようと妄想しております (^^
auto-complete-yatex
auto-complete-yatex に書いております。とくに何も難しいことをやっておりません。
また、ac-source-yatex-user-candiates に登録する一例として、いくつかあげておきます。
(setq ac-source-yatex-user-candiates (list ;; documentclasses and these options "jsarticle" "jsbook" "beamer" "ltjarticle" "iamjatex" "Proof" "tombo" "mentuke" "cameraready" "Lbox[]{}" "Rbox[]{}" "Pbox{}" "DDbox[]{}" "TDbox{}{}" "ruby{}{}" "Hang" "ignorespaces" "phantom" "hphantom" "vphantom" "makeatletter" "makeatother" "textregistered" "setbox" "lower" "raise" "llap" "rlap" "smash" "hbox{}" "mbox{}" "fbox{}" "parbox[]{}" "fboxsep" "hspace*{}";; "hfil" "hfill" "hss" "hskip" "vspace*{}";; "vfil" "vfill" "vss" "vskip" "baselineskip" "onelineskip" "halflineskip" "subtitle" "jsubtitle" "esubtitle" "nonumber" "noindent" "mathindent" "parindent" "hangindent" "newpage" "Newpage" "fallingdotseq" "arraycolsep" "arraystretch" ;; around figure env. "figure*" "scalebox{1}{\\includegraphics{}}" "capwidth" "ecapwidth" "capwidth\\columnwidth" "ecapwidth\\columnwidth" "columnwidth" "textwidth" ;; around table env. "Hline" ;; for numbering macros "ENUM{1}" "ENUM{2}" "ENUM{3}" "ENUM{4}" "ENUM{5}" "ENUM{6}" "ENUM{7}" "ENUM{8}" "ENUM{9}" "Enum{1}" "Enum{2}" "Enum{3}" "Enum{4}" "Enum{5}" "Enum{6}" "Enum{7}" "Enum{8}" "Enum{9}" "MARU{1}" "MARU{2}" "MARU{3}" "MARU{4}" "MARU{5}" "MARU{6}" "MARU{7}" "MARU{8}" "MARU{9}" "maru{1}" "maru{2}" "maru{3}" "maru{4}" "maru{5}" "maru{6}" "maru{7}" "maru{8}" "maru{9}" "RN{1}" "RN{2}" "RN{3}" "RN{4}" "RN{5}" "RN{6}" "RN{7}" "RN{8}" "RN{9}" ;; some templetes of preamble ;; some templetes of LaTeX environments ;; figure "begin{figure}[tb] \\begin{center} \\scalebox{1}{\\includegraphics{}} \\end{center} \\caption{} \\label{} \\end{figure}" "begin{figure}[b] \\leavevmode \\hbox to \\hsize{%\\hss \\begin{minipage}{\\textwidth} \\capwidth\\textwidth \\begin{center} \\scalebox{1}{\\includegraphics{}} \\end{center} \\caption{} \\label{} \\end{minipage}\\hss }% \\end{figure}" ;; table "begin{table}[tb] \\caption{} \\label{} \\begin{center} \\scalebox{1}{\\includegraphics{}} \\end{center} \\end{table}" "begin{table}[tb] \\caption{} \\label{} \\begin{center} \\begin{tabular}{ccc} & & \\\\ \\end{tabular} \\end{center} \\end{table}" ;; enumerate "begin{itemize} \\item \\end{itemize}" ;; enumerate "begin{enumerate} \\item \\end{enumerate}" ;; minipage "begin{minipage}[b]{.49\\hsize} \\end{minipage}" "begin{minipage}{\\textwidth} \\end{minipage}" ;; thebibliography "begin{thebibliography}{99} \\bibitem{} \\end{thebibliography}" ;; frame for Beamer class "begin{frame}{} \\end{frame}" "begin{frame}{} \\begin{enumerate} \\item \\end{enumerate} \\end{frame}" "begin{frame}{} \\begin{itemize} \\item \\end{itemize} \\end{frame}" "begin{frame}{} \\begin{block}{} \\begin{itemize} \\item \\end{itemize} \\end{block} \\end{frame}" "begin{frame}[fragile]{}{} \\begin{lstlisting} \\end{lstlisting} \\end{frame}" ;; 行列 "left( \\begin{array}{cc} & \\\\ & \\\\ \\end{array} \\right)" "left( \\begin{array}{ccc} & & \\\\ & & \\\\ & & \\\\ \\end{array} \\right)" ;; cases "begin{cases} & \\\\ & \\\\ \\end{cases}" ))
I am Just Another TeXnician. の元ネタは…、
JAPH = Just Another Perl Hacker(Just another Perl hacker - Wikipedia, the free encyclopedia)です。Just Another Perl Programmer の場合もあります。これは、perl コードで "Just Another Perl Hacker" だけを出力する文化です。
らくだのアスキーアート(AA)や世界地図の AA で、 "Just Another Perl Hacker" や "Hello World" の文字列を出力するなんて、面白すぎます*3 。
#!/usr/bin/env perl undef$/;$_=<DATA>;y/ODA\n / /ds;@yoda=map{length}split;print chr oct join('',splice(@yoda,0,3))-111 while@yoda; __DATA__ 00O00O000O00O0000 000O DD000000O0 0DO0000000O0000O00 O00000 00O00000O0O 0000 0O0 O00 O00 00D 0DO 00O0 0O0 00D 000 DO0D00000D 0O00 DOD 000000O00000 000 O00O DD0000D000O0 000 0O00O0000D00DO 0OD D00O000D00O0 00000DO00O0 000 000O 00D0 O0D O00000O0DO0 0O000 OD0D O00O0 0000 DDDO000000 O00O000000 0O000 O00DDO 00000 0O0D00 00O0O00000O 0O00O000000 0O0O00OD00000DDD 00O 0D0 DDD D0O 00O0D 00000O00000000 O00 DO0 D00D00O000 00D00 D0O00 O0000 000O000O00DO 000 00O0 0OD00 O00 000 0O000D000O00O0 000 0D0O000000O00O00 0 0 0O0D 0000 0O0 0O0000000O000O
そこで、TeX (LaTeX) でも同様なことで遊んでいる人がいるかと思って、ぐーぐる先生に聞いてみたところ、どうやらいないっぽいことが分かりました(分かっておりました)。いつの日か、このネタをやる機会を待っていたところ、たまたま今年の LT 枠がなかなか埋まらなかったこともあり、笑い役担当で実行委員自ら立候補した次第です。
Just Another TeXnician の中身は?
「Just Another」は、「ありきたりの、ありふれた、月並みな」という意味です。
そんな平凡な TeX つかいが、iamjatex.sty を書いてみたわけです。だから、実用性ゼロです(^^ そうそう、iamjatex.sty のライセンスは、public domain にすることにしますので、その代わりに、ぜひとも Just Another TeXnician 文化を TeX でも築けたらと思ったり、思わなかったり(笑
\NeedsTeXFormat{LaTeX2e} \ProvidesPackage{iamjatex} [2011/10/16 v0.1 defines iamjatex (I am Just Another TeXnician) environment] \newif\if@iamjatexdebug \@iamjatexdebugfalse \DeclareOption{debug}{\@iamjatexdebugtrue} \DeclareOption*{\PassOptionsToPackage{\CurrentOption}{iamjatex}} \ProcessOptions\relax %% take verbatim env. from latex.ltx %% define iamjatex \begingroup \catcode `|=0 \catcode `[= 1 \catcode`]=2 \catcode `\{=12 \catcode `\}=12 \catcode`\\=12 |gdef|@xiamjatex#1\end{iamjatex}[|@iamjatex@aa[#1]|end[iamjatex]] |endgroup \def\@iamjatex{\trivlist \item\relax \if@minipage\else\vskip\parskip\fi \leftskip\@totalleftmargin\rightskip\z@skip \parindent\z@\parfillskip\@flushglue\parskip\z@skip \@@par \@tempswafalse \def\par{% \if@tempswa \leavevmode \null \@@par\penalty\interlinepenalty \else \@tempswatrue \ifhmode\@@par\penalty\interlinepenalty\fi \fi}% \let\do\@makeother \dospecials \obeylines \iamjatex@font \@noligs \hyphenchar\font\m@ne \everypar \expandafter{\the\everypar \unpenalty}% } \def\iamjatex{\@iamjatex \frenchspacing\@vobeyspaces \@xiamjatex} \def\endiamjatex{\if@newlist \leavevmode\fi\endtrivlist} \def\iamjatex@font{\normalfont\sffamily\Huge} %% Don Knuth, H. Okumura AA: characters: #@%&X27/1:. \newif\if@iamjatexchar \@iamjatexcharfalse \def\@iamjatex@aa#1{% \@iamjatexcharfalse \@tempcnta 65\relax \def\space{\ }% \@tfor\ch@r:=#1\do{% \def\@tempchar{X}%is a flag to output ``iamjatexchar'' \ifx\ch@r\@tempchar\relax %%A-Z (65-90) \ifnum\@tempcnta>64\relax \ifnum\@tempcnta<91\relax \@iamjatexchartrue\fi\fi %%a-z (97-122) \ifnum\@tempcnta>96\relax \ifnum\@tempcnta<123\relax \@iamjatexchartrue\fi\fi \if@iamjatexchar \char\@tempcnta% \if@iamjatexdebug $_{(\number\@tempcnta)}$\fi \@iamjatexcharfalse \@tempcnta 65\relax \fi %%output \space if \@tempcnta is over 123 \ifnum\@tempcnta>122\relax \if@iamjatexdebug \textvisiblespace\else\space\fi \@tempcnta 65\relax \fi \else %%1, 2, 7 are plus factors of \@tempcnta \def\@tempchar{1}% \ifx\ch@r\@tempchar\relax \advance\@tempcnta\@tempchar\fi \def\@tempchar{2}% \ifx\ch@r\@tempchar\relax \advance\@tempcnta\@tempchar\fi \def\@tempchar{7}% \ifx\ch@r\@tempchar\relax \advance\@tempcnta\@tempchar\fi \fi }% } \endinput
簡単な解説
\begin{iamjatex} ... \end{iamjatex} の実体は、基本的に verbatim 環境です。\begin{verbatim} から \end{verbatim} までの間にある文字列をごっそりと \@tfor で回して、あーだこーだとやっているだけにすぎません。
alphabetの出力に利用しているのは、\char'XX です。つまり、\char'65 が「A」、\char'66 が「B」、…、\char'90 が「Z」、\char'97が「a」、…、\char'122 が「z」を使っているだけです。アスキーアート中の数字を足し算していき、X がきたときの総和によって、どの文字を出力するか決めています。
これだけです!
当日に使っていた iamjatex.sty のバージョンは v0.1.1???
アスキーアートを自動で生成するツールを利用したものの、それはベースにすぎず、メッセージを一文字ずつ出力していくために、手作業で全部やらないといけないので、大変に時間がかかりました。
実は、Knuth 巨匠と奥村先生のアスキーアートを作成するのに膨大な時間がかかりまして、出力するメッセージを前日に修正したりしておりました。そのために、当日にタイプセットにかけていた iamjatex.sty のバージョンは、0.1.1 だったりします (^^ 早い話、若干ズルをしたわけです、ハイ!どこをズルしているのか、よーく目を凝らせば、分かるかと思います。
iamjatex.sty v0.1 と v0.1.1 との差分は…、考えてみてください(おぃ
どうしてデモンストレーションの大部分が失敗したか?(苦笑
何十回もテストをしていたのに、あそこまでグダグダになるとは、想定外でした(^^
原因の一つは、プロジェクタに映したときの解像度が小さすぎたことです。これでは、Knuth 巨匠のお顔も全て表示されません(泣 また、奥村先生のお顔も全部表示できず、残念なことになってしまいました。
もうひとつの原因は、ヘッダにあったコマンド実行の記述が間違っていたことです。たぶん、LT 直前のテスト時に誤って「!」を消してしまったんだと思います。
-%# lualatex test && evince -f test.pdf +%#! lualatex test && evince -f test.pdf
敢えて言うのであれば、最悪の自体に備えて、デモンストレーションをスクリーンショットした版のスライドも用意しておくべきでした (^^;;
「私は芸人じゃないです!」
大事なことなので、もう一度述べますね。
「私は芸人じゃないです!」
さいごに…、
私のこの LT は、何も技巧がなく、先人のみなさまの偉業を組み合わせただけにすぎません。
Knuth 巨匠、奥村先生、Emacs 開発者のみなさま、Anything をメンテナンスなさっておられる @rubikitch さん(id:rubikitch)、Auto Complete Mode 作者の松山さん、やてふ作者の広瀬さんをはじめ、すべての TeX/LaTeX に関わる方々、Emacs に関わる方々に、あらためて感謝いたします。
奥村先生、ご還暦おめでとうございます。懇親会で、赤ちゃんちゃんこをお召になられたとき、にっこりと笑顔な奥村先生のお顔が印象的でした*4。
*1:TeXユーザの集い 2011 自体のレポートは、別途、書く予定です。
*2:vine-users:079475 yatexのコマンド補完 http://ml.vinelinux.org/vine-users/msg29470.html
*3:CPAN 以下にある JAPH があること自体、文化だという証拠です。 http://www.cpan.org/misc/japh
*4:奥村先生が twitpic に上げておられます! 一昨日の #texconf11 で18歳(52進)記念に赤いちゃんちゃんこを贈られ恥ずかしがっているところ@東大生研... on Twitpic
Vine Linux 6 で Redmine-1.2.1 を運用中
Ruby on Rails のアプリケーションは、rubygems のバージョンと gem たちのバージョンの組合せが絶妙なバランスなので、バージョン選定に非常に苦労します (^^;;
Redmine のインストール方法は、公式のドキュメントはじめ、たくさんありますので、そちらに譲るとしまして、ここでは rubygems のバージョンと gems の組み合わせをあげておくだけにとどめます。
Redmine-1.2.1 の場合は、ruby-1.8.7 に以下の gems の組み合わせで、運用できております。ちなみに、データベースは SQLite3 を使っております。
$ sudo gem install rubygems-update --no-rdoc --no-ri $ sudo gem update --system 1.7.2 $ sudo gem install -v=0.8.7 rake --no-rdoc --no-ri $ sudo gem install -v=1.1.0 rack --no-rdoc --no-ri $ sudo gem install -v=2.3.11 rails --no-rdoc --no-ri $ sudo gem install -v=0.4.2 i18n --no-rdoc --no-ri $ sudo gem install sqlite3-ruby --no-rdoc --no-ri
たとえば、こんな感じで Vine Linux のプロジェクトを作って、自分の作業をチケットで登録します。
Vine Linux の開発作業もますます進むとよいですなー(^^ 仕事でも Redmine を活用したいな!おっし、やってやる!
Formatter Club 第2回定例会に参加してきました
遅ればせながら、参加レポートを(^^;;
前回の Formatter Club 発足会 [id:munepi:20110728:formatterclub] に続き、今回も Formatter Club 第2回定例会のご案内 (CSS組版ブログ) へ参加してきました。
村上真雄さんが MacBook Air 11 inch (Mid 2011) でデモをしてはった。
先週はじめてMac買った(Airのちっちゃいの)。Parallels DesktopでWindowsと共存して便利。#FormatterClub 定例会ではもっぱらそれでデモをした。AH Formatter組版エンジンはマルチプラットフォームだがGUIは今のところWinだけなので
Twitter に実況中継をしといた (^^
#FormatterClub 藤島さんのAH Formatterいじわるテスト(笑 でも、こういうテストが一番製品品質を保つのに必要な作業だと思います。たとえば、AHF更新ごとに、指南書のPDFを生成しておき、Adobe Acrobatで差分を取ることで、評価が一つ得られます。
#FormatterClub ?のハッシュタグ、ちとさびしい(^o^) #TeX つかいのわたしがつぶやいても、ノイズしかないかも(^O^)/
#FormatterClub 写研開発者 藤島さんによるXSL-FOのお話です。ご自身も参照しながら製作をするために、指南書をお書きになられたとのこと。
AH FormatterやAdobe InDesignの広報活動を分析すると、商業利用として #TeX に何が足りないのか、勉強になることが多いように思う。 #TeX が得意な点、開発の利点を生かすためには、どうすればよいのか?日々考えてます。
#FormatterClub 桑野さん曰く、W3Cに要望を出してもなかなか取り入れてくれないけど、AH拡張として比較的早期に機能を取り込んでくれる。
#FormatterClub ベネッセコーポレーションの桑野さんによる事例のお話です。進研ゼミで実際に使っておられる実例。
#FormatterClub ただいま、デモ中。AH拡張のfloat機能は優れてるなー。自動組版して、できるかぎり想定内の範囲に図表を配置できるのが、すばらしい。 #TeX でもなんとかせなあかんな。実装するアイデアはあるから、あとはやるだけなんだが(^O^)/
#FormatterClub に遅れることが確実になりましたm(_ _)m 役所の書類手続きには、想定外の時間を要しますね\(^o^)/
なんと言っても、米国国税庁で AH Formatter が採用されたニュース http://blog.antenna.co.jp/ILSoft/2011/09/ah_formatterv6.html がびっくりした!わたしも TeX でこういう案件を受けたいもんです、ハイ。今回の AH Formatter v6 の変更点は、米国国税庁の出力に必要な仕様を AH 拡張として、多く盛り込んだそうです。とくに、AH 拡張の float まわりが大幅に改良されているのは、そのためでしょう。
さて、私にとっては、今回の懇親会が貴重な情報源でした。Michael H. Kay の XSLTバイブル: プログラマーズリファレンス をはじめ、様々な参考文献をみなさまから教わりました。みなさまに感謝しております。
#FormatterClub 懇親会で 多言語組版研究会 - アンテナハウス URL があったことを知りました。
先日の #FormatterClub 懇親会で @tottsama さんと @miyokosroom さんから、Michael H. Kay をはじめ、XSLTに関する文献をいくつか教えてくださって、感謝しております。
2011-09-20 16:44:35 via web
Michael H. Kay, XSLTバイブル: プログラマーズリファレンス、 #FormatterClub の懇親会で教えてもらった本です。この書籍は、 @tottsama さんがおっしゃるように、そのまま復刻してほしいと思います。 #XML
2011-09-20 16:39:03 via web
XSLTバイブル―プログラマーズリファレンス (Programmer to programmer)
- 作者: マイケルケイ,佐藤直生,Michael Kay,IDEAC
- 出版社/メーカー: インプレス
- 発売日: 2001/12
- メディア: 単行本
- 購入: 1人 クリック: 2回
- この商品を含むブログ (1件) を見る
XSLT 2.0 Programmer's Reference (Programmer to Programmer)
- 作者: Michael Kay
- 出版社/メーカー: Wrox
- 発売日: 2004/08/20
- メディア: ペーパーバック
- クリック: 1回
- この商品を含むブログ (1件) を見る
XSLT 2.0 and XPath 2.0 Programmer's Reference (Programmer to Programmer)
- 作者: Michael Kay
- 出版社/メーカー: Wrox
- 発売日: 2008/05/05
- メディア: ハードカバー
- 購入: 1人 クリック: 11回
- この商品を含むブログ (2件) を見る
また、多言語組版研究会 があったことをはじめて知りました。そのなかで、第1回多言語組版研究会:XSL-FOによる多言語組版の発表資料は、2003 年当時として、XML 組版の可能性を見出す資料と思います。その発表資料は、多言語組版の新しい地平線 にある UnicodeとXSLによる多言語組版 2003年12月29日版(PDF 884KB) からダウンロードできます。
TeX も負けてられへんなっ!!!
\NabeAzz を作ってみた
ZR さんのブログであるマクロツータに、 日本で TeX できる人の数→(?) - マクロツイーター のような投稿がありました。その投稿の NabeAzz にひとりで大爆笑してしまいました。
以下の動作を行うマクロ \NabeAzz を作れ。
\NabeAzz{<整数n>} は 1 から n までの整数の 10 進表記を順に空白区切りで出力する。ただし、整数が「3 の倍数である」または「(その 10 進表記に)数字 3 を含む」場合は、フォントを「Computer Modern Funny Italic」の 12pt(または LaTeX の場合は \large)に変えて出力する。その他の条件は以下の通り。
- 引数の <整数n> は正であり、かつ数字列で与えられると仮定してよい。想定外の引数を与えた場合の動作は何も規定しない。
- 「Computer Modern Funny Italic」の TeX でのフォント名(TFM 名)は「cmfi10」である。LaTeX では「エンコーディング OT1、ファミリ cmfr、シリーズ m、シェープ it」に割り当てられている。
付帯条件:
- フォーマットは plain TeX または LaTeX2e とする。
- 使用フォーマットのユーザ命令、内部定義マクロ、TeX プリミティブの全てを自由に使える。
- さらに外部パッケージを使用しても構わない。
- シェル実行機能(\write18)は使用禁止。(←書き忘れてた ;-) )
- 拡張エンジンの機能も使用可能である。ただし、「LuaTeX で Lua インタプリタを呼び出す」ことだけはダメ。;-)
- 制限時間は実働で 24 時間とする。
- あらゆる形態の参考文献を参照して構わない。ただし、「この問題の答えそのもの」および「TeX での FizzBuzz の実装そのもの」は除外する。
http://d.hatena.ne.jp/zrbabbler/20110815/1313398638
さて、あなたは TeX を使えますか……?
NabeAzz を TeX でやったらどうなるか面白そうなので、さっそくチャレンジしてみました。
NabeAzz.tex は、以下のとおりです。
%#!pdflatex NabeAzz %#LPR acroread NabeAzz.pdf \documentclass{article} \makeatletter \def\NabeAzz@font{\normalfont}%normal \def\NabeAzz@h@font{%aho \usefont{OT1}{cmfr}{m}{it}\Large}%\large \def\NabeAzz#1{% \@tempcnta\z@\relax%%loop counter \@whilenum \@tempcnta<#1 \do{% \advance\@tempcnta\@ne \@tempcntb\z@\relax %%case 1 \chk@h@thr@@{\@tempcnta}{\@tempnuma}% \ifnum\@tempnuma=\@ne \@tempcntb\@ne\relax \fi %%case 2-1 \@m@d{\@tempcnta}{3}{\@tempnuma}% \ifnum\@tempnuma=\z@ \@tempcntb\@ne\relax \fi %%case 2-2 %% \sum@@ight@digits{\@tempcnta}{\@tempnumb}% %% \@m@d{\@tempnumb}{3}{\@tempnuma}% %% \ifnum\@tempnuma=\z@ %% \@tempcntb\@ne\relax %% \fi %%output \ifnum \@tempcntb=\z@ {\NabeAzz@font \number\@tempcnta}% \else {\NabeAzz@h@font \number\@tempcnta}% \fi \space }% } \newcount\@temp@m@dcntp \newcount\@temp@m@dcntq \newcount\@temp@m@dcntr \def\@m@d#1#2#3{%%#1 % #2, return #3 \@temp@m@dcntq#1\relax \@temp@m@dcntr#2\relax \ifnum \@temp@m@dcntq=\@temp@m@dcntr \@temp@m@dcntq\z@\relax\fi \@whilenum \@temp@m@dcntq>\@temp@m@dcntr \do{% \@temp@m@dcntp\@temp@m@dcntq\relax \divide \@temp@m@dcntp by \@temp@m@dcntr % q = a/b \multiply \@temp@m@dcntp by -\@temp@m@dcntr % \advance \@temp@m@dcntp by \@temp@m@dcntq % r = -bq + a \@temp@m@dcntr\@temp@m@dcntq\relax \@temp@m@dcntq\@temp@m@dcntp\relax % q <-> r }% \edef#3{\the\@temp@m@dcntq}\relax } \def\chk@h@thr@@#1#2{%#1: integer < 10^{8} \edef\chk@h@thr@@@temp{\@ight@digits{#1}}% \expandafter\@chk@h@thr@@@ight@digits\chk@h@thr@@@temp{#2}} \def\@chk@h@thr@@@ight@digits#1#2#3#4#5#6#7#8#9{% \ifnum #1=\thr@@ \def#9{\@ne}\relax \else \ifnum #2=\thr@@ \def#9{\@ne}\relax \else \ifnum #3=\thr@@ \def#9{\@ne}\relax \else \ifnum #4=\thr@@ \def#9{\@ne}\relax \else \ifnum #5=\thr@@ \def#9{\@ne}\relax \else \ifnum #6=\thr@@ \def#9{\@ne}\relax \else \ifnum #7=\thr@@ \def#9{\@ne}\relax \else \ifnum #8=\thr@@ \def#9{\@ne}\relax \else \def#9{\z@}\relax \fi\fi\fi\fi\fi\fi\fi\fi} \def\sum@@ight@digits#1#2{%#1: integer < 10^{8} \edef\sum@@ight@digits@temp{\@ight@digits{#1}}% \expandafter\@sum@@ight@digits\sum@@ight@digits@temp{#2}} \newcount\@sum@@ight@digitscnt \def\@sum@@ight@digits#1#2#3#4#5#6#7#8#9{% \@sum@@ight@digitscnt#1\relax \advance \@sum@@ight@digitscnt #2 \advance \@sum@@ight@digitscnt #3 \advance \@sum@@ight@digitscnt #4 \advance \@sum@@ight@digitscnt #5 \advance \@sum@@ight@digitscnt #6 \advance \@sum@@ight@digitscnt #7 \advance \@sum@@ight@digitscnt #8 %% \edef#9{\the\@sum@@ight@digitscnt}\relax } \def\@ight@digits#1{% \ifnum#1<10000000 0\fi \ifnum#1<1000000 0\fi \ifnum#1<100000 0\fi \ifnum#1<10000 0\fi \ifnum#1<1000 0\fi \ifnum#1<100 0\fi \ifnum#1<10 0\fi \number#1} %%from /usr/share/texmf-dist/tex/latex/base/ot1cmfr.fd \DeclareFontFamily{OT1}{cmfr}{\hyphenchar\font45 } \DeclareFontShape{OT1}{cmfr}{m}{n}{% <->cmff10% }{} \DeclareFontShape{OT1}{cmfr}{m}{it}{% <->cmfi10% }{} \makeatother \begin{document} \noindent \NabeAzz{99999}%% OK %\NabeAzz{200000}%% OK %\NabeAzz{999999}%%!!Fatal error occurred, no output PDF file produced! \end{document}
\NabeAzz のアルゴリズムとおおざっぱなコードは、30 分くらいでできていたのですが、マクロの名前を整えたり、マクロの仕様をちょっと変えたり、「3 の倍数」判定法を試したり、time で時間を測ったり…など、色々とやっているうちに、3 時間にもなってしまいました (^^;;
ほかのアプローチやもっときれいなマクロを書けるかもしれませんが、\NabeAzz に関して、わたくしはひとまずこれくらいにしておきます。もっと美しいコード例がありましたら、ぜひとも教えてくださいませ。
いくつかいいわけを。
- ZR さんの出題では、アホになる数字の場合に 12pt にせよという指示がありましたが、わたしは 14pt にしました。ZR さんは品がございますので、12pt になさっておられるのだと思いますが、やはりアホな数字ですから、ふざけてみました。
- cmfr のついては、ot1cmfr.fd からとってきて、<-> にして逃げました。
「3 の倍数」判定法にしてみる
「3 の倍数」判定法は、「整数 n が 3 で割りきれるための必要十分条件は、n の各桁の数字の総和が 3 で割りきれる。」なのですが、これを \NabeAzz で使ってみると、直接 mod 3 するよりも、計算時間が増えました。手元の計算機環境と実行結果は以下のとおりです。
CPU | Intel Core 2 Duo E8500 3.16GHz |
---|---|
MEM | PC6400 DDR2 SDRAM 8GB (2GBx4) |
OS | Vine Linux 6.0 x86_64 |
TeX 環境 | Vine Linux 6 の TeX Live 2009 |
$ pdflatex --version pdfTeX 3.1415926-1.40.10-2.2 (Web2C 2009) kpathsea version 5.0.0 Copyright 2009 Peter Breitenlohner (eTeX)/Han The Thanh (pdfTeX). There is NO warranty. Redistribution of this software is covered by the terms of both the pdfTeX copyright and the Lesser GNU General Public License. For more information about these matters, see the file named COPYING and the pdfTeX source. Primary author of pdfTeX: Peter Breitenlohner (eTeX)/Han The Thanh (pdfTeX). Compiled with libpng 1.2.46; using libpng 1.2.46 Compiled with zlib 1.2.5; using zlib 1.2.5 Compiled with poppler version 0.16.6 $ time pdflatex NabeAzz.tex \NabeAzz{99999} Case 2-1: real 0m8.016s 0m7.789s 0m7.946s user 0m7.902s 0m7.619s 0m7.821s sys 0m0.028s 0m0.039s 0m0.039s Case 2-2: real 0m8.086s 0m8.320s 0m8.165s user 0m7.965s 0m8.206s 0m8.073s sys 0m0.034s 0m0.028s 0m0.028s \NabeAzz{200000} Case 2-1: real 0m42.150s 0m42.134s 0m42.315s user 0m41.870s 0m41.858s 0m42.061s sys 0m0.097s 0m0.105s 0m0.117s Case 2-2: real 0m57.169s 0m57.478s 0m56.738s user 0m56.921s 0m57.129s 0m56.496s sys 0m0.109s 0m0.124s 0m0.084s
追記:あべのりさんに触発されて、\NabeAzz を変えてみた
あべのりさんが にっき♪ で、\NabeAzz をなんか適当やっていた*1。たしかに mod N を作らなければ、数行で終わりますね!
というわけで、上記の \@ight@digits を使わずに*2、区切り文字を入れて \ifx で順番に調べる方法に変えてみた*3。以下では \@m@d を、相変わらず使っているが、そこはご愛嬌ということで。
%#!pdflatex NabeAzz %#LPR acroread NabeAzz.pdf \documentclass{article} \makeatletter \newif\if@NabeAzz \@NabeAzzfalse \def\NabeAzz@font{% \if@NabeAzz \usefont{OT1}{cmfr}{m}{it}\Large\else\normalfont\fi} \def\NabeAzz#1{% \@tempcnta\z@\relax%%loop counter \@whilenum \@tempcnta<#1 \do{% \advance\@tempcnta\@ne %%case 1 \expandafter\chk@NabeAzz\number\@tempcnta E% %%case 2 \@m@d{\@tempcnta}{3}{\@tempnuma}% \ifnum\@tempnuma=\z@ \@NabeAzztrue\fi %%output {\NabeAzz@font \number\@tempcnta}% \space }% } \newif\if@NabeAzzEnd \def\chk@NabeAzz#1{% \@NabeAzzfalse \@NabeAzzEndfalse \@chk@NabeAzz#1 } \def\@chk@NabeAzz#1{% \@@chk@NabeAzz#1% \if@NabeAzzEnd\else\expandafter\@chk@NabeAzz\fi } \def\@@chk@NabeAzz#1{% \def\@tempa{#1}% \def\@tempb{E}% \ifx\@tempa\@tempb \@NabeAzzEndtrue \else \def\@tempb{3}% \ifx\@tempa\@tempb\@NabeAzztrue\fi \fi } \newcount\@temp@m@dcntp \newcount\@temp@m@dcntq \newcount\@temp@m@dcntr \def\@m@d#1#2#3{%%#1 % #2 \@temp@m@dcntq#1\relax \@temp@m@dcntr#2\relax \ifnum \@temp@m@dcntq=\@temp@m@dcntr \@temp@m@dcntq\z@\relax\fi \@whilenum \@temp@m@dcntq>\@temp@m@dcntr \do{% \@temp@m@dcntp\@temp@m@dcntq\relax \divide \@temp@m@dcntp by \@temp@m@dcntr % q = a/b \multiply \@temp@m@dcntp by -\@temp@m@dcntr % \advance \@temp@m@dcntp by \@temp@m@dcntq % r = -bq + a \@temp@m@dcntr\@temp@m@dcntq\relax \@temp@m@dcntq\@temp@m@dcntp\relax % q <-> r }% \edef#3{\the\@temp@m@dcntq}\relax } %%from /usr/share/texmf-dist/tex/latex/base/ot1cmfr.fd \DeclareFontFamily{OT1}{cmfr}{\hyphenchar\font45 } \DeclareFontShape{OT1}{cmfr}{m}{n}{% <->cmff10% }{} \DeclareFontShape{OT1}{cmfr}{m}{it}{% <->cmfi10% }{} \makeatother \begin{document} \noindent \NabeAzz{9999} \end{document}
「3 の倍数と 3 が付く数字のときだけアホになります」wikipedia:渡辺鐘 でウケそうなのは、40 番までだと思う件
このアホになる数字の列を見て、40 番以降がツラいですねー。このあと、アホになる数字が 130 番台までまばらになるので、とたんにつまらなくなります。そのつぎに大きな山があるのが 300 番台ですが、さすがに 300 番台までこの芸を続けないでしょう。
謝辞
というわけで、ZR さんの「\NabeAzz を作れ!」には、たいへん楽しませもらいました。ありがとうございました。
つぎは、Postscript で NabeAzz を(おぃ