smellman's Broken Diary

クソみたいなもんです

OpenStreetMapのMapbox Vector Tileを作ってみた

smellman.hatenablog.com

この記事にあるosm2vectortilesは古いため、Dockerのインストール方法以外は新しい記事を参考にしてください。

OpenStreetMap Advent Calendar 2016 3日目の記事です。

今回はOpenStreetMapのデータを使ってMapbox Vector Tileを自分で作ってみることに挑戦してみました。

対象となる環境はUbuntu 16.10をインストールしているThinkpad X220です。スペックは以下の通りです。

CPU
Intel(R) Core(TM) i5-2540M CPU @ 2.60GHz (物理2コア/論理4コア)
Memory
16GB
Storage
SSD 240GB

なお、このマシンは本体と換装パーツ込で33000円ぐらいで揃えたものです*1

さて、余談はよいとして、Mapbox Vector Tileを作るに当たって、今回はosm2vectortilesGenerate your own vector tilesを参考に行いました。

まず先にosm2vectortilesについて軽く紹介したいと思います。

このプロジェクトはOpenStreetMapをベースとしたMapbox Vector Tileの地図タイルを自由にダウンロードできるようにするもので、世界全域の地図タイル以外にもいろんな地域の地図タイルがmbtiles形式でホスティングされています。また、地図タイルの作成にdockerを活用しているのが特長です。また、地図タイルを長くやってる人にはMapTilerというプロダクトで有名なKlokan Technologiesがスポンサーをしていることも話題になりました。俺も久々にこのカンガルーの会社ロゴ見てびっくりした(汗

さて、さっそく作業をしていきます。まずはDockerとDocker-composeをインストールします。

sudo apt-get install docker docker-compose
sudo service docker start
sudo docker run hello-world

次に一般ユーザで作業をするためにdockerグループにユーザを追加します。

sudo usermod -aG docker $USER

これで一旦リブートをして再度ログインして、一般ユーザで動作するかを確認します。

docker run hello-world

dockerが一般ユーザで動くようになったら次にosm2vectortilesをgithubから落としてきます。

mkdir -p ~/develop/osm
cd develop/osm
git clone https://github.com/osm2vectortiles/osm2vectortiles.git
cd osm2vectortiles

今回の作業パスは ~/develop/osm/osm2vectortiles とします。

まずは手順通りにdocker-composeでPostGISのコンテナを取得します。

docker-compose up -d postgis

ここで一旦別のディレクトリを作成して、そこに今回使うファイルをダウンロードします。

まずはテストということで、bbbikeから東京の範囲のpolyファイルとPBFファイルをダウンロードします。polyファイルは後でBBOXの範囲を計算するのに使います。

mkdir -p ~/tmp/osmdata
cd ~/tmp/osmdata
wget http://download.bbbike.org/osm/bbbike/Tokyo/Tokyo.poly
wget http://download.bbbike.org/osm/bbbike/Tokyo/Tokyo.osm.pbf

次にPBFファイルをosm2vectortiles/importに配置します。

cp ~/tmp/osmdata/Tokyo.osm.pbf ~/develop/osm/osm2vectortiles/import/

次にまた別の作業ディレクトリを作成して、OpenStreetMapDataからwater-polygonsとsimplified-water-polygonsを、Natural Earthからnatural_earth_vectorSQLiteのファイルをダウンロードします*2

mkdir -p ~/tmp/osmpoly
cd ~/tmp/osmpoly
wget http://data.openstreetmapdata.com/water-polygons-split-3857.zip
wget http://data.openstreetmapdata.com/simplified-water-polygons-complete-3857.zip
wget http://naciscdn.org/naturalearth/packages/natural_earth_vector.sqlite.zip

これらを全てunzipしてから必要なファイルをosm2vectortiles/importにコピーします。

unzip water-polygons-split-3857.zip
unzip simplified-water-polygons-complete-3857.zip
unzip natural_earth_vector.sqlite.zip
cp ~/tmp/osmpoly/water-polygons-split-3857/water_polygons.* ~/develop/osm/osm2vectortiles/import/
cp ~/tmp/osmpoly/simplified-water-polygons-complete-3857/simplified_water_polygons.* ~/develop/osm/osm2vectortiles/import/
cp ~/tmp/osmpoly/packages/natural_earth_vector.sqlite ~/develop/osm/osm2vectortiles/import/

最終的にosm2vectortiles/importディレクトリが以下のようになります。

% ls -l import
合計 1079640
-rw-r--r-- 1 btm btm  18088604 12月  3 15:11 Tokyo.osm.pbf
-rw-r--r-- 1 btm btm 414519296 12月  3 15:16 natural_earth_vector.sqlite
-rw-r--r-- 1 btm btm         6 12月  3 15:16 simplified_water_polygons.cpg
-rw-r--r-- 1 btm btm     74837 12月  3 15:16 simplified_water_polygons.dbf
-rw-r--r-- 1 btm btm       853 12月  3 15:16 simplified_water_polygons.prj
-rw-r--r-- 1 btm btm  29614272 12月  3 15:16 simplified_water_polygons.shp
-rw-r--r-- 1 btm btm     49948 12月  3 15:16 simplified_water_polygons.shx
-rw-r--r-- 1 btm btm         6 12月  3 15:15 water_polygons.cpg
-rw-r--r-- 1 btm btm    452789 12月  3 15:15 water_polygons.dbf
-rw-r--r-- 1 btm btm       847 12月  3 15:15 water_polygons.prj
-rw-r--r-- 1 btm btm 642308932 12月  3 15:15 water_polygons.shp
-rw-r--r-- 1 btm btm    301916 12月  3 15:15 water_polygons.shx

では、またosm2vectortilesの作業ディレクトリに戻って手順書通りに作業を進めていきます。

docker-compose up import-external
docker-compose up import-osm
docker-compose up import-sql

ここまできたらあとはexportをするのみとなりますが、BBOX(範囲)のパラメータを与えないと世界中が対象となってしまうので、BBOXの値を計算します。
BBOX自体はwest,south,east,northの順にパラメータを与えます。
なので、経度180度線を気にしなければ、min(longitudes),min(latitudes),max(longitudes),max(latitudes)となります。
今回の東京の範囲のPOLYファイルをみると今回は単純な四角形なので値は簡単にわかります。

Tokyo
1
   139.62  35.56
   139.95  35.56
   139.95  35.78
   139.62  35.78
END
END

これを読めば、BBOX=139.62,35.56,139.95,35.78という値がとれるので、それを使ってドキュメントに沿ってexportを実行します。今回はzoom 9からzoom 14までを作成してみます。

docker-compose run \
  -e BBOX="139.62,35.56,139.95,35.78" \
  -e MIN_ZOOM="9" \
  -e MAX_ZOOM="14" \
  export
docker-compose up export

これらを実行するとexport以下にtiles.mbtilesというファイルができあがります*3。ただし、dockerで生成したためか所有者がrootのファイルになっているので、所有者の変更とあとでファイルを変更しても良いように別名でコピーをとっておきます。

sudo chown $USER:$USER ~/develop/osm/osm2vectortiles/export/tiles.mbtiles
cp ~/develop/osm/osm2vectortiles/export/tiles.mbtiles ~/develop/osm/osm2vectortiles/export/tokyo.mbtiles

あとは実際に動作するかをチェックします。
これはGetting Startedではtileserver-gl-lightを使うようになっているのですが、tileserver-gl-light自体はすでに古く、tileserver-glが最新になっているのでそちらを使うようにします。
ただし、tileserver-glの方は現在npm installに失敗してしまいます*4
なので、今回はtileserver-glのdockerを使って検証してみます。

cp ~/develop/osm/osm2vectortiles/export/tokyo.mbtiles /tmp/
cd /tmp
docker run -it -v $(pwd):/data -p 8080:80 klokantech/tileserver-gl

これでサーバが動いているIPアドレスの 8080 port へアクセスします。

f:id:smellman:20161203192934p:plain

ここでBasicスタイルのVectorタイルを選択します。

f:id:smellman:20161203193118p:plain

初期状態でzoom 2なのですが、何も出ててきません。しかし、ズームアウトすると...

f:id:smellman:20161203193151p:plain

全球が出てきます。そこで東京の方に見ていきます

f:id:smellman:20161203193249p:plain

途中まではすごく雑です。

f:id:smellman:20161203193440p:plain

作成したズーム9からはちゃんと出てきます。

f:id:smellman:20161203193527p:plain

f:id:smellman:20161203193547p:plain

とりあえずズーム14までちゃんと作られたのが確認できます。

では、せっかくなのでズーム0〜ズーム8をマージしてみましょう。

マージはドキュメントにあるようにMapboxのmbutilにあるpatchというシェルスクリプトを使います。なお、sqlite3が入っている必要があります。また、ドキュメントにあるmbtilesのダウンロードはズームレベル5までのもの*5なので、ダウンロードページからPlanet from zoom level 0 to 8を選んでダウンロードします。

cd ~/develop/osm/osm2vectortiles/export
wget https://osm2vectortiles-downloads.os.zhdk.cloud.switch.ch/v2.0/planet_2016-06-20_7088ce06a738dcb3104c769adc11ac2c_z0-z8.mbtiles
wget https://raw.githubusercontent.com/mapbox/mbutil/master/patch
chmod +x patch
cp tokyo.mbtiles tokyo-and-planet.mbtiles
./patch planet_2016-06-20_7088ce06a738dcb3104c769adc11ac2c_z0-z8.mbtiles tokyo-and-planet.mbtiles

これも同様に動かしてみましょう。

rm /tmp/tokyo.mbtiles
cp ~/develop/osm/osm2vectortiles/export/tokyo-and-planet.mbtiles /tmp
cd /tmp
docker run -it -v $(pwd):/data -p 8080:80 klokantech/tileserver-gl

f:id:smellman:20161203193638p:plain

最初から全球がレンダリングされていていい感じです。

f:id:smellman:20161203193710p:plain

f:id:smellman:20161203193730p:plain

日本の形もちゃんと出てきます。

f:id:smellman:20161203193800p:plain

ただし、zoom 8あたりで残念なマージになりました。
まぁ、ファイルを上書きしてしまってるのでしょうがないとはいえます。

とりあえずこれである程度の地図タイルが作れるようになりました。

では、せっかくなので日本全国の地図タイルを作ってみましょう。

まずはGeofebrikのOSMデータのミラーサイトから日本全体のデータをダウンロードします。

cd ~/tmp/osmdata
wget http://download.geofabrik.de/asia/japan.poly
wget http://download.geofabrik.de/asia/japan-161202.osm.pbf

次に、以前の作業に使ったpbfファイルの削除と、以前使ったdocker-composeを全て削除します。
docker-composeを削除するのはどうもpgdataを削除したぐらいでは何かが残ってしまっていてimposm3のmergeの処理が走ってしまうためです。
ただ、すでにイメージ自体はダウンロードしてるので再構築自体は高速です。

cd ~/develop/osm/osm2vectortiles
rm import/Tokyo.osm.pbf
docker-compose stop postgis
docker-compose rm -f export
docker-compose rm -f import-sql
docker-compose rm -f import-osm
docker-compose rm -f import-external
docker-compose rm -f postgis
docker-compose rm -f pgdata
docker-compose rm -f cache

あとは以前の手順と同様に再構築を進めます。

cp ~/tmp/osmdata/japan-161202.osm.pbf import
docker-compose up -d postgis
docker-compose up import-external
docker-compose up import-osm
docker-compose up import-sql

次にBBOXを取り出したいのですが、日本の範囲として定義されているPOLYファイルはPOLYGONになっていてちょっと計算が面倒なので、とりあえずスクリプトをでっち上げたのでこれを使ってBBOXの値をゲットします。

cd ~/tmp/osmdata
wget https://gist.githubusercontent.com/smellman/a2770f3a6c4717315cc0a4538b985a1c/raw/1008b6d5f061fb7c0eeaddef86d8faf68f1a6d57/poly2bbox.py
% python poly2bbox.py japan.poly
BBOX=122.5607,21.20992,153.8901,45.80245

こんな感じで取れるのでこれをBBOXのパラメータとして使います。
なお、今回はMAX_ZOOMを13としています。というのはどうもズーム9から14で試したら17時間ぐらい処理にかかるらしく、今日のAdvent Calendarに間に合わないので...*6

docker-compose run \
  -e BBOX="122.5607,21.20992,153.8901,45.80245" \
  -e MIN_ZOOM="9" \
  -e MAX_ZOOM="13" \
  export
docker-compose up export

できあがったのはだいたい550MBぐらいのmbtilesで、 exportの処理時間はおよそ3時間ぐらい、importを含めてだいたい4時間ぐらいでいけました*7

あとはバックアップを取ってからtileserver-glでチェックをしてみます。

rm /tmp/tokyo-and-planet.mbtiles
sudo chown $USER:$USER ~/develop/osm/osm2vectortiles/export/tiles.mbtiles
cp ~/develop/osm/osm2vectortiles/export/tiles.mbtiles ~/develop/osm/osm2vectortiles/export/japan.mbtiles
cp ~/develop/osm/osm2vectortiles/export/japan.mbtiles /tmp
cd /tmp
docker run -it -v $(pwd):/data -p 8080:80 klokantech/tileserver-gl

f:id:smellman:20161203201425p:plain

東京周辺はこんな感じです。

f:id:smellman:20161203201443p:plain

千葉市周辺、ちょっとレンダリング対象が少ない感じです。

f:id:smellman:20161203201500p:plain

伊豆大島も建物がレンダリングされていないので寂しいです。

f:id:smellman:20161203201518p:plain

三宅島も同様です。

やっぱりzoom 14の壁が厚いなーという印象ですね。
とりあえずzoom 14だけ足せるかこんなコマンド打って放置しておきます。

sudo chown root:root ~/develop/osm/osm2vectortiles/export/tiles.mbtiles
docker-compose run \
  -e BBOX="122.5607,21.20992,153.8901,45.80245" \
  -e MIN_ZOOM="9" \
  -e MAX_ZOOM="14" \
  export

あと13時間後らしいので、お楽しみですね!!!!!1

*1:今日の小江戸LUGはこのネタをやる予定だったんだけど、この記事がニャオスだったので不参加にしました...

*2:なおドキュメントにはどのファイルを落とすのかが具体的に書いてないので注意してください、僕はソースコードを読んでダウンロードするファイルを判断しました

*3:最後のdocker-compose up exportが必要かどうかっていうとちょっと謎なんだけど、とりあえずドキュメント通りにやってる

*4:たしかMapboxの方のパッケージングでNode 4.xでバグがあるのが引っかかっているような気がします。なお、tileserver-gl-lightの方はUbuntu 16.10でnpm installができ、動作しています

*5:ちなみにこれURLが古くリンク切れしてる

*6:そもそも日本全域自体結構範囲がありますが、それ以外にもBBOXが四角形なので必要のない範囲のレンダリングも必要となってしまいます

*7:ズームレベルを1つ上げると単純に処理が4倍になりますが、データがほとんど無い範囲が多いとそれだけPostgreSQLから帰ってくるものが少なくなるはずなので時間は減るはずです

iCloudカレンダーにspamの予定が突っ込まれたって話

さっきiCloudカレンダーにspamの予定が大量に突っ込まれた。
内容はこんな感じ。

f:id:smellman:20161101154022p:plain

たぶん怪しいサイトへのリンクと、参加通知をすることで相手のアドレスを調べるのを目的としてると思われる。

とりあえずそのまま削除をしようとするとこのようになって削除できない。

f:id:smellman:20161101154028p:plain

どうやら通知自体が必須となってしまっている模様。
なので、とりあえず通知無しで削除する方法を調べていたら以下のサイトに方法が書いてあった。

https://discussions.apple.com/thread/7637683?start=0&tstart=0

I've been getting spam invites as well. It's a workaround, but I got rid of it by creating a new iCloud calendar, moved the invite to that, and then deleted it.

というわけでiCloudのカレンダーに「名称未設定」という名前のカレンダーを作成し、予定をそこに移動してからカレンダーごと削除をしてみた。
すると通知せずに削除というものがでてきた。

f:id:smellman:20161101160057p:plain

まぁ、本当に通知してないかはわからないけど、たぶんこれでOKじゃないかなと思う。

あと関係ないけど、spamって打とうとすると間違ってsmapって打ってしまっていろいろ焦った。

State of the Map Japan 2016

先日開催されましたState of the Map Japan 2016にてスタッフ及びBGM担当、そして発表者として参加いたしました。

発表内容についてはSpeaker Deckにアップしました。

とりあえずこれをみていただければと思います(適当

さて、今回の発表は結構評価が高かったんだけど、BGM担当としてCD−Rに焼いて持って行った音楽も評価が高く、会場を最後まで盛り上げるのに一役買ってくれました。
トラックリストを見たいという声もあったので公開します。

タイトル アーティスト アルバム レーベル
First Tactics storz SAVIOR AAAAA Otherman Records
Party monster gigandect SAVIOR AAAAA Otherman Records
There's A Gameboy In My Pocket Thank Fuscia Various Artists - Sociopath 8-bit Assassins Sociopath Recordings
memory of the cartridge Ca5 Memory of the Cartridge Otherman Records
Solaris Gangster Acid Missqulater Drifting In The Air EP Karakusa Music
Sprinkling Rainbows BitBasic Sprinking Rainbows Monotonik
Grating Rainbows BitBasic Grating Rainbows Monotonik
Mondo Kane E-coli The Star of Munster E.P. Otherman Records
狐火夜行 -Boogeymans-Parade- (Meow Meow Remix) TAROLIN OKITSUNE Breaks EP Otherman Records
To Tama Meow Meow MAWOWiWA Otherman Records
I Love You Not Because You Love Me Sonic Deadhorse(音速死馬) Everyone Can Beat a Deadhorse Sociopath Recordings & Otherman Records
Night Drive ヘデナー & Raveman Fotværk Ræv Cock Rock Disco
UULT iserobin hemogTAPEtrax2 Otherman Records
home The Gasman Inept Whoop EP The Centrifuge
Polymerase The Gasman Polymerase EP The Centrifuge
1 Dollar = 123.32 Yen (11/17/2015 2:18pm ET Mix) 虚空戦士 V.A. - Internet Teknique Dochakuso Records
Craft Bath Aide Coral Park Sociopath Recordings

chiptuneにAcidにGypsycoreにBreakcoreにFootwork Jungleなどまぁ僕の趣味丸出しですね。

なお、楽曲は全てダウンロード可能です。アルバムのリンクがそのままダウンロードが可能なところに貼ってあるので、興味のあるかたはぜひダウンロードしてこっちの仲間入りをしましょう(何

WindowsのElectronでsqlite3が動かない人のためのバッチファイル

タイトルとおりです。


Electron + sqlite3 for windows

これは、配布されているnode.jsとElectronに入ってるnodeが違うので、Electron用にビルドをし直す必要があるんだけど、本来なら electron-rebuild で動くと思ったんだけど、 node_modules/sqlite3/lib/bindings/electron-0.36.4-win32-ia32 とかいうディレクトリになってしまって not found になってしまうので、自力でビルドしてみたのをバッチファイルにしてみた。

バッチファイルはnodeのバージョンとかアーキテクチャが決め打ちなので、47とかいう数字は各自の環境に置き換えてほしい。たぶんnode-sqlite3入れた時と同じディレクトリになるようにすればいいかと思う。ia32の環境でx64でビルドしたいとかいうパターンは未確認です。

元ネタはこのサイトになります。

Using Node_sqlite3 With Electron | VerySimple

その他ハマったことなど

  • node_module\.bin\electron_rebuild.cmd を動かしてもすぐ終了してしまって、 -f オプション付けないとそもそも動かないことになかなか気づかなかった。
  • Microsoftのnode.jsのガイドライン を参考にセットアップしたところ、VC++ Build Toolsだと MSB3428 で動かなくて、VS2015だとsqlite3の相性が悪くビルドできないので、 node-gyp のインストールドキュメント を参考にVS2013 Expressにした。ちなみにうちの環境は Windows 7 です。
  • VS2013 を入れた後でも動かなくって、どうもレジストリの内容が反映されていなく、再起動したら動いた(たぶんこれと同じケース)
  • 納品日当日にこんな状態とか非常にダメです

Venatian Snares / Traditional Synthesizer Music

Venetian Snares が Planet-Mu で新作を出しました。
Planet-Muの前作 Your Face からは約8ヶ月ぶり、また金無い騒動の時にお礼としてself-releaseで出した Thank You For Your Consideration からは約6ヶ月ぶりと、なんか2000年代前半の時のようなリリースペースが軽く復活していてちょっとうれしい限りです。

で、本作はタイトルどうりシンセサイザーを全面にフューチャーした作品です。
シンセサイザーと言っても小室哲哉がL字型に並べてやってるようなやつがメインではなく、モジュラーシンセという配線とかで音を作るようなのを大量に繋げるやつです。
たぶん、昔のYMOとかこんなことしてたような気がしますが、正直世代ではないのでよくわからないw
まぁ、具体的には演奏シーンを見てもらえると良いです。


Venetian Snares - Magnificent Stumble V2

最初のシーンでRenoiseから何か制御をしてるっぽい感じなのはわかるのですが、それ以降タバコ吸いながら適当につまみ回してるだけっぽい感じで何がなんやらです。

ですが、音は相変わらずのVenetian Snaresです。
シンセの音が主体になったので若干印象穏やかになったとはいえ、L/Rで縦横無尽になりまくるリズムは相変わらず凶悪で、 Can't Vote For Yourself v1 とかは強い印象のシンセの音とバカバカなりまくってるリズムが本当に圧巻です。

強めというと You and Shayna v1 もすごく良いのですが、この音源のVideoバージョンもまた良かったりします。


Venetian Snares - You and Shayna (Video Version)

ここらへん聞いて良さそうだなと思った人はぜひ視聴してみてください!

ちなみに、このVideoバージョンや本作のいろんな別バージョンが収録されたCDがbandcampのPre-orderで手に入りました。
正直、Pre-orderのCDは My Love Is A Bulldozer の時のやつがぶっちゃけ酷かった(bonus CDにいろんな種類がある上にどれか一種類しか送られてこない)ので期待してなかったんだけど、たぶんめっちゃ反省したのかむしろこっちのご褒美感が凄すぎて買えなかった人かわいそうっていうレベルのクオリティです。
バランス悪すぎるだろ...

ところでモジュラーシンセと言えば、Datach'iが復活するというのではという話があります。

Datach'i, Breakcore and Terror - Voltage Control Lab

Vimeoにアップロードされた作品はいずれもコンピュータを使わないうえにちゃんとモジュラーシンセがわかりやすく映ってるという親切仕様な上にかなりハードな音づくりをしていて非常にこちらも期待しています。


Waveguiding from Joseph Fraioli on Vimeo.

2015年のまとめ

今年一年お疲れ様でした。
とりあえず自分のトピックとしては以下の様なことがありました。

  • Cythonがんばった
  • 3Dデータについてちょっと理解することができた
  • Javascriptをそれなりにがんばった
  • OpenDocumentファイルを分解してMarkdownにするというマニアックなプログラムを作る仕事とかした
  • 地図タイルを作る仕事が増えて非公開のものも含めいろいろ経験を積むことができた
  • 体調と精神面でやられてしまい、帯状疱疹と尿管結石、過呼吸、最終的には鬱病で通院するようになった
  • ハッカソンでそのまま会場に泊まったら凍死するかと思った
  • 今年のはじめにちょうど80キロあった体重が68キロまで下がったが、12月だけで73キロまで戻す
  • 罰を受けその場から離れるタイミングで、山から来た男が瀧に薪を背負ってやってきて情報を共有した
  • 友達から罰情報を得たため、山から来た男らと共有したのち瀧で罰を流す
  • オフィスが渋谷から上野に移転するものの、まだ空気に慣れない
  • いろいろあったことをいろいろ忘れてた
  • 酔った勢いで誰かに電話したがるという最悪の癖がついた
  • スプラトゥーンを発売日前に買っておいていたものの、罰を受けていたためプレイすることはできずに完全に流れに載ることができず死にたくなった

今年はそれなりに地獄でしたが、まぁ罰はそれなりに減らせそうな勢いがあります。
来年は新しい罰はそんなに増えないと見込んでいます。

さて、そんなことよりも今年一年Breakcore界隈では多くの盛り上がりがあり、最高に良い一年でした。
これがなかったら多分今頃蟄居していたと思います。

というわけで今年個人的にやばかった作品を5つ上げておきます。

TAROLIN / OKITSUNE Breaks EP
狐火夜行のMeow Meowさんによるリミックスがヤバすぎて死ぬ

www.otherman-records.com

Laxenanchaos / I'm Laxenanchaos
ラクセナンカオスさんによる年末最高のプレゼント。このクオリティで1stとかヤバ過ぎるのではないか...

V.A. / Strobosonic (MOZYK015)
17分のブレイクコアとか完全にイカれてるし、17分間ちゃんと展開があるし、本当にイカれてる

Keith Kazus / Poor Lawn
レイブ感が最高に頭が悪い

Hellfish / PRSPCT XTRM 018
ただ頭が悪い

そんなわけで来年もbreakcoreを頼りに生きていきます〜

Facebookメッセンジャーで展開された罰を探しやすくするスクリプト

今年の罰は今年のうちに。

今年もいろいろ罰を受けました。
一昨日も友達から罰情報を教えてもらい頭を抱えたところです。

さて、みなさん、Facebookをやっていますでしょうか?

Facebookは基本的に実名でたまに偽名みたいな感じなので、ベンチャー系の多くの人が気軽にグループチャットでビジネスの話をしたりしています。
僕の場合ではビジネス以外にもプログラミングの相談やセキュリティ上問題を起こした若者の身の上相談、「お前の母親が携帯を家で無くしたらしいので携帯電話に掛けて鳴らしてくれ」などの非常にプライベートな話まで多くのことをしています。

Facebook自体は先程も基本的に実名というのもあり、Twitterに比べるとより「リアル」と「ネット」がつながりやすく、そのため罰が展開されやすいプラットフォームでもあります。
特にFacebookメッセンジャーは罰に直結しやすいものだったりします。
平たく言うと老なのでLINEとか使えないだけです。

まぁ、そんなFacebookですが、メッセンジャーのログを含めてさまざまなものをバックアップすることができます。
ただし、そのバックアップのメッセンジャーのログファイルが非常に使いづらかったので、罰を探しやすくするためにスクリプトを組んでみました。

まずはバックアップを取得します。
Facebookのバックアップは、設定の一般の項目(一般アカウント設定というタイトル)の一番下にリンクがあるのでそこから取得することができます。
実際にはzipで固める必要があるので、バックアップデータはメールでリンクが送られてくるという仕組みです。
とりあえずバックアップのzipを取得したらそれを展開しておきます。

バックアップの展開先にindex.htmlがあるのでブラウザで開きます。
すると以下の様な画面が出てくるので、メッセージのリンクを開きます。

f:id:smellman:20151231001301p:plain

メッセージを開くと次のような画面になります。

f:id:smellman:20151231001658p:plain

さて、この画面でまず困るのがFacebookメッセンジャーのUIと同じように時系列が下から上に流れています。

f:id:smellman:20151231001906p:plain

とにかく見づらいので今回のスクリプトでこの順番を変更できるようにします。

また、もう一つ厄介なのはとにかく分量が多いのでスレッドを参加者名で絞れるようにします。

導入は以下の手順で行います。

FirefoxのWebコンソールやGoogle Chromeデベロッパツールを開いて次のスクリプトを実行します。


Facebook Messengerで起きた罰を探しやすくするUIのエントリポイント

これを実行すると以下のような状態になります。

f:id:smellman:20151231004051p:plain

時系列を変更するには各スレッドにあるreverse timeという適当にしか見えない英語で書かれたボタンを押します。
するとこんな感じで時系列が逆になります(もう一度押すと元に戻ります)。

f:id:smellman:20151231004758p:plain

検索はスレッドの名前から検索して絞込をします(例では某waなんとかさんで検索していますが、彼からは罰を受けておりませんのでご安心ください)。

f:id:smellman:20151231005241p:plain

まぁ、単にこれだけです。

スクリプト本体もgistにありますので興味のある人はぜひ。

ちなみに、元々は罰を探していた時に時系列逆にしないと混乱するっていうところからスクリプトを書いたんですが、書いてたら何探してるか忘れたというオチがついたのでよい新年が迎えられそうです。
クソが。