Pull to refresh
6
0.4
tnvd @tbl

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

Как при помощи Rust в 150 раз ускорить код на Python

Level of difficulty Easy
Reading time 6 min
Views 22K
SkillFactory corporate blog Python *Programming *Rust *
Translation

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


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


Обзор


Проблему решим в 6 шагов:


  1. Решим вопрос о том, почему функция медленная.
  2. Подготовим проект.
  3. Перепишем функцию в Rust.
  4. Скомпилируем код на Rust и разместим его в пакете Python.
  5. Импортируем пакет Python в проект.
  6. Выполним бенчмарк чистого Python и функции на Rust.

Пакет maturin скомпилирует Rust-код и преобразует его в готовый к работе пакет Python.


1. Решим вопрос о том, почему функция медленная


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

Читать дальше →
Total votes 42: ↑27 and ↓15 +12
Comments 42

Шахматы на C++

Reading time 68 min
Views 33K
C++ *Algorithms *Logic games
Tutorial

Не так давно я захотел написать свой шахматный движок. На удивление в Интернете нашлось не так много хороших статей на эту тему. Были статьи с довольно слабыми программами, многие из которых даже умудрялись пропускать некоторые важные правила. А были статьи с хорошими программами (некоторые из них были даже чуть лучше чем получилось у меня в итоге), но там авторы рассказывали лишь основные идеи, пропуская подробности, из-за чего написать что-то свое по таким статьям было проблематично. Поэтому после написания своей программы, я решил написать статью, дабы облегчить жизнь интересующимся в данной теме. Я не претендую на лучшую шахматную программу или на чистейший код, но эта статья будет хорошим и легким началом для тех, кто хочет написать что-то свое.

Читать далее
Total votes 190: ↑189 and ↓1 +188
Comments 56

Как написать игру на Monogame, не привлекая внимания санитаров. Часть 1, обмазываемся абстракциями

Reading time 16 min
Views 4.8K
.NET *Game development *C# *
Tutorial

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

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

«Ленивый сахар» PostgreSQL

Reading time 7 min
Views 21K
Тензор corporate blog High performance *PostgreSQL *SQL *Database Administration *

SQL - декларативный язык - то есть вы описываете "что" хотите получить, а СУБД сама решает, "как" именно она будет это делать. Некоторые из них при этом позволяют им "подсказывать", как именно лучше выполнять запрос, но PostgreSQL - нет.

Тем не менее, "синтаксический сахар" некоторых языковых конструкций позволяет не только писать меньше кода (учите матчасть!), но и добиться, что ваша база будет делать часть вычислений "лениво", только при фактической необходимости.

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

PostgreSQL Antipatterns: сражаемся с ордами «мертвецов»

Reading time 3 min
Views 13K
Тензор corporate blog PostgreSQL *Programming *SQL *Database Administration *
Особенности работы внутренних механизмов PostgreSQL позволяют ему быть очень быстрым в одних ситуация и «не очень» в других. Сегодня остановимся на классическом примере конфликта между тем, как работает СУБД и тем, что делает с ней разработчик — UPDATE vs принципы MVCC.

Кратко сюжет из отличной статьи:
Когда строка изменяется командой UPDATE, фактически выполняются две операции: DELETE и INSERT. В текущей версии строки устанавливается xmax, равный номеру транзакции, выполнившей UPDATE. Затем создается новая версия той же строки; значение xmin у нее совпадает с значением xmax предыдущей версии.
Через какое-то время после завершения этой транзакции старая или новая версии, в зависимости от COMMIT/ROOLBACK, будут признаны «мертвыми» (dead tuples) при проходе VACUUM по таблице и зачищены.



Но это произойдет далеко не сразу, а вот проблемы с «мертвецами» можно нажить очень быстро — при многократном или массовом обновлении записей в большой таблице, а чуть позже столкнуться с ситуацией, что и VACUUM не сможет помочь.
Читать дальше →
Total votes 32: ↑32 and ↓0 +32
Comments 15

Кратко и просто про геологию от геолога. Строение Земли

Reading time 8 min
Views 30K
Timeweb Cloud corporate blog Popular science
Здравствуйте.

Расскажу-ка я про базовые факты и следствия из них — на основе которых строится вся геология. Ибо нередко у непосвящённых возникает ощущение, что учёные взяли и выдумали все свои теории от скуки и для поддержки чувства собственного величия.


На фото 1983 года Великий Атуин, слоны и Мир на фоне Вселенной — про них ничего не будет

Нижесказанное будет относиться к геологии, но может быть применено к любой области знаний. Чтоб воспринимать дальнейшее нужно условиться (хотя бы сделать вид), что арифметика, евклидова геометрия, физика/химия за 7-9 класс школы нами принимаются как реальность, не требующая доказательств. И, да! – Землю будем считать шарообразной – иначе не интересно. Логика тоже будет использоваться, даже если это оскорбит её противников.

Начнём с базы: Карл Маркс Гегель гравитация.
Читать дальше →
Total votes 130: ↑126 and ↓4 +122
Comments 41

Линейная алгебра кватернионов

Reading time 15 min
Views 6.5K
Programming *Mathematics *Matlab *Physics
Разбирал для себя кватернионный аппарат с точки зрения линейной алгебры с оглядкой на возможность его применения в теориях относительности. Над второй частью ещё работаю, а законспектированный инструментарий решил опубликовать отдельно.

Предисловие


При изучении кватернионов я столкнулся с некоторой нехваткой форм и определений, предлагаемых источниками, в том числе первоисточниками У.Р.Гамильтона, А.У.Конуэя и Ф.Кляйна. В комментариях любезно предложили хорошую книгу П.Лоунесто «Алгебры Клиффорда и спиноры», однако и там эти сущности не выделены. Итого, получается, что, кроме уже известных кватеринонных концепций, в статье рассматриваются следующие аспекты, освещение которых мне не удалось пока найти:
1. Выделена скалярная часть кватернионного произведения, как самостоятельная операция.
2. Кватернионное произведение представлено суммой трёх самостоятельных оперций — билинейных отображений.
3. Описан частный случай вещественно-мнимого поворота для сжатия пространства по заданной оси.
4. Показано, что, собственно, любой кватернион является таким поворотом вещественного числа относительно произвольной оси мнимого трёхмерного пространства.
Буду весьма признателен за ссылки на похожие изыскания в комментариях.

Читать дальше →
Total votes 20: ↑18 and ↓2 +16
Comments 15

Пошаговая стратегия или установка Entware и DNSCrypt на роутеры Zyxel Keenetic

Reading time 4 min
Views 13K
System administration *DNS *Old hardware Network hardware
Sandbox

Обобщение процесса установки Entware и DNSCrypt на Zyxel Keenetic DSL на другие устройства из семейства Zyxel Keenetic.

Читать далее
Total votes 1: ↑1 and ↓0 +1
Comments 2

Коронавирус Novel nCOV/2019-nCoV/NCP/COVID19: Прогнозы, Статистика, Новости[Часть 1, ред.03.02

Reading time 43 min
Views 176K
Biotechnologies Health
Тут только первая часть статьи с новыми новостями. (Изменение 8.03.2021)
Создание собственного сайта провалилось. Большинству не интересен коронавирус.
Из принципа буду продолжать менять только новости и таблицу.
Прошло больше года с написания этой статьи. Итог:: Мои надежды не оправдались.
Полная версия без обновлений новостей тут
Не обновляемая английская версия: тут

Независимые от меня обстоятельства повлияли на текущую ситуацию, мои извинения

Перейти сразу к новостям

Многие люди не выполняют рекомендаций.Все пошло по «тяжелому сценарию». У систем здравоохранения есть куда увеличивать количество коек, врачей:
Качество: Высокое
1уровень: Инфекционные койки. 10-20% ## Инфекционисты

Качество: Среднее
2уровень: Перепрофилирование больниц 30-60% ## Любые врачи. Возвращают врачей пенсионного возраста.

Качество: Удовлетворительное
3 уровень Частные клиники и военные госпитали 10-20% ## все врачи даже без опыта, снятие из институтов. Военврачи.

Качество: Низкое
4 уровень: Временные больницы 10-20% (Обычно отправлять больных в более легкой форме.Более тяжелые будут в больницах) ## Быстро обученный персонал. (Будут давать более простые задачи, разгрузка врачей от пары задач). Альт. вариант армия для выполнения части задач.

Китай было:2 из 4 /4 из 4 (временные больницы)Италия: Врачи: по 3 из 4.
Качество: Абсолютное (Не бойтесь 5lvl. придумал я, до этого не дойдет)Сарказм: 5 ур.: Больницы не понадобятся.Подробно Dr. Morty.
Статистикshorturl.at/pEY09

Читать дальше →
Total votes 80: ↑64 and ↓16 +48
Comments 101

Веб-два-нольные ярлыки для Java

Reading time 5 min
Views 7.5K
Java *Algorithms *
Sandbox
Когда мне понадобилось реализовать ярлыки для Java «как в веб-два-ноль», гугление не помогло найти ни одной библиотеки, содержащей в себе подобный тип коллекции.

Решил сделать сам.

Итак, нам надо хранить объекты в коллекции данного типа (назовем его, скажем, LabelsMultiMap). Как объекты, так и ярлыки могут быть произвольного типа. Количество ярлыков сверху не ограничено, равно как и количество объектов. Одним и тем же набором ярлыков могут быть описаны более 1 объекта. У одного объекта один ярлык может встретиться только 1 раз.

Пример валидных ярлыков:
Ярлыки Объекты
green, wooden, alive tree
green, wooden, lifeless bench
green, alive, croak frog

Коллекция должна позволять:

  1. put() — помещать в неё объекты со списком прикрепленных меток
  2. getValues() — возвращать объекты, содержащиеся в коллекции
  3. findValues() — осуществлять поиск объектов, ярлыки которых содержат запрашиваемый набор ярлыков
  4. findValuesOnlyIn() — осуществлять поиск только тех объектов, все ярлыки которых входят в запрашиваемый набор ярлыков

Читать дальше →
Total votes 10: ↑9 and ↓1 +8
Comments 7

Сети для самых маленьких. Часть ой, всё

Reading time 4 min
Views 121K
System administration *Network technologies *
Дорогие мои друзья, отважные критики, тихие читатели и тайные почитатели, СДСМ заканчивается.



Я не могу похвастаться тем, что за 7 лет я затронул все темы сетевой сферы или тем, что хотя бы одну из них раскрыл полностью. Но это и не было целью. А целью этой серии статей было ввести юного студента за руку в этот мир и проводить его шаг за шагом по основной галерее, давая общее представление, и уберечь от болезненных скитаний по тёмным уголкам сознания Олифера и Олифера в мучительных попытках найти ответ на вопрос, как всё это применить в жизни.
СДСМ планировался коротким практическим курсом «как научиться в сети за месяц», а вылился в 16 (на самом деле 19) длинных выпусков, которые мы уже даже переименовали в «Сети Для Самых Суровых». Общее количество символов перевалило за 1 000 000.
Читать дальше →
Total votes 55: ↑55 and ↓0 +55
Comments 37

Прокрастинация как инструмент перемещения во времени

Reading time 4 min
Views 20K
Московский физико-технический институт (МФТИ) corporate blog Popular science Physics Lifehacks for geeks Science fiction
Recovery mode
Все люди делятся на нормальных и прокрастинаторов, и последних абсолютное большинство. Мы разобрались и выявили два типа прокрастинации: неустранимую, которая приводит к неразрешимым жизненным проблемам и болезненным психологическим эффектам, и устранимую, при которой человек даже после наступления критического момента времени всё равно выполняет необходимую работу в срок.

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

Статью мы сопроводили строгими математическими расчетами, а также данными эксперимента, который был проведён на шестерых добровольцах. С этой работой мы выступали на крупнейшей Антинаучной конференции, которая в этом году пройдет 4 мая. Так что можете нам доверять (ну или нет, ведь сегодня 1 апреля).


Читать дальше →
Total votes 21: ↑21 and ↓0 +21
Comments 4

Настройка BGP для обхода блокировок, или «Как я перестал бояться и полюбил РКН»

Reading time 11 min
Views 132K
Network technologies *
Tutorial
Recovery mode

Ну ладно, про «полюбил» — это преувеличение. Скорее «смог сосуществовать с».


Как вы все знаете, с 16 апреля 2018 года Роскомнадзор крайне широкими мазками блокирует доступ к ресурсам в сети, добавляя в "Единый реестр доменных имен, указателей страниц сайтов в сети «Интернет» и сетевых адресов, позволяющих идентифицировать сайты в сети «Интернет», содержащие информацию, распространение которой в Российской Федерации запрещено" (по тексту — просто реестр) по /10 иногда. В результате граждане Российской Федерации и бизнес страдают, потеряв доступ к необходимым им совершенно легальным ресурсам.


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

Читать дальше →
Total votes 124: ↑120 and ↓4 +116
Comments 301

Information

Rating
1,585-th
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity