firefox の pdf 印刷がハングする件

2013.06.03 現時点で解決していないようだ.
http://forums.mozillazine.org/viewtopic.php?f=9&t=2641925

Adobe acrobat 以外を使ってみるという手もありそう.https://support.mozilla.org/ja/questions/937032 より:

Could you try a third party PDF printer driver to see whether they have the same problem catching the handoff from Firefox? For example:

    PrimoPDF - http://www.primopdf.com/ (free)
    PDFCreator - http://www.pdfforge.org/ (open source) 

じっさい,pdfcompleteというプリンタドライバが(なぜか)インストールされていたので使ったら,動いた.
ただし,これは試用期間後にはロゴがプリントされるようになるらしい.
http://www.pdfcomplete.com/cms/Home.aspx

Coq の match 式 で前提を使う

前回とほぼ同じ内容.

match式で,そのパターンにマッチした,という事実をその帰結部(?)で使いたい場合の方法.
まあ,前回もそうだったとも言えるが.

Parameter A:Set.
Parameter b:bool.
Parameter compWithCond: b = true -> A.

として,bがtrueだったら,Some (compWithCond の結果) を,b が false だったら
None を返す関数を定義したい,とする.

Definition func : option A :=
  match b as x return (b = x) -> option A with
    | true =>  fun H => Some (compWithCond H)
    | false => fun _ => None
  end eq_refl.

true の場合に (b = true) の証拠を使いたいので,match 式の true に対応する式の
型を,(b = true) -> option A とする.
すると,false 部の型は (b = false) -> option A となる.
で,match 式全体の型は (b = b) -> option A となるので,b = b の
型を持つ eq_refl を与えればよい.

Coqのmatch文での依存型

Coqのmatch文で場合分けするとき,対象に依存する型の対象のところが場合分けされないということがある.
(うまく書けない…)
以下のような例:

Definition func (S:Set)(P:list S->Prop)(g:P nil->S)
                (l:list S)(p:P l) : S :=
  match l with
    | nil => g p
    | s::ss => s
  end.

nilで分けた右側で,次のようなエラーになる.

The term "p" has type "P l" while it is expected to have type 
"P nil".

だから,lがnilの場合だって言ってるだろ,と言いたいところだがだめなようだ.

次のように考えれば良いらしい.

  • match文でSを表現するのはあきらめて,P nil -> S を表現する.
  • その関数を p に適用することで S を得る.
  • s::ssの時には定数関数でよい.
  • こう考えればmatch文の表す型が,「nil の時には P nil -> S で
    s::ss の時には P s::ss -> S だ」,と見なせるので,return を
    使って表現することができる

ということで,次のようになる:

Definition func (S:Set)(P:list S->Prop)(g:P nil->S)
                (l:list S)(p:P l) : S :=
  match l as x return P x -> S with
    | nil =>   g
    | s::ss => fun _ => s
  end p.

[2013.06.13追記] Chlipala の教科書で取り上げられていた。次のように書けばよいらしい。なるほど….

Definition func (S:Set)(P:list S->Prop)(g:P nil->S)
                (l:list S): P l -> S :=
  match l with
    | nil =>   fun p => g p
    | s::ss => fun _ => s
  end.

文字数を数えるプログラム chrcount

#!/usr/bin/perl
#
# Count the number of characters in a file
# File must be encoded in UTF-8.
# End-of-line can be either LF or CR-LF

use strict;
use warnings;
use open IN => ":encoding(UTF-8)";

$/ = undef;

foreach my $f (@ARGV) {
  operate($f);
}

exit;

sub operate {
  my ($f) = @_;
  open(F, $f) or warn("Failed to open $f: $!\n");
  $_ = <F>;
  s/(\r)?\n//g;
  print sprintf("%d %s\n", length($_), $f);
}

Squeezebox touch の ntp

Squeeze touch の時計がどんどん遅れるので,

http://forums.slimdevices.com/showthread.php?87588-NTP-on-the-Touch/page3

を参照してntp client を入れた.ありがたいことである.

それにしても,ふざけたログインメッセージだ.:-)
以下引用:

This network device is for authorized use only. Unauthorized or improper use
of this system may result in you hearing very bad music. If you do not consent
to these terms, LOG OFF IMMEDIATELY.

Ha, only joking. Now you have logged in feel free to change your root password
using the 'passwd' command. You can safely modify any of the files on this
system. A factory reset (press and hold add on power on) will remove all your
modifications and revert to the installed firmware.

Enjoy!
#

mplayerとlameで らじるらじる の長時間録音

mplayerとlameを使って,NHKラジオの「らじるらじる」を録音する方法があちこちに書かれている.たとえば,

など.

mplayerの「再生デバイス」としてpcm/wavファイルを指定できるので,
それをlameにリダイレクトというストーリーだ.
だいたいうまくいくのだが,長時間録音をしようとすると,おおむね3時間半くらいで止まってしまう.
オペラとか長い番組があるので,5時間くらいは録音したいことがあるので,ちょっと嫌だ.

ソースを読んでみたところ,どうも次のような事情らしい.

  • mplayerが最初にwaveヘッダに「データの長さは 0x7ffff000 だ」と書き込む.
  • lameはそれを信じて,その長さまで読んだら終了してしまう.これがだいたい3時間半くらい.

(これは双方ともやむを得ない話であって,特に mplayer の側は最初にそういういい加減な値を書いては
いるものの,録音が終了したら正しい値に上書きしようとするので,別に責められない.
今回のようにパイプに通してしまうと seek できないから,上書きには失敗するけれど.)

試みに,0x7ffff000 を小さな値に書き直して make してみると,もっと短い時間で終了してしまうようになったので,これが原因であろう.以下のようにして回避できる.

  • (これは別段行わなくても良いようだが,) mplayer 側で,waveヘッダをつけないようにする.
    これには,”-ao pcm:file=…” のところを “-ao pcm:nowaveheader:file=…” と書き換える.

  • lame 側で,raw pcm ファイルを読む設定にする.
    これには,”-r” オプションを指定すればよい.manpageには,この場合には sampleレート等を指定する必要があると書いてあるが,特にそうしなくても動いているようだ.(今回使ったlameのバージョンは 3.99.5)

emacs のファイルのコーディングシステム関連

emacs で,ファイルのコーディングシステム (coding system) 自動判定が失敗することがある.その対処法.

読んでしまったものが間違っている場合は,
revert-buffer-with-coding-system (C-x RET r) で,正しいものを指定すればよい.

そもそも間違われないようするには,ファイルの(疑似)局所変数である coding に指定しておけばよい:

Local Variables:
coding: utf-8
End:

(2012.04.16追記)ついでに,.emacsに

(set-coding-system-priority 'utf-8 'euc-jp 'iso-2022-jp 'cp932)

と書いてみた.ちょっとは良くなるだろうか?

wordpress 設定

自動改行の抑制

PS Disable Auto Fomatting プラグイン :
編集画面(HTML)で改行しても,余計な<br/>が入らなくなる.

上部画像の除去

Twenty Eleven テーマで,一番上にある画像を除去.
header.php ファイルにある <img src…> をコメントアウトした.

pre要素

長い行があるとスクロールしてしまうわけだが,
不便なので,表示幅で改行するようにしたい.スタイルシートで,
white-spaceにpre-wrapを指定すればよいらしいので,
そうした.Opera, Firefox, Chrome どれもうまく動いた.

ThinkPadX200からThinkPadX220へ移行

ThinkPadX200が,使用中に突然パタンと電源が切れるようになってしまった.やむなく ThinkPadX220に移行.どちらも Windows7 Professional.以下,作業メモ.

ログオン時にユーザ名入力を必須とする

「管理ツール」→「ローカルセキュリティポリシー」→「ローカルポリシー」→「セキュリティ オプション」→「対話型ログオン:最後のユーザー名を表示しない」を<有効>にする.

CAPSLOCK と CONTROL

HKKをつなぐこともあるので,CAPSLOCKとCONTROLは,入替ではなくて,CAPSLOCKをCONTROLで書きつぶすようにする.

HKEY_LOCAL_MACHINES\SYSTEM\CurrentControlSet\Control\Keyboard Layout\Scancode Map
    00 00 00 00 00 00 00 00
    02 00 00 00 1D 00 3A 00
    00 00 00 00

ATOK + 英語キーボード

英語キーボードとして認識されない.レジストリをいじる必要があるらしい.http://blogmag.ascii.jp/kodera/2007/08/28200506.html 参照.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts\E0200411 の値を kbdusx.dll にする.
だいたいはうまくいったのだが,なぜかはわからないが,Atl-` で日本語に切り替わらない.MS-IMEではそういうことはないのだが.

前のマシンからのディスク内容移行

前のマシンの内容をAcronis True Image Home でバックアップして,必要な内容だけリストアする.まあ良いのだけれど,ユーザ情報が違うので,パーミションがぐちゃぐちゃになってしまう.前にも書いたけど,以下のようにして修正.(C:\tmp以下をmyuserの所有にしたいとして)

> takeown /R /F C:\tmp /D Y
> icacls C:\tmp /reset /t
> icacls C:\tmp /inheritance:r
> icacls C:\tmp /grant myuser:(CI)(OI)F SYSTEM:(CI)(OI)F Administrators:(CI)(OI)F Everyone:(CI)(OI)RX "CREATOR OWNER:(CI)(OI)F" "CREATOR GROUP:(CI)(OI)RX" None:(CI)(OI)RX

think vantage toolboxをツールバーから削除

管理者権限で以下を実行:
> regsvr32 /u “C:\Program Files\PC-Doctor\PcdToolbar584923.dll”
ファイル名の数字はバージョンによって違うらしい.

エクスプローラ

http://classicshell.sourceforge.net/

putty

日本語対応版http://hp.vector.co.jp/authors/VA024651/PuTTYkj.htmlを持ってきて使う.puttyjp.exeへのショートカットをスタートメニューに置く.
My Default Settingとかいうセッションを作っておく.

  • ウィンドウ->スクロールバックの行数: 適当に変更
  • ウィンドウ->外観->フォントの設定: 14ptに.
  • ウィンドウ->色: Default Foreground/0.0.0, Default Bold Foreground/50.0.0, Default Background/255.255.255, Default Bold Background/255.255.192, Cursor Text/255.255.255, Cursor Color/0.0.0

cygterm

  • 参照: http://d.hatena.ne.jp/lizy/20090427/cygterm
  • ソースを持ってきて,cygwinでmake.cygterm.exeへのショートカットをスタートメニューに置く
  • cygterm.cfg


    TERM = C:\pkg\putty\puttyjp.exe -load cygterm -telnet %s -P %d
    TERM_TYPE = xterm-256color
    PORT_START = 20000
    PORT_RANGE = 40
    SHELL = /bin/bash
    ENV_1 = MAKE_MODE=unix
    ENV_2 = HOME=/home/***THEUSERNAME***

  • PATHにc:/pkg/cygwin/bin を追加.
  • puttyにcygtermというセションを作成.
    • 端末->行規則オプション->ローカルエコー: 強制的にオフ
    • 端末->行規則オプション->ローカルラインの編集: 強制的にオフ
    • 端末->キーボード->バックスペースキー: Control-H
    • ウインドウ->変換->文字コード: UTF-8/Auto-Detect Japanese

LHMelting

インストール自体はどこかから持ってくればよいが,いろいろなDLLのインストールも必要.統合アーカイバから持ってくるのは大変だが,稲葉さんがcaldixというのを作ってくれているので,それから入れる.

TeX

TeXインストーラ3で入れれば良いのだが,そのあと多少作業が必要.

  • 個人用のディレクトリを登録する.installdir/share/texmf/web2c/texmf.cnf で,
    • TEXMFHOME に,c:/home/***USERNAME***/lib/tex などと,Windowsが認識する名前で設定.
    • TEXMFDBS に,$TEXMFHOMEを追加する.
  • yatex を入れる.サイトから持ってきて,cygwin の /usr/share/emacs/site-lisp に展開し,yatex -> yatex?.?? というシンボリックリンクを張っておく

Windows共有フォルダへのアクセス

そのままだと認証が通らない.
コントロールパネル→管理ツール→ローカルセキュリティポリシー→ローカルポリシー→セキュリティオプション→ネットワークセキュリティ:LAN Manager認証レベル が未定義になっているのを,「LMとNTLM応答を送信する」に変更する.

さらに,「資格情報を保存する」にチェックを入れても,パスワードが保存されない.これが保存されるようにするには専用のツールが必要だ.マイクロソフトのサイトにアクセスして,KerrCredentialsSample.exe をダウンロード,展開 (TP220 では,c:\pkg\MSDN に置いた).そこにできる Kerr.CredentialSetManager.exe を実行.Filter target に * を指定して Load を押す.該当の行を選択して Edit.どこまでが必須かよくわからないが,以下を行う.

  • User name を,単に名前とする (\\server\name としない)
  • password を入力
  • Persistence の欄を Local Computer に変更

参考: http://blog.livedoor.jp/dialy7/archives/4087574.html