BNFCは, LBNFを入力すると, 字句解析器や構文解析器を生成する. Haskellで書かれているが, Haskellのほか, C, C++, Java, OCamlのコードも生成する.
BNFC-2.4.2.0は, ghc-7.4.1でうまくコンパイルできない.古いhaskell89モジュールに依存しているためだ. 手でモジュールの名前を置き換えてコンパイルできるようにしたが, haskell89に依存するHaskellコードを生成してしまう.
SVNリポジトリ版は, 簡単にコンパイルでき, 問題なくチュートリアルを済ませることができた.
2012年5月26日土曜日
Haskellで並列プログラミング
2012年5月にHaskell Platformの新しいバージョンが出るようなので,待った方がよいかも.
Haskell入門5ステップの4.1 初めてのHaskell並列プログラミングでつまづいた.
Haskell入門5ステップの4.1 初めてのHaskell並列プログラミングでつまづいた.
Most RTS options are disabled-rtsoptsをつけてもエラーが出続ける. 以下の通り, 最新GHCとcabal-installを入れたところうまくいった.
- ghc-7.4.1をインストール.
- cabal-install
$ git clone git://github.com/ibtaylor/cabal-install.git $ cd cabal-install $ sudo bash -c 'unset PATH; . /etc/profile; bash bootstrap.sh --global'
- パッケージ情報の更新.
$ cabal update
- parallelパッケージのインストール.
$cabal install parallel
2012年5月20日日曜日
HaskellとXcode 4.3
Haskell-platform 2011.4をインストールした.パッケージをインストール途中,ghcが/Developer/usr/bin/gccがないと言って止まる./usr/bin/ghcはシェルスクリプトで,ここにgccへのパスが書いてある.Xcode-4.3からXcodeはただのアプリケーションになったので,/Developerは/Applications/Xcode.app/Contents/Developerに移動.でも長ったらしいので,/usr/bin/gccとしておいた./usr/bin/clangにしてみたが,コンパイルはうまくいかない.なお,/usr/bin/ghcはシンボリックリンク.
2012年4月26日木曜日
PDFの圧縮
pdfsizeoptでPDFの圧縮を試みる。
jbig2enc, sam2pをMacPortsからインストール。
pngoutとMultivalent.jarはオープンソースではない。pngoutはバイナリを~/local/binに置く。Multvalent.jarのToolsは現在のバージョンには含まれないので、pdfsizeoptのページからダウンロードして、~/Library/Java/Extensionsに置く。デフォルトでCLASSPATHに含まれるが、環境変数に含まれないのでpdfsizeopt.pyからは分らない。
pdfsizeoptをチェックアウト。pythonの在処を書き換えたpdfsizeopt.pyを~/local/libexecに置く。引数とCLASSPATHを渡し、大量の中間ファイルを取り除くために、pdfsizeopt.pyを下記のスクリプトから呼び出す。
サイズは確かに小さくなるが、処理に結構時間がかかる。途中で落ちてしまうこともある。pdftkでつなげた場合はうまくいった。
jbig2enc, sam2pをMacPortsからインストール。
pngoutとMultivalent.jarはオープンソースではない。pngoutはバイナリを~/local/binに置く。Multvalent.jarのToolsは現在のバージョンには含まれないので、pdfsizeoptのページからダウンロードして、~/Library/Java/Extensionsに置く。デフォルトでCLASSPATHに含まれるが、環境変数に含まれないのでpdfsizeopt.pyからは分らない。
pdfsizeoptをチェックアウト。pythonの在処を書き換えたpdfsizeopt.pyを~/local/libexecに置く。引数とCLASSPATHを渡し、大量の中間ファイルを取り除くために、pdfsizeopt.pyを下記のスクリプトから呼び出す。
サイズは確かに小さくなるが、処理に結構時間がかかる。途中で落ちてしまうこともある。pdftkでつなげた場合はうまくいった。
#!/bin/sh
PDFSIZEOPT=${HOME}/local/libexec/pdfsizeopt.py
OPTS="--use-pngout=true --use-jbig2=true --use-multivalent=true"
MULTIVALENT=${HOME}/Library/Java/Extensions/Multivalent.jar
if [ $# -lt 1 ]; then
echo "usage :: $0 input.pdf"
exit
fi
INPUT=$1
TMPDIR=`mktemp -d /tmp/pdfsizeopt.XXXXXX`
cp ${INPUT} ${TMPDIR}
cd ${TMPDIR}
CLASSPATH=${MULTIVALENT} ${PDFSIZEOPT} ${OPTS} ${INPUT}
mv ${INPUT%pdf}psom.pdf ${OLDPWD}
rm -rf ${TMPDIR}
2012年4月25日水曜日
検索可能なPDF作成
論文の多くがPDF化されているが、透明テキストがついていない場合がある。Acrobatがするのが楽だが、フリーウェアでも可能。
MacPortsでは、ghostscript, hocr2pdfが含まれているexact-image, tesseractと辞書 (tesseract-eng, tesseract-jpnなど) をインストールする。以下の手順をスクリプトにまとめた(参考にしたrubyスクリプト)。
LZW圧縮してもファイルサイズ大きい3倍くらいになる。圧縮しないと10倍くらい。Acrobatだと元のファイルより小さくなっている。-dPDFSETTINGS=/screenだと解像度はともかく、画像が乱れて使い物にならなかった。
gsの-sDEVICE=tifflzwはモノクロなので、一旦非圧縮の24bitカラーに出力してからconvertで変換している。
追記: pdftkでまとめるのが良い。MacPortsではgcc-4.5のバグ?のため、コンパイルできないのでバイナリをインストール。サイズはpdfsizeoptでAcrobat並みのサイズになった。
MacPortsでは、ghostscript, hocr2pdfが含まれているexact-image, tesseractと辞書 (tesseract-eng, tesseract-jpnなど) をインストールする。以下の手順をスクリプトにまとめた(参考にしたrubyスクリプト)。
LZW圧縮してもファイルサイズ大きい3倍くらいになる。圧縮しないと10倍くらい。Acrobatだと元のファイルより小さくなっている。-dPDFSETTINGS=/screenだと解像度はともかく、画像が乱れて使い物にならなかった。
gsの-sDEVICE=tifflzwはモノクロなので、一旦非圧縮の24bitカラーに出力してからconvertで変換している。
追記: pdftkでまとめるのが良い。MacPortsではgcc-4.5のバグ?のため、コンパイルできないのでバイナリをインストール。サイズはpdfsizeoptでAcrobat並みのサイズになった。
- ghostscriptでPDFのページを分解してtiffにする。
- tesseract-ocrでOCRしてhocr2pdf用のHTMLを作成。
- convertでtiffをLZW圧縮。
- hocr2pdfで透明テキストとLZW圧縮したtiffをまとめてPDFを作成。
- pdftk
ghostscriptで一つのPDFにまとめる。
#!/bin/sh
PDFTK=pdftk
GS=gs
RES=300
TIFF=tiff24nc
GSOPTS="-q -dBATCH -dNOPAUSE"
TESSERACT=tesseract
CONVERT=convert
CONVERTOPTS="-compress lzw"
HOCR2PDF=hocr2pdf
PDFQUALITY=/ebook
if [ $# -lt 2 ]; then
echo "Usage :: $0 input.pdf lang (eng|jpn)"
exit
fi
FNAME=$1
LANG=$2
TMPDIR=`mktemp -d /tmp/pdfocr.XXXXXX`
cp "${FNAME}" ${TMPDIR}
cd ${TMPDIR}
${GS} ${GSOPTS} -r${RES}x${RES} -sDEVICE=${TIFF} -sOutputFile="${FNAME%.pdf}_%04d.tiff" "${FNAME}"
rm -f ${FNAME}
for tiff in *.tiff; do
${TESSERACT} -l ${LANG} ${tiff} ${tiff} hocr > /dev/null 2>&1
${CONVERT} ${COVERTOPTS} ${tiff} ${tiff%.tiff}_lzw.tiff
hocr2pdf -i ${tiff%.tiff}_lzw.tiff -o ${tiff%tiff}pdf < ${tiff}.html
rm -f ${tiff}.html
done
#${GS} ${GSOPTS} -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=${PDFQUALITY} -sOutputFile="${OLDPWD}/${FNAME%.pdf}_ocr.pdf" `ls -1 *.pdf`
${PDFTK} *.pdf cat output ${OLDPWD}/${FNAME%.pdf}_ocr.pdf
cd -
rm -rf ${TMPDIR}
2012年4月3日火曜日
TeXのソースを分割してTeXShopでタイプセット
長い書き物をするとき、TeXのソースはいくつかのファイルに分割することが多い。ルートファイルroot.texに\input{foo}を使って、foo.texの中身を取り込む。
コマンドラインだとMakefileに依存関係を書いておくと楽。でも、ちょっと面倒。omakeで更新のたびに自動的にタイプセットすることもできる。
TeXShopでは、foo.texを編集しているときにタイプセットをクリック、またはCommand+Tしてfoo.tex自体をコンパイルしてしまうことがある。
foo.texの冒頭に
root.texには
どちらもTeXShopのヘルプに書いてある。
コマンドラインだとMakefileに依存関係を書いておくと楽。でも、ちょっと面倒。omakeで更新のたびに自動的にタイプセットすることもできる。
TeXShopでは、foo.texを編集しているときにタイプセットをクリック、またはCommand+Tしてfoo.tex自体をコンパイルしてしまうことがある。
foo.texの冒頭に
%!TEX root = root.texと書いておくと、foo.texの代わりにroot.texをコンパイルする。
root.texには
%!TEX TS-program = pdflatexのようにどのコマンドでタイプセットするか書いておくとよい。
どちらもTeXShopのヘルプに書いてある。
2012年3月28日水曜日
起動ディスクを抜いても起動したLionの魔法
仕事のメインマシンであるMac Proは,いつからかファイル共有もリモートログインもできなくなった.共有はもちろんオンだし,ファイアウォールも使っていない.hosts.allowを書いてみたりして,tcpwrapperを起動させたりしたのがいけなかったのかもしれないが,結局よく分からない.セーフモードで起動して,Mac OS X 10.7.3 comboを再適用したがこれもだめ.Lionの再インストールを決断した.
でも,バックアップは面倒なのでこの機会に起動ディスクを大きいもの(2TB)に入れ替えることにした.Mac Proのディスク交換は至って簡単.蓋を開けてディスクトレイを引き出す.ディスクを入れ替えて戻す.電源を入れる.
こんなときのために,あらかじめ用意しておいたインストールDVDで起動しなくてはと思っていたが,起動中はWireless Keyboardが認識されずディスクのトレイが空かない.USBキーボードを探しているうちに,なんとLionのインストーラが起動していた.OSの入っているハードディスクもDVDもUSBドライブもないはずだ.魔法だ!
ちゃんと確認していないが,どうやよTime Machineとして使っている2番目のディスクの隠しボリュームから起動したようだ.それにしても起動ディスクを空のディスクに入れ替えたのに起動するのには驚いた.
OSのインストール中に追加コンポーネントをダウンロードしていたのだが,起動してみると最新のMac OS X 10.7.3になっている.これまでの常識では,OSを入れ替えたらアップデートしなければならなかった.
iOSばかり注目されているが,Mac OS Xも心地よい進化を遂げている.
追記: diskutil listしても、起動ドライブ以外にはApple_Boot Recovery HDはないので、インターネット復元のだろうと思います。
でも,バックアップは面倒なのでこの機会に起動ディスクを大きいもの(2TB)に入れ替えることにした.Mac Proのディスク交換は至って簡単.蓋を開けてディスクトレイを引き出す.ディスクを入れ替えて戻す.電源を入れる.
こんなときのために,あらかじめ用意しておいたインストールDVDで起動しなくてはと思っていたが,起動中はWireless Keyboardが認識されずディスクのトレイが空かない.USBキーボードを探しているうちに,なんとLionのインストーラが起動していた.OSの入っているハードディスクもDVDもUSBドライブもないはずだ.魔法だ!
ちゃんと確認していないが,どうやよTime Machineとして使っている2番目のディスクの隠しボリュームから起動したようだ.それにしても起動ディスクを空のディスクに入れ替えたのに起動するのには驚いた.
OSのインストール中に追加コンポーネントをダウンロードしていたのだが,起動してみると最新のMac OS X 10.7.3になっている.これまでの常識では,OSを入れ替えたらアップデートしなければならなかった.
iOSばかり注目されているが,Mac OS Xも心地よい進化を遂げている.
追記: diskutil listしても、起動ドライブ以外にはApple_Boot Recovery HDはないので、インターネット復元のだろうと思います。
登録:
投稿 (Atom)