logo
 2003年   2004年   2005年   2006年   2007年   2008年   2009年   2010年   2011年   2012年   2013年   2014年   2015年   2016年 
 9月 
 10月 
 11月 
 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月 7月 
 2月 8月 
 3月 9月 
 4月 10月 
 5月 11月 
 6月 12月 
 1月
 2月
 3月
 
 
 
アイコンの説明
code:Haemophilus influenzae
ここに書かれていることは無保証です。同じことを行って問題が発生しても、龍義は責任をとりません。
■ 4月1日WindowsLinux
PDF から SVG にできないかと考えて、ちょっと調べていたら Ghostscript で できるらしいのでやってみた。都合よく Cygwin に Ghostscript が入っている ので、これを使うことに。pdf は試しに IPA の文書を使ってみた。 https://www.ipa.go.jp/files/000050724.pdf gs コマンドで。 $ gs -dBATCH -dNOPAUSE -dSAFER -sDEVICE=svg -sOutputFile=test.svg 000050724.pdf GPL Ghostscript 9.15 (2014-09-22) Copyright (C) 2014 Artifex Software, Inc. All rights reserved. This software comes with NO WARRANTY: see the file PUBLIC for details. Unknown device: svg Unrecoverable error: syntaxerror in --nostringval-- Operand stack: defaultdevice Unrecoverable error: undefined in .uninstallpagedevice Operand stack: defaultdevice Unknown device: svg と返ってきた。対応デバイスの確認をしてみる。 $ gs --help GPL Ghostscript 9.15 (2014-09-22) Copyright (C) 2014 Artifex Software, Inc. All rights reserved. Usage: gs [switches] [file1.ps file2.ps ...] ~snip~ Input formats: PostScript PostScriptLevel1 PostScriptLevel2 PostScriptLevel3 PDF Default output device: x11alpha Available devices: alc1900 alc2000 alc4000 alc4100 alc8500 alc8600 alc9100 ap3250 appledmp atx23 atx24 atx38 bbox bit bitcmyk bitrgb bitrgbtags bj10e bj10v bj10vh bj200 bjc600 bjc800 bjc880j bjccmyk bjccolor bjcgray bjcmono bmp16 bmp16m bmp256 bmp32b bmpgray bmpmono bmpsep1 bmpsep8 ccr cdeskjet cdj1600 cdj500 cdj550 cdj670 cdj850 cdj880 cdj890 cdj970 cdjcolor cdjmono cdnj500 cfax chp2200 cif cljet5 cljet5c cljet5pr coslw2p coslwxl cp50 declj250 deskjet devicen dfaxhigh dfaxlow display dj505j djet500 djet500c dl2100 dnj650c epl2050 epl2050p epl2120 epl2500 epl2750 epl5800 epl5900 epl6100 epl6200 eplcolor eplmono eps2write eps9high eps9mid epson epsonc escp escpage faxg3 faxg32d faxg4 fmlbp fmpr fpng fs600 gdi hl1240 hl1250 hl7x0 hpdj1120c hpdj310 hpdj320 hpdj340 hpdj400 hpdj500 hpdj500c hpdj510 hpdj520 hpdj540 hpdj550c hpdj560c hpdj600 hpdj660c hpdj670c hpdj680c hpdj690c hpdj850c hpdj855c hpdj870c hpdj890c hpdjplus hpdjportable ibmpro ijs imagen inferno ink_cov inkcov itk24i itk38 iwhi iwlo iwlq jetp3852 jj100 jpeg jpegcmyk jpeggray la50 la70 la75 la75plus laserjet lbp310 lbp320 lbp8 lex2050 lex3200 lex5700 lex7000 lips2p lips3 lips4 lips4v lj250 lj3100sw lj4dith lj4dithp lj5gray lj5mono ljet2p ljet3 ljet3d ljet4 ljet4d ljet4pjl ljetplus ln03 lp1800 lp1900 lp2000 lp2200 lp2400 lp2500 lp2563 lp3000c lp7500 lp7700 lp7900 lp8000 lp8000c lp8100 lp8200c lp8300c lp8300f lp8400f lp8500c lp8600 lp8600f lp8700 lp8800c lp8900 lp9000b lp9000c lp9100 lp9200b lp9200c lp9300 lp9400 lp9500c lp9600 lp9600s lp9800c lps4500 lps6500 lq850 lxm3200 lxm5700m m8510 mag16 mag256 md1xMono md2k md50Eco md50Mono md5k mgr4 mgr8 mgrgray2 mgrgray4 mgrgray8 mgrmono miff24 mj500c mj6000c mj700v2c mj8000c ml600 necp6 npdl nullpage oce9050 oki182 oki4w okiibm oprp opvp paintjet pam pamcmyk32 pamcmyk4 pbm pbmraw pcl3 pcx16 pcx24b pcx256 pcx256 pcx2up pcxcmyk pcxgray pcxmono pdfwrite pdfwrite pdfwrite pgm pgmraw pgnm pgnmraw photoex picty180 pj pjetxl pjxl pjxl300 pkm pkmraw pksm pksmraw plan plan9bm planc plang plank planm png16 png16m png256 png48 pngalpha pnggray pngmono pnm pnmraw ppm ppmraw pr1000 pr1000_4 pr150 pr201 ps2write psdcmyk psdcmykog psdrgb pxlcolor pxlmono r4081 rinkj rpdl samsunggdi sgirgb sj48 spotcmyk st800 stcolor sunhmono t4693d2 t4693d4 t4693d8 tek4696 tiff12nc tiff24nc tiff32nc tiff48nc tiff64nc tiffcrle tiffg3 tiffg32d tiffg4 tiffgray tifflzw tiffpack tiffscaled tiffsep tiffsep1 txtwrite uniprint x11 x11alpha x11cmyk x11cmyk2 x11cmyk4 x11cmyk8 x11gray2 x11gray4 x11mono x11rg16x x11rg32x xcf xes xpswrite ~snip~ ですと。これは何かを追加すれば対応するのか、コンパイルからし直さないと いかないのか、判断するために、ソースコードを取ってきた。 [toyota@mygeeto tmp]$ wget -q ftp://ftp.gnu.org/gnu/ghostscript/gnu-ghostscript -9.14.0.tar.bz2 [toyota@mygeeto tmp]$ tar xfj gnu-ghostscript-9.14.0.tar.bz2 [toyota@mygeeto tmp]$ cd gnu-ghostscript-9.14.0/ grep なんかでドキュメントも含めて確認すると、以下の気になる文書があった。 web にもあったので、そのリンク。 [toyota@mygeeto gnu-ghostscript-9.14.0]$ less doc/Details8.htm ~snip~ There are two new devices in this release, both experimental. Behdad Esfahbod has contributed a cairo output device which uses the cairo graphics library to generate PDF, SVG, EPS, or PNG files, based on the requested filename extension. The svgwrite device directly outputs Scalable Vector Graphics, the W3C XML vector graphics format. Both support only vector art at this point; text and images will not be represented efficiently. ~snip~ Rename the svg device to svgwrite to avoid conflict with the SVG interpreter. The device is still selected as -sDEVICE=svg, just the name used internally has been changed. ~snip~ Copy the expat-2.0.1 tag source into the gs tree. This 3rd party library is needed for XPS and eventually SVG support. ~snip~ まずは、-sDEVICE=svg じゃなくて -sDEVICE=svgwrite にするべきこと。svg でも まだ使えると書いてあるけど。それより大事なことで、SVG を使うには expat が 必要なのと、cairo も必要なこと。 試しに cygwin の setup で expat をインストールしてみた。 cygwin setup 現象は変わらず。よく考えたら、xpswrite があるから関係ないか。pdfwrite とか png256 等もあるので、cairo も関係なさそう。仕方ない、コンパイルしてみるか。 実際には Linux 環境で使いたいので Linux 環境で configure オプションを確認 してみた。 [toyota@mygeeto gnu-ghostscript-9.14.0]$ ./configure --help ~snip~ --with-drivers=LIST Drivers to support, separated by commas. Either list the drivers or use aliases: ALL = all drivers FILES = all file format drivers PRINTERS = all printer drivers Printers: APPLE = all Apple printers BROTHER = all Brother printers CANON = all Canon printers EPSON = all Epson printers HP = all HP printers IBM = all IBM printers JAPAN = older japanese printers LEXMARK = all Lexmark printers OKI = all OKI printers PCLXL = all PCL XL/6 printers File formats: BMP = Output to bmp files FAX = Output to fax files JPEG = Output to JPEG files PBM = Output to PBM/PNM PCX = Output to PCX PNG = Output to PNG PS = Output to PostScript/PDF TIFF = Output to TIFF You can mix both variants, e.g. --with-drivers=HP,stcolor would build HP drivers and the Epson stcolor driver. Aliases must be uppercase (a 3rd party driver might have the same name). Default: ALL ~snip~ SVG が選べないみたいだけど、デフォルトは ALL みたいなので、configure を 実行してみた。 [toyota@mygeeto gnu-ghostscript-9.14.0]$ ./configurep ~snip~ checking for local jpeg library source... no checking for jpeg_set_defaults in -ljpeg... no configure: error: I wasn't able to find a copy of the jpeg library. This is required for compiling ghostscript. Please download a copy of the source, e.g. from http://www.ijg.org/, unpack it at the top level of the gs source tree, and rename the directory to 'jpeg'. libjpeg が必要らしく。先が長そうなので、明日に持ち越し。
■ 4月2日Linux
昨日の続き。libjpeg から入れる。 [toyota@mygeeto ~]$ cd /tmp [toyota@mygeeto tmp]$ wget -q http://www.ijg.org/files/jpegsrc.v9b.tar.gz [toyota@mygeeto tmp]$ tar xfz jpegsrc.v9b.tar.gz [toyota@mygeeto tmp]$ cd jpeg-9b/ [toyota@mygeeto jpeg-9b]$ ls -l ~snip~ [toyota@mygeeto jpeg-9b]$ ./configure --help ~snip~ [toyota@mygeeto jpeg-9b]$ ./configure ~snip~ [toyota@mygeeto jpeg-9b]$ make ~snip~ [toyota@mygeeto jpeg-9b]$ su Password: [root@mygeeto jpeg-9b]# make install ~snip~ jpeg のライブラリは問題なく入ったので、ghostscript のコンパイルに戻る。 [toyota@mygeeto ~]$ cd /tmp [toyota@mygeeto tmp]$ cd gnu-ghostscript-9.14.0/ [toyota@mygeeto gnu-ghostscript-9.14.0]$ ./configure ~snip~ checking for local png library source... no checking for png_create_write_struct in -lpng... no configure: disabling png output devices checking for local lcms2 library source... no checking for system lcms2 library... checking for cmsGetTransformOutputFormat i n -llcms2... no configure: WARNING: lcms2 not found, or too old checking for local lcms library source... configure: error: LittleCMS source no t found! やっぱり、昨日やらないで正解だった。他にも warning が出ていて。 configure: WARNING: disabling support for libpaper configure: WARNING: freetype library source not found...using native rasterizer 気になるので、解決していく。 [toyota@mygeeto gnu-ghostscript-9.14.0]$ cd /tmp [toyota@mygeeto tmp]$ wget -q http://ftp.us.debian.org/debian/pool/main/libp/li bpaper/libpaper_1.1.24%2bnmu4.tar.gz [toyota@mygeeto tmp]$ tar xfz libpaper_1.1.24+nmu4.tar.gz [toyota@mygeeto tmp]$ cd libpaper-1.1.24+nmu4/ [toyota@mygeeto libpaper-1.1.24+nmu4]$ ls -l ~snip~ [toyota@mygeeto libpaper-1.1.24+nmu4]$ ./configure --help ~snip~ [toyota@mygeeto libpaper-1.1.24+nmu4]$ ./configure ~snip~ [toyota@mygeeto libpaper-1.1.24+nmu4]$ make ~snip~ [toyota@mygeeto libpaper-1.1.24+nmu4]$ su Password: [root@mygeeto libpaper-1.1.24+nmu4]# make install ~snip~ libpaper は問題なく入った。次は freetype のインストール。この freetype って何するものなのか調べたら。 FreeType 2 is a software font engine that is designed to be small, efficient, highly customizable and portable while capable of producing high-quality output (glyph images). It can be used in graphics libraries, display servers, font conversion tools, text image generation tools, and many other products as well. なのだと。わかるような、わからないような。入れるだけ、入れてみる。 [toyota@mygeeto tmp]$ wget -q http://download.savannah.gnu.org/releases/freetyp e/freetype-2.6.3.tar.gz [toyota@mygeeto tmp]$ tar xvf freetype-2.6.3.tar.gz [toyota@mygeeto tmp]$ cd freetype-2.6.3/ [toyota@mygeeto freetype-2.6.3]$ ls -l ~snip~ [toyota@mygeeto freetype-2.6.3]$ ./configure --help ~snip~ [toyota@mygeeto freetype-2.6.3]$ ./configure ~snip~ checking for BZIP2... no checking for BZ2_bzDecompress in -lbz2... no checking for LIBPNG... no checking for libpng-config... no checking for HARFBUZZ... no configure: creating ./config.status config.status: creating unix-cc.mk config.status: creating unix-def.mk config.status: creating ftconfig.h config.status: executing libtool commands configure: Library configuration: external zlib: yes (pkg-config) bzip2: no libpng: no harfbuzz: no make: Nothing to be done for `unix'. この後、make をしてみたら問題なく通ったけど、libpng はこの先必要そうだし、 bzip2 も入れておいて損はないので、先に入れてから make することにした。 [toyota@mygeeto tmp]$ wget -q ftp://ftp.simplesystems.org/pub/libpng/png/src/li bpng16/libpng-1.6.21.tar.gz [toyota@mygeeto tmp]$ md5sum libpng-1.6.21.tar.gz aca36ec8e0a3b406a5912243bc243717 libpng-1.6.21.tar.gz [toyota@mygeeto tmp]$ tar xfz libpng-1.6.21.tar.gz [toyota@mygeeto tmp]$ cd libpng-1.6.21 [toyota@mygeeto libpng-1.6.21]$ ls -l ~snip~ [toyota@mygeeto libpng-1.6.21]$ ./configure --help ~snip~ [toyota@mygeeto libpng-1.6.21]$ ./configure ~snip~ [toyota@mygeeto libpng-1.6.21]$ make ~snip~ [toyota@mygeeto libpng-1.6.21]$ su Password: [root@mygeeto libpng-1.6.21]# make install ~snip~ libpng は問題なく。bzip2 はコマンド自体入っている。 [toyota@mygeeto ~]$ which bzip2 /usr/bin/bzip2 ライブラリだけ入れる感じでやってみる。 [toyota@mygeeto tmp]$ wget -q http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz [toyota@mygeeto tmp]$ md5sum bzip2-1.0.6.tar.gz 00b516f4704d4a7cb50a1d97e6e8e15b bzip2-1.0.6.tar.gz [toyota@mygeeto tmp]$ tar xfz bzip2-1.0.6.tar.gz ~snip~ [toyota@mygeeto tmp]$ cd bzip2-1.0.6/ [toyota@mygeeto bzip2-1.0.6]$ ls -la ~snip~ [toyota@mygeeto bzip2-1.0.6]$ make ~snip~ Makefile には install-lib なんて無い。手動で入れる。make install では、 こんな感じなので。 install: bzip2 bzip2recover if ( test ! -d $(PREFIX)/bin ) ; then mkdir -p $(PREFIX)/bin ; fi if ( test ! -d $(PREFIX)/lib ) ; then mkdir -p $(PREFIX)/lib ; fi if ( test ! -d $(PREFIX)/man ) ; then mkdir -p $(PREFIX)/man ; fi if ( test ! -d $(PREFIX)/man/man1 ) ; then mkdir -p $(PREFIX)/man/man1 ; fi if ( test ! -d $(PREFIX)/include ) ; then mkdir -p $(PREFIX)/include ; fi cp -f bzip2 $(PREFIX)/bin/bzip2 cp -f bzip2 $(PREFIX)/bin/bunzip2 cp -f bzip2 $(PREFIX)/bin/bzcat cp -f bzip2recover $(PREFIX)/bin/bzip2recover chmod a+x $(PREFIX)/bin/bzip2 chmod a+x $(PREFIX)/bin/bunzip2 chmod a+x $(PREFIX)/bin/bzcat chmod a+x $(PREFIX)/bin/bzip2recover cp -f bzip2.1 $(PREFIX)/man/man1 chmod a+r $(PREFIX)/man/man1/bzip2.1 cp -f bzlib.h $(PREFIX)/include chmod a+r $(PREFIX)/include/bzlib.h cp -f libbz2.a $(PREFIX)/lib chmod a+r $(PREFIX)/lib/libbz2.a cp -f bzgrep $(PREFIX)/bin/bzgrep ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzegrep ln -s -f $(PREFIX)/bin/bzgrep $(PREFIX)/bin/bzfgrep chmod a+x $(PREFIX)/bin/bzgrep cp -f bzmore $(PREFIX)/bin/bzmore ln -s -f $(PREFIX)/bin/bzmore $(PREFIX)/bin/bzless chmod a+x $(PREFIX)/bin/bzmore cp -f bzdiff $(PREFIX)/bin/bzdiff ln -s -f $(PREFIX)/bin/bzdiff $(PREFIX)/bin/bzcmp chmod a+x $(PREFIX)/bin/bzdiff cp -f bzgrep.1 bzmore.1 bzdiff.1 $(PREFIX)/man/man1 chmod a+r $(PREFIX)/man/man1/bzgrep.1 chmod a+r $(PREFIX)/man/man1/bzmore.1 chmod a+r $(PREFIX)/man/man1/bzdiff.1 echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzegrep.1 echo ".so man1/bzgrep.1" > $(PREFIX)/man/man1/bzfgrep.1 echo ".so man1/bzmore.1" > $(PREFIX)/man/man1/bzless.1 echo ".so man1/bzdiff.1" > $(PREFIX)/man/man1/bzcmp.1 ライブラリと include ファイルだけ入れる。 [toyota@mygeeto bzip2-1.0.6]$ su Password: [root@mygeeto bzip2-1.0.6]# cp -f bzlib.h /usr/local/include [root@mygeeto bzip2-1.0.6]# chmod a+r /usr/local/include/bzlib.h [root@mygeeto bzip2-1.0.6]# cp -f libbz2.a /usr/local/lib [root@mygeeto bzip2-1.0.6]# chmod a+r /usr/local/lib/libbz2.a これで大丈夫かな。 もう1つ、harfbuzz が何かと調べたら、 HarfBuzz is an OpenType text shaping engine. ということで。SVG ファイル生成に関係ある気がするので、入れるだけ入れる ことにした。 [toyota@mygeeto tmp]$ wget -q https://www.freedesktop.org/software/harfbuzz/rel ease/harfbuzz-1.2.5.tar.bz2 [toyota@mygeeto tmp]$ sha256sum harfbuzz-1.2.5.tar.bz2 cfca0b6ba42c36a1f7b03fffb926dc4d137be2aa2a2ad8930259072e43a347d5 harfbuzz-1.2. 5.tar.bz2 [toyota@mygeeto tmp]$ tar xfj harfbuzz-1.2.5.tar.bz2 [toyota@mygeeto tmp]$ cd harfbuzz-1.2.5/ [toyota@mygeeto harfbuzz-1.2.5]$ ls -l ~snip~ [toyota@mygeeto harfbuzz-1.2.5]$ ./configure --help ~snip~ [toyota@mygeeto harfbuzz-1.2.5]$ ./configure ~snip~ [toyota@mygeeto harfbuzz-1.2.5]$ make ~snip~ [toyota@mygeeto harfbuzz-1.2.5]$ su Password: [root@mygeeto harfbuzz-1.2.5]# make install ~snip~ 何をやっていたのか忘れた。freetype に戻って。 [toyota@mygeeto /]$ cd /tmp/freetype-2.6.3/ [toyota@mygeeto freetype-2.6.3]$ ./configure ~snip~ checking for HARFBUZZ... no configure: creating ./config.status config.status: creating unix-cc.mk config.status: creating unix-def.mk config.status: creating ftconfig.h config.status: executing libtool commands configure: Library configuration: external zlib: yes (pkg-config) bzip2: yes (autoconf test) libpng: yes (libpng-config) harfbuzz: no make: Nothing to be done for `unix'. harfbuzz を認識してくれないな。少し調べてみたら、両方入れるには FreeType → HarfBuzz → FreeType という順番でいれると web ページがあった。その通りやってみることにする。 [toyota@mygeeto freetype-2.6.3]$ make ~snip~ /usr/bin/ld: /usr/local/lib/libbz2.a(bzlib.o): relocation R_X86_64_32S against `BZ2_crc32Table' can not be used when making a shared object; recompile with -f PIC /usr/local/lib/libbz2.a: could not read symbols: Bad value collect2: error: ld returned 1 exit status make: *** [/tmp/freetype-2.6.3/objs/libfreetype.la] Error 1 libbz2 を -fPIC でコンパイルしろとか。ここは素直に従うことに。 [toyota@mygeeto freetype-2.6.3]$ cd /tmp/bzip2-1.0.6/ [toyota@mygeeto bzip2-1.0.6]$ cp -p Makefile Makefile.bak [toyota@mygeeto bzip2-1.0.6]$ vi Makefile [toyota@mygeeto bzip2-1.0.6]$ diff Makefile.bak Makefile 24c24 < CFLAGS=-Wall -Winline -O2 -g $(BIGFILES) --- > CFLAGS=-Wall -Winline -O2 -g $(BIGFILES) -fPIC [toyota@mygeeto bzip2-1.0.6]$ make clean [toyota@mygeeto bzip2-1.0.6]$ make ~snip~ [toyota@mygeeto bzip2-1.0.6]$ diff bzlib.h /usr/local/include/bzlib.h [toyota@mygeeto bzip2-1.0.6]$ cmp libbz2.a /usr/local/lib/libbz2.a libbz2.a /usr/local/lib/libbz2.a differ: char 30, line 2 [toyota@mygeeto bzip2-1.0.6]$ su Password: [root@mygeeto bzip2-1.0.6]# cp -f libbz2.a /usr/local/lib cp: overwrite '/usr/local/lib/libbz2.a'? yes [root@mygeeto bzip2-1.0.6]# chmod a+r /usr/local/lib/libbz2.a freetype に戻って、make し直し。 [toyota@mygeeto freetype-2.6.3]$ make clean ~snip~ [toyota@mygeeto freetype-2.6.3]$ make ~snip~ [toyota@mygeeto freetype-2.6.3]$ su Password: [root@mygeeto freetype-2.6.3]# make install ~snip~ harfbuzz に戻って。 [toyota@mygeeto freetype-2.6.3]$ cd /tmp/harfbuzz-1.2.5/ [toyota@mygeeto harfbuzz-1.2.5]$ ./configure ~snip~ checking for FREETYPE... no ~snip~ Font callbacks (the more the better): FreeType: false freetype を認識してくれないな。長くなりそうなので、明日にする。
■ 4月3日Linux
harfbuzz の configure で freetype を認識させる。harfbuzz の configure で 何をやっているのか確認する。ちょっと見辛かったので、config.log を見ると。 configure:18817: checking for FREETYPE configure:18825: $PKG_CONFIG --exists --print-errors "$FREETYPE_DEPS" Package freetype2 was not found in the pkg-config search path. Perhaps you should add the directory containing `freetype2.pc' to the PKG_CONFIG_PATH environment variable No package 'freetype2' found configure:18828: $? = 1 configure:18843: $PKG_CONFIG --exists --print-errors "$FREETYPE_DEPS" Package freetype2 was not found in the pkg-config search path. Perhaps you should add the directory containing `freetype2.pc' to the PKG_CONFIG_PATH environment variable No package 'freetype2' found configure:18846: $? = 1 No package 'freetype2' found configure:18874: result: no configure:18888: error: FreeType support requested but libfreetype2 not found となっていた。pkg-config で freetype が見えていないみたい。pc ファイル 自体はあるのか見てみる。 [toyota@mygeeto tmp]$ find /usr -name harfbuzz.pc /usr/local/lib/pkgconfig/harfbuzz.pc [toyota@mygeeto tmp]$ ls /usr/local/lib/pkgconfig/ freetype2.pc harfbuzz.pc libpng.pc libpng16.pc [toyota@mygeeto tmp]$ pkg-config --modversion freetype2 Package freetype2 was not found in the pkg-config search path. Perhaps you should add the directory containing `freetype2.pc' to the PKG_CONFIG_PATH environment variable No package 'freetype2' found pkg-config コマンドが /usr/local/lib/pkgconfig 以下を読んでないみたい。 環境変数を変えて、もう一度やってみる。 [toyota@mygeeto harfbuzz-1.2.5]$ echo $PKG_CONFIG_PATH [toyota@mygeeto harfbuzz-1.2.5]$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig [toyota@mygeeto harfbuzz-1.2.5]$ pkg-config --modversion freetype2 18.3.12 [toyota@mygeeto harfbuzz-1.2.5]$ ./configure --with-freetype=yes ~snip~ Font callbacks (the more the better): FreeType: true 大丈夫そうなので、make してインストールまで。 [toyota@mygeeto harfbuzz-1.2.5]$ make ~snip~ [toyota@mygeeto harfbuzz-1.2.5]$ su Password: [root@mygeeto harfbuzz-1.2.5]# make install これで、また freetype に戻って、make する。 [toyota@mygeeto harfbuzz-1.2.5]$ cd /tmp/freetype-2.6.3/ [toyota@mygeeto freetype-2.6.3]$ make distclean [toyota@mygeeto freetype-2.6.3]$ ./configure ~snip~ Library configuration: external zlib: yes (pkg-config) bzip2: yes (autoconf test) libpng: yes (pkg-config) harfbuzz: yes (pkg-config) make: Nothing to be done for `unix'. [toyota@mygeeto freetype-2.6.3]$ make ~snip~ 警告が少し出た感じがしたけど、大丈夫かな。インストールして、freetype と harfbuzz のインストール完了。 [toyota@mygeeto freetype-2.6.3]$ su Password: [root@mygeeto freetype-2.6.3]# make install ~snip~ 次は lcms2 のインストール。lcms2 は Little CMS 2 のことで、何をするもの なのか調べてみると。 Little CMS intends to be an OPEN SOURCE small-footprint color management engine, with special focus on accuracy and performance. とのこと。ダウンロードして make する。 [toyota@mygeeto tmp]$ wget -q https://github.com/mm2/Little-CMS/archive/lcms2-2 .7.tar.gz [toyota@mygeeto tmp]$ tar xfz lcms2-2.7.tar.gz [toyota@mygeeto tmp]$ cd Little-CMS-lcms2-2.7/ [toyota@mygeeto Little-CMS-lcms2-2.7]$ ls ~snip~ [toyota@mygeeto Little-CMS-lcms2-2.7]$ ./configure --help ~snip~ [toyota@mygeeto Little-CMS-lcms2-2.7]$ ./configure ~snip~ [toyota@mygeeto Little-CMS-lcms2-2.7]$ make ~snip~ [toyota@mygeeto Little-CMS-lcms2-2.7]$ su Password: [root@mygeeto Little-CMS-lcms2-2.7]# make install ~snip~ 怖いぐらいにあっさり入った。ほとんど忘れかけていた Ghostscript に戻って configure の続き。 [toyota@mygeeto Little-CMS-lcms2-2.7]$ cd /tmp/gnu-ghostscript-9.14.0/ [toyota@mygeeto gnu-ghostscript-9.14.0]$ ./configure ~snip~ 問題なく通った。make してみるが。 [toyota@mygeeto gnu-ghostscript-9.14.0]$ make gcc -O2 -Wall -Wstrict-prototypes -Wundef -Wmissing-declarations -Wmissing-prot otypes -Wwrite-strings -Wno-strict-aliasing -Wdeclaration-after-statement -fno- builtin -fno-common -DHAVE_STDINT_H=1 -DHAVE_DIRENT_H=1 -DHAVE_SYS_DIR_H=1 -DHA VE_SYS_TIME_H=1 -DHAVE_SYS_TIMES_H=1 -DHAVE_INTTYPES_H=1 -DGX_COLOR_INDEX_TYPE= "unsigned long int" -DUSE_LIBPAPER -I./base -o ./obj/aux/genconf ./base/genc onf.c -ldl -lm -lpaper -rdynamic -ldl -L/usr/local/lib -lfreetype -lz gcc -O2 -Wall -Wstrict-prototypes -Wundef -Wmissing-declarations -Wmissing-prot otypes -Wwrite-strings -Wno-strict-aliasing -Wdeclaration-after-statement -fno- builtin -fno-common -DHAVE_STDINT_H=1 -DHAVE_DIRENT_H=1 -DHAVE_SYS_DIR_H=1 -DHA VE_SYS_TIME_H=1 -DHAVE_SYS_TIMES_H=1 -DHAVE_INTTYPES_H=1 -DGX_COLOR_INDEX_TYPE= "unsigned long int" -DUSE_LIBPAPER -I./base -o ./obj/aux/echogs ./base/echog s.c -ldl -lm -lpaper -rdynamic -ldl -L/usr/local/lib -lfreetype -lz ./obj/aux/echogs -w ./obj/devs.tr - -include ./obj/unix_ ./obj/aux/echogs: error while loading shared libraries: libpaper.so.1: cannot o pen shared object file: No such file or directory make: *** [obj/devs.tr] Error 127 echogs コマンドの実行で libpaper.so.1 が無いとエラーで止まってしまった。 状況を確認してみた。 [toyota@mygeeto gnu-ghostscript-9.14.0]$ ls /usr/local/lib/libpaper* /usr/local/lib/libpaper.a /usr/local/lib/libpaper.so.1 /usr/local/lib/libpaper.la /usr/local/lib/libpaper.so.1.1.2 /usr/local/lib/libpaper.so [toyota@mygeeto gnu-ghostscript-9.14.0]$ ldd ./obj/aux/echogs linux-vdso.so.1 => (0x00007fff9d7da000) libdl.so.2 => /lib64/libdl.so.2 (0x00007fc37374d000) libm.so.6 => /lib64/libm.so.6 (0x00007fc37344b000) libpaper.so.1 => not found libfreetype.so.6 => /lib64/libfreetype.so.6 (0x00007fc3731a5000) libz.so.1 => /lib64/libz.so.1 (0x00007fc372f8f000) libc.so.6 => /lib64/libc.so.6 (0x00007fc372bcd000) /lib64/ld-linux-x86-64.so.2 (0x00007fc37395c000) ということみたい。/usr/local/lib を見に行くようにして、ldconfig を実行 する。 [toyota@mygeeto gnu-ghostscript-9.14.0]$ su Password: [root@mygeeto gnu-ghostscript-9.14.0]# vi /etc/ld.so.conf.d/local.conf [root@mygeeto gnu-ghostscript-9.14.0]# cat /etc/ld.so.conf.d/local.conf /usr/local/lib [root@mygeeto gnu-ghostscript-9.14.0]# ldconfig [root@mygeeto gnu-ghostscript-9.14.0]# exit exit [toyota@mygeeto gnu-ghostscript-9.14.0]$ ldd ./obj/aux/echogs linux-vdso.so.1 => (0x00007fffed3fe000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f13e36b4000) libm.so.6 => /lib64/libm.so.6 (0x00007f13e33b2000) libpaper.so.1 => /usr/local/lib/libpaper.so.1 (0x00007f13e31ad000) libfreetype.so.6 => /usr/local/lib/libfreetype.so.6 (0x00007f13e2f10000) libz.so.1 => /lib64/libz.so.1 (0x00007f13e2cfa000) libc.so.6 => /lib64/libc.so.6 (0x00007f13e2938000) /lib64/ld-linux-x86-64.so.2 (0x00007f13e38c3000) libharfbuzz.so.0 => /usr/local/lib/libharfbuzz.so.0 (0x00007f13e26bc000) libbz2.so.1 => /lib64/libbz2.so.1 (0x00007f13e24ac000) libpng16.so.16 => /usr/local/lib/libpng16.so.16 (0x00007f13e227a000) これで動くようになっただろうから、make の再実行。今度は問題なく最後まで 通った。 何で Ghostscript が必要になったのか思い出して、gs コマンドを実行する。 [toyota@mygeeto gnu-ghostscript-9.14.0]$ ./bin/gs --help GNU Ghostscript 9.14.0 (2014-07-02) Copyright (C) 2014 Artifex Software, Inc. All rights reserved. ~snip~ Input formats: PostScript PostScriptLevel1 PostScriptLevel2 PostScriptLevel3 PDF Default output device: bbox Available devices: alc1900 alc2000 alc4000 alc4100 alc8500 alc8600 alc9100 ap3250 appledmp atx23 atx24 atx38 bbox bit bitcmyk bitrgb bitrgbtags bj10e bj10v bj10vh bj200 bjc600 bjc800 bjc880j bjccmyk bjccolor bjcgray bjcmono bmp16 bmp16m bmp256 bmp32b bmpgray bmpmono bmpsep1 bmpsep8 ccr cdeskjet cdj1600 cdj500 cdj550 cdj670 cdj850 cdj880 cdj890 cdj970 cdjcolor cdjmono cdnj500 chp2200 cif cljet5 cljet5c cljet5pr coslw2p coslwxl cp50 declj250 deskjet devicen dj505j djet500 djet500c dl2100 dnj650c epl2050 epl2050p epl2120 epl2500 epl2750 epl5800 epl5900 epl6100 epl6200 eplcolor eplmono eps2write eps9high eps9mid epson epsonc epswrite escp escpage fmlbp fmpr fpng fs600 gdi hl1240 hl1250 hl7x0 hpdj1120c hpdj310 hpdj320 hpdj340 hpdj400 hpdj500 hpdj500c hpdj510 hpdj520 hpdj540 hpdj550c hpdj560c hpdj600 hpdj660c hpdj670c hpdj680c hpdj690c hpdj850c hpdj855c hpdj870c hpdj890c hpdjplus hpdjportable ibmpro ijs imagen inferno ink_cov inkcov iwhi iwlo iwlq jetp3852 jj100 jpeg jpegcmyk jpeggray la50 la70 la75 la75plus laserjet lbp310 lbp320 lbp8 lex2050 lex3200 lex5700 lex7000 lips2p lips3 lips4 lips4v lj250 lj3100sw lj4dith lj4dithp lj5gray lj5mono ljet2p ljet3 ljet3d ljet4 ljet4d ljet4pjl ljetplus ln03 lp1800 lp1900 lp2000 lp2200 lp2400 lp2500 lp2563 lp3000c lp7500 lp7700 lp7900 lp8000 lp8000c lp8100 lp8200c lp8300c lp8300f lp8400f lp8500c lp8600 lp8600f lp8700 lp8800c lp8900 lp9000b lp9000c lp9100 lp9200b lp9200c lp9300 lp9400 lp9500c lp9600 lp9600s lp9800c lps4500 lps6500 lq850 lxm3200 lxm5700m m8510 mag16 mag256 md1xMono md2k md50Eco md50Mono md5k mgr4 mgr8 mgrgray2 mgrgray4 mgrgray8 mgrmono miff24 mj500c mj6000c mj700v2c mj8000c ml600 necp6 npdl nullpage oce9050 oki182 oki4w okiibm oprp opvp paintjet pam pamcmyk32 pamcmyk4 pbm pbmraw pcl3 pcx16 pcx24b pcx256 pcx256 pcx2up pcxcmyk pcxgray pcxmono pdfwrite pdfwrite pdfwrite pgm pgmraw pgnm pgnmraw photoex picty180 pj pjetxl pjxl pjxl300 pkm pkmraw pksm pksmraw plan plan9bm planc plang plank planm png16 png16m png256 png48 pngalpha pnggray pngmono pnm pnmraw ppm ppmraw pr1000 pr1000_4 pr150 pr201 ps2write psdcmyk psdcmykog psdrgb pxlcolor pxlmono r4081 rinkj rpdl samsunggdi sgirgb sj48 spotcmyk st800 stcolor sunhmono t4693d2 t4693d4 t4693d8 tek4696 txtwrite uniprint xcf xes xpswrite ~snip~ やっぱり SVG が入ってない。続きは明日。
■ 4月4日Linux
Ghostscript での SVG サポートの続き。Ghostscript のソースを眺めたけれど、 SVG 辺りのソースは入っていない感じ。git で確認してみる。 9.07 から 9.08 に変わるときに無くなっている。このとき、gdev から始まる デバイス関係のソースコードが base ディレクトリから devices ディレクトリに ごっそり移動になって、一応 9.08 の devices ディレクトリも確認してみたが、 やっぱり入っていない。と思ったが、devices/vector にあった。無くなったのは 9.08 から 9.14 に変わったときなので、9.08 のものをとってきて、コンパイル してみる。 [toyota@mygeeto ~]$ cd /tmp/gnu-ghostscript-9.14.0/devices/vector [toyota@mygeeto vector]$ wget -q -O gdevsvg.c "http://git.savannah.gnu.org/cgi t/ghostscript.git/plain/devices/vector/gdevsvg.c?id=release-9_08_0" [toyota@mygeeto vector]$ cd .. [toyota@mygeeto devices]$ cp devs.mak devs.mak.bak [toyota@mygeeto devices]$ vi devs.mak [toyota@mygeeto devices]$ diff devs.mak.bak devs.mak 1196a1197,1206 > # Scalable Vector Graphics (SVG) output device > > svgwrite_=$(DEVOBJ)gdevsvg.$(OBJ) > $(DD)svgwrite.dev : $(DEVS_MAK) $(svgwrite_) $(GDEV) $(GLD)vector.dev > $(SETDEV2) $(DD)svgwrite $(svgwrite_) > $(ADDMOD) $(DD)svgwrite -include $(GLD)vector > > $(DEVOBJ)gdevsvg.$(OBJ) : $(DEVVECSRC)gdevsvg.c $(gx_h) $(gdevvec_h) > $(DEVCC) $(DEVO_)gdevsvg.$(OBJ) $(C_) $(DEVVECSRC)gdevsvg.c > [toyota@mygeeto devices]$ cd .. [toyota@mygeeto gnu-ghostscript-9.14.0]$ cp configure configure.bak [toyota@mygeeto gnu-ghostscript-9.14.0]$ vi configure [toyota@mygeeto gnu-ghostscript-9.14.0]$ diff configure.bak configure 670a671 > SVG_DEVS 16680a16682 > SVG_DEVS0="" 16711a16714 > SVGDEV='svgwrite' 16742c16745 < F_DEVS0="$F_DEVS0 $BMP_DEVS $FAX_DEVS $JPEG_DEVS $TIFFDEVS $P CX_DEVS $PBM_DEVS $PS_DEVS $MISC_FDEVS $XPSDEV" --- > F_DEVS0="$F_DEVS0 $BMP_DEVS $FAX_DEVS $JPEG_DEVS $TIFFDEVS $P CX_DEVS $PBM_DEVS $PS_DEVS $MISC_FDEVS $XPSDEV $SVGDEV" 16835a16839,16843 > SVG) > # SVG writing > SVG_DEVS0="$SVGDEV" > ;; > 16882a16891,16895 > NTS_EXCLUDES="$(echo \"$SVG_DEVS0{@:0}\" | grep -o $ntsdev) $NTS_EXCLUDES " > SVG_DEVS0=`echo $SVG_DEVS0 | sed "s/\b$ntsdev\b//g"` > done > > for ntsdev in $NTS_DEVS ; do 16929a16943,16946 > fi > > if test -n "$SVG_DEVS0"; then > SVG_DEVS=`(for i in $SVG_DEVS0; do d='$(DD)'${i}.dev; if ( grep '^'$d $no ncontribmakefiles 2>&1 >/dev/null) || ( ! test -z "$CONTRIBINCLUDE" ); then ec ho $d; fi; done) | sort | uniq | tr '\012\015' ' '` 改行が入って汚くなったけど、xpswrite と同じように svgwrite を追加した感じ。 これで make してみる。 [toyota@mygeeto gnu-ghostscript-9.14.0]$ make distclean ~snip~ [toyota@mygeeto gnu-ghostscript-9.14.0]$ ./configure ~snip~ [toyota@mygeeto gnu-ghostscript-9.14.0]$ make ~snip~ gcc -DHAVE_MKSTEMP -DHAVE_FILE64 -DHAVE_FSEEKO -DHAVE_MKSTEMP64 -DHAVE_SETLO CALE -DHAVE_SSE2 -DHAVE_BSWAP32 -DHAVE_BYTESWAP_H -DHAVE_STRERROR -O2 -Wall -W strict-prototypes -Wundef -Wmissing-declarations -Wmissing-prototypes -Wwrite-s trings -Wno-strict-aliasing -Wdeclaration-after-statement -fno-builtin -fno-com mon -DHAVE_STDINT_H=1 -DHAVE_DIRENT_H=1 -DHAVE_SYS_DIR_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_TIMES_H=1 -DHAVE_INTTYPES_H=1 -DGX_COLOR_INDEX_TYPE="unsigned long i nt" -DUSE_LIBPAPER -I./obj -I./base -I./obj -I./devices -I./devices/vector -o ./obj/gdevsvg.o -c ./devices/vector/gdevsvg.c ./devices/vector/gdevsvg.c:141:42: error: unknown type name 'floatp' svg_setlinewidth(gx_device_vector *vdev, floatp width); ~snip~ floatp が宣言されていないとかで、エラーがずらっと。周りのファイルを見て みると、そのまま double にしているので、double に置き換える。 [toyota@mygeeto gnu-ghostscript-9.14.0]$ mv devices/vector/gdevsvg.c devices/ve ctor/gdevsvg.c.bak [toyota@mygeeto gnu-ghostscript-9.14.0]$ sed 's/floatp/double/g' devices/vector /gdevsvg.c.bak > devices/vector/gdevsvg.c [toyota@mygeeto gnu-ghostscript-9.14.0]$ make ~snip~ 問題なく終了した。gs コマンドを実行してみる。 [toyota@mygeeto gnu-ghostscript-9.14.0]$ ./bin/gs --help ~snip~ ps2write psdcmyk psdcmykog psdrgb pxlcolor pxlmono r4081 rinkj rpdl samsunggdi sgirgb sj48 spotcmyk st800 stcolor sunhmono svg t4693d2 t4693d4 t4693d8 tek4696 txtwrite uniprint xcf xes xpswrite ~snip~ svg が出てきた。xps は xpswrite と出ていて美しくないので、ちょっと編集 した。 [toyota@mygeeto gnu-ghostscript-9.14.0]$ vi devices/vector/gdevsvg.c ここで const gx_device_svg gs_svgwrite_device = { svg_device_body("svg", 24), svg_device_procs }; となっている "svg" を "svgwrite" にして、make の再実行。これで。 [toyota@mygeeto gnu-ghostscript-9.14.0]$ ./bin/gs --help ~snip~ samsunggdi sgirgb sj48 spotcmyk st800 stcolor sunhmono svgwrite t4693d2 t4693d4 t4693d8 tek4696 txtwrite uniprint xcf xes xpswrite ~snip~ svgwrite になった。長かった。明日は、実際に pdf から svg に変換できるか やってみる。
■ 4月5日WindowsLinux
昨日作った Ghostscript を使って pdf から svg に変換してみる。ちゃんと変換 できて、実用的なものができるかどうか。 [toyota@mygeeto tmp]$ ./gnu-ghostscript-9.14.0/bin/gs -dBATCH -dNOPAUSE -dSAFER -sDEVICE=svgwrite -sOutputFile=000050724.svg 000050724.pdf GNU Ghostscript 9.14 (2014-07-02) Copyright (C) 2014 Artifex Software, Inc. All rights reserved. This software comes with NO WARRANTY: see the file PUBLIC for details. **** Warning: An error occurred while reading an XREF table. **** The file has been damaged. This may have been caused **** by a problem while converting or transfering the file. **** Ghostscript will attempt to recover the data. Processing pages 1 through 2. Page 1 | ./devices/vector/gdevsvg.c:335: svg_put_params(): undefined Page 2 | ./devices/vector/gdevsvg.c:335: svg_put_params(): undefined Can't find (or can't open) font file %rom%Resource/Font/ArialMT. Can't find (or can't open) font file ArialMT. Can't find (or can't open) font file %rom%Resource/Font/ArialMT. Can't find (or can't open) font file ArialMT. Querying operating system for font files... Didn't find this font on the system! Substituting font Helvetica for ArialMT. Loading NimbusSanL-Regu font from %rom%Resource/Font/NimbusSanL-Regu... 3797472 2261138 3997940 2410007 3 done. | ./devices/vector/gdevsvg.c:335: svg_put_params(): undefined **** This file had errors that were repaired or ignored. **** The file was produced by: **** >>>> Microsoftョ Word 2013 <<<< **** Please notify the author of the software that produced this **** file that it does not conform to Adobe's published PDF **** specification. フォントがないとか、svg_put_params(): undefined とかちょいちょい嫌なエラーが 出ているけど、ファイルはできたみたい。 [toyota@mygeeto tmp]$ ls -l 000050724.* -rw-rw-r-- 1 toyota toyota 265975 Apr 1 18:59 000050724.pdf -rw-rw-r-- 1 toyota toyota 14213977 Apr 5 22:48 000050724.svg とんでもなくファイルサイズが増えている。できた SVG ファイルをエディタで 見てみたら、当たり前だけどテキストで。このファイルをブラウザで表示して みた。
Internet Explorer 11.0.9600.18231
IE 11.0.9600.18231
Google Chrome 49.0.2623.110
Chrome 49.0.2623.110
Opera 36.0
Opera 36.0
Mozilla Firefox 45.0.1
Firefox 45.0.1
元 PDF + Adobe Reader(65%縮小表示)
Adobe Reader
いくつかわかったことがあって。 ・1ページ目しか入っていない ・サイズが width=595 height=841pt の固定になった ・どのブラウザでも大きさ、レイアウトは一致 ・IE の文字の処理がへたくそ(アンチエイリアスしてない) ・Chrome / Opera の画像にはノイズが乗る という感じで、処理エンジンによってだいぶ見た目が異なることがわかった。 SVG ファイルを眺めていてわかったけど、font のデータがなかったせいなのか、 文字も全て図形データで扱っている。画像なんかもテキストで表現しているので このファイルサイズになってしまったのか。 半角英数字のフォントが違うように見えるのは、フォントが無かったからなの だろうけど、Ghostscript に入っているフォントを確認してみた。 [toyota@mygeeto tmp]$ cd gnu-ghostscript-9.14.0/Resource/Font/ [toyota@mygeeto Font]$ ls -l total 1540 -rw-r--r-- 1 toyota toyota 45469 Jul 2 2014 CenturySchL-Bold -rw-r--r-- 1 toyota toyota 44923 Jul 2 2014 CenturySchL-BoldItal -rw-r--r-- 1 toyota toyota 45573 Jul 2 2014 CenturySchL-Ital -rw-r--r-- 1 toyota toyota 45404 Jul 2 2014 CenturySchL-Roma -rw-r--r-- 1 toyota toyota 87395 Jul 2 2014 Dingbats -rw-r--r-- 1 toyota toyota 49013 Jul 2 2014 NimbusMonL-Bold -rw-r--r-- 1 toyota toyota 47518 Jul 2 2014 NimbusMonL-BoldObli -rw-r--r-- 1 toyota toyota 44973 Jul 2 2014 NimbusMonL-Regu -rw-r--r-- 1 toyota toyota 43953 Jul 2 2014 NimbusMonL-ReguObli -rw-r--r-- 1 toyota toyota 41938 Jul 2 2014 NimbusRomNo9L-Medi -rw-r--r-- 1 toyota toyota 43088 Jul 2 2014 NimbusRomNo9L-MediItal -rw-r--r-- 1 toyota toyota 42910 Jul 2 2014 NimbusRomNo9L-Regu -rw-r--r-- 1 toyota toyota 44278 Jul 2 2014 NimbusRomNo9L-ReguItal -rw-r--r-- 1 toyota toyota 32580 Jul 2 2014 NimbusSanL-Bold -rw-r--r-- 1 toyota toyota 31940 Jul 2 2014 NimbusSanL-BoldCond -rw-r--r-- 1 toyota toyota 34439 Jul 2 2014 NimbusSanL-BoldCondItal -rw-r--r-- 1 toyota toyota 34791 Jul 2 2014 NimbusSanL-BoldItal -rw-r--r-- 1 toyota toyota 31529 Jul 2 2014 NimbusSanL-Regu -rw-r--r-- 1 toyota toyota 31110 Jul 2 2014 NimbusSanL-ReguCond -rw-r--r-- 1 toyota toyota 33501 Jul 2 2014 NimbusSanL-ReguCondItal -rw-r--r-- 1 toyota toyota 34256 Jul 2 2014 NimbusSanL-ReguItal -rw-r--r-- 1 toyota toyota 61146 Jul 2 2014 StandardSymL -rw-r--r-- 1 toyota toyota 42939 Jul 2 2014 URWBookmanL-DemiBold -rw-r--r-- 1 toyota toyota 43394 Jul 2 2014 URWBookmanL-DemiBoldItal -rw-r--r-- 1 toyota toyota 42665 Jul 2 2014 URWBookmanL-Ligh -rw-r--r-- 1 toyota toyota 43341 Jul 2 2014 URWBookmanL-LighItal -rw-r--r-- 1 toyota toyota 50399 Jul 2 2014 URWChanceryL-MediItal -rw-r--r-- 1 toyota toyota 31290 Jul 2 2014 URWGothicL-Book -rw-r--r-- 1 toyota toyota 32141 Jul 2 2014 URWGothicL-BookObli -rw-r--r-- 1 toyota toyota 32831 Jul 2 2014 URWGothicL-Demi -rw-r--r-- 1 toyota toyota 32763 Jul 2 2014 URWGothicL-DemiObli -rw-r--r-- 1 toyota toyota 52389 Jul 2 2014 URWPalladioL-Bold -rw-r--r-- 1 toyota toyota 53365 Jul 2 2014 URWPalladioL-BoldItal -rw-r--r-- 1 toyota toyota 51901 Jul 2 2014 URWPalladioL-Ital -rw-r--r-- 1 toyota toyota 52222 Jul 2 2014 URWPalladioL-Roma という感じ。PDF から SVG に変換して実用するには、ちょっと問題が多いかな。
■ 4月6日WindowsLinux
昨日の続き。フォントを用意してあげたとき、作られる SVG に影響があるのか やってみた。まず、Microsoft Word で 半角英数字だけの文書を作成して PDF で 保存した。Reader で開いてプロパティを確認。 作成した PDF ついでに、昨日の変換した IPA の文書はこんな感じ。さすがに日本語のフォントは IPA フォントを使っている。MS 明朝の文字も見えるけど。 IPA の PDF で、この作った PDF ファイルを SVG に変換。arial.ttf を引っ張ってきて、 /tmp に置いてから。 [toyota@mygeeto tmp]$ export GS_FONTPATH=/tmp [toyota@mygeeto tmp]$ ls /tmp/*.ttf /tmp/arial.ttf [toyota@mygeeto tmp]$ ./gnu-ghostscript-9.14.0/bin/gs -dBATCH -dNOPAUSE -dSAFER -sDEVICE=svgwrite -sOutputFile=2016040600.svg 2016040600.pdf GNU Ghostscript 9.14 (2014-07-02) Copyright (C) 2014 Artifex Software, Inc. All rights reserved. This software comes with NO WARRANTY: see the file PUBLIC for details. **** Warning: An error occurred while reading an XREF table. **** The file has been damaged. This may have been caused **** by a problem while converting or transfering the file. **** Ghostscript will attempt to recover the data. Processing pages 1 through 1. Page 1 | ./devices/vector/gdevsvg.c:335: svg_put_params(): undefined Can't find (or can't open) font file %rom%Resource/Font/ArialMT. Can't find (or can't open) font file ArialMT. Can't find (or can't open) font file %rom%Resource/Font/ArialMT. Can't find (or can't open) font file ArialMT. Scanning /tmp for fonts... **** Warning: can't process font stream, loading f ont by the name. Loading ArialMT font from /tmp/arial.ttf... 3980548 2257912 3274836 1873311 3 d one. | ./devices/vector/gdevsvg.c:335: svg_put_params(): undefined **** This file had errors that were repaired or ignored. **** The file was produced by: **** >>>> Microsoftョ Word 2013 <<<< **** Please notify the author of the software that produced this **** file that it does not conform to Adobe's published PDF **** specification. 見た感じ用意した arial.ttf が使われた。出来たファイルのサイズを確認して みる。 [toyota@mygeeto tmp]$ ls -l 2016040600.* -rwxr-xr-x 1 toyota toyota 17411 Apr 6 22:09 2016040600.pdf -rw-rw-r-- 1 toyota toyota 858875 Apr 6 22:10 2016040600.svg だいぶサイズが大きくなった。中を眺めてみると、やっぱり文字も図形で扱って 居る感じで。元の PDF と SVG を比較。サイズが異なるので、SVG のサイズ指定を 拡大して、Firefox で表示した結果。
PDF + Adobe Reader 10.1.15
PDF + Adobe Reader
SVG + Firefox 45.0.1
SVG + Firefox 45.0.1
フォントの感じは同じように見える。フォントに関してはベクタデータではない 感じで、svg ファイルを少しいじって拡大してみると。
SVG 拡大
SVG 拡大
ギザギザ感と横線が出てしまう。svg ファイルの中身から見ても、横長の棒を 組み合わせて文字を作っている。ちゃんとしたベクタデータに変換してくれる ソフトってないものかな。あったらサイズが小さくなるだろうし。
■ 4月7日WWWLinux
前から考えていたことがあって。文は何でも良いのだけど、例えば 「吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。」 の文を1文字で表してみようと。何を言っているのか理解に苦しむだろうけど、 簡単に言うと、上記の文字を全部含んだフォントを作ってしまえばと思って。 昨日 SVG ファイルを作ることができた。SVG はベクタデータなので、同じベクタ データのフォントファイルに変換できたら、複数文字を含んだ1文字分のフォントを 作ることで長文も1文字分で表せると。さっそくやってみる。 まずは、word で文を作って PDF で保存した。それを Ghostscript で変換して SVG にした。SVG からフォントファイルに変換できるソフトは無いかと調べると、 web でのサービスだけど IcoMoon というところでできるようなので、やってみた。 IcoMoon App 最初は操作が良くわからないけど、使っているうちになんとなくわかるように なってきた。出力したフォントで、ページを作ってみた。 横幅が大きくて途中で切れているけど、a と入れているだけで複数文字を表示 できている。ブラウザいくつかで試したけど、Firefox だと表示が汚い。
■ 4月8日WWWLinux
昨日の続き。フォントを @font-face で指定すると、表示するのにちょっと時間が かかる。html を読み込んだあとに、フォントファイルを取得しているせいだろう けど、ローカルにあるファイルごときでも1秒ぐらいかかる。web で表示させた 場合、フォントファイルだけ読み込みに失敗する可能性もあるので、さらに時間が かかることが予想されるし。ここは、DATA URI スキームの出番だ、ということで できるかどうかわからないけど、やってみることにした。 テストなので、1文字分のフォントを作成。IPA のフォントをサブセットフォント メーカーというソフトで取り出した。 この ttf ファイルを base64 にして文字にした。mime type がわからないので、 /etc/mime.types ファイルを参考に、html はこんな感じになった。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=charset=utf-8"> <title>test for font-face</title> <style type="text/css" media="screen, print"> @font-face { font-family: "ipaa"; src: url('data:application/font-sfnt;base64,AAEAAAALAI~長いので省略~'); } </style> </head> <body> <span style="font-family: 'ipaa'; font-size: 48pt;">a</span> </body> </html> 実際の html はここに。 読み込みのタイムラグもないし、良い感じになった。
■ 4月9日WWWLinux
一昨日とか昨日の続きというか、前から考えていたこと。web ページを公開すると どこからともなく bot がやってくる。お行儀の良い bot なら文句はないのだけど robot.txt なんて無視したり、メールアドレスを収集したりするような頂けない bot も多数ある。 最近ではメールアドレスを画像にしても解析するものがあるとかで、効果が薄く なってきている。 そのメールアドレスについて、画像化ではなくフォント化という方法が取れる。 これは、一昨日にやったテストで実現したもので、画像解析はあってもフォント 解析までしないでしょうという前提。さらに、昨日やったように、html に入れて しまえば、そこらの bot ではそこまで解析しないでしょう。 もう1つ考えていることが、フォントを使った換字式暗号を作って、bot 対策や コピペ対策にできないかと。やるだけやってみる。 まず、文字の置き換えルールを作成。適当に並べてこんな感じにした。 abcdefghijklmnopqrstuvwxyz xqjezsbiurpydmfhwlkotgacvn 次に必要な文字を昨日使ったサブセットフォントメーカーで取り出す。ここから どうしたものかと悩んで、FontForge というソフトが使えそうなので、ダウン ロードしてインストール。FontForge でさっき作ったフォントを開いてみた。 FontForge 文字列を上で作ったルールで入れ替える。 FontForge 保存して、ファイルサイズを見てみた。 プロパティ 4.51KB しかない。予想よりもだいぶ小さくなった。フォントビューアーで開いて みた、 フォントビューアー ちゃんと換字されている。あとは文書の作成。変換が面倒なので、配列を作って 一括変換した。 元の文章は。
in cryptography, a substitution cipher is a method of encoding by which units of plaintext are replaced with ciphertext, according to a fixed system; the "units" may be single letters (the most common), pairs of letters, triplets of letters, mixtures of the above, and so forth. the receiver deciphers the text by performing the inverse substitution.
変換すると、こうなった。
um jlvhofblxhiv, x ktqkouotoufm juhizl uk x dzoife fs zmjfeumb qv aiuji tmuok fs hyxumozco xlz lzhyxjze auoi juhizlozco, xjjfleumb of x sucze kvkozd; oiz "tmuok" dxv qz kumbyz yzoozlk (oiz dfko jfddfm), hxulk fs yzoozlk, oluhyzok fs yzoozlk, ducotlzk fs oiz xqfgz, xme kf sfloi. oiz lzjzugzl ezjuhizlk oiz ozco qv hzlsfldumb oiz umgzlkz ktqkouotoufm.
この文書を出力頻度分析にかけてみた。 Result 文字数:351、パターン数:29 # 文字 出現回数 出現割合(%) 1 56 15.95 2 z 37 10.54 3 o 36 10.26 4 u 24 6.84 5 l 20 5.70 6 k 20 5.70 7 f 19 5.41 8 i 15 4.27 9 m 14 3.99 10 x 12 3.42 文書を見ても、x が a なのは確実だし、頻度から z は e だろうし、解読でき そうな感じだな。今回は解読とかじゃなくて、簡単にコピーさせないものなので 特に問題ないけど。 文字を変換するのに5分ぐらいで作った C# のコードを一応載せておく。 char[] cp = "xqjezsbiurpydmfhwlkotgacvn".ToCharArray(); char[] tr = textBox1.Text.ToCharArray(); for (int i = 0; i < tr.Length; i++ ) { if(tr[i] >= 'a' && tr[i] <= 'z'){ tr[i] = cp[((int)tr[i] - 'a')]; } } textBox2.Text = new string(tr); これを html にフォントと一緒に組み込むのは、明日に。
■ 4月10日WWWLinux
昨日の続き。このページで実験すると面倒そうなので、新しく html ファイルを 作って、そこでやってみた。表示してみると。 um jlvhofblxhiv, x ktqkouotoufm juhizl uk x dzoife以下略 となった。ここで間違いに気が付く。A→B に変換したものは B→Aにしないと いけなかった。A→B と2回やっただけになっているので、C# のコードを修正して 作り直した。 逆変換の並びは。 abcdefghijklmnopqrstuvwxyz wgxmdovphcsrnztkbjfuiyqale になって、変換するとこうなった。
hz xjlkutvjwkpl, w figfuhuiuhtz xhkpdj hf w nduptm to dzxtmhzv gl qphxp izhuf to krwhzudau wjd jdkrwxdm qhup xhkpdjudau, wxxtjmhzv ut w ohadm flfudn; upd "izhuf" nwl gd fhzvrd rduudjf (upd ntfu xtnntz), kwhjf to rduudjf, ujhkrduf to rduudjf, nhauijdf to upd wgtyd, wzm ft otjup. upd jdxdhydj mdxhkpdjf upd udau gl kdjotjnhzv upd hzydjfd figfuhuiuhtz.
これで html を作成してみた。 文字列のコピー対策になった。日本語を入れたり、2文字表示のフォントを入れたり したら、よりコピーされにくくなる。他にも「携帯」「裏技」の文字をそれぞれ、 「地球」「環境」などのフォント変換しておいて、検索エンジンからやってくる 人を増やすというおかしなこともできる。 ただし、テキストブラウザの人とか、対応していないブラウザの人には無意味な 文字が延々と続くことになる。 このあたり、フォントを埋め込む PDF なんかでも応用ができそう。
■ 4月11日WindowsCM6870
Android studio + エミュレータを使っているとメモリがきつくなり、Photoshop を 同時に起動できなかったりする状態を改善すべく、メモリを買った。 メモリ 今入っているメモリが CL11 なので、少しお高い CL9 のではなく CL11 の安い のでシリコンパワー製のを購入した。 チップ ぼけちゃったけど、チップもシリコンパワー製。片面実装のものなので、1チップ あたり 512MB ということになる。 片面実装 さっそく装着して、bios 画面を見てみたら、ちゃんと 16GB で認識してくれた。 最近の bios はプリントスクリーンの機能が付いていてありがたい。 bios 画面 それにマウスも使えるし、便利な時代になったものだ。ASUS SPD Information と いう項目でメモリ詳細が見られるので、見てみた。 bios メモリ画面 製造は2016年の12週目で、3月終わりぐらいかな。新しいものみたい。 bios での確認は終わったので Windows の起動をしてみた。CPU-Z でメモリ動作を 確認してみると。 CPU-Z Dual になっている。理由はわからないけど、良しとするか。一応、HDBench で ベンチマークを取ったけど、以前と変わらないのでここには載せず。
■ 4月12日WindowsCM6870
最近のメモリは永久保証が付いているとは言え、しばらく経ってからの交換と なると時間がかかりそうなので、この際だからメモリのテストをしようかと。 MemTest86 をダウンロードしてきて、CD に焼こうかと思ったが、焼いたところで この先3年ぐらいは使わない気がするし、そんな先だと新しいバージョンが出て いるだろうから、少し考えて CD を作るのをやめた。 で、どうしたかと言うと、USB メモリを使う USB メモリ版を作ることにした。 USB Drive 版をダウンロードして、imageUSB を起動した。 imageUSB 附属してきた IMG ファイルを書き込んで完了。USB メモリから起動するように bios を変更して、起動してみたが。ウンともスンとも言わない。モニタが省電力 モードにならないので、出力しているようだけど、キーボードを押しても何も 表示されないまま。 USB メモリの作成に失敗したかと、もう一度同じことをやってみたけど、全く 変わらず。USB 3.0 の場所に刺しているのが悪いのかと、USB メモリを抜いた 瞬間、MemTest86 の画面が出た。USB 2.0 に刺しても同じで、やっぱり抜いた 瞬間に起動した。良くわからないけど、起動したから良しとする。 Memtest86 えらく時間がかかりそう。 結局、テストが終了するのに9時間20分もかゝり、問題はなかったので、このまま 使うことに。
■ 4月13日Windows
昨日使った USB メモリの中身を削除して、別なデータを入れようとしたら容量が 50MB ぐらいしかない。フォーマットし直しかと思って Explorer からフォーマット しようとしても、48MB の容量から選べない。 仕方なく「ディスクの管理」を起動してみたが、USB メモリの中のパーティションを 削除することができない。最後の手段ということで、管理者モードでコマンド プロンプトを開いて、diskpart を使って削除。削除するのも delete partition override と override を付けないと駄目で、USB メモリのフォーマットごときで、かなり 時間を使ってしまった。これ、一般の人はどうしてるんだろうか。
■ 4月14日LinuxOther
vi でファイルを編集していて、「+」文字の検索をしようと、いつものように /+ という感じで、正規表現で使われる文字だからうまく検索できないかもな、と 少し思いつつもやってみたら、案の定。 E866: (NFA 正規表現) 位置が誤っています: + E64:\+ の後になにもありません と出てきた。一応、バージョンは。 [toyota@mygeeto ~]$ vi --version VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jun 10 2014 06:55:55) Included patches: 1-160 ~省略~ ということで、どうしたものかと頭を捻って繰り返すこと5回ぐらい、これで検索 することができた。 /\(+\) もっと頭の良いやり方があるような気もする。
■ 4月15日WindowsOther
Android Atudio 2 が出たのだけど、少し様子を見ていた。でも、やっぱり新しい バージョンの方が良いだろうということで、インストールすることにした。と 言っても、ダウンロードする容量が 1G 以上あるので、時間がかかりそう。 Android Studio ダウンロードが完了して、インストール。前のバージョンはバッサリと削除する ことにした。 Android Studio Setup アンインストール処理後、インストールが始まった。また、ネットワークから 大量のダウンロードしながらインストールかと思ったけど、そうでもないみたい。 Android Studio Setup 5分ぐらいでインストールは完了した。もっとかかると思っていたけど、あっさり だったな。 Android Studio Setup これまで作ったアプリが動くか試そうと思ったけど、続きは明日に。
■ 4月16日WindowsOther
昨日 Update した Android Studio を起動してみた。設定の引き継ぎをするか 聞いてきたので、引継ぎをして。 Complete Installation Android Studio 自体は無事に起動した。 Android Studio プロジェクトでは、エラーが出ていた。 Error: Gradle version 2.10 is required. Current version is 2.8. If using the gradle wrapper, try editing the distributionUrl in C:\Users\toyota\ AndroidStudioProjects\ListViewTest\gradle\wrapper\gradle-wrapper.properties to gradle-2.10-all.zip Fix Gradle wrapper and re-import project Gradle settings gradle-2.10 なるものが入っているか、確認してみた。 $ pwd /cygdrive/c/Program Files/Android $ find ./ -name "gradle-2.10*" ./Android Studio/gradle/gradle-2.10 あるみたい。「Fix Gradle wrapper and re-import project」をクリックしたら 自動的に更新してくれて解決した。 Android Studio 2.0 を少し使ってみて、大きく変わったと思ったのが、アプリを 実行するときの動作。実機やエミュレータを選択する辺りが、両方同時に起動 したり、ソースが変わってないときの動作が違って戸惑った。まだ慣れないけど、 そのうちなんとかなるでしょう。
■ 4月17日WWW
Google でいつものように検索をしてみたら、最近は身長までも Google が答えて くれて、検索エンジンの域をだいぶ超えていると感じて。 ジャイアント馬場 身長 あのタブーを検索してみたらどうなるのか、やってみた。 hyde 身長 結果は出たけど、この数字が出てくるみたい。
■ 4月18日LinuxOther
10日の続き。html の変換を自動でできないかと、考えてみた。まず、html を 解析してタグの削除をして、文字毎に改行を入れた後、sort と uniq を使い、 使っている文字を抽出してみようかと。 まず、sort コマンドと uniq コマンドが utf-8 の文字列を扱えるのか、実験 してみた。まずは、cygwin の環境で実験。 $ uname -a CYGWIN_NT-6.3 falleen 2.4.1(0.293/5/3) 2016-01-24 11:26 x86_64 Cygwin これで、utf-8 のファイルを作ってやってみた。 $ cat memo さしすせそ こ け く き か あいうえお か き く け こ 五臓六腑 四面楚歌 三面六臂 二束三文 一刀両断 $ sort memo あいうえお か か き き く く け け こ こ さしすせそ 一刀両断 五臓六腑 三面六臂 四面楚歌 二束三文 $ sort memo | uniq あいうえお か き く け こ さしすせそ 一刀両断 五臓六腑 三面六臂 四面楚歌 二束三文 ちゃんと動作するみたい。同じことを Redhat 7.1 の環境でもやってみた。uname の結果は。 [toyota@mygeeto tmp]$ uname -s -r -m Linux 3.10.0-el7.mygeeto.20150701 x86_64 同様に動作した。curl → sed → perl? → sort → uniq で出来るかな。明日、 続きをやってみる。
■ 4月19日LinuxOther
昨日の続き。まずは、小さな html でタグを削除する実験をしてみる。curl で yahoo.com のトップページを拾う。 [toyota@mygeeto tmp]$ curl www.yahoo.com <HTML> <HEAD> <TITLE>Document Has Moved</TITLE> </HEAD> <BODY BGCOLOR="white" FGCOLOR="black"> <H1>Document Has Moved</H1> <HR> <FONT FACE="Helvetica,Arial"><B> Description: The document you requested has moved to a new location. The new l ocation is "https://www.yahoo.com/". </B></FONT> <HR> </BODY> sed を使ってタグを削除してみる。 [toyota@mygeeto tmp]$ curl -s www.yahoo.com | sed -e 's/<[^<]*>//g' Document Has Moved Document Has Moved Description: The document you requested has moved to a new location. The new l ocation is "https://www.yahoo.com/". 動いている。www.yahoo.co.jp でやってみたら、気になることがいくつか。まず、 &nbsp; が残ってしまうこと。あとは、style タグと script タグの中身が残って しまうこと。動作的に html の中身を変換するので、title タグも削除したい。 title タグというよりも、head タグごと削除した方が良い。style タグも script タグも head タグに収めることが多いので、 head タグの削除 → style タグの削除 → script タグの削除 → タグの削除 という順番で削除すれば良いのかな。 sed で head タグごと削除しようとしたら、sed は行ごとに動作するので、うまく 動作せず。tr で改行を削除するようにして。 [toyota@mygeeto tmp]$ curl -s www.yahoo.co.jp | tr -d '\n' | tr -d '\r' | sed - e 's/<head>.*<\/head>//g' | sed -e 's/<style>.*<\/style>//g' | sed -e 's/<scrip t>.*<\/script>//g' | sed -e 's/<[^<]*>//g' | sed -e 's/&[^;]*;//g' ヘルプYahoo! JAPANトップページの機能を正しくご利用いただくには、下記の環境が必 要となります。Windows:Internet Explorer 9.0以上 / Chrome 最新版 / Firefox 最新 ~省略~ 規取得 ]メール - メールアドレスを取得カレンダー - カレンダーを活用ポイントを確 認ログイン履歴を確認会社概要 - 投資家情報 - 社会的責任 - 企業行動憲章 - 広告掲 載について - 採用情報利用規約 - 免責事項 - メディアステートメント - セキュリテ ィーの考え方 - プライバシーポリシーCopyright (C) 2016 Yahoo Japan Corporation. All Rights Reserved. これで本文のみを取り出すことができた。style と script の削除が後方一致 しているのが気になるのと、&gt; とか &nbsp; を削除するため sed を使って 's/&[^;]*;//g' をしているが、& を &amp; と書いてないところがあって、かなり 削除されてしまっている。 変換するのは私が書いた html の予定なので、この辺りは大丈夫かな。問題が出る ようだったら、また直すことになるけど。
■ 4月20日LinuxOther
昨日の続き。調べていたら、sed の -e オプションは複数指定が可能なことを 見つけた。昨日のコマンドはちょっと短くなるな。 今日は、タグを削除した html から、使われている文字を抽出する。まず、sed で 改行を入れて sort, uniq してみる。一昨日使ったファイルで試してみた。 [toyota@mygeeto tmp]$ sed 's/\(.\)/\1\r\n/g' memo さ し ~省略~ 一 刀 両 断 [toyota@mygeeto tmp]$ sed 's/\(.\)/\1\r\n/g' memo | sort ~省略~ sort を通すと何も出なくなった。そもそも、sed の結果では改行が3回入るので、 動きを見るため、1文字のみのファイルを作ってやってみた。 [toyota@mygeeto tmp]$ cat memo0 [toyota@mygeeto tmp]$ od -x memo0 0000000 81e3 0082 0000003 [toyota@mygeeto tmp]$ sed 's/\(.\)/\1\r\n/g' memo0 [toyota@mygeeto tmp]$ sed 's/\(.\)/\1\r\n/g' memo0 | od -x 0000000 0de3 810a 0a0d 0d82 000a 0000011 big endian にしてみると、 E3 0D 0A 81 0D 0A 82 0D 0A になるので、完全にバラバラにされてしまっている。表示できているのが不思議な ぐらい。cygwin でもやってみた。 $ cat memo0 $ sed 's/\(.\)/\1\r\n/g' memo0 $ sed 's/\(.\)/\1\r\n/g' memo0 | od -x 0000000 81e3 0d82 000a 0000005 big endian にしてみると、 E3 81 82 0D 0A になって、うまく動作している。心当たりがあったので、Linux の環境変数 LANG を確認してみた。 [toyota@mygeeto tmp]$ echo $LANG C これが原因かもしれないので、変更して再実行。 [toyota@mygeeto tmp]$ export LANG=ja_JP.UTF-8 [toyota@mygeeto tmp]$ sed 's/\(.\)/\1\r\n/g' memo0 [toyota@mygeeto tmp]$ sed 's/\(.\)/\1\r\n/g' memo0 | od -x 0000000 81e3 0d82 000a 0000005 目的通りの動作になった。最初のファイルでもできるかやってみる。 [toyota@mygeeto tmp]$ sed 's/\(.\)/\1\r\n/g' memo | sort | uniq あ い う え お か き く け こ さ し す せ そ 一 歌 五 三 四 楚 臓 束 断 刀 二 文 面 両 六 腑 臂 大丈夫なので、Yahoo Japan から文字を拾って、最後に改行を削除してみる。 [toyota@mygeeto tmp]$ curl -s www.yahoo.co.jp | tr -d '\n' | tr -d '\r' | sed - e 's/<head>.*<\/head>//g' -e 's/<style>.*<\/style>//g' -e 's/<script>.*<\/scrip t>//g' -e 's/<[^>]*>//g' -e 's/&[^;]*;//g' | sed 's/\(.\)/\1\r\n/g' | sort | un iq | tr -d '\n' | tr -d '\r' !()-./012356789ABCDEFGIJMNOPRSWY[]acdefghilmnoprstvwxy 、。・:ー「」いえかが きくこごしすただちっつてでとどなにのはへべまもやりるをァアィイオカキクグゲサシ ジスセタダッツテデトドナニバヒビピフブプヘペホポマムメモヤュョラリルレロン愛以 ~省略~ 信振新人図数性整正籍責占線装続逮大脱団地朝聴超定的天田電投動得日任認能配迫半板 版否被必表品不布仏分聞米便捕報方本免毛役約予容用要落覧利履理旅歴連路 後は、フォントファイルからこの文字分だけ抜き出して、入れ替えか再マッピング させて、と先は長いな。
■ 4月21日LinuxOther
フォントファイルから指定の文字だけ取り出して、別のフォントファイルに保存 したい。前回は、Windows で動くサブセットフォントメーカーというソフトを 使ったけど、今回は自動で行うので使えない。調べると、FontForge のスクリプト で出来そうだけど、ちょっと指定が面倒そうな感じ。他に無いかと探したら、 font-optimizer という Perl のスクリプトがあった。使えるかどうか、やって みる。 [toyota@mygeeto tmp]$ wget -q https://bitbucket.org/philip/font-optimizer/get/3 ec118f146c7.zip [toyota@mygeeto tmp]$ unzip 3ec118f146c7.zip Archive: 3ec118f146c7.zip inflating: philip-font-optimizer-3ec118f146c7/.hg_archival.txt inflating: philip-font-optimizer-3ec118f146c7/.hgignore ~省略~ 実行してみた。 [toyota@mygeeto tmp]$ cd philip-font-optimizer-3ec118f146c7/ [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ./subset.pl Can't locate Digest/SHA.pm in @INC (@INC contains: ext/Font-TTF/lib /usr/local/ lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl 5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Font/Subsetter.pm line 31. BEGIN failed--compilation aborted at Font/Subsetter.pm line 31. Compilation failed in require at ./subset.pl line 8. BEGIN failed--compilation aborted at ./subset.pl line 8. Digest/SHA.pm というモジュールがいるとのこと。ダウンロードして、再実行 してみた。 [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ cd /tmp [toyota@mygeeto tmp]$ wget -q http://search.cpan.org/CPAN/authors/id/M/MS/MSHEL OR/Digest-SHA-5.95.tar.gz [toyota@mygeeto tmp]$ tar xfz Digest-SHA-5.95.tar.gz [toyota@mygeeto tmp]$ mkdir philip-font-optimizer-3ec118f146c7/ext/Font-TTF/lib /Digest [toyota@mygeeto tmp]$ cp Digest-SHA-5.95/lib/Digest/SHA.pm philip-font-optimize r-3ec118f146c7/ext/Font-TTF/lib/Digest/ [toyota@mygeeto tmp]$ cd philip-font-optimizer-3ec118f146c7/ [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ./subset.pl Can't locate loadable object for module Digest::SHA in @INC (@INC contains: ext /Font-TTF/lib /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/ve ndor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Font/Subsetter.pm line 31. Compilation failed in require at Font/Subsetter.pm line 31. BEGIN failed--compilation aborted at Font/Subsetter.pm line 31. Compilation failed in require at ./subset.pl line 8. BEGIN failed--compilation aborted at ./subset.pl line 8. Digest/SHA はコンパイルする必要があるみたい。仕方ない、やることに。 [toyota@mygeeto tmp]$ cd Digest-SHA-5.95/ [toyota@mygeeto Digest-SHA-5.95]$ less README [toyota@mygeeto Digest-SHA-5.95]$ perl Makefile.PL Checking if your kit is complete... Looks good Writing Makefile for Digest::SHA [toyota@mygeeto Digest-SHA-5.95]$ make cp lib/Digest/SHA.pm blib/lib/Digest/SHA.pm /usr/bin/perl /usr/share/perl5/vendor_perl/ExtUtils/xsubpp -typemap /usr/share /perl5/ExtUtils/typemap -typemap typemap SHA.xs > SHA.xsc && mv SHA.xsc SHA.c gcc -c -I. -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-prote ctor -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g -pi pe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param= ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -DVERSION=\"5.95\ " -DXS_VERSION=\"5.95\" -fPIC "-I/usr/lib64/perl5/CORE" SHA.c Running Mkbootstrap for Digest::SHA () chmod 644 SHA.bs rm -f blib/arch/auto/Digest/SHA/SHA.so gcc -shared -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-pr otector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=gene ric -Wl,-z,relro SHA.o -o blib/arch/auto/Digest/SHA/SHA.so \ \ chmod 755 blib/arch/auto/Digest/SHA/SHA.so cp SHA.bs blib/arch/auto/Digest/SHA/SHA.bs chmod 644 blib/arch/auto/Digest/SHA/SHA.bs cp shasum blib/script/shasum /usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/shasum Manifying blib/man1/shasum.1 Manifying blib/man3/Digest::SHA.3pm [toyota@mygeeto Digest-SHA-5.95]$ make test PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t t/allfcns.t ...... ok t/base64.t ....... ok t/bitbuf.t ....... ok t/bitorder.t ..... ok t/fips180-4.t .... ok t/fips198.t ...... ok t/gg.t ........... ok t/gglong.t ....... ok t/hmacsha.t ...... ok t/inheritance.t .. ok t/ireland.t ...... ok t/methods.t ...... ok t/nistbit.t ...... ok t/nistbyte.t ..... ok t/pod.t .......... skipped: Test::More not installed t/podcover.t ..... skipped: Test::More not installed t/rfc2202.t ...... ok t/sha1.t ......... ok t/sha224.t ....... ok t/sha256.t ....... ok t/sha384.t ....... ok t/sha512.t ....... ok t/state.t ........ ok t/unicode.t ...... ok t/woodbury.t ..... ok All tests successful. Files=25, Tests=132, 1 wallclock secs ( 0.18 usr 0.04 sys + 0.70 cusr 0.13 csys = 1.05 CPU) Result: PASS [toyota@mygeeto Digest-SHA-5.95]$ cd /tmp [toyota@mygeeto tmp]$ mkdir philip-font-optimizer-3ec118f146c7/ext/Font-TTF/lib /auto [toyota@mygeeto tmp]$ mkdir philip-font-optimizer-3ec118f146c7/ext/Font-TTF/lib /auto/Digest [toyota@mygeeto tmp]$ mkdir philip-font-optimizer-3ec118f146c7/ext/Font-TTF/lib /auto/Digest/SHA [toyota@mygeeto tmp]$ cp Digest-SHA-5.95/blib/lib/Digest/SHA.pm philip-font-opt imizer-3ec118f146c7/ext/Font-TTF/lib/Digest/ [toyota@mygeeto tmp]$ cp Digest-SHA-5.95/blib/arch/auto/Digest/SHA/SHA.so phili p-font-optimizer-3ec118f146c7/ext/Font-TTF/lib/auto/Digest/SHA [toyota@mygeeto tmp]$ cd philip-font-optimizer-3ec118f146c7/ [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ./subset.pl Usage: ./subset.pl [options] [inputfile.ttf] [outputfile.ttf] Options: --chars=STRING characters to include in the subset (defaults to "test") --charsfile=FILE utf8-encoded file containing characters to include --verbose, -v print various details about the font and the subsetting --include=FEATURES comma-separated list of feature tags to include (all others will be excluded by default) --exclude=FEATURES comma-separated list of feature tags to exclude (all others will be included by default) --apply=FEATURES comma-separated list of feature tags to apply to the font directly (folding into the cmap table), e.g. "smcp" to replace all letters with small-caps versions. (You should use --include/--exclude to remove the features, so they don't get applied a second time when rendering.) --licensesubst=STRING substitutes STRING in place of the string ${LICENSESUBST} in the font's License Description ようやく動いた。長くなったので、続きは明日。
■ 4月22日LinuxOther
ようやく動作した subset.pl を動かしてみる。IPA のフォントをコピーして、 簡単な文字からやってみることに。 [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ./subset.pl --chars="abcd" /tmp/ipagp.ttf abcd.ttf defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 146. (Maybe you should just omit the defined()?) defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 189. (Maybe you should just omit the defined()?) defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 295. (Maybe you should just omit the defined()?) Uses unhandled table 'vhea' Uses unhandled table 'vmtx' [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ls -l abcd.ttf -rw-rw-r-- 1 toyota toyota 55040 4月 22 21:09 abcd.ttf できた。ファイルサイズが大きい気がするな。Windows のフォントビューアで 確認する。 フォントビューア だめみたい。念のため、html で @font-face の指定をして表示させてみたが、 Chrome でも Firefox でも駄目。file コマンドで確認してみた。 [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ file abcd.ttf abcd.ttf: TrueType font data TrueType font の判定なので、ファイルの頭はちゃんとできている感じはする のだけど。ttf って Windows 向けと Mac 向けと違うらしいので、ひょっとしたら Mac 向けでできてしまったのではないかと思い、以前インストールした FontForge で開いてみた。 フォント名が不正です フォント名が不正とかなんとか。問題はフォント名だけなのだろうか。ここで FontForge が終了すると思ったら、意外にもファイルを開いてくれて。 FontForge 指定した文字は入っていた。この状態をどう理解して良いのか少し考えてしまうの だけど、font-optimizer のオプションにフォント名の指定はできないみたいだし、 困った状況。 font-optimizer は Perl なので、ちょっといじってみることにした。まず、この フォント名を付けている部分を探して、変更した。 [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ grep -r "subset of" * Font/Subsetter.pm: $str->[$plat][$enc]{$lang} = "$uid - subs et of " . $str->[$plat][$enc]{$lang}; README.txt:smaller files that contain only a subset of the original's glyphs, f ocusing on [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ cp Font/Subsetter.pm Font/ Subsetter.pm.bak [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ vi Font/Subsetter.pm [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ diff Font/Subsetter.pm.bak Font/Subsetter.pm 1428c1428 < $str->[$plat][$enc]{$lang} = "$uid - subset of " . $str-> [$plat][$enc]{$lang}; --- > $str->[$plat][$enc]{$lang} = $str->[$plat][$enc]{$lang}; [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ./subset.pl --chars="abcde " /tmp/ipagp.ttf abcde.ttf defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 146. (Maybe you should just omit the defined()?) defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 189. (Maybe you should just omit the defined()?) defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 295. (Maybe you should just omit the defined()?) Uses unhandled table 'vhea' Uses unhandled table 'vmtx' [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ls -l abcde.ttf -rw-rw-r-- 1 toyota toyota 54772 4月 22 21:31 abcde.ttf 文字数を増やしたのにファイルサイズが小さくなったのは、フォント名に起因 するところなのでしょう。作成したこのファイルを、フォントビューアで確認 してみたが、やっぱりエラー。FontForge で開いてみると、フォント名が不正 とのエラーはなくなった。TrueType フォント形式じゃなく、他のフォント形式 なのかもしれないと、確認してみたが。 [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ file abcde.ttf abcde.ttf: TrueType font data と言うことは、フォントビューアでは見られないけど、FontForge では見られる TrueType フォント形式ということなのだろうか。色々と簡単にはいかないものだ。
■ 4月23日LinuxOther
昨日の続き。作ったフォントを FontForge で開いたあと、TrueType フォントで 保存しなおしてみることにした。FontForge からフォントの出力を選び、どんな 形式があるのか確認しながら。 フォントの出力 TrueType の指定で保存して、出来上がったファイルを見てみる。 [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ls -l abcde.ttf abcde2.ttf -rw-rw-r-- 1 toyota toyota 54772 4月 22 21:31 abcde.ttf -rwxr-xr-x 1 toyota toyota 4516 4月 23 20:21 abcde2.ttf [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ file abcde*.ttf abcde.ttf: TrueType font data abcde2.ttf: TrueType font data ファイルサイズがだいぶ小さくなった。Windows のフォントビューアで確認すると ちゃんと見ることができた。html の @font-face で指定して Firefox で開くと 表示できた。
ブラウザで表示
FontForge はスクリプトで実行できるようなので、同じことができるかやって みることに。まずは、Linux 環境に FontForge のインストール。いつものように コンパイルからしようと思ったが、嵌りそうなのでここは仕方なく yum を使って インストールすることに。 [root@mygeeto tmp]# yum search fontforge Loaded plugins: fastestmirror, langpacks Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast Loading mirror speeds from cached hostfile * base: ftp.tsukuba.wide.ad.jp * extras: ftp.tsukuba.wide.ad.jp * updates: ftp.tsukuba.wide.ad.jp ============================ N/S matched: fontforge ============================ fontforge-devel.i686 : Development tools for fontforge fontforge-devel.x86_64 : Development tools for fontforge fontforge.i686 : Outline and bitmap font editor fontforge.x86_64 : Outline and bitmap font editor Name and summary matches only, use "search all" for everything. [root@mygeeto tmp]# yum install fontforge ~省略~ Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: fontforge x86_64 20120731b-12.el7 base 7.7 M Installing for dependencies: ImageMagick x86_64 6.7.8.9-12.el7_2 updates 2.1 M OpenEXR-libs x86_64 1.7.1-7.el7 base 217 k autotrace x86_64 0.31.1-37.el7 base 132 k giflib x86_64 4.1.6-9.el7 base 40 k ilmbase x86_64 1.0.3-7.el7 base 100 k libspiro x86_64 20071029-12.el7 base 23 k libuninameslist x86_64 20091231-8.el7 base 482 k libwmf-lite x86_64 0.2.8.4-41.el7_1 base 66 k 依存関係があったけど、インストール完了。 FontForge の tutorial を参考に、簡単なスクリプトを書いて実行してみる。 [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ vi ttfconv [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ cat ttfconv #!/usr/bin/fontforge Open($1) Generate($1:r + "3.ttf") [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ chmod a+x ttfconv [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ./ttfconv abcde.ttf Copyright (c) 2000-2012 by George Williams. Executable based on sources from 14:57 GMT 31-Jul-2012. Library based on sources from 14:57 GMT 31-Jul-2012. File "./ttfconv", line 2 Open($1) ^ SyntaxError: invalid syntax うまく動かない。$1 の解釈が問題なのかもと、ファイル名を直に書いてやって みた。 [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ vi ttfconv [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ./ttfconv abcde.ttf Copyright (c) 2000-2012 by George Williams. Executable based on sources from 14:57 GMT 31-Jul-2012. Library based on sources from 14:57 GMT 31-Jul-2012. Traceback (most recent call last): File "./ttfconv", line 2, in <module> Open("abcde.ttf") NameError: name 'Open' is not defined やっぱり動かない。スクリプトにせず、コマンドの -c オプションでやってみる。 [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ fontforge -c 'Open("abcde.t tf"); Generate("abcde3.ttf")' Copyright (c) 2000-2012 by George Williams. Executable based on sources from 14:57 GMT 31-Jul-2012. Library based on sources from 14:57 GMT 31-Jul-2012. Traceback (most recent call last): File "<string>", line 1, in <module> NameError: name 'Open' is not defined 仕方なく man を眺めたり、実行オプションを見てみると、気になるオプションが あった。 -lang=py use python for scripts (may precede -script) -lang=ff use fontforge's legacy scripting language これかなと思って、-lang=ff を付けてみた。 [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ fontforge -lang=ff -c 'Ope n("abcde.ttf"); Generate("abcde3.ttf")' Copyright (c) 2000-2012 by George Williams. Executable based on sources from 14:57 GMT 31-Jul-2012. Library based on sources from 14:57 GMT 31-Jul-2012. デフォルトでは python の扱いで実行されてしまい、fontforge スクリプトと して扱われなくなってしまったということなのかな。できたファイルを確認して みる。 [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ls -l abcde* -rw-rw-r-- 1 toyota toyota 54772 4月 22 21:31 abcde.ttf -rwxr-xr-x 1 toyota toyota 4516 4月 23 20:21 abcde2.ttf -rw-rw-r-- 1 toyota toyota 4516 4月 23 20:58 abcde3.ttf Windows の FontForge(GUI) で保存したものと同じサイズのものができた。これを フォントビューアで見てみたが。 フォントビューア ファイルサイズが同じなので、バイナリレベルで比較するしかないかな。長く なりそうなので、続きは明日。
■ 4月24日LinuxOther
昨日の続き。Linux の FontForge スクリプトで変換したフォントが、フォント ビューアでは見られなかった。html の @font-face でも試してみたら、手元の ブラウザ Firefox, Chrome, Opera, IE では問題なく表示できた。ファイルの 何が違うのだろうと、バイナリレベルで比較してみた。 $ od -x abcde2.ttf > a2 $ od -x abcde3.ttf > a3 $ diff a2 a3 2,4c2,4 < 0000020 e663 e8ce 0000 4811 0000 1c00 4447 4645 < 0000040 2600 0f00 0000 2811 0000 1e00 534f 322f < 0000060 9655 3179 0000 a801 0000 6000 6d63 7061 --- > 0000020 fb5c 7184 0000 4811 0000 1c00 4447 4645 > 0000040 3600 0300 0000 2811 0000 2000 534f 322f > 0000060 cb4f 4e79 0000 a801 0000 6000 6d63 7061 10c10 < 0000220 a8f7 6034 0000 2c01 0000 3600 6868 6165 --- > 0000220 950d 81ee 0000 2c01 0000 3600 6868 6165 16c16 < 0000360 5a72 40ef 0000 c810 0000 5000 7270 7065 --- > 0000360 c272 40ef 0000 c810 0000 5000 7270 7065 19,21c19,21 < 0000440 2229 c80f 0000 8811 0000 1a00 0100 0000 < 0000460 0300 ae07 d70e 8de5 0f5f f53c 3f00 0008 < 0000500 0000 0000 f4c6 e081 0000 0000 c9c9 c15f --- > 0000440 fc2b 6a13 0000 8811 0000 1a00 0100 0000 > 0000460 0300 ae07 c4f5 d1fe 0f5f f53c 3f00 0008 > 0000500 0000 0000 55d3 e1cd 0000 0000 55d3 e1cd 32,33c32,33 < 0000760 0000 0a07 9101 0200 0100 0000 0000 1004 < 0001000 cb05 0000 2000 0100 0008 cd00 0000 0000 --- > 0000760 0000 0a07 9101 0200 0100 0000 0000 2d04 > 0001000 0000 0000 2000 0100 0008 cd00 0000 0000 262c262 < 0010320 a2fe 6800 0000 0000 0000 0000 0000 0000 --- > 0010320 0aff 6800 0000 0000 0000 0000 0000 0000 267,270c267,270 < 0010440 1000 0100 ffff 0300 0100 0000 0c00 0000 < 0010460 1600 0000 0200 0100 0000 0800 0100 0400 < 0010500 0000 0200 0000 0000 0000 0100 0000 0000 < 0010520 28d3 46ed 0000 0000 f4c6 e081 0000 0000 --- > 0010440 1000 0100 ffff 0300 0100 0000 0e00 0000 > 0010460 1800 0000 0000 0200 0100 0000 0800 0100 > 0010500 0400 0000 0200 0000 0000 0100 0000 0000 > 0010520 3dcc cfa2 0000 0000 f4c6 e081 0000 0000 273,275c273,275 < 0010600 0000 0000 0000 0400 0008 2900 0008 0a07 < 0010620 0008 0000 0008 e102 0c01 db02 0c01 d902 < 0010640 0a07 0000 --- > 0010600 0000 0000 0000 0400 0008 e106 0008 0000 > 0010620 0008 0000 0008 2904 fe05 2f04 fe05 3104 > 0010640 0000 0000 ちょっとの差かなと思っていたけど、かなり違っている。ファイル形式の予備知識 ゼロではどう違っているのかわからない。ここは目的であるブラウザで表示できる ということで、フォントビューアの件は目をつぶることにして、18日からのことを 通しでやってみる。 [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ vi makefont [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ cat makefont url='http://www.yahoo.com/' curl -s $url | tr -d '\n' | tr -d '\r' | sed -e 's/<head>.*<\/head>//g' -e 's/< style>.*<\/style>//g' -e 's/<script>.*<\/script>//g' -e 's/<[^>]*>//g' -e 's/&[ ^;]*;//g' | sed 's/\(.\)/\1\r\n/g' | sort | uniq | tr -d '\n' | tr -d '\r' > us echar.$$ ./subset.pl --charsfile=usechar.$$ /tmp/ipagp.ttf fonttmp_$$.ttf rm -f usechar.$$ fontforge -lang=ff -c 'Open($1); Generate($2)' fonttmp_$$.ttf font_$$.ttf rm -f fonttmp_$$.ttf [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ chmod a+x makefont [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ./makefont defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 146. (Maybe you should just omit the defined()?) defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 189. (Maybe you should just omit the defined()?) defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 295. (Maybe you should just omit the defined()?) Uses unhandled table 'vhea' Uses unhandled table 'vmtx' Copyright (c) 2000-2012 by George Williams. Executable based on sources from 14:57 GMT 31-Jul-2012. Library based on sources from 14:57 GMT 31-Jul-2012. 出来上がったフォントを Windows の FontForge で見てみると、ちゃんと目的の 文字だけのファイルになったっぽい。 FontForge www.yahoo.co.jp のトップページでもやってみる。 [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ vi makefont [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ./makefont utf8 "\x80" does not map to Unicode at ./subset.pl line 67, <$f> chunk 1. Wide character in subroutine entry at Font/Subsetter.pm line 1496. Copyright (c) 2000-2012 by George Williams. Executable based on sources from 14:57 GMT 31-Jul-2012. Library based on sources from 14:57 GMT 31-Jul-2012. The requested file, fonttmp_8554.ttf, does not exist Open: Failed to open: fonttmp_8554.ttf Called from... <command-string>: line 1 途中の subset.pl が Wide character in subroutine entry at Font/Subsetter.pm line 1496. と出して落ちているみたい。そう言えば、複数バイト文字のテストを subset.pl で やってなかったな。 Subsetter.pm の 1496 行目は。 my $uid = substr(sha1_hex("$filename $chars"), 0, 16); になっていて、sha1_hex でエラーが出ている。この $uid は、使っている場所を 一昨日削除してしてしまったので、無くても問題なさそう。 my $uid = ""; とすることにした。Digest/SHA はわざわざコンパイルして入れたのに、不要に なってしまうとは。で、再実行。 [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ./subset.pl --charsfile=us echar.8603 /tmp/ipagp.ttf fonttmp.ttf defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 146. (Maybe you should just omit the defined()?) defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 189. (Maybe you should just omit the defined()?) defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 295. (Maybe you should just omit the defined()?) Uses unhandled table 'vhea' Uses unhandled table 'vmtx' 大丈夫そうなので、www.yahoo.co.jp を通しでやってみる。 [toyota@mygeeto philip-font-optimizer-3ec118f146c7]$ ./makefont defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 146. (Maybe you should just omit the defined()?) defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 189. (Maybe you should just omit the defined()?) defined(@array) is deprecated at ext/Font-TTF/lib/Font/TTF/Name.pm line 295. (Maybe you should just omit the defined()?) Uses unhandled table 'vhea' Uses unhandled table 'vmtx' Copyright (c) 2000-2012 by George Williams. Executable based on sources from 14:57 GMT 31-Jul-2012. Library based on sources from 14:57 GMT 31-Jul-2012. Bad ligature component glyph. GID 65535 not less than 218 (in ligature 0) 最後に気になるメッセージを吐いた気がするけど、できあがったフォントを見て みた。 FontForge 全部は確認してないが、大丈夫かな。 これで仮完成として、1段階目が完了。最終的には文字入れ替えとフォント入れ 替えを入れないといけないので、もっと大変そう。
■ 4月25日WWW
ある web ページで window.confirm を使った「続きを読み込みますか?」という 感じの確認が毎回出る。普段、Firefox, Chrome, Opera, IE の4つのブラウザを 用途にわけて使っているが、Opera でそのページを表示したら、「このページで これ以上ダイアログボックスを生成しない」というチェックが出たので、チェック を入れて、「OK」ボタンを押した。私のイメージだと、このチェックを入れると 毎回ダイアログを出すことなく「OK」の扱いにしてくれるものだと思っていたが、 単にこのダイアログボックスというか window.confirm が出なくなるものだった。 ダイアログが出なくなったので、その web ページの続きを読むことができなく なってしまい、困ったことになった。 これを解決しようと思ったが、まず動作の確認をしてみることにした。簡単な html を作って、Opera で表示させる。作った html はこんな感じ。 <html> <head> <title>confirm test</title> <script language="javascript" type="text/javascript"> <!-- function show(){ if(window.confirm('continue')){ document.getElementById("message").innerText = "done"; } } // --> </script> </head> <body> <p><input type="button" value="view" onClick="show()"></p> <span id="message"></span> </body> </html> この html を Opera で表示してみると想定通り「このページでこれ以上ダイアログ ボックスを生成しない」のチェックボックスが出てきた。 Opera confirm チェックを入れずに、「OK」ボタンを押すとちゃんと表示できた。再読込させて チェックボックスにチェックを入れ、「OK」ボタンを押したら、その時は表示 したが、次回からダイアログが出なくなる。ここまで再現できた。 本題は、これを解除したい。Opera の設定を眺めてみたけど、この動作を解除 できそうな項目がない。C:\User\toyota\AppData\Local とかで、ファイル名を grep してみたけど、やっぱり見つからない。 困ったときの検索エンジンで、ざっと検索して見つからなかったので、Opera を 英語表示に切り替えて、ファイル名を変えてやってみた。 Opera confirm 英語だと「Prevent this page from creating additional dialogues.」なので、 それで検索してみたけど、うまく見つからない。そんなことをしていたら、1つ 大きなことがわかった。Opera を再起動したら、再表示されるようになることを。 調べるまでもなく、最初に試すべきだったな。無駄な30分を使ってしまった。
■ 4月26日LinuxOther
一昨日の続き。FontForge のスクリプトでも、フォントのサブセットを作ることが できるようなので、やってみることにした。まずは、簡単なフォントの作成から。 [toyota@mygeeto tmp]$ vi ffscript0 [toyota@mygeeto tmp]$ cat ffscript0 #!/usr/bin/fontforge -lang=ff Open("ipagp.ttf") SelectAll() SelectFewer("a") DetachAndRemoveGlyphs() Save("ipagp_a.ttf") [toyota@mygeeto tmp]$ chmod a+x ffscript0 [toyota@mygeeto tmp]$ ./ffscript0 Copyright (c) 2000-2012 by George Williams. Executable based on sources from 14:57 GMT 31-Jul-2012. Library based on sources from 14:57 GMT 31-Jul-2012. Warning: Mac and Windows entries in the 'name' table differ for the Family string in the language Japanese Mac String: IPAPGothic Windows String: IPA P Warning: Mac and Windows entries in the 'name' table differ for the Fullname string in the language Japanese Mac String: IPAPGothic Windows String: IPA P [toyota@mygeeto tmp]$ ls -l ipagp_a.ttf -rw-rw-r-- 1 toyota toyota 5294 Apr 26 22:02 ipagp_a.ttf Mac 用途 Windows 用の名前が違っているとか出たが、あっさりできた。Windows の FontForge で見てみる。 FontForge 大丈夫そう。web 上の情報だと駄目らしいのだけど、2バイト以上の文字を入れて やってみた。 [toyota@mygeeto tmp]$ vi ffscript1 [toyota@mygeeto tmp]$ cat ffscript1 #!/usr/bin/fontforge -lang=ff Open("ipagp.ttf") SelectAll() SelectFewer("か") DetachAndRemoveGlyphs() Save("ipagp_ka.ttf") [toyota@mygeeto tmp]$ chmod a+x ffscript1 [toyota@mygeeto tmp]$ ./ffscript1 Copyright (c) 2000-2012 by George Williams. Executable based on sources from 14:57 GMT 31-Jul-2012. Library based on sources from 14:57 GMT 31-Jul-2012. Warning: Mac and Windows entries in the 'name' table differ for the Family string in the language Japanese Mac String: IPAPGothic Windows String: IPA P Warning: Mac and Windows entries in the 'name' table differ for the Fullname string in the language Japanese Mac String: IPAPGothic Windows String: IPA P SelectFewer: Character not found: Called from... ./ffscript1: line 5 やっぱり駄目。これができないので、別なスクリプトやプログラムで Unicode の コードポイントを出して、スクリプトの元を作っている。「か」のコードポイント U+304B を使ってやってみた。 [toyota@mygeeto tmp]$ vi ffscript2 [toyota@mygeeto tmp]$ cat ffscript2 #!/usr/bin/fontforge -lang=ff Open("ipagp.ttf") SelectAll() SelectFewer(0u304B) DetachAndRemoveGlyphs() Save("ipagp_ka.ttf") [toyota@mygeeto tmp]$ chmod a+x ffscript2 [toyota@mygeeto tmp]$ ./ffscript2 Copyright (c) 2000-2012 by George Williams. Executable based on sources from 14:57 GMT 31-Jul-2012. Library based on sources from 14:57 GMT 31-Jul-2012. Warning: Mac and Windows entries in the 'name' table differ for the Family string in the language Japanese Mac String: IPAPGothic Windows String: IPA P Warning: Mac and Windows entries in the 'name' table differ for the Fullname string in the language Japanese Mac String: IPAPGothic Windows String: IPA P 出来たフォントは、ちゃんと指定通り。 FontForge もう少しやりたいことに近づける。まず、A と B だけのフォントを作成して、 フォントを入れ替えてみる。 [toyota@mygeeto tmp]$ vi ffscript3 [toyota@mygeeto tmp]$ cat ffscript3 #!/usr/bin/fontforge -lang=ff Open("ipagp.ttf") SelectAll() SelectFewer("A", "B") DetachAndRemoveGlyphs() Select("A") Copy() Select("C") Paste() Select("B") Copy() Select("A") Paste() Select("C") Copy() Select("B") Paste() SelectNone() Select("C") DetachAndRemoveGlyphs() Save("ipagp_ab.ttf") [toyota@mygeeto tmp]$ chmod a+x ffscript3 [toyota@mygeeto tmp]$ ./ffscript3 Copyright (c) 2000-2012 by George Williams. Executable based on sources from 14:57 GMT 31-Jul-2012. Library based on sources from 14:57 GMT 31-Jul-2012. Warning: Mac and Windows entries in the 'name' table differ for the Family string in the language Japanese Mac String: IPAPGothic Windows String: IPA P Warning: Mac and Windows entries in the 'name' table differ for the Fullname string in the language Japanese Mac String: IPAPGothic Windows String: IPA P 一度 A を C に入れて、B を A に、C を B にということをやっているが、結果は うまくいった。 FontForge 文字のところに色が付いているのは何か意味があるのだろうか。このファイルを html の @font-face で指定してみたが、表示されない。できたファイルを確認 してみた。 [toyota@mygeeto tmp]$ file ipagp*.ttf ipagp.ttf: TrueType font data ipagp_ab.ttf: Spline Font Database version 3.0 TrueType フォントじゃなく、Spline Font Database になっている。何でだろうと スクリプトを見直して、最後 Save じゃなくて Generate にしてみたら。 [toyota@mygeeto tmp]$ file ipagp*.ttf ipagp.ttf: TrueType font data ipagp_ab.ttf: TrueType font data TrueType フォントになって、ブラウザでも表示されるようになった。
■ 4月27日LinuxOther
昨日の続き。メールアドレスを取得する bot 対策として、フォントを使った置換を してみる。まずは、メールアドレスで使われる文字列を拾う。RFC 的には、もっと 文字が使えるけど、ここは良く使われているメールアドレスの文字を。 -.@_0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ 言語は何でも良かったけど、C# を使って ASCII 順に並び替えて、ランダムに 並び替えるプログラムを作成。逆変換するときの文字列も用意した。 ランダム置換 うまく動作したので、さらに昨日やったような FontForge 用のスクリプトを出力 するようにした。 FontForge スクリプト出力 使ってない文字に一度保存しての入れ替えを文字数分だけ繰り返すものが出力 された。このスクリプトを実行して、できたフォントファイルの確認。 [toyota@mygeeto tmp]$ vi ffscript4 [toyota@mygeeto tmp]$ chmod a+x ffscript4 [toyota@mygeeto tmp]$ ./ffscript4 Copyright (c) 2000-2012 by George Williams. Executable based on sources from 14:57 GMT 31-Jul-2012. Library based on sources from 14:57 GMT 31-Jul-2012. Warning: Mac and Windows entries in the 'name' table differ for the Family string in the language Japanese Mac String: IPAPGothic Windows String: IPA P Warning: Mac and Windows entries in the 'name' table differ for the Fullname string in the language Japanese Mac String: IPAPGothic Windows String: IPA P [toyota@mygeeto tmp]$ ls -l ipagp_mailadr.ttf -rw-rw-r-- 1 toyota toyota 10016 Apr 27 20:23 ipagp_mailadr.ttf 10KB ぐらいだったら、画像にしてしまうのと変わらないぐらいの大きさ。この フォントを一応確認で見てみた。 FontForge 大丈夫なので、このフォントを使った html を作成してみた。 後は日本語対応したいのと、自動変換したいのと。
■ 4月28日WindowsOther
Android Studio 2.1 の Update があったので、2.1 にあげてみた。その他にも いくつか Update があって、まとめて更新。Androiid Studio のバージョンを あげたためか、それ以外の Update が影響しているのか、エミュレータの動作が だいぶ変わった。 右側に回転とか拡大させるコントローラが付いた。 エミュレータ 起動までの時間は変わらない感じだけど、動作は少し軽くなったかな。
■ 4月29日WWWNetwork
調べものなんかをしていると、たまに自分のページが出てきたりすることがある。 それは良くあることなんだけど、最近このページなんかがプロバイダのドメインで 登録されていたりして、ちょっと嫌な感じだった。
検索結果
IP アドレスもたまに変わるし、なんとかしようと言うことで Apache の設定を 見直すが、少し悩んでしまった。プロバイダののドメインに対しての VirtualHost 設定をしたところで、IP アドレスが変わるとまた同じことが起きてしまうし、かと 言って tatsuyoshi.net の VirtualHost 扱いにするのも、と思っていたら、既に VirtualHost だった。ただ、ServerName に一致しないのに何でアクセスができるの だろうかと不思議に思って Apache のドキュメントを見てみると。 https://httpd.apache.org/docs/current/ja/vhosts/name-based.html
リクエストが来ると、サーバはまず最初に にマッチする IP アドレスかどうかをチェックします。マッチすれば マッチした IP アドレスの のそれぞれのセクションの中から ServerName か ServerAlias に要求されたホスト名があるか探します。 見つかればそのサーバ用の設定を使います。マッチするバーチャルホスト が見つからなければ、マッチした IP アドレスの リストの最初にあるバーチャルホスト が使われます。

結果として、リストの最初のバーチャルホストが デフォルト の バーチャルホストになります。IP アドレスが NameVirtualHost ディレクティブにマッチした場合は、メインのサーバ の DocumentRoot は決して使われません どのバーチャルホストにもマッチしないリクエストに対して、 特別な設定をしたいのであれば、設定ファイル中の最初の コンテナにそれを記述してください。
だそうで。VirtualHost の順番を入れ替えれば良さそうだけど、何か別なところに 影響しそうな気もする。どうしたものか。
■ 4月30日NetworkOther
近所のセブンイレブンに行くと、セブンスポットの張り紙があった。ようやく、 対応したみたい。家に帰って、家から電波が入るか試してみたが、全く入らない。 家からセブンイレブンまでは、地図の距離で 30m ぐらい、高さあるので実際には もう少しあるのだろうけど。そもそもセブンイレブンの裏側なので、軽量鉄骨に 阻まれて電波も届きにくいのでしょう。wifi のアンテナを向けたいところだけど、 以前設置したアンテナポールの場所からは見通しのきかない場所だし。別な場所に もう1つアンテナを付けようか。どうしよう。
21st projects Tatsuyoshi Networks Prompt Works
by Tatsuyoshi since 2003