2023-07-17

ブラタモリ

NHKで放送されている「ブラタモリ」は、2009年10月からレギュラー化して以来、14年ほどになります。見ていて楽しい番組で、話題に取り上げられた土地に行ってみようかという気にさせてくれます。今後も続いて欲しいと思いますが、タモリさんは不死身ではないので、番組終了となる時がくるのはやむを得ないでしょう。


これが大岡越前であったりバス旅番組などであれば、主役を交代させて長寿番組になることも可能かとは思います。しかしブラタモリは、タイトルからしても特定の芸能人を全面に押し出しています。もしもタモリさんとは別の芸能人を使って、「ブラタモリ」のような番組を作ったとしても、まさか「ブラタモリ」とは名乗れないでしょう(「ブラタモリ シーズン2」とか「新ブラタモリ」なども論外でしょう)。

2023-07-11

店舗入り口の自動ドア

最近は見かけなくなった気がしますが、ずいぶん前には店舗入り口の自動ドアは、床に敷かれているマットがスイッチになっていたと思います。Webには「あの頃から何が変わった?自動ドア」という情報がありました。それが、いつの頃から、ドアの上部に設けられたセンサーでドアが開閉するようになりました。

 

一方で、センサーではなく、扉に設置された押しボタンで開閉するものもあり、これは本来の意味での「自動ドア」ではないような気がします(ボタンを押すのは「手動」なので、「自動的」に開くドアとは言えないでしょう)。ここで、何故センサー方式と押しボタン方式が存在するのか疑問でしたが、センサーの誤動作でドアが勝手に開いてしまう現象が問題となっている対策との情報を得ました。特に人通りの多い繁華街などで問題になっているようです。例えばコンビニがあったとして、店に入るつもりがなくても、店の前を人が通れば勝手に扉が開いてしまうのは困るようです。その対策として、ドアに押しボタンを設置して開閉させる方式に切り替えているようです。

 

何もアクションを起こさなくても「自動的」にドアが開閉してくれれば助かるとは言え、センサーの誤動作で、勝手に開いたり、運が悪いと開かなかったりするのは、不便です。

 

将来的には、もっと優れた方式が考案されるのかもしれません。

2023-07-05

xsltproc greeting.xsl greeting.xml

O'REILLYの『XSLT』(Doug Tidwell)の第2章では、『プログラミング言語C』以来定番の「Hello World」の例題が掲載されています。そこでは、以下のようなXMLファイル(greeting.xml)と、

<?xml version="1.0"?>
<greeting>
  Hello, World!
</greeting>

以下のようなスタイルシート(greeting.xsl)を使用して、HTMLファイルに変換します。

<xsl:stylesheet
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        version="1.0">
<xsl:output method="html"/>

<xsl:template match="/">
  <xsl:apply-templates select="greeting"/>
</xsl:template>

<xsl:template match="greeting">
  <html>
    <body>
      <h1>
        <xsl:value-of select="."/>
      </h1>
    </body>
  </html>
</xsl:template>
</xsl:stylesheet>

 

この本ではXalanというXSLTプロセッサを使っていますが、僕はlibxsltに入っているxsltprocを使ってみました。

$ xsltproc greeting.xsl greeting.xml
<html><body><h1>
  Hello, World!
</h1></body></html>

XMLファイルが、スタイルシートの定義に基づいて、HTMLファイルに変換できました。まだXSLTファイルの書き方はわかりませんが、この本を読み進めていけば理解できるのだろうと思います。

2023-06-27

XSLTの基礎

XMLに関連する技術のひとつに「XSLT」があります。XML文書の構造を変更するために使わるという概念は、難しくないのですが、具体的に、何をどうするのか分かりません。W3Cのサイトには「XSL Transformations (XSLT) Version 1.0」がありますが、規格書を読んでも、深みにはまるだけではないかという恐れを抱いていました。

 

手っ取り早い参考書として、O'REILLYの『XSLT』(Doug Tidwell)を買ってみました。2001年に出た初版本ですし、Abebooks経由の古本ですが、XSLTを勉強し始めた初心者には十分です。

 

まだ読み始めたばかりですが、第2章の「The Obligatory Hello World Example」が参考になりそうです。以下のようなシンプルなXML文書をXSLTで変換する例が示されています。

 <?xml version="1.0"?>

<greeting>

    Hello, World!

</greeting>

 

このような例は、本書以外でも登場しそうですが、僕が気に入ったのは以下の点です。

  1. XSLTで変換するのが、HTMLだけではなく、PDF、Javaプログラムなどもある。
  2. XSLTの例示が複数あって、いろいろな書き方が考えられることを例示している。

 

XML文書をXSLTを用いてHTMLに変換する例は、よくありますが、Javaプログラムにも変換できるとは知りませんでした。Javaに出来るなら、PythonやAWK(!)にだってできるでしょう。

 

新刊としては約$40だったようですが、古本なので$4くらいでした。さらに送料が$6ちょっと必要で、今は円安なので、最終的に日本円としては千五百円ほどです。激安という訳ではありません。

2023-06-13

Schemeの「継続」という概念

近所の図書館で『プログラミング言語SCHEME』を借り、これを読みながらSchemeを勉強しています。SCHEMEはLISPから派生した言語ですから、LISP独特のS式であるとか、ドット対のような、他のプログラミング言語には見られないような特徴があります。これらは独特ですが、理解するのが難しいというものではないと思います。


SCHEMEにおける難しい概念のひとつは、「継続」(「コンティニュエーション」と表現している場合もあるようです)だと思います。前述した書籍の「第3章 続Scheme」の「3.3.継続」では次のように説明されています。

call/ccには1引数のプロシージャpを渡す必要があります。するとまず、call/ccは現在の継続を獲得し、それをpに引き渡します。この時の継続自身は、kというプロシージャの形で表現されています。そしてkに値を引き渡して適用する毎に、その値がcall/ccを適用した際の継続に返されるのです。そしてこの値が、call/ccの適用における実質上の値となります。

また、kを起動せずにpが完了した場合、そのプロシージャが返す値がcall/ccの適用における値となります。

 

Schemeに慣れたら何でもないことなのでしょうが、まだ学び始めたばかりの段階の者にとっては、何を言っているか見当もつきません。「継続」でSchemeに躓くひとは少なくないようで、Webを調べていたら「Appendix 3. 継続についてもう少し」という記事を見つけました。これ以外にも「継続」について解説した記事がWeb上にはあるようですから、いろいろと読んでみたり、MIT Schemeで動作を確認してみたりして、概念を理解しようと思います。


前述した書籍には「以下は、再帰からの非局所的な脱出を行う、call/ccの使い方を示したサンプルです。」というような記述もありました。まだSchemeの「継続」が何なのか理解していませんが、C言語のライブラリにある「setjmpとlongjmp はどのように実現されているのか」のようなものかとも感じました。

2023-06-12

MIT SCHEMEを学ぶ

有名な教科書である『計算機プログラムの構造と解釈』を学ぶ下準備としてSCHEMEを調べています。SCHEMEは仕様がコンパクトにまとまっていると言われていて、確かにそういう感じです。ただし、多くの実装が存在するので、どれを選んだら良いのか混乱します。また現実問題として、コンパクトな仕様の範囲では済まないことが多いようで、「Scheme requests for implementation」というものがあるようです。

 

ひとまずMIT SCHEMEを使ってみることにしました。SCHEMEはLISPの一種なので、入門書の最初はS式の話題から始まることが多いです。次第にSCHEME独特の機能の説明がなされますが、仕様がコンパクトなので、一通り全体像をつかむのは、それほど難しくはないんじゃないかと思います。

 

基本を学んだら、何か応用的なプログラムを組んでみたいところですが、そうなると基本機能だけでは済まなくなってきます。MIT SCHEMEの公式サイトでは「MIT/GNU Scheme Reference」が置いてあるので、これに目を通しておくほうがよいのではないかという気がしてきました。使用可能なSRFIについても書いてありますが、かなり膨大です。それを使わなくても、自分で実装することは可能かもしれませんが、既に存在するものを独自に作るのは「車輪の再発明」とも言われており、あまり推奨されません。またSCHEMEらしさを知るには、さきほどのドキュメントにあるものを使っていくほうが良いと思います。 

 

PDF版では500頁弱もあるドキュメントなので、簡単に読める量ではありませんが、どんなものがあるのか、ざっと目を通しておこうと思っています。

2023-06-09

SICPのEmacs Infoファイル

Webで「SICP and Emacs」という記事を見かけました。計算機科学の教科書として著名な「Structure and Interpretation of Computer Programs」(略称:SICP、日本語訳:計算機プログラムの構造と解釈)が、EmacsのInfoファイルで読めるのだそうです。ただし、日本語訳が読めるわけではなく、読めるのは原文(英文)です。

 

実際にファイルが置いてあるのは「SICP in Texinfo Format」です。ここには既にInfoファイルとしてコンパイル済のファイルが置いてあるので、ダウンロードするだけでした。

 

ホームディレクトリに「~/info」を作って、そこにダウンロードしたファイルと「dir」を置きました。またemacsの初期化ファイルに、以下の行を追加しました。

(setq Info-default-directory-list
      (append Info-default-directory-list (list (expand-file-name "~/info"))))