0

hubotにごはんを選んでもらう

推薦ではなく、思いもよらない料理を見る事で発想を豊かにしたかったのでhubot scriptを作った。

https://www.npmjs.org/package/hubot-gohan

npmでインストールして、「hubot ごはん」で実行する。


wikipediaのCategory:料理から2つ下までたどると、色々な料理が見つかる。その中からランダムに返すようになっている。

wikipediaなので作り方とか素材・調味料などのリンクも辿っていけて面白い。
普通に暮らしてると知らないようなアフリカの炊き込みご飯とか、ギリシャの焼き鳥みたいなのとか出てくる。

たまに調理器具とか調理学校を食えとか言われるけどそれはそれで面白いのでいいと思う

あとまあ、チャットで使えるので、食生活豊かな都内の会社の人とかは今日の晩飯どうするとかこれで決めればいいのではないか

0

MacDownというMarkDownエディタがよい

よいよい

MacDown: The open source Markdown editor for OS X.
github.com/uranusjr/macdown

Mou.appの改良版で(といってもフルスクラッチで作り直しているようだが)、
Mouで表示ができなかった、GitHub Flavored Markdownのコードハイライトが使えるようになっている。つまり

```ruby
def hello
puts "hello work"
end
```
のようなコードブロックが色付きで綺麗に表示される。絵文字や画像とかもちゃんと出る。
というかまさにこれが色がつかないどころか表示が崩れて読めなくなる所だけがMouで不満なところだった。


欠点はちょっと動作が重いところ。スクロールするとわかるけど、普段はそんなに気にならない。

あとctrl+bでblockquoteが挿入されるという謎のキーバインドになっていて、カーソルを左に移動できない。
質問したら、次バージョンからctrl+shift+bに変更してくれるって言ってた。
とりあえず現バージョンでは[システム環境設定]→[キーボード]→[ショートカット]からアプリケーション(MacDown.app)を追加して、Blockquoteに別のキーボードショートカット割り当てれば回避できるよ、とのこと

0

Web版Lindaによる実世界コンピューティング

8/24(日)のプログラミングシンポジウム(夏)で発表してきたスライド。
少し修正したり、質疑応答の内容とかも追加した。

Lindaをnodeとsocket.ioで実装したら便利だったので、色々使ってるよという話をした。



俺の周囲ではLindaとは何なのか説明しなければならない人しかいなかったので、プレゼンの最初のほうで「Linda知ってる人〜」って言ったら15人ぐらい手あがって完全アウェーに来たと思った。

懇親会で、昔Linda使ってた人とかに褒められてうれしかった。

0

ブラウザでtext to speech

ブラウザでテキストの音声読み上げができるというので試した。

http://shokai.github.io/text-to-speech-on-browser/



動いた / 動かない

Mac OSXとAndroid4.4とiOS7のSafariとChromeでは日本語が読み上げできた。
iOSはwebview(twitterアプリの内蔵ブラウザで試した)でも読み上げできたが、androidはwebviewでは無理っぽい。

古いOSは知らない。windowsだとどうなんだろう?

Firefoxには音声読み上げAPIが無い。


参考



コード

main.coffee
say = (str) ->
unless SpeechSynthesisUtterance
console.log "your browser does not support text-to-speech API"
return

msg = new SpeechSynthesisUtterance
voices = speechSynthesis.getVoices()
jp_voice = _.find voices, (v) -> /ja[-_]JP/.test v.lang

if jp_voice
console.log "say #{str} (#{jp_voice?.name})"
else
console.log "say #{str}"

msg.voice = jp_voice
msg.text = str
speechSynthesis.speak msg


$ ->
$("#btn_say").on 'click', ->
say $('#text').val()

say 'こんにちは'


細かいこと


voice プロパティ

Macはvoiceプロパティを設定してあげないとうんともすんとも言わない。getVoices()で取得して声を指定する。
逆にスマホ(android/iOS)だと、voiceプロパティは設定しなくても日本語をしゃべってくれた。英語とか日本語以外を喋らせるにはvoiceプロパティの設定が必要。

Macのchromeで1回目喋れない

なぜか1回目はgetVoices()が空配列を返してくる。
Macのsafariは問題ない。

iOSはユーザー操作後でないと読み上げできない

iOSはボタンを押すなどユーザー操作のイベントからでないと音声再生しない。

下の様にsetIntervalで喋らせた場合、何も操作しなくてもsay関数が呼ばれる。getVoicesもspeechSynthesis.speakも動くのに、音声が出ない。
一度でもボタン “#btn_say” の方を押せばsetInterval内の「こんにちは」も発声されるようになる。
$ ->
$("#btn_say").on 'click', ->
say $('#text').val()

setInterval ->
say 'こんにちは'
, 1000

0

hubotでslackに匿名投稿する

scripts/ の下に置く
anonymous-post.coffee

hubot anon 帰りたい
とか
hubot anon @shokai 帰れ
とか
hubot anon #general はい
とかで投稿できる




# Description:
# hubot anonymous post
#
# Commands:
# hubot anon MESSAGE
# hubot anon #general MESSAGE
#
# Author:
# @shokai

config =
to: '#general'

module.exports = (robot) ->

robot.respond /anon (.+)$/i, (msg) ->
from = msg.message.user.name
args = msg.match[1].trim().split(/\s+/)
if /[#@][a-zA-Z0-9_\-]+/.test args[0]
to = args.shift()
else
to = config.to
text = args.join(' ')
robot.send {room: to}, text
msg.send "@#{from} #{to} にこっそり「#{text}」って言っておきました"
return

robot.respond /anon$/i, (msg) ->
msg.send """
hubot anon MESSAGE
hubot anon [to] MESSAGE
hubot anon #general MESSAGE
"""
return