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

Пользователь

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

Как в PHP улучшить читаемость регулярных выражений

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

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

PHP использует диалект регулярных выражений PCRE — до версии PHP 7.3, и PCRE2 — в более новых версиях. Поэтому в PHP можно использовать различные продвинутые приемы, помогающие писать читаемые, самодокументируемые и поддерживаемые регулярные выражения. При этом не надо также забывать и о наличии в PHP функций фильтрации переменных, а также семейства функций ctype*, позволяющих валидировать такие распространенные значения как url-ссылки, адреса электронной почты и строки из букв и цифр — вообще без использований регулярный выражений. Во многих IDE есть подсветка регулярных выражений, помогающая их читать, а иногда даже и проверка выражений, с подсказками по их улучшению.

Читать далее
Всего голосов 24: ↑22 и ↓2+35
Комментарии14

Модульный PHP монолит: рецепт приготовления

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

Статья написана по мотивам моего доклада на митапе. В нем я рассказываю историю того, как мы взяли и не распилили монолит на микросервисы, и что сделали вместо этого.

На тот момент наша команда работала над приложением, начало которому было положено еще в 2009 году не искушенными в архитектуре студентами. К 2018 это уже был типичный big ball of mud (большой ком грязи), или, этакий «монолит-копролит», как выразился один наш коллега. Думаю, многим знакомо.

Читать далее
Всего голосов 19: ↑18 и ↓1+25
Комментарии13

Пишем переиспользуемые компоненты, соблюдая SOLID

Время на прочтение21 мин
Количество просмотров26K
Всем привет! Меня зовут Рома, я — фронтендер в Я.Учебнике. Сегодня расскажу, как избежать дублирования кода и писать качественные переиспользуемые компоненты. Статья написана по мотивам (но только по мотивам!) доклада с Я.Субботника — видео есть в конце поста. Если вам интересно разобраться в этой теме, добро пожаловать под кат.

Статья содержит более детальный разбор принципов и подробные примеры из практики, которые не поместились в доклад. Рекомендую прочитать, если вы хотите глубоко погрузиться в тему и узнать, как мы пишем переиспользуемые компоненты. Если же вы хотите познакомиться с миром переиспользуемых компонентов в общих чертах, то, по моему мнению, вам больше подойдёт запись доклада.
Читать дальше →
Всего голосов 14: ↑13 и ↓1+15
Комментарии3

Сеть контейнеров — это не сложно

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

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

В этой статье мы ответим на следующие вопросы:

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

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

Как настроить сетевой доступ из контейнера во внешний мир (например, в Интернет)?

Как получить доступ к контейнерам, работающим на сервере, из внешнего мира (публикация портов)?

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

React Server-Side Rendering (SSR) — руководство новичка

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

В этом уроке мы поговорим о серверном рендеринге (SSR), его преимуществах и подводных камнях. Затем мы создадим мини React проект и express сервер (Node.js), чтобы продемонстрировать, как можно достичь SSR.

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

Проект, который сжег меня дотла

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

Сейчас 3 часа ночи 10 августа 2013 года. Бесконечный приступ паники не дает мне сомкнуть глаз. Как сумасшедший, я раз за разом прокручиваю только что написанный код в голове. Внезапно я осознаю, что в архитектуре приложения есть серьезная проблема. Я вскрикиваю и скатываюсь с кровати, спотыкаясь о свою девушку, я бегу как сумасшедший к своему компьютеру, чтобы все исправить. 

Я знаю, что этот день будет прекрасной солнечной субботой. Я снова буду работать 12 часов подряд. А стресс и горящий дедлайн снова не дадут мне уснуть. Как я докатился до всего этого?

Читать далее
Всего голосов 73: ↑64 и ↓9+75
Комментарии76

Коммиты — это снимки, а не различия

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

Git имеет репутацию запутывающего инструмента. Пользователи натыкаются на терминологию и формулировки, которые вводят в заблуждение. Это более всего проявляется в "перезаписывающих" историю командах, таких как git cherry-pick или git rebase. По моему опыту, первопричина путаницы — интерпретация коммитов как различий, которые можно перетасовать. Однако коммиты это не различия, а снимки! Я считаю, что Git станет понятным, если поднять занавес и посмотреть, как он хранит данные репозитория. Изучив модель хранения данных мы посмотрим, как новый взгляд помогает понять команды, такие как git cherry-pick и git rebase.

Читать далее
Всего голосов 35: ↑29 и ↓6+36
Комментарии55

Go: распространенные антипаттерны

Время на прочтение7 мин
Количество просмотров13K
Программирование — это искусство. Мастера своего дела, создающие потрясающие работы, могут ими гордиться. То же самое относится и к программистам, которые пишут код. Чтобы достичь вершин мастерства, творцы постоянно ищут новые подходы к работе и новые инструменты.

Так поступают и разработчики, которые, не прекращая профессионально развиваться, постоянно стремятся найти ответ на самый важный свой вопрос: «Как писать хороший код?». Вот что говорит об этом Фредерик Брукс в книге «Мифический человеко-месяц, или Как создаются программные системы»:

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


Как писать хороший код (источник)

В этом материале сделана попытка найти ответ на большой вопрос из вышеприведенного комикса. Самый простой способ писать хороший код заключается в том, чтобы не употреблять в своих программах так называемые «антипаттерны».
Читать дальше →
Всего голосов 34: ↑25 и ↓9+28
Комментарии18

Используем Terraformer для адаптации действующей инфраструктуры в AWS для деплоев с Terraform

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

Рассказываем про наш опыт импорта и адаптации конфигураций инфраструктуры, ранее развернутой вручную в AWS, в формат Terraform. Зачем? Причин может быть много: и отказоустойчивость, и упрощение горизонтального и вертикального масштабирования, и многие другие. С них и начнем эту статью.

Проблематика

Без каких-либо процессов автоматизации управления инфраструктурой вы неизбежно столкнетесь с известными ограничениями: невозможно быстро пересоздать инфраструктуру; нет истории изменений, произведенных в инфраструктуре; нет контроля используемых версий ПО…

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

Когда объектов не достаточно

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

Я искал материалы об истоках объектно-ориентированного программирования. Причина была в том, что в сообществе Laravel возникла тенденция использовать паттерн Action и говорить вот что такое «настоящее ООП». У меня возникли некоторые сомнения, и вместо того, чтобы задавать вопросы, я решил поискать ссылки времён Smalltalk. Нашёл книгу Smalltalk, Objects, and Design. И мне было так интересно её читать, что я решил поделиться с вами своими находками.

Паттерн Action гласит, что логику нужно обёртывать в классы Action. Эта идея не нова, в других сообществах продвигалась «Чистая архитектура», при которой каждый «сценарий использования» (или Interactor) должен являться самостоятельным классом. Всё очень просто. Но об этом ли говорит ООП?

Если вам интересна суть статьи, то:

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

Продолжайте читать, если я разжёг в вас интерес.
Читать дальше →
Всего голосов 32: ↑32 и ↓0+32
Комментарии6

Как дойти до CQRS, если у тебя PHP

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

Недавно я посмотрел доклад «Как перестать бояться CQRS». Вроде бы простая идея, но есть нюансы. Так и появился этот выпуск.

CQRS vs CQS (не перепутай)

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

Рендеринг в веб

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

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

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

Часть 1. MPI — Введение и первая программа

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

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

В основном используют 2 типа оптимизации, либо их смесь: Векторизация и распараллеливание вычислений. Чем же они отличаются?

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

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

Далее вы узнаете, что такое параллелизация и как пользоваться MPI на практике.

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

Лучшие практики для деплоя высокодоступных приложений в Kubernetes. Часть 1

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

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

Функциональность, которая не доступна в Kubernetes «из коробки», здесь почти не будет затрагиваться. Также мы не будем привязываться к конкретным CD-решениям и опустим вопросы шаблонизации/генерации Kubernetes-манифестов. Рассмотрены только общие правила, касающиеся того, как Kubernetes-манифесты могут выглядеть в конечном итоге при деплое в кластер.

Читать далее
Всего голосов 57: ↑56 и ↓1+66
Комментарии19

Сети для начинающего IT-специалиста. Обязательная база

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

Примерно 80% из нас, кто заканчивает университет с какой-либо IT-специальностью, в итоге не становится программистом. Многие устраиваются в техническую поддержку, системными администраторами, мастерами по наладке компьютерных устройств, консультантами-продавцами цифровой техники, менеджерами в it-сферу и так далее.


Эта статья как раз для таких 80%, кто только закончил университет с какой-либо IT-специальностью и уже начал мониторить вакансии, например, на должность системного администратора или его помощника, либо выездного инженера в аутсорсинговую фирму, либо в техническую поддержку 1-й/2-й линии.


А также для самостоятельного изучения или для обучения новых сотрудников.


За время своей трудовой деятельности в сфере IT я столкнулся с такой проблемой, что в университетах не дают самую основную базу касательно сетей. С этим я столкнулся сначала сам, когда, после окончания университета, ходил по собеседованиям в 2016 году и не мог ответить на простые (как мне сейчас кажется) вопросы. Тогда мне конечно показалось, что это я прохалтурил и не доучил в университете. Но как оказалось дело в образовательной программе. Так как сейчас, я также сталкиваюсь с данным пробелом знаний, когда обучаю новых сотрудников.


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


Именно поэтому я решил собрать основные темы в одну статью и объяснить их как можно проще «на пальцах».

Читать дальше →
Всего голосов 61: ↑50 и ↓11+55
Комментарии99

Удаленка в IT: личный опыт

Время на прочтение8 мин
Количество просмотров34K
Сейчас все больше компаний готовы к найму удаленных сотрудников. Для работодателей это расширяет возможность выбора высококвалифицированных специалистов. В Surf найм удаленных сотрудников практикуется уже давно, на данный момент 40% работают дистанционно — разработчики и менеджеры. Удаленных QA мы не нанимаем из-за специфики мобильной разработки — нужен большой парк устройств, на которых проводится тестирование, и это сложно организовать дома. Процессы в Surf адаптировались к работе с удаленщиками в отлаженный механизм, который позволяет организовать эффективную работу над проектами.

image
Читать дальше →
Всего голосов 31: ↑26 и ↓5+21
Комментарии32

Перестаньте заниматься не своей работой

Время на прочтение10 мин
Количество просмотров92K
Вы легко отзываетесь на просьбу помочь? Вам не трудно сделать пару лишних задач? Вы молча переделываете не очень хорошую работу за коллегами или подчинёнными? Скорее всего, ваша рабочая нагрузка заставляет вас «перегреваться». 

Нередко в малом бизнесе мы занимаемся всем подряд, не замечая того: тестовый сервер будет перезапущен, о чём мы сами и сообщим в чате клиенту вместо инженера; баннер повесить — да погоди, у меня есть доступ к админке, готово; код аналитики — да давай я тебе Tag Manager повешу и покажу, как через него любые теги размещать; вот тут в выгрузке были подозрительные пики и провалы, я тебе сделал дополнительную детализацию… Особенно тяжело ситуация обстоит в компаниях, которые активно работают по заявкам клиентов, и каждый сотрудник берёт в работу самые разноплановые задачи. Как итог: усталость, выгорание, ошибки и завалы собственных невыполненных задач. Знакомо? Давайте искать причины и выходы под катом.

Читать дальше →
Всего голосов 83: ↑77 и ↓6+71
Комментарии85

Работа не волк, часть 2. Пройти босса и выжить на испытательном сроке

Время на прочтение9 мин
Количество просмотров30K
Новая работа — маленькая (а иногда и не очень) новая жизнь. Самое главное это начать её правильно, чтобы верный старт стал началом отличного пути. После того, как вы прошли HR-а, остаётся два важных шага: пройти собеседование с руководителем и удачно завершить испытательный срок. Поэтому в этой статье мы с вами открываем дверь к боссу (не с ноги!) и уверенно проходим дальше.
 


Это вторая часть нашего нового цикла «Работа не волк», который будет состоять из пяти частей, каждая из которых раскрывает важнейшие аспекты, связанные с трудоустройством. Как и в случае с циклом про образование, статьи будут субъективными, честными и основанными на обширной экспертизе. Вот что вас ждёт:

Часть 1. Поиск работы: источники, резюме, собеседование с HR
Часть 2. Устройство и адаптация: собеседуем с боссом, проходим испытательный срок с ветерком
Часть 3. Работа в роли новичка: рост в компании
Часть 4. Работа в роли опытного сотрудника: как не перегореть
Часть 5. Увольнение: я ухожу красиво

Ждём ваших историй в комментариях — пусть как можно больше читателей Хабра смогут искать работу без страха, находить для успеха и работать с уверенностью.
Читать дальше →
Всего голосов 48: ↑47 и ↓1+46
Комментарии7

Сказ об опасном std::enable_shared_from_this, или антипаттерн «Зомби»

Время на прочтение26 мин
Количество просмотров28K
В статье приводится опасный антипаттерн «Зомби», в некоторых ситуациях естественным образом возникающий при использовании std::enable_shared_from_this. Материал — где-то на стыке техники современного C++ и архитектуры.
Читать дальше →
Всего голосов 49: ↑46 и ↓3+43
Комментарии94

Как была устроена графика NES

Время на прочтение14 мин
Количество просмотров22K
image

Выпущенная в 1983 году домашняя консоль Nintendo Entertainment System (NES) была дешёвой, но мощной машиной, достигшей феноменального успеха. При помощи блока обработки изображений (Picture Processing Unit, PPU) система могла создавать достаточно впечатляющую по тем временам графику, которая и сегодня в нужном контексте выглядит вполне неплохо. Самым важным аспектом была эффективность памяти — при создании графики приходилось обходиться как можно меньшим количеством байтов. Однако вместе с этим NES предоставила разработчикам мощные и простые в использовании функции, позволившие ей выделиться на фоне более старых домашних консолей. Поняв принципы создания графики NES, можно проникнуться техническим совершенством системы и осознать, насколько проще работать современным разработчикам игр.

Фоновая графика NES собиралась из четырёх отдельных компонентов, комбинация которых образовывала изображение, которое мы видим на экране. Каждый компонент отвечал за отдельный аспект; цвет, расположение, «сырая» пиксельная графика и т.д. Такая система может показаться излишне сложной и громоздкой, но в конечном итоге она намного эффективнее использовала память и позволяла создавать простые эффекты в малом объёме кода. Если вы хотите понимать графику NES, то ключевой информацией будут эти четыре компонента.

В этой статье подразумевается, что вы знакомы с компьютерной математикой, и в частности с тем, что 8 бит = 1 байт, а 8 бит могут обозначать 256 значений. Также необходимо понимание того, как работает шестнадцатеричная запись. Но даже без этих технических знаний статья может показаться интересной.
Читать дальше →
Всего голосов 67: ↑67 и ↓0+67
Комментарии25
1

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность