• Наследование ActiveRecord's, описывающих одну таблицу (паттерн single table inheritance) в Yii2

    В большинстве реляционных баз данных, к сожалению, нет поддержки наследования, так что приходится реализовывать это вручную. В этой статье я хочу кратко показать, как реализовать такой подход к наследованию, как «single table inheritance», описанный в книге «Patterns of Enterprise Application Architecture» by Martin Fowler.

    В соответствии с этим паттерном, нужно использовать общую таблицу для наследуемых моделей и в этой таблице добавить поле type, которое будет определять класс-наследника этой записи.

    В этой статье будет использоваться следующая структура наследования моделей:

    Car
    |- SportCar
    |- HeavyCar
    

    Таблица `car` имеет следующую структуру:

    CREATE TABLE `car` (
        `id` int NOT NULL AUTO_INCREMENT,
        `name` varchar(255) NOT NULL,
        `type` varchar(255) DEFAULT NULL,
        PRIMARY KEY (`id`)
    );
    
    INSERT INTO `car` (`id`, `name`, `type`) VALUES (1, 'Kamaz', 'heavy'), (2, 'Ferrari', 'sport'), (3, 'BMW', 'city');
    

    Модель Car можно сгенерировать с помощью Gii.
    Читать дальше →
  • Хэширование паролей в PHP 5.5 с использованием нового API

    Использование BCrypt является общепринятым и лучшим способом для хэширования паролей, но большое количество разработчиков по-прежнему используют старые и слабые алгоритмы, вроде MD5 и SHA1. Некоторые разработчики даже не используют соль для хэширования. Новый API хэширования в PHP 5.5 ставит своей целью привлечь внимание к BCrypt, упрощая работу с ним. В этой статье я расскажу об основах использования нового API для хеширования в PHP.

    Новый API хэширования паролей предоставляет четыре простых функции:
    • password_hash() — используется для хэширования пароля.
    • password_verify() — используется для проверки пароля на соответствие хэшу.
    • password_needs_rehash() — используется для проверки необходимости создать новый хэш.
    • password_get_info() — возвращает имя алгоритма хеширования и различные параметры, используемые при хэшировании.

    Читать дальше →
  • Полезные сниппеты на HTML5

    • Translation
    Эта подборка полезных сниппетов, использующих HTML5, может помочь вам улучшить ваш сайт.

    Автозаполнение в текстовых полях


    Используя HTML5-элемент datalist вы можете создать текстовое поле с автозаполнением. Очень удобно!
    <input name="frameworks" list="frameworks" />
    
    <datalist id="frameworks">
    	<option value="MooTools">
    	<option value="Moobile">
    	<option value="Dojo Toolkit">
    	<option value="jQuery">
    	<option value="YUI">
    </datalist>
    

    Читать дальше →
  • Подборка инструментов для фронт-энд разработки

    • Translation
    Как разработчику, мне очень нравятся инструменты, которые помогают сэкономить время или упростить процесс разработки фронт-энда. В этой статье я собрал мои любимые веб-инструменты для упрощения разработки веб-интерфейсов.

    Картинки кликабельны.

    Form builder


    Формы являются очень важной частью любого веб-сайта, но их верстка может занять продолжительное время. Этот очень удобный инструмент, поможет вам создать красивую веб-форму очень быстро.
    image
    Читать дальше →
  • Представлен работающий прототип ховербайка

      Компания Aerofex представила публике уже работающий прототип ховербайка. К сожалению, в ближайших планах компании – доработка платформы для беспилотного использования, но можно надеяться, что в будущем найдется место и пилотируемым версиям. Сама разработка, по утверждению представителей компании, родом еще из 1960-х, но тогда у нее было несколько неразрешимых технических проблем. Теперь же прототип доработан и даже испытан. Пилотируемая версия сейчас испытывается на высотах до 4,5 метров и скорости до 50 км/ч, но это далеко не предел возможностей аппарата. В ближайшем будущем Aerofex планируют адаптировать платформу к беспилотному использованию и распространять получившийся аппарат в различных сферах от сельского хозяйства до армии.

      Под катом пара видео и интересная ссылка
    • Подборка CSS3-генераторов для упрощения фронтэнд-разработки

      • Translation
      CSS3 предоставляет много новых возможностей в мире фронтэнд-разработки. Это действительно великолепная вещь, но иногда трудно вспомнить некоторые параметры, особенно, если вы — веб-дизайнер, а не программист. Вот 10 удивительных CSS3-генераторов, которые помогут вам сэкономить время и силы (картинки кликабельны).
      Читать дальше →
    • Российский детектор нейтронов на «Curiosity» начал работу. Воды пока не обнаружено

        В пятницу, на марсоходе был включен российский нейтронный детектор ДАН и генератор нейтронов. Пресс-служба ИКИ РАН, где был создан прибор, сообщает:
        Получена телеметрическая и научная информация, которая свидетельствует о штатной работе аппаратуры. Аппаратура ДАН проработала в течение одного часа штатно без замечаний и была выключена по команде. Получена первая научная информация о составе вещества Марса и о радиационном фоне в районе посадки

        Детектор ДАН («Динамическое альбедо нейтронов») является вкладом России в проект марсохода и одним из двух «иностранцев» среди научных инструментов на его борту (второй — метеостанция REMS, созданная испанскими учеными).
        Читать дальше →
      • Немного о хэшах и безопасном хранении паролей

        Upd. Если вы знаете, что такое BCrypt, можете дальше не читать. Если вы используете PHP 5.5+ то можете прочитать эту статью. Ниже же я изобрел свой велосипед, рабочий, но с двумя рулями, задний запасной. Молод был, горяч.

        Привет, хабр! Сегодня, в процессе разработки системы аутентификации для своего проекта передо мной встал выбор — в каком виде хранить пароли пользователей в базе данных? В голову приходит множество вариантов. Самые очевидные:

        • Хранить пароли в БД в открытом виде.
        • Использовать обычные хэши crc32, md5, sha1
        • Использовать функцию crypt()
        • Использовать статическую «соль», конструкции вида md5(md5($pass))
        • Использовать уникальную «соль» для каждого пользователя.

        Читать дальше →