Android Studioの外にでよう

これはAndroid Advent Calendar 2023 19日目の記事です。 qiita.com 背景 Android StudioはIntelliJ IDEAをベースにしたAndroidアプリを開発するために最適化された統合開発環境です。 その説明のとおり、Androidアプリを開発するためぞれぞれのリソースを適…

GmailからLINEにメッセージを「すぐに」届けるための技術

この記事はmhidakaが建立した Advent Calendar 2023の12日目記事です。 こんにちは @tomorrowkey です ひつじさんから特にメンションきていませんが、オッと思ったので書いてみます。 モチベーション 息子が小学生になり、学校からの連絡がメールで届くので…

herokuからcloneできないソースコードをサルベージする

太古の昔にデプロイしていたサービスでgit管理もしていなくて、でもherokuにはソースコードがあるはず…。といったコードをサルベージする方法を書き残します。 heroku remoteからgit cloneできればよかったんですが、できなかった(時間が経ちすぎた?)ので…

Android物理デバイスをミラーリングする2022

Androidエンジニアの開発のお供であるミラーリングの話。 私がAndroidエンジニアとして駆け出しのころは Android Screen Monitor に大変お世話になりました。 2022年ミラーリングしたいと思ったときになにを使えばいいのか。Genymotion を作っている Geneymo…

Charlesを快適に使うためにやっていること

Charles Web Debugging Proxy とても便利ですよね。 今でこそ、Stetho や Flipper などの、Androidアプリ側に仕込むライブラリでも事足りるようにもなってきましたが、通信内容の改ざんや特定のリクエストのみ他のサーバに転送したりなど、多岐にわたる機能…

通知センターの通知を全部消す

通知の種類をアラートからバナーに変更するとすぐに消えてしまって見逃しがありそう…ってことで、だいたいの通知はアラートにして、自動的に消えないようにしています。 ですが、ちょっと離席したときに通知が溜まっていると、それを全部ポチポチ消すのは面…

cloneしていないリポジトリのmasterのハッシュを調べる

Git

git-ls-remote を使う $ git ls-remote https://github.com/tomorrowkey/adb-peco master 788d83985e44f747a785cb948ac75fe4a048862d refs/heads/master もちろんgithubじゃなくてもいいからandroidのframework/baseのmasterを取得する場合はこんな感じ $ gi…

配列の要素を一意にする

RubyでいうところのArray#uniqみたいなもの let array = [1, 1, 2, 4, 1, 3, 2] array.enumerated().compactMap({ index, item in array.index(of: item) == index ? item : nil }) それぞれの「index」と「arrayからindex(of:) で取得したindex」が一致した…

Closureの即時実行を使ったスコープの切り分け

Swiftのletはimmutableな変数宣言で、一度値を入れたらその後に変更することができない。 let hoge = "hoge" hoge = "fuga" // コンパイルエラー これは変数宣言のときに値を入れないといけない、という制限ではなく、その変数が使われるまでに値が入ってい…

forEachでインデックスを使いたい

配列をすべて舐めるような処理をする時はforEachを使うけど、この時indexを使うことができない let array = ["a", "b", "c", "d"] array.forEach { string in debugPrint(string) } そんなときはArray#enumerated() を使えばindexも使うことができる enumera…

UITextFieldで入力文字を制限する

UITextFieldDelegate を使う textField(_:shouldChangeCharactersIn:replacementString:) - UITextFieldDelegate | Apple Developer Documentation 例えばIntにパースできる値だけにしたければ、次のようなコードになる class ViewController: UIViewControl…

コマンドラインの実行結果を監視する

コマンドラインの実行結果を監視したいんだと watchだと履歴が見れない whileだと全部垂れ流しで全部のデータを見るのがだるい コマンドラインの実行結果が変わったときだけに表示してほしい〜〜って思ったんだけど、watchもwhileも微妙だったのでチョコチョ…

ImageMagickを使って画像サイズを取得する

$ identify -format "%w x %h" ./hogehoge.jpg 1000 x 1333

ImageMagickを使って画像の種類を判別する

ImageMagickのidentifyコマンドを使って画像の判定ができる。 拡張子はJPGと言いながら実はPNGだった例 $ identify -format %m ./path/to/image-file.jpg PNG 特定のディレクトリ以下のすべてのファイルの種類を表示するならこんな感じ for imagefile in $(f…

Androidプロジェクトをシュッと開く

Androidプロジェクトを開く時、Android Studioのメニューから開くのはとてもめんどうくさい。File -> Open... と選択してからプロジェクトの在り処を選択する必要がある。めんどうだ。マウス操作めんどう。 実はコマンドラインからプロジェクトをAndroid Stu…

adb-pecoを書き直しました

複数デバイスが接続されていたときにデバイスを選択する支援をしてくれる adb-peco ですが、この度、Rubyでコードを書き直しました。 通常だとmore than one device/emulator と出力されるようなシチュエーションでも、こんな風にコマンド実行時にデバイス選…

Androidアプリのビルドが終わったらにゃーんと猫の声が聞こえるようにする

Androidアプリのビルドはターミナル派でしょうか、それともAndroid Studio派でしょうか。 最近はInstant Runや、接続されているデバイスの情報から不要なリソースを削ることでビルドの高速化されるなど、Android Studioでのビルドは魅力的なところが多いので…

Androidエンジニアは自分専用のDockerイメージを作るべきだと思った

初めてDockerイメージを作ったのでエントリに書いておきます。タイトルはすこし言い過ぎな感じはありますが、CIにDocker使っている人は自分でDockerイメージ作った方がいいよねって話です。 私とCI CIという言葉もかなり広まり、会社で使うだけではなく個人…

RoundRectShapeの引数について調査した

角丸画像をコードから生成したくて、ShapeDrawableを使うことになった。 角丸にするにはRoundRectShapeをShapeDrawableに食わせるんだけど、その引数がドキュメントだけだと分からなかったので検証した。 RoundRectShape(float outerRadii, RectF inset, flo…

ObjectAnimatorでTextViewの内容を書き換える

ObjectAnimatorおもろいなー setNumber(int)を持つNumberTextViewというクラスを作り public class NumberTextView extends AppCompatTextView { public NumberTextView(Context context) { super(context); } public NumberTextView(Context context, Attri…

ProgressBarの値をアニメーションで変更する

↑こういうことやりたいんだけど、ProgressBar#setProgress(:int)だとアニメーションしてくれない。 そうだ、ObjectAnimatorを使ってアニメーションを実現しよう。 <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context=".activity.MainActivity" > </layout>

Androidエミュレータにテキストをペーストすることができない時代がありました

Androidエミュレータは母艦とクリップボードの共有がされないので、パスワードなどの複雑なテキストを毎回手打ちしなくてはならなくて面倒でした。 そこで、簡単にコピペできるような関数を作りました。 function paste_in_android() { e=$(pbpaste | sed -e…

コマンドラインから特定のクラスのみテストする

次のコマンドで実現できる ./gradlew connectedAndroidTest -Pcom.android.tools.instrumentationTestRunnerArgs=class=com.example.Util com.android.tools.instrumentationTestRunnerArgsにはいろんなオプションが指定でき、どんなオプションがあるかは次…

キーが重複するハッシュをマージする

2つのハッシュをマージするときにキーが重複するとレシーバを優先されてしまう $ pry [1] pry(main)> h1 = {a: [1, 2, 3], b: [1, 2, 3]} => {:a=>[1, 2, 3], :b=>[1, 2, 3]} [2] pry(main)> h2 = {a: [10], c: [10,11]} => {:a=>[10], :c=>[10, 11]} [3] p…

Array#shuffleで同じ結果を得る

shuffleの引数に同じRandomオブジェクトを渡せば何度シャッフルしても同じ結果になる $ pry [1] pry(main)> Array(1...10).shuffle(random: Random.new(473)) => [6, 4, 9, 5, 8, 3, 2, 1, 7] [2] pry(main)> Array(1...10).shuffle(random: Random.new(473)…

配列の重複を取得する

@tomorrowkey ブログ読んでて気になったんですけど、Arrayは&&をoverloadしてるのでこれで重複要素取れます! https://t.co/dkNFp9fW5Y https://t.co/5vChxCdXdF— ぎぎにゃん@脱北者 (@giginet) November 7, 2015 たしかに〜 $ pry [1] pry(main)> Array(1..…

Missing `secret_token` and `secret_key_base` for 'production' environment, set these values in `config/secrets.yml`

rails newして、herokuにデプロイしてアクセスしたけど、以下のメッセージが表示される Missing `secret_token` and `secret_key_base` for 'production' environment, set these values in `config/secrets.yml` 以下のファイルを.gitignoreからコメントア…

簡単にモザイクがかけられるSketch3 Pluginを作りました

今作っているアプリのリソースを作っているところ。アプリのスクリーンショットを撮影して、広告はそのままだとアレだからモザイクかけたいなーと思っていろいろ調べてたら、いつのまにかプラグイン作っていました。 github.com Sketch3でモザイクのかけかた…

Gradle Pluginでresourcesディレクトリからファイルを読み込む

いままではこういう風に書いていたんだけど public MyPlugin extends Plugin<Project> { @Override void apply(Project project) { URL url = ClassLoader.getResources("resource.file") assert url != null // fail } } 返ってくるURLはnullになってしまう。 こう書</project>…

ぼくのびるどはにゃあとなくプラグインを作りました

前回「ぼくのびるどはにゃあとなく」というタイトルで、ビルド完了したことを開発者に知らせるテクニックを紹介しました。 ぼくのビルドはにゃあとなく | 明日の鍵 http://tomorrowkey.hatenablog.jp/entry/2014/05/15/000000 なかなか評判がよさそうだった…