Kazuhiro's blog
ようこそ! Kazuhiro's blog
木曜日, 8月 22 2019 @ 03:05 午前 JST
 記事を友人にメールする 印刷用画面 

OpenWrt on OpenBlocks 600

general

OpenBlocks 600ファームウェア更新終了が発表されたから、というわけでもありませんが、眠らせておくのももったいないのでOpenWrtを入れてみました。 ただし、OpenWrtにPowerPCのサポートは入っているものの、OpenBlocks 600に搭載されているPowerPC 405についてはbroken扱いになっている為 (2018年10月現在。2019年5月にremoveされました。)、platformを増やす方向でやってみました。 見よう見まねでやった (見まねにもなっていないところもあります) ので、platform (target) / subtarget / device の切り分けがぐちゃぐちゃです。イメージの作成方法もこれで正しいのか全く分かりません。

OpenBlocks標準のflashcfgではU-Bootイメージしか書き込めないようなので、initramfsのfactoryファームで起動して、そこからsysupgradeでファームウェアを導入します。factoryファームについてはフラッシュROMに書き込んでもいいし、TFTP経由やCFブート (factoryファームをext2フォーマットのCFにuImage.initrd-cfbootの名前で書き込み、ディップスイッチのSW3をonにして起動) のいずれかでいけるはずです。私自身はCFブートで行いました。

直接は関係ない変更も混じってますが、一応公開しておきます。興味のある方は試してみてください。

 記事を友人にメールする 印刷用画面 

pdic-fuw released

general

またしても今更な話ですが、pdicdumpの出力からJIS X 4081 UTF-8 extension準拠の書籍に変換するツールを公開しました

以前に公開したpdic-fpwに比べ、辞書内のハイパーリンクテキスト (相互参照)にある程度対応しています。また、付属のLookup 1.4+media用のパッケージファイルを使えば、フォントタグ等にもある程度対応します。

タグ:PDIC FreeUWING

 記事を友人にメールする 印刷用画面 

EPWINGを圧縮する (libdeflateで)

general

今更な話ですが、EBライブラリに付属のebzipを使えば、EPWINGを圧縮したまま利用する事が可能です。ebzipで圧縮されたEPWINGは、EBライブラリだけでは無く、多くのEPWINGビューアが対応しています。

ebzipのオプションには圧縮レベルがあり、これは圧縮するチャンクの大きさに反映されます。最大値の5ではチャンクのサイズは64KiBです。ebzipでの圧縮にはzlibを利用していますが、ebzipの圧縮レベルとは別に、zlibにも圧縮レベルがあります。ebzipでは圧縮レベルに関係なく一律の値 (Z_DEFAULT_COMPRESSIONによって指定される値で、現在は6) を指定しています。

zlibの圧縮レベルを上げればもっと圧縮できるのではないかと思って試してみましたが、よくて1%強程度しか改善できませんでした。

その時点で諦めてもよかったのですが、zlib以外のライブラリを使ってみてはということで、圧縮率の改善が見込めそうなlibdeflateを使ってみました。

青空てにをは辞典
190309
広辞苑第五版
HONMON2
広辞苑第五版
HONMONS
日本語版ウィキペディア
Wikip_ja20190301
英語版ウィキペディア
Wikip_en20190301
非圧縮
1,764,730,880 220,059,648 69,834,752 33,236,779,008 112,939,145,216
ebzip -l 5
478,746,362 72,335,940 50,837,283 19,927,656,401 33,968,207,228
非圧縮との比 27.1% 32.9% 72.8% 60.0% 30.1%
ebuzip -l 5
20190630
470,542,862 72,172,845 50,771,067 19,897,758,310 33,530,220,494
ebzipとの比 98.3% 99.8% 99.9% 99.8% 98.7%
ebuzip -l 5
libdeflate
441,842,778 67,058,577 49,942,504 19,661,425,623 32,384,784,337
ebzipとの比 92.3% 92.7% 98.2% 98.7% 95.3%

結果は表のような感じで、悪くても1%以上は改善し、書籍によっては約7.7%改善しました。 ebuzip -l 5 20190630 となっているものはzlibの最大圧縮レベルを利用したケースです。 また、HONMON2の非圧縮のサイズはHONMON2を伸長した場合のものです。 微々たる物といえばそうなのですが、スマートフォンなど、ストレージに制限がある場合には有効かもしれません。

EB Library with UTF-8 supportでlibdeflateを利用できるようにしていますので、興味のある方はお試しください。

タグ: EPWING EB Library

 記事を友人にメールする 印刷用画面 

Texinfoで日本語pdfを作成する

general

細田さんが作業された、「Texinfoで日本語PDFを生成」をLookupとWanderlustのドキュメントでやってみました。そのままではクロスリファレンスの部分が日本語化されていないので、一部変更したものを使ってみました。 実際にやったことは変更したファイル (texinfo.tex, texinfo-ja.tex, txi-ja.tex) をダウンロードし、.texiファイルに若干の修正を加えただけです。

修正内容は

  1. ファイルの先頭にある\input texinfo\input texinfo-jaにし、texinfo.texを直接読み込まずにtexinfo-ja.texを読み込むようにする。
  2. ファイルの文字コードをutf-8にし、ファイルヘッダ (Emacs用の coding cookieや@documentencodingコマンドの引数等) もそれに合わせる。

だけでした。Debian (sid) とW32TeXのLuaTeXで確認しています。 尚、インデックスや見出しに日本語等の非ASCII文字を含む場合 (Lookupのドキュメントが該当します)、texindexコマンドはTexinfo 6.0以降のものである必要があるはずです (W32TeXのtexindexは対応していません。私はMSYS2texindexを使いました)。作成されたWanderlustの日本語ドキュメントをおいてみました (pdf, 3.2MB) ので興味のある方はご覧ください。

 記事を友人にメールする 印刷用画面 

x-gzip64 decoder for FLIM on Emacs24

general

Emacs24で実装された、zlibサポートを利用したx-gzip64エンコードのデコーダです。 今更FLIMに入れるのもどうかという気もしますので、ここで公開しておきます。

;; x-gzip64 decoder
(when (and (fboundp 'zlib-available-p) (zlib-available-p))
  (eval-after-load "mel-g"
    '(progn
       (mel-define-method mime-decode-region (start end (nil "x-gzip64"))
         (save-excursion
           (save-restriction
             (narrow-to-region start end)
             (let ((mb enable-multibyte-characters))
               (set-buffer-multibyte nil)
               (base64-decode-region (point-min) (point-max))
               (zlib-decompress-region (point-min) (point-max))
               (set-buffer-multibyte mb)))))

       (mel-define-method mime-decode-string (string (nil "x-gzip64"))
         (with-temp-buffer
           (set-buffer-multibyte nil)
           (insert string)
           (base64-decode-region (point-min) (point-max))
           (zlib-decompress-region (point-min) (point-max))
           (buffer-string)))

       (mel-define-method mime-write-decoded-region (start end filename
                                                           (nil "x-gzip64"))
         "Decode and write current region encoded by gzip64 into FILENAME.
START and END are buffer positions."
         (interactive "*r\nFWrite decoded region to file: ")
         (let ((coding-system-for-read 'binary)
               (coding-system-for-write 'binary)
               (buffer (current-buffer)))
           (with-temp-buffer
             (set-buffer-multibyte nil)
             (insert-buffer-substring buffer start end)
             (base64-decode-region (point-min) (point-max))
             (zlib-decompress-region (point-min) (point-max))
             (write-region (point-min) (point-max) filename)))))))

タグ: Emacs Wanderlust

 記事を友人にメールする 印刷用画面 

cld4-epw-20150508 is released

general

cdae2-epwを作成されたクサガメさんが、Cambridge Learner's Dictionary 4th Editionに付属のCD-ROMの内容を、EBStudioで変換できるようにするためのPerlスクリプトを公開されています。

 記事を友人にメールする 印刷用画面 

Re: wanderlust で GMail 風、新着レス順にソート

general

元ネタはMatsubaraさんの記事fumiさんの記事および2ちゃんねるから。

エラーの原因は最初の(cdr x)(cddr x)の誤りであるからだったような気がしますが、詳細は忘れました。fletを取り除いたり、速度も(多分)速くしたものを公開しておきます。 condition-caseは二つともいらない気がしますが、wl-summary-overview-entity-compare-by-dateがそうなっているので合わせておきました。

(defun wl-summary-overview-entity-compare-by-reply-date (a b)
  "Compare entity A and B by latest date of replies."
  (let ((fx
         #'(lambda (x)
             (let* ((number (elmo-message-entity-number x))
                    (list (cons number
                                (wl-thread-entity-get-descendant
                                 (wl-thread-get-entity number))))
                    max time)
               (while list
                 (when (condition-case nil
                           (elmo-time-less-p
                            max
                            (setq time
                                  (elmo-message-entity-field
                                   (elmo-message-entity
                                    wl-summary-buffer-elmo-folder (car list))
                                   'date)))
                         (error nil))
                   (setq max time))
                 (setq list (cdr list)))
               max))))
    (condition-case nil
        (elmo-time-less-p (funcall fx a) (funcall fx b))
      (error nil))))
(add-to-list 'wl-summary-sort-specs 'reply-date)

尚、実用上はメッセージの時刻をわざわざ比較せずともメッセージ番号の比較で十分だと思いますので、下記のコードを利用して、reply-numberでソートするのが速度的には有利です。

(defun wl-summary-overview-entity-compare-by-reply-number (a b)
  "Compare entity A and B by latest number of replies."
  (let ((fx #'(lambda (x)
                (setq x (elmo-message-entity-number x))
                (apply 'max x (wl-thread-entity-get-descendant 
                               (wl-thread-get-entity x))))))
    (< (funcall fx a) (funcall fx b))))
(add-to-list 'wl-summary-sort-specs 'reply-number)

タグ:Wanderlust Emacs

 記事を友人にメールする 印刷用画面 

ELECOM USB 3.0対応メモリーリーダライタの罠

general

がんばっておもしろおかしく書こうかと思いましたが10秒で挫折したので結論だけ。

ELECOMのUSB 3.0対応メモリーリーダライタはコンパクトフラッシュ Type IIには対応していません。 私が買ったMR3-C002のパッケージの表には対応メディアにMicro Driveと書かれ、パッケージ裏の対応メディアの一覧やニュースリリースにもコンパクトフラッシュ (Type II) とかマイクロドライブなども記載されていますが、開口部の厚みが足りないのでType IIのカードは物理的にささりません。 WEBサイトで公表している対応表にだけは正しい情報が記載されていますが、製品紹介のページやオンラインショップの製品情報などは訂正されていません。

ちなみに、約1年後に発表された新製品Type IIカードが刺さらない (JPG)のは明らかですが、対応しているとニュースリリースには書かれています。

(記載内容はこの記事を書いた時点でのものです。)

(追記) 画像を添付しました。ちなみに、CF Type IIの厚みは5mmです。

(追記その2) 2013/11/28付けの対応表 (pdf) ではCF Type IIとマイクロドライブは対応していることになっているので、新製品の発表時には本当に気づいていなかったのかもしれません。

(追記その3 2014/02/19) MR3-A006については家電量販店ではパッケージに対応メディアの一覧を修正するシールが貼られているのを確認しました。他の製品については製品自体が無かったので不明です。 また、オンラインショップの製品紹介は修正されていません。

 記事を友人にメールする 印刷用画面 

cdae2-epw is released

general

まだテストバージョンとのことですが、 the Cambridge Dictionary of American English, Second Editionに付属のCD-ROMをEBStudioで変換できるようにするためのPerlスクリプトをクサガメさん公開されています。

タグ: EBStudio EPWING CDAE2

 記事を友人にメールする 印刷用画面 

SEMI-EPGで自動verifyを抑制する

general

SEMI-EPGで、鍵をauto retrieveされると困る人がいるようなので。 直接の解では無いですが、SEMIと同様に、自動でverifyを行わないようにさせる設定です。

(eval-after-load "semi-setup"
  '(eval-after-load "mime-view"
     '(when mime-setup-enable-epg
        (mime-add-condition
         'preview
         '((type . application)
           (subtype . pgp-signature)
           (body . invisible)
           (body-presentation-method . mime-preview-application/*-signature))
         'with-default "mime-pgp"))))

(2014/01/31 追記) 手元のものではmime-pgp-verify-when-previewnilにすることでSEMIと同様の動作になるようにしました。

タグ: SEMI-EPG Wanderlust