Ars Longa, Vita Brevis

Май 30, 2008

Пять звёздочек без JavaScript

Рубрика: CSS, HTML
Метки: , , , , ,
Vladimir

Прочитал сегодня статью "Пять звёздочек" на Pepelsbey.net. Автор описывает очень интересный подход для реализации механизма рейтингов; основное преимущество описываемого подхода — минимум JavaScript за счет грамотного использования CSS. Читать статью «Пять звёздочек без JavaScript» полностью…

Май 28, 2008

Пять советов верстальщику

Рубрика: CSS, HTML
Метки: ,
Vladimir

Принимая эстафету, организованную Никитой Селецким, от Максима Покровского, добавляю свои пять копеек в копилку советов по вёрстке.

  1. Изучайте стандарты W3C. Как это ни банально звучит, хороший верстальщик (да и web-разработчик) просто обязан (пусть не наизусть) знать и понимать спецификации. Недавно в книжном магазине видел книжку по верстке. Лучше бы я её не видел: вложенные таблицы, архаичные тэги и всё в том же духе. Так вот: такие книги — зло. Всё, что надо знать, есть в спецификациях :-) Следствия из данной рекомендации: да здравствует семантическая вёрстка; Vaild XHTML/CSS forever (тем не менее, это не должно быть самоцелью).
  2. Дизайн должен быть кросс-браузерным. Internet Explorer уже давно не единственный браузер, которым пользуются люди, но, тем не менее, существует большое количество сайтов, которые написаны исключительно под IE. Так вот, это неправильно. Дизайн (равно как и код) нужно тщательно тестировать в как можно большем количестве браузеров. Для тех, кто под Windows, вообще райская жизнь: на одной машине без проблем уживаются IE6/7, FireFox, Opera, Safari и даже Konqueror из виндового порта KDE4. Затраты времени на тест в различных браузерах окупаются: заказчики имеют тенденцию смотреть на дизайн в экзотических браузерах, и когда всё отлично смотрится с первого раза, их приятно удивляет. А приятное удивление заказчика оборачивается бонусами для исполнителя :-)
  3. Помните про usability и accessibility. Тестируйте сайт с выключенными картинками, JavaScript и CSS (в различных комбинациях). Страница без CSS позволяет получить представление о том, как поисковик воспринимает страницу. Контент в самом низу? Что же удивляться, что Гугол недооценивает сайт? Или поставьте себя на место человека с ограниченными способностями, использующего скринридер. Хватит ли у Вас терпения, чтобы прослушать главную страницу Вашего сайта? Или Вам это надоест, когда скринридер пойдет читать меню навигации? Отключили JavaScript и развалился дизайн/не отправляется форма? Далеко не все пользователи включают JavaScript. И если для правильного отображения сайта требуется то, что может не быть доступно всем пользователям — это минус.
  4. Изучайте работу мастеров. Это полезно. Только ключевое слово — изучайте. Если слепо передрать код/макет/нужное подставить без понимания того, что там происходит — это нехорошо. А если разобраться с кодом, то приобретаются знания и опыт. Как говорится, знание — сила.
  5. Упрощайте. Если код можно упростить, его нужно упростить. Во-первых, так понятнее, во-вторых — чище, в-третьих — размер страницы уменьшается. Суп из div'ов ничуть не лучше вложенных таблиц, поверьте.

Вроде всё… Эстафету передавать мне особо некому (разве что Вам, Всеволод), поэтому подхватывайте все желающие :-)

oDesk меня сегодня очень удивил…

3.17+1.17=?

Всё-таки, сколько будет 3.17+1.17? :-)

Май 27, 2008

GNU is not UNIX

Рубрика: Всё подряд
Метки: ,
Vladimir

Позавчера с женой были в Харькове; завтракая в местном буфете на вокзале, абсолютно случайно увидел за соседним столиком товарища, как две капли воды похожего на небезызвестного Ричарда Столлмэна :-) Конечно, это был не он… Но сколько всего пронеслось перед глазами… :-) Остановилось всё на его лекции в ВМиК МГУ на такой картине:

GNU is not UNIX

И на полном автомате подсознание выдало: GNU is not UNIX, Gnu is antelope (гну — это не Юникс, гну — это антилопа).

Вот такие вот подсознательные реакции вызывает у меня RMS :-)

Вот, собрал компьютер. Как говорится, без комментариев :-) Читать статью «Возьмём паяльник побольше, или, Чудеса ручной сборки» полностью…

Имеется кусок кода:

[-]
View Code C++
#include <string>
 
class Base {
public:
    Base(void) {}
    virtual ~Base(void) throw() {}
};
 
class Derived : public Base {
public:
    ::std::string s;
};
 
int main(int, char**)
{
    return 0;
}

При компиляции в GCC выдает интересную ошибку:

[-]
View Code Bash
g++ test.cpp
test.cpp:9: error: looser throw specifier for ‘virtual Derived::~Derived()test.cpp:6: error:   overriding ‘virtual Base::~Base() throw ()

Самое интересное, что если сделать Derived::s типа, например, int, то ошибка исчезнет.

В чем же дело? Читать статью «GCC и throw-спецификация у автоматически сгенерированного виртуального деструктора» полностью…

Разбираясь с деталями реализации распределителей памяти (allocator) в C++, я решил вспомнить своё криптографическое прошлое :-) Не в том плане, что я эксперт в криптографии, а в том, что приходилось читать соответствующую литературу (до сих порэтот гигабайт на винте валяется), разбираться с ней, анализировать алгоритмы, оценивать их с точки зрения безопасности и в том же духе. Но это не важно. Разбираясь с деталями реализации, я вспомнил интересную статью Питера Гутмана, "Secure Deletion of Data from Magnetic and Solid-State Memory". Еще в то время, когда я этим всем активно занимался и читал, мне в голову прочно врезалась фраза, смысл которой сводился к тому, что очень немногие криптографические библиотеки действительно заботятся о конфиденциальности чувствительной информации (например, ключи шифрования). Ведь информацию можно "вытащить" и из памяти выключенного компьютера; или с жесткого диска, даже если информация была переписана. Всех, кому интересна практическая реализация восстановления информации, отсылаю к статье Питера Гутмана (ссылка приведена выше).

Итак, сегодня выдалось очень подходящее настроение для копания в чужом C++ коде. Вот что из этого получилось. Читать статью «Криптография, C++ и безопасное освобождение памяти» полностью…

Май 21, 2008

Привет спамерам!

Рубрика: Всё подряд
Метки: , ,
Vladimir

Внимание всем спамерам!

Теперь ваша жизнь на моём блоге еще больше усложнилась — благодаря тому спаму, который вы упорно шлете в течение вот уже трех месяцев, я собрал превосходную статистику. И написал плагин, который будет с вами бороться… Если и дальше никаких проблем не будет, то, возможно, можно будет смело отключить премодерацию комментариев. Вот так! :-P

PS: это всё благодаря одному очень замечательному плагину. Спам не пройдёт!

При решении одной задачи с вертикальным выравниванием и плавающими элементами внутри ячейки таблицы, натолкнулся на одну очень интересную особенность браузеров, построенных на движке Gecko, а также Internet Exploret 6 и 7: плавающие элементы конфликтуют со статическими инлайновыми или псевдо-инлайновыми элементами. Читать статью «Проблема с плавающими элементами в FireFox и IE6/7» полностью…

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

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

К счастью, в Linux проблема решается очень просто (причем как для замены табуляции пробелами, так и наоборот). Читать статью «Простой способ глобальной замены табуляции на пробелы или наоборот» полностью…

Май 12, 2008

Интересная статистика

Рубрика: Всё подряд
Метки: ,
Vladimir

Google Suggest — весьма интересный инструмент: с его помощью можно "подсмотреть" наиболее популярные запросы по заданным ключевым словам.

Получается интересно (и немного страшно):
Как незаметно...

Меня очень смущает то, что запрос "как незаметно убить человека" лидирует в списке.

Впрочем, и другие запросы не радуют:

Как незаметно...

Так уж случилось, что пришлось заняться разработкой расширений для Typo3. Так вот получилось, что буквально через 15 минут тесного знакомства я нарвался на фатальную ошибку, вызванную расширением ExtDevEval:

Fatal error: Cannot re-assign $this in /var/www/typo3.sjinks.org.ua/typo3conf/ext/extdeveval/class.tx_extdeveval_fetchContentTopMenu.php on line 36

Fatal error: Cannot re-assign $this in /var/www/typo3.sjinks.org.ua/typo3conf/ext/extdeveval/class.tx_extdeveval_fetchContentTopMenu.php on line 36
Читать статью «Typo3, ExtDevEval и PHP5: избавляемся от фатальных ошибок» полностью…

Всё-таки программист — это не профессия; программист — это диагноз:

Сравнение стрингов

Скриншот сделан с этой страницы.

Симптом: при запуске Eclipse появляется окошко вида:

Could not initialize the application's security component

Лечится просто:

[-]
View Code Bash
mkdir -p ~/.mozilla/eclipse
Май 6, 2008

Наш ответ libresolv

Рубрика: C/C++, Linux
Метки: ,
Vladimir

Недавно мне пришлось заняться изучением интерфейса библиотеки libresolv, отвечающей за формирование DNS-запросов и получение и разбор ответов (хотя разбор — это громко сказано). Так получилось, что нормальной внятной документации по API-функциям с примерами использования я найти не смог (может, я не там искал). И хотя код — лучшая документация, окончательно разобраться с форматом возвращаемых данных я смог только после изучения RFC, посвященных DNS. Читать статью «Наш ответ libresolv» полностью…