Sunday 6 March 2016

Опыт с codewars.com

По совету коллеги зарегался на www.codewars.com. Оказалось довольно интересным проектом. Ресурс представляет школу для программистов, по типу японских школ боевых искусств - с поясами и катами. Выполняя задачи(ката) ты зарабатываешь очки и постепенно движешься по иерархии поясов и кю(ученические ступени). С каждым уровне задачи становятся все труднее или трудозатратнее. В основном ката имеют академический уклон, что-то наподобие задач с олимпиад по программированию, то есть основной упор сделан на алгоритмы и математику, но на начальных этапах попадаются задачи на синтаксис языка. Кстати проект поддерживает целую кучу популярных языков программирования, вот только основные из них:- java, pyton, rybu, javascript, C#. Некоторые задачи имеются только для какого-то конкретного языка.

Я честно говоря соскучился по такого рода задачам, ежедневные задачи редко требуют таких вещей, и я с упоением 2 недели подряд по выходным высунув язык кодил, читал, читал и кодил. Сейчас накал придется немного поуменьшить и заняться более насущными вещами, но заходить буду обязательно. Рекомендую его тем кому нравится спортивное программирование, а особенно тем кто учится в школе, институте. Уверен что для них этот опыт будет очень неплохой базой в дальнейшем.

Thursday 25 February 2016

Крестики-нолики на Java

Ради развлечения запилил игру крестики-нолики с сетевым режимом и разместил на гите.
Целью было пощупать JavaFx и Kryo серилизацию в деле. Ну и плюс конечно, порадовать детей тестированием.

Разработка происходила в несколько этапов:
  1. собственно сам алгоритм просчета ходов. Алгоритм разрабатывался в лучших традициях TDD, то есть сначала тесты потом код. Получалось быстро.
  2. UI часть. JavaFx показала себя современной и интересной технологией. Большое количество готовых компонентов, приятное отображение, хорошее масштабирование на больших мониторах. Кроме того упор сразу делается на MVC паттерн. UI отдельно, контроллеры отдельно. Понятно что только конкретно у меня только одна форма и несколько диалогов, но по сравнению со swing'ом значительно приятней.
  3. сетевой режим. Чтобы меньше было морочиться с передачей объектов, то организовал это дело на основе проекта KryoNet. Клиент с сервером между собой общаются сериализированными объектами. Эта часть отняла самую большую часть времени из-за ручного тестирования.
Возможности для улучшения/баги:
  • Уровень сложности не выбирается, а у компьютера выиграть невозможно. Максимум ничья. Вычитал в сети что настраивать сложность просто ограничением просчета количества ходов вперед проблематично. Даже на небольших значениях компьютер будет рвать человека как грелку. Поэтому пришлось бы искать значения эмпирически, то есть много тестить руками. А кроме того и вводить "ходы от балды". Поэтому пилить эту фичу не стал.
  • Сетевой режим не гибкий, из-за того что лень было полностью погружаться в продумывание протокола обмена.
  • Иногда выскакивают баги в сетевом режиме.
Огрехи конечно есть, но игра работает вполне себе нормально, и в сетевом, и локальном режиме. В общем, получилось прикольно - побаловался, повспоминал время когда пилил игрухи на Паскале в 90-е, код выложил на гите, модуль TicTacToe .