Pull to refresh
1
0
Send message

Как реализовать быструю реентерабельную блокировку на Python и почему она работает

Level of difficultyHard
Reading time10 min
Views3.5K

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

Используя GIL (Global Interpreter Lock — Глобальная блокировка интерпретатора) и особенности реализации Threading.Lock.release можно создать более быстрый вариант.

Давайте попробуем разобраться
Total votes 11: ↑10 and ↓1+18
Comments27

Как превратить неудачи в успех и снизить риск непоправимых ошибок. Обзор книги «Принцип черного ящика»

Level of difficultyEasy
Reading time8 min
Views2.5K

Признавать свои ошибки — непросто. Никто не хочет сталкиваться с неудачами, все стремятся к успеху. А когда неудача касается работы и статуса, отношение к ошибкам становится еще более острым. Если под сомнением оказывается наш профессионализм, мы часто инстинктивно защищаемся. Мы не хотим осознавать свою некомпетентность или неспособность решить проблему, и нам не хочется, чтобы наша репутация пострадала в глазах коллег.

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

Частично из-за того, что мы склонны критиковать других за их ошибки, мы сами скрываем свои неудачи. Мы осознаем, как окружающие отреагируют на наши ошибки, и не можем представить, чтобы они поняли нашу сложную ситуацию.

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

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

Если вам это знакомо, то вам точно стоит прочитать книгу Мэтью Сайеда "Принцип черного ящика. Почему ошибки - основа наших достижений в спорте, бизнесе и жизни".

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

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

Правильный путь создания python-библиотеки: от создания до публикации

Level of difficultyMedium
Reading time30 min
Views6.2K

Привет, Хабр! Стоит ли говорить, что Python ОЧЕНЬ и ОЧЕНЬ популярный язык программирования, местами даже догоняя JavaScript. Python в мире программирования — это эсперанто, легкий язык созданный для всех, но его владельцам не мешало бы помыться.

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

Если вы ловили себя на мысли: «А почему мне бы не создать свою полноценную библиотеку?», то я рекомендую прочитать вам мою статью.

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

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

Читать далее
Total votes 26: ↑24 and ↓2+31
Comments6

Технология проектирования хранилищ данных Data Vault 2.0

Level of difficultyEasy
Reading time19 min
Views5.1K

Data Vault 2.0 остаётся одним из самых популярных методов моделирования данных. Его выбирают за гибкость, масштабируемость и устойчивость к изменениям. Этот разработанный Дэном Линстедом подход помогает организациям быстро адаптироваться к новым бизнес-требованиям, легко интегрировать новые источники данных и надёжно хранить исторические данные.

Эта статья будет полезна дата-инженерам, аналитикам данных, архитекторам данных и бизнес-аналитикам. Она поможет усовершенствовать умения в моделировании данных. Мы рассмотрим ключевые принципы Data Vault 2.0 и на практическом примере покажем, как разложить сырые данные по Data Vault 2.0.

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

Как написать свой первый модуль ядра Linux

Level of difficultyEasy
Reading time13 min
Views16K

Linux Kernel — это, пожалуй, один из самых распространённых (и, возможно, до сих пор недооценённых) программных продуктов в мире. Он является основой всех дистрибутивов Linux (что очевидно), но на этом его роль не заканчивается. Ядро также работает на множестве встроенных устройств практически повсюду. У вас есть микроволновка? Скорее всего, она работает на ядре Linux. Посудомоечная машина? Тоже. Если у вас достаточно средств на автомобиль Tesla, вы даже сможете найти несколько багов, исправить их и отправить патч в код Model S или Model X на GitHub. А что насчёт схем, которые не позволяют Международной космической станции сойти с орбиты и врезаться в Землю? Конечно, и там тоже Linux. Ядро легковесное — значит, отлично работает даже в условиях невесомости.

В этой статье напишем свой первый модуль ядра под Linux

Читать далее
Total votes 20: ↑18 and ↓2+20
Comments5

Асинхронный SQLAlchemy 2: простой пошаговый гайд по настройке, моделям, связям и миграциям с использованием Alembic

Reading time30 min
Views10K

Наконец-то пришло время взяться за то, что я давно планировал — подробный гайд по асинхронной версии SQLAlchemy 2.0 в стиле ORM. В этой серии статей я подробно расскажу обо всех аспектах: от создания моделей и установления связей между ними до миграций с Alembic и взаимодействия с данными в базе. Мы будем шаг за шагом разбирать ключевые моменты работы с асинхронной базой данных, что позволит вам глубже понять SQLAlchemy и применить эти знания на практике.

Для начала, давайте разберёмся, что такое SQLAlchemy и почему каждый разработчик, работающий с реляционными базами данных (такими как SQLite, PostgreSQL, MySQL и т. д.), должен знать о ней. После этого — настройка. Мы будем работать с PostgreSQL, но не переживайте: код, который мы напишем, универсален для всех реляционных баз данных. Мы начнем с базовой настройки SQLAlchemy для асинхронного взаимодействия, а затем перейдём к созданию таблиц в современном декларативном стиле.

Читать далее
Total votes 29: ↑28 and ↓1+30
Comments27

Python: как переменные работают на самом деле? Погружаемся в байткод и C

Level of difficultyHard
Reading time8 min
Views15K

Привет! Меня зовут Никита Соболев, я core-разработчик языка программирования CPython, а так же автор серии видео про его устройство.

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

Под катом куча кишков питона и видео на 46 минут с дополнительными кишками питона (ни один настоящий питон не пострадал при написании данной статьи).

Читать далее
Total votes 44: ↑43 and ↓1+58
Comments6

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

Level of difficultyMedium
Reading time11 min
Views24K

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

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

Давайте рассмотрим пример, в котором применено защищённое от ошибок целочисленное деление:

int safeDiv(int a, int b) {
   if (b == 0)
      throw Div0(); // Исключения передаются особым образом
   return a / b; // Теперь-то всё абсолютно безопасно, ведь так?
}

Новые языки программирования склонны применять сообщения об ошибках в функциональном стиле и кодировать ошибки в возвращаемый тип. Например, Go кодирует ошибку в возвращаемый тип при помощи кортежа (res, err), а Rust возвращает Result<T, E> — тип-сумму результата и ошибки.
Читать дальше →
Total votes 65: ↑57 and ↓8+67
Comments214

Unity для детей: топ-25 бесплатных видеоуроков

Level of difficultyEasy
Reading time10 min
Views6.4K

Собрали видеоуроки по Unity для детей 10 лет и старше: от создания простой анимации до разработки небольших игр.

Unity — это игровой движок, который позволяет создавать компьютерные игры и приложения. На нем созданы такие игры, как Slender: The Arrival, РПГ Shadowrun Returns, одна из самых красочных игр прошлого десятилетия Ori and the Blind Forest, Outer Wilds и другие. Несмотря на то, что платформа используется профессиональными разработчиками, в качестве обучения детей «Юнити» подходит отлично, поскольку в процессе развиваются не только технические навыки и умение кодить на С#, но и множество других важных компетенций.

Читать далее
Total votes 16: ↑9 and ↓7+4
Comments5

Администрирование PostgreSQL для начинающих (часть 1)

Level of difficultyEasy
Reading time33 min
Views17K

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

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

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

Level of difficultyMedium
Reading time8 min
Views15K

Список неочевидных, но при этом полезных хаков, которые позволят использовать отладчик вашего браузера1 более полноценно. Для понимания материала статьи потребуется как минимум средний уровень владения инструментами разработчика.
Читать дальше →
Total votes 72: ↑71 and ↓1+96
Comments12

Auth service без библиотек

Level of difficultyMedium
Reading time8 min
Views8.3K

О чем эта статья: статья посвящена схемам регистрации, аутентификации, авторизации пользователей в веб приложениях, смене паролей, отзыве токенов, и т. п. Мы также рассмотрим, как организовать хранение данных, обсудим, что такое JWT, коротко поговорим о «сервисе для отправки email»

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

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

Читать далее
Total votes 12: ↑12 and ↓0+13
Comments8

План действий на 2024 для UX/UI-дизайнера и ссылки на статьи

Level of difficultyEasy
Reading time6 min
Views4.6K

UI/UX-дизайн — это перспективная сфера деятельности, которая удачно сочетает творческий подход и аналитическое мышление. Профессиональные дизайнеры UI/UX разрабатывают визуально привлекательные интерфейсы, делая их при этом удобными и интуитивно понятными.

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

Читать далее
Total votes 17: ↑16 and ↓1+16
Comments2

JavaScript: структуры данных и алгоритмы. Часть 5

Level of difficultyMedium
Reading time26 min
Views4K


Привет, друзья!


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



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


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


Интересно? Тогда прошу под кат.

Читать дальше →
Total votes 11: ↑11 and ↓0+16
Comments0

Подробно про JWT

Level of difficultyMedium
Reading time6 min
Views16K

О чем эта статья: мы разберемся, что такое JSON Web Token, как он устроен и для чего используется, рассмотрим такие приемы, как «black-list токенов» и «контроль версий» токенов. Для наглядности, в конце будут блок-схемы клиент-серверных запросов с пояснениями.

Для кого эта статья: для тех, кто хочет детально понять что такое JWT, а так же для тех, кто просто ищет схему реализации.

Читать далее
Total votes 22: ↑20 and ↓2+20
Comments17

Хранение данных в Postgresql

Level of difficultyMedium
Reading time10 min
Views16K

В этом тексте хочется подробнее рассмотреть хранение данных в PostgreSQL на физическом уровне.

Для начала определимся с общеизвестными вещами. Данные хранятся в таблицах, таблицы находятся в схемах, схемы, в свою очередь, в базах данных. Под данными я тут подразумеваю одну или несколько строк. В качестве примера будем рассматривать эталон критики, по моему личному мнению, цитаты Линуса Торвальдса.

Подробнее под катом
Total votes 19: ↑18 and ↓1+21
Comments3

Неизвестно полезный CSS. Часть 4

Level of difficultyMedium
Reading time6 min
Views8.7K


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


Неважно, верстаете ли вы сайт для малого бизнеса или создаёте супермодное React приложение. Они поддерживаются большинством браузеров. Отдельно отмечу, что я не считаю IE11 современным браузером. По этой причине я не учитывал его.


Сегодня мы рассмотрим:

  • сброс стилей до значений, взятых из веб-стандартов;
  • возврат значений свойств, установленных в браузере;
  • что можно сделать с прыжками контента при открытии и закрытии модального окна;
  • возможность отобразить текст «красиво» с помощью ключевого слова system-ui;
  • способ стилизации элементов на языке, отличающимся от основного.

Больше не буду затягивать. Давайте посмотрим, что я вам подготовил.

Читать дальше →
Total votes 36: ↑36 and ↓0+53
Comments18

Как в Netflix сделали поиск по федеративному графу

Reading time11 min
Views2.1K

За последние несколько лет те, кто занимается в Netflix направлением Content Engineering, перевели множество служб компании на использование федеративной платформы GraphQL. Этот процесс продолжается и сегодня. Применение федерации GraphQL даёт командам, отвечающим за различные предметные области, новые возможности. Теперь они могут, независимо от других команд, создавать и использовать собственные графовые службы, относящихся к сфере их деятельности (Domain Graph Service, DGS). Команды, кроме того, могут связывать свои предметные области с другими областями в унифицированной схеме GraphQL, доступ к которой даёт федеративный шлюз.

Давайте, в качестве примера, рассмотрим три главнейшие сущности этого графа.

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

Как вкусно приготовить «Сельдерей» (Celery)

Level of difficultyHard
Reading time8 min
Views4.7K

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

Читать далее
Total votes 13: ↑12 and ↓1+14
Comments2

PostgreSQL 16. Страницы и версии строк. Часть 3

Level of difficultyMedium
Reading time10 min
Views4.9K

Данная статья является продолжением: PostgreSQL 16. Изоляция транзакций. Часть 2.

В этой части мы рассмотрим, из каких частей состоит страница в PostgreSQL, как выполняются операции CRUD (создание, чтение, обновление, удаление) для строк с сохранением нескольких версий одной и той же строки в таблице и как на это влияют транзакции. Также рассмотрим вложенные транзакции.

Читать далее
Total votes 13: ↑13 and ↓0+18
Comments2
1
23 ...

Information

Rating
5,539-th
Registered
Activity