Archive for Декабрь 2008

Игры для книги

Декабрь 29, 2008

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

  • Змейка. Аркадная игра. Можно реализовать как одиночную, так и сетевую игру. Очень легко можно нарашивать функционал: бонусы, уровни, типы игры. Это позволит поупрожняться в проектировании игры, устойчивой к изменениям.
  • Buggle Connect. Даже не знаю, к какому жанру отнести данную игру. Классическая игра для мультиплеера. Но можно поупрожняться в создании искусственного интеллекта (AI).
  • BraveQuest. В данной игре представляет интерес именно система боя, которую довольно легко реализовать. Игра может быть как сетевой, так и одиночной. Главной особенностью является то, что игрок один раз проводит настройки, а затем следит за исходом боя. Что либо помеять по ходу уже не представляется возможным. Данное обстоятельство делает её кандидатом №1 на создание online игры. Т.к. игроку надо отправить только набор своих правил, при этом нет необходимости удеживать соединение и активно обмениваться данными. Да и сжульничать в таком роде игр довольно сложно.

Продолжение следует.

Kohana что тут сказать

Декабрь 29, 2008

Читал на хабре статью Пример доски объявлений на Kohana. Скажу честно, не осилил целиком, положил в список «прочитать позже». Но вот комментарии просто жгут. Для тех, кому лень идти по ссылке, привожу эту переписку ниже

heel 28 декабря 2008, 00:42

Забавное название у CMS. Можно еще одну систему управления создать, которой пользоваться иногда для проектов на стороне и назвать ее «Kohanka» ;)

DrWeb 28 декабря 2008, 03:09

:) Дело в том, что не все знают украинский язык ;)
Для справки: «Кохана» на украинском означает «Любимая», а вот «Коханка» — «Любовница»
Так, на всякий случай ;)

kibizoidus 28 декабря 2008, 03:39

Главное — чтобы с Kohank’ой не пришлось заниматься тем, для чего обычно держат любовниц ^_^

Вот так вот :).

Книга. О чем писать то?

Декабрь 29, 2008

Уровень будуших программистов катастрофически быстро падает. Этот вывод я сделал после того, как провел половину семестра практических занятий в университете. Описывать моё мнение о причинах я сейчас не намерен. Нет настроения. А вот попытаться изменить ситуацию можно.

Что нужно для хорошего программиста? Дискусий на эту тему очень много, с чем то я согласен, с чем то нет. Но я знаю по своему личному опыту, что очень большой толчок в развитии даёт работа в паре с более продвинутыми, чем ты сам. Причем, самый лучший вариант, когда ты сидишь рядом и вы полностью произносите все свои мысли вслух, обмениваетесь идеями. Новичок, в такой ситуации, может понять, как правильно строить свои рассуждения, как их контролировать, как не зацикливаться на одной идеи, а перебирать все возможные.

Для меня таким наставником был Александр. Сначала, когда я первый раз его увидел, я подумал, что он просто сидит и ничего не  делает. О боже, как я заблуждался! Он в голове умудрялся держать всю архитектуру не маленького проекта, знал почти все ньюансы работы, следил за всеми изменениями в коде, которые, кстати, делал не только он, а еще человек 10. Но самое главное, когда он кодировал, он не «стирал пальцы о клавиатуру», не лепил символы просто так, превращая процесс набирания кода в самоцель. Нет он довольно медленно неспеша, аккуратно, изменял код. Он мог изменить половину классов проекта — и всё  работало как часы с первого раза. Любимая его фраза : «Такие горшки или громко падают или сразу становятся на место». Это значит, что если завелось, то точно заработает. Для него Hello World — написать Project Managment System используя изучаемую технологию.

Главное, что из этого всего я вынес, программист должен работать в первую очередь головой, и только потом руками. Всю рутинную работу должен делать компьютер. Не важно, какая технология, язык программирования используется (сейчас все они обладают богатыми средствами и позволяют осуществлять чтение и запись из файла), важно думать головой, уметь пользоваться предоставленными возможностями и выжимать из них всё возможное.

Но как узнать о возможностях технологии, как правильно её использовать? А может есть альтернатива? В настоящее время всё так быстро меняется, что пока ты изучаещь одну технологию, вторая потихоньку убегает вперед. А как тут справиться новичку, который только пришел в этот мир? Что ему изучать? Ответ прост. Всё изучить нет возможности, но знать, где применять ту или иную технологию, в чем плюсы и минусы определенный подходов, что выбрать программист обязнан. Ведь от выбора инстрементария зависит скорость разработки и качество конечного результата.

Разговаривая со своей учительницей по информатике Светланой Натанавной, я пришел к выводу, что на данный момент не хватает книг, котрые могли бы хоть как-то охарактериховать ситуацию современной индустрии программирования, показать почему используется именно эта технология, а не та, и т.д

Так вот, используя свой, не буду лукавить, скромный опыт в данной области, я хочу написать книгу, после прочтения которой читатель сможет хоть как-то ориентироваться в этом быстро развивающемся мире средств создания ПО.

Про что будет интересно читать и повторять? Все люди неповторимы, но все были детьми, которые в детстве познавали мир через игру. Вот и мы попытаемся перенять опыт природы. Изучать технологии, метолы и средства разработки мы будем на примере создания игр и всей сопустсвующей инфраструктуры. Ведь к каждой игре можно «прикрутить» очень много: улучшения, статистика, повторы и т.д.

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

В будущей книге будут затронуты следующие моменты:

  1. цикл создания программного продукта
  2. анализ современных средств реализации
  3. поэтапное создание игры (может быть нескольких) с описанием всех примененных приёмов.
  4. опыт удачных и неудачный проектов

Оталось определиться с игрой. Сначала я хотел ипользовать всем известную змейку. Но потом наткнулся на довольно забавную игру Buggle Connect. Кроме того, мне еще попалась и BraveQuest на prototype.js. В ней довольно простая модель битвы. Вот это и есть первые мои кандидаты.

Что ж пожелайте мне успеха, чтобы данное начинание не заглохло. Ах да, можете предлагать название будущей книги, его мне попдобрать оказалось очень тяжело. А ведь, «как карабль назовешь, так на нём и поплывёшь».

KrOlSer’s flags

Декабрь 23, 2008

Наткнулся на интересный сервис flagcounter.com, который показывает «посетителей по флажкам». Вот, что он мне запостил в WordPress.
free counters[Image]
Правда, при этом попросил логин и пароль. Было немного сцыкотно, ведь могут блог увести:)

Вышивание

Декабрь 23, 2008

Давным давно, примерно год назад я начал работать над программой для составления схем для вышивания крестиком. Программа очень достаточно развилась. Судя по тому, что после использования программы заказчик смог снизить цены на производство почти на половину, можно считать, что программа удалась.

Программа написана. Захотелось самостоятельно что-нибудь сделать. Делать самому схему не хотелось даже несмотря на то, что у меня есть классная программа для этих целей.

Итак, были найдены:

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

Второй кубок в 11×11!

Декабрь 20, 2008

Платиновый кубокТолько что состоялся финальный матч Платинового Кубока-2973. Второй раз моя команда стала обладателем кубка и зачислила на свой счет 2000 денюшек. Победа далась нелегко к финалу на скамейке сидело 3 травмированных из основы. Пришлось использовать аж двух игроков не на своих позициях.

Специфика моей команды такова : у меня довольно много нападающих, а вот замены для защитников и полузащитников нет. Среди них единственная позиция , которую я могу заменить это левый защитник. Но я его обычно использую, чтобы «залатать дыры».

На протяжении всего турнира мне очень везло. Я два раза выиграл по техническому поражению (т.е. моя команда и выиграла и не тратила силы). Первый раз как-то непонятно, а второй раз сдался игрок, который и так не выходил из группы. Кроме того, я выиграл два патча в серии после матчевых пенальти.

Вот собственно статистика финального матча

beckline

20.12.2008 17:51
Платиновый Кубок-2973

0:3

[2d показ]

Зрители: 300

krolser

2′ 3 Роман Шишкин
42′ 10 Аймир Куриленко
60′ 10 Аймир Куриленко
62′ 0:1 16 Майкл А. Дамар (14 Эрнесто Луканченков)
74′ 0:2 16 Майкл А. Дамар (17 Леонид Кузеванов)
79′ 11 Дмитрий Грошев
90+3′ 0:3 20 Станислав Муратов (14 Эрнесто Луканченков)

Так же можно насладиться повтором этого матча.

Немного прокоментирую финальную игру. Игра шла примерно на равных, но ключевым стало удаление у соперникак на 60 минуте. После этого оборона оппонента начала проваливаться, что и сказалось на окончательном счёте матча.

Кстати, кто тоже намеревается играть в данную игру но еще на зарегистрировался, можете сделать это по моей реферальной ссылке http://www.11×11.ru/?ref=233505. За это мне дадут немного игровых денюшак. Взамен обещаю помощь советами и ценными указаниями.

11×11!

Декабрь 16, 2008

Когда просматривал список претендентов на премию рунета, то на 11 месте обнаружил проект 11х11. Короче, меня затянуло. Игра интересная, всё крутиться вокруг просмотра игр вашей команды против оппонентов. Создатели придумали очень действенный способ «выколачивания» СМС’ок, эксплуатируя человеческие слабости, такие как:

  • стремление быть всегда везде (VIP попадает в турнир, которых не так уж и много, всегда, ну почти всегда) .
  • обмануть (во время турнира заплатив, можно восстановить свою команду, когда другие будут покоцаны).
  • и еше, еше.

При этом, я на создателей за такое не в обиде, они не виноваты, что люди используют все возможные способы, какие только есть, чтобы оказаться на вершине, так сказать, идут по головам.

А теперь, самое главное, ради чего всё писалось, это положительные моменты в игре:

  • концепция турниров. Очень интересен способ заработка денег, получаешь их за победу, чем дальше ты зашел в турнире, тем больше заработал денег. По сравнению со стандарной моделью (выиграл дали денег, проиграл — не дали) данный способ выглядит просто изумительно. Всё оказывается так просто.  Ах нет не просто. В турнире есть не просто «дуэли», есть еще группы, из которой выходят 2 лучших. А когда в группе нет явного фаворита, то тут такое начинается, считаешь каждый мяч, кто у кого выиграл. Уф, просто дух захватывает.
  • Игроки с их параметрами и физической готовностью. В обычной онлайнке, подрался полечился. А тут, целый простор для тактических маневров. Каждый игрок после матча (по ходу) теряет физу, в итоге после матча вы немного устали и вам опять надо играть. Вы подумаете, какая тактика лучше, изматывающая или, наоборот, берегущая силы.
  • Игрок — это не вся команд или его величество рандом. В обычных онлайнках может ли игрок 2 уровня побороться с игроком 5 уровня. Может, но обязательно (извиняюсь мизерный шанс всё-таки есть) проиграет. А тут, опять сказка. Игроки то стареют, получается, что прокачать игрока до сверх вершин можно, но он состариться и его придеться заменить молодым чахликом. Поэтому разброс с другими уровнями не так велик. Единственное приемущество у «старшаков» — наличие длинной скамейки запасных. Это им позволяет выдержать долгие турниры. Выиграть 2 уровню у пятого вполне реально, это же футбол, тут такое бывает. Например, ну очень жестко играл 5, и получил 2 красных карточки (да такое бывает). Проиграть после такого подарка суьбы просто стыдно.
  • Время деньги. Данная игра не отнимает много времени, конечно если вы не фанат, если игровые амбици не прут через край. Всё довольно просто. Необходимо только записаться на турнир, дождаться своего часа, выставить свою команду на матч, указать схему игры, замены, задания и нажать на заветную кнопку «отправить». Всё… игра сыграна, наслаждайся игровым зрелищем.

Оценка 9 из 10. Десять я врядли когда поставлю, на то она и 10 — идеал, мечтания.

Рулетка

Декабрь 16, 2008

Недавно, читая Хабр, наткнулся на одну строительную рулетку. (more…)

Как легко и непринужденно добавить парваметр в JSF url.

Декабрь 1, 2008

Всё до безобразия просто. Начнем с того, что я опишу задачу, которую мне пришлось решить.

Задача: отобразить список сущьностей с кнопочкой view, при нажатии на которой открывалась бы детальная информация о сущьности.

Зарание извиняюсь за ненормативную лексику, но, как мне кажется, без неё нет возможности показать всю гамму эмоций.

Кажется просто. А хуй там. Ни в одном примере нет нормального описания такого просто Use-Case. Единственно что мне предлагали, так это использовать сессионный бин. Но у этого способа есть свои недостатки. Например нет возможности создать репрезентативный урл, пойдя по которому, ты сразу получишь контент. ПРиходилось сначала идти на страницу с таблицей, а затем, выбрав необходимую сущьность, перходить на интересующую нас «детальку».

Вот тебе бля и «мега Технология» JSF. А хочеться всего ничего, просто написать entity.page?id=1234.

Итак. Задача разбивается на две задачи:

  1. Как обработать параметр на «детальке»
  2. Как установить этот параметр в урле.

Обработать параметр очень просто. Необходимо в faces-config у бина установить managed property примерно вот так (нет особого желания прасписывать что да как).

    <managed-bean>
        <managed-bean-name>customer</managed-bean-name>
        <managed-bean-class>com.ebon.pgw.web.beans.Customer</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
        <managed-property>
            <property-name>customerId</property-name>
            <value>#{param.id}</value>
        </managed-property>
    </managed-bean>

Скажу лишь одно, что param и обозначает параметр передаваемый в запросе.

Вторая задача оказалась по сложнее. Я лишь опишу, как я её решил, сам процесс решения я описывать не буду, дабы не засорять статью табуированной лексикой :).

Помогла мне в решении статья Vladimir Petrukhinа «JSF и ЧПУ (Человеко-понятный урл)«. Именно благодаря ней я узнал, как можно поменять возвращаемый урл. Так как я использовал MyFaces, то мой ViewHandler наследовался от JspViewHandlerImpl. Вот его код.

package test;
import java.util.Map;
import javax.faces.context.FacesContext;
import org.apache.myfaces.application.jsp.JspViewHandlerImpl;
public class GetParamViewHandler extends JspViewHandlerImpl {

    private static final Log log = LogFactory.getLog(GetParamViewHandler.class);

    @Override
    public String getActionURL(FacesContext facesContext, String viewId) {       
        String actionURL = super.getActionURL(facesContext, viewId);
        Map<String, Object> requestParameterMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
        String id = (String) requestParameterMap.get("id");
        if (id!=null) {
            actionURL += "?id=" + id;
            requestParameterMap.remove("id");
        }
        log.info("viewId[%s] actionUrl[%s]", viewId, actionURL);
        return actionURL;
    }
}

Соответсвенно его необходимо прописать в faces-config.xml

<application>
        <view-handler>test.GetParamViewHandler</view-handler>
</application>

Для того, чтобы установить соответсвующий id необходимо использовать f:param примерно так:

<h:commandLink value="view" action="customer" immediate="true">
    <f:setPropertyActionListener value="#{customer.value.merchantId}" target="#{customers.customerId}"/>
    <f:param name="id" value="#{customer.value.merchantId}"/>
</h:commandLink>

Вот наверное и всё. Если у кого есть вопросы и дельные замечания, welcome to comments :)

UPD: Оказалось, что не всё так просто. Во первых, код надо немного переписать (запосчу его позже), во вторых…. А вот про во-вротрых по подробнее.

Описанный выше метод прекрасно работает при простой навигации. А если мне необходимо отредактировать бин. Вот и пришел пиздец. Оказывается, что JSF пытается после нашего клика провести восстановление состояния view (LifeCycle Phase : Restore View), и именно в этот момент у происходит всё заново. А заново не получится, т.к. у нас уже нет в запросе параметра id. Как сделать так, чтобы состояние нормально восстанавливалось я не знаю. Увы :(.