Global Game Jam Sapporo 2016に参加した

夜にはレッドブルおねーさんが徘徊する会場で,初めて会う人達とチームを組んで,48時間以内にゲームをつくる,そんな素敵なイベントのGlobal Game Jamに,2ヶ月前,参加してきた.

ggjsap.doorkeeper.jp

きっかけ

GGJは去年あたりにツイッターで見かけて興味を持った.本当はその年のGGJ2015に参加するつもりだったが,自分のスキルセットが中途半端で見送り.それから一年が経過して,ある程度簡単な言語やライブラリ等を要求されても1周間くらいの学習期間が確保できればそこそこ使える感じになってきたので今回は参加することにした.

できたもの

Roque

githubリポジトリはこちら

GGJのサイトはこっち

Roque | Global Game Jam®

 ゲームとしてはローグライクっぽい方向を目指した.カーソルキーでロボットを操作して,バッテリーを取りながら右下のゴールに到達するとゲームクリア.デザインは,移動や敵との接触でバッテリーが減少するリスクと,マップに散らばるバッテリーを集めることで残量が増加するメリットとのジレンマが生じるデザインにした.

チームの決定

 GGJ Sapporoでは,申し込みをする際,手元の開発環境と主なスキルセットをアンケートに入力して提出し,それを元に運営の方がチームを決定する.自分は普段Arch Linuxを使用しているため,共同で開発するとなるとクロスプラットフォームな何かに縛られてしまうのが不安であった.神頼みでアンケートを記入して提出,チームの発表日を待った.

 チーム分けが発表されると,自分は「UNIX☆Webチーム」に配属された.キャプションには"OSS好きやオールラウンダーが織り成すUnix衆、ここに結成! その可能性、外部からは予測不能!"と記されていた.

開発

 今回はgithubを軸に開発を行った.全員が既にアカウントを所有し普段から使用していたためぴったり.自分は,作業のルートとなる,ゲームとしてギリギリ遊べるレベルの叩き台をマッハででっち上げる作業をした.プロトタイプを開発するのが昔から好きなので,この作業は本当に楽しかった.その後は,新機能の実装,バグ潰し,ドット絵をぽちぽち打つなどをしていた.他のメンバーについては,ちゃんとスタートからゴールまでたどり着ける迷路生成とゲーム機能,細かいバグのfixなどはyassu氏やnasa9084氏が,レベルデザインといくつかの効果音はhomomaid氏,ランキング等の処理を行うsinatraのバックエンドはmktakuya氏とtosiemon18氏,GGJ終了後も耳に残っていた印象的なBGMと効果音はmanzyun氏が制作.全員に良い具合にタスクが割り当たり,チームとしてガンガン進捗を叩き出せたのでスピーディーで楽しかった.

 ドット絵は最近界隈でアツいらしいasepriteというエディタを使用.普通のペイントソフトには無いような,ドット打つのに特化した機能が沢山実装されている.購入に際して,Windows/Mac版で提供されるバイナリは有料だが,よく調べたら自前でgithubからcloneしてビルドする分には無料.正直購入する気満々だったのでdonateしたい.そのくらいオススメ.

会場の様子

自分のチームは部屋がひとつそのまま割り振られた(部屋によっては2チームで共用のところも).部屋には電源タップが大量に用意されており,タップ持って行こうか迷っていたので安心.ネットワーク環境はそこそこ速かったので良かった.ciscoの機材が転がっており,運営のエンジニアの方曰く,チューンを煮詰めればまだ速度を上げられるらしい.

 なお,毎晩レッドブルガールが出現し,缶を開封した状態のレッドブルがもらえる.そのため,背中に羽が生えた状態での作業を余儀なくされ,開発が大変捗った.ちなみに余談だが,それでも会場の自販機のレッドブルは売り切れになっていた.

まとめ

チームが最高で楽しかった.ぜひ来年も参加してみたい.

Linuxの自宅鯖に時報機能をつけてQoLのブチ上げを試みた

github.com

生活にリズム感が欲しかったので,自宅サーバのsystemdサービスとして動く,指定の時間にアラームが鳴るアプリをつくった.(ポモドーロの既存のタイマーアプリでも良かったんだけど,いつのまにかアプリのプロセスを消してしまったり,そもそもPC,スマートフォンをいちいち操作して立ち上げるのがめんどくさかったりで,イマイチうまく使いこなせていなかった)今のところ10時から22時までの間,0分と45分にアラームが鳴るのでそれを目安にして45分間作業を,15分休憩って感じで活用している.

とりあえず動いたので記事を書く.

中身

めんどくさいのでrubyで書くことにした.スケジュールを読み込み,mpg321を叩いてアラーム音を鳴らす.

指定の時間にコードを実行するため,systemdのタイマー機能を用いる.このへんの設定はsystemd/タイマー - ArchWikiを参考にして.serviceと.timerを書いた.

なお,リアルタイムタイマーの.timerでのn分毎に実行する設定は

OnCalendar=*:0/n

でできる.

cf. systemd timer every 15 minutes - Unix & Linux Stack Exchange

アラーム音

http://ttata-trit-gomibako.tumblr.com/post/128468309479/httpsgithubcomtanittasmartclock

http://ttata-trit-gomibako.tumblr.com/post/128468328659/httpsgithubcomtanittasmartclock

Windows立ち上げてDAW開いて色々するのがめんどくさかったのでブラウザで動くaudiotoolで3OSCのアナログシンセをいじって適当に作った.騒々しい音だと疲れるので,ゆるめに仕上げた.(audiotoolいろいろ遊べるので暇つぶしにオススメ) www.audiotool.com

future

memo

  • 休憩を忘れて無駄に消耗してしまいがちなので,これで改善されてもっと進捗できればうれしい.
  • 実生活をHackしていく系,QoLも上がるので良い.
  • あと久しぶりに記事書いた.

オープンソースカンファレンス2015 Hokkaidoにちょっとだけ行ってきた

www.ospn.jp

滞在時間20分

この後も予定があったので急いでいたため,適当に地図を見てたら道を間違えて迷子になった.ちなみに帰りも迷子になった.汗をかいて完全に濡れオタク. 展示ブースでは,どこかで見たことのあるかのんくん(@HOMOMAID)にハグされそうになった.ローカルさんの売り子?してたっぽい.元気そうでなにより.あとsapporo.cppなるコミュニティの方とお話した.つよそうだった.最後に,帰ろうとしたらえむけーくん(@mktakuya)から電話で呼び出しをくらってポメくん(@pome_11)とふっくん(@fk2763owl)とお話した.めちゃ楽しそうだった.

感想

OSCに参加するのは初めてだったけど,こんなにたくさんコミュニティがあるとは思わなかった.熱かったです.今後もし機会があったらまた参加したいかも.

まだSlackのサイドバーで消耗してるの?

f:id:ttata:20150608161550p:plain

Slackのサイドバーが邪魔だったしウィンドウを狭くしたら文字がはみ出てたので,そのへんを改善するChrome拡張を作った.

github.com

機能

Slackを開いてCtrl+Yでサイドバーを出し入れできる. ウィンドウ幅を狭くしてもテキストが自動改行される.

経緯

Slackのサイドバーが,どこからどうみても消せる機能を搭載してる雰囲気だったので,調べたら以下のページが出てきた.

www.qaster.com

Slack「Nope, not at the moment at least. Maybe in the future!」

実装まで待つのもだるいので作った.githubで公開した後,サイドバーまわりの挙動を修正するプルリクを@lempiji氏からいただいて,とても快適になった.感謝!久しぶりにgithubした気がする.

得られた知見

  • JQuery便利
  • google extensionはjsさえ書ければ簡単に作れる
  • Webサイトは自分でいじって使いやすくできる

バランスボールを椅子に

ずっと座ってると腰のあたりが冷えて(チリチリする)死を感じたので,各所で定評のあるバランスボールを椅子代わりに使い始めた.直径65cmのやつ.上に座布団を乗せて座っている.アーロンチェアオカムラのバロン等,あのへんの立派な椅子も欲しかったけど,いろんな導入例を見る限りコスパと健康に良さそうだったのでしばらく使ってみることにする.ぽよんぽよんしてて楽しい.

Archlinux+Xmonadに引っ越した

f:id:ttata:20150422220304p:plain

今回の記事は

tanitta.hatenablog.com

の続き.

より良い開発環境を求めてUbuntu+awesomeWMから引っ越しをした.移住先はArchlinux+Xmonad.その後だらだら書いていた設定が形になってきたのでこの記事を書いた.具体的な導入方法についてはググること.

Archlinuxとは

シンプルそして常に最新のGNU/Linux ディストリビューションである.

Arch Linux - ArchWiki

Archlinuxを入れる

入った.

前に試した時はグラボ(HD5850)のドライバまわりでうまくいかず,フォーラムで似たような症状の質問に「そんなゴミ捨てて新しいグラボ買おうぜ(意訳)」的なコメントがついてて諦めたが,今回は良い感じの解決方法(catalyst-testを利用:memo)を見つけたので割とすんなり入った.Linuxグラボまわり,ツボに入ったら泥沼なイメージが出来上がった.

Xmonadとは

タイル型ウィンドウマネージャとしてawesomeWMと双璧を成す.awesomeは設定ファイルをluaで記述するのに対し,XmonadではHaskellを用いる.ちなみに実装もHaskellらしい.

Xmonadを入れる

Xmonad - ArchWikiを参照.他のディストリでも大体同じはず.

あとは暇な時間に他の人の設定をパクリながらどんどん機能を継ぎ足していく.現在のデスクトップはこんな感じ f:id:ttata:20150422225840p:plain

使ってみた感想

Archlinux

  • インストール方法についての記事が大量にあるので,適当にそれを参考にしてコマンドをポチポチ打っていけばすぐに終わる(ドライバ周りは除く)

  • シンプルなので問題の切り分けが容易,非常に安心して環境構築ができる.万が一問題が起きてもググれば大量に対処方法についての記事が見つかるのでそんなに困ることがない

  • 使えば使うほどlinuxのしくみについて理解を深めていける感じが良い.圧倒的感謝.

  • ゲテモノディストリだと聞いていたがこれ逆に使いやすいのでは….みんな怖い話流しすぎ?Gentooの話はしてないです.

    Xmonad

  • やはりタイル型ウィンドウマネージャは最高

  • haskellよくわからなくても普通になんとかなる

  • 前に使っていたawesomeWMよりも動作が安定している

  • タイル型WM全般でgimpのように複数のウィンドウが表示されるアプリケーションはぞれぞれのアプリについての設定をWM側で行わなければならないが,最近gimpの設定でSingle Window Modeなるものを発見.設定することで子ウィンドウが発生しなくなり,gimpに関しては快適に扱えるようになった.おすすめです.

GitHubからMinecraft内のコンピュータに自動デプロイするWebアプリケーションをつくった

f:id:ttata:20150419035631p:plain

はじめに

 MinecraftにはComputerCraftというMODがある.これはMCの世界の中にプログラマブルなコンピュータを追加するもので,導入により文明の発展と飛躍が約束される.

 ComputerCraftのコンピュータは,普段我々が扱うコンピュータと同様に,コマンドラインで操作しエディタを開いてLuaで書かれたコードを生成,実行することができる.また,コンピュータ間での情報のやりとりを可能にする有線/無線機能やレッドストーン入出力,turtleと呼ばれるロボット等,数多くの周辺機器が存在し,それらを利用することでMinecraftのブロックを操作することができる

 しかし,マルチプレイ時にクライアントからサーバー内コンピュータのコードを操作するには,付属のあまり高機能ではないエディタで文字を打ち込むか,pastebinといったサービスを利用してhttpAPI経由で,一つ一つコンピュータ上でidを入力しコードをダウンロードするしかない.これらの方法では大規模なシステムを構成する上で多大な労力を支払う必要がある.

つくった

 そこで,この原始的な開発プロセスからの脱却を図るため,タイトルにあるように,GitHubリポジトリを経由してMinecraft内のコンピュータに自動デプロイするアプリケーションを作成した.GitHubで管理されたリポジトリのmasterブランチにpushを行うと,その直後に自動でComputerCraftの全コンピュータにそのリポジトリの内容が反映されるため,コードを自由に編集,利用できるようになった.

具体的な話

 今回作成したアプリケーションはsinatraunicorn,nginxを用いたWebアプリケーションであり,GitHub WebHookというサービスと,ComputerCraftのファイルシステムの仕様を利用して動作する.

 GitHub WebHookはその名の通りGitHubでのpushやpull-request等のイベントを通知するHook機構である.これをhttpサーバで受け取ることでプロジェクトの自動デプロイや自動テスト等,様々な活用ができる.

 また,ComputerCraftでは,ラベリングされた(データが保存される)コンピュータの内部ディレクトリは,minecraft_server/world/computerと対応しており,直接Minecraftの外からファイルやディレクトリの操作をリアルタイムで行うことができる.さらに,ComputerCraftのファイルシステムは,Linuxシンボリックリンクにも対応しているため,端末の外のディレクトリをComputerCraftから読み込むこともできる.

 これらを用いて,シンボリックリンクによりComputerCraft内の全コンピュータと関連付けられたローカルリポジトリを,WebサーバがHookイベントを受け取り,更新することで自動デプロイを行う.

まとめ

  • ComputerCraftは文明を加速させる
  • GitHub経由で自動デプロイをするWebアプリケーションによって文明をさらに加速させた

得られた知見とか

  • 今まであまりWebアプリケーションとか触ってこなかったので,たくさんの知見が得られた
  • 自分を成長させてくれるLinuxに圧倒的感謝
  • shellscriptダメです
  • 普段低級言語を書いている人間が高級言語を書くと,身体が羽のようだ感が味わえる
  • インターネットは楽しいとおもった
  • 腱鞘炎が悪化したのでkinesisが欲しい

参考

Webサイトをgithubで管理してpush時に自動的に同期する方法 - Blog by Sadayuki Furuhashi