Ubuntu 20.04 でディスプレイマネージャを lightdm にしたインストーライメージを作る

Ubuntu 20.04 の標準のディスプレイマネージャーは gdm3 です。これを lightdm に変えたインストールイメージの作り方を解説します。 前回の、 Ubuntu 20.04 をオフラインでセットアップできるイメージからの続きです。 通常 lightdm をインストールすると、ユーザ向けのダイアログが開いてディスプレイマネージャを選択することになります。ユーザの操作なしに lightdm を選択するには少し工夫が必要でした。 Twitterスレ の清書になります。 Ubuntu 初期設定スクリプト(autoinstall)で gdm3 から lightdm に切り替えようとしている。https://t.co/jX72M8CzWw dpkg-reconfigure で変わるのを確認したので、これを非対話的にやりたい。https://t.co/rI4kugy1Y6 を見つけたがどの方法もうまくいかなかった。 — Yu SUGAWARA (@gusmachine) April 10, 2022 背景 ICPC アジア予選横浜大会で選手が使うコンピュータには Ubuntu がインストールされていて、ディスプレイマネージャは lightdm を使っています。 これには理由があり、今のところ gdm3 に移行できません。 一番良さそうな解法 これが最も簡単でした。 gdm3 をアンインストール, lightdm をインストールし、必要に応じて dpkg-reconfigure lightdm を実行する。 Step1. gdm3 をアンインストールする。 ubuntu-desktop は消しても良い ubuntu-desktop や ubuntu-desktop-minimal をインストールすると gdm3 がインストールされるため、大体の環境で gdm3 がインストールされていると思います。 ここから gdm3 を % apt-get uninstall すると、ubuntu-desktop も道連れでアンインストールされます。実態のないメタパッケージなので、消しても問題はありません。 Step2: lightdm を正しく設定する gdm3 をアンインストールしたのち lightdm をインストールすれば、起動時に lightdm が動くよう設定されます。 あるいは lightdm をインストールしたのち gdm3 をアンインストールした場合、その後に % dpkg-reconfigure lightdm で lightdm を設定し直せば大丈夫です。 ハズレ解法 以下、罠にかかった順番に解説します ハズレ1 lightdm をそのままインストールする。 単純に lightdm をインストールした場合、上に書いた通りユーザ向けの設定ダイアログが開いてディスプレイマネージャを選択することになります。 ユーザの操作ができない autoinstall の最中、gdm3 がインストールされた環境上に lightdm インストールした場合、そのまま gdm3 が選ばれることになります。 ハズレ2 lightdm をインストールしたのち、 gdm3 をアンインストールする % apt-get install lightdm したのち % apt-get remove gdm3 すると、ディスプレイマネージャが選択されていない状態になり、テキストログイン環境になります。 うえの正解の通り % dpkg-reconfigure lightdm を叩けば大丈夫です。 この作業をしていたときはそれに気づかず、テキストログイン環境になったのは ubuntu-desktop が削除されたためではないかと考えたため、正解にすぐたどり着けませんでした。 ハズレ3 lightdm をインストールしたのち、 dpkg-reconfigure lightdm を行う ちょっと調べたところ、Lubuntu 20.10 の安定のため「lightdm」と「xfce4-screensaver」に入替え〈H105〉 - Linux あれこれ に、 dpkg-reconfigure の話が載っていました。実際、% dpkg-reconfigure lightdm を叩くと設定ダイアログが開き、ディスプレイマネージャが選択できます。 しかしユーザ操作ができない環境中では gdm3 がそのまま選ばれます。 「dpkg-reconfigure auto answer」 とかで頑張って検索して Feeding input values to dpkg-reconfigure in a non-interactive way が出てきたものの、以下の方法ではうまくいきませんでした。 DEBCONF_DB_OVERRIDE を利用した方法 $ cat /path/to/config.dat Name: shared/default-x-display-manager Template: shared/default-x-display-manager Value: lightdm Owners: gdm3, lightdm Flags: seen Variables: choices = gdm3, lightdm % DEBCONF_DB_OVERRIDE='File {/path/to/config.dat}' dpkg-reconfigure -fnoninteractive lightdm debconf-set-selections を利用した方法もだめでした。 % echo 'lightdm shared/default-x-display-manager select lightdm' | debconf-set-selections -v 後から考えると、これは例の firebird ではうまくいくかもしれないですが lightdm ではうまく行かなそうです。 あたり1 lightdm をインストールしたのち、/etc/X11/default-display-manager を書き換えてから dpkg-reconfigure lightdm をする Reconfigure the display-manager non-interactively にあることをやったら通りました。 関連コードはここのようです。 https://github.com/canonical/lightdm/blob/170df31f7d9c00b049bdd158682472df915adeae/debian/lightdm.postinst#L15 しばらくこの方法を採用していたのですが、後に gdm3 を消して良いことがわかったので、正解の方法に変えました。 次回予告 lightdm を設定すると、ユーザの初回ログイン時に警告が出てきます。 今度は "Screen Lock disabled" "Screen Locking requires the GNOME display manager." が出てきたぞ。 screen lock ができないことよりこの alert が出てくる方が困るな。 — Yu SUGAWARA (@gusmachine) April 10, 2022 次回はこの警告の抑止方法をまとめました。

2022-05-14 · Yu Sugawara

Ubuntu 20.04 をオフラインでセットアップできるイメージを作る

2022-07-24 追記 最後の実際のコードで、イメージを /target/cdrom 以下に mount する際、実際のデバイスを mount する代わりに mount --bind でパスを複製することにしました。 このほうが簡単ですし、デバイスを二回 mount するのは動かない場合があるためです。 主題 Ubuntu 20.04 をオフラインでセットアップできるイメージを作りました。 必要なパッケージ(ソフトウェア)はイメージを作る際に指定することで、イメージの中に取り込み、セットアップの際に自動でインストールされます。 ICPC アジア予選横浜大会で使用するイメージはこの形式をもとにしています。 Ubuntu 18.04 までの方法が使えなくなったので、代わりの方法を調べました。 背景 Ubuntuのインストールメディアにはパッケージはあまり付属していなくて、セットアップの際に必要に応じて追加パッケージをインターネットからダウンロードしてインストールする仕組みになっています。 インターネットに繋がっていないコンピュータに Ubuntu をインストールする場合はこれでは困ります。 ICPC アジア予選横浜大会 では選手が使うコンピュータを大会で提供しています。 会場のコンピュータはインターネットには繋がっていないので、オフラインでセットアップできるUbuntuのインストールメディアを作って使用しています。 Ubuntu 18.04 までは Community Help Wiki: InstallCDCustomization の記述に従って、追加パッケージを含んだ extras コンポーネントをイメージ内の apt archive に作り、 kickseed で自動インストールスクリプトを与えていました。 kickseed でパッケージを指定すると、追加した extras コンポーネントからもちゃんとパッケージをインストールできました。 Ubuntu 20.04 では Ubuntu Server で Debian Installer が廃止され、代わりに Subiquity というインストーラーが提供されるようになりました。 Subiquity 上で自動セットアップスクリプトを書く autoinstall が提供されるようになったので、スクリプトとイメージの書き方をこれに移行することになりました。 要求仕様 以下のような Ubuntu インストーライメージを作成します。 指定したパッケージがインストールされる。 インターネットのない環境でも動作する。 インターネットのある環境でも動作する。 最後のものは追加仕様です。コンテストに参加する選手向けに、作成したイメージを配布しています。その際インストールに手間取らないよう、インターネットがない環境とある環境両方で動くことを確認します。 autoinstall の基本 説明は他のドキュメントに譲ります。公式ドキュメントはチュートリアルを含め読みやすいですが、説明外のことをしたいときに何もわからないと思います。 Qiita の記事にはとてもお世話になりました。 Automated Server Installs | Ubuntu Ubuntu 20.04をAutoInstallで自動インストールしてみた - Qiita 正解 私が知る限りの正解は2通りです。 正解1 イメージにapt archive を配置し、 late-commands でそれを使うよう設定する イメージの中の適当なディレクトリに apt archive を作成し、late-commands の中でそれを /target/ から読めるようにします。その後 /etc/apt/sources.list を書き換えてそれを指定します。 これを採用しました。我々はイメージに /extra/pool/ ディレクトリを作り、そこに必要な *.deb パッケージを置き、 /extra/dists/focal/main/binary-amd64/ あたりに apt ftparchive を作成しました。その後、late-commands で以下のことを行いました。 /target/cdrom にイメージを再マウント。最後に説明。 echo ‘deb file:///cdrom/extra/ focal main’ > /etc/apt/sources.list apt-get update apt-get install $packages とりあえず動きます。難点として、user-data での指定が全然できないことが挙げられます。 late-commands でなんでもできるので、それをしているだけになります。 正解2 filesystem.squashfs の中に apt archive を配置し、 user-data ファイルの apt 節で指定 filesystem.squashfs の中に apt archive を作成し、それを参照します。 この場合 path が読めるのでそのまま user-data で apt.primary.uri: file:///path-to-archive/ の指定ができます。追加で packages 節でインストールするパッケージを選べると思います。 インストール先ディスクに数 GB がりがり書き込むことになるため避けました。しかし user-data で指定ができることを考えるとアリかも知れません。 不正解1 イメージに apt archive を配置し、user-data ファイルの apt 節で設定 イメージの中の適当なディレクトリに apt archive を作成し、user-data で apt.primary.uri: file:///cdrom/extra/ などと指定します。late-commands で /target/cdrom/ 以下に配置。 これをした場合、インターネットがある環境でのインストールに失敗します。インターネットが存在する場合、 apt-get update が late-commands 以前に走り、そのタイミングで上の file://cdrom/extra/ が読めずにエラーを吐きます。 インターネットがない環境でのインストールは成功します。 微かに正解 イメージに存在する apt archive に追加コンポーネントを配置 イメージの中に存在する apt archive に追加コンポーネントを作成します。上の 18.04 までの方法です。この場合以下の二つに分けられます 不正解 user-data ファイルの apt 節で指定 user-data で apt.primary.uri: file:///cdrom/ などと指定。 この場合、不正解1と同様にインターネットがある環境でのインストールに失敗すると思います。 さらに、 user-data で apt を指定する場合、任意に追加したコンポーネントを読むように指定できません。 autoinstall の user-data での apt の記述でできることは、disable_components を指定してコンポーネントを除外することだけです。任意のコンポーネントを追加できません。 正解 late-commands で指定 late-commands で /target/cdrom/ にイメージを mount して、 /etc/apt/sources.list を書き換え。 正解1とほぼ同様で、イメージに初めから配置されている archive を利用できるようになります。しかし配置されている archive がそんなに多くないのでこの道を通ることはやめました。 よくある質問 もう Ubuntu 22.04 が出ますよ。 Ubuntu 20.04 の情報は古くないですか? 古いです。 方針として Ubuntu LTS リリースをリリースから1年経ってから使うことにしています。以前リリース直後のものを使ったところネットワークドライバ周りのバグでトラブルが起きたことがあるので。 この作業は 2021 年に行う予定でしたが、 2021 年の ICPC アジア予選横浜大会はオンラインで行うことになったためインストールイメージの作業は中断されました。 つまり 22.04 への移行は来年にやります。 手作業でやるの大変じゃないですか 大変です。今回も d-i から autoinstall に書き換えるのに数ヶ月分の週末を使いました。必要なことはそんなに多くないので、何か他の方法をご存知の方がいたら教えていただけると助かります。 とはいえ、毎回トラブルを起こす箇所が異なるので、ここだけが完璧に直ったところで他で苦労しそうです。今までは例えば以下のようなところで詰まっていました。 upstart が systemd になる デフォルトの WM/DM が変わる ネットワーク管理方法が変わる 全然違う方法で似たようなことをしています ぜひやり方を知りたいです。 実際のコード user-data # (apt line なし) late-commands: - mkdir /target/cdrom - mount --bind /cdrom /target/cdrom - curtin in-target –target=/target – bash /cdrom/late-commands.sh - umount /target/cdrom late-commands.sh #/bin/bash set -eux echo 'deb file:///cdrom/extra/ focal main' > /etc/apt/sources.list apt-get update apt-get -y install $(cat /cdrom/packages | sed '/^[#]/d;/^ *$/d') # (以降設定が続く)

2022-05-04 · Yu Sugawara

幼児に歴史の本を買う

子供(5)が歴史の本が読みたいという。本屋で見つけてきた 角川恐竜キングダムシリーズ を親の補助付きで読めるくらいなので、同じくらいの漫画が欲しいとのこと。 きっかけは たくさんのふしぎ 世界の納豆をめぐる冒険 で、その中に出てきた「千利休」やら「加藤清正」やらを説明するために私が戦国時代の話をしたところ興味を持ったらしい。以前に かんころもちと教会の島 で鎖国と隠れキリシタンの話をしたのも影響しているかもしれない。ちょうど納豆の本にも、韓国の隠れキリスト教徒の話が出ていた。 とりあえず「歴史漫画 幼児」あたりで検索してそれっぽい記事を探した。 日本の歴史漫画を比較してセット購入!幼児の娘が歴史漫画好きに育った経緯は、こちら! 【低学年におすすめ】歴史に興味を持ってもらえる日本の歴史マンガ7冊 読みやすい順(小1~) 字の密度や漢字の難易度を見るに、初めのサイトでおすすめされているタイムワープシリーズ の戦国時代から始めてみることにした。興味があるなら徐々に揃えればよい。 並行で小学校の社会科資料集とかがあると話がしやすいんだけど、Amazon とかに見当たらない。一般販売してなさそう。 例えば 光文書院の教材のページには、「書店販売や個人の方への販売はいたしておりませんのでご了承ください。」とある。Amazonで眺めて旺文社の中学受験参考書 を買ってみた。「絵がたくさんあって読みやすいが、受験には不十分」とコメントがあるので幼児と読むなら良さそう。 ちょっとトピックと離れるが、子供に漫画を読み聞かせるのは他の種類の本を読み聞かせるのよりかなりやりたくない。漫画をわざわざ手伝って読ませたりしたくないという認識を私がしているのだろう。周囲の「ざわざわ」みたいなのを「これ何書いてあるの!読んで!」とせがまれて読むのも虚無感があって疲れる。 追記 旺文社の参考書は全然ダメだった。受験どころかただの歴史の解説にも不十分すぎた。ホトトギスの三武将の名前が並んで、「彼らはどのように天下統一をしましたか。共通点と相違点を並べましょう」みたいなのしかない。どうしようもない。 改めて普通の小学校6年生の教科書を買ったらもう少しまともに説明があった。子供も気に入ったようで戦国時代から戦中までの歴史を音読させられた。 なら、高校生の歴史教科書なんかもありだと思う。小学校だとどうしても分量が少なく、詳しいことがわからない。戦国時代の章のひとつ前を見ると東山文化で、その前がもう元寇になっている。応仁の乱も南北朝も建武の新政もない。びっくりするくらい少ない。暗記目的や限られた時間で説明するなら重要箇所に絞ってもよいが、子供にわかるように説明するなら詳しくて損をすることはない。 漫画は子供は気に入っていていたが、一人では読めないのか読みたくないのか、基本的に親が読むことになる。どうせ読むなら情報量の密度として漫画よりも教科書の方がいい気がする。漫画のところにはほとんど情報がないので。子供が一人で読めるなら漫画でもいいが。

2022-02-04 · Yu Sugawara

子供に筆算を教えた話

もう一年近く前の話だが、足し算を覚えてしばらくしてから、子供が私を電卓の代わりにして遊び出した。 「1+1は」「2」 「2+2は」「4」 「4+4は」「8」 「8+8は」「16」 「16+16」「32」 「32+32」「64」 「64+64」「128」…. ここから進歩し、最近は自力で32+32=64くらいまではできてしまうようになった。ここで詰まるので、ちょっと手伝うスタイルにしてみた。 「128+128は?」 「まず100+100をやってみよう」「200」 「次に20+20は?」「40」 「最後に8+8は?」「16」 「じゃあ全部足してみよう。200 + 40 + 16なんだけど、16もバラしてまず40+10を計算しよう。」「50」 「今度こそ全部足してみよう。200+50+6になるから、答えは」「256」 「できたねー」「じゃあ次。256+256やりたい」 この調子で数日過ごしたんものの、「16384+16384=32768」あたりでちょっと無理がある気がしてきた。私はこのあたりの2のべき乗の数字を全部覚えているからできるが、子供はどう考えても今何を足しているか覚えていないだろう。 と言うわけで筆算を導入してみた。 すごい食いついてしまい、2の36乗までやらされる羽目になった。 やってみて気づいたこと まず数字をきれいに並べて書くのがまだちょっと辛い。練習が必要。はじめの “64” が子供が書いた数字。結局あとは私が書いた。 計算は全部子供がやった。結果が10以上になる足し算はわりとできている。7+7と9+9が少し怪しかったけど、今回何度も練習したからすぐにできるだろう。 数を読ませるのも結構大変だが、かなりいい練習。数字の下に「まん」「せん」「ひゃく」と書いたりした。 とりあえず子供が数字を書きやすいように、小学校の算数ノートを買ってみることにした。

2022-01-10 · Yu Sugawara

子供が本を読むまでにかかる時間

子供が本を読めるようになるのは結構時間がかかる。4–6歳くらいにはなるのではないか。 うちは子供用本棚がかなりあるが、まだ子供が自分で本を読める感じではない。 キングジムを配置してみた。取れないときもあるし、ファイルごと取るときもあるし効果は謎。そしてつかまり立ちをはじめてしまったので上の段を取るようになり無意味に。 pic.twitter.com/PMAotzlofq — Yu SUGAWARA (@gusmachine) May 25, 2020 子供が1歳くらいの時は、子供は3歳くらいになると文字を読めるようになって絵本を自分で読めるようになるのかと思っていた。そのころ絵本を読むのは結構大変だったので、早く自分で読めると良いと思っていた。 帰ってきた子供に頼まれるままに絵本を15冊くらい読んだところ現実感を失った🙃 — Yu SUGAWARA (@gusmachine) September 2, 2017 子供に絵本をせがまれるのを断れずに読んでたら、お休み4日目にして危険な疲れ方をしている。子供といると自動的に体がだるくなったり吐き気がしたりするやつ。喜々として対応しようとしている私に体が抵抗してるやつかな。 — Yu SUGAWARA (@gusmachine) December 26, 2017 そして実際、以下のようなサンプルをみると3歳くらいで本が読めそうな気がしてくる。もちろん子供に依るだろうが。以下、人のツイートを引用している。 ――なあ、今更突然気づいたんだけど。娘が不満に思ってたのは「一人で本を読みたかったから」なの? え、読めるの? 2歳1ヶ月未満で? 嫁「あ、絵本くらいならもう読んでますよ。寝る前、むしろ私に読み聞かせてる方です」 ……いつから? 嫁「年末あたりからですね」 成長早すぎるよ……(白目 — 榎宮祐 (@yuukamiya68) January 8, 2018 とか 妻「ひらがな教えるために50音表とかなにかやったりしました?」 父「引越しの段ボール見て「りんご」とか「みかん」とか読んでた」 私「は?」 — Yu SUGAWARA (@gusmachine) November 3, 2017 しかし、うちの子供はちょうど4歳で、ようやく短い文なら勝手に読めている気がする。また、先日、自分で七夕飾りを工作して、「ながいじがよめますように」って妻に書かせていた。まだ新しい絵本を読むのは厳しそう。 ただ、自分で文が読めるようになったとして、絵本を自分で読むかどうかはまた別の問題だろう。上であげた2歳未満で絵本が読めた榎宮さんのお子さんも、4歳でお父さんに絵本を読んでもらいたいらしいし。自分で読むのは自分で読みたいときか、他に読んでもらえる人がいないときではないか。 娘「ポケモンしたい!ヾ(๑╹◡╹)ノ"」 僕「最低限ひらがな読めないと辛いぞコレ」 娘「…………よめるよ(๑╹ω╹๑ )」 僕「嘘つけいつも読めない言ってるじゃん」 娘「ぶりむおん。まんたんのくすり( ๑╹⌓╹ )」 僕「読めてるじゃねーかテメ寝る前絵本読んでもらう為に読めないフリしてたな⁉︎」 — 榎宮祐 (@yuukamiya68) December 31, 2019 蛇足を付け加えると、「本を読める」にもかなり段階がある。子供が大人しく本を読んでいても、知っている本かもしれないし、絵だけみているかもしれないし、そもそも字面が追えていても理解できているかはまた別である。 更に蛇足だが、そもそも我々も文章を読めているだろうか?

2020-08-29 · Yu Sugawara

子供の寝かしつけとプラネタリウムの話

子供が私の寝かしつけを1ヶ月で拒否するようになった。妻としか寝ないわけだが、妻は夜間授乳したりするから寝かしつけはいろいろ面倒になる。 私と寝るようになってくれたほうがありがたいのだが。結局また子供と一緒に寝られるまで3ヶ月かかった。 下の子が生まれてからは私と夜寝てた上の子が、一ヶ月経って「お母さんとじゃなきゃ嫌だ」と主張し始めた。結果妻が添い寝して、上の子の寝落ちから下の子の授乳までの間に交代する感じになるのだが、上の子が夜時々起きて「お母さんじゃなきゃやだ〜」と泣き叫ぶため再交代する。再交代は辛い。 — Yu SUGAWARA (@gusmachine) October 23, 2019 私の添い寝を嫌がるようになった子供#1, 寝ているうちに妻と私がすり替わって寝てみたら、おへそを触りに来る→疑問に思ったのか顎を触りに来る→母親じゃないことに気づいて泣き出すみたいなことをしてくる。 — Yu SUGAWARA (@gusmachine) October 28, 2019 子供の嫌がり方が半端なかった。子供は寝る前に寝室で本を読むのだが、一度、私と本を読んだ際にそのまま寝落したことがある。それが嫌だったのか、起きたときにあまりにショックだったのか、その後は本を読む際には決して横にならず、読み終わったら授乳している母親のいる居間に歩いて戻っていた。 米カリスマ小児科医が教える、幼児を寝かしつけるテク 就寝時間に子どもの部屋へ何度も出たり入ったりします。 それを数日繰り返すうちに退出している時間を1分、2分、3分とだんだん長くしてゆくと、親が来るのを待っているうちに子どもは眠ってしまうというわけ。 ほとんどの場合、泣いたりぐずったりすることなく問題を解決してくれます。 今のところはこういうのあんまり効かなそう。一度だけ効いて、その後必ず出ていく母親についてくるようになると思う。 そのまま12月から仕事が始まったので、上の子の添い寝と下の子の授乳作業の両方を妻に完全移譲してしまった。ネットワークカメラで下の子の泣き声を寝室に転送して、妻が起きる。しかしネットワークカメラはよく落ちたり、あるいは妻が結局起きなかったり、起きたら上の子がついてきたりするのでうまくない。子供と添い寝しているとうまくアラームもかけられないし大変。 先月から再び上の子が添い寝してくれるようになった。きっかけは家庭用プラネタリウム。妻が12月には提案してくれたのだけど、高い割に飽きそうだと思って放置していた。年末にハンズで見かけて、廉価版なら良さそうと思って買ってみたら大成功だった。「これ解説できるのお父さんだけだからお父さんと寝る?」と聞いたら添い寝を許してくれるようになった。 買ったのはこちら HOMESTAR Relax。 高いクラシックじゃなくてリラックスの方。乾電池で動くので設置自由度が高い。代わりに一つの季節分しか見えないのでお話をふくらませるのに技術がいる。 プラネタリウムは点けてから 15 分で消えてしまうので、その間に星の話をする。消えたらあとは適宜「お父さんの昔の話をして」に答えていると寝ている。 オリオン座、冬の大三角形、北極星と北斗七星とカシオペア座、それから北極星の重要性、カストルとポルックス、星座の由来とギリシャ神話について、天の川と銀河系、あたりを話した。うっかりベテルギウス超新星爆発の話をして怖がらせてしまったり、そもそも普通の宇宙の話でも怖がらせてしまうこともあった。怖いときは私にくっついて寝るので害は少ないのだが、好感度が下がるとまた添い寝を拒否されそうなので気をつけている。最近はギリシャ神話だとか天文学の歴史とかを話したり、シリウスからアルファケンタウリ、アポロ計画、マーズ・パスファインダーの話をしたり。もう冬の星座の話するのに飽きている感がある。 結局10日くらいでプラネタリウムをつけるのはやめてしまったが、添い寝は続いている。今はプラネタリウムなしで、本を 3 冊読んでから、電気を消して私の昔話をして寝かせている。

2020-02-02 · Yu Sugawara

ワイヤレスイヤホンを買って podcast を聴く話

徒歩通勤をするようになったので、ワイヤレスイヤホンを買って podcast を聴くのを再開した。 会社に入ってから電車通勤でずっと英語の podcast を聴いていたのだけど、何か聴いていると人とぶつかりやすくなったり、とっさに声をかけたり謝ったりするのが出なかったりするのに気づいてやめていた。 電車での通勤時にはよく英語ポッドキャストを聞いてたけれど、イヤホンを装着してると混雑時人とぶつかりがちと気づいてしまったのでやめてしまった。それからは音ゲーですら電車では無音でやってる。 — Yu SUGAWARA (@gusmachine) September 16, 2018 徒歩なら人にぶつからないだろうと思い、再開した。 近年の携帯は有線イヤホンが刺さらないので、まずはワイヤレスイヤホンを探さないといけない。 適当に「ワイヤレスイヤホン おすすめ 2019」とかで検索して買おうと思っていたけど、次のポストを見かけて SoundPeats TrueFree+ にした。 https://t.co/OqU4GUSKME 聞いて、soundpeatsのイヤホン買った。 — IKeJI (@ikeji) December 5, 2019 ¥3,000で安すぎる。とりあえず日常使いにはこれで間に合っている。 と書いたのが去年末。一ヶ月経ってブログに記事を上げたときには、podcast を聴く頻度も減ってしまった。徒歩通勤の代わりにジョギング通勤をすることが多く、ジョギング中だとちょっとぶつかる危険が増えるので聴いていない。

2020-01-25 · Yu Sugawara

ICPC 横浜大会でスクリーンキャストを提供した話

今年からの試みで、ICPC 横浜大会でスクリーンキャストを提供しました。 当日の中継動画を PC から見ると、カメラ切り替えで選手のマシンの様子が見られるようになっています。 YouTubeへのリンク 経緯 実は 2016 年くらいからこれを計画していて、今年ようやく適当なものができました。まずスペックが右往左往しました。 選手の画面を外部に提供できると、観戦の際に楽しそう スクリーンショットを外部ページにアップロードすれば良さそう 60台の1080pのスクリーンショットを定期的に外に保存すると帯域を食い過ぎる。 ユーザに提供する UI が大変なことになりそう。 実は動画で提供したほうが帯域は少なくて済む。 とは言え 60台分送るのはやはり大変だし UI も大変。 動画を中継に差し込みたいが、選択 UI とか大変そう。 裏方でも見られるようにしたい。 外野にも見られるようにしたいが、60チャンネル YouTube Live するのは正気ではない。 上を経て、世界大会のビデオ を真似ることにしました。画面を4分割して、4チームのスクリーンが流れます。5秒ごとに1チームが切り替わるので、各チームは一度に20秒だけ放送されます。 どうなるか謎な UI は無視し、とりあえずチームを全自動ランダムに選んで動画を提供します。動画提供方法を確立することを目指し、それの活用は後回しにしました。 仕様を確立した後も、やることはうまく見通せず大変でした。 ストリーミングどころか動画データすらちゃんと扱った経験がないので、何をどう構成していいか全くわからず、調べるのにも苦労しました。 やることは以下のとおりです。 60台の選手マシンから動画を受け取る。 ランダムに 4チーム選んで順次合成。 合成した動画を生放送サイトに送る。 つまり、動画ストリーミングを切り替えつつ一本にまとめる事になります。自動でできるソフトを探すかプログラムを書くかになります。何もわからず、ffmpeg streaming とか ffmpeg switch between streams とか ffmeg zmq crossfade とかで何度も検索しました。 すごく初期の実験の様子: ffmpeg x11grab しているだけ ffmpegごっこ (ライブスクリーンキャストを表示するライブスクリーンキャストをしている) pic.twitter.com/lNs1pbP3ej — Yu SUGAWARA (@gusmachine) June 21, 2016 最近の、 動画切り替えができるようになった頃の様子。 本番構成 本番では以下のシステムを使いました。結局、ストリーミングを切り替えるのを、単純に ストリーミングを送るマシンを動的にザクザク切り替える方法で対応しました。 「動画リレーサーバ」マシンを用意してコンテストネットワークとインターネットにつなぐ 動画リレーサーバは選手マシンに接続して、選手マシンで ffmpeg を起動して20秒だけ動画を動画リレーサーバに p2p で送る。 動画リレーサーバ上で OBS Studio を起動して動画を合成して Youtube Live に送る。 動画リレーサーバがいつどの選手マシンに接続するかはプログラムで指定。 動画の切り替えは前の動画の終了及び次の動画のスタートで行われる。OBSが勝手に合成してくれている。 ここがうまく行くことを知るのがほとんど全てでした。zmq は使っていません。 これを作るために、 ssh 経由で ffmpeg を起動する Go のコードを 500 行くらい書き、 VirtualBox VM を録画用と選手2台の合計3台立てて実験を繰り返していました。正直結構面倒でした。いまはテスト手法が確立したので、はるかに楽に実験が出来ます。 改善アイデア やることはいろいろあります。まずは実況システムとの連携です。上で捨てた「UIが怪しい」部分をなんとかしないといけません。 それから、当然順位や解答状況を載せるべきです。 あと、切り替えはおそらくもっとマシな方法があるのではないかと思っています。視覚効果も入れたいですが、 ffmpeg filters を見たところ外部から指定する任意のタイミングにfade in/out を入れるのは出来なそうです。

2019-11-20 · Yu Sugawara

ICPC 2019 横浜大会

ICPC アジア予選 横浜大会で裏方をやっていました。参加者の皆様、コンテストは楽しんでいただけたでしょうか。コンテストシステム担当として、おおよそ以下の作業を行っていました。 コンテストマシンの選択 コンテストマシンイメージの作成 トライアルイメージの作成と配布 コンテストマシンへの計算機環境セットアップ コンテスト中の選手環境の監視 私は2015年からこのあたりの作業を担当していて、2016年は飛ばして今回で4回目になります。私ともう一人で担当しています。 今年は Ubuntu 18.04 へのベースシステム更新を予定していたので早いうちから作業を進めていました。 前年度大会終了直後のテンションで作業した結果、1月には主な更新が済んでいたりとか。 とは言え、ポロポロ問題が出てきたりしたため直前まで色々作業はありました。 ベースシステム更新以外にやった環境変更は以下のとおりです。 Kotlin の導入。 世界大会で導入されているエディタ (geany, kate, codeblocks) の導入。 選手画面のスクリーンキャストを導入。 上にある通り、本番前の準備が大きな仕事になるのですが、本番も会場の演題脇に座ってお仕事しています。 選手マシンにアナウンスを流したり、選手マシンを監視したり、それからマシンサポートをしたりです。印刷の仕方がわからない、に答えたり、暴走したプロセスを管理者権限で止めてコンピュータを直したりします。ケーブルが抜けたのもすぐに検知して slack に飛んでくるようにしています。 システム班の目標は自分も過去に参加した大会をサポートすること、それから、コンピュータの環境をなるべく良くすることです。特に、選手が使っていてなるべく違和感を感じないものを提供したいと思っています。近年は自前環境で参加できるオンラインコンテストが多く、それらと比較するとカスタマイズがしにくいお仕着せシステムはどうしても違和感が出てしまうとは思いますが、範囲内でできることを提供しています。

2019-11-20 · Yu Sugawara

.devに移行 + Firebase Hosting に移動

.devドメインを取り、さらに Firebase Hosting に静的サイトホスティングを移動させてしまった。 つい暇ができてやってしまった。 Hugo / Hosting on Firebase に書いてある通りにやっただけ。 すでにコンテンツがあることを前提としている。なければ適当に作って $ hugo して public/ フォルダを作ってほしい。 同時に、DNS設定の移行時間などを全然気にしていないので、前のドメインにトラフィックが多い時は困るかも知れない。 $ npm install -g firebase-tools する。 You will need to globally install firebase-tools らしい。 https://console.firebase.google.com/ へ行き プロジェクトを作成。 Hugo コンテンツレポジトリのディレクトリに移動。直下に public/ があるところ。 $ firebase login $ firebase init して質問に答える。 Which Firebase CLI features do you want to set up for this folder? Hosting. Associate this project directory with a Firebase project. 作ったやつを選ぶ。 What do you want to use as your public directory? public Configure as a single-page app? No File public/404.html already exists. Overwrite? No File public/index.html already exists. Overwrite? No $ firebase deploy で プロジェクト名.web.app や プロジェクト名.firebaseapp.com に公開されることを確認。 Hugo config の baseURL を更新しておき、 $ firebase deployする。スタイルのURLとかが変になるけどここでは気にしない。 .dev ドメインを購入。 Firebase カスタム ドメインを接続する を参考に購入したドメインを設定。 元ドメインは DNS設定でリダイレクトにする。 上記二つは設定に時間がかかるが、私の元のドメインも全然使われていないので気にしない。

2019-09-11 · Yu Sugawara