2016年 12月の投稿を表示しています

Minecraft をやり始めて、サーバを立てて、ここまでのまと

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

新規に工業で遊び始めました。
工業的 Minecraft プレイ日記 #0 / またもや工業生活を始める | ごみばこいん Blog


こんにちは。ごみばこです。

半年くらい前から嫁と2人でふわーっと Minecraft をやり始め、サーバや mod をあれこれいじくり回ってきたので、ここいらでいっかいまとめておこうかと思います。

 

Minecraft の始まり

始め方や細かい情報 wiki に乗っているのでそちらを見てもらうとして。

Minecraft Japan Wiki - Minecraftトップページ

そんなこんなで Minecraft の準備が整い、ローカルでぽちぽちやっていましたが、毎回サーバ上げて、っていうのはどちらかがいないときに面倒だよね、ということになりサーバを別途用意することにしました。以前 Terraria も2人でやっていたということもあって、それ専用で使っていた CentOS7 なサーバがいるので、これをそのまま利用することにしました。

ちなみに Minecraft サーバ とかでググると「物理サーバを自宅に用意しよう!」「UPSやNASを使って~」「メモリが~」「batファイルを作成して」とかって書いてあって、なかなか激しいなって思いました。と、いうかこのせいでググっても英語情報ばっかりで(これはこれでわかりやすいものが多くてうれしいけど)、あまり参考になるような情報と出会うことも少なかったということも併記しておきます。もっと Linux やろうぜ。

 

MC 1.10 Spigotの利用

Minecraft を始めたとき、バージョンは 1.10 でした。

MOD にも魅力を感じていたところですが、クライアント側で用意するの面倒じゃんね、とか、いやいや、意外とサーバ側だけでもできるんちゃう?というところから調べていると(もとい Wiki を眺めると)、Spigot というよさそうなものがあるではありませんか。

SpigotMC - High Performance Minecraft

導入手順は wiki と公式サイトに書いてある通りで、まあ、そんなに難しいものでもなく。と投げっぱなしもあれなので簡単に説明を書いておきましょうか。

 

Spigot は Bukkit と呼ばれる Minecraft サーバをもとに作られたもので Bukkit プラグインもそのまま利用できます。Bukkit は DMCA 問題(配布するプログラムに Minecraft 公式の持っている著作権的な云々が絡んでいる)があり、Spigot も同じように影響を受けています。そのため、ソース(とビルドツール)が配布されているので、これを自分たちでビルドすることになります。

ビルドする方法は以下のページを参照してもらえばよろしくて。

BuildTools | SpigotMC - High Performance Minecraft

これまたちなみにですが、このくらいの英語なら Google 翻訳片手に戦えるはずなので、やろうと思っている人は頑張って戦おうね。投げっぱなしは鯖管としてどうなんかなーとか。(ググるとそんな人たちももりもり出てきてアレ)

 

そんなこんなで Spigot サーバが立ち上がり、常時稼働しながらちょっとずつプラグインを入れていきました。最終的には以下のようなプラグインが入っていました。

MOD名 ざっくり説明
AutoSaveWorld ワールドのバックアップを定期的に取る
BlockHat 手に持っているブロックを頭に被ることができる
DTools 3x3 を処理できる強化型のつるはし、斧、シャベルを作成できる
FarmProtect 開墾した土地の上で走るジャンプするしても大丈夫にする
GlassDropper ガラスが割れずにドロップする
HealthBar Mob の頭上に体力ゲージを表示する
Multiverse-Core Multiverse プラグインの前提プラグイン
Multiverse-Portals 別ワールドに移動できるポータルが作れる
Multiverse-SignPortals 別ワールドに移動できる看板が作れる
Original-Double-Jump 空中でジャンプができる
PacketListenerAPI 前提プラグイン
PermissionsEx 権限管理。後々を考えてはいたが、まずは身内だけなのでフル許可!
PetOwner ペットの所有者を変更できる
ProperTime 時間の流れを制御できる
ProtocolLib 前提プラグイン
RampenDrills 指定の組み合わせでブロックを組み立てると走行するドリルが出来上がる
SimpleSort チェストを棒でたたくと中身をソートできる
TreeAssist 繋がっている原木を一括で刈れる
Vault 前提プラグイン
WorldBorder ワールドに境界線を設定できる
XPKeeper 経験値を貯めておける看板が作れる
dynmap Web で地図を見れる
dynmap-mobs DynMap に Mob 表示機能を追加する

 

いろいろなプラグインを見ていると、もはやそれチートだよねとかっていうものもある中で「バニラ環境(何も拡張を入れていないドノーマル状態)からは便利になるけど、チートにはならないように。ゲームバランスぶっ壊れないように」というところだけは気を付けていました。

「3x3ツール作れるけど、3倍の素材が必要で、耐久力は通常の3倍どころか、1.5倍程度」

「2段ジャンプできるけど、その分おなかが多く空いてくる」

などといった具合に、バランス調整をしていました。

 

しばらくはこんなで、ワールドを増やしてポータル作って飛んで遊んだり、なんてしていました。

 

が!!!!!

やはり、実況動画を見ていると、工業mod にも憧れをもつところです。

 

めっちゃ調べたのですが、やっぱり Spigot や Bukkit などでは追加ブロックはできないということで、なくなくあきらめて forge に移行することを決めました。

ちなみに、情報があまり多くないですが Slime Fun という Spigot で使える工業的なものもあります。こいつもいろいろ調べてみて検討はしました。結果としては、ビルド系のプラグインの RampenDrills で体感したのですが、既存ブロックを組み合わせて配置すると、何かのメカニズムが動くよ!というものがどうも難しいねっていう話になり、あきらめることにしました。

 

MC 1.8.9 Forgeの利用

Forge は Minecraft そのものを拡張していくようなタイプのものになります。原理はよくわかんないんですけど、 Minecraft の jar を読み込んでいい具合に展開して上書きしていくんですかね。マルチプレイヤー時には、サーバ側とクライアント側で基本的には同じものを入れる必要があります。その中でもサーバ側だけで動くもの、クライアント側だけで動くものがあったりします。

Minecraft Forge

 

Forge 自体は 1.10 にも対応していたのですが、「工業mod をする」という前提で調べると一番近いものではどうも 1.8.9 になるようでした。また、移行するにあたり、今まで動いていたものはなるべくそのまま使いたいなあという思いもあり、それができる Sponge というものがあるのですが、それの対応も 1.8.9 以降だったのでちょうど都合よくいけそうでした。

Sponge は Forge の上で動く mod になっており、Spigot の API をいくつかエミュレートして、同時に Spigot 側の有名なプラグインたちを Sponge 向けに移植するようなこともしているそうです。つまり Sponge を使うことで、Forge の上で Spigot プラグインが動く!(ようなもの)が出来上がります。

Sponge - Minecraft Modding API

 

ここでちょっと用語を整理すると、Spigot や Bukkit などで拡張するためのものは「プラグイン」と呼ばれていて、Forge では 「mod」と呼ばれています。ちょっとややこしいですね。

 

プラグインの移行については、ちょっと古いですが下記のスレッドを見たり。

Plugins to be ported! - Plugins / Plugin Requests - Sponge Forums

どうしてもないものもあったりしたので一部あきらめたりもしました。
結果として、以下のような プラグイン、mod になりました。

MOD名 ざっくり説明
DoubleJump Sponge プラグイン。Original-Double-Jump の Sponge 版。たぶんこれ → DoubleJump Plugin - Plugins / Plugin Requests - Sponge Forums
Dynmap Web 上で地図が見れる mod
Hammerz 3x3 ピッケル mod
InventoryTweaks インベントリの整理 mod
TreeDestroyage Sponge プラグイン。 TreeAssist の Sponge 版
buildcraft 工業 mod
pex Sponge プラグイン。 PermissionsEx の Sponge 版
projectportals Sponge プラグイン。 Multiverse-Portals の Sponge 版
projectworlds Sponge プラグイン。 Multiverse-Core の Sponge 版
spongeforge Sponge 本体

だいぶ数が減りました。

Forge では利用する Forge や mod のバージョンはサーバとクライアントがすべてバージョンが揃っている必要があります。(要出典)その都合もあって、DLリンク を準備したり zip にまとめたりして、簡単に指定バージョンを集められるようなものを提供していました。

参考程度にですが Forge は forge-1.8.9-11.15.1.1890 を利用していました。

 

移行するものはプラグインだけでなく、ワールドもあります。

Spigot と Forge とでフォルダ構成が違ったりするのですが、Sponge を入れていると、Spigotの設定をみていい具合に設定ファイルやワールドをうまく移行してくれます。って、書いてあったのですが、うまくできなく、結局ワールドについては、自分のPC上で新しく作ったワールドのフォルダ構成と目比べしながら、手作業でフォルダ移動して設定を合わせていきました。

実際のサーバ上の移行については、いきなりえいやーではなく、自分のPC上で何度か確認してこれでオッケー!という状態で、実際のサーバ上の反映をしていきました。そのおかげもあり、特に大きなトラブルなく、Spigot から Forge + Sponge 環境へ移行することができました。

 

しかし、工業を楽しもうとし始めたころ、急に Minecraft サーバが重くなったり、落ちるような現象が多発するようになりました。サーバが重いながらも、プレイヤーの移動はできるので、既存ワールドの光景を見て回ると、ある村が工業で追加された「クァーリー」だらけになっていて、こいつが原因となって重くなっているようでした。

Minecraft はバージョンによって利用しているブロックの ID が異なることがあるそうで、 1.10 のあるブロックの ID が 1.8.9 の buildcraft で追加されたクァーリーの ID と被っていたために起きた現象でした。

MCEdit と呼ばれるマップ編集ソフトがあったりするので、個別に対応していくこともできたのですが、どこまで影響が出ているかわからなかったのもあり、泣く泣く既存ワールドをあきらめて、新規に始めることにしました。

 

新規ワールドでもクァーリーを動かして、もりもり掘削し始めるくらいには資源や環境が整いつつありましたが、そんなとき、これまた突然に Minecraft サーバが高負荷になり、反応が遅くなることが頻発するようになりました。

特に新しい mod を入れたわけでもなく、なんのことなしに、急に重くなったので原因もすぐにはわからず…。

Sponge で追加されるコマンドの中に /sponge timings report というものがあり、これを実行すると外部のサーバに Tick の詳細が送られ、分析レポートを見ることができます。

 

そもそも Minecraft の世界では、その世界の時間や処理を進める Tick というものがあります。これはサーバパフォーマンスに問題がなければ 20回/秒 ほどの速度で実行されていくと言われています。

サーバの動作がめっちゃ重たいということは、この Tick の中で何かしらの環境や mod が影響を及ぼしているものだと判断ができます。

例えばよくある話(要出典)を挙げると、水を高いところから大量に撒くとサーバが重いとか、大規模なトラップタワーを作ったり、レッドストーン回路を大量に作ると大変だとか。これらは、水やレッドストーンなど、プレイヤーや mob の動きに関係なく更新しなければいけない状態が多数あるために、1回の Tick でやることが増え、結果としてサーバ負荷が上がっている、というところになると思います。

 

というわけで、Tick の中で何が起こっているかの判断ができれば、原因となる mod や 環境がわかるのでは?と思い実施しました。すると以下のようなレポートが出来上がりました。

これを見ると buildcraft|core:bcresizcuboid が Tick 上で何か悪さをしていそう、ということが分かったので、実際にどこにいるのかを MCEdit で探しました。すると Buildcraft のポンプの部分にこの bcresizcuboid エンティティがくっついていることが分かりました。MCEdit 上でこのエンティティを消し、再度サーバに上げると特に問題も無さそうなほど快適な工業生活を再び迎えることができました。

が、この平穏な生活も長く続かず、やはり同じ問題が再発しまくるようになっていました。原因はポンプではなくて、そもそも Buildcraft なのでは?と思うようになり、安定版である 1.7.10 対応のことを考えるようになりました。それに合わせて、Buildcraft 以外にも Forestry for Minecraft や 豆腐Craft など、他の mod にも手を出してみたい、という話もあり、これもまたちょうどよいタイミングなので、思いきって移行していきます。

 

MC 1.7.10 Forge の利用

MC 1.7.10 では Sponge を利用することができません。代わりに Forge 上で動く mod ですべて行っていく必要があります。
まずは使いそうな mod だけ選んでいってみて、こんな感じです。

MOD名 ざっくり説明
BedrockLayer 岩盤を平らに整地してくれる
CodeChickenCore NotEnoughItems で必要な mod
CraftingEX 複数の mod で重なるレシピについて選んで実行できる
CutAll 木こり
Hammerz 3x3 ピッケル
InventoryTweaks インベントリ整理
MoSkeletons スケルトン追加
NotEnoughItems レシピ確認(チート無効)
SmashBatsMod 敵を吹き飛ばすバット
TofuCraft 豆腐もぐもぐ
buildcraft 工業
coroutil MovePlus で必要な mod
forestry 工業 + 農業 + 養蜂
moveplus ダッジ、二段ジャンプ

ポータルや地図はなくなりました。まあいいかなと。そんな頻繁にポータル作るようなわけでもないので。そのうちでいいので、資源ワールドとかあったら便利だなーと思う程度なので、その時にまた調べて導入したらいいかなあと思っています。

 

さすがに移行も2回目になると、ワールドがだめだろうな、という予想もついています。実際にそのまま持っていくと、パイプが謎の液体に代わっていたり、木の柵が何かの工作機械になっていたりと、完全に使い物にならなくなっていました。というわけで、このワールドもポイして、新規ワールドです。逆に mod も入れ替わったりしているので、そっちのほうが資源を探しやすかったりして、都合がいいのです。

いまのところ、まだ鉱石があまり掘れていなくて、がっつり工業!とか豆腐!とかってほどじゃないのですが、順調に資源が集まりつつあり、これからの光景が楽しみです。1.7.10 でやっている人も多いようなので、きっと大丈夫だろうと思ってます!

 

おわりに

Minecraft を初めて半年くらい経ちました。これまで 1.10 → 1.8.9 → 1.7.10 とバージョンを変更してきて、それに合わせてサーバ環境も Spigot → Forge + Sponge → Forge と移り変わりました。不具合的なこともありましたが、やりたいことをベースに移ってきて、実際にやりたいことができていて、とても満足している状態です。

結果、Forge やるなら 1.7.10 にしておこう!という気持ちです。

 

最近はいろんな人の mod を見てたりして、自分も何かやってみたいなーと思っていたりします。mod 作るのは Java かーと思いつつ Scala や Kotolin が使えるとの情報もあって、どんな mod を作ろうかなーとワクワクしています。出来たらどこぞにこっそりと上げていこうかなーと。

というわけで Minecraft な生活はこれからもしばらく続きそうです…!

 

おまけ

今の使っているスクリプトをくっつけておきます。
参考程度にどうぞ!

// ★start.sh
// 初回起動用スクリプト
// screen コマンドを使ってシェルスクリプトを起動する

#!/bin/sh
cd "${0%/*}"
screen -AmdS minecraft-server-forge17 ./start_forge_server.sh
// ★start_forge_server.sh
// 常時起動スクリプト
// screen コマンド内で動き続けるスクリプト。
// minecraft が落ちてもこのスクリプトが生きていれば60秒後に再起動する。
//
// java のオプションとして以下のものを設定
//   メモリ割り当て:1GB
//     -Xms1G -Xmx1G
//   よりよいGC機能の利用
//     -XX:+UseConcMarkSweepGC
//     -XX:+CMSIncrementalPacing
//     -XX:ParallelGCThreads=3
//   最適化フラグの有効
//     -XX:+AggressiveOpts

#!/bin/bash

while true; do
    echo "Starting the server"
    java -Xms1G -Xmx1G\
         -XX:+UseConcMarkSweepGC \
         -XX:+CMSIncrementalPacing \
         -XX:ParallelGCThreads=3 \
         -XX:+AggressiveOpts \
         -jar forge-1.7.10-10.13.4.1614-1.7.10-universal.jar nogui

    echo "Waiting 60 seconds before starting the server again"
    sleep 60
done
// ★attach.sh
// screen に接続するためのスクリプト
// 毎回 screen コマンドやるのも嫌なので…

#!/bin/sh
screen -r minecraft-server-forge17
// ★cron_forge_server_restart1.sh
// crontab によって毎朝09:00に起動される
// サーバを落としますよーという告知

#!/bin/bash
screen -S minecraft-server-forge17 -p 0 -X stuff "say Restarting the server in 1 minutes^M"
// ★cron_forge_server_restart2.sh
// crontab によって毎朝09:01に起動される
// なんとなくスッキリしたいので minecraft を強制終了している

#!/bin/bash
ps ax | grep java | grep -v grep | awk '{ print $1 }' | xargs kill -9

最近 paiza やってる

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

強い転職意識があるとかそういうわけじゃないんだけど、スキルチェックがてら、どんな会社があるのかなあと思いぼちぼちとやりながら会社の様子を見ている。たまに見知った会社が出てきて、金額これくらいかーとか、うまく見せてるなーとか、勉強になることが多い。社会を知ろう。

 

paiza とは

ITプログラマー・エンジニア転職のpaiza https://paiza.jp/

いわゆる Top Coder 的な、アルゴリズムな問題が出されるので、好きな言語で解いたものを提出すると自動で採点がされる。それによって自分のランクが決まり、会社からのオファーを受ける、会社にオファーできる。自分の希望もかけるので、しっかりとした面接が良いとか、カジュアル面談とか、選べるっぽい。また業態や言語なども選べ、自分の希望に近い会社からのオファーが来やすそう。

逆に企業側としては、書いているコードが見れるので、その人がどれくらい慣れているのか、どんなコードを書くのか、といったところを見られる模様。

そういったエンジニア転職コンテンツを活用しつつ、よりユーザ確保を狙ってだと思うが、「コードガールこれくしょん」とか「もし次の常駐先が女子エンジニアばかりだったら」という美少女キャラ推しなコンテンツも増えてきている。ぼくはあまりそっち方面に興味は沸いておらずやってはいないのだが。

 

paiza でコードのどんなところが見られるのか

ぼくの場合、こういったところのコードって業務コードと異なるものを書いてしまう。自分が出せる最速の最善策で出していくので、業務としてはそのコードだめじゃね?とか、半ば強引にやっているような箇所があったりすることも多い。

といったときに、企業側の人はそんなコードを見てどんなことを知ろうとしているのかなーとか、単純に気になる。気になるが、転職意識も強くはないので、カジュアル面談に行くことも申し訳ないなあと思っている次第。

もしかしたらぼくの場合がそうであるだけで、ガチで paiza を使う人たちは圧倒的な業務コードを書いているのだろうか。どなたかこっそりおしえてください。

 

というわけで paiza 楽しいよ

いうても競技系のサービスであることに変わりはなく。

そこに合わせて、企業からのスカウトが来たり、点数が出たり、ランキングが出たり、実績というか、凄いんだぞ!!!感が見えるあたりがとても楽しい。それもそうだし、ランク別に問題レベルが分かれていて、自分のレベルにあったチャレンジをしていけるところもあって、チャレンジした問題のランクと回答時間を眺めて、スキルアップしていってるなあというのを実感するのが一番良いと思っている。なので、ぼくは C ランク全部!とかじゃなくて、まばらにポチポチやっています。

あ、オファーについては企業の人たちにはごめんなさいしないといけないですね。

ちなみにぼくはいま、B ランク問題は安定して正解取れていて、A ランク問題が1勝3負くらい。S ランク問題も1つやったところ不正解だったけど、なんだかちょっと頑張ったらいけそうな気がしていて、次にやる時間を取ることをしみにしているところです。なお PHP で。 ある程度いくとこまで行ったら別の言語でもトライしたいなーと思ってます。

 

 

paiza の宣伝記事みたくなってしまったけど、paiza の人ではないし、宣伝してくれ!ってわけでもないよ。

朝出社日付を超えて始発で帰る朝出社、という生活をヶ月半くらい続けたときの変化

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

どーもごみばこです。

10月~11月ごろ、お仕事マンしてほぼ始発で帰るという生活をしていました。まあ、夜の用事がない平日だけですが。

 

これを実施していた背景は2つあります。

ひとつは、とくに業務がハッチャメッチャのヤベエ!というわけじゃないものの、やることは沢山あるのでちょうどいいね!と思っていました。急ぎで終わらせなきゃいけないものでもなく、ヤバイ系のものでもなく、ただ単純にやることがたくさんあったので、せっかくだしもりもり消化していくか~という気持ちが起きていました。

もうひとつは、ほぼ始発で帰るような、そんな生活を続けるとどうなるのかなーと興味が沸いていたことです。どこかで聞いた話ですが、徹夜をx日続けたら視界が黄色くなってその後マジで見えなくなって~…。そんな事象にちょっとだけ興味が沸いていました。だって面白いじゃないですか、視界が黄色くなる、ぐるぐるしてぶっ倒れるとか、そういう経験がいままでなかったので。ここは本当に興味の範囲です。

そんなこんなで、なんとなーくで初めてみて、1週間/2週間/3週間/...となんとなーくで続けてみて、自分の変化をある種たのしんでいるような感覚もあり、最終的に1ヶ月半ほどで終わりにしたのですが、そのころには興味よりもヤバさ・恐怖を感じるようにもなってきていていました。興味があれば試してください!なんていうものではなく、同じようなことを

 

始発帰り生活の内訳

始発帰り生活ですが、具体的にはこんな生活でした。

  • 8時半くらいに起きる
  • 9時前におうちをでる
  • 19-20時くらいまでお仕事
  • 3時くらいまで、ついでにやっておくかーってものをやっつける
  • 4時くらいに眠気がやってきて一度仮眠する( ˘ω˘)スヤァ
  • 5時くらいに起きて電車のタイミングを見て帰るor寝る
  • 5-6時くらいにおうちにつくのでシャワーに入って寝る
  • 8時半くらいに起きる
  • ...

ご飯は適宜。8-9時とか、12-13時とか、20-21時とか、このあたりで。ときおり食べない日もありましたが、つらすぎたのでご飯はちゃんと食べようってもぐもぐしていました。

でもって、そんな生活をしていると感覚と実態がいろいろ変わってくるわけで。

 

変化:休日でも遅くまで起きている

一番初めにやってきた、ものすごいわかりやすい変化でした。その休日に何か遅くまでやっていること、やらなくちゃいけないことがあるわけではないのですが、起きていなきゃ!という強迫観念みたいな感覚がやってくることが多くりました。起きていなきゃ!と思うものの、あまり有意義なことはしておらず、なんとなくゲームをしていたり、ふと気になったこと(例えば、鉛筆はどうやって作られているんだろう、とか。もともとそういう、どうでもいいことを調べるのは好きです)を調べたりで時間が過ぎていき、3-4時くらいになり、おっと寝ないと!という休日が多くなったような感じです。

平日の睡眠時間が少ないがゆえ、休日にドッと眠たくなる日もあるので、そういう日はぱったり倒れるように寝てます。それでも日付が変わるころでした。

 

変化:1日がクソ長い、曜日感覚がぶっ壊れてくる

単純に考えてして、普通の人の倍以上活動しているので、それはごく当たり前の事なのかなと。1週目を超えて、2週目に入り始めたころから感じました。そろそろ金曜日かなー?と思ったら水曜日とか、あるある。

1日がクソ長いが故に起こる問題もあり、今日はまだまだあるから、まだ頑張らなくて大丈夫!なんてこともよく起きていました。日中は30%程度の活動量しかなかったと思います。そこは自分でも気づいていて、ちょっといかんなーと思って意識的に動いているつもりではありましたが、あまり改善はされませんでした。

逆に、19時を超えたあたりからエンジンがかかり始め、22時ごろからピークを迎えるような感覚でした。周囲のガヤガヤもなくなってきて、圧倒的な集中タイムがそこから発生していました。これが3時くらいまで続き、ふとしたときに眠気に襲われ、4時を超えたころに一瞬眠りにつきます。そして5時頃に起き、始発周辺の電車でおうちに帰る。そんな一日でした。

 

変化:記憶の交錯が起こる

1日がクソ長い、曜日感覚がぶっ壊れているという影響は記憶の方にも悪かったようで、何日前にどんな話があったかを覚えられなくなっていました。おそらく曜日感覚というよりも、日付の変わる感覚がぶっ壊れていたのかなと思います。おととい話した内容・・・と思いきや昨日でした!なんてことがちょこまかと合ったような気がしています。

メモをしていたり、印象深いようなことは覚えているのですが、口頭で「ちょっとこれお願い!明後日までにやっておいて!」みたいなものは忘れてしまうことが多かったです。

 

変化?:エナジードリンク、コーヒーの摂取量が増える

曜日感覚がずれたり記憶がおかしいな?と思うことがあると、もっとがんばらんと、とシャキッとするために、後半はかなりの確率で毎朝にエナジードリンク(モンスターの白です、あれ美味しいんですよ)を買っていたように思います。
エナジードリンクの類は元気の前借りだーなんて話もあるそうですが、そんな前借りを続けていたので、身体には結構な負担になっていたと思います。

また、会社にコーヒーメーカーがあったので、夜遅くになって一旦リセットしよう!となると、コーヒーを淹れるようになっていました。マグカップいっぱいに、ブラックで。

 

変化:おうちに帰ってきてからぼーっとする時間がある

帰ってきたわー → 椅子に座る → ふー → 20分経過、みたいなのが4週目の頃からちらほらと出てきました。そのとき何考えているんだろうなーと振り返って思うのですが、ほとんど何も出てきませんでした。頭の中はからっぽで何も考えていないで、本当にただぼーっとして時間が過ぎ、おっとっと。ちょっと思考を巡らせて、こんな生活してて何してるんだろうなーとか、こんな仕事してなんなんだろう、とかって考えたら涙腺が緩んできて、いかんいかんとシャワー入ったこともありましたねーシミジミ

・・・。あれ。これ、冷静に考えてやばいやつなんじゃないのかな。

 

変化:平日のおやすみ取ったら有意義すぎた

9月にお仕事都合で休日出社することがあり、その振り替え休日をたまたま10月後半に設定していました。9月の自分よくやった!

平日のお休みはめったにないので、有意義に過ごすぞ~と思い、いつも通り朝起きてから洗濯とか掃除とかを終わらせて。でも、ここから先のあとはもう何をしていたか覚えていません。めっちゃ有意義なお休みになった!!という感覚だけはあるので、きっととてもいいお休みだったと思うのですが、中身を覚えていないのは一定つらさも出てきますねー。

いやー、これもやばいやつなんじゃないかな。

 

始発で帰る生活の終焉

そんなこんなという生活がしばらく続いていましたとさ。ある時に「つらいッス」「あーつらいなー」などがネタなどではなく自然と口から出てきて。そのときに「あれ、コレ別に強制されてないよね」とハッと気づいて、始発で帰る生活に終止符を打ちました。素直に振り返ってみて、超つらかったんだなあという感想しかないなので、これをみてるみなさんはそんな状況にならないようにしてください…。。

しかし、これがなんだか悪い癖になってしまっているようで、ブログを書いているのもこんな深夜2時になっており。強制的に早寝早起きするなどして、なおしていきたい気持ちが溢れています。

 

まとめ

夜遅すぎるのはよくない!!!

早く寝て、早く起きれる良い子になって、ちゃんと寝よう!!!

まじで!!!!!!つづけてたらしんじゃうよ!!!!!

 

Web Audio API と IBM Bluemix のワトソン君で音声認識(追記あり)

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

こんにちはごみばこです。

この記事はteratailの「Bluemixアドベントカレンダー」の参加記事として書かれました。

昨日は yutori_828 さんによる「クラウドx IoT女子会で推し(二次元)の話をしてきた」でした。
クラウドx IoT女子会で推し(二次元)の話をしてきた – ユニバーサルIoT女子文明

やりたいこと

最近いろいろな人と話すことが多く、手書きなりPCなりスマホなりでメモしているものの、すべてメモしているわけではありませんし、覚えていないことも多くあります。じゃあお手軽にメモするソリューションないかなあというところで、パッと思い浮かんだのが録音×音声認識です。

スマホで録音しつつ、音声認識しつつ、クラウド上にメモすることができれば最高なのでは…?

こんなところから始まっています。

できたもの

こんなかんじのやつ。

watson_audio

※編集していません。クリックしてからしゃべっています。
※5秒録音→文字起こし→5秒録音→文字起こし→... という処理になっています。

使ったもの

IBM Bluemix

アドベントカレンダーのテーマにもなっている、IBMが提供するAPIやPaaSといったサービスの総称です。

簡単に登録手順をおさらいしておきます。

Bluemix への登録

bluemix_register

以下の URL から Bluemix への登録ができます。

https://console.ng.bluemix.net/registration/

僕の場合は IBM ID を登録してから Bluemix をしましたが、Bluemix だけの登録もできるようです。

登録するとメール認証が求められます。メールからリンクを踏むと登録完了です。ここから30日間はトライアルということで無料で Bluemix のすべて(?)の機能を使うことができます。思う存分に楽しみましょう!

アプリケーションの登録

Bluemix では Cloud Foundry アプリ と呼ばれる、heroku のような、環境が整っていてコードを自由に設置することができる、PaaS を利用することで、Web サイトを制作することができます。

Cloud Foundry アプリは以下のような手順で登録していきます。

アプリケーションの画面を開いて新規追加。

bluemix_app

テンプレートが選べるので使いたいものを選びます。僕はPHPを選択しています。

bluemix_app_template

あとは勝手に環境が作られ、アプリケーションが動き始めます。すごい。

bluemix_app_run

この画面上で「アプリの表示」を押すと、ブラウザでその Cloud Foundry アプリの URL が開かれます。この URL で確認をしていくことになります。

IBM Bluemix Watson

IBM Bluemix には Watson という人工知能なAPI群があります。この中に Speech to Text という音声認識を行うことのできるAPIがあります。ここに対して、音声データを送ることで、Watsonが解析し、最適な文章を取得することができます。

Watson のすごいポイントは、英語だけでなく、日本語にも対応し、さらに漢字変換もされているところです。

中身に詳しいわけではありませんが、いくつか結果を見ての推測ですが、音声をある程度区切り区切りにし、それぞれに対する適切な文章を機械学習なもので割り出しているようです。その文章はすでに漢字変換されているものなので、変換されている文章が取得できるのでは?と思っています。さらに出来上がった文章の前後関係を見て、補正し、最終的により整合性の高そうな文章を提供している……のかなあ、なんて。

Watsonを利用するには、まず、Bluemix上でWatsonを接続する必要があります。

アプリケーションを開いたとき、サイドメニューに「接続」があります。これを開くと次のような画面が開き、接続したサービスの一覧が表示されます。

bluemix_app_connect

新規接続を選び、画面をよしなに進めていくと、Watson を選べる画面になります。ここでは Speech to Text を選択しました。
ほかにもたくさんサービスがあって面白そうですね;)

bluemix_app_connect2

そうすると、先ほどの接続したサービス一覧に出てくるようになり、認証情報を得ることができます。

bluemix_app_connect3

認証情報に書かれている情報をもって以下のようなAPIを実行することになります。


※Speech to Text の例

■HTTP リクエスト
○URL
https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?continuous=true&model=ja-JP_BroadbandModel

○HTTP ヘッダ
Authorization: Basic {base64_encode("username:password")}
Content-Type: {audio content type}

※ HTTP ヘッダの例
Authorization: Basic dGVzdDp0ZXN0
Content-Type: audio/wav

○HTTP メソッド
POST


■HTTP レスポンスの例
{
  "results": [
    {
      "alternatives": [
        {
          "confidence": 0.106,
          "transcript": "うん "
        }
      ],
      "final": true
    },
    {
      "alternatives": [
        {
          "confidence": 0.32,
          "transcript": "看板 見る "
        }
      ],
      "final": true
    }
  ],
  "result_index": 0
}

API詳細な説明については公式ドキュメントを見るとよいでしょう。

Speech to Text - API | IBM Watson Developer Cloud

Web Audio API と MediaStream Processing API

録音の部分では、スマホで、という想定ではありますが、やはり世界はWebに集約されるよう動いている(?)ので、ここはWebの資産を利用しましょう。

Web Audio APIを利用すると、音声に関する取り扱いを行うことができます。
そこに合わせて MediaStream Processing API を利用することで、ブラウザのみで動画や音声の記録ができます。

組み合わせることで、録音したデータをバイナリとして取得することができます。

作業していて、ちょっとだけ詰まったのですが、Chrome ではいつからか https な URL でないと Web Audio API を利用することができませんでした。音も隠さないといけない情報なので、というところだと思います。録音して外に送るってときに、パスワードとか個人情報とか社内機密をしゃべっているようなデータを http で送るとかめっちゃ怖いですよね…笑

詳しい仕様や実装などは僕もあまり詳しくないので、詳細はこちらの記事を参考にしました。

Media Capture and Streams と Web Audio API で実現する録画・録音・ WAVファイルの生成 | CYOKODOG

IBM Bluemix DevOps Services

Bluemix に初めて登録して、アプリケーションを登録したところで、いろいろ眺めていたのですが、 heroku のような、PaaSの触感がありました。

コードをデプロイするにはCLIを入れてね!なんて書いてあったのですが、ちょっとローカルPCにあれこれ入れるのは避けたいなあと思い、ひとまずなるべく手をかけずに…。

と思っていたら、Git からデプロイできるそうなので、そちらを試してみました。リモートリポジトリが提供されて、ローカルのコードを Push したらデプロイされる、といったものを想像していたのですが、それだけの機能ではありませんでした。

アプリケーションの Git を有効化すると「コードの編集」というボタンが現れます。

まさか、と思い押してみると、そこにはかっこいいオンラインエディタが…!

bluemix_web_editor

この中では、コードの編集はもちろんのこと、Gitの操作も行うことができます。そして何より、編集して、そのままデプロイができます。これにより、とりあえずBluemixを試す、という動きをサクサク行っていくことができました。

bluemix_web_editor2

まとめ

結果として出来上がったものは、微妙な精度ではあるものの、IBM Bluemix を初めて触ってみて、便利そうなところを体感するには十分でした。

ばーーーっと書いてみた程度のものですが、gistに貼ってあります。試してみたい方はどうぞ!

https://gist.github.com/sters/46e042e5976b6244119baaf26b096e82

登録してから30日間は無料で使えるので、もうしばらく無料枠の間に遊んでみようと思います。Speech to Text 以外の Watson API も、画像認識を始め言語に関するものなど、楽しそうなものが多いので、あんなものやこんなものが作れるんじゃないだろうか、なんて思っています。

追記:ドキュメントを眺めていたら WebSocket をつなげるそうなので、それを使えるとさらに良いかも…!

明日以降もお楽しみに! -> Bluemixアドベントカレンダー

フォント変えたよ

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

普段見慣れない、なんだかでこぼこしたフォントだったのでよさそうなやつを指定しておいた。

調べると「2016年最強のフォント指定はこれだ!」「俺が考えたイマドキのフォント指定」みたいな記事ばかりでなかなか面白さがある。

だいたい同じなんだけども。

いじょ。(やまなしおちなし)