2012年3月20日火曜日

Andru USB Power Charger購入

Andru - Android Robot USB Cell Phone Charger
http://www.powerbygen.com/USB-Phone-Charger_p_8.html

GIGAZINEで紹介されて、ちょっと話題になったAndru君を買っちゃいました。

充電中は目が光る。

付属のUSBケーブルもちょっとカッコイイ。偶にある、充電専用のUSBケーブル(多分、データ用の線を短絡させてる?)ではなく、ちゃとデータ通信も出来るものでした。

パッケージはこんなの。調子に乗って2つ購入。片方は、ちょうど誕生日が近かった友人にあげちゃいました。

3月4日に注文し、届いたのは3月12日でした。
注文は公式ページから。ただし、米国外からの注文はInternationalCheckoutを使うことになります。まぁ、カートへ追加後の案内に従い「International CHECKOUT」のボタンを押してから、InternationalCheckout側の決済ページで支払い情報や送付先住所を入れてやればOK。

内訳

  • 本体:50USD (単価25USD)
  • 配送料&手数料:28.42USD

計:78.42USD(6,525円 1円=0.0119269USD)

2012年3月19日月曜日

AndroidプロジェクトでJUnit失敗する場合

EclipseのAndroidアプリのプロジェクトで、JUnitを使ってテストしようとしたら、JUnit自体がfatal errorでコケた。
テスト対象のクラスは、AndroidのAPIに依存しない形で作ってたやつだったので「あれー?」とか思ったんだけど、どうやらテスト時のclasspathにandroid.jarが入ってるだけで駄目らしい。

環境
・Ubuntu 10.04 LTS
・JDK 1.7
・Eclipse 3.7 Indigo

問題

↓みたいなエラーメッセージがEclipseのConsoleに表示されてJUnitが動かなかった。
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (classFileParser.cpp:3470), pid=12159, tid=3063847792
#  Error: ShouldNotReachHere()
#
# JRE version: 7.0_01-b08
# Java VM: Java HotSpot(TM) Server VM (21.1-b02 mixed mode linux-x86 )
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
#

解決

  1. Run Configulationsを開く
  2. 対象のJUnitテストの設定を選ぶ
  3. Classpathタブでandroid.jarをremove

↑これでOKだと思うけど、参考にしたページでは、ちゃんとjunit.jarがプロジェクトのBuild Pathに入ってるかどうかも確認してるので、まぁ適宜確認する。

参考:
JUnit - うぃっきうぃき - livedoor Wiki(ウィキ) http://wiki.livedoor.jp/hiromi_u/d/JUnit

2012年3月12日月曜日

git graph

git config --global alias.graph 'log --graph --date-order -C -M --pretty=format:"<%h> %ad [%an] %Cgreen%d%Creset %s" --all --date=iso --color'
ってgitのaliasを設定しておくと、 git graph って叩いた時にいい感じにローカルブランチの状態を表示できる。
参考ページでは --date=short になってるけど、時刻が表示されないのは嫌なのでisoにしている。

参考:
<追記 20121205>
--colorオプションを追加

[備忘録]バージョン管理していない状態のeclipseのプロジェクトをgit管理にする

バージョン管理していない状態のeclipseのプロジェクトをgit管理にする手順。
リモートリポジトリがあるわけではなく、とりあえず手元にしかないソースをgit管理状態にしてeclipseでEgitで触れる状態にする。

環境
  • Eclipse 3.7 Indigo
  • Egit 1.1

手順
  1. 当該プロジェクトのディレクトリで git init
  2. PackageExplorerで、当該のプロジェクトの右クリックメニュー → Team → Share Project...
  3. リポジトリ種類を選択するダイアログ → Git を選択。
    ※このダイアログはeclipseに複数のバージョン管理ツールのプラグインがインストールされている場合にだけ表示される。
  4. リポジトリ設定のダイアログで、「☑ User or create repository in parent folder of project」にチェック。
  5. ダイアログ内のリポジトリ一覧で、さっき git init で作ったローカルリポジトリが選択されていることを確認して「Finish」押下。

2012年3月11日日曜日

GalaxyNexus購入

HT-03Aを彷彿とさせるレベルで値崩れしていたSC-04D(GalaxyNexus,http://www.google.com/nexus/)ですが、
先日docomoショップに行ったらフォトパネルと抱き合わせ買い増しで端末代0円だったので買ってしまいました。

SC-04D 本体:0円
フォトパネル 本体:0円
契約事務手数料(XiからFOMAに変更):2100円
契約事務手数料(フォトパネル新規契約):3150円
Xiパケホーダイフラット定額料3月分(Xiスタートキャンペーン適用中):4410円
フォトパネル抱き合わせ購入で貰えるモバイラーズチェック:-5000円

フォトパネルは2年縛り契約とかは不要でした。
契約事務手数料をモバイラーズチェックで相殺して、消費税分とフォトパネルの基本料金(800〜1200円/月)だけの出費でGNが手に入った!と喜んで契約に望んだんですが、わざとXiプランに契約を変更していたのが仇に。
XiからFOMAへ戻す場合、パケット定額料の日割り計算はしてくれないそうです。つまり、今月だけはXiのパケット定額料とFOMAのパケット定額料が両方課金されてしまうという… orz
それでも、買い増し扱いで5000円前後でGNが手に入ったと考えれば善哉善哉。
これでやっとわかめ図鑑が遊べるw

2012年1月8日日曜日

FLASHゲームがクリア出来なかった腹いせにswf中のファイル抜くシェルスクリプト作った

FLASHゲームがクリア出来なかった腹いせにswf中のファイル抜くシェルスクリプト作った。
swfファイルを指定すると、swfextractコマンドで抜けるファイルをすべて抽出します。

githubに置いた。
https://github.com/mstssk/utils/blob/master/swfextractall.sh

swfextractコマンドが必要。
swftoolsインストールしてから使ってね。( $ sudo apt-get install swftools )

<追記> ファイル置き場を変えたのでurl修正

2011年12月24日土曜日

操作についての細かなTips[ひとりtwicca Advent Calendar]

この記事は、twicca廃人になるためのTipsを書き連ねていく「ひとりtwicca Advent Calendar」の8日目として書いています。
……が、12月24日分であるこの記事を実際には1月3日に書いたことはヒ・ミ・ツ。



twiccaの基本的な使い方については「Twicca の使い方」を見ていただくのが一番ですが、その記事に書かれていないor後にtwiccaに追加された機能については記述が漏れています。

今のところ、気付いているのは以下です。
  • タイトルバー押下でタイムラインのスクロールが一番上まで戻る
  • ユーザ情報画面
    ・左上のアイコン押下でアイコン画像拡大表示
    ・「Web」押下でそのURLを開く

↓アイコンを拡大表示した例

2011年12月23日金曜日

twiccaのカラーラベル設定をバックアップする(要root)[ひとりtwicca Advent Calendar]

この記事は、twicca廃人になるためのTipsを書き連ねていく「ひとりtwicca Advent Calendar」の7日目として書いています。



twiccaの便利機能のカラーラベル。
ですが、端末を買い換えたりしたときにカラーラベル設定を引き継げるようには今のところなっていません。
そこで、端末のroot化が必要ではありますが、設定をバックアップできる方法をご紹介。

sdb shellなりroot対応のファイルエクスプローラアプリで次のファイルをバックアップして、新しい端末に移し替えれば良いのです。

/data/data/jp.r246.twicca/shared_prefs/twicca.xml

2011年12月22日木曜日

ふぁぼチェックのススメ[ひとりtwicca Advent Calendar]

この記事は、twicca廃人になるためのTipsを書き連ねていく「ひとりtwicca Advent Calendar」の6日目として書いています。



Twitter廃人に片足突っ込んでる皆さんなら、自分のツイートがどれくらいふぁぼられているかどうか気になる筈です。
そこで便利なtwiccaプラグインを紹介。

favstar.fm プラグイン for twicca:https://market.android.com/details?id=jp.r246.twiccaplugins.favstarfm
ふぁぼったープラグイン for twicca:https://market.android.com/details?id=jp.r246.twiccaplugins.favotter
Twistar プラグイン for twicca:https://market.android.com/details?id=jp.mstssk.twiccaplugins.twistar

favster.fm、ふぁぼったー、TwistarのそれぞれのサービスのWebページに簡単に移動できます。
twiccaのメニューからは、自分の各サービスのページへ。
ユーザ情報画面からは、そのユーザーの各サービスのページへ。

それぞれのプラグインの設定画面はこんな感じ↓


Xperia rayのテザリング制限解除[要rooted]

※ 以下は保証外の操作について記述しています。真似や参考にしてrayちゃんが「綺麗な顔してるだろ…死んでるんだぜ…それ」な状態になるかもしれないのでオススメしません。



docomoのXperiaシリーズ(他の機種でも?)だと、特定のAPNでないとテザリングが出来ないようになっている。
普通のdocomo SIMでないSIM(Xiとかb-mobileとかイオンSIMとか?)だとつらい。

対象外のAPNでテザリングをONにしても以下のように「Network error occurred」とエラーメッセージが表示されてすぐにOFFになる。

/data/data/com.android.providers.settings/databases/settings.db を覗くと以下のようなテザリングの制限設定がされている。
(左端の数値は勝手に振られるただの連番なので意味はない)
sqlite> select * from secure where name like 'tether%';
29|tether_dun_apn|docomo tethering,dcmtrg.ne.jp,,,,,,,,,440,10,0,*
30|tether_dun_required|1

参考にした次のページによれば、これのtether_dun_requiredの値を0にしてやれば制限が外れる。
俺達のメガネ Xperia arc(SO-01C) 2.3.4アップデートでの Network error occurred 対策
http://chaosore.blog38.fc2.com/blog-entry-317.html

参考ページではSQLite Editerを使っているが余計なアプリをあまりインストールしたくないので、SQLを直接叩くことにした。
必要なsqlite3コマンドは、本来はAndroid SDKのエミュレータ上でしか使えない。ここでは、インストール済みだったTitanium Backupが自身の機能のために持っているsqlite3コマンドを使った。
以下、一通りの操作。
user@localhost:~$ adb shell
$ su
# /data/data/com.keramidas.TitaniumBackup/files/sqlite3 /data/data/com.android.providers.settings/databases/settings.db
SQLite version 3.7.6.3-Titanium
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select * from secure where name = 'tether_dun_required';
30|tether_dun_required|1
sqlite> update secure set value = 0 where name = 'tether_dun_required';
sqlite> select * from secure where name = 'tether_dun_required';
30|tether_dun_required|0
sqlite> .exit
# exit
$ exit
※ 2回のselectは値の確認のためで、別に必要な操作ではない。

設定を書き換えたらrayを再起動。
テザリングをONにしても「Network error occurred」が出なくなってる筈。

※ パケット通信料についてはどうなるか知らん。

2011年12月21日水曜日

下書きプラグインを使う[ひとりtwicca Advent Calendar]

この記事は、twicca廃人になるためのTipsを書き連ねていく「ひとりtwicca Advent Calendar」の5日目として書いています。


今回は豊富なtwiccaのプラグインの1つ「下書きプラグイン」を紹介します。
拙作を紹介するあたりネタ切れ感があるのはご愛嬌。

マーケット:https://market.android.com/details?id=jp.mstssk.twiccaplugins.draft

プラグインをインストールすると、twiccaのツイート画面のプラグイン一覧に「保存済みの下書きを一覧」「下書きを保存」の3つのメニューが追加されます。
「下書きをクイック保存」はオプション機能で、後述の設定画面で有効にしてから表示されるようになります。


「保存済みの下書きを一覧」を選択すると、保存済みの下書きを選択して読み込みます。
「下書きを保存」を選択すると、新規保存するか保存済みの下書きに上書き保存します。
「下書きをクイック保存」を選択すると、一覧画面を表示せずに新規保存します。

設定画面では次の項目が設定できます。
  • 「クイック保存」機能の有効/無効
  • 確認ダイアログの表示
    • 「上書き保存」時
    • 「削除」時
    • 「読み込み」時
    • 「編集中のみ」(読み込み時、既に入力中のツイートがある場合のみ確認ダイアログを表示する)

2011年12月20日火曜日

webでもカラーラベルを使う[ひとりtwicca Advent Calendar]

この記事は、twicca廃人になるためのTipsを書き連ねていく「ひとりtwicca Advent Calendar」の4日目として書いています。



twiccaといえばカラーラベル機能!
そのカラーラベル機能をwebのTwitterでも使える方法があります。

それが拙作のTwitterColorLabel2 http://userscripts.org/scripts/show/89319


FirefoxとGoogleChromeで動きます。他のuserscript対応ブラウザでもいけるかもしれませんが未検証。

蛇足:
名前に2が付いてる理由は、むかーしのTwitterのUI用のTwitterColorLabelがあるから。
そういやまたTwitterのUI変わるみたいだけど、うちのアカウントにはまだ反映されてない…

2011年12月19日月曜日

twiccaサポーターズになる[ひとりtwicca Advent Calendar]

この記事は、twicca廃人になるためのTipsを書き連ねていく「ひとりtwicca Advent Calendar」の3日目として書いています。



振り込めない詐欺」という言葉があります。
無償で公開されているが、それがとても素晴らしく是非対価を払いたいと思えるような場合を指す言葉です。
twiccaはまさにその言葉に相応しいと言えるでしょう。

でも大丈夫!
twiccaはなんと振り込めるんです!

twiccaのメニューで「twiccaサポーターズ」を見てみましょう。
サポーターになる期間を選択しサポーターチケットを購入して、サポーターになることができます。

ちなみに、サポーター期間中は実験中機能を有効にすることが出来ます。
実験中機能なので気付くと一般機能に昇格してたりしますが、今のところ(ver 0.9.20a)では以下の機能が特典で使えます。

  • ステータスバーのtwiccaのアイコンから起動する機能の選択
    • タイムラインを開く
    • ツイートする
    • 写真を撮影してツイートする
  • twitpicの動画プレビュー機能
  • ツイートの改行表示
  • マルチアカウント

2011年12月18日日曜日

別のアプリでtwiccaのプラグインを使う[ひとりtwicca Advent Calendar]

この記事は、twicca廃人になるためのTipsを書き連ねていく「ひとりtwicca Advent Calendar」の2日目として書いています。



twiccaを既にお使いの方なら、twiccaのプラグイン機能も使っていることでしょう。
Androidマーケットでtwiccaで検索すると、twicca本体だけでなく、多種多様なプラグインがサードパーティによって公開されているのがわかります。

実は、twiccaの他にもこのプラグイン達を使えるクライアントアプリがあるんです。

それは「メガネケエス」と「アカイトリ」です。
この2つのアプリは、どちらもTwitterクライアントとしては異色な部類に入りますが、TwitterのStreaming APIを使用しており、twiccaに出来ないリアルタイムのタイムライン受信が出来ます。

twiccaとStreaming APIに対応した上記アプリを組み合わせて使うことで、きっと廃人への道を進んでいけることになるでしょう。

2011年12月17日土曜日

twiccaをホーム画面にする[ひとりtwicca Advent Calendar]

twiccaエヴァンジェリストのmstssk aka あんどろいどりんごです。
この記事は、twicca廃人になるためのTipsを書き連ねていく「ひとりtwicca Advent Calendar」の1日目として書いています。
「もう12月17日なのに今更AdventCalendarかよ」というツッコミはさておき、なんとなく思いついたのでクリスマスまでつらつら続けてみたいと思います。

twiccaとは

言わずと知れたAndroid用のTwitterクライアントアプリです。
Androidマーケットのtwiccaページ
作者のあおやまさんは、高名なプログラマであるTim Bray氏のブログにドヤ顔を載せた数少ない人物として有名です。

twiccaの基本的な使い方は「Twicca の使い方」にとても詳しく書かれています。初心者の方はそちらに目を通されたほうがいいでしょう。
むしろここから先は読まなくてもいいでしょう。

twiccaをホーム画面にする

では、twicca廃人になるための第一歩、twiccaをホーム画面にしましょう。
Home Commanderをインストールし、スクリーンショットの様にホームキー1回押しでtwiccaが起動するように設定します。


通常のホーム画面は2回押しあたりに設定しておきましょう。

ちなみに、随分前ですがtwiccaをホーム画面にするだけのアプリ(ホーム画面のIntentを受け取ってtwiccaを起動する)を作って本当にtwicca以外なにも出来なくなったことがあります。

これでホームキーを押すとtwiccaが起動するようになりました。

これでも飽き足らない方は、ホームキー2回押しにtwiccaのツイート画面ショートカットを設定したりすると良いでしょう。

2011年12月9日金曜日

Androidアプリで使えるJSONライブラリ比較

これは、Android Advent Calendar 2011の12月9日エントリです。



「Androidはオワコン」なんて話が聞こえてくる昨今、いかがお過ごしでしょうか?
HT-03A以来のAndroidユーザーとしては寂しい悲しい限りです。発売後のこんな頃や、こんな頃が懐かしいですね。

ですけど、街中を歩くと、多くの人がAndoid機を持っているのがわかります。
REGZA Phoneとかよく目に付きますね。デカイし。

それに、Andoid機を買って初めてプログラムしてアプリを作ってみた学生さんとか、Andoid関係のお仕事の話とか結構聞こえてきます。
今後もそういうのは続いていくんじゃないでしょうか。

そして、趣味か仕事かを問わず、Webアクセスしたりするアプリの場合、APIを叩いてJSON形式のデータをパースしなきゃいけないことが多々あると思います。
そこで、JSONのライブラリをいくつか簡単に比較してみました。
下3つは使い方がよくわからんかったので、参考に並べただけです(汗
言い換えれば、いきなり持ってきても取っつきやすいものだけ紹介。



パース・エンコードの処理の計測には、自分のタイムラインのjsonを1M分繋げたファイルを使いました。/res/raw/からファイルをInputStreamで取得して使用。
計測に使った機種はXperia Ray

JSONIC

国内ではオーソドックスなんじゃないかと勝手に思っているライブラリです。
ただ、上表の通り速度は見劣りします。
比較的少ないコード量でかゆい所に手が届くようになってますけど、proguardでの難読化に失敗するので、それが解決出来ないとAndroidアプリで使うのはつらい。
使用例:

// パース。第2引数でクラスを指定しない場合、戻りはObjectになるが、中身はArrayListかLinkedHashMap。
InputStream is = ほげ;
Hoge[] hoges = JSON.decode(is, Hoge[].class);

// シリアライズ
String json = JSON.encode(hoges);


google-gson

この記事書こうと思って調べるまで存在を知りませんでした。正直すまんかった。
パース速度は爆速。シリアライズは最遅
なんなんだ。いったいなんなんだお前。
シリアライズ時に、型指定を省略すると更にアホほど遅くなります。
POJOでないクラスのフィールドに対応させるには、JsonSerializerとJsonDeserializerインターフェースを実装します。
proguardを使う場合、JSONをマッピングするPOJOクラスを難読化から除外する設定が必要です。
使用例:

// パース。第2引数で必ず型を指定する必要がある。Mapとか指定してもとりあえずは動く。JSONIC同様に、ArrayListかLinkedHashMapのインスタンスが返る。
InputStream is = ほげ;
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
Hoge[] hoges = new Gson().fromJson(reader, Hoge[].class);

// シリアライズ。第2引数の型指定は省略できるが、そうすると激遅。
String json = new Gson().toJson(hoges, Hoge[].class);


JsonPullParser

ファイルサイズが超軽量!
しかし、特色は軽量であることより、指定したPOJOクラスのパース/シリアライズ処理クラスをビルド時に自動生成する事だろう。それ故に、パースとシリアライズ共に安定して高速な処理を実現しています。
逐次処理も出来るし パースもシリアライズも早い。凄いぞ強いぞ僕らのJPP
ただ、パーサークラスを生成させるPOJOクラスとそのフィールドにアノテーションをいちいち付けなきゃいけないのはちと面倒。
POJOでないクラスのフィールドに対応させるには、TokenConverterを実装します。参考として以前に試しに書いてみたDateConverterをどうぞ。ええ、SimpleDateFormat使っちゃってるのでスレッドセーフじゃありません(最近知りました)。
使用例:

// パース。Hogeクラスの専用パーサーとしてビルド時に自動生成されたHogeGenクラスを使用
InputStream is = ほげ;
List<Hoge> hoges = HogeGen.getList(is);

// シリアライズ。直接文字列を返す手段はサポートされておらず、Writerクラスを経由する。
StringWriter sw = new StringWriter();
HogeGen.encodeListNullToNull(sw, hoges);
String json = sw.toString();


半分くらい深夜のテンションで書き殴りましたが、いかがでしょうか。
多分コレをまっさきに読むであろうAndroidersよりも、いつかググってたまたまやってくる人向けの内容になりました。

Androidを好きになってくれるエンジニアが増えてくれることを願って。


私信:読んだ人が失禁して泣いてパンツを洗いながらJPPの採用を決めるような魔導書レベルの記事は書けませんよ流石に

2011年6月21日火曜日

Commit to github with Egit(Eclipse plugin) on Ubuntu10.10

備忘録

環境
・Ubuntu 10.10
・Eclipse 3.5
・Egit 0.4.9

gitはインストール済み。
Eclipseは日本語化してません。

■ gitの設定(必須ではない)
$ git config --global user.name "yourname"
$ git config --global user.email "your.email@address.com"
この設定は、Eclipseの起動時に(Egitがインストール済みなら)読み込まれて、Egit上でコミットする場合も使用される。
Eclipse起動前に変更しないと、反映されない気がする(多分)。

■ ssh-keygenコマンドで公開鍵作成
パスフレーズとか聞かれる
id_rsaとid_rsa.pubの2つのファイルが生成されるので、~/.ssh/に移動しておく。
id_rsa.pubの中身をコピペして、githubのAccount Settings > SSH Public Keysで追加しておく。
titleは何でもいいらしいので、適当に。

■ Egit(Eclipseのgitクライアントプラグイン)のインストール
update-site → http://www.jgit.org/update-site/

■ Eclipse上でgitのリポジトリ生成
パッケージエクスプローラで、対象のプロジェクトのコンテキストメニュー > Team > Share Project
ダイアログでGitを選択(多分EclipseにデフォルトでCVSが入ってるので、CVSかgitかどちらを使うか必ず聞かれる気がする)
次のダイアログでリストから対象のプロジェクトを選択 > リスト下に選択したものが表示されるので「Create」ボタン押下 > finishボタン押下

■ プロジェクトのファイルをstage
リポジトリを生成したプロジェクト下の、コミットしたいファイルのコンテキストメニュー > Team > Add to Version Control

■ ファイルのローカルコミット
コンテキストメニュー > Team > Commit...

■ リモートリポジトリの生成
githubでリポジトリを生成しておく、リポジトリのURIが表示された事を確認する。
そのURIはリモートリポジトリへのコミット時に使用する。↓

■ リモートリポジトリ(github)へのコミット
プロジェクトのコンテキストメニュー > Team > Push to...
URIにリモートリポジトリのURIを入力。
ただし、Protocolはgit+sshに変える。
Userは「git」
Passwordは空のままで良い。
以下のスクリーンショットを参考に。
Nextボタン押下
公開鍵のfingerprintとか、~/.ssh/known_hostsファイルを作っていか、とか確認される
パスフレーズを求められるので入力。
次のダイアログでコミット(Push)先の設定をして、Next/Finish

次回以降も、同じ手順で。

□ 問題
リポジトリのURIが保持されてくれないので、仕方なくコミットの度にgithubのリポジトリ情報ページからコピペしてるけど、他の人はどうなの?

□ パッケージエクスプローラのフィルタ設定
パッケージエクスプローラは初期設定で、いくつかのファイルを表示しない設定になっている。(ドットファイルとか)
それらを表示しstageしたいなら、パッケージエクスプローラペインの右上の▽からFiltersを選択し、ダイアログでフィルタ設定を変更する。


□ 参考
http://womo.nconc.net/2010/03/04/github
http://blog.katsuma.tv/2009/02/first_github.html
http://d.hatena.ne.jp/keita_yamaguchi/20080409/1207752188

2011年3月26日土曜日

Run VMware disk image on VirtualBox 4.0.4(wasbook's appendix)

先日こんな本を買いました。

「体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践 徳丸浩(著)」
http://www.amazon.co.jp/gp/product/4797361190

付録として、脆弱性のサンプル環境のvmwareの仮想マシンイメージが付いてきます。
Linux版のVMwareがあるので、ちょっくらインストールすれば済むんですけど、VirtualBoxを3から4に上げてなかった事を思い出し、しかもVirtualBoxでVMware用のディスクイメージが使えると聞いて、いざ実践しました。

以下、簡単な覚書。

wasbook付属のvmイメージをVirtualBox4.0.4で起動する

環境
  • Ubuntu 10.04
  • Thinkpad X201s
  • VirtualBox 4.0.4

仮想マシン作成 ざっくり手順

  1. 新規仮想マシンの作成
  2. ターゲットを[Linux]/[Ubuntu]に
  3. 次へ次へ…
  4. [仮想ハードディスクファイルの選択] > [既存のハードディスクを使用]
    wasbook.vmdkを選択(事前にwasbook.zipを解凍しておいて適当な所に置いておく)
  5. 次へ → 完了


仮想マシンの起動 前準備

  • 仮想マシンの設定の システム > プロセッサ > PAE/NXを有効化 にチェックする。
    (これをしないと起動時にエラーで止まる)
  • [ネットワーク]タブ アダプタ1 で [割り当て]を「ブリッジアダプタ」に変更


仮想マシン起動後 eth0がいない場合

  1. rootでログイン
  2. ifconfig → eth0がいない
  3. ifconfig -a → なぜかeth1がいたりする。(eth3だったりすることもある)
  4. vi /etc/network/interfaces → eth0 をeth1 に書き換える
  5. /etc/init.d/networking restart → ネットワークデーモン再起動
  6. ifconfig → eth1にIPアドレスが割り振られてる
  7. ホストマシンのwebブラウザでそのIPアドレスを見れば、付録のサンプルが出てくる

<追記>
eth0問題について、こんな対応策も
https://twitter.com/#!/andropenguin/status/79804762895286272

2011年2月7日月曜日

FindBugs with Android app developing

EclipseのFindBugsというプラグイン。
その便利さは言わずもがな。
Androidアプリ開発でも必要だろ、というわけで導入手順メモ。

環境:
・Thinkpad X201s
・Ubuntu 10.04 LTS Lucid Lynx
・Eclipse 3.5 Galileo
・Android SDK revision 8

インストール

update siteでFindBugsをeclipseにインストール
http://findbugs.cs.umd.edu/eclipse
参考(http://findbugs.sourceforge.net/downloads.html

文字化け

これだけで、あとはeclipseを再起動して使用可能になるが、FindBugsのメッセージが文字化けしてしまっている。
eclipseのインストールディレクトリ/plugins/edu.umd.cs.findbugs.plugin.eclipse_****/findbugs-plugin.jar の中にあるmessages_js.xmlがsjisになってしまっているから。

Ubuntuであれば、findbugs-plugin.jarを直接書庫マネージャで開き、中のmessages_js.xmlをUTF-8指定して改めて上書いて保存すれば、ちゃんと元のjarファイルにも反映してくれる。

Rクラスを除外

Android SDKによって自動生成されるリソースクラスにはキャメルケースじゃないものがあるので、FindBugsに引っかかってしまう。
以下の内容で設定xmlファイルを作成し、eclipseの設定からFindBugsのExclude filter filesにそのファイルを指定してやると、以降のビルド時にはR以下のクラスを除外してくれる。

<FindBugsFilter>
    <Match classregex="\w+(\.\w+)+\.R\.\w+" />
</FindBugsFilter>

ただし、どうも手元の環境だとビルド時にちゃんと除外してくれない場合があった。全体の設定で指定するか、プロジェクト個別の設定で除外するかによっても、ちょっと挙動が変わっている気がするがちゃんと原因を切り分けられていない… orz

2011年1月20日木曜日

Reset crashed Bluetooth configures in Ubuntu 10.04 lucid

<追記>
20111103
・ボタンの入力キーの取得値について改めて見てみたらやっぱり間違ってたのを修正。
・このエントリの前に http://civic.xrea.jp/2011/11/02/zeemote-bluetooth-mouse/ を見るのがオススメ。
 以下の記述でZeemoteについての入力値などはキーパッドモード時のもの。記事を書いた当時はモードがあることに気づいてませんでした。

とりあえずメモ:
一度、bluemenをインストールし使用した後、bluemenをアンインストールしても、標準のbluetoothツールが使用できなくなった問題。
動作しているが、ウィンドウ内の各ボタン/接続機器履歴がグレイアウトして何も操作できない。
/var/lib/bluetooth// ディレクトリ以下に設定が保存されているので、
/var/lib/bluetooth/ を /var/lib/bluetooth_backup/ として再起動したら、/var/lib/bluetooth/ 以下が再作成されて、初期状態でBluetoothツールが使用できるようになった。

-- 以下本文

最近、おもちゃを手に入れたので、Ubuntuでいろいろ使えないものかと弄ってたんですが、その時の覚書。
推敲してないので語尾とか滅茶苦茶。

環境:
・PC : Thinkpad X201s
・OS : Ubuntu 10.04 lucid

zeemoteをマウス替わりに出来ないものかと思い、さっそくbluetooth接続を試みたのですが、標準のbluetoothツールだとどうにもペアリング出来ませんでした。
zeemoteは種類不明なデバイスと扱われるものの、PCからちゃんと見えるのですが、ペアリング時にパスキーの確認が必須らしく、最後の最後でペアリングに失敗します。

そこで、別のbluetoothクライアントを使ってみようと思い、bluemenを標準リポジトリからインストール。

bluemenではパスキーの入力は無しでzeemoteとペアリング出来たので、単にクライアントの仕様の問題だとわかりました。
bluemenではそのままzeemoteを入力デバイスとして設定できる様で、zeemoteをキーボードとして接続してくれました。
その際には、以下のような入力が得られました。

(記憶だけを頼りに書いているので下記の内容は覚え違いがあるかもしれない)
スティック:カーソルキー上下左右
Aボタン:return
Bボタン:入力なし
Cボタン:escape
Dボタン:backspace

そこまで来たところで、もう一度標準のbluetoothツールで試そうとbluemenをアンインストール。
そしたら標準ツールのウィンドウ内の各ボタンなどがグレイアウトしていて使用できない。
(ウィンドウは一応立ち上がる)

bluetooth関連のパッケージをいろいろ再インストールしてみたりしたが、改善せず。
破損した設定ファイルが残留し続けているのではないかと思い、設定ファイルの場所を探す。

設定ファイルの場所 /var/lib/bluetooth//

上記ディレクトリを一旦移動して、再起動したら標準ツールが初期状態で動作した。

次は、改めてbluemenでzeemoteとペアリングして、以下を試そうと思う。

[ubuntu] Zeemote as a mouse ? - Ubuntu Forums
http://ubuntuforums.org/showthread.php?t=1201572

2010年12月4日土曜日

Android App: Kanji Viewer

拙作のAndroidアプリ「漢字ビューワ」の紹介
字をでっかく表示します。それだけです。

横表示とかも。

白黒反転したり、フォントを変更したりできます。
スクリーンショットは筆順フォント(http://sites.google.com/site/nihilistorguk/)を使いました。

ダウンロード:
http://market.android.com/details?id=jp.mstssk.kanji_viewer
(published for japanese Android market only.)

TODO:
・Galaxy Tabなど画面サイズがアレな端末への対応

<追記 2010-12-12>
何故かiPhone版が出来ました。
http://mkkptechnote.blog12.fc2.com/blog-entry-9.html

Android app's selector.xml

Androidアプリで自前でボタン用の画像なんかを用意した場合に、
・フォーカスがあった状態
・押された状態
・通常の状態
を定義するのには、以下の様なXMLファイルを作ってやったりします。
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- bad order -->
    <item android:state_focused="true" android:drawable="@drawable/item_focused" />
    <item android:state_pressed="true" android:drawable="@drawable/item_pressed" />
    <item android:drawable="@drawable/item_normal" />
</selector>

そして、ここで落とし穴。

ファイル中のitem要素はボタンの状態が変化した際に上から順に評価されていき、状態に合致するものを見つけたら、それ以降のitemは見に行きません。

http://developer.android.com/intl/ja/resources/tutorials/views/hello-formstuff.html
Note: The order of the elements is important. When this drawable is referenced, the s are traversed in-order to determine which one is appropriate for the current button state. Because the "normal" image is last, it is only applied when the conditions android:state_pressed and android:state_focused have both evaluated false.

具体的には、上のitemの順序の場合には、「フォーカスがあった状態で押す」という事をした時には、state_focusedが選択されてしまい、「押してんのに押した場合用のエフェクトにならない」という不具合が起きてしまいます。
対応策としては、state_pressedの優先順位を上げたいので、まぁ順序を変えてやればいいだけの話。
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- correct order -->
    <item android:state_pressed="true" android:drawable="@drawable/item_pressed" />
    <item android:state_focused="true" android:drawable="@drawable/item_focused" />
    <item android:drawable="@drawable/item_normal" />
</selector>

2010年8月12日木曜日

Ubuntu 10.04 LTS Lucid Lynx on Thinkpad X201s

遂に先月Thinkpad X201sを買っちゃっいました。
そして、即座にUbuntu10.04を入れて使用中。

ビックリするぐらい何もしなくても普通に動いてくれました。
ウルトラベースのDVDドライブもちゃんと認識して動作する(ただ、少し挙動がおかしい気もする)し、そのウルトラベースのホットプラグも大丈夫でした。
Trackpointも初めっからマウスとしてちゃんと動いてくれます。
ただし、中ボタン押しながらのスクロールをするにはgpointing-device-settingsをインストールして設定してやる必要がありました。
http://live.gnome.org/GPointingDeviceSettings

特定のボタンだけ認識してくれないなんて問題もありません。
電源ボタンは長押ししないといけない仕様だって気付くのに半月かかりましたが… orz

あとは、DVDが再生できないって問題がありました。
忘れがちですが、DVDドライブってリージョンコードを設定してやらないとDVDを再生できないんですよね。
市販のメーカー製PCを買って使う分にはリージョンコード設定された状態で出してたりして問題無いし、もしくはWindowsだとDVDプレイヤーが勝手に設定しちゃったりしてるのかな。
まぁ、Thinkpadを直販で買って速攻でUbuntu入れた馬鹿にだけ降りかかる問題です。
リージョンコードの設定にはregionsetってのを使うとOK。
http://linvdr.org/projects/regionset/

ともかく、X201sを買おうか迷っているUbuntuユーザさんはポチっても損はしませんよ

2010年7月28日水曜日

How to grow grass of laugh in Lucid with Ibus.

やっとのことさ、Ubuntu 10.04 Lucid Lynxを導入したんですが、IMEがIbusになってて困ったことがひとつ。

草が生やせない。

wキーを押しつづけると、「っっっっっっw」になっちゃうんですよね。
ちょっとメニューを見たところでは、SCIMでは出来たローマ字変換テーブルへの追加・編集がIbusでは出来ない模様。

どうしたもんかと思っていたら、ローマ字テーブルの変更について解決策を見出していた方がいらっしゃいました。

iBus-Anthyを使って "xn" で "ん" と打てるようにする
http://d.hatena.ne.jp/tettou77-2/20091108/1257689047

Ibusはローマ字の変換テーブルをPythonのスクリプトコードの中にそのまま持っちゃってるので、いっそそのコードを書き換えてしまえばOKというわけ。

wキー入力による「っ」の出力については、私の今の環境だと /usr/share/ibus-anthy/engine/tables.py の309行目に
u"ww" : (u"っ", u"w"),
というところがあったので、行頭に#を追記してコメントアウト。
あとはIbusを再起動してやると、
「wwwwwwwwwwwwwwwwwwwwwww」
この通り。

P.S.
半角なのはご愛嬌。

2010年6月16日水曜日

Tohoku Android group 6th session.

5月30日に行われた日本Androidの会東北支部第6回発信会に行ってきたんですが、すっかりブログに書くのを忘れてそのまま半月経過。

とりあえず、何故かiPad尽くしの会だったことは書き残しておきます…

<追記>
第6回じゃなく第7回になってたのを修正

2010年5月27日木曜日

twicca's functions

Androidで動作するTwitterクライアントソフトで、一番気に入っているtwicca(実はまだBETA版)というアプリの機能まとめ
(あんまり当たり前な機能は、独断と偏見により一覧から省いてます)

※この記事の内容はもう古くなっています。
 この記事執筆後のアップデートにより、さらに機能が追加されたり、または削除されたりしています。
 参考程度に読んでください。

・カラーラベル機能
 ユーザを色分けして表示
・会話を表示する
 ツイートの返信履歴を辿り一覧表示
・ツイートの共有
 他のアプリに発言内容のテキストを渡す。
 発言者名、発言日時、使用クライアント名、URLも渡る。
・一つのツイートに含まれる全ユーザ宛にツイート
・ツイートを複数選択して全ユーザ宛にツイート
 TL画面でそれぞれのツイートを長押しで複数選択可能
・TLに公式RTを表示しない設定
・非公式RTに返信先情報を付与するかどうかの設定
 ツイート設定画面で

・非公式RT時に返信先情報を付与するかどうかを選択可能(v0.7.20から)
 「引用して返信する」
  … 返信先情報付き。返信と同様に、返信先ユーザーとの共通のフォロワに見える。
 「引用してリツイート」
  … 返信先情報無し。通常のツイートと同様に、フォロワ全員に見える。
・非公式RTの形式の選択
 RT,QT,viaをツイート設定画面で
・画像/動画の投稿
 標準はyfrog。twitpic,はてなフォトライフにもプラグインで対応
 作者自身の手によるプラグイン … yfrog(twicca本体に組込み), twitpic, はてなフォトライフ
 有志の手によるプラグイン   … facebook, flickr, picasa
・yfrog,twitpic,twitgoo,携帯百景などの画像プレビュー
 画像リンクを踏むとブラウザに遷移せずに画像を表示可能
 http://〜.jpg のようなただの画像ファイルへのリンクにも対応
・ツイート中の短縮URLの展開
 ツイート選択メニューでURLを長押しでサブメニュー表示
・URLを短縮URLに変換
 ツイート入力画面で、矢印が向き合ったアイコンを押下
・オートコンプリート機能
 「@〜」と入力した時にユーザ名を前方一致で入力補完するダイアログ表示
・140字を越えるツイートをTwitLongerで投稿、または文字数自動調整。
・使用したハッシュタグを保存し、ツイート画面/検索画面で呼び出し
 ハッシュタグを含むツイートをすると保存。非公式RT時には保存しない設定も可。
 ツイートのサブメニューでハッシュタグ長押しでも保存。
 保存済みハッシュタグ一覧で長押しすると削除可能。
・音量ボタン/検索ボタン/カメラボタンなどのハードウェアキーに操作を指定可
 デフォルトは音量ボタン上下でスクロール、検索ボタンで検索画面に遷移。カメラボタンは忘れた。
・非同期post
 ツイート送信処理中でも他の操作が可能
・ツイートにフッターを自動挿入
・返信時に@の前にドット記号を自動挿入する設定
・現在地情報を付与してのツイート
 地図表示して現在地を選択可能
・他のアプリからのURLの共有時に、Webページタイトルを取得
・TL/自分宛のツイート/DM それぞれの更新チェック
 定期チェックとTL更新時に同時チェック。
 更新があった場合の通知方法は、通知音・LED・バイブをそれぞれ選択可能。LED色も選択可能。
・ブロック中のユーザ一覧表示
・友達を検索
・ユーザを直接表示
 ユーザ名を直接入力して詳細表示。オートコンプリートする
・検索画面にて検索キーワードをプラグインから取得
 現在、buzzterプラグイン/音声入力プラグインがある
・詳細なプロフィール設定
 アイコンのアップロード/現在地ジオタグの挿入
・各画面へのショートカットをホームに設置可能
 ツイート画面、選択したユーザの画面、選択したリストの画面、選択した検索ワードの検索結果画面
 (検索ワードは保存した検索ワードとtwiccaの保存済みハッシュタグから選択)
・ショートカットウィジェットをホーム画面に設置可能
 ツイート画面、ホームTL、自分宛TL、DM画面、検索画面
・選択したユーザ宛の発言(返信)を検索
 返信のみを表示(ツイートが@〜で始まるもののみ)。こんな感じ
・Verified Accountなユーザに✹マークが付く
・リスト機能全般
 リストの新規作成・編集、リストへのユーザの登録/削除
アイコン解像度選択
 TLに表示するアイコン画像を高解像度または低解像度に変更できます。
 表示するサイズが変更されるわけではありません。
ユーザープラグイン機能
 ユーザー情報からゴニョゴニョする機能。
 現在、twiccaの作者様自身の手によるfavotterFavstarのプラグインがある。twiccaのユーザー情報画面からそれらのサービスのWebページにサクッと移動できる。
 ちなみに拙作のTwistarプラグインもあったりします。機能は同じ。
FroYoでのSDカードへのインストールに対応
 現在は、SDカードへのインストール機能は仕様上の都合により削除されています。

このエントリを最初に書いたとき:ver 0.7.19
最後に確認したばーじょん:ver 0.7.31
(ただし、SDカードインストールの削除については更にその後の追記です。)

公式ページ http://twicca.r246.jp/
スマフォ向けページ http://lab.r246.jp/twicca/

<追記 2010-05-28>
読みやすいように少し書式を変更。いくつか追記。
今後も気づいたことがあったら追記する。面倒なのでchangelogはいちいち残さない。(2010-09-19 面倒臭がらない限りにおいて残します)
<追記 2010-09-05>
非公式RT時の返信先情報について更新
画像アップロードプラグインについて追記
<追記 2010-09-19>
v0.7.31のユーザープラグインとSDカードへのインストールについて追記
<追記 2010-12-19>
SDカードへのインストール許可の無効化について修正。

2010年5月1日土曜日

Tohoku Android group 5th session.

第5回 日本Androidの会 東北支部 発信会に行ってきました。
第4回は仕事の都合がつかず出席できませんでしたが、今回は休日開催という事もあり遅刻せず出席出来て、懇親会の3次会までいました。今考えると、テンションがおかしかったと思います。

今回の発信は2本。以下、感想

・「Android vs iPhoneOS~アプリ開発者から見たプラットフォームの違い~
旦那さんがiPhone、奥さんがAndroid担当というご夫婦での発表。どうにも話の内容がiPhoneの方が濃かった気がするのはご愛嬌。
現在の各々の販売台数、マーケットへの登録アプリ数、さらにアプリのうち有料/無料の割合などの数値を出しての比較は、改めて現状を知ることが出来てよかったです。

印象に残ったのは、有料アプリの割合の比較。
台数とマーケットのアプリの登録数の比率はiPhoneもAndroidも大差ないにも関わらず、iPhoneでは有料アプリがおよそ25%なのに対してAndroidは50%程、という大きな違いがあったこと。「AndroidはFREEの文化が色濃いのでは」という話も出ていましたが、私は「単純に日曜プログラマの比率が多く、ビジネスとしてアプリを公開している割合が少ないだけなのでは」という気がしました。

発表で使われた資料には、AndroidマーケットとApp Storeだけでなく、Ovi Store(Symbian向け)などについても載っていました。アプリのマーケットのローンチはどのプラットフォームも最近と言えますが、Android以外は何年も前から普及しているプラットフォームです。そういったプラットフォーム向けのマーケットの有料アプリの比率が20〜25%程度だったので、Androidへのビジネス参入が増えればAndroidマーケットの有料アプリの比率も同じ程度に落ち着くのではないでしょうか。

ただし、有料アプリ販売モデルとは違う、AdMobの様な広告モデルの話題も耳にするので、後追いのAndroidは他と違う発展を遂げるのかもしれず興味深いです。

・ライトニングトーク「アプリ開発からMarket登録まで
「磯野ー! アプリ作ってマーケットに公開しようぜー!」ってお話。

アプリ公開までの手順は、ファイルに電子署名をしたりする必要があったりなど見落としがちな事があるから、未経験者はぶっつけでやるよりは何か習作的なアプリ作って一度公開するまでの手順をやってみるべきだそう。

それに、実際アプリを公開してみると「市場は正直」というのがよく分かる、と。
1ツ星付けられる事もあれば、スペイン語で「素晴らしいよ!」みたいな興奮したメールが飛んできたりもするそうな。

あと、意外と手こずるのがアイコン作成。(そういえば別の某ライトニングトークで、1日で作ったアプリのアイコンを作るのに3日かかったなんて話も聞きました)
AndroidアプリのアイコンについてはAndroid Developersサイトにガイドラインが載っているので、一応はそれに沿って作るべき何でしょうけども、正直言って面倒くさいよね、と。
今回のライトニングトークの中では「とりあえずGimpでそれっぽく作っとこうぜ」という感じ。

AdobeのPhotoshopやIllustratorを持ってる人はそれを使えばいいんでしょうけども、無くともGimpとInkscapeを使えばまぁまともなアイコンは作れると思います。

ちなみにVer 1.x系と2.x系ではアイコンのガイドラインが大きく変貌していて驚愕しました。

以上、感想。

発信会の後は懇親会。
1次会:飲み屋 2次会:ダイエー地下 3次会:焼肉屋 という、不思議な流れでした。
あ、あと、Androideaという東北支部のサブグループに正式に参加することになったりしました。

参考:
某ライトニングトークってのはたしか、Android Developers Forum in Tokyoでのタオソフトウェアの谷口社長のだったと思います。
http://itpro.nikkeibp.co.jp/article/COLUMN/20100420/347292/?ST=android-dev&P=3

2010年4月14日水曜日

TwitterFollowingChecker

Twitterで、相手がフォローしてくれているかどうかを表示するグリモンを作りました。
http://userscripts.org/scripts/show/74291
GoogleChromeでも動きます。

フォローしてくれているユーザには ☑ を、そうでなければ □ を表示します。

フォロー関係を調べるには、TwitterのAPIのこれ(http://apiwiki.twitter.com/Twitter-REST-API-Method%3A-friendships-exists)とかを使うとtrue/false帰ってくるんですが、別に技術的な事を知らなくても手軽に相手がフォローしてくれているかどうかを確認する方法があります。
Twitterのダイレクトメッセージはフォローしてくれている相手にしか送信できないので、ユーザごとのメニューにダイレクトメッセージの項目があるかどうかを見れば簡単に確認できます。
ですが、いちいちボタンをクリックしてプルダウンメニューを表示させるのも面倒なので、このグリモンを作りました。

実装としても、ユーザごとにダイレクトメッセージの項目があるかどうかを確認しているだけなので、APIを使っていません。APIの制限が気になる人にも優しい作りです。
(実際には、ユーザの情報があるHTML要素にdirect-messageableというクラスが付いているかどうかを見ています。)

既知の問題:
・自分にも☑が出る。
→ 害は無いし別にいいや、と思って放置。
・そもそも☑ってマークが分かり辛い。
→ そのうちそれっぽいシンボルを描く。または誰か描いて。
・Twitter Follower Checker(http://www.sukechan.net/labs/follower_checker/)と名前が紛らわしい。
→ 最初その名前にしようとして、ググってみたらだだ被りだったので今の名前に。英語として意味が通じているかどうかは怪しい。

<追記>
Actionsにmessage usernameがあるかどうかでも分かるのね……
まぁ、他人やリストのフォロー一覧とかユーザ検索の結果一覧なんかでも使えるのでどうぞ。

2010年4月1日木曜日

Shuzo Matsuoka!

TL上をshuzo matsuokaだらけにするgreasemonkeyスクリプトを作成しました。
http://userscripts.org/scripts/show/73030

これで、熱くなれよォォォォッ!

<追記>
Twitterのデザインが変わって、今は動きません。

2010年2月3日水曜日

TwitterColorLabel

twiccaのカラーラベル機能をweb版ツイッターで再現するuserscriptを作りました。
http://userscripts.org/scripts/show/67855

How to use:
色を設定したいユーザのプロフィールページに行きます。
リストの管理ボタンの脇にカラーラベル設定のボタンがあるので、クリックして色を設定してください。
(本当はもっと手軽に設定出来るようにしたい。twiccaではユーザの発言のコンテキストメニューから設定できる)
そのユーザの発言に設定した色のラベルが付きます。

お願い:
バグを見つけたら、コメントかTwitterで@mstsskに教えてくれると助かります。

注意:
ユーザの表示名をキーに色の設定を管理するので、表示名が変わってしまうと色の設定が無効になってしまいます。

謝辞:
公開を快諾していただいたtwiccaの作者R246さん、ありがとうございます。

<追記 2010-02-04>
フォロー/フォロワーの一覧画面でもカラーラベルが設定出来るように改善。
(ただし、設定が反映されたかどうか分かり辛いのが今後の課題)
<追記 2010-02-06>
Listページでスタイルが崩れる不具合を修正。機能の変更はありません。
<追記 2010-02-11>
GoogleChrome対応。
それに伴いいろいろリファクタリング。jQuery→素のjavascriptというダウングレードみたいな感じなので、むしろ見辛くなっている気もする。
既知の不具合:
GoogleChromeで、httpとhttpsでアクセスした場合に別々の設定になってしまう。
GoogleChromeでは、設定を保存するためにHTML5のlocalStorageを使っているのだが、httpとhttpsで別のstorageとして扱う仕様?になっているため。
<追記 2010-02-12>
ツールチップの表示位置がずれる不具合修正。
<追記 2010-02-13>
Windows版のGoogleChromeで動作しない、という不具合を修正。style要素のinnerHTML属性にアクセスしようとすると駄目らしい。
<追記 2010-02-14>
フォロー/フォロワーの一覧画面でもカラーラベルが分かるように改善。
<追記 2010-02-16>
リストのフォロー/フォロワーの一覧画面でもカラーラベルが分かるように改善。
実際は前回更新で対応できていて、フラグ切り替え書き換えるだけだったのに、気付いてませんでした
<追記 2010-04-25>
フォロー/フォロワーの一覧画面で連続してカラーラベルを設定すると別のユーザに色が設定されてしまう不具合修正。こんなクリティカルなバグが残っていたとは…。(細かい修正もこれ以前にしたけど割愛)

2010年2月1日月曜日

Reset display settings

ライトニングトークをやった時に、プロジェクタに愛機を繋いだら「現在の画面解像度じゃ駄目よ。◯◯に変更してね」みたいなことをウィザードで促された。
で、適当にはいはい押して設定してやったら、画面解像度がプロジェクタ向きのサイズになったが、設定画面で元の解像度に戻せなくなってしまった。
使っているHPのnx6125は、1440x1050というあまり聞いたことがない解像度。
それでも、Ubuntuたんはちゃんと解像度を判別してくれていたのだが、設定を変更した時に自動判別がされなくなってしまった様。

/etc/X11/xorg.conf を見てみると
SubSection "Display"
  Virtual 1280 2048
 EndSubSection
というサブセクションがあったが、nx6125にインストールしているUbuntu9.04ではハードウェアのこういった設定はHALにやらせるので、xorg.confに設定を書き込んではいけない筈なのだ。それをウィザードで勝手にやっちゃうのかよ……
とはいえ、完全移行しきっていない過渡期のバージョンだというのは聞いていたのであまり気にせずに解決策を模索する。
まぁ、同じディレクトリ(/etc/X11/)に、自動でバックアップファイルが xorg.conf.20100129213825 という名前で残されていたので、こいつをxorg.confに書き戻してやればOK。
ログインしなおせばちゃんと解像度を判断してくれた。

Tohoku Android group 3rd session & Lightning Talks

第3回 日本Androidの会 東北支部 発信会に行ってきました。

初めてライトニングトークなるものをやってみたり^^
内容はほぼネタでしたが、まぁ好評で良かったです。

今度はちゃんと技術的な事で発表できればと思います。

2010年1月17日日曜日

Configure GNOME's browser command.

先日、Ubuntu9.04のブラウザをFirefox3.5にしたのだが、公式のリポジトリからapt-get installすると「firefox」というコマンドではなく「firefox-3.5」というコマンドで起動するようになっている。
9.04では「firefox」はあくまでFirefox3.0系という扱いになっているようだ。

まぁ「firefox-3.5」のエリイアスに「firefox」を設定すればいいのだけれど、端末での操作ではない解決策はないものかと思い、GNOMEの側の設定を弄ることにした。これならば設定エディタ(gconf-editor)でイケる。

設定エディタで
/desktop/gnome/applications/browser/exec
/desktop/gnome/url-handlers/http/command
/desktop/gnome/url-handlers/https/command
の3つの値の「firefox」となっている部分を「firefox-3.5」と書き換えてやればOK。

メッセンジャーソフトでURLをクリックしたり、GNOME-DoでURL文字列を入力するなどして、GNOMEの設定を見てブラウザを起動させる様なアプリから問題なく3.5が使えるようになる筈。

<追記>
↑こんなことしなくても、パネルメニューの
システム > 設定 > お気に入りのアプリ
で設定できますね。。。 orz

Color reply tweets in your tilmeline in Twitter

自分宛のリプライを色分けして表示するグリモンを作った。
ユーザスクリプトコマンドで、色指定を変更も出来る。

http://userscripts.org/scripts/show/66569

2009年12月26日土曜日

Remove tweets by hashtag from your time line in Twitter.

指定したハッシュタグをつけてるツイートは自分のTLには流れないように設定できたらいいと思わない?
というTwitterでの発言を受けて、思わずUserScript作ってみた。

removeTweetsByHashTag
http://userscripts.org/scripts/show/64964

消去する発言が一瞬見えてしまうのが玉に瑕。
Greasemonkeyはページの読み込みが完了した時点で実行されるので、これはどうしようもない……

Greasemonkeyの独自関数(GM関数)を使っているので、Firefox+Greasemonkeyな環境の他は動作想定外。
まぁ、SafariのGreasekitとか、かなり互換性が高いらしいのでいけるのかな?

How to use:
ユーザスクリプトのインストール後、Twitterにログインしている状態(もちろんTLのページにいる状態)で、Firefoxウィンドウ右下のGreasemonkeyのアイコンを右クリック。
「ユーザスクリプトコマンド」のところに
・Add hashtag[delTweetsByHashTag]
・Remove hashtag[delTweetsByHashTag]
・Reset hashtags[delTweetsByHashTag]
の三つのメニューがあるので、あとは何となく分かってください。

あと、unsafeWIndowを使っているのでセキュリティ的にアレですので、お気をつけてお使いください。

<追記>
入力したハッシュタグの扱いの処理バグがあったので修正。
あと、ページをリロードしなくても新しい設定を反映させるように改良。
出来れば、Reset hashtagsしてから上記ページでスクリプトをインストールしてください。

作るときも、特定の発言の要素を削除する処理はすぐ出来たけど、パラメータをユーザが設定出来るようにするところのが時間かかったわww。グリモンのGM_setValue関数とかすっかり忘れてましたよ

2009年12月20日日曜日

[memo]My envilonment of HT03-A(Android)

件の一件で環境を作り直羽目になったので、ちょこっとインストールするアプリの一覧などを覚書として残しておく。

無線LAN設定
 自宅のプラネックソWLANルータに接続出来るように
ロック解除パターン設定
データの同期設定(俺はカレンダーだけで充分)
目覚まし用にアラーム設定
電源管理ウィジェット
FlickWnn
 トグル入力無効
 かなQWERTYキーボード自動切換無効
 英字QWERTYキーボード自動切換常に有効
 数字QWERTYキーボード自動切換無効
 大きめキーサイズ(縦画面)
 Flick判定基準 Level5
 自分の名前を辞書登録
QRコードスキャナー
モバイルGoogleマップ(アップデート)
芋煮
 docomoのアカウント設定
MyQR:アドレス帳へ簡単登録
TaskManager(WingTsengさんの物・同名のアプリが複数ある)
ASTRO File Manager
Droid Comic Viewer
 Scale mode FitHeight
 Reading direction Rigth-to-left
 Load last comic無効
 CBR/RAR support有効
BatteryLife
tCalendarWidget
Sticky Note
自作笑い男ウィジェット

A bug in Android screen lock

日本Androidの会東北支部懇親会での出来事。
戯れにスクリーンロックを弄っていたらロックが解除できなくなりました……

Android機HT03-Aのスクリーンロックは、予め登録しておいたパターンで画面をなぞって解除するのですが、それを連続して何度も間違えると「30秒後にやり直してください」というメッセージが現れて一時的に入力が出来なくなります。その時画面に新たに「パターンを忘れた場合」ボタンが現れるのですが、これが曲者。
このボタンを押すと、GoogleアカウントのIDとパスワードの入力画面に遷移します。


ですが、この画面でいくら正しいアカウントを入力してもロックは解除できないというバグがあります。しかも一度この画面に来ると、再起動してもどうやっても通常のパターン入力画面に戻れない仕様です。
Twitterで嘆いていたら、米Googleのフォーラムで同じ現象に出くわした方の投稿があるのを教えていただきました。
http://www.google.com/support/forum/p/Google+Mobile/thread?tid=627eed11de37ecba&hl=en

ただし、全ての機でこのバグが出るわけではないようです。上のフォーラムの投稿へのレスでも、問題なかった、というものがあります。私のHT03-Aは標準ROMのver1.6だったのですが、標準ROMのver1.5では問題なくアカウント入力でロック解除できたという話も聞きました。

いずれにしろ、ロックされたままになってしまった私のHT03-Aにはリセットという手段しかありません。。。
ファクトリリセット(工場出荷状態にリセット)の手順は
・Homeキーを押しながら電源ON(Homeキー+終話キー)
・リカバリユーティリティの画面(HT03-Aと!マークの絵の画面)が現れる
・再度 Homeキー+終話キーで、リカバリメニューが表示
・「wipe data/factory reset」を選択
 リセット処理は10秒ちょっとくらいで完了します。
・完了したら「reboot system」を選んで再起動

参考:Taosoftware: Android 工場出荷状態に戻す(Factory Reset)方法:(http://www.taosoftware.co.jp/blog/2009/07/android_factory_reset.html

Tohoku Android group 2nd session

第2回 日本Androidの会 東北支部 発信会&懇親会に行ってきました。

今回は日本Androidの会幹事の渡辺知男さんのお話を聞きました。
私に東北支部の発足を教えてくださった方です^^

Androidで組み込みっぽいことをやってみよう、というお話。
Android機とGainer(http://gainer.cc/)を繋いでゴニョゴニョと……。
まぁ、モノホンの組み込みをやるとなるとこんなのとかこんなのとか、こんなのを使う訳で、実際素人が手出し出来るレベルじゃないよ。ちょっと触ってみる程度ならGainerでよくね?などなど
それと、その時使われた資料は日本Androidの会の技術資料ページにあるそうなので、興味がある方はどうぞー。

話の初めの方はメモしながら聞いてたんですが、いつの間にやら手が止まって聞き入ってしまってました。

発信会の後は懇親会/忘年会
会場が、私が学生時代に酔っ払ってご迷惑をお掛けしたお店だったことに妙な因縁を感じたり……
実際、今回も酔っ払って唾飛ばしまくりながら喋ってた気がします orz

加えて、懇親会の最中に愛機HT03-Aにアクシデント。
帰り道ツイッター出来ずにウズウズする自分に気付いて、すっかり依存症だと再認識。

2009年12月9日水曜日

TwitterUserProfileExtension


なんとなく作ったかんたんGreasemonkeyスクリプトを公開。

http://userscripts.org/scripts/show/63833

Twitterのユーザのプロフィールページに、関連サービスへのリンクを付加します。
・付加するサービス
Favotter
TwitPic
vidly
携帯百景(movapic) ※Twitterと同じユーザ名の場合だけ有効

気が向いたら追加していきます。

Special Thanks to Pasta-K

<追記>
勘違いしてましたが、携帯百景ってTwitterのアカウント使う訳じゃないんですね。。。そりゃユーザ名が違ったりする筈だわ。。。

<追記2>
Twitgoo追加
それとふぁぼったーのアイコンをデータスキームで埋め込みに変更。これ以上あそこが落ちる要因増やしちゃあかんわな。

書き忘れてたけど、Googleマップへのリンクも付加します。
「iPhone〜ジオタグ〜」みたいなのも対応してます。

2009年12月5日土曜日

Same shortcut key...



これはひどい。

Ubuntu 9.04 Gnome Terminal

<追記>
ディスクブートしたUbuntu 9.10ではこんな感じだった。


つーわけで、未訳の「C_lose Terminal」を訳しておいた。
https://translations.launchpad.net/ubuntu/karmic/+source/gnome-terminal/+pots/gnome-terminal/ja/431/+translate

2009年12月4日金曜日

Skype updates failed?

まだUbuntu9.04な私です。
ついさっき、アップデートマネージャでSkypeをアップデートしようとしたらskype-commonパッケージでエラーが出てアップデート失敗。
とりあえず、再度アップデートをかけてみたら今度は問題なくインストール完了。
なんだったんだろ?

一応バージョンを書いておく
2.1.0.47-0medibuntu0.9.04.1 (jaunty)

2009年11月25日水曜日

Tohoku Android Group 1st Session.

第1回 日本Androidの会 東北支部 発信会に行ってきました。

今回のメインは、有限会社エボテックの畠山さんのセッション。
エボテックでは様々な組込み開発の実績があるそうですが、「Androidでなら何が出来るだろう」というところから始まってプロジェクトが立ち上がり、ET2009ではAndroidを使ったデジタルサイネージのデモを出展したそうです。(ET2009行きたかった…… orz)
ET2009のエボテックの紹介ページ
http://imyme.chicappa.jp/ET2009/exhibitor/exhibitor.cgi?no=199

内容は、畠山さんが実際にAndroidでの組み込み開発に携わってみての感想を元にした、3つの視点から見たときのAndroidのお話。

・技術者目線
Androidを技術面で大雑把に言ってしまえば、「携帯電話向けの顔を持ったLinux」。
なので、既存のLinux開発のノウハウを流用できる。オープンソースなので、開発の初期コストが節約できる。しかもGUIセットでお得!
実際の開発としては、階層分けして作業が出来る。アプリ屋・ミドルウェア屋・ドライバ屋という具合。

・事業者目線
先日のET2009ではAndroidで盛り上がっていて、エボテックの他にもAndroid関連の出展が多かったそうです。
実際にAndroidで組み込みの技術に関係したビジネスをやるとするなら、ポーティングとかミドルウェア/ドライバの高速化やカスタマイズなどがあるだろう(もちろんアプリなどコンテンツ提供も)。

・利用者目線
メモ忘れ

とりあえずこんな感じでした。

「携帯機器向けのAndroidを組み込みで扱うのは余計な手間がかかるしどうなの?」という意見も出ましたが、今のAndroidを取り巻く市場に足りないのはこういう事業者目線なのかなと思いました。正直なところ、今まではAndroidを見るのは技術者目線ばかりという印象があったんです。それが最近になって、Android搭載端末が続々と登場し、日本でもHT-03A(HTC Magic)が発売されて、やっとAndroidが「ビジネス」として認知されだしているのは喜ばしいことだよなぁ、と。

次回の東北支部の活動は12月19日土曜日で、早めに発信会を終わらせて忘年会行こうぜ! という具合。

それと、エボテックさんが1月19日に仙台のイベントに出展するそうです。(イベント名聞き漏らして、ググってもそれらしいのが見つからず。。。)

<追記>
ご本人からコメントで補足情報いただきました。
ありがとうございます!

「ものづくりの集い」
平成22年1月19日(火)
 12:00~17:25
プラザ仙台ホテル 松島(東西)

まぁ、平日なので行けそうもないのですが…… orz

2009年11月15日日曜日

Alice Carroll problem in Tohoku IT Security study session.


第2回東北情報セキュリティ勉強会に行ってきました。

講演したのは、HASHコンサルティング徳丸浩さんと、MS09-047脆弱性の謝辞犯人nig_luceさん。
あと、お菓子。
講演の後にディスカッションなんかも行ったり。
それとあと、お菓子とか。

徳丸さんの講演内容は、この記事を読んでもらう方が早かったり → 発注者のためのセキュリティ http://www.hash-c.co.jp/d/20090906.html

一応、記憶をつらつらと書き出してみる。

Webアプリケーションのセキュリティとかって、契約に十分に盛り込まれていなかったりする。発注側としてはもし問題が起きた場合に責任の所在が曖昧になるのは避けたい。
ただし、「脆弱性が全くないこと」なんて契約に盛り込めるわけが無い。抽象的な記述のくせに、不可能だと一発で分かる記述なんて、どうしようもない。そもそもそれは、バグの範疇だったりする。
対応策としては、具体的な実装・検収方法を指定するなどある。ただし、諸刃の剣。コストが高くなってしまう。発注側が実装まで指定してしまうのは、開発側のノウハウを潰すことになったりするので。

では、他にコストを下げられる箇所があるか。
仕様策定時に、情報資産を個々にいちいち洗い出したりするが、それって毎度毎度やる必要があること? セキュリティに関する脅威とか、いちいち再確認してもどうせ決まりきってる。
また、絶対問題が起きない製品を作るなんて不可能。ならば、逆にリスクの許容範囲はどこまでか、を考える。問題を起点にして考えるのではなく、ベストプラクティスなセキュリティ対策でどこまで対応出来るのか、から考える。そして、ベストプラクティスなセキュリティ対策なんてのも、決まりきっている。

開発側としては、安全対策を施したライブラリを使ったり等々、開発標準を決めておけば良い。(IPAなどが開発標準のモデルを公開している)

そして、セキュリティに関して発注側が直接負担しなければならないコストは大したことがなかったりする。
(面倒くさくなったので残り割愛)


nig_luceさんの講演は、所謂ID3v2タグのアリス・キャロル問題(全然所謂じゃない点に付いてはご愛嬌)。

フザケた呼び方してますが、実は結構深刻だったりする。
講演では実際に、タグ情報に細工をしたMP3ファイルを再生しようとするとどうなるか、というのも行ってくれた。結果、Windows Media Playerが死亡。
ExplorerでもファイルアイコンにマウスオーバーしただけでMP3ファイルのタグ情報を読みにいくし、詳細表示モードでもそう。そして、内部ではタグ情報を得るためにWindows Media Playerと同じ処理をしようとするので、Explorerも死亡。

ちなみに言うと、報告から対応パッチが出るまで、8ヶ月経過してたそうな。


ディスカッションは殆ど雑談。でも、一応内容はセキュリティのこと言ってたよ!

というわけで、とても有意義な勉強会でした。
主催したまっちゃだいふくさん、スタッフの方々、他の参加者の方々、ありがとうございました。

第3回が楽しみだなぁ!!

参考:アリス・キャロル(Alice Carroll)ARIAの登場人物 - Wikipedia

2009年10月31日土曜日

How to remove(uninstall) Adobe AIR application, and where is it's profile?

Ubuntu9.10がリリースされましたが、まだ様子見で9.04のままです。
まぁ、TwitterでJapaneseTeamの中の人が「鯖に負荷がぁ!」と戦々恐々としているのを見たのもあるんですが。

で、そのUbuntu 9.04ですが、先ほど始めてAdobe AIRアプリをインストールしてみたのです。

TwitterのクライアントアプリSpaz(http://getspaz.com/)です。
サイトのDOWNLOADページで、SpazだけでなくAdobe AIRランタイム本体のインストールも一息にやってくれました。

で、肝心のSpazをちょっと動かしてみたのですが、どうにももっさり。。。
4年使っているHP nx6125のスペックがアレな気がするのですが、いずれにしても「こんなんじゃとても使えない!」というわけでさっさとアンインストールを決め込みました。

で、どうやってアンインストールするんだ?

パネルのアプリケーションメニューには、Spaz・Adobe AIRアプリを追加するためのインストーラ・Adobe AIR自身のアンインストーラ のショートカットはありますが、アプリ単体をアンインストールする手段が見当たりません。

Adobeのヘルプページにも、窓と林檎の場合の手段しか書かれていません。
・AIR アプリケーションのアンインストール
http://help.adobe.com/ja_JP/AIR/1.1/devappshtml/WS5b3ccc516d4fbf351e63e3d118666ade46-7e5f.html#WS5b3ccc516d4fbf351e63e3d118666ade46-7e4e

試しにAdobe AIR自身のアンインストーラを立ち上げてみると、ウィンドウが出て「ランタイムをアンインストールすると以下のアプリが動かなくなるよ!」見たいな感じでSpazがリストアップされてました。
そういえばインストール時も、Spazは自前のインストーラでなくAdobe AIRのインストーラによってゴニョゴニョされてる様でした。で、AIRランタイム側でインストールされているAIRアプリを把握してるんだろうな(この場合ランタイムという表現は違う気がするけど)と思い、AIR本体アンインストールすればSpazも一緒に消してくれるかも!で、即実行。

で、まぁ消えたのはAIR本体だけだったわけです orz

インストール時の確認ダイアログで、/opt以下にインストールするよ!となってたので、見てみたら見事にSpazディレクトリがあって、その中身も無事(?)でした。。。

Adobeのヘルプページの林檎の場合のアンインストール方法(インストール場所から app ファイルを削除します。)を見る限りでは、/opt/Spazを削除しちまえば問題ないだろう、ということで
$ sudo rm -rf Spaz/

あとはプロファイルだな、と思いホームディレクトリ直下のドットファイルを見てみます。
.adobeなんてのがありましたが、この中身はFlash Playerのキャッシュでした。
で、どこにあったのかと言うと、.appdata という個性の欠片もないディレクトリ名。
ls .appdata としてやるとAdobe、Spaz.AIR.〜16進文字列〜.1、cookie_file.txtの三つのファイル&ディレクトリがありました。

つーわけで、
$ rm -r .appdata
として終了。

<追記>
端末でapt-getでremove出来ました。
spaz.air..〜16進文字列〜.1 って感じのパッケージ名になってる様です。

コメントありがとうございました。

2009年10月29日木曜日

Japan Android Group Tohoku Hub KickOff Meeting!

日本Androidの会(http://android.siprop.org/)東北支部のキックオフミーティングに参加してきました。

「立ち上げたはいいものの。で、これから何しよう?」という感じなので、
今回は参加者が各々意見を出していく、ちょっとしたディスカッションだけでした。
これから東北支部をやっていく上で、どんな組織?、どんな事をするの? ってなもんで。

「東北でAndroidを発展させていこう」
「東北からAndroidでビジネスを広げていこう」
「教育の現場でもAndroidを活用しよう」
「東北って括りじゃ広すぎるから、各県のグループのハブ的役割でもいいなじゃないか」
(この記事タイトルもわざとaffiliateとかlimbにせずhubとしてみました)
などなど、、、細かいところはうろ覚えですが

とりあえず、月イチくらいで集まりを持とう、ということになりました。
次は11月の第4水曜日……になる…筈

2009年9月7日月曜日

Develop Android apps with HT-03A(HTC Magic) and Ubuntu 9.04

ついに買っちゃいました HT-03A

そんでもって、さっそくアプリ作りをちょろっとやってみようと思い、EclipseにAndroid Development Toolを導入。この辺は他のEclipseプラグインと変わりはしないので割愛して説明する。とりあえず、実機(HT-03A)でHello Worldを表示させるところまで。
(エミュレータもあるけど、ウチのマシンには荷が重かったようで、起動画面のANDROIDロゴから全然進みませんでした orz)

・参考
http://developer.android.com/intl/ja/sdk/1.5_r3/installing.html
http://developer.android.com/intl/ja/guide/tutorials/hello-world.html
http://developer.android.com/intl/ja/guide/developing/device.html
このブログを読まなくても、これらのオフィシャルの解説ページを読めば大丈夫だと思うけど、3つめの実機でのデバッグを解説しているページはまだ日本語版が無いようなので、このブログが参考になれば幸い。

・環境
HP nx6124
Ubuntu 9.04 Jaunty Jackalope

Android SDK
http://developer.android.com/intl/ja/sdk/1.5_r3/index.html
からLinux版をDLして適当なディレクトリに展開。

Eclipse IDE for Java Developersのver3.5(Galileo)でPleiades1.3.0を導入済み。
そこにAndroid Development Tool(以下、ADT)をインストール。udpate siteは
https://dl-ssl.google.com/android/eclipse/
<追記>
どうにもEclipse起動時に渡すPleiadesのjarファイルへのパスがうまく通らない場合がある様で、gnomeパネルのランチャからeclipseが起動できない問題にぶち当たりました。潔くPleiadesを諦めるのも手です。
<追記終わり>

・初期設定
EclipseにADTをインストール後、一度Eclipseを再起動。
Eclipseの設定画面で、Android の SDK ロケーション にAndroid SDKのディレクトリを指定してやって、「適用」。

実機をUSB接続してデバッグツールとして使用するが、設定ファイルを一つ書いてやる必要がある。
ファイルパス:/etc/udev/rules.d/51-android.rules
内容:
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"

そしてこのファイルに実行権限を付加するために、次のコマンドを実行
sudo chmod a+rx /etc/udev/rules.d/51-android.rules


・実機側の設定
 設定 -> アプリケーション -> 開発 -> USBデバッグ
のチェックを入れる。

・プロジェクト作成
Eclipseのプロジェクトの新規作成画面で「Androidプロジェクト」を選択。
「新規Androidプロジェクト」画面で、
プロジェクト名:Hello
アプリケーション名:Hello, Android
Create Activity:HelloAndroid
ビルドターゲット欄で、Android 1.5を選択(Min SDK Versionが自動で3になる)
「完了」ボタン押下。

プロジェクト作成直後、プロジェクトアイコンに×マークが付いてたりするが、選択してF5キーで表示内容の更新をかけてやればOK(Pleiades1導入済みのEclipse上ではリフレッシュと表記されている筈)

・実機でのデバッグ
一応、PC側の設定ファイル・実機側のUSBデバッグ設定、がちゃんと行われているかどうかを改めて確認しておこう。
実機をPCにUSB接続しマウントする。PC画面上では何も起きない(または、通常のUSBメモリなどのように認識される)が、先ほどの設定が活きていれば既にEclipseのデバッグ操作が可能になっている。
Eclipseで、プロジェクトが選択された状態で、「実行」または「デバッグ」を行う。方法の選択ウィンドウが表示されたら、「Androidアプリケーション」を選択しよう。
実機側の画面に「Hello Android」と表示されたら成功!

・後始末
「実行」を行う場合、アプリケーションを実際に実機にインストールしてしまうようです。
そうなった場合、通常のAndroidアプリケーションと同様に、
 設定 -> アプリケーション -> アプリケーションの管理
から「Hello, Android」を探してアンインストールします。

2009年9月5日土曜日

How to management my books...

読んだ・持っている 本を管理するWebサービスをつらつらメモしていく。

読書管理ツール Bookboard.jp
http://www.bookboard.jp/

読書メーター
http://book.akahoshitakuya.com/

みんなの本棚 by BOOK OFF
http://www.mindana.jp/

ブクログ
http://booklog.jp/

to be continued ..?

2009年9月4日金曜日

add Twitter public timeline link(Greasemonkey script)

Twitterのページにpublic_timelineへのリンクを付けるGreasemonkeyスクリプト。
javascriptすっかり忘れて、調べながらチマチマ書いたら、こんなもんに10分以上かかっちまった。
// ==UserScript==
// @name           Twitter public_timeline link
// @namespace      mstssk
// @include        http://twitter.com/*
// ==/UserScript==

var li = document.getElementById("header").getElementsByTagName("li").item(0);
var newli = document.createElement("li");
var a = document.createElement("a");
var txt = document.createTextNode(" Public Timeline ");
a.href = "http://twitter.com/public_timeline";
a.appendChild(txt);
newli.appendChild(a);
li.parentNode.insertBefore(newli, li);

2009年7月26日日曜日

WPA mixid

ただのメモ
http://supportwiki.cisco.com/ViewWiki/index.php/What_is_WPA_mixed_mode_operation,_and_how_do_I_configure_it_in_my_AP%3F

Remove pppoeconf

ひと月ぶりの更新。いつものとおり、一番の読者ターゲットは自分自身。

----------------

Ubuntuでフレッツ光のPPPoE接続をするためには、pppoeconfというコマンドを使うと自動でネットワークの設定ファイルを書き換えてくれます。
しかし、先日無線LANのブロードバンドルータを購入し、この設定が不要になりました。

さて、ここで面倒なことが。
pppoeconfは設定ファイルへの書き込みは行ってくれても、設定を差し戻すのはやってくれないみたい。

ネットワーク接続をUbuntuデフォルトのNetworkManagerに返えしてやるには、一部のファイルを直接弄ってやる必要があります。(他に手段があったらごめんなさい)

/etc/network/interfaces
pppoeconfを使った後は、次みたいな感じになってると思います。
auto lo
iface lo inet loopback


auto dsl-provider
iface dsl-provider inet ppp
pre-up /sbin/ifconfig eth0 up # line maintained by pppoeconf
provider dsl-provider

auto eth0
iface eth0 inet manual
デフォルトの状態は最初の2行だけです。それ以降の行はざっくり削除します。
これで、あとは再起動。
通知パネルのNetworkManagerのアイコンを見て、元の状態に戻っているか確認しましょう。

とりあえずここまででもいいのですが、まだPPPoEの認証情報が設定ファイルに残っています。そこらへんも消してしまいたい、ということもあるでしょう。
私が気づいた限りでは、
/etc/ppp/pap-secrets
/etc/ppp/chap-secrets
に書かれていました。(他にもあるかも)

環境:Ubuntu9.04 Desktop

<追記>
「networking 書き換えただけじゃあ、init.dとかの初期処理でppp走っちゃってんじゃね?」と思ったけど、上の記事のを行う前に、ppp 関連のパッケージをごっそりpurgeしちゃったので検証しませんでした。

2009年6月26日金曜日

Run Emesene and Skype quietly.

私は、メッセンジャーとしてEmesene、加えてSkypeも使っていて、ログイン時に自動起動するようにしています。
自動起動させるには、パネルメニューの
システム > 設定 > 自動起動するアプリ
で、好きなアプリの起動コマンドを追加してやれば良い。

しばらくはそれで満足していたのだけれども、この設定のままだとログインの度にEmeseneとSkypeのウィンドウが現れる。。。
別にウィンドウはいらないのよ。パネルにアイコン出しておいてくれればいいだけなのよ。

というわけで、EmeseneとSkypeでウィンドウを表示させずに起動する方法

Skypeの場合はわざわざ記事にするほどでもない気がするほど単純。
Skypeの設定ウィンドウを見れば、もうそこには「システムトレイ内で最小化したSkypeを開始」のチェックボックスが待っています。

Emeseneでは、起動オプションに「-m」または「--minimized」を付けてやると、最小化した状態で起動してくれます。
(ver 1.0だと、GNOMEパネルの通知スペースにしまわれた状態・ver 1.5だと、ウィンドウが最小化した状態)


ちなみに、私 Pidgin使ってません。。。

Show update notification icon in GNOME Panel with Ubuntu 9.04

先日やっとUbuntu 9.04をクリーンインストール。
アップデートの通知方法が変わって、以前のようにパネルの通知領域にアイコンが出るのではなく、いきなりアップデートマネージャが開くようになりましたが、以前のように使いたい、という人は結構いるんではないかと

JauntyJackalope/ReleaseNotes/ja アップデートの通知方法が変更されました
https://wiki.ubuntu.com/JauntyJackalope/ReleaseNotes/ja#%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88%E3%81%AE%E9%80%9A%E7%9F%A5%E6%96%B9%E6%B3%95%E3%81%8C%E5%A4%89%E6%9B%B4%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F

上記のように説明されてはいますが、「コマンド一発叩けばいいよ」でUbuntuがターゲットにしている筈のユーザ全員が満足できるわけが無い!そんなのUbuntuの信条じゃないやい!と勝手に考えて、コマンドを使わない別の方法を紹介します。

1. パネルメニューで
 アプリケーション > システムツール > 設定エディタ
を起動。(設定エディタが見当たらないなら、パネルメニュー上で右クリック「メニューの編集」で、設定エディタの「表示」にチェックを入れましょう)

2. 設定エディタで/apps/update-notifier/を見つけて、auto_launchのチェックを外す。(これと同じことをコマンドでやるのが、リリースノートで紹介されている方法なのです。)

3. 次回ログインからパネル右上の通知領域に、8.10以前のバージョンの様に通知アイコンが表示されます。


・おまけ

通知アイコンを右クリックした時に現れる「通知の表示」チェックボックスですが、このチェックを外すと、/apps/update-notifier/に勝手にno_show_notificationsとdefault_actionという値が増えます。どちらも、8.10以前では標準で使ってた値なんでしょうが、9.04からはスキーマすら無くなってます。

auto_launch:false
no_show_notifications:true
の状態にしておくと、アップデート通知が分からなくなってしまいますのでご注意を。(default_actionの値にもよるかな?)

2009年6月20日土曜日

Comix accepts directory as a command line argument

Ubuntuのリポジトリにも入ってる、Comixという漫画ビューアを使っています。
そして、つい先日やっと重い腰を上げてUbuntu9.04をクリーンインストールしたのです。
もちろん、Comixも再びインストールしたのですが、以前ならば端末で
$ comix ディレクトリ
とすれば、ディレクトリ内の画像を表示してくれたのに、何故か「ディレクトリは開けません」とエラーを吐かれてしまうようになっていました。

http://comix.sourceforge.net/changelog.html
Comixのchangelogを見ると、Ubuntu8.10で提供されていたver3系ではディレクトリを指定してやることが可能になっていたようです。
しかし、Ubuntu9.04で提供されているComixはver4.0.1です。changelogを見ると、ディレクトリ指定ができるのは、ver4系では4.0.3からだというのが分かります。

http://sourceforge.net/tracker/index.php?func=detail&aid=2604916&group_id=146377&atid=764987
このページを参考に、ディレクトリを弾いているコードを書き換えてやってもいいのですが、実はgetdebに最新版のdebファイルが上がってるのでそっちを使いましょう。
(それと、上記ページの書き換えるように指定しているソースコードはちょこっと間違ってます)

http://www.getdeb.net/
getdebは、アクセスしたユーザのUbuntuのバージョンを判別します。9.04なら9.04に対応しているとして登録されているパッケージしか出てきません。「comix」で検索しても、見つからない、と言われますが、その画面の下に検索対象のバージョンを変更する案内が出てますので、8.10(Ubuntu Intrepid)を選べば、comixが出てきてくれます。(8.10向けとして登録されていますが、9.04でも問題なく動きます。)

2009年6月15日月曜日

GNOME Panel config


パネルメニューまわりの設定の設定について調べてたら、なんだかちょこっと複雑っぽいので、まとめ。

デフォルトだと左上にある「アプリケーション」メニュー内の、各種ショートカットの実体は
/usr/share/applications/ 以下の.desktopファイルとしてシステムにインストールされている(/usr/local/share/applications/ にも入ってたりする)。
ただし、「アプリケーション」メニュー上で右クリックの「メニューの編集」から編集を行うと、
~/.local/share/applications/ にシステム側から.desktopファイルがコピーされて、それに編集内容が書き込まれる。さらに、メニューで削除をしても、.desktopファイル自体は残りつづけて、ファイル中のHidden値がtrueに設定するのでメニューに現れなくなるだけ。
(ちなみに、「メニューの編集」ウィンドウは実は alacarte というアプリケーション。参考:http://mstssk.blogspot.com/2008/11/gnome-panel-2alacarte.html

パネル上のランチャショートカットやアプレットは、GNOME Panelの設定として~/.gconf/apps/panel/以下に保存される。これらの設定にアクセスするには設定エディタ(gconf-editor)を使う。
ただし、パネルの設定のデフォルト値は /etc/gconf/schemas/panel-default-setup.entries に記述されている。

パネル上のランチャショートカットの設定内容は、起動するアプリケーションの実行ファイルを直接指定している訳ではなく。前述の.desktopファイルを指定している。設定は/apps/panel/objects/以下にアイコンごとにある。
パネル上のランチャショートカットを右クリックから編集すると、編集内容を反映した.desktopファイルは ~/.local/share/applications/ ではなく
~/.gnome2/panel2.d/default/launchers/
以下に保存される。
システムや~/.local/share/applications/以下の.desktopファイルを指定している時は、フルパスが/apps/panel/objects/以下の各アイコンごとの設定項目に書き込まれるが、編集した後の~/.gnome2/panel2.d/default/launchers/以下のファイルを指定している時は、ファイル名のみが書き込まれている(ただ、firefox.desktopとだけ書かれていたりする)。

2009年6月6日土曜日

List directories in current directory.

「echo *」を実行するとどうなる?
http://itpro.nikkeibp.co.jp/article/COLUMN/20090602/331173/

echo *
を実行すると、あんなことが出来るらしい。

じゃあ、
echo */
とすると……
実はlsだとこれ出来ないんだよね。まさか、echoで代替出来るとは。

参考(その他の方法)
linuxでディレクトリだけを表示させる方法 - 教えて!goo
http://oshiete1.goo.ne.jp/qa2760104.html

<追記>
「ls -d */」で出来るそうです。。。嘘付いてごめんなさい。
コメントくれた方ありがとうございました。

2009年6月1日月曜日

Configure shortcut key with Windows Key(Super Key).

Windowsで私がけっこう使っているWin+Mのショートカット。開いているウィンドウをすべて一発で最小化して、デスクトップを表示してくれます。
Ubuntuでも同じ機能がちゃんと付いていて、デフォルトでは下側パネルの左端にアイコンがあり、これをクリックするか、Ctrl+Alt+Dで出来ます。

ただ、Win+Mに慣れちゃってるので、Ctrl+Alt+Dはなんか押しづらい。。。

というわけで、Win+Mに変えてしまえばいいじゃん、と思い立ったが吉日。
パネルメニューの システム > 設定 > キーボード・ショートカット から設定だぁッ、、、あれ? 出来ない。。。

(WinキーはUbuntuではSuperキーという表示になっている。)

左Winキーを押しながらMを押そうとするんだけど、この設定ツールだとWinキーはCtrlやAltのような組み合わせ用のキーとしては認識してくれず、ほかのアルファベットキーなどのように扱われてしまう。

どうしたもんかと思ったら、launchpadで対処法が投稿されてた。
https://bugs.launchpad.net/ubuntu/+source/gnome-settings-daemon/+bug/194979/comments/16

ホーム・フォルダを開くショートカットの設定方法を説明してます。

方法 1:
========
1)システム->設定->キーボード->レイアウト->Other options
Alt/Win キーの挙動: "Meta を両側の Windows キーに割り当て" を選ぶ。

2)システム->設定->キーボード・ショートカット
"ホーム・フォルダを開く" を選び、好きなキーの組み合わせを押す。

例えば、Win+Eなら"Mod4+E"と表示されるでしょう。

方法 2:
========
1)"設定エディタ(gconf-editor)"を起動する。

2)"/apps/metacity/global_keybindings" で
"run_command_1" の値を "<Super>E" に変更。

3)"/apps/metacity/keybinding_commands" で
"command_1" の値を "nautilus" に変更。

(これは、Alt/Winキーの挙動が"デフォルト"か"Meta を両側の Windows キーに割り当て"(訳注)に設定されている場合のみ有効です。方法1を見て、適宜対応してください。)

方法 3 (コマンドラインでの操作):
====================================
gconftool-2 --type string --set /apps/metacity/global_keybindings/run_command_1 'E'
gconftool-2 --type string --set /apps/metacity/keybinding_commands/command_1 'nautilus'

P.S: "/apps/panel/global/menu_key" に関するコマンドラインでの操作を検索しているうちに、gconfに関する別の面白い情報も見つけました。
http://docsun.cites.uiuc.edu/sun_docs/C/solaris_9/SUNWgndoc/GNOMEADMIN/p5.html

とても面白い。(^_^)

訳注:私の環境だと、設定項目は英語のままで"Super is mapped to Win-keys"と表示されていましたが、一応ここも訳しました。

私は極力少ない設定で済ませたいので、方法2を選択。
上記の解説だと、"command_1"にnautilusコマンドを割り当ててますが、デスクトップを表示させる動作は"show_desktop"として既に値が存在しているので、そいつを編集して<Super>Mとしてやります。


ちなみに、"ホーム・フォルダを開く”の設定エディタ上の項目は "/apps/gnome_settings_daemon/keybindings" にあります。けど、そこに"<Super>E"としてやってもショートカットは動作してくれず、しかも勝手に画面テーマが切り替わるという現象が。。。

※ Ubuntu 8.10環境で確認しました。バージョンが違うと設定の位置が違ってたりするのはご愛嬌。

2009年5月22日金曜日

I wana just add VBR-header to mp3 files...

ffmpegを使って
ffmpeg -i smile.flv -acodec copy output.mp3
ってな感じでflv動画から音を抜いてるんですが、これをやったあとに付きまとう問題点。。。

元の音声がVBRだろうと何だろうと、-acodec copyでとにかく抜き出せるのは良いものの、抜き出して出来たファイルにはVBRヘッダが無いので、プレーヤによっては再生時間がとんでもないことになっちゃったりします。
例えば、実際の再生時間は4分程度の筈なのに、32分として扱われちゃったり。

なので、VBRヘッダをファイルに付加する方法を探してたんですが、linux環境向けのツールを見つけられませんでした。。。

なので、とりあえずWindows向けのVBR Header Makerをwineで使用。
うわぁ、、こんな簡単に出来るのになぁ。。。

2009年5月16日土曜日

'conffiles' in deb packgage.

リポジトリに入ってなかったり、GetDebなんかにもdebファイルが無かったりするソフトは、tar.gzなソースを落としてきて自分で適当な箇所に置いてやる必要がある。
PHPの開発にAptanaを使おうかと思ってるんだけど、そうですdebファイルが無いんです。
後々の管理のことを考えると、debでインストールしてやったほうが楽だと思うんだけどなぁ。。。

そんな訳で、「じゃあ自分でdebファイル作っちまえばいいじゃねぇか」と思って調べてたら、ちょうど以前のエントリにコメントを頂いた。
Skype error[Ubuntu8.10][pulseaudio]
http://mstssk.blogspot.com/2009/01/skype-errorubuntu810pulseaudio.html
akira さんのコメント...
    purgeなら設定も消去されました。


そういえばこの、removeでは設定ファイルが残って、purge指定してやると設定ファイルまで消えるってのはどうなってるんだろうと思い、そこらへんも調べてみた。

$ sudo apt-get -d install pulseaudio
-dオプションを付けてapt-getを実行し、インストールせずパッケージのダウンロードのみをさせる。debファイルは /var/cache/apt/archives に落ちてくる。このやり方だと依存関係が解決されて、他のパッケージもいろいろ落ちてくるけど、、、まぁいい。

debファイルの実態はただのアーカイブなので、file-rollerとかで開けちゃう。
中身は、
 debian-binary … ただのテキスト。debファイルのフォーマットverが書かれている。
 data.tar.gz … インストールされるファイルが収まっている。
 control.tar.gz … インストール時に必要な依存関係etc.etc.の情報が収まっている。
の三つ。

control.tar.gzの中身を見てみると、
 control … 依存関係やパッケージ概要などなど書かれている。
 md5sums … data.tar.gzの中身のハッシュ値が書かれている。
 postinst,postrm,preinst,prerm …… インストール/アンインストール時に実行されるスクリプトなど。
ここまでは知ってたんだけど、もう一つconffilesというファイルがあった。中を見てみると、件の記事で扱った/etc/X11/Xsession.d/70pulseaudioや、他にも設定ファイルっぽいパスが書かれている。
conffilesが何なのかと言うと、
http://www.debian.org/doc/manuals/maint-guide/ch-dother.ja.html#s-conffiles
conffilesにパスを書いておけば、設定ファイルとして扱われ、removeでは削除されず、purgeで初めて消えてくれるそうだ。

ところで、これらを調べていて思ったのは「purgeしなかったパッケージの設定ファイルは全部残っちゃってるんじゃね?」ということ。
removeして設定ファイルだけ残ってしまっているパッケージを簡単に調べる方法は無いもんかと思い、取り合えずSynapticを開いたら、、、あったあった。
Synapticの左ペインを「状態」別表示にして「未インストール(未設定)」を選択すればいい。。。うわ、結構ある。。。


<雑記>
「未インストール(未設定)」って誤訳だよねぇ。「未設定」だと「設定されていない」という意味になっちゃう。LANG=Cな状態での表示は「Not installed(residual config)」。residualの意味は「残っている(もの)」「余り」とかいう意味だから、やっぱり「未設定」ではない。「未インストール」もニュアンスが違うよなぁ。。
でも良い訳が思い浮かばないんだよなぁ。。。

2009年5月11日月曜日

How to create deb package simply.

http://www.aptana.com/dev/index.php/Creating_a_Debian_Aptana_IDE_package
Aptanaのサイトにあったdebファイル作成の解説がシンプルでいい感じだったのでメモ。
上記ページ中では説明が省かれてるけど、run-aptana scriptってのは、Aptanaのための環境変数を設定しながらaptanaを起動させるスクリプトのこと。詳細はAptanaのインストール解説ページとかに任せる。

追記……するかなぁ……

2009年5月9日土曜日

Seagate HDD strikes me!

Seagate 3.5インチ内蔵HDD 1.5TB 7200rpm S-ATA/300 32MB ST31500341ASSeagate 3.5インチ内蔵HDD 1.5TB 7200rpm S-ATA/300 32MB ST31500341AS

Seagate
売り上げランキング : 2547

Amazonで詳しく見る
by G-Tools


発症は稀とのフレコミでしたが、大当たりでした。
http://gigazine.net/index.php?/news/comments/20090118_seagate/
http://wikiwiki.jp/buyhdd/?7200.11%C9%D4%B6%F1%B9%E7
http://seagate.custkb.com/seagate/crm/selfservice/search.jsp?DocId=207931&NewLang=ja
http://pc11.2ch.net/test/read.cgi/jisaku/1240139074/l50

ファームウェアを更新すれば良いらしいですが、それは内臓SATA接続が前提なので、ノートPCしかない私にはどうすることも出来ない orz
大学行ってる友人に話したら、研究室のお遣いで4つ買ったら、全部当たりということがあったらしいです。

流れ
・1.5TBのHDDを買って大喜びで帰宅
・一緒に買った外付け用HDDケースにHDDを入れる
・Gparted起動
・パーティションテーブル作成。(この最初の1回だけ認識できた)
・おっとntfsでフォーマットするにはntfsprogsを入れる必要があるのか
・ntfsprogsをインストール
・さぁてGpartedを起動して今度こそフォーマット……
・HDD認識されねぇEEEEEEE ←いまここ
・買ったパーツショップに連絡予定「フォーマットもしてないのにロックされました orz」
to be continued...

<追記>
原因が判明。
HDDケース付属のUSBケーブルの接触不良でした。斜め上な肩透かし orz

2009年5月8日金曜日

Aptana PHP memo

Aptana Studio
http://www.aptana.com/

Aptana PHP
http://www.aptana.com/php

Aptana PHPの現行バージョンは1.0だが、Alpha版の1.1はSmartyテンプレートの作成などにも対応している。
Aptana PHP 1.1のインストール方法
http://www.aptana.com/docs/index.php/Aptana_PHP_Plug-In_1.1

php.iniのinclude_pathの内容を、Aptana PHPの設定のPHP Libraliesに指定してやる。これをしないと、デバッグ時にSmartyをrequireしようとするところでNot Foundエラーが出る。

http://aptana.com/docs/index.php/Installing_Aptana_on_Linux
http://andrewbleakley.com/blog/2008/11/01/installing-and-running-aptana-on-ubuntu-810/

2009年5月7日木曜日

PHP Smarty tips

最近PHPをちょこっとずつ勉強中。
Smartyのテンプレでよく使うであろうパターンの覚書。

escape修飾子と予約変数$smartyの組み合わせ

Smartyのテンプレでは、変数に修飾子というものを付加して表示結果を弄れる。escape修飾子は文字列中の記号などをエスケープしてくれる。
また、予約変数の$smartyを使うと、テンプレート内からPHPの定義済み変数にアクセスできる。
よくあるwebの入力フォームでは、入力エラーの場合に入力内容をそのまま表示仕返してやったりする。それを、Smartyを使えば次のようにテンプレートに記述することで済む。
<input type="text" name="hoge" value="{$smarty.post.hoge|escape}">

関数も修飾子として使える

escapeなどSmartyで用意されているものだけでなく、PHP側の普通の関数もテンプレート内から修飾子として呼び出せる。
例えば、入力内容をそのスクリプト自身にsubmitさせてやるようなフォームなら、basename関数を修飾子として使い、actionの指定もテンプレート内で動的に書き出せる。
<form action="./{$smarty.server.SCRIPT_NAME|basename}" >

2009年4月16日木曜日

What's "LANG=C" ?

コマンドを、日本語環境でなく英語環境で実行したいとき、LANG=Cと付けて実行してやったりする。
$ date$ LANG=C dateのそれぞれの実行結果を見比べると一目瞭然。

しかし、このCってのがよくわからん。英語環境を表すのにはenというのも用意されていて、実際に$ LANG=en dateとやると、やはり英語で表示してくれる。

じゃあ、Cって何なのよ。と思い調べてみた。
それで見つけたのが、次のページのこの記述
http://mailman.linuxchix.org/pipermail/techtalk/2002-November/013691.html
'LANG=C' sets the locale for gnumeric to the C locale. The 'C' locale is
defined as the "default" locale for applications, meaning that their
strings are displayed as written in the initial code (without passing
through a translation lookup).
それっぽい和訳
「'LANG=C'はgnumericのロケールをCに設定してくれる。この'C'ロケールというのは、アプリケーションにとっての"デフォルト"のロケールと定義されている。つまり、(翻訳をせずに)ソースコードに書かれているそのままの文字列を表示してくれるという訳だ」

注釈1)引用元ページでは、たまたまgnumericで実行した場合を例にあげているだけであって、上でやってるようにdateコマンドとか、もちろんその他のコマンドでもLANGの役割は同じ。
注釈2)Unix系OSでのアプリケーションの多言語対応は、素のままの表示メッセージの翻訳を各ロケールごとに作成し、アプリケーションの実行中に逐一対応するメッセージを翻訳ファイルから探してきて表示する。LANG=Cではそれをしない、ということ。

つまり、"英語で表示"というわけではなく、"翻訳しない"というだけの意味だそうだ。
もし、元々スワヒリ語のメッセージ表示を行うように作られたソフトがあったなら、LANG=Cを付けて実行した場合の表示はもちろん英語でなくスワヒリ語表示になるだろう。

結局、何故'C'という文字が当てられているのかはわかりませんでした。。。

<追記 20090430>
C言語のCみたいです。(コメントありがとうございました)
http://www.gnu.org/software/libc/manual/html_node/Standard-Locales.html
This is the standard C locale. The attributes and behavior it provides are specified in the ISO C standard.

2009年4月15日水曜日

eval command in bash shell script

シェルにevalコマンドっていうのがある、受け取った文字列を展開してそれを実行する、っていうイマイチよくわからない説明がよくされる。
それが、今回やっと理解出来たのでメモ

たとえば次の様な実行例
$ hoge="foo"; eval "echo $hoge"
foo
具体的にはどういう流れでこうなるのかというと、
evalは「echo $hoge」という文字列を受け取る。そして、文字列中の展開出来る箇所を展開する。
この場合は、シェル変数hogeにfooという文字列が入っているから、$hogeの部分はfooと展開される。
展開後にはその文字列が実行される。
$hogeはfooに展開されているから、実際に実行されるのは「echo foo」となる。
なので、表示結果は「foo」となったわけだ。

ところで、シェルスクリプトでは1次元配列しか扱えないのだけれど、
このevalを使うことで、2次元配列(多次元配列)を擬似的にだけれど、扱うことが出来る。

例として、3行3列の配列にランダムな値を入れていく。
#!/bin/sh

#declareコマンドでシェル変数iとjを整数値として生成。
#ただi=0とやると、0という文字を代入していることになってしまう。
declare -i i=0
declare -i j=0

#2重ループで、array_${i}_${j}の各要素にランダムな値を入れていく。
while [ $i -lt 3 ]
do
while [ $j -lt 3 ]
do
eval array_${i}_${j}=\$RANDOM
j=$j+1
done
j=0
i=$i+1
done

#各要素の内容を表示
i=0
j=0
while [ $i -lt 3 ]
do
while [ $j -lt 3 ]
do
eval echo array_${i}_${j}=\$array_${i}_${j}
j=$j+1
done
j=0
i=$i+1
done

結果
array_0_0=17314
array_0_1=30499
array_0_2=5518
array_1_0=19522
array_1_1=7919
array_1_2=2510
array_2_0=8634
array_2_1=31473
array_2_2=5638

「eval echo array_${i}_${j}=\$array_${i}_${j}」の行がわかりづらいので注釈。
 echo array_${i}_${j}=\$array_${i}_${j}
  ↓展開(i,jともに0の時点だとして)
 echo array_0_0=$array_0_0
表示結果は
array_0_0={要素[0][0]の数値}

それと、array_${i}_${j}のように、大括弧を入れて書くこと。
array_$i_$jでは、iの次のアンダーラインまで変数名の一部として展開しようとしてしまう。

2009年4月11日土曜日

IPA Font lisence changes!

IPAフォントが2009年4月中旬にもオープンソース・ライセンスへ,改変と再配布が自由に
http://itpro.nikkeibp.co.jp/article/NEWS/20090403/327784/

私なんかは、Ubuntu8.10で$ sudo apt-get install ipamonafontってやって使ってるクチなんですが、このライセンス変更のおかげで9.04からはまた標準でIPAモナーフォントが入ってくれないかしら? ……時期的に無理か。ぃゃ、でも9.10には入るんだろうなぁ。

モナーフォントは初期のIPAフォントのバグを抱えたまんまらしいって聞いたんですが、それでもMSゴシックと同じ文字幅ってのは"使える"と思うんですけどね。
Linux+OOoな法人/自治体もありますし、外部とやりとりするような文書作成なんかでは良いんじゃないかしら? 素人考え?

2009年4月3日金曜日

dot is separator

NTTドコモ、メールアドレスのルールを変更 〜 ピリオド連続などが使用不可に
http://www.rbbtoday.com/news/20090403/59059.html

メールアドレスを決める時、本来は次はアウト
・ドットから始まる
・ドットで終わる
・ドットの連続

だけど、docomoとauは今まで上記のルールから逸脱したアドレスでも登録出来るようになってた。世の中には、ルールから外れたメールアドレスが無効なものだとして、そういうメールを受け付けないメールサーバもあるので、docomo/からのメールを受信できない、またはdocomo/auへ送信できないっていう場合があったりする。

まぁそれは知ってたんだけど、でも何で?とふと思った。
で、ちょっと調べたら、当たり前な事実が出てきて、そんなことにも気づけなかった自分にorz

ドットって、メールに限らずアドレスでは基本的に区切りの文字として使うんですよね。
なので、区切り文字が先頭や最後尾にあったり、区切り文字が連続していたりするのはアウト、っていうわけ。

例えば、mixi.jpとか。mixi.jpというドメインの中で、ccTLD(国別コードトップレベルドメイン)のjpの部分を切り分けてる。