Recently in PROGRAMMING Category

Android SDK更新したらLogCatで

「ビューを作成できませんでした: com.android.ddmuilib.logcat.LogCatPanel$13.(Lcom/android/ddmuilib/logcat/LogCatPanel;)V」

とか出てちとビビった(汗

グーグル先生に聞いてみたら、Eclipseを再インストールとかしか出てこなくてさらにビビった(汗(汗

ためしにcleanで起動したらあっさり治った。。

グーグル先生もあてにならんな。

★☆★☆★☆ ナウでヤングなレンタルサーバー!ロリポップ! ☆★☆★☆★
月額105円~容量最大30GB!WordpressやMovable Typeの簡単インストール付★

AdMobのGoogleAdMobAdsSdk-4.3.1.jar 入れたら

"You must have AdActivity declared in AndroidManifest.xml with configChanges."

とか怒られまくった。

LogCat見たら、
"The android:configChanges value of the com.google.ads.AdActivity must include screenLayout."
とか
"The android:configChanges value of the com.google.ads.AdActivity must include uiMode."
とか
"The android:configChanges value of the com.google.ads.AdActivity must include screenSize."
とか
"The android:configChanges value of the com.google.ads.AdActivity must include smallestScreenSize."
とかでてる。

言われる通りAndroidManifest.xmlに、

<activity android:name="com.google.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>

てしてみたら、今度は

"エラー: エラー: String types not allowed (at 'configChanges' with value 'keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize')."
って怒られた。(っつーか、なんで"エラー: エラー:"なんだ? 1個でいいだろ。"エラー:"は。)

screenLayout|uiMode|screenSize|smallestScreenSize
は API Level が13以上じゃないとダメらしい。

API Levelは変えたくなかったので、keyboard|keyboardHidden|orientation だけにして、AdMobのSDKをGoogleAdMobAdsSdk-4.1.1.jarにしたらコンパイル通った!


話それますが、今回色々いじっていて気が付いたんだけど、http://code.google.com/intl/ja/mobile/ads/docs/android/banner_xml.htmlにあるように、
com.google.ads.AdViewのタグの定義で"testDevices"に"TEST_EMULATOR"を入れておけば、いちいちソースに

adRequest.addTestDevice(AdRequest.TEST_EMULATOR);

とかしなくてもエミュレータでテストモードになるみたい。

Android 4.0搭載スマホ「GALAXY NEXUS SC-04D」が登場するという事で、久々にeclipseのプラグインたちを更新してみたんだけど、直後からAndroidプロジェクトのmain.xmlが開けなくなった!!

エラーが発生しました。詳細については、エラー・ログを参照してください。
com.android.ide.eclipse.adt.internal.editors.layout.configuration.ConfigurationComposite.getScreenBounds()Lcom/android/ide/common/api/Rect;

いろいろググったら、eclipseをcleanすれば良いらしい。
そおか。cleanなんて忘れてた。

詳しくはこのへん↓↓
http://www.hlplus.jp/php/blog/index.php?UID=1298450960

本番環境がLinuxな場合、ローカルで簡単に動かす時はcygwinを使ったりする事もあったのですが、最近、andLinuxなるものがある事を知りまして、試してみました。

まだ、入れたばっかりですが、すごくいい感じです。
cygwinだとやっぱり何となく、本番環境で動くんだろうかなんて心配を片隅に開発をしなければならないですが、andLinuxはUbuntuベースの本物のLinuxですから、本番環境にかなり近い環境が構築できます。

使い勝手がLinuxそのままなんで、あれやこれやとセットアップするのも慣れた手順で行えます。
ワシは今まで、RedHat系のLinuxばかり触っていたので、パッケージ管理系はどうなんだろうなと思っていましたが、andLinuxはDebian系と言う事で、APTが使えます。

APTはあまり使った事は無かったのですが、RedHat系のyumみたいな感じで使えるので、とても使い勝手が良いです。

パッケージ管理に限らないですが、いままで使い勝手が変わるのを嫌って、RedHat系以外はあまり触ろうと思いませんでしたが、実際andLinuxを触ってみると、特別RedHat系にこだわる必要もなさそうだな、なんて思い始めました。こんど自鯖もDebian系で構築してみるかな。

ただ、Windowsとのファイル共有はcygwinにはかなわない。まぁ、これは当然というか、当たり前というか。
andLinuxではCoFSやらSambaで共有するので、特別な設定無しでゴニョゴニョと言うわけにはいかないです。
それでも、本番に近い環境でデバッグできるのと、なにより、Linuxそのものを触っているので、Windowsで動かしているという事を意識させない感じがとても気に入りました。

日頃、cygwinでデバッグしている方は試してみる価値ありです!

CSSでbody要素内の子要素にheight:100%と指定したのに何故かFireFoxで見ると100%にならない現象に遭遇。
なんでだろ。っと調べてみました。
Web標準普及プロジェクトによると親要素であるbodyとさらにbodyの親要素のhtmlにも100%を指定する必要があるのだそうな。


html, body {
height: 100%;
}

なるほどな。

FireFoxは仕様に忠実なんだな。

今回はちょっとJavaの備忘録。

Javaで半角全角を変換する処理を書くのは結構めんどいです。

以前、全角英数を半角英数にするという処理を処理を書くのがいやで、ICU4Jなるライブラリで実装したことがありました。

このライブラリのNormalizer#normalize()なるメソッドをつかって


String str = "ABCDEFG12345アイウエオABC123アイウエオ";
String rtn = Normalizer.normalize(str, Normalizer.NFKC);
System.out.println(rtn);

ってすると

ABCDEFG12345アイウエオABC123アイウエオ

全角英数は半角英数に、半角カナは全角カナに。みたいなかんじになります。

で、今回仕事で全ての半角文字を全角文字にしたいという場面に出くわしたもので、またICU4Jで素敵なメソッドがあるのではと調べてみました。
今回見つけたのはTransliterator#transliterate()です。

使い方はこんな感じ。


Transliterator tr = Transliterator.getInstance("Halfwidth-Fullwidth");
String str = "ABCDEFGHIJ1234567890ガ";
String rtn = tr.transliterate(str);
System.out.println(rtn);

とすると、

ABCDEFGHIJ1234567890ガ

となって返ってきました。

インスタンス生成時の引数を "Fullwidth-Halfwidth" にすれば全角→半角変換になります。(空白の変換は出来ないらしい。)

他にひらがなカタカナ変換も出来るらしいです。

いろいろなサイトをみると処理が遅いって書いてあったけど、ワシが実装した環境はマシンスペックに恵まれていたおかげか全く問題にならなかったです。

なんとなくいつの間にか消えていたのに気づいてませんでした。

ファイルはずっと置きっぱなしだったので、ページも復活してみました。

http://www.wasi.name/download.html

復活ついでに、Javaのライブラリもちびっと入れてみました。

FTP操作とファイル/ディレクトリコピーのクラスです。

Commonsあたりに同じような事できそうなライブラリありそうですが、
Commonsなんてよく知らなかったときに作ったモジュールです。

相当古いモジュールだったので、多少リファクタリングかけましたが、
変数名がへんてこだったり、いまだにStringTokenizer使ってたりなんかしますので
気になる方は自由に改変して頂いて結構です。
※ソースコードも置いてあります。

いちおう、簡単なJavadocも置いておきました。

ちなみにFTP操作クラスの使用例はこんな感じです。
==============================================
FTPManager ftp = new FTPManager();
ftp.setDebugLogMode(true); // デバッグログ
ftp.setConnectMode(FTPManager.FTP_PASSIVE); // PASVモード
ftp.connect("192.168.0.211", "user", "pass"); // FTP接続
ftp.changeDir("./public_html/"); // ディレクトリ移動
ftp.putFileByRegExp("./files", ".*\\.html"); // ファイル送信
ftp.close(); // 切断
==============================================
※エラー処理等は割愛してます。

ファイル/ディレクトリコピーのクラスは単純なので、Javadoc見てください。

スタティックなURLをmod_rewriteで生成しようと思って色々調べていたら、便利なサイトを発見!

Webmaster Toolkitmod_rewrite RewriteRule Generator

「SEO 用 mod_rewrite ルールを生成する Webmaster Toolkit」で紹介されていました。

いやぁ、これは便利です。
他にもいろいろ便利なツールがあるようで、これからもお世話になりそうです。