近況報告:Twitter垢凍結・セキュキャンフォーラム出ます
わたすけです。この書き出しも久しぶりな気がしますね。以前は記事一覧ページに表示するサマリーとして、記事冒頭から一定文字数を切り出したものを使っており、この書き出しで統一すると全部の記事が似たりよったりになってしまうという理由で、この書き出しを使わなくなったという過去があります。今は記事ごとにサマリーを設定できるようにしたので気にせず使えます。
久しぶりといえば、みなさん僕のことを認識したのも久々なのではないでしょうか。これはTwitterのフォロワーに向けた発言です。タイトルにも書いてありますが……
Twitter アカウントが凍結しました
……2025-01-25、中学生の頃から愛用していたTwitterアカウントこと @Watasuke102 が凍結しました。
凍結したタイミングで届いたメールには "Violating our rules against inauthentic accounts" と書かれていました。そんなことある??心当たりといえば、 OldTweetDeck を使っていたこと、その上で248文字くらいの検索クエリをかけていることくらいです。あれ?こう書くと自業自得な気が……。でもOldTweetDeckにそれらしきIssueは立ってないので、こちらは関係ないと思っています。やっぱりTweetDeck経由で検索カラムをたくさん立てていたせいかなあ……。
まあともあれ、もちろんその日のうちにメールに記載されていた問い合わせフォームから抗議したし、数週間経ってからは日本語でも問い合わせを行ったのですが、今に至るまで無反応です。
ということで、 @Watasuke102 は死にました。ブログとかで大量にツイートを引用していたり、ブックマークやフォロワー欄を見れなくなったりという弊害が発生してつらいです。が、Twilog には20日までのツイートが残っているし、アーカイブも2024-07-24までならダウンロードしていたので、なんとか致命傷は免れたという感じです。
最近は Bluesky で @watasuke.net として生きていました。ただ、やっぱりTwitterでしか得られない情報があるなあと思っていたので、転生垢を作ることにしました。今後は @watasuke1024 をよろしくおねがいします。
アカウントを失って初めて、フォローしていた人のIDとかを思ったよりも覚えていないことに気付きました。フォロー漏れとかがあればすみません。そもそもまだ全然フォローを飛ばしていません。
また、前のアカウントで相互だったのにフォロバされない!という現象も起こりそうな気がしているのですが、これに関してはもはや申し訳ないですとしか言えません。雑にフォロー解除してもらって構いません(もちろん雑なフォローも歓迎します)。
この垢が凍結されたらTwitterを引退すると思います。あと、凍結される前のようにTwitterをメインの移住地として使うべきなのかどうかも決めかねています。Twitterでの話題に反応するだけにとどめておいて、てきとうなツイートはBlueskyの方に流そうかというのが今のところの計画です。というわけで、もしよければ Bluesky のアカウントもよろしくお願いします。
Twitter凍結期間サマリー
Twitterが凍結している間にやっていたことを書いておきます。
卒業研究発表会
Twitterが凍結されて間もなく、卒業研究の発表会がありました。とりわけ1月は全てのリソースをこの発表会のために費やしていました。卒業論文すらも程々に留めたり、睡眠時間をめちゃくちゃ削って開発したりして発表内容を詰めていました。発表会は卒業研究という科目の成績評価において10%しか占めていないのですが、とにかく発表会を聞いている全ての人間に自分の成果、というよりは未来を見て欲しいと思っていたが故でした。
発表会ではデモを交えた発表を計画していたのですが、デモをやってる途中で突然うまく動かなくなり、動画を用いた発表に切り替えざるを得なくなってしまいました。というか、そもそも当日の朝4時とかまで開発をしていたせいで、デモ自体の練習を全く出来ていませんでした。これらによって、マジでめちゃくちゃカスの発表会となってしまいました。かけた時間と熱量の積 1 でいえば今までの人生ではトップクラスだったのではないか、と思うほどだったが故に、めちゃくちゃ残念です。卒論執筆の時間すら削ったせいか、成績もあまり良くなくて、とことん微妙です。
まあ学びは得ました。デモやるときはバックアップ用の動画が必須ですね。当日の昼休み、昼食を抜いてバックアップ用の動画を撮影してスライドに挿入しておいたのは本当にファインプレーだったと思っています。あと、発表する作品の開発は直前になるまでやらず、ほどほどで切り上げるべきですね。発表練習をしたほうが良い。
ところで、卒研の内容については後述します。
引っ越し
02/28に、5年間お世話になった高専の寮を退寮しました。実家に戻るインセンティブがマジでなかったので、滅多に帰省願を提出しないまま寮に居座っており、故に僕ほど寮への滞在時間が長い人間もそこまで多くないんじゃないかと自負しています。まあ学年が上がるにつれて、セキュキャン等で外泊をする機会が増えたので、本当にずっと居たわけではないんですけどね。僕より長い人も全然いると思います。
で、Instagramを見た人は知っていると思いますが、03/01に引っ越しをしました。契約が月始からだったので、それならどう考えても早く引っ越したほうがお得だろということで、爆速引っ越しに至ったわけです。
転入届ももう出したので、茨城県民になりました。よろしくお願いします。とはいえ間もなくインターンで2週間ほど東京に滞在するんですけどね……。
まあ引っ越したのは良いのですが、厳密に言えば僕の卒業ってまだ確定していないんですよね。卒業研究の成績も出たし、これによって単位を一つも落とさないままここまで来れたことが分かっているので、卒業できないわけがないとは思っていますが……。どうでも良いので早く卒業証明書が欲しいです。これがないと進学できないので。でもこれ卒業式まで発行されませんよって明言されてるんですよね。これのためにわざわざ飛行機を取る羽目になりました……。まあ卒業式に行きたくないと感じるほど人間関係が悪かったわけでもない(と思う)ので良いのですが……。
その他
卒研発表会が2月初頭にあり、そこから引っ越すまでの1ヶ月間に何をしていたのかというと、何もしていません。怠惰な生活をしていました。おわりです。
近況報告はこんな感じです。次は宣伝:
セキュリティ・キャンプ フォーラム2025で展示を行います
僕が卒業研究として取り組んでいた内容について、 セキュリティ・キャンプ フォーラム 2025 で展示を行います。
URL先の6番が僕です。概要が載っていますが、ここで説明するので読まなくても良いです。
これは 3/15 に行われるイベントです。会場が未定となっているんですが……?大丈夫かな……。書いてよいのかどうか分からないのですが、我々出展者は「オンラインで開催される」という旨の通知を受けています。詳しくはおそらくセキュリティ・キャンプ公式Twitterとかで告知されるのではないでしょうか。しらんけど……。
2025-03-06追記:WebEXで開催される旨の情報が追記されました。IPAのサイトから事前に申し込みをして、視聴用のURLを受け取る感じらしいです。よろしくお願いします!
発表内容(あるいは僕の卒業研究)
abstract
ARグラスである XREAL Air 2 シリーズ、およびそれと接続するためのAndroidデバイスである XREAL Beam Pro 上で、Linux 用アプリケーションのウィンドウを自由に配置することができるシステムを開発しました。具体的には、Windowing System(Waylandコンポジタ)である yaza と、その表示機構であり zen との互換性を持つ zen-mirror-xreal を開発しました。これらに関する発表を行います。
Introduction
2022年、僕は未踏アドバンストに採択され、 Zwin プロジェクトの開発を行っていました。これに関する詳しい内容や成果物のデモは公式サイトや成果報告会の動画を見てください。僕の卒研は、このスピンオフみたいなものになります。
WindowsのようなOSを介してパソコンを触る時、我々はほぼ間違いなく複数のアプリケーションを立ち上げ、「ウィンドウ」という形でそれらを配置し、必要に応じてフォーカスするウィンドウを切り替えながらアプリケーションを使い分けます。また、エクスプローラーからWebブラウザにファイルをドラッグ・アンド・ドロップしたり、Webブラウザのテキストや画像をコピーしてPowerPointにペーストしたり、といったアプリケーション間の相互作用を行うケースも多いでしょう。
一見普通の操作に見えますが、Meta QuestのようなVRHMDだと、一度に起動できるアプリケーションはせいぜい一つで、前述したようなウィンドウの配置、アプリケーション間の相互作用は出来ません。そこそこ前から、OS自体に搭載されている、例えば画像ギャラリーやフレンド一覧といったアプリであれば、Meta Questのホーム画面でウィンドウのように配置・移動が出来るようになっています。が、それが出来るアプリの幅は非常に狭く、パソコンと同等の柔軟性は到底叶いません。
この問題を解決するため、未踏アドバンストにおいて我々は Linux PC と Meta Quest 用の XR Windowing System を開発していました。Windowing System とは、前述したような、ウィンドウの配置、ドラッグ・アンド・ドロップ、コピー・アンド・ペーストといった機能を実現するシステムです。ウィンドウを管理するという点でわかりやすい名前なのではないでしょうか。
XR 用 Windowing System における課題の一つに、「VRHMDが重く、長時間の装着に耐えられない」というものがあります。まあVR睡眠というのも存在するらしいので慣れや工夫の余地はあるのだとは思いますが、長時間の装着で骨が凹むという事例もあるらしく、やはり重量の問題は存在すると思っています。
未踏アドバンストでは、この問題の対策として「疲れてきたらVRHMDを外すことを前提とする」という手法をとり、一般的なデスクトップ環境のように、(VRHMD用ではなく)PC用の2D Windowing System も実装することで、この課題にアプローチしました。
ところで、VRHMDが重いのであれば、他のデバイスに実装すれば良いとは思いませんか?Zwinプロジェクトは XR Windowing System のとおり、VRに依存した実装は行っていません。他のデバイスに Windowing System を実装する余地はあるということです。
そういうわけなので、ARグラスである XREAL Air 2 シリーズに対して、これらを実装しました。XREAL Air 2 シリーズはかなり軽量なので、一日中装着していても重量による疲労感はないと思います。
Method
Zwin プロジェクトのコンポーネントと、今回開発したコンポーネント、そしてそれらの連携について表す図2を以下に示します。
今回開発したものは青線で囲っています。Androidスマホ(Beam Pro)と XREAL Air 2 だけで完結するのが売りです。
まず、Wayland コンポジタこと yaza を Termux 上で起動します。次に、XREAL Air 2 をスマホに接続し、出てくるランチャーから zen-mirror-xreal を起動します。あとは Termux で任意の Wayland クライアントを起動すれば、ウィンドウがいい感じに表示されるというわけです。
zen-mirror-xreal のアプリ画面をトラックパッドのように使うことができます。ドラッグすれば yaza 内の光線(ray)が動いて、ウィンドウと交差した部分にマウスカーソルが表示されます。
Discussion
Waylandコンポジタとして必要で、しかしまだ実装していないものがいくつかあります。ドラッグ・アンド・ドロップとキーボード入力はその最たる例です。D&Dは実装がダルそうでやってないだけです。キーボード入力はどう実装すれば良いものかわからず悩んでいます。あと、実装はしたが上手く動かない機能として、右クリック時などでのポップアップ表示機能があります。なんか位置がズレるんですよね。原因が未だに分かっていません。
そして何より、アプリ実装の難しさというか、無駄に遠回りなことをしているような気持ちがあります。XREAL Air 2 を動作ターゲットとしている時点で、Android および Unity 3を用いてアプリを開発することが必須になっています。そして、Waylandクライアントはなるべく自由に動かしたいため、Termux で Wayland のコンポジタやクライアントを実行するという形になっています。
さて、Wayland はコンポジタ:クライアント間の通信(IPI)を、 Unix ソケットを介して行います。Wayland コンポジタを起動している人なら、 XDG_RUNTIME_DIR ディレクトリの下に wayland-0 のような名前のファイルを発見することが出来ると思います。この関係上、Wayland クライアントは、 Wayland コンポジタが作成したファイルにアクセスできなければいけません。
そこで Android のセキュリティ機構が仇となります。Android は SELinux だか何だかで、他アプリのファイルにアクセスすることが出来ないらしいんですよね。コンポジタを Android NDK として作ることを考えていたのですが、例えばコンポジタが Termux のホームディレクトリにソケットファイルを作成するというのは当たり前のように不可能です。コンポジタが自身の files
ディレクトリ(/data/data/com.example.wayland-compositor/files/
)にソケットファイルを作成しても、Termuxからそれを読むことは出来ません。双方からアクセスできる external storage はパーミッションが足りず、ソケットの作成自体が不可能です。
仕方がないので、今は localhost を経由して gRPC 接続を行い、コンポジタとディスプレイシステム間で描画に必要な情報をやり取りしています。まさしく zen と zen-mirror が行っていることですが、それらとは違って確実に同一マシン上での動作が前提となっているのに、なんでこんな遠回りなことをしているんだろう……という気持ちです。そもそも、おそらくgRPCのせいで、ウィンドウの表示内容が変化した時にものすごいラグが発生します。動画視聴などはかなり厳しく、実用に耐えられるようなものではありません。
マウス入力も、localhost 経由でTCP接続を行い、情報を伝達しています。ディスプレイシステム側、つまりUnityでタップを検出して、それを送信するという形ですね。そう、入力は Unity で処理しなければならないんです。Unityには、個別のキーについて、キーが押された・離されたこと、任意のキーが押されていることを検出する機能はあるのですが、任意のキーが押された・離されたことを検出する機能はないように見受けられます。これが、キーボード入力がまだ実装できていない原因です。まあこれは Input.GetKeyDown()
を大量に呼ぶという力技で部分的に解決するのは分かっているんですけどね……。
おわりに
ということで、ご報告と、Twitter凍結期間のサマリーでした。なんか1ヶ月くらいで色々なことが起こったように感じています。
とにかく、今後も Twitter (@watasuke1024) と、Bluesky (@watasuke.net) をよろしくおねがいします。これらが死んだらいよいよこのサイトだけになりそうな気もするので、良ければRSSの登録とかもよろしくおねがいします。
Footnotes
Comments
Powered by Giscus