Pull to refresh
26
0
Дмитрий @olshevskiy87

User

Send message

Книга: проектирование API

Reading time1 min
Views22K

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

Пока что написал первую часть — о принципах проектирования API «сверху вниз»

PDF-версию можно скачать отсюда

Вопросы, пожелания и предложения принимаются. Книга распространяется бесплатно на условиях CC-BY-NC. You're welcome!

Читать далее
Total votes 49: ↑48 and ↓1+47
Comments27

Интервью с Андреем Балицким — основателем хостинга EuroHoster

Reading time10 min
Views5.2K
Меня зовут Леонид, я — разработчик сайта Поиск VPS. В силу профессиональной деятельности много общаюсь с представителями хостеров, и некоторое время назад провел беседу с руководителем хостинга EuroHoster Андреем Балицким (WapGraf), который поделился своей историей прихода в профессию и рассказал о нынешнем положении дел.


Попробуем разобраться
Total votes 23: ↑13 and ↓10+3
Comments5

Часы светодиодные для улицы, так что внутри?

Reading time3 min
Views6.6K
Рассмотрим сам «процесс», так сказать от момента «звонка Клиента» и вплоть до монтажа и наладки…

Создание макета.

После предварительного уточнения — что, как и почему — «нужно Клиенту», обычно следует выезд на место с целью сфотографировать место предполагаемого монтажа. Желательно в хорошую погоду, с достаточным освещением. Важно — сделать фото под как можно бОлее прямым углом. Так-же нужно, дабы в кадр попали какие-нибудь элементы с известным размером (окно, дверь, дорожный знак), это будет нужно в последующем для привязки координатной (масштабной) сетки.

Затем — создается чертеж предполагаемого изделия. Обычно — пара вариантов, ибо слишком большое «пространство выбора», как показывает опыт — сильно усложняет процесс «Клиент определился». Чертёж разрисовывается в цвет предполагаемого свечения светодиодов.

image
Total votes 42: ↑22 and ↓20+2
Comments86

Мне не нравится то, во что превращается PHP

Reading time5 min
Views54K


И я уже знаю, что скажете вы, глядя на заголовок статьи:
— Кто ты такой? Почему ты позволяешь себе так говорить?

Отвечу сразу, чтобы не было недомолвок:

  • Я профессионально программирую на PHP с 2004 года, то есть вот уже 16 лет на момент написания этой статьи, и продолжаю это делать каждый день
  • Я преподаю программирование, в том числе и на PHP, примерно 10 лет и за это время выпустил в свет несколько тысяч студентов
  • Я всегда был в восторге от каждой новой версии PHP, что выходила со времен от 5.0 до 7.4 и всегда был адептом подхода «пишем на самой свежей версии, тестируем на следующей»

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

Почти каждый принятый в PHP 8 RFC вызывает во мне боль и недоумение. И я готов объяснить и защитить свою позицию.
давайте разберемся вместе
Total votes 225: ↑198 and ↓27+171
Comments386

Имитированые Cisco, идентичные натуральным

Reading time11 min
Views89K
image

Недавно я столкнулся с проблемой выбора среды для изучения некоторых фич маршрутизаторов Cisco. Раньше я пользовался GNS3, а сейчас решил посмотреть, что изменилось в мире. Как выяснилось, прогресс шагнул далеко вперёд. Погружаясь в пучину статей и форумов, я обнаружил что огромное количество информации из них уже устарело. Чтобы не запутаться в многообразии ПО, я сделал себе небольшую шпаргалку (актуальность — март 2020 г.). Теперь я хочу выложить её на суд общественности. Во-первых, чтобы не пропадала (мне кажется, кому-то это может пригодиться, так как в одном месте я упоминания всех средств разом так и не нашёл). Во-вторых, возможно, в комментариях мне укажут на ошибки в описаниях и это позволит улучшить обзор.
Читать дальше →
Total votes 20: ↑20 and ↓0+20
Comments22

Как масштабироваться с 1 до 100 000 пользователей

Reading time7 min
Views20K
Через такое прошли многие стартапы: каждый день регистрируются толпы новых пользователей, а команда разработчиков изо всех сил пытается поддержать работу сервиса.

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

Попытаемся отфильтровать информацию и записать основную формулу. Мы собираемся пошагово масштабировать наш новый сайт для обмена фотографиями Graminsta с 1 до 100 000 пользователей.

Запишем, какие конкретные действия необходимо сделать при увеличении аудитории до 10, 100, 1000, 10 000 и 100 000 человек.
Читать дальше →
Total votes 27: ↑27 and ↓0+27
Comments25

Файл дескриптор в Linux с примерами

Reading time14 min
Views100K
Однажды, на одном интервью меня спросили, что ты будешь делать, если обнаружишь неработающий сервис из-за того, что на диске закончилось место?

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

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

Интервьюер прервал меня на последнем слове, дополнив свой вопрос: «Предположим, что данные нам не нужны, это просто дебаг лог, но приложение не работает из-за того, что не может записать дебаг»?

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

«ну хорошо», сказал я, «если мы не можем перезапускать приложение и данные нам не важны, то мы можем просто очистить этот открытый файл через файл дескриптор, даже если мы его не видим в команде ls на файловой системе».

Интервьюер остался доволен, а я нет.

Тогда я подумал, почему человек, проверяющий мои знания, не копает глубже? А что, если данные все-таки важны? Что если мы не можем перезапускать процесс, и при этом этот процесс пишет на файловую систему в раздел, на котором нет свободного места? Что если мы не можем потерять не только уже записанные данные, но и те данные, что этот процесс пишет или пытается записать?
Читать дальше →
Total votes 136: ↑136 and ↓0+136
Comments20

Разработка многозадачной микроядерной ОС — Планировщик

Reading time6 min
Views16K
После того, как вы прочитали базовые шаги по написанию Hello World ядра из цикла имеющихся на Хабре статей, самое время приступить к серьезной разработке самых базовых инструментов: аллокатора кучи и планировщика.

Важно:
1. Эта серия уроков для новичков. Цель — сформировать целостную картину мира. Очень долго у меня в голове была теория Таненбаума и я не мог ее связать с практикой. Тем у кого то же самое — посвящаю эту статью.
2. Код самый простой и тупой, но максимально понятный. Моя цель дать вам понимание чтобы вы смогли написать свое ядро, гораздо более крутое чем это.
3. Репо опубликую как только посчитаю его готовым для широкого круга. Я пишу небольшую часть, отлаживаю, и снимаю видеоурок. У меня нет готового продукта.

Честно говоря я долго думал стоит ли начинать писать статьи и делать видеоуроки на столь изьезженную тему. Но страсть к системному программированию и отсутствие структурированной информации на русском языке все же подтолкнули меня на этот эксперимент. Посему, если труд мой окажется востребованным, статьи планирую выпускать не реже чем раз в месяц и не чаще чем раз в неделю.
Total votes 51: ↑48 and ↓3+45
Comments40

Как дебажить переменные окружения в Linux

Reading time4 min
Views28K
Часто бывает так, что приходишь на машину и обнаруживаешь какой-то скрипт, запущенный под системным пользователем неделю назад. Кто его запустил? Где искать этот run.php? Или добавляешь запись в /etc/crontab, а скрипт там падает с ошибкой «command not found». Почему? И что делать? 

У меня есть ответы на эти вопросы.

Читать дальше →
Total votes 88: ↑86 and ↓2+84
Comments22

Хаки при работе с большим числом мелких файлов

Reading time7 min
Views42K
Идея статьи родилась спонтанно из дискуссии в комментариях к статье «Кое-что об inode».



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

Поэтому делюсь нашим опытом, может кому и пригодится.
Читать дальше →
Total votes 104: ↑103 and ↓1+102
Comments66

Шутки и отсылки из «Симпсонов» на английском, которые нужно объяснять

Reading time7 min
Views59K


Сегодня поговорим о мультиках. А конкретно — о самом длинном мультсериале в истории человечества — «Симпсонах».

Авторы сериала не стесняются затрагивать самые злободневные и спорные темы вроде религии, политкорректности, однополых браков, феминизма. Собственно, это одна из причин, почему «Симпсоны» настолько знамениты.

Еще одна причина — это великолепный юмор и разнообразные отсылки. При переводе на другие языки часть из них теряет смысл, поэтому мы рассмотрим оригинальные шутки и отсылки, которые действительно стоят внимания. Поехали!
Total votes 114: ↑95 and ↓19+76
Comments53

Как мы сделали PHP 7 в два раза быстрее PHP 5. Часть 1: оптимизация структур данных

Reading time18 min
Views37K
В декабре 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. Для половины сайтов — точно.
Total votes 121: ↑116 and ↓5+111
Comments20

Развёрнутый ответ на комментарий, а также немного о жизни провайдеров в РФ

Reading time7 min
Views81K
Сподвиг меня на этот пост вот этот вот комментарий.

Привожу его здесь:
kaleman сегодня в 18:53

Меня сегодня порадовал провайдер. Вместе с обновление системы блокирования сайтов, у него под бан попал почтовик mail.ru. С утра дергаю техподдержку, ничего сделать не могут. Провайдер маленький, и блокируют видимо вышестоящие провайдеры. Еще заметил замедление открытие всех сайтов, может какое-то кривое DLP навесили? Раньше никаких проблем с доступом не было. Уничтожение рунета идет прямо на моих глазах…
Дело в том, что, похоже, мы и есть тот самый провайдер :(

И действительно, kaleman почти угадал с причиной проблем с mail.ru (хотя мы долго отказывались верить в подобное).

Дальнейшее будет разделено на две части:

  1. причины наших сегодняшних проблем с mail.ru и увлекательный квест по их поиску
  2. существование ISP в сегодняшних реалиях, стабильность суверенного рунета.
Читать дальше →
Total votes 291: ↑290 and ↓1+289
Comments387

Parcel — очень быстрый бандлер, не требующий настройки

Reading time3 min
Views41K


Для чего


Parcel — маленький и быстрый бандлер, позиционируется как решение для маленьких проектов. С момента первого релиза (7 дней назад) уже собрал 8725 звездочек на гитхабе. Согласно официальной документации имеет следующие плюсы:


Быстрая сборка


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


Собирает все ваши ассеты


Из коробки имеется поддержка ES6, TypeScript, CoffeeScript, HTML, SCSS, Stylus, raw-файлов. Плагины не требуются.


Автоматические преобразования


Весь код автоматически проходит через Babel, PostCSS, PostHTML — подхватываются при необходимости из node_modules.


Разделение кода без лишней конфигурации


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


Горячая перезагрузка


Типичный хот-релоад без конфигурации — сохраняете изменения и они автоматически применяются в браузере.


Дружелюбный вывод ошибок


При ошибке подсвечивается кусок кода, в котором она произошла.

Читать дальше →
Total votes 22: ↑18 and ↓4+14
Comments68

Parcel — пишем плагин

Reading time6 min
Views6K


В прошлой статье я рассказал про новый бандлер Parcel, который не требует конфигурирования и готов к бою сразу после установки. Но что делать, если вдруг стандартного набора ассетов не хватает? Ответ прост — написать свой плагин.

Читать дальше →
Total votes 7: ↑7 and ↓0+7
Comments2

Multiboot, UEFI, NTFS или почти рецепт счастья

Reading time4 min
Views292K
Пост написан по мотивам публикации «Живительная флешка».

Предисловие


Доброго времени суток, Хабр. Совсем недавно, читая Хабр, наткнулся на статью Живительная флешка, где был описан способ создания мультизагрузочной флешки с набором полезных утилит, разнообразных систем и т.д. И все бы ничего, да вот и тут зарыта собака — обратим внимание на эту ветку комментариев, в которой обсуждается работоспособность мультизагрузки в системах с UEFI. Таким образом я начал собственное расследование искать универсальный способ решения этой проблемы.
Читать дальше →
Total votes 25: ↑24 and ↓1+23
Comments74

Производительность PHP: планируем, профилируем, оптимизируем

Reading time16 min
Views40K


Привет, Хабр! Два года назад мы писали о том, как перешли на PHP 7.0 и сэкономили миллион долларов. На нашем профиле нагрузки новая версия оказалась в два раза более эффективной по использованию CPU: ту нагрузку, которую раньше у нас обслуживали ~600 серверов, после перехода начали обслуживать ~300. В результате на протяжении двух лет у нас был запас мощностей.

Но Badoo растёт. Количество активных пользователей постоянно увеличивается. Мы совершенствуемся и развиваем нашу функциональность, благодаря чему пользователи проводят в приложении всё больше времени. А это, в свою очередь, отражается на количестве запросов, которое за два года увеличилось в 2—2,5 раза.

Мы оказались в ситуации, когда двукратный выигрыш в производительности нивелировался более чем двукратным ростом запросов, и мы опять стали приближаться к пределам нашего кластера. В ядре PHP снова ожидаются полезные оптимизации (JIT, предзагрузка), но они запланированы только на PHP 7.4, а эта версия выйдет не раньше, чем через год. Поэтому трюк с переходом сейчас повторить не удастся — нужно оптимизировать сам код приложения.

Под катом я расскажу, как мы подходим к таким задачам, какими пользуемся инструментами, и приведу примеры оптимизаций, идей и подходов, которые мы применяем и которые помогли нам в своё время.
Читать дальше →
Total votes 105: ↑105 and ↓0+105
Comments58

Статический анализ PHP-кода на примере PHPStan, Phan и Psalm

Reading time20 min
Views63K


Компания Badoo существует уже более 12 лет. У нас очень много PHP-кода (миллионы строк) и наверняка даже сохранились строки, написанные 12 лет назад. У нас есть код, написанный ещё во времена PHP 4 и PHP 5. Мы выкладываем код два раза в день, и каждая выкладка содержит примерно 10—20 задач. Помимо этого, программисты могут выкладывать срочные патчи — небольшие изменения. И в день таких патчей у нас набирается пара десятков. В общем, наш код меняется очень активно.

Мы постоянно ищем возможности как для ускорения разработки, так и для повышения качества кода. И вот однажды мы решили внедрить статический анализ кода. Что из этого получилось, читайте под катом.
Читать дальше →
Total votes 77: ↑76 and ↓1+75
Comments51

Манифест Чистого Программиста или краткий конспект книги «Чистый Код» Роберта Мартина

Reading time8 min
Views95K

Данная статья является конспектом книги "Чистый Код" Роберта Мартина и моим пониманием того, каким Чистый Код должен быть. Тут нет разделов о тестировании, TDD, о том какая должна быть архитектура и т.д. Здесь все только о том, каким должен быть Чистый Код.


Читать дальше →
Total votes 48: ↑44 and ↓4+40
Comments49

Профилирование и отладка Python, инструменты

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

Сегодня мы познакомимся с основной и самой многочисленной группой инструментов — событийными профайлерами.

Приступим!
Total votes 72: ↑69 and ↓3+66
Comments9

Information

Rating
Does not participate
Registered
Activity