日々精進

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

2014-01-01から1年間の記事一覧

ファイルを一括リネームするアプリ(Shupapan)が良かった

mac

かなり多機能で、ファイルリネームならこれだけでやりたいことはできそう。 WindowsはFlexible Renamerが良かったけど、Macにもいいリネームアプリがあって有り難いです。 http://sunsky3s.s41.xrea.com/shupapan/index.html

Activityのテストコードを実行すると「java.lang.RuntimeException: Could not launch activity」エラー

原因はマニフェストにテスト対象のactivityを追加していないことだった。 正確に言うと、マニフェストファイルで指定しているのはAndroidAnnotationsで生成したアンスコ付きのクラスで、テストコードから生成しようとしているActivityクラスはアンスコ無しの…

RobolectricとEspressoを同じプロジェクトで併用する

以下リポジトリで併用しているので、これを参考にビルド設定を変更すればいけた。 freezy/android-seed これでロジックのテストもUIのテストもやりまくれるぞー

genymotionにproxyを設定する

以下記事にgenymotionにproxyを設定する方法が書かれていたので参考にさせて頂きました。感謝! 検証機なし!Genymotionの導入でAndroidブラウザのデバッグが楽ちんに - Qiita

コードをEnumに変換する

なるべくEnumクラスにコードを追加せずにコード値をEnumオブジェクトに変換するロジックを調べていたところ、以下が見つかったので採用した。 Enum と データベースの「コード値」の相互変換 - penultimate diary コード値をKey,EnumオブジェクトをValueに持…

./gradlew connectedCheckを実行すると「com.android.dex.DexException: Multiple dex files define Lorg/hamcrest/Description」エラー

原因は以下のandroidTestCompileにあった。 androidTestCompile 'junit:junit:4.11' androidTestCompile 'org.robolectric:robolectric:2.4+' Robolectric2.4がJUnit 4.8.1に依存しているがそれとは別に4.11もインストールしているためhamcrestが重複してし…

MultiDexアプリでRobolectricテストを実行すると「Caused by: java.lang.RuntimeException: Multi dex installation failed」エラー

原因はRobolectricがMultiDexアプリに対応していないため。 対応としては、テストがこける原因になっている例外を握りつぶせばよい。 具体的なやりかたは下記記事参照。 MultiDexにしたアプリケーションでRobolectricがコケる - visible true この問題はRobo…

wordをmarkdownに変換する

mac

macなら以下を実行すれば変換出来る。 brew install pandoc textutil -convert html file.doc -stdout | pandoc -f html -t markdown -o file.md 変換結果はかなり崩れていてだめだった。。手で書くしかないか。 参考: Quickly Convert (.rtf|.doc) Files t…

JavaのJSONのAssertはJSONassertライブラリを使ってやると楽

JSONのAssertは文字列の比較ではやりたくないなーと思いAssertionライブラリを探したらいいのがあった。 skyscreamer/JSONassert インストールはbuild.gradleに以下を書けばOK。 androidTestCompile 'org.skyscreamer:jsonassert:1.2.+' 以下のような感じで…

Chrome拡張機能Advanced Rest ClientでUser-Agentを変更する方法

IT

HeadersのところでUser-Agentを設定しても変わらない。理由はChromeがUAの書き換えを許してないため。 Developer ToolsでUAを変更する必要がある。 でもここのUIが頻繁に変わっているらしく、ブログで紹介されているUA変更方法通りには操作できなかった。 バ…

RictyDiminished FontをAndroid Studio(またはJet brains系IDE)で使う

IT

以下の記事をみてちょっと気になったのでRictyDiminished FontをAndroid Studioで使ってみた。 導入手順は他のJet brains系IDEでも同じと思われる。 http://blog.livedoor.jp/retas_retas/archives/36385629.html 導入手順 以下のリポジトリをcloneする yasc…

リール付きIDカードホルダーが便利だった

会社のIDカードリーダーがやけに低い位置にあるので、リール付きカードホルダーを購入。 コクヨ IDカードホルダー IDeo HUBSTYLE 黒 NM-R295D出版社/メーカー: コクヨ発売日: 2007/12/26メディア: オフィス用品購入: 2人 クリック: 74回この商品を含むブログ…

assert文を有効にする

実行時引数に-eaを付ければよい。 想定外の値が来た場合にExceptionを投げるようにしてたけど、本番ビルド時にOFFにできるのでassertの方がよさそう。 参考: assert文を有効にする - tetu1984のブログ

Robolectricで実際にHTTPリクエストをサーバに送信する

Robolectric.getFakeHttpLayer().interceptHttpRequests(false); を実行した後でリクエストを送信すればよい。Robolectric便利だなぁ。 参考: Is it possible to do real http requests with robolectric

Robolectricで送信したHTTPリクエストのBodyを検証する

HTTPリクエストを送信した後、以下のようにしてBody部のStringを取得できるので、後はそれをAssertすればよい。 HttpPost sentHttpRequest = (HttpPost) Robolectric.getSentHttpRequest(0); StringEntity entity = (StringEntity) sentHttpRequest.getEntit…

CharlesでiOS Simulatorの通信をキャプチャする

iOS

Charlesを起動しても、iOS Simulatorの通信をキャプチャしてくれなくて困っていたが、 以下で直った。 メニューのProxy>Mac OS X Proxy にチェックを付ける iOS Simulatorを再起動する Charlesを起動してから iOS Simulatorを起動しないといけないっぽい。 …

JavaでListのリテラルを簡潔に書く

Arrays.asListを使う。 List<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3,5,8,13,21)); {{}}を使ってもできるらしい。こんなの初めて見た。 仕組みとしては、ArrayListを継承した匿名クラスを定義してその中でaddメソッドを呼んでいるようだ。 List<String> list = ne</string></integer></integer>…

rmで削除したファイルがゴミ箱に入るようにする

IT

最初rmtrashを使っていたが、-rfを付けてフォルダ全削除ができなかったので mv2trashに乗り換えた。以下でインストールできる。 curl -L https://raw.githubusercontent.com/dankogai/osx-mv2trash/master/bin/mv2trash > ~/rmtrash chmod a+x ~/rmtrash mv …

Android Studioで外部ライブラリのソースコードをattachしてもソースコードが見られない

原因は謎だけど、以下手順で直った。 .idea/libraries/<ライブラリ名>.xmlを開く <CLASSES>タグ内に<root>タグが二つあったので、urlの末尾がjar!になっている方を残してタグを削除 再度attach なんで<root>が二つになってたんだろ。。</root></root></classes>

Android Studioでビルドすると文字化けする

原因は、windows環境の場合は文字コードのデフォルトがShiftJISになっていることっぽい。 Run>Edit Configurations...を選択し、Gradle taskを選択し、VM optionsに以下を入力すれば直った。 -Dfile.encoding=UTF-8 Android Applicationを選択した場合はVM o…

Active Directory認証を使ってMicrosoft Remote Desktopでログインする

IT

今までRemote Desktop Connection.appを使っていたが、 Microsoft Remote Desktop.appに乗り換えた。 AD認証を使ってログインする方法は以下サイト参照。 MacからWindowsのリモートデスクトップ接続方法 @ドメイン名 をユーザ名に付けるとかわからん。。普…

スマホ/タブレット用microSD専用カードリーダーが超便利

先日購入したスマホ/タブレット用microSD専用カードリーダーがかなり良い商品だった。 iBUFFALO スマートフォン/タブレット/PC用 microSD専用カードリーダー/ライター ブラック BSCRUM04BK出版社/メーカー: バッファロー発売日: 2014/04/30メディア: Persona…

Android StudioでserialVersionUIDを生成する

下記記事の通りプラグインを入れると生成できた。ありがとうございます。 AndroidStudioで"serialVersionUID"を生成する - Qiita Serializableを継承しているクラス内でないと、Code -> Genarate… -> SerialVersionUID が表示されないので注意。

JavaのアサーションライブラリはAssertJが良さそう

roboletricは標準でfestをアサーションライブラリとして使っているようだけど、 festは数年前に開発が止まっている。 後継プロジェクトはAssertJらしいので、これを使うのが良さそう。 まだ使い始めだけど、読みやすくていい感じ。 AssertJ / Fluent asserti…

mac(mavericks)にmavenをinstallする

mac

mavericksからはmavenが標準でインストールされなくなったので自分でインストールする。 brew install mavenでインストールできるかと思ったら、できなかった。なぜに。。 インストール手順は以下。 http://maven.apache.org/download.cgi からバイナリをダ…

Androidビルド時に「generating equals/hashcode implementation but without a call to superclass」警告

原因はlombokの@Dataアノテーションを付けていること。 メッセージから、java.lang.Objectを継承していないクラスに@Dataを付けると発生するように思えるが、 java.lang.Objectを継承しているクラスでも発生したので原因は不明。。 解決策は@EqualsAndHashCo…

Javadocをエスケープするには、@literalを付ける

コメントがJavadocタグとして認識されてしまっていたので@literalをつけて回避した。 /** * @literal @EqualsAndHashCodeはコンパイル時の警告が出ないよう追加している。 * <p/> */ バックスラッシュを置くとかじゃないのか。。 参考: http://a4p.me/1092/</p/>

AndroidでJSONをparseする

普通はjacksonとか使うんだろうけど、処理するjsonが綺麗に構造化されていないので自分でparseすることにした。 JSONObjectを使うと文字列をparseしてdictionaryのような構造にしてくれる。 try { JSONObject responseJSON = new JSONObject(response); } ca…

Javaでnew Date(...)はDeprecated

new DateでDateオブジェクトを作ろうとしたらDeprecatedだよ、とIDEに怒られた。 以下のようにCalendarを使うのが正しいらしい。 new GregorianCalendar(2015, 0, 14, 15, 33, 54).getTime() 参考: Java: Why is Date deprecated, and what do I use instea…

Androidでテストを実行すると「The method assertEquals(Object, Object) is ambiguous for the type」エラー

以下のようにassertしようとすると、エラーが出た。 Assert.assertEquals(false, actuals.get(0).getIsVisible()); 原因は上記コードがassertEquals(Object, Object)ともassertEquals(Boolean, Boolean)とも解釈できるため。以下のようにして型を明示すると…