Позднее Ctrl + ↑

Как я верстал C-Airlaid

Исходные изображения из заметке потерялись, но заметка сохранена для истории

Описание существующих проблем браузеров интересно, описание решений этих проблем интересно вдвойне, крики «маздай» ничего кроме зевоты не вызывают.

Данил Иванов, imfo.ru, вот здесь

Попробую для разнообразия последовать этому принципу и написать вдвойне интересную заметку. Расскажу-ка я о том, как я верстал airlaid.ru и с какими проблемами столкнулся. (Чёрт возьми, не могу не заметить, что с этими проблемами я не столкнулся в Опере.)

Вот такую штуку мне надо было получить:

airlaid-markup/result.gif Результат

Думаю, очевидно, что имеется в виду вёрстка в три колонки, т. е. ширина главного меню (и нижней плашки под копирайты) составляет 1/3 ширины окна; выравнивается и то, и другое посередене. Для простоты я решил делать колонки шириной 33%, 34% и 33% соответственно. Всякая шелуха вокруг нас интересует мало, поэтому рассмотрим упрощённый вариант задачи:

airlaid-markup/airlaid1.gif Упрощённый вариант

Итак, нам нужно сделать просто трёхколоночную вёрстку. Сложность здесь представляет (как оказалось) задача скругления краёв у синих плашек. cutДля начала я нарисовал 4 вот таких вот уголка для разных мест, антиалиаснутых на нужном синем фоне (восьмикратное увеличение by Photoshop):

airlaid-markup/corner.gif Такой вот уголок

Думаю, что вы в курсе, что клетки, закрашенные в шахматном порядке — это прозрачность?

Эти уголки были расставлены в нужные места вот так:

#main-menu  {
  position: relative; 
  left: 33%;  top: 0;  width: 34%;  height: 170px;
  background: #189CC0;
}
#menu-lc  {  position: absolute;  left: 0;  bottom: 0;  }
#menu-rc  {  position: absolute;  right: 0;  bottom: 0;  }

<div id="main-menu">
<img id="menu-lc" src="menu-lc.gif" alt="" />
<img id="menu-rc" src="menu-rc.gif" alt="" />
</div>

Аналогично была сделана и нижняя плашка. Несмотря на то, что вроде бы всё в порядке (всё же в порядке, да?), это не захотело правильно работать в IE и Gecko-браузерах. А именно: при некоторых значениях ширины окна браузера получались вот такие глюки:

airlaid-markup/bug-ie.gif Глюк в IE 6 при 1024 и 1600 пикселях

Internet Explorer 6.0, при 1024 и 1600 пикселях

airlaid-markup/bug-gecko.gif Глюк в Firefox 0.9.2 при 800 и 1024 пикселях

Mozilla Firefox 0.9.2, при 800 и 1024 пикселях

Забавно, что при ширине окна 800 пикселей IE показывал всё правильно, а FF отлично справлялся с вариантами 1152 и 1600. Целенаправленно я проверял только более-менее вероятные ширины окон, однако в обоих браузерах наблюдался такой эффект: при плавном изменении горизонтальных размеров окна глюк то появлялся, то исчезал в совершенно хаотичном порядке.

Я специально повторил эту вёрстку для «упрощенной задачи», причём вотнул стили прямо в HTML, чтобы интересующиеся могли не сильно напрягаясь посмотреть, что да как. Откройте это с помощью IE и/или Mozilla, поизменяйте размеры окна.

airlaid-markup/see-yourself Открыть!

Первая приходящая на ум вероятная причина глюка: проценты в разных местах округляются по разным правилам — где-то в сторону меньшего, а где-то — в сторону большего. Однако такое объяснению проходит только в случае с IE; обратите внимание, когда изменяешь ширину его окна, он то показываёт всё правильно, то показывает уголок на один пиксель левее, чем нужно. В Mozilla же происходит намного более интересный эффект: она иногда показывает всё правильно, иногда показывает уголок на один пиксель правее чем нужно, а иногда — на один пиксель левее. Чтобы не быть голословным, приведу конкретные цифры: при ширине 800 пикселей уголок сдвинут вправо (как на рисунке выше), при 814 всё отображается правильно, а при 828 пикселях уголок сдвинут влево (как на рисунке про IE). Объяснения такому глюку я уже придумать не смог.

Начал я пытаться эту проблему решать. Сначала я попробовал запихать оба нижних уголка меню в таблицу, сделать её шириной 100%, поместить в левую колонку левый уголок, написать там align=«left», а правую — в правый и написать align=«right». Но в результате получил ровно тот же самый эффект (вроде бы, в обоих браузерах). Тогда у меня появилась сумасшедшая мысль: позиционировать уголок в нужные места javaScript’ом. Вариация на эту тему: подставлять в right: иногда -1px, иногда 0, иногда 1px, в зависимости от резрешения и браузера. Так можно было бы сделать, чтобы в стандартных разрешениях всё работало OK. Но этого я даже не пытался делать — слишком уж уродливое решение.

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

#menu-rc  {  position: absolute;  right: -1px;  bottom: 0;  }

И нарисовал для этого места специальный вариант уголка (посмотреть на специальный вариант уголка). Аналогичный спецуголок был нарисован и для нижней плашки. Результаты вы можете увидеть на сайте airlaid.ru.

Внимательные товарищи заметят, что под Gecko глюк немножко остался, но это уже совсем мелочи. Причина этого глюка частично в том, что у Gecko, как я уже сказал, не два, а три варианта расположения уголка (-1px, 0 и 1px), а моё решение 100% лечит только от варианта с двумя расположениями, т. е. как IE.

В общем, такие дела.

Итак, e2 RC1 и e2NP 3

e2 Release Candidate 1

Во-первых, версия v812 будет назваться Release Candidate 1, потому, что мне надоело уже откладывать и откладывать релиз. Если v812 окажется достаточно стабильной (что крайне маловероятно), то её и назовём релизом.

См. также: Верлог e2.

e2NP 3: NowPlayin Client

Во-вторых, новая версия NowPlayin! Впервые мне не стыдно её показать людям. Она, в отличие от e2NP 2.x:

  • Имеет удобный текстовый ini-файл
  • Не требует никаких дурацких dll’ок, поэтому работает не только на моём компьютере
  • Не выполняет недопустимую операцию, когда не может получить доступ к интернету

При этом весит она всего 28 килобайт.

Она была сделана благодаря:

  • полезной ссылке на статью WinINet Functions в MSDN, которую дал Shade в комментариях к позапрошлой заметке
  • помощи Дмитрия Бирмана по освоению WinINet и подключению его к программе
  • помощи Павла Леонидовича Цытовича и Юлии Шабунио в борьбе с указателями и строками на Си.

Теперь e2NP, наконец, можно скачать и использовать.

См. также: Документация по NowPlayin.

Сборка полноценного exe-шника

NowPlayin у меня имеет две проблемы:

  • Он выполняет недопустимую операцию при попытке сообщить серверу очередной трэк, когда нет соединения с интернетом. Судя по всему, это проблема библиотеку Indy, которую я использую. Может быть кто-то знает какие-нибудь способы сделать HEAD-запрос без всяких библиотек, а, например, через WinAPI? Вообще, как это починить?
  • Мне никак не удаётся собрать его в такой exe-шник, который бы спокойно запускался на любой машине. Он постоянно хочет какие-то .dll-ки: при этом разные настройки компоновщика выливаются в разные размеры exe-шника (от 19 до примерно 500 КБ) и разные же требуемые .dll-ки

Кто что думает?

Update: Благодаря полезной ссылке, оставленной Shade в комментариях, а также помощи разных других людей, вопрос закрыт. В результате удалось получить 28-килобайтный полноценный exe-шник, что меня вполне устраивает.

e2 v802

Выложил новый дистрибутив e2 v802.

На сервере автообновления эта версия тоже есть, но обновляться прошу очень аккуратно, почитайте верлог внимательно. Среди нововведений со времени анонса Public Preview 2:

  • Из кода выкинута куча лишних объявлений глобальных переменных, ещё много чего ненужного; кое-какая оптимизация кое-где.
  • Исправлено много разных мелких ошибок и недочётов
  • Окончательный и бесповоротный переход на нормальные шаблоны дизайна — больше никаких дизайн-функций для форм и почтовых сообщений
  • Окончательный и бесповоротный переход на Callope, который, правда, по-прежнему beta; добавилась поддержка простых wiki-таблиц (немного глючная)
  • Смена дизайна через веб-интерфейс (редактор файлов шаблонов; очень удобно для небольших изменений)
  • Добавлены страницы «Самые комментируемые» (за всю история, за год, за месяц, за день)
  • Возможность вынести заголовки избранного и/или самых комментируемых на главную страницу
  • RSS заметок кейворда
  • Страница заметок, у которых нет кейвордов
  • Почтовые уведомления о скрытых комментариях теперь приходят независимо от включённости галочки «получать новые комментарии по почте»; иначе при чтении комментариев в RSS скрытые просто терялись.

Ronnie takes it to the final

Сегодня ночью на Eurosport показывали несколько фреймов полуфинального матча Ronnie O’Sullivan — Paul Hunter. Поскольку это было действительно поздно ночью, то Саша с Николаем Акимычем уже спали, что и позволило насладиться английским комментарием.

— It’s too risky, I’m quite sure he’s gonna play safe
— Well, he is pretty much likely going for it!

Хантер в этом матче явно не блистал, допустил несколько очень грубых ошибок — видимо выложился на Уоттане (James Wattana) в четвертьфинале. Ронни же был великолепен, и в результате именно он выходит на МакКалока (Ian McCulloch) в финале.

МакКалок в этом турнире играет очень хорошо, что логично для человека, вышедшего в финал, однако пока вряд ли он способен на равных сражаться с О’Салливаном, поэтому победитель, видимо, уже ясен. Тем не менее, я бы пожелал МакКалоку успехов в сезоне, отличное начало!

Надоедливое окно ActiveSync

Если вдруг вам надоело окошко ActiveSync, которое вылезает каждый раз, когда вы подключаете покет к компу, то можно выключить такое поведение:

ActiveSync: Tools — Options — Rules — Pass Through — Open ActiveSync when my mobile device connects.

Эта опция не влияет на синхронизацию, поэтому её следовало бы назвать «Restore ActiveSync window when my mobile device connects». А то с таким названием не удивительно, что люди не сразу осмеливаются её отключать: синхронизироваться-то хочется.

Питьевой йогурт

  • Да я же не со злаками! — пытался оправдываться питьевой йогурт.
Ранее Ctrl + ↓