ひでっぷの技術メモ

はてなダイアリーから移行しました

Stringの作り方に注意

ちょっとはまったのでメモ
知ってる人にとっては当たり前かもしれませんが


char[] chars = new char[1024];
chars[0] = 't';
chars[1] = 'e';
chars[2] = 's';
chars[3] = 't';
String s1 = new String(chars);
String s2 = "test";

System.out.println(s1.equals(s2));


結果はfalseです。

String s1 = new String(chars).trim();

すればtrueです。

Armadillo-460でRXTXCommを使用する

Armadillo-460のSDカードにDebian lennyをのっけて動かしてます。

aptitude search rxtx

ってやってみると

p librxtx-java - Full Java CommAPI implementation

って出てくるので「おお!Armadillo-460でRXTXCommが使えるぞ!」って大喜びしてさっそくapt-get installしたわけですが、いざPCで動くRXTXCommを使用したjarファイルを動かしてみてもNoSuchPortException(そんなポートはありませんエラー)が出て動きません。
指定しているシリアルポートのデバイスを直接Openしてやれば動くのでポートを間違えているってこともありません。
やっぱArmadilloではRXTXCommは使えないのか・・・とあきらめかけているとRXTXCommのソースコードのコメントににこんなことが・・・

256 is the number of prefixes ( COM, cua, ttyS, ...) not the number of devices (ttyS0, ttyS1, ttyS2, ...)

そんでもってソースをさらに見てみると・・・


switch (PortType) {
case CommPortIdentifier.PORT_SERIAL:
if (debug)
System.out.println("scanning for serial ports for os "+osName);
if(osName.equals("Linux"))
{
String Temp = {
"ttyS", // linux Serial Ports
"ttySA" // for the IPAQs
};
CandidatePortPrefixes=Temp;
}
else if(osName.equals("Linux-all-ports"))
{
/* if you want to enumerate all ports ~5000
possible, then replace the above with this
*/
String
Temp = {
"comx", // linux COMMX synchronous serial card
"holter", // custom card for heart monitoring
"modem", // linux symbolic link to modem.
"ttyircomm", // linux IrCommdevices (IrDA serial emu)
"ttycosa0c", // linux COSA/SRP synchronous serial card
"ttycosa1c", // linux COSA/SRP synchronous serial card
"ttyC", // linux cyclades cards
"ttyCH",// linux Chase Research AT/PCI-Fast serial card
"ttyD", // linux Digiboard serial card
"ttyE", // linux Stallion serial card
"ttyF", // linux Computone IntelliPort serial card
"ttyH", // linux Chase serial card
"ttyI", // linux virtual modems
"ttyL", // linux SDL RISCom serial card
"ttyM", // linux PAM Software's multimodem boards
// linux ISI serial card
"ttyMX",// linux Moxa Smart IO cards
"ttyP", // linux Hayes ESP serial card
"ttyR", // linux comtrol cards
// linux Specialix RIO serial card
"ttyS", // linux Serial Ports
"ttySI",// linux SmartIO serial card
"ttySR",// linux Specialix RIO serial card 257+
"ttyT", // linux Technology Concepts serial card
"ttyUSB",//linux USB serial converters
"ttyV", // linux Comtrol VS-1000 serial controller
"ttyW", // linux specialix cards
"ttyX" // linux SpecialX serial card
};
CandidatePortPrefixes=Temp;
}

http://rxtx.qbang.org/pub/rxtx/rxtx-2.1-7/CNI/RXTXCommDriver.java


なるほど。Armadillo-360のシリアルポートは前回も書いたとおりttymxc1〜ttymxc4までなのですがRXTXCommだとそのデバイス名は見に行かない=そんなポートはないってなっちゃうわけですね・・・
ってことで

ln -s /dev/ttymxc1 /dev/ttyS0

とRXTXCommさんがわかるようにシンボリックリンクをはり、使用するポート設定も/dev/ttyS0にしてあげることで無事にRXTXCommが使えるようになりました。

Armadillo-460のシリアルポートデバイスが・・・

Armadillo-460にはシリアルポート1〜シリアルポート4まで4つのシリアルポートがあります。
コネクタ出ししてあるのはシリアルポート1とシリアルポート4。
デバイスをlsで覗いてみると


crw-rw-rw- 1 root root 207, 17 2012-02-10 10:45 /dev/ttymxc1
crw-rw-rw- 1 root dialout 207, 18 2012-02-10 11:13 /dev/ttymxc2
crw-rw-rw- 1 root dialout 207, 19 2012-02-10 18:32 /dev/ttymxc3
crw-rw-rw- 1 root dialout 207, 20 2012-02-10 11:17 /dev/ttymxc4

シリアルポート4を使うために/dev/ttymxc4を使用するようにしてテストするも・・・通信できず。
何か設定あったかなあと・・・ソフトウェアマニュアルを見ていると・・・・


f:id:hidepon_mory:20120210184232p:image

ちょwシリアルポート1→/dev/ttymxc1 シリアルポート2→/dev/ttymxc2と来てなんでシリアルポート3が/dev/ttymxc4、シリアルポート4が/dev/ttymxc3なん!
まじでびっくりするわ!
ってことでみなさん注意しましょう(笑)

Armadillo-460でJavaを使う

Armadillo-9のCPUメーカー(シーラス社)がCPUから撤退するらしく、供給保証は2013年3月までとのこと。
で、後継機種としてArmadillo-460が発売されていたので購入しテストしてみました。
Armadillo-9の時はCFカードが使えましたが今回はSDカードになってます。
基本的にArmadillo-9の時と同様、SDカードにカーネルとユーザーランドを入れて起動できます。
ちなみにカーネルイメージはここ、SDカードに入れる用のDebian(Lenny)のルートファイルシステムここで用意されてます*1
Armadillo-9で苦労したところといえばJava。apt-getできるSableVMはメモリリークするバグがあり、苦労した結果PhoneMEをmakeして使ってました
今回はというと・・・・apt-getであっさりOpenJDKをインストールすることができました
試しに今までArmadillo-9で動かしてたjarファイルを起動してみると・・・あっさり起動。
うおおお!これでJava5.0以降の拡張For文やGenericsやStringBuilderやStringのreplaceAllが使えるんですね!splitのためだけにapacheのRegexp入れなくていいんですね*2!!!
メモリの使用量とかSDカードの書込回数とか注意しないといけないところなんかは今後調査していこうかなと思ってます。

*1:Hermitでブートデバイスの指定(setbootdevice)やルートファイルシステムの指定をする必要あり

*2:[http://d.hatena.ne.jp/hidepon_mory/20080926/1222428145:title=このへん]参考に

Galaxy NexusがSIMを認識しなくなる原因がわかった!

えーと、デバッグで使ってたUSBケーブルが悪さしてるみたいです・・・。
これを使ってたんですが、XOOMでデバッグした時にUSBケーブルを抜くとXOOMの電源が落ちることに気づいてもしや・・・と思い別のケーブルを使ったらSIMを認識したままでした。
上のケーブルを使ってたときはケーブルを挿したら100%SIMを認識しなくなったのでほぼ確定だろうと思います。

Galaxy NexusがSIMを認識しなくなる

UK版Galaxy Nexusを買ったわけですが使っていると時々SIM*1を認識しなくなる現象に悩まされています。
で、今日気づいたんですがどうも開発デバッグでPCとUSBデバッグ接続をするとSIMを認識しなくなるようです・・・。
端末の電源入切をするとまた認識するんですが*2Wifi環境がない場所だと不便でしょうがないです・・・。
自分のGalaxy Nexusだけの問題なのかなあ・・・・

SIMを認識しています
f:id:hidepon_mory:20111202065417p:image 

USBケーブルを接続すると・・・・
f:id:hidepon_mory:20111202065416p:image

SIMを認識しなくなりました・・・
f:id:hidepon_mory:20111202065415p:image 

*1:bmobileの[http://www.bmobile.ne.jp/sim_tf/index.html:title=talking Fair]

*2:電源入切しなくても普及するときがたまにある

NetScreenSSG5でDMZからインターネット接続する

SSG5でDMZに置いてあるサーバーからインターネット接続をしようと思ってもうまくいかない。
ネットで調べてみたらこんな情報がありました。

うつくしくいきたい:NetSCREENのDMZでインターネットに接続できない - livedoor Blog(ブログ)

Network→Interfaces→ListのDMZ(SSG5の場合はethernet0/1)のインターフェース設定でNATモードに変えても変わらずRouterモードのままなのが仕様だそうで・・・
f:id:hidepon_mory:20111011154242p:image
DMZからインターネット接続ができるようにするためには
Policy→PoliciesでFrom DMZ To Untrustのポリシー設定にてAdvancedを選択してNATのSource Translationにチェックを入れる
f:id:hidepon_mory:20111011154243p:image
これでインターネット接続ができるようになりました。