spiiin: (Default)
Весна в этом году оказалась какая-то короткая совсем. Получилось провести её не так, как планировал, большую часть времени пришлось приводить в порядок старый дом, но зато удалось немного походить на природе в Крыму. Успели погулять по Эски-Кермену, Ласпи, съездить на Кутузовские Озёра и пройтись по пляжам от Балаклавы в сторону Инжира.

На Эски-Кермене залез в какую-то пещеру на высоте метров 400, в потолке нашёл останки раковин аммонитов:


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

Хотели сходить в Черноречье, однако теперь там ООПТ, и хозяйничают казаки с байкерами, которые выгоняют туристов.

Сейчас снова зарядили дожди (вроде как на всю неделю) – отличное время, чтобы пить чай на балконе.

Tags:
spiiin: (Default)
Интересная глава из книги. Собственно, как блоки являются строительным элементов в 2d-уровнях, так и 3d-блоки (выровненные по сетке) зачастую являются составным элементом 3d-уровней.

http://level-design.ru/pro-ld-book-index/03-modular-level-design/
Tags:
spiiin: (Default)
Felix The Cat - одна из немногих игр для NES, использующая сжатие данных описания уровня.

Из интереса разобрал формат сжатия (почти не лазил дизассемблером, просто потыкал отдельные байты своими утилитами и проанализировал изменения на экране в эмуляторе).

Уровень состоит из блоков 2x2 (с аттрибутами палитры и физики). Блоков используется 128.

Все подуровни описываются одним массивом, это необязательно в движке, но, видимо, так было удобнее разработчикам). Каждая вертикальная линия описывается отдельно, уровень описывается как массив указателей на линии, если линия полностью повторяет предыдущую, просто используется указатель на эту линию. Повторение линий активно используется, где-то 40-50% линий - повторы. Также в указателях на линии несколько бит используются для кодирования объектов.

Линии сжимаются с помощью алгоритма RLE, после чего из сжатых пар (количество повторов блока, номер блока для повтора) образуется словарь и повторы заменяются на слова из словаря. Обычные блоки имеют индексы от 0x00 до 0x7F, слова из словаря нумеруются от 0x80 и дальше, до 124 слов в словаре.

Последние 4 значения 0xFC-0xFF используются для задания второй формы сжатия. Она устроена интереснее и используется на уровнях с мозаичным фоном (например, узоры на стенах пирамид на уровнях 2-2 и 2-3).
В этом случае в начале линии может использоваться команда из двух байт (номер_базовой_линии, кол-во блоков из базовой линии). На уровне используется 4 базовые линии (их номера кодируются от 0xFC до 0xFF), которые описывают зацикленную мозаику. Первые несколько блоков берутся из этой линии, а затем нижняя часть дорисовывается обычным способом.
Пример таких начал линий на скриншоте:



На нём выделены рамками повторяющиеся базовые линии.

Эти три приёма (индексирование линий, RLE-словарь и базовые линии) позволяют сжимать уровни размером в 18 килобайт до 4-5 килобайт.

Tags:
spiiin: (Default)
CENTURY XXII
Азы использования программ:
Интерактивная геометрия на примере кривых Безье
Эпическое появление белого квадрата. Базовые принципы анимации.
Компьютер vs бумага 4: Wolfram Mathematica

Базовые, но хорошие объяснения что, как и зачем.
Пока смотрел, наткнулся на ещё один забавный канал Sci-One TV, образовательной силы тут никакой особенной нет, зато иногда забавные видео- и аудиоэффекты:
КАК ОБМАНЫВАЮТ ПОЛИТИКИ
САМЫЕ ВАЖНЫЕ ИДЕИ ОБ ЭВОЛЮЦИИ | КОВЧЕГ ИДЕЙ
Рассчитано на масс-публику, агрессивный пиар в соцсетях и борьба со на всякими тв-стайл передачами о теориях заговора, медицине, религии, психологии, инопланетянах, искусственном интеллекте, гмо и прочему подобному.


Tags:
spiiin: (Default)
http://spiiin.github.io/CadEditor/tutorial-powerblade2.html

Вторая статья по исследованию формата уровней игр и составление конфига для редактора уровней CadEditor, на примере Power Blade 2 [NES]. Работа с дампами памяти и начало работы с отладчиком.


Все статьи по редактору CadEditor .

Tags:
spiiin: (Default)
Прочитал сабж, пока прогонял несколько раз часовые тесты многопоточной программы-парсера в поисках хитрых ошибок. Целостной картины после книги не составилось, поэтому просто надёргал кусочков (не всегда цитат) для небольшого конспекта из разных глав.
Read more... )
Tags:
spiiin: (Default)
(Лично мне на политику жж, вообще говоря, пофиг, просто захотел почистить список друзей от мёртвых журналов, сообществ, а также от тех, кто переехал в dreamwidth, чтобы 2 раза их не читать, а через RSS-агрегатор это сделать намного удобней, другого способа получить последие несколько записей из каждого журнала/сообщества я не нашёл).

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

RSS я не пользовался со времён закрытия Google Reader'а, лень было подбирать другую программу. Сейчас взял Inoreader, на первый взгляд он хорош.

Сам ЖЖ утверждает, что экспорт всей ленты друзей доступен только пользователям с подключенным пакетом "профессиональный". Не знаю, что это значит, но по ссылке http://www.livejournal.com/tools/opml.bml?user=<USERNAME> можно скачать файл со списком всех лент друзей в формате opml, который можно импортировать в любую программу по чтению RSS.

Единственное, что мне не понравилось, что в качестве названий блогов жж выдаёт название журнала, в котором большинство пользователей пишут шутки, афоризмы и прочие малопонятные для распознавания журнала вещи, поэтому я прогнал этот файл через такой python-скрипт, который заменяет название журнала на ник пользователя, по которому намного проще узнать журнал:

with open("lj.ompl") as f:
    ll = f.readlines()
 
for l in ll:
  if l.startswith("<outline"):
    for m in re.finditer('<outline text="(?P<t1>.*?)" xmlUrl="http://(?P<t2>[a-zA-Z0-9_\-]+).livejournal.com/data/rss" />', l):
      g1 = m.group('t1')
      g2 = m.group('t2')
      ans.append (l.replace(g1, g2))
 
 with open("lj_fixed.ompl") as f:
    f.writelines(ans)



Tags:
spiiin: (Default)
http://spiiin.github.io/CadEditor/tutorial-tmnt2.html

Написал более подробную статью про использование инструментов для поиска данных в NES-играх и добавление игр  в редактор уровней.
(на основе поста о формате блоков 4x4 + 1 байт атрибутов)

Tags:
spiiin: (Default)
Я ЛЮБЛЮ.
Запах моря и травы
Когда едешь в электричке мимо леса весной с открытым окном
Лежать на большой куче листьев
Смотреть на облака
Бегать по пляжу с собакой
Показывать фигуры из теней руками
Пить дрянной кофе из автоматов в чужом городе рано утром
Когда кладут сахар в чай и не спрашивают, сколько ложек
Мяту
Наблюдать за насекомыми
НЕ ЛЮБЛЮ.
Рассуждения о том, о чём понятия не имеешь и приписывание в ходе рассуждений этому каких-либо свойств. Вместо того, чтобы взять и попробовать самому.
Фаллометрия там, где нужен компромисс.
Упорное игнорирование фактов. Если 5 раз решить задачу не вышло, пора сменить метод.
Коллективное пинание слабых.
Люди, которые про всех своих прошлых знакомых говорят, что те их предали, обидели и были не правы.
Равнодушие ко всем, кроме себя.
Безыинициативность в жизни.
spiiin: (Default)
В порядке убывания.

1. Самое главное, чтение ленты интересных записей друзей. Вместо этого давно стоило бы пользоваться RSS-агрегатором.

2. Как личный дневничок для заметок про то, чем занимаюсь.
Ссылки оставлю пока на жж, так как записи были там.
Полезное
- про исследование nes-игр и всякого (больше для себя, чтобы не забыть чего, статьи поупорядоченнее писал для хабры). tags: nes, hack.
- иногда всякие софтово-хардовые мелочи. tag: dev, soft, hardware, codespell, половина остальных тегов журнала
- про жонглирование. tag: juggling

Бесполезное
- ещё частенько про игры (как с позиции геймера, так и разработчика). tag: games
- шутки-самосмейки. tag: fun
- цитатки из книг. tag: книги

*Глянул статистику, по каким запросам меня находят в поисковиках - кроме разных ромхакерских запросов это ещё "сборка otg кабеля с зарядкой" (я это написал от удивления, что у меня эта хрень заработала) и неизменно популярное "пауки и наркотики" (хз, чего это так интересно всем).

Про жонглирование и ромхакинг отдельные проекты, наверное, стоило бы вести, и писать туда более развёрнуто не только для себя, может быть, поищу какую-нибудь платформу для этого. Medium выглядит красиво, не знаю, насколько он удобен для такого формата. Ну или standalone вообще.

3. Склад ссылок, которые не хочется потерять. tag: link

4. Пометки о том, что хочу сделать.

5. Тексты ни о чём и для себя. tag: tales

6. Хотелось бы ещё писать, но не получается:
– про путешествия по миру, походы, и необычные крымские места (про это вечно лень подбирать фото, да и очень много людей пишут про путешествия в общем, непонятно для кого писать - в жж я мало кого знаю лично, ну и надо уметь писать интересно). Обычно всё заканчивается выкладыванием фоточек в социальные сети.
– про работу с информацией в общем (сбор, в том числе и программами, проверка фактов, ловушки сознания, защита от агрессивной информации, исследование себя). Про это писать сложно, и тоже не очень понятно для кого или для чего, ну и нет уверенности в том, что я разбираюсь в этом достаточно хорошо.

Пока перекину блог в dreamwidth, и расчищу старые записи, а дальше видно будет.


Tags:
spiiin: (totoro)
Обновил мажорную версию своего редактора CadEditor уровней для кучи NES и SMD игр.

За 3 года добавил:

- Поддержку новых режимов аттрибутов (бит палитры и свойств) – поддержка аттрибутов на уровне блоков (уже была, игры Capcom) , макроблоков (Tiny Toon Adventures / серия Ninja Gaiden), описание аттрибутов отдельным слоем поэкранно (Contra Spirits / Mickey Mania / Batman).
- Поддержку иерархий макроблоков любого уровня вложенности (рекорд: Rokin' Kats – 4 уровня иерархии).
- Систему плагинов для редактирования конкретных аспектов игр (примеры - плагин для редактирования глобальной карты или плагин для редактирования фонов в SMD-играх, доработанный редактор фреймов анимаций для Capcom-игр).
- Конфиги для отображения блоков и экранов для десятка сеговских игр (в основном использующих компрессор RNC, для которого есть пакер). Заметки по форматам уровней: Раз, Два, Три. (SMD Earthworm Jim 1-2, Alladin, Jungle Book, Mickey Mania, Pitfall etc)
- Написал универсальную утилиту для поиска блоков и аттрибутов известных форматов для NES игр. Она магическим способом обнаруживает не только известные форматы блоков, но также находит и те, на которые не была запрограммирована!
- С помощью этой утилиты открыл наиболее часто встречающийся способ кодирования блоков в NES играх – 16 байт на блок 4x4 и 1 байт на палитру. Добавил поддержку таких блоков в редактор и описал конфиги для двух десятков игр с таким форматом (серия TMNT, серия Battletoads, серия Adventure Island, серия Power Blade, Jackal, Contra Force, Jackie Chan Action Kung Fu etc.)
- Улучшил утилиту Autocorrupter, для создания скриншотов изменных данных об уровне и их последующего анализа. Утилита используется для упрощения генерации конфигов картинками и блоками для редактора.
- Немного улучшил код редактора и добавил возможность использовать его как библиотеку, управляя ею из скриптов на языке Python (с использовнием Jupyter Notebook). Скриптование своих же программ позволило перейти от реверса конкретных игр к реверсу всех игр на платформе вообще.
- Написал несколько обзорных заметок про ромхакинг и возможности редактора.
- Запустил кампанию на Patreon, собирающую по 3$ в месяц на пиво :)
- Суммарно в проекте около 30к строк кода, 500 конфигов уровней для 85 разных игр.

Зачем всё это?
Если долго и упорно годами бить в одну точку, пространство раскрывается и показывает тайны скрытых неизведанных миров между строчек ассемблерного кода. Даже если эти миры существуют только для тебя и ещё нескольких сотен энтузиастов по всему миру.
Tags:
spiiin: (totoro)
А жж в качестве промо-материалов подсовывает политику только по российским айпишникам или вообще всем теперь?

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

Другими словами, если где-то находится яма с дерьмом, надо иметь возможность пройти мимо и не обращать внимания, а не быть в неё окунутым с вопросом, "ну правда, же - полное дерьмо?".
Tags:
spiiin: (totoro)

Отличное роуд-муви про то, как Элайджа Вуд и Евгений Гудзь едут с дедом по Украине в поисках к посёлку Траченброд.
spiiin: (totoro)
Как в python собрать функцию, которая после вызова pickle.loads совершит любое действие.

Программирование с помощью виртуальной машины pickle:
http://media.blackhat.com/bh-us-11/Slaviero/BH_US_11_Slaviero_Sour_Pickles_WP.pdf

Сериализация функции:
https://www.cs.uic.edu/~s/musings/pickle/

Выполнение кода и открытие сокета с remote shell:
https://blog.nelhage.com/2011/03/exploiting-pickle/
Tags:
spiiin: (totoro)
Как-то странно инстаграм встраивается
https://www.instagram.com/p/BQqrNq9AuYL/
Где-то год учился делать этот трюк, всё ещё криво, но уже немного получается.
Tags:
spiiin: (totoro)
После введения ужесточённых правил прохождения таможни США программистов могут проверить на знание алгоритмов и структур данных. Не зря в универе балансировку бинарных деревьев изучали, не зря!

https://twitter.com/cyberomin/status/835888786462625792
Tags:
spiiin: (totoro)
https://www.root-me.org/en/Challenges/App-Script/

Отличные челленджи на поиск уязвимостей в скриптах на различных языках – достаточно сложные (решения минимум в 2-3 этапа), требуют знаний в нескольких областях одновременно, не все решения запалены в интернете. Обнаружил, что знаю Python достаточно, чтобы почти полностью самому в них разобраться. Прошёл все пять:

В принципе, и так известно, что не надо совать в eval и pickle.loads ничего, что пришло от пользователя, но после выполнения таких заданий понятно, что не надо так делать СОВСЕМ (даже максимально отфильтровав ввод), потому что даже с очень сильными ограничениями пользователя, он всё равно сможет запустить любой код, который ему захочется.
Tags:
spiiin: (totoro)
Нашёл замечательную библиотеку Selenium по управлению браузерами, как headless (Phantom-JS/HTMLUnit), так и "настоящими" (Firefox/Chrome/IE/Safari и ещё десяток third-party драйверов для браузеров на любой вкус) локально или удалённо.

Позволяет "нажимать" на элементы, ожидать результатов асинхронных запросов по условию, выполнять JavaScript в контексте DOM-страницы и вообще почти любые фишки, которые умеет браузер.

Когда-то юзал для выполнения простых JavaScript на странице Greasemonkey, а для парсинга сайтов mechanize (уже мертва, приходится дописывать нужные фичи самому), теперь с этим проектом можно пойти намного дальше и наавтоматизировать всякого на Python или C# (а также Ruby, Java или JavaScript).
Tags:
spiiin: (totoro)
В Python else можно использовать не только как альтернативную ветку для if, но как альтернативную ветку для циклов for/while (выполнится в случае, если цикл не прерывался с помощью break), и как альтернативную ветку для try/except (выполнится в случае, когда исключений не было).

Пример из документации
Tags:

Profile

spiiin: (Default)
spiiin

September 2017

S M T W T F S
     1 2
34 567 89
101112131415 16
17181920212223
24252627282930

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 24th, 2017 05:46 pm
Powered by Dreamwidth Studios