smellman's Broken Diary

クソみたいなもんです

macOSでQuakeを動かしてみる

実家にてQuakeなどのCD-ROMが出てきました。

f:id:smellman:20200905221423j:plain

今回はQuakemacOSで動くかやってみました。

まずは必要なソフトをインストールします。というか、cdparanoiaがまだ生きてるのに衝撃をうけました。

brew cask install quakespasm
brew install cdparanoia

次に適当な作業用ディレクトリを用意して、そこで作業を行います。まずはCD-ROMからのデータをコピーします。

cp /Volumes/QUAKE106/* .

ここで一回中身を確認します。

$ file *
DEICE.EXE:    MS-DOS executable, LZEXE v0.91 compressed
INSTALL.BAT:  DOS batch file text, ASCII text, with CRLF line terminators
RESOURCE.1:   MS-DOS executable, MZ for MS-DOS, LHa self-extracting archive
RESOURCE.DAT: ASCII text, with CRLF line terminators
SETUP.BMP:    PC bitmap, Windows 3.x format, 400 x 312 x 8
SETUP.EXE:    MS-DOS executable, NE for MS Windows 3.x (EXE)
SETUP.INI:    ASCII text, with CRLF line terminators
SETUP.INS:    COM executable for DOS
SETUP.PKG:    data
_INST32I.EX_: data
_ISDEL.EXE:   MS-DOS executable, NE for MS Windows 3.x (EXE)
_SETUP.DLL:   MS-DOS executable, NE for MS Windows 3.x (DLL or font)
_SETUP.LIB:   InstallShield Z archive Data

RESOURCE.1がLHa self-extracting archiveということなので、これの拡張子をexeにしたものをFinderでコピーして、The Unarchiverで解凍します。

次に音源を取得します。QuakeSpasmではoggに対応しているということなので、cdparanoiaでwave形式に書き直してからffmpegoggを作成します。

diskutil unmountDisk /dev/disk2
cdparanoia -B -- "2-"
for i in `ls *.wav`; do; ffmpeg -i $i -vn -ac 2 -ar 44100 -ab 128k -acodec libvorbis -f ogg `basename $i .cdda.wav`.ogg; done

最後にid1フォルダを作成して、必要なファイルをコピーします*1

mkdir /Applications/QuakeSpasm/id1/
cp RESOURCE/ID1/PAK* /Applications/QuakeSpasm/id1
mkdir /Applications/QuakeSpasm/id1/music
cp *.ogg /Applications/QuakeSpasm/id1/music

あとは実行します。

open /Applications/QuakeSpasm/QuakeSpasm.app

ランチャーが起動するので、とりあえず怖いのでフルスクリーンをオフにします。

f:id:smellman:20200905220154p:plain

起動するとこんな感じになります。

f:id:smellman:20200905220305p:plain

そして犬に殺されます。

f:id:smellman:20200905220346p:plain

さて、せっかくなのでexpansionを入れてみましょう。これまた実家にてMALICEというexpansionがあったので、これを動かしてみます。紙のマニュアルを読むとPowerMacの場合〜っていう項目にMALICEっていうフォルダをまるごとコピーせよと書いてあり、確認したらPAK0.PAKなどがあったのでさくっとコピーをしてみます。

cp -fr /Volumes/MALICE_1011/MALICE /Applications/QuakeSpasm/
cdparanoia -B -- "2-"
for i in `ls *.wav`; do; ffmpeg -i $i -vn -ac 2 -ar 44100 -ab 128k -acodec libvorbis -f ogg `basename $i .cdda.wav`.ogg; done
mkdir /Applications/QuakeSpasm/MALICE/music
cp *.ogg /Applications/QuakeSpasm/MALICE/music

あとはランチャーで引数に "-game MALICE" と入力します。

f:id:smellman:20200905223128p:plain

MALICEが起動します。

f:id:smellman:20200905223222p:plain

ちなみにもう一個あったexpansionのCHASMというのがインストーラの形式がわからずおとなしくDOSでやったほうが良さそうな感じでした。

あと、Hexen2は普通にWindowsアプリっぽいのでおとなしくWindowsでやったほうが良さそうな感じでした(いちおうpakファイルをコピーして試したが動かず)。

さて、明日はDuke Nukem 3Dを試してみよう...

*1:これ、brew caskのアップデートで死ぬんじゃないかという疑問はある

掛川城 3D Tilesを作ったって話

静岡県が公開している点群データの中で掛川城のデータを3D TilesにしてCesiumで表示できるようにしてみました。

Kakegawa Castle on Cesium

f:id:smellman:20200823154530j:plain

今回は実際に行った処理について解説してみます。

利用するツール

  1. lastools
  2. entwine
  3. ept-tools
  4. CesiumJS

点群データのマージ

まずは掛川城オープンデータ化プロジェクト(執筆時に何故か静岡県のサイトから反応がないためG空間情報センターの方にリンクを貼っています)をすべてファイルをダウンロードします。

点群データ(lasファイル)のタイル化自体はentwine及びept-toolsで行いますが、entwineで複数ファイルを読んだ場合と一つのファイルにしてから読んだ場合では後者の方がまともなデータになるので、ひと手間加えて24個のファイルを一つのデータにまとめます。

lasファイルをまとめるにはlastoolsのlasmergeコマンドを利用します。ただ、lastoolsとliblasで同じ名前の実行ファイルがあったりして取り扱いが面倒*1なので、dockerを使って処理をします。

今回は仮に$(HOME)/hogehogeで作業するとします。

cd ~/hogehoge
mkdir merged
docker run --rm -v $(pwd):/working smellman/lastools:latest sh -c 'lasmerge -i /working/*.las -o /working/merged/kakegawa.las'

これで単体のkakegawa.lasが得られました。

EPTへの変換

3D Tilesへの変換を行う前にentwineでEPTというフォーマットに変換をします。

なお、entwine.ioではentwineのみで3D Tilesへ変更できるとありますが、これは古い情報で、現在ではEPTから3D Tilesに変換するためにept-toolsを使うようになっています。

では、entwineで変換をしていきます。

今回は以下のようなスクリプトを動かします。

#!/bin/bash

input=/entwine/kakegawa.las
output=/entwine/kakegawa_output

for i in `seq 16`;
do
  docker run -it -v $(pwd):/entwine connormanning/entwine build -t 10 --subset $i 16 -i $input -o $output --srs EPSG:2450 --deep --scale 0.001
done
docker run -it -v $(pwd):/entwine connormanning/entwine merge -o $output

まず、seqと--subset引数を利用して16個のプロセスに分割をしています。
これはentwine自体が強烈にメモリを消費してしまうため、掛川城のデータを全部処理するとdockerで24GB割り当てても死ぬっていうのが発生するため、だいたい4GBぐらいdockerで割り当てても動くようにしています。

--srs引数はept-toolsで変換するときに参照されるため、必須となります。EPSG:2450は静岡県なので平面直角座標系の8番という感じで指定しています。自分の地域がどの平面直角座標系かは「EPSG 平面直角座標系」でググればだいたい出てきます。

--deepはすべての点群を参照するかどうかを決定します。この引数が無いと処理時間が早くなりますが、どうも出力結果が綺麗にならなかったです。

--scaleは本来点群のヘッダにある値で良いはずなのですが、これを指定しないとEPTの出力の一部がぶっ壊れてしまうので、わざと0.001(1ミリ)を指定しています。ここらへんの仕組みがあまり良くわかってなかったりします。

この処理でだいたい3時間ぐらいかかります。メモリの具合によってsubsetを変えてみるなどしてもよいかと思います。

あと、-tでスレッドの数を指定しているのですが、一つのファイルにマージしてしまうと意味がないっぽい感じがしています...*2

3D Tilesへの変換

最後に3D Tilesへの変換を行いますが、この処理を行うept-toolsはEPSG:2450に対応していないので、対応したものを使います。

cd ~/tools
git clone -b dev/add_proj4_text_for_japanese https://github.com/smellman/ept-tools.git
cd ept-tools
npm i
cd ~/hogehoge/merged
node ~/tools/ept-tools/lib/app.js tile kakegawa_output

なお、前述のentwineで処理が一つでも失敗してるとコケるので注意が必要です。

websiteを作成する

作成したkakegawa_output以下にindex.htmlを以下のようなコードで配置します。


Kakegawa Castle on Cesium

ept-tileset/tileset.json が3D Tilesのエントリポイントとなります。

以上で作成は完了です。

個人的にはPotreeConverterがプロプライエタリになってしまってv1.7のdocker imageはもともと作ってあるとはいえ、ThreeJSと現実の世界をつなげるのは厳しい*3のでCesiumで動くものが作れたのはかなり安心感があります。

*1:macではlastoolsはosgeoのformulaを使わないといけないとかもある

*2:docker stat見てもCPU100%以上にならない...

*3:実装はやってるけど...

spatialiteの現状の私的まとめ

この記事は2020年6月30日付でSpatialiteについて調べたものについて記述しています。なので、情報が古いなと思ったら適当に調べてください。

Spatialiteとはなにか?

SpatialiteとはSQLite3に地理空間情報のカラムや検索機能などを追加するソフトウェア及びSQLite3の拡張機能です。

www.gaia-gis.it

似たようなものではSQLite3に暗号化機能を追加するSQLCipherなどがあります。

Spatialiteの最後の安定版のリリースが2015年に出た4.3.0aで、現在は5.0に向けて開発が進められています。

各プラットフォームでの対応

ざっくりと調べた状況をまとめました。

Windows

Spatialiteの最後の安定版のリリースが2015年ということがあり、公式サイトで配布されているバイナリだとdllが古くてハマることがあるそうです。詳しくはググってください。

Visual Studioを使う場合には以下の選択肢があります。

  1. mod_spatialite
  2. NetTopologySuite.IO.SpatiaLite

www.nuget.org

www.nuget.org

なお、NetTopologySuite.IO.SpatiaLiteはmod_spatialiteのラッパーとして実装されています。

Linux

今回調査の対象外だけどたぶん普通に使える。

macOS

homebrewで使えます。

Android

android-spatialiteが使えると思います。

github.com

iOS

Spatialiteの作者がCocoapods作っていたりしますが、バージョンが4.1.0と古いうえ、geosなどの依存関係があるのにconfigureでgeosなどを切ってるという問題があります。

また、libspatialite-iosというものがありましたが、これも中身のバージョンも依存してるライブラリも古いという問題があります。

そこで、libspatalite-iosをベースにCocoapodsを作れないかと試しています。

github.com

とりあえずmod_spatialite.aが作れるところまでやりました。

ReactNative

android-spatialiteを使ったAndroidのみ対応のものがあるが、Android Xに対応してないバージョンなので作り直したほうがよいかも。

調べてわかったことや感想

  • spatialite自体の開発がgitではなくfossilというものでやっていて、かつ開発者自体がgithubへ移行はしないと名言している
  • fossilでどこで4.3.0aのタグが打たれたのかわからなくて詰んだ
  • spatialite 4.3.0aだといくつかパッチを当てないとproj4 6系以上などが使えない。homebrewのパッチを使うと良さそう
  • 4.1.0あたりではCocoapodsが作られてたりiOS対応したりする人がいたりするのに、なぜかそこらへんが継続されていない
  • 全体的に対応がマチマチな感じがあるのでちゃんと取りまとめしたほうが良さそう
  • fossliきつい...
  • iOSやる気ない感じすごい

読了: Pythonハッカーガイドブック

マイナビから献本していただいたPythonハッカーガイドブックを読みました。

book.mynavi.jp

僕の著書も担当した編集の西田さんからバズらせろという司令が来ていましたが、それは一旦無視するとしてとりあえず感想など。

まず、本書で書かれている内容がすごく幅が広く、いろいろと気づきがあります。
例えば、10章のバッファプロトコルとか9章のHyとか13章のシングルディスパッチャとか、使えるテクニックや単純に面白いと思うものが多く、またマニアックな話題も多いのが特徴です。
Lispの話は青春こじらせた頃を思い出してすごくよかったです。

原著が少々古くPython2とPython3を両方対応しようとしているところからコードがちょっと懐かしい感もあったりしますが、少なくともPython2からやっていた僕にはとてもわかりやすく、個人的にはPython2時代からやってる人におすすめです。

あと、全体的に監訳がしっかりしていて、分かりづらいところへの注記がかなりあってものすごく読むのに助けになります。
寺田さんを紹介してよかったなぁと改めて思いました。

明日から書店での販売及びマイナビでの電子版の発売がされるので、Pythonをより深く学びたいという人は是非読んでみてほしいです。

ってか、献本してもらったけど、手元にほしいから電子版買おうかな...

地図のインフラとしての地図タイルとは OSC2020 Online/Spring

OSC2020 Online/Springにて、「地図のインフラとしての地図タイルとは」というタイトルで発表をしました。


2020-4-25 A-6 地図のインフラとしての地図タイルとは

speakerdeck.com

いままでこのブログで書いていた内容や、JICAでの講義の内容を元にまとめたものとなりますが、話したいことをざざっと並べてしまったのでちょっと急ぎ足な発表ではあります。

まぁ、基本的な部分ではあるので、インターネットで地図を使う人には必須な内容かなと思うので、これから使う人はぜひ参考にしてください。

あと、オンラインでやる上で個人的な注意点がいくつかあります。

  • Zoomの荒らしが来てしまってZoom内チャットが荒らされたのだけど、見てる人には見えないモデレータのみへのメッセージだったのでかなりきつかった。発表中に100件以上コメントが来たうえに、Keynoteがマウスのフォーカスを隠してしまってチャットが閉じられない状態になり、かなり精神的に負担が多かった。ZoomのURLは何が何でも非公開にすべき...(僕の発表のときにツイッターで流れてしまったらしい)
  • 質問時間はちゃんと作ろう。上記の理由でチャット自体を閉じてしまったのだけど、理解度だったりを知るすべがTwitterしかなく、今後の参考にするものを得るのが難しくなるのである程度余裕があるプレゼンを作ると良いと思う(特にオンラインだと顔が見えない)。
  • マウスのポインタが見えなくなるのでそもそも黒いプレゼン背景自体が良くないかも。黒くした方が見やすいと思って作ったんだけど、ロゴとか貼り付けるときに透過とか無理やりそこだけ白背景とか入れたりして珍妙な作りになってしまうのも途中からきつくなった。

というわけで、正直発表してから理解度とかが曖昧になっているので質問などありましたらツイッターなどで適時聞いてください。

39歳になりました

また一つおっさんになりました。

最近は悪夢との戦いというか毎日体調が変わるような日々で厳しくもありますが、なんとか生きています。

なんとか生きてるといえば大腸の入院検査を受けたんですが、これはぐっちょむに下痢が止まらないって話をしたら「それはポリープじゃないすか?入院検査で取り除いたら一気に下痢治りましたよ!」という経験談を聞いて受けたっていうのが経緯なんですが、結果としてはポリープが無いどころか大腸は健康とのことで、完全に下痢は精神から来てるっぽくて鬱病の治療を優先しないといけないっていう状態になりました。

さて、直近では東京都や千葉県版のstopcovid19とかお手伝いしていたりします。ただ、東京都の方は少しフェードアウトしてて千葉県版の方にフォーカスを向いています。

covid19.civictech.chiba.jp

千葉県版はフォークしたタイミングがちょっと古く、東京都の改修に全然追いついていない状態ではあるのでどっかでなんとかしたいなーと思いつつ、なかなか余裕がないので手伝える人募集中です。

github.com

ちなみに、東京都の方に参加した経緯は、そもそもstopcovid19のサイトの立ち上げを担当したCode for Japanの代表が弊社社長だったりするっていう感じです。

あと、仕事の方で余裕があった時期っていうのもポイントでした。とはいえ、東京都の方は爆速でissueがassignされていくのでなかなか手を動かしづらい感じではありました。

千葉県版はCivic Tech Zen Chibaとは元々去年イベントに参加したりしてたし、発起人も友達なので〜みたいな感じです。

しかし、この件関わってざっくりとVueについて理解が捗ったのが個人的には良くって、やはりシビックテックやOSSは自分のためにも参加するっていうのが一番良いなーと思ってます。

他、docker-postgisやdocker-pgroutingとかを改修したりとかしています。最近追いつけなくなったけど、ある程度コミットできたのはすごく良い経験だった。

仕事の方は最近学生にプログラミングを教えるっていうのがあって、研究の妨げになりそうなものを補助するっていうのが目的で、これはこれで自分の知識を言語化しないといけないのでやはり僕自身の勉強にもなります。

まぁ、こんな感じで一つおっさんになったのですが、まだまだやっていこうと思います。

Apple Musicで聞けるBreakcore 10選

先日Apple Musicに入ったんですが、だいたい小学生〜大学生の頃聞いてたものが結構豊富にあって大変捗っております(何

まぁ、せっかくなのでBreakcoreでどこらへんがあるかなーと調べてリストを作ってたらアルバム10枚ぐらい出てきた感じなので、紹介しようと思います。

1. V.A. / Drop Name Records Vol 1

music.apple.com

V.A.ものとしては個人的にかなりハマっていたアルバムです。
個人的には MaladroitのBust a Digitalが最高に好きです。

2. Nero’s Day At Disneyland / Grievances and Dead Malls

music.apple.com

名前からしてやべーやつです。
1曲目はまじで最凶というかアホみたいなドラムでボッコボコにされます。

3. Synthamesk / Regression

Regression

Regression

music.apple.com

Synthameskはあまりないものの、最近の代表的なアルバムがありました。
ここらへんはもう解説なしでとりあえず聞けってやつです。

4. Emotional Joystick / Bellicose Pacific

Bellicose Pacific

Bellicose Pacific

  • Emotional Joystick
  • エレクトロニック
  • ¥1528
music.apple.com

1曲目のEightは2000年代前半にアホみたいにエレクトロニカ系のインターネットラジオで流れていました。
ちなみに、昔iTunesで買った気がしたのですが、よく見たらアルバムが違いApple Musicに入ってなかったら半分ぐらい聞き逃してた...

5. 廻転楕円体 / 奈落の虹

奈落の虹

奈落の虹

  • 廻転楕円体
  • アニメ
  • ¥1681
music.apple.com

ジャンル: アニメで吹いた。
カルト的な人気(ライブでの印象)を持つ廻転楕円体さんの1stもApple Musicにあります。
ちなみに、これは僕の葬式で流して良いと本人の許可を得ておりますので何卒〜

6. Ruby My Dear / Brame

Brame

Brame

  • Ruby My Dear
  • エレクトロニック
  • ¥1528
music.apple.com

るびまことRuby My Dearのアルバムなんですが、これはかなり問題作というか好みが非常に分かれるやつですね。
Igorrrのデス声もサンプリングされてて個人的にはめちゃくちゃ好きな作品なのですが、いろんな要素を詰め込みすぎな感じで、そこが好き。

7. Vexkiddy / Knocking out numbers

Knocking Out Numbers

Knocking Out Numbers

  • Vexkiddy
  • エレクトロニック
  • ¥1377
music.apple.com

たしかもともとはCock Rock Discoから出ていたと思われる作品。
特に3曲目の一気に曲調が変わるところが本当にかっこいい。
ただ、このアーティスト自体はすでにBreakcoreやってないはず。

8. Jega / Card Hore

Card Hore

Card Hore

  • Jega
  • エレクトロニック
  • ¥611
music.apple.com

Planet Muの初期の頃から活躍しているJegaが1997年にSkamから出したEPです。
全体的にはブレイクコアというとIDMよりのエレクトロニカって感じですが、1曲目がもうむちゃくちゃなので是非聞いてほしい。
ちなみにナウシカネタもあります。

9. John Frusciante / PBX Funicular Intaglio Zone

music.apple.com

レッド・ホット・チリ・ペッパーズのギタリストが何故かBreakcoreを作ったという珍妙なアルバムです。
特に3曲目のBikeはゴリゴリのBreakcoreでアホみたいなアーメンブレイク乗っけてきます。
ちなみに、昔Renoiseで作られた音源とかも公開されてたんですが、そこらへんは消えたっぽいです。合掌。

10. Venetian Snares / Hospitality

Hospitality - EP

Hospitality - EP

music.apple.com

僕自身はVenetian Snaresが好きで好きでたまらないっ子なんですが、Apple Musicにはかなりの楽曲が入っているのでそのうちの一枚を。
EPなので曲数は少ないけど、個人的には一番Venetian Snaresっぽさを感じる一枚で、しょっぱなからかっこいいイントロからの爆発力のあるBreakcoreかましてくれます。

なお、残念ながらHecate & Venetian Snaresは無いようです...