Обновить
3
0

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

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

Domain-driven design, Hexagonal architecture of ports and adapters, Dependency injection и Python

Время на прочтение23 мин
Охват и читатели31K

Пролог

- Глянь, статью на Хабр подготовил.
- Эм... а почему заголовок на английском?
- "Предметно-ориентированное проектирование, Гексагональная архитектура портов и адаптеров, Внедрение зависимостей и Пайто..."

С пронзительным хлопком в воздухе материализуется обалдевший Сатана в обличии сине-жёлтого питона.

--

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

Читать далее

Интуитивное использование методов Монте-Карло с цепями Маркова

Время на прочтение9 мин
Охват и читатели8.6K

Легко ли это? Я попробовал


Алексей Кузьмин, директор разработки и работы с данными «ДомКлик», преподаватель направления Data Science в Нетологии, перевел статью Rahul Agarwal о том, как работают методы Монте-Карло с цепями Маркова для решения проблем с большим пространством состояний.
Читать дальше →

Генераторы непрерывно распределенных случайных величин

Время на прочтение15 мин
Охват и читатели128K
Генератор случайных чисел во многом подобен сексу: когда он хорош — это прекрасно, когда он плох, все равно приятно (Джордж Марсалья, 1984)

Популярность стохастических алгоритмов все растет. Многие из них базируются на генерации большого количества различных случайных величин. Далеко не всегда равномерно распределенных. Здесь я попытался собрать информацию о быстрых и точных генераторах случайных величин с известными распределениями. Задачи могут быть разными, разными могут быть и критерии. Кому-то важно время генерации, кому-то — точность, кому-то — криптоустойчивость, кому-то — скорость сходимости. Лично я исходил из предположения, что мы имеем некий базовый генератор, возвращающий псевдослучайное целое число, равномерно распределенное от 0 до некого RAND_MAX

unsigned long long BasicRandGenerator() {
    unsigned long long randomVariable;
    // some magic here
    ...
    return randomVariable;
}

и что этот генератор достаточно быстрый. Я имею ввиду, что дешевле сгенерировать с десяток случайных чисел, нежели чем посчитать логарифм или возвести в степень одно из них. Это могут быть стандартные генераторы: std::rand(), rand в MATLAB, Java.util.Random и т.д. Но имейте ввиду, что подобные генераторы редко подходят для серьезной работы. Зачастую они проваливают разные статистические тесты. А также, помните, что вы полностью зависите от них и лучше использовать свой собственный генератор, чтобы иметь представление о его работе.

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


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

Равномерное распределение





Читать дальше →

Создаём собственный физический 2D-движок. Часть 1: основы и разрешение импульсов силы

Время на прочтение14 мин
Охват и читатели77K
image


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

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

В этой части туториала мы рассмотрим следующие темы:

  • Простое распознавание коллизий
  • Генерирование простого многообразия
  • Разрешение импульсов силы

Метод Монте-Карло и его точность

Время на прочтение5 мин
Охват и читатели266K
Под метдом Монте-Карло понимается численный метод решения
математических задач при помощи моделирования случайных величин. Представление об истории метода и простейшие примеры его применения можно найти в Википедии.

В самом методе нет ничего сложного. Именно эта простота объясняет популярность данного метода.

Метод имеет две основных особенности. Первая — простая структура вычислительного алгоритма. Вторая — ошибка вычислений, как правило, пропорциональна
\sqrt{D\zeta/N}, где D\zeta — некоторая постоянная, а N — число испытаний. Ясно, что добиться высокой точности на таком пути невозможно. Поэтому обычно говорят, что метод Монте-Карло особенно эффективен при решении тех задач, в которых результат нужен с небольшой точностью.

Однако одну и ту же задачу можно решать различными вариантами метода Монте-Карло, которым отвечают различные значения D\zeta. Во многих задачах удается значительно увеличить точность, выбрав способ расчета, которому соответствует значительно меньшее значение D\zeta.

Читать дальше →

Domain-Driven Design: тактическое проектирование. Часть 2

Время на прочтение16 мин
Охват и читатели97K


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

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

Markdown в науке

Время на прочтение10 мин
Охват и читатели23K

Интернет и эпоха Web 2.0 существенно изменили метод подготовки научных публикаций. Сейчас мы читаем статьи с экранов компьютеров, смартфонов и электронных книг, а не только с бумаги. Крайне желательно, чтобы работа над текстом по превращению журнальной статьи в энциклопедическую вики-справку, в презентацию, или же в содержимое сайта, не требовала чрезмерных усилий. Далее мы рассмотрим решение означенной проблемы с помощью текстовой разметки Markdown и попробуем представить себе дальнейшее развитие технологий.

Читать далее

Как мы разрабатываем документацию в открытом проекте Embox

Время на прочтение7 мин
Охват и читатели5.1K
imageДобрый день.

Являясь одним из разработчиков открытого проекта Embox, я часто слышал (в последнее время слишком часто) о том, что проект интересный, но поскольку документации нет, его невозможно использовать. Мы отвечали, что документация в каком-то виде есть, что мы всегда можем ответить на вопросы, что в крайнем случае можно попытаться разобраться самостоятельно, ведь проект открытый, но все это не подходило. Пришлось заниматься данной, очень неприятной для разработчиков, темой. Но естественно, статья не о том, что документацией заниматься “неприятно”! A о том, как мы сделали процесс разработки документации более комфортным. Ведь в любом более менее большом проекте, обязательно возникают вопросы, связанные с документацией.

Для тех, кому лень читать, сразу скажу, что в итоге мы пришли к разработке документации в формате markdown. Ну а тех, кому интересны детали, причины, почему именно markdown и какие есть плюсы и минусы у данного подхода, прошу под кат.
Читать дальше →

История и будущее специальных функций

Время на прочтение26 мин
Охват и читатели22K

Перевод статьи Стивена Вольфрама (Stephen Wolfram) "The History and Future of Special Functions".
Выражаю огромную благодарность Кириллу Гузенко за помощь в переводе.


Статья представляет собой запись выступления, сделанного на Wolfram Technology Conference 2005 в Шампейне, штат Иллинойс, как часть мероприятия в честь 60-летия Олега Маричева.

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

Выдержка из Математической энциклопедии (под редакцией И. М. Виноградова)
СПЕЦИАЛЬНЫЕ ФУНКЦИИ — в широком смысле совокупность отдельных классов функций, возникающих при решении как теоретических, так и прикладных задач в самых различных разделах математики.

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

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

К наиболее важным классам С. ф. относятся гамма-функция и бета-функция, гипергеометрическая функция и вырожденная гипергеометрическая функция, Бесселя функции, Лежандра функции, параболического цилиндра функции, интегральный синус, интегральный косинус, неполная гамма-функция, интеграл вероятности, различные классы ортогональных многочленов одного и многих переменных, эллиптическая функция и эллиптический интеграл, Ламе функции и Матъё функции, дзета-функция Римана, автоморфная функция, некоторые С. ф. дискретного аргумента.

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

Для С. ф. имеются таблицы значений, а также таблицы интегралов и рядов.

История многих понятий и объектов математики прослеживается ещё со времён древнего Вавилона. Ведь ещё 4000 лет назад в Вавилоне была разработана и активно использовалась 60-ричная арифметика с различными сложными операциями.

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

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

Таким образом, практически любые вычисления сводились к работе с таблицами. И, конечно, археологам доводилось находить вавилонские таблички из глины с таблицами обратных величин и квадратов.

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

И, в какой-то мере, история специальных функций начинается с открытия принципов работы с последовательностями из этих самых «кусочков».

Следующие «куски» были, вероятно, теми, которые включают тригонометрию. Египетский папирус Ринда 1650-го года до н.э. уже содержал некоторые проблемы касательно пирамид, решение которых требовало тригонометрии. Стоит упомянуть, что была найдена вавилонская табличка с таблицей секансов.

Астрономы тех времён со своей моделью эпициклов, безусловно, уже вовсю использовали тригонометрию. И, опять-таки, все математические операции сводились к работе с небольшим количеством «специальных» функций.
Читать дальше →

Создай, оформи, опубликуй. Sphinx — незаменимый помощник в мире Python документации

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели30K

В данной статье пройдём путь от знакомства с мощным инструментом для документации Sphinx до публикации нашей собственной документации на GitHub Pages. Мы узнаем насколько широко Sphinx используется в мире открытого исходного кода, включая такие проекты как Django, The Linux Kernel, TensorFlow, Pandas и многие другие.

Узнать больше

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

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

image

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

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

Время на прочтение18 мин
Охват и читатели37K

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

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

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

Читать далее

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

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели119K

▍ Введение


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

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

Поэтому разработка более систематического способа обработки этих документов и извлечения из них информации позволит нам автоматизировать процесс и лучше понять этот обширный объём текстовых данных. И в выполнении этой задачи, разумеется, нашим лучшим другом будет Python.
Читать дальше →

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

Время на прочтение9 мин
Охват и читатели11K

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

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

Читать далее

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

Время на прочтение8 мин
Охват и читатели3.3K

Всем привет!

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

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

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

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

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

Читать далее

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

Время на прочтение14 мин
Охват и читатели310K

Представляю вам перевод статей о Django с сайта effectivedjango.com. Наткнулся я на этот сайт во время изучения данного фреймворка. Информация размещенная на этом ресурсе показалась мне полезной, но так как нигде не нашел перевода на русский, решил сделать сие доброе дело сам. Этот цикл статей, как мне думается, будет полезен веб-разработчикам, которые делают только первые шаги в изучении Django.
Приступить к чтению

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

Время на прочтение39 мин
Охват и читатели1.9M



Содержание



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


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


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


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



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

Читать дальше →

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

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


Читать дальше →

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

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

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

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


Читать дальше →

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

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

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

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

Данная статья является попыткой ответить на эти вопросы хотя бы в первом приближении.
Читать дальше →

Информация

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