2007-11-29

WordPress + Google Analitycs


Подружить WordPress и Аналитику оказалось крайне простым делом. На выбор есть два популярных плагина (я остановился на первом) Ultimate Google Analytics и Google Analyticator.
После инсталляции разные интересные задачи, вроде отслеживания кол-ва закачек, решаются простановкой галок в контрольной панели.
Домашняя страничка плагина.

2007-11-27

HTMLayoutSpy. В паре дней от альфы.


Практически доделал спай.
Пока еще есть несколько неприятных моментов, кое-где встречаются шероховатости, но в целом, все работает :)
На скриншоте - спай приаттаченный к свежему примеру HTMLayout.
Слева отображается дерево документа, текущий узел выделяется с помощью инструмента Inspect непосредственно в пользовательском приложении. Чуть правее - вся информация, которую можно собрать по элементу, правый див - логи событий. Снизу путь до элемента над которым находится мышка. В самом документе подсвечены div-ы и li.

Google alert

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

Сам сервис имеет минимальное количество настроек alert-ов, аскетичный дизайн. Казалось бы, проще некуда, поэтому google alert обязан работать как часы? Не тут-то было.
Первый скелет сервиса раскрылся уже во время попытки создать alert - если мыло отличается от gmail, то нет возможности настроить alert.
Только что оказалось, что сервис может не присылать оповещения о появившихся alert-ах.

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

Хуки в WinAPI

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

Разводка в обменниках

На выходных наблюдал сабж. Сам при этом выступал в роли лоха :)
На днях Катька улетает в Париж по поводу чего было решено зайти в обменник, поменять ерво. Зашли в первый попавшийся ларек-обменник (грязно, тесно, наружная дверь не закрывается) на Речном вокзале. Деньги кассиру передаются, по классической для обменников схеме, через закрывающийся стальным листом отсек. Перед тем как отдавать деньги, Катька дважды пересчитала (15'000р тысячными купюрами) бумажки (вызывая мое недовольство пустой тратой времени), после чего положила их в отсек и произнесла "400 евро". Кассирша сразу после того как деньги были положены, закрыла заслонку и взяв деньги в руки замялась, после чего сказала "У нас евро нет" (смотрелась она натурально, никаких подозрений не вызывала) и положила деньги обратно. Все это заняло секунду-две. Катька взяв стопку обратно перечитала деньги (это важно - и до и после!), оказалось, что не хватает одной бумажки. Пересчитала деньги еще раз (я уже начинал плеваться, т.к. до сих пор не понимал в чем дело), после чего заглянула в отсек - бумажка лежала с противоположной стороны. Когда Катька выуживала бумажку, в глазах кассирши читалось плохо скрытое раздражение.
Возвращаясь и проигрывая в памяти эпизод нужно сказать, что действовала засранка весьма умело и естествено. Деньги находились в руке буквально секунду, возвращала она их одной рукой, при этом мы не видели пачку с деньгами какую-то долю секунды, но кассирша успела откинуть одну бумажку вплотную к своей стенке (увидеть ее можно было только специально заглянув в неудобно расположенный отсек), остальные деньги оказывались у нас под носом - бери и иди.
Вышли из обменника, прошли метров 300, наткнулись на сбербанк - чистое помещение, более выгодный курс, прозрачный контейнер для обмена денег.
Будьте бдительны :)

2007-11-26

Автобиографическая повесть 'Плен'


Из вступления
Давайте взглянем на цифры безвозвратных потерь вооруженных сил. Официальные источники (Министерство Обороны, Генеральный штаб, Академия военных наук) приводят такие данные, которые, впрочем, многими исследователями считаются заниженными: общие безвозвратные потери вооруженных сил – 8,8 млн. чел. В Германском плену оказались 5,7 млн., из них были расстреляны, погибли от голода, ран, болезней и непосильного рабского труда – 3,3 млн., т.е. 58%. Количество красноармейцев и командиров, погибших в плену – 38% от общего числа погибших в войне.
Несмотря на столь трагические последствия войны много ли опубликовано книг, снято кинофильмов о судьбах военнопленных, их борьбе и страданиях? Разве судьба 1/3 всех, вставших на защиту Родины и погибших за нее, не является неотъемлемой частью истории страны?


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

http://ldb1.narod.ru/rus.index.html

Дмитрий Борисович, низкий поклон...
http://lomonosov.livejournal.com/

2007-11-22

Россия на чемпионате Европы

Англия Хорватия 2:3
Андорра Россия 0:1
Фантастика!

2007-11-21

HTMLayout. Неявная модификация DOM-tree

Существует несколько ситуаций, когда генерируемое HTMLayout DOM-дерево не соответствует передаваемый пользователем html. Знания об этих исключениях необходимы для правильной записи селекторов и манипуляций с DOM-деревом.

  1. Чаще всего HTMLayout изменяет DOM-tree для упрощения форматирования строк внутри структурных блоков (например div-ов). В таких случаях HTMLayout обрамляет строку тегом text. Простой пример применения этого правила можно найти в спецификации CSS 2.1 http://www.w3.org/TR/CSS21/visuren.html#anonymous-block-level

  2. В некоторых случаях behavior может взять на себя обязанности по "достраиванию" DOM-tree, что позволяет упростить html-код и избавить пользователя от рутинных описаний реализации. Типичный пример - упрощение комбобокса.
    <select name="Alignment" size="1">
    <option value="left">Left</option>
    <option value="right">Right</option>
    <option value="center">Center</option>
    </select>

    ( код взят из примера HTMLayoutSDK\html_samples\form-test.htm)
    Данная структура точно описывает семантику комбобокса с точки зрения человека, однако совершенно не годится для HTMLayout, поэтому строчки преобразовываются в
    <select name="Alignment" size="1">
    <caption value="center">Center</caption>
    <button role="dropdown" tabindex="-1"></button>
    <popup type="select">
    <option value="left">Left</option>
    <option value="right">Right</option>
    <option value="center">Center</option>
    </popup>
    </select>

  3. Особенность реализации таблиц внутри HTMLayout.
     <table>
    <tr><td colspan="2">colspan</td></tr>
    <tr><td>1</td><td>2</td></tr>
    </table>

    1. Первая строка будет иметь двух детей
    2. Хендл второго ребенка будет нулевым.


Отдельное спасибо Jim Epler за пост со ссылкой на HTML Encoder

2007-11-19

Цветовая схема

Насущный вопрос при создании программы - где взять симпатичную цветовую схему.

1. Стандартное решение - виндовая схема, морально устарела лет 10 назад. Критиковать ее настолько просто, что даже не хочется тратить на это время. Когда делал "свою" схему основанную на стандартной виндовой потратил столько времени, что даже не хочется говорить об этом вслух и получил довольно хреновое решение.
2. Самопал, несмотря на наличие качественных инструментов ( http://www.colorschemer.com/, http://kuler.adobe.com/) делать чудовищно сложно.
3. Остается тупо переть решения у крупных компаний и успешных продуктов.

Есть надежда, что упустил что-то очевидное. Задал вопрос на rsdn, может получится найти что-то интересное.

2007-11-16

HTMLayoutSpy. Последняя миля

Добил вчера последнюю фичу.
Направления для дальнейшей работы:
  • Оптимизация
  • Баг фикс
  • Наполнение "тривиальной функциональностью" - базовые механизмы готовы и отлажены, осталось вбить несколько простых строчек кода/настроить конфиг.
На следующей неделе планируется альфа.

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

2007-11-15

HTMLayoutSpy. Настройка логов


Так будет выглядеть настройка логов для спая. После реализации, идея о resizable-options уже не кажется такой изящной как казалась изначально :)

2007-11-09

Scroogled aka выгуглен

Симпатичная антиутопия на несколько страничек. На злобу дня.
Русская версия
Оригинал
via Бёрд Киви

Когда заходят разговоры теоретиков на тему "google is evil", вспоминается один старый (с год назад) пост шароварщика, который установив и попробовав кучу обновок: Sitemap, Google Analitycs и AdSense неожиданно проникся сознанием куда все катится :) Тут речь, конечно, не о нарушениях прайвиси, но о том, что гугл знает откуда ходит клиент, как часто приходит, сколько платит и (гугл) подкручивая результаты поиска, через AdSense может выкачивать из мелких вендоров столько денег, сколько захочет.
Поэтому я всеми руками за развитие Яху/ МС/ Яндекс/ новичков и здоровую конкуренцию :) По поводу новичков - это безусловно, утопия, но должно же быть хоть что-то светлое на антиутопичном фоне :)

2007-11-06

HTMLayout Spy о текущем

HTMLayout Spy плавно катится в альфа-версии. На этой неделе сделаю демку и выложу на htmlayoutlab.com - сайт давно пора обживать.

Сейчас Spy выглядит так:

История создания HTMLayout

Решил собрать всякие интересные факты о HTMLayout в одну кучу.
История создания HTMLayout

2007-11-01

Несколько слов об особенностях HTMLayout

По мотивам http://guicci.ru/2007/10/28/htmlayout-web-20-prishel-na-desktop/

Дисклаймер.
Мне не доводилось работать с библиотеками UI отличными от HTMLayout, поэтому не возьмусь сравнивать HTMLayout и например QT. Есть небольшой опыт веб-разработки, поэтому кратко расскажу чем отличается HTMLayout от IE (и IWebBrowser2).

Прежде всего - верстка. HTMLayout это HTML движок с человеческим лицом (и это лицо улыбается разработчику :) )

Небольшое отступление.
Когда впервые столкнулся с задачей разработки сайта меня поразило насколько сложно сделать корректный сайт с несколькими вертикальными колонками контента - веб-разработчики пишут по этому поводу статьи (разные для обсуждения деталей двух/трехколоночной верстки), активно обсуждают, устраивают холивары на тему "верстка table vs div" и т.д. Поначалу, я воспринимал эти статьи как какой-то нелепый розыгрыш, но вскоре выяснилось, что это тяжкая реальность :). Для человека знакомого с HTMLayout подобные вопросы звучат дико. Поясню на примере:

Пример 1. Требуется сделать двухколоночную страничку. Левая колонка имеет фиксированную ширину (допустим 100px), правая - резиновая.
Код:
<html>
<head>
<style>
div { border: 1px solid black; margin: 5px; }
body { flow: horizontal; }
#left { width: 100px; height: 100%%; }
#center { width: 100%%; height: 100%%; }
</style>
</head>
<body>
<div #left >
<div #center >
</body>
</html>
Здесь используется два расширения html: style attribute flow и единица измерения %%.
flow: horizontal говорит, что мы будем укладывать потомков body не вертикально, а горизонтально. %% - определяют размер элемента в процентах от свободного места на страничке. С помощью записи width: 100%%; height: 100%%; мы отдаем элементу #center все свободное место не занятое фиксированной колонкой.
Скриншот прилагается.
http://htmlayoutlab.com/tmp/columns.example1.png

Пример 2. Требуется модифицировать предыдущий пример добавив справа еще одну фиксированную колонку.
#left { width: 100px; height: 100%%; }
#center { width: 100%%; height: 100%%; }
#right { width: 200px; height: 100%%; }
Колонка готова.
http://htmlayoutlab.com/tmp/columns.example2.png

Пример 3. Теперь мы захотели модифицировать предыдущий пример так, чтобы в центре было две резиновых колонки. Потребуется добавить одну строчку в css, одну (еще один div) в html:
#left { width: 100px; height: 100%%; }
#center1 { width: 50%%; height: 100%%; }
#center2 { width: 50%%; height: 100%%; }
#right { width: 200px; height: 100%%; }
http://htmlayoutlab.com/tmp/columns.example3.png

Детальное описание атрибута flow: http://www.terrainformatica.com/htmlayout/flow.whtm
Отдельный бонус - значения h-flow, v-flow, но о них позже.
Описание %% http://www.terrainformatica.com/htmlayout/fspu.whtm

Другая проблема верстки - создание "сложных" элементов на страничке. Например описание линка на http://www.dzone.com/links/ - каждый линк имеет пиктограмму (уменьшенный скриншот), описание, автора, кнопку для голосования, теги. Обычно, создание/переделка подобного (или более сложного) лэйаута - это борьба с таблицами или непослушными дивами. HTMLayout для сохранения значительной части нервных клеток разработчика имеет еще одно значение атрибута flow: table.
Если у Вас есть несколько минут, рекомендую глянуть
HTMLayout SDK http://www.terrainformatica.com/htmlayout/HTMLayoutSDK.zip имеет несколько готовых примеров использования flow: table.
bin\browse.exe - стандартный браузер для просмотра тестовых примеров
html_samples\flows\grid*.htm - примеры flows
Там же можно найти примеры использования h-flow, v-flow
http://htmlayoutlab.com/tmp/flow.grid.png
http://htmlayoutlab.com/tmp/flow.grid2.png

Далее.
Каждый веб-дизайнер сталкивался с ситуацией, когда на нескольких страницах присутствуют одинаковые фрагменты кода (например меню). Оставаясь только в рамках html, мы не можем вынести дублирующийся код в отдельный файл. HTMLayout для решения такой задачи имеет тег <include>, его использование тривиально
<include src="menu.htm"> <em>Ooops! menu.htm is unavailable!</em> </include>
Дополнительный бонус - в коде приложения мы можем перехватывать загрузку файлов и изменять стандартное поведение - грузить menu.htm не с диска, а например, из ресурсов приложения, или архива, БД, генерировать файл на лету - HTMLayout не накладывает на пользователя никаких ограничений.

Далее, я тезисно перечислю другие вкусные особенности (то что помню сейчас) (описывать их подробно, сейчас просто нет времени).
  • Поддержка "обычного" внешнего вида стандартных контролов. Например, background-image: url(theme:button-normal); Естественно, контролы можно стилизовать с помощью css
  • Существует совершенно замечательная возможность определять собственные теги (для этого требуется добавить одну строчку в код Вашего приложения) и атрибуты css.
  • Легкая разработка собственных behaviors. Это тема для отдельного и большого разговора :)
  • Высокая скорость работы, малый размер библиотеки.
  • Высокое качество и дружелюбность саппорта - обнаруживаемые баги обычно фиксятся в течении нескольких дней после обнаружения http://www.terrainformatica.com/htmlayout/logfile.whtm (да, баги к сожалению присутствуют - библиотека активно развивается.)
  • Все это удовольствие можно использовать совершенно бесплатно http://www.terrainformatica.com/htmlayout/prices.whtm :)
  • Наличие мобильной версии (http://www.terrainformatica.com/htmlayout/HTMLayoutMobileSDK.zip)

Если какие-то моменты заинтересуют более подробно, я буду рад ответить на вопросы :)
Форумы посвященные HTMLayout
Официальный http://www.terrainformatica.com/forums/
Неофициальный русскоязычный форум на рсдн http://www.rsdn.ru/forum/group/htmlayout.aspx


Примеры использованные в посте и скриншоты http://htmlayoutlab.com/tmp/flows.zip