Обновить
3

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

Отправить сообщение

Я лично использовал вот этот гист: https://gist.github.com/cliffano/77a982a7503669c3e1acb0a0cf6127e9

Просто декомпильнуть JARы и оба, там уже деобф. Контекст: до 26.1 все версии были обфусцированы, и деобфусцировались силами сообщества, которые поддерживали маппинги (остался даже ресурс https://mappings.dev/main.html). Но начиная с 26.1 Mojang выкладывают исходники без обфускации, так что да.

Касательно ядер: банжи ультрастарый и давно вытеснен Velocity, Purpur тоже как форк немного сомнителен по патчам, Paper жеж золотой стандарт. Очень рекомендую покопать Folia: практически перепись модели тика с однопотока на региональную (каждый поток владеет своим регионом, там же все сложности синхронизации меж регионами, поломки API итд итп).
На покопаться: есть такой мод, в который я контрибьютил в начале 2025, пытаясь утащить патч на асинхронный pathfinding (а тащить такое в одно-поточный тик Minecraft-сервера это ОЧЕНЬ БОЛЬНО), называется Villager Recruits. https://github.com/talhanation/recruits, описание мода туть https://modrinth.com/mod/villager-recruits (заблокирован в РФ как и курсфорж, открывать под тремя буквами)
Как раз на оценить ужасы миксинов (про них можно почитать на вики FabricMC) и кода ядра Minecraft, которое втихую было стащено прямо в эти же миксины и некоторые части кода (да, буквально некоторые классы это копипаста кода ядра).
Брал патч отсюда https://github.com/Bloom-host/Petal очень интересное экспериментальное решение от Bloom (известный хостер), но, к сожалению не взлетело, патчи скажем так плохо накладываются на код.

Из эталонного ещё приведу Minecolonies https://github.com/ldtteam/minecolonies, прекрасная работа по оптимизации и пример, как код десятилетней давности уживается при обновлениях (а в 1.13 Можанги пересобачили почти всю архитектуру Minecraft).

Жирный плюс автору.

Предлагаю запустить анализатор на исходниках NMS (net.minecraft.server) на версиях 26.1+ (код этих версий деобфусцирован).

Сколько вы хотите нейрослопа?
Да!

Видимо, в Антропик забыли древнее учение мудрых: "Чем меньше кода решает проблему, тем лучше"

> Крупнейшая соцсеть в РФ сделала рывок, перейдя с технологий 2010 года на технологии 2016 года

Даже звучит как заголовок с Панорамы, настоящая гойда

15 собесов за месяц? После всего шести собесов за полгода звучит как мана небесная)

Есть опасность что появится Великий Российский Firewall который будет разрешать только whitelist доступ к ресурсам и доступность «полноценного» Интернета, в лучшем случае, будет только от места к месту

Пророчество, не иначе

А где для AMD?))) Переименуйте хоть в x64 или x86_64
А где для AMD?))) Переименуйте хоть в x64 или x86_64

Из-за этого бага приостановили раскатку обновления 25.04, здесь было описано: https://www.gamingonlinux.com/2025/04/ubuntu-25-04-upgrades-halted-due-to-kubuntu-users-getting-a-broken-desktop/

built-in функцию copy для пришельцев придумали?)
Никто также не запрещает сделать append(dst, src...).
Всё это справедливо для слайсов, но никто не мешает кастить массивы в слайсы и назад, хоть это и муторно (append не сработал, но copy - вполне себе):

package main

import "fmt"

func main() {
	var a [2]int = [2]int{1, 2}
	var b [2]int

	fmt.Println(a)

	copy(b[:], a[:])
	fmt.Println(b)
}

sqlx > gorm, умеет такое же, но не приносит все минусы ORM-ок. Ещё и квери билдер удобный

Никакой, смысл тестировать мэйн?
Раз так хочется покороче - разбил инициализацию зависимостей по подпакетам (условный cmd/{название-проекта}/bootstrap/*, и там инициализируешь всё, что нужно, а сами Init-ы дёргаешь в мэйне. Можешь даже тесты прикрутить, кто тебе мешает

Например, как-то так
Например, как-то так

  1. Явный DI > Wire/fx/другие подобные решения.
    Для инициализации зависимостей можно делать отдельные пакеты/подпакеты в cmd, если уж такой большой проект, но только не IoC-контейнеры, с которыми выстрелить в ногу легче простого. (Как минимум в Go)

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

  3. Также не знаком с gin, однако судя по приставке Should у вас свалится паника, если не смаппится запрос. Может проще адекватно вернуть ошибку? Паника - это про фатал-кейсы, тут у нас просто плохой запрос, т.е. ошибка данных, но никак не фатальная ошибка, способная всё повалить.

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

Optional можно легко сделать собственной обёрткой а-ля:

type Optional[V any] struct {
	defined bool
	value   V
}
// И пара-тройка хелперов к нему


Всё на стеке, легко проверяется на "nil", и нет путаницы с валидными нулевыми значениями если отказаться от указателей. Так делают в sql пакете, например: https://pkg.go.dev/database/sql#NullInt64

Информация

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