DockerでSpigotサーバーを立てる

8/30 spigotのダウンロード部分について追記

8/31 hostとのディレクトリ共有・デタッチについて追記

背景

久しぶりにプラグインを書いてテストをするたびにSpigotサーバーをセットアップするのはそろそろバカらしい。

やる

やります

準備

Dockerは頑張ってインストールして下さい。

作成

以下が最小構成のDockerfileになります。

FROM ubuntu:16.04

RUN apt-get update && apt-get -y upgrade && apt-get -y install openjdk-8-jdk wget git
RUN mkdir spigot
WORKDIR /spigot
RUN wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
RUN java -jar BuildTools.jar
RUN echo 'eula=True' > eula.txt
CMD ll | grep spigot | grep jar | awk '{print $9;}' | xargs java -Xms512m -Xmx1024m -jar

ちゃんと調べてないけど、Spigotのライセンスの関係でDockerイメージの配布はできない気がします。多分。

$ docker build -t 'spigot/ubuntu:16.04' .

DockerfileからDockerイメージを作成します。JDKを入れるのに結構時間がかかります。いつの間にかSpigotがJarを配布してくれるようになっていたのでJREのみで問題ないかもしれませんね。今度試すかもしれません。 DMCA的にグレーっぽかったので公式のBuildToolsからビルドするように修正しました。それによってgitも必要になりました。

$ docker run -v [host dir path]:/spigot/plugins --name spigot -p 25565:25565 -i -t spigot/ubuntu:16.04

Dockerコンテナを作成します。

-iオプションは標準入力を使えるようにするオプションでこれがないと操作ができなくなってdocker stopするしかなくなってしまうので気をつけましょう。

[08:37:36 INFO]: Done (10.348s)! For help, type "help" or "?"

コンテナの作成ができました。ログインができるか確認してみましょう。

-vオプションでホストとのディレクトリ共有が出来ます-v [host dir path]:[guest dir path]としましょう。ホスト側をIDEAやEclipseの出力ディレクトリにしておくととても楽。

-p 25565:25565でコンテナの25565ポートをホストの25565ポートにフォワーディングしてるので、ホストからlocalhost:25565にむけてアクセスができると思います。

使い方もろもろ

Dockerコンテナの確認

docker ps -a

-aはallです

Dockerコンテナの停止

docker stop [Container Name or ID]

Dockerコンテナの起動

docker start [Container Name or ID]

-aiオプションで起動と同時にアタッチができます。

Dockerコンテナの削除

docker rm [Container Name or ID]

Dockerイメージの確認

docker images

Dockerイメージの削除

docker rmi [Image ID]

所感

今のところ、コンテナからデタッチできなくて困っています・・・

screenを使うという手を思いついたのですが結局デタッチできない気がします。試してはいません。

docker attach--detach-keysというオプションがあったので色々試してみましたが、何をおしてもサーバーコンソールの標準入力に吸い込まれました。

再度試してみたら普通にデタッチできました。docker attach [containter name]で再度アタッチ出来ます。

まとめ

そっこうでSpigotサーバーが立って楽

mbed LPC1768と圧電スピーカーで音楽を鳴らす

背景

先日MCCの夏合宿に行ってきました。

所用で3時間ほど遅れて参加したので、他のメンバーはもうチームを組んで実装を始めていて、さて何をしようかというところだったのですが、LPC1768を4台ほど持ってきていたので、これで何かつくろうということになりました。

しばらく一人で何を作るか思案していたのですが気づいたら夜でした。そこでテーマを決めたはずが実現可能性がゼロに近づきすぎてしまったicchyrさんに声をかけてもらい、シェルスクリプトテトリスを実装してmbedコントローラーをつかって操作しながらBGMとして圧電スピーカーでテトリスのBGM(A-Type)を流すプロダクトをつくることになりました。ちなみにこのBGMは原曲がありましてロシア民謡のコブロチカという音楽が元になっているそうです。

テトリス部分をicchyrさん、スピーカーやコントローラーを私という分担にしました。

実装

コードは下記のURLに置いてあります。

speaker_test - a mercurial repository | Mbed

f:id:gurapomu:20170828231029j:plain

楽譜はicchyrさんに耳コピで作ってもらいました。

icchy (@icchyr) | Twitter

悲しいかな

たまたま持っていた圧電スピーカーなのですが、ものが悪すぎてとある周波数で共鳴を起こして正直言って不快な音が出ます。

秋月で部品を買うともらえるベージュ(?)の紙袋を上からかぶせてテープでとめたらわりとマシに聞こえたのでそんな感じで使うことにしました。

高周波帯のノイズが混じっているような気がしたので、即席でコンデンサと抵抗を使ってカットオフ周波数数十kHzのLPFをつくって噛ませていたのですが、たまたま外してみたらそっちのほうがいい音がでてたのでがっかりしました。今考えたら設計をミスっていたかもしれません。

f:id:gurapomu:20170828233140j:plain

解説

正直お酒を飲みながら実装していたので今見るとひどいコードな気がしますが反省をふまえながら解説していきます。

コアになってくるのはTickerと呼ばれる繰り返しタイマー割り込み機能です。圧電スピーカーの入力にsp1を設定し以下の関数をt秒ごとに繰り返すことで周波数1/2t[Hz]の音がなるという寸法です。

void tick(void)
{
    sp1.write(oto);
    oto=!oto;
}

反省点が2つあります。

1つは変数名が"oto"とかなっているところです。よく考えるとわかりやすくて短い変数名だし悪くないのかもしれません。※諸説あります

2つ目ですが上記4行目の oto=!oto; です。

これは=!の順番が変わるだけで全く意味をなさないコードに変わってしまうものなので要注意だと思っています。

実はこのコード、はmbed_blinky(テンプレートのLEDを点滅させるプログラムです)にも乗っているので本当に良くないと思っています。絶対に書くまいと思っていたことなので非常に反省しています。

反省が長くなりましたが次に行きます。

float mm[]={659,2,493,1,523,1,587,2,523,1,493,1,440,2,440,1,523,1,659,2,587,1,523,1,493,3,523,1,587,2,659,2,523,2,440,2,440,2,0,3,587,2,698,1,880,2,783,1,698,1,659,2,0,1,523,1,659,2,587,1,523,1,493,2,493,1,523,1,587,2,659,2,523,2,440,2,440,2,0,2,659,2,493,1,523,1,587,2,523,1,493,1,440,2,440,1,523,1,659,2,587,1,523,1,493,3,523,1,587,2,659,2,523,2,440,2,440,2,0,3,587,2,698,1,880,2,783,1,698,1,659,2,0,1,523,1,659,2,587,1,523,1,493,2,493,1,523,1,587,2,659,2,523,2,440,2,440,2,0,2,329,4,261,4,293,4,246,4,261,4,220,4,207,4,246,4,329,4,261,4,293,4,246,4,261,2,329,2,440,4,415,8};

これはBGMの譜面になります。0と偶数のインデックスで周波数、奇数インデックスで伸ばす回数を表しています。酔っていたのでこれぐらいの制御方法しか思いつきませんでした。float配列なのに整数リテラルを代入していてこれほど意味のないことはありません。反省です。

for (i=0;i<sizeof(mm)/sizeof(float);i+=2) {
    timer.attach(&tick,1.0/mm[i]/2.0);
    wait(0.2*mm[i+1]);
    timer.detach();
    sp1.write(0);
}

ここが再生部分です。先程説明した繰り返しタイマー割り込みを1.0/mm[i]/2.0秒間隔で動作させるようにしています。これによって周波数mm[i]の音を発生させることが出来ます。このTickerを仕込んで0.2*mm[i+1]秒後にTickerを停止させます。その後スピーカー入力を0にします。

最初はsp1.write(0);を書かずに鳴らしていたのですが、休符の際に2回に1回高音を発するというバグを踏んだので書きました。原因は未だにわかっていません。

よく考えたら1.0/mm[i]/2.0はゼロ除算になると思うんですけど浮動小数点数だとエラーにならないんだっけ???? ARM特有かもしれません。これが謎の高音はこれが関係していたかもしれない。

再生部分は大体こんな感じです。超単純

あとは、もう1台のmbedから信号を受け取って音楽を一時停止させたり停止させたりする機能を実装しています。なんで1台に統合しなかったんだろう、とても不思議です。

おわりに

結局テトリスは完成しませんでした。

シェルスクリプトでは無理がありすぎて2日目の朝からmbed(C++)で実装していたのですが流石に無理がありすぎるということです。

ハッカソンとはなんなのかということにもなってきますが、ある程度作りたいものをもったままスタートできるとスムーズに開発が進むのではないかと思います。

聖なる夜について

この記事は MCC Advent Calendar 2016 - Adventar の21日目の記事です。

書いたのは22日です。

時候の挨拶

寒さもひとしお 心に しみるころ、 独り身の 皆様はいかがお過ごしでしょうか。

 

 

聖なる夜

本日はついに12/22、クリスマス・イブまで後2日*1でありますが、東小金井駅周辺にはクリスマスムードの一端すら見受けられませんでした。

都市部ではいよいよクリスマス本番ムード、仲睦まじくあるくカップルが街中にあふれることでありましょう。

さて、キリスト教圏では「クリスマスは家族と過ごし、互いにプレゼントを贈りあう日」であります。

それでは、日本ではどのようにして現在のようなクリスマスの文化が浸透していったのでしょうか。

日本のクリスマスの始まり

江戸時代の禁教令以前を除き、日本でクリスマスが受け入れられたのは1900年に、明治座が銀座に進出しクリスマス商戦を始めたことがきっかけであると言われています。

もちろんこの頃はまだ恋人と過ごす習慣はなかったようです。

サンタがやってくる

クリスマスといえばサンタクロースでありますが、

1928年の朝日新聞には「クリスマスは今や日本の年中行事となり、サンタクロースは立派に日本の子供のものに」と書かれるほどに普及していたようですが、サンタクロースが子供にプレゼントをするという程度の習慣だったそうです。

クリスマスは恋人と

「クリスマスは恋人と」という文化が本格的に浸透し始めたのは、1980年代から1990年ごろにかけてであるという意見が多いようです。根拠として述べられているものはいくつかあるのですが、私は性に対しての意識の変化が根底にあるのではないかと考えています。

この1980年代というのは、20代の男女における、初めての性交渉の相手の比率の1位が「配偶者」から「恋人」に入れ替わった時期であり、婚前交渉が世間一般に受け入れ始められた時期であるといえます。

この事実を後押しするかのように、1980年代後半からは12月にたくさんのクリスマスソングが発売されはじめます。街中にクリスマスソングが響き渡る中、恋人といつもより高級な食事をし、ホテルに泊まるという文化が広まっていったのではないでしょうか。

 

 

心を冷やしてはいけない

さて、本当に寒い日が続いておりますが、この記事をご覧になっている皆さんの心はどこまで冷え込んでいるのでしょうか。

どんなに街中をあるく恋人が羨ましくても、心を冷やしてはいけません。


恋人がいなくても、クリスマスは友人と、鍋を囲み酒を飲みながらこの記事を紹介して「こんな記事書いてるお前の心が一番冷えてるんだよバーカ」と笑い飛ばして身体と心を温める、というのはいかがでしょうか

www.adventar.org

*1:細かいことをいうとクリスマス・イブは12/24の日没から日付が変わるまでを指すそうです

アドベントカレンダーありがとう3

この記事は ぐらぽむ Advent Calendar 2016 - Adventar の19日目の記事です。

gurapomu.hatenablog.com

こんなものを書いたら、@sukukyonに怒られたのでもう少し真面目にやります。ごめんなさい。いま土下座しながら記事を書いています

紹介

kemduino

高校の同期です。

C90に出ようという話が始まるまでは特に関わりはなかった気がします(Twitterで見かける程度)

KnobCon前史(仮) - 0rangetail を書いてくれました。

Knobconの制作会議は、オタクばかりですぐ話がそれるので、僕とkemuduinoで話をレールに乗せるのにとても苦労した覚えがあります。

豆腐屋のサークルカットはとてもかわいくて良いです。@sukukyonとかいうオタクのきつい注文を実現してくれてありがとう。

 

sukukyon

高校の同期です

blog.monora.me

この記事と

blog.monora.me

この記事を書いてくれました。

17日はKnobcon後史を書け!とか無茶振りしてごめんなさい。

@sukukyonはクソみたいな記事は書こうとしたけど、自分もそもそも基盤の設計をめちゃくちゃ遅らせたりそもそも基板設計と実装しかしてないクソだったので、この役目は@akira_techあたりに任せようと思います。まだAdvent Calendarの枠はまだまだ余っているのでお願いします。

いろいろな会社を転々としている気がします。でもそもそもエンジニアというのはそういう働き方をするものだよね。フロントエンドからバックエンドまで幅広くやっていて頑張る人だなぁという気持ちです。

絵に描いたような近頃のオタク

 

ecila_vip

僕が参加しているMinecraftサークル、GrassLifeの頭領です。

ch.nicovideo.jp

こんな記事を書いてくれました。

僕はVILLAGE VANGUARD DINERというところだけ行ったことがなかったので今度行ってみたいと思います。

初めて話したのは多分5,6ヶ月くらい前だと思います。ニコニコ生放送をしていたので遊びに行ったらマイクラマルチサーバーのプラグイン開発について面白そうな話をしていたので少し話をしました。

発言した覚えがないこんなツイートをしていたのですが、本当に覚えがないです。個人としてはこういったModやプラグインを作る気はないです。

恐らくこのツイートを発端として目をつけられていたのではないかという気がしています。夏休み前半いろいろと忙しかったので9月中旬くらいから本格的な話をし始めた気がします。

彼自身は現在、どこかのイケイケな会社でRubyJavaScriptCSSをガリガリ書いているらしいです。

ついでに紹介しておくとGrassLifeには他に@Cyc_Eくんと@unicroakくんがいます。@unicroakくんは最近加入したばかりの期待の新星です。

各位、僕は1月に入るとデスマーチモードにはいるので1ヶ月ほど失踪するかもしれませんが必ず戻ってくるので待っていてください。

このサークルの成り立ちについては以下の記事を読むと欠片くらいはわかるかもしれません。

ch.nicovideo.jp

 

Hlradai

この2文字目って小文字の"エル"なのか大文字の"アイ"なのかどっちか判別がつかなかったのです。普通に考えれば"アイ"だけどオタクはひねくれているという風潮があるので奇をてらって"エル"にしておきましたがあってますか?

高校の同期です。

hiradai.hatenablog.com

この記事と

hiradai.hatenablog.com

この記事をかいてくれました。

これらの記事の僕との関係の無さが逆に清々しくてとても好きです。

僕は近頃CivilizationVIを購入してプレイしているので夜通しCiv部をやるならぜひVIでお願いします。楽しいので買いましょう。

彼も@kemuduinoの同じく高校は同じなのに卒業するまではあまり関わりがなかった気がします。本当に卒業してからご飯を数回食べに行った程度です。

ツイッターを見ているとずっとゲームをしている気がします。頑張って生きてください。

鹿島アントラーズ戦についての話ですが、僕が中学校までサッカー部だったことを知っていての話だったのでしょうか。昔は名古屋グランパスを応援していましたが、最近は殆どサッカー観戦をしていません。もっぱら野球ばかりしています。ごめんね、

 

norn_Renon

なんで知り合ったんだっけ?

というのは冗談です。

alreeg.hatenablog.com

この記事を買いてくれました。

彼との出会いは多分3,4年くらい前だったと思います。当時ラブライブがとても大好きだった僕ですが、Twitterに流れてくる「○○が好きな人はRT」みたいなツイートがあまり好きではありませんでした。好きではなかったのに、たまたま僕の操作ミスで"ラブライブ好き同士でLINEグループを作りたいので興味がある人はファボしてください"といったツイートに間違ってファボをしてしまい、ラブライブのLINEグループに参加することになってしまったことがきっかけです。

そのグループについて思い返してみると、まあ悪くなかったなぁという気持ちはあって今でも数人とは交流があり、とくにいま紹介をしている彼は大阪に住んでいるけどお互い遠征に行ったときには大抵あって飯を食ったりするという関係です。

ころころアカウント名を変えるのは良くないくせだと思うので自重してください。

書いてくれた記事について言及しておくと、正直あまり面白くなかったです。僭越ながらすこし改善点を挙げていきます。

  • 折角オタクを弾圧できるイベントがあったというのに文章にパンチが足りないです。
  • もう少しオタクを弾圧する強い文章を書いていくと逆にウケると思います。
  • 女の子とパンケーキを食べに行った話なのに女の子についての話が全くありません。

とりあえずはこんなところでしょうか。

 

おわりに

他人を紹介していたら、3000字を超えるポエムになっていました。

書き直したのにもかかわらず雑な紹介になってしまった方、申し訳ないです。指摘していただければ修正していきたいと思います。

明日は書く人がいなさそうです、各位!!!!!!

www.adventar.org

MCCMMANCC2016を終えて

この記事は MCC Advent Calendar 2016 - Adventar の18日目の記事です。

昨日から3日前まで記事が上がってなくて少しさびしいので各位。


さて今日は、昨日開催された、東京農工大学MCC・電気通信大学MMA明治大学NCCの3サークル合同イベントMCCMMANCCについてかいていきたいと思います。

MCCMMANCC

MCCMMANCCとは

そもそもMCCMMANCCって何なんだろうということを考えると結構ながくなりそうなので、かいつまんで説明しておくと、

MMAの@whywaitaという人とMCCの@altcolonyという人とNCCの@mactkgという人が集まっていたら@whywaitaという人が3サークル合同イベントやろうぜ、といって始まったイベントだそうです。(間違っているかもしれないので教えてください

開催までの流れ

初回開催は昨年の12月でした。今回が2回目の開催で1年ぶりとなります。

前回が終了したときからまたやりたいという話はしていた気はするのですが、その後あまりそういった話も起こらず久しぶりにMCCMMANCCという単語を目にしたのは9ヶ月くらい後のことでした。

たしか@icchyrという人が最初に言い始めた気がしていたのですがツイートがみつからなかったので僕のツイートを貼っておきます。

Slackの横浜県サークルで@icchyrさんのツイートをみて@sukukyonとかとよしやるかという感じになった気もします。

そんな話もありましたが、全然話は進みませんでした(だめじゃん


10月、Dentoo.LTが開催され、どうやらそこでMCCMMANCCの話が上がったらしく@FMS_Catさんが中心となって話を始めてくださいました。

そんなこんなでMMAからは@benevolent0505さんとMCCからは自分に声がかかり、具体的な話が始まります。

準備に関してはわりとスムーズに進んだ覚えがあります。

強いて言えば途中、参加予定人数が少なくて震えていました。

 

当日

当日は

  • オープニング
  • GLSLの使い方に関するハンズオン
  • LT大会(前半)
  • お菓子をたべながらおしゃべりタイム
  • LT大会(後半)

という流れで進行していきました。

こちらも概ねスムーズに進んでよかったです。

ただ、時間がたりずにせっかく飛び入りLT希望していただいた皆様のLTの時間がめちゃくちゃ短かったりそもそもできなかったりしてしまってもうしわけございませんでした。

主に自分が欲張ったせいです。今土下座しながら記事を書いています。

 

打ち上げ(?)

MCCMMANCC終了後は某居酒屋で飲み会をしました。

サークルの現状を掘り下げたり、それぞれの学校について話したりとても有意義な時間だったと思います。

 

おわりに

今回参加してくださった皆様本当にありがとうございます。

また打ち上げに参加してくださった@icchyrさんありがとうございました。

運営各位とは、今後は半年に1回くらい開催できたら良さそう、という話をしています。

MMANCCの運営陣は半年後また引き継がれるかもしれませんがその時はよろしくお願いします。自分は多分次かもやります。


明日はsasamijpが書きます。いろいろな意味で楽しみにしています。

アドベントカレンダーありがとう2

この記事は ぐらぽむ Advent Calendar 2016 - Adventar の12日目の記事です。


どうでもいいんですけど、"ありがとう"ってタイプすると"ありがおつ"ってなりますよね。

完全に遅刻でサクッとかけるネタが思いつかなかったので紹介の続きをします。二人だけです。

紹介

kemuduino

高校の同期です。

一緒にknobconとかつくってました。

思い返してみると高校の時はほとんど話したことがなかった。

いいことをすると素直に褒めてくれるので好きです。

 

sukukyon

高校の同期です。

固定ツイートがきもいのでなんとかしてほしい。

knobconのソフトウェアを担当していた。

オタク

 


紹介する人がいなくなったので今日はこれで終わりにします。

www.adventar.org

アドベントカレンダーありがとう1

この記事は ぐらぽむ Advent Calendar 2016 - Adventar 11日目の記事です。

遅刻した

遅刻しました。ごめんね

紹介

ここまでこのしょうもないAdvent Calendarに記事を投稿してくれた皆様ありがとうございます。

感謝の気持ちを込めてこの場をお借りしてこれまでに記事を投稿してくれた皆さんを紹介していきたいと思います。

osrehun

2つ上だけどM1の先輩です。

ARCのD問がもうすぐ全部終わるらしい。

大学に入ってから競技プログラミングを始めたと聞いたけど4年でこのレベルに達するにはどれだけ問題を解いたのだろう・・・

就活頑張ってください。

 

altcolony

2つ上だけど・・・?????

高校が同じだったみたいですが僕は先輩恐怖症だったので覚えていません。

僕がB1のとき、人が足りなすぎて、副部長以外にもいろいろ引き継いでいた気がしていたんですがあんまり覚えてないです。ごめんなさい。

あと1回くらいおごってくれるらしいので、叙々苑の美味しいお肉期待してます。(とかいうと一生実現しなさそうなので一応予定を上げておくと、私は1月2週目以降の月木金土の夜が空いています。よろしくお願いします。)

 

ykun03

1つ下の後輩です。

高校が同じで、この前高校の文化祭に言ったときに遭遇して、「お前らが潰した」と言いました。

ほんの冗談のつもりだったんですが「思うところがある太郎」とかいう迷言を生み出させるまでに追い込んでしまって本当に申し訳なく思っています。

SECCON大阪についてですが、あのチームについては自分含めて全員準備不足感が否めなかったのでなにもいいっこなしにしましょう・・・

追伸:「from:gurapomu オタク」とか「from:gurapomu 麻雀」とか怖いです。

 

alucky0707

高校の後輩です。

大学は違います。なんかおもしろそうな学科にいっていた気がするけどあまり良く覚えてないです。

僕はあらっきい君のHNのせいで本当にオーストラリアの首都はメルボルンなんだと勘違いしていた時期があって一度とても恥ずかしい思いをしたので反省してほしいです。僕はCLANNADは知らないんだけどバカみたいじゃん

本当に何をしているのかわからないところがあるけど本当に何をしているんだろう・・・

 

_hu__hu

高校・大学の同期です。

記事の面白さに磨きがかかっている気がします。

ただ面白い記事を書いているのはたいてい酔っ払っているときなんじゃないかという気もしています。

ベロンベロンに酔わせて有る事無い事話してもらいたけど、お酒は怖いので気をつけてください。

 

つかれたので終わりにします。

明日(今日も僕が書きます)

www.adventar.org

各位後半うまってないので頼む