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にて受け付けます。

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って?

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を表示します。

f:id:tomorrowkey:20150425152751p:plain

[Browse repositories...] を押すとJetBrains Plugins Repositoy に登録されているプラグインが表示されます。

f:id:tomorrowkey:20150425154804p:plain

右上の検索ボックスに"LOG_TAG"と入力するとプラグインが表示されます。

f:id:tomorrowkey:20150425152811p:plain

プラグインを選択した状態で左上の"Download and Install Plugin"ボタンを押せばインストールすることができます。

使い方

class内にキャレットを起きます。
f:id:tomorrowkey:20150425152923p:plain

メニューから[Code] > [Generate] を選択します。キーマップがMac OS X 10.05+であればショートカットはCommand+Nです。 f:id:tomorrowkey:20150425152943p:plain

[Inject LOG-TAG]を選択します。 f:id:tomorrowkey:20150425153001p:plain

コードが自動的に生成されます。 f:id:tomorrowkey:20150425153019p:plain

自動的にインデントしてくれませんが、その辺はフォーマッタに任せます。

ソースコード

ソースコードGitHubに公開しました。

tomorrowkey/InjectLogTagPlugin
https://github.com/tomorrowkey/InjectLogTagPlugin

バグ報告や追加機能の提案はこちらにお願いします。
Issues · tomorrowkey/InjectLogTagPlugin
https://github.com/tomorrowkey/InjectLogTagPlugin/issues

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

プラグインを作るための環境構築を紹介したページにはIntelliJソースコードSDKにアタッチするという項目があります。

Check out the sources of IntelliJ IDEA Community Edition as described in Check Out & Build Community Edition

In the Sourcepath tab of the SDK settings, press the "Add..." button and specify the directory > into which you have checked out the sources of the Community Edition

Android StudioSDKに設定した場合は、Android Studioソースコードを参照したいので、その方法を調べました。

ソースコードを参照してみる

ソースコードをアタッチしていない状態でソースコードを参照してみます。

このプロジェクトは前回作ったサンプルコードです。

f:id:tomorrowkey:20150425115147p:plain

Notifications.Bus.notify()の実装がどうなっているのか参照してみましょう。
notify()と書かれたところにキャレットを合わせた状態で、

[右クリック] > [Go to] > [Declaration (Command+B)]

を選択します。

f:id:tomorrowkey:20150425114928p:plain

Notificationsクラスが表示されましたが、インターフェイスのみで実装は見ることはできません。(デコンパイラをインストールしていたら見れるかもしれません)
今回のゴールは、この実装が見れるようになることです。

Android Studioソースコードのダウンロード

SDKにアタッチするためのソースコードをダウンロードします。
Android Studioソースコードはここで見ることができます。

platform/tools/idea - Git at Google
https://android.googlesource.com/platform/tools/idea/

以下のコマンドを実行することによりソースコードをダウンロードできます。

git clone https://android.googlesource.com/platform/tools/idea

そんなに大きくないので5分ほどあればダウンロード完了します。

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

プラグイン開発に使用するIntelliJを起動します。

f:id:tomorrowkey:20150425115022p:plain

このような画面になっていると思います。
プロジェクトが開かれている場合は[File] > [Close Project]をしてこの画面を表示してください。

Project Structureを開きます。

[Configure] > [Project Defaults] > [Project Structure]

IDEA AI-133.988757 を選択している状態で、[Edit...]ボタンを押します。

f:id:tomorrowkey:20150425115042p:plain

[Sourcepath]を選択すると以下のような画面になります。

f:id:tomorrowkey:20150425115234p:plain

[+]ボタンを押した後に、先程ダウンロードしたAndroid Studioソースコードの場所を指定します。
これで設定完了です。

ソースコードを参照する

最初と同じようにNotifications.Bus.notify() の実装を見てみましょう。

f:id:tomorrowkey:20150425115127p:plain

無事実装を見ることができました。