投稿者「mod_poppo」のアーカイブ

XSLT メモ

自分の Web サイトの (X)HTML ファイルの一部を XSLT で処理しているので、それについてのメモ。

例えば、 https://miz-ar.info/math/singularity/ のソースを表示させると、要素間の空白や改行が全くないが、この「要素間の空白や改行を削除する」処理は XSLT で行なっている。エディターで編集する元ファイルには編集しやすいようにちゃんと改行やインデントが入っている。

XSLT という技術(少なくとも、現行の1.0/2.0)は HTML5 と親和性が高いとはお世辞にも言えず(具体的には、 <xsl:output> で <!DOCTYPE html> を出力するように指定できない)、これを2016年に使うのはどうなのかという心の声が聞こえるが、まあ気にしないことにする。(ちなみに、 XSLT で <!DOCTYPE html> を出力する方法自体は、“xslt html5” で検索すれば出てくる。あるいは、 about:legacy-compat を使うのでも良いだろう。)

XSLT の規格:

空白を削除する

エディターで編集するときはインデントとかの都合で要素間に空白を入れたいが、実際に使うときは要素間の空白を入れたくない場合。 <xsl:strip-space> を使うと良い。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="xml"
              encoding="UTF-8"
              />
  <xsl:strip-space elements="*" />
  <xsl:template match="comment()">
  </xsl:template>
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

特定の<script>要素のsrc属性を書き換える

<script src=”main.js” /> を <script src=”main.min.js” /> に書き換える例。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
    xmlns:xhtml="http://www.w3.org/1999/xhtml"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0"
    >
  <xsl:output method="xml"
              encoding="UTF-8"
              />
  <xsl:template match="//xhtml:script/@src[string()='main.js']">
    <xsl:attribute name="src">main.min.js</xsl:attribute>
  </xsl:template>
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

Catmull-Rom スプライン曲線についてのメモ

たのしい複素積分」や「わくわく解析接続」では、マウス(またはタッチ操作)の入力から曲線を構成する際に Catmull-Rom スプライン曲線を使っている。この Catmull-Rom スプライン曲線についてのメモを書いておく。あくまで備忘録であり、 Catmull-Rom スプラインを知らない人向けの記事ではない。 続きを読む

舞台探訪に行ってきたよぉ 〜高岡編〜(「ゆるゆり さん☆ハイ!」聖地巡礼)

帰省のついでに、アニメ「ゆるゆり なちゅやちゅみ!」(OVA)、「ゆるゆり なちゅやちゅみ!+」(特別編)、「ゆるゆり さん☆ハイ!」(3期)の舞台探訪(聖地巡礼)に行ってきた。
続きを読む

舞台探訪に行ってきたよぉ 〜井波編〜(「ゆるゆり なちゅやちゅみ!」聖地巡礼)

最近「ゆるゆり」にハマっているので、帰省のついでに舞台探訪(聖地巡礼)的なやつに行ってきた。

まずは「ゆるゆり なちゅやちゅみ!」(OVA)に登場する、井波(現・南砺市)の閑乗寺公園から。(実家から近い&小さい頃から何回か行っていて思い出深いので) 続きを読む

解析接続っぽいことができる Web ページ(わくわく解析接続)を公開した

対数関数や平方根のような複素関数は、閉曲線に沿って解析接続すると元の関数と値がずれる場合がある。対数関数や平方根であればまだ単純だから良いが、根号の中に多項式等が入るような関数だと、具体的な曲線に対して関数の(ブランチ)を計算するのは少し面倒である。

というわけで、以前に作った複素積分の Web アプリ(ブラウザアプリ)のような感じで、平面に描いた曲線に沿って解析接続してくれるアプリ(Web ページ)を作った。「複素関数で遊ぼう」「たのしい複素積分」に続く、複素関数シリーズ第3弾とでも言おうか。今のところ愛称は設定していないが、気が向いたらページのタイトルを「わくわく解析接続」に変えているかもしれない。→変えた。この記事のタイトルも変更。 続きを読む

Lua で遊ぶ浮動小数点数

(倍精度)浮動小数点数でいろいろ遊ぶ際に、 Lua が便利なのではないかと思った。以下、特に断らない限り「浮動小数点数」と言ったら倍精度のものを指す。

なぜ Lua を使うのか?

Lua はC言語で実装されていて、数値の扱いについてはC言語と近い挙動を示すと考えられる。C言語と違って累乗の演算子 (x^y) があるのが地味に便利である。

Lua 5.2 以降では、浮動小数点数の16進表記をサポートするようになった。ソースコード中にリテラルで 0x1.fp2 と書けるし、文字列から数値に変換するときに tonumber("0x1.fp2") と書けるし、数値から文字列に変換するときは %a または %A を使って string.format("%a",7.75) と書ける。

あとは、標準ライブラリに足りない機能があったときに簡単にC言語で拡張ライブラリを書ける。

続きを読む

Raspberry Pi で赤外線リモコン

Raspberry Pi の GPIO に赤外線 LED をつけてリモコンとして使おう。

使ったハードウエア

  • Raspberry Pi Model B
    • 手元にあるのは、初代の、プラスじゃないやつ。microじゃない標準サイズのSDカードが刺さる。
    • Arch Linux が入っている。Raspbian だと若干手順が変わると思われる。
  • 赤外線LED
  • 赤外線リモコン受信モジュール
    • 3.3V で使えるもの。
    • Raspberry Pi を送信側として使うつもりであっても、既存のリモコンの信号を分析するには受信モジュールが必要となる。
  • トランジスター、抵抗、配線、ブレッドボードとか

参考にしたページ

ネット上のブログ記事の情報は古い場合があるし、そもそも環境が違って(Raspbian vs Arch Linux)参考にならないかもしれない。ネットの情報は参考程度にして、ソフトウエアのマニュアル等を参照するのが大切である。

作ったもの(ハードウエア)

使う GPIO の番号は選択の余地があるが、適当に GPIO17=出力 (LED), GPIO27=受信 とした。

ソフトウエア的な手順

Linux で赤外線リモコンの信号を送受信するための LIRC というソフトウエアがあるらしいのでそれを使う。

1. LIRC をインストールする

Arch Linux のパッケージになっているのでラクチン。

# pacman -S lirc

2. LIRC をロードする

/boot/config.txt を編集して、 LIRC をロードする。

/boot/overlays/README を参照。例として lirc が書いてあった。

# nano /boot/config.txt
dtoverlay=lirc-rpi,gpio_out_pin=17,gpio_in_pin=27

を書き加える。

lirc をロードするのに modprobe を叩いたり /etc/modules を編集したりは、しない。

(この辺で再起動をかける?)

systemctl start で lircd を起動する。systemctl enable するとラズパイの起動時に自動で起動してくれるはず。

# systemctl start lircd

3. 受信テスト

mode2 コマンドで、受信したものを吐かせる。

# mode2 -d /dev/lirc0

適当にリモコンを向けて、

space (数字)
pulse (数字)

の羅列が出てきたら多分OK。

4. リモコンを登録

irrecord コマンドを使い、リモコンの信号をファイルに記録する。

# irrecord -n -d /dev/lirc0 lircd.conf

メッセージの指示に従う。

途中で、 Enter name of remote と聞かれたので、 homeceiling と入力した。出力ファイル名は homeceiling.lircd.conf となった。

Enter name of remote (only ascii, no spaces) :homeceiling
Using homeceiling.lircd.conf as output filename

個別のボタンを登録する段になって Something went wrong: Cannot decode data といわれ、最後に Try using the -f option. と出てきたので、 -f オプションをつけて再実行した。

# irrecord -n -f -d /dev/lirc0 lircd.conf

homeceiling.lircd.conf ができた。

# cp homeceiling.lircd.conf /etc/lirc/lircd.conf.d/

5. 信号を送る

irsend SEND_ONCE (リモコン名) (ボタン名) で信号を送れる。

# irsend SEND_ONCE homeceiling lighter

Canon 製一眼レフの赤外線リモコン

Canon 製の一部の一眼レフカメラ/ミラーレスカメラには赤外線センサーがついていて、純正もしくは互換品の赤外線リモコンを買うとカメラに触れずにシャッターが押せる。(エントリーモデルの安い機種だと赤外線センサーがついていなかったりするので注意)

純正品のリモコンとしては Canon RC-6 が販売されている。Amazonとかを覗くと、 RC-6 互換のリモコンが山ほど売られている。

動作モードとしては、以下の二つがあり、リモコン側で切り替えられる。

  • 即時シャッター
  • 2秒後シャッター

有線のリモートスイッチと違って、赤外線リモコンを使うには、カメラ側の動作モードをリモコンモードにしなければいけない。

この赤外線リモコンが送る信号は割と単純で、以下のページで解析されている。

www.doc-diy.net :: Canon RC-1 remote control reverse engineered

AVRとかのマイコンと赤外線LEDを組み合わせれば、自作の赤外線リモコンを作ることもできる。上記のWebサイトにも作例がある。

www.doc-diy.net :: DIY Canon RC-1 IR remote control clone

というわけで赤外線リモコンを自作しようかと思ったが、既製品で良さそうなのを見つけたのでそれを買ってしまった。赤外線が結構強力で、2.5mmステレオケーブルを繋げば有線リモコンとしても使える。欠点があるとすれば、電池がやや特殊なことか。

ベルボン株式会社 ツインワンR3-UT