サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
2024年ランキング
kokufu.blogspot.com
VS Code のターミナルで Ctrl + p を使えるようにする [Visual Studio Code](https://code.visualstudio.com/) がどんどん便利になってきてます。 最近、[Remote Development](https://github.com/Microsoft/vscode-remote-release) を入れたのですが、遠隔マシン上のコードがさもローカルにあるかのように扱えて重宝しています。 しかし、そうなると気になるのがターミナルの使い勝手。 Remote 中は付属ターミナルの方が圧倒的に便利既にssh接続済みのターミナルが複数作れるなので、別途ターミナルを開くのは、あり得なく感じます。 ところが一つ問題が。Ctrl + p を押すと、"Go to File" 機能が働いて、ターミナルからフォーカスが外れてしまうのです。 私の使っ
モニタをつないでいない Ubuntu の Vino に接続する @Ubuntu 16.04 LTS [Vino](https://github.com/GNOME/vino) はそもそも画面をミラーリングするアプリケーションなので、画面出力をしていないマシンにつなぐことは出来ません。 しかし、バックグラウンドで GUI アプリケーションを動かしておきたい場合、モニタ無しで VNC 接続したいこともあります。 そんな時は、ダミーのグラフィックドライバをインストールすることで接続出来るようになります。 > 参考 > > [Vino - ArchWiki](https://wiki.archlinux.jp/index.php/Vino#.E3.83.98.E3.83.83.E3.83.89.E3.83.AC.E3.82.B9.E3.82.B5.E3.83.BC.E3.83.90.E3.83.B
Linux で Logicool Unifying Receiver のペアリングをする方法 Android 端末にキーボードとマウスを繋いで検証する必要が出てきたので、新たに [Logicool](https://www.logicool.co.jp/ja-jp) のキーボードを買いました。 マウスは以前買ったものがあり、[Unifying Receiver](https://www.logicool.co.jp/ja-jp/promotions/6072) を使えばUSBポートの節約にもなるというわけです。 Unifying Receiver は購入時にペアリング済みなので、USB端子に挿せばそのまま USB の有線キーボード・マウスのように使用可能です。ただ、今回のように別々に買った場合は、どちらかを再ペアリングする必要があります。 再ペアリングには Logicool の提供している
アプリケーション開発から組み込みまで手を出しているフリーランスのエンジニア 何故か C,C++ の仕事をすることが多いけど、本当は Java や C# が好き 最近は Android がらみ多し ► 2024 (1) ► 8月 (1) ► 2023 (2) ► 9月 (1) ► 1月 (1) ► 2021 (1) ► 7月 (1) ► 2020 (3) ► 3月 (3) ► 2019 (11) ► 11月 (2) ► 10月 (1) ► 9月 (1) ► 6月 (2) ► 5月 (2) ► 4月 (2) ► 2月 (1) ► 2018 (60) ► 12月 (5) ► 11月 (5) ► 10月 (7) ► 9月 (2) ► 8月 (2) ► 7月 (1) ► 6月 (5) ► 5月 (3) ► 4月 (4) ► 3月 (8) ► 2月 (13) ► 1月 (5) ► 2017 (22)
Emacs で日本語を保存しようとすると "undecided-unix cannot encode" というエラーが出るようになったので修正してみた ### 日本語のメッセージ保存でエラー 私は [Git](https://git-scm.com/) のエディタとして [Emacs](https://www.gnu.org/software/emacs/) を使用しています。 つい最近まで問題なく使用していたのですが、ここ最近、日本語(マルチバイト)のメッセージを保存しようとすると以下のようなエラーが出るようになってしまいました。 都度、コーディングシステムを指定すれば保存は出来るのですが、不便なので原因を探ってみました。 ``` These default coding systems were tried to encode text in the buffer `COMMIT_ED
apksigner で未署名の apk に後から署名する方法 未署名の apk に署名するツールは、build-tools 24.0.3 以降から `jarsigner` の代わりに `apksigner` を使うようになりました。 `zipalign` の実行順序など細かいところが変わっていますのでご注意ください。 なお、署名済みの apk を未署名にする方法は以下を参照してください。 > 参考 > - [署名済みの apk から署名を削除する方法 | 穀風](http://kokufu.blogspot.jp/2016/12/apk_27.html) ### Overview 全体の流れとしては以下のようになります。 - zip のアライメント調整 - 署名 - 検証 具体的には以下。 ```console `gutter: false; $ zipalign -v -p 4 my-a
バッチファイルで virtualenv activate する Windows でタスク処理をする必要が出てきたので、超久しぶり10年以上…か?にバッチファイルを書きました。 と言っても、処理自体は Python で書いて、起動をバッチファイルで行うだけなので簡単・・・と思っていたら、ハマりました。 ### activate しようとすると止まってしまう 私が最初に書いたバッチファイルが以下です。 `test` という名前の virtualenv を activate して、`main.py` を実行するだけ。 当然、問題なく動くと思ったのですが、`activate.bat` を呼んだ直後に止まってしまうのですちなみに、`%HOME%` はホームディレクトリを指定してます。 ``` "%HOME%\Envs\test\Scripts\activate.bat" cd "%HOME%\tas
Docker で GUI アプリケーションを実行する方法 「[Docker](https://www.docker.com/) 上で GUI アプリケーションを動かす」という投稿を見つけたので、ちょっとやってみましたDocker でインタラクティブな GUI を動かすのは本来の思想に合ってないという点はとりあえずおいておく。 > 参考 > - [Running GUI apps with Docker – Fábio Rehm](http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/) ポイントは以下の3点です。 - 実行時に X11 ソケット `/tmp/.X11-unix/` をボリュームとして共有 - user ID, group ID をホストのユーザーと同じにする - `DISPLAY` 環境変数をホス
[Android Drawable Importer](https://github.com/winterDroid/android-drawable-importer-intellij-plugin) というプラグイン一般的によく使われるようなアイコンを一発で追加できるプラグインです。結構便利。を使って Vector Drawable を追加すると、`drawable-anydpi` というディレクトリに追加されます。 前々から気になっていた `drawable-nodpi` との違いを調べてみたところ、意外と情報が少なかったのですが、こちらのブログに情報がありました。 - [The CommonsBlog — -nodpi, -anydpi, and WTF?](https://commonsware.com/blog/2015/12/21/nodpi-anydpi-wtf.html)
Python 3 で配列の型を一括変換する方法 自分のための備忘録として (for Python 3動作確認は Python 3.4.3) 以下のような文字列配列を `int` に変更する ```python >>> data ['12', '345', '6789'] ``` ### map を使う方法 ```python >>> list(map(int, data)) [12, 345, 6789] ``` Python 3.1 より以前は `list()` は必要ないので注意。 > 参考 > [Python3でmapがmap objectを返す(ようになった)件 | swimmingpython blog](http://swimmingpython.net/ja/?p=565) ### リスト内包表記List Comprehensionsを使う方法 ```python >>> [
OpenLayers 3 でマーカーを表示する方法 2種 調べた限り、OpenLayers 3 でマーカーを表示する方法は2通りある様子OpenLayers 3.6.0 で確認。 Feature を利用する方法 マーカー用のレイヤを用意して、そこに Feature を配置する方法です。 以下のオブジェクトが必要になります。 ol.Feature 座標情報など各マーカー毎に持つ情報を管理するオブジェクト。 ol.style.Style Marker のアイコンや表示文字など、見た目に関する情報を管理するオブジェクト。 各Feature に適用することも出来るが、全て同じマーカーにする場合は Layer にセットすることも可能。 ol.source.Vector Feature 一覧をまとめたもの。 ol.source にはいろいろな種類があり、Feature を使わないで外部から取り込んだり
Android の Log をリリース時にだけ表示しないようにする方法 Android に限らず、プログラムを書く上で Log を仕込むのは重要な作業です。 しかし、デバッグ用に出力した Log はリリースビルドでは出力しないようにしたいものです。 Java にはプリプロセッサがありませんので、Android アプリの開発時、私は以下の様な方法(もしくは、同様のライブラリを作成すること)でデバッグ時にログを出力しないようにしてきました。 if (BuildConfig.DEBUG) { LOG.d(TAG, "This is a log message"); } しかし、先日購入した 50 Android Hacks 開発現場ですぐに役立つヒントとコード に、もっとエレガントな方法が載っていました。 それは ProGuard を利用して、後から Log を削除する方法です。 確かに、And
AndroidStudio でビルドしたら MissingTranslation エラーが出た時の対処方法 Android Studio で Build → Generate Signed APK... とすると、以下のようなエラーが出てビルドできませんでした。 Error:(4) Error: "app_name" is not translated in "ja" (Japanese) [MissingTranslation] 「app_name を日本語に翻訳していないよ」というエラーなので、意味はわかります。 しかし、これはあえてなんです。全部の文言を日本語に翻訳するのは現実的ではありません。 せめて Warning にしておいてくれればいいのに。 きっと、これを Error にしたのは実際には Translation をあまり使わない英語圏の人たちなんでしょうねぇ。 というわけで
PreferenceActivity で isValidFragment を override していないと RuntimeException が発生する Eclipse の ADT ではいくつかのテンプレートが用意されていて、お決まりの class を作成する場合とても重宝しますNew → Other → Android → Android Object で選択できます。。 Settings Activity もそのひとつ。 このテンプレートを使用すると、multi-pane layout の設定画面を手軽に作成することが出来ます。 multi-pane layout というのは、以下のように小型スマートフォンと大型タブレットで表示形式を変えるレイアウトのことです。 ところが、このタブレット用の画面を Android 4.4 (Kitkat) のタブレットで表示すると以下のような Run
ScrollView を使わないで TextView に スクロールバーを表示する Android の ScrollView、便利なのですが、内容にあわせて高さを変更したい場合などには向いていません。 特に、TextView の最大高を行数で指定したい場合、ScrollView を使用することが出来ません。 まぁ絶対使えないのかと言われると不可能ではないと思いますが、かなり面倒くさいことになると思います。 では、簡単に出来る方法は無いのかというと、View には Scrollbar を表示する機能がデフォルトでついているので、これを利用することが出来ます。 参考:Android TextView with scrollbars and maxHeight - Stack Overflow まず、生成する TextView を以下のように定義します。 <TextView android:id
どの ID を識別に使用すべきか? 現在、私が参照しているコードは AOSP の Android 4.2.1_r1.2 ですが、 UserId を取得する UserHandle.myUserId() や AppId を取得する UserHandle.getAppId() に @hide属性がついています。 つまり、正規の手段では呼ぶことが出来ません。 どうしても UserId が欲しい場合は、自分で uid を 100000 で割るか、リフレクションを使用するしかないようです。 しかし、そういう実装は新たな不具合の原因となるので、極力避けるべきでしょう。 それに対し、UserManager.getSerialNumberForUser() に @hide属性は付いていませんし、その javadoc には以下のように書いてあります。 Return the serial number for
Eclipse CDT 上で Android NDK を使った JNI 作成環境を構築する 昔はコマンドラインから ndk-build を叩かないといけなかった Android NDK ですが、 いつの頃からか、Eclipse CDT 上でビルド出来るようになりました。 せっかくの統合開発環境ですから、これを使わない手はありません。 というわけで、環境構築方法を書いておこうと思います。 以下、前提条件です。 ADT インストール済みで Java アプリケーションが作れる CDT がインストール済み Android Native Development Tools がインストール済み Preprocessor Include Paths を無効にする Eclipse 4.2 (JUNO) 以上を使用している場合は、以下の作業をしておかないと include path が適切に処理されません。
Android SDK をアップデートしたら BufferOverflowException が出るようになった 最近、ちょっと古い Android Project を Eclipse で実行しようとすると以下のようなエラーが起こるようになりました。 Android Console の出力 [2013-11-14 22:04:14 - Dex Loader] Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace. [2013-11-14 22:04:14 - LifeCycleTest] Conversion to Dalvik format failed: Unable to execute dex: java.nio.BufferOverflowExc
android.net.Uri と java.net.URI の違い Android でネットワーク系の開発をしていると必ず出てくる Uri。 これ、android.net.Uri と java.net.URI と2種類あって混乱する時があります。(java.net.URL ってのもありますが、それはまた別のお話) で、どう違うのか調べてみたので備忘録として書いておきます。 まず、どちらも URI を表すクラスである点では同じです。 参考 Uniform Resource Identifier - Wikipedia RFC 2396 そして、パッケージ名を見れば明らかなのですが、 android.net.Uri は android 用に作成されたクラスなのに対して、 java.net.URI は java で定義されているクラスです。 (import しちゃうと途端に区別がつきにくくなる
Google Play の Licensing サービスを使う Google Play には、そのアプリが正規に Google Play からダウンロードされ、そのアカウントに利用権限があるかどうか確認するためのサービスがあります。 これにより、 「有料アプリをダウンロード。その後、すぐ apk をSDカード等にコピーして、購入をキャンセル。すると無料でアプリを使用出来る」 という裏技が(簡単には)使用できなくなるので、有料アプリを公開している方は是非導入すべきでしょう。 ちなみに、LVL (License Verification Library) というと通りが良いようですが、LVL は Licensing Service を Android アプリに組み込む時に使用するライブラリのことです。 というわけで、Google Play の Licensing Service を導入してみま
我が家の Ubuntu は Nexus7 を接続しても、うんともすんとも言ってくれません。 これでは少々使い勝手が悪いので、USBメモリのように接続したら自動でマウントして表示されるようにしてみました。 参考にしたのは以下のサイトです以下のサイトでは go-mtpfs を使用していますが、私は標準の mtpfs を使用しました。 mtpfs のインストール mtpfsをインストールします。 $ sudo apt-get install mtp-tools mtpfs fuse.conf の編集 /etc/fuse.conf を管理者権限で開き、user_allow_other のコメントアウトを外します。 /etc/fuse.conf # Allow non-root users to specify the 'allow_other' or 'allow_root' # mount op
Java にはキャッチされなかった例外により Thread が突然終了した場合、あらかじめセットしておいた UncaughtExceptionHandler.uncaughtException() が呼ばれるという機能があります。 本来、キャッチされない例外が発生するのは避けなければなりませんが、どう頑張ってもバグは入り込むもの。 そのため、バグレポートやリソースの保全等に使用されることが多いようです。 この機能、適切に使用すると便利なのですが、使用方法を誤ると ANR (Application Not Responding) が発生する不具合につながります。 以下、その原因と対策について調べてみました。 ANR を発生しないようにする方法 ちょっと順番を変えて、先に対策から書いてみたいと思います。 以下のコードを実行し、ボタンを押すと ANR が発生します。 public class M
AndroidアプリのデータはSDカードのどこに保存すべきか? 元ネタは↓。 Storage Options | Android Developers Androidアプリを開発していると、大きなデータを扱わなければならないことが多々あります。 そのようなデータをSDカードに保存する場合、どこに保存すべきなのでしょうか。 SDカードではなく外部ストレージ 元ネタには以下のような記述があります。 It's possible that a device using a partition of the internal storage for the external storage may also offer an SD card slot. In this case, the SD card is not part of the external storage and your app
Exception が発生した時の LogCat の読み方 (1) 先日、知人が Exception (例外)が発生した時のデバッグが大変だと言うので、話を聞いてみたところ、LogCat を使っていないということがわかりました。 いや、正確には LogCat 自体は知っていて、怪しそうなところに片っ端からログを出力してデバッグしているとのこと。 いわゆる printfデバッグですね。 デバッグ手法として間違ってはいないけど、まずはスタックトレースの見方を知らないと大変だよねってことで、結構真面目に説明してあげました。 せっかくなので、ここにも書いておこうかと思います。 まずは、サンプルコードを作ります。 今回は、ボタンを押したら Exception が発生するサンプルを作成してみました。 以下にアップロードしてあります。 ExceptionThrower.zip あえて、どんな Excep
Eclipse ADT を Ver. 22 にしたら ClassNotFoundException が発生するようになった Eclipse ADT を Ver. 22 にしたら gen ディレクトリ以下が生成されなくなる問題を解決し、ビルドが通るようになったので、これまで動いていたアプリを再ビルドし、実行して見ました。 すると! FATAL EXCEPTION: main java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.test/com.example.test.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.example.test.MainActivity" on pat
Android端末 を Ubuntu 12.04 にメディアデバイスとして接続する 昨日、Nexus7 を Ubuntu にメディアデバイスとして接続する というエントリを書いたのですが、このご時世に、いちいち手動でマウントポイントを用意するのも何だなぁと思い、gvfs でマウントできないものか調べてみることに。 すると、結構あっさり以下のサイトにたどり着きました。 なぜ昨日たどり着かなかった、俺… ふむふむ。Ubuntu 13.04 では gvfs がアップデートされて Android 4.0 の端末MTPアクセスの端末という意味だと思われますにアクセスできるようになったと。 そして、12.04, 12.10 では PPA レポジトリを追加することによって、gvfs をアップデートでき、同じようにアクセス可能になるってことだそうです。 というわけで、早速やって見ました。 まず、以下のコマ
proxy 越しに sudo を使う @ Ubuntu 12.04 LTS proxy 設定の必要なマシンで sudo コマンドを使う場合、ユーザの環境変数が引き継がれないので注意が必要のようです。 例えば、add-apt-repository とかを使う場合、以下のような名前解決が出来ない旨のエラーが出てしまいます。 $ sudo add-apt-repository xxx pycurl.error: (6, "Couldn't resolve host 'launchpad.net'") こういうときは、/etc/sudoers に以下を記述してやればオッケー。 Defaults env_keep="http_proxy" Defaults env_keep+="https_proxy" 注意点としては、 sudoers の編集には visudo を使用すること 2番目の env_k
configChanges=”orientation” を指定しているのに回転時に Activity が再生成される!? Android の Activity は回転時に再生成されるという事実は、かなり有名だと思います。 そして、AndroidManifest.xml に android:configChanges="orientation" を記述しておくと、再生成を抑制してくれるというのも結構有名だと思います。 参考: Handling Runtime Changes | Android Developers <activity android:name=".MyActivity" android:configChanges="orientation" android:label="@string/app_name"> ところが、我が家の Nexus7 では、上記のように設定しているの
ExifTool.exe の簡単な使い方 - 編集編 for Windows ExifTool をダウンロードして、使えるようにするところまでは、ExifToolの簡単な使い方 - 表示編 に書いたので、参考にしてください。 EXIF の値を変更するのはとても簡単です。 以下のように、TAGに対して値を入れてあげればオッケー。 $ ./exiftool.exe -TAG=VALUE hoge.jpg たとえば、画像に緯度経度情報を入れる場合は、以下のようにします。 $ ./exiftool.exe -gpslatitude=35.368475 -gpslongitude=138.721061 hoge.jpg 情報を消す場合は、=の後ろを空欄にします。 その他の書き方は、サイトにあった表がわかりやすいので訳してみました。 SyntaxResult
次のページ
このページを最初にブックマークしてみませんか?
『kokufu.blogspot.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く