blog.katsuma.tv

KeynoteをRubyから操作するkeynote-clientを作りました

  • 2015年8月10日 00:35
  • ruby

唐突の約1年ぶりのエントリーになりますが、itunes-clientの親戚みたいなかんじのkeynote-clientを作ってみました。

これは何?

itunes-clientと同様、高レベル(のはず)なAPIでKeynoteを操作できます。たとえばこんなかんじ。

require 'keynote-client'

# インストール済のテーマ一覧を取得
themes = Keynote::Theme.find_by(:all)

# 特定の名前のテーマを取得
theme = Keynote::Theme.find_by(name: 'cookpad').first

# テーマを指定して新しいドキュメントを作成
doc = Keynote::Document.new(theme: theme, file_path: '/path/to/slide_name.key')

# 現状のスライド一覧
doc.slides

# 利用可能なマスタースライド一覧
doc.master_slides

# マスタースライドを指定して、新規スライドを追加
doc.append_slide("タイトル & 箇条書き")

# 保存
doc.save

スライドを追加するあたりのAPIがかなり微妙なんですけど、Keynoteのマスタースライドを一意に指定する方法が名前しか無く、これも言語環境によって名前が同じドキュメントでも変わってしまうという、かなり辛い仕様なので対応方法が結構難しい感じです。頑張ればどうにかできそうか。。本当はシンボルを指定したい。

あとスライドはappendするとき、またはappendした後にタイトルや本文を更新できるようにすれば、シンプルなスライドであればひと通りの自動生成できそうかな。

背景

@k0kubunがLTのスライド作らずにスライドを作るツールを夜な夜な作ってるのを見てゲラゲラ笑ってたのですが、AppleScriptで疲弊してそうな印象が強かったので、itunes-clientの知見をどうにか活かせないかなーと思ったのと、JXAを一度使ってみたいなーと思ってたので、その練習がてらがっと書いてみました。

JXA、謎仕様が依然多いですが、少なくともAppleScriptよりだいぶ書きやすいので、感覚つかむまでの速度はだいぶ速くいけました。md2keyもJXAに切り替えちゃってもいい気もしますね。。

今後

スライドのタイトル、本文くらはいじれるようになると実用段階になると思うので、そうしたらmd2keyの下地をいい感じにしてあげられないかなーと企んでます。まだまだ実装雑なので、PRもお待ちしています!

iTunesのプレイリストのトラック情報を整形してクリップボードに保存する

たまに社内のイベントなんかでBGM担当になることがあって、後日「こういう曲をかけたよ」を伝えるのに毎回丁寧にエディタで書いてたのですが、さすがに2時間分のプレイリストなんかを作ると写経が面倒くさくなったのでAutomatorで整形データを作れるようにしてみました。サービス化したので、iTunesから実行できる。どうでもいいけど、Automatorいじったの初めて。

iTunesでプレイリスト選択して、iTunesのメニューから「サービス」> 「Copy tracks from playlist」を選択すれば、「トラック名 / アーティスト名」のフォーマットでクリップボードに追加してくれます。あとは、エディタなり何なりにペーストしてよしなにやればOK。

本当は、iTunesのコンテキストメニューに追加して、「プレイリスト選択」 > 「右クリック」> 「Copy tracks from playlist」でいけるようにしたかったけど、Automatorで実現する方法がよくわからなかった。。多分、無理そう。 というか、Finder以外のアプリってコンテキストメニュー操作できるのかな??

middleman 3.2系から3.3系へupgrade時、wrap_layoutに気をつける

  • 2014年9月 6日 23:25
  • ruby

ALOHA FISHMANSのサイトで使ってるmiddlemanのバージョンは、長らく3.2.0を使っていたのですが、いい加減そろそろ最新のバージョンにあげておくか。。と思ったところ、結構ハマったのでメモ。

空白のページがrenderされる

バージョンの変更はGemfileを書き換えてbundle updateすると、基本的にはOK。Gemfileのdiff的にはこんなかんじ。

 gem "redcarpet", '~> 3.1.1'
-gem "middleman", "~> 3.2.0"
+gem "middleman", "~> 3.3.5"
 gem "middleman-blog", '~> 3.5.2'
 gem "middleman-minify-html", '~> 3.1.1'
 gem "middleman-deploy", '~> 0.2.3'

renderされるページの内容を確認していたところ、基本的に問題ないように見えつつ、blogページだけ何も出力されません。(bodyがカラ)

何か仕様が変わったんだろうと思いつつ、ChangeLog見てもよくわからないな。。。と途方に暮れて検索検索。

wrap_layout

の、ところ気になるIssueを発見。

見事これでした。テンプレートエンジンにhaml/slim を使っていて、wrap_layoutでレイアウトを上書きしているとき、

- wrap_layout :layout do
  ...

= wrap_layout :layout do
  ...

にしないとダメな模様。これで手元でも正常にbodyが出力されるようになりました。

で、よくよくChangeLog見直すと

Update Padrino to 0.12.1. Introduces BREAKING CHANGE for Haml. Helpers which take blocks used to require - instead of = to work correctly. Now, all helpers which output content should use =.

って、書いてるのが該当する話の模様。(気づかねぇ。。。)

TravisCIの結果を光で通知するtravis-blink1を作りました

  • 2014年9月 3日 01:12
  • ruby

これは何?

blink(1)という、USB接続で発光するガジェットをhmskさんからいただいたので、遊びでつくってみたgemです。

指定したgithubのプロジェクトについて、TravisCIの結果を発光して通知してくれるものです。CIが実行中のときは黄色で点滅、テストに失敗したときは赤色で点滅、テストが通ったときは緑で発光します。 動作の様子はこんなかんじ。

テスト失敗時

テスト成功時

blink(1)がおもしろいのは、プログラマブルに発光できること。色や点滅時間など、ことこまかく調整できるので、任意のイベントの通知として発光させることが可能になります。

いろんな言語からblink(1)のAPIを叩くクライアントがあるのですが、rubyだとrb-blink1がひとまずよさそう。travis-blink1でも内部で利用しています。

とりあえずチカチカさせるには、これだけでOK。

require 'blink1'

Blink1.open do |blink1|
  blink1.blink(255, 255, 0, 5)
end

使い方

お約束の

gem install travis-blink1

でインストール後、手元のディレクトリがプロジェクトをforkした場所でgit remoteの設定がされている場合は

travis-blink1

だけ実行すれば、git remoteの結果から、TravisCIの状態を監視。 また、任意のディレクトリから実行するときは

travis-blink1 katsuma/itunes-client

なんかのように「ユーザ名/プロジェクト名」を指定すればOKです。

雑感

blink(1)は、できることがシンプルなので、すぐに試せるのはいいですね。いっぱい天井からぶら下げるなどして、hueみたいに照明代わりにしみても楽しそうです。

TokyuRuby会議07でitunes-clientの発表をしてきました

  • 2014年3月29日 15:17

TokyuRubyKaigi07itunes-clientの発表をしました。 Rubyを使わずにiTunesを操作していいのは小学生までですよね!!1

あと、スライドの中でいろいろ動画をいれていたのですが、それもあわせて公開しておきます。

Itunes::Track.find_by

Itunes::Track#play/pause/stop

Itunes::Player.add / Itunes::Track#update

Index of all entries

Home

Search
Feeds

Return to page top