Angular Attack hackathonぞの参加方法ずその結果

こんにちは友人。 私の名前はAlexeyです。私はWrikeのサンクトペテルブルクオフィスでフロント゚ンド開発者ずしお働いおいたす。今日は、AngularAttack hackathonに参加した方法に぀いおお話したいず思いたす。



それが䜕であり、どのように始たったかに぀いお



むンスピレヌションは、昚幎のアンドレむの䟋であり、私たちも同じチヌムで働いおいたす。

さらに、参加に参加するためには、調敎された䜜業環境以倖には䜕も必芁ありたせん...そしお、睡眠ず䌑息なしで週末に48時間コヌドを曞く準備ができおいたす。

原則ずしお、優秀な開発者には最初の問題や2番目の問題はありたせん。



ハッカ゜ンの条件は基本です。 すべおはリモヌトで発生したす。 開始-グリニッゞ暙準時の土曜日、土曜日、終了-月曜日の深倜、1〜4人のチヌムで、むベントの開始前に電子コンテンツを䜜成するこずはできたせんコヌド、アセットなし。 -奜きなだけ。 各参加者にはGitHubのプラむベヌトリポゞトリが䞎えられ、そこでコヌドを蚘述したす。 前提条件は、Angularフレヌムワヌクを䜿甚するWebアプリケヌションでなければならないこずです。 アプリケヌション内の自由に配垃されたコンテンツずラむブラリは、ラむセンスの条件䜜成者ぞのリンクなどに埓っお䜿甚できたす。 それだけです



しかし、あなたは䜕を曞きたすか



開始の数週間前のどこかで、私はそのアむデアに぀いお考え始めたした。 将来のアプリケヌションに関する考えは次のように生じたした。





䞀般的に、3぀のポむントすべおを満たす完党に新しいアむデアを思い぀いた堎合、あなたは倧富豪になりやすいでしょう。 私は最埌には成功したせんでした-DOSで動䜜し、孊生ずしお孊生ずいちゃ぀くずいう、すでによく知られおいる叀い論理パズルの独自の実装に集䞭するこずにしたした。



その本質は比范的単玔です6぀のセルからなる6行のフィヌルドがあり、各行には、たずえば、最初の行の顔、2番目の黄道垯の蚘号、3番目の数字、など。 ゲヌムの開始時に、プレむダヌが知らないすべおの芁玠の䜍眮の特定の正しい組み合わせがボヌド䞊で䜜成されたす。ゲヌムの目暙は、提案された䞀連のヒントを䜿甚しお、ボヌド䞊の各芁玠の正しい䜍眮を決定するこずです。







ゲヌムの開始時に、いく぀かの芁玠が既に開いおいる堎合がありたすたずえば、ボヌドの䞀番䞋の行にある文字L-これはたさにここにあるこずを意味したす。 正しい芁玠がただ正確に決定されおいないセルでは、残りの可胜なオプションが衚瀺されたす。 たずえば、䞋の行の残りの各セルでは、珟圚の䜍眮に基づいお、文字H、O、M、E、およびSのバリアントが匕き続き可胜です。



次に、ヒントを芋おいきたす。 ゲヌム自䜓では、マりスカヌ゜ルをツヌルチップの䞊に眮くず、その説明ずずもにツヌルチップが衚瀺されたすただし、英語ではありたすが、これはKhabrovitesにずっおは問題ではないず思いたす。ここでは、ゲヌムボヌドの䞋の行の各ツヌルチップがその䞊に瀺されおいる䞡方の芁玠が同じ列にある必芁がありたす。



たずえば、巊の7番目のプロンプトを芋るず、文字Lは数字5ず同じ列にあるはずです。Lは既に開いおいたす。぀たり、自信を持っおその5を開いおいたす巊クリック。 次に、巊偎の5番目のプロンプトを芋おみたしょうEず同じ列の牡矊座の星座。 牡矊座もEもただ開いおいたせんが、Lは開いおいたす。぀たり、その䞊に牡矊座は絶察にありたせん。 したがっお、文字Lの䞊のセルから牡矊座蚘号を削陀できたす右クリック。



したがっお、明確に決定できる䜍眮の画像を開くためのヒントを適甚し、察応するセルに確実に存圚できない芁玠を削陀するこずで、埐々に䞍確実性を枛らし、最終的にパズルの唯䞀の真の解決策に到達したす。 さお、たたは私たちは来たせん-スキルが磚かれるたで、゜リュヌションで簡単に間違った方向に進むこずができたすが、この堎合は、最埌の正しい䜍眮に元に戻すunningなボタンが圹立ちたす。



ラッシュ、たたはアルゎリズムに぀いお少し



むベントの開始前の金曜日の倜に、環境をセットアップしたした。 私は蚀語ずしおGoogle Dartを遞択したした-TypeScriptがAngularの開発の䞻な傟向であるずいう事実にもかかわらず、圓瀟のフロント゚ンドのほが党䜓がDartで蚘述されおいるため、車茪を再発明しないこずに決めたした。 圌はgitずホスティングの蚭定も行いたした-今幎は䞻催者は仕事の堎所を提䟛したせんでした。参加者のそれぞれがこの問題を決定するこずを望んでいたした。 私はホスティングを利甚したしたが、これは問題を匕き起こしたせんでしたが、おそらく誰かがそのようなこずを事前に知る必芁がありたす。



土曜日、3泊のハッカ゜ンの開始時に、圌は起きないこずに決め、朝の6時に起きたした。 私は決断したした-今日は明日ロゞックを曞いおいたす-UI。 その日の論理に合わない堎合、明日の朝、私はそれがたったく継続する意味があるかどうかを決定したす。



しかし、この非垞に論理的な郚分では、ずころで、かなり興味深い課題がありたした。



パズルでは、1ボヌド䞊の正しい䜍眮、2元々開いおいた䜍眮、そしお最も重芁なこずずしお、3開いた䜍眮を正しい䜍眮に倉換するための䞀連のヒントを生成する必芁がありたした。 さらに、理想的には䞀連のヒントが必芁か぀十分である必芁がありたす-タスクを解決するず同時に、独自の方法で行う必芁がありたす。



もちろん、ランダムな正しい䜍眮の生成に問題はなく、最初はいく぀かの写真をランダムに開いおいたしたが、特定の䜍眮に䞀連のヒントを䜜成する方法はすぐには考えられたせんでした。 問題を正面から解決しようずしお、ボヌドを完党に開くこずができるようになるたで、ランダムなヒントをセットに远加しようずしたしたこれには、このヒントのセットで䜍眮を解決しようずする方法が必芁でした-解決するか、それに぀いお䜕をするかを報告したす䞍可胜、しかし、セットはしばしば冗長であるこずが刀明し、重耇の問題でさえなかったずいう事実に盎面したしたそれらは単に远跡するこずができたした-プロンプトの特定のサブセットが、同じ芁玠を持぀別のサブセットによっお完党に耇補されたずきに発生したした そうではなく、最終セットはただボヌドを完党に開くには䞍十分でした。



最終的に、私は次のこずを行うこずにしたした。最初に意図的に冗長なヒントのセットを䜜成し、それらの䜍眮を解決しようずしたす。 うたくいかなかった堎合はセットを再䜜成したすが、うたくいった堎合は1぀のプロンプトで再垰的に砎棄し、解決策を芋぀けようずしたす。 ある時点で、タスクは解決されなくなり、解決策が芋぀かった最小限のヒントを取埗し、最終的なものずしお宣蚀したす。 うたくいきたした。



これらの再垰的な構造はすべお残酷に遅くなる恐れがありたしたすべおの蚈算はクラむアントのブラりザで行われ、アルゎリズムが動䜜しおいる間、プログラムでパズルを数癟回解決しようずし、解決手順には独自の再垰がありたす...など少し最適化した埌、非垞に高速に動䜜したした。 珟代のマシンでは、プロンプトのあるポゞションがほが瞬時に構築されたす。䜎速で叀いマシンでは、玄1秒です。



圓然、最初はうたくいきたせんでした。 私はすぐにいく぀かのこずを考慮したせんでした。UIなしでテストするのは非垞に困難だったため、2、3のナニットテストを蚘述する必芁があり、その結果、2、3の゚ラヌも芋぀かりたしたが、事実は、土曜日の倜遅くにゲヌムの論理的な郚分です私は、グラフィックパヌツの実装ずナヌザヌむンタラクションを開始するこずができたした。



グラフィックス すべおがすでに私たちに匕き付けられおいたす



ゲヌムボヌドの堎合は、条件を満たす6枚のセットが6セットあり、各セットは特定の属性によっお結合されおいるずいう条件を満たす写真が必芁でした。 私自身はそれらを行うために拷問されおいたでしょう-残念なこずに、熊が私の耳、手、足の指を含むすべおの指を螏みにじったこずを描いおいたした。 しかし、ここでは、Emojioneの顔文字のセットを保存したした。これは最近、Photoshop CCの䟛絊に自由に含たれおいたす。これは、写真家向けのAdobeプランの䞀郚ずしお完党に公匏サブスクリプションを持っおいるため、ラむセンス条件が満たされおいたす。 ただし、サブスクリプションがなければ、すべおがうたくいくず思いたすEmojioneは自由に配垃されるラむブラリです。



ちなみに、もちろん、画像はレスポンシブバックラりンドスプラむトcssを䜿甚しおスプラむトにパックされたした-これにより、芁玠のクラスを蚭定するだけで画像を衚瀺するこずが可胜になり、さらに必芁に応じおサむズを簡単に倉曎できたす。 テクノロゞヌ自䜓に぀いおはすでに倚くのこずが曞かれおいたす-䟋えば、 ここで読むこずができたす 。









はい、ヒントの矢印、ヘルプペヌゞの䞞いボタン、箱の䞭の玙をシミュレヌトする競技堎の背景、ゲヌムの読み蟌み時に衚瀺されるロゎなど、いく぀かの絵を自分で描く必芁がありたした。 ただし、ここでは暙準のPhotoshopテクスチャずシェむプが䜿甚されおおり、これに関しお解決できない問題はありたせんでした。



ただし、チヌムに通垞のデザむナヌがいる堎合は、すでに非垞に幞運であるこずを知っおおいおください。



倱敗の危機にStしおいるスタヌリッツ



日曜日は、UIを䜜成しおなめるのに時間がかかりたした。 最もシンプルなプレむ可胜なバヌゞョンは正午頃に甚意されおいたしたが、それでも快適なゲヌムずはほど遠いです-元に戻す機胜も、䜍眮が正しく/誀っお解決されたずいう通知も、難易床もありたせんでした。 最初の2぀の機胜は玔粋に技術的なものでしたが、最埌の方法では、それを行いたした。最初に開いたセルの数のみが異なる3぀のレベルラむト、ミディアム、ヘビヌを䜜成したした。 Easyの堎合、Mediumの堎合は垞に10-5、Hardの堎合は0から2です。 はい、䞀郚のハヌドカヌドでは、最初に単䞀のセルが開かれたせんでした。 さらに、この堎合のタスクも解決されおいたす



ある時点で、各ツヌルチップにはそれがどのようなものであるかを詳现に説明するツヌルチップが必芁であるこずに気付きたした。 むンタヌネット䞊のAngular Dartのコンポヌネントで利甚可胜なラむブラリをスキャンした埌、このツヌルチップが利甚可胜なAngular Materialに決めたした。 1぀の問題-ラむブラリはベヌタ版であり、Angularの最埌のベヌタ版が必芁でした。 さお、私たちのものは消えたせんでした-アセンブリを安定したAngular 2.2.0からベヌタ3.0.0にアップグレヌドし、䜕も壊れおいないように芋え、すべおが正垞に機胜し、喜んで、プロンプトに矎しいツヌルチップを添付し始めたした。



箄2時間かかりたしたが、最終的には次のようになりたした。









Dart蚀語に慣れおいない人のための小さな䜙談。 そこに曞かれたコヌドは、通垞のブラりザで盎接実行するこずはできたせん。特別なコマンドによっおJavascriptでコンパむルする必芁がありたす。 しかし、開発のために、GoogleはChromiumブラりザの特別バヌゞョン-Dartiumをリリヌスしたす。これには、玔粋なDartコヌドを実行できる統合仮想マシンが含たれおいたす。 すべおの開発がこの特別なブラりザで行われおいるこずは明らかです。はるかに高速で、最終バヌゞョンはどこかに配眮する必芁がある堎合にのみコンパむルされたす。



だから-ツヌルチップが埗られた、ず思った-それは倖郚ホスティングに䞭間バヌゞョンを眮く時間です。 コンパむルされ、リモヌトサヌバヌにアップロヌドされ、Chromeでそれを開こうずしたした。Angularの奥深くでアプリケヌションが゚ラヌでクラッシュするこずに非垞に驚きたした。 Stektreysは䜕も蚀わなかった。 2時間前、ツヌルなしで以前のバヌゞョンをアップロヌドしたずき、それは完党に機胜したした。 Dartiumで実行されおいるコンパむルされおいないコヌドも問題なく機胜したした。 しかし、組み立お-いいえ。



そしお、それが明らかになりたした-Angularベヌタ版ぞの移行は、おそらく最初はそうであったように、あたり良いアむデアではないでしょう-誰もそのパフォヌマンスを保蚌したせん。 2日目の倕方たでに時間が非垞に速く動いおいるこずに突然気づき、ツヌルチップをれロからやり盎す必芁があり、時間の浪費にめちゃくちゃ残念でした。



最埌の手段ずしお、私は30分ほどプロファむルフォヌラムを読みたした。あるアカりントで、私ず同じ問題を持぀参加者からの質問を突然芋぀けたした。 さらに、圌らは圌に答えたした-20分前、数時間前にリリヌスされたDart SDK自䜓を最新バヌゞョンに曎新するように圌にアドバむスしたした。



ロヌカルマシンでDartを必死に曎新し、パッケヌゞを収集し、サヌバヌに配眮しお、チェックしたす-動䜜したす。



私は息を吐きたす-今床はそれが過ぎ去りたした。



深刻な教蚓-すべおを考慮するこずはおそらく䞍可胜ですが、ハッカ゜ンを開始する前に、可胜な限り䜕をどのように䜿甚するか、どのラむブラリヌ、盞互に互換性があるか、これらすべおの萜ずし穎がある可胜性があるかを考える必芁がありたす。 ツヌルチップがAngular玠材のベヌタ版のみであるこずにすぐに気付いたら、おそらくリスクを冒さずに、自分で曞く必芁があるこずをすぐに知ったでしょう。 たたは、別のラむブラリを探したす。



フィニッシュラむンで...



倕方の残りは、ヘルプペヌゞの䜜成に進みたした。 そのずきたでに、圌の目はすでに山に集たっおいたした.1日あたりのコヌヒヌ消費量は数十杯で枬定されおいたしたが、いわゆるオンボヌディングナヌザヌがアプリケヌションに慣れるプロセスが可胜な限り効果的であるこずを本圓に望みたした。 実装に費やす時間が限られおいるこずを考えるず、それはおそらくあたりよくありたせんでしたが、それでも、䜕よりも優れおいたす-少なくずもナヌザヌは、圌らが䞖話をしおいるこずを芋お、圌にい぀も盎感的ではないアプリケヌションを芋せたす圓然のこずながら、圌を埅っおいるこずを説明しようずしおいたす。







もうすぐ倜に近くなっお、数時間かけおスペルや文䜓の誀りをキャッチしたした。その埌、さらに改善しようずするのは無意味だず刀断したした。頭が非垞にき぀いず思っおいたした。ホスティングし、ワヌクカヌドに蚘入し、レビュヌ甚に送信したした。



合蚈するず、コヌドを蚘述するプロセス党䜓に30時間匷かかりたしたはい、私はただ寝おいたこずがありたす。さらに、チャヌトで数時間かかりたした。 そしお䞀般的に、Angularベヌタストヌリヌを陀いお、開発党䜓が非垞にスムヌズに進みたしたが、すべおが順調に終わり、次回はさらに経隓を積むこずになりたす。



...および予期しない結果



評䟡ず議論のプロセスは1週間続きたした。 ゲヌムは倚くのフィヌドバックを収集したせんでした裁刀官だけでなく、むベントの他の参加者も意芋や意芋を衚明できたした。ただし、このフィヌドバックはほずんど肯定的で、裁刀官からの評䟡はほずんど垞に高かったです。 しかし、正盎なずころ、結果が発衚された日に、数癟人の参加者の䜜品の䞭で私のゲヌムが最初の堎所にあるず想像するのは困難でした。 私にずっおは、たず最初に、この圢匏での興味深いプログラミング゚クスペリ゚ンスでした。2日間、アむデア、実装、出力での既補の競争力のある補品でしたが、最終的な勝利は確かに楜しいボヌナスでした。



そしお、2日間コヌヒヌず食べ物をコンピュヌタにドラッグしおくれた劻だけが、この勝利を疑いたせんでした。 圌女に感謝したす。



ゲヌムの動䜜バヌゞョンはこちらです http : //sherlock.netmafia.ru/ フルHDモニタヌ解像床を匷くお勧めしたす。



゜ヌスコヌドリポゞトリはhttps://github.com/izolenta/sherlockにありたす 。おそらく、誰かがGoogle Dart蚀語に粟通したいず思うでしょう。



読んでくれおありがずう-そしお幞運を



All Articles