Backbone.js : View を使いまわす

View を使いまわしたくて、次のようなコードを書いたとする: var ActionsView = Backbone.View.extend({ events: { 'click .show': 'showContent', 'click .change': 'changeContent', }, showContent: function(event) { // じゃんじゃかインスタンスを生…

chrome.tab.sendRequest の代わりに chrome.runtime.sendMessage を使う

Chrome 33 以降、chrome.tabs.sendRequest は非推奨になった。 Deprecated since Chrome 33. Please use runtime.sendMessage. https://developer.chrome.com/extensions/tabs#method-sendRequest https://developer.chrome.com/extensions/extension#event-…

クリップボードにコピーする

拡張機能からクリップボードに文字列をコピーしたい。 方法 background の body に textarea を追加する。 textarea にコピーしたい文字列を設定する。 textarea を選択状態にする。 "copy" コマンドを実行する。 サンプル 次のような機能を持つ拡張機能をつ…

ショートカットキー(キーバインド)

ショートカットキーから拡張機能を実行したい。 結論 大きく分けて方法は2つ。 commands を定義する。 標準のキーバインドが優先される。 バインド可能なキーが限定される。 content_script がキーイベントをハンドルする。 自由にバインドできる。 標準の…

JSONファイルをコンフィグとして読み込む

たとえば、次のようなJSONファイルがある: { "google": "https://www.google.co.jp/", "yahoo": "http://www.yahoo.co.jp/", "": "" }これをコンフィグとして仮想配列に読み込みたい。 方法 Chrome 拡張のローカルファイルは、XMLHttpRequest により読み込…

HTMLElement.value の代わりに、innerHTML または textContent を使う

特定のIDの値によって振る舞いが変化する拡張機能をつくろうとして、 getElementById の value が undefined になり困り果てた。 タブ更新時 URL に 'yahoo' を含む場合、pageAction アイコンを表示 pageAction アイコンをクリック時 Yahoo! トップページの …

background から HTML を取得する

background から HTML を取得したい。 タブ更新時 URL に 'yahoo' を含む場合、pageAction アイコンを表示 pageAction アイコンをクリック時 Yahoo! トップページの HTML を取得したい(←ここ) 結論 やりかたは2通り: chrome.tabs.executeScript によりコ…

ChromeExtensions 基礎

頭の固い業務ページでの単純作業に時間を割かれることが耐えがたく、 シェルスクリプトのように拡張機能を使おうと思い立ち、数日前に入門した。誤認があるかも知れない。 何ができるのか大きくわけて2つ。後者をやりたい。 webサービスのAPIを使って、いろ…

指に追従するアニメーション

「Lollipop のステータスバーを引っ張り出した時に、ステータスバーのアイコンが動いたり、設定アイコンがくるくるってなるけど、どうやってるの?」心の声「知らんがな(´・ω・`)ggry」ggっても出てこなかった。確かに、どうやっているんだろう。 調…

TestCaseのassetsを使う

AndroidのTestCaseのassetsを使いたい。 解決 AndroidTestCaseを継承するテストケースの場合 リフレクションを使ってテストケースのContextを参照する。参考記事 http://ikkandou.blogspot.jp/2011/08/androidtestcase.html InstrumentationTestCaseを継承す…

Ubuntuにgolangをインストールする

Ubuntu 12.04 に golang をインストールしたい。 解決 Go言語は、公開されているアーカイブを展開して、PATHを通すだけでインストールできる。ぐぐって見つけた記事では、googlecode.com からダウンロードする手順になっていたが、2014年12月現在では、googl…

Android WebView の進化と実装

Android WebView は Android のバージョンごとにブラウザエンジンが異なる。 Android 4.1~4.3(JellyBean)まで: WebKit Android 4.4(KitKat)から: Chromium ※Chromium のレンダリングエンジンは Blink であり、Blink は WebKit をベースとしている。さら…

adbによるログ&キャプチャ&録画

ファイル名の末尾に「_年-月-日_時-分-秒」を付けている。お好みに合わせて。 logcat.bat ログを取得するバッチ。 @echo off set time2=%time: =0% set time3=%date:~-10,4%-%date:~-5,2%-%date:~-2,2%_%time2:~0,2%-%time2:~3,2%-%time2:~6,2% @echo on adb…

レイアウトにまつわる本当にあった怖い話

窓の外は息が凍るほど寒く、開発室はPCとサーバーの熱気で汗ばむほど暑かった。私の住む日本の北にある街から遠く離れた海外の会社からソースが送られてきた。慣れた手つきで早速ソースを解凍してビルドし、手元に並ぶスマートフォンのひとつにインストール…

ActionBarのTabの高さは48dpまで(JellyBean以降)

たとえば、アクションバーのタブの高さを設定したくて、こんなコードを書いたとする。 <style name="Theme.MyTheme" parent="android:style/Theme.Holo.Light"> <item name="android:actionBarTabStyle">@style/MyActionBarTabStyle</item> <item name="android:actionBarSize">100dp</item> </style>

テーブル名の一覧とテーブル定義を表示するコマンド

たまにしか使わないと忘れるのでメモ。 コマンド 説明 .tables テーブル名の一覧を表示する .schema <テーブル名> テーブル定義を表示する .exit sqlite3を終了する sqlite3 コマンドにより db ファイルを開く。 root@generic:/ # sqlite3 /data/data/com.an…

パッケージ一覧を表示する

シェルからpmコマンドを実行する。 adb shell pm list packages 実行結果 C:\>adb shell pm list packages -f package:/system/app/SoundRecorder.apk=com.android.soundrecorder package:/system/app/SdkSetup.apk=com.android.sdksetup package:/system/pr…

起動されているアクティビティを特定する

ソースは手元にあるが設計書が手元にない、なんてことはよくある話。 私の尊敬する某プログラマが「コードとは設計である」という発言をしていて、 然なりと思うのだけれど、設計に足りうるコードになっていればの話。 それでも設計書がなくてもアクティビテ…

コマンドプロンプトからSQLコマンドを実行する (Windows)

バッチファイルをつくっておくと便利。 SQLコマンドはダブルクォーテーションで囲む。SQLコマンド内の文字列はシングルクォーテーションで囲む。 adb shell sqlite3 <dbファイル> "SQLコマンド" ex. 未読の不在着信を表示 adb shell sqlite3 /data/data/co…

ViewPagerのキャッシュする画面数を変更する

ViewPagerの生成時に複数のページを生成してキャッシュしておきたい。 解決 // 2ページ生成 mViewPager.setOffScreenPageLimit(2); 説明 一般的に OffScreen とは、生成されていて描画されていない画面のことを指すが、ViewPager では生成されていないページ…

ViewPagerのイベントをハンドルする(アニメーション)

検証 ViewPager.PageTransformer を継承したコードを書いて、動作を検証する。 mViewPager.setPageTransformer(false, new ViewPagerTransformer()); private class ViewPagerTransformer implements ViewPager.PageTransformer { private static final Stri…

ViewPagerのイベントをハンドルする(ページ移動)

検証 ViewPager.SimpleOnPageChangeListener を継承したコードを書いて、動作を検証する。 mViewPager.setOnPageChangeListener( new MyOnPageChangeListener()); private class MyOnPageChangeListener extends ViewPager.SimpleOnPageChangeListener { pri…

LongSparseArray

たとえば、特定の機能を高速化するために、あるテーブルのクエリ結果をキャッシュしたいとする。 無為にクエリ結果をキャッシュするのは避けるべき。 キャッシュすると、データベースのACID特性が損なわれ、ヒープを大量に消費する。 こういうとき、HashMap…

Activity#runOnUiThread(Runnable)のススメ

たとえば、非同期処理からUIスレッドに描画したくて、こんなコードを書いたとする。 private mHandler = new Handler(); private void sayHello() { mHandler.post(new Runnable() { @Override public void run() { Toast.makeText(this, "Hello?", Toast.LE…

assetのzipファイルを展開する

起動時に assets の tessdata.zip を展開する。■展開元 tessdata.zip■展開先 /data/data/com.example.android.tesseract/fileszipファイルをそのまま展開するので、 tessdata.zip tessdata eng.traineddata という構成になっていること。 MainActivity.java …

Handlerのリーク警告を解決するには

たとえば、こんなコードを書いたとする。 「Handlerはstaticにしないとリークするよ!」と注意される。 This Handler class should be static or leaks might occur 解決 (a) static内部クラスにする 単純にstatic内部クラスに置き換えることができるのなら…

tesseract-android-toolsの導入

画像データをテキストに変換したい。 tesseract-android-toolsを導入する。 前提 Android SDK と NDK が正常に動作する Linux 環境が整っていること Windows (Cygwin) ではビルドできないらしい。 その問題に挑戦するのも面白そう。たぶんやらない。 環境 Ub…

EclipseからAndroid NDKサンプルプロジェクトをビルドして実行(Linux)

Eclipse から Android NDK サンプルプロジェクトをビルドして実行する。 前提 Java の開発環境が整っていること。Ubuntu では Java はプリインされていたので、何もしてない。 Android SDK をダウンロード http://developer.android.com/sdk/index.htmlダウ…

EclipseからAndroid NDKサンプルプロジェクトをビルドして実行 (Windows)

Eclipse から Android NDK サンプルプロジェクトをビルドして実行する。 前提 Eclipse INDIGO (3.7) から Android SDK サンプルプロジェクトのビルドと実行ができること。 Cygwin をインストール http://www.cygwin.com/cygwin1.dllのバージョンは「1.7.17-1…

Androidソースの取得

Ubuntu に git をインストールし、Androidソースを取得したい。 Ubuntu に git と curl をインストール $ sudo apt-get install git-core curl Androidソースを取得(同期) 公式の手順に従って、Androidソースを取得。2時間半以上。http://source.android.com…