Spotlight から素早く Things にタスクを追加する Flashlight プラグインを作った

Spotlight用プラグインシステム Flashlight を使って、Things にタスクを追加する Spotlight プラグインを作りました。

https://github.com/suer/flashlight-things-plugin

環境

セットアップ

1. Flashlight をインストール

2. プラグインをインストールする

    $ git clone https://github.com/suer/flashlight-things-plugin.git ~/Library/FlashlightPlugins/things.bundle

3. Flashlight を有効にする

タスクを追加してみる

Spotlight を起動し、th もしくは things の後ろに追加したいタスクを記入する。

クイック入力のビューが表示されるので、適宜補完して保存する。

まとめ

Flashlight を使えば、Spotlight に簡単に機能を追加できて便利。

Today Extension がフリーズする

iOS8 で導入された Today Extension を持つアプリを作ってみたが、ある特定の経路でアップデートするとフリーズする。

OS を再起動すると正常に動作する。

作ったアプリが一つだけなので原因が特定できていないけど、以下のような感じ。

フリーズする

  • DeployGate からアップデート
  • (旧)TestFlight からアップデート

フリーズしない

stackoverflow で同様な現象の質問を見つけたけど、今のところ回答はついてない。

http://stackoverflow.com/questions/26825486/installing-ios-apps-with-todayextension-using-testflight-not-working-correctly

Elasticsearch のデータを別のサーバに移行する

スナップショットを作成して別のマシンでリストアする手順。

環境

Elasticsearch 1.1.1

移行元サーバ

1 スナップショットディレクトリの指定
$ curl -XPUT 'http://server1:9200/_snapshot/my_backup' -d '{
      "type": "fs",
      "settings": {
          "location": "スナップショットディレクトリパス",
          "compress": true
      }
  }'
2 スナップショットの作成
$ curl -XPUT "http://server1:9200/_snapshot/my_backup/backup?wait_for_completion=true"
3 スナップショットディレクトリをディレクトリごと移行先サーバにコピーする

移行先サーバ

1 スナップショットディレクトリの指定
$ curl -XPUT 'http://server2:9200/_snapshot/my_backup' -d '{
      "type": "fs",
      "settings": {
          "location": "スナップショットディレクトリパス",
          "compress": true
      }
  }'
2 スナップショットディレクトリパスに移行元サーバのスナップショットをコピー
3 リストア
  $ curl -XPOST "http://server2:9200/_snapshot/my_backup/backup/_restore"

Heroku に Route53 でルートドメインを割り当てる

Heroku に Route53 で直接ルートドメイン(Apex ドメイン)を割り当てることはできないらしい。

その代わり、以下のドキュメントを参考に S3 のリダイレクト機能と Route53 のエイリアスの機能を組み合わせる。

https://devcenter.heroku.com/articles/route-53#naked-root-domain

S3 の設定

  1. バケットを作成する
  2. Properties タブを開く
  3. Static Website Hosting をクリックし、以下のように設定
    • Redirect all requests to another host name: ON
    • Redirect all requests to: Heroku アプリの URL (******.herokuapp.com とか) を指定

f:id:suer:20140501101929p:plain

Route53 の設定

ルートドメインを以下のように設定

  • Type: A
  • Alias: YES
  • Alias Target: テキストボックスにフォーカスすると先ほど作成した S3 のバケットが出てくるのでそれを選択する

Redmine 2.5 + Ruby 1.8 環境下で TLS でメールが送れなくなった場合の対処

Ruby 1.8 の環境下で Redmine を 2.5 に上げたら TLS でメールが送れなくなりました。
logs/production.log を見てみると以下のようなメッセージが出力されています。

 wrong argument (NilClass)! (Expected kind of OpenSSL::SSL::SSLContext)

原因と以前の対処

これは Redmine 2.3 の頃から同様だった気がするのですが、Ruby 1.8 + mail gem 2.5.4 以上 + SSL は相性が悪いことが判明。

Problem with ssl context for smtp · Issue #548 · mikel/mail · GitHub

そこで、Redmine 2.4 では Redmine の Gemfile に

gem 'mail', '2.5.3'

とバージョンを明示して対処していました。

Redmine 2.5 では・・・

Rails のバージョンが 3.2.17 に上がりました。
このバージョンが依存している actionmailer 3.2.17 が mail gem 2.5.4 に依存するようになってしまいました。
このため、mail gem 2.5.3 を指定するとバージョンが衝突してインストールできません。

Redmine 2.5 での対処

この問題に対処してくれている fork がありました。

Problem with ssl context for smtp · Issue #548 · mikel/mail · GitHub

これにより、Redmine の Gemfile の

source 'https://rubygems.org'

の直後に以下の行を追加して bundle install すれば動きます。

gem 'mail', '= 2.5.4', :git => 'https://github.com/sofatutor/mail', :branch => '2.5.4-with-fix-548' # see https://github.com/mikel/mail/issues/548

結論

さっさと Ruby のバージョンを上げよう

Redmine に Webhook を追加するプラグインを作った

Redmine のチケット作成・更新にフックして、他のサイトに HTTP で POST する機能を追加するプラグインを作りました。

https://github.com/suer/redmine_webhook

機能

プロジェクト毎に POST する先を指定できます。

こんな感じの JSON が POST されるようになります。

{
  "payload": {
    "issue": {
      "author": {
        "icon_url": "http://www.gravatar.com/avatar/example",
        "identity_url": null,
        "lastname": "user",
        "firstname": "test",
        "mail": "test@example.com",
        "login": "test",
        "id": 3
      },
      "priority": {
        "name": "normal",
        "id": 2
      },
      "tracker": {
        "name": "bug",
        "id": 1
      },
      "parent_id": null,
      "root_id": 191,
      "closed_on": null,
      "updated_on": "2014-03-01T15:17:48Z",
      "created_on": "2014-03-01T15:17:48Z",
      "description": "I'm having a problem with this.",
      "subject": "Found a bug",
      "id": 191,
      "done_ratio": 0,
      "start_date": "2014-03-02",
      "due_date": null,
      "estimated_hours": null,
      "is_private": false,
      "lock_version": 0,
      "project": {
        "homepage": "",
        "created_on": "2013-01-12T11:50:26Z",
        "description": "",
        "name": "Test Project",
        "identifier": "test",
        "id": 4
      },
      "status": {
        "name": "new",
        "id": 1
      }
    },
    "action": "opened",
    "url": "https://example.com"
  }
}

環境

Redmine 2.4

インストール

1. 以下のようにプラグインをインストールする。

$ cd $RAILS_ROOT/plugins
$ git clone git://github.com/suer/redmine_webhook.git
$ rake redmine:plugins:migrate RAILS_ENV=production

2. Redmine を再起動

Redmine のメニューに「すべての活動」へのリンクを追加するプラグインを作った

複数のプロジェクトを兼任する人や、マネージャーはプロジェクトにまたがったアクティビティが見れると便利です。

全アクティビティへは プロジェクトの一覧ページの右上の「すべての活動」から行けます。
これをどのページからでも見れるトップメニューにも表示するようなプラグインを作成しました。

これで、Redmine のサイトどこからでも一発ですべての活動へ飛ぶことができるようになります。

環境

Redmine 2.0 以上

未確認ですが、おそらく 1.x でも動きます。

インストール

$ cd $RAILS_ROOT/plugins
$ git clone git@github.com:suer/redmine_overall_activity_menu.git