2013年3月18日月曜日

[Python]オプション解析処理 (optparse)

Example: test00.py
# -*- coding:utf-8 -*-
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-i", "--input", dest="inputFilename", help="Input file name", metavar="[INPUT]")
parser.add_option("-o", "--output", dest="outputFilename", help="Output file name", metavar="[OUTPUT]")
parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False, help="Make lots of noise")
(options, args) = parser.parse_args()
print "Input file name : %s" % (options.inputFilename)
print "Output file name: %s" % (options.outputFilename)
print "Verbose : %s" % (options.verbose)

# オプションがない場合は help を表示する
if options.inputFilename == None:
    parser.print_help()
    exit()
if options.outputFilename == None:
    parser.print_help()
    exit()

実行結果
  • オプションなしの場合
    $ python test00.py
    Input file name : None
    Output file name: None
    Verbose : False
    Usage: test00.py [options]
    Options:
    -h, --help show this help message and exit
    -i [INPUT], --input=[INPUT]
    Input file name
    -o [OUTPUT], --output=[OUTPUT]
    Output file name
    -v, --verbose Make lots of noise
  • help オプションを付けた場合
    $ python test00.py -h
    Usage: test00.py [options]
    Options:
    -h, --help show this help message and exit
    -i [INPUT], --input=[INPUT]
    Input file name
    -o [OUTPUT], --output=[OUTPUT]
    Output file name
    -v, --verbose Make lots of noise
  • input, output オプションを付けた場合
    $ python test00.py -i in.txt -o out.txt
    Input file name : in.txt
    Output file name: out.txt
    Verbose : False
  • verbose オプションも付けた場合
    $ python test00.py -i in.txt -o out.txt -v
    Input file name : in.txt
    Output file name: out.txt
    Verbose : True

[Python]バイナリ, 文字列, 数値変換

# -*- coding: utf-8 -*-
import struct
import binascii

# 数値 (0x64) -> 文字列 '0x64'
num = 100
print "10 進数数値 : %d" % num
print "16 進数数値 : %02x" % num
numstr = str(num)
print "10 進数文字列: %s" % numstr
numstr16 = str("%02x" % num)
print "16 進数文字列: %s" % numstr16

# 10 進数文字列 '100' -> 数値 (0x64)
print "-------------------"
numstr = "100"
print "10 進数文字列: %s" % numstr
num = int(numstr)
print "10 進数数値 : %d" % num

# 16 進数文字列 '64' -> 数値 (0x64)
print "-------------------"
numstr16 = "64"
print "16 進数文字列: %s" % numstr16
num = int(numstr16, 16)
print "16 進数数値 : %02x" % num

# バイナリ (00000064) -> 数値 (0x64)
print "-------------------"
bin = "\x00\x00\x00\x64"
print "Binary : %s" % binascii.b2a_hex(bin)
d = struct.unpack('!L', bin)
print "16 進数数値 : %08x" % d
print "10 進数数値 : %d" % d

# 数値 (0x64) -> バイナリ (00000064)
print "-------------------"
d = 0x64
print "16 進数数値 : %08x" % d
bin = struct.pack('!L', d)
print "Binary : %s" % binascii.b2a_hex(bin)

# 16 進数文字列 '64' -> バイナリ (00000064)
print "-------------------"
numstr16 = "64"
print "16 進数文字列: %s" % numstr16
d = int(numstr16, 16)
bin = struct.pack('!L', d)
print "Binary : %s" % binascii.b2a_hex(bin)

実行結果
$ python number.py
10 進数数値 : 100
16 進数数値 : 64
10 進数文字列: 100
16 進数文字列: 64
-------------------
10 進数文字列: 100
10 進数数値 : 100
-------------------
16 進数文字列: 64
16 進数数値 : 64
-------------------
Binary : 00000064
16 進数数値 : 00000064
10 進数数値 : 100
-------------------
16 進数数値 : 00000064
Binary : 00000064
-------------------
16 進数文字列: 64
Binary : 00000064

[Python]日本語のコメントを入力する

以下のスクリプトを実行するとエラーとなる
# Hello world プログラム
print "Hello, world"

実行結果
$ python japaneseError.py
File "japaneseError.py", line 1
SyntaxError: Non-ASCII character '\x83' in file japaneseError.py on line 1, but
no encoding declared; see http://www.python.org/peps/pep-0263.html for details

UTF-8 で記述されていることを先頭で明記すれば日本語コメントも入力できるようになる
# -*- coding: utf-8 -*-
# Hello world プログラム
print "Hello, world"

実行結果
ython japaneseError.py
Hello, world

[Python]バイナリファイル読み込み

import sys
import binascii
import struct

if len(sys.argv) != 2:
    print "%s <input file>" % sys.argv[0]
    exit()

print "Input file: %s" % sys.argv[1]
fdInput = open(sys.argv[1], 'rb')

### HEX ###
print "HEX"
i = 0
while 1:
    b = fdInput.read(1)
    if b == "":
        break
    print binascii.b2a_hex(b),
    if ((i + 1) % 16) == 0:
        print "" # Line break
    i = i + 1

print ""
print ""

### Character ###
fdInput.seek(0)
print "Character"
while 1:
    b = fdInput.read(1)
    if b == "":
        break
    print "%c" % b,

print ""
print ""

### 16 byte String data ###
fdInput.seek(0)
b = fdInput.read(16)
print "%s" % b
print ""

### 4 byte unsigned char data ###
i = 0
while 1:
    if i >= 4:
        break
    i = i + 1
    b = fdInput.read(1)
    print binascii.b2a_hex(b),

print ""
print ""

### 2 byte unsigned short data ###
b = fdInput.read(2)
s = struct.unpack('!H', b) # Network byte order (Big endian)
print "0x%04x" % s,
print " = %d" % s
print ""

### 4 byte unsigned long data ###
b = fdInput.read(4)
l = struct.unpack('!L', b)
print "0x%08x" % l,
print " = %d" % l
fdInput.close()

実行結果
> python binFile.py sample.bin
Input file: sample.bin
HEX
48 45 4c 4c 4f 00 00 00 00 00 00 00 00 00 00 00
01 02 03 04 01 f4 00 01 5f 90
Character
H E L L O
HELLO
01 02 03 04
0x01f4 = 500
0x00015f90 = 90000

[Python]ファイル操作

  • 入力ファイルから 1 行ずつ読み込み、"Hello" を "Good morning" に置き換える
  • print line, と最後にコンマが付いているのは print で改行をしないため。読み込んだ line には改行コードがすでに付いている
import sys

if len(sys.argv) != 3:
    print "%s <input file> <output file>" % sys.argv[0]
    exit()

print "Input file: %s" % sys.argv[1]
print "Output file: %s" % sys.argv[2]
fdInput = open(sys.argv[1], 'r')
fdOutput = open(sys.argv[2], 'w')

for line in fdInput:
    print line,
    line = line.replace("Hello", "Good morning")
    fdOutput.write(line)

fdInput.close()
fdOutput.close()

実行結果
$ python fileOperation.py hello.txt goodmorning.txt
Input file: hello.txt
Output file: goodmorning.txt
Hello, world
Hello, hogehoge
hello.txt
Hello, world
Hello, hogehoge
goodmorning.txt
Good morning, world
Good morning, hogehoge

[Python]コマンドライン引数

  • コマンドラインで引数を渡す場合は sys モジュールを使用する
  • 引数の数を確認して不適合の場合は exit() でスクリプトを中断できる
import sys

print "len(sys.argv)=%d sys.argv=%s" % (len(sys.argv), sys.argv)
if len(sys.argv) != 3:
    print "%s <1st arg> <2nd arg>" % sys.argv[0]
    exit()

print "1st argument: %s" % sys.argv[1]
print "2nd argument: %s" % sys.argv[2]

実行結果
$ python commandArg.py
len(sys.argv)=1 sys.argv=['commandArg.py']
commandArg.py <1st arg> <2nd arg>

$ python commandArg.py aaa
len(sys.argv)=2 sys.argv=['commandArg.py', 'aaa']
commandArg.py <1st arg> <2nd arg>

$ python commandArg.py aaa bbb
len(sys.argv)=3 sys.argv=['commandArg.py', 'aaa', 'bbb']
1st argument: aaa
2nd argument: bbb

$ python commandArg.py aaa bbb ccc
len(sys.argv)=4 sys.argv=['commandArg.py', 'aaa', 'bbb', 'ccc']
commandArg.py <1st arg> <2nd arg>

[MeCab]test.py 文字化け対策

Windows のコマンドプロンプトでは UTF-8 文字をそのまま表示することができない。そこで Python で扱いやすいユニコード文字列(文字列定義の先頭に u を付ける)で文字列を定義し、MeCab に渡すところで UTF-8 に変換、出力時にユニコード文字列に戻すようにする。

元ソース
#!/usr/bin/python
# -*- coding: utf-8 -*-

import MeCab
import sys
import string

sentence = "太郎はこの本を二郎を見た女性に渡した。"

try:

    print MeCab.VERSION

    t = MeCab.Tagger (" ".join(sys.argv))

    print t.parse(sentence)
(以下略)
出力結果
> python test.py~
0.993
螟ェ驛・蜷崎ゥ・蝗コ譛牙錐隧・莠コ蜷・蜷・*,*,螟ェ驛・繧ソ繝ュ繧ヲ,繧ソ繝ュ繝シ
縺ッ     蜉ゥ隧・菫ょ勧隧・*,*,*,*,縺ッ,繝・繝ッ
縺薙・  騾」菴楢ゥ・*,*,*,*,*,縺薙・,繧ウ繝・繧ウ繝・
譛ャ     蜷崎ゥ・荳?闊ャ,*,*,*,*,譛ャ,繝帙Φ,繝帙Φ
繧・蜉ゥ隧・譬シ蜉ゥ隧・荳?闊ャ,*,*,*,繧・繝イ,繝イ
莠・蜷崎ゥ・謨ー,*,*,*,*,莠・繝・繝・
驛・蜷崎ゥ・荳?闊ャ,*,*,*,*,驛・繝ュ繧ヲ,繝ュ繝シ
繧・蜉ゥ隧・譬シ蜉ゥ隧・荳?闊ャ,*,*,*,繧・繝イ,繝イ
隕・蜍戊ゥ・閾ェ遶・*,*,荳?谿オ,騾」逕ィ蠖「,隕九k,繝・繝・
縺・蜉ゥ蜍戊ゥ・*,*,*,迚ケ谿翫・繧ソ,蝓コ譛ャ蠖「,縺・繧ソ,繧ソ
螂ウ諤ァ  蜷崎ゥ・荳?闊ャ,*,*,*,*,螂ウ諤ァ,繧ク繝ァ繧サ繧、,繧ク繝ァ繧サ繧、
縺ォ     蜉ゥ隧・譬シ蜉ゥ隧・荳?闊ャ,*,*,*,縺ォ,繝・繝・
貂。縺・蜍戊ゥ・閾ェ遶・*,*,莠疲ョオ繝サ繧オ陦・騾」逕ィ蠖「,貂。縺・繝ッ繧ソ繧キ,繝ッ繧ソ繧キ
縺・蜉ゥ蜍戊ゥ・*,*,*,迚ケ谿翫・繧ソ,蝓コ譛ャ蠖「,縺・繧ソ,繧ソ
縲・險伜捷,蜿・轤ケ,*,*,*,*,縲・縲・縲・
EOS

        BOS/EOS,*,*,*,*,*,*,*,*
螟ェ驛・ 蜷崎ゥ・蝗コ譛牙錐隧・莠コ蜷・蜷・*,*,螟ェ驛・繧ソ繝ュ繧ヲ,繧ソ繝ュ繝シ
縺ッ     蜉ゥ隧・菫ょ勧隧・*,*,*,*,縺ッ,繝・繝ッ
縺薙・  騾」菴楢ゥ・*,*,*,*,*,縺薙・,繧ウ繝・繧ウ繝
譛ャ     蜷崎ゥ・荳?闊ャ,*,*,*,*,譛ャ,繝帙Φ,繝帙Φ
繧・    蜉ゥ隧・譬シ蜉ゥ隧・荳?闊ャ,*,*,*,繧・繝イ,繝イ
莠・    蜷崎ゥ・謨ー,*,*,*,*,莠・繝・繝
驛・    蜷崎ゥ・荳?闊ャ,*,*,*,*,驛・繝ュ繧ヲ,繝ュ繝シ
繧・    蜉ゥ隧・譬シ蜉ゥ隧・荳?闊ャ,*,*,*,繧・繝イ,繝イ
隕・    蜍戊ゥ・閾ェ遶・*,*,荳?谿オ,騾」逕ィ蠖「,隕九k,繝・繝
縺・    蜉ゥ蜍戊ゥ・*,*,*,迚ケ谿翫・繧ソ,蝓コ譛ャ蠖「,縺・繧ソ,繧ソ
螂ウ諤ァ  蜷崎ゥ・荳?闊ャ,*,*,*,*,螂ウ諤ァ,繧ク繝ァ繧サ繧、,繧ク繝ァ繧サ繧、
縺ォ     蜉ゥ隧・譬シ蜉ゥ隧・荳?闊ャ,*,*,*,縺ォ,繝・繝
貂。縺・ 蜍戊ゥ・閾ェ遶・*,*,莠疲ョオ繝サ繧オ陦・騾」逕ィ蠖「,貂。縺・繝ッ繧ソ繧キ,繝ッ繧ソ繧キ
縺・    蜉ゥ蜍戊ゥ・*,*,*,迚ケ谿翫・繧ソ,蝓コ譛ャ蠖「,縺・繧ソ,繧ソ
縲・    險伜捷,蜿・轤ケ,*,*,*,*,縲・縲・縲
        BOS/EOS,*,*,*,*,*,*,*,*
EOS
EOS
filename: C:\Program Files\Develop\MeCab\etc\..\dic\ipadic\sys.dic
charset: UTF-8
size: 392126
type: 0
lsize: 1316
rsize: 1316
version: 102
編集後
#!/usr/bin/python
# -*- coding: utf-8 -*-

import MeCab
import sys
import string
import codecs

sample = u"太郎はこの本を二郎を見た女性に渡した。"
sentence = sample.encode('utf-8')

print sample

try:

    print MeCab.VERSION

    t = MeCab.Tagger (" ".join(sys.argv))

    print t.parse(sentence)
    print t.parse(sentence).decode('utf-8')
出力結果
> python test.py
太郎はこの本を二郎を見た女性に渡した。
0.993
螟ェ驛・蜷崎ゥ・蝗コ譛牙錐隧・莠コ蜷・蜷・*,*,螟ェ驛・繧ソ繝ュ繧ヲ,繧ソ繝ュ繝シ
縺ッ     蜉ゥ隧・菫ょ勧隧・*,*,*,*,縺ッ,繝・繝ッ
縺薙・  騾」菴楢ゥ・*,*,*,*,*,縺薙・,繧ウ繝・繧ウ繝・
譛ャ     蜷崎ゥ・荳?闊ャ,*,*,*,*,譛ャ,繝帙Φ,繝帙Φ
繧・蜉ゥ隧・譬シ蜉ゥ隧・荳?闊ャ,*,*,*,繧・繝イ,繝イ
莠・蜷崎ゥ・謨ー,*,*,*,*,莠・繝・繝・
驛・蜷崎ゥ・荳?闊ャ,*,*,*,*,驛・繝ュ繧ヲ,繝ュ繝シ
繧・蜉ゥ隧・譬シ蜉ゥ隧・荳?闊ャ,*,*,*,繧・繝イ,繝イ
隕・蜍戊ゥ・閾ェ遶・*,*,荳?谿オ,騾」逕ィ蠖「,隕九k,繝・繝・
縺・蜉ゥ蜍戊ゥ・*,*,*,迚ケ谿翫・繧ソ,蝓コ譛ャ蠖「,縺・繧ソ,繧ソ
螂ウ諤ァ  蜷崎ゥ・荳?闊ャ,*,*,*,*,螂ウ諤ァ,繧ク繝ァ繧サ繧、,繧ク繝ァ繧サ繧、
縺ォ     蜉ゥ隧・譬シ蜉ゥ隧・荳?闊ャ,*,*,*,縺ォ,繝・繝・
貂。縺・蜍戊ゥ・閾ェ遶・*,*,莠疲ョオ繝サ繧オ陦・騾」逕ィ蠖「,貂。縺・繝ッ繧ソ繧キ,繝ッ繧ソ繧キ
縺・蜉ゥ蜍戊ゥ・*,*,*,迚ケ谿翫・繧ソ,蝓コ譛ャ蠖「,縺・繧ソ,繧ソ
縲・險伜捷,蜿・轤ケ,*,*,*,*,縲・縲・縲・
EOS

太郎    名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
この    連体詞,*,*,*,*,*,この,コノ,コノ
本      名詞,一般,*,*,*,*,本,ホン,ホン
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
二      名詞,数,*,*,*,*,二,ニ,ニ
郎      名詞,一般,*,*,*,*,郎,ロウ,ロー
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
見      動詞,自立,*,*,一段,連用形,見る,ミ,ミ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
女性    名詞,一般,*,*,*,*,女性,ジョセイ,ジョセイ
に      助詞,格助詞,一般,*,*,*,に,ニ,ニ
渡し    動詞,自立,*,*,五段・サ行,連用形,渡す,ワタシ,ワタシ
た      助動詞,*,*,*,特殊・タ,基本形,た,タ,タ
。      記号,句点,*,*,*,*,。,。,。
EOS

        BOS/EOS,*,*,*,*,*,*,*,*
螟ェ驛・ 蜷崎ゥ・蝗コ譛牙錐隧・莠コ蜷・蜷・*,*,螟ェ驛・繧ソ繝ュ繧ヲ,繧ソ繝ュ繝シ
縺ッ     蜉ゥ隧・菫ょ勧隧・*,*,*,*,縺ッ,繝・繝ッ
縺薙・  騾」菴楢ゥ・*,*,*,*,*,縺薙・,繧ウ繝・繧ウ繝
譛ャ     蜷崎ゥ・荳?闊ャ,*,*,*,*,譛ャ,繝帙Φ,繝帙Φ
繧・    蜉ゥ隧・譬シ蜉ゥ隧・荳?闊ャ,*,*,*,繧・繝イ,繝イ
莠・    蜷崎ゥ・謨ー,*,*,*,*,莠・繝・繝
驛・    蜷崎ゥ・荳?闊ャ,*,*,*,*,驛・繝ュ繧ヲ,繝ュ繝シ
繧・    蜉ゥ隧・譬シ蜉ゥ隧・荳?闊ャ,*,*,*,繧・繝イ,繝イ
隕・    蜍戊ゥ・閾ェ遶・*,*,荳?谿オ,騾」逕ィ蠖「,隕九k,繝・繝
縺・    蜉ゥ蜍戊ゥ・*,*,*,迚ケ谿翫・繧ソ,蝓コ譛ャ蠖「,縺・繧ソ,繧ソ
螂ウ諤ァ  蜷崎ゥ・荳?闊ャ,*,*,*,*,螂ウ諤ァ,繧ク繝ァ繧サ繧、,繧ク繝ァ繧サ繧、
縺ォ     蜉ゥ隧・譬シ蜉ゥ隧・荳?闊ャ,*,*,*,縺ォ,繝・繝
貂。縺・ 蜍戊ゥ・閾ェ遶・*,*,莠疲ョオ繝サ繧オ陦・騾」逕ィ蠖「,貂。縺・繝ッ繧ソ繧キ,繝ッ繧ソ繧キ
縺・    蜉ゥ蜍戊ゥ・*,*,*,迚ケ谿翫・繧ソ,蝓コ譛ャ蠖「,縺・繧ソ,繧ソ
縲・    險伜捷,蜿・轤ケ,*,*,*,*,縲・縲・縲
        BOS/EOS,*,*,*,*,*,*,*,*
EOS
EOS
filename: C:\Program Files\Develop\MeCab\etc\..\dic\ipadic\sys.dic
charset: UTF-8
size: 392126
type: 0
lsize: 1316
rsize: 1316
version: 102

[MeCab]動作確認

  1. MeCab をインストールしたフォルダに移動する
  2. bin に移動する
  3. 次のテキストファイルを作成する
test.txt
こんにちは。今日もいい天気ですね。
コマンド
mecab.exe test.txt -o out.txt
出力結果 (out.txt)
こんにちは   感動詞,*,*,*,*,*,こんにちは,コンニチハ,コンニチワ
。       記号,句点,*,*,*,*,。,。,。
今日      名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
も       助詞,係助詞,*,*,*,*,も,モ,モ
いい      形容詞,自立,*,*,形容詞・イイ,基本形,いい,イイ,イイ
天気      名詞,一般,*,*,*,*,天気,テンキ,テンキ
です      助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
ね       助詞,終助詞,*,*,*,*,ね,ネ,ネ
。       記号,句点,*,*,*,*,。,。,。
EOS
わかち書き
mecab.exe test.txt -o out_wakati.txt -O wakati
出力結果 (out_wakati.txt)
こんにちは 。 今日 も いい 天気 です ね 。
ヨミ
mecab.exe test.txt -o out_yomi.txt -O yomi
出力結果 (out_yomi.txt)
コンニチハ。キョウモイイテンキデスネ。

[MeCab]MeCab を MinGW でビルド (断念)

Python: 2.7.2.5 (Active Python)
  1. MinGW からMinGW をダウンロードしてインストールする
    MSYS も必要なのでパッケージはすべて選択しておく
  2. 環境変数を設定
    • MINGW_HOME: (MinGW のインストール先)
    • MSYS_HOME: (MSYSのインストール先)
    • GCC_VER: (GCC バージョン, MinGW インストール先の libexec\gcc\mingw32\ 下にあるフォルダ名)
    • GCC_EXEC_PREFIX: %MINGW_HOME%\libexec\gcc\ (最後の \ を忘れずに)
    • PATH: %MSYS_HOME%\bin;%MINGW_HOME%\bin;%MINGW_HOME%\libexec\gcc\mingw32\%GCC_VER%
    • C_INCLUDE_PATH: %MINGW_HOME%\include;%MINGW_HOME%\lib\gcc\mingw32\%GCC_VER%\include;(Python インストール先)\include
    • CPLUS_INCLUDE_PATH: %C_INCLUE_PATH%;%MINGW_HOME%\include\c++\%GCC_VER%;%MINGW_HOME%\include\c++\%GCC_VER%\mingw32
    • LIBRARY_PATH: %MINGW_HOME%\lib;%MINGW_HOME%\lib\gcc\mingw32\%GCC_VER%;(Python インストール先)\libs
  3. MeCab から必要なパッケージをダウンロードする
    • MeCab ソースコード (mecab-0.993.tar.gz)
    • MeCab IPA 辞書 (mecab-ipadic-2.7.0-20070801.tar.gz)
    • Python バインディング (mecab-python-0.993.tar.gz)
  4. 3. でダウンロードしたファイルを展開する
  5. mecab-0.993 に入り configure を実行する
    > cd mecab-0.993
    > sh ./configure
  6. make を実行するとエラーになる
Note
configure をしたところで liblto_plugin-0.dll が見つからないとエラー表示されえることがある。
その場合は GCC_EXEC_PREFIX の設定を再確認する。これは gcc 実行時にオプション iprefix の引数として渡される。

[MeCab]Python バインディングインストール (Windows)

  1. Visual Studio 2008 Express Edition (Visual C++ 2008 Express Edition) をインストールする
  2. MeCab から必要なパッケージをダウンロードする
    • Windows 用バイナリ (mecab-0.993.exe)
    • Python バインディング (mecab-python-0.993.tar.gz)
  3. mecab-0.993.exe を実行して、インストールする
  4. mecab インストール先を PATH に追加する
  5. mecab-python-0.993.tar.gz を展開する
  6. mecab-python-0.993 フォルダに移動し setup.py を実行
    > python setup.py build
    Traceback (most recent call last):
      File "setup.py", line 13, in <module>
        version = cmd1("mecab-config --version"),
      File "setup.py", line 7, in cmd1
        return os.popen(str).readlines()[0][:-1]
    IndexError: list index out of range
  7. mecab-config がないとエラーが表示される
  8. setup.py を編集して mecab のバージョンとインストール先を指定する
    編集前
    setup(name = "mecab-python",
            version = cmd1("mecab-config --version"),
            py_modules=["MeCab"],
            ext_modules = [
                    Extension("_MeCab",
                        ["MeCab_wrap.cxx",],
                        include_dirs=cmd2("mecab-config --inc-dir"),
                        library_dirs=cmd2("mecab-config --libs-only-L"),
                        libraries=cmd2("mecab-config --libs-only-l"))
                        ])
    編集後
    setup(name = "mecab-python",
            version = '0.993',
            py_modules=["MeCab"],
            ext_modules = [
                    Extension("_MeCab",
                            ["MeCab_wrap.cxx",],
                            include_dirs=[r"C:\Program Files\Develop\MeCab\sdk"],
                            library_dirs=[r"C:\Program Files\Develop\MeCab\sdk"],
                            libraries=['libmecab'])
                            ])
  9. setup.py 実行
    > python setup.py build
    > python setup.py install
  10. test.py を実行しエラーが出ないことを確認(文字化けは発生する)

[MeCab]Windows へのインストール

  1. MeCab から Windows 用バイナリ (mecab-0.993.exe) をダウンロードする
  2. ダウンロードしたファイルを実行してインストールする

2013年3月15日金曜日

XPDF 使い方

pdffonts
PDF font analyzer
> pdffonts.exe test.pdf
name                                 type              emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
BAAAAA+MS-PMincho                    TrueType          yes yes yes     24  0
CAAAAA+MS-PGothic                    TrueType          yes yes yes     19  0
DAAAAA+Meiryo                        TrueType          yes yes yes      9  0
EAAAAA+TimesNewRomanPSMT             TrueType          yes yes yes     34  0
FAAAAA+ArialMT                       TrueType          yes yes yes     14  0
GAAAAA+Century                       TrueType          yes yes yes     29  0
pdfinfo
PDF document information extractor
> pdfinfo test.pdf
Creator:        Writer
Producer:       LibreOffice 4.0
CreationDate:   03/14/13 08:26:23
Tagged:         no
Form:           none
Pages:          1
Encrypted:      no
Page size:      595 x 842 pts (A4)
File size:      53667 bytes
Optimized:      no
PDF version:    1.4
pdftoppm
PDF to PPM (Portable Pixmap) converter

pdftops
PDF to PostScript converter

pdftotext
PDF to text converter

XPDF インストール

  1. Xpdf: Download から Windows precompiled binary をダウンロード
  2. ダウンロードしたファイルを解凍する
  3. xpdfbin-win-3.03\xpdfbin-win-3.03\bin32 にある exe を実行する

[Windows]Windows の共有リソースに任意のアカウントでアクセスする

  1. ログイン成功
    > net use \\server\share /user:user1 password1
    コマンドは正常に終了しました。
  2. 同じユーザー名, 違うパスワードでアクセス
    > net use \\server\share /user:user1 hoge
    システム エラー 1219 が発生しました。
    
    同じユーザーによる、サーバーまたは共有リソースへの複数のユーザー名での複数の接続は許可されません。サーバ
    ーまたは共有リソースへの以前の接続をすべて切断してから、再試行してください。
  3. 一旦切断
    > net use \\server\share /delete
    \\server\share が削除されました。
  4. 同じユーザー名, 違うパスワードで再度アクセス → 認証エラーになる
    > net use \\server\share /user:user1 hoge
    システム エラー 1326 が発生しました。
    
    ログオン失敗: ユーザー名を認識できないか、またはパスワードが間違っています。
  5. ユーザーがアクセス権のあるグループに登録されていない場合
    > net use \\server\share /user:user2 password2
    システム エラー 86 が発生しました。
    
    指定されたネットワーク パスワードが間違っています。

2013年3月10日日曜日

[AVR]PORT から出力して LED を点灯

回路図

ブレッドボード上に配置 (Fritzing で設計)

ソースコード
led.c
#include <avr/io.h>

int main(void)
{
    /* DDRB (Port B Direction Register) で PB3 を Output に設定 */
    DDRB = 0x08;

    while (1) {
        /* PORTB (Port B Data Register) で PB3 を On にする */
        PORTB = 0x08;
    }

    return 0;
}
Makefile
PROJECT = led
SOURCES = led.c
CC = avr-gcc
OBJCOPY = avr-objcopy
MMCU = attiny2313

CFLAGS = -mmcu=$(MMCU) -Wall

$(PROJECT).hex: $(PROJECT).elf
    $(OBJCOPY) -j .text -O ihex $^ $@
$(PROJECT).elf: $(SOURCES)
    $(CC) $(CFLAGS) -I./ -o $@ $^

clean:
    rm -f $(PROJECT).elf
    rm -f $(PROJECT).hex
ブレッドボード上に実装

2013年3月9日土曜日

[AVR]AVRWRT の使い方

共立電子の USB 接続型 AVR ライター (AVRWRT) と ATtiny2313 との接続方法 接続図
Table: 線対応
対応 PIN
1:RESET
10:GND
17:MOSI
18:MISO
19:USCK
20:VCC
ATtiny2313 側の拡大図

AVRWRT 側の拡大図

[Warning] AVRWRT からの電源供給
AVRWRT から電源供給しない (AVR に別系統から電源が供給されている場合) は、AVRWRT の左上にあるジャンパーピンを外す

[Apache]WebDAV ディレクトリ下をブラウザから見られるようにする

webdav ディレクトリの設定にある Options に Indexes を追加する
Alias /webdav "/var/www/webdav/"
<IfModule mod_dav_fs.c>
 <Location /webdav>
 DAV On
 Options Indexes

 AuthType Basic
 AuthName "Login WebDAV"
 AuthUserFile "/var/www/secure/webdav/.htpasswd"
 Require valid-user

 Order deny,allow
 Deny from all
 Allow from all
 </Location>
 DAVMinTimeout 600

 # Location of the WebDAV lock database.
 DAVLockDB /var/lib/dav/lockdb
</IfModule>

[Apache]WebDAV 設定

  1. /etc/httpd/conf/httpd.conf で WebDAV モジュールが有効になっているか確認する
    /etc/httpd/conf/httpd.conf
    LoadModule dav_module modules/mod_dav.so
    LoadModule dav_fs_module /modules/mod_dav_fs.so
  2. WebDAV の設定をする
    /etc/httpd/conf/httpd.conf
    #
    # WebDAV module configuration section.
    #
    Alias /webdav "/var/www/webdav/"
    <IfModule mod_dav_fs.c>
     <Location /webdav>
     DAV On
     Options None
    
     AuthType Basic
     AuthName "Login WebDAV"
     AuthUserFile "/var/www/secure/webdav/.htpasswd"
     Require valid-user
    
     Order deny,allow
     Deny from all
     Allow from all
     </Location>
     DAVMinTimeout 600
    
     # Location of the WebDAV lock database.
     DAVLockDB /var/lib/dav/lockdb
    </IfModule>
  3. ユーザ認証ファイルの作成
    # mkdir /var/www/secure
    # mkdir /var/www/secure/webdav
    # htpasswd -c /var/www/secure/webdav/.htpasswd user
  4. WebDAV の動作確認には DAV Explorer (http://www.davexplorer.org/) を使うとよい
    Windows の マイネットワーク → ネットワークプレースでは反応が鈍いので動作確認がし難い
  5. /var/www/webdav の所有権を apache:apache に変更する
    # chown apache:apache /var/www/webdav
  6. ファイルの書き込み時に SELinux が拒否してくる
    SELinux prevented httpd reading and writing access to http files.
    SELinux を強制的に無効にしている場合にはファイルの書き込みはできる。SELinux を無効にするには次のコマンドを実行
    # setenfoce 0
    SELinux を有効にしたままで WebDAV ディレクトリにアクセスできるようにする方法は調査中

[Apache]Client 証明書要求

  • conf.d/ssl.conf の以下の行に付いているコメントを外す
    conf.d/ssl.conf
    SSLVerifyClient require
  • CA 登録されていない client 証明書でも受け入れる場合は次のようにする
    conf.d/ssl.conf
    SSLVerifyClient optional_no_ca

[Apache]SSL 設定

Cipher suite
使用する Cipher suite は /etc/httpd/conf.d/ssl.conf の以下の箇所で指定する。

/etc/httpd/conf.d/ssl.conf
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW

SSLCipherSuite 確認
SSLCipherSuite に指定している引数は openssl コマンドで確認できる。
$ openssl ciphers -v 'ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW'
DHE-RSA-CAMELLIA256-SHA SSLv3 Kx=DH Au=RSA Enc=Camellia(256) Mac=SHA1
DHE-DSS-CAMELLIA256-SHA SSLv3 Kx=DH Au=DSS Enc=Camellia(256) Mac=SHA1
CAMELLIA256-SHA SSLv3 Kx=RSA Au=RSA Enc=Camellia(256) Mac=SHA1
DHE-RSA-CAMELLIA128-SHA SSLv3 Kx=DH Au=RSA Enc=Camellia(128) Mac=SHA1
DHE-DSS-CAMELLIA128-SHA SSLv3 Kx=DH Au=DSS Enc=Camellia(128) Mac=SHA1
CAMELLIA128-SHA SSLv3 Kx=RSA Au=RSA Enc=Camellia(128) Mac=SHA1
DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1
DHE-DSS-AES256-SHA SSLv3 Kx=DH Au=DSS Enc=AES(256) Mac=SHA1
AES256-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA1
DHE-RSA-AES128-SHA SSLv3 Kx=DH Au=RSA Enc=AES(128) Mac=SHA1
DHE-DSS-AES128-SHA SSLv3 Kx=DH Au=DSS Enc=AES(128) Mac=SHA1
AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1
KRB5-DES-CBC3-MD5 SSLv3 Kx=KRB5 Au=KRB5 Enc=3DES(168) Mac=MD5
KRB5-DES-CBC3-SHA SSLv3 Kx=KRB5 Au=KRB5 Enc=3DES(168) Mac=SHA1
EDH-RSA-DES-CBC3-SHA SSLv3 Kx=DH Au=RSA Enc=3DES(168) Mac=SHA1
EDH-DSS-DES-CBC3-SHA SSLv3 Kx=DH Au=DSS Enc=3DES(168) Mac=SHA1
DES-CBC3-SHA SSLv3 Kx=RSA Au=RSA Enc=3DES(168) Mac=SHA1
DHE-RSA-SEED-SHA SSLv3 Kx=DH Au=RSA Enc=SEED(128) Mac=SHA1
DHE-DSS-SEED-SHA SSLv3 Kx=DH Au=DSS Enc=SEED(128) Mac=SHA1
SEED-SHA SSLv3 Kx=RSA Au=RSA Enc=SEED(128) Mac=SHA1
KRB5-RC4-MD5 SSLv3 Kx=KRB5 Au=KRB5 Enc=RC4(128) Mac=MD5
KRB5-RC4-SHA SSLv3 Kx=KRB5 Au=KRB5 Enc=RC4(128) Mac=SHA1
RC4-SHA SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=SHA1
RC4-MD5 SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=MD5
KRB5-DES-CBC-MD5 SSLv3 Kx=KRB5 Au=KRB5 Enc=DES(56) Mac=MD5
KRB5-DES-CBC-SHA SSLv3 Kx=KRB5 Au=KRB5 Enc=DES(56) Mac=SHA1
EDH-RSA-DES-CBC-SHA SSLv3 Kx=DH Au=RSA Enc=DES(56) Mac=SHA1
EDH-DSS-DES-CBC-SHA SSLv3 Kx=DH Au=DSS Enc=DES(56) Mac=SHA1
DES-CBC-SHA SSLv3 Kx=RSA Au=RSA Enc=DES(56) Mac=SHA1
この場合 IE8 で接続すると Client Hello (IE8 → Apache) の Cipher Suites で以下のものが指定される
TLS_RSA_WITH_RC4_128_MD5 (0x0004)
TLS_RSA_WITH_RC4_128_SHA (0x0005)
TLS_RSA_WITH_3DES_EDE_CBC_SHA (0x000a)
TLS_RSA_WITH_WITH_DES_CBC_SHA (0x0009)
TLS_RSA_EXPORT1024_WITH_RC4_56_SHA (0x0064)
TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA (0x0002)
TLS_RSA_EXPORT_WITH_RC4_40_MD5 (0x0003)
TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 (0x0006)
TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA (0x0013)
TLS_DHE_DSS_WITH_DES_CBC_SHA (0x0012)
TLS_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA (0x0063)
それに対する Apache の応答 Server Hello (Apache → IE8) の Cipher Suite は次のようになる
TLS_RSA_WITH_RC4_128_MD5 (0x0004)

MD5 サポートなしに設定する
MD5 を使用しない設定にする場合は /etc/httpd/conf.d/ssl.conf で次のように指定する

/etc/httpd/conf.d/ssl.conf
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:!MD5:RC4+RSA:+HIGH:+MEDIUM:+LOW
$ openssl ciphers -v 'ALL:!ADH:!EXPORT:!SSLv2:!MD5:RC4+RSA:+HIGH:+MEDIUM:+LOW'
DHE-RSA-CAMELLIA256-SHA SSLv3 Kx=DH Au=RSA Enc=Camellia(256) Mac=SHA1
DHE-DSS-CAMELLIA256-SHA SSLv3 Kx=DH Au=DSS Enc=Camellia(256) Mac=SHA1
CAMELLIA256-SHA SSLv3 Kx=RSA Au=RSA Enc=Camellia(256) Mac=SHA1
DHE-RSA-CAMELLIA128-SHA SSLv3 Kx=DH Au=RSA Enc=Camellia(128) Mac=SHA1
DHE-DSS-CAMELLIA128-SHA SSLv3 Kx=DH Au=DSS Enc=Camellia(128) Mac=SHA1
CAMELLIA128-SHA SSLv3 Kx=RSA Au=RSA Enc=Camellia(128) Mac=SHA1
DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1
DHE-DSS-AES256-SHA SSLv3 Kx=DH Au=DSS Enc=AES(256) Mac=SHA1
AES256-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA1
DHE-RSA-AES128-SHA SSLv3 Kx=DH Au=RSA Enc=AES(128) Mac=SHA1
DHE-DSS-AES128-SHA SSLv3 Kx=DH Au=DSS Enc=AES(128) Mac=SHA1
AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1
KRB5-DES-CBC3-SHA SSLv3 Kx=KRB5 Au=KRB5 Enc=3DES(168) Mac=SHA1
EDH-RSA-DES-CBC3-SHA SSLv3 Kx=DH Au=RSA Enc=3DES(168) Mac=SHA1
EDH-DSS-DES-CBC3-SHA SSLv3 Kx=DH Au=DSS Enc=3DES(168) Mac=SHA1
DES-CBC3-SHA SSLv3 Kx=RSA Au=RSA Enc=3DES(168) Mac=SHA1
DHE-RSA-SEED-SHA SSLv3 Kx=DH Au=RSA Enc=SEED(128) Mac=SHA1
DHE-DSS-SEED-SHA SSLv3 Kx=DH Au=DSS Enc=SEED(128) Mac=SHA1
SEED-SHA SSLv3 Kx=RSA Au=RSA Enc=SEED(128) Mac=SHA1
KRB5-RC4-SHA SSLv3 Kx=KRB5 Au=KRB5 Enc=RC4(128) Mac=SHA1
RC4-SHA SSLv3 Kx=RSA Au=RSA Enc=RC4(128) Mac=SHA1
KRB5-DES-CBC-SHA SSLv3 Kx=KRB5 Au=KRB5 Enc=DES(56) Mac=SHA1
EDH-RSA-DES-CBC-SHA SSLv3 Kx=DH Au=RSA Enc=DES(56) Mac=SHA1
EDH-DSS-DES-CBC-SHA SSLv3 Kx=DH Au=DSS Enc=DES(56) Mac=SHA1
DES-CBC-SHA SSLv3 Kx=RSA Au=RSA Enc=DES(56) Mac=SHA1
これで IE8 から Apache に接続すると Server Hello (Apache → IE8) の Cipher Suite は次のようになる
TLS_RSA_WITH_RC4_128_SHA

[Apache]SSL インストール

  1. mod_ssl をインストールする
    # yum install mod_ssl
  2. httpd 再起動
    # /etc/init.d/httpd restart
    Stopping httpd: [ OK ]
    Starting httpd: [ OK ]

[Apache]CGI をユーザーディレクトリで実行可能にする (未完了)

  1. httpd.conf 編集
    # user directory cgi
    ScriptAlias /~[ユーザー名]/cgi-bin/ "/home/[ユーザー名]/public_html/cgi-bin/"
    <Directory "/home/[ユーザー名]/public_html/cgi-bin">
    AllowOverride None
    # Options None
    Options ExecCGI
    Order allow,deny
    Allow from all
    </Directory>
  2. Apache 再起動
  3. public_html/cgi-bin にスクリプトを置く
  4. テスト
    Internal Server Error が発生する場合は、一旦 SELinux を無効にしてテストしてみる
    # setenfore 0
    これで成功する場合は SELinux の設定を変更する必要あり
  5. audit.log 確認
    /var/log/audit/audit.log を確認すると SELinux がブロックしたことが分かる
    type=AVC msg=audit(1288998630.696:106): avc: denied { execute } for pid=16405 comm="httpd" name="test00.cgi" dev=dm-2 ino=265416 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:httpd_user_content_t:s0 tclass=file
    SELinux を有効にしたままユーザーディレクトリの cgi を実行する方法は調査中

[Apache]ユーザーページ公開

  1. /home/[ユーザー名]/ の下に public_html ディレクトリを作成する
  2. /home/[ユーザー名] に o+x のアクセス権を与える
    $ chmod o+x /home/[ユーザー名]
  3. public_html ディレクトリも o+x になっているか確認する
  4. httpd.conf 編集
    public_html で検索すると以下のようになっているのでdisabled をコメントアウトし、public_html を有効にする。
    <IfModule mod_userdir.c>
        UserDir disabled
        # UserDir public_html
    </IfMdule>
  5. SELinux に homedir アクセスを許可する
    この状態で localhost/~[ユーザー名] にアクセスすると SELinux がアクセスブロックする
    # setsebool -P httpd_enable_homedirs true
  6. public_html のタイプラベル情報を変更する
    ls -Z でタイプラベル情報が表示できる
    $ ls -Z
    drwxrwxr-x. user user unconfined_u:object_r:user_home_t:s0 public_html
    何もしていないファイル/ディレクトリはタイプが user_home_t になっている。ここで表示される情報は以下の通り
    • user: unconfined_u
    • role: object_r
    • type: user_home_t
    restorecon でファイル/ディレクトリのタイプラベル情報を再帰的に適切なものに初期化する
    # restorecon -R /home/[ユーザー名]/public_html/
    $ ls -Z
    drwxrwxr-x. user user unconfined_u:object_r:httpd_user_content_t:s0 public_html
    タイプが httpd_user_content_t に変更され、Apache がアクセスできるようになる

[Apache]インストール

Fedora にはすでにインストール済みなので yum install は不要
  • 自動起動するように設定する
    # chkconfig --list httpd
    httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
    # chkconfig httpd on
    # chkconfig --list httpd
    httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
  • 今回は手動で起動する
    # /etc/init.d/httpd start
    httpd を起動中: [ OK ]
  • /etc/httpd/conf/httped.conf で以下の設定を確認しておく
    • Listen: ポート番号
    • DocumentRoot: 公開するディレクトリ
    • DirectoryIndex: / をアクセスした時に表示されるファイル
  • Firewall で http, https のポートを開放する

[BIND]セットアップ

  1. インストール
    # yum install bind
  2. 設定ファイル /etc/named.conf を編集
    192.168.153.* の逆引きができるように下記を追加
    // reverse DNS for 192.168.153.*
    zone 153.168.192.in-addr.arpa {
     type master;
     file "153.168.192.in-addr.arpa";
    };
  3. 153.168.192.in-addr.arpa の zone ファイルを /var/named 以下に 153.168.192.in-addr.arpa を準備
    $TTL 1D
    @ IN SOA localhost.localdomain. root.localhost.localdomain. (
        2010021702
        3H
        1H
        1W
        1D )
        IN NS localhost.localdomain.
        IN PTR localhost.localdomain.
        IN A 255.255.255.0
  4. 起動・停止・再起動
    # /etc/init.d/named start (起動の場合)
    # /etc/init.d/named stop (停止の場合)
    # /etc/init.d/named restart (再起動の場合)

2013年3月8日金曜日

[DocBook]itemizedlist, orderdlist で項目間が広い場合

<itemizedlist>
  <listitem>
    <para>各支店の従業員数を表にする</para>
  </listitem>
  <listitem>
    <para>全支店の従業員数の合計を計算する</para>
  </listitem>
</itemizedlist>
と記述しておくと HTML に変換した時に各項目が %lt;p\> で括られてしまい行間が広くなってしまう。

HTML での出力結果
<ul class="itemizedlist" type="disc">
   <li class="listitem">
      <p>各支店の従業員数を表にする</p>
   </li>
   <li class="listitem">
      <p>全支店の従業員数の合計を計算する</p>
   </li>
</ul>
その場合は <para> ではなく <simpara> を使うことで <p> で括られることがなくなり行間が純粋なリスト表示の幅になる。
<itemizedlist>
  <listitem>
    <simpara>各支店の従業員数を表にする</simpara>
  </listitem>
  <listitem>
    <simpara>全支店の従業員数の合計を計算する</simpara>
  </listitem>
</itemizedlist>

HTML での出力結果
<ul class="itemizedlist" type="disc">
   <li class="listitem">各支店の従業員数を表にする</li>
   <li class="listitem">全支店の従業員数の合計を計算する</li>
</ul>

simpara を使わない方法
生成した HTML から参照する css で <p> のパラメータを変更する
P {
   margin: 0.2em 0px;
}

[DocBook]クロスリファレンス

クロスリファレンスは以下のようにして作成する。
<sect1>
  <title>クロスリファレンス</title>
  <para>クロスリファレンスの例</para>

  <sect2>
    <title>参照元</title>
    <para>こちらから次セクションにクロスリファレンスを張る。参照先: <xref linkend="xref_sect"/></para>
  </sect2>

  <sect2 id="xref_sect">
    <title>Hoge セクション</title>
    <para>次のセクションです。</para>
  </sect2>
</sect1>
出力結果は以下のようになる。「Section 8.2, ..」の部分は内部リンクとなる。
こちらから次セクションにクロスリファレンスを張る。参照先: Section 8.2, “Hoge セクション”

[DocBook]HTML で google-code-prettify を使う

XSL に以下を追加

myDocbook.xsl
<xsl:template name="system.head.content">
  <script type="text/javascript" src="/google-code-prettify/prettify.js"></script>
  <link href="/google-code-prettify/prettify.css" rel="stylesheet" type="text/css"></link>
</xsl:template>
<xsl:template name="body.attributes">
  <xsl:attribute name="onload">prettyprint</xsl:attribute>
</xsl:template>

[DocBook]HTML ヘッダに CSS 追加

XSLT Proessor に渡す XSL ファイルを自分で作成した XSL ファイルを経由するようにする。
その XSL ファイル内に css を指定する

myDocbook.xsl
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:import href="/usr/share/sgml/docbook/xsl-stylesheets/xhtml/docbook.xsl"/>
  <xsl:output method="html" encoding="UTF-8" indent="yes"/>
  <xsl:param name="admon.graphics" select="1"/>
  <xsl:param name="section.autolabel" select="1"/>
  <xsl:param name="html.stylesheet">doc.css</xsl:param>
  <xsl:param name="default.encoding" select="'UTF-8'"/>
</xsl:stylesheet>
XSLT Process 実行
$ java -jar /usr/share/java/saxon.jar -s:hello.xml -xsl:myDocbook.xsl -o:helloWithCss.html
Warning: at xsl:stylesheet on line 2 column 80 of sample.xsl:
  Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
/usr/share/sgml/docbook/xsl-stylesheets/xhtml/docbook.xsl を直接指定した場合の出力結果
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Hello, world</title>
    <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"/>
  </head>
(以下略)
myDocbook.xsl を指定した場合の出力結果
<html xmlns="http://www.w3.org/1999/xhtml">
   <head>
      <title>Hello, world</title>
      <link rel="stylesheet" href="doc.css" type="text/css"></link>
      <meta name="generator" content="DocBook XSL Stylesheets V1.75.2"></meta>
   </head>
(以下略)

[DocBook]スタイルファイル (DSL) カスタマイズ

db2html に渡す dsl ファイルを準備する
myStyleSheet.dsl
<!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" [
<!ENTITY dbstyle SYSTEM "/usr/share/sgml/docbook/dsssl-stylesheets-1.79/html/docbook.dsl" CDATA DSSSL>
]>

<style-sheet>
<style-specification use="docbook">
<style-specification-body>

;

</style-specification-body>
</style-specification>
<external-specification id="docbook" document="dbstyle">
</style-sheet>

HTML 出力での header に付加される文字コードを指定する
style-spcification-body 部に以下を追記する
(define %html-header-tags% '(
  ("META" ("http-equiv" "Content-Type") ("CONTENT" "text/html; charset=euc-jp"))
))

Table of Contents を付加する
style-specification-body 部に以下を追記する
(define %generate-article-toc%
  #t)

[DocBook]db2html の使い方

出力を 1 つのファイルにする
-V nochunks オプションを付ける
db2html -V nochunks hello.xml

Custom DSL ファイルを使用する
-d オプションで指定する
db2html hello.xml -d myStyleSheet.dsl

[DocBook]Windows で動作確認

  1. sample ディレクトリを作成し、build.xml, sample.xml, sample.xsl doc.css を置く
    • build.xml
      <project name="docbooktest" basedir="." default="xslt">
        <property name="DOCBOOK_DTD" value="c:/usr/docbook/docbook-xml-4.5/docbookx.dtd"/>
        <property name="DOCBOOK_PUBLIC_ID" value="-//OASIS//DTD DocBook XML V4.5//EN"/>
        <property name="XSLDIR" value="c:/usr/docbook/docbook-xsl-1.75.0"/>
        <property name="LIBDIR" value="c:/usr/docbook/xalan-j_2_7_1/build"/>
        <property name="XALANJAR" value="${LIBDIR}/xalan.jar"/>
        <target name="xslt">
          <xmlvalidate warn="false">
            <xmlcatalog>
              <dtd publicId="${DOCBOOK_PUBLIC_ID}"
                   location="${DOCBOOK_DTD}"/>
            </xmlcatalog>
            <fileset dir="${basedir}">
              <include name="sample.xml"/>
            </fileset>
          </xmlvalidate>
          <xslt
            basedir="${basedir}"
            destdir="${basedir}"
            style="${basedir}/sample.xsl"
            extension=".html"
            includes="sample.xml">
            <classpath>
              <pathelement location="${XALANJAR}"/>
            </classpath>
            <xmlcatalog>
              <dtd publicId="${DOCBOOK_PUBLIC_ID}"
                   location="${DOCBOOK_DTD}"/>
            </xmlcatalog>
          </xslt>
        </target>
      
        <target name="all" depends="xslt"/>
          <target name="clean">
            <delete file="sample.html"/>
          </target>
      </project>
    • sample.xml
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
      <article>
        <title>DocBook sample</title>
        <sect1>
          <title>Hello World</title>
          <para>Hello World</para>
        </sect1>
        <sect1>
    • sample.xsl
      <?xml version="1.0"?>
      <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
        <xsl:import href="../docbook-xsl-1.75.0/html/docbook.xsl"/>
        <xsl:output method="html" encoding="UTF-8" indent="yes"/>
        <xsl:param name="admon.graphics" select="1"/>
        <xsl:param name="section.autolabel" select="1"/>
        <xsl:param name="html.stylesheet">doc.css</xsl:param>
        <xsl:param name="default.encoding" select="'UTF-8'"/>
      </xsl:stylesheet>
    • doc.css
      H1.title {
         padding: 5px 5px 5px 10px;
         border-left: 10px solid blue;
         border-bottom: 2px solid blue;
      }
      
      H2.title {
         padding: 3px 3px 3px 5px;
         border-left: 5px solid blue;
         border-bottom: 2px solid blue;
      }
      
      H3.title {
         padding: 3px 3px 3px 5px;
         border-left: 5px solid blue;
         border-bottom: 1px solid blue;
      }
      
      H4.title {
         padding: 3px 3px 3px 5px;
         border-left: 5px solid blue;
         border-bottom: 1px solid blue;
      }
      
      
      DIV.article {
          margin: 30px 30px 30px 30px;
      }
      
      DIV.caution {
         background: #FFCCCC;
      }
      DIV.important {
         background: #FFCCCC;
      }
      DIV.note {
         background: #CCCCFF;
      }
      DIV.tip {
         background: #CCCCFF;
      }
      DIV.warning {
         background: #FFCCCC;
      }
      
      PRE.programlisting {
         border-width: 1ex;
         border-color: blue;
         border-style: solid;
         color: white;
         background-color: blue;
      }
      
      PRE.screen {
         border-width: 1ex;
         border-color: black;
         border-style: solid;
         color: white;
         background-color: black;
      }
      
      BODY {
         font-family: gill, helvetica, sans-serif;
         font-size: 12pt;
      }
  2. sample ディレクトリ内で ant を実行し build を行う

[DocBook]Fedora13 で動作確認

  1. sampleBook.xml を作成する
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE book PUBLIC "-//OASIS/DTD DocBook XML V4.5//EN"
    "/usr/share/sgml/docbook/xml-dtd-4.5/docbookx.dtd">
    
    <book>
      <bookinfo>
        <title>Hello, world</title>
      </bookinfo>
    
      <chapter>
        <title>Hello, world</title>
        <para>This is my first DocBook file.</para>
        <para>日本語表示</para>
      /chapter>
    </book>
  2. html 出力
    $ db2html docbook.xml
    output is docbook
    Using catalogs: /etc/sgml/xml-docbook-4.5.cat
    Using stylesheet: /usr/share/sgml/docbook/utils-0.6.14/docbook-utils.dsl#html
    Working on: docbook.xml
    
    (略)
    jade:/usr/share/sgml/docbook/xml-dtd-4.5/ent/isogrk4.ent:84:30:E: "1D6C7" は文書文字セット内の文字番号ではありません
    jade:sampleBook.xml:13:9:E: 非SGML数字 151
    jade:sampleBook.xml:13:12:E: 非SGML数字 156
    jade:sampleBook.xml:13:16:E: 非SGML数字 158
1 行目の文字コード指定で encoding="UTF-8" とすると jade が日本語文字を "非SGML数字" としてエラー出力する。文章が長くなってくるとエラーが多すぎて処理が途中停止してしまう。
これを防ぐには encoding="EUC-JP" とすればよいのだが、出力 HTML では文字コードが指定されていないので Web ブラウザで表示すると文字化けとなる。Web ブラウザの文字コード設定で EUC-JP を選択すると見れるようになる。
出力 HTML の文字コード指定方法は調査中。

[DocBook]Windows へのインストール

必要なもの (各バージョンは 2009/5/15 時のもの)
  • Java
  • Ant
  • Xalan-j
  • DocBook DTD
  • DocBook Style Sheet

Xalan-j インストール
  1. Index of /net/apache/xml/xalan-j から xalan-j_2_7_1-src.zip をダウンロードする
  2. C:\usr\docbook に xalan-j_2_7_1-src.zip を置き解凍する
  3. xalan ディレクトリで Ant を実行し build を行う

DocBook DTD, DocBook Style Sheet インストール
  1. DocBook Release から docbook-xml-4.5.zip をダウンロードする
  2. DocBook - Browse Files at SourceForge.net から docbook-xsl-1.75.0.zip をダウンロードする
  3. ダウンロードしたファイルを C:\usr\docbook に置き、解凍する

[DocBook]Linux Mint 12 へのインストール

  1. DocBook をインストール
    1. Menu -> その他 -> ソフトウェアの管理
    2. 右上の検索窓に docbook と入力
    3. docbook を選択
    4. [インストール] ボタンを押す
    5. 検索結果に戻り docbook-xsl を選択
    6. [インストール] ボタンを押す
    7. 検索結果に戻り docbook-xsl-doc-html を選択
    8. [インストール] ボタンを押す
  2. Java JDK をインストール
    tools.jar が必要なので Java JDK をインストールする
    1. Menu -> その他 -> ソフトウェアの管理
    2. 右上の検索窓に java と入力
    3. sun-java6-jdk を選択
    4. [インストール] ボタンを押す
  3. Saxon をインストール
    1. Menu -> その他 -> ソフトウェアの管理
    2. 右上の検索窓に saxon と入力
    3. docbook-xsl-saxon を選択
    4. [インストール] ボタンを押す

注意点
Linux Mint の場合は Fedora と異なり以下の修正が必要
  • xsl ファイルで指定する xsl:import は Fedora の場合
    <xsl:import href="/usr/share/sgml/docbook/xsl-stylesheets/xhtml/docbook.xsl"/>
    となっているが、Linux Mint の場合は以下のようにする
    <xsl:import href="/usr/share/xml/docbook/stylesheet/docbook-xsl/xhtml/docbook.xsl"/>
  • build.xml および各文章 xml ファイルの DTD 指定が Fedora では
    /usr/share/sgml/docbook/xml-dtd-4.5/docbookx.dtd
    になっているが、Linux Mint では以下のようにする
    /usr/share/sgml/docbook/dtd/xml/4.5/docbookx.dtd
  • build.xml にある以下の記述も Linux Mint では不要
    <factory name="net.sf.saxon.TransformerFactoryImpl"/>

[DocBook]Fedora13 へのインストール

  1. DocBook 関連ツールをインストール
    # yum install docbook-*

[XAMPP]XAMPP Portable lite を Windows7 にインストール

  1. apache friends (http://www.apachefriends.org/en/xampp-windows.html) から XAMPP Portable Lite 1.8.1 (2013/02/26 時点) をダウンロード
  2. ダウンロードしたファイルを解凍する
  3. 解凍してできたフォルダ (xampp) を適当な場所 (C:\usr) に移動する
  4. xampp フォルダに移動し setup_xampp.exe を実行する
  5. xampp フォルダ内にある xampp-control.exe のショートカットを作成する
  6. xampp-control.exe を実行する
  7. xampp-controll.exe で Apache を起動 ([Start] ボタンを押す) する
  8. xampp-controll.exe で MySQL を起動 ([Start] ボタンを押す) する

[Fedora]Windows パーティションを起動時にマウントする

  1. /media ディレクトリ以下にマウントポイントを作成しておく
    # mkdir /media/WindowsXP
  2. ntfs-3g コマンドで NTFS パーティションがマウントできることを確認する
    # ntfs-3g /dev/sda1 /media/WindowsXP -o locale=ja_JP.UTF-8
  3. /etc/fstab に以下のように追記する
    /dev/sda1 /media/WindowsXP ntfs-3g locale=ja_JP.UTF8 0 0
  4. 再起動すると設定したパーティションがマウントされた状態になる

[Fedora]mp3 インストール

Fedora には mp3 コーデックはデフォルトで入っていないのでインストールする必要がある。
そのため vlc メディアプレイヤーをインストールする。
# yum localinstall --nogpgcheck http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm
# yum install vlc

[Fedora]KeePassX

KeePass Password Safe 2 を使う (mono)
Windows でアカウント管理に KeePass Password Safe を使っているので、Fedora でも使えるようにする。
KeePass は .NET で動作しているので mono をインストールすることで Fedora でも動作させることができる。
  1. mono インストール
    # yum install mono-basic
  2. KeePass.exe とパスワードファイルを Windows から持ってくる
  3. mono で実行
    $ mono KeePass.exe

KeePassX インストール
KeePass Password Safe を mono で毎回動かすのも面倒くさいので同形式のファイルを扱える KeePassX を使うことにした。
Fedora13 でコンパイルするには qmake と X11/extensions/XTest.h が必要となるので qt-devel, libXtst-devel を事前にインストールする。
  1. qt-devel, libXtst-devel をインストール
    # yum install qt-devel
    # yum install libXtst-devel
  2. コンパイル, インストール
    $ qmake-qt4
    $ make
    # make install
KeePass Password Safe 2 でのデータファイル (.kdbx ファイル) を使うには KeePass Password Safe で File → Export から .kdb ファイルを書き出しておく。

[Fedora]yum コマンド

Proxy 設定
  • Proxy の設定をして update パッケージの確認と update を実行する
    $ su ← root ユーザで実行
    # export http_proxy=http://proxy_server:8080/
    # export ftp_proxy=http://proxy_server:8080/
    # yum check-update
    # yum update
  • root でログインするたびに proxy 設定をするのが面倒な場合は root ユーザのホームディレクトリ (~) にある .bashrc に以下のように記述しておく
    export http_proxy=http://proxy_server:8080/
    export ftp_proxy=http://proxy_server:8080/

早いミラーと接続するようにする
  1. インストール
    # yum install yum-plugin-fastestmirror
  2. /etc/yum.conf にある [main] の項目に以下の内容が記述されていることを確認する
    plugins=1
  3. yum を実行した時に fastestmirror がロードされてるようになる
    # yum update
    Loaded plugins: fastestmirror, refresh-packagekit

パッケージグループでインストールする
  1. パッケージグループの一覧を表示する
    # yum grouplist
  2. パッケージグループをインストール
    # yum groupinstall "XFCE"

オプション
Table: yum コマンドのオプション
引数内容
check-updateアップデート可能なパッケージの一覧表示
updateアップデート可能なパッケージを全てアップデート
install パッケージ名指定したパッケージを追加
grouplistパッケージリストを表示する
groupinstall指定したパッケージグループをインストール

各種パッケージのインストール
  1. emacs をインストールする
    # yum install emacs
  2. GCC, G++ のインストール
    # yum install gcc
    # yum install gcc-c++
  3. wget のインストール
    # yum install wget

[Fedora]IP アドレスを固定する

  1. eth1 の IP アドレスを固定で使用できるように設定する
  2. /etc/sysconfig/network-scripts/ifcfg-eth1 に以下を記述
    DEVICE=eth1
    ONBOOT=yes
    BOOTPROTO=static
    IPADDR=192.168.xxx.xxx
    NETMASK=255.255.255.0
    GATEWAY=192.168.xxx.xxx
    NETWORK=192.168.xxx.0
    BROADCAST=255.255.255.0
  3. 次のコマンドを実行し、指定したネットワーク設定になっているか確認する
    # ifdown eth1
    # ifup eth1
  4. DHCP を使用しないので DNS サーバも設定しておく必要があるので /etc/resolv.conf に以下を記述
    nameserver 192.168.xxx.xxx

Note
/etc/resolv.conf はシステム起動時に NetworkManager に上書きされてしまうので /etc/sysconfig/network-scripts/ifcfg-eth1 に以下のように記述する必要あり
DNS1=xxx.xxx.xxx.xxx
DNS2=xxx.xxx.xxx.xxx

[LinuxMint]smbfs インストール

  1. Menu -> その他 -> ソフトウェアの管理
  2. 右上の検索窓に smb と入力
  3. smbfs を選択
  4. [インストール] ボタンを押す

動作確認
  1. /mnt/smb を作成
  2. マウント
    # smbmount //windows/share /mnt/smb
    Password:
  3. 読み書き権限を与えるときは以下のように指定する
    # smbmount //windows/share /mnt/smb -o file_mode=0x777,dir_mode=0x777

[LinuxMint]ant インストール

  1. Terminal で以下を実行
    # apt-get install ant

[LinuxMint]SSH server インストール

  1. Menu -> その他 -> ソフトウェアの管理
  2. 右上の検索窓に ssh と入力
  3. openssh-server を選択
  4. [インストール] ボタンを押す
  5. Termial で起動確認
    $ su -
    # service ssh status
    ssh start/runnning, process xxxxx

[LinuxMint]VNC server のセッションを閉じる

$ vncserver -kill :1

[LinuxMint]TightVNC インストール

  1. Menu -> その他 -> ソフトウェアの管理
  2. 右上の検索窓に vnc と入力
  3. tightvnc を選択
  4. [インストール] ボタンを押す
  5. Termial を起動し、以下を実行
    $ vncserver -geometry "1024x768" -depth 16
    You will require a password to access your desktops.
    
    Password:
    Verify:
    Would you like to enter a view-only password (y/n)? n
    
    New 'X' desktop is computer-name:1
  6. Windows に TightVNC viewer をインストールし、接続先を以下のように入力
    Server IP address:1

[LinuxMint]フォントインストール

IPA フォント
  1. Menu -> その他 -> ソフトウェアの管理
  2. 右上の検索窓に ipa と入力
  3. ttf-ipafont を選択
  4. [インストール] ボタンを押す

VL Gothic
  1. Menu -> その他 -> ソフトウェアの管理
  2. 右上の検索窓に vl と入力
  3. ttf-vlgothic を選択
  4. [インストール] ボタンを押す

[LinuxMint]Mozc インストール

  1. Menu -> その他 -> ソフトウェアの管理
  2. 右上の検索窓に mozc と入力
  3. ibus-mozc を選択
  4. [インストール] ボタンを押す
  5. Menu -> その他 -> Keyboard Input Methods
  6. [General] tab
    1. Enable or disable で Zenkaku_Hankaku のみにする
    2. Next input method にある Alt + Shift_L を削除する (Emacs を使うと Alt + Shift キーを多用するため、この設定があると突然日本語入力 ON になってしまうため)
  7. [Input Method] tab
    1. 日本語 - Mozc を選ぶ
  8. 再ログインする

[Linux]rsync

  1. src ディレクトリ内にある a.txt, b.txt を dst ディレクトリに同期させる
    $ ls src
    a.txt  b.txt
    $ ls
    src
    
    $ rsync -auv --delete src/ dst
    sending incremental file list
    created directory dst
    ./
    a.txt
    b.txt
    
    sent 158 bytes  received 53 bytes  422.00 bytes/sec
    total size is 0  speedup is 0.00
    $ ls
    dst  src
  2. 差分確認
    $ diff src/ dst/
  3. src ディレクトリに c.txt を追加
    $ touch src/c.txt
  4. 同期
    $ rsync -auv --delete src/ dst
    sending incremental file list
    ./
    c.txt
    
    sent 133 bytes  received 34 bytes  334.00 bytes/sec
    total size is 0  speedup is 0.00
  5. src/a.txt を削除
    $ rm src/a.txt
  6. 同期実行
    $ rsync -auv --delete src/ dst
    sending incremental file list
    ./
    deleting a.txt
    
    sent 80 bytes  received 15 bytes  190.00 bytes/sec
    total size is 0  speedup is 0.00

[Linux]複数ファイルの拡張子を一括変更

$ for nm in *.c;
> do mv $nm ${nm%.c}.cpp;
> done

[Linux]HDDのデータを完全消去する方法

  • shredコマンドでデータ領域にランダムデータを書き込んで元データが復元できないようにしてくれる
  • Ubuntuの場合は2つめのHDDがsdbとして認識されるので以下のように HDD を指定する
    $ sudo shred -z -v /dev/hdb
Table: shred のオプション
オプション動作
-zランダム書き込みを25回行い最後に0を書き込む
-nランダム書き込みの回数を指定する
-v進捗状況が表示される
3回だけランダム値を書き込むのは以下の通り
$ sudo shred -n 3 -v /dev/hdb

[Linux]改行コード

改行コードを調べる
file コマンドで改行コードを調べることができる
  • EUC, CRLF 改行の場合
    $ file hoge.txt
    hoge.txt: ISO-8859 text, with CRLF line terminators
  • EUC, LF 改行の場合
    $ file hoge.txt
    hoge.txt: ISO-8859 text
  • UTF-8, CRLF 改行の場合
    $ file hoge.txt
    hoge.txt: UTF-8 Unicode text, with CRLF line terminators

改行コードを変換する
nkf コマンドのオプションを使うことで改行コードを変更できる
Table: nkf のオプション
オプション動作
-cLF (0x0A) の前に CR (0x0D) を追加する
-dLF (0x0A) の前の CR (0x0D) を取り除く
  • CR を取り除いた場合
    $ file hoge.txt
    hoge.txt: ISO-8859 text, with CRLF line terminators
    $ nkf -e -d --overwrite hoge.txt
    $ file hoge.txt
    hoge.txt: ISO-8859 text
  • CR を追加した場合
    $ file hoge.txt
    hoge.txt: ISO-8859 text
    $ nkf -e -c --overwrite hoge.txt
    $ file hoge.txt
    hoge.txt: ISO-8859 text, with CRLF line terminators
  • 複数ファイルの拡張子を一括変更
    $ for nm in *.c;
    > do mv $nm ${nm%.c}.cpp;
    > done

[Linux]文字コード

文字コードを調べる
nkf コマンドに --guess オプションを付けることで文字コードを調べることができる。
$ nkf --guess hoge.txt
hoge.txt:Shift_JIS
$ nkf --guess hoge2.txt
hoge2.txt:EUC-JP

文字コードを変換する
  • EUC に変換する
    $ nkf -e hoge.txt > hoge-euc.txt
  • 上書き変換する
    $ nkf -e --overwrite hoge.txt
  • フォルダ内の全てのファイル文字コードを変換する
    $ nkf -e --overwrite *
Table: nkf のオプション
オプション動作
-jJIS コードに変換する
-eEUC コードに変換する
-sShift-JIS コードに変換する
-wUTF8 コードに変換する

[Linux]watch コマンド

watch コマンドでログ監視
"-n" で指定した秒数ごとにコマンドを実行する
watch -n 秒数 コマンド
/var/log/maillog を定期監視する場合は次のようにする
# watch -n 1 tail /var/log/maillog

[VBScript]HDD残量を調べる

hdd.vbs
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set objSWbemObjectCollection = objWMIService.ExecQuery("Select * from Win32_LogicalDisk Where DriveType = 3")

For Each objSWbemObject in objSWbemObjectCollection
    'デバイスID C:などを取得する
    DeviceID = objSWbemObject.DeviceID

    'ハードディスクのフルサイズを取得する
    Size = objSWbemObject.Size
    SizeGB = Size / 1024 / 1024 / 1024
    SizeMB = Size / 1024 / 1024

    'ハードディスクの空き領域を取得する
    FreeSpace = objSWbemObject.FreeSpace
    FreeSpaceGB = FreeSpace / 1024 / 1024 / 1024
    FreeSpaceMB = FreeSpace / 1024 / 1024

    'ハードディスク使用量を計算する
    UseVolume = Size - FreeSpace
    UseVolumeGB = UseVolume / 1024 / 1024 / 1024
    UseVolumeMB = UseVolume / 1024 / 1024

    msg = "DeviceID=" & DeviceID & vbCrlf
    msg = msg & "Size=" & FormatNumber(Size, 0, -1, 0, -1)
    msg = msg & " (" & FormatNumber(SizeMB, 2, -1, 0, -1) & " MB"
    msg = msg & ", " & FormatNumber(SizeGB, 2, -1, 0, -1) & " GB)" & vbCrlf
    msg = msg & "FreeSpace=" & FormatNumber(FreeSpace, 0, -1, 0, -1)
    msg = msg & " (" & FormatNumber(FreeSpaceMB, 2, -1, 0, -1) & " MB"
    msg = msg & ", " & FormatNumber(FreeSpaceGB, 2, -1, 0, -1) & " GB)" & vbCrlf
    msg = msg & "UseVolume=" & FormatNumber(UseVolume, 0, -1, 0, -1)
    msg = msg & " (" & FormatNumber(UseVolumeMB, 2, -1, 0, -1) & " MB"
    msg = msg & ", " & FormatNumber(UseVolumeGB, 2, -1, 0, -1) & " GB)" & vbCrlf
    MsgBox msg
Next

[VBScript]FormatNumber

FormatNumber(IngNum [, IngBeam, blnInc1, blnInc2, blnInc3])
  • 数値形式の文字列に書式を設定
  • IngNum: 書式を変換する数値
  • IngBeam: 小数点以下に表示する桁数
  • blnInc1: 小数点の左側のゼロを表示するかどうか
  • blnInc2: 負の値を括弧で囲むかどうか
  • blnInc3: 桁区切りの記号を使用して数値を区切るかどうか
    • -1=桁区切り記号を表示する
    • 0=桁区切り記号を表示しない)

[VBScript]Folderのサイズを調べる

folderSize.vbs
Set objFileSystem = CreateObject("Scripting.FileSystemObject")
Set objFsf = objFileSystem.GetFolder("C:\Users\e11191\Downloads")

Dim Size
Dim SizeMB
Dim SizeGB
Size = objFsf.Size
SizeMB = Size / 1024 / 1024
SizeGB = Size / 1024 / 1024 / 1024
msg = "Name=" & objFsf.Name & vbCrlf
msg = msg + "Size=" & FormatNumber(Size, 0, 0, 0, -1) & "(" & FormatNumber(SizeMB, 2, 0, 0, -1) & " MB, " & FormatNumber(SizeGB, 2, 0, 0, -1) & " GB)" & vbCrlf
msg = msg + "Files.Count=" & objFsf.Files.Count & vbCrlf
msg = msg + "SubFolders.Count=" & objFsf.SubFolders.Count & vbCrlf
MsgBox msg

[VBScript]Hellow, world

helloWorld.vbs
' 変数宣言
Dim msg

' メッセージを表示する
msg = "Hello, world"
MsgBox msg

' 改行 (vbCrlf)
msg = "Hello, world" & vbCrlf
msg = msg & "It is fine today."
MsgBox msg

2013年3月3日日曜日

[電子工作]Push Switch で LED を点灯させる

回路図

ブレッドボード上に配置 (Fritzing で設計)

ブレッドボード上に実装

[電子工作]LED を点灯させる

回路図

ブレッドボード上の配置 (Fritzing で設計)

ブレッドボード上に実装

[Emacs]文字コード

  • バッファの文字コード変換
    C-x RET f (文字コード)
    
  • 文字コードを指定してファイルを開く
    C-x RET c [Enter] (文字コード) C-x C-f [Enter]
    
  • 文字コードを指定してファイルを開きなおす
    C-x RET c [Enter] (文字コード) C-x C-v [Enter]
    
代表的な文字コードは以下の通り
Table: 文字コード例
Code文字コード改行形式
euc-jp-unixEUC-JPUNIX
euc-jp-dosEUC-JPdos
euc-jp-macEUC-JPmac
shift_jis-unixshift-jisUNIX
shift_jis-dosshift-jisdos
shift-jis-macshift-jismac

文字コードを調べる (C-u C-x =)
調べたい文字にカーソルを合わせて C-u C-x = を指定すると下記のように表示される
UTF-8 の "あ" (0xE3 0x81 0x82) を調べた結果は次の通り
 character: あ (53794, #o151042, #xd222, U+3042)
 charset: japanese-jisx0208 (JISX0208.1983/1990 Japanese Kanji: ISO-IR-87.)
 code point: #x24 #x22
 syntax: w which means: word
 category: H:Japanese Hiragana characters of 2-byte character sets j:Japanese
        |:While filling, we can break a line at this character.
 Properties: katakana: 53922; jisx0201: 3249;
buffer code: #x92 #xA4 #xA2
 file code: #xE3 #x81 #x82 (encoded by coding system utf-8-dos)
 display: by this font (glyph code)
 -outline-さざなみゴシック-medium-r-normal-normal-12-90-96-96-c-*-jisx0208-sjis (#x3042)
SJIS の "あ" (0x82 0xA0) を調べた結果は以下の通り
character: あ (53794, #o151042, #xd222, U+3042)
 charset: japanese-jisx0208 (JISX0208.1983/1990 Japanese Kanji: ISO-IR-87.)
 code point: #x24 #x22
 syntax: w which means: word
 category: H:Japanese Hiragana characters of 2-byte character sets j:Japanese
        |:While filling, we can break a line at this character.
 Properties: katakana: 53922; jisx0201: 3249;
buffer code: #x92 #xA4 #xA2
 file code: #x82 #xA0 (encoded by coding system sjis-dos)
 display: by this font (glyph code)
 -outline-さざなみゴシック-medium-r-normal-normal-12-90-96-96-c-*-jisx0208-sjis (#x3042)

encode-coding-string
encode-coding-string STRING CODING-SYSTEM &optional NOCOPY BUFFER
encode-coding-string は STRING に渡した文字列を指定した文字コードのバイト列に変換する (8 進数表記なので注意)
  • sjis の "あ", 返値の 16 進数表記は 0x82 0xA0)
    (encode-coding-string "あ" 'sjis-dos)
    "\202\240"
    
  • utf-8 の "あ", 返値の 16 進数表記は 0xE3 0x81 0x82
    (encode-coding-string "あ" 'utf-8-dos)
    "\343\201\202"
    

decode-coding-string
decode-coding-string STRING CODING-SYSTEM &optional NOCOPY BUFFER
decode-coding-string は STRING に渡したバイト列を指定した文字列に変換する
STRING には 16 進数, 8 進数のどちらでも指定可能
(decode-coding-string "\x82\xa0" 'sjis-dos)
"あ"
(decode-coding-string "\202\240" 'sjis-dos)
"あ"

[Emacs]psgml モード (SGML 入力支援 lisp)

インストール
  1. A GNU Emacs mode for SGML files から stable バージョンをダウンロードする (2009/5/15 時点 version 1.2.5)
  2. 解凍したディレクトリを emacs/site-lisp 以下に置く
  3. .emacs に以下を追記
    ;;; ===== PSGML =====
    (autoload 'sgml-mode "psgml" "Major mode to edit SGML files." t)
    (autoload 'xml-mode "psgml" "Major mode to edit XML files." t)
    (setq auto-mode-alist
        (append (list (cons "\\.xml\\'" 'xml-mode))
            auto-mode-alist))
    (setq sgml-catalog-files '("CATALOG" "C:/usr/emacs/site-lisp/psgml-1.2.5/catalog"))
    (setq sgml-ecat-files '("ECAT" "C:/usr/emacs/site-lisp/psgml-1.2.5/ecat"))
    CATALOG ファイルには psgml が参照する DTD ファイルを記載する
    ECAT ファイルには psgml が DTD ファイルを parse した結果を保存する場所を記載する
  4. emacs/site-lisp/psgml-1.2.5/catalog ファイルを作成する
    PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "docbook/xml/4.5/docbookx.dtd"
  5. emacs/site-lisp/psgml-1.2.5/ecat ファイルを作成する
    PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "cust/docbook/xml/4.5/docbookx.dtd"
  6. psgml-1.2.5 ディレクトリ以下に catalog ファイルで指定した DTD ファイルを置く
  7. psgml-1.2.5 ディレクトリ以下に ecat ファイルで指定した cust/docbook/xml/4.5 というディレクトリを作成しておく

使用方法
DocBook XML のファイルを開き C-c C-p を押すと DTD ファイルの parse が始まる
Table: psgml mode 使用方法
C-c C-pDTD の Parse
C-c C-o文章の Parse
C-c C-eelement の挿入
C-c /終了タグを挿入

Ant を PSGML モードで使用する
  1. まずは PSGML モードで使用するための定義ファイル (DTD) を準備する
    1. 以下の ant-dtd.xml を準備する
      <?xml version="1.0"?>
      <project name="ant-dtd" default="ant.dtd" basedir=".">
        <target name="ant.dtd">
          <antstructure output="ant.dtd"/>
        </target>
      </project>
    2. ant.dtd を生成する
      > ant -buildfile ant-dtd.xml
      Buildfile: ant-dtd.xml
      
      ant.dtd:
      
      BUILD FAILED
      java.lang.NoClassDefFoundError: org/apache/commons/net/ftp/FTPClientConfig
       at org.apache.tools.ant.taskdefs.optional.net.FTP$LanguageCode.getValidLanguageCodes(FTP.java:2544)
       at org.apache.tools.ant.taskdefs.optional.net.FTP$LanguageCode.<clinit>(FTP.java:2540)
       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
       at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
       at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
      (中略)
      Total time: 0 seconds
    3. エラーが表示されるが下記のような ant.dtd は生成された
      <?xml version="1.0" encoding="UTF-8" ?>
      <!ENTITY % boolean "(true|false|on|off|yes|no)">
      <!ENTITY % tasks "propertyfile | ccmkdir | importtypelib | vsscheckin | sql | cvspass | p4reopen | csc | loadresource | dirname | wlrun | p4label | p4revert | replaceregexp | get | jjtree | sleep | jarlib-display | length | dependset | zip | patch | jspc | style | nice | tstamp | unwar | vsshistory | cvschangelog | retry | p4submit | ccmcheckin | p4change | bzip2 | sync | p4delete | vssadd | javadoc | makeurl | p4integrate | translate | signjar | cclock | classloader | chown | jarlib-available | rexec | WsdlToDotnet | buildnumber | resourcecount | cvsversion | apt | ejbjar | war | stlist | copypath | rename | sequential | serverdeploy | property | subant | move | ildasm | copydir | schemavalidate | cccheckin | ccunlock | wljspc | fixcrlf | telnet | sosget | pathconvert | record | p4sync | exec | ccmklabel | p4edit | manifest | antlr | netrexxc | ftp | execon | ccmcheckout | ant | xmlvalidate | xslt | p4resolve | iplanet-ejbc | ccmcheckintask | gzip | native2ascii | ccrmtype | starteam | ear | input | presetdef | rmic | checksum | mail | loadfile | vsscheckout | stylebook | soscheckin | mimemail | stlabel | gunzip | concat | cab | touch | parallel | splash | antcall | ccmkbl | cccheckout | typedef | p4have | filter | xmlproperty | import | copy | jsharpc | symlink | antstructure | script | ccmcreatetask | rpm | delete | replace | attrib | verifyjar | waitfor | untar | loadproperties | available | echoproperties | junit | stcheckin | chgrp | stcheckout | bunzip2 | whichresource | copyfile | p4labelsync | manifestclasspath | vsscreate | macrodef | unjar | ejbc | echoxml | vbc | wsdltodotnet | mkdir | cvs | condition | tempfile | junitreport | ccmkattr | taskdef | echo | ccupdate | java | vsslabel | renameext | basename | javadoc2 | tar | vsscp | p4fstat | setproxy | antversion | p4counter | wlstop | diagnostics | ilasm | soscheckout | apply | jarlib-resolve | ccuncheckout | cvstagdiff | jlink | javacc | chmod | jarlib-manifest | pvcs | jar | ccmklbtype | sound | truncate | scriptdef | defaultexcludes | blgenclient | uptodate | jjdoc | genkey | javah | ccmkelem | ccmreconfigure | fail | unzip | javac | p4add | soslabel | depend | vssget | deltree | ddcreator">
      <!ENTITY % types "difference | isfileselected | mergemapper | extensionSet | stringtokenizer | url | scriptcondition | filterreader | selector | propertyset | dirset | chainedmapper | tarfileset | regexpmapper | zipentry | resources | scriptmapper | unpackagemapper | compositemapper | first | string | propertyresource | flattenmapper | description | scriptfilter | last | concatfilter | scriptselector | xmlcatalog | extension | file | filetokenizer | filtermapper | packagemapper | regexp | bzip2resource | filterchain | filterset | classfileset | linetokenizer | files | patternset | intersect | mapper | union | resource | tokens | assertions | substitution | libfileset | zipfileset | signedselector | tarentry | redirector | filelist | path | fileset | restrict | globmapper | identitymapper | javaresource | gzipresource | sort">
      
      <!ELEMENT project (target | %tasks; | %types;)*>
      <!ATTLIST project
       name CDATA #IMPLIED
       default CDATA #IMPLIED
       basedir CDATA #IMPLIED>
      
      <!ELEMENT target (%tasks; | %types;)*>
      (以下略)
  2. 作成した ant.dtd を apache-ant をインストールしたディレクトリ以下に置く
  3. 作成した ant.dtd を psgml をインストールしたディレクトリ以下に置き、PSGML の catalog ファイルに以下を追加
    PUBLIC "-//ANT//DTD project//EN" "ant/ant.dtd" 
    
  4. ディレクトリを作成し ecat に以下を追加
    PUBLIC "-//ANT//DTD project//EN" "cust/ant/ant.dtd"
    
  5. 対象の build.xml ファイルの先頭に以下を記述する
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE project PUBLIC "-//ANT//DTD project//EN" "file:///usr/apache-ant/ant.dtd">
    
  6. C-c C-p で DTD ファイルを parse する

[Emacs]etags

ソースファイルのある場所で emacs\bin\etags.exe を実行する
> etags.exe *
  • ソースファイルを開いて M-. (find-tag) をすると関数定義に飛ぶ
  • 飛ぶ前の場所に戻る場合は M-* (pop-tag-mark) をする

[Emacs]Major mode

auto-mode-alist
  • 拡張子のパターンにより mode を指定している変数
  • *scrach* バッファにて auto-mode-alist に登録されている内容を表示できる
    auto-mode-alist(C-j)
    (("\\.dz\\'" nil jka-compr) ("\\.g?z\\(~\\|\\.~[0-9]+~\\)?\\'" nil jka-compr) ("\\.bz2\\(~\\|\\.~[0-9]+~\\)?\\'" nil jka-compr) ("\\.Z\\(~\\|\\.~[0-9]+~\\)?\\'" nil jka-compr) ("\\.vr[hi]?\\'" . vera-mode) ("\\.py\\'" . python-mode) ("\\.mixal\\'" . mixal-mode) ("\\.x[bdsru]?[cn]?\\'" . ld-script-mode) ("\\.ld[si]?\\>" . ld-script-mode) ("\\.x[bp]m\\'" . image-mode-maybe) ("\\.p[bpgn]m\\'" . image-mode) ("\\.tiff?\\'" . image-mode) ...)

auto-mode-alist 拡張子のパターンを追加する例
(setq auto-mode-alist
    (append
    ;; File name (within directory) starts with a dot.
    '(("/\\.[^/]*\\'" . fundamental-mode)
    ;; File name has no dot.
    ("[^\\./]*\\'" . fundamental-mode)
    ;; File name ends in `.C'.
    ("\\.C\\'" . c++-mode))
    auto-mode-alist))

[Emacs]Ctrl - 円マーク で日本語入力モードにならないようにする

  • Windows の IME を使用していると Emacs でうっかり Ctrl - 円マーク を入力して日本語入力から抜けられなくなってしまうことがある
  • これを防ぐために .emacs に以下を記述して Ctrl - 円マーク のキーバインドを殺しておく
;;; === Keybinding ====
; C-\ を押すと Emacs の日本語入力モードになってしまうので Keybind を殺す
(global-set-key "\C-\\" 'ignore)

[Emacs]タブや全角スペースを別色で表示する

.emacs に以下の設定を追加することでタブ、全角スペース、行末の空白 (タブ、スペース) を別の色で表示できるようにする
;; タブ, 全角スペース, 行末空白表示
(defface my-face-b-1 '((t (:background "NavajoWhite4"))) nil) ; 全角スペース
(defface my-face-b-2 '((t (:background "gray10"))) nil) ; タブ
(defface my-face-u-1 '((t (:background "SteelBlue" :underline t))) nil) ; 行末空白
(defvar my-face-b-1 'my-face-b-1)
(defvar my-face-b-2 'my-face-b-2)
(defvar my-face-u-1 'my-face-u-1)

(defadvice font-lock-mode (before my-font-lock-mode ())
 (font-lock-add-keywords
 major-mode
 '(("\t" 0 my-face-b-2 append)
 (" " 0 my-face-b-1 append)
 ("[ \t]+$" 0 my-face-u-1 append)
 )))
(ad-enable-advice 'font-lock-mode 'before 'my-font-lock-mode)
(ad-activate 'font-lock-mode)
背景を黒に設定しておくと以下のように表示される

タブは背景色より少し薄いグレーで、全角スペースは薄茶色で、行末空白は水色にアンダーラインで表示される。

[Emacs]色見本

Emacs の設定で使用する色の見本表示
M-x list-colors-display

[Emacs]GNU GLOBAL

インストール
  1. Windows 用のバイナリファイルは Yahoo! GeoCities: Get a web site with easy-to-use site building tools. からダウンロードする
  2. 展開したディレクトリへのパスをマイコンピュータを右クリック → [プロパティ] → [システムのプロパティ] → [詳細設定] → [環境変数] の PATH に登録する

ソースコード解析
サンプルとして grep のソースコードを解析してみる。
  1. Index of /pub/GNU/grep からソースコードをダウンロードし展開する
  2. 展開したディレクトリに移動し、gtags -v を実行する
    grep-2.5.4>gtags.exe -v
    [Mon Aug 03 10:35:57 東京 (標準時) 2009] Gtags started.
     Using default configuration.
    [Mon Aug 03 10:35:57 東京 (標準時) 2009] Creating 'GTAGS'.
     [1] extracting tags of intl/bindtextdom.c
     [2] extracting tags of intl/dcgettext.c
     [3] extracting tags of intl/dcigettext.c
     [4] extracting tags of intl/dcngettext.c
     [5] extracting tags of intl/dgettext.c
     [6] extracting tags of intl/dngettext.c
    (以下略)

Emacs の設定
  1. gtags バイナリを展開したディレクトリ内の share/gtags にある gtags.el を Emacs の site-lisp ディレクトリにコピーする
  2. .emacs に以下を追記する
    ;;; === GTAGS ===
    (autoload 'gtags-mode "gtags" "" t)
  3. Emacs を起動したら M-x gtags-mode を実行する
  4. gtags -v を実行したディレクトリで M-x gtags-find-tag を実行すると mini-buffer に次のように表示される
    Find tag: (default ABOUT)
    ここで main と入力すると次のように main 関数で宣言されている箇所が表示される
    main 985 lib/getopt.c main (argc, argv)
    main 101 lib/getopt1.c main (argc, argv)
    main 73 lib/strtoumax.c main ()
    main 258 lib/xstrtol.c main (int argc, char** argv)
    main 230 src/ansi2knr.c main(argc, argv)
    main 1825 src/grep.c main (int argc, char **argv)

HTML で出力
  1. gtags コマンドを実行した後に htags.exe -v を実行する
    grep-2.5.4>htags.exe -v
    checking C:/home/grep-2.5.4/GTAGS
    GTAGS found at 'C:/home/grep-2.5.4/GTAGS'.
    [Mon Aug 03 12:04:37 東京 (標準時) 2009] Htags started
    [Mon Aug 03 12:04:37 東京 (標準時) 2009] (0) making directories ...
    [Mon Aug 03 12:04:37 東京 (標準時) 2009] (1) making CGI program ...(skipped)
    [Mon Aug 03 12:04:37 東京 (標準時) 2009] (2) making help.html ...
    [Mon Aug 03 12:04:37 東京 (標準時) 2009] (3) making duplicate entries ...
     [1] adding definition ACCEPTING
     [2] adding definition ACCEPTS_IN_CONTEXT
     [3] adding definition ADDOP2
     [4] adding definition ADDRESS_FUNCTION
     [5] adding definition ADD_BLOCK
  2. HTML ディレクトリが生成されるので、その中の index.html から関数をたどることができるようになる

参考ページ
GNU GLOBAL 本家 (GNU GLOBAL source code tag system)

[Emacs]Auto-fill

auto-fill時のデフォルト改行文字数を設定
(setq-default fill-column 72)
現在設定されている改行文字数を確認する
C-h v fill-column

[Emacs]折り返し

  • truncation (先端を切り取る) によって長い行の先をスクロール先にもっていく (折り返して表示しない)
  • 末尾に $ が表示されて改行表示される
  • 実際に改行は入っていない
  • バッファの truncate は M-x toggle-trancate-lines を実行することで切り替えられる
  • これは truncate-lines 変数の値を変更していることになる
  • この値が non-nil の場合は 行全てが表示されず、末尾が切られて見える (Disable truncate)、nil の場合は末尾が切られて見えることはなく truncate される (Enable truncate)

[Emacs]Bookmark

Table: Bookmark コマンド
CommandDescription
C-x r mset a bookmark at current cursor pos
C-x r bjump to bookmark

[Emacs]見た目

フォントや表示のされかたを確認する
M-x list-faces-display

[Emacs]対応する括弧に移動する

Table: 操作方法
キーバインドコマンド動作マニュアルでの説明
C-M-nforward-line次の対応括弧へ移動Move forward over a parenthetical group
C-M-pbackward-line前の対応括弧へ移動Move backward over a parenthetical group
int main(void)
{
  int i;

  for (i = 0; i < 10; i++) { <--- (*1)
    printf("Hello\n");
  } <--- (*2)

  return 0;
}
  • (*1) で C-M-n を押すと (*2) に飛ぶ
  • (*2) で C-M-p を押すと (*1) に飛ぶ

[Emacs]ソースファイルとヘッダファイルを切り替える

M-t
または
ff-find-other-file
これでソースファイル (hello.c) とヘッダファイル (hello.h) が切り替わる

[Emacs]整形

行末のスペースを削除する
M-x delete-trailing-whitespace

[Emacs]検索・置換

正規表現検索
C-M-s

正規表現の確認
別ウインドが表示され、そこの中で正規表現を入力すると該当の文字列が別色で表示される
M-x re-build 

置換
; のあるところで改行する
M-x query-replace [Enter] ; [Enter] ;C-q C-j

正規表現置換
M-x query-replace-regexp

TABをspaceにreplace
query-replace-regexp [Enter] C-i [Enter] (space) [Enter]

改行をspaceにreplace
query-replace-regexp [Enter] C-j [Enter] (space)

条件箇所を残したまま置換
  • \( \) で囲むことで置換箇所を指定できる
  • 置換グループは \1, \2 で指定できる
  • 数値のグループ指定 \([0-9]\)

改行文字に置換
C-q C-j

2013年3月2日土曜日

[gnuplot]ベクトルを描く

(x0, y0) から (x1, y1) へのベクトルを描く場合は次のようなデータを準備する。
vector.dat
0.0 0.0 1.0 0.0
これは (0,0) から (1,0) へのベクトルデータとなる。
次を実行すると上記で準備したベクトルが描ける。
set xrange[-1:2]
set yrange[-1:1]
set style arrow 1 size character 5,45 filled linewidth 2
plot 'vector.dat' with vector arrowstyle 1

ベクトルの形 (矢印の頭のサイズや線の太さ) を変更する場合は set style arrow を使う。
set style arrow <index> {nohead | head | heads}
                        {size <length>,<angle>{,<backangle>}}
                        {filled | empty | nofilled}
                        {front | back}
                        { {linestyle | ls <line_style>}
                          | {linetype | lt <line_type>}
                            {linewidth | lw <line_width>} }

各パラメータを変化させた場合の出力例
矢印頭の長さを character 3 に変更
set style arrow 1 size character 3,45 filled linewidth 2

矢印頭の角度を 15度に変更
set style arrow 1 size character 5,15 filled linewidth 2

矢印の線の太さを 5 に変更
set style arrow 1 size character 5,45 filled linewidth 5

矢印頭の中を塗りつぶさない
set style arrow 1 size character 3,45 empty linewidth 5

矢印頭を線のみにする
set style arrow 1 size character 3,45 nofilled linewidth 5

[gnuplot]線分を描く

x < -2 | x > 3 の範囲はグラフを描かない (1/0), それ以外の範囲は x*2+1 のグラフを描くことで線分を表示できる
plot x<-2 | x>3 ? 1/0 : x*2+1

[gnuplot]一次関数の表示

y = 1/2 x - 1 のグラフを描く
plot x*1/2-1

グリッド線を x 軸 y 軸共に 1 目盛りで表示する
set xtics 1
set ytics 1
set grid
plot x*1/2-1

x 軸 y 軸のゼロ軸を強調する
set xzeroaxis lt -1
set yzeroaxis lt -1
plot x*1/2-1

[gnuplot]タイトルを設定

set title "test graph"
set output 'C:\home\gnuplot\009-lines-title.png'
plot 'c:\home\gnuplot\test.dat' with lines

[gnuplot]X 軸ラベル, Y 軸ラベルを設定

set xlabel "x-label"
set ylabel "y-label"
set output 'C:\home\gnuplot\008-lines-xylabel.png'
plot 'c:\home\gnuplot\test.dat' with lines

[gnuplot]Y 軸の範囲を設定

Y 軸の範囲指定には set yrange を使用する
set yrange [0:600]
set output 'C:\home\gnuplot\007-lines-yrange0_600.png'
plot 'c:\home\gnuplot\test.dat' with lines

Y 軸の範囲指定をしなかった場合

[gnuplot]各種グラフ

Example: test.plt
set term png size 400,300
set output 'C:\home\gnuplot\000-impulses.png'
plot 'c:\home\gnuplot\test.dat' with impulses
set output 'C:\home\gnuplot\001-boxes.png'
plot 'c:\home\gnuplot\test.dat' with boxes
set output 'C:\home\gnuplot\002-errorlines.png'
plot 'c:\home\gnuplot\test.dat' with errorlines
set output 'C:\home\gnuplot\003-lines.png'
plot 'c:\home\gnuplot\test.dat' with lines
set output 'C:\home\gnuplot\004-points.png'
plot 'c:\home\gnuplot\test.dat' with points
set output 'C:\home\gnuplot\005-dots.png'
plot 'c:\home\gnuplot\test.dat' with dots
set output 'C:\home\gnuplot\006-steps.png'
plot 'c:\home\gnuplot\test.dat' with steps
set yrange [0:600]
set output 'C:\home\gnuplot\007-lines-yrange0_600.png'
plot 'c:\home\gnuplot\test.dat' with lines
set xlabel "x-label"
set ylabel "y-label"
set output 'C:\home\gnuplot\008-lines-xylabel.png'
plot 'c:\home\gnuplot\test.dat' with lines
set title "test graph"
set output 'C:\home\gnuplot\009-lines-title.png'
plot 'c:\home\gnuplot\test.dat' with lines
exit
test.plt を使用していろいろなグラフスタイルで出力してみた。
impulses
set output 'C:\home\gnuplot\000-impulses.png'
plot 'c:\home\gnuplot\test.dat' with impulses

boxes
set output 'C:\home\gnuplot\001-boxes.png'
plot 'c:\home\gnuplot\test.dat' with boxes

errorlines
set output 'C:\home\gnuplot\002-errorlines.png'
plot 'c:\home\gnuplot\test.dat' with errorlines

lines
set output 'C:\home\gnuplot\003-lines.png'
plot 'c:\home\gnuplot\test.dat' with lines

points
set output 'C:\home\gnuplot\004-points.png'
plot 'c:\home\gnuplot\test.dat' with points

dots
set output 'C:\home\gnuplot\005-dots.png'
plot 'c:\home\gnuplot\test.dat' with dots

steps
set output 'C:\home\gnuplot\006-steps.png'
plot 'c:\home\gnuplot\test.dat' with steps

[gnuplot]コマンドラインから PNG に出力させる

Windows 用のパッケージをインストールすると gnuplot/bin ディレクトリ内に pgnuplot.exe がある。これに以下のように plot 実行スクリプトを渡すとコマンドラインで実行ができる。
> pgnuplot.exe < c:\home\gnuplot\test.plt
Example: test.plt
set term png size 400,300
set output 'C:\home\gnuplot\000-impulses.png'
plot 'c:\home\gnuplot\test.dat' with impulses
set output 'C:\home\gnuplot\001-boxes.png'
plot 'c:\home\gnuplot\test.dat' with boxes
set output 'C:\home\gnuplot\002-errorlines.png'
plot 'c:\home\gnuplot\test.dat' with errorlines
set output 'C:\home\gnuplot\003-lines.png'
plot 'c:\home\gnuplot\test.dat' with lines
set output 'C:\home\gnuplot\004-points.png'
plot 'c:\home\gnuplot\test.dat' with points
set output 'C:\home\gnuplot\005-dots.png'
plot 'c:\home\gnuplot\test.dat' with dots
set output 'C:\home\gnuplot\006-steps.png'
plot 'c:\home\gnuplot\test.dat' with steps
set yrange [0:600]
set output 'C:\home\gnuplot\007-lines-yrange0_600.png'
plot 'c:\home\gnuplot\test.dat' with lines
set xlabel "x-label"
set ylabel "y-label"
set output 'C:\home\gnuplot\008-lines-xylabel.png'
plot 'c:\home\gnuplot\test.dat' with lines
set title "test graph"
set output 'C:\home\gnuplot\009-lines-title.png'
plot 'c:\home\gnuplot\test.dat' with lines
exit

[gnuplot]PNG ファイルに出力する

  1. png ファイルに出力することを明示
  2. 出力ファイルを指定
  3. 一度 plot
    この状態ではまだ gnuplot が指定の png ファイルを抱えたままになっているので、ここで gnuplot を終了するか、出力先を png から変更してやる必要あり
  4. 出力先を win に戻す
  5. 再度 plot
  6. png ファイルが閉じられ、結果が表示できるようになる
gnuplot ターミナルでの操作手順は以下の通り
gnuplot> set term png size 400,300
Terminal type set to 'png
Options are 'nocrop font arial 12 size 400,300 '
gnuplot> set output 'C:\home\gnuplot\000.png'
gnuplot> plot 'c:\home\gnuplot\test.dat'
gnuplot> set term win
Terminal type set to 'windows'
Options are 'color noenhanced font "Arial, 10"'
gnuplot> plot 'c:\home\gnuplot\test.dat'
Closing C:\home\gnuplot\000.png
Example: test.dat
1 100
2 150
3 120
4 180
5 200
6 240
7 290
8 340
9 400
10 500
出力結果