忘れたときに備えた記録

トップ 最新 追記
2005|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|11|12|
2009|01|02|03|04|05|06|10|12|
2010|06|07|08|12|
2011|07|09|
2012|09|11|
2013|02|03|09|
2015|10|11|
2016|01|08|11|
2017|02|08|10|
2018|11|

2008-04-03(Thursday)

vmware-player

いくつか忘れてしまったことを調べ直したのでメモ

vmware-playerパッケージ

Bug #135358 in vmware-player (Ubuntu): “vmware-player not installable” によれば何かバグが解決できていないらしくて、現在、公式パッケージはないらしい。ただし、aptlineに

deb http://ppa.launchpad.net/cschieli/ubuntu gutsy main

を追加すれば(取り敢えずの?)パッケージをインストールできた。

UbuntuのPersonalPackageArchive(PPA)

余談ですがフォント関係でもPPAという用語があって、検索の時にそっちも引っかかってしまいました。

PPAに関する公式サイトが https://launchpad.net/ubuntu/+ppas にあって、ここで、パッケージ名で検索とかできました。

アンダースコア入力

Ubuntu固有の話しではないのですが、Linuxをホストにしてvmwareを動かすと、仮想マシンでアンダースコアを入力できないという問題がありました。

今日、たまたま解決法を見つけたのですが、nabeの雑記帳によれば

xkeymap.keycode.211 = 0x073

を~/.vmware/configに書けば良いらしいです(まだ試していません)。

Tags: Ubuntu

2008-04-04(Friday)

Schemeの手軽な実行環境

計算機プログラムの構造と解釈(ジェラルド・ジェイ サスマン/ジュリー サスマン/ハロルド エイブルソン/Gerald Jay Sussman/Julie Sussman/Harold Abelson/和田 英一)

今、SICMを読んでいるのですが、この文中のサンプルを実行したり問題演習を行う為に、手軽な実行環境が必要になりました。

最初はGaucheを使っていました。これを使うと、例えば

#!/usr/bin/gosh
(display (+ 1 2))

とか書いたファイルに実行権限を与えておくと、直接実行できます。

ところが、サンプルで使われているrandom手続きやruntime手続き等がGaucheには無くて(randomは代わりにメルセンヌツイスターを使ったものがある)、それらが使われているサンプルを実行するには少し手直しが必要でした。

mit-schemeという、この本が想定しているScheme実装もあるのですが、スクリプトファイルを実行する方法がありません。いちいち

(load "hoge")

を入力するのも面倒です。履歴機能もないので。

ちなみにGaucheの対話モードにも本来履歴機能は無いのですが、Readline module for Gaucheを使うことで履歴やTab補完も使えるようになってとても便利です。

それで、何か良い方法が無いものかと調べてみたら、mit-schemeをEmacsから使う方法がありました。バッファやリージョンの式を評価させたり、対話モードをEmacs上で実行(もちろんEmacsのコピペが使える)させたり出来て、サンプルを手直ししながら実行するのにとても便利です。

Ubuntuの場合は、mit-schemeパッケージをインストールすると、必要なxscheme.elもインストールされるので、

(load-library "xscheme")

とするだけで使うことが出来ます。


2008-04-07(Monday)

dmgファイルをLinuxでマウントする方法

Mac用に公開されているプリンタドライバのファイルが必要になったのですが、配布に使われている形式がdmgというものでした。

このファイルの中身をLinuxで取り出す方法を調べたところ、 AcetoneISO (AcetoneISO2) - CD/DVD Image Manipulator [2.0.1]経由でAcetoneISOというソフトを見つけました。

AcetoneISOでdmgをisoに変換すれば、mountコマンドでマウントできるようになります。

paxファイルの使い方

dmgファイル(を変換したisoファイル)をマウントすると、今度は.pax.gzファイルというものが出てきました。これについても検索したら、2007-08-29 - 古橋貞之の日記が見つかり、このpaxファイルというのはcpioのアーカイブとの事で、

$ zcat RICOH\ IPSiO\ CX6600.pax.gz | cpio -idv

で展開できました。

RICOHのIPSiOCX6600をLinuxで使う

  1. MAC用のドライバをRICOHのページからダウンロード
  2. 上記の方法で "Library/Printers/PPDs/Contents/Resources/ja.lproj/RICOH IPSiO CX6600"を取り出してcx6600.ppdとか適当なファイル名でホームディレクトリにでもコピーする
  3. CUPSのプリンター追加で、ドライバーにcx6600.ppdを指定する

このcx6600.ppdを編集して

*cupsFilter:    "application/vnd.cups-postscript 0 /Library/Printers/RICOH/Filters/jobLogFilterU"
*APDialogExtension: "/Library/Printers/RICOH/PDEs/ricohJobLogU.plugin"

*%cupsFilter:    "application/vnd.cups-postscript 0 /Library/Printers/RICOH/Filters/jobLogFilterU"
*%APDialogExtension: "/Library/Printers/RICOH/PDEs/ricohJobLogU.plugin"

として無効化する(jobLogFilterUは多分Mac用の実行ファイルなので、Linuxでは使えませんでした)

以上の方法で、両面印刷用のオプションが日本語で表示れるので、適当に設定して印刷出来ます。

ただし、実は設定画面の表示方法にこだわらなければ、ドライバにGeneric Postscript Printerを指定してもきちんと両面印刷できます。一番最初に、Generic...ではなくUbuntuが持っているRICOHのドライバ一覧から近そうな名前のをとりあえず選んだらうまく印刷できなくて、そこから無駄に遠回りしてしまったわけです。どっとはらい

Church数

SICPの問題2.6で挙げられているChurch数とは何か、あれこれ考えたのでメモです。

関数zeroはこうなっています。

(define zero (lambda (f) (lambda (x) x)))

lambdaを使わない形で書くとこうなります。

(define (zero f) (lambda (x) x))

つまりzeroは、引数を1つ取って、恒等写像を返す関数です。

もう一つの関数はこうなっています。

(define (inc n)
  (lambda (f) (lambnda (x) (f ((n f) x)))))

SICPでは関数名がadd-1となっていますが、関数addの返り値から1を引くという式と混同しそうなので、incと変えています。

これだけだと分からないので、inc(zero)を考えると

inc(zero) = (lambda (f) (lambda (x) (f ((zero f) x)))))
= (lambda (f) (lambda (x) (f (恒等写像 x)))))
= (lambda (f) (lambda (x) (f x))))
= one

と言うことは、最初のzeroの定義と同じく

(define one (lambda (f) (lambda (x) (f x))))

と書けるので、2つ目のzeroの定義と同様に書き直すと

(define (one f) (lambda (x) (f x)))

となりました。

すなわち、"関数one"とは、引数として関数を1つ(fと呼ぶ)とり、「引数xを与えられたらf(x)を返す関数」を返すわけです。

と言うことは、

(define (one f) f)

と書き換えられる?しかし、

(one 1)

を評価させると、関数ではなく1が帰ってきてしまいます。 一見回りくどい

(define (one f) (lambda (x) (f x)))

という書き方で、oneに与えられる引数に関数であることを強要していると解釈すれば良いんでしょうか。

とにかく、zeroとoneによって、Church数とは「引数として関数を1つ取り、引数を1つ取る関数を返す関数」だと見当がつきました。

次にinc(one)を考えてみると

(inc one) = (lambda (f) (lambda (x) (f ((one f) x)))))
= (lambda (f) (lambda (x) (f (f x)))))
= two

つまり

(define (two f) (lambda (x) (f (f x))))

と書き換えられました。これは、引数に関数fを取ると、「引数xを与えると$f^2(x)$を返す関数」を返すわけです。

だいぶ分かってきました。つまり

zero(f)恒等写像 $f^0(x)$
one(f)$f^1(x)$
two(f)$f^2(x)$

です。この表から、Church数における3は、関数fを与えると、「引数xを与えると$f^3(x)$を返す関数」を返す関数、つまり

(define (three f) (lambda (x) (f (f (f x)))))

だと推測できました。

なるほどなー

本日のツッコミ(全1件) [ツッコミを入れる]

_ slots7 [однорукий бандит играть онлайн бесплатно через торрент, ка..]


2008-04-08(Tuesday)

Ubuntuでcups-pdfの出力先を変える

UbuntuではプリンタとしてPDF_file_generatorというのを設定することで、紙に印刷する代わりにPDFファイルを作る事が出来ます。

その出力先を設定しているのが /etc/cups/cups-pdf.conf で、デフォルトでは ~/PDF に出力するように

Out ${HOME}/PDF

となっています。ところが、これを

Out ${HOME}/Desktop

としてデスクトップに出力しようとしても、エラーが発生してうまく行きません。こんなエラーメッセージがログファイルに残っていました。

failed to set file mode for PDF file (non fatal) (/home/hiraku/Desktop/035.pdf)

検索したところ、Bug #147551 in cups-pdf (Ubuntu): “cups-pdf fails to generate file when user does not print to default ~/PDF (apparmor vs.cups-pdf inconsistency)”に手がかりがあって、/etc/cups/cups-pdf.confの他に /etc/apparmor.d/usr.sbin.cupsd で

 @{HOME}/PDF/ w,
 @{HOME}/PDF/* w,

となっているところを

 @{HOME}/Desktop/ w,
 @{HOME}/Desktop/* w,

と直して、

$ sudo /etc/init.d/apparmor restart

とすると、無事デスクトップに出力されるようになりました。