月5ドルの海外VPSでKubernetesを試してみる

これは?

Kubernetes試してみたい!ということで、GKEやAmazon ECSを使うのも良いのですが、そこそこお値段が・・ ということで、格安VPSを使ってKubernetesを試してみます。

 

ほかの選択肢

正直なところ純粋にKubernetesを動かす場合はGKEやAmazonECSを使うほうがおすすめです。が、まぁせっかくやってみたので知識の共有ということで記事にしました。

 

ローカルで試す場合はminikubeがおすすめです

github.com

さて、ここまで読んでまだ格安VPSでKubernetesを試してみたい方は、 続きをご覧ください。

 

※※追記:Kubernetes1.9でのやり方をまとめなおしましたので、下の記事を参照してください※※

inajob.hatenablog.jp

※※追記:以下は古い手順です※※

 

海外VPS

僕が使っているのは海外VPSのvultr。と言ってもTokyoリージョンにもマシンを払い出せます。


紹介コードを介すると僕が幸せになるのでお願いします
こちらから登録! ↓

www.vultr.com

さて、vultrでマシンを作るところは省略。
OSはubuntuでメモリ1GB 1CPU Coreのマシンを作る。 これでだいたい月$5のプランのようだ。

f:id:inajob:20170402181428p:plain

 

f:id:inajob:20170402181333p:plain

swapをつくる

swapができないと確実にメモリが足りなくなるので設定します。(このプランでは根本的にメモリが足りないという話はとりあえず無視する)

 

# dd if=/dev/zero of=/swapfile count=2048 bs=1M
# chmod 600 /swapfile
# mkswap /swapfile
# swapon /swapfile

参考 https://www.vultr.com/docs/setup-swap-file-on-linux

 

注意

kubeadmはまだ開発中のプロダクトのようです。また、master、workerを1台でやるのもセキュリティ上推奨されていないので、あくまでこのやり方はお試し、ということで

 

 kubeadmでクラスタを作る

kubeadmというツールを使うと、kubernetesクラスタを簡単にお試しできる環境を構築できます。

ざっと図にすると下図のように、kubernetesの稼働に必要なコンポーネントを一気にセットアップしてくれます。あくまでお試し、なのでセキュリティ上はよろしくないところや、etcdが1台のみという全く冗長性のない構成のクラスタであるという点には注意が必要です。

f:id:inajob:20170402183104p:plain

 必要なパッケージをインストールします。

# apt-get update && apt-get install -y apt-transport-https
# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
# cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
 deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
# apt-get update
# apt-get install -y docker.io
# apt-get install -y kubelet kubeadm kubectl kubernetes-cni

 

 

kubernetesクラスタの構築をします。
「kube-dns」の設定を変える部分が少々トリッキーです。もちろん、もっと良いマシンを使っていれば素直に立ち上がります。
# kubeadm init
(略 結構待つ)

(1台で全部やりたいので、workerにもPodを配置するように設定)
# kubectl taint nodes --all dedicated-


(ネットワークの設定)
# kubectl create -f https://git.io/weave-kube

(kube-dnsが動かないので無理やり設定を変える)
# kubectl edit deployment kube-dns --namespace=kube-system
(viが起動するのでResourceの制限をすべて消したうえで保存する)

# kubectl get pods --namespace=kube-system
(すべてのpodがRunningになるまで待つ)
これで一応kubernetesができたはず
 
試しにkubernetes-dashboardをデプロイしてみる
 
kubernetes-dashboardにアクセスするには、まずNodePortを確認する。
 
 
# kubectl get svc --namespace=kube-system
NAME                   CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
kube-dns               10.96.0.10       <none>        53/UDP,53/TCP   2h
kubernetes-dashboard   10.106.150.108   <nodes>       80:31982/TCP    27m
ここに出ている31982というのがそれ。
 

これでアクセスできる。(31982は環境によって違うはずです)

ちなみに、これなんの認証もないので、インターネット上の誰でも見える状態になっています。kubernetes-dashboardからは任意のコンテナを実行させたりできるので、これは非常に危険です。確認が終わったら、すぐにkubernetes-dashboardは消すか、外から直接アクセスできないようにすることをお勧めします。

手元のマシンからkubectlを実行する

f:id:inajob:20170402183038p:plain

 

いちいちVPSにログインしてkubectlを実行するのもだるい。

幸いkubectlは各OSごとにバイナリが提供されているので、例えばWindowsのノートパソコンから利用できる。
手元からkubernetesクラスタへアクセスするためには向き先や認証情報を取得する必要がある。

 

 先ほどセットアップしたVPSのv /etc/kubernetes/admin.conf というファイルに必要な情報が入っているので、SCPなどで手元に持ってくる。

手元のマシンにkubectlのインストール

手元のマシンの環境に合ったkubectlをインストール(といってもバイナリを落としてくるだけ)

 OSごとに違うのでやり方は下記を参考

kubernetes.io

 

手元のマシンでkubectl proxyを実行

$ kubectl --kubeconfig=admin.conf proxy --port=8080
 
これで、手元のマシンにkubernetesのapiserverへの認証済みのプロキシが作られた。
 

手元のマシンでkubectl を実行

$ kubectl get pods
 
などと、kubectlコマンドを実行できる。
ここまでできればkubernetesのホストにログインする必要はなくなる。
 

メトリクスを収集する

なんといっても非力なスペックのVPSです。メトリクスが気になります。
 この記事に従って、Prometheusを入れてみます。
 
 prometheusのUIを確認してみます。まずはアクセスするためのポートを知る必要があります。
 
$ kubectl get svc prometheus
NAME         CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
prometheus   10.103.242.223   <nodes>       9090:30090/TCP   1m
PORTSのところの30090に注目
  にアクセスすることでprometheusの画面を見ることができます。

f:id:inajob:20170402185713p:plain

 CPUやメモリの様子が見たいのでnode-exporterを入れる

node-exporterをデプロイして、数分待つと、prometheusにメトリクスが収集されます。

f:id:inajob:20170402190115p:plain

prometheusのUIは慣れないとわかりにくいのですが、一番上のテキストエリアに"node_cpu"と入力し「Execute」をクリックするとこの画面になります。 Valueのところに、それっぽい値が出ています。
また、Graphというタブみたいなのをクリックすると

f:id:inajob:20170402190305p:plain

なんかグラフっぽいものを見ることもできます。

気になるメモリは?

"node_memory_MemFree" がそれっぽいですね。

f:id:inajob:20170402190425p:plain

 えーっと、あと80M余ってるということかな・・?

メトリクスを可視化する

f:id:inajob:20170402193918p:plain

Prometheusの可視化もまぁそこそこですが、もう少し見やすくするためにGrafanaを導入します。
先ほど紹介した記事によると

Kubernetes のメトリクスを Prometheus を使って監視する - Qiita

 メトリクスを監視するというタイトルで記事を書き始めましたが, メトリクスを収集するところまでで終わってしまいました. 次は今回収集したメトリクスをどのように可視化するかについてまとめたいと思います.

 次回作に期待・・となっている

しかしリポジトリを見るとすでに用意してあるではないか!

github.com

 
感謝しつつ、これを使ってみることにする。
grafanaにアクセスするためのポートを確認
$ kubectl get svc grafana
NAME      CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
grafana   10.103.143.142   <nodes>       3000:30000/TCP   8s
30000のようだ。
をブラウザに打ち込んでみる。

f:id:inajob:20170402191301p:plain

それっぽい画面が出ました!

graphanaは可視化専用ツールなので、先ほどのprometheusをgraphanaに登録して、そのデータを見ることになる。

左上のロゴマークから、「Data Sources」を選択、その後緑の「+ Add data source」をクリック

f:id:inajob:20170402191441p:plain

設定はどうしようか・・

Name: 好きな名前でOK 画像だと"prometheus"

Type: Prometheusを選択、選択すると、それ以降の項目が変化する

Url: http://prometheus:9090 とする

f:id:inajob:20170402191751p:plain

Urlがhttp://prometheus:9090というのは初見では驚くかもしれない。これで、先ほど作ったprometheusにアクセスできる。

種明かしをするとkubernetesクラスタの中にはdnsサーバが同梱されていて、まずServiceの名前として解決できるかを調べるようになっている。そのため、このような名前でアクセスできる。

 

さて、データベースの登録が終わったので、いよいよ可視化してみよう。

可視化のためには、先ほどのように、"node_cpu"だの"node_memory_MemFree"だの、prometheusやnode_exporterの知識が必要となる。だるい。。

ということで、先人の用意したdashboardを借りてくることにする。

dashboardは下記から探すことができる。

grafana.com

今回はnode-exporter用と思われる https://grafana.com/dashboards/22 をつかう。

 

ロゴからDashboards、からのImport

f:id:inajob:20170402192427p:plain

 Graphana.net Dashboardというところに「https://grafana.com/dashboards/22」と入力

f:id:inajob:20170402192652p:plain

入力してしばらくすると画面が変わる。

OpthinsのPrometheusのところ、ドロップダウンメニューから、先ほど登録したDataSourceの名前を選択して、Sava&Open!

f:id:inajob:20170402192925p:plain

 やった!かっこいいグラフが出たよ!

f:id:inajob:20170402193016p:plain

ここまでできたら、メトリクスもサーバにログインせずに見ることができる。
さぁあとはkubernetesを使い倒すだけだ!
 

注意

kubeadmはまだ開発中のプロダクトのようです。また、master、workerを1台でやるのもセキュリティ上推奨されていないので、あくまでこのやり方はお試し、ということで
 

ESP-WROOM-02でゲーム機を作った

これはなに?

ESP-WROOM-02でゲーム機を作ってみました。

www.youtube.com

構成

CPU: ESP-WROOM-02

0.25Wスピーカー

8ボタン入力(74166経由で接続)

電源スイッチ

128*128カラーTFT液晶(SPI接続)

単3乾電池x3

 

画面、スピーカ、ボタン と、ゲームに必要なものは一応搭載したつもりです。

ESP-WROOM-02は500円程度で買えますし、液晶も1000円程度のものです。

(液晶は中国で買うと安い: 激安さーち)

 

工夫したところ

ESP-WROOM-02ではGPIOが足らないので74166(パラレル-シリアル シフトレジスタ)を使って、接続した。

テトリスを作ったところ1フレームあたり20msくらい出せる模様。30FPSはいけそうです。

Wifiが利用できるので、これを活用したゲームが作れるかな、、?と思ってます。

 

ESP-WROOM-02ピンアサイン 

ESP-WROOM-02はGPIOが少ないので、ピンアサインは気になる人も多いかな?
水色背景のところは液晶との接続、黄色背景のところはシフトレジスタとの接続です。ジャンパとして使うピン(IO15,IO02)も出力ピンとして使っているところがポイントです。

f:id:inajob:20170326171635p:plain

 

ほかの有名な自作ゲーム機との比較

Gamebuino、Arduboyなどとの比較

  • Arduinoベースである点は同じです。ESP8266用のArduino環境を使っています
  • 液晶がカラーであるところが違います。ほかのものはモノクロです
  • ボタンが8個あるところが違います。ほかのものは十字キー+2ボタンです
  • Wifiが利用できるところが違います。
  • SDカードは利用できません。GamebuinoはSDカードが搭載されています。

wifi接続ができる!

ほかの自作ゲーム機と違ってWifiが利用できるということで、デモとしてWikipediaの記事を表示するというのをやってみました。日本語フォント周りがまだ準備できていないので、英語ページのみですが。

f:id:inajob:20170327224644p:plain

 

動画が見たい方はこちら

 

 

写真

ユニバーサル基板を使って実装したので、ゲーム機としてはかなり大きめとなりました。

f:id:inajob:20170326000048p:plain

 

ESP-WROOM-02と液晶は取り外せるようになっています。

f:id:inajob:20170326000105p:plain

裏返すと手で頑張っている様子がわかります。

f:id:inajob:20170326000119p:plain

💩(うんこ)の形をしたチョコを作った

これは何?

ついに我が家にも💩の型がやってきました。

折角なので、これを使ってチョコレートを作ろうというのをやってみました。

 

f:id:inajob:20170307213701p:plainf:id:inajob:20170307213559p:plain

こういうやつね

まずは氷を作ってみる

届いたその日には、チョコレートがなかったので、まずは氷を作ってみる。

f:id:inajob:20170307213853p:plain

残念ながら水に入れると、普通の氷でした。

f:id:inajob:20170307214003p:plain

チョコレートを買ってきた

ごくありがちのチョコレートを買ってきた。これで💩をつくるぞ!

f:id:inajob:20170307214316p:plain

まずバキバキに割ります。

f:id:inajob:20170307214434p:plainf:id:inajob:20170307214555p:plain

レンジでチンします。

f:id:inajob:20170307214717p:plain

溶けてきたやつをかき混ぜて、型に注ぎます。固まっちゃうので急いで・・

f:id:inajob:20170307214841p:plainf:id:inajob:20170307215053p:plain

後は放置・・・

 

完成しました!

f:id:inajob:20170307215650p:plain

 

感想

普通のチョコレートの味がしました!

電子レンジでチンするとなぜか、チョコレートが減った気がします。揮発した?

チョコレートをつくるって、女性は幼いころにやるイベントなのかもしれないけれども、僕は初めてでした。お菓子って分量など難しいイメージがありましたが、ことチョコレートに関しては、かなり大雑把にやってもできるということがわかりました。

Nコマ作成ツールを作ったら、素敵な参加賞をもらった

これはなに?

http://inajob.dip.jp/n_koma/

こんな感じで

こういうの(↓)が作れるWebページです

マスコットアプリ文化祭

mascot-apps-contest.azurewebsites.net

ここ最近毎年やってる、インターネット上のプログラミングのコンテスト。 特徴はキャラクターを使うというところ。 企業のマスコットキャラなどを使うことで、その企業の賞がゲットできちゃうかも! という感じのコンテストです。

そして参加賞がもらえるという、敗者にもありがたいコンテストとなっています。 で、僕の作品は箸にも棒にもかからなかったのですが、 無事参加賞をいただけましたので、素晴らしいコンテストの恩返しも込めて、ちょっとこの記事で紹介しようと思います。

いただいた参加賞の数々

え!ちょっと、参加賞なのに寸評がもらえるの? これはうれしい

まじめなUnityの開発事例集とLicenceGuide Unityは触ったことがないので、ぱらぱら見てみることにします。


そしてお約束ユニティちゃんのクリアファイル、Unity印のボールペン、Unityの薄い本

unity-chan.com


GMOクラウドのあんずちゃんのクリアファイル

cloud.gmo.jp


クエリちゃんのクリアファイル

クエリちゃん公式サイト


ご存じハッカドールのクリアファイル

f:id:inajob:20170227231132p:plain

hackadoll.com


京都の精華町のキャラクタ 京町セイカのクリアファイル! 透けている裏面にはお役所の資料っぽいご当地紹介画像があるのもご愛敬

www.town.seika.kyoto.jp


いろいろ! 右上が 泉精器製作所のキャラ松本イズミのカレンダー どの月も職場ではちょっと置きづらい感じになっておりました! ていうかシェーバー擬人化ってなんだろう・・

www.izumi-products.co.jp

http://omorianko.com/


鳥取県倉吉市の薄い本と鳥取ラーメン大全 僕は兵庫が実家なので鳥取は比較的親近感が・・ 後で読んでみます。

www.kimiwata.com


くすり屋の良佳さん のクリアファイル。これは・・・三重県にある薬局のキャラだそうです、 左下にすごくローカルな感じの地図がかいてあるのが目を引きます。

www.884ph.com


以上です!

すごくたくさんの参加賞ありがとうございました! 毎年楽しいコンテストを開催していただきありがとうございます。

ちなみに、個人的には2015年に応募したやつがお気に入りです。

mascot-apps-contest.azurewebsites.net

特に役には立ちませんが見てみてください!

自作プロッタさらに改良

先月からコツコツとプロッタを作ってます。

inajob.hatenablog.jp

この記事を書いた時から、さらに改良を加えました。

というか、Y軸のモーターが焼けてしまいました・・

ステッピングモーターの制御用のピンの1つがモーターの外装と短絡してました たぶん焼けたのだと思う・・)

Y軸はノートパソコン用のDVD-ROMドライブから取り出したステッピングモーターで、X軸に使っている一般的なDVD-ROMドライブから取り出したステッピングモーターと比べると、弱いのかな・・・?

 

とりあえずX軸と同じ一般的なDVD-ROMドライブから取り出したステッピングモーターで、Y軸を再度作り直しました

 

f:id:inajob:20170215222336p:plain

結構工夫をしていて

  • ボール紙を、ねじで固定している。さらに磁石でボール紙を固定している
    • Y軸をさっと分離できる
  • 紙をクリップで固定する
    • マスキングテープよりは着脱が簡単
  • ボールペンにした
    • 以前の油性ペンより細かい線がひけるように
  • Y軸の台をねじで持ち上げている
    • 微妙な傾きの調整が簡単
  • シリアル経由で制御できるようにした。
    • 複雑な図形もArduinoのメモリ量に関係なく描けるようになった。

といった感じです。

 

以下作品集

 

まずはリサージュ曲線。 計算で書ける

f:id:inajob:20170215222944p:plain

Inkscapeからgcodeに変換して、さらにそれをArduinoのプログラム変換して、描いた図形
複雑な図形はArduinoのメモリに乗らない

f:id:inajob:20170215223204p:plain

シリアル経由で操作できるようにしたため理論上どんな複雑な図形も容量に関係なく描けるようになった。権利面などを考えた結果「いらすとや」のイラストを描いてみる。

f:id:inajob:20170215223327p:plain

文字も良い感じだ。ハッチングによる塗りつぶしは、ペンの上げ下げが多いため、あまりきれいに描けないことが明らかに・・

f:id:inajob:20170215223441p:plain

ペンをボールペンに変更。より細かい線が描けるようになった。
とりあえず浮世絵を模写させてみる。 左が海の波の絵で、右が富士山の絵(北斎だったかな?)

f:id:inajob:20170215223542p:plain

作品を並べてみる。失敗作もこう見るとそれっぽいな

f:id:inajob:20170215223921p:plain

どくろマークとかエンブレムが良い感じであると気づく

f:id:inajob:20170215223704p:plain

左は輪郭のみ、ハッチングによる塗りつぶしはうまくいかないので、一番右はInkscapeの「インセット」を駆使して、塗りつぶし用のパスを生成した。

f:id:inajob:20170215223745p:plain

大体できることは試した気がする。

秋葉原で500円くらいで売っているDVD-ROMから作ったプロッタだったけど、非常に勉強になったし、かなり良いものができたと思う。

この記事を見てぴぴっときた方は、ぜひ作ってみてください。

 

はてなブログへ移行しました

なぜか今更はてなブログの「インポート」機能に気づいたので移行してみました。

help.hatenablog.com

リダイレクトの設定もしたので、急に今までと雰囲気が変わった感じになりましたが、今後ともよろしくお願いします。

Hack Day 2017でRecipe Mixerを作って、Fun賞を受賞しました! #hackdayjp

Hack Day 2017に参加してきました。

どうやら5回めの参加の模様

Hack Day( http://hackday.jp/ )というのは、土日の24時間(本当に12時〜翌日12時)という時間制約のもと「動く」プロダクトを開発し、その後90秒で発表するというYahoo!JAPANの名物イベントのOpen版です。
今回は昨年とほとんど同じメンバーで参加しました。


とりあえずの説明

今回作ったものは「Recipe Mixer」です。

料理というのはマルチタスク
複数の料理を並行に進めていく、というのはなかなか素人には難しいです。

そこで「Recipe Mixer」、これはそんなあなたを助けてくれるLineBotです。
指定したレシピをいい感じに合成して、「次やるべき作業」をLineで伝えてくれます。


参加メンバー

  • @kasahi 安定の仕切り役 プレイングマネージャ
  • @shamabe ライブコーダーなあの人 Hacker's Bar( http://hackers.bar/ )でライブコーディングをするなどHackerの鑑
  • ばりーさん なんだかんだで一緒にハッカソンに参加してます。今回僕が「だれかー混ぜてー」といったところ誘ってくださいました。
  • matsuchiさん 仕事はWebデザイナー、今回は発表もしたい とのこと
  • 僕 1月ごろに「だれかー混ぜてー」と言って混ぜてもらいました。

当日まで

去年の経験から、結局ぎりぎりにならないと決まらないのでは、なんて言いながら、気持ち少なめの打ち合わせ。
2週間前くらいから、夜に時間の合うときに「サイゼリヤ」で打ち合わせ (学生っぽい)

結構早めにLineBotをやろう、という話になりました。
しかし、なかなかLineBotを使った良いネタが出てきません。

いろいろ出した中で、これかなぁ・・・ ということで、決まったのが今回のネタでした。
全員の時間が合わず、全員で顔を合わせて打ち合わせ、というのができないまま当日を迎えます。

Hack Day 当日

11:30から開場ということで、少し早めに秋葉原に向かいます。
12:00から開発開始!
初めて全員がそろったので、まずは何を作るか、というところを話し合います。

ターゲットは誰なのか、どんなUIにするのか、開発はどのサーバを使うのか・・etc

大体みんなの認識があったのが14:00くらい
そして役割分担。

  • @kasahiさん matsuchiさんと連携し、デザインと、実際のLineBot上での表示を試行錯誤 + レシピを試しに正規化してみる
  • @shamabeさん LINEとの接続部分 LINEゲートウェイ的なもの ユーザの状態を管理し、適切なモジュールに処理を振り分ける。
  • ばりーさん MixRecipe前半のレシピの提案の部分
  • 僕 MixRecipe後半のレシピのマージと並べ替え部分
  • matsuchiさん プロダクトデザインと、プレゼン構成

まずはこれで!

僕はダミーのレシピデータを使って、後半部分を作っていましたが、なかなか難しい・・

夕方ごろ、用意された夕食を食べ終わっても、まだ、、みんな黙々と作業・・
不安になりはじめる。

なんとなくみんな作れているものの、結合するには至らない・・

とりあえずデータだ!ということで
手の空いた、@kasahiさんが、使えそうなレシピをステップに分け、DBに突っ込んで、APIから引けるようにしてくれました。

そうこうしているうちに、僕もダミーのデータで後半部分が動くようになったので、ダミーデータからAPIに切り替え、@shamabeさんの作ったゲートウェイと結合。なんとなく順番にレシピの手順を教えてくれる状態になりました。
ただ、なんかレシピのマージにバグがあって、思ったようにならない、、
豆腐をゆでろと指示が来た後に、豆腐を切れ みたいな感じになったりしてました・・

とかやってるともう深夜・・ 眠い頭に鞭打ちながらバグを直す・・

少し直しては、また別のところがおかしくなる、、というのを繰り返して、結局朝の7時過ぎくらいにまともに動くようになりました。

僕がこんな感じでバグと戦っている間にばりーさんの部分は作りこみが進み、いい感じにレシピを絞り込む対話ができるようになっていました。

また@kasahiさんがレシピを拡充し、「生姜焼き」「肉じゃが」「味噌汁」「ポテトサラダ」「きゅうりの浅漬け」などのメニューを混ぜることができるようになりました。

で、8時ごろから2時間ばかり仮眠・・
10時ごろに起きてきて、細かい部分をさらに作りこんだり、プレゼン資料をみんなで確認したりしていると12時。

あっという間の24時間でした。

発表はmatsuchiさんということで、僕は後ろで立っているだけでした。サーバ側のトラブルも無く、ほっと一安心。

発表のあとは展示。かなり多くの方が見に来てくださいました。「あしたから使ってみたい!」などと言ってくださる方もいて、手ごたえを感じました。
そして、授賞式。

見事 「Fun賞」をいただくことができました。

仕組み

レシピマージの仕組みは、かなり愚直にやっていて、

  • レシピを動作に分解する(何を、どうするか?)
  • 分解した動作の依存関係を記述する

このように下ごしらえしたレシピを混ぜ込んで、いわゆるトポロジカルソートをしています。
ただし、これだけだと自由度がありすぎるので、料理に特化した最適化をいくつか行っています。

  • 包丁を使う工程をなるべく早めにする
  • 火を入れる工程をなるべく後ろにする

といった条件を満たすように処理を工夫しました。

ともかくこのシステムはこの事前の「下ごしらえ」がキモでして、手作業とコンピュータのアルゴリズムをうまく組み合わせて実現しています。

また、レシピの動作には

  • タップされるまで進まない(野菜を切るなど、個人差の大きな作業)
  • 一定時間後に次の工程に自動的に進む (肉を焼くなど時間が大切な作業)
  • 一定時間後に指示を出すが、それまでは別の工程を進める(お湯を沸かすなど、時間が大切だが、並行してほかの作業ができる作業)

といったパターンを用意し、料理をうまくアシストできるようにしました。

感想

レシピのマージは実は僕が前からやってみたかったもので、今回その部分を作ることができてとても良かったです。
バグが結構あって、チームの皆さんをハラハラさせてしまったのがやや反省です。(プログラミングコンテストとか好きな方たちはこんなの余裕なんだろうなぁ・・と思ったりしました。)

毎度のことですが、一人ではこんな完成度の高いもの作れないし、ついついもっとおふざけ方向に走ったプロダクトを作りがちなので、チームの皆さんに感謝です。

開発ツール

今回はチーム内の仕様の共有に https://scrapbox.io/ を使ってみました。コロコロ仕様が変わるハッカソンにおいて仕様を書いて残せる、間違ってたらすぐ直せる というscrapboxのUIは非常に使いやすかったです。

ほかに使ったツールははGoogleSpreadshhet, gitbucket, facebook・・ くらいですね。ほかのチームがどんなツールを使ったのかも気になります。

過去のHack Day

Hack Dayは今回で5回めで、僕は過去4回も参加しました。宣伝的にリンクを置いておきます。

ほかの作品たち

YouTubeの録画映像を見ながら、全作品の「技術解説」している部分を抜き出してみました。参考にどうぞ