ガンシュンクレバー1人戦で300点を超える方法

ガンシュンクレバー(Ganz Schön Clever)はドイツ年間ゲーム大賞2018エキスパート部門のノミネート作品で、6つのダイスを振ってその出目で得点を得るゲームである。
友人が買ったので遊ばせてもらって、面白かったのと1人用のweb版があったのでGWの2日ほどやり込んでいた。

broad.tokyo



300点取れるとすごいらしく、313点まで取れたので攻略記事を書くことにした。
この記事はあくまで1プレイヤーの考察であり、公式とは関係ないことはご留意いただきたい。
また、これ以上に得点を取れるという意見があれば是非教えて欲しい。

それではここから各得点源と各アクションについて説明していく。

1. 得点源

1-1. キツネ

ゲームを始めた頃は1マスあたりの得点の高い緑色とオレンジ色を意識していたが、どうにも得点が伸び悩んでいた。
ある時各色偏りなく取っていくとキツネの点数が跳ね上がっていることに気づく。

そう、このゲームはキツネが1番大事なのである。
ここで1回目の電流が走った。

最低3匹、300点を超えるなら4匹取る必要がある。
どのキツネを取るべきかは各色の解説で詳細を語るが、オレンジ以外の4色がおすすめである。

1-2. 黄色

キツネ1匹あたりの得点を増やす必要があるので、縦1列だけでは得点が出ない。
2列は必要だと考えて16, 20の列を埋めていたが、ある時気づく。

14, 16の列を埋めた方が良いのではないか? と。
(ここで2回目の電流が走る)

6点減ってしまうものの、左上すみの黄3と黄6を埋めれば青Xとキツネ、+1アクションが取れるし、その2手は青Xと+1アクションを得られるなら実質手数は同じ。
キツネ1匹は6点より価値が高いのでこちらの方が良さそうに感じた。

上記のようにマスを埋めるためにプレイ方針としては

  • 黄1 ~ 3は他の色で良いマスがなければ埋めるくらいの気持ち
  • 黄4 ~ 6は埋めれるなら埋める
  • オレンジや紫を埋める過程で2回黄Xを取れるので終盤はそれで調整

黄色は無駄に埋めても得点にならないので効率よく埋めていこう。
黄色30点が最低点として、今後キツネは30点と換算する。

1-3. 青色

キツネの次に重要なのが青色だと思っている。
最初は全く意識していなかったが、青は行または列を埋めるともらえるボーナスが大きく、黄色、オレンジ、紫を埋めていく過程で青Xを3回もらえる。

キツネ30点を超えるために青は9マスは埋めなければならない。
ボーナス目当てで5, 9以外の9マスを埋めていた。
が、ある時気づく。黄色で無駄に埋めてしまったことがあったが、その1手を青9に埋めればキツネ1匹30点と青1マス9点(9マス37点 -> 10マス46点)が得られる。

これが最適だ……!
と気づいた時に震えた。ここで3回目の電流が走る。

おそらく手数として青5を埋める余裕はないはず。
5, 6, 7, 8の行が埋まれば黄色Xのボーナスがもらえるので実質手数は同じだが感覚的に苦しい。
できたとして、青5は縦列を揃えたとしても振り直しアクションがもらえるだけなので優先度は低い。
なので青5以外の11マスを埋めるのがプレイ方針となる。

青は青と白の2ダイスの出目で埋められるマスが決まるので意外と繊細である。
なので序盤は埋められるなら青色はほどほどに埋めておきたい。
緑の6マス目と紫の4マス目で青Xがもらえるのでこの時の青Xで行または列を揃えた時のボーナスを取りたい。
うまく噛み合わなければ青の2, 12など確率的に埋まりづらいものを埋めよう。

1-4. 緑色

45点が終着点である。
最初は66点まで目指していたが、もう2マス埋めたところで21点しか上がらず振り直しアクションしかもらえない。5, 6という出づらいダイス目の割に得られるリターンが少ない。
このゲームは本当に手数が大事である。

45点で止めたのはキツネ30点のために緑を36点以上にする必要があるが、どうせもう1マス埋めても紫6ボーナスがもらえるので実質手数は同じ。
ということで45点で落ち着いた。

プレイ方針としては4ターン目開始時のX or 6ボーナスのため、そこまでに緑4まで埋めておく必要がある。
+1アクションなどを使いながらうまく埋めること。
この際運よく緑5まで埋まっていたら、紫に6を埋めることが多い。
緑と青、黄色と紫、くらいの優先度で埋めているのでオレンジは×2まで到達できていなかったりするので。
青Xもあるような気がするが4ターン目で青Xがどうしても欲しい、という盤面にあまりなっていないのでやったことはないと思う。

まとめると4ターン目開始までに緑4まで埋めるのが大事。
あとは手なりで45点になるようにほどほどに埋めていけば達成できる。

1-5. オレンジ色

終着点は6マス目までである。
11マス目に×3があったりするのでオレンジを埋めたくなる気持ちはわかるがぐっと我慢。
このゲームは手数が大事でありキツネが大事である。
11マス目までなんてとても行けない。

8マス目のキツネを取ろうかと思うがとても手数が足りない。
キツネの前に×2のマスが置いているのがゲームデザインとしていい味を出していると思う。
(ここで静かに最後の電流が走る)

埋めたくなってしまうがこれは罠だ。

オレンジはキツネ1匹30点のために1マスあたり5点ほど取っておかないと黄色よりも得点が下回ってしまうので注意。
×2のマスで8 ~ 12点ほど取りたい。
+1アクションに余裕があればオレンジ6が出た時に使っても良いかもしれない。
12点そこで取っていると気持ちに余裕が生まれる。

1-6. 紫色

終着点は7マス目までである。
キツネは絶対に取りたい。
青や緑で紫6のボーナスがもらえるのでそれも考慮して調整すること。

オレンジや紫は終盤に埋めていくことで最後の青と黄色の調整に役立つ。
紫6で埋められるときは埋めていく、くらいの方針でほどほどに埋めて終盤で一気に埋めてボーナスによるコンボを狙うのが望ましい。

なお、紫3などを埋めてしまうと想像以上にリカバーが大変になる。
これは緑4、5を序盤で早めに解消するのと似ていて、紫がロックがかかって動けなくならないように、6なら埋める、終盤で手数が足りなければ1, 2なら許容する、3 ~ 5を埋めるなら紫6ボーナスによるリカバーがすぐできる場合、というのがプレイ方針となる。

2. アクション

2-1. +1アクション

+1アクションを使うのは序盤の緑5を埋める時と、中盤のオレンジまたは紫6を埋める時、終盤でコンボをする時である。
ちまちま使っていて1, 2個残していくくらいのペースが望ましい。
残しすぎても終盤で良い目にならなくて使いきれないこともあるからだ。

2-2. 振り直しアクション

自分もよく使いきれず残してしまっていたが、ゴールまでの道筋がわかってしまえば意外と簡単である。
例えば青5しか埋められない、黄色の10, 20列の1, 2, 4, 5のマスなど埋める必要のない出目が出てしまった時に振り直せば良いのである。

要は各色の最適解のルールから外れた出目が出た時に振り直せば良い。
1, 2個常に持っておくと心の余裕がある。
+1アクションと違って別に使い切ろうと躍起になる必要はない。

まとめ

  • キツネ:一番大事。1匹30点、オレンジ以外のキツネを4匹取って120点目標。
  • 黄色:14, 16の列、左上すみの3と右下すみの6を取って、30点とキツネ、青X、+1アクションを取る。
  • 青色:青5以外の11マスを埋める。埋められるときは埋める意識。
  • 緑色:4ターン開始時点で緑4まで埋めること。あとは手なりで45点目標で埋めていく。
  • オレンジ色:終着点は6マス目まで、進めたくなる気持ちをぐっとこらえること。1マスあたり5点は取る。
  • 紫色:終着点は7マス目まで、青や緑で紫6のボーナスがもらえることを意識して6の出目でいっぱい埋める。
  • +1アクション:序盤の緑5を埋める時と、中盤のオレンジまたは紫6を埋める時、終盤でコンボをする時に使う。
  • 振り直しアクション:最適解から外れている際に使う。

青5を埋める余裕があったり、オレンジを全部6の出目で埋めれば(オレンジ5ボーナスは除く)まだ得点は増えるが、300点越えが目標で現実的な自身の最高得点の313点をたたき出せたのでここで終わりにする。
なかなか面白いゲームだった。

4年続けたフリーランスの成果

2018年も終わることですし、約4年続けたフリーランスを一旦終えることにしたので、特に記憶に残っているお仕事の成果を残しておこうと思います。

# ストリートアカデミーさん(2016.5 ~ 2017.3)

講座を数千円から受けられるので、気になるけど高い、みたいなのをお試しでできて良いサービスです。
自分もボイトレの講座を受けてみたりしました。

品質改善や講座詳細画面のリニューアルや決済機能の導入などをやっていました。
いつも笑いの絶えない良いチームで楽しかったことをよく覚えています。

業務委託の自分のために、送別会をわざわざ開いてくださるくらい貢献していたと言っていただけて、自分の中で少し自信がついた案件でもありました。

# みんなのウェディングさん(2018.4 ~ 2018.12)

少数精鋭だったので主体的に取り組めたのが良かったです。
開発だけでなくどのような機能を開発していくか話し合ったり、データから分析したりとできることは何でもやっていました。

あとは「褒める人」というキャラになっていたのも個人的には得たものかもしれません。
チームの空気を良くしよう、何か役に立てることをしようと細かな仕事をしていたら信頼を積み上げられていた気がします。
これは学びでした。

iOSエンジニアとしてはfastlaneをもりもり使えたのも良かったです。

# 終わりに

他にもドローンを操作するiPadアプリだったり、Objective-Cでライブラリを作ったりといろいろ開発してきた4年間でした。

以前ツイートしたように違う分野の仕事をしてみるので不安はありますがこれからも頑張ります。
次は外資の大きなところに行く予定です。

Google App EngineからさくらのVPSにお引越しするまで

Google App EngineRailsのサービスを乗っけていました。
Google Cloud Platformの無料トライアル期間があったし、gcloud app deployでデプロイできてめっちゃ簡単だな〜って思っていました。
しかし、1ヶ月でAppEngineのFlex環境で27000円とGoogleCloudSQL5000円で合計32000円もしたので引越しすることにしました。
流石に高すぎ。

ここからはさくらのVPSに引越しするまでの手順をかいつまんで備忘録として残します。

mysqldumpしておいてからさくらのvpsを借りる

mysqldump -h $host -u $username -p > output.sql
さくらのvpsを借りる
LetsEncryptのスタートアップスクリプトを走らせる
(ただ、nginxを入れてletsencryptの途中まで成功しているが証明書はこの手順だと取得できていないので注意。正しくやるならドメインの設定を終わらせておいてからだと思う)

rbenv, ruby-build, rubyを入れてソースをgit clone, bundle installまで

yum update
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
cd ~/.rbenv/plugins/ruby-build
./install.sh
yum install -y readline-devel
rbenv install 2.4.2
cd /var/www/app
bitbucketからgit clone
gem install bundler
bundle install --path vendor/bundle

mysql

rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
(参考:https://dev.mysql.com/downloads/repo/yum/
yum -y install mysql-devel
bundle exec rake db:create
mysql -u[ユーザー名] -p [インポートするデータベース名] < [インポートするファイル名]
bundle exec rake db:migrate

puma.rbに下記を追加

_proj_path = "#{File.expand_path("../..", __FILE__)}"
_proj_name = File.basename(_proj_path)
_home = ENV.fetch("HOME") { "your home directory" }

pidfile "#{_home}/tmp/#{_proj_name}.pid"
bind "unix://#{_home}/tmp/#{_proj_name}.sock"
directory _proj_path

nginx.confを設定

http内に下記を追加
upstream puma {
server unix:///your app/tmp/{your app name}.sock;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name {your domain or ip address};
root /var/www/app/{your app name}/public;

include /etc/nginx/default.d/*.conf;

location / {
try_files $uri $uri/index.html $uri.html @webapp;
}

location @webapp {
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://puma;
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

systemctl start nginx
bundle exec pumactl -F config/puma.rb startで動くことを確認

nginx, pumaを常時起動設定

systemctl enable nginx
/etc/systemd/system/puma.serviceを作ってsystemctl enable puma.service

[Unit]
Description=Puma Application Server
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=var/www/app/{your app name}
Environment=HOME=var/www/app/{your app name}
Environment=RAILS_ENV=production
Environment=SECRET_KEY_BASE={bundle exec rake secretの値をコピペ}
ExecStart=/root/.rbenv/shims/bundle exec puma -C /var/www/app/{your app name}/config/puma.rb
TimeoutSec=300
Restart=always

[Install]
WantedBy=multi-user.target

お名前.comで取得したドメインをさくらのvpsと紐付ける

お名前.comで取得したドメインをさくらのvpsと紐付ける
参考:https://qiita.com/megane42/items/df84f87c0bdcdd015eb6

ttlは60など小さくしとくと反映されるのが早くて良い

https

nginx.confのlistenを修正, ssl_certificate, ssl_certificate_keyを追加

listen 443 ssl http2;
ssl_certificate /etc/letsencrypt/live/{your domain}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/{your domain}/privkey.pem;

systemctl stop nginx
certbotはstandaloneで入れる
/usr/local/certbot/certbot-auto -n certonly -a standalone -d {your domain}

nginx.confのlistenを修正, ssl_certificate, ssl_certificate_keyを追加

listen 443 ssl http2;
ssl_certificate /etc/letsencrypt/live/{your domain}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/{your domain}/privkey.pem;

systemctl start nginx
certbot-auto -n certonly --webroot -w {your document directory} -d {your domain} -m {your mail adress} --agree-tos --force-renewal

standaloneで入れてからwebrootに変更すると楽そう
webrootはサーバを止めなくても証明書が入れられるオプション

config/environments/production.rbでconfig.force_ssl = true

初めて独学するプログラミング言語のおすすめはGoogle Apps Scriptである

プログラミングの独学は難しい。
自分もプログラミングの独学について記事を書いたりしたものの、本業のiOS以外の分野での独学は難しく感じているし、下記の記事で出てくる知人はおそらくなんの連絡もないので挫折したんだろうなと思う。
qiita.com

そこで、初めて独学するプログラミング言語Google Apps Scriptをおすすめしたい。
なぜなら自分が作ったサービスが

  • 無料で作ったものを公開できる
  • Google系のサービスとの連携が簡単にできる

からである。

無料というのはちょっと始めてみようかという人には素晴らしい。
誰だって、いきなりお金をかけるのは心理的ハードルが生まれる。

そして、Google系のサービスとの連携が容易なので、普段使っているGmail, スプレッドシート, カレンダーなどを何か便利にしたいなーという欲求が生まれやすいので「何を作ったら良いかわからない」というプログラミング学習におけるよくある問題を回避しやすい。

普段、自分はiOSエンジニアなのでSwiftをおすすめしたいところではあるが、Xcodeのダウンロードは重たいし、アプリを公開するにあたって審査だったり年会費が必要となり煩わしい。
また、他にWebサービスを作る言語はあるが、サーバをどうするかだったりを考えると色々と煩わしい。

もちろんGoogle Apps Scriptは複雑なことをするにはエディタや文法がいけてないという面はあるけれど、ちょっとしたツールを作るにはとても便利である。

自分が今まで作ってきたサービス

qiita.com
qiita.com

最後に

ということで、「プログラミングを始めてみたい!」という方はいますぐGoogle Driveを開いて
新規 -> その他 -> Google Apps Script
をクリックしよう。
困ったら「Google Apps Script 入門」とかでググったり、ドットインストールで勉強すると良いと思う。

蛇足

ちなみにこの記事は音声入力で何か書いてみたくて書いた記事である。
けんすうさんや勝間和代さんが音声入力でブログを書いていると耳にしたためである。
要旨をあらかじめ決めて思うままに話してみたところ、圧倒的に書くのは早い。修正もそんなに大変ではないし。
ただ、修正を行っているうちに付け加えた部分も多く(音声入力500字、後から800文字くらい書いた)、音声入力一発でブログを書くのはそれなりに慣れが必要な気はする。
あくまで、音声入力はブログなどの文章を書く心理的ハードルを下げ、大体の部分は書けるというくらいに思っておいた方が良い。

Amazonの注文確認のgmailから、googleカレンダーにその受け取り時刻の予定を自動で入れる

Google Apps Scriptデビューしました。
未読のAmazonからの注文確認メールを2時間おきに確認して、Googleカレンダーにその受け取り時刻の予定を自動で入れています。
2時間おきというのは任意で変更できて、Google Apps Scriptエディタの時計のアイコンからトリガーを設定させればできます。
便利。

コメントは意図や出力例、つまずいたところを書きました。
よろしくお願いいたします。

function createAmazonEvent() {
  var criteria = "is:unread from:(Amazon.co.jp) ご注文の確認";
  var dateExp = /\d{2}\/\d{2}\s\d{2}:\d{2}/g; // ex. 06/15 16:00
  var dateExpWithSubString = /(\d{2})\/(\d{2})\s(\d{2}):(\d{2})/; // ()をつけることで部分文字列として返却される
  
  GmailApp.search(criteria).forEach(function(thread) {
    var messages = thread.getMessages();
    messages.forEach(function(message) {
      var body = message.getPlainBody(); //getBodyだとHTMLメールのため
      
      if (!(body.match(/お届け予定/))) {
        // Kindleの注文を除くため
        return;
      }
      
      var year = message.getDate().getFullYear();
      var myArray = body.match(dateExp); // ex. [06/15 16:00, 06/15 18:00]
      var [sMatched, sMonth, sDay, sHour, sMin] = myArray[0].match(dateExpWithSubString);
      var [eMatched, eMonth, eDay, eHour, eMin] = myArray[1].match(dateExpWithSubString);
      var startDate = new Date(year, sMonth - 1, sDay, sHour, sMin);
      var endDate = new Date(year, eMonth - 1, eDay, eHour, eMin);
      CalendarApp.getDefaultCalendar().createEvent("Amazon荷物", startDate, endDate);
      message.markRead();
    });
  });
}

参考記事:
GASでDMM英会話の予約メールから自動的にカレンダーに登録 | shotarok's Tech Blog
正規表現 - JavaScript | MDN
Calendar Service  |  Apps Script  |  Google Developers

英語が9割わからないで海外のハッカソンに出るとどうなるか(後編)

1日目午後

アイディアを決める会議をしていたのですが、何を作るかということを僕が理解したのは夕方でした。スプレッドシートに書かれている仕様を見てわかりました。
本当に聞き取れないな、と一人で苦笑していました。
ちなみに最初に一言だけ話してから何も話していないので話すこともダメダメでしたね。

そんな中、おそらく小学生か中学生くらいの子に話しかけられました。
余談ですが、結構小さい子もいっぱい参加していて、幼い頃からこういう場に来ている姿勢というのは本場すごい、って素直に感じました。
で、話しかけられた内容についてですが、午前中の僕のプレゼンでiOSエンジニアだと覚えてくれていたのでしょう。クラッシュしたけど理由を教えて欲しいというものでした。
幸い自分も経験したことのある、設定項目の書き忘れという簡単なものですぐに直してあげました。
"Thank you."と言われた時に「このハッカソンでやっと役に立てた」と涙が出そうなくらい嬉しかったのを覚えています。

***

AWS Rekognitionという画像認識のサービスを使って、眠っているのか起きているのかを判別して、眠そうならホテルをサジェストするというアプリになりました。
このAWSのサービスはiOSでも提供されていたので、サーバサイドを実装しなくて良い……
あれ? 画像認識の部分も画面も作るし実際コード書くの僕だけじゃない?
って心の中で笑ってました。
Mくん(機械学習エンジニア)には"You are MVP."って言われましたけど
ほんとそうだなって思ってました。
まあ、Mくんはどれくらい眠たいかを判別する計算式を顔の画像から学習させようとしていたし、Dさん(デザイナー)はちょっとiOSかけるので画面を良くしてくれてました。

で、Lくんは?
仕様の説明をしてくれた後に「帰る」って言い出したんですよね。PM9時です。
え? ハッカソンって24時間耐久でサービス作るんじゃないの?
って驚きました。でもみんな帰り出したし、他のチームでも帰ってる人がいたのでこういうハッカソンだったのかもしれません。
あ、でもAM1時にピザが出てたらしいので残っているチームは残っていたと思います。
僕は自分だけ頑張るのもアホらしくて、僕も帰りました。

2日目

LくんはAM11時(締め切り2時間前)というふざけた時刻に来ると約束していて、あーもうそうですかって思いながらも、僕はAM6時くらいから4時間で残りの作業を頑張って終わらせました。
MくんやDさんは来て作業してくれてたのでありがたいって思ってました。

で、Lくんですか? まず、11時に来てません。
もう知らんって思いながら、僕の方は新しいAPIの存在を2チームに分かれた方のもう1つのチームから説明されました(どういうことだ? って思うでしょう? 僕もです)
時間もないし、実装した人こっちのチームだったの?? って疑問が浮かびつつも実装したり、Dさんのgitのトラブルを解消したりしてたらタイムアップ。

で、Lくんですか? 後で発覚したのですがもう1つのチームの方でプレゼンに出ることになっていました。
お昼くらいにいつのまにか来てて、おそらく2チームで作ったサービスの出来栄えの良い方をお前選んだろ?って推測してます。
確かにそっちは、卓球とかをしている時にAlexaに話しかけると得点をカウントしてくれるサービスでキャッチーでした。Alexaの部門賞取ってましたし。
でもなめてますね。一周回ってあっぱれです。

***

結局Mくんがプレゼンすることになって、でもとても滑らかにプレゼンしたり質問に答えていたので彼はすごかったです。
おかげでトップ10に入れましたし(30チームくらい参加してました)
まあ、滑らかに話す彼と棒立ちで眠そうな顔と起きてる顔を無言で撮る僕のギャップが面白かったのかなって思ってます。

プレゼンが終わってMくんとDさんと3人でハイタッチして「僕のチームは3人チームだったんだな」って思いつつ僕の初めてのハッカソンは終了しました。

終わりに

じゃあどうするべきだったのか? と考えてみると

  1. 自分の直感で怪しそうだと思う人についていかない
  2. チームメンバーが各自ある程度役割がはっきりしていること
  3. 英語を頑張る
  4. 自分の作りたいものと作る予定のものが近いか

あたりが大事なのかと思いました。

つらかったんですけど、こんなに過酷なハッカソンでなんとかできたので、少し自信がつきました。
それは良い経験だったと思います。

英語が9割わからないで海外のハッカソンに出るとどうなるか(前編)

結論:つらい

注意:読み返してみると思ったより愚痴っぽくなってるので、苦手な方は読まれない方が良いかと思います

経緯

サンフランシスコに来たんだ、せっかくなら本場のハッカソンに出てみようか!
と思ってAngelHackというハッカソンに申し込みました。

angelhack.com

世界各地、日本でも開催されている大規模なハッカソンのようです。不安に思いつつも参加前は初めてのハッカソンを楽しみにしていました。
ハッカソンの2日間で思ったこと、起きたことを全て書いていくと長くなるので、ハイライトを書いていきたいと思います。

0日目

プリハッカソンという名目の集まりが開催されていて、チームメンバーを事前に見つけようという目的で参加しました。
日本だったとしても初対面の人に話しかけるのは勇気がいるのに、英語で話すということでとても緊張していました。
その中で話した1人目はデザイナーの方でした。
自己紹介の後に「何か作りたいものはあるの?」と聞いて話してもらったのですが、
「ふんふん、クラウドソーシング? 引っ越し? SMS?」
みたいな断片的な単語しかわからず、会話も全然弾まずやばいなって思いました。
そのあとも何人かと話したものの何を言っているかほぼわからず、後半は話しかけるなオーラを出しつつ早めに帰りました。
何しに来たんだろ、と悲しい気持ちで帰ったのを覚えています。

1日目午前中

チームメンバーが見つかっていない、頑張って探そう!
と朝食の時間に営業活動をしていました。

その中でお話しした50~60歳くらいの優しそうな老夫婦の方達が印象的でした。
「40年コードを書いてて、ハッカソン・ものを作ることが好きなんだ」とおっしゃってて素敵だなと感じました。
チームに入れてくれる? と頼むも「今回作る予定のものはiOSが関わらない、でも君のことは覚えておく、他の人にも紹介してあげるよ」と残念でしたが優しい対応をしてもらいました。
ちなみにこの方はSparkpostという今回のハッカソンで提供されているAPIを使って、ちゃんとSparkpostの部門賞を取ってて、ハッカソンの勝ち方を知っているのだなというのも印象的でした。

***

いよいよ開催の時間になって運営の方が話し始めます。
"Hey, San Franciscoooo!!!!"
みたいに参加者を煽るところがライブみたいでした。なんでしょう、ハッカソンに限らずこういうノリをよく感じたのでアメリカの文化なのかもしれません。

で、賞金や賞品、ルール、スケジュールなどを話し終わった後にチームメンバーを見つけるためのプレゼンをしたい人は前に来てくれという流れになります。
僕は先ほどの老夫婦の奥様に紹介してもらった、ハッカソン常連の方が最前列に座った影響で隣に座ってたんですね。
彼に肩を叩かれて最初に話すことになってしまい、「嫌だ、やめろ」って思いつつも「ここで話さないとチームメンバーは得られない」とも感じていました。
なので、自己紹介をした後に
"I have no idea, but i wanna make a team. So please call me!"
って言いました。我ながらひどいプレゼンですがなんかウケてました。

***

その後早速誘ってもらってアイディアを決めるために、地下の説明会場から上がりました。メンバーの数を確認すると
"one, two, …… ei, って8人いるけど!?"
チームメンバーは5人までです。なんか怪しいなって思いましたが、その時はチームに入れた喜びと英語ができないプレッシャーでその場に居続けました。
最終的に2チームに分かれて、僕のチームは

  • リーダー。ここではLくんとします。議論を進め、タスク管理、仕様決め、プレゼンを担当
  • 機械学習エンジニア。ここではMくんとします。
  • デザイナー。ここではDさんとします。

になったんですけどね。なったんですけどね……(チームの愚痴は後述します、後編に続く)