Как стать автором
Обновить
438
0
Антон Шевчук @AntonShevchuk

Пользователь

Отправить сообщение

Валидировали, валидировали… и вывалидировали! Сравниваем валидаторы данных в PHP

Время на прочтение12 мин
Количество просмотров20K

Изображение взято с сайта Michiana Stransportation (Bike Shops)


Если вы еще не в курсе, что такое Kontrolio, предлагаю прочесть первую часть — «Держите свои данные под контролем». Вкратце, это моя библиотека для валидации данных, написанная на PHP.

В предыдущей статье я обещал написать сравнение своей собственной библиотеки с другими имеющимися решениями, так что сегодня мы рассмотрим валидацию с помощью Aura.Filter, Respect Validation, Sirius Validation и Valitron.

Читать дальше →
Всего голосов 31: ↑29 и ↓2+27
Комментарии31

Буфер вывода в PHP

Время на прочтение8 мин
Количество просмотров52K
В этой статье я хочу рассказать о том, как реализован слой «буферизации вывода» в PHP, как работает и как с ним взаимодействовать из PHP. В этом слое нет ничего сложного, но многие разработчики либо совсем не понимают, как с ним обращаться, либо не имеют полной ясности. Всё, о чём я буду писать, относится к PHP версии 5.4 и выше. Именно начиная с неё изменились многие вещи, связанные с буфером вывода (БВ). По сути, этот функционал был полностью переписан, поэтому совместимость с версией 5.3 сохранилась лишь частично.

Что такое буфер вывода?


Поток вывода в PHP содержит байты, обычно в виде текста, которые разработчику надо вывести на экран. Чаще всего для этого используется конструкция echo или printf(). Во-первых, нужно понимать, что любая функция, которая что-то выводит, будет использовать БВ из области PHP. Если говорить о расширениях для PHP, то можно получить доступ к функциям, пишущим в SAPI напрямую, в обход любого вышерасположенного БВ. API C задокументировано в lxr.php.net/xref/PHP_5_5/main/php_output.h, отсюда можно почерпнуть немало информации, например, о размере буфера по умолчанию.

Второй важный момент: слой БВ является не единственным слоем, в котором буферизуются выводимые данные.

И третье: в зависимости от SAPI, который вы используете (веб или cli), слой БВ может вести себя по-разному.

Ниже представлена схема, которая поможет понять всё вышесказанное:

Читать дальше →
Всего голосов 59: ↑52 и ↓7+45
Комментарии10

Эффективные структуры данных для PHP 7

Время на прочтение11 мин
Количество просмотров51K
PHP имеет всего одну структуру данных для управления всем. array — сложный, гибкий, гибридный, сочетает в себе поведение list и linked map. Но мы используем его для всего, потому что PHP придерживается прагматичного подхода: иметь предельно правильный, здравый и реалистичный способ решения проблемы, исходящий из практических, а не теоретических рассуждений. array позволяет делать работу, хотя о нем и так много рассказывают на лекциях по информатике. Но, к сожалению, с гибкостью приходит и сложность.

Последний релиз PHP вызвал большое оживление в сообществе. Мы не могли дождаться того, чтобы начать использовать новые возможности и почувствовать вкус ~2х прироста производительности. Одна из причин, почему это случилось — структура array была переработана. Но массивы все также придерживаются принципа «оптимизировано для всего; оптимизировано для ничего», еще не все идеально, есть возможности для совершенствования.

А что насчет структур данных SPL?
К сожалению… они ужасны. Раньше, до PHP7, они предлагали _некоторые_ преимущества, но сейчас мы дошли до точки, когда использование SPL не имеет практического смысла.

Почему мы не можем просто поправить и улучшить их?
Да, мы могли бы, но я считаю, что их дизайн и реализация настолько бедны, что лучше бы найти более современную замену.
«SPL data structures are horribly designed.»
Anthony Ferrara


Введение: php-ds — расширение для PHP7, добавляющее структуры данных. Этот пост кратко охватывает поведение, производительность и преимущества каждой из них. Также в конце вы найдете список ответов на ожидаемые вопросы.

Github: https://github.com/php-ds
Пространство имен: Ds\
Интерфейсы: Collection, Sequence, Hashable
Классы: Vector, Deque, Stack, Queue, PriorityQueue, Map, Set
Читать дальше →
Всего голосов 43: ↑38 и ↓5+33
Комментарии27

Throwable exception и ошибки в php7

Время на прочтение4 мин
Количество просмотров42K
В прошлом, обрабатывать фатальные ошибки было практически невозможно. Обработчик, установленный set_error_handler вызван не будет, скрипт просто будет завершен.
В PHP 7 при возникновении фатальных ошибок (E_ERROR) и фатальных ошибок с возможностью обработки (E_RECOVERABLE_ERROR) будет выброшен exception, а не произойдет завершение скрипта. Но определенные ошибки, например «out of memory», по прежнему приведут к остановке. Не перехваченные ошибки в PHP 7, будут «фатальны», так же как и в php 5.*.
Обратите внимание, что другие виды ошибок, такие как warinng и notice остаются без изменения в php 7.

Исключения выброшенные из E_ERROR и E_RECOVERABLE_ERROR не наследуются от Exception. Это разделение было сделано, чтобы предотвратить обработку этих ошибок кодом, написанным под 5.*. Исключения для фатальных ошибок теперь являются экземпляром нового класса: Error. Как и любые другие исключения, Error может отловлен, обработан и выполнен finally блок.
Читать дальше →
Всего голосов 19: ↑17 и ↓2+15
Комментарии8

Go с точки зрения PHP программиста

Время на прочтение8 мин
Количество просмотров68K
Предлагаю вашему вниманию перевод статьи Go from PHP engineer's perspective с сайта sobit.me.

Будучи PHP программистом, задумывались ли вы об идее изучения других языков программирования?

Уже много лет выбор многих компаний падает на PHP для создания полноценных монолитных приложений. Более того, за последние 5 лет фреймворки (Symfony, Laravel, Zend), инструменты (Composer, Monolog) и стремительно растущее сообщество (PHP-FIG) помогли многим разработчикам в создании программного обеспечения на уровне предприятий. Многие компании, такие как Facebook, Yahoo!, Wikipedia, Wordpress, Tumblr, начинали свою историю с PHP, и это не помешало им стать успешными в последующие годы.

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

В этой статье мы попытаемся понять, как далеко мы сможем зайти, имея в арсенале только PHP, и где может вступить Go, чтобы помочь решить проблемы, с которыми нам предстоит столкнуться.
Читать дальше →
Всего голосов 70: ↑52 и ↓18+34
Комментарии122

COUNT(*)

Время на прочтение7 мин
Количество просмотров122K


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

Давайте начнем с простого… Эти запросы отличаются чем-то друг от друга с точки зрения конечного результата?

SELECT COUNT(*) FROM Sales.SalesOrderDetail
SELECT COUNT_BIG(*) FROM Sales.SalesOrderDetail
Подробнее
Всего голосов 84: ↑57 и ↓27+30
Комментарии74

Raspberry и Telegram: предпосылки создания умного дома

Время на прочтение3 мин
Количество просмотров87K


Один итальянский магазинчик нащупал новые способы использования Телеграма (и ранее WhatsApp'а), установив его на одноплатный миниатюрный компьютер Raspberry Pi. Как выясняется, мессенджер можно использовать для удалённого общения с собственной техникой. Ниже – перевод статей (1, 2) с сайта Instructables.com. Если есть уточнения по переводу, напишите об этом в комментариях.

Читать дальше →
Всего голосов 52: ↑44 и ↓8+36
Комментарии62

Сети ZigBee. Зачем и почему?

Время на прочтение7 мин
Количество просмотров199K

Чего «репу» чешешь?
На золотую рыбку другая сеть нужна!


Собственно, я собирался продолжить серию топиков, посвященных работе RTLS – системы позиционирования в реальном времени. А именно, рассказать о беспроводной инфраструктуре системы, основанной на сетях ZigBee. Но вдруг с удивлением обнаружил, что на Хабрахабре нет публикаций, посвященных стандарту IEEE 802.15.4 и спецификации ZigBee. Есть лишь немногочисленные упоминания, связанные с тем или иным приложением. Попытаюсь по мерее сил заполнить этот пробел.

В последнее время все большее распространение и значение приобретают беспроводные сенсорные сети. Сети, которые по своему назначению, параметрам, спецификациям существенно отличаются от сетей связи – WiFi, GSM, LTE и т.п. Среди прочих, используемых в сенсорных сетях, выделяется спецификация ZigBee – наиболее продвинутая надстройка к стандарту IEEE 802.15.4
В этом году исполнилось 10 лет со времени основания ZigBee альянса, а в октябре исполняется 5 лет с момента утверждения действующей в настоящее время спецификации ZigBee Pro Feature Set 2006. Так что публикацию можно считать юбилейной.

Желающих познакомиться с самоорганизующейся самовосстанавливающейся и не требующей специального частотного разрешения сенсорной сетью прошу под кат.


Читать дальше →
Всего голосов 47: ↑43 и ↓4+39
Комментарии32

Знакомимся с Otto, наследником Vagrant

Время на прочтение7 мин
Количество просмотров34K
Otto — это новый продукт от Hashicorp, логический наследник Vagrant, призванный упростить процесс разработки и деплоя программ в современном мире облачных технологий. Концептуально новый подход к проблеме, проверенные технологии под капотом и открытый исходный код. Персональный DevOps ассистент разработчика.


Читать дальше →
Всего голосов 21: ↑21 и ↓0+21
Комментарии9

50+ лучших дополнений к Bootstrap

Время на прочтение5 мин
Количество просмотров202K


Благодаря популярности CSS фреймворка Bootstrap, для него разработали массу различных дополнений. Даже сейчас вы можете использовать Bootstrap практически для любой задачи при разработке и оформлении вебсайта.

Для статьи я подобрал наиболее полезные дополнения «на все случаи жизни».
Читать дальше →
Всего голосов 123: ↑111 и ↓12+99
Комментарии25

Wi-Fi: неочевидные нюансы (на примере домашней сети)

Время на прочтение14 мин
Количество просмотров1.4M
Сейчас многие покупают точки доступа 802.11n, но хороших скоростей достичь удается не всем. В этом посте поговорим о не очень очевидных мелких нюансах, которые могут ощутимо улучшить (или ухудшить) работу Wi-Fi. Всё описанное ниже применимо как к домашним Wi-Fi-роутерам со стандартными и продвинутыми (DD-WRT & Co.) прошивками, так и к корпоративным железкам и сетям. Поэтому, в качестве примера возьмем «домашнюю» тему, как более родную и близкую к телу. Ибо даже самые администые из админов и инженеристые из инженеров живут в многоквартирных домах (или поселках с достаточной плотностью соседей), и всем хочется быстрого и надежного Wi-Fi.
[!!]: после замечаний касательно публикации первой части привожу текст целиком. Если вы читали первую часть — продолжайте отсюда.
Читать дальше →
Всего голосов 234: ↑231 и ↓3+228
Комментарии138

Интерфейсы в реальном мире (ещё примеры)

Время на прочтение10 мин
Количество просмотров140K
Обычный кран с горячей и холодной водой очень жесток к пользователю. В идеале его интерфейс решает три основные задачи:
  • Позволяет выбрать напор воды.
  • Позволяет выбрать температуру воды.
  • И защищает систему от гидравлического удара.

Вот тут вы можете узнать пару своих знакомых кранов:



А это — очень страшный автомобильный диод, по нему только вперёд:



Итак, если вам интересно продолжение про интерфейсы в реальном мире – заходите в пост. Осторожно, трафик.
Читать дальше →
Всего голосов 110: ↑105 и ↓5+100
Комментарии227

Интерфейсы в реальном мире

Время на прочтение5 мин
Количество просмотров180K
IT-интерфейсы часто растут из физических. Например, вот аппаратные чекбоксы:



Вообще, лучший же пример правильного инженерного интерфейса – это гранёный стакан.

Почему? Очень просто. С одной стороны, он дружелюбен к советским роботам: круглая верхняя полоса позволяет автоматической мойке нащупать его ещё с 40-х годов. С другой стороны, он прощает человеческие ошибки: ребра останавливают скатывание стакана со стола при падении. Плюс он просто красивый.

Сейчас покажу ещё несколько интерфейсов, которые облегчают жизнь. Общий смысл – попробовать понять, как думал разработчик, чтобы сделать что-то удобнее.
Читать дальше →
Всего голосов 314: ↑304 и ↓10+294
Комментарии347

Разбор вызовов функций в PHP

Время на прочтение15 мин
Количество просмотров40K
Этот пост посвящён оптимизации PHP с помощью профайлера Blackfire в PHP-скрипте. Нижеприведённый текст является подробным техническим объяснением статьи в блоге Blackfire.

Обычно применяется метод strlen:

if (strlen($name) > 49) {
...
}

Однако такой вариант примерно на 20% медленнее этого:

if (isset($name[49])) {
...
}

Выглядит неплохо. Наверняка вы уже собрались открыть ваши исходники и заменить все вызовы strlen() на isset(). Но если внимательно прочитать оригинальную статью, то можно заметить, что причина 20-процентной разницы в производительности — многократные вызовы strlen(), порядка 60-80 тысяч итераций.
Читать дальше →
Всего голосов 54: ↑52 и ↓2+50
Комментарии70

Распознавание лиц в 4 строки на JQuery

Время на прочтение3 мин
Количество просмотров25K


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

Я расскажу о том, как в несколько строк реализовать распознавание любого количества лиц на любой фотографии или видео в браузере с помощью JavaScript и JQuery плагина FaceDetection.

Кому интересно, прошу под кат.
Читать дальше →
Всего голосов 43: ↑20 и ↓23-3
Комментарии8

OpenStack, Docker и веб-терминал, или как мы делаем интерактивные упражнения для обучения Linux

Время на прочтение10 мин
Количество просмотров38K
В статье об онлайн-курсе «Введение в Linux» на образовательной платформе Stepic мы обещали рассказать о технической реализации нового типа интерактивных задач, который был впервые применен в этом курсе. Этот тип задач позволяет создавать на лету виртуальные серверы с Linux для работы через веб-терминал прямо в окне браузера. Автоматическая проверяющая система следит за корректностью выполнения заданий.

Пример задания из курса:



В этой статье я хочу рассказать о проекте, который лег в основу нового типа заданий на Stepic. Я также расскажу о том, из каких компонентов состоит система, и как они взаимодействуют между собой, как и где создаются удаленные сервера, как работает веб-терминал и автоматическая проверяющая система.
Читать дальше →
Всего голосов 45: ↑44 и ↓1+43
Комментарии24

Обзор Bluetooth-спикерфона Parrot MINIKIT Neo: разговор «без рук» в машине

Время на прочтение5 мин
Количество просмотров61K
Отказаться от разговоров за рулем практически невозможно. Исключение могут составлять разве что автомобилисты, выезжающие на дорогу несколько раз в неделю или те, кому разговаривать попросту не скем. В противном случае приходится заботиться о том, чтобы минимально отвлекаться на телефон при вождении. То есть позаботиться о неком дополнительном устройстве с функцией hands-free. В результате внимание не рассеивается, руки остаются на руле, а ценный звонок не пропущен. Далеко не все граждане приобретают автомобили в комплектации, отличной от базовой. Как результат встроенная громкая связь по умолчанию отсутствует – и встает необходимость изучения способов «безрукого» управления телефоном. Целенаправленный поиск привел меня к девайсу под названием Parrot Minikit Neo. Это ни что иное как спикерфон – устройство громкой связи с подключением к телефону по Bluetooth.


Картинки и текст под катом
Всего голосов 29: ↑21 и ↓8+13
Комментарии41

А кому на солнышке зарядиться?

Время на прочтение3 мин
Количество просмотров23K
процесс подзарядки смартфона с  BP-SC4000
Есть у меня друг-непоседа. Отпустила его учеба университетская и летом нагрянул сезон путешествий. Было принято решение пойти с туристами в поход в Карпаты. Комфортно и только на недельку.
Я по семейным делам только сочувствующий, но хотя бы помочь организации смог. Так как комфорт и цивилизация сейчас неотделима от режима «на связи» и надо пользоваться GPS-навигацией, то мне было поручено разобраться с проблемой зарядки смартфонов компании, которые имеют свойство очень быстро садится в ненужный момент.

Приступил к поискам альтернативного источника энергии. Вариантов было много, сначала думал остановиться на обычных универсальных батареях, а потом наткнулся на солнечное зарядное устройство. Карпаты — не карстовые пещеры, решили попробовать. Выбор солнечной зарядки длился долго, так как большинство из них делается в Китае и имеет слабые показатели батареи. Можно было согласиться на компромисс, но отклики пользователей говорили о недопустимости такого.

В результате решили шикануть и раздобыть зарядку американского производителя «Opteka».
Нам приглянулся BP-SC4000
Всего голосов 116: ↑111 и ↓5+106
Комментарии117

Кистевой ремень Nikon Hand Strap II как альтернатива шейному ремню

Время на прочтение2 мин
Количество просмотров33K
Покупая зеркальную камеру многие одевают на неё комплектный ремень. С ним камеру удобно носить на шее, но со временем этот ремешок может доставлять немало проблем. О чём я говорю? К примеру, камера весит 1 кг (грубо), объектив ещё столько же, а то и больше, плюс вспышка. Рабочий день фотографа может длиться не один час и всё это добро нужно таскать на себе. Неслабая нагрузка на шею, если бегать с камерой целый день.

Совершенно случайно наткнулся на очень интересную альтернативу, а именно на кистевой ремень, о существовании которого раньше и не подозревал. После поисков я остановился на модели Nikon Hand Strap II. Вот так этот ремешок выглядит вживую:

image

Парадокс, но камера у меня Canon, а ремень Nikon. Что поделать, нет у Canon’а удобных кистевых ремней. Китайские поделки за 2-3 у.е. в расчёт изначально не принимались. А сейчас немного подробностей о покупке.

Читать дальше →
Всего голосов 64: ↑45 и ↓19+26
Комментарии69

Очень быстрый и эффективный способ расслабления глаз

Время на прочтение4 мин
Количество просмотров414K

Предисловие


imageНе знаю, все ли программисты всесторонне любознательные люди, но я всегда пытаюсь получить фундаментальные знания во всех областях, которые могут быть практически полезны. В то время, когда мне в голову пришла эта идея я изучал анатомию и физиологию по журналам «Тело человека. Снаружи и внутри», ну а по работе я занимался стерео-варио фотографиями (для тех кто не знает — были такие советские календарики с ребристой поверхностью, где картинка либо казалась объемной, либо менялась). Так вот, в один из вечеров мне пришла в голову замечательная идея, которую я на протяжении уже 4х лет использую для поддержания своего зрения.
Обещаю, что эффект почувствуете сразу!
Читать дальше →
Всего голосов 246: ↑238 и ↓8+230
Комментарии207

Информация

В рейтинге
Не участвует
Откуда
Харьков, Харьковская обл., Украина
Дата рождения
Зарегистрирован
Активность