高見知英の技術ログ

技術関係のログをQiitaから移行してきました。プログラミングのほか、使っているアプリの細かい仕様についてなど書いていきます。

NT札幌のイベントに参加してきました #NT札幌

一昨日12月26日(土)は、cluster上で行われたイベント、NT札幌に参加してきました。

当日は自分のオンラインイベント動画試聴会をやっていたので、その終わりにふとTwitterを見ていたのですが、ハッシュタグが気になってそのまま参加。こういうことが出来るのもオンラインならではのいいところですね。

clusterで開催されるセミナー系イベントは久しぶり。ハードウェアのことはあまりよく分からないので、ピンとこなかった点もありましたが、いつもとまた違うお話しを聞くことができ、楽しかったです。

f:id:TakamiChie:20201228093808p:plain
当日の様子

続きを読む

ログ出力の基本方針

このブログはエラー・ロギング Advent Calendar 2020 - Adventar18日目のブログです。

今回はプログラミングにおけるロギング処理について書いてみようと思います。

ロギングとは、プログラムの実行中にログを出力する処理。

1ファイルで完結する程度の簡単なプログラムならともかく、中規模のプログラムであれば、障害時の原因追跡のためにも、ログの出力は盛り込んでおきたい。

プログラムを組む段階では問題ないと思っていても、いざ開発を進めていくと、ログを出力していなかったせいで問題の原因がどこにあるか分からない なんてことは割とよくあることなのではないかと思います。

このためにも、プログラム作成に当たって、必要に応じてログを出力する というのは重要です。

続きを読む

TkSugarについてもう一度

このブログは、はんなりPython Advent Calendar 2020 - Qiita15日目の記事です。

TkSugarというのは、わたしがつくったモジュールで、YAML形式のファイルを読み込むと、それに準じたTkのウィンドウを生成する というモジュールです。

github.com

コントリビューションいただけると非常に助かります。

昨今のOSSの流行りに則り(?)コミットログやコメントは全文英語でやっています(Issueはさすがに無理なので英語)*1

サンプルはリポジトリsamplesフォルダに格納されています。tkinterを直接いじるのは結構コードが長くなり、なかなか骨が折れるので、一つの解決策として一つどうでしょうか。

はんなりPython方面では、10月のLT会でお話ししました。動画はSpeakerDeckの詳細ページから。

speakerdeck.com

*1:Visual Studio CodeComment Translateという拡張を使うとコメントは日本語で読むこともできるので、英語でもそれほどには困りません。多少は英語を読む機会が増えるため、なんとなく文意は拾えるようになりますし

続きを読む

stand.fmのカバー画像自動生成ツールについて

このブログは、【みんなのITもくもく会】自己紹介 Advent Calendar 2020 - Adventar8日目の記事です。

実はやってたstand.fm。わたしは基本的に、stand.fmはPCで録音して配信しています。

stand.fm

stand.fmはスマートフォンでしか使えないアプリなのですが、外部音源取り込み機能があるので、そこからOneDriveに保存した音源を読み込み、貼り付けて使っています。

OneDriveアプリをあらかじめ設定しておけば、とくに面倒なことなく音源を取り込むことができるので、不便なくPCからの取り込みが可能です*1

カバー画像を自動生成する

さて。そんなstand.fmですが、自分のフォロワーに毎回カバー画像にタイトルを埋め込んでいる人がおり、ちょっとやってみたいなーと思っていました。

その方は仕事でAdobe製品を使っているとのことで、毎回画像は手作りとのことだったのですが、そこはわたしです。ただ作るだけじゃつまらない。プログラミングで作らなくちゃ。

ということで作ったのが今回のstand.fm画像作成ツールです。

なお、ソースコードGithubにて公開しております。必要だったらテンプレートやフォントを変えて各自お好きな画像を作ってください。

github.com

やったこと

とりあえず最近使ってるのでPythonで。画像を作るならPIL(Python Image Library)だろと思いましたが、文章のワードラップとかフォントの調整とかをやろうとするとけっこう面倒。

なにかいいものがないかと探してみると、あるじゃないですか、HTMLを画像として取得できるライブラリが。

pypi.org

これは以前使ったPDFKitの兄弟モジュールみたいなもので、HTMLを画像に変換することができるというモジュール。

使い方はPDFKitとあまり変わらないため、PDFKitで悪戦苦闘した自分なら簡単です。

でもWebkitなんだよね・・・

でも、ImgKitはPDFKitと同じく、WebkitエンジンでHTMLをレンダリングします。

これが結構くせ者で、Chromeなどとはかなり違った*2レンダリングを行います。

いちおうWindows用のWebkitブラウザもあるにはあるのですが*3、手軽に作るのにいちいちWebkit用に調整するのは面倒くさい。

どうにか良い方法はないものか…。

そこでSeleniumですよ

そこでもう一つ見つけたのが、Seleniumスクリーンショット機能を使うというもの。

ヘッドレスブラウザとしてChromeを立ち上げ、画面を撮影すれば、Chromeとまったく同じ見た目で画像データを作成することができます*4。これは非常によい。

ということで作ったのが今回のツールです。

動作の流れ

今回やったのは非常に簡単です。

コマンドラインオプションで日付やテーマを受け取り(省略した場合は今日の日付や、あらかじめ曜日で定めたテーマを使用*5 )、もしmp3がすでにあればそのID3タグに設定されているタイトルを取得*6してそれを使用します。

エクスプローラからもその辺の設定がある程度調整できるよう、無駄にGUIも作りました(GUIモジュールの動作確認という側面もあるのですが)。オプション--guiをつけると、簡単なGUI画面が立ち上がります*7

f:id:TakamiChie:20201205193011p:plain
GUI(日付がmm/dd/yyなのは海外のtkcalendarというモジュールを使ったため)

ここでOKを押すと、OneDrive上のフォルダにout.pngという名前で画像が作られます。

f:id:TakamiChie:20201207105430p:plain
作成された画像

これをそのままスマートフォンから参照すれば、それっぽいカバー画像のついた投稿ができるという仕組み。

なお、ID3タグに書き込んだタイトルやコメントは、PushBulletを使ってスマートフォンに渡します。

今までは同種のソフトとしてJoinを使ってたんですが、なかなか設定が独特で、機種変更(や端末初期化)の時の再設定が面倒・・・。

www.pushbullet.com

いちおうOGPにも対応

いちおう画像のサイズを調整して、OGPでも枠線が表示されるようにしています。ただの背景つきピンクでは物寂しいので。

f:id:TakamiChie:20201207105319p:plain
Twitterでの表示イメージ

このへんの設定も、Less(CSS)ファイルをいじれば結構よろしくやってくれるのがHTMLデザインのいいところですね。

今回得た学び

HTML/CSSがある程度以上できる人が画像やPDFを作るときは、下手にLaTeXや画像処理を学ぶより、HTML書いた方がいい というのは個人的な思いでしたが、これをPythonのモジュールからも実現できるということがわかりました。

こちらについては今後も、定型的な画像を作成する機会などに使えるのではないかと思います(まあ今回はローカル環境で動作するだけだったのでSeleniumが使えましたが、たいていの場合はImgKitかな・・・)。

TkSugarの動作テストもできたしとりあえずわたしはそれなりに満足です。

ただ、タイトルのワードラップ回りなどいろいろできそうなところはあるので、もうちょっと時間を見つけていじってみたいですね。

*1:本当はstand.fm自体がPCからの直接アップロードに対応してくれれば一番楽なのですが

*2:とくにフォント方面で

*3:OtterBrowserとか

*4:title.py 75行目 あたり

*5:title.py 26行目あたり

*6:title.py 36行目あたり

*7:title.py 43行目あたり

リージョンコメント使ってる?

このブログは、Visual Studio Code Advent Calendar 2020 - Qiita4日目の記事です。

さて、Visual Studioにあって、最近(といっても結構前だったと思いますが)から実装されている、リージョンコメントって使ってますか?#regionと書いた行から次に#endregion と書いた領域までを折りたたみ可能にしてくれる機能です。

f:id:TakamiChie:20201201200647p:plain
リージョンコメントを使ったところ

わたしはテストコードを幾つかまとめて分類するときには、ちょくちょく使ってます。

個人的な基準が定まってないのでアレですが、例えば上記写真のように正常系・準正常系・異常系の三つで分けたり。

f:id:TakamiChie:20201201201040p:plain
テスト対象のメソッドで分ける

テスト対象のメソッドごとに分けたりすると、どうしても長くなりがちなテストコードをまとめるのには便利です。

ただし取り扱いに注意は必要

ただし、以下で挙げられているように、どんなコードブロックでもまとめられてしまうため、取り扱いには注意が必要。

qiita.com

とはいえVisual Studioと違ってデフォルトでコードブロックが展開されているので、Visual Studioよりは気が楽かも知れません。

どの言語で使える?

基本的にはどの言語でも使えるようです(言語によっては「// #region」になったり「」になったりするようです)。

ただ試してみたところ、Markdown文章やJSONファイル内では使えない(使ってどうするんだ)みたいなので、言語によっては使えないなどあるかもしれません

こちらでははじめまして みんなのITもくもく会に関わってきて思うこと

このブログは、【みんなのITもくもく会】自己紹介 Advent Calendar 2020 - Adventar1日目の記事です。

こちらのカレンダーでは自己紹介と言うことで、何からはじめればいいか分かりませんが、とりあえずカレンダーのタイトルのとおり自己紹介ということで記事を書いてみようと思います。

さて、最近わたしは、最近、月・木Discordで開催しているもくもく朝会に参加しています。朝に弱いので参加できないこともおおいのですが、出来る日はなるべく。

itmokumoku.connpass.com

原則各自やるべきことをやるもくもく会で、8:00~8:15, 9:00~9:15, 9:45~10:00の休憩時間以外はそれぞれ黙々と作業をする会となっています。

ただ、Discordなのでもちろんテキストでのチャットはできますし、最近はYouTubeの音声をそのまま流す(ときどき動作が怪しい?)GroovyというBOTがいたり、読み上げ用のShovel BlueというBOTがいたりと、オンラインならではの特徴あるもくもく会になっています。

オンラインもくもく会のいいところ

メインPCでもくもく会に参加できる

オンラインもくもく会のいいところは、なによりPCがメインに使っているデスクトップPCであることかなと思います。

持ち歩き用のノートPCではないからいちいち環境構築をする必要がないし、ノートに比べれば断然ハイスペックなので無茶が効く。

そして終了後も同じ環境でそのまま作業ができる。やり残した作業を続けるときにいちいち作業が中断されない。

作業環境だからこそすぐに分からないときにスクリーンショットをチャットに貼ったり、画面共有できるのもいいところですね。

音声だけだからスペックをあまり食わない

このもくもく会は基本的にマイクオンリーです。カメラの映像を使うことはありません(月一の週末会など、使うときはありますが)。

マイクオンリーのなにがいいかというと、PCのスペックをあまり消費しないことです。

そのため、多少重い作業を行ったり、ちょっとスペックで劣るサブマシンを使ったりしても、問題なく並行で作業ができる ということです。

Discord自体の不安定さにひきづられることもあるけれど

Discord自体ゲーム向けのチャットサービスだからというのもあってか、ときどき他のチャットツールにはない独特の挙動をしたりします。

他のアプリがスピーカーデバイスを使ってるとき、スピーカーの取得に失敗して音が鳴らなかったり、勝手に別のデバイスを使ったり。

とくにスマートフォン版のDiscordだとときどき挙動が怪しいみたい(今は解消されたのでしょうか?)で、利用者によってかなり好みが分かれるのがこのDiscord*1。Slackと違って新しいコミュニティに関わる度に新しいアカウントを作る必要がないため、楽にはじめられるのもありますしね。

オンラインの音声コミュニティ、意外と良い

最近個人事業主の人たちとで集まるコミュニティにも関わっており、ここでもIRUという別の音声チャットを使っています。

Zoomなどでビデオまで出すとなると、どうしても身支度に時間を割かなければいけないし、場合によってはグリーンバックを用意しなければならず、面倒くさかったりしますが、音声だとそういうのも気にしなくていいし、結構いいのではないか と思っています。バックグラウンドに隠していていても普通に使えますしね。

Zoomなどのビデオ通話や、顔をつきあわせてのミーティングもいいけれど。

ZoomやAirmeetなどでしっかり話すのもいいですが、それはそれでいろいろな意味で「重い」。普段から関わるような場所は音声だけのほうが気軽には入れるし、作業しながらできるし、むしろ楽じゃないのかな と、最近思っています。

また、最近はすっかりご無沙汰になってしまった顔をつきあわせてのミーティングも。なんだかんだ持っていかなければいけないものがあったり、なにより移動しなくちゃいけなかったり。たしかにオンラインでの会話に比べればやりとりできる情報が多いかもしれないけど、それを補ってあまりあるくらいデメリットが多かったな と。

音声だけのコミュニケーションは、実は結構いろんなところで使えるし、関わる人のリソースも思ったより使わない。インターネット上の新しいコミュニケーションのかたちとして、結構使える範囲が広いのでは?と思っています。

だからもっとこういう場は増えて欲しい。そうしたら気軽に雑談できる場ももっと増えるのではないか? などと思ったりしました。

*1:わたし自身は嫌いではないですが。扱いにさえ気をつければ使えるので