見出し画像

活動報告20(2022年6月)

プロジェクト薬箱「Python編(中級7)」
 「白って200色あんねん」先頃バズっていたこの発言を受けて、白系統の色を当てるゲームを作ってみた。現在、Pythonのtkinterで薬箱のGUIをデザインしているが、力試しとしての寄り道だ。

モニター画面上の色は、光の三原色であるRed, Green, Blueの各要素がどれだけの割合で含まれるかで記述されており(加色混合という)、各要素は0~255までの10進数で表現される。例えば、RGB値で(255, 255, 255)は白であり、(0, 0, 0)は黒となる。そこで、白系統の色で、名前が定義されている色のRGB値をみて数値の下限値を確認。たしかに200色以上の白があった。ということでこのゲームでは、RGB値の各要素を255から5刻みで下げて230までの6つの数値を作り、組み合わせた6×6×6で、216色の白系統の色を作成した。また、簡易版として235までの5つの数値で、125色の白系統の色も用意した。
 色の作成を含めプログラムの構成は単純なものだが、GUIがイメージ通りにならずに苦労した。まず、buttonのbgが着色されない。色々調べてこの現象はwindowsではみられず、macOS Xに原因があると判明。対処方法を明確に解説しているのは、英文を含め3つ程のサイトしかなく、あらためてtkinterの人気のなさをツラく感じる。tkmacosxモジュールをインポートすることで解決。
 さらに、各widgetの大きさをピクセル値で指定しているのに、なぜか大きさがおかしい。MacBookが古いせいかも。このあたりは試行錯誤で数値を動かして大きさを調整。結局2週間程かかってようやく完成。タイトル画の左が216色を対象としたWhite216、右が125色対象のWhite125(健康経営優良法人をもじって命名)。せっかくの機会なので、近日中にプログラム投稿サイトにコードを整理してアップロードします。
 
さて、今月も11冊目:「退屈なことはPythonにやらせよう」の感想の続き。
15章では、時間制御と自動実行、プログラム起動が対象。timeモジュールを用いての時間制御は簡単。マルチスレッドでは、threadingモジュールで独立したスレッドを作成するが、関数に引数を渡すときにはキーワード引数argsとkwargsを使う点が特徴。プロジェクトでは、前半の章で作った画像ダウンローダーをマルチスレッド化したが、同時並行処理による高速化には目を見張るものがあった。
 また、PythonからWordやExcel等の外部プログラムを実行するには、subprocessモジュールを用いる。ただし、Macにおいては、プロセス起動やPythonスクリプトを実行するためには、本の内容ではうまくいかず修正が必要。プロジェクトでは、カウントダウンブログラムを作成したが、カウントダウン終了時に音声ファイルを読み出して鳴らす手法にsubprocessを用いており、この手法は即座に薬箱のコードに応用できた。
 
16章では、電子メールやSMSの送信が対象。難易度や演習プロジェクトの分量からも、本書の最大の山場を迎えた。本に記載しているプログラムはまともに動作しないので、調べながらの修正また修正。この章だけで1か月はかかった。メール送信は、Chromeでアプリパスワードの設定が必要なことに気づけば簡単(ログインパスワードとは異なる)。一方、メール受信は、メールを探して解析する手間がある分だけ、段階を踏む必要あり、送信よりも複雑となっている。pyzmailをインポートできずに早速躓く。会費リマインダーメールのプロジェクトは、エクセル上のセルの内容を読み取るだけなので問題なし。
 Twilioを用いたプロジェクト、これは凄かった。Twilioとは電話の発着信やテキストメッセージの送受信を、プログラムで制御できるようにするサービス。これだけでは良く分からないと思うが、試用アカウントで専用の電話番号が与えられ、任意の電話番号にSMSを送れると聞くと興味が湧くと思う。プロジェクトでは、自身の携帯にTwilioを使ってSMSを送るコードを作成したが、SMSの潜在力を極限まで高めることのできるサービスと思う。ブラウザを立ち上げて能動的に情報収集することを手間と捉えれば、必要な情報が自身のSMSに受動的に送信されるというのは魅力的だ。Twilioは2008年設立らしいが、全く知らなかったことが恥ずかしい。「これが若さか」。

この記事が気に入ったらサポートをしてみませんか?