Вышел релиз библиотеки PIE 1.0, котрая добавляет в IE 6, 7 и 8 поддержку некоторых возможностей CSS3: boder-radius, box-shadow, border-image, border-image и несколько фоновых изображений.
- 
	CSS3 PIE 1.016 мая 2012 2 комментария
- 
	Векторные значки10 мая 2012 3 комментарияВекторные значки, выполненные в виде шрифта, похоже, скоро будут использоваться повсеместно. Технически работают они даже в IE6, а, с приходом популярности, улучшаются и техники их использования. Я уже упоминал Font Awesome. Его, в несколько изменённом виде, мы будем использовать для новой версии stay.com. Внедрение, за исключением небольшой проблемы с CDN, прошло на ура. В итоге сэкономили кучу HTTP-запросов и получили масштабируемые значки. Вчера векторные значки внедрил github. Кстати, их анонс довольно подробный с технической точки зрения, можно использовать как пособие. Ну и стоит упомянуть недавно обновившийся Fontello, проект, который позволяет выбрать значки из кучи популярных наборов и собрать из них свой шрифт. 
- 
	20 лет Wolfenstein10 мая 2012 4 комментария ID Software, по случаю двадцатилетия игры-первопроходца жанра 3D-action, дала всем желающим бесплатно поиграть в версии для iPhone и iPad. Как приятное дополнение — можно поиграть прямо в браузере. Решив посмотреть, что же внутри этой версии, я был немного удивлён тому, что построена она на спрайтах и div-ах. 
- 
	Решение проблемы сильно мелкого шрифта gmail в Opera2 мая 2012 КомментироватьПоследние версии Opera используют в gmail очень маленький шрифт. Хорошо, что Opera позволяет решить это быстро и безболезненно путём применения своего CSS: - Создаём файлик с именем, например, gmail.css.
- Заходим в Google Mail. В контекстном меню выбираем «Настройки для сайта» → «Вид» → «Моя таблица стилей».
- Выбираем наш файл.
- В файл пишем немного CSS:
 body[contenteditable].editable { font-size: .8em !important } После этого обновляем страницу и наслаждаемся результатом. 
- Создаём файлик с именем, например, 
- 
	Yeeki1 мая 2012 4 комментарияВ начале года, когда в CleverTech текущий проект был закрыт, а новый ещё не начат, появилась возможность в рабочее время заняться чем-нибудь общественно полезным и интересным. А так как идея написать wiki-движок на Yii посещала меня не первый раз, в качестве проекта была выбрана именно она. В Yii 1.1 Application Development Cookbook я приводил как пример сверхпростой wiki-движок на основе markdown. Без ревизий, разделения прав и других полезных штук. В этот раз я настроился посерьёзней и через некоторое время появился Yeeki — простой, но вполне себе рабочий wiki-движок. Основные возможности: - Можно использовать и как приложение и как модуль для встраивания в любое приложение на Yii.
- Unicode.
- namespace.
- Индекс страниц.
- История изменений, просмотр отдельных ревизий, diff.
- Возможность ввести описание для правок и посмотреть его в истории.
- Возможность прикрутить любую разметку (из коробки поддерживается markdwon).
- Дополнительная разметка для [[wiki-ссылок]].
 В планах к версии 1.0: - Права для namespace и отдельных страниц.
- Разрешение конфликтов при одновременном редактировании.
- Вложенные namespace.
- Экспорт в PDF.
- Инсталлятор.
- Поддержка PostgreSQL, SQLite. 
 
- 
	Запомнить во всех браузерах26 апреля 2012 10 комментариевНе так давно задался вопросом кроссбраузерного «запоминания» пользователя на сайте. Не потому, что действительно была такая потребность. Просто в пришло в голову и решил проверить, насколько это возможно. Оказывается, вполне возможно и даже применяется. Логика подсказывает, что для того, чтобы несколько браузеров считали какое-то значение, значение должно быть установлено в нечто, которое всеми браузерами используется. Первым на ум приходит Flash. Его «Flash Cookie» или Local Shared Object оказывается вполне рабочим решением, которое используется, например, в Яндексе. Есть и в готовом виде с обёрткой для JavaScript. Также стоит упомянуть evercookie. Штука очень «злая». Хранит информацию огромной кучей разных способов: обычные cookie, Flash, Silverlight, HTML5 LocalStorage и другие. Всего их 13. При попытке удаления части данных, библиотека их восстанавливает. Отлично должно подойти для отлова клонов, хотя, конечно, тут уже попахивает печеньками с тёмной стороны. 
- 
	И ещё раз про невнятные ошибки MySQL18 апреля 2012 7 комментариевСнова наткнулся на совсем-совсем невнятные ошибки MySQL. Всё больше убеждаюсь, что о людях при написании данной его части никто не думал. ALTER TABLE `post` DROP FOREIGN KEY `FK_Post_UserID` В результате получаем: SQLSTATE[HY000]: General error: 1025 Error on rename of './mydb/post' to './mydb/#sql2-11a-1f2c' (errno: 152) Очень помогло… Оказывается, нормальую информацию, получить всё-таки можно. Правда, через одно место: SHOW ENGINE INNODB STATUS отдаст нам кучу всего, в том числе: LATEST FOREIGN KEY ERROR ------------------------ 120418 16:58:22 Error IN dropping of a FOREIGN KEY CONSTRAINT of TABLE "mydb"."post", IN SQL command ALTER TABLE `post` DROP FOREIGN KEY `FK_Post_UserID` Cannot find a CONSTRAINT WITH the given id "FK_Post_UserID". Вот это уже намного понятней. У нас просто нет FK с таким именем. Интересно, чем руководствовались разработчики MySQL, скрывая от конечного пользователя действительно важную для него информацию? 
- 
	Опасность слепой проверки заголовка X-Forwarded-For15 апреля 2012 36 комментариевСегодня пришёл pull-request в Yii на эту тему. В классе CHttpRequestесть методgetUserHostAddress, который отдаёт нам IP пользователя. Предложение было перед возвратом$_SERVER['REMOTE_ADDR']проверить, а нет ли чего в$_SERVER['HTTP_X_FORWARDED_FOR'], и, если есть — вернуть. Мотивация — будут видны IP пользователей за прокси.Так как такое заблуждение встречается ну очень часто, я даже не сразу вспомнил, откуда берётся $_SERVER['HTTP_X_FORWARDED_FOR']. А берётся он из заголовка HTTP запросаX-Forwarded-Forи означает это то, что придти нам может что угодно.А теперь представим, что разработчик воспользовался изменённым методом getUserHostAddress, проверяющимX-Forwarded-For:if(in_array(Yii::app()->request->getUserHostAddress(), $allowedAddresses)) { // даём доступ к админке } Тем, кто пишет на Zend Framework, кстати, стоит проверить свой код потому как Zend_Controller_Request_Http::getClientIp()без переданного аргументомfalseкак раз проверяетX-Forwarded-For:/** * Get the client's IP addres * * @param boolean $checkProxy * @return string */ public function getClientIp($checkProxy = true) { if ($checkProxy && $this->getServer('HTTP_CLIENT_IP') != null) { $ip = $this->getServer('HTTP_CLIENT_IP'); } else if ($checkProxy && $this->getServer('HTTP_X_FORWARDED_FOR') != null) { $ip = $this->getServer('HTTP_X_FORWARDED_FOR'); } else { $ip = $this->getServer('REMOTE_ADDR'); } return $ip; } Заслал репорт в трекер Zend Framework на всякий случай. 
- 
	YiiConf 2012, открыта финальная регистрация10 апреля 2012 2 комментария Открыта финальная регистрация на первую ежегодную профессиональную конференцию YiiConf. - Дата проведения конференции: 19 мая
- Стоимость участия: $50, 1500р. или 400 гривен
- Количество мест: 200
- Место проведения: ул. Михайловская, 1/3 (Площадь Независимости) г. Киев, 01001, Украина
 
- 
	Подробное сравнение синтаксиса PHP, Perl, Python и Ruby30 марта 2012 10 комментариевЦелых две страницы с подробным сравением синтаксиса интерпретируемых языков программирования. 


