Thursday, September 20, 2012

Git: Как пофиксить detached HEAD

Если git при комите ругается, что у вас detached HEAD, то пофиксить можно 4-мя командами:

git branch temp
git checkout temp
git branch -f master temp
git checkout master

И, опционально,
git branch -d temp

Что при этом происходит
1. создаем временную ветку с текущего положения HEAD
2. переключаемся на временную ветку
3. сбросить master до позиции в temp
4. переключиться на мастер
5. удалить временную ветку

Tuesday, September 18, 2012

Tetris coding dojo. Включаем мозг. Включение #0.

О чем это

Сейчас трудно найти программиста, который не знал бы, что такое ТДД или рефакторинг. Трудно найти такого, который еще и применял бы эти практики в жизни. Мне, например, повезло и я ощутил полезность всего спектра так называемых "инженерных практик" в реальной разработке. Многие ребята не могут похвастаться таким везением. Естественно, что не попробовав применить, например, ТДД на практике, сложно сделать какой-нибудь вывод о его полезности.
Конечно же есть масса тренингов по инженерным практикам. Но проблема в том, что практические задания на  подобных мероприятиях довольно простые. На них мы можем только отработать базовые навыки. К тому же приходится давать довольно много теории, рассматривать различныые варианты решения задачи и подводить слушателей к правильным теоретическим выводам. Не хватает практического подтверждения (или опровержения :)) правильности сделанных выводов.
Решение этой проблемы пришло само собой:

Tetris Coding dojo

Вообще Coding dojo - отличное и веселое мероприятие. Мы (я и Саша Баглай) подумали, что это подходящий формат для того, чтобы попрактиковаться в применении своих мозгов навыков в инженерных практиках. Мы одолжили идею coding dojo и сделали свой фреймворк.
За основу взяли известную всем игру - тетрис. Будем учить компьютер играть в тетрис! Мало того, мы еще будем соревноваться в том, кто круче это сделает :)

Думаю, что лучше один раз увидеть, чем написать 100500 слов описания.

Пробное включение

Недавно мы с Сашей попробовали сами написать код управления фигурками. Это мероприятие выбило нас из жизни часа на 4 :). В результате пофиксили несколько багов во фреймворке. Я же научился расставлять "палочки" и "квадратики", сделал несколько небольших рефакторингов и окончательно убедился, что я тестозависим :).

Код тетриса лежит на гитхабе, написан на java. Запускается одной командой (mvn jetty:run). Чуть позже напишу подробную инструкцию (если не поленюсь:)). Велкам с коментами, пожеланиями и участием.

Saturday, September 01, 2012

Вспомнил детство : ZX Spectrum, деревянные игрушки...

Говорят, что нереализованные детские мечты нужно осуществлять, ибо они как-то там мешают во взрослой жизни. Так вот, когда деревья были больше, трава зеленее, а самая навороченная компьютерная игра требовала 48Кб памяти и 0.8 Мгц частоты ЦПУ, у меня была идея фикс - победить злостных инопланетянских роботов-захватчиков в стратегической реал-тайм (!) игрушке "Nether Earth". Я бился в нее сутками, но эти гады все равно беспощадно уничтожали мою базу. Естественно, что это сказывалось на моем эмоциональном состоянии, успеваемости в школе и вообще надо было утереть нос моему товарищу, который эту игру якобы прошел.

Настало время реванша. 

Первым делом нужен эмулятор ZX Spectrum. Их как оказалось довольно много, вот хотя бы список эмуляторов под Видновс.
Но мне не нужны легкие пути, я взял эмулятор под Java  - JSpeccy :). Не беда, что сайт разработчика на испанском, зато он регулярно выпускает обновления (последнее было в июне 2012 года!) в отличие от остальных. 

Найти саму игру тоже оказалось несложно. На сайте Bit 16 я быстро нашел Nether Eath.

Запустил как обычно из командной строки
java -jar JSpeccy.jar 

Круто - появилась строка ввода! Правда в ZX Spectrum она замаскирована под название компании - разработчика ;)

Дальше в меню File->Load... выбираю файл образа игры

Ожидал, что игрушка сразу запустится, но этого, естественно, не произошло :). В Синклере игры считывались с магнитофона, для чего нужно ввести команду LOAD "". Магическое нажатие на клавишу J выдало команду LOAD, а <Ctrl> + P вывел двойную кавычку.

Нажал на <ENTER> и пошла загрузка. Жаль, что звук с магнитофона не сэмулировали :)

Чудесная заставка, офигительный звук :). Без всяких звуковых карт и музыкальных сопроцессоров! Частота колебаний динамика программируется ручками :).


Запрограммировал клавиши, жму старт. Вот она - сила 3D графики! Никаких графических сопроцессоров и видеокарт. Почти "реал 3d" :).

На экране
1. Контрольный модуль, может летать и садиться на базу
2. База

На базе можно создавать роботов из имеющихся деталей. Количество деталей ограничено и поставляется заводами.

Создал первого супер робота

И выпустил его из завода

Роботом можно управлять непосредственно или запрограммировать его поведение.


Варианты поведения
- Пройти вперед / назад
- Найти и уничтожить вражеского робота / фабрику / вражескую базу
- Найти и захватить нейтральную  фабрику / вражескую фабрику / вражескую базу

Я задал команду захватить завод. После того, как робот постоит на заводе 10 сек, завод считается захваченным, о чем свидетельствует появившийсе вверху слева американский флаг :).

Что особенно меня убивало в этой игре - так это управление во время боя. Для того, чтобы повернуться нужно выбрать "Move robot", а дойдя до огневой позиции успеть остановить робота, выбрать оружие для стрельбы и стрельнуть. Жутко неудобно, особенно когда по тебе стреляют несколько вражеских машин.

Вот такая нехитрая игрушка. Для середины 80х это была мега крутая игра. А сейчас даже не верится, что на 48кб можно разместить саму игру с "3д" графикой и звуком.

Кстати, вчера играл 3 часа подряд, но мою базу опять захватили подлые инопланетские роботы :(