Godot Engine上で振り仮名(ルビ)を実現する

Godotでもルビを振りたい!

皆さんはゲームを作るとき、何のエンジンを使いますか? ……なになに、「既製エンジンを使うとは限らないじゃないか」ですって? いやいや、今時、フルスクラッチで自作する硬派な人は希少でしょう1。エンジンっぽいものを作るにしても、既製のツールの上にオリジナルのものを実装するケースが多いのではないかと思います。車輪の再開発はできるだけ避けたいでしょうから。
既製エンジンで言えば、UnityやUnreal EngineのようなAll-in-Oneなエンジンを使う方も多いでしょうし、あるいはGameMakerやRen’PyやPhaser (≒Pixi.js)のように強み重視なエンジンを使う方もいらっしゃると思います。どれもそれぞれ特徴があって面白いですよね。
有名なゲームエンジン間の比較や各エンジンの強み・弱みを解説しているgamesindustry.bizの記事を読んでみると、いろいろあるんだなあと改めて実感します。

ところで最近、私はGodot Engine2というFLOSSのゲームエンジンを触り始めています。シングルバイナリ(60MBほど)で動作し軽量、マルチプラットフォーム(Linuxでも動きます)に対応、おまけにFLOSS(MITライセンス)なのでソースコードも読み放題! という個人的な理想が詰まったエンジンなのです。控えめに言って神、というのはこのことでしょう。
そして、私は事あるごとにノベルゲームのような何かを作る習性3があるため、今回もGodot Engine上でノベルゲームっぽいものを作ることにしました。

海外ではそれなりに人気もあるエンジンということもあり、大体の機能は揃っています。テキスト表示も詰まることなくオーケー。各種画像表示4や音源再生もオーケー。基本的なノベルゲームっぽいものは難なく完成。
しかし、ちょろちょろとスクリプトを入れ込んでいるうちに、あることに気が付きます。そう、振り仮名、所謂ルビを振る機能がないのです。Godotは海外産である上に日本でもマイナーな存在ということもあって、ルビのようなレア機能は当然実装されていないのでした。

調べてみると、Unityでもデフォルトでルビはサポートされていないようですが、流石有名なUnity、いくつか実装例が存在しているようです5。しかし、Godotでの実装例は見当たらず……。
Godotに心を奪われてしまった一ファンとして、これは見過ごせません。というかファン云々以前に、とにかくGodot上でルビを振りたいのです。

[Read More]

Jitsi Meetの通知を左下から左上に変えるパッチ

Jitsi Meetの通知の位置がコントロールと被る問題

リモートワークが話題になるよりも前から、別のドメイン1で友人とのビデオ会議用にJitsi Meet2を運用していたのですが3、最近友人から「通知が左下に出るんだけど、コントロールと被って使いづらい」という話を聞きました。私は正直気にならなかったのですが、確認してみると……。

通知がコントロールを隠してしまう

通知がコントロールを隠してしまう

フムム、これは確かに使いづらいかもしれない4。しかし、通知の位置を修正するくらいならササッとできそうね。

というわけでスタイルをインスペクタで確認しつつ、パッチを作ってみました。雑ですが、とりあえず位置を変更できるはず。 Jitsi Meetをインストールした環境で、以下のコマンドを実行すればパッチを適用できます。私は jitsi/web のコンテナ上で試しました。バージョンは4384-1で試しています。

sed -i 's/.cjMOOK{bottom:calc(calc(40px + 24px))!important}/.cjMOOK{bottom: auto !important;top: 20px;left: 20px !important}.mIBKA,.gpUwQx{bottom: auto !important}/g' /usr/share/jitsi-meet/css/all.css

あらあら、!importantがギラギラと光っていますね。
兎にも角にも、適用するとこうなります。

通知の改善後

通知の改善後

通知を左上に移動させました。また、左からの間隔も少し狭めに修正しています。 雑な改善なので、複数通知がある際は上図のように重なって若干見た目がおかしくなっていますが、まあ実用上は問題ないと思います5

同じような悩みをお持ちの方は是非お試しあれ。お時間がある方は、もうちょっと改善してみると綺麗な表示にできるかもしれませんね。


  1. *.clvs7.com ではないです。念の為。別のサーバーで稼働させています。 ↩︎

  2. 詳細は https://jitsi.org/jitsi-meet/ 。インターフェースのソースコードは https://github.com/jitsi/jitsi-meet 。ライセンスはApache License 2.0。 ↩︎

  3. 最近、Zoomの脆弱性が騒がれた結果「Jitsi Meetはいいぞ!」という風潮が一部で出てきているようですが、それよりも前から注目していただけに何か嬉しいような寂しいような……。とりあえず、えっへん。 ↩︎

  4. 私は無意識のうちにOKを押して消していたので気にならなかったっぽい。 ↩︎

  5. 多分ね。 ↩︎

HugoでMarkdownのテーブルに属性を付与する

HugoでMarkdownのテーブルに属性を付加する

Hugo、便利ですよね。当ブログはHugoを使って作成していますし、私が管理しているいくつかのサイトでも積極的にHugoを採用しています。 少なくとも管理者が一人である限り、HugoのようなStatic Site Generatorはメチャクチャ強力だと思っています1

さて、そんなHugoですが、0.60.0からCommonMarkに準拠したgoldmarkと呼ばれるMarkdownパーサー2をデフォルトで使うようになりました。 その結果、いくつかの機能が非推奨になったり変更が加えられたりしています。その影響を受けるものの一つがMarkdownのテーブルです。

[Read More]

アスキーアート(AA)を崩さずに表示させる汎用ブックマークレット

アスキーアート(AA)の悲哀

最近、所謂やる夫スレにハマっています。何年前の流行だよとか突っ込まれそうですが、それでも面白いものは面白いのです。ちなみに今の個人的ベストは『サバイバルヤルオ』1。圧倒的な傑作です。

ただ、やる夫スレ(のアーカイブ)を閲覧するにあたって気をつける点があります。それは、ご存知の通り、環境によってはアスキーアート(AA)が崩れてしまうという点です。 といっても、パソコンで閲覧している場合はどうとでもなります。表示フォントが容易に変更できるためです。が、問題となってくるのはスマートフォンでの閲覧。スマートフォンのブラウザは一般にフォントを自由に変更できるようになっていません。また、専用アプリを導入するのも少々面倒くさいものです2。したがって、何もしないままではまともに閲覧できません。これは問題でしょう3

アーカイブを公開しているサイトによっては、Saitamaar等のウェブフォントを利用することでこの問題を解決しています。 が、全てのサイトがウェブフォントを採用しているわけではないため、ウェブフォント非採用のサイトのみで公開されている作品はスマートフォンでの表示がやはりズレズレになってしまいます。

ここで、問題の別の解決手法として、ブックマークレットが挙げられます。ブックマークレットを利用することで、ブラウザ側でウェブページに対し動的にスタイル、フォントを適用できるわけです。 しかし、既存の手法として Saitamaar.js を利用するものなどがあるようですが4、私の環境では上手く動作しませんでした。閲覧するサイトによるのかもしれませんが、いずれにせよ崩れるのは困ります。

そこで、大抵のサイトで動作するであろう汎用的なブックマークレットを作成してみました。このブックマークレットを利用することで、ウェブフォントを採用していないサイトのAAも正しく表示できるようになります。

[Read More]

Raspberry Pi 3でFedora 28 Minimalを起動する際、画面がブラックアウトしてしまう問題の対応

Fedora 28 on RPi3

諸事情あって、Raspberry Pi 3上でRaspbian以外のOSを動作させる必要が出てきたのですが、調べてみると私の要件ではFedoraが一番最適そうでした。

そこで早速、最新のFedora 28をmicroSDに焼いて起動してみたのですが……ペンギンが出現してすぐにブラックアウトしてしまいます。 これでは初期設定ができません。困った。

ただ、ログやネットワーク越しの反応を見る限り、OS自体は死んでいなさそうだったので、何かあるんだろうなあとしばらくネットを徘徊。

で、Fedoraが提供しているarm-image-installerのソースコード1を眺めていると、『fix up rpi2/3』という怪しい項目が。 そこではVC4というGPUドライバを無効化しているようでした。これだ!2 3

[Read More]

ArchLinuxでL2TP/IPsecなVPNへの接続を行う

2017/06/09 : 最新のArchの環境で、接続後正常に通信できない場合がある問題について追記しました。
2017/08/08 : libreswan 3.19(3.20が上手く動作しなかったので下げています)において、networkmanager-l2tpの動作を確認しました。libreswanとxl2tpdさえ正しくインストールされていれば、もうコマンドラインを叩かなくても良いようです。ちょっと嬉しい。
2018/08/27 : 古い記事への追記で恐縮ですが、筆者は現在、libreswanではなくstrongswanを利用しています。結果としてlibreswanよりも安定性が向上しました。一部libreswanとは設定ファイルの書き方が違いますが、ほとんど同じです。また、対向先が古い暗号化方式(3DES等)を用いている場合、明示的にそれを指定しなければなりません。例えばRTX1100が相手であれば、

ike=3des-sha1-modp1024
esp=3des-sha1

をstrongswanに読み込ませるconfに記述する必要があります。事前にike-scanで確認しておくとよいと思います。


冷遇されるL2TP/IPsecクライアント

先日、大須にて中古のThinkPad X220iを購入したのですが、折角なのでArchLinuxを導入することにしました。
順調にGNOMEも導入し、各種設定も終えたのですが、一つだけ上手く動作しない機能がありました。そう、L2TP/IPsecなVPNクライアントです。
私がArchLinux初心者ということもありますが、かなり骨が折れました。大学祭の最後、後夜祭のレーザーショー開始五分前に部室でようやく動作を確認できた瞬間は、本当に嬉しかったですね。私の精神状態がレーザーショーでした。
そんな訳で、NetworkManagerのL2TPプラグインから始まり、いくつもの方法を経て見つけ出した接続方法を、ブログにて共有したいと思います。

[Read More]

Crosswalk Web Driverの導入方法

Crosswalk Web Driver導入の備忘録

日本語資料がなくて困ったので、これから先同じような人がイージーゲームになるようにここへ記しておきます。

Androidアプリケーションにcrosswalkを導入している場合、UIテストにAppiumが使えないらしいですね。ググってみると非対応だとか、今後検討するといった内容がヒットしますが、成功したという話は今のところ目にしていません。
そこでCrosswalk Web Driverを用いて、selenium webdriverを利用したUIテストを試すことにしました。
が、これがなかなか曲者だったというのが今回のお話です。

[Read More]

セキュリティ・キャンプ 全国大会 2015の参加レポート

2017/06/23 : 旧ブログから移植。一部古い情報を削除。また、昔の青臭くて恥ずかしい表現を修正。
2018/08/30 : 古い情報を削除。
2020/12/14 : やっぱり恥ずかしいので話が逸れ過ぎなところは削除。

■セキュリティの夏

2015年8月11日から15日にかけて、学生版情報セキュリティの祭典ともいえる『セキュリティ・キャンプ 全国大会 2015』に参加してきましたので、レポートを書くことにしました。

[Read More]

セキュリティ・キャンプ 全国大会 2015 個人的なWriteupのようなもの

本日のお昼頃、応募していたセキュリティ・キャンプ 全国大会 2015が無事に合格だったことを知り、大学の食堂でガッツポーズをしました。やったぞと。非常に嬉しかったですね。
しかし、Twitter等で参加する方々のプロフィールなどを見ていくと、やはり凄まじい技術力とオーラが漂っておりまして、ええ、覚悟はしてましたけどやはり圧倒されてしまいました。

そんな中で、どうやら応募用紙のWriteupを書かれている方が思ったより多くいらっしゃって、Twitter上で公開を勧められたこともあり、簡単にですが書いてみることにしました。
他の方々の用紙を見ていると、アセンブリでバリバリ書いていたりしていますが、私は書いてないです……なんかすみません……。

まだまだ未熟者で、見る人が見れば鼻で笑ってしまうような内容なのかもしれませんが、一応公開しておきます。

なお、公開という形にはなりますが、今後問題となるようであれば削除する方針です。
後半はほぼ内容そのままです。

[Read More]