Pull to refresh
-30
Ошнуров Андрей @andreoshread⁠-⁠only

Программист

Send message

Создание шутера с LeoECS. Часть 1

Reading time9 min
Views27K

Друзья, это первая статья по фреймворку LeoECS из предстоящей серии, которая позволит вам быстрее понять, как работать с LeoECS в Unity и решить некоторые виды проблем, возникающих на практике. Все советы, изложенные в них, не представляют собою какой-то свод правил, способы построения подходов, а скорее набор рекомендаций и best practices, которые помогут вам освоиться в работе с фреймворком. Перед чтением убедитесь, что вы понимаете принцип работы архитектурного паттерна Entity Component System (ECS), и ознакомьтесь с документацией LeoECS, так как в процессе изучения фреймворка мы создадим простую игру жанра Top-Down shooter, рассмотрим часто возникающие проблемы и способы решения, и отвлекаться на различные вопросы, связанные с концепцией ECS, не будем.

Читать далее

Динамическая JIT компиляция С/С++ в LLVM с помощью Clang

Reading time10 min
Views10K


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

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

Оказывается, интерфейс Clang меняется от версии к версии и все найденные мной примеры были старыми и не запускались в актуальной версии (Сlang 12), а стабильный C-style интерфейс предназначен для парсинга и анализа исходников и с помощью которого сгенерировать исполняемые файлы не получится*.

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

А теперь публикую результат своих изысканий в виде рабочего примера динамической компиляции С++ кода с последующей его загрузкой и выполнением скомпилированных функций. Исходники адаптированны под актуальную версию Clang 12. Пояснения к коду я перевел и дополнил перед публикацией, а ссылки на исходные материалы приведены в конце статьи.

  • *) Кажется в 14 версии планируется реализовать C интерфейс для генерации исполняемых файлов.
  • **) На самом деле, Clang может (или теперь может) компилировать файлы из оперативной памяти, поэтому в исходники я добавил и эту возможность.
Читать дальше →

Создание .exe установщика для UWP приложения

Reading time5 min
Views11K

"Нoвый фopмaт пpилoжeний для мaгaзинa Windows pacпpocтpaняeтcя в ycтaнoвoчных фaйлaх .Appx и .AppxBundle и включaет в ceбя лишь caмy пpoгpaммy, eё имя и oпиcaниe. Эти пaкeты пoзвoляют paзpaбoтчикaм нe иcпoльзoвaть coбcтвeнный ycтaнoвщик для инcтaлляции, кaк этo былo c oбычными пpoгpaммaми." - MIcrosoft.

Звучит здорово, но где же взять .exe?

Найти .exe

Генерация документации с использованием JSDoc

Reading time8 min
Views59K

JSDoc - это язык разметки, используемый для аннотирования исходного кода JavaScript с использованием комментариев. Аннотации обрабатывается различными инструментами для создания документации в доступных форматах, таких как HTML и Rich Text Format.

Читать далее

3D моделирование в Python

Reading time21 min
Views92K

Допустим, вам потребовалось на языке программирования python, построить трёхмерную модель некоторого объекта, затем визуализировать его, или подготовить файл для печати на 3D принтере. Существует несколько библиотек, помогающих в решении этих задач. Поговорим о том, как строить трёхмерные модели из точек, граней и примитивов в python. Как выполнять элементарные приемы 3D моделирования: перемещение, поворот, объединение, вычитание и другие.

Читать далее

Как самому сделать видео для сайта или для рекламы, чтобы не было стыдно за результат: пошаговая инструкция (часть 1)

Reading time6 min
Views16K

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

Предпосылкой для написания этого мануала, стал личный опыт участия в создании видеороликов, в которых главное действующее лицо —  руководитель бизнеса. Как правило, это ролики для сайта компании или для видео рекламы в Instagram и YouTube. У меня было опыт записи роликов как самостоятельно, так и с командой профессиональных видеографов.

Скажу сразу: после прочтения, вы можете передумаете делать всё самостоятельно, но поймёте нюансы съемочного процесса. Я уверен, что, двигаясь шаг за шагом, вы справитесь.

Читать далее

Как продавать партиями на AliExpress

Reading time3 min
Views3.1K

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

Всем привет, это Антон Баташов, руководитель отдела интеграции в компании XWAY, и в этой статье мы поговорим о том, как продавать товары минимальными партиями на маркетплейсах. 

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

Читать далее

Не «Оперой» единой. Выбираем proxy-сервис вместо Opera VPN

Reading time4 min
Views75K


Признаюсь, я никогда не считал себя преданным фанатом Opera. Тем не менее этот браузер был установлен на всех моих компьютерах — из-за простой и удобной функции VPN (который даже не VPN, а, скорее, продвинутый прокси), позволявшей при необходимости быстро менять внешний IP-адрес и локацию, что бывает просто необходимо в целом ряде случаев — скажем, в процессе отладки веб-приложений. Да мало ли по какой причине благородному дону вдруг понадобится предстать в сети канадским фермером или испанским кабальеро? И вот с недавних пор сервис Opera VPN был отключен для российских пользователей разработчиками браузера. Что ж, настало время искать альтернативу!
Читать дальше →

Ключ от старости. Детская прогерия и луч надежды

Reading time7 min
Views17K

16+

Еще в самом первом моем посте на Хабре я вскользь затронул один маркер цивилизации XX века, а конкретнее – его медицины, который на самом деле поражает меня сильнее космонавтики и даже сильнее Интернета.

Я упоминал о серповидноклеточной анемии. Это генетическое заболевание, приводящее к деформации эритроцитов, мешает развитию малярии, поэтому в Африке повышало шансы индивида на выживание – как меньшее зло.

XX век – его конец и начало XXI века – отметились стратегической победой над инфекционными болезнями и переходом к борьбе против генетических, к которым по ряду показателей примыкает рак. Хина и карболка Миклухо-Маклая уступили место чудесам фармакологического искусства, названия которых оканчиваются на –маб и –вир.

Генетические заболевания принципиально отличаются от инфекционных как по принципу передачи (вертикально, а не горизонтально), так и гораздо меньшей распространенностью в глобальной популяции с резкими всплесками локально – как в случае с болезнью Хантингтона на озере Маракайбо (глава 12).   

Тем не менее, организованная борьба с генетическими заболеваниями уже началась. Поскольку она требует не просто «знать врага в лицо», но и «разбирать врага до косточек», эта борьба дает богатый урожай знаний о природе человека, его фичах и багах. И даже на фоне генетических заболеваний особняком стоит «баг» невообразимо чудовищный, редчайший и при этом крайне информативный. Это синдром Вернера, а также синдром Гетчинсона-Гилфорда, более известные как «детская» и «взрослая» прогерия.     

Читать далее

Анализ аудио. Идентификация голоса

Reading time8 min
Views18K

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

Перед нашей командой стояла задача проанализировать большое число телефонных звонков от клиентов, с целью выявления фактов псевдодоверительного управления, т.е. тех случаев, когда один и тот же человек представляет по телефону интересы нескольких клиентов. Суммарный объем аудиоданных составлял более 500Гб, а общая продолжительность 445 дней (11 тыс. часов). Естественно, прослушать все записи силами нескольких человек невозможно, поэтому решением задачи мы видели автоматическую кластеризацию похожих голосов с последующим анализом полученных групп.

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

Пожалуй, самым простым подходом в обработке звука является амплитудно-временно анализ.

Читать далее

Вышла Vue 3.2

Reading time3 min
Views12K

Эта статья — перевод оригинальной статьи Evan You "Vue 3.2 Released!"

Мы рады объявить о выпуске Vue.js 3.2 "Quintessential Quintuplets"! Этот релиз включает в себя множество значительных новых функций и улучшений производительности и не содержит критических изменений.

Читать далее

Минимальная установка NextJS без create-next-app

Reading time8 min
Views11K

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

Штатным и самым быстрым способом создания проекта является использование штатной утилиты create-next-app, которая, по аналогии со всем известной CRA создаст проект за считанные секунды.

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

Читать далее

Простые запросы SNMP в Python (с помощью pysnmp)

Reading time6 min
Views29K

Этот пост предназначен в первую очередь для сотрудников телекома, админов и новичков в разработке, впервые столкнувшихся с необходимостью отправить snmp-запросы к какому-нибудь коммутатору и разобрать полученный ответ.

Разберем основы работы с библиотекой pysnmp на примере модуля, который принимает в качестве параметров oid-ы, ip и RO-community коммутатора и отдает человекопонятный json с ответами на эти oid-ы и ifAdminStatus, ifOperStatus, ifInOctets, ifOutOctets и ответ на запрос о типах линков.

Читать далее

6 хороших практик по HTML и CSS

Reading time4 min
Views26K

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

Читать далее

Разработка стековой виртуальной машины и компилятора под неё (итог)

Reading time16 min
Views11K

Для завершения реализации компилятора потребовалось около месяца времени (вечерами), чтобы на практике познакомиться с такими темами как BNF (Backus Naur Form), Abstract Syntax Tree (AST), Symbol Table, способами генерации кода, разработки самого компилятора (front-end, back-end), а также модификации виртуальной машины CVM. Ранее с этими темами был не знаком, но благодаря комментаторам погрузился. Хоть затрагиваемых тем много, постараюсь рассказать очень лаконично. Но обо всём по порядку.

Читать далее

Процедурная генерация 3D миров в Godot Engine при помощи GPU. Часть 1

Reading time13 min
Views17K

Привет!

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

Читать далее

Инверсия зависимостей и 'import' в JS

Reading time4 min
Views7.7K

В процессе обсуждения статьи "Почему я «мучаюсь» с JS" у меня сложилось понимание, что связка export / import в JS является базой для указания зависимостей между элементами кода (классами и функциями). А так как современные приложения вышли за рамки однофайловых и давно уже строятся из блоков, то выстраивание зависимостей между элементами кода имеет весомое значение. Настолько весомое, что в знаменитой аббревиатуре SOLID этому посвящена отдельная буква — D (Dependency inversion — инверсия зависимостей, не путать с Dependency injection — внедрение зависимостей).


Размышляя над тем, как связываются зависимые элементы кода в JS через export / import, я пришёл к выводу, что не все зависимости в коде es6-модулей SOLID'ных приложений можно описать инструкциями import. Излагаю свои соображения, чтобы коллеги могли указать, где я ошибаюсь, или подтвердить мои выкладки.

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

Цифровая трансформация цементного завода (ч. 5): автоматизация на производстве

Reading time8 min
Views5.2K

Автоматизация на производстве - это огромное поле для улучшений. Частично я уже затрагивал эту тему в третьей части (на примере электронной очереди для грузового автотранспорта и контуре автоматического взвешивания машин на коммерческих весах). В этой публикации расскажу ещё о двух кейсах...

Читать статью >>

Information

Rating
Does not participate
Location
Уфа, Башкортостан(Башкирия), Россия
Date of birth
Registered
Activity