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

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

function paste_in_android() {
  e=$(pbpaste | sed -e "s/ /\\\\ /g" | sed -e "s/'/\\\\'/g" | sed -e 's/"/\\"/g')
  adb shell input text "$e"
}

クリップボードに入っているテキストをadb経由で入力します。

input textを使っているためマルチバイト文字を渡すことはできなく、さらにIMEの状態によって入力のされ方が変わります。 adbを経由するので、エミュレータだけではなく実機でも使うことができます。面倒なURLの入力にも使えるんじゃないでしょうか。 うまくうごかなかったら、エスケープすべき文字があるんだと思います。sedエスケープ処理を追加してください。

私はターミナルで入力するのすら面倒なのでAlfred workflowにしておきました。(リポジトリのgifアニを見ればどういう風に使うのか一発で分かると思います。) github.com

べんり〜


という時代もありました。 現代のAndroidエミュレータではいい感じにしてくれるので、EditTextなどを長押しすればペーストすることができます。

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

次のコマンドで実現できる

./gradlew connectedAndroidTest -Pcom.android.tools.instrumentationTestRunnerArgs=class=com.example.Util

com.android.tools.instrumentationTestRunnerArgsにはいろんなオプションが指定でき、どんなオプションがあるかは次のURLから見ることができる

AndroidJUnitRunner | Android Developers

複数の引数を指定する場合はカンマで区切る

./gradlew connectedAndroidTest -Pcom.android.tools.instrumentationTestRunnerArgs=class=com.example.Util,size=medium

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

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] pry(main)> h1.merge(h2)
=> {:a=>[10], :b=>[1, 2, 3], :c=>[10, 11]}

Hash#mergeはブロックを受け取ることができて、キーが重複した時の挙動を指定することができる

$ 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] pry(main)> h1.merge(h2) { |key, h1v, h2v| h1v + h2v }
=> {:a=>[1, 2, 3, 10], :b=>[1, 2, 3], :c=>[10, 11]}

class Hash (Ruby 2.2.0)

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))
=> [6, 4, 9, 5, 8, 3, 2, 1, 7]
[3] pry(main)> Array(1...10).shuffle(random: Random.new(473))
=> [6, 4, 9, 5, 8, 3, 2, 1, 7]

class Array (Ruby 2.2.0)

配列の重複を取得する

たしかに〜

$ pry
[1] pry(main)> Array(1..10) && Array(5..6)
=> [5, 6]

超簡単だった。


重複を除外するならuniq使えばいいけど、重複を取得するのはメソッドがなかった。 こんな感じに書けば重複した値が取得できる

$ pry
[1] pry(main)> require 'active_support/all'
=> true
[2] pry(main)> (Array(1..10) + Array(5..6)).group_by{|i| i}.reject{|k, v| v.one?}.keys
=> [5, 6]

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からコメントアウトする

config/secrets.yml

環境変数にsecret_key_baseを設定する

heroku config:set SECRET_KEY_BASE=`bundle exec rake secret`

以上

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

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

github.com

Sketch3でモザイクのかけかた

そもそもぐぐっても情報がでてこなかった。blurでごまかせないかな―とやってみたけど、今ひとつ使えるものではなかった。 インターネットで調べてもやり方がでてこないから、自分でなんとかせんとなーと考えていると、Fireworksでのモザイクの書け方を思い出した。

Fireworksではレイヤーを縮小して拡大することでモザイクを実現していた。縮小するときに複数のピクセルが1つのピクセルになることを利用して実現していた。Sketch3でもできるんじゃないかと試したところ、できた。

  • モザイクをかけたいレイヤーを選択
  • Scaleで5%に縮小
  • Layer > Image > Reduce Image Size
  • Scaleで2000%に拡大

ただ単純にScaleを変更するだけだと、元の解像度に戻るだけなので、途中でReduce Image Sizeすることで解像度が落ちた状態の画像にするところがポイント 5%って数字はテキトーなんでモザイクかけたい強度によって変える

Sketch3 Pluginにする

モザイクかけたい時に、温かみのある手作業でやってもよかったんだけど、そーいやプラグインってあるよなと思い出したので、プラグイン化しました。

公式のリファレンスがあまり充実してないっていうのと、cocoascriptの情報自体が少ないので、他のプラグインのソースを読むのがオススメです。

インストールと使い方

GithubのREADMEに書いたので、それを読んで下さい github.com

要望があったらissueにて受け付けます。