Как стать автором
Обновить
53
0.4
Дмитрий @bogolt

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

База не защищает полностью от ошибок с состоянием гонки.

Приведу пример.

Апи1. Поиск объектов. Передаем список желаемых ключей, возвращает подходящие объекты

Апи2. Создание нового объекта.

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

Что оказалось. Запрос на поиск объекта не учитывал один из ключей, то есть фактически запрос был

`select item from items limit 1;`

Это прекрасно работало для только что созданного объекта, поскольку бд по умолчанию возвращала именно его, но уже не работало когда множество объектов одновременно создавались разными потоками.

А как же тестировать тогда race-condition и другие проблемы синхронизации разных потоков? Тут нам как раз нужна общая база и единственный инстантс бэкенда. И тогда ужу тестировать так в многопоточном режиме, чтобы эти проблемы вылезали в тестах.

Зато если фронт отошлет на бэк операцию "удалить мой аккаунт" вместо "просмотри мою почту" то цена ошибки фронта оказывается не менее велика.

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

да про прихоть понимаю. Кстати с текстовым файлом я наверное тоже погорячился, но вот Sqlite думаю подошел бы идеально под задачу. Благо его можно добавить в проект просто как как еще один сишный файл и сразу же получить все преимущества базы данных без всякой мороки с настройкой базы или коннектора к ней.

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

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

А то пока подключите бд, потом настроите сохранение статуса игры, потом игру по сети, потом составление игровых команд, потом портирование под разные ОС, потом портирование под мобилки... а игру делать еще и не начинали.

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

И чем этот скрипт лучше экслея ?

почему читаемость мнимая?

по вашему код

y := make([]int, 0, len(something))

читается также легко как и:

x := []int{}

Потому что для меня например это приведет к тому что я пойду проверять что там за массив something то есть эта строка кода меня пусть немного но отвлечет

Но самое ужасное что что у ноута нет ни одного разъема слева. Ужас просто!!!

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

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

make([]T, 0, n)

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

Зато легко пропустить ошибку в стиле

newarr := make([]int, len(arr), 0) // кто-то перепутал параметры местами

newarr = append(newarr, 1) // теперь у нас в начале неожиданные нули

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

В чем развод? Когда вышла AMD версия для первой модели то появилась возможность заказать себе материнку и поменять внутренности ноута оставив все остальное. Кроме того всегда можно купить запчасти, или новые порты в usb-c. А тут вышла модель 16'' ( до этого были только 13'' ).

Так и представляю ситуацию: "хочу распространить информацию у вас на компьютере. Информация хранится в файле danger.exe чтобы ее правильно распространить обязательно запустите файл. Иначе вы нарушаете мои конституционные права!"

Конечно, ведь Кафка в школах уже давно заведует учебными планами и расписанием.

Вот на что я отвечал в комменте и что съел Гениальный Усоврешенствованный Хабраредактор

Увы если я ставлю это все в цитату то текст съедается опять, оставлю как есть. Редактор Хабра - ты ЛУТШИЙ!


Как всё начиналось. Baldur’s gate 1

Игра задала ряд трендов, определив вектор развития RPG на последующее десятилетие, а именно:

функция
паузы во время игрового процесса — позволяла обдумать действия для
выстраивания удачной стратегии боя и задать команды, распределить
оружие, применить зелья, а затем наслаждаться тем, что получилось, или
расстраиваться от исхода;

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

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

глубина и вариативность
повествования — наличие множественных выборов во время прохождения, а
также реальное влияние выбора игрока на сюжет сделало BG реиграбельной, а
возведение повествования в центр и степень его проработки делает игру
ценной как художественное произведение;

кастомизация и система развития — игра оставляет пользователям простор для проработки своего персонажа, что канонично;

моральная
сторона вопроса — решения игрока имеют значение для мира Baldur’s Gate,
поэтому прохождение становится более личным и обдуманным.

Вы может не заметили но я писал про БГ1 и БГ2, именно про них была цитата выше. В обоих этих играх нет возможности испугать крыс или спрыгнуть геройским приземлением. Квесты там довольно линейны, и самый крутой вотэтоповорот в них это "он оказывается наниматель не белый пушистый а злодей, давайте ка лучше убьём вот это" причем, вскрывается это после одного диалога. Всё.

ЗЫ, прочитал свой коммент и понял что Гениальный Новый Хабраредактор просто не опубликовал половину моего коммента, где была цитата относящая с к тому какими крутыми и вариативными были БГ1 и БГ2

И где вы все это увидели в первой и второй БГ?

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

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

Вариативность повествования? В игре поделенной на главы, все главы идут одна за другой, пока не пройдешь определенные действия в предыдущей новая не откроется. Ну такая вариативность. Или там решили вы играть за зло... но ничего принципиально не поменялось. Цели те же, ну там пара квестов будут другими. Да в отдельных квестах конечно есть возможность выбора, но она как правило локальна и мало на что влияет ( ну там выбрать деньги или репутацию, убить или спасти... )

Система развития? Вы говорите про прибитые гвоздями классы из второй редакции? Да конечно вы их можете выбирать.

Решения игрока там ни на что глобально не влияют.

Потому что могут.

Выглядит впечатляющие, но лично меня отталкивает несколько моментов

  1. Привязка с телеграмму. Да я понимаю что это модно и молодежно, и боты, везде телеграмм боты, но мне неудобно как средство доступа к важному хранилищу использовать проприетарный софт, осознавать что данные которые я там храню непонятно где находятся и неясно когда исчезнут. Я за нормальные открытые протоколы ака HTTP(s)

  2. Как следствие пункта 1. привязка к владельцу аккаунта. Так уж повелось что наполнение подобных баз обычно дело рук множества участников. Одно дело если наполняется скажем git репозиторий, тогда пропажа владельца ничего не меняет, просто создадут клон репы и пойдут дальше наполнять.

Информация

В рейтинге
1 608-й
Зарегистрирован
Активность