ClojureCupは48時間のオンラインハッカソンで、Clojure / ClojureScriptの言語でアプリケーションを作成するための前提条件です。 今年、ハッカソンには約50チームが参加し(それぞれ1〜4人)、多くのクールなアプリケーションを作成しました 。
アプリケーションは審査員(Clojureコミュニティで知られている人々)と一般ユーザーによって判断されます。Twitterを使用してログインし、アプリケーションページで好きなアプリケーションに投票してください。
そして、あなたは私たちがここで得たものを試すことができます 。
![](https://habrastorage.org/files/a95/148/2cb/a951482cb82d4cceb244b124735d66df.png)
注意:カットの下にたくさんの写真。
アイデア
ClojureCupに参加するというアイディアはかなり前に思いつきましたが、怠inessがうまくいき、ハッカソンが始まる3日前にチームを編成する必要があることに気付きました(ハッカソンの2日前にチームを結成する必要がありました)。 しかし、この世界には、かっこで奇妙な言語で何かを書くために週末を失いたがったプログラマーがいませんでした。 ここで、私たちの誰もがしばらくの間lojureについて真剣に書いたことはなく、そのうち2人はまったく書いていなかったことに言及する必要があります。 はい、4人全員がプログラマでした。
当初は、プロジェクトとして静的サイトに奇妙なものを作りたいという要望がありました(最終的にチームの1つが少し似たようなことをしました)が、結果の必要性について大きな疑問が生じました。
その結果、アイデアを選択するための基準を作成しました。それは、すぐに理解できるもので、単純なユーザーにとってのものです。
そのような基準から、私たちはすぐにある種のおもちゃを作るというアイデアに思いつきました。 そして、私は美しいパズルボブルを思い出しました:
![](https://habrastorage.org/files/2db/356/e0f/2db356e0f0094b4c924fc366c23a0ae8.png)
これは非常にいたずらなP2Pモードを備えたパズルです。グループとして作成するボールが大きいほど、同じボールがより多く敵に到達します。 そこで、メカニックを固定して「敵を不快にする」ゲームを見つけることに焦点を当てました。
テトリスと2048について考えましたが、彼らはロケットマニアを思い出しました!
![](https://habrastorage.org/files/c8c/f3f/de1/c8cf3fde185b473faab88e11c47cbfd1.jpg)
そのため、開始の2日前の夜に、アプリケーションのアイデアが生まれました.2人のプレイヤーがロケットマニアの簡易バージョンをプレイしますが、ミサイルの数が制限され、敵に飛び去り、ゲームが終了するため、彼らは燃料を手にします、飛行ごとに減少し、最後にロケットは永遠に宇宙に飛びます。
当時、ゲームにはクールなグラフィックスとネットワーク上でプレイする機能があるはずでしたが、金曜日の夜にアイデアに取り組み始めたとき、2つの変更が行われました:ネットワークにゲームをスローし、ホットシートモードのみをサポートすることを決定しました1つのコンピューターのプレーヤー)、フラットデザインも使用します。これは簡単だからですが、私たちの中にはプログラマーがいます=)
これらは非常に正しい決定でした。実際に達成できる目標を選択する必要があります。 単純化-単純化-単純化。
![画像](https://habrastorage.org/files/a1a/f62/292/a1af62292eb24824b17c3e7fd3356d96.jpg)
Clojureでの経験と同様に、プログラミングの機能的なスタイルの経験はありませんでした。 しかし、ここでは機能的なパラダイムを最大限に活用することにしました。世界のすべての観察は変更されず 、機能はクリーンであるなどです。 など その結果、私たちのアーキテクチャには「世界の原子」が1つあり、その状態が画面上のものを一意に決定し、それによって世界が変化しました。 また、 react.js (これは非常に正しいソリューションでした)とその静止ラッパー(不正確ですが許容範囲内)を使用することにしました。 今では、 フェイザーを見る必要があるように思えますが、そのような考えは生じませんでした。 ちなみに、フェイザーでは、別のチームが猫と楽しいゲームを作りました!
一方、朝の4時になるとClojureCupが始まり、眠りについた。 この時点でチームメンバーの1人(異なるタイムゾーンに住んでいます)がサーバーを立ち上げ、そこにElon Maskロケットを搭載したスタブを立ち上げました。
![画像](https://habrastorage.org/files/ba8/068/6a6/ba80686a6bfa4755aa873f8924e2f8ec.png)
実装
アプリケーションは非常によく分割されていました。誰かが純粋にゲームロジックを見て、誰かが競技場を表示し、誰かがキーボードの処理に関与していました。 何らかの理由で、ターミナルREPLを積極的に使用することはありませんでしたが、ブラウザーでホットリロードコードを使用してClojureScriptコードを自動的に再コンパイルするソリューションであるfigwheelは非常に役立ち、私たちの生活を非常に簡単にしました。 ここでもう1つ興味深い点に注意する必要があります。世界の状態は再読み込み不可能なアトムに格納されていたため、アプリケーションを再コンパイルした後でも、以前と同じ状態のままでした。 マイナスの点として、時々インクリメンタルコンパイルが行われたため、完全な再構築を行わなければならなかったことがわかります。
最初に、生成されたコードをリポジトリに保存したため、数万行の変更されたコードのマジックナンバーを取得しました。合計サイズは約1K行のコードです。
不快なカップルのうち2つが発生しました。
- 最初の理由は、ページのどの部分を更新する必要があり、どの部分を更新しないかが非常に奇妙に静止しているという事実によるものです。 その瞬間、生成されたJSコードにデバッグ出力を埋め込み、そこで生成されたものを理解することさえ学びました。
- 2番目は明らかにClojureScriptコンパイラのバグでした。正しいコードはコンパイルされましたが、動作しませんでした。
ゲームロジックの実装中に、私たちは世界の不変の状態における大規模で深い変化のタスクに直面しました。 その結果、判明したように、標準ライブラリのソリューションに一致する署名までソリューションが考案されました =) 道徳 :使用するツールの少なくとも少しを研究してください。 そして、あなた自身の何かをする前に、見てください:他の誰かがそれをしましたか?
そして、Clojureで変更可能な状態を作成する方法を知りませんでした(機能は意図せずに)、これはそのような独白を引き起こしました:
かぎ針編みでひどく怒り、もう一度コーディングしました。 なぜこの言語が必要なのか、読むことが不可能な場合、そして普通の何かを書くためには、言語の概念から抜け出す必要があります。
その結果、可変状態の使用方法は学習しませんでしたが、ループを使用しました。
初日の終わりには、アプリケーションのバージョンを示すものが既にあり、ハッカソンの終了の3時間前に、ゲームの多かれ少なかれ本格的な動作バージョンがありました。 過去3時間で、ゲームにサウンドを追加しました(ここでは、機能的なパラダイムを放棄し、フォームプレイの方法が登場しました!)。そして、UIを大いに磨きました。
終了の約2時間前に、サーバーがクラッシュし、組み込みのpythonサーバーによってゲームが配布されたことが判明しました。 すぐにnginxを上げて嬉しかった。
終了の30分前に、Safariでアプリケーションを開いたところ、そこでは一般に非アクティブであることがわかりました(ブロックの回転は機能しませんでした)。
終了の15分前に、勝利のためにサウンドが機能することを望みませんでした(明らかに、ClojureScriptコンパイラに問題が再びありました)。このすべてが著しく追加されたアドレナリンです。
だから、3時間で多かれ少なかれ動作するバージョンを持っているとしても、最後の数分間を楽に過ごしました。
そして、これがリリースバージョンを開始し、3つの緑色のチェックマークを取得したまさにその瞬間です。つまり、必要なすべてを行った=)
![画像](https://habrastorage.org/files/f67/3f5/d10/f673f5d103c44c3db074a8721b291f80.png)
結論の代わりに
![画像](https://habrastorage.org/files/827/c1e/919/827c1e9192104b528d057516eaec0701.jpg)
私たちは、 二人にとって楽しいゲームをしたと信じています。 うまくいかなかったとしても、私たちは非常に多くの楽しみを経験しました。 ここでプロジェクトのソースを確認できます。投票する場合はこちらをご覧ください。
公開投票の現在のステータスでソートされたプロジェクトのリストは、 こことここで表示できます 。 これらのリストをご覧になることをお勧めします。プロジェクトの中には、非常にまともな、おもしろくて便利なものがあります。
今年は、 Alexander Solovyov (FRPとClojureについてのこの素晴らしいプレゼンテーションから彼を知ることができます)、 Funstructorプロジェクトチーム 、およびマイルストーンのレポートをすでに読むことができます。
また、Clojureへの関心を高いレベルで維持してくれたAlexander Solovyov ingspreeとtonsky Nikky Prokopov、およびJetBrainsで開催されたClojureワークショップについてDmitry Groshev si14 、 Nikolai Ryzhikov 、 Mikhail Lapshinに感謝します。
このハッカソンで素晴らしい会社を作ってくれたJulia Belyaeva juliette氏 、Seryozha Serebryakov megaserg氏 、Andrei Siunov 氏にも感謝します。 素晴らしい会社でのハッカソン-すばらしい!