Обновить
-30
Ошнуров Андрей@andreoshread⁠-⁠only

Программист

Отправить сообщение

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

Время на прочтение9 мин
Охват и читатели31K

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

Читать далее

Сниппет-менеджер и генератор кода в одном флаконе

Время на прочтение5 мин
Охват и читатели2.3K

ApexWidget - это сниппет-менеджер и генератор кода. Полезен для автоматической генерации шаблонов кода и технической документации.

Читать далее

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

Время на прочтение10 мин
Охват и читатели11K


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

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

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

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

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

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

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

Время на прочтение5 мин
Охват и читатели12K

"Н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

Время на прочтение8 мин
Охват и читатели77K

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

Читать далее

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

Время на прочтение21 мин
Охват и читатели109K

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

Читать далее

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

Время на прочтение6 мин
Охват и читатели18K

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

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

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

Читать далее

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

Время на прочтение3 мин
Охват и читатели3.2K

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

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

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

Читать далее

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

Время на прочтение4 мин
Охват и читатели101K


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

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

Время на прочтение7 мин
Охват и читатели19K

16+

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

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

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

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

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

Читать далее

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

Время на прочтение8 мин
Охват и читатели21K

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

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

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

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

Читать далее

Вышла Vue 3.2

Время на прочтение3 мин
Охват и читатели12K

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

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

Читать далее

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

Время на прочтение8 мин
Охват и читатели12K

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

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

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

Читать далее

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

Время на прочтение6 мин
Охват и читатели36K

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

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

Читать далее

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

Время на прочтение4 мин
Охват и читатели28K

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

Читать далее

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

Время на прочтение16 мин
Охват и читатели12K

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

Читать далее

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

Время на прочтение13 мин
Охват и читатели20K

Привет!

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

Читать далее

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

Время на прочтение4 мин
Охват и читатели8.3K

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


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

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

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

Время на прочтение8 мин
Охват и читатели5.8K

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

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

Информация

В рейтинге
Не участвует
Откуда
Уфа, Башкортостан(Башкирия), Россия
Дата рождения
Зарегистрирован
Активность