もぐてっく

人は1つ歳をとるたび、1ビットづつ大きくなれると信じてた。

たった180円で独自ドメインの超高機能ダイナミックDNSが構築出来ちゃった話

あらすじ

ある日、外から自鯖に接続出来なくなった。
調べてみると愛用のDDNSサービスの規約が変わって有料化。名前を解決してくれなくなっていた。

今まで大分お世話になってたので課金しようかなとも思ったけれど、DDNSだけで¥500/月はちょっと・・・。

仕方ない。他のDDNSにするかと色々探していると、

有り難いご提案が。早速サイト拝見。

GehirnDNS | ゲヒルンサービスサイト

おおー!DDNSと言うよりは、フルスペックのDNSサーバをAPIを使って操作出来るようなサービスって感じ。すごい。
しかも2ドメインまで無料でホストしてくれると。ここに決めた!

Gehirn自体にはドメイン取得サービスは無いようなので、ドメインは最近広告がバンバン出てるお名前.comさんを使う事にしました。

お名前.comで取得したドメインをGehirnDNSで運用するまで

お名前.comもGehirnDNSも本格的なDNSのサービスなので、作業手順はDDNSと比べてかなり複雑です。
お名前.comとGehirnDNSのサイトを行き来しながら設定する事になるので、手順ごとにサイト名を記載しました。

[お名前.com]ドメインを取得する。

まずはお好きなドメインを取得します。
クレジットカード払い&審査不要のドメインなら契約と同時に使用可能になります。

今回はセール中だった.xyzドメイン(初年度:¥180/年)を契約しました。
今回掛かる費用は、このドメインの代金のみになります。


契約時に自動契約更新オプションが有効になっていましたが、今回は宗教上の理由でオフしました。

[Gehirn]ドメインを認証する。

ドメインが取れたら、Gehirnのコントロールパネルから「管理ドメイン一覧」を開きましょう。
ドメインを追加する」ボタンを押して、さっき取得したドメイン名を入力します。

f:id:moguno:20140719165745p:plain

そうすると、ドメインに認証のための認証コードを含んだネームサーバを設定せよと言われます。
なるほど、ドメインの設定を変える権限が無いと登録出来ないんですね。

f:id:moguno:20140719165910p:plain
(認証コード部分は適当に入力したドメインの物です。悪しからず。)

この画面を維持しつつ、別タブでお名前.comに移動します。

[お名前.com]ネームサーバを設定する

お名前.comに戻ってきたら、ドメインNaviの「ネームサーバーの設定」を開きます。
「他のネームサーバーを利用」を表示するとネームサーバの設定画面が出るので、Gehirnの指示通り設定します。

f:id:moguno:20140719170429p:plain

[Gehirn]認証を完了する。

しばらく待って(今回は30分ほど)、さっきの画面の「確認コードを認証する」ボタンを押すと登録が完了します。

f:id:moguno:20140719170615p:plain

[Gehirn]Aレコードを登録する。

引き続き、コントロールパネルの「管理ドメイン一覧」にてさっき登録したドメインの「設定」ボタンを押します。

設定画面の中程にAレコード(ホスト名に対応するIPv4アドレス)の欄が有るので、自鯖のアドレスを設定します。

f:id:moguno:20140719171052p:plain

IPアドレスが変わった時に迅速に変更される様に、TTL(周りのネームサーバが自分のIPアドレスを忘れてくれる時間)は600秒(10分)にしました。

この時点でnslookupなどで名前が解決出来る事を確認しましょう。

[Gehirn]APIキーを取得する。

後述の更新スクリプトで使用するAPIキーを取得します。
コントロールパネルの「APIキー管理」画面にある「APIキーを追加」ボタンを押して、TokenとSecretを得ます。


これにて設定完了です。

GehirnDNS API

前述の通りGehirnDNSにはリモートでDNSをメンテナンス出来るAPIが搭載されています。
このAPI、なかなかシンプルかつ強力です。

DNS APIリファレンス | ゲヒルンサポートセンター

認証はシンプルなBasic認証。OAuthの様な複雑な手続きは不要です。
高機能な言語とライブラリが無くても容易にバッチ処理が可能です。
(セキュリティはhttpsで確保。)

APIで触れる範囲は「コントロールパネルで出来る事全て」でよいと思います。
コーリングシーケンスもRESTの法則に忠実で書きやすいですね。

IPアドレス更新スクリプト

と、言う訳で自鯖IPアドレスを定期的に通知するスクリプト(Ruby製)を作りました。

moguno/gehirnddns · GitHub

スクリプトを実行する度に、さっき登録したAレコードを自鯖のグローバルアドレスに書き換えます。

./gehirnddns "ドメイン名" "取得したToken" "取得したSecret"

細かいパラメータ変更や他のレコードの更新はスクリプトを直接いじればある程度対応可能です。

mikutterプラグインのTIPSをコツコツ纏めて行きたい。

TIPS

メッセージをageる

msg.is_a?(Message)
  msg[:modified] = Time.now
  Plugin::call(:message_modified, msg)
end

Delayer実行時は、プラグインが全てロードされている事が保証されている。

Delayerは必ずメインスレッドで動作する。(GTKがidleの時に実行される。)

Reserverはメインスレッド以外で動作する。

イベント

on_appear(messages)

Messageオブジェクトを生成した時に発生。

on_update(service, messages)

TwitterからRESTまたはUserStreamでメッセージを受信した時に発生。

on_gui_timeline_add_message(i_timeline, messages)

メッセージがあるタイムラインに突っ込まれた時に発生。
messagesはMessageまたはMessagesのインスタンス
Array(messages).eachで統一的に扱えるぞ。

on_message_modified(messages)

Messageの内容が更新された時に発生。
(ふぁぼられ、リツイートなど)

ポケットミクたんといちゃいちゃKit for Windows

Gakkenのポケットミク(NSX-39)の機能をお手軽に体験できるWindowsアプリです。
出先でポケミクのデモをするのにWindows8.1タブレットを使いたかったので作りました。

f:id:moguno:20140430124603j:plain

見た目

f:id:moguno:20140506124330p:plain

インストール

1. 下記サイトからzipファイルをダウンロードして下さい。

https://www.dropbox.com/s/si8pgc2w6ns2chl/NSX39Mog.zip

2. ダウンロードしたzipファイルを適当なフォルダに解凍します。

3. setup.exeを実行します。

あなたも超モテ!ポケミクたんといちゃいちゃテクニック!

アプリをきっかけに楽しくお話ししよう

さっそくアプリを起動してポケミクたんを接続してみましょう。
すると、画面下部のステータスが「ポケミクがいないよ」から「ポケミクにんしきちゅう!」に変わります。
Windows7だと少々時間がかかることがあります。)


この状態で画面の鍵盤の1段目に触れると、ポケミクたんが歌ってくれます。

鍵盤左側の「MOD」ボタンを押すとポケミクたんの声にビブラートが掛かります。
(マルチタッチ対応:押している間はON。マルチタッチ非対応:押すたびにON/OFF切り替え。)

ポケミクたんの隠れた魅力に触れてみよう

実はポケミクたんは楽器の演奏も得意です。
鍵盤部分の2段目に触れるとGM音源に準拠した128種類の楽器と1セットのドラムを演奏する事が出来ます。


マルチタッチ対応であれば鍵盤の同時押しが出来るので、頑張れば伴奏付きでポケミクたんに歌ってもらう事も出来ますね。

オリジナルソングを歌ってもらおう

画面中央のテキストボックスにひらがなで歌詞を入力してみましょう。
「セット」ボタンを押して鍵盤(画面、本体どちらでもOK)に触れると、ポケミクが歌詞の通りに歌ってくれます。

「セット」ボタンを押した時に赤くなった文字はポケミクが歌えない文字になります。
(歌えない文字を「ん」に変換して送信します。)

エフェクトでロマンチックな雰囲気を演出

画面上部の「リバーブ」、「コーラス」、「バリエーション」コンボボックスの項目を選択してみましょう。
すると、ポケミクの声に色々なエフェクトが掛かります。
(なんと230種類以上のエフェクトがあります!)

コンボボックス下のスライダーは各エフェクトの掛かり具合が調整出来ます。

ポケミクたんのいつもと違う一面を楽しみましょう。

ソースコード

このソフトウェアはオープンソースです。GitHubソースコードを公開しています。
機能追加などは各自で行った方が色々良いと思います。

https://github.com/moguno/nsx39Mog