Pull to refresh
3
0
Send message

Как мы наводили порядок в проекте с помощью принципов чистой архитектуры

Level of difficultyEasy
Reading time6 min
Views7.9K

Всем привет!

Меня зовут Михаил Копченин, я backend-разработчик сервиса биллинга #CloudMTS.

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

На эксперименты с ЧА нас сподвиг модуль биллинга, который разросся до пухлого монолита. Так бывает, когда в mvp хочется быстрее добавлять новые фичи, а вопросы оптимальности архитектуры откладываются на потом.

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

Совместная работа в реальном времени: алгоритмы, редакторы и облако

Level of difficultyEasy
Reading time5 min
Views3.1K

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

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

Основы программного обеспечения для групповой работы были заложены в системе NLS (oN-Line System), разработанной в 1960-х годах. Под катом расскажем, как от первых экспериментов в области цифровых коммуникаций разработчики перешли к инструментам и сервисам для совместного онлайн-кодинга.

Читать далее
Total votes 10: ↑9 and ↓1+16
Comments0

БЭМ-методология: с чего всё начиналось и зачем это всё нужно

Reading time13 min
Views238K
На Хабре уже много писали о методологии БЭМ, выросшей в Яндексе. И мы решили, что пора системно рассказать о том, откуда она появилась и что сделало БЭМ таким, каким мы его знаем. Думаем, это будет интересно не только тем, кто уже использует БЭМ, но и тем, кто считает, что эта методология не подходит для их проектов. Возможно, они увидят, что мы решали проблемы, похожие на их собственные, и найдут что-то полезное для себя.

image

Конечно, все началось с собственных потребностей Яндекса. Вместе с тем, как он рос, росло и количество сотрудников, которые занимаются фронтендом. Постепенно команда увеличилась настолько, что стало очевидно — без единых стандартов работать будет сложно. К тому же, мы находимся в офисах Яндекса в разных городах. Возникла идея создать общую методологию, которая поможет организовать процессы в большой команде, работающей над разными проектами. А главное то, что мы хотели не только упорядочить и ускорить разработку, но и снизить порог входа в проект для нового разработчика.
Читать дальше →
Total votes 73: ↑58 and ↓15+43
Comments100

Как я Markdown парсер выбирал

Reading time18 min
Views25K

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

То, что начиналось как: «Окей, гугл, какой парсер выбрать?», – вылилось в полноценное исследование существующих реализаций парсеров.

О том, какие открытия меня ждали на этом пути, и будет данная статья.

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

Извлечение текста из файлов PDF при помощи Python

Level of difficultyMedium
Reading time15 min
Views52K

▍ Введение


В эпоху больших языковых моделей (Large Language Model, LLM) и постоянно расширяющейся сферы их применений непрерывно растёт и важность текстовых данных.

Существует множество типов документов, содержащих подобные виды неструктурированной информации, от веб-статей и постов в блогах до рукописных писем и стихов. Однако существенная часть этих данных хранится и передаётся в формате PDF. В частности, выяснилось, что за каждый год в Outlook открывают более двух миллиардов PDF, а в Google Drive и электронной почте ежедневно сохраняют 73 миллионов новых файлов PDF (2).

Поэтому разработка более систематического способа обработки этих документов и извлечения из них информации позволит нам автоматизировать процесс и лучше понять этот обширный объём текстовых данных. И в выполнении этой задачи, разумеется, нашим лучшим другом будет Python.
Читать дальше →
Total votes 38: ↑37 and ↓1+53
Comments10

Недельный геймдев: #166 — 24 марта, 2024

Level of difficultyEasy
Reading time5 min
Views1.9K

Из новостей: Nekki выпустила новую версию Cascadeur и пересмотрела тарифы, Sensor Tower купила data.ai, AMD представила FSR 3.1, Blender представил официальный Asset Store.

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

Читать далее
Total votes 10: ↑9 and ↓1+12
Comments0

Что не так с вашей консольной программой?

Reading time9 min
Views11K

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

Но как часто мы обсуждаем наши повседневные инструменты с точки зрения читабельности, хотя пишем под web и каждый день используем консольные утилиты? Сегодня Андрей Светлов расскажет, что со всем этим делать, и чем он пользуется для консолей. Помимо того, что Андрей  CPython Core developer и понемногу развивает Python, в свободное от работы время он эксперт по asyncio, со-автор aiohttp, yarl, multidict и прочим популярным библиотекам.

Читать далее
Total votes 39: ↑34 and ↓5+39
Comments18

Зачем знать индустрию, в которой работает твоя компания?

Reading time8 min
Views3.1K

Всем привет!

Неоднократно сталкивался в ИТ-сообществе с мнением, что разработчикам бы работу работать, а не “вот это вот все”. Под “этим всем” скрываются видео и круглые столы от менеджмента, разъясняющие стратегию компании, полезные тренинги от HR, всякая социальная активность типа бейджиков на корпоративном портале, и конечно же, понимание сферы бизнеса - индустрии, в которой работает компания.

Максимум на что готовы многие коллеги по сфере ИТ - понятные им исследования поведения юзеров с помощью A/B или UX тестирования и прочей бигдаты (не к ночи будь помянута :)). То есть, цифры.

Вопрос в том, а можно ли качественно выполнять свою работу, не понимая, что (а точнее, кто) за этими цифрами скрывается? Какие в индустрии правила игры? Чего ждут от компании-лидера? Какие фичи стоит приоритизировать, а на какие не стоит тратить сил и времени? Почему этот коммерческий директор так настойчиво уже год пушит эту непонятную доработку???

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

В статье ниже буду рассказывать, как команда управления знаниями решает эту задачу, и почему это вообще лежит в зоне ответственности knowledge management.

Читать далее
Total votes 9: ↑8 and ↓1+7
Comments6

Эффективный Django. Часть 1

Reading time14 min
Views301K

Представляю вам перевод статей о Django с сайта effectivedjango.com. Наткнулся я на этот сайт во время изучения данного фреймворка. Информация размещенная на этом ресурсе показалась мне полезной, но так как нигде не нашел перевода на русский, решил сделать сие доброе дело сам. Этот цикл статей, как мне думается, будет полезен веб-разработчикам, которые делают только первые шаги в изучении Django.
Приступить к чтению
Total votes 45: ↑40 and ↓5+35
Comments15

Полное практическое руководство по Docker: с нуля до кластера на AWS

Reading time39 min
Views1.7M



Содержание



Вопросы и ответы


Что такое Докер?


Определение Докера в Википедии звучит так:


программное обеспечение для автоматизации развёртывания и управления приложениями в среде виртуализации на уровне операционной системы; позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, а также предоставляет среду по управлению контейнерами.



Ого! Как много информации.

Читать дальше →
Total votes 125: ↑124 and ↓1+123
Comments44

Статическое Python приложение в образе контейнера на базе scratch

Reading time9 min
Views7.8K

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

Размер итогового образа контейнера получится всего лишь от 13 мегабайт.

Читать далее
Total votes 9: ↑8 and ↓1+10
Comments6

Clean Architecture глазами Python-разработчика

Reading time10 min
Views32K
Привет! Меня зовут Евгений, я Python-разработчик. Последние полтора года наша команда стала активно применять принципы Clean Architecture, уходя от классической модели MVC. И сегодня я расскажу о том, как мы к этому пришли, что нам это дает, и почему прямой перенос подходов из других ЯП не всегда является хорошим решением.


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

Быстрорастворимое проектирование

Reading time25 min
Views44K
Люди учатся архитектуре по старым книжкам, которые писались для Java. Книжки хорошие, но дают решение задач того времени инструментами того времени. Время поменялось, C# уже больше похож на лайтовую Scala, чем Java, а новых хороших книжек мало.

В этой статье мы рассмотрим критерии хорошего кода и плохого кода, как и чем измерять. Увидим обзор типовых задач и подходов, разберем плюсы и минусы. В конце будут рекомендации и best practices по проектированию web-приложений.

Эта статья является расшифровкой моего доклада с конференции DotNext 2018 Moscow. Кроме текста, под катом есть видеозапись и ссылка на слайды.


Читать дальше →
Total votes 48: ↑47 and ↓1+46
Comments34

Создание архитектуры программы или как проектировать табуретку

Reading time25 min
Views696K
Взявшись за написание небольшого, но реального и растущего проекта, мы «на собственной шкуре» убедились, насколько важно то, чтобы программа не только хорошо работала, но и была хорошо организована. Не верьте, что продуманная архитектура нужна только большим проектам (просто для больших проектов «смертельность» отсутствия архитектуры очевидна). Сложность, как правило, растет гораздо быстрее размеров программы. И если не позаботиться об этом заранее, то довольно быстро наступает момент, когда ты перестаешь ее контролировать. Правильная архитектура экономит очень много сил, времени и денег. А нередко вообще определяет то, выживет ваш проект или нет. И даже если речь идет всего лишь о «построении табуретки» все равно вначале очень полезно ее спроектировать.

К моему удивлению оказалось, что на вроде бы актуальный вопрос: «Как построить хорошую/красивую архитектуру ПО?» — не так легко найти ответ. Не смотря на то, что есть много книг и статей, посвященных и шаблонам проектирования и принципам проектирования, например, принципам SOLID (кратко описаны тут, подробно и с примерами можно посмотреть тут, тут и тут) и тому, как правильно оформлять код, все равно оставалось чувство, что чего-то важного не хватает. Это было похоже на то, как если бы вам дали множество замечательных и полезных инструментов, но забыли главное — объяснить, а как же «проектировать табуретку».

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

Данная статья является попыткой ответить на эти вопросы хотя бы в первом приближении.
Читать дальше →
Total votes 88: ↑85 and ↓3+82
Comments45

Рендеринг на сервере и HTMX — это будущее

Level of difficultyMedium
Reading time14 min
Views42K

Современная ситуация с разработкой веб-приложений


Сегодня пользователи ожидают от веб-приложений плавной работы без перезагрузок страниц. К сожалению, эти ожидания обычно реализуются в виде одностраничных приложений (single-page application, SPA), использующих библиотеки и фреймворки наподобие React и Angular. Эти фреймворки очень специализированы и с ними может быть трудно работать.

Новый подход заключается в том, чтобы вернуть возможность реализации этого UX в руки инженеров, разрабатывавших веб-сайты до возникновения безумия SPA, используя готовые наборы инструментов и знания. HTMX — лучший пример такого подхода из тех, что я видел.
Читать дальше →
Total votes 61: ↑52 and ↓9+63
Comments159

Олдскульные HTML-шаблоны снова в моде! htmx и другие средства борьбы с javascript fatigue

Reading time4 min
Views12K

Отрисовка страничек на сервере, похоже, снова начинает приобретать популярность (нет, я не имею в виду React SSR).

Сторонники оппозиции растущему влиянию javascript, наконец, смогли направить усилия в нужное русло - и в результате родился фреймворк htmx! Поговорим о том, как он работает, а также, какие ещё фреймворки используют серверные шаблоны в 2022.

Также поговорим о divkit - аналоге html для мобилок, недавно выпущенный Яндексом в опен-сорс - Вы, наверно, догадались, какое отношение может иметь одно к другому.

Читать
Total votes 20: ↑15 and ↓5+12
Comments25

Декомпозиция систем по ограниченным контекстам DDD — глубокое погружение

Reading time10 min
Views11K

"Отдайте этот функционал в другую системы - он относится к ним" - ворчал мой собеседник. Ему с пылом отвечали: "Так быть не должно. Мы сами должны его сделать!" Спор грозил затянуться до вечера. Ни одна из сторон не могла привести ни одного настоящего аргумента, почему новый функционал нужно поместить в ту или иную автоматизированную систему.

Проблема была в том, что никто не понимал как правильно делить системы на части и по каким признакам включать в них новые модули. У собеседников не было никакой единой простой методики.

Но методика на самом деле есть, и весьма неплохая. Называется она Предметно Ориентированным Дизайном (Domain Driven Design, DDD). С помощью DDD деление большой системы на (микро)сервисы становится простым и понятным.

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

Введение в Data Parallel C++. Пишем первую программу

Reading time7 min
Views12K


Перед вами введение в программирование на языке Data Parallel C++ или, коротко, DPC++. DPC++ основан на Khronos SYCL — это означает, что перед нами модель современного параллельного программирования. Новейшим текущим стандартом Khronos является SYCL 1.2.1, хотя предварительная спецификация SYCL 2020 уже доступна для изучения. Intel и другие участники рабочей группы SYCL в настоящее время занимаются финализацией следующей версии спецификации. DPC++ содержит расширения, которые облегчают использование SYCL, при этом многие из них, как ожидается, войдут в состав SYCL 2020. Внедрение таких расширений в компилятор DPC++ помогает сообществу оценить их эффективность заранее перед стандартизацией.
Читать дальше →
Total votes 5: ↑3 and ↓2+6
Comments4

К вопросу об импортозамещении

Level of difficultyEasy
Reading time10 min
Views18K

История это началась еще в стародавние времена (в начале 2022 года), когда импортозамещение электроники не было столь востребовано, и воспринималось скорее, как непонятная прихоть начальства, нежели как насущная необходимость. Делали мы клавиатуру для применения в изделиях специального назначения, как положено, подали перечень ЭКБ импортного производства для утверждения, получили заключение о наличии отечественных аналогов, в общем, все, как всегда.

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

1) Их было больше всего в устройстве (50+ штук), так что мы могли сразу заместить почти 80% компонентов
2) Не ожидалось особых проблем, «ну уж диоды то у нас, наверное, могут сделать».

Те, кому интересно узнать, чем кончилось, могут нажать кнопку «Читать далее», для остальных спойлер – кончилось плохо

Читать далее
Total votes 76: ↑75 and ↓1+95
Comments86

C/C++ из Python (ctypes)

Reading time6 min
Views66K
main

Про то как вызывать Python из C написал в прошлой статье, теперь поговорим как делать наоборот и вызывать C/C++ из Python3. Раз начал писать об этом, то раскроем всю тему до конца. Тем более, что ни чего сложного здесь нет тоже.

Читать дальше →
Total votes 27: ↑25 and ↓2+23
Comments44

Information

Rating
Does not participate
Registered
Activity