• Как мы сделали PHP 7 в два раза быстрее PHP 5. Часть 2: оптимизация байт-кода в PHP 7.1

      В первой части рассказа по мотивам выступления Дмитрия Стогова из Zend Technologies на HighLoad++ мы разбирались во внутреннем устройстве PHP. Детально и из первых уст узнали, какие изменениях в базовых структурах данных позволили ускорить PHP 7 более чем в два раза. На этом можно было бы и остановиться, но уже в версии 7.1 разработчики пошли существенно дальше, так как идей по оптимизации у них было еще много.

      Накопленный опыт работы над JIT до семёрки теперь можно интерпретировать, смотря на результаты в 7.0 без JIT и на результаты HHVM с JIT. В PHP 7.1 было решено c JIT не работать, а опять обратиться к интерпретатору. Если раньше оптимизации касались интрепретатора, то в этой статье посмотрим на оптимизацию байт-кода, с использованием вывода типов, который реализовали для нашего JIT.



      Под катом Дмитрий Стогов покажет, как это все работает, на простом примере.
      Читать дальше →
    • Киберпреступники пять месяцев контролировали ASUS Live Update



        Как сообщает «Лаборатория Касперского», хакеры из APT-группировки ShadowHammer 5 месяцев контролировали сервис обновлений ASUS Live Update и заразили более полумиллиона компьютеров по всему миру.
        Читать дальше →
      • Disposable pattern (Disposable Design Principle) pt.1


          Disposable pattern (Disposable Design Principle)


          I guess almost any programmer who uses .NET will now say this pattern is a piece of cake. That it is the best-known pattern used on the platform. However, even the simplest and well-known problem domain will have secret areas which you have never looked at. So, let’s describe the whole thing from the beginning for the first-timers and all the rest (so that each of you could remember the basics). Don’t skip these paragraphs — I am watching you!


          If I ask what is IDisposable, you will surely say that it is


          public interface IDisposable
          {
              void Dispose();
          }

          What is the purpose of the interface? I mean, why do we need to clear up memory at all if we have a smart Garbage Collector that clears the memory instead of us, so we even don’t have to think about it. However, there are some small details.


          This chapter was translated from Russian jointly by author and by professional translators. You can help us with translation from Russian or English into any other language, primarily into Chinese or German.

          Also, if you want thank us, the best way you can do that is to give us a star on github or to fork repository github/sidristij/dotnetbook.
          Read more →
        • Тайна прошивок

            Авторы: к.ф.-м.н. Чернов А.В. (monsieur_cher) и к.ф.-м.н. Трошина К.Н.

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

            В этой статье мы расскажем об одной интересной задаче, которая была поставлена перед нами несколько лет назад. Заказчик попросил разобраться с бинарной прошивкой устройства, которое выполняло управление неким физическим процессом. Ему требовался алгоритм управления в виде компилируемой С-программы, а также формулы с объяснением, как они устроены и почему именно так. По словам Заказчика, это было необходимо для обеспечения совместимости со «старым» оборудованием в новой системе. То, как мы в итоге разбирались с физикой, в рамках данного цикла статей мы опустим, а вот процесс восстановления алгоритма рассмотрим подробно.

            Практически повсеместное использование в массовых устройствах программируемых микроконтроллеров (концепции интернета вещей IOT или умного дома SmartHome) требует обратить внимание на бинарный анализ встраиваемого кода, или, другими словами, бинарный анализ прошивок устройств.

            Бинарный анализ прошивок устройств может иметь следующие цели:

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

            Поставленная выше задача анализа бинарного кода может рассматриваться как частный случай задачи анализа бинарника для обеспечения совместимости устройств.
            Читать дальше →
          • LockerGoga: что именно произошло с Norsk Hydro



              Фото, источник — www.msspalert.com


              В ночь с понедельника на вторник (примерно в 23:00 UTC 18.03.2019) специалисты Norsk Hydro заметили сбои в функционировании сети и ряда систем. Вскоре стало понятно, что сбои вызваны массовым заражением систем шифровальщиком, которое очень быстро распространялось по объектам инфраструктуры. После идентификации угрозы служба безопасности начала процесс изоляции, однако вредонос настолько глубоко успел распространиться по инфраструктуре, что пришлось перевести часть производства в ручной режим управления ("откат" к процедурам, принятым до компьютеризации производственных процессов). Расследование атаки потребовало привлечения местных властей и органов правопорядка (National Security Authority / NorCERT, Norwegian Police Security Service, National Criminal Investigation Service), а также ряда коммерческих компаний. Восстановление инфраструктуры еще не завершено и отдельные производства (например, по прессованию алюминиевых профилей) до сих пор функционируют на половину мощности.


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

              Читать дальше →
            • PHP-Дайджест № 152 (11 – 25 марта 2019)


                Свежая подборка со ссылками на новости и материалы. В выпуске: свежие RFC предложения и другие новости из PHP Internals, порция полезных инструментов, и много других материалов и новостей!

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

                Читать дальше →
              • Видео с Badoo PHP Meetup #2: о тестах и качестве кода



                  16 марта мы собрали вторую встречу PHP-сообщества в офисе Badoo. По правде говоря, получилась целая мини-конференция — так много участников было в этот раз.

                  Обсуждали вопросы автотестов для PHP-разработчиков, разбирали реальные кейсы из практики, дискутировали о качестве кода и много общались. Спасибо участникам и спикерам за полезную субботу!

                  Под катом — слайды, записи докладов и панельная дискуссия со спикерами из Badoo, EPAM, Avito и Lamoda.
                  Читать дальше →
                  • +49
                  • 5.4k
                  • 2
                • Memory and Span pt.1

                    Starting from .NET Core 2.0 and .NET Framework 4.5 we can use new data types: Span and Memory. To use them, you just need to install the System.Memory nuget package:


                    PM> Install-Package System.Memory

                    These data types are notable because the CLR team has done a great job to implement their special support inside the code of .NET Core 2.1+ JIT compiler by embedding these data types right into the core. What kind of data types are these and why are they worth a whole chapter?


                    If we talk about problems that made these types appear, I should name three of them. The first one is unmanaged code.


                    Both the language and the platform have existed for many years along with means to work with unmanaged code. So, why release another API to work with unmanaged code if the former basically existed for many years? To answer this question, we should understand what we lacked before.


                    This chapter was translated from Russian jointly by author and by professional translators. You can help us with translation from Russian or English into any other language, primarily into Chinese or German.

                    Also, if you want thank us, the best way you can do that is to give us a star on github or to fork repository github/sidristij/dotnetbook.
                    Read more →
                  • Как мы сделали PHP 7 в два раза быстрее PHP 5. Часть 1: оптимизация структур данных

                      В декабре 2015 вышел PHP 7.0. Компании, которые перешли на «семерку» отметили, что увеличилась производительность, а нагрузка на сервера — уменьшилась. Первыми перешли на семерку Vebia и Etsy, а у нас Badoo, Авито и OLX. Для Badoo переход на семёрку обошелся в 1 млн. долларов экономии на серверах. Благодаря PHP 7 в OLX средняя нагрузка на сервер снизилась в 3 раза, повысилась эффективность и экономия ресурсов.

                      Дмитрий Стогов из Zend Technologies на HighLoad++ рассказал, благодаря чему повысилась производительность. В расшифровке: о внутреннем устройстве PHP, об идеях в основе версии 7.0, об изменениях в базовых структурах данных и алгоритмах, которые и определили успех.

                      Disclaimer: На март 2019 года 80% сайтов работают на PHP, и 70% из них — на PHP 5, хотя с 1 января 2019 эта версия не поддерживается. Доклад Дмитрия от 2016 года про принципы, благодаря которым произошел двукратный скачок производительности между PHP 5 и 7, — актуален и в марте 2019. Для половины сайтов — точно.
                      Читать дальше →
                    • Как в Kiwi.com тестируют 1000 проектов на Python

                        Original english version of this article is here.

                        Это название доклада Alex Viscreanu на Moscow Python Conf ++. До выступления еще две недели, но я, конечно, уже обо всем расспросил Алекса и под катом поделюсь спойлерами и бэкстейджем подготовки доклада: что это за опенсорсный Зоопарк такой, что он делает с нашим Python кодом и чем отличается от mypy сотоварищи.

                        — Расскажи немного о Kiwi, чем ты занимаешься в компании?

                        Kiwi.com — онлайн турагентство с секретным соусом. Компания основана в Чехии в 2012 под названием Skypicker, а в 2016 сервис сменил название и переехал на Kiwi.com. Сейчас Kiwi.com в пятерке крупнейших агрегаторов авиабилетов в Европе.

                        Классная фича Kiwi.com для пользователей в том, что мы находим варианты стыковок для рейсов авиакомпаний, которые обычно не работают вместе, и берем на себя решение всевозможных проблем при стыковке.

                        Чтобы вы оценили наши масштабы, вот цифры о Kiwi.com: 90 000 000+ ежедневных поисков, 25 000 ежедневно продаваемых мест и более 15 000 000 000 доступных комбинаций рейсов.
                        Читать дальше →
                        • +29
                        • 4.2k
                        • 2
                      • 10 лучших техник веб-хакинга 2018

                          image

                          Каждый год сообщество экспертов по веб-безопасности выбирает TOP-10 техник атак на веб-приложения. Организатором конкурса выступает компания Portswigger, разрабатывающая один из лучших инструментов для тестирования на проникновение веб-приложений — Burp Suite.

                          Под катом вас ждет 10 лучших инновационных техник атак на веб-приложения, отобранных со всего мира.
                          Читать дальше →
                          • +31
                          • 19.7k
                          • 5
                        • История успеха nginx, или «Возможно всё, пробуй!»



                            Игорь Сысоев, разработчик веб-сервера nginx, член большой семьи HighLoad++, не просто стоял у истоков нашей конференции. Я воспринимаю Игоря как своего профессионального учителя, мастера, который научил меня работать и понимать высоконагруженные системы, что на десятилетие определило мой профессиональный путь.

                            Естественно, я не мог пройти мимо оглушительного успеха команды NGINX… И взял интервью, но не у Игоря (он по-прежнему интроверт-программист), а у инвесторов из фонда Runa Capital, которые десять лет назад разглядели nginx, построили вокруг него бизнес-инфраструктуру, а сейчас вели сделку, беспрецедентную по размеру для российского рынка.

                            Цель статьи под катом — ещё раз подтвердить — возможно все! Пробуй!
                            Читать дальше →
                          • CLRium #5: Всё-всё-всё о GC и не только. Питер и Москва


                              За окном бушует весна и гололед, а мы решили провести семинар CLRium #5, который на этот раз будет посвящен целиком и полностью самому низкому уровню: подсистемой управления памятью.


                              Я, Станислав Сидристый, автор книги .NET Platform Architecture, решился объединить разрозненную по всему интернету информацию и сделать большой семинар, который будет почти полностью посвящен теме управления памятью. Поверьте: можно смело назначать собеседования сразу после семинара. Вопросы, которые будут касаться управлением памятью вы ответите очень глубоко.


                              Шесть из десяти докладов раскроют тему управления памятью, алгоритмов и причин выбора алгоритмов работы GC так глубоко, как не сможет раскрыть ни одна конференция: ведь ни на одной конференции никто не даст выступить с докладом на 4,5 часа (6 докладов по 45 минут)


                              Ну и как заведено: все подробности под катом

                              Читать дальше →
                            • Digital Workspaсe и VMware: VDI мёртв, да здравствует VDI



                                Всем привет! Сегодня мы хотим поговорить о том, как видит рынок VDI вендор VMware.

                                Цифровизация правит миром. Во многих компаниях уже нет фиксированного рабочего дня, а где-то даже фиксированного рабочего места. Бизнесу нужно, чтобы сотрудники всегда были на связи — как минимум, читали бы почту — и быстро реагировали на какие-то события. То есть идеальная картинка с точки зрения бизнеса выглядит так: в компании реализован удобный, прозрачный, защищённый доступ к рабочим инструментам с любого устройства из любой точки мира.
                                Читать дальше →
                                • +37
                                • 8.6k
                                • 4
                              • Монолит для сотен версий клиентов: как мы пишем и поддерживаем тесты



                                  Всем привет!

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

                                  О чём пойдёт речь? Сначала я коротко расскажу о нашем процессе разработки и о том, как он влияет на нашу потребность в тестах и желание эти тесты писать. Затем мы пройдёмся снизу вверх по пирамиде автоматизации тестирования, обсудим используемые нами виды тестов, поговорим об инструментах внутри каждого из них и о том, какие проблемы мы решаем с их помощью. В конце рассмотрим, как поддерживать и запускать всё это добро.
                                  Читать дальше →
                                  • +47
                                  • 8.6k
                                  • 6
                                • Микросервисы на php и swoole для конвертации телеграм каналов в RSS

                                  • Tutorial


                                  В предыдущем посте я рассказал про то, как настроить и использовать php телеграм клиент madelineProto для парсинга постов. Но при использовании библиотеки я столкнулся с несколькими недостатками:

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

                                  Поэтому решил создать два микросервиса на php для парсинга телеграм каналов, используя асинхронное расширение swoole. Теперь эти пакеты упрощают и ускоряют работу с telegram api (не путать с bot api) в нескольких моих проектах. Хочется поделится ими и услышать мнение других разработчиков.

                                  Под катом расскажу об архитектуре, использовании разных областей видимости в swoole server и устранении последствий ошибок в сторонних библиотеках и внешних api. Ссылки на репозитории с исходным кодом и на тестовый сервер — в конце поста.
                                  Читать дальше →
                                • F5 покупает NGINX

                                    image

                                    Компания F5 приобретает NGINX для объединения NetOps и DevOps и предоставления клиентам согласованных сервисов приложений во всех средах. Сумма сделки оценивается приблизительно в $670 млн.

                                    Команда разработки, в том числе Игорь Сысоев и Максим Коновалов, продолжит развивать NGINX уже в составе F5.
                                    Читать дальше →
                                  • PHP-Дайджест № 151 (25 февраля – 11 марта 2019)


                                      Свежая подборка со ссылками на новости и материалы. В выпуске: обновления PHP, Laravel 5.8, Xdebug 2.7 и другие релизы, 3 свежих RFC, 2 принятых, и концепт из PHP Internals, порция полезных инструментов, и многое другое.

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


                                      Читать дальше →
                                      • +60
                                      • 14.2k
                                      • 8
                                    • Новый кодек AV1: ускоряем загрузку видео в браузере

                                      • Translation
                                      • Tutorial
                                      В этом руководстве мы научимся использовать видео в Вебе, как это принято в 2019. Chrome и Firefox начали поддерживать новый кодек AV1 — для них видео можно сделать в два раза меньше.

                                      Отдельно поговорим, как заменить GIF на видео в AV1 и H.264 — тогда его размер упадёт в 20-40 раз.

                                      AV1 в браузере

                                      YouTube уже использует его в TestTube. Netflix заявил, что AV1 будет «их основным кодеком следующего поколения».

                                      Мы в Злых Марсианах уже используем его на нашем сайте и на Ампллифере. В этой статье я поделюсь опытом внедрения AV1 и шаг-за-шагом расскажу, как вставить видео, чтобы оно работало во всех браузерах.
                                      Читать дальше →
                                    • А вы все-все за меня мониторить будете? Ага



                                        Обычно Хабр используется как информационное решение — кто-то делится наработанной и структурированной информацией, а кто-то эту информацию впитывает (я хотел написать “потребляет”, но это слово маркетологи уже испоганили). Я же, на правах старожила, и учитывая легкую расслабленность между 23 февраля и 8 марта, хотел обратиться к тому самому коллективному разуму, который делает любую статью более интересной. А поскольку писать простой вопрос — как на форуме — это скучно, постараюсь разбавить свой вопрос интересными фактами.

                                        Начну издалека: у меня есть одно любимое исследование, датируемое 2014 годом. В нем говорится о том, что от 22% до 43% испытуемых готовы загрузить и запустить неизвестный исполняемый файл, если им заплатить в диапазоне от 1 цента до 10 долларов. Я уже писал о нем в тексте, посвященном офисам будущего.

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