Как стать автором
Обновить
  • по релевантности
  • по времени
  • по рейтингу

Использование traits для обустройства Win32 API

C++ *

Вступление


Всякому известно, что Win32 API не отличается чрезмерным удобством. Например, для вызова функции частенько приходится заполнять большую структуру с полями вроде cbSize, dwFlags и т. д. Или для получения строки сначала узнавать размер ее, готовить буфер и затем лишь получать саму строку. Далее пойдет речь про функцию ::HttpQueryInfo() и применение идиомы «traits» для упрощения работы с ней.
Читать дальше →
Всего голосов 24: ↑20 и ↓4 +16
Просмотры 2.6K
Комментарии 21

Traits в php 5.4. Разбираем детали реализации

PHP *
Tutorial
Совсем недавно вышла первая beta php 5.4, а пока я писал топик подоспела и вторая. Одно из нововведений в 5.4 – это traits (типажи). Предлагаю разобраться во всех деталях в том, что же типажи из себя представляют в php.

Простой пример типажа, чтобы не заглядывать в Википедею:
//определение типажа
trait Pprint 
{
    public function whoAmI()
    {
        return get_class($this) . ': ' . (string) $this;
    }
}

class Human 
{
    use Pprint; //подключаем типаж, ключевое слово use

    protected $_name = 'unknown';
    
    public function __construct($name)
    {
        $this->_name = $name;
    }

    public function __toString()
    {
        return (string) $this->_name;
    }   
}

$a = new Human('Nikita');
echo $a->whoAmI(), PHP_EOL; //=> Human: Nikita

Как видно, к классу Human было добавлено поведение из типажа Pprint.

Но во всём есть свои детали.
О них далее
Всего голосов 163: ↑155 и ↓8 +147
Просмотры 50K
Комментарии 102

Вышел PHP 5.4 RC4

PHP *
Вышел очередной релиз — кандидат новой ветки PHP 5.4. Отличия от предыдущей сборки:
  • Добавлена конфигурационная переменная max_input_vars, позволяющая бороться с атаками, основанными на совпадении хэшей (hash collision attacks)
  • Исправлен segfault в работе traits
  • Исправлен баг с некорректным чтением и записью при использовании traits
  • Исправлен segfault после 2 POST запросов с типом multipart/form-data (коды 200 + 404)
  • Исправлена ошибка с неотображением ошибок PHP в некоторых браузерах, использующих SAPI
  • Исправлен segfault при использовании старых версий OpenSSL
  • Исправлены неработающие функции bindValue и bindParam в драйвере PDO для Firebird
Кстати для тех, кто хочет попробовать новые возможности PHP 5.4 (например, traits), не разбираясь в тонкостях сборки PHP из исходных кодов в своей Debian-based системе, можете использовать пакеты версии 5.3.99 с сайта http://apt.damz.org/(для Ubuntu 11.04).
Всего голосов 21: ↑17 и ↓4 +13
Просмотры 1.1K
Комментарии 16

Doctrine ORM behaviors, или как эффективно использовать трейты

PHP *Symfony *Doctrine ORM *
С момента релиза php 5.4 уже прошло некоторое время, и мы решили поэкспериментировать с трейтами (traits), оценить их практическое применение. Как их можно использовать вместе с объектами Doctrine2?

Трейты


Трейты в php — это набор свойств и методов, которые можно добавить в класс.
Они реализованы на уровне интерпретатора и являются абсолютно прозрачными для Doctrine.

Трейты спроектированы для горизонтального повторного использования и идеально подходят для добавления общего поведения в несколько объектов.
Читать дальше →
Всего голосов 20: ↑20 и ↓0 +20
Просмотры 6.6K
Комментарии 17

Лучшее в мире PHP за 2012 и дайджест интересных материалов за последние две недели №7 (15.12.2012 — 28.12.2012)

Блог компании Zfort Group Разработка веб-сайтов *PHP *


Следуя традиции, мы решили подвести итоги уходящего года и выделить самые значимые события в мире PHP, которых, к счастью, было немало. И, конечно же, подборка с ссылками на свежие материалы.

Приятного чтения!
Читать дальше →
Всего голосов 82: ↑71 и ↓11 +60
Просмотры 28K
Комментарии 23

Типажи в PHP: хорошо это или плохо?

PHP *
Перевод
Типажи в PHP: хорошо это или плохо?

В марте 2012 года был анонсирован релиз PHP 5.4. В этой версии должно было появиться множество интересных нововведений, так что разработчики ждали его с нетерпением. Пожалуй самой ожидаемой особенностью стали типажи (traits). Еще до релиза, Shameer C написал замечательный обзор возможностей, которые дают нам типажи в PHP. Я настоятельно рекомендую вам ознакомиться с этой статьей, так как моя статья предполагает наличие у вас базовых знаний по типажам и понимание их работы.

Сообщество разработчиков PHP приняло типажи, в основном потому, что они уже были реализованы в других популярных языках программирования, например Java, C++ и Python. Кроме того, преимущества типажей были хорошо разрекламированы разработчиками, которые вставляли свои пять копеек, касательно того, как типажи помогут улучшить любой проект, особенно как замена наследования. Но так ли хороши типажи на самом деле? Помогут ли они повысить уровень PHP разработчиков, или же это просто очередная причуда?
Читать дальше →
Всего голосов 51: ↑34 и ↓17 +17
Просмотры 23K
Комментарии 140

Дайджест интересных новостей и материалов из мира PHP за последние две недели №15 (08.04.2013 — 22.04.2013)

Блог компании Zfort Group Разработка веб-сайтов *PHP *


Предлагаем вашему вниманию очередную подборку с ссылками на новости и материалы.

Приятного чтения!
Читать дальше →
Всего голосов 96: ↑80 и ↓16 +64
Просмотры 23K
Комментарии 10

Типажи и анонимные функции в PHP. Кря-кря!

PHP *
Tutorial
В данной статье я не буду рассказывать, что такое Типажи, не буду описывать синтаксис, или разбирать всякие тонкости, связанные с разрешением имен и наследованием Типажей. На эту тему на Хабре уже есть фундаментальная статья.
Я хочу лишь показать один маленький, но гордый пример использования типажей совместно с анонимными функциями. В нем не будет ничего технически сложного: всего один типаж и два класса. Практической ценности в нем тоже не очень много, как и в любом модельном примере. Но идея — каким образом можно структурировать и переиспользовать код — на мой взгляд очень ценна.
Заинтересовавшихся прошу под кат.
Читать дальше →
Всего голосов 74: ↑63 и ↓11 +52
Просмотры 27K
Комментарии 51

Дайджест интересных новостей и материалов из мира PHP за последние две недели №17 (06.05.2013 — 21.05.2013)

Блог компании Zfort Group Разработка веб-сайтов *PHP *


Предлагаем вашему вниманию очередную подборку с ссылками на новости и материалы.

Приятного чтения!
Читать дальше →
Всего голосов 76: ↑64 и ↓12 +52
Просмотры 20K
Комментарии 12

Открытые классы в ruby, заметки для питонистов

Ruby *Python *
По своему опыту знаю, что открытые классы в ruby раздражают и вызывают непонимание в среде питонистов. Ну в самом деле, что за странность открыть класс String и переопределить там size?
Читать дальше →
Всего голосов 14: ↑9 и ↓5 +4
Просмотры 5.4K
Комментарии 40

Webiny Framework. Первый взгляд

Разработка веб-сайтов *PHP *Проектирование и рефакторинг *
Перевод
Tutorial
Есть шутка о типичной карьере разработчика:

  1. Не использует фреймворки
  2. Обнаруживает фреймворки
  3. Пишет свои фреймворки
  4. Не использует фреймворки

Пункт 4, конечно же, ссылается на новоприобретенные способности использовать Composer для построения собственных фреймворков, создавая их из различных компонентов третьих сторон.

Все мы знаем, что экосистема PHP не страдает от нехватки различных фреймворков, и поэтому я немного удивился, когда увидел еще один, созданный сравнительно недавно.

Webiny

Он называется Webiny, и, будучи упакованным до краев усовершенствованиями и изменениями, которые они считают необходимыми, фреймворк имеет некоторые действительно интересные компоненты, на которые стоит взглянуть. В этой вводной статье мы не будем обращать внимание на структуру в целом, но осветим самые основные ее компоненты — StdLib.
Читать дальше →
Всего голосов 18: ↑12 и ↓6 +6
Просмотры 8.6K
Комментарии 8

Особенности (traits) в Perl 6 – метаданные вместе с символом

Perl *Программирование *
Перевод
Особенности (Traits) – это удобный и расширяемый способ присоединения метаданных к различным видам объектов в Perl 6. Рассмотрим пример особенности с is cached, автоматически кеширующей возвращаемое функцией значение в зависимости от переданных аргументов.

# следующий код вызывается, когда к функции
# добавляется 'is cached' 
multi sub trait_mod:<is>(Routine $r, :$cached!) {
     my %cache;
     # обернём функцию в блок, который
     $r.wrap(-> $arg {
         # ищет аргумент в кеше
         %cache{$arg}:exists
             ?? %cache{$arg}
             # ... и вызывает оригинал, если он не найден
             !! (%cache{$arg} = callwith($arg))
         }
     );
 }
 
 # пример применения:
 sub fib($x) is cached {
     say("fib($x)");
     $x <= 1 ?? 1 !! fib($x - 1) + fib($x - 2);
 }

 # для всех значений от 0 до 10 происходит лишь по одному вызову
 say fib(10);

Читать дальше →
Всего голосов 11: ↑9 и ↓2 +7
Просмотры 1.9K
Комментарии 2

Yii2 bad behaviors

Блог компании DataArt PHP *Yii *
Минимальная версия PHP для Yii2 — 5.4. Минимальная версия PHP для Traits — 5.4. Совпадение? Не думаю!



Yii2 уже давно пора избавиться от этих плохих поведений. И вот почему.
Читать дальше →
Всего голосов 10: ↑6 и ↓4 +2
Просмотры 8.3K
Комментарии 38

Traits из коробки

Rust *
Из песочницы
В стандартной библиотеке языка Rust есть несколько трейтов, которые можно объявить "на халяву" с помощью derive. Эти трейты обязательно пригодятся при объявлении собственных структур, они очень часто встречаются в различных open-source библиотеках, но их реализация генерируется компилятором и может вызывать вопросы.
Часто видите:

#[derive(RustcEncodable, RustcDecodable, Clone, Eq, Default)]
struct Foo {
}

и не понимаете, что это и где?
Тогда вам под кат!
Всего голосов 24: ↑24 и ↓0 +24
Просмотры 6.7K
Комментарии 3

Почему я отказался от Rust

Программирование *C++ *C *C# *Rust *
Перевод


Когда я узнал, что появился новый язык программирования системного уровня, с производительностью как у С++ и без сборщика мусора, я сразу заинтересовался. Мне нравится решать задачи с помощью языков со сборщиками мусора, вроде C# или JavaScript, но меня постоянно терзала мысль о сырой и грубой мощи С++. Но в С++ так много способов выстрелить себе в ногу и других хорошо известных проблем, что я обычно не решался.


Так что я влез в Rust. И, блин, влез глубоко.


Язык Rust все еще довольно молод, поэтому его экосистема пока находится в стадии начального развития. В некоторых случаях, например, в случае с вебсокетами или сериализацией есть хорошие и популярных решения. В других областях у Rust не все так хорошо. Одна из таких областей это OpenGL GUI, вроде CEGUI или nanogui. Я хотел помочь сообществу и языку, поэтому взялся за портирования nanogui на Rust, с кодом на чистом Rust, без связок с С/C++. Проект можно найти тут.


Обычно, знакомство с Rust начинается с борьбы с идеей borrow-checker. Как и у других программистов, у меня тоже был период, когда я не мог понять, как решить ту или иную проблему. К счастью, есть классное сообщество в #rust-beginners. Его обитатели помогали мне и отвечали на мои дурацкие вопросы. Мне понадобилось несколько недель на то, чтобы почувствовать себя более-менее комфортно в Rust.


Но я не подозревал, что когда сталкиваешься с проблемой, поиск решения похож на ориентацию в джунглях. Часто находится несколько ответов, которые похожи на решение твоей проблемы, но не подходят из-за крохотной детали.

Читать дальше →
Всего голосов 57: ↑46 и ↓11 +35
Просмотры 61K
Комментарии 119

Генерация типаж-объектов на лету (или безумие с Rust)

Rust *
Из песочницы

В этой статье мы немного потешимся с языком программирования Rust, а в частности, с типаж-объектами.


Когда я знакомился с Rust, одна из деталей реализации типаж-объектов мне показалась интересной. А именно то, что виртуальная таблица функций находится не в самих данных, а в "толстом" указателе на них. Каждый указатель на типаж-объект ) содержит указатель на сами данные, а так же ссылку на виртуальную таблицу, где будут находиться адреса функций, реализующий данный типаж-объект для заданной структуры (но так как это деталь реализации, то поведение может поменяться.

Читать дальше →
Всего голосов 48: ↑45 и ↓3 +42
Просмотры 6.6K
Комментарии 19

На пальцах: ассоциированные типы в Rust и в чём их отличие от аргументов типов

Программирование *Rust *
Из песочницы

Для чего в Rust есть ассоциированные типы (associated types), и в чём их отличие от аргументов типов (type arguments aka generics), ведь они так похожи? Разве недостаточно только последних, как во всех нормальных языках? У тех, кто только начинает изучать Rust, а особенно у людей, пришедших из других языков ("Это же дженерики!" — скажет умудрённый годами джавист), такой вопрос возникает регулярно. Давайте разбираться.


TL;DR Первые контролирует вызываемый код, вторые — вызывающий.

Научите меня плохому!
Всего голосов 51: ↑50 и ↓1 +49
Просмотры 6.8K
Комментарии 10

Юнит-тестирование шаблонов C++ и Mock Injection с помощью трейтов (Traits)

Блог компании OTUS Программирование *C++ *
Перевод
Еще раз здравствуйте! До старта занятий в группе по курсу «Разработчик С++» остается меньше недели. В связи с этим мы продолжаем делиться полезным материалом переведенным специально для студентов данного курса.



Юнит-тестирование вашего кода с шаблонами время от времени напоминает о себе. (Вы ведь тестируете свои шаблоны, верно?) Некоторые шаблоны легко тестировать. Некоторые — не очень. Иногда не хватает конечной ясности насчет внедрения mock-кода (заглушки) в тестируемый шаблон. Я наблюдал несколько причин, по которым внедрение кода становится сложным.

Ниже я привел несколько примеров с примерно возрастающей сложностью внедрения кода.
Читать дальше →
Всего голосов 15: ↑14 и ↓1 +13
Просмотры 3K
Комментарии 1

Для чего пригодится дефолтная реализация интерфейсов?

Программирование *Совершенный код *.NET *C# *
Перевод
В моем последнем посте я обещал рассказать о некоторых случаях, в которых, я думаю, имеет смысл рассмотреть использование дефолтной реализации в интерфейсах. Эта фича, конечно, не отменяет множество уже существующих соглашений по написанию кода, но я обнаружил, что в некоторых ситуациях использование дефолтной реализации приводит к более чистому и читаемому коду (по крайней мере, на мой взгляд).
Читать дальше →
Всего голосов 12: ↑12 и ↓0 +12
Просмотры 6.7K
Комментарии 6

Используем трейты для полиморфных связей в Laravel

PHP *Laravel *
Tutorial

Введение


Поговорим о возможном применении трейтов вместе с полиморфными отношениями в Laravel.


Содержание статьи:


  1. Описание предметной области
  2. Создание приложения
  3. Возможные структуры БД
  4. Создание сущностей
  5. Использование трейта
  6. Написание тестов
Продолжение под катом
Всего голосов 18: ↑14 и ↓4 +10
Просмотры 5.7K
Комментарии 6
1