かかりつけ医院のWebサイトに更新があったらメールで通知するシステム
はじめに
インフルエンザワクチンの予防接種を我が家の私以外の家族(妻、子供)は近所のかかりつけ医院で受けています。こちらの医院はインフルエンザワクチンの予防接種は予約制となっていますが、今年は予約希望者が多いらしく、ワクチンの在庫が無くなると予約が出来なくなります。
ワクチンの入荷はホームページでお知らせされますが、依然として希望者が多いので見つけたらすぐ電話して予約しないと在庫切れとなってしまいます。
という事で、Webサイトを定期的にチェックして更新があったらメールでお知らせするシステムを用意する事にしました。
しました、と書きましたが、以前、全日本合唱連盟の合唱名曲シリーズ(全日本合唱コンクール課題曲集)の発表が行われたら検知してメールで通知する仕組みを作ったことがあるので、それを転用しました。
動作の概要
プログラムについて
メインプログラム
「メインプログラム」と表現するのもおこがましいbashスクリプトです。
check_Kakarituke.sh
#!/bin/bash -x export LC_ALL="ja_JP.UTF-8" TAG="Kakarituke_Clinic" URL='http://example.com/cgi-bin/general/topics.cgi' WORKDIR='/home/bata64/sh/check_Kakarituke' OUT='/home/bata64/sh/check_Kakarituke/output.html' InfoFile="/home/bata64/sh/check_Kakarituke/messages.txt" RcptTo="hoge@example.com,hoge2@example.com" MD5SUM=md5sum.txt MD5SUMPRE=md5sum_pre.txt date cd $WORKDIR curl $URL -o $OUT md5sum $OUT > $MD5SUM diff $MD5SUM $MD5SUMPRE > /dev/null 2>&1 if [ $? -eq 0 ]; then logger -i -p 6 -t $TAG "No Change at $URL " else cd /home/bata64/py/; python3.6 ./mailsend.py $TAG $InfoFile $RcptTo logger -i -p 6 -t $TAG "Some Change Occuerd at $URL " fi cd $WORKDIR rm $OUT cp -p $MD5SUM $MD5SUMPRE
メール送信プログラム
以前ならPerlでNet::SMTP、あるいはEmail::Senderなどを使って書いていましたが、日本語でSubjectや本文を書く時に色々考慮が必要でした。
Pythonだとsmtplibという標準のモジュールでサクッと書けました。すばらしい・・・。
mailsend.py [件名] [メッセージ本文記載のテキストファイルのパス] [宛先メールアドレス(複数の場合はカンマ区切り)]
という感じで動作します。
import smtplib import sys from email.message import EmailMessage # コマンドライン引数取得 args = sys.argv subject = args[1] msgtxt = args[2] rcptto = args[3] with open(msgtxt,'r') as fp: # Create a textplain message msg = EmailMessage() msg.set_content(fp.read()) msg['Subject'] = 'お知らせ about ' + subject msg['From'] = 'bata64@example.ne.jp' msg['To'] = rcptto # Send the message via our own SMTP server. s = smtplib.SMTP('smtp.example.ne.jp',587) s.ehlo('example.ne.jp') s.login('bata64@example.ne.jp', 'password') s.send_message(msg) s.quit()
メッセージ本文記載テキストファイル
ホームページが更新されていたらお知らせするメールに記載する文章です。
HTMLファイルの中身を記載しようかとも思いましたが、受け取った人が実際にアクセスしてみる形が実装上の手間、確実に確認するプロセスとして良いなと思ったので以下のようにしました。
messages.txt
○○クリニックのページに更新があります http://example.com/
定期的に実行する仕組み
メインプログラム、メール送信プログラムを実行するパーミッションがあり、それぞれ実際に実行してみて想定する動作をする事が確認出来たら、定期的に実行するように設定します。設定には、LinuxやUnix系OSで用意されているcronを利用し、7時から20時の間、30分間隔で実行する事にしました。さくらのVPSで契約しているCentOSサーバに設定した内容は以下の通りです。
/etc/cron.d/bata64
## かかりつけ医院のお知らせページの更新確認(2020年度下期のインフルエンザワクチン入荷状況チェック) 07,37 7-20 * * * bata64 ( /home/bata64/sh/check_Kakarituke/check_Kakarituke.sh > /home/kawabata/sh/check_Kakarituke/check_Kakarituke.sh.log 2>&1 )
動作確認
CentOSサーバにSSHでアクセスして各ファイルを所定の場所に格納したのち、
% tail -f /var/log/cron
で、時間になったらcronに設定したスクリプトが起動しているかを確認しましょう。起動していたら以下のようなメッセージが出力されます。
Nov 22 20:37:01 www6057uj CROND[22339]: (bata64) CMD (( /home/bata64/sh/check_Kakarituke/check_Kakarituke.sh > /home/kawabata/sh/check_Kakarituke/check_Kakarituke.sh.log 2>&1 2>&1 ))
初回実行時は前回実施ファイルが無いので「差分無しではない」という判定になりメールが届きます。
ちょっとした解説
アクセス先URL
(以下URLは全てダミーです)
かかりつけ医院のホームページのURLは
http://example.com/
ですが、お知らせページはフレームの中にあり、URLは
http://example.com/cgi-bin/general/topics.cgi
であることがわかりましたので、こちらに直接アクセスしてチェックする事にしました。
なお、フレームのURLはChromeでホームページにアクセスしたのちフレームにマウスカーソルを合わせて右クリックメニューから「フレームのソースを表示」を実行して表示される
view-source:http://example.com/cgi-bin/general/topics.cgi
から「view-source:」を取り除く事で確認しました。
syslogに通知
メインプログラムにて
TAG="Kakarituke_Clinic" logger -i -p 6 -t $TAG "No Change at $URL " logger -i -p 6 -t $TAG "Some Change Occuerd at $URL "
と記述し、メールだけでなくsyslogにもメッセージを残すことにしました。syslog監視をすれば検知も可能ですが実施は今後考えます。
転職して半年経ちました
2020年4月末で新卒入社した会社を退職し、5月から今の会社で働き始めて半年が経ちました。
Facebookとtwitterでぽつぽつ呟いていましたがまとめて何か書けそうな気がしたのでブログに書いておこうと思います。
退職しようと決心した時期から新型コロナウィルスの騒動が始まり、「やべえもう部長や課長に報告しちゃったけど内定取り消しになったらどうしよう」とちょっと心配したものの、無事に5月入社できました。
1年前の今頃は駐在先のオフィス近くのコンビニで買ったコーヒーを飲みながら仕事をしたり、仕事終わりに世界の山ちゃんで悪態をつきながら飲んだくれていたのに、今は違う会社で働いているという事がまだ不思議に思われます。
その後は初日から在宅勤務で、4月に入社した他のメンバーとZoomやTeamsで連絡を取りながら研修に臨み、新人に戻った気分になりました。
研修を経て9月からは本格的な業務に携わりました。張り切り過ぎて精神的に厳しい時もありましたが、同僚や上司に助けられてなんとか乗り切る事ができました。「誰かが大変な時に手を差し伸べるのは当然である」というマインドの職場であると自分がキツい時に判った時には、本当にしみじみと「良いところに入れてよかったなあ」と思ったものです。
10月は9月の反省を生かして自分のペースで仕事をしてみましたが、やはりまだまだ教えられないと仕事を勧められない局面が多数でした。どんな初歩的な事でも教える事を厭わない上級職エンジニア陣には本当に頭が下がり、今更ながら「ああ、俺も前からこういう姿勢で仕事をすればよかったんだな」と後悔しましたが、今となっては仕方がなく、これからの目標とするしかありません。
という事でこの6か月は総じて前向きな気持ちで仕事ができました。待遇も決して悪くなく(むしろ良い)、具体的な業務内容を書くのは色々と憚られるのですが2002年に前職の会社に新卒で入社してからの前半10年間を思い出すような、純粋に仕事を楽しめるような気持ちで働けているのは大変幸せな事だと感じます。引き続き頑張っていこうと思います。
では。
合唱活動におけるWebカメラについてのメモ
新型コロナウィルスの影響で2020年2月くらいからアマチュア合唱活動においてもZoomを利用した会議、オンライン練習を実施する事になりました。
Zoomを使ったWeb会議で自分を映すには、PCに内蔵、あるいは外付けの「Webカメラ」が必要です。この「Webカメラ」について得たいくつかの知見をメモしておきます。
- Webカメラは基本的には、パソコンの前に座っている自分を映す前提のもの。練習会場全体を映す用途には向いていない。
- ノートPC内蔵カメラで公民館等の広い練習会場全体を映すのは難しい。会場の様子をZoom参加者が見ても、会場の一部しか映すことが出来ないという課題がある。
- これを解決するためには、外付けWebカメラを三脚に取り付け、会場を俯瞰できるアングルに設置する事が考えられる。そのためには以下が必要
- スマートフォンをPCとUSB接続してWebカメラ化する方式もある。以下の記事参照。ただし私の環境では接続出来たりできなかったりと不安定だったので採用は見送った。
- キヤノン等のデジタルカメラメーカーから自社製品をWebカメラ化するアプリケーションが提供されているのでこれを利用するのもアリ。ただし比較的最近の製品しか対応していない模様。我が家のIXY 600Fというだいぶ前に買ったコンデジは未対応。
- アクションカメラ「GoPro」をWebカメラとして使ったらなんか色々良さそう、と思ったが2020年10月現在、Webカメラとして利用できるのはMacのみの模様。あとそもそもGoPro持ってないので買わないといけないがGoProは数万円くらいする・・・。
- Zoomを使ったWeb会議を合唱団で行った際「音声はOKだがPC内蔵カメラがどうしても映らない」という人がいた。調べて欲しいと頼まれたのでご自宅に伺い調査してみたところ、Windows PCにインストールされているセキュリティソフト(カスペルスキー)がデフォルトでWebカメラを無効化していたことが判明。この設定をオフにしたらWebカメラを使えるようになった。こんなご時世になるまではWebカメラは使わない方が安全、という事だったのだろう・・・。
では。
「フォートナイト バトルロイヤル」のバトルパスについて
「フォートナイト バトルロイヤル」というニンテンドースイッチで大変人気のゲームにおける課金要素「バトルパス」について、一言で説明し辛く遊んでいるうちにどういうものか段々理解できたので、自分なりに整理してみたいと思います。
ニンテンドースイッチにおける紹介ページはこちら。
ec.nintendo.com
開発元のエピックゲームズのサイトはこちら。
www.epicgames.com
結論
購入するためには最低限880円を支払う必要がある。
定期的に新しいバトルパスが登場し、欲しい場合は都度購入が必要。
ただし沢山プレイをしているプレイヤーは買い替え時に追加でお金を払わなくて良い仕組みがある。
概要
バトルパスとは
以下のようなゲーム内で使用できるアイテムが「報酬」として用意されているセット。
- スキン(コスチューム)
- 収集ツール
- グライダー
- エモート
- エモートアイコン
- スプレー
- ラップ
- バックアクセサリー
- コントレイル
- ミュージック
- ロード画面
- V-BUCKS
など
950 V-BUCKS(2020年8月現在)を支払うと購入できる。
報酬として含まれるアイテムのうちV-BUCKS以外はキャラクターやゲーム画面の装飾を変更して楽しむためのものであり、アイテムを装備してもゲームにおける性能は向上しない(プレイヤーが強くなったり武器の威力が強化されるといった効果は無い)。
V-BUCKSと最低限必要な金額
V-BUCKS*1はゲーム内で使用できるポイント。2020年8月現在、1000 V-BUCKSが880円で購入できる。
参考:
ec.nintendo.com
よってバトルパスを購入するために最低限必要な初期投資金額は880円。なお、ゲーム自体を遊ぶための料金は無料。
レベル
ゲームを遊んでいるとEXP(経験値)が溜まっていく。一定値に達するとレベルが上がる。レベルは1からスタートする。
上がったレベルに準じて報酬を入手できる。100に達するとすべての報酬が手に入る。
シーズン
ゲームには一定期間で更新される「シーズン」がある。シーズンが変わるとゲーム内のマップ、登場アイテム等が変わる。
バトルパスはシーズンと連動しており、シーズンが変わると更新される。更新されるとレベルは1に戻り、前のバトルパスは購入できなくなり、新しい報酬が用意されたバトルパスが購入可能な状態になる。
追加で課金をしなくて良い仕組み
バトルパスを購入するには上述の通り各シーズンごとに950 V-BUCKSを支払う必要がある。ただし報酬の中にはV-BUCKSも含まれており、ある程度レベルを上げると購入した額以上のV-BUCKSが手に入る。チャプター2 シーズン3の場合、レベル65まで上げれば報酬のV-BUCKS合計が1000になり購入額を上回る。
参考:
70okugame.com
よって、以下のようなサイクルでプレイをすれば一度バトルパス購入した後は課金をせずにバトルパスを購入し続ける事ができる。
- 880円を支払って1000V-BUCKSを手に入れてバトルパスを購入。
- ある程度遊んでレベルを上げ、購入額以上のV-BUCKSを報酬として手に入れる。
- 次のシーズンになったら新たなバトルパスを購入する。
- 以降、2.、3.を繰り返す。
課金をせずにバトルパスを購入する方法
バトルパスを購入をしなくてもゲームを遊んでいるうちにレベルは上がる。レベルを100まで上げると合計で300 V-BUCKSを無料報酬として受け取ることが出来る。
なので、3シーズン分の無料報酬計900V-BUCKSを貯め、4シーズン目の途中でその時点のバトルパスを購入するだけのV-BUCKSを、課金をせずとも貯める事が出来る。
ただし1シーズンは約数か月は続くので(参考)、貯めるには1年以上はかかる事もある。
もちろん、V-BUCKSは必要に応じて現金を支払う事で追加購入できる。
バトルパスの他に、日替わりで品物が変わるアイテムショップでスキン等の装飾品をV-BUCKSで購入できる。
考察
「フォートナイト バトルロイヤル」をプレイするための料金は原則無料だが、ゲーム自体と並ぶ目玉要素であるスキン等の装飾要素も手に入れるための最低限の料金プランが「バトルパス」であると考えるとよいのではないでしょうか。
とりあえず遊ぶだけなら無料、もっと楽しみたければ880円を支払う必要があり、上手な人は該当シーズン中にレベル上げをすれば、それ以上を支払う必要がありません。
沢山遊ぶことが追加でお金を払わなくて済むインセンティブになっていて、かつ沢山遊ぶことで日替わりでアイテムショップに登場するスキン等の品物を見る機会も増えます。たくさんプレイしているうちに手持ちのV-BUCKSで購入する人もいるかもしれませんし、ちょっとV-BUCKSが足らないという人は追加でV-BUCKSを現金で購入するかもしれません。
ゲーム自体が面白い事、定期的に魅力的な報酬を用意する労力をいとわない事が大前提ですが、世界中で人気になっているだけあってとても良くできた仕組みだと思いました。
では。
*1:Vinderbucksが正式名称?らしい。参考:https://www.reddit.com/r/FortNiteBR/comments/8j8eor/icydk_vbucks_comes_from_vinderbucks_that_is/
最近買ったノートPCのLANポートの規格が100BASE-TXだった事に関する考察
ノートパソコンを買って気になった事
先日書いた通り奥さん用の新しいノートパソコンを購入しましたが、ある事に気が付きました。このDell Inspiron 14 5485というノートパソコンには有線のLANポートが付いていますが、規格が1000BASE-Tに対応しておらず100BASE-TXまでしか対応していません。すなわち通信速度は最高で100Mbpsまでしか出せないのです。
2020年6月現在、パソコンに使用されているLANポートの規格はいわゆる「ギガビットイーサネット」と呼ばれる1Gbpsまでの通信速度に対応した1000BASE-Tという規格が使用されているのが一般的で、100BASE-TXは時代遅れ、のはずでした。買う前に製品情報を確認したのに見落としたのか?と思い改めてしらべてみたところ、製品情報ページには
「LANポート(RJ45)」
としか書いておらず規格は記載されていませんでした。が、このページから辿れる製品のマニュアルページから以下の情報を見つけました。
ここには、
イーサネット ~中略~ 転送レート 10/100 Mbps
と書かれています。ここまで読まねばいかんかったのか・・・。
という事で、お安く買えて喜んでいたノートPCで意外な点を見つけてしまい「やってしまったか」と焦ったのですが、更に調べてみたところある事に気づきました。
有線LANポートの扱われ方
まず、Dellの個人向けノートPCのうち、ゲーミング用途のモデルである「ALIENWARE」、および「Dell G」を除くモデルにおける有線LANポート内蔵の機種の転送レートはすべて「10/100 Mbps」、すなわち規格が100BASE-TXに対応したものである事がわかりました*1。
さらに有線LANポート内蔵の機種は「Inspiron」というモデルの中の一部にしか存在せず、Inspironより高級モデルである「XPS」には有線LANポート内蔵の機種がありません。
この事から、少なくともDellの個人向けノートPCにおいては有線LANポートは重要なデバイスではないと見做されているように思われました*2。
有線LANポートを自宅で使う頻度
更に我が家の交換前の奥さん用ノートPCにおける有線LANの使用頻度を思い返してみると、2代前のパソコンから先代(今回交換したもの)へデータを移行する時と自宅にSynologyのNASを導入して写真データを移行する際に「無線LANより速いだろう」と思って使ったときと、今回買ったパソコンに先代のデータを移行したとき(LANポートの規格の事は、この時に思ったより通信速度が出ない事から気づきました)ぐらいのようでした。スマートフォンやゲーム機が通信できるよう、自宅にWifiルーターが導入されて久しく、パソコンもインターネットへの接続は無線LANが主に使われています。
市販されているスイッチングハブなどのネットワーク機器においては、通信速度がより速い(新しい)規格が使用されている方が高価です。恐らくパソコンのLANポート(が付いているネットワークインターフェース)も同様だと推測します。家庭でのLANポートの使用頻度は低いので、最低限通信できる規格のものをつけてコストを削減、なんなら無くても良いだろう、という判断をDellはしたのかなあ、と思いました。
とはいえあるなら欲しい
以上のように考えましたが、2019年の世界ノートPC出荷台数シェアをDellと競っている他社の場合はどうなのだろう、と考えLenovoとHPの個人向けノートPCについて調べたところ、やはり有線LANポート付きモデルがそもそも少なくはあるのですが、付いているものは規格が1000BASE-Tのようなので、正直付いているならそっちの方が良いよなー。
いずれにしても個人向けノートPCにおいては、有線LANポートは新しいものに取って代わられてしまったデバイス、いわゆる「レガシーデバイス」になりつつあるのかも、と思いました。
その他気づいた点
- Dynabook、VAIO、NEC、Panasonic、富士通などの日本メーカー製*3パソコンは有線LANポート付きの機種が比較的多いように思われましたが、Dell、HP、Lenovoと比べて同様スペックでも高価なので購入の候補になり辛いです。例えばDynabookの15インチ、SSD256GB+HDD1TB、メモリ4GB でCPUはIntel Celeron 5205Uとかなり低スペックの機種「dynabook C4 P1C4MPBL」は価格.comで6月15日現在14万円ほどです。前述の3社の同様スペックなら少なくとも10万円は切っているスペックのように思われますし、個人的に最近のDynabookより高級感やかっこよさを感じるマイクロソフトのSurface Laptop 3が買えてしまいます。辛い。
- 有線LANの有無および通信規格の情報は一覧になっていないメーカーが結構ありました。日本メーカーはこの点は親切で、比較的参照しやすくなっているように思えました。
- そもそもネット上で各社とも製品カタログ的な情報が整理されていないように思えました。「比較しやすいように選定中の機器のスペックを一覧にしてくれ」とお客さんに言われた業者の人は苦労しそうです。
- いつか自宅をリフォームする際には各部屋にCat6以上のLANケーブルを敷設して来るべき10ギガビットイーサネット時代に備えよう!と考えていたのですが、その頃には高速で有線LANに接続する機器はそんなに無いのかもしれません・・・。
では。
*1:私が調べただけなので見落としがあるかもしれませんが・・・
*2:調べたところ法人向けモデルのLANポートは1000BASE-Tだったのであくまでも個人向けにおいては、と思われます
*3:いくつかの会社の実態はもはや日本メーカーではないという話もありますがそれはここでは置いておきます
ノートPCを買いました
経緯
奥さんが自宅で使用しているノートPC(Dynabook T552)が故障しました。蓋を開ける際に本体部と底面部の間に隙間が出来てしまうようになってしまったのです。
事例がPC修理業者のWebサイトに掲載されていましたが、まさに同じ症状です。
このままでも気を付けて開閉すれば開けられない事は無いしOSも起動して使えるのですが、使っていくうちにさらに症状が悪化してしまう事が予想されました。
また、このパソコンは既にメーカー保守は終了していて、以前に自分でHDDからSSDに換装した事もあるので自力での修理も試みましたが、本体内側のネジが破損している状態で手持ちの工具ではいかんともしがたい状態であるため早々に諦めました。
という事でヒンジ故障の修理をしてくれる修理業者に修理を依頼する事にしたのですが、今後小中学校でPCを使った学習が始まる事もあり子供達が触れるパソコンがあった方が良いのでは、と奥さんと話し、以下の通りとする事にしました。
- 奥さん用PCを新調する
- 現行の奥さん用PCは修理に出したのち、子供たちに使わせる
という事で新しくノートPCを買う事にしました。
新しいパソコンの要件の確認
まずは新しいパソコンで満たすべき機能や使うにあたっての要望を、主に利用する事になる奥さんに確認する事にしました。プロジェクトにおける要件定義フェーズです。
私がネットで調べてよさげなものの情報を見せたりしながら相談した結果、以下のような要件が整理されました。
ノートパソコンであること
元々使ってたのはノートパソコンだし、主に利用する場所は自宅のダイニングテーブルなので、ディスプレイやキーボードおよびマウスが必要なデスクトップパソコンはスペースの都合から不適格と判断されました。
サイズは15インチまたは14インチ
ヒアリングの結果「大きさは現行PCと同じ(15インチ)でいいが、ちょっと大きすぎるとも思っていたのでもっと小さくてもいい」とのコメントを奥さんから頂き、私が在宅勤務で使用している14インチノートPCを見せたところ「あーこれくらいでいいわ」との事でしたので、14インチ~15インチで探す事にしました。
光学ドライブ(DVD/Blu-Lay)は必ずしも不要
現行PCにはBlu-Layドライブが内蔵されているので新しいパソコンも付いていた方が望ましい、斉藤和義のCDも聴くし、とのコメントを奥さんから頂いていたので調べてみたのですが、私があらかじめ当たりをつけていたHPとDellの個人向けノートPCにはBlu-Layドライブ内蔵モデルが存在せず、すべてDVDドライブであることが判明しました。一方DynabookやNEC、パナソニックなどの日本メーカー製だと内蔵モデルが存在するのですが、ここらへんの日本メーカーの製品は同様スペックでもHP、Dellに対して高価過ぎるので選定対象外にしていました。
上記のような調査結果を元に再度奥さんと協議し、
- パソコンでブルーレイのディスク再生ってそもそもほとんどやらないよね
- CDの再生はラジカセでもできるしUSBの外付けDVDドライブがあるから必要に応じて接続すれば良いのでは
という点をお伝えした結果、必ずしも光学ドライブ内蔵モデルでなくてもいいというコメントを頂きました。
要件を満たす製品の選定
上述の要件を満たすものを探した結果、以下の製品を購入する事にしました。
Dell Inspiron 14 5000(5485/AMD Ryzen)
www.dell.com
2020年6月13日現在、このリンクをたどっても出てこないのですが、CPUにAMD Ryzen 7 3700U(2.3GHz 4コア8スレッド)を搭載し、NVMe SSD 512GB、メモリ8GBのモデルがOfficeつきで税抜き7万9千円ぐらいで売っていたので、あまりの安さに購入を決定しました。
5月中旬に注文し、「納期が6週間なのでたぶん7月上旬に届きます」と言われたのですが6月頭に届きました。セットアップおよび旧PCからのデータの移行も済み、現在は奥さんにて問題なく使用できているようです。
が、私としてはちょっとした気になる事項が発覚したのでした。それはまた別に書く事にします。
では。
Outlookの「仕分けルール」が期待通りに動作しない現象を10年越しで解決しました
要点
昔話を絡めて長々と書いてしまいましたが、要点は以下の通りです。
- Outlookの「仕分けルール」では、Microsoft Exchange Server管理の内部メールアドレスはSMTP形式メールアドレスではなく以下のようなX.500形式のアドレスとして扱われる。なので「address@example.com」といった文字列だと条件にマッチしない。
/O=Microsoft/OU=EXCHANGE ADMINISTRATIVE GROUP (XXXXXXXX)/CN=RECIPIENTS/CN=[名前]
- 問題解決に当たっては前向きな気持ちが大事
昔話含めて詳しい事を読みたい方は以下からどうぞ。