日々精進

新しく学んだことを書き留めていきます

2015-04-01から1ヶ月間の記事一覧

Android4.1〜4.4でDatePickerDialogのボタンが「完了」のみになる

DatePickerDialogのボタンはOKとキャンセルの二つのはずなのに完了しか表示されない。。。と思ったらAndroidのバグらしい。4.1〜4.4で発生する。 このバグはIssueTrackerに登録されているが何年も放置されているので直ることはないだろう。 https://code.goo…

Androidの回転制御 端末の自動回転設定がOFFの場合は回転させない

端末を回転させたら画面も回転させる場合、以下を実行していたがSCREEN_ORIENTATION_SENSORだと端末の自動回転設定をOFFにしても回転してしまう。 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); SCREEN_ORIENTATION_UNSPECIFIEDだと自…

Kindleの50%ポイント還元は実質50%OFF(ポイントでの購入にポイントが付くから)

先日のKindleの50%ポイント還元祭りの際に実質50%OFFだと言っている人が多くて、「いや、実質33.3%OFFでしょ」と思っていた。そうなる理由は下記記事参照。 50%ポイント還元の値引率は33.3% - 日々精進 でもKindleはポイントでの購入でもポイントが付く(!…

UI Automator ViewerでViewの構造を調べる

Hierarchy ViewerでViewの構造を調べようとすると、以下のエラーメッセージが出て調べられなかった。 [2015-06-10 14:29:03 - ViewServerDevice]Unable to debug device: ... [2015-06-10 14:29:04 - hierarchyviewer]Missing forwarded port for ... [2015-…

BigDecimalの小数桁の末尾の0を削除する

BigDecimal#stripTrailingZerosで削除できる。scaleも合わせて変更してくれる。 decimal = decimal.stripTrailingZeros(); 参考: Check if BigDecimal is integer value

多段SSHの設定

IT

踏み台を二段経由してサーバに接続する場合。 ~/.ssh/configに以下を追記する。 Host <踏み台1> User username Hostname springboardServer1 IdentityFile /Users/usename/.ssh/privateKey1 Host <踏み台2> User username Hostname springboardServer2 Pro…

実機からログを取り出す

テスターが実機でアプリを動かしていたらアプリが落ちたといって実機を開発者のところに持ってきた場合。 アプリのログは/dev/log/mainに吐かれるのでこれを参照すれば良い。 参考: Google グループ

Androidで同時タップを禁止する

iOSでは各ボタンにexclusiveTouchを設定していくところだが、Androidは 一箇所Styleを設定するだけでOKっぽい。 以下のように設定する。 <style name="MyTheme" parent="@android:style/Theme.Holo.Light"> <item name="android:windowEnableSplitTouch">false</item> <item name="android:splitMotionEvents">false</item> </style>

ZipInputStream#readで読み込んだデータが途中で切れる

1KB程度以上のファイルをZipInputStream#readで読み込むと途中で切れてしまった。 原因はZipInputStream#readはファイルの最後までデータを読み込むことを保証していないため。 BufferedInputStreamを使うと最後まで読み込める。 コード例は以下。 ZipInputS…

Google Playに登録してある端末を削除する

IT

スマホの買い換えなどでもう使ってない端末があるけど、WebのGooglePlayからアプリをインストールしようとすると選択肢に出続けてたので削除した。 手順は↓参照 端末を非表示にする、端末のニックネームを追加する - Google Play ヘルプ インストール先の端…

RSSを配信していないサイトをRSSリーダーで購読する方法

IT

Page2Feed APIを使う。下記サイトに書いてあるとおりの手順で購読できるようになる。コレは便利だ。 Page2Feed API | EDGEic.edge.jp 参考: あらゆるページをRSSリーダーで購読する - ザリガニが見ていた...。

AndroidからMacへのBluetoothテザリングの設定方法

IT

手順は以下。意外とややこしかった。 Androidの 設定>その他>テザリング>Bluetoothテザリング にチェックを付ける Androidの 設定>Bluetooth>一番上の自端末の行をタップし、ペアリングする Macの システム環境設定>ネットワーク>Bluetooth PAN>接続…

Gmailの空き容量がすくなくなってきたのでメールを整理する

IT

1MB以上の添付ファイルがあり、未読のメールを一括で削除した。やりかたは以下。 has:attachment size:1000000 is:unread でけんさくする すべてのスレッドにチェックを付ける スレッド一覧上部の「この検索条件に一致するすべてのスレッドを選択する」をク…

「はじめよう! 要件定義」読了

IT

予想以上にいい本でした。めっちゃおすすめです。 はじめよう! 要件定義 ~ビギナーからベテランまで作者: 羽生章洋出版社/メーカー: 技術評論社発売日: 2015/02/28メディア: 単行本(ソフトカバー)この商品を含むブログ (2件) を見る とにかくわかりやすい…

MS IMEを削除する

ATOKを使っているんだけど、いつの間にかMS IMEに切り替わってるときが度々あって邪魔なのでMS IMEを削除した。 手順は以下。 MS Office IMEを削除する。手順は→http://www.atmarkit.co.jp/fwin2k/win2ktips/1303offime/offime.html MS IMEを削除する。手順…

AQUOS PHONE 104SHでFile.createTempFileを実行するとアクセス権が無くエラーになる

このようなコードではエラーが出た。 File tempFile = File.createTempFile("tempfile", ".zip"); 以下のように直すと直った。 File tempFile = File.createTempFile("tempfile", ".zip", context.getFilesDir()); やっぱAndroidは機種毎に挙動が違って大変…

Viewのwidth, heightをコードから変更する

カスタムViewGroupの子Viewのwidth, heightをコードから変更する場合、 setLayoutParamsを使えばいい。ただ、これを実行するタイミングはonMeasure実行以前でないといけない。 例えば、onLayoutはonMeasureの後で呼ばれるのでonLayoutの中でsetLayoutParams…

docomoの契約を解約する時は一番安いプランにしておいて解約月まで寝かせた方がいいかも

IT

docomoの回線を解約するためにdocomoショップに行ったところ、対応してくださった人に「今解約して違約金を払うより、オプションすべて解除して一番安いプランにして回線維持して解約月になってから解約した方が安くすみますよ」とアドバイスを頂き、そのよ…

AWSアカウントがハックされたけど、Amazonの神対応で助かった話

AWS

ハックされた原因はGithubのprivateリポジトリをpublicに変更したんだけど、そのリポジトリにAWSのアクセスキーとシークレットキーが含まれていたため。 我ながらあほすぎる。。 時系列で起こったことを書く。 金曜23時頃キー情報をpublicにしてしまう 土曜…

EC2にSSHでログイン出来ない

IT

EC2インスタンスにSSHでログインできなくて困ったので現象とその原因を書く。 サーバからの応答がない サーバインスタンスが削除されていたため sshdプロセスが立ち上がっていなかったっぽい。サーバインスタンスを作り直すと直った。 VPCを使ってEC2を起動…

デシリアライズした時にtransientなフィールドを初期化する

transientなフィールドがデシリアライズした時にnullになるのを避けるには、readObjectメソッドの中でフィールドを初期化すればいい。 private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject()…

複数サーバのログをまとめてtailする

IT

multitailコマンドでできる。brew install multitailでインストールした後、.zshrcに以下aliasを定義して使ってます。 alias tails='multitail -l "ssh server1 tail -f ~/logs/hoge.log" \ -L "ssh server2 tail -f ~/logs/fuga.log"' これは便利だなぁ。フ…

build variant毎にアプリ名を変更する

manifestPlaceholdersを使ってbuild variant毎に異なる値をManifestに埋め込む。 build.gradleで以下のようにmanifestPlaceholdersを定義しておく。 productFlavors { staging { manifestPlaceholders = [appName:"@string/app_name_staging"] } } Manifest…

ビルドすると「Manifest merger failed : Attribute application@label value...」エラー

エラーメッセージにも書いてあるけど、「tools:replace="label"」属性を追加すると直った。 この属性を追加するとmanifestをマージするときに、属性がコンフリクトした場合どちらを採用するかを指定できるっぽい。 参考: Android Studio 6.0 merger fail

AndroidManifest.xmlのandroid:labelがapplicationとactivityの両方にある理由

以下引用。なるほどー。 <application>タグのandroid:label、android:icon 「Settting」‐「Applications」‐「Manage Applications」で表示されるアプリ一覧に表示される <activity>タグのandroid:label、android:icon Androidデスクトップに表示されるアイコンに表示される 参考: A</activity></application>…

Android標準のアイコンを使う

android:background=に続けて@android:drawable/と打って、後は自分が使いたいアイコンに含まれていそうなキーワードを入力すると候補が出てくる。 もしくは↓を使った方が探しやすいかも知れない(自分は使ってません) konifar/android-material-design-ico…

View Hierarchy上で、あるViewより下のViewにTouchEventを送らないようにする

Androidではデフォルトでは複数のViewが重なっている場合、下の方のViewにもTouchEventが送られるようだ。iOSはデフォルトで一番上のViewにしかTouchEventが送られない。 あるView以降TouchEvnetをBlockしたい場合はカスタムViewクラスを作って、以下を実装…

ScrollViewのheightをmatch_parentにしても、高さがcontentと同じになる

ScrollViewのheightを親と同じ高さにしたい場合は android:fillViewport="true" とすればいい。 参考: 【Android】ScrollViewで高さいっぱいに表示(fillViewport)|俺メモ Web時々アプリ | OREMEMO

CharlesでAndroidのSSL通信の中身を確認する

以下手順でSSL通信の中身を見られるようになる。 CharlesのメニューのProxy>SSL Proxy Settings...を選択する Enable SSL Proxyingにチェックをつける addボタンをクリックし、SSL通信するドメインを追加する Charles便利っすわー。 参考: Legacy SSL Proxy…

Android Studio 1.2 beta3でBuild VariantsがずっとLoading...のままになる不具合

原因はAndroid Studio Unit Testプラグインで、これをdisableにすると直った。 でも、これがないと単体テスト実行できないんだよな。。 早く不具合直ったバージョンが出て欲しい。。 参考: https://code.google.com/p/android/issues/detail?id=163314