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

Всё-таки, сколько будет 3.17+1.17? 
Позавчера с женой были в Харькове; завтракая в местном буфете на вокзале, абсолютно случайно увидел за соседним столиком товарища, как две капли воды похожего на небезызвестного Ричарда Столлмэна
Конечно, это был не он… Но сколько всего пронеслось перед глазами…
Остановилось всё на его лекции в ВМиК МГУ на такой картине:
И на полном автомате подсознание выдало: GNU is not UNIX, Gnu is antelope (гну — это не Юникс, гну — это антилопа).
Вот такие вот подсознательные реакции вызывает у меня RMS 
Имеется кусок кода:
#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 выдает интересную ошибку:
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++ и безопасное освобождение памяти» полностью…
Внимание всем спамерам!
Теперь ваша жизнь на моём блоге еще больше усложнилась — благодаря тому спаму, который вы упорно шлете в течение вот уже трех месяцев, я собрал превосходную статистику. И написал плагин, который будет с вами бороться… Если и дальше никаких проблем не будет, то, возможно, можно будет смело отключить премодерацию комментариев. Вот так!
PS: это всё благодаря одному очень замечательному плагину. Спам не пройдёт!
При решении одной задачи с вертикальным выравниванием и плавающими элементами внутри ячейки таблицы, натолкнулся на одну очень интересную особенность браузеров, построенных на движке Gecko, а также Internet Exploret 6 и 7: плавающие элементы конфликтуют со статическими инлайновыми или псевдо-инлайновыми элементами. Читать статью «Проблема с плавающими элементами в FireFox и IE6/7» полностью…
В программировании использование табуляции для создания отступов и форматирования исходного кода является темой для непрекращающихся дискуссий. Некоторые программисты полагают, что использование 8 пробелов для представления одного символа табуляции слишком много, мотивируя это тем, что просмотр кода с большим уровнем вложенности (и, как следствие, с большими отступами) затруднён. Программисты, предпочитающие использовать табуляцию, отвечают тем, что код с большим уровнем вложенности неудачен сам по себе.
Есть много аргументов как за использование табуляции, так и против. Тем не менее, при использовании табуляции возникают проблемы, если у человека, редактирующего впоследствии код, редактор сконфигурирован расширять табуляцию другим количеством пробелов. В результате в некоторых строках для отступах будет использоваться табуляция, в некоторых — пробелы или смесь из пробелов и табуляции. При просмотре в другом редакторе такой код может выглядеть просто ужасно.
К счастью, в Linux проблема решается очень просто (причем как для замены табуляции пробелами, так и наоборот). Читать статью «Простой способ глобальной замены табуляции на пробелы или наоборот» полностью…
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

Читать статью «Typo3, ExtDevEval и PHP5: избавляемся от фатальных ошибок» полностью…
Всё-таки программист — это не профессия; программист — это диагноз:

Скриншот сделан с этой страницы.
Симптом: при запуске Eclipse появляется окошко вида:

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