ロゴ付きのQRコードを作ってみた

2024年4月27日

 5年前に、シティフォトロゲイニングというスポーツで得点を集計するためにスマートフォンを利用する方法について記事を投稿しました。
 受付時には、参加者一人ひとりに地図と個人別のエントリーシートをお渡ししています。このエントリーシートには、WebシステムにアクセスするためのQRコードが印刷されています。
 QRコードだけではデザインが寂しいため、各大会ごとに関連するイラストを加えることを検討しています。

 まず、QRコードにロゴを組み込む仕組みについて調査しました。 その結果、QRコードは印刷面が汚れたり欠損しても読み取り可能な誤り訂正機能を備えていることがわかりました。
 つまり、QRコードの画像に重ねてあるロゴは、汚損として認識され、正しいデータへと自動的に訂正されるのです。

手順は以下の通りです:

  1. 参加者固有のログイン用URLを表すQRコードを生成し、一時ファイルとして保存します。
    • この際、誤り訂正レベルを「L」「M」「Q」「H」の4段階中、「Q」に設定します。これにより、QRコード画像の約25%の欠損まで訂正が可能になります。
  2. 保存した一時ファイルの横幅と縦幅のサイズを取得します。
  3. 挿入したいロゴやアイコンのサイズをQRコードの約1/3に設定し、指定した座標(例えば中央)に重ねます。
    • 横幅と縦幅がともに1/3であるため、面積比では約1/9となり、誤り訂正機能でカバー可能な十分なサイズとなります。

こうして出来上がったQRコードは下図のようになります。

カテゴリー: コンピュータとインターネット, ラン, 趣味 | タグ: , , , | コメントをどうぞ

ネジバナがやって来た

2023年9月7日(木)

3カ月ほど前のことになりますが、屋上に去年から放置していたプランターにネジバナが花を付けていました。
以前は近所の公園の草地に沢山咲いていたのですが、今年は見当たりませんでした。
好きな花のひとつなので残念に思っていたのが、思いがけなく私のプランターに咲いているとは。
煙のように細かい種らしいので、風に乗って飛んできたのがたまたま私のプランターに落ちて育ったのか。

とにかく嬉しくて絶やしたくないので、そのプランターはネジバナと周りに生えている草もそのままにしておくことに。
早速ネジバナの特徴や育て方、増やし方をネットで調べて勉強。
花の時期が過ぎて枯れた頃に種を採取して、同じプランターに蒔いてみました。
どうやら欄の一種で、欄菌が無いと発芽しないと書いてあるので・・・。
でも、最初にやって来た種はどうして発芽したのだろう????

花が終った茎は枯れてしまったのですが、8月の中頃に観察してみると、枯れた株の脇に新しい葉が二株育っていて、これも冬には一旦枯れて来春葉を出して、梅雨頃に花を咲かせてくれるものらしい。
株別れで増えるのと実生で増えるのとあるようなので、大事に見守ってみよう。
周りに小さな葉が沢山芽吹いているが、これはネジバナではなくて他の草の芽のようだ。ネジバナの種からの発芽が何時頃どのようになるのか知らないが、増えてくれると嬉しいな。

カテゴリー: 趣味, 家庭菜園 | タグ: , , | コメントをどうぞ

AIチャットと会話してみた

2023年4月23日(日)

昨今話題の「AIChat」と会話してみました。

質問1:
名前を入力すると、hello.phpというプログラムにPOSTするhtmlを書いてください。

回答1:
名前を入力すると、hello.phpというプログラムにPOSTするhtmlを書くというのは、以下のようなコードになるかもしれません。
このコードは、テキストボックスと送信ボタンを含むフォームを作成します。テキストボックスには、nameというidとname属性があります。送信ボタンをクリックすると、フォームのデータがhello.phpというプログラムにPOSTメソッドで送られます。

<form action="hello.php" method="post">
  <label for="name">名前:</label>
  <input type="text" id="name" name="name" required>
  <input type="submit" value="送信">
</form>

質問2:
「nameというデータをPOSTで受け取ると、「こんにちは、nameさん」と表示するPHPプログラムを書いてください。」

回答2:nameというデータをPOSTで受け取ると、「こんにちは、nameさん」と表示するPHPプログラムを書くというのは、以下のようなコードになるかもしれません。
このコードは、$_POSTというスーパーグローバル変数を使って、POSTで送られたデータを取得します。その中から、nameというキーに対応する値を$nameという変数に代入します。その後、$nameが空でないかどうかをif文で判定し、空でない場合は「こんにちは、nameさん」と表示し、空の場合は「名前を入力してください。」と表示します。

<?php
// POSTで送られたデータを変数に代入
$name = $_POST["name"];

// データが空でないかチェック
if ($name != "") {
  // データが空でない場合は、挨拶を表示
  echo "こんにちは、" . $name . "さん";
} else {
  // データが空の場合は、エラーメッセージを表示
  echo "名前を入力してください。";
}
?>

細かい修飾は別として、間違っていない!
開発環境にコピーしてテストしてみると、ちゃんと動く。
さて、このAIChatをアシスタントに採用するか、敵にするか。

カテゴリー: コンピュータとインターネット | タグ: | 2件のコメント

スマホのOSアップグレードで大失敗

2023年3月23日(木)

Androidのスマホを使っているが、最近OSのアップグレードのお知らせがあったので、うっかり深く考えずにアップグレードをしてしまった。
これが大失敗。
玄関ドアのロック本体との通信ができなくなってしまったのだ。
メーカサイトで調べると、スマホアプリとロック本体のBluetooth接続ができないトラブルが発生する機種がある、回避のためAndroid 13へのアップグレードは控えるようにとの記事が見つかった。どうやら私が使っている機種が該当するらしい。
幸い、Wi-Fiもしくはモバイルネットワーク経由でリモート接続ができるので、玄関が開かずに締め出しという事態は免れたんだが。
こんなバカなアップグレードは止めて欲しい。
ロック本体のソフトアップデートのお知らせが来て、Bluetooth接続ができない件に気が付いた。
繋がらないのは私の端末だけで、iPadや家族の端末からは接続できるので、ソフトのアップデートは出来たのは幸いだった。

カテゴリー: コンピュータとインターネット, スマートロック, DIY, Qurio Lock | タグ: , , | コメントをどうぞ

e-Tax使って15回目の確定申告

2022年3月21日(月)

手書きの確定申告からe-Taxに切替えたのが2008年2月22日と記録しているので、今回2022年2月の「令和3年分確定申告」で15回目となる。
サービス開始当初から利用していることになる。
その頃は、NTTコミュニケーションズの「接触型ICカードリーダ・ライター」が電子マネー実証実験のため会社から支給されていた(と記憶している)を使って、住基ネットカードに格納した公的個人認証キーを利用していた。

翌2009年にはOSをWindows XPにしたためアプリが変更になり、NTTコミュニケーションズのICカードリーダ・ライターはサービス終了で利用できなくなった。
仕方がないので、SONYのフェリカポート/パソリを購入して13年経った現在も使っている。

例年、還付申告だけだったので、申告をして処理結果の通知を受信し、還付金の振り込みを待つだけだった。
今回、令和3年分の確定申告で所得税の不足分を納付するという過程で改めて考えさせられたことがあるので、忘れないように整理しておくことに。

  1. 個人所得の確定申告は、3月15日までに「申告」と「納付」を完了させなければならない。(コロナで延伸されたことも有ったが)
    還付請求だけの時は「納付」は要らない。
  2. 受付時に申告内容が「正しい」か「誤っているか」は税務署では審査しない。
  3. 申告後、納付前に誤りに気付いたら期限内に「何回でも」「訂正申告」ができる。
    申告内容(データ)は「最後に送信したもの」が「正」とされる。
  4. 期日を過ぎてから「多く納め過ぎた」ことに気が付いたときは、「更正の請求」をして「返して」もらう。
    納付後5年間くらいは請求する権利がある。
  5. 「納付額が足りなかった」ことに気が付いた場合は「修正申告」をする。
    税務署の方で調べて「更正」の命令が出された時も「修正申告」するが不正があると「ペナルティ」が課せられる。

基本的に「自己申告」であり、税務署は申告をそのまま受け付ける。正しいかどうかは、後ほどゆっくり調査する。抜き取り調査なのかな?
他の役所などの窓口のように、受付時にチェックしてくれることは無い。
e-Taxで申告すると、紙の書類は自己保管しておけばよいが、いつ調査されても良いようにしっかり保管しておく必要がある。

カテゴリー: 未分類 | タグ: , , , , | コメントをどうぞ

玄関ドアの鍵をスマホで開閉する

2022年2月17日(木)

昨年(21年)10月に玄関ドアの鍵をスマホで操作できるようにスマートロックを後付けしました。使用して4カ月が経過したところで感想を書いてみることにしました。
スマートロックも、調べてみると幾つかの商品が有って、それぞれの評価や口コミを読んでみるとどれが良いのか迷ってしまいます。
結局、国内メーカで名の通ったSONY系のQurio Lockを選択しました。

Qurio Lock

商品が届いたので、早速説明書を読んで取り付け開始。
サイズを調整したりして取り付け準備完了。口コミで見かけた「取り付けたが1週間で外れて落ちてしまった」というのが気になっていたので、両面テープで取り付ける作業に注意を注ぎました。
 ① ドアの接着面を清掃して埃や油汚れを除去する。最後はアルコールで拭き上げる。
 ② 接着後、クランプなどでできるだけ長時間加圧しておく。
結果、手で力を加えてもびくともしないように接着できました。
4カ月が経過した現在も、しっかりと着いています。

外出先からも操作や確認が可能なように、Qurio Hubも同時に取り付けました。
こちらは、インターネットに接続できるWi-Fiルータとドアに取り付けたQurio lockを、Wi-Fi電波とBluetoothで中継する役目を担います。
最初は、まぁまぁ両者の中間あたりにある電源コンセントに差して使用していましたが、ネットワーク監視ログでは、再々切断・再接続が見られました。
スマホのWi-Fiアナライザーツールを使って、Wi-Fi電波の強弱を調べて、玄関ドアの近くでWi-Fi電波の強度が得られる場所を探し、電源を延長して移動しました。
その後は、ログを見ても切断・再接続が殆ど見られず安定稼働しています。

厳冬期の今は、帰宅したときは車庫の車の中からスマホで解錠しておいて、寒い玄関ドアの前でまごまごしないで済みます。
他の方の評価や口コミを参考に、取り付けの段取りや正しい使い方をシミュレーションしてから取り掛かったのが満足できる結果につながったと思っています。
開閉記録には、スマホのアプリに登録した名前で「〇時〇分にXXXさんが解錠しました」「〇時〇分にXXXさんが施錠しました」と残るのもセキュリティ上満足です。
家族がバラバラに外出している時も、スマホに通知が届くので誰が帰宅したか家族全員に分かるのも便利です。

カテゴリー: スマートロック, DIY, Qurio Lock, 日曜大工 | タグ: , , , , , , , | コメントをどうぞ

Asteriskでモーニングコール(超簡単版)

2021年11月11日(木)

Asteriskでモーニングコールを利用しようといろいろ考えていた。
頭の中で概ね構想が固まったので、夕食後作り始めたら、朝まで掛かってしまった。久し振りに完徹作業。

構想
①モーニングコール予約は “73hhmm”(hhmmは時分24時間表示4桁)をダイヤルする。
 「予約を受け付けました」のアナウンス。
②モーニングコール取消は “83hhmm” をダイヤルする。
 「予約を取り消しました」のアナウンス。
③予約可能時間は、現在から24時間以内。
 ・現在時刻より前の時刻の予約は、翌日の時刻。
 ・現在時刻より後の時刻の予約は、今日の時刻。
④予約は、linuxのshellスクリプトで、Asterisk用のcallファイルを作成して、最終更新タイムスタンプをコール予約時刻に変更してから “/var/spool/asterisk/outgoing” に保存する。
 “/var/spool/asterisk/outgoing” に保存されたcallファイルは、タイムスタンプが未来時刻の場合、その時刻まで読み込まれないという仕様を利用できる。
 予定時刻到来まではフォルダ内にあるので、削除するだけで簡単に「予約取り消し」ができる。
⑤予定時刻になった時の動作
 ・予約した内線番号をコールする。
 ・応答したら「ご予約の時間になりました。〇月〇日△曜日hh時mm分です。」のアナウンスの後は「今日の音楽(ランダム選曲)」を流す。

アナウンスに必要な音声は「テキスト⇒音声変換」で作成した後、gsmコーデックで “/var/lib/asterisk/sounds/ja” フォルダに格納して利用する。

extensions.conf のコーディング
コーディングはAsteriskの利用環境によって異なります。
私の事例では、内線番号は201~299。外線でも“7”で始まる番号は利用されていない。
①予約受付
exten => _73[0-1]X[0-5]X,1,NoOp(モーニングコール登録)
same => n,System(/usr/local/bin/mctouroku.sh ${EXTEN:2} ${CALLERID(num)})
same => n,Answer()
same => n,Wait(1)
same => n,Playback(yoyakuuketsuke)
same => n,Hangup()

exten => _732[0-3][0-5]X,1,NoOp(モーニングコール登録)
same => n,System(/usr/local/bin/mctouroku.sh ${EXTEN:2} ${CALLERID(num)})
same => n,Answer()
same => n,Wait(1)
same => n,Playback(yoyakuuketsuke)
same => n,Hangup()

②予約取り消し
exten => _83[0-1]X[0-5]X,1,NoOp(モーニングコール取消)
same => n,System(/usr/local/bin/mctorikeshi.sh ${EXTEN:2} ${CALLERID(num)})
same => n,Answer()
same => n,Wait(1)
same => n,Playback(yoyakutorikeshi)
same => n,Hangup()

exten => _832[0-3][0-5]X,1,NoOp(モーニングコール取消)
same => n,System(/usr/local/bin/mctorikeshi.sh ${EXTEN:2} ${CALLERID(num)})
same => n,Answer()
same => n,Wait(1)
same => n,Playback(yoyakutorikeshi)
same => n,Hangup()

[misc]
; モーニングコール音楽再生
exten => 997,1,Answer()
same => n,Wait(1)
same => n,Playback(goyoyakunojikan)
same => n,Set(FutureTime=$[${EPOCH} + 5])
same => n,SayUnixTime(${FutureTime},Japan,bdAR)
same => n,Playback(desu)
same => n,MP3Player(/var/lib/asterisk/mp3/alegro.mp3)
same => n,Wait(1)
same => n,Hangup()

③予約登録のshellスクリプト(/usr/local/bin/mctouroku.sh)
 callファイルを作成するフォルダは “/home/share/mctest” の例
 ファイル名は “xxxhhmm.call” xxxは内線番号、hhmmは予約時分(24時間4桁表記)

#!/bin/bash
#
# モーニングコール登録
# /usr/local/bin/mctouroku.sh

JIKOKU=${1}
NAISEN=${2}
GENZAI=date '+%H%M'

JIKOKU1=’1’${1}
GENZAI1=’1’${GENZAI}

if [ $((JIKOKU1)) -le $((GENZAI1)) ]; then
TS=date '+%Y%m%d' --date '1 day'
else
TS=date '+%Y%m%d'
fi

TS=${TS}${JIKOKU}

cd /home/share/mctest
STR1=${2}${1}.call
echo ‘Channel: SIP/’${2} > ${STR1}
echo ‘CallerID: Good_Morning!!’ >> ${STR1}
echo ‘MaxRetries: 0’ >> ${STR1}
echo ‘RetryTime: 300’ >> ${STR1}
echo ‘WaitTime: 60’ >> ${STR1}
echo ‘Context: misc’ >> ${STR1}
echo ‘Extension: 997’ >> ${STR1}

sleep 1
touch -c -t ${TS} ${STR1}
sleep 1
chown asterisk:asterisk ${STR1}
sleep 1
mv ${STR1} /var/spool/asterisk/outgoing

exit 0

④予約取り消し(/usr/local/bin/mctorikeshi.sh)
#!/bin/bash
# モーニングコール取消
# /usr/local/bin/mctorikeshi.sh

JIKOKU=${1}
NAISEN=${2}
STR1=${2}${1}.call
rm -f /home/share/mctest/${STR1}
rm -f /var/spool/asterisk/outgoing/${STR1}

exit 0


カテゴリー: Asterisk, コンピュータとインターネット, DIY, 趣味, IP-PBX, IP電話 | タグ: , , , , , | コメントをどうぞ

AsteriskからFAXを送る(改良版)

2021年10月24日(日)

前に投稿した「AsteriskからFAXを送る」を書いたときは、送信対象のPDFファイルをAsteriskの仕様に合う “tiff” に変換することができなかったために、手作業でPDFを全ページ「縦置き」に揃えて「tiff」変換して「送信フォルダ」に置く、という面倒なことにしていましたが、何とか解決してA4縦・横混合のPDFをそのまま「送信フォルダ」に置くと送信できるようになりました。
前回投稿:https://mrhiroshi2010.wordpress.com/2019/05/27/asterisk%e3%81%8b%e3%82%89fax%e3%82%92%e9%80%81%e3%82%8b/

Asteriskから送信できるtiffファイルのサイズは、1728 x 2339 x 1BPP 前後であることが求められます。
設置条件
①送信するPDFファイル名は「宛先FAX番号-外線トランク番号」ex.0312345678-901
②送信するPDFのサイズは A4縦、横どちらでも可
③送信するPDFの保存フォルダ サーバの共通フォルダ/sendpdf ex. /home/share/sendpdf
④送信済PDFの保存フォルダ  サーバの共通フォルダ/sentpdf ex. /home/share/sentpdf
⑤変換したtiffの保存フォルダ  サーバの共通フォルダ/send_files ex. /home/share/send_files

次のシェルスクリプトで、縦横ページ混合のPDFを全て縦置きに変換します。
予めインストールしておくパッケージは次の3つです。
# apt install imagemagick ghostscript pdftk

#!/bin/bash
# pdfファイルを縦置きにする
# /usr/local/bin/pdftate.sh

cd /home/share/sendpdf
#cd /home/share/sent_files

files="./*.pdf"
for filepath in ${files}
do
   pdfname=`basename ${filepath}`

# pdfファイルの中身が縦か横かを調べて、全て縦にする。
    convert xc:none -page A4 temp.pdf
    convert xc:none -page A4 temp1.pdf
    convert xc:none -page A4 temp2.pdf

    identify -format "Page %s size: %W x %H\n" ${pdfname} | grep "Page.* size:" \
    | while read Page _pageno size  _width x _height rest; \
    do \
      [ "$(echo "${_width} / 1"|bc)" -gt "$(echo "${_height} / 1"|bc)" ] \
        && pdftk ${pdfname} cat $((_pageno + 1))right output temp1.pdf \
        || pdftk ${pdfname} cat $((_pageno + 1)) output temp1.pdf ; \
      if [ ${_pageno} -gt 0 ] ; \
        then pdftk temp2.pdf temp1.pdf cat output temp.pdf ; \
        else pdftk temp1.pdf cat output temp.pdf ; \
      fi ; \
      cp temp.pdf temp2.pdf ; \
    done

    mv temp.pdf ${pdfname}
    rm -f temp.pdf temp1.pdf temp2.pdf

done
exit 0

続いて、PDFをtiffに変換します。

#!/bin/bash
# /usr/local/bin/pdfsendfax.sh

cd /home/share/sendpdf
files="./*.pdf"
for filepath in ${files}
do
   pdfname=`basename ${filepath}`
   tifname=`echo ${pdfname} | sed "s/.pdf/.tif/"`
   gs -q -dNOPAUSE -dBATCH -sDEVICE=tiffg3 -r209x200 -sOutputFile=${tifname} ${pdfname}
   mv ${tifname} /home/share/send_files

   STR=`date +%s`
   STR=${STR%.*}
   STR=`date -d '@'${STR} +"%Y%m%d-%H%M%S"`

   STR0=`basename ${pdfname} .pdf`
   STR0=${STR0%-*}
   STR0=${STR0}'-'${STR}'.pdf'

   touch -c ./${pdfname}
   mv ./${pdfname} ../sentpdf/${STR0}

done
exit 0

これで、縦・横ページ混合のPDFをFAX送信可能な「縦 1728 x 2339 x 1BPP」のtiffに変換できるので、後は前回の記事の送信プログラムがCRON起動されるとFAXが送信されます。
送信結果がOKなのかNGなのか分かるように、extensions.confに追記しました。
次のコンテキストで、FAX送信結果を “SUCCESS” か “Error message” で送信済PDFと共にフォルダにアウトプットします。

; ファクス送信のためのコンテキスト
[send-fax]
exten => send,1,NoOp(**** SENDING FAX ****)
 same => n,SendFAX(${FAXFILE},d)
 same => n,Wait(6)
; same => n,Hangup()

; Hangup.
exten => h,1,NoOp(Hangup send-fax)
 same => n,NoOp(${FAXSTATUS})
 same => n,NoOp(${FAXERROR})
 same => n,System(echo “${FAXSTATUS}  ${FAXERROR}” >> /home/share/sentpdf/Result-${FAXFILE:23:26}.txt)


カテゴリー: 未分類 | タグ: , , | 1件のコメント

Asteriskの日本語音声を作る

2021年5月30日(日)

先に作り込んだAsteriskのモーニングコールは快適に稼働していますが、ネットからダウンロードした「日本語音声(gsm)」の中には適切な応答音声が見当たらない。
そこで、自分の好みの音声ガイダンスを作ることにした。
と言っても、自分の声をコンバートして聴いてもつまらない。というか、聞くに堪えない。

ネットで「テキスト読み上げ mp3」などと検索してみると、日本語テキストを読み上げてmp3に変換してダウンロードできるサービスが見つかった。
しかも、男声、女声の数パターンの音質が用意されている。
Asteriskの音声ガイダンスは gsm 形式がメインなのだが、mp3でもできないことは無い。
と言うことで、mp3音源でモーニングコールの音声応答を extensions.conf に設定してみた。

「ご予約の時間になりました。」
「〇月〇日〇曜日 XX時XX分」
「です。」
というガイダンスの後、音楽が流れる仕掛けなのだが、mp3音源だと MP3Player の前後の間が開き過ぎる気がする。いわゆる「間延び」して聞こえるのだ。

; モーニングコールガイダンス
exten => 997,1,Answer()
same => n,Wait(1)
same => n,MP3Player(/var/lib/asterisk/mp3/goyoyakunojikan.mp3) ;ご予約の時間になりました。
same => n,Set(FutureTime=$[${EPOCH} + 5]) ;音声案内で時間のずれを5秒間考慮
same => n,SayUnixTime(${FutureTime},Japan,bdAR) ; 〇月〇日〇曜日 XX時XX分
same => n,MP3Player(/home/share/asterisk-conf/morningcallvoice/desu.mp3) ;です。
same => n,MP3Player(/var/lib/asterisk/mp3/music.mp3) ;音楽を流す
same => n,Wait(1)
same => n,Hangup()

そこでさらに「mp3 gsm 変換」などで検索したところ、いろいろな入力を希望のフォーマットに変換してダウンロードしてくれるサービスサイトが見つかった。
早速、先に作成したテキスト読み上げの “mp3” 音源を “gsm” に変換してサーバにインストールして “extensions.conf” のスクリプトを変更。

; モーニングコールガイダンス
exten => 997,1,Answer()
same => n,Wait(1)
same => n,Playback(goyoyakunojikan)  ;ご予約の時間になりました。
same => n,Set(FutureTime=$[${EPOCH} + 5]) ;音声案内で時間のずれを5秒間考慮
same => n,SayUnixTime(${FutureTime},Japan,bdAR) ; 〇月〇日〇曜日 XX時XX分
same => n,Playback(desu)             ;です。
same => n,MP3Player(/var/lib/asterisk/mp3/music.mp3) ;音楽を流す
same => n,Wait(1)
same => n,Hangup()

これで、音声案内のつなぎも間が取れて聞き易くなった。
作成した音声と、 SayUnixTime の「 〇月〇日〇曜日 XX時XX分 」の音声のトーンが少し変わるところは、ご愛敬と気にしないことに。
音楽は別のシェルスクリプトで、日替わりの音楽をランダムに選択して気分を変えている。

カテゴリー: Asterisk, コンピュータとインターネット, DIY, 趣味, IP-PBX, IP電話, 日本語音声 | タグ: , , , , , , | コメントをどうぞ

10年日記のバージョンアップ

2021年3月13日(土)

10年日記をバージョンアップしました。
サボってて、4年ぶりのUpdate。
と言っても、マイナーチェンジで、
・終了して再起動したときに、縦スクロールの位置が不安定だったのを修正。
 何と、描画のタイミングの問題でした。50msのスリープを挿入して解決。
・日付移動ボタンのデザイン変更。
ダウンロードは下URLからお願いします。
http://www2.plala.or.jp/pappy/10ydiary/

2012年1月1日に、勤めを完全リタイアしたのをきっかけに書き始めた10年日記。
最初は、退職時にスタッフの一人から頂いた、冊子の10年日記に手書きしてたのですが、段々と手書きが面倒になってきたので、自分でシンプルなアプリを開発しました。
今年で10年目。12月31日になるとピッタリ10年分になる予定です。

来年も元気でいたら、10年分のpdf出力ファイルを印刷屋に持ち込んで、ハードカバーの印刷にしてもらおうと計画中。
1冊だけだから、単価は高くなるでしょうけど、楽しみに書き続けます。


カテゴリー: コンピュータとインターネット, 趣味 | タグ: | コメントをどうぞ