2020年12月12日土曜日

Bloggerにソースコードの埋め込み

 ぐちゃぐちゃになってきたので備忘録

code-prettify

準備:

ヘッダに以下の行を追加するだけ.
<script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js?skin=sunburst">

使い方:

以下のようにコードを書く.
<pre class="prettyprint">
#include &lt;stdio.h&gt;
int main(int argc, char **argv)
{
	return 0;
}
</pre>

結果:

以下のように表示される.
#include <stdio.h>
int main(int argc, char **argv)
{
	return 0;
}

注意:

「<」と「>」を「&lt;」と「&gt;」に置き換えておく必要がある.Cのinclude文やHTMLのtagなど気をつける必要があり.変換スクリプトを用意するのが良さそう.

2020年5月5日火曜日

国立国会図書館デジタルコレクションの愉しみ

国立国会図書館と言えば,日本の全ての出版物が所蔵されているのは有名です.大学で博士号を取得した人であれば,自分の博士論文の一冊がここに収められると聞いたことがあると思います.しかしながら,実際に現地に行って利用した経験は,私にはこれまでありません.

この図書館には当然ながらWebサービスがあり,他の(大学などの)図書館と同様,蔵書検索が可能です.面白いのは,国立国会図書館デジタルコレクションなるものです.著作権の保護期間が満了している書籍が,一冊丸ごと,PDFで公開されています.国会図書館に出向いても,これらの書籍のコピーを一冊丸ごと頼むことは不可能なはずですし,日本史の授業に出てきたような古典であれば,恐らく閲覧もできないのではと思われるので,これは貴重なサービスです.また,現在でも重版され販売されている本であっても,実は著作権が切れているものは多いので,その原著を無料で,しかもPDF形式で見ることができるという便利さもあります.

特に,有名な古典は現在でも出版されていますが,原本出版当時の実物を見ることもなかなか無いので,面白いものが多いです.以下にいくつか紹介します.

紫式部による源氏物語です.上記のリンクは1654年出版のものです.
上の源氏物語を題材にした絵巻物です.絵巻物の形の模写本になったものを見ることができます.
「春はあけぼの」で始まる,清少納言による随筆集です.寛永年間に出版されたものが閲覧できます.
塙保己一によって編纂された,1793年-1819年刊行の一大叢書です.1273種もの古典が含まれており,個別の書物を探さなくても,これを見れば済む場合もあります(cf. Wikipedia「群書類従」).
葛飾北斎の画集です.北斎と言えば富嶽三十六景が有名な画家ですが,これも見応えがああります.漫画とは言っても現在の漫画のようにストーリーのある漫画ではなく,スケッチ集です.
明治時代に,大槻文彦一人によって編纂された,最初の近代的な辞書です.元々は文部省によって刊行される予定でしたが,予算が立ち消えそうになり,1889年から1991年にかけて自費出版されました(cf. Wikipedia 「言海」).amazonでKindle版でも文庫版でも入手可能ですが,こちらではPDFファイルが無料公開されています.出版された時代が感じられ,国語辞典,古語辞典の両方を兼ね備えた辞書として用いることもできます.
現在でも増補版が出版されている漢和辞典です.簡野道明によって編纂され,1923年に刊行されました(cf. Wikipedia「簡野道明」).
和算家(数学者)として著名な関孝和(cf. Wikipedia「関孝和」)の遺稿が1712年に刊行されたものです.

以外と色々な本がPDF化されているので,日本史や国語の授業で学んだ本などを探してみてください.Webの世界と同様,無限とも言える情報が簡単に入手できます.

2020年4月29日水曜日

大学のgmailから他のメールアドレスに転送する方法

大学のメールはGooglegmailシステムを使っていますが,既に自分でメールアドレスを持っている人も多いかと思います.その場合,二つ目のメールアドレスになるので,複数のメールアドレスに届いたメールを確認するのはなかなか面倒だと思います.特に,大学のメールアドレス宛のメールは毎日来るわけではないので,チェックをついついさぼってしまう場合があると思います.そこで,大学のgmailアドレスに届いたメールを自分のメールアドレスに転送する方法を解説します.


.      パソコン(Google Chrome)から開いたgmailの画面です.右上の設定ボタンをクリックします.

2.      開いたメニューの「Settings」をクリックします.




3.      設定画面が開くので,「Forwarding and POP/IMAP」をクリックします.「forward」という英単語が「転送」という意味です.

4.      メールの転送設定その他の設定画面が開くので,「Add a forwarding address」ボタンをクリックします.

5.      ダイアログ(小さい画面)が開くので,ここに転送したい先のメールアドレス(自分が既に読んでいるメールアドレス)を書き込んで「Next」ボタンをクリックしてください.




6.      メールアドレスの確認ダイアログが表示されるので,これで問題なければ「Proceed」ボタンをクリックしてください.

7.      「確認コードがメールアドレスに送信されました」というメッセージが表示されるので「OK」ボタンをクリックしてください.

8.      指定したメールアドレスでメールを確認すると,以下のようなメールが届いています.「address」の後にメールアドレスが書いてあります(図の黒で塗りつぶした部分).また,「Confirmation code」の後に確認コードが書かれています.



9.      Gmailの設定画面を見ると,確認コードを入力する欄がありますので,メールで届いた確認コードを入力して「Verify」ボタンをクリックしてください.

10.    以下のような画面になり,このアドレスに届いたメールは,このgmailに保存されたまま,指定したメールアドレスにも転送されるので,両方でメールを読むことができます.

注意:メールの返事を書く際には,元の大学のメールアドレスが届くメールソフトから書いてください.転送された自分のメールアドレスのメールソフトから返事を書くと,そのメールアドレスから相手にメールが送られます.

追加設定:自分のメールソフトに「メールアドレスの追加」がある場合には,大学のメールアドレスを登録しておくと,同じメールソフトでメールアドレスを切り替えて読むことができます.特に自分個人のメールアドレスがgmailの場合には,これが便利なので,是非この設定に挑戦してみましょう.


2020年2月9日日曜日

SKKの辞書をCSVに変換してみた

SKKの辞書をCSVファイルに変換するためのPythonスクリプトを作ってみました.

ここにある辞書を落として来て,Shift-JISのCSVファイルで出力しました.CSVのライブラリーは使ってません.


#!python3
# 2020/2/9
# 実行方法: ./SKKtoCSV.py SKK-JISYO.file
# 語尾に.csvをつけたファイル名にSJISで出力

# SKK-JISYOをCSVに変換
# EUC-JP -> SJIS
# 先頭;がコメント行
# 先頭>は語尾
# 先頭#は数字の置き換え
# よみ /漢字1;コメント,コメント/漢字2/...
# よみの最後が>もしくはローマ字の場合がある

import sys,os,re
import codecs

def processLine( line, fout ):
    re_pattern_line = '^(\S+) /(.+/)$'
    #re_pattern_line = '^(\S+) /(\S+/)+$'
    re_pattern_kana = '^(.+)([a-z>])$'
    re_pattern_entry = '^(.+);(.+)$'

    print('[{}]'.format(line))
    sys.stdout.flush()
    if line == '':
        print('  -> ignore 1')
        return
    if line[0] == ';':
        print('  -> ignore 2')
        return
    if line[0] == '>':
        print('  -> ignore 3')
        return
    if line[0] == '#':
        print('  -> ignore 4')
        return
    # 処理する
    re_result = re.match(re_pattern_line, line)
    if re_result == None:
        print('  -> None')
        return

    print('  -> re result: {}, {}'.format(re_result.group(1),
                                          re_result.group(2)))
    sys.stdout.flush()
    # よみ
    kana = re_result.group(1)
    # 漢字/漢字/.../漢字/
    kanjistr = re_result.group(2)

    print('  yomi: {}'.format(kana))
    sys.stdout.flush()
    # 最後が子音ローマ字もしくは'>'を除く必要あり
    re_result2 = re.match(re_pattern_kana, kana)
    if re_result2:
        print('  end [{}][{}]'.format(re_result2.group(1),
                                      re_result2.group(2)))
        print('  -> ignore 5')
        sys.stdout.flush()
        return
    # ['漢字', '漢字', ..., '漢字', '']
    kanjilist = kanjistr.split('/')
    print('  kanjilist: {}'.format(kanjilist))
    if len(kanjilist) >= 10:
        print('  (many entry)')
    sys.stdout.flush()
    # ['漢字', '漢字', ..., '漢字', '']
    kanjilist = kanjilist[0:-1]
    print('  -> kanjilist: {}'.format(kanjilist))
    for kanji in kanjilist:
        # 注意: "漢字;こめんと,こめんと"の場合あり
        print('    kanji: {}'.format(kanji))
        sys.stdout.flush()
        re_result3 = re.match(re_pattern_entry, kanji)
        if re_result3:
            print('  comment:{}[{}]'.format(re_result3.group(1),
                                            re_result3.group(2)))
            print('  output: {},{}'.format(kana,
                                           re_result3.group(1)))
            fout.write('"{}","{}",\n'.format(kana, re_result3.group(1)))
        else:
            print('  output: {},{}'.format(kana, kanji))
            fout.write('"{}","{}",\n'.format(kana, kanji))

def SKKtoCSV( fileNameIn ):
    print('processing {}'.format(fileNameIn))
    fin = codecs.open(fileNameIn, 'r', 'euc_jp')
    dataAll = fin.read()
    linesAll = dataAll.split('\n')
    fin.close()
    fileNameOut = fileNameIn + '.csv'
    print('output file name is {}'.format(fileNameOut))
    fout = codecs.open(fileNameOut, 'w', 'shift_jis')
    
    for line in linesAll:
        processLine( line, fout )
    fout.close()

##------
if __name__ == '__main__':
    args = sys.argv
    if len(args) != 2:
        print('{} SKK-JISYO'.format(args[0]))
        sys.exit()
    SKKtoCSV( args[1] )