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を使用するようにしてテストするも・・・通信できず。
何か設定あったかなあと・・・ソフトウェアマニュアルを見ていると・・・・
ちょ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カードの書込回数とか注意しないといけないところなんかは今後調査していこうかなと思ってます。
Galaxy NexusがSIMを認識しなくなる
NetScreenSSG5でDMZからインターネット接続する
SSG5でDMZに置いてあるサーバーからインターネット接続をしようと思ってもうまくいかない。
ネットで調べてみたらこんな情報がありました。
うつくしくいきたい:NetSCREENのDMZでインターネットに接続できない - livedoor Blog(ブログ)
Network→Interfaces→ListのDMZ(SSG5の場合はethernet0/1)のインターフェース設定でNATモードに変えても変わらずRouterモードのままなのが仕様だそうで・・・
DMZからインターネット接続ができるようにするためには
Policy→PoliciesでFrom DMZ To Untrustのポリシー設定にてAdvancedを選択してNATのSource Translationにチェックを入れる
これでインターネット接続ができるようになりました。