NetBeasnsでGoogle Map Service v2

Google Map Service v2 の利用に苦労したので情報共有します。

OS Windows8 Pro 64bit
Java SDK Oracle Java 1.7.0u45 64bit
統合開発環境 NetBeans IDE 7.4
Android SDK Rev.22.3
  1. インストール
    1. ブラグインのインストール
    2. Android Support Liblary のインストール
    3. Android Support Liblary のインポート
  2. 編集
    1. Android Manifest の編集
    2. Layoutファイルの編集
    3. Activityの編集
  3. エラー対応
    1. ビルド⇒エラー
    2. ライブラリープロジェクトの追加
    3. ビルド⇒エラー
    4. build.xmlの初期化
  4. ビルド⇒成功!

インストール

環境は適宜インストールしてください。
JDKコチラ から
Android SDKコチラ から

NetBeansコチラ から
安心の日本語対応

ブラグインのインストール

NBAndroidをインストール

メニュー>ツール(T)>プラグイン(P)


タブ>設定>追加(A)

名前(N) NBAndroid
URL http://nbandroid.org/release72/updates/updates.xml

NBAndroid のインストールは コチラ が詳しいです。

インストールが出来ると新規プロジェクトでAndroidが現れます

Android Support Liblary のインストール


ツール>Android SDK Manager


ライブラリを選択・インストール

Android Support Liblary のインポート

android-support-v4.jar sdk\extras\android\support\v4

google-play-services.jar sdk\extras\google\google_play_services\libproject\google-play-services_lib\libs

プロジェクトのlibsフォルダへコピー

google-play-services_lib が無事にコンパイルが通る様になったら
google-play-services.jar がダブっていました。
libs側を削除しても問題無くコンパイルが通りました。
ビルドが通らないのが問題だったようですね。

編集

参考 sdk\extras\google\google_play_services\libprojec\samples\maps

Android Manifest の編集

権限の追加

  <!-- Copied from Google Maps Library/AndroidManifest.xml. -->
  <uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="17"/>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
  <!-- External storage for caching. -->
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  <!-- My Location -->
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
  <!-- Maps API needs OpenGL ES 2.0. -->
  <uses-feature
    android:glEsVersion="0x00020000"
    android:required="true"/>
  <!-- End of copy. -->

メタデータの追加

    <meta-data android:name="com.google.android.maps.v2.API_KEY"
    android:value="AIzaSyCvGBr5in13NK2yYBR7lhXTtnxj3mrXQy4"/>
    <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

com.google.android.maps.v2.API_KEY Google APIs Console で個別に取得する必要があり。

http://www.adamrocker.com/blog/334/google-maps-android-api-v2.html が詳しいです。

Layoutファイルの編集


Fragmentを使います

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/map"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          class="com.google.android.gms.maps.SupportMapFragment"/>

Activityの編集

Fragmentを読み込んで表示

これで動けばよかったのですが


エラー対応

ビルド⇒エラー

layoutファイルのところで下にでていましたが
このままではエラーとなります。

ライブラリープロジェクトの追加


Librares > add

これでエラーが消えます

ビルド⇒エラー


ビルドするとGoogle-play-serveces_libのbuild.xmlでエラーとなります。

build.xmlの初期化


android.bat update project -p .

ビルド⇒成功!

これでビルドが通るようになります。
ただし、Google Map Serviceはエミュレータでは起動しても閉じられてしまいますし、
実機でも署名されていないと地図が表示されません。

地図を含めたデバッグを行うにはkeyファイルで署名したものをインストールする必要があります。

プロジェクト>プロパティ>Export Signed Android package から署名APKの作成が出来ます。
署名に用いるキーはAPI Keyを申請した時のKeyを使います。


Gradle でのlibrary の配信が始まったようですし
NBAndroid のGradleサポート予定との事なのでGradleでのプロジェクトについて勉強中です

Ubuntu 12.04 LTS でネットラジオを聞こう

ログインしたらネットラジオを手軽に聞ける環境を構築したいと思いました。

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install radiotray

/usr/bin/radiotray を自動起動するアプリケーションに登録

聞きたいラジオ局のURLを登録
ここでは NHK WORLD

これでubuntuを起動してトレイから気軽に
ネットラジオが聞くことができます。

SHOWCASTのラジオ局などを右クリックしてURLコピーなどすると
簡単に登録するラジオのURLが得られると思います。

Android開発でGitを使った場合に気をつける点

EeeBOXにGitサーバが設定できたのでubuntu側でAndroidSDKからインポートした
Google play servicesのmapサンプルをputしてWindows側でpullしたらはまった話。

  • 環境
  • 原因
  • 解決方法

環境

ubuntu ubuntu10.04.3LTS(GNU/Linux 3.2.0-57-generic x86_64)
java oracle-java 1.7.0_45
sdk path /opt/android-studio/sdk/
workscape /home/tackn/develop/adt/workspace
git /home/tackn/git/SampleProject/MainActivity

変更前

windows Microsoft Windows 8 Pro 64bit
java oracle-java 1.7.0_45
sdk path D:\android\adt\sdk
workscape R:\workspace
git C:\Users\tackn\git\SampleProject\MainActivity
  • 容量の小さいSSDのCドライブには出来るだけ置かず、HDDのドライブを利用
  • RはRAMディスクで少しでも動作を速くしようとしていました。

変更後

windows Microsoft Windows 8 Pro 64bit
java oracle-java 1.7.0_45
sdk path D:\android\adt\sdk
workscape D:\work\develop\workspace
git D:\work\git\SampleProject\MainActivity

原因

いろいろ試しましたが、主な原因はubuntuには"/"が有って、windowsには"/"が無いという事でした。

  1. Git管理下にするとworkspaceからgit管理領域へプロジェクトが移動する
  2. Google play servicesという参照サービスが相対パスなのでエラーになる
  3. Android Support Toolsというのをandroid 2.2でFragment対応の為にいれるのだが,Git管理下にするときにlibsフォルダが移動せずに参照出来なくなる。

解決方法

ファイルが移動していることに気がつかずプロジェクトのプロパティの設定のみに注視していました。
ubuntu側でもチェックすると同様にgit配下へ移動のためライブラリの参照が切れていましたが、設定すれば
それ以降は問題ありませんでした。

パスが変化していることに気がついたのと、参照プロジェクトの指定が開き直すと相対パスになって居ることに気がつき
Windows側でも作業ドライブを決めてライブラリの相対参照が出来る様にしたところコンパイルが通る様になりました。


WindowsのC:\ドライブで開発されている方には無縁だと思いますが、いくつかのドライブを使い分けている場合

  • 参照があるとリンクが切れてしまう点
  • Gitのリポジトリがデフォルトではhome配下になってしまうので別ドライブで開発していると意図せず別ドライブ参照になる点

今後気をつけたいと思います。

Ubuntu 12.04 LTS のTracでGitレポジトリを管理

Windowsで開発していたときはTracLightningsubversionを使っていましたが、Gitに興味を持ったのとせっかくEeeBOXでLinux簡易サーバをたてたのでhttp://kanon.ultimania.org/でGitを使えるようにして見ました。

$ uname -a
Linux EeeBOX 3.2.0-57-generic #87-Ubuntu SMP Tue Nov 12 21:35:10 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

Gitのインストール

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install git

$ git --version
git version 1.7.9.5

kanon(Trac)のインストール

Mercurial のインストール

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install mercurial

kanon のインストール

$ sudo hg clone https://bitbucket.org/okamototk/kanonconductor
$ cd kanonconductor
$ sudo bash kanon-setup

ここを参考に(最初わからずコピペしてはまりました orz)

Gitリポジトリの作成

# git init --bare /var/opt/kanon/git/SampleProject
# git --git-dir=/var/opt/kanon/git/SampleProject update-server-info
# chown www-data:www-data -R /var/opt/kanon/SampleProject

Apacheの設定

kanonの場合新たに記述する必要はありません

$ cd /etc/apache2/sites-enabled
$ ls -la vcs < 無かったら(あったと思いますがいろいろやりすぎてわからなくなりました…)
$ sudo ln -s ../sites-available/vcs vcs
$ ls -la vcs
lrwxrwxrwx 1 root root 22 12月 4 19:16 vcs -> ../sites-available/vcs

$ vi vcs
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/

$ sudo apachectl configtest
Syntax OK
$ sudo apachectl restart

Tracリポジトリブラウザの設定

TracのGitプラグインインストール

$ sudo # easy_install https://github.com/hvr/trac-git-plugin/zipball/v0.12.0.5

trac.iniの設定変更
$ sudo vi /var/opt/kanon/trac/SampleProject/conf/trac.ini

[components]
...
tracext.git.* = enabled
...

[trac]
...
repository_dir = /var/opt/kanon/git/SampleProject
repository_sync_per_request = (default)
repository_type = git
...

念の為Apacheを再起動して終わりです。

  • 最新のkanonではすでにvcsで記述していたのでバッティングした
  • Gitのバージョン際でScriptAliasのパスが変わっていた

私はこの2つではまったので情報共有しておきます。

追記

Apache2を久しぶりに触ったわけですが、
sites-availableとかmodule-availableとかなんでこんな面倒な事をと
自分でln でシンボリックリンクを張ってしまいましたが
a2dismod a2enmod a2dissite a2ensiteと専用のコマンドがあったのですね。
モジュールやサイト単位の停止・起動ができるのでしょうか?

ちょっと勉強せねばなりませんね。

追記2

ubuntuでの管理方法で昔からあったのですね。
理解すれば確かにわかりやすいかもしれませんね。

ただやっぱりApacheの再起動は必要だったみたいです。
残念

Ubuntu 12.04 LTS でexFATをSMB公開

大容量の外部ストレージのマウントとWindowsネットワークへの公開

目標

  1. extFat ドライブをUbuntuにマウント
  2. ドライブ自体をすべてSMBに公開
  3. validユーザのみアクセス、読み書き可

extFat ドライブをUbuntuにマウント

exFAT

  • 32Gbytes以上のメディアも取り扱える
  • 1ファイル4GBの制約を超えたファイルが持てる
  • クラスタサイズの拡大によるパフォーマンスの改善

今回は32GBのSDHCのSDカードでの利用なのでexFATでなければならない理由はないのですが
今後の事も踏まえてこの方式を選択

$ sudo add-apt-repository ppa:relan /exfat
$ sudo apt-get update
$ sudo apt-get install fuse fuse-exfat exfat-utils

今回は/dev/sdc

$ sudo gparted /dev/sdc

領域だけ確保

$ sudo mkfs.exfat /dev/sdc1

マウントポイント作成

$ sudo mkdir /mnt/share

テストマウント

$ sudo mount -t exfat-fuse /dev/sdc1 /mnt/share
$ touch /dev/sdc1/テスト
$ sudo umount /dev/sdc1

WindowsPCに読ませて文字化けしてないかチェック
特にコードポイントの指定もせずに文字化けもしませんでした。

ドライブ自体をすべてSMBに公開

SMBに公開

$ sudo apt-get install samba
$ sudo vi /etc/samba/smb.conf
$ sudo testparm

[global]
dos charset = CP932
display charset = UTF-8
workgroup = WORKGROUP
server string = %h server (Samba, Ubuntu)
interfaces = 127.0.0.0/8, 192.168.1.0/24
bind interfaces only = Yes
map to guest = Bad User
obey pam restrictions = Yes
pam password change = Yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
unix password sync = Yes
syslog = 0
log file = /var/log/samba/log.%m
max log size = 1000
unix extensions = No
dns proxy = No
wins support = Yes
usershare allow guests = Yes
panic action = /usr/share/samba/panic-action %d
idmap config * : backend = tdb
hosts allow = 192.168.1.0/255.255.255.0
printing = bsd
print command = lpr -r -P'%p' %s
lpq command = lpq -P'%p'
lprm command = lprm -P'%p' %j

[share
comment = "exFat=32GB@SD"
path = /mnt/share
valid users = tackn
read only = No
force create mode = 0666
directory mask = 0777

$ sudo service smbd restart

どうもサーバを再起動するとsmbdが動いてはいるのだけれど
Windowsからアクセスできなかったりサーバが見えなくなったりします。

そんなときは

$ sudo service smbd restart
$ sudo service nmbd restart

すると回復します



validユーザのみアクセス、読み書き可

Smb上のセキュリティはこれで良いのですが、
ファイルシステム上のセキュリティがまだ残っています。

とりあえずUUIDの調査

$ ls -l /dev/disk/by-uuid | grep sdc1
lrwxrwxrwx 1 root root 10 11月 27 19:09 1B11-8DF9 -> ../../sdc1

[ 1B11-8DF9]がUUID
/dev/sdc1の指定だと何かの拍子に/dev/sdb1になった時にマウントできないのでuuidでマウント

$ sudo gedit /etc/fstab
UUID=1B11-8DF9 /mnt/share exfat-fuse defaults,gid=65534,uid=65534,users,umask=000 0 0

gid=65534 nobodyでマウント
uid=65534 nogroupでマウント
umask=000 mode0777でマウント

$ sudo reboot
$ sudo service smbd restart
$ sudo service nmbd restart


本当はmode=0777でマウントせずに
SMB利用ユーザだけのグループを作成して
0775か0770でマウントするべきなのでしょうね

11/28 7:50 追記

やはりmode=777でのマウントは気味が悪い

$ groups tackn
tackn : tackn adm cdrom sudo dip plugdev lpadmin sambashare

sambashare というグループが目的的には良さそう

grep tackn /etc/group
adm:x:4:tackn
cdrom:x:24:tackn
sudo:x:27:tackn
dip:x:30:tackn
plugdev:x:46:tackn
lpadmin:x:109:tackn
tackn:x:1000:
sambashare:x:124:tackn

gidが124とわかったのでumaskの修正

$ sudo vi /etc/fstab
UUID=1B11-8DF9 /mnt/share exfat-fuse defaults,gid=65534,uid=65534,umask=007 0 0
$ sudo reboot

うん、うまく行った。
まぁ sambashareグループ自体はほぼ誰でもなれるので気分的なものだけれど。
セキュリティレベルを上げる必要があったら新たにグループを作れば良いかなと。

気になったのはsmbd サービスを止めてもアンマウント出来ない
何が捕まえているのだろう

Ubuntu 12.04 LTS の環境のセットアップ

LiveCD では起動できるソフトに限界を感じたのと、USBのメモリーの一部に仕込んでおくことで普段はUSBメモリとして使い、PCトラブル時にはレスキューディスクとして利用を考えて環境を作った際のメモ


日本語Rimix イメージを利用 Ubuntuの日本語環境 | Ubuntu Japanese Team
 

インストール環境

GIGABYTE S-sirises GA-MA790GP-DS4H
CPU AMD Phenom X4
memory 6GB(DDR2 2GB x 3)
ストレージ USB メモリー

LiveCDで起動して、gpartedで領域をしてインストール
領域分割とかインストール自体はウィザードの指示にしたがえば出きるかと

ただ私はこんな感じになりました。
始点・終点を見ていただければ苦労したのが分かっていただけるかと

もちろんgrubでも一悶着あり、今もスムーズに起動してくれないくせのあるドライブになってしまいました。
まぁ落としたときのトラップセキュリティーになれば(ぉぃ



ここからが本題

Android の勉強を再開しようと思っています。
今は統合開発環境だけでもたくさんあります。

DDMSとかが呼び出せるだけで避ければNetBeansサードパーティープラグインが個人的には好み
メニューがほぼ日本語化されているので心にやさしい

しかしGUIエディタとして考えるとGoogle提供のADTとStudioになるのかなと思っています。
とりあえずすべてをインストールして Hello Worldをやってみました。

個人的にな感想

  • Android Studio(IntelliJ)
    • 未体験ゾーン、なれれば使い勝手は良さそう
    • 分からないものを英語で使うのは辛い
    • Pleiades を無理に当てたらフォントが豆腐になってしまって断念
    • 要継続調査

JDKのインストール

Ubuntu 12.04 に Oracle Java 6, 7 (JRE, JDK) をインストール - Qiita

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer

これで切り替えられるらしい

sudo update-alternatives --config java


Java SDKも入ったので


Android SDKを取得

Download Android Studio and SDK tools


ADT のインストール

32bit にするか 64bit にするのかと、規約同意です

Android Studio

こちらから取得
http://developer.android.com/sdk/index.html

共に好きな場所に解凍すればOK


NetBeans

NetBeans NetBeans 日本語サイト
netbeans-7.4-javase-linux.shをダウンロード

shを実行するとJDKの検索からインストール ウィザードの起動も日本語です。

猫びーんかわいい


サードパーティせいのアンドロイドプラグイン NBAndroidが必要

サードパーティプラグインの追加してAndroid /Mobilityをインストール

NBAndroid : http://nbandroid.org/release72/updates/updates.xml

こちらWindowsだと自分のAppData配下がデフォルトなのですが、
Microsoftアカウントに日本語名を登録しているとホームフォルダに2バイトが混じるので
実行するとこけるのでどこか違うパス長の短いところに入れ他方が無難です。


メモ

Android SDKはサイズが大きいのでそれぞれでダウンロードせずにAndroid Studio配下のsdkフォルダをすべて参照するようにしてディスクスペースを稼いでいます。


感想

Linux , Windows と各IDEを触ってみた感想

Eclipse 無難
IntelliJ なれるまで時間がかかりそう
NetBeans 画面デザイナがあれば

すべてのプロジェクトフォルダ(ワークフォルダ)をLinuxWindowsで共用してみたのですが
Android SDKのパスの問題がありEclipseIntelliJではうまく行きませんでした。
得にIntelliJはどこに残っていて設定すればよいのかも分からず。GitとかSubVersion軽油で共用した方がよさそうですね。いろんな意味で。
Eclipseかなと思ったので少し高速化を試してみました。


Eclipse 高速化

1.ramdiskの構築
/etc/rc.local でRAMDISKの作成

mount -t tmpfs -o size=1g,mode=0777 /dev/shm /mnt/ramdisk

ついでに/etc/fstab でテンポラリが作られそうなフォルダもRAMDISK

proc /proc proc nodev,noexec,nosuid 0 0
tmpfs /dev/shm tmpfs defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /var/tmp tmpfs defaults 0 0
tmpfs /var/run tmpfs defaults 0 0
tmpfs /var/lock tmpfs defaults 0 0

2.rsyncスクリプト作成
cp_Eclipse_To_RamDisk.sh を作成

#!/bin/bash

STATIC="/home/tackn/adt/eclipse"
VOLATILE="/mnt/ramdisk/eclipse"

-r $VOLATILE || install -dm700 $VOLATILE
if -e $VOLATILE/.sync ; then
rsync -av --delete --exclude='.sync' $VOLATILE/ $STATIC/
else
rsync -av $STATIC/ $VOLATILE/
touch $VOLATILE/.sync
fi

STATIC2="/media/UBUNTU/develop/adt/workspace"
VOLATILE2="/mnt/ramdisk/workspace"

-r $VOLATILE2 || install -dm700 $VOLATILE2
if -e $VOLATILE2/.sync ; then
rsync -av --delete --exclude='.sync' $VOLATILE2/ $STATIC2/
else
rsync -av $STATIC2/ $VOLATILE2/
touch $VOLATILE2/.sync
fi

3.cronに登録して定期的にストレージへ書き戻す

crontab -e でエディタを起動

10分毎に同期スクリプトを実行

 */10 * * * * /home/tackn/bin/cp_Eclipse_To_RamDisk.sh 2>&1

4.起動時実行スクリプトに登録

念のためログイン直後に実行してramdisk上へ実態を同期させる

5.desktopファイルを作成してデスクトップから起動出きるようにする

1.Eclipseは起動フォルダも気にしないといけないので eclipse.sh というダミースクリプトを作り
eclipseはそこから呼び出す
2.desktopファイルをデスクトップに作成

[Desktop Entry]
Encoding=UTF-8
Name=ADTwithRamDisk
Comment=The Android Developer Tool with RamDisk
Exec=/mnt/ramdisk/eclipse/eclipse.sh
Icon=/mnt/ramdisk/eclipse/icon.xpm
Categories=Application
Version=1.0
Type=Application
Terminal=0

Becky!でGmail 2段認証でIMAP4メールで送信

BeckyでGmailを使っているときに2段認証後にメール送信に失敗したので備忘録

環境

OS Windows8Pro 64bit
Becky! 2.64.06[ja]
Gmail 2段認証

Gmail 2段認証

既に2段認証を始めているという前提です。
2 段階認証プロセスでビジネスを保護する - G Suite 管理者 ヘルプ

  1. Google にログインしてアクセス
  2. アカウントを選択

  1. セキュリティ
  2. 2段認証プロセス
  3. 設定

  1. アプリケーション固有のパスワード
  2. アプリケーション固有のパスワードの管理

  1. 名前を付ける (なんでも良い)
  2. パスワードを生成

  • ここでは mqectiupwxqqxxevr がBeckyで使う固有パスワード
    • アプリケーション毎に作成して使い回さない。
    • アプリケーション毎に作っておけば個別に廃止出来る

Beckyの設定

Gmail用のアカウントが作ってあるとする

  1. メールボックスの設定を開く
    • Gmail に接続していた場合は切断してから
受信プロトコル(T) IMAP4rev1
IMAPサーバ(受信) imap.gmail.com ☑IMAPS
SMTPサーバ(送信) smtp.gmail.comOP25B ☑SMTPS
ユーザID(U) Gmailのアドレス
パスワード(P) 固有パスワードで取得したパスワード
認証方式 標準


詳細の設定

サーバのポート番号

SMTP 587
IMAP 993

SMTP認証

  • ☑ CRAM-MD5
  • ☑ LOGIN
  • ☑ PLAIN
  • ユーザーID(U) : 空
  • パスワード(O) : 空
  • ☑ ESMPを使用(W)

IMAP関連

趣味だと思います。Gmailで管理出来るようになります

☑ ごみ箱をサーバ上に置く(T) ごみ箱のファイル名 [Gmail]/ゴミ箱
☑ 草稿をサーバ上に置く(L) 草稿のファイル名 [Gmail]/下書き
☑ 送信済みをサーバ上に置く(E) 送信済みのファイル名 [Gmail]/送信済みメール