Pull to refresh
-6
4
Send message

How sqlalchemy uses greenlet to call an async Python function from a normal function

Reading time5 min
Views3K

The Python language has two kind of functions — normal functions that you would use in most cases, and async functions. The latter functions are used when performing network IO in an asynchronous manner. The problem with this division is that async functions can only be called from other async functions. Normal functions, on the other hand, can be called from any functions — however, if you call a normal function that does a blocking operation from an async function, it will block the whole event loop and all your coroutines. These limitations usually mean that when writing an using Python`s asyncio, you can`t use any of the IO libraries that you use when writing a synchronous application, and vice versa, unless a library supports usage both in sync and async applications.

Now, the question is, in case you are developing a large and complex library, that, say, allows users to interact with relational databases, abstracting away (some of) the differences between the SQL syntax and other aspects of these databases, and abstracting away the differences between the drivers for that database, how do you support both sync and async usage of your library without duplicating the code of your library? The way sqlalchemy is organized is that regardless of what database and driver for it you are using, you will be calling functions and methods related to Engine, Connection, etc classes, which will do some general work independent of database, then apply the logic specific to your database and finally, call the functions of your database driver to actually communicate with the database. If you are using Python`s asyncio, the database driver will expose async functions and methods, but the rest of the library that is driver‑independent would ideally remain the same. However, the issue is that that you can`t call the async functions of the driver from the normal functions of the core of the library.

Read more
Total votes 4: ↑4 and ↓0+4
Comments1

Размышления о Нобелевской премии по физике 2024

Level of difficultyEasy
Reading time4 min
Views9.1K

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

Читать далее
Total votes 14: ↑10 and ↓4+12
Comments13

Как я написал бота для саммари telegram каналов

Level of difficultyEasy
Reading time3 min
Views4.6K

Всем привет!
Меня зовут Азрет, я - CTO в AAA (читается как "трипл-эй"). Мы разрабатываем LLM приложения для бизнеса. Решаем разнообразные задачи - оптимизация внутренних процессов за счет ИИ, маркетинговые исследования и запуск новых продуктов. Но запрос на бота, про которого я хочу рассказать, внезапно пришел от фаундера нашего агенства.

Ситуация понятна - я подписан на кучу телеграм каналов, я не успеваю их читать, мне от этого неприятно, я испытываю FOMO. А я бы хотел не пропустить ничего важного, тратить как можно меньше времени и иметь все в одном месте.

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

В этой обзорной статье - детали архитектуры и стека.
Кому интересно - прошу под кат.

Читать далее
Total votes 12: ↑10 and ↓2+10
Comments19

Зарубежная банковская карта в 2024: где оформить онлайн, сколько стоит, как пополнять?

Level of difficultyEasy
Reading time5 min
Views66K

Привет, Хабр! Меня зовут Мила, когда‑то я работала аналитиком в банках, а нынче делаю авторские туры в Африку. По работе мне постоянно приходится отправлять деньги за границу, оплачивать отели, трансферы, билеты онлайн и оффлайн.

Хочу поделиться опытом оформления одной конкретной карты банка Казахстана. Данный банк, опасаясь санкций, публично отрицает возможность открытия счетов для нерезидентов ОНЛАЙН. Поэтому помогающие конторы стараются не ссылаться на реальное название банка, а заменять его на псевдонимы: «зелёный банк», «свободный банк», «банк воландеморт». Так что тссс! мы все понимаем, что король голый, но вслух ни‑ни.

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

Итак, поехали.

Читать далее
Total votes 63: ↑49 and ↓14+44
Comments115

Пишем и тестируем миграции БД с Alembic. Доклад Яндекса

Reading time20 min
Views88K
Приложения на бэкенде могут работать с самыми разными базами данных: PostgreSQL, SQLite, MariaDB и другими. Перед разработчиками встает задача реализовать возможность легко и безопасно изменять состояние БД. Менять нужно как структуру базы, так и сами данные от одной версии приложения к другой.


В докладе я поделился опытом использования Alembic — хорошо себя зарекомендовавшего инструмента для управления миграциями. Почему стоит выбрать именно Alembic, как с его помощью подготовить миграции, как их запускать (автоматически или вручную), как решить проблемы необратимых изменений, зачем тестировать миграции, какие проблемы могут выявить тесты и как их реализовать — на все эти вопросы я постарался ответить. Заодно поделился несколькими лайфхаками, которые сделают работу с миграциями в Alembic легкой и приятной.
Читать дальше →
Total votes 8: ↑5 and ↓3+7
Comments14

Битрикс для программиста и менеджера: любовь и ненависть

Reading time7 min
Views18K
Здравствуйте. Я уже давно не пишу на php, но то и дело натыкаюсь на интернет-магазины на системе управления сайтами Битрикс. И я вспоминаю о своих исследованиях.

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

И это всё очень интересно.

Джумла вызывает смех.
Вордпресс вызывает удивление.
Битрикс вызывает ненависть. Почему? Я захотел ответить именно на этот вопрос, и этот ответ оказался неожиданным.
Читать дальше →
Total votes 32: ↑25 and ↓7+18
Comments46

Модель CMMI

Reading time8 min
Views104K
Всем здравствуйте! Наконец-то я на Хабре. Постараюсь незамедлительно начать приносить пользу если не всему сообществу, то хотя бы некоторой его части:)

Я был немало удивлён, обнаружив, что на Хабре практически нет информации о модели CMMI, если не считать пары упоминаний здесь и здесь.
На западе уже давно крупные заказы по разработке ПО доверяются только компаниям, прошедшим сертификацию на соответствие какому-либо международному стандарту, зачастую им становится модель CMMI. Хотя сами авторы этой модели неоднократно повторяют, что это не стандарт, а всего лишь сборник рекомендаций по улучшению процессов внутри организации.

Что такое CMMI?


Википедия даёт следующее определение:
Capability Maturity Model Integration (CMMI) – Комплексная модель производительности и зрелости – набор моделей (методологий) совершенствования процессов в организациях разных размеров и видов деятельности. CMMI содержит набор рекомендаций в виде практик, реализация которых, по мнению разработчиков модели, позволяет реализовать цели, необходимые для полной реализации определенных областей деятельности.

Читать дальше →
Total votes 40: ↑35 and ↓5+30
Comments63

Обзор LiveWire 3 и Volt

Reading time13 min
Views5.9K

Приветствую всех поклонников Laravel!

Эта статья-обзор новой, уже третьей версии Livewire. Решил сделать эту статью после выпуска на youtube-канале видео обзора Livewire, который понравился аудитории. Ну и заодно также взглянем на новинку - Volt. Думаю, многие из вас ждали этот обзор и особенно обзор Volt.

Читать далее
Total votes 4: ↑3 and ↓1+2
Comments5

50 оттенков линейной регрессии, или почему всё, что вы знаете об A/B тестах, помещается в одно уравнение

Reading time18 min
Views18K

Всем привет! A/B тестирование уже давно стало стандартом в проверке гипотез и улучшении продуктов в X5. Но, как ни странно, многие из «модных» техник, которые применяются в A/B тестировании, на самом деле, не что иное, как вариации старой доброй линейной регрессии. 

Основная идея здесь проста: правильное добавление новых переменных в модель помогает лучше контролировать внешние факторы и уменьшать шум в данных. Это позволяет точнее оценить эффект от воздействия и объединить разные статистические подходы, которые обычно рассматриваются отдельно. Но почему это работает? Почему всё сводится к тому, что добавление переменных помогает объединить, казалось бы, разрозненные техники? 

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

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

Микросервисы в представлении среднего разработчика, и как всё на самом деле

Level of difficultyMedium
Reading time11 min
Views62K

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

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

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

погрузиться в микросервисы
Total votes 236: ↑232 and ↓4+260
Comments207

Деконструкция монолита: Максимально производительный подход к проектированию программ

Reading time10 min
Views6.7K

Как и почему компания Shopify перешла от монолитной архитектуры к модульно-монолитной.


image

У компании Shopify одна из крупнейших баз кода на Ruby on Rails. Над ней трудились более десяти лет свыше тысячи разработчиков. Она включает множество разнообразных функций, например, выставление счетов продавцам, управление сторонними приложениями, обновление информации о товарах, обработка доставки и так далее.

Изначально система была построена как монолит, то есть все эти разные функциональные возможности были встроены в одну кодовую базу без каких-либо разграничений между ними. В течение многих лет эта архитектура работала нормально, но в конце концов мы достигли точки, когда недостатки монолита перевесили преимущества. Нам предстояло сделать выбор, как действовать дальше.
Читать дальше →
Total votes 12: ↑12 and ↓0+19
Comments4

USB over IP в домашних условиях

Reading time4 min
Views54K
Иногда возникает желание работать с устройством, подключенным по USB, не держа его на столе рядом с ноутбуком. У меня таким устройством является китайский гравёр с лазером на 500 мВт, штука довольно неприятная при близком контакте. Помимо непосредственной опасности для глаз, в процессе работы лазера выделяются токсичные продукты горения, поэтому устройство должно находится в хорошо проветриваемом помещении, и желательно изолированно от людей. А как же таким устройством управлять? Ответ на данный вопрос я случайно нашел, просматривая репозиторий OpenWRT в надежде найти достойное применение старенькому роутеру D-Link DIR-320 A2. Для подключения решил использовать описываемый на Хабре ранее USB over IP tunnel, однако все инструкции по его установке успели потерять актуальность, поэтому пишу свою.
Читать дальше →
Total votes 42: ↑41 and ↓1+58
Comments28

И снова о Redmi AX6S + OpenWRT

Level of difficultyMedium
Reading time15 min
Views23K

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

Хочу прошить!
Total votes 4: ↑4 and ↓0+6
Comments28

Какой роутер для OpenWrt купить в 2025 году?

Level of difficultyEasy
Reading time21 min
Views120K

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

Роутер, как и любой другой девайс, нужно покупать под запрос. Например, линуксоиды привыкли покупать ноутбуки именно под Linux, а не первый попавшийся. Также и тут: если нужен OpenWrt, то роутер тоже надо выбирать с умом, а не надеяться на то, что кастомная прошивка сделает конфетку из роутера за 700 р.

В 2023 и 2024 появились интересные роутеры, которые уже поддерживаются проектом OpenWrt. Эти роутеры сделаны на базе ARM-процессоров. Такие роутеры появились у нескольких компаний, и дальше их количество будет только увеличиваться.

Читать далее
Total votes 245: ↑245 and ↓0+271
Comments248

Введение в fetch

Reading time5 min
Views304K

Прощай, XMLHttpRequest!


fetch() позволяет вам делать запросы, схожие с XMLHttpRequest (XHR). Основное отличие заключается в том, что Fetch API использует Promises (Обещания), которые позволяют использовать более простое и чистое API, избегать катастрофического количества callback'ов и необходимости помнить API для XMLHttpRequest.
Читать дальше →
Total votes 35: ↑30 and ↓5+25
Comments145

Очерки истории CSS

Reading time9 min
Views13K
Размышляя об HTML и CSS, вы, наверное, представляете себе их как технологии, которые всегда были вместе. Однако, через годы после того, как в 1989-м Тим Бернерс-Ли создал World Wide Web, CSS ещё и в помине не было. Первоначальные концепции, на которых построен веб, совершенно не предусматривали способов стилизации сайтов.



Вот небезызвестный пост из архивов старых рассылок. Его написал Марк Андриссен в 1994-м. Он приложил руку к созданию браузеров Mosaic и Netscape. В этом материале Андрессен отмечает, что так как не существует способа стилизации веб-сайтов с использованием HTML, единственное, что он может сказать веб-разработчикам, которые задают ему вопросы о графическом дизайне, было: «извиняюсь, но вы попали».

Десятилетие спустя CSS полным ходом шёл к тому, чтобы стать общепризнанным инструментом веб-дизайна. Что произошло за эти годы?
Читать дальше →
Total votes 21: ↑21 and ↓0+21
Comments13

Как я перестроил почти с нуля отдел техподдержки хостинга за 4 года

Reading time11 min
Views11K
Стратегическое решение было таким: поддержка не должна оставлять ощущение, что вы поговорили с безразличными тупыми уродами. Это как минимум. А в идеале должна быть помогающей и доброй, то есть — конкурентным преимуществом. 10 лет назад основатели отвечали на вопросы пользователей. Я этот период не застал.



Мы довольно быстро выросли от маленького хостинга до одного из лидеров рынка (сейчас с нашего хостинга открывается 12,7% сайтов Рунета). В середине этого процесса стало понятно, что надо либо забить на количество пропущенных звонков, либо что-то принципиально менять в организации работы. Были все шансы стать стереотипной поддержкой с типичной отбивкой «попробуйте перезагрузить» в ответ на подробное описание проблемы, то есть бездушными бюрократами, которым важно выполнить скрипт, а не решить проблему.

Но сначала надо было решить другую задачу: в 2017 году мы не отвечали на примерно каждый десятый звонок. То есть человек звонил-звонил, ждал 10-12 гудков, потом клал трубку. И если он не перезванивал, надеялись, что человек справился сам.

Хотелось, чтобы звонки не терялись. И ответы были нормальные человеческие.
Читать дальше →
Total votes 31: ↑30 and ↓1+38
Comments24

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

Level of difficultyEasy
Reading time10 min
Views747

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

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

Большое интервью Саймона Данлопа — основателя Dream Industries: как вывести российские ИТ-продукты на мировой рынок

Reading time13 min
Views10K


Саймона Данлопа (Simon Dunlop) можно смело назвать российским предпринимателем английского происхождения. Этот человек, к настоящему моменту, достаточно серьезно повлиял на ИТ-индустрию нашей страны. Он уже подтвердил и продолжает это доказывать, что российские ИТ-продукты могут успешно конкурировать с западными не только у себя дома, но и в гостях — за границей.

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

Первый вопрос мой звучит следующим образом: как англичанина, который работал в табачной промышленности, занесло в ИТ, еще и в Россию?

Я работал в табачном бизнесе [компания Philip Morris] почти 7 лет. За это время у меня появилось желание заниматься чем-то своим. За это время я видел, как наши клиенты развивали свои бизнесы – от нуля до нескольких сотен миллионов долларов оборотом. Мне хотелось то же самое сделать.
Читать дальше →
Total votes 28: ↑24 and ↓4+20
Comments4

Ирина — опенсорс русский голосовой помощник. Offline-ready

Reading time9 min
Views54K

- Ирина, таймер...
- Ставлю таймер на пять минут.

Вполне себе обыденная история из моего быта. Я таки сделал собственного автономного голосового помощника.

TL;DR> Ирина вполне неплохо работает дома 24x7.

Потребуется установить Python 3.5+ и зависимости через pip (немного знаний Python).

Скиллы "из коробки": таймер, погода, контроль медиа (громче/тише/дальше), контроль плеера MPC-HC, запуск медиа из папки, расписание ближайших электричек, "подбрось кубик/монетку".

Плагинами добавляются: другие скиллы, Text-to-Speech и Speech-to-Text движки.

Интересно? Поехали >
Total votes 91: ↑89 and ↓2+106
Comments88

Information

Rating
1,132-nd
Registered
Activity

Specialization

Backend Developer, Web Developer
Git
SQL
Python
Django