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

web-dev

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

Самый быстрый фреймворк на Диком Западе: ускоряем Django-rest-framework вместе с Rust

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

Всем привет! Меня зовут Роман Кабаев, я инженер в отделе разработки инструментов тестирования компании YADRO. Вместе с коллегами мы разрабатываем собственную тест-менеджмент систему с открытым исходным кодом TestY.

На этапе запуска TestY в качестве фреймворка для разработки мы выбрали Django, так как он позволяет в максимально короткие сроки реализовать MVP. Однако развивать такой продукт — добавлять фичи, наращивать число пользователей и объем хранимых данных в системе — бывает сложно.

Мы действительно быстро запустили MVP, перевезли данные из TestRail с помощью плагинов, и команды тестирования YADRO уже более года пользуются системой. Но есть одно «но»: пользовательские сценарии разных команд сильно отличаются. Так, добавление в систему более полумиллиона тестов привело к просадке скорости работы определенных эндпоинтов, завязанных на древовидных структурах. 

Спойлер: камнем преткновения для нас стали CPU-bound задачи с большим количеством данных, о том, как я это выяснил, расскажу ниже. Изучив, как можно ускорить выполнение таких задач в Python, я протестировал несколько решений и нашел оптимальное. Если вы разрабатываете веб-приложение на Django или Python и так же, как я, хотите ускорить работу сервиса, читайте эту статью.

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

Как правильно тестировать конкурентные структуры данных

Уровень сложностиСредний
Время на прочтение19 мин
Количество просмотров5.3K

Есть потрясающая библиотека Rust под названием loom, которую можно использовать для тщательного тестирования неблокируемых (lock-free) структур данных. Я давно хотел разобраться, как она работает. И сейчас хочу! Но недавно я случайно реализовал небольшой эксперимент, который, как мне кажется, содержит часть идей loom, поэтому о нём стоит написать. Моя цель — не научить вас тому, что нужно использовать на практике (если вы хотите этого, то почитайте документацию loom), а, скорее, вывести пару идей из фундаментальных принципов.
Читать дальше →
Всего голосов 33: ↑33 и ↓0+46
Комментарии3

Учимся летать: симуляция эволюции на Rust. 5/5

Уровень сложностиСредний
Время на прочтение34 мин
Количество просмотров3.7K



Это заключительная часть серии статей по разработке симуляции эволюции с помощью нейронной сети и генетического алгоритма.





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

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

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


Привет, Хабр!

Наверное, многие из вас понимают, что одним из ключевых моментов при эксплуатации ванной комнаты является поддержание оптимального микроклимата, поскольку избыточная влажность создает идеальную среду для развития плесени и грибка на любых пористых поверхностях, будь-то штукатурка или межшовное пространство кафеля. Для нормализации уровня влажности, в первую очередь необходимо обеспечить нормальную вентиляцию, как правило, данная задача решается установкой вытяжного вентилятора. Вместе с тем, для обеспечения эффективности, немаловажно автоматизировать процесс работы вытяжной вентиляции. В данной статье я хочу поделиться своим опытом реализации «домашней» автоматизации для решения этого вопроса. Впереди DIY и много картинок, присоединяйтесь!
Читать дальше →
Всего голосов 50: ↑49 и ↓1+59
Комментарии85

Fintech: системные потоки против параллелизма Async/Await в Rust

Уровень сложностиСложный
Время на прочтение11 мин
Количество просмотров3.3K

Последнее время достаточно популярна "async/await" концепция в Rust. Безусловно для подавляющего большинства задач это лучший вариант. Так как она ориентирована на то что система, которая обрабатывает сетевые запросы, например сталкивается с блокировкой ввода/вывода к базе данных. В результате лучшим решением будет использование "async/await", так как он позволяет использовать один поток для обработки множества запросов. Если функция "async" не может быть завершена например из-за ожидания ввода-вывода, она может отдать управление в точке ее вызова "await". И "executor" например "Tokio" может переключиться на другую задачу.

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

Разработчикам на Rust: рецензия на книгу «Rust: атомарности и блокировки»

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров2.7K

Очередной пост — рецензия на книгу «Rust Atomics and Locks: Low‑Level Concurrency in Practice» авторства Мары Бос. Это руководство по работе с низкоуровневой конкуренцией в языке программирования Rust. Издание предлагает глубокое погружение в механику атомарных операций и механизмов блокировок, что делает его полезным ресурсом для разработчиков, использующих эти инструменты в своих проектах.

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

Создание парсеров на Rust

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров5.4K

Привет, Хабр!

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

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

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

Читать далее
Всего голосов 16: ↑15 и ↓1+18
Комментарии5

Lock-free структуры данных в Rust

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров3.9K

Сегодня поговорим о lock-free (или же без использования блокировок) структурах данных и атомарных операциях в Rust.

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

lock-free структуры данных позволяют нескольким потокам одновременно читать и изменять данные без блокировок.

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

Учимся летать: симуляция эволюции на Rust. 4/5

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



Это предпоследняя часть серии статей по разработке симуляции эволюции с помощью нейронной сети и генетического алгоритма.






В сегодняшнем выпуске:


Сексуальные многоугольники





Сертифицированные ISO диаграммы ASCII


------------
| \...%....|
|   \......|
|    @>....|
|      \...|
|        \.|
------------

Клевые числа




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

Работа с базами данных в Rust с помощью Diesel

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров2.3K

Привет, Хабр!

Сегодня мы поговорим о Diesel ORM — инструменте, который превращает работу с базами данных в Rust в настоящее удовольствие. Diesel ORM — это расширяемый и безопасный объектно-реляционный маппер и конструктор запросов для Rust. Он имеет высокоуровневый API для взаимодействия с различными СУБД: PostgreSQL, MySQL и SQLite.

Начнем с установки и настройки!

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

Rust и асинхронные функции: как улучшить структуру кода и повысить производительность с помощью абстракций

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

В начале 2010-х годов в программировании появился новый подход к реализации параллелизма с использованием абстракций future и promise, а также синтаксического приёма async/await. Эти технологии облегчили работу с асинхронным кодом, но вызвали ожесточённые споры среди разработчиков. Автор статьи, системный программист Saoirse Shipwreckt*, рассматривает две противоположные точки зрения на future от их апологета Мариуса Эриксена и критика Боба Нистрома. 

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

*Обращаем ваше внимание, что позиция автора может не всегда совпадать с мнением МойОфис.

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

Жизнь – боль: как одновременно поддерживать в Rust синхронный и асинхронный код

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

Присаживайтесь поудобнее и послушайте стариковскую байку: что случилось, когда я попросил у Rust слишком многого.

Допустим, вы хотите написать на Rust новую библиотеку. Всё, что для этого требуется — обернуть её в публичный API, через который будет предоставляться доступ к какому-то другому продукту, например, в Spotify API или, может быть, в API базы данных, скажем, ArangoDB. Не так это и тяжело: в конце концов, вы не изобретаете ничего нового, вам не приходится иметь дело со сложными алгоритмами. Поэтому вы полагаете, что задача решается относительно прямолинейно.  

Вы решаете реализовать библиотеку с применением async. Работа, которая будет выполняться с помощью вашей библиотеки, заключается в основном в выполнении HTTP-запросов, обслуживающих ввод/вывод, поэтому применять здесь async действительно целесообразно (кстати, это одна из тех фишек, благодаря которым сегодня так востребован Rust). Вы садитесь писать код — и вот, через несколько дней у вас готова версия v0.1.0. «Приятно», — думаете вы, как только cargo publish заканчивается успешно и загружает вашу работу на crates.io.

Проходит несколько дней, и вам прилетает новое уведомление с GitHub. Оказывается, кто-то открыл тему:

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

Учимся летать: симуляция эволюции на Rust. 2/5

Уровень сложностиСредний
Время на прочтение20 мин
Количество просмотров5.2K



Это вторая часть серии статей по разработке симуляции эволюции с помощью нейронной сети и генетического алгоритма.






В этой статье мы заложим основы нашего проекта и реализуем простую FFNN (feedforward neural network — нейронная сеть прямого распространения), которая впоследствии станет мозгом. Мы также рассмотрим множество тонкостей и идиом, которые встречаются в коде Rust, включая тесты.


Готовы? Тогда поехали.

Читать дальше →
Всего голосов 30: ↑30 и ↓0+40
Комментарии4

Рисуем фракталы на Rust и CUDA

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

Фракталы — это бесконечные самоподобные фигуры. Они определяются простыми математическими формулами, которые создают удивительную красоту!

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

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

Первый год в Rust — история любви

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров3.5K

Много лет назад я учился в Политехническом университете и уже думал о том, чем хочу заниматься, но не знал, чем именно. Поковырялся в html, css и js, написал несколько простых телеграм-ботов на питоне (с тех пор они канули в Лету), потом сделал то же самое на Java.

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

Но во время пандемии 2020 года я оказался в информационном поле Linux и с тех пор сильно вник в Linux. В этом году ради общности и системности, чтобы делать задачи, а не придумывать их, потому что та или иная ответственность, я искал «веб-разработку для начинающих» и нашел наставника. Сначала мы обсуждали варианты реактивного кодирования, но затем наставник спросил, что меня интересует, и я сказал, что в целом интересуюсь разработкой программного обеспечения, а мысли о ржавчине/++ отложил в долгий ящик. Итак, я начал писать Rust для проекта Retina в Norcivilian Labs.

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

Сначала мы работали с Nix и Linux. Для того, чтобы начать участвовать в проекте, нам нужно было всё настроить. Я установил NixOS, настроил его и зарегистрировался в нашем проекте на GitLab. Мы сразу же столкнулись с ошибками и добавили сопоставление с образцом в Nix flake для запуска оболочки кроссплатформенной разработки.

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

Введение в gRPC: Основы, применение, плюсы и минусы. Часть I

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров13K

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

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

Учимся летать: симуляция эволюции на Rust. 1/5

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров9K



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


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


Предполагается, что вы немного знакомы с Rust, остальное я постараюсь объяснить.

Эта серия состоит из нескольких статей:


  1. Введение (что мы будем симулировать, как работает нейронная сеть и генетический алгоритм).
  2. Реализация нейронной сети.
  3. Реализация генетического алгоритма.
  4. Реализация глаз, мозга и самой симуляции (в двух частях: первая, вторая).




Интересно? Тогда поехали.

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

Книга рецептов Rust. 2/2

Уровень сложностиСредний
Время на прочтение41 мин
Количество просмотров3.9K



Hello world!


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


Читать дальше →
Всего голосов 18: ↑17 и ↓1+24
Комментарии0

Rust: за пределами синтаксиса. Обретение просветления в неожиданных местах

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров6.6K

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

Первая стабильная версия Rust вышла в 2015 году, и с тех пор, начиная с 2016 года, он ежегодно признается самым любимым языком в ежегодном опросе разработчиков на Stack Overflow (теперь, в 2023 году, это называется "Востребованный"). Почему же разработчики, попробовав Rust, не могут перестать его использовать? В мире разрекламированных преемников C/C++ Rust, похоже, выходит на первое место. Как получилось, что язык, который появился на основной сцене всего в прошлом десятилетии, стал таким популярным?

Читать далее
Всего голосов 17: ↑11 и ↓6+5
Комментарии31

Туториал по Tokio. 2/2

Уровень сложностиСредний
Время на прочтение38 мин
Количество просмотров2.9K



Hello world!


Представляю вашему вниманию вторую часть туториала по Tokio.



Tokio — это асинхронная среда выполнения (runtime) кода Rust. Она предоставляет строительные блоки, необходимые для разработки сетевых приложений любого размера.

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

Информация

В рейтинге
Не участвует
Откуда
Донецкая обл., Украина
Зарегистрирован
Активность