В последнее время было достаточно много обсуждений производительности в PHP. И даже несмотря на то, что у нас есть PHP8, JIT и куча других улучшений, многие по-прежнему продолжают жаловаться на то, что PHP "недостаточно производительный". Что PHP - это язык, подходящий только для модели запрос-ответ. Что PHP слишком медленный и его не нужно использовать для высоконагруженных систем. С одной стороны от части всё это правда. Если мы строим какую-то систему, для которой вопрос производительности критичен, то использовать классический блокирующий PHP явно не стОит. Большая часть функций и библиотек PHP созданы для работы в традиционном блокирующем окружении, что уже подразумевает собой не самую высокую производительность. Однако PHP может работать быстро, более того, он может работать очень быстро. Как? Обычно у нас может быть две причины, из-за чего будет проседать производительность: мы либо совершаем какие-то сложные вычисления, либо у нас есть блокирующй ввод-вывод. Первое к сожалению (или к счастью) мы не можем решить в PHP. Но блокирующий ввод-вывод для PHP совсем не проблема. В PHP-сообществе есть люди, которые пишут асинхронный код уже на протяжении несколько лет. Конечно одновременно с этим бОльшая часть сообщества по-прежнему считает асинхронный PHP - дикостью. Я часто слышал: "Ты наверно совсем отчаянный, если собираешься писать что-то асинхронное на PHP". По правде говоря, у нас у всех есть это предубеждение, что PHP не подходит для подобного рода задач. И в большинстве случаев это предубеждение основано на неверных представлениях о самой "асинхронности". Неверные предубеждения в свою очередь ведут к неправильным ожиданиям, что в свою очередь приводит к разочарованию и обвинениям в том, что PHP "не по-настоящему асинхронный".
Пользователь
Проходим челлендж RegexPlay на 100%
Челлендж от Machine Learning Lab Университета Триеста (Италия) предлагает решить 12 задач причём уровень задач сильно варьируется — от супер-лёгкого до сложного.
Конечно, решений может быть больше одного и тест-кейсы в задаче покрывают не все варианты. Тем не менее если набрали 100% — то поздравляю! Тест пройден.
Спойлер: в некоторых задачах (особенно лёгких) подсказка практически и есть решение.
Single Responsibility Principle. Не такой простой, как кажется
Single responsibility principle, он же принцип единой ответственности,
он же принцип единой изменчивости — крайне скользкий для понимания парень и столь нервозный вопрос на собеседовании программиста.
Первое серьезное знакомство с этим принципом состоялось для меня в начале первого курса, когда молодых и зеленых нас вывезли в лес, чтобы сделать из личинок студентов — студентов настоящих.
В лесу нас разделили на группы по 8-9 человек в каждой и устроили соревнование — какая группа быстрее выпьет бутылку водки при условии, что первый человек из группы наливает водку в стакан, второй выпивает, а третий закусывает. Выполнивший свою операцию юнит встает в конец очереди группы.
Случай, когда размер очереди был кратен трем, и являлся хорошей реализацией SRP.
10 принципов объектно-ориентированного программирования, о которых должен знать каждый разработчик
Мне довольно часто встречаются разработчики, которые не слышали о принципах SOLID (мы подробно рассказывали о них здесь. — Пер.) или объектно-ориентированного программирования (ООП), или слышали, но не используют их на практике. В этой статье описываются преимущества принципов ООП, которые помогают разработчику в его ежедневном труде. Некоторые из них хорошо известны, другие — не очень, так что статья будет полезна и новичкам, и уже опытным программистам.
Знакомство с Python для камрадов, переросших «язык A vs. язык B» и другие предрассудки
Для всех хабравчан, у которых возникло ощущение дежавю: Написать этот пост меня побудили статья "Введение в Python" и комментарии к ней. К сожалению, качество этого "введения" кхм… не будем о грустном. Но ещё грустнее было наблюдать склоки в комментариях, из разряда "C++ быстрее Python", "Rust ещё быстрее C++", "Python не нужен" и т.д. Удивительно, что не вспомнили Ruby!
Как сказал Бьярн Страуструп,
«Есть всего два типа языков программирования: те, на которые люди всё время ругаются, и те, которые никто не использует».
Добро пожаловать под кат всем, кто хотел бы познакомиться с Python, не опускаясь при этом до грязных ругательств!
Участвуй в конкурсе по разгону оперативной памяти — HyperX Memory OC Competition 2019
Некоторые аспекты мониторинга MS SQL Server. Рекомендации по настройке флагов трассировки
Предисловие
Довольно часто пользователи, разработчики и администраторы СУБД MS SQL Server сталкиваются с проблемами производительности БД или СУБД в целом, поэтому весьма актуальным является мониторинг MS SQL Server.
Данная статья является дополнением к статье Использование Zabbix для слежения за базой данных MS SQL Server и в ней будут разобраны некоторые аспекты мониторинга MS SQL Server, в частности: как быстро определить, каких ресурсов не хватает, а также рекомендации по настройке флагов трассировки.
Для работы следующих приведенных скриптов, необходимо создать схему inf в нужной базе данных следующим образом:
use <имя_БД>;
go
create schema inf;
Как совместить преимущества ноутбука и стационарного компьютера? Разбор проблемы и идеи решения
Под ноутбуком понимается решение небольшого веса и размера, мобильное, с которым можно работать и дома, и в офисе, и на отдыхе, и даже по пути из одного места в другое. Вдобавок, в ноутбуке встроена вся та периферия, которую к системному блоку необходимо подключать. К сожалению, ноутбуки почти всегда значительно уступают в производительности стационарным компьютерам, а если и не уступают, то имеют очень высокую цену по сравнению с «большим братом». Но, наверное, самое неприятное — ноутбук почти невозможно сделать «под себя», выбрать те комплектующие, которые по скорости, производительности, цене и внешнему виду актуальны именно тебе и именно сегодня, а через пару лет при желании поменять эти комплектующие на более современные.
Итак. Возможно ли совместить преимущества ноутбука и стационарного компьютера, и, если это возможно, то что для этого нужно сделать?
Для начала давайте скажем, что в этом посте речь зайдет не о переносных мониторах, мышках и другой периферии. В этом посте мы будем говорить практически полностью о корпусе компьютера. Каким должен быть корпус и какие комплектующие он должен в себя вмещать, чтобы при относительно компактном размере обеспечивать высокую производительность, а так же возможность собрать компьютер таким, каким его видит конечный потребитель?
Лучшие и худшие тренды MWC 2019
Две недели назад в Испании закончилась выставка Mobile World Congress. На Хабре от неё – только анонс Microsoft. Но самое интересное, ради чего в Барселону съезжались 100+ тысяч человек, – всё-таки новинки рынка смартфонов. На этот раз тоже было полно необычных девайсов и крутых технологий, а их тут в полной мере, кажется, даже никто не осветил.
В прошлом году мы делали подборки лучших и худших трендов, людям вроде понравилось, так что попробуем продолжить традицию. Если вкратце: Huawei и Samsung на этот раз большие молодцы, а Sony и LG несёт куда-то не туда. И да, Apple почему-то больше никто не копирует.
Используем старые HDD с бэдами
Древности: современный компьютер из старых запчастей
В моем случае ответ простой: ничто в этом мире не вечно. Собрать информацию об умеренно старой компьютерной технике в тот момент, когда данные легко доступны, и сам еще многое помнишь, проще, чем лет через двадцать копаться в веб-архиве, пытаясь хоть что-то найти. В 2009 году в честь очередного переезда я продал свой последний настольный компьютер, и с тех пор пользовался только ноутбуками. В 2019 году я вновь построил домашний ПК, загрузив сейв десятилетней давности. Старые комплектующие достаточно подешевели, чтобы можно было поэкспериментировать без серьезного финансового риска. Но они еще не до конца устарели, и кажется первый и последний раз я собираю относительно старое железо для повседневных задач. Есть ли в этом смысл? Сейчас расскажу.
Точечная маршрутизация на роутере с OpenWrt. WireGuard и DNSCrypt
Данный материал не является призывом к действию и публикуется исключительно в образовательных целях.
UPD 14.10.2023
Эта статья немного устарела. Здесь можно узнать, как использовать готовые списки IP-адресов, что не совсем актуально. Актуальная статья с маршрутизацией по доменам: https://habr.com/ru/articles/767464/
UPD 16.10.2022
- Исправлены конфиги для Openwrt 22
- Добавлен community список
- В скрипт добавлена проверка загрузки файлов. Которая решает проблему, если при старте устройства не удалось сразу загрузить списки
- DNSCrypt изменён на DNSCrypt v2
UPD 15.03.2023
- Добавлена логика для работы с доменами, используются список доменов из community
- Изменена проверка загрузки файлов в скрипте
- В Ansible playbook теперь можно выбрать определённые списки
UPD 20.04.2023
Если у вас роутер получает IPv6 адрес, то роутинг будет работать криво. Пока нет инструкции для IPv6, поэтому нужно будет его выключить на роутере.
Часть 2: Поиск и исправление ошибок
Чем отличается от подобных материалов?
- Реализация на чистом OpenWrt
- Использование WireGuard
- Конфигурация роутера организуется с помощью конфигов OpenWrt, а не кучей в одном скрипте
- Предусмотрены ситуации при рестарте сети и перезагрузке
- Потребляет мало ресурсов роутера: подсети содержатся в ipset, а не в таблицах маршрутизации. Что позволяет развернуть это дело даже на слабых устройствах
- Автоматизация конфигурации с помощью Ansible (не требуется python на роутере)
Побеждаем прокрастинацию игровой зависимостью
Существует категория проектов, которым прокрастинация наносит, пожалуй, наибольший возможный урон. Речь, конечно же, о собственных проектах, ещё не приносящих, либо вовсе не подразумевающих прибыли. Когда у тебя нет ни дедлайна, ни дохода, ни какой-либо обязанности перед кем-либо, очень легко отложить работу на потом, да так к ней толком и не притрагиваться. Именно таким проектом для меня стала моя попытка удариться в инди-геймдев.
Ищем иголку в стоге без использования всем известных алгоритмов
Какой метод поиска иголки быстрее? Перебирать по соломинке, или же случайно искать ее?
Считаю, что лучший способ — эксперимент, к сожалению стога сена у меня нет, зато есть базовые знания программирования, микроконтроллер Arduino, удобная среда для написания кода, так что каждый сможет повторить.
Information
- Rating
- Does not participate
- Location
- Калининград (Кенигсберг), Калининградская обл., Россия
- Date of birth
- Registered
- Activity