やる気のないマストドンクライアントを作った

ツイートするだけの極めてやる気の無いマストドンクライアントを作りました。
Twitter に昔あった大陸系クライアントのようにトゥートするウィンドウだけが表示され、文字列を入力して Enter するとポストされます。

f:id:k-side:20170912135839p:plain

コードのリポジトリは 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日間の日程で開催されました。
会場は福島を代表する観光スポットで白虎隊とともに有名な鶴ヶ城(若松城とも呼ばれる)に近い市の施設です。

f:id:k-side:20170823122806j:plain

国際カンファレンスだけあって国内外の OSM マッパーや開発者、地図配信サービス会社の人、運営ボランティアの方などを含め200人以上が集まったとのこと。開会にあたって Mapbox 社の Arun Ganesh 氏による基調講演が行われました。

1日目はメインに20分セッションが据えられ、いくつかのライトニングトークも行われました。
2日目はほぼ20分セッションのみが行われましたが、会場が開く前に鶴ヶ城の庭園でオプショナルフォトの撮影があったり、Closing plenary で次年度の State of the Map がミラノで開催されることが発表されたり、閉会後にソーシャルイベントが行われました。
3日目は75分間のワークショップがメインでしたが、一番大きな部屋では75分間いっぱいのライトニングトークやワークショップの時間帯を使った博物館ツアーも行われました。

2日目のソーシャルイベントでは OpenStreetMap への貢献度の高かった個人や組織を選ぶ OSM Award の受賞者が発表され、多くの個人・団体から9つのカテゴリーに分けられた受賞者が決まりました。

「海外のセッションは適当なスライドを映してひたすらしゃべる」的な話をいくつかの筋から聞いていたのですが、(自分を筆頭に)英語が苦手な人が多い日本人への配慮なのかキーワードと対応する画像を用意してくれたセッションが多くみられ、正確な内容はともかく概要は理解できそうなセッションが多かったと思います。

f:id:k-side:20170820160100j:plain

英語がとんでもなく苦手なわけですが、今回のカンファレンスで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.sqliteQGIS にツッコむとエラーが出ているポイントやウェイを表示することができました。

d3-hexbin でポイントデータを表示する

ポイントの点密度を六角形で表示してくれる d3 のプラグインがあったので試してみました。

今回は OpenStreetMap から埼玉県内のコンビニのデータを取り出して表示しました。

コードなんかはこちら

なんかカッコイイから使ってみたんですが、冷静に考えて自分の用途ではこのプラグインを使うことはなさそうですね…。

ローカルサーバに Gogs をインストールする

ちょっとローカルに Git のリポジトリを置いておくサーバが欲しかったので docker コンテナにインストールしました。
今回は http によるアクセスのみで、SSH によるアクセスはできない設定です。

# cat /etc/debian_version
8.8

コンテナの3000ポートとホストの3000ポートを繋いでいます。

Gogs のインストールはドキュメントを読むと楽勝です。
今回はバイナリ版を入れています。

ざっくり環境を整える

sudo と vimwget を入れておきます。なぜか curl も気分で入れました。

# apt-get install sudo vim wget curl -y
# adduser zoar
# usermod -aG sudo zoar
# su zoar

MySQL Server のインストー

データベースとして MySQL を使うのでインストール。

$ sudo apt-get install mysql-server -y
$ sudo /etc/init.d/mysql start

コントロールするユーザーとデータを格納するデータベースを作ります。

$ mysql -uroot -p
mysql> CREATE DATABASE gogs;
mysql> CREATE USER zoar@localhost IDENTIFIED BY '%パスワード%';
mysql> use mysql
mysql> SELECT User FROM user WHERE User = 'zoar';
+------+
| User |
+------+
| zoar |
+------+
mysql> GRANT all ON gogs.* TO zoar@localhost;
mysql> \q  

Go言語のインストー

apt-get で入れようとすると 1.3 が落ちてくるので godeb を使って 1.8 をインストールします。

$ cd /tmp
$ wget https://godeb.s3.amazonaws.com/godeb-amd64.tar.gz
$ tar xvf godeb-amd64.tar.gz
$ sudo mv godeb /usr/local/bin/

godeb から Go 言語をインストールする。

$ godeb list | more
$ godeb install 1.8

Gogs バイナリのインストー

バイナリを落としてきて展開すればOK。
横着なのでホームディレクトリに直接展開しています。

$ cd /tmp
$ wget https://cdn.gogs.io/0.11.19/linux_amd64.tar.gz
$ cd ~
$ tar xvf /tmp/linux_amd64.tar.gz

Gogs を起動してウェブインターフェイスにアクセスすれば完了

$ cd gogs
$ ./gogs web

変更したのは次の部分。

  • データベース設定

    • ユーザ:zoar
    • パスワード:%パスワード%
  • Gogs の全般設定

    • 実行ユーザ:zoar
    • SSHポート:%空白%
    • アプリケーションのURL:http://%サーバIP%:3000/

最後に Gogs をインストール をクリックしておしまい。

最初に作成したユーザーが Gogs のサイト管理もできる権限に設定されます。

普通の(?) http で接続できるようにする

操作するときに :3000 を付けるのが面倒な感じだったので docker ホストで動いてる apache2 にプロキシ設定を追加して /gogs でもアクセスできるようにしました。

まずはコンテナにアタッチして設定を変更します。

host$ docker attach %hash%
container$ vi ./custom/conf/app.ini
ROOT_URL     = http://%サーバーIP%:3000
↓
ROOT_URL     = http://%サーバーIP%/gogs

再度起動しておく

container$ ./gogs web

Ctrl+p q でデタッチしてホストの設定をいじる

host$ sudo vi /etc/apache2/mods-enabled/proxy.conf 
        ProxyPass /gogs http://%サーバーIP%:3000
        ProxyPassReverse /gogs http://%サーバーIP%:3000
host $ sudo service apache2 reload

これで http://%サーバーIP%/gogs にアクセスして gogs を使えるようになりました。

SELinux を有効にしたまま CentOS 7 で OpenStreetMap のタイルサーバを構築する

Qiita で OpenStreetMap のタイルサーバを構築する記事が公開されていました。

OS が CentOS なので SELinux を無効にする記述がありましたので、とりあえず SELinux を有効にしたままタイルサーバを動かせないか試してみました。
とりあえず動くことは動いたんですが、rendoer.sockSELinux コンテキストを意義的に正しく設定できてないのでセキュリティホールになっている可能性が否めません。
目的を達成できているか不明確ですが、隠して置いても正しい設定が見つかるわけじゃないのでとりあえず公開してみます。

最初には SELinux を有効にして動かす差分的なもの、後半には自分が試した記録を載せています。

SELinux の設定

先の設定方法でブラウザから地図を確認できたら SELinux を再度有効にします。

$ sudo vi /etc/selinux/config
SELINUX=enforcing
#SELINUX=disabled

再起動すると /var/run に作成したディレクトリが消されてしまうので設定ファイルを書きます。

$ sudo vi /etc/tmpfiles.d/renderd.conf
d /var/run/renderd 0777 root root

再起動

$ sudo reboot

サーバが上がってきたら動作確認のために一時的に SELinux の状態を確認して Permissive にします。

$ getenforce
Enforcing
$ sudo setenforce 0
$ getenforce
Permissive

フォアグランドで動かして試します。

$ sudo /usr/local/bin/renderd -f

http://%サーバーIP%/ へアクセスして地図が表示されれば OK。

動作していることがわかったら SELinux を Enforcing に戻します。

$ sudo setenforce 1
$ getenforce
Enforcing

そのまま http://%サーバーIP%/ へアクセスするとタイル画像へアクセスできない Openlayers の地図もどきが表示されます。

audit.log の中で `type=AVC‘ から始まる denied された renderd のログを確認できるはずです。

$ sudo cat /var/log/audit/audit.log | grep renderd

renderd.sock へのアクセスが制限されないように SELinux への登録を行います。
まずは必要なパッケージのインストー

$ sudo yum -y install policycoreutils-python

ログから renderd に関する記述を抜き出して audit2allow で設定ファイルを作成します。
できた設定ファイルを semodule に食わせると SELinux 側に登録されます。

$ cd ~/src
$ sudo ausearch -m avc | grep renderd | audit2allow -M renderd
$ sudo semodule -i renderd.pp

もう一度 renderd を動かしてタイルが表示されるか確認します。

$ sudo /usr/local/bin/renderd -f

タイルが表示されたら renderd をバックグラウンドで走らせておけばOKです。

$ sudo sh -c "/usr/local/bin/renderd -f > /var/log/renderd.log 2> /var/log/renderd.log &"

こんな感じで SELinux が有効でもタイルサーバを動かすことができました。

試した記録

ここからは自分が今回テストした環境と設定の全部です。全部見る必要はないです、長いし。
VirtualBox で新しい CentOS をセットして試しています。

続きを読む