うなすけとあれこれ

2017年08月14日

Hyper.shでTwitter botを運用する

hyper.shのコンソール

Hyper.shとは

Hyper.sh - Container-native Cloud

Hyper.shは、とても手軽にDocker containerをhostingできるサービスです。課金は秒単位で行なわれ、一番安いプランだと月に$1ちょっとしか費用がかかりません。

これを使って、特定の単語に反応するTwitter Botを運用してみます。

Twitter Botを作る

Applicationの作成

Twitter Application Management

まずはここからCreate New Appします。Consumer KeyConsumer SecretAccess TokenAccess Token Secretを入手します。

Bot本体の作成

今回つくるBotは、特定の文字列からなるDMを受けとったときに返信するというものです。

require 'logger'
require 'twitter'
logger = Logger.new(STDOUT)

config = {
  consumer_key:        ENV['CONSUMER_KEY'],
  consumer_secret:     ENV['CONSUMER_SECRET'],
  access_token:        ENV['ACCESS_TOKEN'],
  access_token_secret: ENV['ACCESS_TOKEN_SECRET'],
}

rest_client = Twitter::REST::Client.new(config)
logger.info 'REST client initialized'

streaming_client = Twitter::Streaming::Client.new(config)
logger.info 'Streaming client initialized'

streaming_client.user do |tweet|
  if tweet.is_a?(Twitter::DirectMessage) && %r[\A年収\z].match?(tweet.text)
    logger.info "Recieved DM #{tweet.text} from #{tweet.sender.screen_name}"
    rest_client.create_direct_message(tweet.sender, "#{ENV['ANNUAL_INCOME']}万円")
  end
end

このようになりました。

unasuke/annual-income-bot

Hyper.shにdeployする

さて、まずはこのDocker imageをDocker Hubにpushします。 unasuke/annual-income - Docker Hub

次に、hyperの中にpullしてきます。hyperをローカルマシンと同様のものだと考えるとわかりやすいかもしれません。

$ hyper pull unasuke/annual-income:v0.1.1

そして、docker-compose.ymlを作成してあるので、次のコマンドでもうBotが動作し始めます。

# project名にハイフンが使えないと怒られたので直接指定
$ hyper compose up -d -p unasuke_annual_income

という訳で、僕に「年収」とだけ書いたDMを送ると僕の年収が返ってきます。

超簡単Hyper.sh

どうですか、Hyper.sh。ちなみにプランは自動で決まるのか、僕のBotはS4(月$5.18)で実行されています。

以下にinvitation linkを置いておくので是非活用してください。 https://console.hyper.sh/register/invite/yApE4Arn3osDm9RPDG3LuLJPj1BwR8fK

訂正(2017/08/15 00:27)

デフォルトでS4になり、docker-compose.yml内で指定できるそうです。

Compose File Reference | Hyper.sh User Guide

Tweet
2017年08月14日
2017年07月15日

Oculus Riftを買った

oculus rift

サマーセールだったものでつい

もともと去年組んだPCは、VRを楽しむために組んだものでした。でも資産的に厳しい状態が結構続き、VRデバイスには手を出せずにいました。

そしたらなんと、Oculus Riftがいきなり5万円まで値下げしたじゃないですか。数十分悩んだ末、購入を決めました。

というわけで、やっていきましょう pic.twitter.com/PZVuuv5Xmk

— うなすけ (@yu_suke1994) 2017年7月15日

装着感

僕は眼鏡をかけているのですが、Oculusを装着するのが一番大変で、コンテンツの視聴やゲームのプレイ自体には支障ありませんでした。

しばらくしたら少し小さめの眼鏡を買おうと思います。

操作感

セットアップの過程でセンサーによる部屋の認識が(と言っていいのか?)あるのですが、それにてこずりました。そんなに広くない部屋なので、何度も「もう少し離れてください」と表示されてしまいました。

ゲーム

サマーセールで購入した場合には、5つほどのゲームが無料でバンドルされてきます。そのうちで惹かれたRobo Recallをやってみました。

Robo Recallが、というよりやっぱりVRはすごいもので、VRという意識が薄れていないゲーム開始時のムービーですらヒヤッと思わせられました。没入感がとにかく凄いです。

操作性に関しては、僕があまりゲームをやらないのと、とにかく敵が迫って来て焦るので、終始わちゃわちゃしてしまいました。

総評

ヤバい

Tweet
2017年07月15日
2017年06月18日

maekawaのversion 0.5をリリースしました

清楚前川

Released! 🎉

上のみくにゃんはリリース記念に描きました。やる気の続く限り、maekawaのリリースごとにみくにゃんを描いていこうかと思います。

「前川みく」/「うなすけ」のイラスト [pixiv]

What’s new?

TargetのRoleArn指定対応

いつの日からか、TargetにもIAM Roleを指定できるようになっていたのでそれの対応をしました。

Profile指定対応

cliで実行するときに、aws credentialのprofileを指定して実行できるようにしました。

EcsParameters対応

今回のリリースのメインです。

Amazon ECS Now Supports Time and Event-Based Task Scheduling

spice lifeでは CloudWatch Eventsからecs taskを実行するのに、今まではlambdaを中間層として実行していました。

しかしTime and Event-Based Task Schedulingによって、中間層となるlambda functionが不要となり、直接ecs taskを実行できるようになりました。

今回のリリースで、maekawaからEcsParametersを取り扱えるようになりました。

KinesisParameters対応

いつの日からか、Kinesisにも対応していたのでmaekawaでも取り扱えるよう対応しました。

しなかった対応

InputTransformerとRunCommandPrametersには対応していませんし、今後するつもりもありません。

理由として、まずこの2つの機能をspice lifeで使っていないこと、そして実装が困難であることが理由です。

Golangを初めて触って作成した初めてのcli applicationなので、実装にまだ整理されていない部分があります。その上、言語知識がまだ不足しているので、複雑な構造の型への対応が今の僕には困難です。

なので実装予定はありません。

ただ、もちろんPullRequestを頂けるのならありがたく頂戴しますし、Amazon Wishlistなどの手段で圧を掛けてくだされば実装する気持ちになると思います。

今後の予定

outputをもうちょっとかっこよく(色とか差分とか)できたら1.0.0としてリリースしたいですが、いつになるかは未定です。

Tweet
2017年06月18日
2017年05月22日

middleman-hatenastarというgemをつくりました

howto page

つくりました 🌟 🌟 🌟

@yu_suke1994 あなたとはてなスター、いますぐ設置 https://t.co/sihB5jvGDx

— あそなす (@asonas) 2017年5月17日

ということがあり、つくりました。

Tokyo Middleman Meetup#3 - connpass というイベントを開催したのですが、そこでのLTでlive cordingをして、日曜から清書してできあがり、という経緯があったりします。

つかいかた

はてなスターのトークンを取得する

はてなスターをブログに設置するには - はてなスター日記

を参考に、トークンを取得してください。

middlemanの設定でhatenastarを有効にする

これは例です。詳しくは はてなスターをブログに貼り付ける - はてなスター日記 を読んでください。

activate :hatenastar,
  token: 'your token',
  uri: 'h2 a',
  title: 'h2 a',
  container: 'h2',
  entry_node: 'section.article'

layoutにhatenastar_tagを設置する

<head>のどこかで = hatenastar_tag を呼び出して完了です。

また、引数でconfig.rbの設定値を上書くこともできます。

= hatenastar_tag(entry_node: 'div.article')

既知の問題点

複数要素に対応していない

エントリの複数指定、1エントリ内での複数スター表示にまだ対応できていません。pull requestを送ってくれてもいいんですよ ❓

よろしくお願いします

とりあえずスター連打してください。

Tweet
2017年05月22日
2017年05月17日

middleman-somemojiというgemをつくりました

somemoji

つくりました ✌️ ✌️ ✌️ ✌️

middlemanでemoji記法 :example: をemoji画像に置換するmiddleman pluginをつくりました。 🎉

unasuke/middleman-somemoji

あ、middleman v4以降必須です。

動機

絵文字使いたかった、けどunicode emojiの入力ってけっこうしんどい、なのでGitHub風に絵文字を入力したかった。

できるならemojiのproviderも選べるようにしたかった…… そんな感じです。

つかいかた

bundle install

Gemfileに次の行を追加して、bundle installします。

gem 'middleman-somemoji'

somemojiを使ってemoji画像をひっぱってくる

$ bundle exec somemoji extract --provider=twemoji --destination=./source/images/emoji

このへんは本家 r7kamura/somemoji を見に行ったほうがいいかもしれません。

middlemanの設定でsomemojiを有効にする

activate :somemoji,
  provider:    'twemoji',
  emojis_dir:  '/images/emoji'

上のコマンドそのまま実行すると設定はこんな風になります。

あと、asset_hashを使っているならemoji画像以下はhashを付けないようにしてください。

# こんなふうに
activate :asset_hash, ignore: 'images/twemoji'

emojiを入力する

😄 🎊 👀 ⭐️ 👍 💤 🈂 🤘

既知の問題点

preのなかも変換する

<pre><code>の中にあるemoji記法も否応なしに<img>タグに変換してしまうので、これを直したいです。見通しは立ってます。手を動かすだけです。

asset_hash対応

これ必要かなぁ…… ❓

よろしくお願いします

🙏 🙏 🙏 🙏 🙏 🙏 🙏 🙏 🙏 🙏 🙏 🙏 🙏

Tweet
2017年05月17日
2017年05月12日

mastodonインスタンス、立てたはいいけど不安定

red mastodon

(2017-05-13 10:53 誤字修正)

立てて2週間ほど

こちらになります → lupinus.bouquet.blue

赤い

やぎにいが一晩でやってくれました。 dark pink color theme by yagi2 · Pull Request #3 · unasuke/mastodon

不安定とは

頻繁に500

ALBが頻繁に500を返すので、ログを見たらpumaが起動直後に死んでるのでインスタンスタイプをt2.mediumに上げたら安定しました。

before t2.micro

after t2.medium

streamingが動かない

つらい。

wss can't connect

nodeからpostgresへの接続がうまくいっていないのか、Missing access tokenで怒られている。

DDoS https://lupinus.bouquet.blue/@unasuke/59

他インスタンスから(他インスタンスの)画像が取得できない

mastodon rch

mastodon pawoo

S3のACLはpublicにreadできるはずなのに、何故。

現状

以下、現状(t2.medium)です。

mastodon metrics

Tweet
2017年05月12日
2017年04月30日

mastodon instanceをaws上に構築しました

something went wrong

はじめに

まだログインできません。

断念

最初、いちからterraformで構築しようと思っていたのですが面倒すぎたので r7kamura/mastodon-terraform をforkして作成しました。

追加で作成したリソースは、SESとlog用のS3 bucketとRoute53のzoneやrecordです。

運用

構成は前述のリポジトリと変えている部分はないのでスケールしやすい構成ではあるのですが、スケールすると大変なことになるのでしばらくはおひとりさまインスタンスとして色々いじってみたいと思います。

が、新規アカウント作成できるようにするつもりではあります。

Tweet
2017年04月30日
2017年03月29日

高専DJ部 #12 でした

kosendj-bu-12

右のDJでした。

謝罪

はしゃぎすぎて機材のコンセントを踏み抜いてしまったこと、大変申し訳なく思っております。

セトリ

今回はB2Bなので、僕が流した曲を順に貼っていきます。

  1. ウッーウッーウマウマ(゜∀゜) (Ryu* Remix) - Ryu☆
  2. Fury - Feint
  3. Such Kick (Deathmachine Remix) - N-Vitral
  4. Shot Thru Da Speaker (Original Mix) - Kurt, Mike Ahmet
  5. Rise Again (Buzzman & Summa Jae Remix) - Mark Breeze, Lost Witness
  6. Downside Up (Original Mix) - The DJ Producer
  7. Hentai (DJ Edit) - S3rl
  8. Industrial Machinery (Original Mix) - eDUB

togetter

KosenDJ-bu #12 - Togetterまとめ

Tweet
2017年03月29日
2017年03月07日

maekawaというAWS CloudWatch Eventsのcli clientをGolangで作りました

commits

What’s “maekawa” ?

unasuke/maekawa: AWS CloudWatch Events client

maekawaは、Golangで書かれたAWS CloudWatch Eventsのcli clientです。Yamlに定義されたRuleとTargetを登録します。

冪等性を持つようになっているので、便利です。

なんで作ったか

軽く探したのですが、CloudWatch Eventsの操作をするcli toolが見当たらなかったので作りました。

なんでGolangか

1. クロスプラットフォーム

Golangはクロスコンパイルが容易にできる言語です。1つのソースから複数環境に適したバイナリを生成することができます。

手元のmacOSで実行したり、CIサービスで稼動しているLinux上での実行をしたりすることを考えると、クロスプラットフォーム対応は必須でしょう。

2. aws-sdkがある

Golang向けのaws-sdkがあるので、awsの機能を使用するプログラムが簡単に作成できます。

aws/aws-sdk-go: AWS SDK for the Go programming language.

3. やってみたかった

最大の理由です。

クロスプラットフォームも、aws-sdkも、どちらも僕の慣れているRubyで書くことにしても、同じ利点があります。

ただ、何か静的型付けでコンパイルする言語を学習しておきたいなと思ったので、Golangを選択しました。

名前の由来

隣の席の人に「どんな名前にしたらいいですかね」って聞いたら「maekawaでいいんじゃない」って言われたのでそうしました。

つかいかた

READMEを読んでください。

あとまだ安定してないので実戦投入オススメしないです。直せてプルリク送れるレベルで使ったほうがいいです。

そこそこ安定したらversion 1.0.0にします。

もともと社内で使うために作ったので、そのへんも追々会社のブログに書こうと思います。

Tweet
2017年03月07日
2017年03月06日

beats solo³ wirelessを買った

beats solo³ wireless

今頃感

ヲチモノ- 【ヘッドホン】Beats 『Solo3 Wireless』 レビューチェック

発売開始はどうやら2016年の9月。なんで今頃になって買ったのかと言うと、発売当初になかった(PRODUCT)RED色がいつの間にかラインナップに追加されていたからです。

(PRODUCT)REDというか赤が好きなので。

音質

音質は僕はどうこう言える耳を持っていないのでなんともですが、今までに使っていたbeatsのヘッドホン(Mixr)と同様に低音がちゃんと出ているように思います。

DJブースでも使ってみましたが、モニターヘッドホンとして支障なく使うことができました。

つけ心地

しっかり押さえつけてくれるので、うがいとかしても外れません。ただやっぱり長時間つけてると耳が痛くなりますね。眼鏡もかけてるし。これは最初からわかってました。

いくら(PRODUCT)REDとはいえ赤すぎでは???????

Tweet
2017年03月06日
古い投稿