Search
Write a publication
Pull to refresh
4
0.3

User

Send message

Коллапс волновой функции: алгоритм, вдохновлённый квантовой механикой

Reading time11 min
Views34K
image

Алгоритм Wave Function Collapse генерирует битовые изображения, локально подобные входному битовому изображению.

Локальное подобие означает, что

  • (C1) Каждый паттерн NxN пикселей в выходных данных должен хотя бы раз встречаться во входных данных.
  • (Слабое условие C2) Распределение паттернов NxN во входных данных должно быть подобным распределению паттернов NxN в значительно большом количестве наборов выходных данных. Другими словами, вероятность встречи определённого паттерна в выходных данных должна быть близка к плотности таких паттернов во входных данных.
Читать дальше →

OpenSceneGraph: Основные приемы программирования

Reading time24 min
Views5.3K
image

Введение


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

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

Данная статья является довольно длинной и включает в себя обзорное описание разнообразных инструментов и техник (паттернов проектирования, если хотите), предоставляемых разработчику движком. Все разделы статьи снабжены примерами, код которых можно взять в моем репозитории.
Читать дальше →

OpenSceneGraph: Процедурная анимация геометрии и атрибутов состояния

Reading time22 min
Views3.9K
image

Введение


Говоря о приемах программирования, специфичных для OSG в прошлый раз мы говорили о механизме обратных вызовов (Callback) и его реализации в движке. Настало время посмотреть на то, какие возможности дает нам применение этого механизма для управления содержимым трехмерной сцены.

Если говорить об анимации объектов, то OSG предоставляет разработчику две возможности её реализации:

  1. Процедурная анимация, реализуемая программным способом через трансформацию объектов и их атрибутов
  2. Экспорт анимации из 3D-редактора и управление ею из кода приложения

Для начала рассмотрим первую возможность, как наиболее очевидную. О второй мы обязательно поговорим чуть позже.
Читать дальше →

Объёмный рендеринг в WebGL

Reading time8 min
Views5.2K

Рисунок 1. Пример объёмных рендеров, выполненных описанным в посте рендерером WebGL. Слева: симуляция пространственного распределения вероятностей электронов в высокопотенциальной молекуле белка. Справа: томограмма дерева бонсай. Оба набора данных взяты из репозитория Open SciVis Datasets.

В научной визуализации объёмный рендеринг широко используется для визуализации трёхмерных скалярных полей. Эти скалярные поля часто являются однородными сетками значений, представляющими, например, плотность заряда вокруг молекулы, скан МРИ или КТ, поток огибающего самолёт воздуха, и т.д. Объёмный рендеринг — это концептуально простой метод превращения таких данных в изображения: сэмплируя данные вдоль пущенных из глаза лучей, и назначив каждому сэмплу цвет и прозрачность, мы можем создавать полезные и красивые изображения таких скалярных полей (см. Рисунок 1). В GPU-рендерере такие трёхмерные скалярные поля хранятся как 3D-текстуры; однако в WebGL1 3D-текстуры не поддерживаются, поэтому для их эмуляции в объёмном рендеринге требуются дополнительные хаки. Недавно в WebGL2 появилась поддержка 3D-текстур, позволяющая реализовать браузере элегантный и быстрый объёмный рендерер. В этом посте мы обсудим математические основы объёмного рендеринга и расскажем о том, как реализовать его на WebGL2, чтобы создать интерактивный объёмный рендерер, полностью работающий в браузере! Прежде чем начать, вы можете протестировать описанный в этом посте объёмный рендерер онлайн.
Читать дальше →

Как научить людей использовать Git

Reading time3 min
Views141K
По работе приходится участвовать в разных проектах, поэтому я хорошо знаю, как работают все мои коллеги. Помню, что компания начала использовать Git буквально за пару недель до моего прихода. На мониторах разработчиков кругом висели наклейки с напоминанием: сначала add, потом коммит, затем пуш.


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

Трехмерная визуализация в тренажерах подвижного состава на базе движка OpenSceneGraph

Reading time13 min
Views10K


Чуть меньше года назад увидела свет публикация, где мы рассказывали об учебно-лабораторном комплексе (УЛК) электропоезда ЭС1 «Ласточка», разработанном нашем университете. Тогда я обещал, что это будет не последняя публикация на данную тему, в частности грозился рассказать о проблемах создания трехмерной визуализации для подобного рода симуляторов и очертить основные подходы к их решению.

Прошедший год порадовал нас очередным релизом — УЛК высокоскоростного электропоезда ЭВС2 «Сапсан», который состоялся ещё в августе прошлого года. Сам по себе учебно-лабораторный комплекс данного электропоезда заслуживает отдельного рассказа, но в контексте этой публикации речь пойдет о наболевшем — проблеме создания адекватной подсистемы трехмерной визуализации, к решению которой наша команда подступалась с разных сторон около двух лет. Релиз симулятора «Сапсана» знаменателен (среди прочего) и тем, что определил вектор развития наших разработок в этой области.

Задача от иностранной компании или как я провалил собеседование

Reading time4 min
Views41K
Решив попробовать свои силы на зарубежном рынке, я начал отправлять резюме в различные конторы. Даже не с целью найти работу, а просто для расширения кругозора. Выбор пал на вакансии «Java Developer». Промышленного опыта работы с языком у меня нет, только личный опыт, сертификаты с Oracle Certification Center, книги и.т.д. Честно признаться, на последнем месте работы за полтора года ничего кроме «форов» и «ифов» я не писал (но это совсем уже другая история) поэтому решил, почему бы собственно и нет.

Пропустив историю поиска и разговоров с работодателями, перейду к сути. Одна компания К из города Г написала, что заинтересованы в проведении собеседования со мной после того как я решу задачу.

После того как я решил и отправил им решение, К ответила, что после код ревью решили не рассматривать мою заявку более. Это был удар по моей самооценке. Я конечно понимаю, что язык новый, и вообще всякое бывает, но надеялся хотя бы на отзыв о моем решении. Плюс задача-то простая на самом деле… Надеюсь, вам будем интересна задача.
Читать дальше →

Нейросети и философия языка

Reading time9 min
Views12K
Почему теории Витгенштейна остаются основой всего современного NLP

Векторное представление слов — пожалуй, одна из самых красивых и романтичных идей в истории искусственного интеллекта. Философия языка — это раздел философии, исследующий связь между языком и реальностью и как сделать сделать речь осмысленной и понятной. А векторное представление слов — очень специфический метод в современной обработке естественного языка (Natural Language Processing, NLP). В некотором смысле он представляет собой эмпирическое доказательство теорий Людвига Витгенштейна, одного из самых актуальных философов прошлого века. Для Витгенштейна использование слов — это ход в социальной языковой игре, в которую играют члены сообщества, понимающие друг друга. Значение слова зависит только от его полезности в контексте, оно не соотносится один к одному с объектом из реального мира.

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

Data Science: книги для начального уровня

Reading time3 min
Views72K
Data Science — наука о данных, возникшая на стыке нескольких обширных направлений: программирования, математики и машинного обучения. Этим обусловлен высокий порог вхождения в профессию и необходимость постоянно получать новые знания.

Ключевыми навыками для начинающих специалистов являются:

  • умение писать код (Python);
  • способность визуализировать свои результаты;
  • понимание того, что происходит «под капотом».

На эти три категории разделены книги, которые специалисты Plarium Krasnodar подобрали для читателей с начальными знаниями в Data Science.

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

Как на удалёнке жить хорошо

Reading time8 min
Views64K

Вводная


Казалось бы, на Хабре уже не раз обсуждался вопрос удалённой работы, да и в сети можно найти довольно много информации об этом опыте. Однако, в очередной раз отвечая на вопрос знакомого: “Каково оно, работать из дома?”, я понял, что хочу поделиться и своим опытом. Надеюсь, он будет полезен тем, кто все ещё сомневается, стоит ли оно того.


Итак, меня зовут Артур, и я… удалённый разработчик. В последнее время тема удалённой работы становится всё более “хайповой”, но её история тянется уже лет 40, а NASA по-прежнему поощряет удалённую работу



Работать без привязки к офису можно в качестве удалённого сотрудника, фрилансера или основателя бизнеса. Все эти направления немного отличаются перечнем занятий, которые наваливаются на вас “в нагрузку” к вашей специализации: продажи, маркетинг, работа с клиентами. Что их объединяет — это набор стереотипов, сложившихся в головах у многих. И именно их я и хочу обсудить в этой статье.

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

Как физический адрес отображается в строках и банках DRAM

Reading time6 min
Views6.6K
В прошлой статье мы обсуждали, как процессоры Intel Sandy Bridge отображают физические адреса в кэше L3.

Теперь я расскажу, как контроллеры памяти этих процессоров сопоставляют физические адреса с местоположением в DRAM — в частности, с номерами строк, банков и столбцов в модулях DRAM. Назовём это отображением адресов DRAM. Я использую одну тестовую машину в качестве примера.

Мотивация: баг Rowhammer


Меня интересует отображение адресов DRAM, поскольку оно относится к багу Rowhammer.

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

Память вашего компьютера лагает каждые 7,8 мкс

Reading time6 min
Views91K

Современная DDR3 SDRAM. Источник: BY-SA/4.0 by Kjerish

Во время недавнего посещения Музея компьютерной истории в Маунтин-Вью моё внимание привлёк древний образец ферритовой памяти.


Источник: BY-SA/3.0 by Konstantin Lanzet
Читать дальше →

Проектирование оконных функций, суммирующихся в единицу с заданным уровнем перекрытия

Reading time6 min
Views14K
Существует ряд задач, в которых длительный по времени сигнал разбивается на сегменты, каждый из которых обрабатывается по отдельности. В частности, такой подход используется для анализа сигнала с помощью оконного преобразования Фурье, или наоборот, при синтезе; а также при спектральной обработке типа удаления шума, изменения темпа, нелинейной фильтрации, сжатии аудиоданных и других.

Сам процесс разбиения математически представляется умножением на некоторую весовую (оконную) функцию со смещением. Для самого простого окна — прямоугольного — это может выглядеть так:

Исходный сигнал:



Разбиения:


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

Алгоритм Форчуна, подробности реализации

Reading time8 min
Views26K
Последние несколько недель я работал над реализацией алгоритма Форчуна на C++. Этот алгоритм берёт множество 2D-точек и строит из них диаграмму Вороного. Если вы не знаете, что такое диаграмма Вороного, то взгляните на рисунок:


Для каждой входной точки, которая называется «местом» (site), нам нужно найти множество точек, которые ближе к этому месту, чем ко всем остальным. Такие множества точек образуют ячейки, которые показаны на изображении выше.

В алгоритме Форчуна примечательно то, что он строит такие диаграммы за время $O(n\log n)$ (что оптимально для использующего сравнения алгоритма), где $n$ — это количество мест.

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

Как обычно, код выложен на github, а все использованные мной справочные материалы перечислены в конце статьи.
Читать дальше →

Научные способы улучшить внимание: ноотропы, нейроинтерфейсы и электростимуляция

Reading time28 min
Views105K
Как усилить концентрацию внимания? Для этого существует много бытовых советов, например, использовать наушники с шумоподавлением, выработать привычку работать под музыку одного стиля, блокировать сайты, на которые чаще всего отвлекаешься, ложиться по будильнику, заниматься спортом и класть все важные вещи в нужные места.

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

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


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

OpenSceneGraph: Основы работы с геометрией сцены

Reading time16 min
Views7.6K
image

Введение


OpenGL, являющийся бэкэндом для OpenSceneGraph, использует геометрические примитивы (такие как точки, линии, треугольники и полигональные грани) для построения всех объектов трехмерного мира.

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

Кроме того, OpenGL может использовать механизм так называемых дисплейных списков, когда однажды подготовленные в видеопамяти примитивы могут использоваться повторно, что существенно ускоряет отображение статических объектов.

По-умолчанию OSG использует метод массивов вершин и метод дисплейных списков для рендеринга геометрии. Однако, стратегия рендеринга может быть изменена, в зависимости от того, каким образом представлены данные о геометрии. В этой статье мы рассмотрим базовые приемы работы с геометрией в OSG.
Читать дальше →

Простая нечеткая логика слеплена «из того что было» для газотурбинного двигателя

Reading time9 min
Views11K

В этой статье мы создадим модель регулятора на базе стандартной библиотеки структурного моделирования (без использования готовой библиотеки блоков нечёткого регулирования).
В качестве объекта управления будет использована модель газотурбинного двигателя из учебника В.И. Гостева «Нечеткие регуляторы в системах автоматического управления»
Выполним сравнение с ПИД и ПДД регуляторами.


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

GeekBrains научит языку программирования С++

Reading time2 min
Views14K


Наш образовательный портал объявляет о запуске курса обучения С++. Студент-«крестоносец» будет востребован в любой отрасли IT: от проектирования и разработки программного обеспечения до гейм-девелопмента. C++ отлично подходит для решения сложных задач, на нем пишутся все высоконагруженные системы, к примеру, браузеры Google Chrome и Firefox, или легендарная World Of Warcraft. По данным hh.ru, в России сегодня открыто свыше трех тысяч вакансий программистов C++, в том числе в Москве — более тысячи.

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

3 книги по C++ 17 (на английском)

Reading time2 min
Views10K
Сегодня мы рассказываем вам о трех книгах, написанных нашими Microsoft MVP, по C++ 17. Они могут быть хорошими отправными точками в пути ознакомления с новой версией этого языка программирования. Все они продаются в электронном и бумажном виде на онлайн площадках (от €8.64 до $42.99 за электронные версии).

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

Видеотрансляция на вашем сайте, которая работает

Reading time4 min
Views18K


Создавая систему видеонаблюдения «Линия», мы разработали мощный инструмент для онлайн-трансляций. На «Хабре» данная тема остается неизменно популярной: здесь подробно описывались как готовые решения, так и кейсы по созданию сервера онлайн-вещаний. Мы решили пойти дальше и собираемся устроить стресс-тест нашему сервису и испытать на себе легендарный хабраэффект. А попутно расскажем о самых интересных трансляциях за последние полгода.
Читать дальше →

Information

Rating
3,187-th
Registered
Activity