配列の重複を取得する
@tomorrowkey ブログ読んでて気になったんですけど、Arrayは&&をoverloadしてるのでこれで重複要素取れます! https://t.co/dkNFp9fW5Y https://t.co/5vChxCdXdF
— ぎぎにゃん@脱北者 (@giginet) November 7, 2015
たしかに〜
$ 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を作りました
今作っているアプリのリソースを作っているところ。アプリのスクリーンショットを撮影して、広告はそのままだとアレだからモザイクかけたいなーと思っていろいろ調べてたら、いつのまにかプラグイン作っていました。
Sketch3でモザイクのかけかた
そもそもぐぐっても情報がでてこなかった。blurでごまかせないかな―とやってみたけど、今ひとつ使えるものではなかった。 インターネットで調べてもやり方がでてこないから、自分でなんとかせんとなーと考えていると、Fireworksでのモザイクの書け方を思い出した。
Fireworksではレイヤーを縮小して拡大することでモザイクを実現していた。縮小するときに複数のピクセルが1つのピクセルになることを利用して実現していた。Sketch3でもできるんじゃないかと試したところ、できた。
- モザイクをかけたいレイヤーを選択
- Scaleで5%に縮小
- Layer > Image > Reduce Image Size
- Scaleで2000%に拡大
ただ単純にScaleを変更するだけだと、元の解像度に戻るだけなので、途中でReduce Image Sizeすることで解像度が落ちた状態の画像にするところがポイント 5%って数字はテキトーなんでモザイクかけたい強度によって変える
Sketch3 Pluginにする
モザイクかけたい時に、温かみのある手作業でやってもよかったんだけど、そーいやプラグインってあるよなと思い出したので、プラグイン化しました。
- Bohemian Coding - Sketch Developer
- 公式ページ
- クラスのリファレンスあったんだけど、ほとんど嘘だった…。
- Sketch.app Plugin の開発メモ - Qiita
- ざっくりと理解したい場合におすすめ
公式のリファレンスがあまり充実してないっていうのと、cocoascriptの情報自体が少ないので、他のプラグインのソースを読むのがオススメです。
インストールと使い方
GithubのREADMEに書いたので、それを読んで下さい github.com
要望があったらissueにて受け付けます。
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になってしまう。
こう書けばOK
public MyPlugin extends Plugin<Project> { @Override void apply(Project project) { URL url = Thread.currentThread().getContextClassLoader().getResource("resource.file") assert url != null } }
ぼくのびるどはにゃあとなくプラグインを作りました
前回「ぼくのびるどはにゃあとなく」というタイトルで、ビルド完了したことを開発者に知らせるテクニックを紹介しました。
ぼくのビルドはにゃあとなく | 明日の鍵
http://tomorrowkey.hatenablog.jp/entry/2014/05/15/000000
なかなか評判がよさそうだったので、導入の敷居を下げるべくGradle Pluginにしてmaven centralにアップロードしました。
ソースコード
tomorrowkey/notifier-plugin
https://github.com/tomorrowkey/notifier-plugin
導入方法
詳しくはGithubのREADMEをご覧ください。
/build.gradle
プロジェクトのルートディレクトリのbuild.gradleにプラグインの参照を追加します。
apply plugin: 'notifier-plugin'
/app/build.gradle
ビルドするモジュールのbuild.gradleにプラグインを適用します。
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'jp.tomorrowkey.gradle.notifier:notifier-plugin:0.0.1'
}
}
/notifier.groovy
どのような通知を使用するかはnotifier.groovy
というファイルをプロジェクトのルートディレクトリに作成してください。
人によって通知方法は異なると思うので、このファイルは.gitignoreに追加すると、個別に設定できていいんじゃないでしょうか。
voice { enabled = false name = 'Alex' } notificationCenter { enabled = true } sound { enabled = true url='file:///Users/tomorrowkey/Desktop/meow.mp3' }
助かりました
今回初めてGradle Pluginを作りました。 @__gfx__ さんのGradle Plugin Templateを使うことによって爆速で開発できました! ありがとうございます!
gfx/gradle-plugin-template
https://github.com/gfx/gradle-plugin-template
また、今回初めてmaven centralへのアップロードに挑戦しました! Yokomarkさんのこの記事のおかげで爆速でアップロードできました! ありがとうございます!
Java - Android のライブラリプロジェクトを爆速で Maven Central にデプロイする - Qiita
http://qiita.com/KeithYokoma/items/e9ee24e7f6a62623f2fb
ぼくのビルドはにゃあとなく
potatotips7で「ぼくのビルドはにゃあとなく」というタイトルでLTしました。
私以外の発表スライドはこちらから見れます... potatotips 7 · potatotips/potatotips Wiki
https://github.com/potatotips/potatotips/wiki/potatotips-7
http://www.slideshare.net/tomorrowkey/ss-34718053
時間がない人向けに簡単に説明すると
Gradleビルドの完了をフックして、ネコの鳴き声を再生するというデモでした。 これを使えばいつもマルチタスクで忙しいあなたもビルド完了に気づくことができます!
android.applicationVariants.all { variant -> if (variant.install != null) { variant.install.doLast { String url = "http://example.com/meow.mp3"; String path = "${project.buildDir}/finish_sound" def file = new File(path) if(!file.exists()) { new URL(url).withInputStream { input -> file.bytes = input.bytes } } ['afplay', path].execute() } } }
※ネコの鳴き声は別途ダウンロードしてきてください。
ネコの鳴き声が嫌だったらビープ音にすることもできるので、職場でネコの鳴き声が聞こえるなんて恥ずかしい!!って人でも安心です。
ぜひご活用ください。
LOG_TAGを生成するプラグインを作りました
LOG_TAG フィールドを生成するAndroid Studio用のプラグインを作りました。
JetBrains Plugin Repository :: Inject LOG_TAG Plugin
http://plugins.jetbrains.com/plugin/7393?pr=androidstudio
初めて作ったプロダクトが公開されるってとてもテンションあがりますよね!
本当は2週間前には完成していたのですがjetbrains.com への登録や、プラグインの登録や、実際にIntelliJ IDEAから見えるようになるまでの時間などで、作りました!って言えてませんでした。やっと吐き出せた感じです。
目次
- LOG_TAGって?
- インストール方法
- 使い方
- ソースコード
LOG_TAGって?
Androidアプリを作っていてログ出力するときにString型のTagを渡す必要があります。
人によって使用する値は違いますが、私はクラスの名前を使用します。
public class User { // これがLOG_TAG private static final String LOG_TAG = User.class.getSimpleName(); private String mName; private int mAge; public User(String name, int age) { mName = name; mAge = age; } @Override public String toString() { return mName + " is " + mAge; } public void dump() { // こういう風に使います。 Log.d(LOG_TAG, "name=" + mName); Log.d(LOG_TAG, "age=" + mAge); } }
毎回クラス名を入力するのは面倒なので、クラスの定義のすぐ下にLOG_TAGという定数を定義して、それを使うようにしています。
このプラグインはLOG_TAGを生成するために作りました。
インストール方法
このプラグインはIndelliJ IDEAとAndroid Studioで使用することができます。
PreferenceのPluginsを表示します。
[Browse repositories...] を押すとJetBrains Plugins Repositoy に登録されているプラグインが表示されます。
右上の検索ボックスに"LOG_TAG"と入力するとプラグインが表示されます。
プラグインを選択した状態で左上の"Download and Install Plugin"ボタンを押せばインストールすることができます。
使い方
class内にキャレットを起きます。
メニューから[Code] > [Generate] を選択します。キーマップがMac OS X 10.05+であればショートカットはCommand+Nです。
[Inject LOG-TAG]を選択します。
コードが自動的に生成されます。
自動的にインデントしてくれませんが、その辺はフォーマッタに任せます。
ソースコード
tomorrowkey/InjectLogTagPlugin
https://github.com/tomorrowkey/InjectLogTagPlugin
バグ報告や追加機能の提案はこちらにお願いします。
Issues · tomorrowkey/InjectLogTagPlugin
https://github.com/tomorrowkey/InjectLogTagPlugin/issues