Size: a a a

2020 December 18
javawatch
Стыдное признание - писал сегодня ручкой по бумаге, впервые за последние 15 лет.
Потому что надо рисовать диаграммки, в формате чего-то среднего между UML и комиксами.

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

Пойду сейчас окончательно зашквариваться - куплю в книжном магазине несколько тетрадок и цветных ручек, буду писать и плакать, писать и плакать. Плакать потому, что бумажные заметки имеют все те же недостатки, по которым я не читаю бумажных книг.
источник
2020 December 19
javawatch
То, что я называл для себя общим словом "Spring", потому что в Java-мире нет ничего лучше, во внешнем мире называется ECS - Entity Component System.

Системы - это всякие @Component (не считая репозиториев), энтити - это @Bean, стейт энтитей - это data transfer objects которые ты руками оформил как pojo. Каждая система точно так же на входе заявляет тупл зависимостей (@Autowired поля).

Так ведь можно рассказывать о Java какому-нибудь C++-нику, чтобы он меньше офигевал от набора сказанных жутких слов и меньше тебя ненавидел 🙂
источник
javawatch
- Если вы заботитесь о своём пищеварении, мой добрый совет – не говорите за обедом о большевизме и о медицине. И – боже вас сохрани – не пишите до обеда на Java, JavaScript, Python и C++.

– Гм… Да но ведь других языков нет.

– Вот ни на каких и не пишите. Вы знаете, я произвёл 30 наблюдений у себя в клинике. И что же вы думаете? Поциенты, не пишущие на императивных языках, чувствуют себя превосходно. Те же, которых я специально заставлял писать тесты на Python, – теряли в весе.

– Гм… – с интересом отозвался тяпнутый, розовея от супа и вина.

– Мало этого. Пониженные коленные рефлексы, скверный аппетит, угнетённое состояние духа.
источник
javawatch
Жабо-боярин сравнивает две строки. Вместо сравнения простой функцией, он пишет свое (это в общем, нормально). И использует вместо взятия символа в позиции - поиск символа в строке. Как результат - подходит любой пароль хеш которого не содержит символов с мелкими кодами.

Ах да, этот жабобоярин - из криптолибы BouncyCastle.

https://www.bleepingcomputer.com/news/security/bouncy-castle-crypto-authentication-bypass-vulnerability-revealed
источник
javawatch
Вчера выбирал, в чем вести заметки.

1) Многие советовали Adobe Sketchbook. А еще он стал бесплатным!

2) К сожалению, к тому чтобы вести заметки он совершенно неприспособлен. Все кто его советовал - либо врут как дышат, либо страшно мучаются.

3) Вместо него я перепробовал кучу всякого сомнительного софта и остановился тупо на OneNote. Он воспринимает  ввод с планшета, умеет сглаживать рукописные буквы. Вставляет текст с клавиатуры и картинки. Синхронизируется. Есть управление записными книжками. Пойдёт.

4) Другая рекомендация - iPad Pro, но кажется, его имеет смысл покупать только когда закончится локдаун и нужна будет мобильность. То есть, с шансами - никогда.

5) Но кажется, всё это баловство, и проще всего писать на бумаге.
источник
javawatch
В сетевой игре у нас нет "настоящего времени", есть история и её симуляция. Клиент симулирует мгновенно, сервер - с отставанием. Нужно, чтобы симуляция на сервере и клиенте приводила к примерно одинаковым результатам (может быть, не идеально одинаково, но "достаточно одинаково")

Вижу три варианта:

1) Написать два разных языка/рантайма на клиенте и сервере. Придумать некий стандарт, "абстрактную виртуальную машину", которая будет проигрывать историю. Воплотить её на разных технологиях два раза: и на клиенте, и на сервере. Сказать, что конкретная реализация написана корректно, если для одной и той же истории она выдает те же результаты, что абстрактная машина из стандарта. Это чертова гора головняка, написать в точности один и тот же код на разных языках - непросто.

2) Написать симуляцию на одном и том же языке. Это означает либо отказ от браузера (и тогда писать можно на чем угодно). Либо написание на универсальном языке (или сервер на JavaScript, или клиент на WebAssembly).

3) Объединенный вариант: на универсальном языке написать интерпретатор какого-то простого скриптового DSL, единственная суть которого - переключение состояний. Тогда вместо стандарта будет готовая реализация: скрипт написан корректно, если работает на свежей версии интерпретатора DSL.

Заметки про третий вариант:

- Если сам по себе JS/V8 работает достаточно быстро (когда включается JIT), то интерпретатор, написанный на JS должен работать чудовищно медленно. Значит, остаётся только Wasm.

- Интерпретатор DSL сам по себе может быть ценностью, потому что может дать возможность делать какие-то вещи, недоступные для обычного языка. Например, обращать время для всего промежутка между сэйфпоинтами (в строго однопоточном случае с обратимыми операциями - для многопоточности нужен happens-before и это ужас).

- DSL на самом деле может быть простым подмножеством какого-то языка типа JavaScript, и тогда "прямое" выполнение может работать очень быстро - прямо на интерпретаторе первого уровня. Тормоза случатся только про ревинде, но к сожалению это должно происходить очень часто - примерно половину времени.
Выглядит сложно. Я начинаю догадываться, чем занимаются все эти игропрограммисты, не зря свой хлебушек жуют.
источник
2020 December 20
javawatch
Отличное видео про архитектуру риплеев в Overwatch.

https://www.youtube.com/watch?v=W4oZq4tn57w

(Кроме того, в самом начале там уточняется терминология, которая используется в видео Тима Форда простыми словами.)
источник
javawatch
Про "обращаемый язык", про который писал вчера. У меня была наивная мысль для каждого листа AST сделать обратную операцию и отмотать историю.

Сейчас погуглил, это целая научная проблема. Пока нашел хороший кейворд для гугления - "инверсная семантика", а во-вторых есть мастер тезис про обращаемые объектно-ориентированные языки. В отличие от простого Janus, с разбора которого начинается тезис, автор пытается построить полноценного обратимого ООП-монстра. Мне такое, конечно, не нужно, но это может оказаться хорошим гидом по граблям.

https://arxiv.org/pdf/1707.07845.pdf
источник
javawatch
Мартин Клеппманн (один из самых крутых специалистов по CRDT) выпустил цикл коротких лекций про распределённые системы

https://www.youtube.com/watch?v=UEAMfLPZZhE&list=PLeKd45zvjcDFUEv_ohr_HdUFe97RItdiB
источник
2020 December 21
javawatch
Я пока читаю книжку про синтаксис C++  и наверное, пропаду от этого на пару дней (невообразимо нудное занятие).

А пока хочу показать целый ДОКЛАД про то, о чем я писал вчера - реверсируемый язык, который написали в Blizzard для Overwatch. (С Ютуба они его удалили - боятся конкурентов лол? Поэтому вот этот странный видеосервис)

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

Важно, что в целом "отмотку времени" пользователь визуально не видит. Даже если отмотка затрагивает несколько кадров, её симуляция делается внутри одного кадра. Т.е. ты можешь выглянуть в окно и пойти пить чай, и внезапно телепортироваться назад во времени к окну, где ты стоишь с простреленной головой - это произойдет единомоментно. Важно, что это именно отмотка, а не восстановление полного снапшота состояния всего игрового мира.

То есть, у них клиент на каждый (!) пакет, полученный с сервера, начинает отмотку времени. Каждый тик сервера устроен так: отмотка времени до сейфпоинта, накладывание дельт которые прислал сервер, догоняющая симуляция ввода из буфера. И снова.

https://www.bilibili.com/video/av74390948/
источник
javawatch
Ребятки, не будьте же вы такими [как бы так сказать слово "тупыми", чтобы не было токсично] - эээ консервативными!

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

Давайте еще накинем фрейм поверх фрейма: реализована, но только в одной-единсвтенной игре. Согласно общей идее эээ консервативности, ответ на такое - ну, значит дичь какая-то!

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

Есть вот такая картинка, с вашего позволения я на ней порисую, чтобы показать в чем у вас проблема
Картинка получена из отличной книги "crossing the chasm".

Иногда chasm - это не минус, а отличная штука. Во-первых, можно писать саркастические посты в телеге про тех, кто справа. Во-вторых, меньше народа (слева) - больше кислорода! 🙂
источник
javawatch
Рома Шапошник подогнал раширенную картинку
источник
2020 December 23
javawatch
Устройство неткода в Tribes. Очень старый документ, на который ссылается сейчас половина исследований на эту тему

https://www.gamedevs.org/uploads/tribes-networking-model.pdf
источник
javawatch
А меж тем, Виталий таки запилил новый питоновский парсер аргументов командной строки, который получает информацию из тайпхинтов

https://github.com/khud/typedparse
источник
2020 December 24
javawatch
Устройство неткода в Halo Reach

https://www.gdcvault.com/play/1014345/I-Shot-You-First-Networking
источник
javawatch
Это комментарий к докладу по Halo Reach

Программисты: ваши видео-туториалы - тупые! Там информации с гулькин нос! Чего можно сказать за пять минут!

Тоже программисты: полтора часа видео - сложна '((((( (рыдают под столом)
источник
2020 December 31
javawatch
источник
2021 January 01
javawatch
На правах рекламы. Комрад написал статью на Хабр про то, как начал учиться рисовать.

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

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

https://habr.com/ru/post/534538/
источник
2021 January 02
javawatch
Пример того, почему договоры нужно действительно читать.
По этому договору издатель имеет буквально всё, а разработчик - доедает хуй без соли.

https://dtf.ru/gamedev/296605-put-indi-samoubiyc-razbor-dogovora-s-raw-fury
источник
javawatch
Немного про зрение и игры. Открыл сейчас суперспособность глаз, сижу радуюсь 🙂

Очки надел где-то классе в 9-м (специально спросил у матери). Зрение сразу было что-то в районе -2, сейчас село до -3 с астигматизмом. Астигматизм в моем случае значит, что все контуры двоятся. Это раздвоение не очень большое и фиксится мозгом в софтварном режиме - если специально не обдумывать содержимое картинки, кажется что картинка совсем даже не двойная.

Но общая проблема остается: во-первых, софтварный режим жрёт ресурсы мозга, без очков устаешь медленней. Во-вторых, теряется "объемность" картинки, если "нормальные" люди видят мир трехмерным по-умолчанию, то у меня он по-умолчанию 2,5D. В-третьих, это провоцирует к довольно стандартным вещам: например, не здороваться на улице со знакомыми. Даже если надеты очки, на осознание - знакомый это человек или нет может потратиться крошечное усилие воли и время.

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

Сейчас учился стрелять в компьютерной игре и отрефлексировал ЕЩЕ один очень важный ништяк. Я не вижу движений. Я так привык, что всё равно не доверяю картинке из глаз, что вся реальность для меня - это набор "мгновенных снимков". Мозг очень хорошо натренирован, чтобы по мгновенному снимку вычислить карту теней, построить 2,5D и тому подобое.

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

И вот я сел и решил взять и осмысленно прокачать предиктор. Беру в туннельное зрение цель и слежу за ней глазами. Можно вместе с мышкой, но не обязательно, это два разных элемента - предсказание движения и мышиная реакция "трейсингового прилипания".

И о чудо, через некоторое время случайные картинки начали выстраиваться в плавные, цельные движения! Это странное и очень приятное ощущение. Чем больше тренируюсь, тем более мелкие движения начинают сливаться в одно целое. Даже пиксельный дребезг и то сливается. Мозг делает это сам - похоже, это какая-то встроенная в мозг фича, которая всегда была, но раньше не особо использовалась.

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

Остается еще куча вопросов. Например, у меня такой эффект включается только в режиме туннельного зрения. То есть, я должен усилием воли сконцентрироваться на объекте, сказать - "это - цель, следи за ней", и он следит. Может ли эта фича включаться в режиме рассеянного или бокового зрения?

Может, кто-то учился стрелять и может рассказать, как это вообще работает у "нормальных" людей с идеальным зрением?
источник