「雨雲マップPLUS 1.0.0」「雨雲マップ (beta) 0.1.7」をリリースしました!
こんにちは、那由多屋の加藤です。
新しいAndroidアプリ「雨雲マップPLUS 1.0.0」をリリースしました!また、あわせてAndroidアプリ「雨雲マップ (beta) 0.1.7」をリリースしました。
「雨雲マップPLUS」は無料アプリ「雨雲マップ (beta)」のプレミアム版です。プレミアム版にアップグレードすることで、広告が表示されなくなります。
急な大雨が多い今日この頃、どうごご利用ください。
Raspberry PiでUSB無線LANアダプタを使う
こんにちは。那由多屋の加藤です。
大人気のカードサイズLinuxマシン「Raspberry Pi」でUSB無線LANアダプタ(WiFiドングル)を使ってみました。簡単にメモを残しておきます。
準備
自宅近くの家電量販店にてPLANEX GW-USHyper300を購入しました。価格は約2000円でした。
本当は、Linuxでの動作実績のあるUSB無線LANアダプタにしたかったのですが、そのお店には見当たらなかったため、比較的情報の多いPLANEX製品にしました。
結果としては、問題なく動作しました。
環境
使用したRaspberry PiはType B、OSはDebian(Raspbian "wheezy"、2012年7月15日版)です。
uname、lsmod、lsmodコマンドの実行結果を以下に示します。なお、これらはUSB無線LANアダプタを接続する前の結果です。
$ uname -a Linux raspberrypi 3.1.9+ #168 PREEMPT Sat Jul 14 18:56:31 BST 2012 armv6l GNU/Linux $ lsmod Module Size Used by snd_bcm2835 21485 0 snd_pcm 82208 1 snd_bcm2835 snd_seq 59808 0 snd_timer 21905 2 snd_seq,snd_pcm snd_seq_device 6920 1 snd_seq snd 57668 5 snd_seq_device,snd_timer,snd_seq,snd_pcm,snd_bcm2835 snd_page_alloc 5383 1 snd_pcm evdev 8922 0 $ lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 004: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB Bus 001 Device 005: ID 045e:0065 Microsoft Corp. Wireless Natural MultiMedia Keyboard (106/109)
接続
USB無線LANアダプタは、Raspberry PiのUSBポートにそのまま接続するのでは無く、電源付きUSBハブを介して接続しました。
なお、USBハブにはELECOM U2H-TZS420SBKを使用しました。ポート毎にON/OFFスイッチがあり、Raspberry Piの電源としても便利です。
USB無線LANアダプタを接続すると、/var/log/messagesに以下のメッセージが出力されました。USBデバイスとしての認識され、ドライバのロードが行われていることが分かります。
$ sudo tail -f /var/log/messages Aug 23 17:05:00 raspberrypi kernel: [ 177.057692] usb 1-1.3.4: new high speed USB device number 6 using dwc_otg Aug 23 17:05:00 raspberrypi kernel: [ 177.160279] usb 1-1.3.4: New USB device found, idVendor=2019, idProduct=ed18 Aug 23 17:05:00 raspberrypi kernel: [ 177.160328] usb 1-1.3.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3 Aug 23 17:05:00 raspberrypi kernel: [ 177.160350] usb 1-1.3.4: Product: GW-USH300N Aug 23 17:05:00 raspberrypi kernel: [ 177.160367] usb 1-1.3.4: Manufacturer: PLANEX COMMUNICATIONS INC. Aug 23 17:05:00 raspberrypi kernel: [ 177.160385] usb 1-1.3.4: SerialNumber: 00e04c000001 Aug 23 17:05:00 raspberrypi kernel: [ 177.225964] r8712u: module is from the staging directory, the quality is unknown, you have been warned. Aug 23 17:05:00 raspberrypi kernel: [ 177.247721] r8712u: DriverVersion: v7_0.20100831 Aug 23 17:05:00 raspberrypi kernel: [ 177.247862] r8712u: register rtl8712_netdev_ops to netdev_ops Aug 23 17:05:00 raspberrypi kernel: [ 177.247925] r8712u: USB_SPEED_HIGH with 4 endpoints Aug 23 17:05:00 raspberrypi kernel: [ 177.249352] r8712u: Boot from EFUSE: Autoload OK Aug 23 17:05:01 raspberrypi kernel: [ 178.260477] r8712u: CustomerID = 0x0000 Aug 23 17:05:01 raspberrypi kernel: [ 178.260511] r8712u: MAC Address from efuse = 00:22:cf:46:48:a9 Aug 23 17:05:01 raspberrypi kernel: [ 178.265711] usbcore: registered new interface driver r8712u Aug 23 17:05:01 raspberrypi kernel: [ 178.749720] r8712u: Loading firmware from "rtlwifi/rtl8712u.bin" Aug 23 17:05:02 raspberrypi kernel: [ 179.508130] r8712u: 1 RCR=0x153f00e Aug 23 17:05:02 raspberrypi kernel: [ 179.508987] r8712u: 2 RCR=0x553f00e
USB無線LANアダプタの接続後のlsmod、lsusbコマンドの実行結果は下記の通りです。「r8712u」、「ID 2019:ed18 PLANEX」が増えているのが分かります。
$ lsmod Module Size Used by r8712u 182646 0 snd_bcm2835 21485 0 snd_pcm 82208 1 snd_bcm2835 snd_seq 59808 0 snd_timer 21905 2 snd_seq,snd_pcm snd_seq_device 6920 1 snd_seq snd 57668 5 snd_seq_device,snd_timer,snd_seq,snd_pcm,snd_bcm2835 snd_page_alloc 5383 1 snd_pcm evdev 8922 0 $ lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 004: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB Bus 001 Device 005: ID 045e:0065 Microsoft Corp. Wireless Natural MultiMedia Keyboard (106/109) Bus 001 Device 006: ID 2019:ed18 PLANEX
USB無線LANアダプタを接続するだけで、あっさりとwlan0として認識されました。(MACアドレスはマスクしています)
$ ifconfig wlan0 wlan0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) $ iwconfig wlan0 wlan0 unassociated Nickname:"rtl_wifi" Mode:Auto Access Point: Not-Associated Sensitivity:0/0 Retry:off RTS thr:off Fragment thr:off Power Management:off Link Quality:0 Signal level:0 Noise level:0 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0
また、iwlistコマンドでアクセスポイントの一覧も確認することができました。(詳細は省略)
$ sudo iwlist scan lo Interface doesn't support scanning. eth0 Interface doesn't support scanning. wlan0 Scan completed : ... Cell 01 - Address: XX:XX:XX:XX:XX:XX ESSID:"XXXXXXXX" ...
WPAの設定
自宅の無線LAN環境はWPAなので、その設定を行いました。編集前と編集後の設定ファイルの内容を以下に示します。
$ cat /etc/network/interfaces auto lo iface lo inet loopback iface eth0 inet dhcp $ sudo chmod 600 /etc/network/interfaces $ sudo vi /etc/network/interfaces $ sudo cat /etc/network/interfaces auto lo iface lo inet loopback iface eth0 inet dhcp auto wlan0 allow-hotplug wlan0 iface wlan0 inet dhcp wpa-ssid [SSID] wpa-psk [PASSWORD]
設定ファイルを書き換えたあと、wlan0インタフェースを有効化しました。(MACアドレス、IPアドレス、SSIDはマスクしています)
$ sudo ifup wlan0 Internet Systems Consortium DHCP Client 4.2.2 Copyright 2004-2011 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ Listening on LPF/wlan0/XX:XX:XX:XX:XX:XX Sending on LPF/wlan0/XX:XX:XX:XX:XX:XX Sending on Socket/fallback DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 6 DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 11 DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 13 DHCPREQUEST on wlan0 to 255.255.255.255 port 67 DHCPOFFER from 192.168.XXX.XXX DHCPACK from 192.168.XXX.XXX bound to 192.168.XXX.XXX -- renewal in 68654 seconds. $ ifconfig wlan0 wlan0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX inet addr:192.168.XXX.XXX Bcast:192.168.XXX.XXX Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:942 errors:0 dropped:791 overruns:0 frame:0 TX packets:17 errors:0 dropped:2 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:96157 (93.9 KiB) TX bytes:5792 (5.6 KiB) $ iwconfig wlan0 wlan0 IEEE 802.11bgn ESSID:"XXXXXXXX" Nickname:"rtl_wifi" Mode:Managed Frequency:2.442 GHz Access Point: XX:XX:XX:XX:XX:XX Bit Rate:150 Mb/s Sensitivity:0/0 Retry:off RTS thr:off Fragment thr:off Power Management:off Link Quality=96/100 Signal level=94/100 Noise level=0/100 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0
再起動しても自動的にDHCPによるIPアドレスの取得が行われ、正常に動作しました。
$ sudo reboot
参考: 動作確認済みのハードウェア
現状までにRaspberry Piでの動作を確認しているのは、以下のハードウェアです。(Amazonへのリンクです)
Raspberry Piが到着しました
こんにちは。那由多屋の加藤です。
昨日(7月28日)、名刺サイズのLinuxマシン「Raspberry Pi」(ラズベリーパイ)が到着しました。
また、あわせてAmazonに注文していた8GBのSDHCカード、HDMI-DVI変換ケーブルも到着しました。どちらも「Raspberry Piで動作したハードウェア一覧」に掲載されていた物です。
これからいろいろ遊んでみようと思います。
第19回スマートフォン勉強会@関西に参加しました&LTしました
こんにちは。加藤です。
昨日、土曜日に開催された「第19回スマートフォン勉強会@関西」に参加しました。また、飛び入りでLT(ライトニングトーク)をしました。
LTではGeoDeltaの紹介をしました。LT用の資料は用意していなかったので、Webサイトをいくつか使いながら説明を行いました。以下、参考にリンクを張っておきます。
- Twitter - 那由多屋 @nayutaya
- 株式会社那由多屋
- Nayutaya Inc. 作成のアプリ - Android Market
- Googleマップ
- Wikipedia - 経緯度
- GeoHex V3公開しました。 | geogames.net
- 緯度経度を文字列で表すGeoHash - @masuidrive blog
- Wikipedia - メルカトル図法
- GeoDeltaというものを考えてみました - 那由多屋 開発日誌
- nayutaya/geodelta - GitHub
2012年もどんどん勉強会に参加していきたいと思います!
GeoDeltaというものを考えてみました
こんにちは。那由多屋の加藤です。
地球上の座標を示すためのコード「GeoDelta」というものを考えてみました。ちなみに考えてみただけです。実装求む!(笑)
特徴
GeoDeltaには下記のような特徴があります。たぶん。(なにぶん、まだ実装していないので本当かどうか・・・)
- メルカトル図法で描画された地図を正三角形で分割します。(Googleマップなど)
- 下位の領域(三角形)は上位の領域に包含されます。
- 比較的短いコードで領域(面積を持つ座標)を表現することができます。
- GeoDeltaコードの末尾を削ることで、1レベルまたは2レベル上位の領域を示すことができます。
- GeoDeltaコードは、口頭での伝達、手書きによる伝達で間違いが生じにくいように設計されています。
- 三角形を6つ組み合わせて六角形でビジュアライズするのが容易です。
- およそ北緯82.46度から南緯82.46度の領域を示すことができます。(南極観測隊のみなさん、ごめんなさい!)
開発者向けには以下のような特徴があります。
- たぶん、実装が容易です。
- 正しいGeoDeltaコードかどうか、1つの正規表現で判定できます。
- 単純な文字列処理で上位の領域が得られます。
仕様
以下、具体的な仕様です。まだあまり検証されていません。
領域
GeoDeltaでは、領域のことを「デルタ」と呼びます。地球を8個に分割したデルタを「ワールドデルタ」、入れ子になったデルタを「サブデルタ」と呼びます。
ワールドデルタには0から7までの番号が振られています。北半球から南半球、西から東の順番で番号が振られます。
上図における経度0度の北半球に位置するのがデルタ0(ヨーロッパを含む領域)、そこから東方向にデルタ1(主にアジアを含む領域)、デルタ2(日付変更線を含む領域)、デルタ3(北アメリカを含む領域)とします。
南半球も同様に、経度0度がデルタ4(南極だけを含む領域)、デルタ5(オーストラリアを含む領域)、デルタ6(日付変更線を含む領域)、デルタ7(南アメリカを含む領域)とします。
ワールドデルタは4つの領域に分割されます。分割されたデルタが「サブデルタ」です。サブデルタを分割したデルタもまた「サブデルタ」です。
サブデルタには0から3までの番号が振られています。中心を0とし、時計回りに1、2、3とします。上向きの三角形と下向きの三角形があることに気をつけて下さい。
レベル
領域の大きさは「レベル」と呼ばれる数値で示されます。ワールドデルタがレベル1、それを4分割したサブデルタのそれぞれがレベル2、そのサブデルタをさらに分割したものがレベル3です。
レベルが1つ大きくなるにつれて、地図上での面積が4分の1になります。実際に表現される領域の面積が4分の1になるわけではないことに気をつけて下さい。
コード体系
GeoDeltaコードは、下記のような書式で構成されます。
WSSSS....
「W」は符号化されたワールドデルタ、「S」は符号化されたサブデルタを示します。
より大きいレベル(狭い面積)を示すGeoDeltaコードほど長くなります。
符号化
GeoDeltaコードは、数字とアルファベットで構成されます。アルファベットは大文字小文字を区別しませんが、大文字で表記することが推奨されます。
GeoDeltaコードでは、数字の「0」「1」「9」、アルファベットの「I」「L」「O」「Q」「U」を除く28文字で表現されます。これらの文字が除かれている理由は、下記の通りです。
- 「0」: アルファベットの「O」と間違える可能性があるため。
- 「1」: アルファベットの「I」「L」と間違える可能性があるため。特に「L」が小文字の場合。
- 「9」: アルファベットの「Q」、数字の「6」と間違える可能性があるため。「Q」については日本語特有。
- 「I」: 数字の「1」、アルファベットの「L」と間違える可能性があるため。特に「L」が小文字の場合。
- 「L」: 数字の「1」、アルファベットの「I」と間違える可能性があるため。特に「L」が小文字の場合。
- 「O」: 数字の「0」と間違える可能性があるため。
- 「Q」: 数字の「9」と間違える可能性があるため。日本語特有。
- 「U」: アルファベットの「V」と間違える可能性があるため。特に手書きの場合。
ワールドデルタは1文字に符号化されます。対応表は下記の通りです。
デルタ0 | Z |
デルタ1 | Y |
デルタ2 | X |
デルタ3 | W |
デルタ4 | V |
デルタ5 | T |
デルタ6 | S |
デルタ7 | R |
ワールドデルタに続くサブデルタは、レベルによって文字数が異なります。サブデルタの符号化は、下記の順序で行います。
- 4進数(0から3)のシーケンス(例えば0、1、2)を2進数のシーケンス(例えば00、01、10)に変換します。
- 2進数のシーケンスをレベルの小さな領域から順番に結合します。
- 下記の対応表に従い、4ビット、または2ビットを文字に変換します。
4ビット以上残っている場合は、下記の表で変換します。
0000 | 2 |
0001 | 3 |
0010 | 4 |
0011 | 5 |
0100 | 6 |
0101 | 7 |
0110 | 8 |
0111 | A |
1000 | B |
1001 | C |
1010 | D |
1011 | E |
1100 | F |
1101 | G |
1110 | H |
1111 | J |
2ビット残った場合、下記の表で変換します。
00 | K |
01 | M |
10 | N |
11 | P |
符号化の例
GeoDeltaコードの符号化の例を下記に示します。
- アジア大陸を含むデルタ1→「Y」
- 日本を含む、デルタ1の右下のデルタ→「YP」(Y,11)
- 「YP」の上側のデルタ→「YG」(Y,11,01)
・・・これ以上は実際に実装しないと無理そうです。
実装のお願い
ここまで考えたのはいいのですが、実装する元気と時間がありません(笑)。実装を求む!
できることならば、OSI(Open Source Initiative)が認めるオープンソース・ライセンス下での提供を望みます。
一番最初にエンコーダ、デコーダを実装してくれた方にラーメンを奢ります!(ただし、関西圏、東京23区内に限る)
参考情報
実装者の参考になるであろう情報を並べておきます。
- 六角形によるジオコーディング: GeoHex
- 矩形によるジオコーディング: GeoHash
- メルカトル図法の概要について: メルカトル図法 - Wikipedia日本語版
- メルカトル図法の具体的な座標変換について: Mercator projection - Wikipedia英語版
- 三角格子座標系の効率的な表現について: いろいろな画素形状での離散ボロノイ図
ライセンス
この仕様書(笑)のライセンスは、CCライセンスのBY-SA(表示-継承)2.1とします。名前は「Yuya Kato (Nayutaya Inc.)」としてください。