アドベントカレンダーを作ってみた
Node.js と MongoDB を使ってOpenStreetMapアドベントカレンダーを作ってみました。継続的に利用する(される)かどうかはともかく「オープンベータ」とかいう逃げの言葉を使って公開しています。
例年のちゃんと安定したアドベントカレンダーは Qiita に作成されるので真面目に記事を公開される方はもうしばらくお待ちください。
WSL の Ubuntu に MongoDB をインストールする
Windows Subsystem fot Linux(WSL) 上で動いている Ubuntu に MongoDB をインストールした時の記録です。
Ubuntu のリポジトリにあるもの(この時点でVer. 2.6.10)ではなく、MongoDB の公式リポジトリ(この時点でVer. 3.4.9)から取ってきて(インストールします。
MondoDB の起動にかかる部分以外は公式ドキュメントの通りです。
WSL の Ubuntu はこんなバージョン
$ cat /etc/os-release NAME="Ubuntu" VERSION="16.04.3 LTS (Xenial Xerus)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 16.04.3 LTS" VERSION_ID="16.04" HOME_URL="http://www.ubuntu.com/" SUPPORT_URL="http://help.ubuntu.com/" BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/" VERSION_CODENAME=xenial UBUNTU_CODENAME=xenial
aptで使われる公式リポジトリ用の公開鍵を登録します。
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
apt-get で見に行く MongoDB のリポジトリを見に行くリストを追加します。
$ echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
これで公式パッケージをインストールできます。
$ sudo apt-get update $ sudo apt-get install -y mongodb-org
ドキュメントでは service mongod start
でスタートさせていますが、/etc/init.d/
を見ても mongod
がないので起動できません。
GitHub にある MongoDB のリポジトリから debian 用の init スクリプトを取ってくるといいようです。
2017/10/25追記
Fall Creator Updateを当てた後の WSL な Ubuntu では正常に init スクリプトが作成されました。
$ cd /tmp $ wget https://raw.githubusercontent.com/mongodb/mongo/master/debian/init.d -O mongod $ chmod +x ./mongod $ sudo mv mongod /etc/init.d/ $ sudo service mongod start
これで起動できるはずです。
$ mongo
でプロンプトに入れれば成功です。
osm-analytic-tracker を設定してみる
OpenStreetMapの変更セットをビジュアルで確認できる osm-analytic-tracker を手動設定したときの記録です。
docker でサクッと動くように Dockerfile が用意されていますが、脳が貧弱なので自分でセットしてみないとわからんのです。
内容は1つのコンテナで各種サービスを動かすための Dockerfile-all-in-one を見ながらコマンドを打っていったものです。
まずは動作させる環境の docker コンテナを起動してスタートです。
$ docker run -it -p 80:80 debian:latest /bin/bash
以下コンテナの中で操作します。
動かしているコンテナの debian バージョン
# cat /etc/debian_version 9.1
Dockerfile では各種ディレクトリを/
に作成していますがここでは/opt
以下に作成することにします。
主なディレクトリは次のようなものです。
- /opt/osm-analytic-tracker
- /opt/osm-regions
- /opt/html
- /opt/osmtracker
- /opt/osmtracker-config
パッケージ類を最新にした後で必要なものをインストールします。vim
は無くてもOKですが、とりあえず確認用に。
# apt-get update && apt-get upgrade -y # apt-get install -y supervisor git python python-pip python-shapely python-tz python-dev mongodb nginx wget vim
# cd /opt # git clone https://github.com/MichaelVL/osm-analytic-tracker.git
Tracker で監視する範囲を示すリージョンファイルをダウンロードします。
特に「この地域だけ見るんだ」っていうのが決まっていれば必要なリージョンを示すファイルだけをダウンロードしても問題ないはず。
# mkdir osm-regions # cd osm-regions # wget --no-verbose -i ../osm-analytic-tracker/docker/regions.txt # cd ../
ブラウザから確認するためのインターフェイス関係をセットします。
リポジトリのクローンからコピーしたりします。JavaScriptやCSSをCDNからダウンロードしてくるのはデフォルトの動作です。各ファイルから直接CDNを見に行く様にすればいいような気もしますがとりあえずそのまま。
# mkdir -p /opt/html/dynamic # cd html # cp -r ../osm-analytic-tracker/html/* ./ # mkdir /opt/html/jquery-2.1.3 # wget https://code.jquery.com/jquery-2.1.3.min.js -O /opt/html/jquery-2.1.3/jquery.min.js # mkdir /opt/html/leaflet-0.7.7 # wget http://cdn.leafletjs.com/leaflet/v0.7.7/leaflet.css -O /opt/html/leaflet-0.7.7/leaflet.css # wget http://cdn.leafletjs.com/leaflet/v0.7.7/leaflet.js -O /opt/html/leaflet-0.7.7/leaflet.js # cd ../ # chown -R www-data:www-data /opt/html
nginx の設定をします。
とはいえリポジトリに設定ファイルも入っているのでちょっとディレクトリのパスを変更すれば完了です。
# cp osm-analytic-tracker/docker/config/nginx.conf /etc/nginx/nginx.conf # cp osm-analytic-tracker/docker/config/nginx-osmtracker.conf /etc/nginx/sites-enabled/default # sed -i -e 's/\/html/\/opt\/html/' /etc/nginx/sites-enabled/default
Tracker の本体をコピーして Tracker が使う python のパッケージを用意します。
Dockerfile から直接 docker build しようとすると setuptools のバージョンが古いせいで pip インストールが止まるため途中で setuptools のバージョンを上げています。
# mkdir osmtracker # cd osmtracker # cp ../osm-analytic-tracker/requirements.txt ./ # pip install -U pip setuptools # pip install -r /opt/osmtracker/requirements.txt # cd ../ # mkdir /opt/osmtracker/osm-analytic-tracker # cd /opt/osmtracker/osm-analytic-tracker # cp ../../osm-analytic-tracker/*.py /opt/osmtracker/osm-analytic-tracker # cp ../../osm-analytic-tracker/logging.conf /opt/osmtracker/osm-analytic-tracker # cp -r ../../osm-analytic-tracker/osm /opt/osmtracker/osm-analytic-tracker/osm # cd ../ # cp -r ../osm-analytic-tracker/templates /opt/osmtracker/templates
Tracker の設定ファイルを用意します。
いくつかパスが記述されているのでそれらを全部書き換えます。
監視するリージョンの設定があるので今回は日本のリージョンを監視するようにセットします。日本の領域は離島なども含んでいて結構広いので最初に表示されるスケールも広い領域が表示されるように6
から3
に変更しました。
# mkdir /opt/osmtracker-config # cd osmtracker-config # cp ../osm-analytic-tracker/config.json ./ # sed -i -e 's/denmark.poly/japan.poly/g' config.json # sed -i -e 's/\/osm-regions\//\/opt\/osm-regions\//g' config.json # sed -i -e 's/"map_scale": "6"/"map_scale": "3"/' config.json # sed -i -e 's/"path": "html"/"path": "\/opt\/html"/' config.json # sed -i -e 's/path": "templates"/path": "\/opt\/osmtracker\/templates"/' config.json
最後に各種プログラムをデーモン化して動かすための supervisor を設定します。
ここでもパスの設定を変更しなければなりません。
# cp ../osm-analytic-tracker/docker/supervisord.conf /opt/osmtracker # sed -i -e 's/\/osmtracker\//\/opt\/osmtracker\//' supervisord.conf # sed -i -e 's/\/osmtracker-config/\/opt\/osmtracker-config/' supervisord.conf
試しに動かしてみます。
MongoDB 用のディレクトリを用意しないといけなかったですね。
# mkdir -p /data/db # /usr/bin/supervisord -c /opt/osmtracker/supervisord.conf
表示されるメッセージに「gave up」とかいうのが無ければ成功しているはずです。ブラウザで表示を確認します。
ブラウザでの表示もできたなら Ctrl + C
で supervisor を止めて完全にデーモン化させます。
# sed -i -e 's/nodaemon=true/nodaemon=false/' supervisord.conf # cp supervisord.conf /etc/supervisor/conf.d/osmtracker.conf # service supervisor start
これで変更セットを確認できるようになります。
さて、どっかの VPS で動かすか SBC で動かして公開するか…。worker がいくつか動くのでスレッド数の多い CPU で動かした方がスムースに動きそうな気がします。
やる気のないマストドンクライアントを作った
ツイートするだけの極めてやる気の無いマストドンクライアントを作りました。
Twitter に昔あった大陸系クライアントのようにトゥートするウィンドウだけが表示され、文字列を入力して Enter するとポストされます。
コードのリポジトリは Bitbucket で公開しています。
昨年作った餃子列島の姉妹クライアントです。何がどう姉妹なのかはわかりません。
実行ファイルは公開していないので Visual Studio 2015 をインストールするなどしてビルドしてください。
あと RestSharp と Newtonsoft.Json が必要になります。
クライアントをインスタンスに登録したファイルが無い場合には初回起動時にクライアントの登録とログインを促すフォームが表示されます。
必要な項目を入力してボタンを押すと運が良ければトークンを取って使えるようになります。
さしあたって名前は餃子丼にしてありますが、自由に変更していただくことも可能です。
コードのライセンスは NYSL Version 0.9982 です。
わざわざこのクライアントのために Visual Studio 2015 をインストールするとかないと思いますが。
というか Visual Studio 2017 使えよっていうツッコミはよくわかります。
State of the Map 2017 Aizu-wakamatsu に参加してきました
会津若松市の会津若松市文化センターで OpenStreetMap の年次国際カンファレンス State of the Map 2017 が3日間の日程で開催されました。
会場は福島を代表する観光スポットで白虎隊とともに有名な鶴ヶ城(若松城とも呼ばれる)に近い市の施設です。
国際カンファレンスだけあって国内外の OSM マッパーや開発者、地図配信サービス会社の人、運営ボランティアの方などを含め200人以上が集まったとのこと。開会にあたって Mapbox 社の Arun Ganesh 氏による基調講演が行われました。
1日目はメインに20分セッションが据えられ、いくつかのライトニングトークも行われました。
2日目はほぼ20分セッションのみが行われましたが、会場が開く前に鶴ヶ城の庭園でオプショナルフォトの撮影があったり、Closing plenary で次年度の State of the Map がミラノで開催されることが発表されたり、閉会後にソーシャルイベントが行われました。
3日目は75分間のワークショップがメインでしたが、一番大きな部屋では75分間いっぱいのライトニングトークやワークショップの時間帯を使った博物館ツアーも行われました。
2日目のソーシャルイベントでは OpenStreetMap への貢献度の高かった個人や組織を選ぶ OSM Award の受賞者が発表され、多くの個人・団体から9つのカテゴリーに分けられた受賞者が決まりました。
「海外のセッションは適当なスライドを映してひたすらしゃべる」的な話をいくつかの筋から聞いていたのですが、(自分を筆頭に)英語が苦手な人が多い日本人への配慮なのかキーワードと対応する画像を用意してくれたセッションが多くみられ、正確な内容はともかく概要は理解できそうなセッションが多かったと思います。
英語がとんでもなく苦手なわけですが、今回のカンファレンスで3人の英語話者の方とコンタクトする機会がありました。被害に遭われた方にはお見舞い申し上げます。なんとかして自分の言いたい事は言えたような気がしましたが、相手の話していることをうまく理解できません。次に彼らと話をする機会が訪れる前にどうにかして英語を鍛えておきたいです。
OpenStreetMap へは地図のデータを作成する他に、OSM 周りの話題をまとめて発行する WeeklyOSM(日本版は週刊OSM) の日本語チームにも所属しているのですが、今回のカンファレンスでお二人の方が参加していただけることになりました。
一部で「日本語版 WeeklyOSM は二人しかいないのに52週休まずにリリースしててすげー(英語から他の言語に翻訳してるチームは3~5人くらいで時々発行できないことがある)」的な話があって、自分のやっていることが「すげー」と評価されることはとてもうれしく思っていました。一方で、「すげー」と言われている事に参加しようとするのはハードルが上がってしまうのではなないかなという心配もあったのです。そういったハードルを越えて(かな?)参加の意思を表明してくださったお二人には感謝しかありません。
OSM 全体の継続や発展を考えると現在高校生や大学生などの学生に参加していただくことも重要になってくると思いますので、勝手にですが、学生が WeeklyOSM チームに参加していただける環境づくりも必要なのかなぁと思っているところです。
人と直接コンタクトをすることに苦手意識があるために、こういったイベントに参加する心理的ハードルが高いのですが、それでも3日間はとても楽しいものになりました。「楽しみで頭がおかしくなりそうだ」というほど楽しみにする人がいることも納得です。超納得。環境が許す限り参加したい。
このイベントの準備に尽力されたメンバー、参加者、参加したかったけど参加できなかった方、State of the Map の成功を願ってくださった方々すべてに感謝します。
他人事のように書きましたが、自分もローカルチームの一員として僅かながらですが運営に参加する機会をいただきました。この素晴らしいイベントに参加できたことを誇りに思います。
仮想マシンの FreeBSD を 11.0-RELEASE から 11.1-RELEASE にした話
先日ほぼ予定通りに FreeBSD 11.1-RELEASE がアップグレードできるようになったようなので仮想マシンの FreeBSD を 11.0 から 11.1 にアップグレードしました。 前回 10.3 を 11.0 にしたのと同じ手順を踏みました。
現在のバージョンを確認します。
$ freebsd-version 11.0-RELEASE-p11
freebsd-update
を使って 11.1-RELEASE を取ってきます
$ sudo freebsd-update fetch $ sudo freebsd-update -r 11.1-RELEASE upgrade
準備が終わったら freebsd-update install
します。
$ sudo /usr/sbin/freebsd-update install
再起動してもう一回。
$ sudo reboot
$ sudo /usr/sbin/freebsd-update install
バージョンを確認
$ freebsd-version 11.1-RELEASE
パッケージなどをリビルドした方がいいかもしれませんね。
OSMI simple views をビルドしてローカルで OSM データのエラーを確認する
OpenStreetMap のエラー訂正をするにあたって、エラーの確認と編集のスタートを OSM Inspector で行っています。
しばらく前から OSM Inspector で表示されているエラーを検出するためのプログラム OSMI Simple Views が GitHub で公開されていて、これを使えば不定期に更新される OSM Inspector からではなく、自分で任意に更新できるローカルデータベースからエラー訂正できると思いビルドを試してみました。
ビルドを試した環境は docker の ubuntu:latest で、実行時は Ubuntu 16.04.2 LTS
でした。
横着して全部 root で実行しています。
環境構築
最初に必要なパッケージ類をインストールします。
# apt-get update # apt-get install wget git build-essential cmake libexpat1-dev zlib1g-dev libbz2-dev libsparsehash-dev libboost-dev libgdal-dev libproj-dev doxygen graphviz libsqlite3-dev sqlite3 cppcheck -y
osmium のビルド
OSMI Simple Views のバックエンドで動く osmium をビルドします。
# cd /mnt # git clone https://github.com/osmcode/libosmium.git # cd libosmium # mkdir build # cd build # cmake .. # make cd ../../
osmi_simple_views のビルド
続いて osmi_simple_views をビルドします。
# git clone https://github.com/geofabrik/osmi_simple_views.git # cd osmi_simple_views # ln -s ../libosmium/include libosmium # mkdir build # cd build # cmake .. # make
make
した時にいくつか hpp ファイルが見つからなくてビルドが停止することがありましたが、この手順で入れるとビルドが通りました。
よくわかりません。
osmi_simple_views/build/src
に実行ファイルがあるので、それを叩くとエラー情報の入った SQLite のファイルが出来上がります。
# cd src # wget http://download.geofabrik.de/asia/japan/kanto-latest.osm.pbf # ./osmi_simple_views -t geometry kanto-latest.osm.pbf kanto_error.sqlite
出来上がった kanto_error.sqlite
を QGIS にツッコむとエラーが出ているポイントやウェイを表示することができました。