ほぼ老人のプログラミング日記

定年後の平凡なサラリーマンの趣味の日記

jinja2 で日本語の変数名

思うところがあって、jinja2 で日本語の変数名が使えるかどうか確認してみた。 jinja.palletsprojects.com

from jinja2 import Template


form = '''
氏名 : {{ 氏名 }}
電話番号 : {{ 電話番号 }}
郵便番号 : {{ 郵便番号 }}
住所 : {{ 住所 }}
'''

template = Template(form)
data = {
    '氏名': '長井英雄',
    '電話番号': '0934297964',
    '郵便番号': '811-3425',
    '住所': '福岡県大牟田市三池3-15-1',
}

print(template.render(data))
  • このサンプルで使用したデータは、下記のサイトで生成した疑似個人情報です。 hogehoge.tk

実行してみます。

氏名 : 長井英雄
電話番号 : 0934297964
郵便番号 : 811-3425
住所 : 福岡県大牟田市三池3-15-1

問題なさそうです。

定年退職しました

先日、定年退職しました (3月生まれです) が、定年後再雇用で嘱託社員として働いているので、生活の上では何の変化もありません。
業務も定年前後で同じプロジェクトなので変化は皆無です。変わったことといえば給料が少なくなったくらいです(定年前の 70% 位)。

生活や仕事上の変化がないことはわかっていたことなので、その事については何の感想もないのですが、「定年退職」という区切りがついたことで気持ちの上の変化というか何らかの感情が湧いてくるんじゃないかと思っていたのですが、何の感情も湧いてきませんでした。

aboutページにも書いていますが、私の職業はプログラマーです。定年退職後も現役プログラマーを続けているのもなかなか珍しいのではないかと思っていますが、世の中どんなもんなもんでしょうか?

私もある時期、管理職やプロジェクト・マネージャーのような「プログラミングをしない人」を目指したこともあったのですが、どうにも性に合わないのと、やはりプログラミングの方が好きだっので、いつしか「一生、現役プログラマー」を目指すようになり、結果今でも会社勤めをしていますが職種はプログラマーとして生計を立てています。

今のところ65歳までは働くつもりではいますが、技術的な面より体力的な衰えをひしひしと感じています。特にコロナ禍になってテレワークが中心になってあまり体を動かさなくなったのも原因の一つとは思います。

スキルアップもしていかなきゃいけないのですが、体力づくりも「やっていかなきやなぁ」などと思っています。

iPad Pro を注文しました

妻が還暦のお祝いにiPadを買ってくれるというので、速攻で (気が変わらないうちに) 発売したばかりの iPad Air (第5世代) を注文しました。
iPad Air はストレージのサイズが 64GB と256GB の 2 種類しかないので必然的に 256GB にしました。あと、WiFi+Cellular モデルにしました。これは、バッテリーが劣化して最近極端に使用頻度が落ちた Xperia X Compact に付けている IIJmio のsim を流用しようと思ったからです。
これで、価格は ¥110,800 です。念の為、妻に確認後、注文してから、落ち着いてレビューサイトなどで iPad Air のレビューを見ていたところ、iPad AiriPad Pro を比較している記事を沢山みかけました。

そもそも、iPad Air を選んだ理由は「新しいものはいいものだ」、「iPad Pro は高いし、俺にはオーバースペック」という思い込みだけで選んだのでスペックなどを吟味したわけではありませんでした。

そういうわけで、実は私にとってはいつものことなのですが、買ってから詳細を調べるという、ある意味残念なことをしていたわけです。そこでわかった衝撃の事実 iPad Pro (128GB, WiFi+Cellular) との価格差はなんと ¥2,000。う〜ん、ちょっと悩んで、まずは iPhoneApple Store を開いて注文をキャンセル出来るか確認。よし、キャンセルはできそうだ。

さらにレビューサイトで Air と Pro 比較記事を色々と読む。読めば読むほど、Air を買う理由がなくなくっていく。まぁこれは私の個人的な理由なので、Air の方がいい人は沢山いらっしゃると思います。わたしが、Pro の方が良いと思ったところは、

  • 256GBのストレージは私には必要ない(たぶん)
  • ディスプレイは Pro の方が良さそう
  • ProはUSB-C/Thunderbolt搭載

と、いったところです。あと、あまり写真は撮らないのてカメラの違いは気になりません。

結局、2 時間くらい悩んで、Air をキャンセルして、Pro の方をあらためて注文しました。納期は 3 週間位かかりそうです。

新型コロナワクチンを接種してきました

1時間ほど前に新型コロナワクチンを接種してきました。前回 2 回は、ファイザー製で今回はあえてモデルナ製にしました。前回の副反応は少し発熱があったのと、一週間位倦怠感があった程度で生活や仕事に支障はありませんでしたが、今回はどうでしょう。モデルナ製は副反応がきついって言うし、ちょっとびびってます。

平熱が低いせいか、37 度位の熱でも相当きついのに、さて今回はどうなるでしょうか。

 

 

2022/3/13 8:13 追記

全体的に体がだるい。発熱も少しある。

 

2022/3/13 11:5 追記

解熱剤飲んで、寝てたせいかだいぶ楽になった

 

2022/3/13 14:13 追記

やっぱり、きついので 2 回目の解熱剤を飲んで、少し寝た。でもやっぱりだるい

 

2022/3/13 17:45 追記

微熱が続いている感じ、こりゃ噂通り2回目よりきつい

 

2022/3/13 19:1 追記

熱、上がってきた、38.4℃ ある。ロキソニン飲んだ

 

2022/03/13 20:56 追記

ロキソニン、恐るべし、熱も37℃位まで下がったし、ずいぶん楽になった

 

2022/03/14 17:30 追記

午前中はまぁまぁ大丈夫だっのだけれど、午後からまた熱が出てきた。37.4℃

 

2022/03/14 21:07 追記

19時ごろアセトアミノフェンの解熱剤飲んだけど、熱は下がらない。けど、なんか知らんけど少し楽になった気がする。

 

2022/03/15 12:33 追記

やっと、元に戻りました。

 

「北九州市 新型コロナウイルス感染症 陽性患者数」日毎集計プログラム

私が住んでいる北九州市では、市のホームページで市内の新型コロナウイルスの感染状況などが発信されています。

www.city.kitakyushu.lg.jp

やはり、新型コロナウィルスの感染状況など気になるものですから、時々は見ていました。そんな中、上のページから「市内の最新感染動向」というページにたどり着き、そこから感染状況のデータがオープンデータとしてダウンロードできることを知りました。

stopcovid19-kitakyushu.jp

GROWI へのデータ移行も終わり、せっかく Python に取り組み始めたので、また何か作ってみたいと思っていたこともあり、「これは良いデータを見つけた」と思い、このデータからカレンダー形式で日毎の感染者数を表示する HTML ファイルを出力するプログラムを作ってみることにしました。
先に完成形のスクリーンショットを載せておきます。

f:id:tiger62shin:20220307170106p:plain

このように日毎の感染者数を集計して出力しています。ピンク色のセルは前週の同一曜日より感染者数が増えているところ、黄色のセルは減っているところです。
感染者数がいない (ゼロ) の日は白色にしています。
なんとなく、感染者数が減ってきているのがわかる気がします (2022/3/7 福岡県で実施中の「まん延防止等重点措置」が解除されました)

いきなり、スクリーンショットを載せましたが、実際にはこの段階では頭の中に完成形のイメージがあるだけですから、実現方法を考えていきます。

入力データ

まずは、どのような形式のデータがダウンロードできるのか確認します。対象とするデータは次のページからダウンロードできる「北九州市 新型コロナウイルス感染症 陽性患者属性」とします。

ckan.open-governmentdata.org

実際にダウンロードして中身を確認してみます。

f:id:tiger62shin:20220307171521p:plain

1 行で陽性患者 1 名分となっています。[公表_年月日] があるので、これをキーにしてデータ件数を数えればよさそうです。

入力データの取得

GROWI データ移行で使用した requests モジュールが使えそうです。

入力データの読み込みと集計

入力データの形式が CSV なので、CSV パーサー探してきて日付をキーにしたディクショナリに集計すればよいと考えていていたところ pandas の入力に CSV データが指定できることがわかり、「読み込み→集計」が pandas で完結するんじゃないかと思い調べてみました。
まずは、簡単なテストプログラムを作ってみます。

import requests
import io
import pandas as pd

url = 'https://ckan.open-governmentdata.org/dataset/aad66771-0e86-4d38-b08e-7b74d31f442e/resource/111b9476-bc80-4700-9551-3ba8a4ffcebc/download/401005_kitakyushu_covid19_patients.csv'
res = requests.get(url)
df = pd.read_csv(io.BytesIO(res.content), encoding='shift-jis', encoding_errors='ignore')
print(df.head())

問題なさそうです。
encoding_errors='ignore' があるのは元データにデコードできないデータがあってエラーになってしまうので指定しています。
日毎の集計は DataFrame の size() メソッドでできそうなところめまでは、わりとすぐに突き止めたのですが、size() メソッドでちょっとハマりました。そもそも pandas は存在は知っていましたが、使うのは初めてなので DataFrame や Series などの特性もわかっていませんでした。
DataFrame に対して size() メソッド実行すると Series になるところまでは分かったのですが、Series から DataFrame に戻す方法がわからなかったりで、結構時間がかかりました。最終的にこのようなコードになっています。

number_of_patients = df.groupby('Date').size() \
    .reset_index(name='Count') \
    .set_index('Date')
  • 'Date' をキーにして件数を数える
  • reset_index() で Series から DataFrame に変換。この時、件数に 'Count' という名前をつける
  • 'Date' (日付) をインデックスにする

Series から DataFrame に戻しているのは、この後各日のステータス (セルの色を変えるための「増えた」、「減った」の状態) の列を加えるためです。

HTML の出力

Python で使えるテンプレート エンジンを探したところ jinja2 を見つけましたので、これを使うことにします。



pandas 以外にも、いろいろなところでハマっていたので (pandas の使い方は、もっとしっかり勉強する必要がありそうです)、結構時間がかかりましたが、とりあえず完成しましたので、一日一回定時起動して生成した内容を公開しています。

www.calcium.mydns.jp

データはあまり頻繁には更新されないみたいなので、今現在の状況はわかりませんが、おおよその傾向はわかるのではないかと思います。

GROWI の時はソースコードもブログに掲載しましたが、これからは GitHub の方で公開します。

github.com

たまには、ジャンクPCでも - ThinkPad X61

以前は、出張でよく東京に行っていたので、帰りに秋葉原に寄ってジャンクPCを買って帰ったりしていたのですが、ここ数年は出張に行かなくなり、ジャンクPCもしばらく買っていませんでした。

昨年の夏あたりだったと思うのですが、たまたまネットでジャンクのMacBookを再生してしている人のことを知り「あー、Macのジャンクいじっている人もいるんだなー」、「俺もやってみるかなー」と思ったのですが、地方に住んでいるので、ジャンクPCを手に入れるにはオークションかハードオフくらいしかありません。ハードオフも近所にはなく、以前もよく利用していたオークションでチェックするようになりました。

結局、MacBook Air のジャンクは 2, 3 台入手して楽しんで、仕掛かりの MacBook Air の部品を探しているうちに、手頃な値段の ThinkPad X61 を見つけました。もちろんジャンクです。以前から X61 は欲しかったので少し競りましたが、落札しました。
以前は、ThinkPad X60X61 はオークションに多く出品されていましたが、最近はめっきり少なくなりました。

送られてきた X61 の外観をざっとチェックしたところ大きなクラックはありませんでしたが、天板が傷だらけです。ただ、ThinkPad 特有のピーチスキンのベタつきがないのはよかったです。

f:id:tiger62shin:20220226214657p:plain

f:id:tiger62shin:20220226215355p:plain

次に電源入れて起動して、BIOS を確認します。メモリがどの程度載っているか気になっていましたので、確認したところ 4GB 載っていました。これは、嬉しい。仕様上の MAX 載っています。実際には 8GB まで載るらしいですが。

f:id:tiger62shin:20220226215128p:plain

HDD には Windows10 がインストールされていたので、そのまま起動させたところ問題なく起動しました。ネットワークにも接続できたので H/W としては問題なさそうです。この Windows10 はなんか、問題ありそうなので、消して別の何かをインストールしましょう。

さて、この ThinkPad X61 の整備計画をたてます。

  • まずはディスプレイから、右側 1/3 程度が暗くてちょっとつらい感じです。上の写真の右側が暗いのは影ではなく実際にこのような感じで暗いです。文字が読めないほどではないので、このままでもよいのですが、やはり気になるので、直したいと思っています。今のところバックライトを交換する方向で考えています。
  • 天板はつや消しのクリア吹けばきれいになると思います。
  • HDD は余ってる SSD に交換して、軽めの Linux でも入れるつもりです。
  • バッテリーは完全にダメになっているのですが、このままにしておくことにします。

だいたいこんな感じでしょうか、完成がいつになるかはわかりませんが、ちょっとずつやっていこうと思います。