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

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

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 なかなか評判がよさそうだった…

ぼくのビルドはにゃあとなく

potatotips7で「ぼくのビルドはにゃあとなく」というタイトルでLTしました。 私以外の発表スライドはこちらから見れます... potatotips 7 · potatotips/potatotips Wiki https://github.com/potatotips/potatotips/wiki/potatotips-7 ぼくのビルドはに…

LOG_TAGを生成するプラグインを作りました

LOG_TAG フィールドを生成するAndroid Studio用のプラグインを作りました。 JetBrains Plugin Repository :: Inject LOG_TAG Plugin http://plugins.jetbrains.com/plugin/7393?pr=androidstudio 初めて作ったプロダクトが公開されるってとてもテンションあ…

Plugin SDKにソースコードをアタッチする

プラグインを作るための環境構築を紹介したページにはIntelliJのソースコードをSDKにアタッチするという項目があります。 Check out the sources of IntelliJ IDEA Community Edition as described in Check Out & Build Community Edition In the Sourcepat…

IntelliJ Pluginの実行でAndroid Studioを起動する方法

Android Studio向けにプラグインを作ろうと思いますが、IntelliJでプラグインを作り実行するとIntelliJが起動してしまいます。 Android StudioはIntelliJをベースに作られたIDEですが、意外と互換性のない部分もあり、Android Studio向けにプラグインを作る…

IntelliJ IDEA Pluginの作り方

IntelliJ PluginのHello, World.ということで、Hello Pluginというプラグインを作ってみましょう。 ボタンを押すとHello!というNotificationが表示されるプラグインです。 目次 IntelliJ IDEAのダウンロード SDKの設定 プロジェクトの作成 Actionの作成 Noti…