Pull to refresh
4
0
Anton Nikolaev @d-art

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

Send message

HOWTO setup ubuntu 18.04 sendmail+DKIM+SPF+DMARC или о том как мне удалось пробиться в бастион Gmail

Reading time7 min
Views23K

Предисловие


На моем сервере крутится 2 отдельных домена. До истории с блокировками Роскомнадзора мы собирали трафик около 2000 посещений в сутки, а почтовый сервер отправлял в сутки около 200 писем на все популярные почтовые сервисы, в т.ч. Гугл и Яндекс. Все было здорово. Но как говорится в известном ролике: «Все было так хорошо, пока не пришел Навальный Роскомнадзор!

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

MX сервер google выбрасывает мою почту с примерно следующим сообщением: „Твое сообщение похоже на нежелательное, давай до свидания...“
Читать дальше →
Total votes 22: ↑17 and ↓5+12
Comments19

Самые гибкие todo в Телеграме в две строчки кода

Reading time3 min
Views17K

Недавно Boomburum писал о своих лайфхаках в Телеграме. Вместо "Избранного" он использует несколько приватных каналов с самим собой — для разделения на категории. И делаю точно так же.

Это удобно: в Телеграме всегда можно что-то быстро записать или переслать из других чатов. Получается такой простой способ вести повседневные заметки "на бегу".

Но повседневный список задач так вести не получится. Или всё-таки?

Читать далее
Total votes 9: ↑8 and ↓1+7
Comments20

Как я рисую иллюстрации для конспектов по математике в Inkscape

Reading time8 min
Views39K
В прошлой статье я рассказал, как пишу конспекты по математике на LaTeX в Vim. В этой статье покажу, как создаются рисунки для этих конспектов с помощью Inkscape, а также расскажу о своём самодельном менеджере горячих клавиш.

Некоторые примеры


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

Читать дальше →
Total votes 70: ↑70 and ↓0+70
Comments15

Стив пишет заклинания на Python. Обучение детей программированию в Minecraft

Reading time5 min
Views30K

Хочу поделиться наработками домашнего обучения детей программированию. Даже не столько обучению, сколько привлечения детского внимания и интереса. Ведь согласно Сократу, человек - не сосуд для наполнения, а факел, который нужно зажечь. Изначально были попытки начать со Scratch, но несмотря на понятный графический интерфейс, желание продолжать и что-то делать в среде быстро угасло. Minecraft пошел намного лучше, потому что дети уже были хорошо знакомы с игрой по мобильной версии и любимому creative mode.

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

Читать далее
Total votes 11: ↑11 and ↓0+11
Comments16

Теория звука. Что нужно знать о звуке, чтобы с ним работать. Опыт Яндекс.Музыки

Reading time14 min
Views210K
Звук, как и цвет, люди воспринимают по-разному. Например, то, что кажется слишком громким или некачественным одним, может быть нормальным для других.

Для работы над Яндекс.Музыкой нам всегда важно помнить о разных тонкостях, которые таит в себе звук. Что такое громкость, как она меняется и от чего зависит? Как работают звуковые фильтры? Какие бывают шумы? Как меняется звук? Как люди его воспринимают.



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

Поводом для этого поста можете считать то, что мы добавили в приложения Яндекс.Музыки возможность слушать треки в высоком качестве (320kbps). А можете не считать. Итак.
Читать дальше →
Total votes 83: ↑78 and ↓5+73
Comments52

Yandex Retro Games Battle 2020: новый конкурс и полезные ресурсы для разработчиков

Reading time3 min
Views8.8K
Меня зовут Олег Сенин, я программист, художник и музыкант на разных ретроплатформах. В этом году я присоединился к команде музея Яндекса. Не повезло: переехал из Санкт-Петербурга, собирался выйти на работу в музей, и тут началась самоизоляция. Но знакомить людей, в том числе профессионалов, с историей ретротехники можно и в режиме онлайн. Если вы когда-нибудь делали игры или хотите попробовать, но опасаетесь масштаба современных платформ, этот пост для вас.

В прошлом году я ещё не работал в музее, но вместе с командой MAYhEM & CONSCIENCE участвовал в Yandex Retro Games Battle 2019. Это конкурс музея, посвящённый созданию игр для легендарного компьютера ZX Spectrum. Игра, с которой мы участвовали, называется Space Monsters meet THE HARDY. Всего до финала дошло 19 новых игр — коллеги писали о них, и читатели Хабра помогли в выборе команды, получившей награду зрительских симпатий. Тогда победил коллектив Zosya Entertainment c игрой Valley of Rains, a наша игра заняла второе место.


Сегодня я рад объявить о новом конкурсе — Yandex Retro Games Battle 2020 — и поделиться ресурсами и книгами, которые я собрал. Они помогут вам в геймдизайне и программировании под ZX Spectrum.
Читать дальше →
Total votes 24: ↑23 and ↓1+22
Comments29

Дизеринг 2: ряд золотого сечения, синий шум и highpass-and-remap

Reading time7 min
Views3.9K
image

В предыдущей части я рассмотрел определение дизеринга и объяснил, как он изменяет характеристики погрешностей простой 1D-дискретизации и функций.

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

Ноутбук Mathematica для ряда золотого сечения находится здесь, а его pdf-версия — здесь.

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

Ряд золотого сечения


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

FractionalPart[N*GoldenRatio]

Идею его использования я нашёл в статье “Golden Ratio Sequences For Low-Discrepancy Sampling” авторов Colas Schretter и Leif Kobbelt.

Это невероятно потрясающий ряд, потому что он распределяет следующие значения очень хорошо и на достаточно далёком расстоянии:

Читать дальше →
Total votes 12: ↑12 and ↓0+12
Comments1

Пять важных уроков о балансе в играх

Reading time6 min
Views16K

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

1. Слишком сильный намного хуже слишком слабого


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

Причина заключается в том, что игроки стремятся к тому, что самое сильное, и используют только это. Например, в Awesomenauts есть 34 персонажа. Если трое из них будут слишком слабыми, то большинство игроков не будет ими играть, и у них на выбор останется 31 персонаж. То есть у них по-прежнему большой выбор и присутствует разнообразие. С другой стороны, если бы три персонажа были слишком сильными, то игроки играли бы только этими персонажами и не обращали внимания на остальных. Это бы сделало игру очень однообразной и она бы быстро наскучила.

Это знание можно использовать как грубый инструмент в ситуация, когда нет возможности использовать решение лучше. Например, если что-то слишком сильное, но только при определённых условиях, то вы можете решить ослабить (понерфить) этот элемент, пока его сила в этих условиях не окажется допустимой, а во всех остальных ситуациях он будет слабым. По крайней мере, он перестанет доминировать в игре.
Читать дальше →
Total votes 25: ↑25 and ↓0+25
Comments8

Быстрое создание чиптюн-музыки на открытом ПО

Reading time12 min
Views12K
image

Итак, вы делаете свою игру, добавляете новые функции и тестируете их. Да, получается совсем неплохо. Но чего-то не хватает — игра слишком тихая. Вам нужна музыка. Разумеется, можно найти и скачать бесплатную музыку из Интернета, но это не геймдев, это использование чужой работы. Так что давайте напишем собственную музыку. Вот как будет звучать написанная вами музыка [прим. пер.: перед прослушиванием уменьшите громкость]:


Это то, что у меня получилось к концу туториала

Мы собираемся написать эту чиптюн-музыку без опыта в создании музыки. Для этого достаточно немного творческих способностей и умения понять, что мелодия звучит не очень правильно.

Создавать музыку непросто. Но и не суперсложно. Да, можно стать музыкантом и изучать труд композитора и т.п., но мы делаем хобби-игру, поэтому таких знаний нам не требуется. Я пошагово объясню, как создать музыку.
Total votes 27: ↑26 and ↓1+25
Comments18

Создание простых взаимодействий ИИ с объектами окружения

Reading time15 min
Views3.2K

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

Эта статья взята из книги Practical Game AI Programming, написанной Микаэлем Даграка и опубликованной Packt Publishing. Эта книга позволяет узнать, как создать игровой ИИ и с нуля реализовать самые современные алгоритмы ИИ.

Визуальные взаимодействия являются базовыми, они не влияют на игровой процесс напрямую, но позволяют усовершенствовать видеоигру и её персонажей, сделав их часть создаваемого нами окружения, что сильно влияет на погружение игрока в игру. Это доказывает нам важность того, чтобы окружение было частью игры, а не просто помогало в заполнении пространства на экране. Подобные взаимодействия всё чаще встречаются в играх, и игроки ожидают их увидеть. Если в игре есть объект, то он должен выполнять какую-то функцию, пусть и не самую важную.
Читать дальше →
Total votes 5: ↑5 and ↓0+5
Comments0

Как создателю Prince of Persia удалось преодолеть ограничения памяти Apple II

Reading time12 min
Views30K

«Я разработал сюжетную линию „Теневого человека“. Он появляется в игре в заранее определённые моменты. В одном случае он крадёт зелье. Когда игрок уже готов схватить пузырёк, прибегает Теневой человек, выпивает его и сбегает. В другой раз, когда игрок уже собирается пройти через ворота, появляется Теневой человек, нажимает на плиту и закрывает ворота. После этого игрок падает на три уровня вниз, и ему приходится снова проделывать весь путь наверх. Я прописал эти столкновения в сюжете, чтобы игрок возненавидел Теневого человека и считал его своим врагом. Чтобы в момент, когда ему придётся скрестить с ним мечи в конце игры, он по-настоящему хотел поквитаться, ведь тот столько раз препятствовал игроку. Это был мой способ создания эмоциональной связи между игроком и противником через игровой процесс, а не кинематографические вставки».

Привет, я Джордан Мекнер, автор Prince of Persia. Это история о том, как я загнал себя в угол анимациями, а потом смог выбраться из него благодаря боям.

Я был ребёнком, росшим в Нью-Йорке в середине 70-х. Фанатом комиксов. Я любил кино. Рос на журнале «MAD», и если бы не появились компьютеры, я мог бы заняться комиксами и анимацией. Но когда в 1978 году появился Apple II, я воспринял его как машину, на которой я в первую очередь могу играть в игры дома, что раньше было совершенно невозможно. Вместо того, чтобы тратить четвертаки в местных залах игровых автоматов, я мог оставаться дома и играть сколько пожелаю в «Space Invaders» на Apple II. Кроме того, компьютер позволял мне создавать собственные игры, и меня это восхитило. Это случилось ещё до появления Интернета, поэтому почти все были самоучками. Я подписался на журнал «Creative Computing», а чуть позже — на журнал в «Softalk», в котором были статьи о том, как программировать. Я начал обмениваться опытом с друзьями, которые тоже любили компьютеры.
Читать дальше →
Total votes 99: ↑99 and ↓0+99
Comments41

Как демо Memories умещается в 256 байт

Reading time17 min
Views13K

Введение


Привет! Меня зовут «HellMood», а эта статья посвящена небольшой программе для MS DOS под названием «Memories». Эта программа имеет размер 256 байт, она выиграла в категории «PC 256 byte» соревнований демосцены «Revision» 2020 года, а также получила приз зрительских симпатий. Видео вывода программы можно посмотреть здесь, а видео с реакцией онлайн-аудитории и модераторов — здесь. Скачать релиз и оставить комментарии можно здесь. В этой статье будет представлен глубокий анализ программы, рассказано об исторических отсылках и этапах разработки. Статья выложена в sizecoding wiki. Она не только позволит вам понять внутреннее устройство «Memories», но и поможет самим создать нечто похожее. Изучите её! Если вы новичок в sizecoding-е (написании программ в рамках нужного размера) или в ассемблере x86, то рекомендуется начинать с основ этой wiki. Принципы понять легко, но с подробностями реализации разобраться бывает не так просто.

Краткий обзор


В этой статье мы будем говорить об отправленной на конкурс версии для DosBox (256 байт). В архиве также содержатся версии для FreeDos и Windows XP DOS, которые на момент написания поста работали не на всех компьютерах. Эти альтернативные версии были включены в архив как proof of concept, чтобы показать, что программа не только работает в эмуляторе. В категории «PC 256 bytes» соревнований «Revision» 2020 года можно было указать в качестве платформы «FreeDos» или «DosBox» (последняя в конкретной конфигурации). Как доказывают альтернативные версии, на самом деле можно модифицировать версию для DosBox так, чтобы она работала во FreeDos, MS DOS, WinXP и Win98, но статья будет не об этом.
Читать дальше →
Total votes 71: ↑71 and ↓0+71
Comments14

Анализ библиотеки ИИ ботов из Quake 3

Reading time4 min
Views6.7K

Изучение исходного кода ИИ уже выпущенных игр — превосходный способ изучения хитростей на реальных примерах. Quake 3 Arena — интересный образец, потому что код игры полностью выложен в открытый доступ (за исключением инструментов), а сама игра стала примером архитектуры движка ИИ на рубеже веков. В коде содержится полнофункциональный ИИ ботов для deathmatch, написанный на старом добром C; если вы понимаете синтаксис языка, изучать его на удивление просто. Наряду с простой архитектурой задач в коде присутствуют серьёзные технологии Area Awareness System (AAS), а также системы поиска пути (или маршрутизации).

Загрузка и установка исходного кода


Исходный код Quake 3 был открыт в 2005 году, поэтому мы можем свободно скачивать кодовую базу при условии соблюдения лицензии GPL. Однако если вы хотите запустить игру, вам понадобятся ассеты, не включённые в состав исходного кода. Можно воспользоваться кодом и ассетами Id Software:

  1. Скачайте полный исходный код Quake 3. Текущая версия имеет номер 1.32b и она совместима с последним патчем.
  2. Чтобы игра заработала со всеми необходимыми ресурсами, то можно использовать её полную версию.
  3. Также есть вероятность того, что можно будет запустить демо-уровни, но это зависит от версии скомпилированного движка. Не забудьте поместить исполняемые файлы в нужную папку.
Читать дальше →
Total votes 9: ↑8 and ↓1+7
Comments5

Вражеский ИИ: преследование игрока без Navigation2D и поиска пути A*

Reading time3 min
Views13K
Создаёте игру, в которой враги должны преследовать игрока? Всё начинается с простого — заставим врага бежать к игроку. Но что произойдёт, если он находится за деревом, или за углом стены? Ну, теперь враг будет выглядеть довольно глупо — упрётся в объект, перебирая ногами на месте. Не очень хорошо!

Чтобы решить эту проблему, можно использовать встроенные в Godot ноды Navigation2D или AStar (вот туториал GDQuest, посвящённый обоим нодам). Но в Helms of Fury мы использовали другой способ, который отлично подошёл нашей игре, и мы хотим поделиться им в этом туториале. Вот как это выглядит:


Приступаем к работе


Будем считать, что вы создаёте врагов как объекты KinematicBody2D и используете для управления их состояниями конечный автомат. Не знаете, что такое конечный автомат? Мне нравится эта статья с объяснением конечных автоматов, а также способов их использования. Вот ещё одна статья о реализации простых конечных автоматов в Godot.
Читать дальше →
Total votes 18: ↑18 and ↓0+18
Comments6

Создание псевдотрёхмерной гоночной игры

Reading time17 min
Views14K

В детстве я редко ходил в залы аркадных автоматов, потому что особо в них не нуждался, ведь дома у меня были потрясающие игры для C64… но есть три аркадные игры, на которые у меня всегда находились деньги — Donkey Kong, Dragons Lair и Outrun…

… и я очень любил Outrun — скорость, холмы, пальмы и музыка, даже на слабой версии для C64.


Поэтому я решил попробовать написать олдскульную псевдотрёхмерную гоночную игру в стиле Outrun, Pitstop или Pole position. Я не планирую собрать полную и завершённую игру, но мне кажется, будет интересно заново изучить механики, при помощи которых эти игры реализовывали свои трюки. Кривые, холмы, спрайты и ощущение скорости…

Итак, вот мой «проект на выходные», который в итоге занял пять или шесть недель по выходным



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

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

Можно также поиграть

Читать дальше →
Total votes 35: ↑35 and ↓0+35
Comments4

Создание псевдотрёхмерной гоночной игры: реализация холмов и готовая игра

Reading time14 min
Views3.4K

Часть 3. Холмы



В предыдущей части мы создали простую псевдотрёхмерную гоночную игру, реализовав в ней прямые дороги и кривые.

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

В первой части мы использовали закон подобных треугольников для создания трёхмерной перспективной проекции:


… что привело нас к получению уравнений проецирования координаты 3d-мира в координату 2d-экрана.


… но так как тогда мы работали только с прямыми дорогами, мировым координатам нужна была только компонента z, потому что и x, и y были равны нулю.

Это хорошо нам подходит, потому что для добавления холмов нам достаточно дать сегментам дороги соответствующую ненулевую координату y, после чего уже имеющаяся функция render() волшебным образом заработает.
Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments2

Objective-C Runtime для Си-шников. Часть 2

Reading time8 min
Views20K


Снова здравствуйте. Мой цикл статей посвящён тем программистам, которые перешли с языка C на Objective-C, и хотели бы ответить для себя на вопросы «каким именно образом Objective-C основывается на языке C?» и «как это все происходит изнутри?».

Большое спасибо всем за обратную связь, именно проявленный вами интерес служит для меня стимулом продолжать свои статьи по доскональному изучению Objective-C Runtime. Я начал эту часть именно с тематики своих статей, потому что хочу сделать пару уточнений:

  1. Мои статьи — не руководство по Objective C. Мы изучаем именно Objective-C Runtime настолько низкоуровнево, чтобы понимать его на уровне языка C.
  2. Мои статьи — не руководство по языку C и дебаггерам. Мы опускаемся до уровня языка C, но не ниже. Поэтому такие вопросы, как представление данных в памяти, я не затрагиваю. Предполагается, что вы знаете все это и без меня.


Конечно, статьи будут интересны так же и другим категориям программистов. Но имейте ввиду эти два пункта.

Если вы еще не читали первую статью, то настоятельно рекомендую прочитать сначала её: http://habrahabr.ru/post/250955/. А если уже читали, то добро пожаловать под кат.
Читать дальше →
Total votes 38: ↑37 and ↓1+36
Comments16

Making of NES gameinvitro «MULTIDEFENDER»

Reading time13 min
Views1.4K
Итак, конец марта, на носу Revision 2020, впереди ещё долгий месяц самоизоляции, и всё началось, как обычно, с того, что мы решили написать очередную демку для NES. Конечно, “демка” — это немного громко сказано. Исходя из собственных возможностей и количества оставшегося времени до дедлайна, курс был взят на создание простенькой инвитры к Мультиматографу (российское demoparty в Вологде), состоящей из скроллера с информацией и нехитрого эффекта эквалайзера, основанного на логотипе Multimatograf.


Читать дальше →
Total votes 17: ↑17 and ↓0+17
Comments6

Самая короткая программа вывода десятичного числа

Reading time7 min
Views16K
В 1984-ом году вышла культовая книга Стивена Леви “Хакеры: герои компьютерной революции”. Существует любительский русский перевод, но он далёк от идеала. Я было взялся исправлять неточности в нём, положив рядом английский оригинал (кстати, и он не без греха), да забросил после второй главы. Так или иначе, хочу обратить ваше внимание на фрагмент (можно прочитать его в виде отдельной статьи), посвящённый подпрограмме печати числа в десятичной системе. Насколько можно уменьшить такую программу? Каков предел?
Читать дальше →
Total votes 73: ↑71 and ↓2+69
Comments43
1
23 ...

Information

Rating
Does not participate
Location
Могилев, Могилевская обл., Беларусь
Date of birth
Registered
Activity