Pull to refresh
3
0.2
Send message

Алгоритм Прима

Level of difficultyEasy
Reading time4 min
Views6.3K

В данной статье я бы хотел объяснить работу алгоритма Прима. Алгоритм используется для нахождения минимального остовного дерева. Сам алгоритм очень прост, в статье хотел бы поделиться своей реализации на языке Go.

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

Кодирование с кодеком HEVC простым языком — гайд на FFmpeg. Высокое качество, но низкий вес

Level of difficultyEasy
Reading time11 min
Views18K

Казалось бы, довольно простой вопрос: «Чем сжать видео?». На ум сразу приходят Handbrake, Movavi Converter или ещё что-нибудь пострашнее. Однако когда речь заходит о более гиковском подходе с упором на максимальное качество и экономию места, такие программы сложно назвать инструментами. Равно как и для обратной ситуации, когда картинку нужно сильно сжать и сохранить в целостности большую часть полезной информации. Все эти программы только лишь предоставляют набор наиболее общих конфигов для обычной съёмки и 2D.

В этой статье мы изучим, как при помощи самого большого сборника свободных библиотек FFmpeg научиться кодировать видео самому именно под ваши задачи.
Читать дальше →
Total votes 88: ↑87 and ↓1+115
Comments128

Простая нейронная сеть на C++

Level of difficultyEasy
Reading time5 min
Views18K

Всем привет!

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

Читать далее
Total votes 27: ↑23 and ↓4+27
Comments34

Реализация подписчиков в c++ — пляшем от печки

Level of difficultyEasy
Reading time6 min
Views3.6K

За время долгой работы в IT непосредственно с кодом, подмечаю одну особенность, что писать приходится всё меньше (в последнее время практически не писать), а ревьювить всё больше. И всё чаще видны нагромождения тонн кода, которые по факту не нужны, не вносят никакой дополнительной пользы. Но создают раз за разом головную боль для следующего читающего этот код программиста, который вынужден что-то поправить или дописать в этом коде. По итогу, программист махает рукой на эту чудную "архитектуру"... и пишет ещё один wrapper / adapter над ним. И, таким образом, передаёт пламенный привет последующим коллегам в будущее ;).

Попробуем взять и переписать с минимумом кода одну из очень часто встречающихся задач - рассылку уведомлений объектам в коде при возникновении какого-то события. На первый взгляд кажется, что в c++ уже есть все инструменты, чтобы написать этот код в несколько строк: функтор std::function<...> - чтобы сохранить отложенный вызов, контейнер std::vector<std::function...> - чтобы сохранить цепочку отложенных вызовов. По которым нужно просто пробежаться при возникновении события и вызвать сохранённые функторы...

Читать далее
Total votes 15: ↑14 and ↓1+20
Comments27

Реализация подписчиков в c++ — пляшем от печки чуть дальше

Level of difficultyMedium
Reading time8 min
Views2.6K

В прошлой статье, отбросив всё, что нам было известно из мира «кровавого энтерпрайз IT», и опустошив чашу, мы «написали на коленке» простейший оповещатель (notifier). Объект, вызывающий по цепочке заранее зарегистрировавшихся клиентов (подписчиков) при наступлении какого-то события.

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

Читать далее
Total votes 8: ↑8 and ↓0+14
Comments2

Индекс твоего города — Большое обновление

Level of difficultyEasy
Reading time2 min
Views9K

При оценке индекса доступности (школы, медицина, спорт и т. д.) теперь используются изохроны по пешеходным и автомобильным маршрутам. Это пожалуй самое большое изменении с момента запуска, но не единственное на сегодня для city-indexes.online.

Читать далее
Total votes 4: ↑4 and ↓0+8
Comments27

Строки в игровых движках

Level of difficultyEasy
Reading time15 min
Views11K

Исторически потребность в строках и их использование в игровых движках было довольно ограниченое, кроме, разве что, локализации ресурсов, где была необходимость полноценной поддержки чего-то отличного от набора ASCII символов. Но, при желании, даже эти ресуры разработчики умудрялись упаковать в доступные 200 элементов набора ASCII, а учитывая что игра обычно запускается только в одной локали, то никаких потребностей в конвертации не было. Но есть тут и отличия от стандарта, стараниями Sony практически с начала нулевых, еще до 20 стандарта разработчикам игр были доступны несколько моделей символьных литералов. Стандартый ASCII на PS1 и частичная поддержка Unicode (ISO 10646), с выпуском сдк для второй плойки добавили поддержку UTF-16 и UTF-32, а после выхода PS3 добавили поддержку UTF-8.

strcpy(destination, source);
Total votes 20: ↑20 and ↓0+24
Comments11

Демонстрируют ли гравитационные волны корпускулярно-волновой дуализм?

Level of difficultyEasy
Reading time10 min
Views10K

Мир навсегда изменился в феврале 2016 года, когда коллаборация LIGO сделала революционное заявление, навсегда изменившее наше представление о Вселенной. На расстоянии более миллиарда световых лет от нас две массивные чёрные дыры, 36 и 29 солнечных масс, сблизились друг с другом по спирали и слились. В результате слияния образовалась единая чёрная дыра массой 62 солнечных массы, а оставшиеся 3 солнечные массы были преобразованы в чистую энергию по формуле Эйнштейна E = mc², распространяющуюся по Вселенной в виде гравитационных волн. Наконец-то никто не мог сомневаться в физической реальности гравитационных волн, включая факты о том:

как они возникают,

что они однозначно переносят энергию по всей Вселенной,

и что они распространяются с теоретически предсказанной скоростью c — скоростью света в вакууме.

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

Реализуем эффективный тупль с помощью C++26

Level of difficultyMedium
Reading time7 min
Views9.5K

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

Многие пытливые умы на протяжении десятилетий задавались вопросом: как же реализован std::tuple, как мне реализовать свой тупль (кортеж)? [1]

И немало было дано ответов на такие вопросы и написано статей ([2]). Однако я берусь утверждать, что все они имеют один фатальный недостаток! Конкретнее, они все рассматривают в основном лишь один (и при этом неэффективный) способ реализации: с помощью множественного наследования или рекурсивного инстанцирования, имеющий в свой очередь множество своих недостатков, главный из которых — неэффективное использование памяти.

В то время как современный C++ позволяет реализовать тупль гораздо проще (без обилия шаблоноты) и эффективнее.

Войти в мир эффективных реализаций туплей
Total votes 33: ↑30 and ↓3+37
Comments69

Теоретическая и реальная производительность Intel AMX

Level of difficultyHard
Reading time11 min
Views4.6K

AMX (Advanced Matrix Extension) - это модуль аппаратного ускорения умножения матриц, который появился в серверных процессорах Intel Xeon Scalable, начиная с 4 поколения (архитектура Sapphire Rapids). 

В начале этого года ко мне в руки наконец попал сервер, с данным типом процессора.

Конкретно модель Xeon(R) Gold 5412U - это 24 ядерный процессор с тактовой частотой в 2.1 GHz. При этом 8 приоритетных ядер могут разгонятся до 2.3 GHz, а 1 ядро до 3.9 GHz в Turbo Boost). Кроме того данный процессор поддерживает 8 канальную DDR-5 4400 MT/s. 

Мне как человеку, достаточно долгое время посвятившему оптимизации алгоритмов компьютерного зрения и запуска нейронный сетей на CPU (библиотеки Simd и Synet), было интересно: на сколько AMX позволяет реально ускорить вычисления и как извлечь из него максимальную производительность.

Далее я постараюсь максимально подробно ответить на данные вопросы. Прежде все я буду касаться вопросов однопоточной производительности (многопоточную рассмотрю позже). 

Далее много кода на С++...
Total votes 28: ↑28 and ↓0+30
Comments12

Простая трубка Гейслера своими руками

Level of difficultyMedium
Reading time7 min
Views16K

Историческая разрядная трубка – «трубка Гейслера» (1857) – воистину прабабушка множества газоразрядных и электровакуумных приборов (ЭВП) и родилась как эксперимент и развлечение с демонстрацией тлеющего разряда. Трубка Гейслера привела, ни много ни мало, к открытию электрона. Прямые её потомки – неоновая реклама и люминесцентное освещение, лишь совсем недавно сдались под натиском светодиодов. Простые разрядные трубки долгое время служили индикатором разрежения в вакуумных системах. Такие приборы показывали высокое напряжение, использовались в научных исследованиях и для индикации резонанса в контурах крупных радиопередатчиков. Разрядные трубки Гейслера специфической гантелеобразной формы используют для получения линий спектра веществ.
Читать дальше →
Total votes 150: ↑150 and ↓0+150
Comments97

Как я варю бытовую химию и продаю на 1,5 млн в месяц

Level of difficultyEasy
Reading time12 min
Views137K

Салам, брат. Меня зовут Филипп, я ведущий утреннего шоу на Ретро FM Кыргызстан, а ещё я Варщик. Я начинал с варки бытовой химии на съёмной квартире в центре Бишкека. Там я разливал жидкое мыло в тару, которую покупал на производстве мёда. Сегодня моё производство выпускает 5 000 единиц продукции в месяц.

В 2008 я начал бизнес в России, тогда у меня был партнёр-итальянец, своя торговая марка и я даже ходил на интервью-разговор к Тинькову. С 2012 года живу и занимаюсь бизнесом в Кыргызстане.

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

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

Читать далее
Total votes 170: ↑136 and ↓34+134
Comments197

Математики наконец-то решили проблему «обратного разбрызгивателя» Фейнмана

Reading time5 min
Views38K

У типичного разбрызгивателя для газонов есть несколько сопел, расположенных под углом на вращающемся колесе; при подаче воды они выпускают струи, которые заставляют колесо вращаться. Но что произойдёт, если вместо этого вода будет всасываться в разбрызгиватель? В какую сторону повернётся колесо, и повернётся ли оно вообще? В этом суть задачи «обратного разбрызгивателя», над которой физики, такие как Ричард Фейнман и другие, бились с 1940-х годов. Теперь прикладные математики из Нью-Йоркского университета считают, что им удалось разгадать эту загадку, согласно недавней статье, опубликованной в журнале Physical Review Letters, и ответ бросает вызов общепринятому мнению по этому вопросу.

Читать далее
Total votes 29: ↑24 and ↓5+28
Comments17

Зачем делать новый язык программирования?

Level of difficultyEasy
Reading time8 min
Views9K

Когда в публичном пространстве появляется информация о новом языке программирования, поднимается волна неприятия. Негатива столько, что хоть святых выноси!

Причин у этого явления много и, скорее всего, сделать с ним ничего нельзя, такова уж человеческая природа.

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

Попробуем разобрать мотивы, подвигающие людей на такую работу.

Читать далее
Total votes 18: ↑11 and ↓7+7
Comments50

Быстрый парсинг 8-битных целых чисел

Level of difficultyEasy
Reading time6 min
Views11K

Допустим, вам нужно быстро распарсить 8-битные целые числа (0, 1, 2, …, 254, 255) из строки ASCII/UTF-8. Задача взята из проекта simdzone под руководством Йероена Коеккоека (NLnet Labs). Дана строка и её длина: например, ’22’ и длина 2. Наивное решение на C может выглядеть так:

Читать далее
Total votes 31: ↑31 and ↓0+31
Comments21

ИИ самоучка: модель реконструкции голограмм с самоконтролируемым обучением

Reading time11 min
Views2.4K


Понимание чего-либо является результатом знаний, а знание — результатом обучения. Этот принцип применим не только по отношению к людям, но и к искусственному интеллекту. Разница в том, что ИИ нуждается в определенной обучающей базе, состоящей из конкретных примеров, которые могут служить основой для понимания того, что ИИ должен делать. Человек же может экстраполировать, интерполировать, додумывать, строить логические цепочки — все это позволяет нам понять что-то, примеров чего мы ранее не видели. Особенно ярко данное отличие проявляется в случаях, когда ИИ задействован в вычислительной визуализации и микроскопии. В этих случаях эффективность ИИ напрямую зависит от контролируемого обучения, требующего колоссального объема разнообразных и помеченных обучающих данных. Собрать и подготовить эти данные для обучения — трудоемкий, дорогостоящий и долгий процесс. Было бы здорово, если бы ИИ обучался без них. Ученые из Калифорнийского университета в Лос-Анджелесе (США) разработали модель ИИ с функцией самоконтроля, которая может обучаться без необходимости в экспериментальных данных, используя исключительно законы физики. Как именно работает данная модель, и насколько она эффективна? Ответы на эти вопросы мы найдем в докладе ученых.
Читать дальше →
Total votes 17: ↑17 and ↓0+17
Comments0

Искусственные и биологические нейронные сети

Level of difficultyMedium
Reading time20 min
Views10K

Это можно сравнить с поиском Священного грааля, поиск алгоритма, по которому работают биологические нейронные сети. Конечно многие скажут, что никакого грааля не существует, это всё легенды, и в искусственных нейронных сетях уже всё реализовано, осталось дождаться развития этой технологии, вычислительных ресурсов и... и всё — настоящий искусственный интеллект будет создан. А, разбираться в сложном и запутанном органе для этих целей нет необходимости. Но, надеюсь есть добрая доля искателей приключений, которым будет интересны некоторые рассуждения где стоит искать этот “Священный грааль”. В статье мы проанализируем и сравним работу искусственных нейронных сетей с гипотезами о том, как работают биологические нейронные сети, и конечно, сопроводим это практическими опытами, разберем новую искусственную нейронную сеть, которая по своему принципу работы ближе к биологическому аналогу.

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

Information

Rating
2,374-th
Registered
Activity