Pull to refresh
0
@Zara6502read⁠-⁠only

User

Send message

Сборка простого 3D-печатного ЧПУ-плоттера

Level of difficultyMedium
Reading time9 min
Views4.2K

В этой статье пошагово разберём процесс сборки компактного ЧПУ-плоттера с 3D-печатными деталями. Это устройство управляется шаговыми двигателями Nema 17 и мини-сервоприводом, перемещаясь по линейным рельсам, и способно автоматически рисовать по заданному G-Code. Мы рассмотрим список необходимых деталей, этапы сборки механики, подключение электроники и настройку программного обеспечения.

Читать далее

Spatial hashing для самых маленьких

Reading time5 min
Views42K


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

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

Экспериментальный ретробрайт: отбеливаем в двух десятках вариантов

Level of difficultyEasy
Reading time3 min
Views2.1K

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

Вкратце: моё мнение — отбеливайте в парах или растворе 40% перекиси водорода, лучше подогретой. И будет вам счастье.

Для эстетов: осторожно! Содержит кадры без евроремонта!

Читать далее

Почему заводить «Алису» в доме с детьми — плохая идея?

Level of difficultyEasy
Reading time6 min
Views89K

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

И вот к чему это привело...

Сканируем 35-мм киноплёнку дома (часть 2)

Level of difficultyMedium
Reading time30 min
Views4K

Рассказываю опыт разработки сканера 35-мм киноплёнки со звуковой дорожкой за 150$ в картинках наглядно.

Вторая часть цикла статей об истории разработки сканера с низким бюджетом.

Читать далее(часть 2)

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

Level of difficultyMedium
Reading time11 min
Views9.2K
Картинка Youtube-канал «Howseography»

Что вспоминается в первую очередь, когда думаешь о детских годах? Лично для меня — это переливающиеся 3D-открытки, которые раньше продавались почти в каждом киоске.

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

В детстве мы даже не задумывались о том, что их можно сделать самостоятельно. Казалось, что это что-то слишком сложное.

Но, как выяснилось, такие картинки вполне реально создать самому, и результат практически не отличается от заводского!
Читать дальше →

Подарю ноутбук 386SX

Level of difficultyEasy
Reading time3 min
Views5.4K

На блошином рынке на окраине Алматы я за 8 тысяч тенге (1500 рублей) купил 4 ретро ноутбука, сегодня расскажу об одном из них - NB 5620 от TOPPCs а в конце статьи о том как забрать его себе.

Читать далее

Ассемблерные вставки… в C#?

Reading time9 min
Views37K
Итак, эта история началась с совпадения трёх факторов. Я:

  1. в основном писал на C#;
  2. лишь примерно представлял, как он устроен и работает;
  3. заинтересовался ассемблером.

Эта, на первый взгляд, невинная смесь породила странную идею: а можно ли как-то совместить эти языки? Добавить в C# возможность делать ассемблерные вставки, примерно как в C++.

Если вам интересно, к каким последствиям это привело, — добро пожаловать под кат.


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

Spears & bits

Level of difficultyEasy
Reading time15 min
Views4.1K

В играх часто используется паттерн упаковки булевых значений в биты. Это удобно для оптимизации памяти и ускорения выполнения массовых проверок. Например, такие проверки могут включать нахождение игрока в тайле, определение доступности клеток на четырех- или шестигранной сетке, или другие пространственные проверки, которые необходимо выполнять быстро. Это не ракетостроение, но когда профайлер показал одну из таких функций в числе горячих, мне стало интересно, как именно она работает и можно ли её оптимизировать. Структура данных bitset — это способ эффективно представлять множество целых индексов, которое к тому же поддерживает различные операции над ним, например объединение, разность, пересечение.

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

Для представления данных мы можем использовать индекс юнита в тайле. В качестве типовой задачи проверять будем только юнитов, у которых здоровье превышает определённое значение. Это условие не взято с потолка. Например, некоторые юниты используют стратегии вроде "убей слабейшего" или "нападай стаей". Для таких стратегий поюнитный обход всех юнитов вокруг (особенно если это выполняют все юниты в группе) может стать крайне затратной по времени операцией.

Название статьи получилось как-то само собой: недалеко от моего дома есть хорошее кафе Chief&Bites, достаточно популярное у местных жителей, но пирожные там начинают делать после заказа, такой вот формат анти-кафе. Сами понимаете, прождать пока сделают свежайшее пирожное полчаса, а то и час - легко, там даже на чеке пишут время, когда начали делать именно твое пирожное. Заранее извиняюсь за возможные "велосипеды" в коде, но, возможно, эта тема покажется кому-то полезной.

Паковай давай...

Много алгоритмов сортировки на языке C++: от простого к сложному с примерами и пояснениями

Level of difficultyMedium
Reading time8 min
Views13K

Всем привет! Подтолкнуло написать меня эту статью мой непосредственный интерес к алгоритмам и решению задач на leetcode, каждый раз, используя стандартную сортировку из STL std::sort, я знал, что ее сложность O(n*log(n)), но как она реализована внутри не доходили руки разобраться, в добавок мне стало интересно, какие есть другие виды сортировок, кроме самых простых, с которыми каждый знакомится в начале своего пути.

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

Начнем с того, что разберемся, какие виды сортировок вообще есть и разобьем их на условные простые/продвинутые/для специальных случаев, а также разберемся, что использует std::sort у себя под капотом.

Читать далее

История жанра или Почему мы любим игры про зомби?

Level of difficultyEasy
Reading time16 min
Views2.9K

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

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

Читать далее

Обойдемся без VPN: связка из 2 прокси для хождения в Интернет

Level of difficultyMedium
Reading time17 min
Views95K

На Хабре есть уже десятки статей о том, как поднять свой VPN. Но, кроме VPN, существует еще и прокси. Для браузера его более, чем достаточно.

Практика показывает, что РКН на данный момент не ломает даже прозрачные HTTP прокси (МГТС, Москва). Надеяться на это, впрочем, не приходится, поэтому мы поднимем еще и HTTPS прокси с помощью Squid.

Данный прокси работает тупо по адресу и паре логин:пароль безо всяких PAC файлов и прочих костылей на стороне клиента (костылей на стороне сервера будет предостаточно). Позволяет гонять через себя весь трафик не интересуясь, что там уже заблокировано, а что еще нет. Кроме того, его хорошо понимают скрипты и программы Linux, потому что он совместим с переменными HTTP_PROXY и HTTPS_PROXY.

Читать далее

Алгоритм проверки на простоту за O (log N)

Reading time2 min
Views201K

Проверка на простоту


Чтобы определить, является ли данное число N простым, безусловно, достаточно написать простой цикл поиска делителей числа N:

bool prime(long long n){ 
	for(long long i=2;i<=sqrt(n);i++)
		if(n%i==0)
			return false;
	return true;
}


Данная функция проверки числа на простоту достаточно эффективна — асимптотика ее работы O (sqrt(N)). Однако, иногда в спортивном программировании нужно уметь проверять число на простоту быстрее.

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

В данной статье я рассмотрю другой способ выполнять единичные проверки на простоту — тест Ферма.
Читать дальше →

Золотая середина. Поиск медианного элемента потока входных чисел

Reading time5 min
Views12K


В этой статье мы рассмотрим следующую задачу: поиск и поддержание медианы среди целых чисел, которые последовательно попадают на обработку. В этом посте мы поставим задачу, разберём все необходимые вводные, предложим и оценим сложность решения.
Читать дальше →

Мой любимый алгоритм: нахождение медианы за линейное время

Reading time7 min
Views104K
image

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

Ищем простые числа до триллиона за тридцать минут

Reading time21 min
Views27K
image

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

Сегодня я хотел бы поделиться с вами различными вариантами реализации поиска простых чисел на языке C#, начиная с классических алгоритмов — решета Эратосфена, Сундарама и Аткина, и кончая различными оптимизациями (сегментация, факторизация). Особый упор я делал на простоту: самый быстрый из алгоритмов, который мне удалось получить, содержит 120 строк кода и ищет простые числа до триллиона меньше, чем за 30 минут, а до миллиарда — меньше, чем за секунду (это далеко от производительности лучших из существующих библиотек по поиску простых чисел, но эти библиотеки обычно содержат свыше 4000 строк кода).
В заключение мы применим самую быструю реализацию для поиска максимального расстояния между двумя соседними простыми числами до триллиона. Прежде чем заходить под кат, я предлагаю вам попытаться угадать ответ. Для сравнения, для простых чисел до 100 максимальное растояние равно 8 (между соседними простыми числами 89 и 97), а до тысячи — 20 (между 887 и 907).

Весь исходный код можно найти на гитхабе.
Читать дальше →

Быстрый консольный ввод на .NET

Reading time9 min
Views17K

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


Часто приходится слышать, что "шарпы медленные", особенно в контексте алгоритмических задач, например с timus.online и codeforces.com. И, увы, не только слышать, но и сталкиваться с реальными проблемами, связанными с особенностями платформы, получая Wrong Answer, Runtime Error, Memory Limit, Time Limit при корректном алгоритме.


Большинство этих проблем кроется в особенностях консольного ввода и вывода. Да и часто куда проще написать cin >> nили sc.nextInt(), чем int.Parse(Console.ReadLine()) или Console.ReadLine().Split().Select(int.Parse).ToArray(), из-за чего выбор падает на другой язык.


Далее я расскажу о распространённых проблемах с консольным вводом-выводом в .NET, и о том, как сделать ввод быстрым и удобным.

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

Небольшой обзор SIMD в .NET/C#

Reading time11 min
Views26K

Вашему вниманию предлагается небольшой обзор возможностей векторизации алгоритмов в .NET Framework и .NETCORE. Цель статьи познакомить с этими приёмами тех, кто их вообще не знал и показать, что .NET не сильно отстаёт от "настоящих, компилируемых" языков для нативной
разработки.

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

Как я создавал бесплатный сервис оптимизации изображений FlashImg.ru

Level of difficultyEasy
Reading time3 min
Views2.6K

Всем привет. В этом материале я расскажу как создавал беспслатный сервис оптимизации изображений FlashImg.ru

Читать далее

Записываем PNG без мам, пап и внешних библиотек

Reading time9 min
Views17K

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

Формат изображения PNG известен с 1996 года, а на Хабре опубликовано несколько статей о декодировании этого формата. И ни одной — о кодировании. Я расскажу, как сохранить PNG своими руками на случай, если вам тоже придется это делать. Например, в академических целях.

Под катом вас ждет подробный разбор каждого байта на множестве иллюстраций.
Читать дальше →

Information

Rating
Does not participate
Location
Россия
Registered
Activity

Specialization

Specialist
Middle