Search
Write a publication
Pull to refresh
4
0

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

Send message

Математическая продлёнка. Математика кривого пропеллера

Level of difficultyEasy
Reading time3 min
Views16K

Вы, наверняка, знаете отчего "гнётся и рвётся" пропеллер на цифровых фото и видео. А какую именно форму принимают лопасти винта? Как зависит их видимая форма от скорости вращения? И причём здесь гиперболы?

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

Читать далее

Интерактивные книги 2: на этот раз про геймдизайн и алгоритмы

Level of difficultyMedium
Reading time2 min
Views11K
Хабр силен комментариями. Поэтому, когда я писал топик "Мечтали про интерактивные книги? Я знаю человека, который делает их прямо сейчас", то надеялся, что читатели помогут найти аналогичные примеры. Результат превзошел ожидания.


Итак, знакомьтесь — Амит Патель (Amit Patel) и его интерактивные статьи на стыке математики, алгоритмов и программирования. Небольшой дисклаймер: поскольку я не могу встроить интерактивные иллюстрации на Хабр, то буду использовать анимированные gif. Некоторые из них могут быть тяжелые.
Читать дальше →

Вычислительная сложность некоторых игр и головоломок (часть 1)

Reading time11 min
Views8.6K

Есть несколько причин смотреть на игры как на нечто большее, чем просто на развлечения. Как станет яснее по ходу дела, многие игры основаны на сложных вычислительных задачах, хотя зачастую и с более низким «входным барьером», поскольку они редко требуют наличия формального образования.

Дальше-больше..

Используем модель нейросети на C++

Level of difficultyEasy
Reading time4 min
Views19K

Большинство туториалов по созданию и использованию моделей нейросетей написаны на Python. Однако для какого-нибудь проекта рано или поздно может понадобится использовать более быстрый и надежный язык для этих задач, например, C++. Эта статья о том, как на C++ можно использовать модель нейросети на примере модели YOLOv8 для детектирования лиц и библиотеки PyTorch.

Читать далее

Современный CMake: 10 советов по улучшению скриптов сборки

Reading time8 min
Views87K

CMake — это система сборки для C/C++, которая с каждым годом становится всё популярнее. Он практически стал решением по умолчанию для новых проектов. Однако, множество примеров выполнения какой-либо задачи на CMake содержат архаичные, ненадёжные, раздутые действия. Мы выясним, как писать скрипты сборки на CMake лаконичнее.

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

Работаем с Git: трудовые будни

Level of difficultyMedium
Reading time14 min
Views52K

Прошлая статья «Работаем с Git: первые шаги в GitHub» была посвящена установке, настройке Git и классическим операциям из набора для новичков GitHub. А теперь перейдём к практике и рассмотрим «горячие» сценарии, которые делают трудовые будни куда веселее. Или не очень.

Читать далее

«Чистый» код, ужасная производительность

Reading time16 min
Views67K
Один из самых часто повторяемых советов программистам, особенно начинающим — это рекомендация писать «чистый» код. Она сопровождается длинным списком правил, сообщающих, что нужно делать, чтобы код был «чистым».

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

Если посмотреть на список правил «чистого» кода и вытащить из него правила, которые действительно влияют на структуру кода, то мы получим следующее:

  • Отдавайте предпочтение полиморфизму, а не «if/else» и «switch»
  • Код не должен знать о внутреннем устройстве объектов, с которыми он работает
  • Функции должны быть маленькими
  • Каждая функция должна выполнять одну задачу
  • Принцип «DRY» — Don’t Repeat Yourself («не повторяйся»)

Эти правила достаточно чётко формулируют то, как должен создаваться конкретный фрагмент кода, чтобы быть «чистым». Но я задам такой вопрос: если мы создадим фрагмент кода, соответствующий этим правилам, какова будет его производительность?
Читать дальше →

RVO и NRVO в C++17

Reading time8 min
Views32K

Предположим, что в программе на C++ вы возвращаете из функции локальную переменную. Что происходит при вызове оператора return: копирование, перемещение или ни то, ни другое? От этого зависит длительность вызова функции и эффективность наших программ. Я постарался разобраться с этим вопросом и дам рекомендации по написанию функций так, чтобы повысить шансы на применение этой оптимизации компиляторами. Ну, а сокращения в названии статьи — это Return Value Optimization (RVO) и Named Return Value Optimization (NRVO).

Читать далее

Как самостоятельно прокачивать английский

Level of difficultyMedium
Reading time8 min
Views39K

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

Читать далее

Почему десктопные приложения работают на веб-платформе?

Level of difficultyMedium
Reading time8 min
Views36K

Где мы свернули не туда? Как получилось, что современный десктопный GUI по умолчанию использует платформу HTML/CSS/JavaScript, которая изначально не предназначена для нативной работы на десктопе? Она создана конкретно для браузера и веба. Зачем из нативного софта делать веб-страницы в браузерной оболочке?

Джефф Этвуд (автор Stack Overflow) предсказал этот феномен ещё в 2007 году. Он тогда сформулировал так называемый закон Этвуда:

Любое приложение, которое можно написать на JavaScript, будет в итоге написано на JavaScript.

Так и вышло.
Читать дальше →

C++, ping и traceroute

Level of difficultyEasy
Reading time4 min
Views13K

Изучая сетевое программирование и имея в портфолио несколько проектиков на C++, связанных с сетевым программированием, я решил написать что-нубудь, что будет иметь реальное практическое применение.

Первое, что мне пришло в голову - утилита ping.

Читать далее

Где решать задачи по программированию, чтобы пройти путь from zero to hero

Level of difficultyEasy
Reading time4 min
Views143K

Если вам о чём-то говорят фамилии Зив, Хомченко и Рымкевич, иди сюда, дай обниму, бедолага-олимпиадник, то вы наверняка знаете, как важно прорешивать задачи для полноценного, осознанного и глубокого понимания изученного материала. Когда нет или совсем мало реальной практики, задачи дают возможность покрыть практикой все теоретические знания, погрузиться в неожиданные выводы, сложности, баги, препятствия. Более того, даже если практики достаточно, задачи помогают относительно быстро, комплексно и глубоко проработать типичные и нетипичные ситуации, возникающие в разработке (любой другой науке). Это всегда безопасный (никто не взрывает лабораторию и не роняет прод), доступный и удобный способ подробно разобраться в предмете. Определённо, программирования это касается в первую очередь.

Читать далее

Инструменты OSINT для самых маленьких и не опытных

Level of difficultyEasy
Reading time3 min
Views48K

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

Для тех кто не знает что это такое цитирую википедию

Разве́дка по откры́тым исто́чникам (англ. Open source intelligence, OSINT) — разведывательная дисциплина, включающая в себя поиск, выбор и сбор разведывательной информации из общедоступных источников, а также её анализ. В разведывательном сообществе термин «открытый источник разведывательных данных» (англ. open information source), который указывает на общедоступность источника (в отличие от секретных источников и источников с ограниченным использованием), но он не связан с понятиями «просто источник информации» (англ. open source information; OSIF), означающий любую находящуюся в пространстве СМИ информаци. Это понятие не тождественно «публичной разведке» (англ. public intelligence). Также его не стоит путать с понятием «открытое программное обеспечение» (англ. open-source software).

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

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

Читать далее

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

Level of difficultyEasy
Reading time19 min
Views26K

И так однажды, появилась у меня книга по криптографии с названием "Криптография с секретным ключом" от Фрэнка Рубина. Я совру, если скажу что эта книга меня заинтересовала хорошими отзывами или автором, где таковой является магистром математики и доктором информатики, занимающимся криптографией больше 50 лет (по крайней мере так пишется на обложке книги). Вовсе нет, я просто её купил, чтобы когда-нибудь прочитать. Даже если бы у этой книги были только отвратительные отзывы и/или её бы написал человек, находящийся в кустарных условиях и понимающий только что такое шифр Цезаря, я бы скорее всего её точно также бы купил. Но факт того, кем является автор и то, что он изучает криптографию более 50 лет, мы держим в голове всё последующее время повествования.

Читать далее

К гипотезе Коллатца через эзолэнг Джона Конвея

Level of difficultyEasy
Reading time5 min
Views3.1K

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

Одним из интересных (на мой субъективный взгляд) эзолэнгов является FRACTRAN, концепция которого была предложена Джоном Конвеем (известным в первую очередь конечно же благодаря игре «Жизнь»).

В этой статье я расскажу про клёвую математику, лежащую в основе этого эзотерического языка программирования, разберу несколько простых программ на нём, и, наконец, покажу связь FRACTRAN'а с гипотезой Коллатца. Статья во многом является вольным пересказом соответствующей главы книги Strange Code: Esoteric Languages That Make Programming Fun Again (которую я бы рекомендовал всем, кто хочет взглянуть на программирование под другим углом).

Читать далее

Южная Корея, магистратура (UNIST) – «И ты один просто едешь?» – первые 7 месяцев

Level of difficultyEasy
Reading time18 min
Views7.9K

Всем доброго утра, доброго дня, доброго вечера и особенно доброй ночи!

“И ты один просто едешь?”, - такой вопрос я получил почти 7 месяцев назад, когда сказал подруге, что уезжаю завтра в Корею, а точнее в корейскую магистратура Artificial Intelligence Graduate School в университет UNIST (Ulsan National Institute of Science and Technology). Если быть совсем точным, то в лабораторию LAIT (Lab. of Advanced Imaging Tech., PI - Jaejun Yoo). *На момент написания (20 марта 2023 года) открыт прием заявок для иностранных студентов (до 28 марта 12:00  по Москве - https://admg-intl.unist.ac.kr/admissions/guidelines/)*

Хочу отметить сразу, что я обучаюсь здесь именно в магистратуре, поэтому и вся последующая информация будет относиться именно к “graduate” студентам (в эту категорию попадают студенты магистратуры и аспирантуры; в основном, вся информация относится к магистрам, но представляет из себя некое представление и о аспирантах). Что касается “undergraduate” студентов, то для них условия, обучение отличаются.

Если у Вас мало времени, то вот выжимка: обучение (фактически) бесплатное, все основные предметы на английском, есть стипендия (на жизнь хватает), предметы выбираешь сам (не больше 4-х, минимум 1 в семестр; нет всяких философий и чего‑то подобного; система выбора — «кто успел, тот и съел»), обязательная научная работа (я бы сказал, что это просто работа; на данный момент о своем научном руководителе могу сказать только хорошие вещи), есть общежитие (отдельный санузел, проживание 1-2 человек, без кухни). Я советую (как минимум свою лабораторию).

Читать далее

Как закалялась сталь современной симметричной криптографии. Глава 1. Классическая криптография

Level of difficultyMedium
Reading time49 min
Views11K

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

Читать далее

Математическая продлёнка. Мир треугольников

Level of difficultyMedium
Reading time19 min
Views12K

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

Читать далее

GNU Make может больше чем ты думаешь

Reading time3 min
Views7K
Как только исходники проекта надо распространять, то возникает необходимость использовать систему сборке, вместо того что нагенерила любимая IDE. В мире unix (с подачи gnu) традиционно используется autotools, ему есть отличные альтернативы в виде cmake или scons. Но почему-то ядро Linux собирается при помощи GNU Make, а вся FreeBSD включая порты при помощи BSD Make. WTF?

Однажды намучившись с autotools, я решил провести эксперимент — насколько можно перелопатить Makefile, чтобы обеспечить себе более-менее удобную сборку.

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

Восемь неочевидных вещей в шаблонах С++

Level of difficultyMedium
Reading time7 min
Views14K

Привет, я backend-разработчик IT-компании SimbirSoft Леонид. В этой статье расскажу про 8 нюансов, которые я обнаружил при изучении шаблонов С++. Честно признаюсь, что наткнувшись на некоторые из них, я был удивлен: «Хм, SFINAE есть, а слова нет?» или «А что, есть разница между шаблоном в шаблоне и шаблоном с двумя параметрами?».

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

Некоторые из примеров были описаны в cpp-referernce чуть ли не в самом первом абзаце, некоторые потребовали пошерстить stackoverflow, и в конце концов все есть в стандарте. Но кто учит язык по документации? У кого из нас не было такой ситуации: «Сейчас я код потыкаю, а там разберемся, что к чему». Так вот, сейчас пришло время узнать, как это работает и почему именно так. 

Читать далее

Information

Rating
7,467-th
Registered
Activity