Pull to refresh
4
0
Владимир @LeMaX

User

Send message

Профилирование PHP (Laravel) приложений с xhprof. Учимся искать ботлнеки

Level of difficultyEasy
Reading time9 min
Views5.2K

Привет, PHP-шники!

Вам знакомо то чувство, когда ваш PHP-код отрабатывает за дофига миллисекунд, а иногда и секунд, и вы не можете понять, в чём дело и где тот говнокод, который я (или не я, а мой коллега 😵‍💫) когда-то написал? В этой статье хочу немного рассказать на примере профайлинга PHP-кода, как перестать гадать и начать выявлять боттлнеки, которые всё тормозят. Короче, помочь поискать говнокод.

Читать далее
Total votes 15: ↑15 and ↓0+20
Comments15

Отдай ребёнка дьяволу или купи мне пиво: вот, чем вы рискуете, когда используете свободное ПО

Reading time5 min
Views46K

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

Читать далее
Total votes 108: ↑94 and ↓14+107
Comments123

Автоматическая документация по коду для API в Laravel

Reading time6 min
Views17K

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

Ждать долго не пришлось, при обновлении на сервере PHP c 7.2 до 7.4 - мы получили страницу с описанием ошибки, вместо документации. Ошибка найдена в библиотеке, которую мы использовали для рендеринга UI документации. ПР на гитхабе был создан быстро, но провисел в статусе open почти неделю. После этого, тикет насчет документации пошел в работу.

Читать далее
Total votes 2: ↑2 and ↓0+2
Comments1

Компания Delta потеряла $150 млн из-за желания производителя аварийных генераторов для ЦОД

Reading time4 min
Views12K


В прошлом году авиакомпания Delta потеряла более $150 млн. Причина убытков — сбой в работе дата-центра Delta, о чем мы в свое время писали. Речь о компании Delta Air Lines, многие тысячи пассажиров которой не смогли никуда улететь из-за сбоя в ДЦ, расположенном в Атланте, США. Как и у практически любой компании, в дата-центрах Delta Air Lines есть дублирующие системы, которые начинают работать, если что-то идет не так. В резервные системы были вложены десятки миллионов долларов США, но в нужное время они просто не сработали должным образом.
Читать дальше →
Total votes 34: ↑29 and ↓5+24
Comments62

Архитектура растущего проекта на примере ВКонтакте

Reading time14 min
Views41K


Алексей Акулович объясняет жизненный путь высоконагруженного проекта на PHP. Это — расшифровка Highload ++ 2016.

Меня зовут Лёша, я пишу на PHP.

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

Начнём.
Total votes 65: ↑61 and ↓4+57
Comments46

Nginx + PHP 7.1.1 FPM vs Node.js 7.7.1 в качестве бэкенда ч.2

Reading time2 min
Views15K
Всем привет! Продолжение противостояния 2х языков.

Сегодня у нас будет более честное сравнение, которое отображает большинство реальных задач.
Итак, мы сегодня сравним PHP и Node.js по следующим признакам:

  1. Типичная динамическая страница
  2. REST API

Читать дальше →
Total votes 51: ↑25 and ↓26-1
Comments92

Вопрос с собеседования тим-лида: что делать, если деньги на проект получены и истрачены, а проект не готов

Reading time7 min
Views37K
Вопрос с реального собеседования (6 лет назад)

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

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

Прошел год. Оплата получена вся, 100%. А тех задание выполнено на 80%. Нужно ещё 20% сделать. Самое главное, что архитектор проекта утверждает — эти 20% в модель не вписываются, надо переписывать заново. Я, как кандидат на руководителя разработки, должен проанализировать ситуацию, принять решение, согласовать с заказчиком.
Читать дальше →
Total votes 54: ↑33 and ↓21+12
Comments71

Простой, надёжный и удобный мониторинг серверов на Linux

Reading time3 min
Views41K
Если вы администрируете сервера на Linux, наверняка, вы находитесь в состоянии постоянного поиска простых, надежных и удобных инструментов для решения самых разных задач. Одна из них — наблюдение за состоянием машин. И, хотя инструментов для мониторинга предостаточно, найти то, что войдёт в повседневный набор программ, обычно не так уж и просто. Именно поэтому сегодня я хочу рассказать об одной из таких находок, об утилите, которой пользуюсь каждый день.



Программа, о которой пойдёт речь, называется Nigel’s Monitor, или просто nmon. Она, используя простой интерфейс ncurses, умеет выводить, в реальном времени, сведения о различных показателях, характеризующих состояние сервера. Среди них — данные по процессору и памяти, информация о сетевых ресурсах, о дисковых накопителях, о файловой системе и NFS, о процессах. Набор отображаемых показателей можно настраивать. Nmon имеет текстовый интерфейс, поэтому, для работы с ним достаточно подключиться к серверу по SSH.

Предлагаю установить nmon и поговорить о том, как им пользоваться.
Читать дальше →
Total votes 33: ↑29 and ↓4+25
Comments15

NodeJS фреймворк с синтаксисом Laravel

 (и без лапши в коде)

Reading time3 min
Views33K

Пробежавшись по Хабру с удивлением заметил, что этот фреймворк упомянут только в нескольких дайджестах, хотя по моему мнению заслуживает большего внимания. Ниже будет много кода и совсем немного комментариев к нему. И да, друзья! Это моя первая статья на хабре, просьба сильно не быть и не ругать.

Читать дальше →
Total votes 39: ↑27 and ↓12+15
Comments42

Уголовный кодекс разработчика

Reading time4 min
Views31K
Статья из раздела «наболело». Сколько уже копий сломано о чистом коде, шаблонах проектирования, принципах правильной разработки и тд. Но пока по-прежнему каждый второй попадающийся на глаза проект, особенно не публичный, покоящийся в глубоком энтерпрайзе, имеет признаки состава преступления по «уголовке».

Я сейчас не говорю про «Административный кодекс», куда я как раз и отношу неправильное применение шаблонов, неиспользование тестов, неоптимизированный код, даже харкодинг каких-нибудь настроек и «магические числа» (хотя уже на грани). В этих случаях разная правоприменительная практика. Например оптимизированный код часто сложнее для понимания, чем неоптимизированный. Неоптимальный алгоритм зачастую легче воспринимается при чтении кода, а ведь разработчик 95% времени читает свой или чужой код и только 5% пишет. Или если вы пишите скрипт для друга забесплатно, побыстрее и заходкодили пару настроек, вы скорее всего правильно поступили. Решив, что интеграция туда логики извлечения настроек (и ее тестирования) из отдельных конфигов потребует намного большего времени, чем хардкод.

Но есть признаки, которые определенно говорят, что ваш код серьезно болен и без всяких оправданий содержит криминал.
Поехали...
Total votes 100: ↑65 and ↓35+30
Comments194

Надёжная авторизация для веб-сервиса за один вечер

Reading time9 min
Views104K
image

Предыстория


Осень 2015-ого. Примерно полтора года назад, когда мне случилось стать участником разработки проекта, где пользователей существенно больше пары десятков человек, я наконец-то впервые в своей жизни задумался о надёжности авторизации.

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

Достаточно рассмотреть простейший пример: кто-то подобрал пароль, или человек каким-то образом скомпрометировал его. Конечно, у нас в базе данных хранятся хэши с использованием соли, мы даже настолько продвинуты, что используем только HTTPS… Но это никак не спасёт нас от человеческого фактора.
Читать дальше →
Total votes 41: ↑14 and ↓27-13
Comments354

Как не дать частым релизам поломать ваше API, или пишем авто-тесты для открытого API и шлем результат в Telegram бот

Reading time19 min
Views15K
image

Предисловие


Наша команда разрабатывает финансовые инструменты, в том числе открытые платежные API, и как многие проекты, работающие по практике continuous integration мы одновременно с созданием проекта 3 года назад начали думать над тем, как улучшить покрытие проекта тестами и добиться максимальной стабильности нашего кода при довольно частых изменениях (мы иногда устанавливаем обновления на продуктовую среду несколько раз в день). Особенно это важно в трех аспектах:

  • мы предоставляем наши API интерфейсы в открытый доступ клиентам и важно, чтобы все взаимодействие четко соответствовало описаниям спецификаций
  • мы интегрируемся с большим количеством других финансовых сервисов и банков, и помимо покрытия тестами своего кода мы вынуждены также покрывать интеграционными тестами взаимодействие с test (а иногда и prod) средой сторонних систем
  • наша внутренняя архитектура включает в себя большое количество микросервисов, которые общаются между собой по HTTP API

В этой статье я хотел бы поделиться опытом и показать пример, как мы разрабатываем тесты для API интерфейсов включающих в себя как сервер-сервер взаимодействие, так и работу через браузер.  Для демонстрации я приведу простой пример тестирования процесса оплаты банковской картой через наш платежный шлюз с отправкой результата тестов в Telegram.
Читать дальше →
Total votes 10: ↑9 and ↓1+8
Comments6

Настройка Laravel relationships — подсчет комментариев (вольный перевод)

Reading time2 min
Views13K
Представляю вам вольный перевод статьи "Tweaking Eloquent relations – how to get hasMany relation count efficiently?" с сайта softonsofa.com.

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

Что ж, позвольте мне рассказать вам что мы можем с этим сделать.
Читать дальше →
Total votes 13: ↑11 and ↓2+9
Comments16

HTTP/2.0 — Халтура от IETF: плохой протокол, плохая политика

Reading time5 min
Views21K
Давным давно, в начале 1989 года, Рональд Рейган ещё был президентом, хотя до окончания его срока оставалось 19½ дней. А перед тем, как 1989 год подошел к концу, родилась Тейлор Свифт, а Андрей Сахаров и Сэмюэл Беккет скончались.

В долгосрочной перспективе, наиболее значительным событием 1989 скорее всего станет то, что Тим Бернерс-Ли заложил основы протокола HTTP и назвал результат «World Wide Web». (Одно примечательное свойство этого имени состоит в том, что аббревиатура «WWW» имеет в два раза больше слогов и требует больше времени для произнесения.)

Протокол HTTP, предложенный Тимом, работал в 10-мегабитных сетях с коаксиальными кабелями, а его компьютером был NeXT Cube с частотой 25 МГц. 26 лет спустя, в моем ноутбуке установлен процессор в сотни раз быстрее, а оперативной памяти в тысячи раз больше, чем было на компьютере Тима, но протокол HTTP всё тот же.

Несколько дней назад рабочая группа IESG (The Internet Engineering Steering Group) запросила последние комментарии по новому протоколу HTTP/2.0 (https://tools.ietf.org/id/draft-ietf-httpbis-http2) перед тем, как утвердить его в качестве официального стандарта.

[Спустя пару месяцев с минимальными изменениями стандарт был утвержден. — прим. пер.]
Читать дальше →
Total votes 50: ↑44 and ↓6+38
Comments79

Mail.Ru для бизнеса, часть 2: как это работает

Reading time8 min
Views19K
Недавно мы запустили «Mail.Ru для бизнеса». В прошлом посте мы уже рассказывали о том, как организовать корпоративную почту на Mail.Ru, а сегодня подробнее остановимся на технологиях, которые мы задействовали при реализации. При работе над проектом мы реализовали ряд технических решений на серверной и клиентской стороне, которые в итоге позволили сделать сервис удобнее. В этом посте мы подробнее расскажем, как технологически устроена наша клиентская часть.

Под катом — про single-page, сбор ошибок, шаблонизацию и переход от одного URL-а к другому без перезагрузки страницы.

Читать дальше →
Total votes 85: ↑61 and ↓24+37
Comments54

Самый простой способ создать сайт

Reading time3 min
Views25K
Хотелось бы поделится собственным велосипедом.

image

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

Читать дальше →
Total votes 78: ↑16 and ↓62-46
Comments242

ReactJS 15.0.2 Tutorial

Reading time16 min
Views51K

Мы создадим простой, но реалистичный модуль комментариев для блога, упрощенный аналог модуля комментариев реального времени, предлагаемый такими ресурсами как Disqus, LiveFyre и Facebook.


Мы обеспечим:


  • Представление для отображения всех комментариев
  • Форму для ввода и отправки комментариев
  • Задел на будущее, для подключения настоящего бэк-енда

Также будут реализованы:


  • Optimistic commenting: комментарии появляются на странице раньше чем они сохраняются на сервере, что визуально ускорит наш модуль
  • Live updates: комментарии других пользователей появляются на странице в реальном времени
  • Markdown formatting: пользователи могут использовать Markdown-разметку для форматирования текста

Финальная версия


Ссылка на GitHub

Читать дальше →
Total votes 17: ↑13 and ↓4+9
Comments26

Как проинтегрировать TeamCity и Bitbucket Server

Reading time3 min
Views17K


Bitbucket Server (ранее известный как Stash) — решение для централизованного управления разработкой, позволяющее управлять вашими репозиториями, в том числе не открывая доступа к ним извне организации. Bitbucket позволяет упростить хранение репозиториев с исходными кодами на вашем сервере и обеспечивает простоту доступа к репозиториям для всех членов вашей команды.

В мире IT известно, что Bitbucket может быть проинтегрирован с другими продуктами и платформами в единую экосистему, которая делает процесс разработки всеобъемлющим и удобным. Чаще всего Bitbucket интегрируется с JIRA. Однако, поиск и локализация проблем — не единственная задача, с которой типовой процесс разработки сталкивается каждый день, и даже несколько раз в день. Более важной задачей является сохранение целостности проекта в процессе внесения дополнений и исправлений в код. Для этих задач вы можете использовать CI-сервер, который в том числе позволяет создавать сборки проектов и выполнять серии тестов для автоматической проверки функциональности.

Bitbucket «из коробки» предлагает интеграцию с родственным решением от AtlassianBamboo. Но, помимо Bamboo, существуют другие CI-решения, которые также достаточно популярны — TeamCity и Jenkins. В нашем посте мы обрисуем специфику интеграции Bitbucket и TeamCity.

Читать дальше →
Total votes 7: ↑6 and ↓1+5
Comments1

Беспроводное оборудование nooLite и Умный дом (часть 1). Arduino

Reading time8 min
Views20K
nooLite

Здравствуйте уважаемые читатели Geektimes! На этот раз я хочу представить вашему вниманию цикл статей об интеграции беспроводного оборудования nooLite в системы домашней автоматизации. Этот цикл будет похож на уже вышедшую серию статей (раз, два, три) об интеграции модулей Laurent в системы Умного дома, только рассказываться в нём будет о системе nooLite и после прочтения этого цикла у вас не останется вопросов по управлению приборами nooLite из вашего Умного дома.
Читать дальше →
Total votes 10: ↑10 and ↓0+10
Comments16

Дэвид Боуи был одним из первых интернет-предпринимателей

Reading time2 min
Views11K
image

В связи с печальным известием о смерти известного британского музыканта Дэвида Боуи издание Inverse собрало несколько фактов, по-новому открывающих этого человека и дающих представление о том, как тонко он чувствовал инновации. Ещё до того, как мир осознал возможности интернета, Боуи начал делиться своими песнями через специальный сайт, создал интернет-провайдер и даже интернет-банк.
Узнать подробностей
Total votes 22: ↑19 and ↓3+16
Comments7
1

Information

Rating
4,646-th
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity