「雨雲マップ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へのリンクです)

参考: 写真

最後に、セットアップ途中の写真を載せておきます。とても散らかっていますが。(笑)

Nexus 7が到着しました

こんにちは。那由多屋の加藤です。

もう1週間近く前の出来事ですが、注文していたGoogleNexus 7が到着しました。

Nexus 7が初めてのタブレット端末です。今後、Androidアプリのタブレット対応を進めていきたいと思います。タブレット対応とは異なりますが、早速、鉄道運行マップAndroid 4.1への対応を行いました。

まずはいろいろ触って、タブレット端末の使い勝手を確認したいと思います。

Raspberry Piが到着しました

こんにちは。那由多屋の加藤です。

昨日(7月28日)、名刺サイズのLinuxマシン「Raspberry Pi」(ラズベリーパイ)が到着しました。

また、あわせてAmazonに注文していた8GBのSDHCカードHDMI-DVI変換ケーブルも到着しました。どちらも「Raspberry Piで動作したハードウェア一覧」に掲載されていた物です。

これからいろいろ遊んでみようと思います。

写真





第19回スマートフォン勉強会@関西に参加しました&LTしました

 こんにちは。加藤です。

 昨日、土曜日に開催された「第19回スマートフォン勉強会@関西」に参加しました。また、飛び入りでLT(ライトニングトーク)をしました。

 LTではGeoDeltaの紹介をしました。LT用の資料は用意していなかったので、Webサイトをいくつか使いながら説明を行いました。以下、参考にリンクを張っておきます。

 2012年もどんどん勉強会に参加していきたいと思います!

那由多屋が設立5周年を迎えました

本日、2012年1月11日をもちまして、株式会社那由多屋は設立5周年を迎えました。
小さな節目ではありますが、無事、5周年という節目を迎えられたことを大変嬉しく思います。

昨年と同様、本年も那由多屋はAndroidアプリの開発に注力して参ります。

今後とも、どうぞよろしくお願い致します。

株式会社那由多屋
代表取締役 加藤勇也

GeoDeltaというものを考えてみました

 こんにちは。那由多屋の加藤です。

 地球上の座標を示すためのコード「GeoDelta」というものを考えてみました。ちなみに考えてみただけです。実装求む!(笑)

概要

 とても大雑把に言えばGeoHexの三角形バージョンです。世界を入れ子の三角形で分割し、それを符号化します。

特徴

 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

 ワールドデルタに続くサブデルタは、レベルによって文字数が異なります。サブデルタの符号化は、下記の順序で行います。

  1. 4進数(0から3)のシーケンス(例えば0、1、2)を2進数のシーケンス(例えば00、01、10)に変換します。
  2. 2進数のシーケンスをレベルの小さな領域から順番に結合します。
  3. 下記の対応表に従い、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)

 ・・・これ以上は実際に実装しないと無理そうです。

実装のお願い

 ここまで考えたのはいいのですが、実装する元気と時間がありません(笑)。実装を求む!

 できることならば、OSIOpen Source Initiative)が認めるオープンソース・ライセンス下での提供を望みます。

 一番最初にエンコーダ、デコーダを実装してくれた方にラーメンを奢ります!(ただし、関西圏、東京23区内に限る)

参考情報

 実装者の参考になるであろう情報を並べておきます。

ライセンス

 この仕様書(笑)のライセンスは、CCライセンスのBY-SA(表示-継承)2.1とします。名前は「Yuya Kato (Nayutaya Inc.)」としてください。