音声入力が素晴らしい

前回の記事で抱負を3つほど書いたので、それを実行するためのシステムを整えることにした。

まずはブログ。最初の入力が億劫になるのが1番の問題なので入力を極力簡単にしたい。そこで最近勝間さんのブログなどで紹介されている音声入力を試してみることにした。Remote Mouseと言うソフトをiPod Touchにインストール、ウィンドウズ側にもサーバソフトのインストールが必要だがどちらのインストールもとても簡単だった。これでWindowsiPod Touchの音声入力を使って文字が入力できるようになる。

良いアプリなので早速240円のプロ版を購入。プロ版を使うとiPod touchを横向きにして使えたり、ウィンドウズボタンなどの特殊キーも入力できるようになる。

使ってみた感想として音声入力は確かに早い。特に今回のようなブログっぽい話し言葉の文章が並ぶ記事を書くときはかなり高速に入力できる、エッセイ的な文章に向いているだろうか。逆に大量のコードの途中途中に文章が並ぶような記事はあまり効果は無いかもしれない。

音声入力で文章を打ち込みながら音声入力で書けるプログラム言語があったら結構面白いんじゃないかなと思ったり。こういうちょっと思いついたくだらないことはキーボードだと書かないことが多いが音声入力だと割と簡単に入力できるのもとても良い。

次にESLPodを習慣づける方法を考える。やはりどの時間にやるかを決めてしまうのが良さそうなので朝の運動と一緒にまとめて行うことにした。朝起きたら毎朝踏み台昇降運動をすることにしたのだが、それと一緒にESLPodを聴き終わるまで運動も続ける。大体30分位なので踏み台昇降としてもちょうど良い。1つの時間で2つの習慣を実行できるので効率もよい。

最後に自分が欲しいソフトウェアを書くということについては残念ながらまだ良いシステムが思いついていない。しかし作りたいものは2,3個見つかったのでそれを毎日ちょっとずつ書くいていくことにする。

ちなみに、この記事自体もリモートマウスを使って入力している。それなりに誤字脱字があるので後で編集が必要だがこの最初の文章の入力自体は5分もかかっていない。つまり音声入力は素晴らしい。

2017年を振り返りつつ来年の抱負

今年を振り返りつつ来年の抱負

2017年はちょっとアウトプットが少なかったかなという反省があります。ブログも8月以降更新してなくて広告でてた。時系列に振り返ると

それなりに頑張っているようにも見えるけど昨年と比べると密度が足りなかったという感じがしています。

抱負

せっかく作るならちゃんとしたものを作りたい・・みたいな気持ちが強すぎてアウトプットするパワーが減ってしまいました。もしかしたら年を重ねて残り時間を意識してしまったのかもしれません、よくないですね。アウトプットを取り戻すのが一番の目標です。

  • ブログを50本書く(週に1本の計算)
  • 自分が欲しいソフトウェアを書く
  • ESLPodを継続する

ブログも「どうせ書くならみんなが読みたいものを」みたいなことを意識してライターズ・ブロックしてしまったので、自分の日記として書きたいことを書くことにします。ブログ内のスタイル、投稿時間、URLといったものにこだわりすぎて面倒くさくならないように気をつけよう。

今年書いたソフトウェアで一番役に立ったのが今週のJUNKとANNをRadikoで一瞬で開くRubyスクリプトでした。技術的には本当にシンプルなことしかやっていないけど私の生活にはとても便利なものでした。自分や自分の身近の問題を解決するものをもっと軽やかに作っていきたいと思います(それとは別に新しい技術をキャッチアップしていくことも別途必要だと思うけど)。

最後はインプットの話です。2015年に洋書をたくさん読んで向上した英語力が2016年はあまり変化しなかったのですが、エンジニアの英語力 - 怠惰を求めて勤勉に行き着くで紹介されていたESLPodが大変よかったので今年はこいつで頑張ろうと思います。

来年もよろしくお願いいたします。

radiko.rbで時間表記を"Mon 25:00"と書けるようにした

ドッグフーディングしながらコツコツと改良を加えているradiko.rb

深夜のラジオ番組は大体

  • “Mon 25:00” (本当は火曜日の深夜1:00)
  • “Sat 24:00” (本当は日曜日の深夜0:00)

のような表記をされることが多い。今までは"Mon 25:00" -> “Tue 1:00” のように変換して表記する必要があったのだがこれをどちらでも書けるようにした。

github.com

require "radiko/radiko"
include Radiko

c "ハライチのターン!", "Thu 24:00", %w(TBS RBC)
c "オレたちゴチャ・まぜ", "Sat 25:50", %w(MBS)

番組表そのままで記述できるので便利。

Radikoの番組をRubyPicoから直接開けるようになった

その後radiko/radiko.rbの改造を加えている。

任意の番組リストを作れるように

前回の課題になっていたやつ。自分の好きな番組もann.rbやjunk.rbのように表示できるようにした。

rubypico/radiko - GitHub

こんな風に書くと

# coding: utf-8
require "radiko/radiko"
include Radiko

c "山下達郎のサンデー・ソングブック", "Sun 14:00", %w(FMT RADIONERRY FMO E-RADIO FMAICHI FMGIFU)
c "ライムスター宇多丸のウィークエンドシャッフル", "Sat 22:00", %w(TBS RAB YBC RBC)
c "菊地成孔の粋な夜電波", "Sun 20:00", %w(TBS IBC YBC RFC BSN)

こんな風に表示してくれる。

メソッドRadiko::cは今のところ週間番組を想定しているけど、以下のように書けば月~金だけ放送するような番組でもいける。

# coding: utf-8
require "radiko/radiko"
include Radiko

CHANNELS = %w(TBS RAB CBC)

c "毎日ニュース(月)", "Mon 14:00", CHANNELS
c "毎日ニュース(火)", "Tue 14:00", CHANNELS
c "毎日ニュース(水)", "Wed 14:00", CHANNELS
c "毎日ニュース(木)", "Thu 14:00", CHANNELS
c "毎日ニュース(金)", "Fri 14:00", CHANNELS

Radikoアプリを直接開けるようになった

めちゃ便利になった。

今週のJUNKとANNをRadikoで一瞬で開くRubyスクリプト

Air Podsを買ってからポッドキャストネットラジオを大分聞くようになった(片耳だけ付けるとモノラルになるのが素晴らしい)。

Radikoも使っているのだが最近になって有料のエリアフリーに入った。これでJUNK(TBSラジオの深夜放送)やANN(オールナイトニッポン)をタイムシフトかつ細切れに聞くことができる。

Radikoの放送は1週間いつでも再生できるのだが「(謎仕様で)再生開始から3時間」しか聴くことができない。しかし複数の放送局に配信している番組であれば放送局をまたがることで細切れにタイムシフト再生が可能になる。例えばJUNKのような2時間の番組なら4局をまたがることで30分細切れに再生が可能となる(そのためにもエリアフリーが便利)。

しかしスマホアプリのRadikoはこのような使い方をあまりサポートしてくれない。例えば「バナナ」で検索したら再生可能な「JUNK バナナマンバナナムーンGOLD」を局毎に一覧表示してくれればいいのだが、なぜかTOPに表示されるのは来週放送予定の番組一覧だったりする。JUNKやANNだと少なくとも5局以上配信されているため、実際に再生できる番組は下までスクロールしないと見つからなくて辛い。さらに放送中に突然アプリが落ちたりする。さらにさらに履歴機能が無いため番組を聴いている最中にアプリが突然落ちてしまうと 再度番組名で検索→TOPに表示されるのは放送予定なので下までスクロール→辛い という手順を何度も繰り返す必要がある。

解決するためにプログラムを書くことにした。スマホから使いたいのでRubyPicoで書く。

junk.rb, ann.rb

プログラムはGitHubに置いた。RubyPicoGemsのgithub_download.rbを使っている人はradikoでダウンロードできる。

github.com

junk.rbがTBS JUNK用、ann.rbがオールナイトニッポン用。

実行すると以下のような表が出力される。リンクをタップするとRadikoが立ち上がり番組を 任意の局で再生できる。何時クリックしても一番最近に放送された番組が立ち上がるのが便利なところ。

f:id:tuto0621:20170731212520j:plain

解説

Radikoにはシェア機能というよい機能がありURLで任意の番組を好きな時間から再生することができる。

http://radiko.jp/share/?sid=LFR&t=20170725010000

例えば上のURLはsid=LFR(放送局はニッポン放送)、t=20170725010000(2017/07/25 01:00から再生)となる。番組の最初からではなく途中からでも再生できるのがよい。

今回は途中再生は不要、かつすべて1:00から放送なのでタップした時間から一番最近の月~金の1:00を求めて表を作ればよい。

最近の曜日を求める

RubyPico(mruby)にはDateTimeが無いのでそこはTimeだけで頑張る必要があった。

radiko/radiko.rb at master · rubypico/radiko

def last_wday(wday, hour, min)
  t = Time.now
  t = Time.local(t.year, t.month, t.day, hour, min)
  if t.wday >= wday
    d = t.wday - wday
  else
    d = t.wday + 7 - wday
  end
  t - d * (24 * 60 * 60)
end

まとめ

スクリプトのおかげでJUNKとANNの再生がとても捗るようになった。また細切れに聞くのも簡単になったので通勤時間を利用して2~3回に分けて1つの番組を聴くのが基本スタイルになった(本当はどこまで聴いたかを記録できるようになるといいのだが)。

困ったこととしてはRubyPicoからの起動に慣れすぎて他の番組をなんなく聴かなくなってしまったことだ。URLを叩くためのライブラリ層は大体構築できたので次は自分のお気に入り番組を素早く再生するスクリプトを作りたいと思う。

Siv3DRubyというのを作っている その2

Siv3Dの下回りのクラスをmrubyにバインドしていく。なんか動きはじめた。Win+Gでアプリケーションの動画を簡単に取れるのが大変便利。そしてそのままTwitterに貼り付けられるのも素晴らしい。

mrubyでC++のクラスを組み込むときのコーディング規約

ofrubyとRubyPicoのいいとこどりみたいな書き方で書いている。コーディング規約、最初はシンプルにmrubyの標準ライブラリ的な書き方で書こうとしていたのだけどC++のクラスをmrubyに組み込むと各C++クラス間でもmrubyとC++への相互変換が頻発するようになりそのたびにmrb_siv3d_point_to_cpp(mrb, obj)みたいに長い関数を毎回呼ぶのが辛くなってきた。

siv3d自体がC++11/14の先進的なC++の書き方を積極的に使っている印象なので、組み込み用のコードもガンガンC++で書くことに舵を切りなおす。

↑今はこんな感じで書いている、ToMrb(), ToCpp() とか無名名前空間を使って関数名を短くしたりできたので結構気に入っているがどうだろうか。

C++のライブラリをmrubyに組み込んでいる人はどうやって書いているのだろうか。

久しぶりに開発環境がWindowsになった

Siv3DRubyのレポジトリを作った。コツコツやっていく。

Siv3DRuby/Siv3DRuby at master · ongaeshi/Siv3DRuby

Siv3DRubyのために開発環境を数年ぶりにWindowsに変えた。RubyPicoもあるしiPod touchiTunesと相性がいいのもあってMacを捨てるつもりは今のところない。が、新鮮な環境を今は楽しんでいる。

Bash on Ubuntu on WindowsのおかげでMacを使うことのメリットの40%位はWindowsでもよくなったのではないかと感じる。Visual Studioがありフリーなユーティリティが充実してゲームができるのがWindows側のメリットだろうか。後は設定変えれば大体なんとかなるところ。実際にディスプレイ、キーボード、マウスは(Windows側で)色々工夫してMacで使っているものと共有できた。

EmacsUbuntu版でやろうと試みたがSpacemacsが画面がちかちかしてうまく動かなかったので今回は断念(Bash on Ubuntu on Windowsはまだまだ進化しそうなのでそのうち動くことを期待)。日本語化パッチの当たっていないNTEmacsを使ってみたが結構普通に動いて感動。

最低限必要なものは大体動くようになったのだが細々とした設定がまだまだ足りないので微妙に馴染んでいない感覚(Windows10にな慣れていない+Spacemacsの操作も覚え中なのも大きい)。とりあえずMacのキーボードで動いてはいるがせっかくなのでHHKBやREALFORCEとかに変えようとキーボードを物色中(親指シフトも使いたい)。