2020年買ったものまとめ
突如始まったリモートワーク化からだいぶ経ち、5月に特別定額給付金の支給があったりといろいろありましたが、そんな中在宅でも快適に仕事ができるようなアイテムを買った年になりました。
ここでは今年買ったものを一覧にして振り返ってみます。
※ 例のごとく Amazon アフィリエイトリンクがあります
グラボ
GeForce® RTX 2070 SUPER™ GAMING OC 3X 8G
www.gigabyte.com
定額給付金が入る前提で購入したやつです。元々はリアルタイムレイトレーシングを体感したい&GTX 960から世代交代したいという気持ちで検討していましたが、在宅でカメラ・マイクを使った仕事スタイルになってから、RTX Voiceや、その後正式リリースしたNVIDIA BroadCastで大活躍するなど、思いがけない形で重宝するグラボとなりました。
モニター
BenQ PD2500Q
BenQ デザイナーズ モニター ディスプレイ PD2500Q 25インチ/WQHD/IPS/DP,DP(out),miniDP,HDMI搭載
- 発売日: 2017/12/18
- メディア: Personal Computers
モニターアーム
エルゴトロン LX デスクマウント モニターアーム 長身ポール
エルゴトロン LX デスクマウント モニターアーム 長身ポール アルミニウム 45-295-026
- 発売日: 2011/11/18
- メディア: Personal Computers
最初から3枚目用としてだったら、ちょいちょいセールしてたAmazon Basicのを買ってたかも…。ちょっと誤算でした。
Amazonベーシック モニターアーム シングル ディスプレイタイプ 2点セット ブラック
- メディア: Personal Computers
ノートPC
Surface Laptop 3 Core i7 / RAM 16GB / ストレージ 512GB
元々持っていたSurface Laptop 1との置き換えです。在宅勤務なのでそんなに使わないだろうと思いつつ、出先で趣味プログラミングしたい気持ちもあり購入。CPUの世代が変わったことによってコア数も増え、アプリのビルド時間とかもかなり短縮されたりと快適になりました。おでかけのときはほぼ常に持ち歩くほど。
ACアダプター
RAVPower Type C 急速充電器 90W
Surface Laptop 3がUSB-Cポートを備えていて、かつPD対応なので、持ち歩き用に購入。USB-Cなデバイスが他にない*1こともあって干渉せず使用できています。ただ、アダプターから直接ソケットが生えてたり、USB-Cケーブル長が短くて、例えば最近電源コンセントを増やしつつあるすかいらーく系列のレストランだと、届かなくて使えないといった問題を抱えてしまいました。
延長ケーブルとか買えばよかったのですが…
RAVPower PD 充電器 TypeC急速充電器 65W高出力
新しいアダプターが発売され、こっちは据え置きを想定してるっぽくメガネコネクターの電源ケーブルが生えるタイプのものですが、こちらを持ち歩くようになりました。65Wと上記より少ないですが、USB-Aポートがあり、全部使ってもSurfaceの充電にはそれほど影響しなかったので、こっちこそ持ち歩き用としてベストなのでは…?と思ったりしています。その他
Nature Remo E lite
なんか買ってました。スマートメーターと連携するやつです。Nature Remoのサーバー側に転送した計測データをAPIで拾ってこれるので、さっくりアプリ書いてPC上に常に表示してモニタリングするようになりました。ただ、拾ってこれるデータが1分間に1回の更新で、APIアクセスが5分に30回なのでちょっとかゆいところに手が届かない感じ。Nature Remoの赤外線通信機能はLocal APIとして同一ネットワーク内からダイレクトにアクセスできるので、同じようにNature Remo EもLocal APIを提供してほしいです。Nature Remoアプリだと5秒に1回更新なのでちょっとうらやましい…
developer.nature.global
ルンバ 960
www.irobot-jp.com
ビックカメラでセールしてたときに買いました。そういえば2年前も同じタイミングでルンバ 890を買ってました。
e5かルーロか…と思ってたときに890のセールで飛びついてしまってな…
— 綾野ちい✨アヤノフ (@ChiiAyano) 2018年11月25日
玄関マットの濃色に脱出困難になってしまったりしたけど、1日目としては凄く好印象#ビックでルンバ pic.twitter.com/kVBoVrHQ88
890と比べると明らかに動きが違います。一直線に壁やものにぶつかるまで突っ走ったり、ぶつかった後はいくつかの行動パターンを試行したり…する890とは違い、壁にぶつかりはするものの、ものを避けるように移動したり、周囲をその場で見回して次の行動を決めていたりと、格段に賢くなっています。
2年で手放してしまいましたが、手放してでも買って良かったと思えるものだと思っています。
在宅勤務で家にいる時間が明らかに多くなって、あれを買ったら便利になるんじゃないかとか思ってたらいっぱい買ってました。ちょっと財布が心配になりますが…。
来年は節制できるように頑張ります。なんかまたいろいろ買いそうだなあ…。
*1:あってもUSB-Aから生やしちゃう
Mastodon 自前インスタンスと disk full と戦う
割と前から Mastodon でおひとりさまインスタンスをさくら VPS でだらだらとdocker 運用しているんですが、メンテナンスとか放りっぱなしで気がつけば disk full になるケースが増えてきてしまいました*1。
最初の一回目は、Mastodon 以外に運用していた (すでに別サービスへ移行済み) データがあったので、それを削除して事なきを得ていたんですが、二度目はそんなデータも無く何を削除したら良いのかわからなくなり、tootctl を使ったデータ削除も disk full の前にはどうすることもできず*2、もがいていたところこんな記事に出会いました
この通りに
$ sudo docker system prune -f
と打ち込むわけです。ありがたや、これのおかげでどうにか空き容量を作ることができ、
$ sudo docker-compose run --rm web bin/tootctl media remove-orphans
が通り、どうにか生きながらえることができました。
ところが数ヶ月後、またしても disk full の悪夢にうなされるわけです。頼みの綱であった
$ sudo docker system prune -f
を試すも、
Total reclaimed space: 0B
と返り、削除できるものがなくもう諦めかけていましたが、docker の prune コマンドにはまだいくつか選択肢が存在していました
試したところ、
$ sudo docker volume prune
...
Total reclaimed space: 66.07MB
なんとかかろうじてスペースが空いたので、すかさず
$ sudo docker-compose run --rm web bin/tootctl media remove-orphans
を実行、無事通り
Removed 1708 orphans (approx. 163 MB)
と出ましたが、これだと数日以内には埋まる可能性があります。
tootctl コマンドには他にもメンテナンスコマンドがいくつかあり、外部サーバーからの古いメディアファイルを削除する `remove` コマンドが存在します。これに気づけなかった。
$ sudo docker-compose run --rm web bin/tootctl media remove
...
Removed 204389 media attachments (approx. 103 GB)
いいですね。借りている VPS は 200GB ストレージなので、実に半分以上を削除できたことになります。
ついでにプレビューカードの削除もしました。これは `preview_cards remove` でできます。
$ sudo docker-compose run --rm web bin/tootctl preview_cards remove
...
Removed 244063 preview cards (approx. 8.54 GB)
いい具合です。これでしばらくは大丈夫でしょう。
とはいえ、放置していればおそらく 1 年後くらいには同じ問題に出くわすかもしれません。そのときのために自力で気づいたときにコマンドを叩くか、cron で定期的に削除したりする必要はありそうです。
リモートワークで OBS Studio と戯れた話し
新型コロナウイルス感染症への対応として所属する会社でリモートワークが始まり、早 4 ヶ月が経ちました。
2 月と言えば、ダイヤモンド・プリンセス号が日本で隔離措置を受けていた頃です。世界各地で感染者が増えつつある中、日本での感染爆発が起こるかどうか?というところでもありました。それを思うと、会社の意志決定の早さを感じています。
リモートワークでオフィスと変わらぬ働き方をするために、様々な試行錯誤をしてきました。その中で感じたことは:
- スピーカー出力でオンラインミーティングに参加すると、相手の声が耳に入ってこないことがわかった
- -> イヤホン・ヘッドフォンを使用することで (自分は) 問題が解消したと思っている
- 顔が見えないことは相手の声が入ってこないことの一因だと思っていたが、上記により (自分は) 実はそうではないと感じた
一方で、地方に拠点を持っているこの会社で、これまで「東京本社」と「地方拠点」で塊があって、そこを繋げる導線が Skype であったり*1、Slack であったりといったものがあり、どうしても「距離の不均一」を感じてしまう部分がありましたが、一斉にリモートワークになったことで「距離が均一」になり、地方拠点のメンバーとの交流が積極的になった一方、所属する拠点との距離は離れてしまい、いっそうの自己表現を求められるようになってきたと感じています。
例えば、社内では定期的にコミュニティ勉強会のようなものがおこなわれています。リモートワーク環境下においてオンラインでの開催になりましたが、検証環境が家にあって、それをそのまま発表できるという利点を生かした発表を目の当たりにしたりと、表現の幅が広がったなと感じていますし、利点を生かした何かをもっと追求するべきだとも思っています。
仕事中においても、Slack による「文字でのコミュニケーション」では不足する状況が来たとき、遠慮無しに突発でオンラインミーティングの場が立ちあがり、状況を声で説明したり、画面を共有して見せたりという環境が生まれつつあります。こういった場が生まれることも、自分の会社の良いところでもあり、これからの仕事のあり方を示すものだなあと感じています。これらで普段オフィスでやっていることがおおよそ再現できている感じがしています。
そんな中、自分がやってきたことは、常に自分をカメラで映すことでした。特に理由は無いんですが、試行錯誤していく中で、自分が率先して顔を出して参加することにより、メンバーが顔を出しやすい環境を作り上げたいという気持ちもありました。
そして、ただ顔を出すだけではなく、自分らしい何かを表現したいというところもあり、OBS Studio を使った表現に行き着きました。
OBS Studio とオンラインミーティング
会社では Meet を使ったミーティングがおこなわれています。OBS Studio はそのままだとカメラとして使うことができませんが、OBS VirtualCam を使うことで仮想カメラとして出力することができるようになりました。こうなれば、OBS Studio ができることをフル活用できるようになります。使い方はいろいろな方が既に書かれているのでそちらに譲ります。
最初にやったことは、テレビ番組っぽくしたくなったので「中継」のテロップを作るところからスタートしました。Adobe Illustrator では、テロップ制作に使えるようにか、映像規格にあわせたテンプレートがあらかじめ用意されています。カメラで出力できる画面比率を確認して生成することにより、おきたいものをそのままポンおきできるのが魅力です。
そして、obs-web-socket を使うと、その名の通り WebSocket 経由でいろいろな制御ができることにも気付きました。これを使って最初に作ったのは時計でした。テレビ番組っぽい何かに近づけるため、例えば 12 時間表記にしたり、正午は 0 時と見せたり、区切りの時間に数秒だけ表示したり…みたいなことも設定でできるようにしたりしました。
さらに、ニュース番組などではおなじみの「天気」も出せるようにしました。OpenWeatherMap を利用したシステムで、まだアニメーションさせながらテロップ切り替えなどの手法がわかっていないので、現時点では「住んでいるところの現在の天気」を出すまでにとどまっています。
最近は「気軽に相談に来て欲しい」という気持ちから、常に Meet でルームを立ち上げたままにしています。そこで自分が離席していることを明示するために「離席中」のシーンを作ってるんですが、OBS Studio をフォアグラウンドにして、差し替えるシーンを選んでトランジション…が面倒になってきたので、画面ロックをフックに自動でシーン切り替えをできるようにもしました。マイクだけは OBS Studio で制御していないので、Meet 側でマイクをオフにする手間はまだ残っていますが、かなり便利になりました。
作ったツールの公開とオープンソース
作った 3 つのツールは github にまとめてリリースしました。
使い方などはそこまで詳しく書いてなかったり、天気を表示するツールでは OpenWeatherMap の API を用意する必要があったりと面倒なところはありますが、それでもよければぜひ使ってみてください。
基本的にはシーンに用意したラベルに対して文字列を差し込むだけなので、OBS Studio で表示したいところにラベルを配置し、フォント設定をしておけばいいはずです。
github.com
ツールは以下
github.com
最後に
緊急事態宣言も解除され、リモートワークも解除される企業も多くあります。一方で、海外では未だに感染者が増え続け、日本でも緊急事態宣言後から感染確認者の数が上昇傾向にあります。
リモートワークの重要性が増してきています。その中で自分をどう仕事現場で表現していくかがますます求められていく、そんな気がしています。
作ったツールはネタではありますが、表現の方法の一つとして、これらをそのまま使うもよし、新しい何かを作ってみるもよし、そんな手助けができたらなと思っています。
*1:他のリモート会議システムも含みます
C97 頒布「あたいいろの景色」の委託頒布情報
いろいろ動いてるのでちらっと書きます
コミックマーケット 97 で頒布しました作品「あたいいろの景色」は現在以下の媒体にて委託頒布をおこなっています。
あきばお~こく
物理で CD メディアをお手にすることができます。
価格は 715円 + 税です。
www.akibaoo.com
ダウンロード頒布
東方同人音楽流通さまを通して、以下 3 つの媒体を通してダウンロードでもお手にとっていただけます。
BOOTH
booth.pm
価格は 750円です。
iTunes Store
iTunes Store でもダウンロードできるようになりました。
1 曲 150円から、5 曲ぜんぶで 750円です。
Google Play Music
play.google.com
Google Play でもダウンロードでお手にとっていただけます。こちらも 1 曲 150円から、5 曲ぜんぶで 750円です。
コミックマーケット 98 の中止に伴う頒布予定の新譜について
久しぶりにサークルの話しです。
AncientChronicle のサイトにて当選および新譜の告知はしてありましたが、ご存じの通りコミックマーケット 98 は中止となりました。
www.comiket.co.jp
大変残念ではありますが、イベント開催に取り巻く状況を考えると致し方ないものと認知しています。
AncientChronicle として頒布予定でした新譜について、以下の通りで予定しています:
- CD メディアとして頒布するものはコミックマーケット 99 以降に延期します
- コミックマーケット 98 で頒布予定だった作品は順次 Sound Cloud で公開します (メディアにした際の収録曲はここから出します)
- CD メディアとするまで、BOOTH やあきばお~を含む委託はおこないません
先述の公式告知にありますとおり、「2020年7月・8月にコミックマーケット98を延期することは現状考えておりません。」とあることから、現時点では 99 以降を目標に動きますが、仮に 98 が延期開催となった場合は参加し、予定通りの作品を頒布する予定です。
あけましておめでとうございます
今週のお題「2020年の抱負」
書いているのはもう 1 月 1 日の 22 時とか遅い時間ですが。
あけましておめでとうございます。2020 年もぜひよろしくお願いします。
ふと、bayfm を聞いてて聞こえてきた「2020 年」の英語での言い方で、Two thousand-Twenty*1 なのか、Twenty-Twenty*2 なのか気になってたんですが、どっちでもいいらしいです。
去年の目標とか未達のまま今年を迎えるとかザラなので、今年もとりあえずのんびり過ごします。あともうちょっとで出せそうな Android アプリを今年の早い段階で出せたらいいなってお気持ち。
曲作りもちまちまやっていきたいですね。頑張ります。
今年は初日の出を拝みに行きませんでした。ここでは書きませんでしたが、コミックマーケット 97 の 4 日目に参加してきたため、体力的な問題で取りやめとなりました(´・ω・`)
31 日じゃなかったら多分行ってたのかも。来年はどうなることやら。
初詣は今月中に行こうかなと思っています。お守りの更新とかしないと。
Xamarin.Android で System.IO.Stream を MediaPlayer に流し込む
Android.Media.MediaPlayer クラスの SetDataSource メソッドは、そのままだと System.IO.Stream を受け取ることができず*1、例えば WebAPI で拾ってきたバイト配列を MemoryStream に入れたり、FileIO で拾ってきた Stream といった .NET Framework 系のストリームとの相性があまりよくありません。
とはいえ、 SetDataSource メソッドのオーバーロードには MediaDataSource クラスのインスタンスをパラメーターとして受け取るものが用意されています。これは開発者が独自の方法でデータを読み込ませたいときに使うものですが、これを使って Stream も読めるようにします。
*1:他の口があるかもしれない?