AElfred parser is namespace-aware. Когда дерутся библиотеки... (saxon и xerces)
abarmotik
У нас есть базовый проект PTL (шаблонизатор собственной разработки). При старте томката в лог сыпется много ошибок — это дерутся библиотеки saxon и xerces.

Лечится либо тупо стиранием saxon.jar

либо явным указанием какой парсер используется:

-Djavax.xml.transform.TransformerFactory=com.icl.saxon.TransformerFactoryImpl
-Djavax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl
-Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl
-Dorg.xml.parsers.sax.parser=org.apache.xerces.parsers.SAXParser


Для отчетности и поиска.
Эксепшыны выглядят как-то так:

Digester.getParser: 
javax.xml.parsers.ParserConfigurationException: AElfred parser is namespace-aware
at com.icl.saxon.aelfred.SAXParserFactoryImpl.newSAXParser(SAXParserFactoryImpl.java:37)
Метки:

Apache HTTP Client
abarmotik
Маленькие особенности при работе с апачевским хттп-клиентом.

1. PostMethod не поддерживает метод setFollowRedirects, по этому редиректы надо обрабатывать вручную:

    HttpClient client;
    ...
    int statusCode = client.executeMethod(method);

    if(statusCode >= 300 && statusCode < 400) {
        Header locationHeader = method.getResponseHeader("location");
        if (locationHeader != null) {
            method = new GetMethod(locationHeader.getValue());
            statusCode = client.executeMethod(method);
        }
    }


2. Обработка cookie по умолчанию работает строго по стандарту. Что б куки обрабатывались так же как в браузерах нужно сказать:
    HttpClient client;
    ...  
    client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);


Обнаружил, когда сайт выдал куку на домен «.domain.com» (с точкой в начале) и средиректил на http://domain.com а кука не передалась. Приведенное выше решение помогло.

3. До недавнего времени полученный хтмл-код парсил почему-то регэкспами... Регэкспы получились большие и страшные (врайт-онли, как говорится). Оказалось гораздо наглядней и проще преобразовывать хтмл в DOM и просто брать нужные значения используя XPath.

Парсер хтмл-кода — библиотечка JTidy
    String htmlPage;
    ...
    Tidy tidy = new Tidy();
    tidy.setXHTML(true);
    InputStream in = IOUtils.toInputStream(htmlPage);
    Document doc = tidy.parseDOM(in, null);



XPath взял из ксалана (xalan):
    Node node = XPathAPI.selectSingleNode(doc, "//table[class='main']);
Метки: ,

Обедер.ру
abarmotik
Сделал сервис по учету совместных расходов — обедер.ру.

Городской квест или как мы хотели сыграть в Street Challenge и что из этого получилось.
abarmotik
За обедом Дима М. развлекал нас рассказами о ночных играх в Москве. Суть такая — несколько команд (водитель, штурман, «мозги» и машина) собираются на старте, получают легенду и отправляются в путь. По подсказкам нужно искать контрольные точки города и выполнять там различные задания. Кто раньше всех все закончит тот и молодец. Такая ночная «зарница» для жителей мегаполиса. Рассказывал убедительно, с вдохновением и мы решили попробовать. К сожалению почти все такие игры занимают целую ночь (как правило в выходные), т.е. придется уговорить семью что папа будет пропадать неизвестно где всю ночь и потом еще пол-выходного дня будет отсыпаться )) Слабо представляю как это можно сделать...

Но! Головы продолжали работать, пытаясь найти выход. И родилась очень интересная идея — «Городской Квест».

Квест проводится в течение недели или месяца. Игроки получают на сайте несколько заданий, выполняют их в любое удобное время и присылают отчет, за что получают очки. У кого к окончанию квеста больше всего очков тот и Буратина.

Выполняя задания квеста и соревнуясь между собой игроки должны охренеть от того как здорово левел-апнулся их досуг.


Примеры заданий:
- посчитать сколько ног на картине висящей справа от «трех богатырей» в третьяковке.
- сфоткаться в обнимку со страусом в «парке птиц» (эт скорей всего на выходные задание)
- сфоткаться орущим и несущимся на роликах по ул. Косыгина (культовая горка у роллеров)

Т.е. в задании главное, что при его выполнении игрок лично куда-то шел, что-то делал и параллельно «окультуривался».

Фактически человеку дается план развлечений на неделю да еще и с призами за активность.

Офигенная идея! И аналогов нет.
Метки:

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

Идея онлайн семинаров
abarmotik
Сделать систему для проведения онлайн семинаров, тренингов и любых выступлений требующих общения с аудиторией.

Ведущий объявляет о проведении тренинга. При этом указывает дату-время начала и окончания, тему, тэги и т.п.

Собственно сам семинар:
Аудитория (посетители) смотрят онлайн-трансляцию семинара. И могут отправлять свои вопросы (комментарии). Тут же обновляемая лента с комментариями. Рядом с каждым вопросом в ленте кнопки голосования [+] и [-].

Т.е. зритель может спросить сам либо поставить плюсик у вопроса, если его задал кто-нить другой. Чем больше голосов у вопроса тем крупнее его шрифт.

Ведущий видит только ленту вопросов и по ходу дела отвечает на них (сразу или в конце семинара)


Похожие сервисы уже есть, тут идея именно в механизме комментирования.
Метки:

Life
abarmotik
Есть такая математическая игра — Life. На бесконечном поле в клетках стоят фишки, каждый такт игры по определенным правилам некоторые фишки «погибают», некоторые «рождаются». Все это напоминает жизнь колонии микробов. Если прокручивать такты раз в секунду или чаще — выглядит довольно интересно. (см википедию)

Можно сделать мультиюзерную игру. Поле размером N x N, 2 (или больше) игрока, у каждого фишки своего цвета и каждому выделен участок поля (база), в которую он (и только он) может «кидать» фиругы. В зависимости от уровня юзера ему доступно различное число фигур — от «кирпича» и «планера» на первом уровне, до «панерного ружъя» и возможности создавать свои фигуры на высоких уровнях. Так же игрок может кинуть «бомбу», чтоб расчистить место в базе для кидания очередной фигуры. (и бомб и фигур конечное число, которое растет в зависимости от уровня)

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

Фишки взаимодействуют по обычным правилам. Цвет учитывается только при рождении — чьих родителей больше, такая фишка и рождается (фишка рождается ровно от трех родителей).
Метки:

Самое короткое руководство по проектированию БД
abarmotik
Приключилось мне в рамках одного проекта импортировать существующую базу. База эта была создана в аксесе и собствен6но суть проекта заключалась в создании веб-приложения, предоставляющего схожую функциональность, но с учетом нынешних реалий (веб-интерфейс, разделение полномочий и т.п.). Если рассматривать в обсуждаемом ключе, разработка строилась так:

1. создаю свою систему, удовлетворяющую требованиям
2. импортирую данные из исходной базы

Эта заметка о пункте номер два.

Я впервые столкнулся с полностью ненормализованной базой. Т.е. в ней были нарушены практически все принципы построения реляционных БД. Но тем не менее эта база использовалась продолжительное время. Не стану вдаваться в подробности, отмечу лишь что вызвало первый шок — таблицы с именами «январь», «февраль» и т.д. для графика работы. Поверьте, дальше все было гораздо хуже. Я понимаю, что не мне судить человека, который это создал — система, использовалась не один год и в какой-то мере удовлетворяла потребности заказчика. Просто я не хочу больше сталкиваться с такими «базами». Надеюсь данная заметка поможет в этом.

Читать дальше...Свернуть )
Метки:

Postgres pg_dump: password authentication failed
abarmotik
Забавная ошибка обнаружилась в некоторых консольных утилитах постгреса, запрашивающих ввод с клавиатуры.

Так pg_dump, к примеру, вместо ожидаемого запроса пароля и последующего выполнения своих непосредственных обязанностей сразу обругал меня FATAL'ом и сказал, что password authentication failed. Даже не смотря на ключ --password, который в принудительном порядке производит запрос пароля. А т.к. эта же утилита используется pgAdmin'ом, похожее ругательство иногда возникает и там.

Ошибка возникает под виндой и только при наличии папки «dev», находящейся в корне текущего диска.
Это дают о себе знать юниксовые корни постгреса. Они (корни) пытаются работать с терминалом через /dev/tty, которого в винде разумеется нет. Но при наличии папки /dev, утилиты заботливо его создают после первого вызова.

Лечится просто — перед запуском утилиты сотрите файл /dev/tty
Метки:

Как бороться с «просвечивающим» SELECT'ом в IE
abarmotik
Проблема

Стандартный select, оказавшись под непрозрачным дивом остается полностью виден в IE. Из-за этой его особенности, выпадающие меню, всплывающие окошки и прочие элементы, связанные с позиционированием дивов могут выглядеть крайне неаккуратно.


Решения

Есть несколько способов решения этой проблемы. Перечислю их от простого к сложному:

1. прячем select
2. iframe поверх select
3. собственные select

Читать дальше...Свернуть )
Метки: ,

?

Log in