Tag Archives: バグ

MusicFly v2.2.3リリース XperiaMini対応

Tagged , , , , ,

弊社BPSで開発しておりますAndroid端末向け音楽試聴アプリMusicFlyを先ほど1週間ぶりにアップデートしました。 今回のアップデートにより XperiaMiniに代表される低解像度端末や、反対の高解像度端末などへの対応を果たし 全スクリーンサイズ対応のアプリケーションとなりました。 技術者向けの参考情報 また、以前より原因が解明できずにいたバグのいくつか解決することができました。 そのうちの一つがAndroid1.5でのみタブを利用した画面で強制終了してしまうクリティカルなバグであり、 今回無事解決しました。技術者向けの詳しい話はこちらで。 該当端末を利用している方にはご不便おかけしました。

Android 1.5でTabHostを使った場合、StackOverflowErrorが発生する

Tagged , , , ,

Androidで便利な、タブ表示。 これは、TabActivity, TabHost, TabSpecを使って簡単に実現できます。 src/MainActivity.java package jp.bpsinc.android.tabtest; import android.app.TabActivity; import android.os.Bundle; import android.view.LayoutInflater; import android.widget.TabHost; import android.widget.TabHost.TabSpec; public class MainActivity extends TabActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TabHost tabHost = getTabHost(); LayoutInflater.from(this).inflate(R.layout.main, tabHost.getTabContentView(), true); //タブを作る TabSpec tab1 … Continue reading

IEでJavaScriptからButtonのtypeを変更できない

Tagged , , ,

JavaScriptで動的にエレメントを作成するときは、 var div = document.createElement(‘div’); のようにやります。 たとえば、ボタンを作ってそのボタンにクリックイベントを追加、などの良くある処理は、jQueryを使って、 var button = $(document.createElement(‘button’)) .attr(‘type’, ‘button’).text(‘ぼたん’); button.click(function() { alert(‘hello’); }); $(‘#hoge’).next(button); のようにやると思います。typeを設定しているのは、デフォルトだとsubmit扱いになってしまうからです。 しかしこれ、IEだとエラーになります。 type property can’t be changed buttonのtypeはなぜか読み取り専用プロパティらしい・・・ ということで、ちょっとダサイですが、以下のようにやって解決。 var button = $(‘<button type=”button”>ぼたん</button>’); 以上、ちょっとした注意点でした。

PythonのSQLiteで検索しようとしたらIncorrect number of bindings supplied. The current statement uses 1, 10 supplied.とか言われた

Tagged , , , ,

最近の言語はSQLite3のライブラリが入っていることが多いですね。 Python 2.6でも簡単で、 import sqlite3 db = sqlite3.connect(‘data.db’) db.execute(‘create table users (id integer primary key, name text, age integer)’) db.execute(‘insert into users (name, age) values (?, ?)’, (‘yamada’, 21)) のように簡単に扱えます。 ところが、使い方を間違えると Incorrect number of bindings supplied. The current statement uses … Continue reading

Twitter OAuthのrequest_tokenするところで、CallbackURLを指定したときだけ401 Unauthorizedになる場合

Tagged , , , , , , ,

Twitter APIで認証ページに遷移させるときは、http://twitter.com/oauth/request_token にリクエストトークンを発行依頼します。 しかし、設定を間違えるとここで401 Unauthorizedが発生してしまうことがあります。 Tweepyの場合、以下のようなコードになると思います。 consumer_token = “xxxxxxxxxx” consumer_secret = “xxxxxxxxxxx” callback = “http://www.bpsinc.jp/” auth = tweepy.OAuthHandler(consumer_token, consumer_secret, callback) redirect_url = auth.get_authorization_url() 今回は、auth.get_authorization_url()のところで、401 Unauthorizedが発生しました。 OAuthHandlerの第3引数、callbackを無しにすると、うまく動きます。 なぜかと思ったら・・・ Twitterのページでアプリを登録する際に、「ブラウザアプリケーション」を選んで、Callback URLを入力し忘れると、自動的にクライアントアプリケーションになります。 クライアントアプリケーションでCallbackは使えないため、401エラーが返っていたようです(400 Bad Requestを返して欲しかったな・・・)。 また、登録したアプリがBANされた場合にも、同じ現象が発生するようなのでご注意下さい。

OAuthライブラリが謎の停止

Tagged ,

CakePHPでOAuthを使うのに、このライブラリが有名だと思います。 http://code.42dh.com/oauth/ MITライセンスなのが良いですよね。 ところが、これを使ったCakePHPのシステムで、debug=2の時は動くのに、debug=0にすると動かないという謎の問題に出くわしました。 止まる場所は、認証ページへのリダイレクトに使う、 $consumer->getRequestToken(‘http://twitter.com/oauth/request_token’, $callback); のあたりです。 ソースを追ってみたところ、OAuth.phpの以下の場所で止まっていました。 public function get_normalized_http_url() { $parts = parse_url($this->http_url); $port = @$parts['port']; // ←ここ!! $scheme = $parts['scheme']; $host = $parts['host']; $path = @$parts['path']; $port or $port = ($scheme == ‘https’) ? ’443′ : … Continue reading

Xperiaの解像度が320*569になる

Tagged ,

Xperiaの解像度は480*854です。 しかし、以下のコードで解像度を取得すると、320*569と返ってくることがあります。 Display disp = getWindowManager().getDefaultDisplay(); int dispWidth = disp.getWidth(); int dispHeight = disp.getHeight(); こんな時の検索ワードは、ずばり「Xperia 569 320」ですね。 発売直後に既に回答が議論されていました。 http://groups.google.co.jp/group/android-group-japan/browse_thread/thread/5fad044c9b0429dd 要するに、minSdkVersion=”4″にしろということですね。 まあ、Android 1.5の機種はほぼ絶滅なので、特に問題はないんですが、なんだこれ・・・・

jQuery.formとJSONView

Tagged , , ,

JSONViewは、Firefoxで application/json なコンテンツを綺麗に表示するプラグインです。 とても便利ですね。 ところが、jQuery.formプラグインなどと組み合わせると、不具合を起こすことがあるので注意が必要です。 一般的なajaxでは、 $.ajax({ url: ‘hogehgoe’, success: function(data, dataType) { } }); といったやりかたをしますが、このときは特に問題ありません。 しかし、jQuery.formで $(‘form’).ajaxSubmit() を使う場合、内部的には$.ajaxは使用されていません。 XMLHttpRequestでは画像データ等のmultipart/form-dataを送信できないため、ダミーのiframeを作って、そこをターゲットにformの送信を実行しています。 //jquery.form.jsの内部コードのイメージ var iframe = ‘<iframe id=”hoge” onload=”irame-onload”></iframe>’; $(‘form’).attr(‘target’, ‘hoge’); $(‘form’).submit(); これで、ajaxSubmitをすると、結果がiframeに入ります。 iframeのonloadイベントで、内部のinnerHTMLを見て、結果を呼び出し元に返す処理を行っています。 ここで、iframeの中身がどんな値になるかは、ブラウザの実装依存です。 一般に、プレインテキストやJSON形式が渡ってきたとしても、DOMツリーを構築するためにbodyタグまでは作ってしまうようです。 良くあるパターン <html> <head></head> <body>{“result”:”これが結果です”}</body> </html> jquery.formプラグインは、ブラウザがbodyタグの中に直接値を入れるか、またはpreやtextareaに値を入れることを期待しています。 … Continue reading

AppWidgetManager.updateAppWidgetの注意

Tagged , , ,

Androidのホームスクリーンウィジェットを更新するには、AppWidgetManager.updateAppWidget()を使います。 RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.provider); remoteViews.setTextViewText(R.id.Text01, “hello”); AppWidgetManager manager = AppWidgetManager.getInstance(context); manager.updateAppWidget(new ComponentName(context, MyProvider.class), remoteViews); これを連続で呼ぶときには、少し注意が必要です。 たとえば、ボタンのクリック操作にPendingIntentを割り当てるような処理は初期化時のみに行い、ウィジェットを使用中には表示の更新のみを行うような場合、以下のようにやりたくなると思います。 private void init(Context context) { RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.provider); remoteViews.setTextViewText(R.id.Text01, “”); PendingIntent clickIntent = PendingIntent.getBroadcast(context, 0, new Intent(“MYACTION”), 0); … Continue reading

Railsでdevelopmentモードでもエラー情報が出ない

Tagged ,

Railsではエラーが発生した際、developmentモードではstacktraceなどが詳細に表示され、productionモードでは詳細が全部隠れて表示されます。 しかし、developmentモードで動作しているはずなのに、詳細なエラーが出ないことがあります。 DBへの接続でエラーになった際は、productionと同じ画面が出たことがありました。 他にありがちなのは、エラー詳細画面をrenderする際のエラーです。 今回は、エラーログに、以下のようなエラーが出ていました。 ActionView::TemplateError (wrong number of arguments (1 for 2)) in C:/ruby/lib/ruby/gems/1.8/gems/actionpack-2.3.5/lib/action_controller/templates/rescues/_request_and_response.erb: -e:2:in `load’ -e:2 Rendered rescues/_trace (42.0ms) /!\ FAILSAFE /!\ Fri May 28 11:45:52 +0900 2010 Status: 500 Internal Server Error エラー画面は /lib/action_controller/templates/rescues/_request_and_response.erb: ですが、このテンプレートの中では、debugなどの関数を使っています。 今回の原因は、自前で「引数2個の」debug関数を作っていたことでした。 上記エラーからそれが読み取れます。 … Continue reading