Как стать автором
Обновить
-4
0

Fullstack Web Developer

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

Схематично, простыми словами о внутреннем устройстве PHP (Zend Engine, OPCache, JIT)

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров11K

Данный пост нацелен на неопытных PHP-специалистов. От этой информации лучше программировать вы не станете. Ожидаемая польза:

Мне когнитивно и морально легче, когда уменьшается «магия» того, с чем работаешь. Может тебе тоже

Возможно чуть-чуть реже статьи на хабре будут тебя отпугивать

Объясню на 4 примерах — каждый лишь немного сложнее предыдущего.

Пример 1: запуск программы, написанном на компилируемом языке (Go): в полной статье

Пример 2: Запуск скрипта PHP без OPCache и JIT

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

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

Вот схематично представил всю последовательность работы PHP скрипта без включенных OPCache и JIT (каждый из них по отдельности рассмотрим в следующих двух примерах).

У нас привычный «исходный код» PHP (файл hello-world.php):

<?php echo "Hello world";

Опять идем по порядку, рассмотрим какие процессы происходят запустив команду:

php hello-world.php

Процесс №1 — Компиляция в байт-код
Сначала исходный код обрабатывается Zend Compiler — это PHP компилятор. Первый из двух основных компонентов Zend Virtual Machine.

В отличие от рассмотренного выше компилятора Go:

задача PHP компилятора — преобразовать исходный код не в машинный код, а в код-посредник - байт-код;

процесс компиляции происходит при каждом запуске программы (вместо лишь единоразового - до запуска программы, как в примере с Go)

В случае PHP этот байт-код назвали PHP OPCode.

Байт-код — является более низко-уровневым, чем исходный код. Он содержит набор команд для интерпретатора (об интерпретаторе в следующем пункте). Байт-код не может выполняться процессором напрямую.

Чтобы посмотреть результат работы компилятора — сам байт-код — выполним команду:

php -d opcache.opt_debug_level=0x20000 -d opcache.enable_cli=1 hello-world.php

Получим:

$_main: ; (lines=3, args=0, vars=0, tmps=1) ; (after optimizer) ; /hello-world.php:1-2 0000 EXT_STMT 0001 ECHO string("Hello World") 0002 RETURN int(1)

Вначале видим $_main: — обозначает, что следующие строки относятся к функции main. Появление такой функции в байт-коде для глобальной области видимости PHP — занятная историческая особенность, дошедшая из других языков;

Следующие 3 строки начинаются на ; — так обозначаются комментарии. Одна из целей — для дебаг-информации;

Последние 3 строки — непосредственно код нашего приложения, который будет выполняться виртуальной машиной в следующем шаге.

Процесс №2 — Выполнение байт-кода

Читать далее
Всего голосов 33: ↑32 и ↓1+38
Комментарии12

Как я сделал платформу коротких видео в Telegram Mini Apps

Уровень сложностиПростой
Время на прочтение17 мин
Количество просмотров5.9K

Недавно я поехал на море с другом. Во время пути мы узнали, что YouTube собираются блокировать (или замедлять). Тут в моей голове родилась идея: почему бы не сделать видеохостинг в Telegram? Я поспорил с другом, что сделаю его по дороге, но ноутбук сел. Поэтому мы договорились, что я сделаю это за день (спойлер: получилось, но кривовато).

Читать далее
Всего голосов 11: ↑10 и ↓1+12
Комментарии18

CMS за 0 рублей: как мы начали использовать Strapi

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

Всем привет! Меня зовут Александр, я фронтенд-разработчик в KTS. Сегодня я расскажу о системе Strapi, разберу сценарии ее использования на конкретных примерах и поделюсь способами упрощения работы в ней.

Читать далее
Всего голосов 41: ↑41 и ↓0+44
Комментарии8

Excel — самый опасный софт на планете

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров98K


В 80-е годы компании покупали компьютеры, чтобы запустить электронные таблицы. Автоматический расчёт налогов и зарплат казался чудом. Тысячи бухгалтеров оказались на улице, остальным пришлось осваивать работу ПК, а конкретно — Excel.

И до сих пор Excel играет важнейшую роль в бизнесе многих компаний. Без электронных таблиц у них просто всё развалится. Сложно найти на компьютере другую программу настолько древнюю и настолько важную, от которой столько всего зависит. И в такой ситуации факапы неизбежны.
Читать дальше →
Всего голосов 98: ↑84 и ↓14+95
Комментарии247

«Бобер выдыхай»: Go, WinAPI и ассемблер

Уровень сложностиСложный
Время на прочтение22 мин
Количество просмотров8.5K

Что вам приходит в голову при слове «Golang»? Google и микросервисы? Я тоже так думал, но реальность оказалась значительно интересней.

Читать далее
Всего голосов 36: ↑35 и ↓1+40
Комментарии31

Reflection в Go

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров4.5K

Сегодня мы рассмотрим в одну из интересных особенносстей Golang — reflection. Мы рассмотрим, что такое reflection, как он работает, и когда его стоит использовать. Reflection позволяет программам инспектировать свои структуры и модифицировать поведение в runtime.

Читать далее
Всего голосов 12: ↑12 и ↓0+20
Комментарии2

Компьютерное зрение и машинное обучение в PHP используя библиотеку opencv

Время на прочтение9 мин
Количество просмотров34K
Всем привет. Это моя юбилейная статья на Хабре. За почти 7 лет я написал 10 статей (включая эту), 8 из них — технические. Общее количество просмотров всех статей — около полумиллиона.
Основной вклад я внёс в два хаба: PHP и Серверное администрирование. Мне нравится работать на стыке этих двух областей, но сфера моих интересов гораздо шире.

Как и многие разработчики я часто пользуюсь результатами чужого труда (статьи на Хабре, код на гитхабе, ...), поэтому я всегда рад делиться с сообществом своими результатами в ответ. Написание статей — это не только возврат долга сообществу, но так же позволяет найти единомышленников, получить комментарии от профессионалов в узкой сфере и ещё больше углубить свои знания в исследуемой области.

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


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

Отладка PHP сценариев в Docker-контейнере с помощью PhpStorm и Xdebug. Глубокое погружение

Уровень сложностиПростой
Время на прочтение11 мин
Количество просмотров5.2K

Одним из ключевых аспектов успешной разработки является эффективная отладка кода.

Статья посвящена настройке и использованию PhpStorm, Xdebug и Docker для отладки PHP-скриптов в Docker-контейнере. Статья предлагает актуальную информацию (на момент написания) и оформлена в виде подробнейшего пошагового туториала. Информация действительна для ОС Windows. В других ОС возможны варианты.

Цель статьи — не просто создать пошаговой конспект настроек, а объяснить, как всё это взаимодействует. Это поможет избежать затруднений при изменении интерфейса IDE в будущем. Возможно, статья выглядит слишком педантичной. Но гуру всегда смогут прочесть её по диагонали, зато новички в этой теме найдут для себя много полезного.

Читать далее
Всего голосов 7: ↑7 и ↓0+11
Комментарии4

OSINT: инструментарий по анализу профилей VK

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

Подавляющее большинство OSINT-тусовки интересует анализ физ. лиц, что-ж, да будет так, подготовил вам подборку различных ботов и сервисов(ГБ и др. в список не включены, о них и ленивый знает, да и не OSINT это вовсе).

В РУ-сегменте основоположником анализа по соц. сетям является VK, телега хоть и стала отдаляться от понятия мессенджера трансформируясь в соц. сеть и набирать всё бОльшую популярность, но пока и рядом не стояла по объёму потенциально важной информации о цели.

Стоит отметить, что ВКонтакте уже начал умирать, и по моим предположениям, уже через два-три года былой актуальности от анализа ждать не стоит, народ заметно реже стал им пользоваться. Всё же, VK остаётся ключевым инструментом при анализе биографии человека, его интересов, окружения, происхождения и др.

1. 220vk Старый, добрый и весьма потрёпанный сервис, позволяющий определить скрытых друзей, узнать на кого подписалась/отписалась цель и её интересы исходя из подписок на сообщества и людей (с временным таймлайном), а также какие были изменения в профиле и др.

2. VKHistoryRobot Бот в тг, даст вам представление о том, как профиль выглядел в прошлом(очень полезен в случае, если профиль закрытый) предоставляет информацию в виде краткого дампа: Ф.И.; URL; фотография.

3. FindClone, search4faces сервисы обратного поиска изображения  по VK, позволяют произвести поиск профиля по загруженной фотографии, search4faces из этих двух - бесплатен.

4. Social Graph Bot бот в телеге, позволяющий выстроить графы взаимосвязей среди списка друзей , с этим инструментом вы поймёте: насколько разноплановое окружение, кто из списка друзей является родственником и т.д; легитимен ли аккаунт и имеет ли он связь с какой либо группой лиц. (применений масса, вот вам гайд с хабра

Ещё больше интересного и познавательного контента у меня в Telegram-канале — @secur_researcher

Читать далее
Всего голосов 11: ↑6 и ↓5+3
Комментарии2

Замедление YouTube с технической стороны: ограничение и обход

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

Привет, Хабр!

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

Сразу скажу, что буду говорить обо всём, что известно на данный момент. Понятно, что с этим разбирался далеко не один я: огромное спасибо обывателям ntc party форума за проделанный ресёрч.

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

UPD 10.08.2024 Многие жалуются на недоступность ютуба в целом: не грузит домашнюю страницу. Переживать не стоит, оно обрабатывается всё тем же ТСПУ по всё той же стратегии, обходы должны работать.

Читать далее
Всего голосов 540: ↑540 и ↓0+631
Комментарии433

Заставляем работать MinIO и Postgresql вместе

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров6.9K

Всем привет, в этой статье я хочу рассказать, как у меня получилось интегрировать MinIO и Postgres, а именно, что после каждой загрузки картинки в объектное хранилище у нас появляется запись в БД.

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

Golang убивает PHP

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров36K

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

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

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

Читать далее
Всего голосов 79: ↑53 и ↓26+44
Комментарии634

Использование Etcd для построения распределенных кластеризуемых приложений

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров4.4K

Привет! Меня зовут Олег Малахов, я работаю в AGIMA. Недавно на одном из проектов перед нами поставили задачу — разработать кластеризируемую систему для управления гипервизорами. Таким образом заказчик хотел сохранить высокую доступность и отказоустойчивость системы, а также обеспечить связность при работе в географически разнесенных Data-центрах. В итоге мы рассмотрели кучу вариантов, но остановились на Etdc. И сейчас расскажу, почему выбрали именно его.

Читать далее
Всего голосов 15: ↑13 и ↓2+13
Комментарии3

Как и зачем создавать кастомные сборщики мусора в Go

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

В Golang (да в принципе во всех ЯП) управление памятью и эффективное использование ресурсов — основа создания высокопроизводительных приложений. Одним из важных инструментов, который помогает справляться с этой задачей, является сборщик мусора (на англ garbage collection). Встроенный сборщик мусора Go выполняет свою работу довольно хорошо, но иногда требуется более тонкая настройка, чтобы соответствовать специальным требованиям потребностям конкретного приложения.

Здесь нам и помогут кастомные сборщики мусора.

Читать далее
Всего голосов 10: ↑8 и ↓2+10
Комментарии6

Hamster Kombat. Сколько ты реально заработаешь? Вся правда. Большой разбор проекта, токена HMSTR и команды

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

В сегодняшнем материале мы разберем проект Hamster Kombat по косточкам. Поговорим о том, как вас разводят на время и внимание, как создатели Хомяка продают свою аудиторию, подсветим все его зашквары и несостыковки. Разберем экономику его токена, инвестиции и предположим, по какой цене он выйдет на рынок. Ну и самое главное — попытаемся понять, сколько же удастся на проекте заработать.

Для того, чтобы понять, сколько денег раздаст проект (и раздаст ли вообще), стоит ли вообще тратить на него свое время, необходимо проанализировать массу метрик, в том числе его фундаментальные показатели, фандрайзинг, токеномику, команду и многое другое. Этим прямо сейчас и займемся. Устраивайтесь поудобней.

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

Читать далее
Всего голосов 188: ↑173 и ↓15+190
Комментарии212

React Query: стейт-менеджер для любителей кэша

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

Всем привет! Меня зовут Андрей Демьянов. Я тимлид и разработчик в МТС Travel. Совместно с другими командами мы создаем сервис по бронированию отелей в России и всему миру. Развиваемся с нуля, поэтому прямо на себе испытываем необходимость в новых библиотеках, подходах и изменениях, которые связаны с расширением и улучшением возможностей.

В этой статье я хотел бы рассказать о нашем опыте работы с библиотекой React Query (ныне TanStack Query, дальше RQ) и почему мы остановились именно на ней. А еще как она помогает нам упростить и ускорить доступ к страницам и данным, сэкономить ресурсы на однотипных запросах, упростить визуализацию работы с данными и распутать код. Глубоких технических подробностей не будет, но статья может быть интересна тем, кто хочет узнать об опыте применения RQ в условиях продуктовой разработки.

Читать далее
Всего голосов 17: ↑15 и ↓2+16
Комментарии12

Golang: пакет bytes изнутри

Уровень сложностиСредний
Время на прочтение26 мин
Количество просмотров4.3K

Приветствую, в прошлой статье мы разбирали определение bytes.Buffer изнутри. Теперь хочется обратить внимание на сам пакет bytes. Что за ним скрывается? Каждому разработчику приходилось использовать его будь то в production или локальной разработке. Это достаточно мощный по своим меркам пакет, который предоставляет нам функции для работы с байтами.

Читать далее
Всего голосов 10: ↑8 и ↓2+9
Комментарии8

Выжимаем из Go максимум производительности

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров19K

Разработчики, которые используют Go, сталкиваются с задачей выжать максимальную производительность из каждой строки кода. Но что делать, если оптимизировать уже нечего, а увеличивать скорость всё равно надо?

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

Читать далее
Всего голосов 76: ↑74 и ↓2+87
Комментарии40

SOLID в Go и щепотка паттернов

Уровень сложностиСредний
Время на прочтение23 мин
Количество просмотров9K

SOLID-ная статья о принципах SOLID, которую вы можете предложить тем, кто хочет понять эти принципы в контексте языка Go. Или прочитать самостоятельно, если это интересно и вам.

И да, как сказал бы волк из небезызвестного мультика: «SOLID? Шо, опять?»

Читать далее
Всего голосов 24: ↑21 и ↓3+18
Комментарии9

Tramvai — фреймворк для создания веб-приложений

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

30 августа 2021 года на GitHub прошел первый релиз исходного кода фреймворка Tramvai. При этом свою историю фреймворк начал гораздо раньше и долгое время был внутренней разработкой компании.

Tramvai предназначен для создания универсальных (SSR) React-приложений наряду с Next.js, Remix и SvelteKit. Фреймворк служит основой для десятков приложений и решает проблемы наших разработчиков с помощью более чем 150 библиотек и модулей, разработанных специально для tramvai-приложений.

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

Читать далее
Всего голосов 9: ↑7 и ↓2+5
Комментарии7

Информация

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

Специализация

Backend Developer, Fullstack Developer
Middle
PHP
Laravel
MySQL
PostgreSQL
Docker
Git
Linux
JavaScript
TypeScript
Vue.js