<rmcreative>

RSS
  1. CSS3 PIE 1.0

    16 мая 2012

    Вышел релиз библиотеки PIE 1.0, котрая добавляет в IE 6, 7 и 8 поддержку некоторых возможностей CSS3: boder-radius, box-shadow, border-image, border-image и несколько фоновых изображений.

    Пользуемся

    2 комментария
  2. Векторные значки

    10 мая 2012

    Векторные значки, выполненные в виде шрифта, похоже, скоро будут использоваться повсеместно. Технически работают они даже в IE6, а, с приходом популярности, улучшаются и техники их использования.

    Я уже упоминал Font Awesome. Его, в несколько изменённом виде, мы будем использовать для новой версии stay.com. Внедрение, за исключением небольшой проблемы с CDN, прошло на ура. В итоге сэкономили кучу HTTP-запросов и получили масштабируемые значки.

    Вчера векторные значки внедрил github. Кстати, их анонс довольно подробный с технической точки зрения, можно использовать как пособие.

    Ну и стоит упомянуть недавно обновившийся Fontello, проект, который позволяет выбрать значки из кучи популярных наборов и собрать из них свой шрифт.

    3 комментария
  3. 20 лет Wolfenstein

    10 мая 2012

    ID Software, по случаю двадцатилетия игры-первопроходца жанра 3D-action, дала всем желающим бесплатно поиграть в версии для iPhone и iPad. Как приятное дополнение — можно поиграть прямо в браузере. Решив посмотреть, что же внутри этой версии, я был немного удивлён тому, что построена она на спрайтах и div-ах.

    4 комментария
  4. Решение проблемы сильно мелкого шрифта gmail в Opera

    2 мая 2012

    Последние версии Opera используют в gmail очень маленький шрифт. Хорошо, что Opera позволяет решить это быстро и безболезненно путём применения своего CSS:

    1. Создаём файлик с именем, например, gmail.css.
    2. Заходим в Google Mail. В контекстном меню выбираем «Настройки для сайта» → «Вид» → «Моя таблица стилей».
    3. Выбираем наш файл.
    4. В файл пишем немного CSS:
    body[contenteditable].editable {
        font-size: .8em !important
    }

    После этого обновляем страницу и наслаждаемся результатом.

    Комментировать
  5. Yeeki

    1 мая 2012

    В начале года, когда в 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.

    • Пробуем и форкаем

    4 комментария
  6. Запомнить во всех браузерах

    26 апреля 2012

    Не так давно задался вопросом кроссбраузерного «запоминания» пользователя на сайте. Не потому, что действительно была такая потребность. Просто в пришло в голову и решил проверить, насколько это возможно. Оказывается, вполне возможно и даже применяется.

    Логика подсказывает, что для того, чтобы несколько браузеров считали какое-то значение, значение должно быть установлено в нечто, которое всеми браузерами используется. Первым на ум приходит Flash. Его «Flash Cookie» или Local Shared Object оказывается вполне рабочим решением, которое используется, например, в Яндексе. Есть и в готовом виде с обёрткой для JavaScript.

    Также стоит упомянуть evercookie. Штука очень «злая». Хранит информацию огромной кучей разных способов: обычные cookie, Flash, Silverlight, HTML5 LocalStorage и другие. Всего их 13. При попытке удаления части данных, библиотека их восстанавливает. Отлично должно подойти для отлова клонов, хотя, конечно, тут уже попахивает печеньками с тёмной стороны.

    10 комментариев
  7. И ещё раз про невнятные ошибки MySQL

    18 апреля 2012

    Снова наткнулся на совсем-совсем невнятные ошибки 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, скрывая от конечного пользователя действительно важную для него информацию?

    7 комментариев
  8. Опасность слепой проверки заголовка X-Forwarded-For

    15 апреля 2012

    Сегодня пришёл 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 на всякий случай.

    36 комментариев
  9. YiiConf 2012, открыта финальная регистрация

    10 апреля 2012

    Открыта финальная регистрация на первую ежегодную профессиональную конференцию YiiConf.

    • Дата проведения конференции: 19 мая
    • Стоимость участия: $50, 1500р. или 400 гривен
    • Количество мест: 200
    • Место проведения: ул. Михайловская, 1/3 (Площадь Независимости) г. Киев, 01001, Украина

    Читаем

    2 комментария
  10. Подробное сравнение синтаксиса PHP, Perl, Python и Ruby

    30 марта 2012

    Целых две страницы с подробным сравением синтаксиса интерпретируемых языков программирования.

    10 комментариев