Сделал простой, но рабочий BufferedImageOp фильтр, перекрашивающий спрайты Bomberman-а.
четверг, 23 августа 2012 г.
понедельник, 20 августа 2012 г.
Bombermen на Java: часть 1
Я вернулся к созданию своей игры. В данный момент я хочу сделать простого Bomberman-а. В идеале с AI-ботами, игрой hot-seat и по сети, и множеством мелочей, которые есть в различных реализациях.
суббота, 14 июля 2012 г.
среда, 27 июня 2012 г.
Переадресация с hello-page на default-servlet
На работе возникла задача.
Исходные данные:
Есть приложение, которое содержит несколько сервлетов, привязанных к своим адресам:
"/appName/servlet1/*"
"/appName/servlet2/*"
etc.
В корне приложения "/appName/" лежит index.html - hello-страница, не содержащая ничего полезного.
Задача:
страницу приветствия нужно убрать, обращение к "/appName/" должно переадресовываться на сервлет по-умолчанию, находящийся по адресу "/appName/config/"
Исходные данные:
Есть приложение, которое содержит несколько сервлетов, привязанных к своим адресам:
"/appName/servlet1/*"
"/appName/servlet2/*"
etc.
В корне приложения "/appName/" лежит index.html - hello-страница, не содержащая ничего полезного.
Задача:
страницу приветствия нужно убрать, обращение к "/appName/" должно переадресовываться на сервлет по-умолчанию, находящийся по адресу "/appName/config/"
пятница, 15 июня 2012 г.
Возможности Eclipse
Я уже 5 лет работаю с Eclipse-ом, умею достаточно эффективно его использовать. Но мои знания поверхностны во многих областях, так как получены методом научного тыка . Потому я решил основательно разобраться, что Eclipse умеет делать, для чего впервые открыл официальный мануал. Документ, конечно же, зануден, но в нем описано много вещей, которые я не знал как использовать.
среда, 13 июня 2012 г.
Обновление блога
Я не публиковал ничего в течении месяца, все интересное скидывал в черновики. Там уже накопилось заметок 20 и я буду постепенно формировать сырые мысли в пригодную для прочтения форму.
Кроме того я почистил блог, убрал половину тегов, оставшиеся привел к единой структуре, сделал страницу "О блоге", в которой выложил описания что именно лежит под каждым из тегов.
Кроме того я почистил блог, убрал половину тегов, оставшиеся привел к единой структуре, сделал страницу "О блоге", в которой выложил описания что именно лежит под каждым из тегов.
среда, 21 марта 2012 г.
Документация к проектам - формат Wiki
15 минут назад поставил MediaWiki на локальную машину. Домашняя wiki мне нужна не для праздного любопытства. Я давно искал инструмент для ведения документации к своим проектам и Wiki прекрасно подходит для этого. Другие известные мне решения - txt/doc-документ, записи на бумаге или в отдельном блокноте - меня не устраивали. Очень благодарен автору статьи Lone game developer за эту идею.
вторник, 13 марта 2012 г.
Обратно к 3D графике
Пересмотрел свое отношение к 3D графике. Раньше мне казалось, что это технология, от которой можно получить пользу только имея команду маститых художников, которые месяцами будут рисовать модели с кучей полигонов. Мое мнение изменилось после двух вещей:
среда, 7 марта 2012 г.
Пара хороших книг
Отличная книга по языку C (poor C, никакого C++):
http://publications.gbdirect.co.uk/c_book/
Я искал информацию об Input/Output на C - написано ровно столько, сколько нужно. Простая, лаконичная книга.
Вторая книга из другой области - она об искусстве вести переговоры:
"Договориться можно обо всем! Как добиваться максимума в любых переговорах"
Автор: Гэвин Кеннеди, как пишет Ozon "ведущий специалист в мире по переговорам". Верю, мне эта книга на многое просто открыла глаза.
Что интересно, в книге - рассказаны достаточно простые и понятные вещи, которые будут полезны отнюдь не только "большим боссам", но и любому человеку во множестве жизненных ситуаций. Рекомендую :)
http://publications.gbdirect.co.uk/c_book/
Я искал информацию об Input/Output на C - написано ровно столько, сколько нужно. Простая, лаконичная книга.
Вторая книга из другой области - она об искусстве вести переговоры:
"Договориться можно обо всем! Как добиваться максимума в любых переговорах"
Автор: Гэвин Кеннеди, как пишет Ozon "ведущий специалист в мире по переговорам". Верю, мне эта книга на многое просто открыла глаза.
Что интересно, в книге - рассказаны достаточно простые и понятные вещи, которые будут полезны отнюдь не только "большим боссам", но и любому человеку во множестве жизненных ситуаций. Рекомендую :)
четверг, 1 марта 2012 г.
DOU - Креш-тест резюме
На DOU сейчас проводиться интересный проект - "Креш-тест резюме". Можно прислать резюме и солидный человек разберет его плюсы и минусы. Результаты регулярно публикуются в открытом доступе.
понедельник, 27 февраля 2012 г.
Binding: Go & C
Я уже писал о своем интересе к Go. Чуть больше недели назад поставил Ubuntu (с помощью wubi), и начал разбираться как можно написать работающий Helloworld, в котором С-шная функция будет вызываться кодом написанным на Go.
пятница, 17 февраля 2012 г.
Bret Victor - Inventing on Principle
Прекрасное выступление. Мне очень понравились как прикладные примеры, показанные вначале (слыхал раньше об отладке переменных игры на лету, но не видел в действии), так и выводы в конце, предлагающие переосмыслить цели в жизни.
http://vimeo.com/36579366
http://vimeo.com/36579366
четверг, 16 февраля 2012 г.
Конференции: Time Management, Agile
Я регистрировался на 2 онлайн-конференции, проводившиеся на сайте itbrunch.com.ua:
Но доклады, которые на них были записаны можно посмотреть в формате слайд-шоу (звук + слайды):
http://itbrunch.com.ua/schedule/
- «В гостях у Agile практиков»
- «Time Management»
Но доклады, которые на них были записаны можно посмотреть в формате слайд-шоу (звук + слайды):
http://itbrunch.com.ua/schedule/
О логировании
Статья, после которой я научился эффективно использовать логи:
http://www.javacodegeeks.com/2011/01/10-tips-proper-application-logging.html
Отличное описано:
http://www.javacodegeeks.com/2011/01/10-tips-proper-application-logging.html
Отличное описано:
- для каких случаев какие уровни нужно использовать;
- что, как и когда выводить;
- возможности паттернов логгирования.
Perf4J is to System.currentTimeMillis() as log4j is to System.out.println()Нужно будет попробовать.
вторник, 14 февраля 2012 г.
NothingHandler, AnythingHandler
Хочу поделится анти-паттерном, которым я очень увлекался полгода назад. На днях для него придумалась классная формулировка: "Писать nothing_ и anything_ handler-ы".
четверг, 9 февраля 2012 г.
Go, OpenGL
Долго пытался собрать в кучу все, о чем хотелось рассказать - никак в цельный пост с единой темой не складывалось. Потому, просто напишу чем я занимался последнюю неделю:
понедельник, 30 января 2012 г.
Javascript: передать функцию с заданными значениями аргументов
Нужно передать функцию, которая должна быть выполнена с определенными аргументами? Оберни ее в анонимную функцию:
someGuiElement.onclick = alert("Hello world");
// будет сразу выполнена - и onclick будет присвоен результат выполнения alert("Hello world") - т.е. undefined, так как alert() ничего не возвращает
someGuiElement.onclick = function()) {alert("Hello world") };
// а так все ок
someGuiElement.onclick = alert("Hello world");
// будет сразу выполнена - и onclick будет присвоен результат выполнения alert("Hello world") - т.е. undefined, так как alert() ничего не возвращает
someGuiElement.onclick = function()) {alert("Hello world") };
// а так все ок
среда, 25 января 2012 г.
Finite-state machine GUI с помощью JavaScript
В данный момент я делаю web-gui для одной мощной и полезной, но не очень дружелюбной к пользователю проги. Начинка уже более-менее нормально работает, дальше пришла пора улучшать интерфейс.
среда, 18 января 2012 г.
JUnit, форматирование логов
Захотелось немного порядка и эстетики в логах юнит-тестов - написал базовый для всех юнит-тестов класс, который строит вот такие таблички:
Ссылка на исходник.
+----------------------------------------+---------+Очень классно и удобно - всего две строки в каждом тесте, и все готово:
| TEST | PASSED? |
+----------------------------------------+---------+
|RendererFilter.lastNthOccurence | NO |
+----------------------------------------+---------+
|RendererFilter.PathResolver | YES |
+----------------------------------------+---------+
testNameIs("TestName"); //в начале
...
testPassed(); // в концеНа мой взгляд этого достаточно - по таблице можно быстро посмотреть что не прошло, и искать подробности ниже в логах Exception-ов JUnit-а.
Ссылка на исходник.
пятница, 13 января 2012 г.
Required Projects в Eclipse
Хочу дать пояснения еще одному тегу:
dev_tools я буду использовать как обобщение для всех возможных IDE, редакторов, профайлеров и прочих программ, которые хоть сами написать код и не напишут, но в работе могут помочь.
В Eclipse код к проекту можно подключить различными способами:
dev_tools я буду использовать как обобщение для всех возможных IDE, редакторов, профайлеров и прочих программ, которые хоть сами написать код и не напишут, но в работе могут помочь.
В Eclipse код к проекту можно подключить различными способами:
- добавить нужные пакеты к исходникам;
- добавить Jar;
- добавив Required Project.
вторник, 10 января 2012 г.
Когда тянет использовать instanseof ...
Строить логику на проверках к какому классу принадлежит обьект - плохо. Аргументы я не обдумывал, но в утверждении интуитивно уверен.
Один из вариантов "хорошего" подхода: Liskov substitution principle. Вкратце - все public методы должны быть еще в самом корне иерархии. Все что выше:
1) должно любым способом их реализовывать;
2) не должно добавлять новых открытых методов и полей.
В чем плюс - если в чьем-то коде есть метод doSomethingWith(SomeBaseClass param) - он никогда не сломается, какой бы наследник SomeBaseClass ни передавался.
Но иногда надо, чтобы наследники таки отличались от базового класса. Как же тогда использовать эти возможности там, где мы получаем BaseClass?
Один из вариантов "хорошего" подхода: Liskov substitution principle. Вкратце - все public методы должны быть еще в самом корне иерархии. Все что выше:
1) должно любым способом их реализовывать;
2) не должно добавлять новых открытых методов и полей.
В чем плюс - если в чьем-то коде есть метод doSomethingWith(SomeBaseClass param) - он никогда не сломается, какой бы наследник SomeBaseClass ни передавался.
Но иногда надо, чтобы наследники таки отличались от базового класса. Как же тогда использовать эти возможности там, где мы получаем BaseClass?
Подписаться на:
Комментарии (Atom)