Search
Write a publication
Pull to refresh
44
0

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

Send message

Повесть о создании классической RTS в домашних условиях с нуля (часть 2: «Воскрешение») Окончание статьи: Сеть

Reading time52 min
Views18K

Примерно год назад вышла моя статья, которую можно назвать "первой частью" данной статьи. В первой части я насколько смог подробно разобрал тернистый путь разработчика-энтузиаста, который мне удалось когда-то самостоятельно пройти от начала и до конца. Результатом этих усилий стала игра жанра RTS "Земля онимодов" созданная мною в домашних условиях без движков, конструкторов и прочих современных средств разработки. Для проекта использовались C++ и Ассемблер, ну, и в качестве основного инструмента моя собственная голова.

В этой статье я постараюсь рассказать о том, как я решил взять на себя роль «реаниматора» и попытаться «воскресить» этот проект. Много внимания будет уделено написанию собственного игрового сервера.

Это окончание статьи, начало тут.
Читать дальше →

Повесть о создании классической RTS в домашних условиях с нуля (часть 2: «Воскрешение»)

Reading time12 min
Views26K

Примерно год назад вышла моя статья, которую можно назвать "первой частью" данной статьи. В первой части я насколько смог подробно разобрал тернистый путь разработчика-энтузиаста, который мне удалось когда-то самостоятельно пройти от начала и до конца. Результатом этих усилий стала игра жанра RTS "Земля онимодов" созданная мною в домашних условиях без движков, конструкторов и прочих современных средств разработки. Для проекта использовались C++ и Ассемблер, ну, и в качестве основного инструмента моя собственная голова.
В этой статье я постараюсь рассказать о том, как я решил взять на себя роль «реаниматора» и попытаться «воскресить» этот проект. Много внимания будет уделено написанию собственного игрового сервера.

История соревнований ИИ по Starcraft

Reading time27 min
Views25K
image

Введение


Начиная с первого Starcraft AI Competition, проведённого в 2010 году, тема искусственного интеллекта в стратегиях реального времени (RTS) становится всё более популярной. Участники таких соревнований представляют своих ИИ-ботов Starcraft, которые сражаются в стандартной версии Starcraft: Broodwar. Эти соревнования по играм RTS, вдохновлённые предыдущими соревнованиями, такими как Open RTS (ORTS), стали примерами демонстрации текущего состояния искусственного интеллекта в стратегических играх реального времени. ИИ-боты Starcraft управляются с помощью интерфейса Brood War Application Programming Interface (BWAPI), разработанного в 2009 году в качестве способа взаимодействия и управления Starcraft: Broodwar с помощью языка C++. С ростом функционала и популярности BWAPI начали появляться первые ИИ-боты (агенты) для Starcraft и появилась возможность организации настоящего соревнования ИИ по Starcraft. Мы подробно расскажем о каждом крупном соревновании ИИ по Starcraft, а также о развитии UAlbertaBot, нашего бота, участвующего в этих соревнованиях. Следует учесть, что я был организатором соревнований AIIDE с 2011 года и, естественно, имею больше информации об этих соревнованиях. Каждое соревнование будет рассматриваться в хронологическом порядке проведения, с указанием полных результатов и ссылок на скачивание исходных кодов ботов и файлов ответов соревнований AIIDE и CIG.

Графическое описание владения и заимствования в Rust

Reading time2 min
Views14K

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



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


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

Логика сознания. Часть 11. Естественное кодирование зрительной и звуковой информации

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

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

Ситуация несколько усложняется, когда понятия имеют природу множеств (рисунок ниже). Тогда возможны формулировки типа: «понятие C содержит понятия A и B», «понятия A и B различны», «понятия A и B имеют нечто общее». Если положить, что близость определяется в интервале от 0 до 1, то про рисунок слева можно сказать: «близость A и C равна 1, близость B и C равна 1, близость A и B равна 0).
Читать дальше →

Нейросетка играет в Доту

Reading time8 min
Views38K


Всем привет! На самом деле нейросетка играет не в привычную Dota 2, а в RussianAICup 2016 CodeWizards. RussianAICup — это ежегодное открытое соревнование по программированию искусственного интеллекта. Участвовать в этом соревновании довольно интересно. В этом году темой была игра похожая на Доту. Так как я уже какое-то время занимаюсь обучением с подкреплением, то мне хотелось попробовать применить это в RussianAICup. Главной целью было научить нейронную сеть играть в эту игру, хотя занятие призового места — это, конечно, было бы приятно. В итоге нейросеть держится в районе 700 места. Что, я считаю, неплохо, ввиду ограничений соревнования. В этой статье речь пойдет скорее об обучении с подкреплением и алгоритмах DDPG и DQN, а не о самом соревновании.
Но обо всем по-порядку

Повышаем производительность кода: сначала думаем о данных

Reading time20 min
Views64K


Занимаясь программированием рендеринга графики, мы живём в мире, в котором обязательны низкоуровневые оптимизации, чтобы добиться GPU-фреймов длиной 30 мс. Для этого мы используем различные методики и разработанные с нуля новые проходы рендеринга с повышенной производительностью (атрибуты геометрии, текстурный кеш, экспорт и так далее), GPR-сжатие, скрывание задержки (latency hiding), ROP…

В сфере повышения производительности CPU в своё время применялись разные трюки, и примечательно то, что сегодня они используются для современных видеокарт ради ускорения вычислений ALU (Низкоуровневая оптимизация для AMD GCN, Быстрый обратный квадратный корень в Quake).


Быстрый обратный квадратный корень в Quake

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

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

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

Итоги: что сильнее – ассемблер или Хабраэффект?

Reading time3 min
Views33K

Отшумели страсти после моей первой статьи на Хабре.


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


Сайт уже был один раз под подобным наплывом посетителей — когда в августе кто то опубликовал ссылку на сайт одновременно в Твиттер, ФБ и Реддит.


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


Как и ожидалось, чудо свершилось. Несмотря на то, что хостинг предельно слабенький (я его взял такой специально), несмотря на то, что сайт использует БД SQLite, которую все считают очень медленной, форум не упал. Он даже не замедлился. Все время сайт работал исправно и обслуживал всех посетителей.


Посмотрим как выглядит Хабраэффект изнутри:

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

Писать веб-сайты на ассемблере полезно и приятно

Reading time5 min
Views141K

Конечно, многие скажут, что это ни-ни и писать для веба нужно только на PHP, ну или на один из модерных языках Питон, Руби, Node.js и т.д.


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


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


Раньше у меня уже было веб-приложение на ассемблере — CMS для малого сайта. Только оно работает в режиме "один пишет, многие читают". При том, использует CGI интерфейс и поэтому "многие" читать одновременно тоже не получается.

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

DlangUI — кросплатформенный GUI для D (Часть 1)

Reading time12 min
Views17K
Мне нравится язык D. Давно слежу за его развитием. Для D есть несколько GUI библиотек и биндингов, но я решил изобрести свой велосипед.
Хочу рассказать о своём проекте DlangUI. Надеюсь, что он кому-нибудь будет полезен.



На КДПВ скриншот DlangIDE — приложения, написанного на DlangUI.

Особенности:

  • Кроссплатформенность — поддерживаются Windows, Linux, Mac OSX; легкость портирования на другие платформы
  • Написан на D — легкорасширяемый
  • Использование Layouts для позиционирования элементов интерфейса
  • Масштабирование шрифтов и иконок в приложении в зависимости от разрешения экрана
  • Поддержка Unicode
  • Интернационализация — поддержка перевода UI на несколько языков
  • Аппаратное ускорение с помощью OpenGL (опционально)
  • Возможность отрисовки виджетов поверх OpenGL сцены (например, для UI в игре)
  • Небольшой размер исполняемого файла
  • Внешний вид интерфейса настраивается с помощью тем (две стандартные темы — светлая и темная)
  • Встраивание ресурсов в исполняемый файл
  • Открытый исходный код, под лицензией Boost License 1.0
Подробности

Nuklear — идеальный GUI для микро-проектов?

Reading time7 min
Views68K

Nuklear — это библиотека для создания immediate mode пользовательских интерфейсов. Библиотека не имеет никаких зависимостей (только C89! только хардкор!), но и не умеет создавать окна операционной системы или выполнять реальный рендеринг. Nuklear — встраиваемая библиотека, которая предоставляет удобные интерфейсы для отрисовки средствами реализованного приложения. Есть примеры на WinAPI, X11, SDL, Allegro, GLFW, OpenGL, DirectX. Родителем концепции была библиотека ImGUI.


Чем прекрасна именно Nuklear? Она имеет небольшой размер (порядка 15 тысяч строк кода), полностью содержится в одном заголовочном файле, создавалась с упором на портативность и простоту использования. Лицензия Public Domain.

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

История редких нейродегенеративных заболеваний: Болезнь Пика, болезнь Галлервордена-Шпатца

Reading time7 min
Views20K
image

Сегодня мы поговорим о двух редких нейродегенеративных заболеваниях – болезни Пика и болезни Галлервордена-Шпатца. Оба недуга названы в честь своих первооткрывателей, каждый из которых прожил сложную, но насыщенную жизнь.
Читать дальше →

Логика сознания. Часть 9. Искусственные нейронные сети и миниколонки реальной коры

Reading time26 min
Views55K
Приходит ветеринар к терапевту. Терапевт: — На что жалуетесь? Ветеринар: — Нет, ну так каждый может!

Искусственные нейронные сети способны обучаться. Воспринимая множество примеров, они могут самостоятельно находить в данных закономерности и выделять скрытые в них признаки. Искусственные нейронные сети во многих задачах показывают очень неплохие результаты. Закономерный вопрос — насколько нейронные сети похожи на реальный мозг? Ответ на этот вопрос важен главным образом для того, чтобы понять, можно ли, развивая идеологию искусственных нейронных сетей, добиться того же, на что способен человеческий мозг? Важно понять, носят ли различия косметический или идеологический характер.

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

Пишем настоящий Pointer Analysis для LLVM. Часть 1: Введение или первое свидание с миром анализа программ

Reading time8 min
Views7.4K
Привет, Хабр!

Эта статья станет вступительной в моем небольшом цикле заметок, посвященном такой технике анализа программ, как pointer analysis. Алгоритмы pointer analysis позволяют с заданной точностью определить на какие участки памяти переменная или некоторое выражение может указывать. Без знания информации об указателях анализ программ, активно использующих указатели (то есть программ на любом современном языке программирования — C, C++, C#, Java, Python и других), практически невозможен. Поэтому в любом мало-мальски оптимизируещем компиляторе или серьезном статическом анализаторе кода применяются техники pointer analysis для достижения точных результатов.

В данном цикле статей мы сосредоточимся на написании эффективного межпроцедурного алгоритма pointer analysis, рассмотрим основные современные подходы к задаче, ну и, конечно же, напишем свой очень серьезный алгоритм pointer analysis для замечательного языка внутреннего представления программ LLVM. Всех интересующихся прошу под кат, будем анализировать программы и многое другое!
Читать дальше →

Иллюзии мозга. Почему умного человека легче обмануть на бытовом уровне

Reading time4 min
Views75K

Уильям Джеймс Сайдис до восьмилетия написал четыре книги, его уровень IQ оценивался от 250 до 300 (наивысший зафиксированный IQ в истории). Поступил в Гарвард в 10 лет. В юном возрасте Уильям решил отказаться от секса и посвятить жизнь интеллектуальному развитию

Что лучше: 100 рублей сейчас или 300 рублей через год? Бейсбольная бита с мячом стоят 1 рубль 10 копеек, бита на 1 рубль дороже мяча, сколько стоит мяч? Это простые логические вопросы, на которые люди часто дают «интуитивные» неправильные ответы. Причина — в когнитивных искажениях, которым подвержены все без исключения. Печально, но умные люди более подвержены некоторым когнитивным искажениям, чем глупые люди.

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

История редких нейродегенеративных заболеваний

Reading time9 min
Views19K
image

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

Сегодня мы поговорим о двух редких нейродегенеративных заболеваниях – болезни куру и фатальной семейной бессоннице (FFI). От первой в свое время пострадало целое племя в Папуа-Новой Гвинее, вторая до сих пор не дает покоя одному итальянскому семейству. На первый взгляд между этими болезнями ничего общего, но как обычно бывает в жизни, на самом деле все не так прямолинейно.
Читать дальше →

Психология убеждения. Как убеждать других и уметь распознавать манипуляции

Reading time14 min
Views138K

Эта статья — некраткий конспект книги Роберта Чалдини «Психология убеждения». Будет полезна всем, кто имеет дело с людьми, продажами и бизнесом. Книга настолько полезна, что должна оказаться на полке каждого. Помимо того, что мы хотим влиять на окружающих, очень полезно знать, когда окружающие пытаются повлиять на нас. Внутри вы найдёте множество способов убеждения и, сразу после прочтения, будете с лёгкостью замечать, когда вами пытаются манипулировать.
Читать дальше →

Самые популярные игры своего времени, часть 1: 1970-е годы

Reading time7 min
Views21K
Когда мы говорили о самых продаваемых играх, вы задавали вопросы: почему не рассказать о тех играх, которые были самыми популярными в своё время? Сложно сравнивать по количеству продаж игру из 2013 года, доступную сразу на нескольких платформах и в нескольких магазинах, и какую-нибудь аркаду из 1970-х, которая продавалась пару лет. Так что давайте поговорим о тех играх, которые сыграли важную роль в развитии индустрии в определённые годы благодаря своей популярности.

image

История мировых эпидемий, часть 3

Reading time8 min
Views39K
Мы говорили о чуме и оспе, холере и тифе. На очереди — вирусное инфекционное заболевание под названием грипп, один из штаммов которого только в 1918-1919 годах унёс жизни более 50 миллионов человек из заразившейся трети населения планеты, и туберкулёз, из-за которого каждый год даже сейчас умирают 2 миллиона человек.

image
Пандемия «испанки» в 1918-1919 годах.
Читать дальше →

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

Reading time4 min
Views20K
Мало каким вещам мы уделяем столько же внимания, как времени. Мы не хотим опаздывать на работу или на свидание. Ещё больше мы не хотим стареть и умирать. Правильный учёт времени важен во всех аспектах человеческой деятельности, и мы стали беспокоиться об этом почти сразу после того, как перешли от охоты и собирательства к сельскому хозяйству и коммерции.


Часы-свеча

Измерение времени требует повторяющегося процесса для отсчёта равных промежутков и способа отслеживать и показывать результат. Первые устройства для учёта времени основывались на движении Солнца. Древние Египтяне примерно в 3500 г. до н.э. строили обелиски, которые отбрасывали тени на землю и давали тем самым приблизительное понятие о времени суток. Затем настала очередь субстанций, тратившихся с одинаковой скоростью: свечи, благовония, водяные и песочные часы. Огромный прорыв случился с изобретением механических часов и спускового механизма.

Information

Rating
Does not participate
Location
Тернополь, Тернопольская обл., Украина
Date of birth
Registered
Activity