Search
Write a publication
Pull to refresh
337
0
Роман Пронский @pronskiy

PHP

Send message

Tagged Unions в PHP (примерно как в Rust)

Reading time3 min
Views3.9K

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


В предыдущей статье я писал про добавление enums в PHP8.1. Голосование прошло успешно, так что можно считать, что вопрос решенный.


Однако та реализация enums — лишь часть глобального плана. Сегодня мы рассмотрим следующий пункт, tagged unions, по-русски это переводится как "тип-сумма".


Голосования по нему пока не проходило, но предлагается также включить его в PHP 8.1.


Все эти термины "алгебраические типы данных", "тип-сумма" звучат страшно, но на деле всё довольно просто.


Зачем всё это вообще нужно?


Result как в Расте


Если вы писали на языке Rust, то наверняка встречали встроенный enum Result. В Rust, Go и т.д. нет механизма exception, так как в этих языках считается, что явная обработка ошибок гораздо надёжнее. Язык вынуждает тебя явно проработать все варианты событий, а не кидать исключение в надежде, что кто-то наверху знает о нём и умеет правильно обрабатывать. (Не будем здесь холиварить, на тему exceptions vs return type, у каждого своё мнение). Если говорить конкретно про Раст, то результатом вызова функции, которая может породить ошибку, часто делают значение типа Result.


Result состоит из двух вариантов (case-ов в терминологии enum в PHP): Ok и Err. Варианты мы могли бы сделать и с помощью предыдущего функционала enum, или даже констант, но нам нужно возвращать еще и сами значения. Причем, в случае успеха значением может быть строка, а в случае ошибки какой-нибудь другой тип. Например, integer (статус HTTP-ответа).


Как это будет выглядеть в PHP, если голосование будет успешным:


enum Result {
    case Ok(public string $json);
    case Err(public int $httpStatus);
}

function requestApi($url): Result {
    //
}
Читать дальше →

Противостояние беспроводных и проводных наушников

Reading time4 min
Views55K
image

Сегодня мы затронем популярную тему, в которой, итак, много очевидного, но не для всех. Речь пойдёт о современных беспроводных (TWS) и проводных наушниках. Поскольку полноразмерные наушники вообще разорвут в пух и прах TWSки, будем сравнивать с проводными внутриканальными наушниками.
В теме будет гореть у всех: любителей комфорта, аудиофилов, эплофанов и просто у Игоря, которому «норм» потреблять контент через стриминговые аудиосервисы типа Spotify. Let's go!
Читать дальше →

Почему Microsoft перестала бороться с пиратством своего ПО

Reading time5 min
Views135K


Microsoft — одна из немногих корпораций, основанных десятки лет назад и по-прежнему остающихся одними из крупнейших технологических гигантов. Даже несмотря на множество технологических войн, она выдержала проверку временем, отсеявшую многих её конкурентов.

Однако одна из первых войн, с которой компания до сих пор сталкивается каждый день — это война против пиратов. Пираты программ продавали миллионы фальшивых копий продуктов Microsoft или загружали их на торрент-сайты.

Во сколько обходится Microsoft пиратство?


Официальных цифр нет, но можно уверенно сказать, что потери выражаются миллиардами долларов.

Вместо навязывания собственных цифр (что было бы губительно для PR), Microsoft приспособилась информировать о возможных потерях от спираченного ПО для бизнесов и потребителей. На основании исследований, проведённых в 2014 году, Microsoft выпустила публикацию, выполненную вместе с исследовательской фирмой IDC и Национальным университетом Сингапура.

В этом отчёте говорится, что в 2014 году потребители по всему миру потратили 25 миллиардов долларов и примерно 1,2 миллиарда часов (устранение неполадок) на пиратское ПО.

С другой стороны, компании потратили полтриллиона долларов на устранение проблем, связанных со скачиванием пиратского ПО. Эти проблемы вызваны обслуживанием, зловредными программами и вирусами.

Политика Microsoft против пиратства


В прошлом Microsoft вела активную войну против пиратства. Она даже проводила налёты в Мексике для ареста картелей, продающих её ПО.
Читать дальше →
Сижу, никого не трогаю, и тут на мой телефон начинают сыпаться уведомления от Steam с кодами авторизации. Пришло писем 18, не меньше: оказалось, кто-то пытался угнать аккаунт сына. Хорошо, что я привязал его к собственной почте (карта-то моя!), потому что пароли у сына везде одинаковые. Очевидно, он вбил свой пароль на каком-то непонятном сайте и пароль тут же угнали. Позже я задумался, сколько же ещё дырок можно найти в безопасности моих домашних девайсов. Осознав масштабы проблемы, загорелся идеей защитить своих домашних и зоопарк их устройств — а попутно узнал кое-что интересное, чем и хочу с вами поделиться. Подробнее — под катом.
Читать дальше

Эффективный фингерпринтинг через кэш фавиконов в браузере

Reading time3 min
Views16K

Демо

Фавикон сайта — маленький значок .ico размером 16*16 или 32*32 пикселей на вкладке браузера. Помогает ориентироваться в сотнях вкладок. У твиттера синяя птичка, у Gmail красный символ почты, у Википедии жирное W.

Но оказывается, что эти значки представляют собой уязвимость, через которую можно выполнять фингерпринтинг — идентифицировать юзера даже через VPN и режим инкогнито в браузере (см. демо).
Читать дальше →

Защита от уязвимости Dependency Confusion в PHP с помощью Composer

Reading time3 min
Views4.9K


Недавно Алекс Бирсан опубликовал статью «Dependency Confusion: How I Hacked Into Apple, Microsoft and Dozens of Other Companies», в которой рассказал, как использовал диспетчеры пакетов уровня языков наподобие npm (Javascript), pip (Python) и gems (Ruby), чтобы заставить компании установить и запустить в своей инфраструктуре зловредный код.

Проблема сводится к тому, что компании ссылаются на внутренние пакеты по имени, например my-internal-package, а злоумышленник публикует в центральном реестре/репозитории пакетов языка (для PHP это packagist.org) пакет с таким же названием my-internal-package, имеющий более высокую версию. После этого компании устанавливали и выполняли эти зловредные пакеты вместо своих внутренних пакетов, потому что их диспетчер пакетов выбирал версию с более высоким номером из стандартного репозитория пакетов вместо внутреннего репозитория.
Читать дальше →

Каким будет 2021-й год для PHP?

Reading time7 min
Views8.5K

Об этом мы спросили Никиту Попова, Дмитрия Елисеева и еще десяток активных контрибуторов и авторов контента из сообщества. Все они поучаствуют в большом PHP-стриме днем 27 февраля (это суббота). Будет пара свежих докладов, несколько острых дискуссий, розыгрыш фирменных PHP-слонов и других крутых подарков. Подключайтесь)

А ответы и детали - под катом. 

Назад в будущее

SafetyNet Attestation — описание и реализация проверки на PHP

Reading time10 min
Views9.5K

В эту тему пришлось детально погрузиться во время работы над обеспечением стандартных механизмов верификации устройств для разных мобильных платформ. Задача сводилась к разработке полноценной реализацию проверки JWS-токенов по протоколу SafetyNet на серверной стороне.

После многочасовых поисков и скрупулёзного изучения официальной документации Google решил поделиться полученным опытом. Потому что, кроме официальной документации, я нашел только отрывочные описания частных примеров реализации на разных ЯП. И ни намека на комплексное объяснение особенностей проверки по SafetyNet на сервере.

Статья будет полезна разработчикам, которые хотят подробнее разобраться с технологией верификации устройств по протоколу SafetyNet Attestation. Для изучения описательной части не обязательно знать какой-либо язык программирования. Я сознательно убрал примеры кода, чтобы сфокусироваться именно на алгоритмах проверки. Сам пример реализации на PHP сформулирован в виде подключаемой через composer библиотеки и будет описан ниже.

А в конце статьи — ссылка на разработанную мной библиотеку на PHP, которая обеспечивает полный цикл верификации JWS.

Читать далее

«Who let the Doge out» или зачем приобретать альткоины

Reading time6 min
Views15K
image

Курс Биткоина растет и бьет собственные рекорды. И вы человек, который до этого не задумывавшийся о криптовалютах, на волне всеобщего интереса решили попробовать приобрести крипту, но не уверены, удачное ли это вложение. А вдруг это финансовый пузырь, который скоро лопнет? Вы не хотите рисковать, но вы серьезно заинтересовались этой темой. Думаете, что необязательно терять голову и приобретать Биткоин (цена которого давно выше 40000$), ведь есть альткоины, криптовалюты, появившиеся после Биткоина. Например, один из таких, Dogecoin, который, поднялся в топ-10 криптовалют по капитализации на фоне последних новостей.
Читать дальше →

Невидимые символы, скрывающие веб-шелл в зловредном коде на PHP

Reading time5 min
Views16K


В ноябре мы писали о том, как злоумышленники используют инъекции JavaScript для загрузки зловредного кода из файлов CSS.

Поначалу незаметно, что эти инъекции содержат что-то, кроме безобидных правил CSS. Однако при более тщательном анализе файла .CSS обнаруживается 56 964 кажущиеся пустыми строки, содержащие сочетания из невидимых символов табуляции (0x09), пробелов (0x20) и переводов строки (0x0A), которые преобразуются в двоичное представление символов, а затем в текст исполняемого кода на JavaScript.

Вскоре мы обнаружили такую же схему использования и во вредоносных программах на PHP. В статье мы расскажем о том, что обнаружил аналитик вредоносного ПО Лиам СмитSmith, работая недавно над сайтом, содержащим множество загружаемых хакерами бэкдоров и веб-шеллов.
Читать дальше →

Микросервисы VS монолит: баттл адептов

Reading time17 min
Views21K

Монолитная и микросервисная архитектуры — два диаметрально разных подхода. Во время круглого стола на конференции DevOps Live 2020 столкнулись адепты этих архитектур, которые в формате баттла искали ответы на самые актуальные вопросы. Избыточны ли ресурсы на каждый микросервис? Есть ли необходимость в постоянном рефакторинге? И как грамотно организовать рабочее место?

Читать далее

Как делают микропроцессоры. Польский химик, голландские монополисты и закон Мура

Reading time8 min
Views76K


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

Удивляясь красоте какой-нибудь микросхемы, невольно думаешь: как же это сделано? Давайте посмотрим на каждый шаг в производственном процессе.
Читать дальше →

PHP Дайджест № 198 (25 января – 8 февраля 2021)

Reading time6 min
Views11K
Фото: Иван Ганцев.

Обновление стандартов PSR-6 и PSR-13, кеширование наследования в опкеш, аксессоры свойств и другие новости из PHP Internals, диалект Lisp компилируемый в PHP, а также инструменты, видео, подкасты и PHP Дайджест Live.

Приятного чтения!


Забытые корни популярных иконок

Reading time9 min
Views29K


Популярная шутка утверждает, что наши дети воспримут 3,5-дюймовую дискету как распечатанный на 3D-принтере значок сохранения. Действительно, растёт поколение, не знающее объекта, с которого срисовали эту пиктограмму.

Но забытый формат хранения данных — далеко не единственный символ, память о происхождении которого мы теряем. Символы берут начало не только в исчезающих объектах реальности: некоторые из них зародились в устаревших стандартах, а иногда для нового объекта или явления нужен запоминающийся значок, автор которого не получает заслуженную славу. Постепенно иконки входят в нашу жизнь, и мы уже и сами не можем сказать, куда они уходят корнями.

В этом посте мы попытаемся отследить этимологию наиболее простых иконок, которые прочно вошли в наш графический язык.
Читать дальше →

Математик-пенсионер, «хакнувший» лотерею

Reading time11 min
Views124K

Любитель головоломок


Джеральд Селби всегда любил загадки: там, где другие видели лишь шум, он стремился найти порядок и гармонию. Работая на фабрике Kellogg's по производству овсяных хлопьев, он занимался анализом материалов для увеличения срока годности продукции. Однажды, изучая хлопья других компаний, Джерри наткнулся на странную последовательность символов на обороте коробки General Mills. Вместо даты и фабрики-производителя там был отпечатан загадочный код. Джерри решил расшифровать его: взяв несколько коробок завтраков Kellogg's и General Mills, он начал сравнивать их влажность, сообразив, что хлопья с примерно одинаковой влажностью должны иметь близкие даты производства. Делая записи на бумаге, он выявил некоторые закономерности. Вскоре ему удалось расшифровать всё, что позволило определить место, дату и время изготовления. В более агрессивной сфере бизнеса «взлом» секретов конкурентов мог бы обернуться огромной выгодой, но не в производстве овсяных хлопьев, поэтому руководство восприняло его открытие без энтузиазма.
Читать дальше →

Как компании отказаться от роли тимлидов

Reading time10 min
Views11K

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

В PropellerAds решили пойти по принципу «нет человека — нет проблемы» и отказались от роли тимлидов. Как компании удалось это провернуть, не только не потеряв ни одного руководителя, но и успешно привлекая тимлидов из других компаний, в своем докладе на конференции TeamLead Conf 2020 рассказал глава продуктового отдела PropellerAds Яков Беккер.

Читать далее

Владельцы MAPS.ME отменили изменения и вернули старое приложение. Надолго ли?

Reading time7 min
Views70K

Слева — старое приложение, справа — декабрьская версия от южнокорейцев. Источник: «Смерть MAPS.ME?»

В ноябре 2020 года Mail.Ru Group продала MAPS.ME южнокорейской компании Daegu Limited (входит в состав платёжной системы Parity.com), и уже 20 декабря 2020 года новые владельцы выпустили обновление, которое практически убило приложение.

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

К счастью, новые владельцы осознали глубину своей ошибки и откатили изменения. В апдейте от 30 декабря 2020 года восстановлена вся функциональность. Казалось бы, победа? Справедливость восторжествовала? Нет, в это слабо верится.
Читать дальше →

Автотесты на языке разметки или как мы в Lamoda тестируем микросервисы

Reading time13 min
Views12K

Всем привет! Меня зовут Кирилл Поляков, я QA-инженер в компании Lamoda. Мы тестируем бекэнд большой e-commerce платформы. В этой статье я расскажу, как мы пришли к автотестам на языке разметки для тестирования микросервисов и делаем это с помощью инструмента собственной разработки – Gonkey, который позволяет использовать стандартизированный набор решений и легко писать тесты на Go.


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

Как избавиться от if-else при помощи команд и обработчиков

Reading time6 min
Views32K


В этой статье я расскажу, как использую команды и обработчики, чтобы код был удобным и аккуратным. Я стремился не избавиться от if-elseif-else, а найти более подходящее решение.

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

Рассматриваемый в статье способ — просто один из многих.

Сама по себе конструкция if-else не так уж плоха. Мы просто попали в ситуацию «когда в руках молоток, всё вокруг кажется гвоздями». В основах программирования мы изучаем условные операторы и многим разработчикам не удаётся перерасти их использование.

Однако if-else и switch зачастую неидеальны. Программисты обычно пренебрегают более качественными решениями, например, полиморфическим исполнением и словарями.
Читать дальше →

Почему Signal — не идеальный мессенджер. Нам нужна децентрализация

Reading time7 min
Views85K

Федеративная система Matrix поддерживает связь с другими сетями через мосты. Это пример инфраструктуры, к которой нужно стремиться Signal

4 января 2021 года WhatsApp внёс изменения в пользовательское соглашение. Теперь каждый пользователь обязан согласиться на отправку личных данных в материнскую компанию Facebook, иначе его аккаунт WhatsApp просто заблокируют. Эффект от изменений был вполне предсказуем — миллионы человек массово ушли из WhatsApp. Прежде всего, в Telegram и Signal.

Павел Дуров назвал это «крупнейшей цифровой миграцией в истории»: всего за трое суток у Telegram появилось 25 млн новых пользователей, абсолютный рекорд. Илон Маск в твиттере прокомментировал события просто: «Используйте Signal», — написал он. То же самое советует Эдвард Сноуден. Мессенджер Signal для многих стал настоящим открытием.

Information

Rating
Does not participate
Location
Харьков, Харьковская обл., Украина
Registered
Activity