あーく・りなっくす

プログラミングとかガジェットとかの雑記

Ubuntu で nginx を使ってリバースプロキシ

Heroku を Web サーバに使っているが、ドメイン周りでの不満がある。
どちらかと言うとドメイン契約先の問題なのだが、CNAME で設定するときにサブドメインを省略して設定することができない。

そこで、ルートドメインで設定できていた VPSを経由して Heroku をアクセスすればいい感じにできそうだということを思いついた。
そんなわけで初めて nginx を触っていろいろ設定してみた。
(今まで使ったことがなかったという理由で採用)

微妙に苦労したけど、とりあえず http でアクセスできるようになったので、Qiita へまとめた。

qiita.com

今度は https 対応しようと思う。

Slack 用の bot を作ってみた

Slack では簡単に bot を作れるようだが、Ruby で実装してみたかったので、 slack api で bot を作ってみた - Qiitaを参考に作ってみる。

必要な Gem をインストール

gem 'slack-api'

Gemfile に追記して、bundle を実行する。

$ bundle
Your Gemfile has no gem server sources. If you need gems that are not already on your machine, add a line like this to your Gemfile:
source 'https://rubygems.org'
Could not find gem 'slack-api' in any of the gem sources listed in your Gemfile or available on this machine.

あれ…。最初のメッセージは、特に source を指定してないからだろうけど、その下はなんだろう…。
根本的な原因は特定できていないが、source を http で指定したら問題なかった。

最終的な Gemfile

source "http://rubygems.org"

gem 'slack-api'

実装

簡易的な実装は下記の様になる。

# -*- coding: utf-8 -*-

require 'slack'

SLACK_TOKEN = 'ほげほげ'

Slack.configure {|config| config.token = SLACK_TOKEN }
client = Slack.realtime

client.on :hello do
    puts 'Successfully connected.'
end

client.on :message do |data|
  p data
  if data['text'] == 'test' && data['subtype'] != 'bot_message'
    params = {
      token: SLACK_TOKEN,
      channel: data['channel'],
      username: "bot test 1",
      text: "<@#{data['user']}> bot test"
    } 
    Slack.chat_postMessage params
  end
end

client.start

キーワード 2 種類に対してそれぞれのリプライを割り当ててみた図である。 f:id:arc680:20160409202146p:plain

実際に運用する際には、同記事の方が作っている bot の構成などを参考にしていく。 (ベースクラスを作って、それを継承していく形)

作った bot 紹介

Twitter などではなく、会社のチャットで利用している自作の bot についてどんなものがあるのかをまとめてみる。 いろいろ作りたい欲が湧いてきたので、使えそうなものがあれば、実装してみよう。

作ったもの一覧

基本的に Ruby で作っている。

当番通知

週替わりに PC を持ち帰り、緊急時に対応するようになっている(1 年ぐらい続けているけど、1 度ぐらいで基本的に平和)。
その週の担当者への通知を月曜日に行う。
最近対話にも対応するようにした。

数値計測

いろんな数値系を収集してきて、投稿している。月初のみのものもあれば、毎日のものもある。各プロジェクトで利用している。

午後ロー通知

みんな大好き(?)午後のロードショー
これはなんとなくで、Node.js にしている。公式からゴニョゴニョして取ってきている。今となっては作り直したいぐらいアレでヤバい。

六曜通知

これも Node.js である。
スピリチュアルやね。

会社以外の bot で何をどうするか

何かのデータを受け取って通知とかをいくつかやりたいのでやる予定である。
Slack あたりでやってみよう。

続く。

どっちを買うか

時代の流れなのかわからないけど、今までと違い選択肢があるフォースの覚醒の円盤。
選択肢としては 3 つで、通常版初回版プレミアム BOX となっている。 ジャケット的には初回版が良くて、いろいろ特典がついてるという部分ではプレミアム BOX が良い(それでも駄々っ子のフィギュアはいらないけど)。

値段の差もそれなりにある。

どっちにするかをまだ決められてないけど、プレミアム BOX の Amazon 限定の 1 つ目と限定でないやつが売り切れになってるので、念の為に残ってる方の Amazon 限定(↑に貼ったリンク)をポチっておいている。

ついでに Amazon のリンクテストをしている。

メモツールについて考えた

なにかいいものがないかを調べてたので、その条件とこれから使ってみるものについてまとめてみる。

メモツールに求める要件

仕事でドキュメントをまとめたり、議事録を書いたりするのに Atom を使っている。Atom で Markdown のプレビューをしながら書いていると、段々と重くなっていってつらい時がある。そのため、そのようなことがないメモツールを求めていた。
条件をまとめると、この 3 つである。

  • Markdown が使える
  • いい感じに管理してくれる
  • 長文を書いていても重くならない

結論から言うと、Quiver が今回の要件をすべて満たしそう(Demo 版を入れたばっかり)であるが、ブログの下書きなどをする際には Day One 2 が楽そうであるため、この 2 つについて軽くまとめてみる。

Quiver

HappenApps

特徴としては、

  • リアルタイムプレビュー
  • テーマ
  • CSS で調整
  • 任意(?)のオンラインストレージで同期可能

である。

リアルタイムプレビュー

下のスクショの通りであるが、ボタンを押すとプレビュー画面が表示されるようになる。
まだ長文を書いていないので、重くなるかどうかはまだわからない。

f:id:arc680:20160328222249p:plain

テーマ

先ほどのスクショや App Store にあるスクショを見ればわかるが、テーマの設定があり、好きな配色にすることも可能である。追加でダウンロードすることで、より好みのものに変えることができる。

CSS で調整

まだ試していないが、CSS で見た目の微調整が可能となっている。
Markdown Cell で文字と文字との間が微妙に気になるので後で調整しておきたい。
テーマのと連動している可能性があるので、テーマ自体も CSS だけで作れるのかもしれない。

任意(?)のオンラインストレージで同期可能

書いているメモのデータの設置場所を任意の場所に変更することができる。
そのため、Finder や Explorer などでアクセスできるタイプのオンラインストレージであればどれでも対応していると思われる。とりあえずメインで利用している Dropbox に置いている。

会社で使うには情報の外部への持ち出しとかが厳し目であるが、オンラインストレージに設置しないで使うのなら問題なく使えそうである。有料系も微妙に申請出さないと使えないけど、まだハードルは低い(気持ち的なもの)。社内で使っている人がいないか調べてみよう。

気になる点

ほぼ文句なしのツールではあるが、強いて上げるとしたら、クリップボードから画像を貼り付けることができないという点ぐらいしか今のところ見つけられてない。

Day One 2

Day One | A simple and elegant journal for iPhone, iPad, and Mac.

ブログの下書き用に採用している(n 時間前から)。

  • 日記として使うものであるため時系列で並ぶ
  • 位置情報を付加することができ、地図へマッピングできる
  • カレンダーで書いた日を確認できる

ここまで書いて疲れたので、細かく紹介しない。

ブログの下書きしつつ、アップロードしたくないものもまとめて管理(誤爆しそうだけど)とかする場合は割りとありなのかもしれないと思い採用した。iPhone 版が無料で使える様になってたのがきっかけ

デザインもよく、機能も充実しているが、

  • クラウド同期が専用のものだけになっている
    • 旧バージョンでは DropboxiCloud が選択できた模様
  • リアルタイムプレビューができない

という部分がマイナス要素か。

f:id:arc680:20160328222357p:plain

GitHub Pages に Minecraft Overviewer を設置する時のメモ

前回のお話

Minecraft Overviewer の出力結果が大きすぎて、Heroku にはデプロイできないことが発覚した。
そのため、VPS 以外でどこか無いか探したところ、以前少し触ってから放置していた、GitHub Pages の存在を思い出した。

GitHub Pages というページがあり、自分にあった作り方を選ぶと手順を教えてくれる。
これに従い進めていく。

最初の選択

  • User or organization site
  • Project site

の 2 種類を選択することが可能である。

前者は <username or organization>.github.io/ となり、 後者は <username or organization>.github.io/<repository>/ となる。

例としては、

あたりがわかりやすいか。https://code.facebook.com/ へ飛ばされるけど。

今回は、Minecraft Overviewer の置き場所にしたいのと、User site も今後利用するかもしれないので、とりあえず後者を選択する。

Generate a site, or start for scratch

いきなり選択肢が出てきたぞ。
まだ何もない状態であるなら前者で、そうでないのなら後者の方がいいのだろうか。
とりあえず両方とも読んでみよう。

Generate a site

手順

  1. リポジトリの設定を開く
  2. GitHub Pages の設定で、 Lanuch automatic page generater をポチッとする
  3. ポチッとしたら、Web 上にあるエディタを使ってコンテンツを追加していく。 (すでにあるファイルはインポートできる?README.md だけか?)
  4. テーマを選択する
  5. おしまい

Start for scratch

手順

  1. 公開用サイト公開用ブランチである gh-pages を作成する
  2. 任意の作業であるが、このブランチをデフォルトにする(なんでだ)
  3. index ファイルを追加する
  4. 追加したファイルをコミットする
  5. おしまい

どっちを使うのか

ざっと読んだ印象では、今回の場合は Start for scratch の方である。
その結果がコレである。
http://arc680.github.io/arcra/

Minecraft Overviewer を公開するアレコレ

はじめに

(メモとして残しておいたが既に別の方法でなんとかしてます)

以前は VPS 上でマイクラサーバと Web サーバの両方を稼働させていたが、現在では 自宅にある Raspberry Pi 2 でマイクラサーバ、Heroku で Web サーバという風に分けつつある。そのため、SinatraMinecraft Overviewer を動かそうとしてみた。

定期的に更新できるようなスクリプトを用意すれば、最新状態を保つことができそうである。
スクリプトで実行するのは、主に 3 つの処理となる。

  • マップデータ出力
  • ディレクトリ構造調整
  • デプロイ

マップデータ出力

cron で各ワールドを n 時間ごとに出力するようにしておく。

$ pyhon hoge.py マップデータのディレクトリ 出力先のディレクトリ

とりあえず適当な場所に出力しておく。

ディレクトリ構造調整

public/ 以下にファイルを設置すれば、http:///hoge.html という風にアクセスすることができる。ただ、http:/// でアクセスさせたい場合に対応できない。 そのため、当初は拡張子を変更して、erb などでテンプレートとして読み込ませようとしていた。調査したところ、html ファイルを他のテンプレートと同様に扱う方法があったので、それを採用することにした。

ruby - Serving static files with Sinatra - Stack Overflow

生成される html ファイルは基本的に変わることがないだろう(要出典)ことから、一度 views/ に設置すれば特に手を加える必要が無い。
そのため、マップデータの出力先を public/ にしておけばいいので、定期的に実行する予定のスクリプトにはそのパスを指定するようにしておく。

デプロイ

Raspberry Pi 2 を一旦の確認環境として使う

とりあえず今サイトで使っている Gemfiles やサーバを構成するファイルをコピーしてくる。
そして、最低限のパッケージをインストールする。

$ sudo apt-get update
$ sudo apt-get install ruby
$ gem i bundler
$ bundle install

が gem のインストールに失敗する。

$ sudo apt-get install libgmp3-dev

が必要なのかもしれないという情報があったのでインストールしてみたが、これではなかったようである。

Ruby の開発向けパッケージも追加でインストールする。

$ sudo apt-get install ruby2.1-dev

これで gem のインストールができるようになり、SinatraMinecraft Overviewer を公開できるようになった。

Heroku へのデプロイ

どうせならということで、Github との連携を試してみる。
(ちゃんとメモしてなかったのでざっくりと) Githubリポジトリに予め push しておく。
Heroku の Web UI からポチポチっとリポジトリとブランチを選択する。
自動デプロイを有効にする。
これだけのはず。初回は手動デプロイも実施しないとダメかもしれない。

とここまでは割と順調であったが、問題が発生した。

Compiled slug size: 493.4M is too large (max is 300M).

どうやらでかすぎるようだ。
諦めて別の方法を探そう。