国際信州学院大学コンピューター同好会 https://scc.kokushin-u.jp Shinshu University of International Computer Club Fri, 15 Jun 2018 16:11:16 +0000 ja hourly 1 https://wordpress.org/?v=4.9.8 OpenStreetMapのデータに独自に地物を追加してnginxでタイルサーバー構築して大学のアクセスマップを作った https://scc.kokushin-u.jp/2018/06/15/add-object-to-osm-locally-for-univ/ https://scc.kokushin-u.jp/2018/06/15/add-object-to-osm-locally-for-univ/#respond Fri, 15 Jun 2018 14:54:21 +0000 https://scc.kokushin-u.jp/?p=26 久々のブログです! 今回の記事は技術的な内容が多いので、興味ない方は適当に飛ばしながら読んでください。 国際信州学院大学は都会の大学と違って十分な予算があるわけでもないのでHP制作も外注せず学内で行われています。そのため …

投稿 OpenStreetMapのデータに独自に地物を追加してnginxでタイルサーバー構築して大学のアクセスマップを作った国際信州学院大学コンピューター同好会 に最初に表示されました。

]]>
久々のブログです!

今回の記事は技術的な内容が多いので、興味ない方は適当に飛ばしながら読んでください。

国際信州学院大学は都会の大学と違って十分な予算があるわけでもないのでHP制作も外注せず学内で行われています。そのため、僕達のコンピューター同好会にも大学のHPの制作の仕事が回ってくることがあります。

今回はGoogle Maps APIの課金体制が変更になり費用が発生する恐れがあるため、HPのアクセスに掲載する周辺地図をOpenStreetMapにできないかという相談が大学から当会にありました。

OpenStreetMapというのは地図情報を誰もが利用できるように有志で協力して、フリーな地図情報データを作ろうというプロジェクトです。Wikipediaの地図版みたいなものです。

OpenStreetMap(OSM)の地図をサイトに載せようと思えば簡単ですが、国信大の場合2つ問題点があります。
一つは大学のページですから話題になればアクセスが増加し、OSMのサーバーに負荷がかかってしまう可能性があります。
もう一つはOSMの地図は有志の手によって作られているのですが、国信大は田舎の私立大学のため知名度がなくOSMには掲載されていません。OSMは有志が編集に参加できるため、国信大を追加することも可能ですが、今まで無名であった上に某匿名掲示板のユーザー達のイタズラにより架空の大学であるという情報がネットに流布されてしまいました。そのため、架空の大学であると思いこむ人が多く、OSMに追加したところで「架空の地物が追加されてる!これはOSMに対する破壊行為だ!」とか思われて即消しされそうなのでやめておきます。
(OSMは素晴らしい取り組みであり、地上に存在するものをマッピングするなどの決まりがありますので尊重しないといけません。)

そこで、大学の方で自前のタイルサーバー(地図画像を配信するサーバー)を用意し、そこにOSMのデータに修正を加えたものを導入することにしました。タイルサーバーの構築方法は調べればいろいろ出てくるのですが、地図データの編集についてはOSM本家に貢献することが前提となっていてOSMのデータにローカルで独自で地物(地図上の物や概念)を追加する方法の情報があまりありませんでした。試行錯誤の上、場当たり的な泥臭い方法ですがOSMのデータをローカルで修正することができましたのでまとめておきます。もっと適切な方法があれば(多分あるはず)教えていただきたいです。

必要なツールはosmosisとosmconvertとJOSMです。僕はArch Linuxを使っていますがJOSMはpacmanから入り、osmosisとosmconvertはAURから入れました。

まず、OSMのデータを入手します。地球上の全てを網羅したplanet.osmというものがありますが、圧縮しても30-50GBという代物ですしよほどの高スペックマシンでないと扱えないでしょう。ここでは中部地方だけのデータを入手したいと思います。geofabrikのサイトから入手できます。PBF形式でダウンロードできますが中部だけでも249MBもありますね・・・
(OSMデータのファイル形式には複数ありますが、ここでは.osmと.pbfを使います。.osmはXML形式で取り回しがよく編集時に使います。.pbfはバイナリ形式でコンパクトなので広域向けです。)

これでも少し大きいので長野県を囲む矩形領域だけ切り出しましょう。PBFファイルやOSMファイルを変換したりするのにosmosisというコマンドを使います。top,left,bottom,rightを緯度経度で指定し、切り出した領域をnagano-rect.pbfに書き出します。

$ osmosis –rb chubu-latest.osm.pbf –bounding-box top=37.05 left=137.255 bottom=35.15 right=138.85 completeWays=yes completeRelations=yes –wb nagano-rect.pbf

これで長野県を囲む範囲のデータになりましたので、地物を追加修正してタイルサーバーに突っ込みます。追加修正したいのですが、直接編集するにはまだ巨大なファイルです。編集用にキャンパスの周辺だけ.osmファイルに切り出しましょう。

$ osmosis –rb nagano-rect.pbf –bounding-box top=36.4 left=137.8317 bottom=36.366 right=137.89 –wx campus-around.osm

後で差分を取るため、コピーしておきます。

$ cp campus-around.osm camps-around-orig.osm

オリジナルをコピーしたら早速編集します。JOSMっていうjavaでできたOSM用のエディターがあるので先ほどのcampus-around.osmを開いて地物を追加修正削除していきます。iDっていう手軽なエディタがあるらしいけどローカルで修正するのには使えないかも。

うちの大学は田舎の私大のくせにTDL並にキャンパスが大きく、建物も多いのでノード繋いで名前つけてタグ付けして複雑な地物はリレーション設定して・・・正直めんどくさいです。OSMの貢献者の皆様には頭が下がります。(でもなれると楽しい!?)

編集が完了したら保存しJOSMを閉じます。閉じる時にアップロードするか聞かれますがアップロードせず保存するだけにします。早速OSMの差分を取りたいのですが一筋縄にはいきません。泥臭いやり方で強行突破します。

まず、編集後のOSMファイルをテキストエディタで開きます。XMLが見えると思いますが、新しく追加したノード等はid属性が負数になっています。負数のIDは仮のものでOSM本家にアップロードすると正数の固有のIDが割り当てられるそうですが、ここではローカルで済ませたいので負記号と上ひと桁を他と重複しなさそうな適当な数字列に置換してお茶お濁しましょう。ID置換後でも既存のIDより若くなるような数字列で置換すると後でエラーにならずにすみます。

osmosisを使って変換しようと思えばtimestamp,changeset,version属性も必要です。JOSMで追加したノード等には3属性がついておらず、action=’modify’属性がついていますのでそれを置換対象にうまく使って3属性を追加しましょう。ここでは「’ action=’modify’ lat=’」を「’ action=’modify’ timestamp=’2018-06-01T00:00:00Z’ version=’1′ changeset=’1′ lat=’」に置換しました。

nodeだけでなくwayやrelationにも追加する必要があるため「’ action=’modify’>」を「’ action=’modify’ timestamp=’2018-06-01T00:00:00Z’ version=’1′ changeset=’1′>」に置換しました。

次にosmosisが正常にこの.osmファイルを読み込んでくれるか確かめます。osmosisで無意味な変換をしてみます。

$ osmosis –rx campus-around.osm –wx campus-around-test.osm

これでエラーが出たら先ほどの置換を見直すなどしてエラーメッセージ(属性が足りない等)に対応します。何もエラーが出なかったら次に進みます。osmconvertを通します。

$ osmconvert campus-around.osm –emulate-osmosis -o=campus-around-converted.osm

これをしないとJOSMで削除したノード等が生き返ってしまいます。(osmosisがaction=”delete”をスルーしてしまうため)

やっとosmの差分を取る段階にたどり着きました。osmosisコマンドで.osmファイルの差分をとって.oscファイルに書き出します。–rxで.osmファイルを2つ指定していますが、編集後が前でオリジナルが後ろです。

$ osmosis –rx campus-around-converted.osm –rx camps-around-orig.osm –derive-change –write-xml-change file=”campus-around-change.osc”

ついにタイルサーバーに突っ込むデータに差分を適応する段階に来ました。今回は前半で用意したnagano-rect.pbfに適応してみます。もちろん中部全域のPBFファイルでも日本全域でも全世界のplanet.osmでもかまいません。

$ osmosis –read-xml-change file=”campus-around-change.osc” –rb nagano-rect.pbf –apply-change –wb nagano-rect-modified.pbf

これでタイルサーバーのpostgresに突っ込むデータが出来上がりました!!!長かった!!!!

あとはOSMのタイルサーバーの構築方法はググればいろいろ出てくるので構築して、osm2pgsqlで先程のnagano-rect-modified.pbfを突っ込んであげればOKです。

これでめでたく独自追加した地物が表示される自分たちだけのタイルサーバーが出来上がります。やったね!!

ちなみにタイルサーバーの構築はググればOKって言いましたが、こっちの方でもたくさん苦労がありました・・・タイルサーバーの構築まですることになるとは・・・まあ普通に生きててする機会なんてあまり無いですからね。
あとタイルサーバーはApache+mod_tileが鉄板なのですが、鉄板過ぎてそれを使わない方法の情報がなかなか出てこないんですよ・・・
nginxて構築しようと思ったのですが「構築した!」との情報はあっても具体的な指南が見当たらなかったように思います。

いろいろ試行錯誤した挙句postgres(postgis)+tirex(+mapnik)+lua-nginx-osmでタイルサーバーを構築しました。lua-nginx-osmは今回の案件にちょうどよかったのですが、github上のコードはそのままでは動かず少し修正する必要がありました。修正箇所は最後に載せておこうかなと思います。

冒頭にも書きましたとおりうちの大学は潤沢な予算がありません。今回のタイルサーバーとしてあてがわれたマシンも贅沢なものではなくメモリー2GBでCPUは2コア1.66GHz(Core2Duo T5500)と2018年となっては控えめなものです。

タイルサーバーを構築してわかりましたが、これって想像以上に負荷がかかるんですね・・・このマシンではタイルの描画に十数秒〜数分もかかってしまい、描画性能的には使いもになりません。ただ、一度描画したらtirexがキャッシュしていますし、cloudflareもかましていますので、キャンパスの周辺を表示するだけの用途なら一応大丈夫でしょう。

風のうわさで国信大のHPのサーバーはさくらVPSの1Gプランで運用されているとか聞いていてうちの大学はそんなに金がないのか・・・と思っていました。(蛞蝓亭の騒ぎで国信大が話題になったときはアクセスの集中でよく鯖落ちしていましたし)
高スペックの要求されるタイルサーバーもまさか1GのVPSに構築させられるのではないか心配していましたが、大学側が(焼け石に水かもしれませんが)少しマシなマシンを用意してくれたようです。

大学HPのアクセスページに掲載されていますが、一応出来上がった地図を貼っておきます。

OSMのライセンスはいまいちよく把握していませんが、「©OpenStreetMap contributors」って著作権表示をしておき、改変を加えたらそれを明示しておけば大丈夫だと思います。

HPの片隅にある何気ないアクセスマップですが、隠れた技術背景があることを知ってもらえたら構築に関わった者としては嬉しいです。

このようにうちの会は時々大学側から技術的なサポートを求められることもあり、タダ働き貴重な経験をすることができます。

国際信州学院大学に入学したら是非、コンピューター同好会に入会しませんか。

2018年度入会募集中

ちなみに当会は、それなりに活動していて、大学にもよく協力していて、サブドメインももらっていますが、実はまだ非公認のサークルなんです・・・
大学公認のサークルはアンカとかなんとかいうよくわからない方法で決定されているらしく、当会は対象に入ってなかったようです。まあ仕方ないですね。

 

最後に、lua-nginx-osmで修正したところを書いておきます。

osm/tile.lua 171行目からのif文
修正前

if ext == '' then
        captures = "^"..base.."/(%d+)/(%d+)/(%d+)"
    elseif sub(ext, 1) ~= '.' then
        captures = "^"..base.."/(%d+)/(%d+)/(%d+)"..'.'..ext
    else
        captures = "^"..base.."/(%d+)/(%d+)/(%d+)"..ext
    end

修正後↓

    if ext == '' then
        captures = "^/"..base.."/(%d+)/(%d+)/(%d+)"
    elseif sub(ext, 1, 1) == '.' then
        captures = "^/"..base.."/(%d+)/(%d+)/(%d+)".."%."..sub(ext,2)
    else
        captures = "^/"..base.."/(%d+)/(%d+)/(%d+)".."%."..ext
    end

投稿 OpenStreetMapのデータに独自に地物を追加してnginxでタイルサーバー構築して大学のアクセスマップを作った国際信州学院大学コンピューター同好会 に最初に表示されました。

]]>
https://scc.kokushin-u.jp/2018/06/15/add-object-to-osm-locally-for-univ/feed/ 0
2018年度入会募集中 https://scc.kokushin-u.jp/2018/04/04/2018-welcome/ https://scc.kokushin-u.jp/2018/04/04/2018-welcome/#respond Tue, 03 Apr 2018 18:06:11 +0000 https://scc.kokushin-u.jp/?p=20 ついに平成30年度がやってきました。 新入生の方は入学おめでとうございます。 安雲野の雄大な自然の中で楽しいキャンパスライフが待っていることと思います。 しかし、雄大な自然ということは・・・つまりそういうことです。ど田舎 …

投稿 2018年度入会募集中国際信州学院大学コンピューター同好会 に最初に表示されました。

]]>
ついに平成30年度がやってきました。

新入生の方は入学おめでとうございます。
安雲野の雄大な自然の中で楽しいキャンパスライフが待っていることと思います。
しかし、雄大な自然ということは・・・つまりそういうことです。ど田舎です。
貴重な学生生活をど田舎で過ごすというものは人生のモラトリアムを謳歌するものにとって耐え難いことかもしれません。そこで、学生生活を有意義に過ごすためには何か打ち込める趣味を見つけることが大切です。
ど田舎でも都会と謙遜なくできる趣味とは何でしょうか・・・
田舎民も都会民も(少なくとも若者なら)等しく持っているツール・・・それはスマホやパソコンです。これらのおかげでネットの繋がる場所なら日本中、いや世界中のどこでも平等にサイバーワールドへアクセスすることができます。
しかし、せっかく夢のようなネットの世界に繋がったとしても、ダラダラとネットサーフィンをして、動画サイトを流れるがままに再生し、匿名掲示板でレスバトルに巻き込まれ、ネットゲームに興じているうちに貴重な時間が失われていくかもしれません。
ですから、何か生産的な趣味をするのが良いと思います。パソコンさえあれば気軽に始められるプログラミングとかいいのではないでしょうか?
今まで、どこかの企業が開発したサイトやアプリやゲームなどを提供されるがまま利用するだけだったと思います。しかし、それを自分の手で作れるとなるとどうでしょうか?自分の欲しいものを自分で作れる、これは最強だと思います。これがいわゆるモノづくりの醍醐味です。しかし、物理的なモノづくりには道具や材料など、コストが嵩みます。一方、コンピューター上のプログラムなら材料は不要です。趣味レベルならばお金をかけずにあらゆる事が可能です。さあ、あなたも「サイバーモノづくり」はじめませんか?

新入生・在学生入会募集中

今年もコンピューター同好会の入会絶賛募集中です。プログラミングに興味ある方はもちろん、Linuxが大好きな方、電子工作やマイコン、ArduinoとかRaspberry Piなど好きな方はぜひ入会してください。Web制作や画像音楽映像の編集制作が好きな方も待ってます。国際信州学院大学のホームページ(wordpressで構築されています)の制作に加わることもあります。あとは、普通にネットが好き、動画見るのが好き、掲示板やSNSやゲームなどが好きな方の交流の場にもなっています。それに付随して漫画やアニメなどが好きな方が集まる傾向もあります。

他のサークル・クラブに属していて、たまに当会に顔を出す人もいます。まずは気軽に入会してください。
入会は簡単です。部室に来て書類を一枚書くだけです。1分で済みます。それであなたもめでたく当会の一員です。毎回活動に参加してもいいですし、気が向いたときに覗きに来てもいいですし自由です。

活動時間は毎週月曜日と水曜日の18:30分以降です。会員で都合をつけてそれ以外の時間に来ても構いません。場所はクラブハウス314号室です。

会費は0.003BTCくらいを目安にしていますが任意です。払わない人が多く、会所有の物を使う機会のある人が寄付感覚でする感じです。

会所有物

LinuxとWindows両方使えるパソコンが2台あります。共有のNASもあります。
技術書も少しだけあります。簡易VRビューアーもあります。
電子工作関連品としては半田ごてとテスターと簡易オシロスコープもあります。抵抗はE12系列のストックがあります。コンデンサーも30種くらいストックしてあります。
これらは会費で賄われたものや卒業生から譲り受けたものです。

今後購入予定のものとしては3Dプリンターやドローンや本格的なオシロスコープや拡張用のディスプレイなど考えています。

入会待っています

どの学部学科の方でもかまいません。時間があるときに覗きに来てください。

投稿 2018年度入会募集中国際信州学院大学コンピューター同好会 に最初に表示されました。

]]>
https://scc.kokushin-u.jp/2018/04/04/2018-welcome/feed/ 0
ゲーム「FlappyFlapper」 https://scc.kokushin-u.jp/2018/02/11/flappyflapper/ https://scc.kokushin-u.jp/2018/02/11/flappyflapper/#respond Sun, 11 Feb 2018 14:24:32 +0000 http://scc.kokushin-u.jp/?p=10 鬼畜ゲーとして有名なFlappy Birdのフラッパー君バージョンを作りました。 遊び方は簡単です。クリックかタップをするとフラッパー君がジャンプするのでフランスパンに当たらないようにうまくよけてください。 本家みたいに …

投稿 ゲーム「FlappyFlapper」国際信州学院大学コンピューター同好会 に最初に表示されました。

]]>
鬼畜ゲーとして有名なFlappy Birdのフラッパー君バージョンを作りました。

遊び方は簡単です。クリックかタップをするとフラッパー君がジャンプするのでフランスパンに当たらないようにうまくよけてください。
本家みたいに鬼畜ではないですが慣れないと難しいかもしれません。スマホなどのタッチパネルのほうがやりやすいかもしれません。
音が鳴ります。

投稿 ゲーム「FlappyFlapper」国際信州学院大学コンピューター同好会 に最初に表示されました。

]]>
https://scc.kokushin-u.jp/2018/02/11/flappyflapper/feed/ 0
国信大コンピューター同好会のブログを作りました https://scc.kokushin-u.jp/2018/02/04/scc-blog/ https://scc.kokushin-u.jp/2018/02/04/scc-blog/#respond Sat, 03 Feb 2018 17:22:26 +0000 http://scc.kokushin-u.jp/?p=4 こんにちは!国信大コンピューター同好会のブログです!あまり更新できないかもしれませんが、コンピューター同好会を名乗りながらWebサイトの一つもないのは寂しいと思い、作るだけ作りました。 国信大コンピューター同好会は大学が …

投稿 国信大コンピューター同好会のブログを作りました国際信州学院大学コンピューター同好会 に最初に表示されました。

]]>
こんにちは!国信大コンピューター同好会のブログです!あまり更新できないかもしれませんが、コンピューター同好会を名乗りながらWebサイトの一つもないのは寂しいと思い、作るだけ作りました。

国信大コンピューター同好会は大学が公認しているサークルとはちょっと違います(そのため部ではなく「同好会」となっています。)

パソコンやIT関係を全般に扱ってますが、電子関係などハードなこともやっています。

名前だけの印象で理学部電子機械学科のインキャな男ばっかりだと思っていませんか?それは否定しませんが他の学部学科の人も活躍しています。

良かった気軽に覗いてください。

投稿 国信大コンピューター同好会のブログを作りました国際信州学院大学コンピューター同好会 に最初に表示されました。

]]>
https://scc.kokushin-u.jp/2018/02/04/scc-blog/feed/ 0