Pull to refresh
38
0.3
kmeaw @kmeaw

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

Send message

Может быть я не понимаю проблему, поэтому уточню. Что не так с этим кодом на Go? На C и C++ можно очень похожие вещи делать.

type Game struct {
  Video struct {
    framedata []byte
    colormap []byte
    canvas *window.Window
  }  
  Random struct {
    prndindex byte
    rndindex byte
  }
  StatusBar struct {
    InventoryActive bool
    ArtifactFlash byte
  }
}

func (g *Game) Reset() error {
    g.Random.rndindex = 0
    g.Random.prndindex = 0
    g.Video.canvas.Reset()
}

Но ведь почти везде есть вложенные анонимные структуры/классы, разве нет?

Когда я последний раз пытался управлять VLAN в Windows на десктопе, то простых способов не находилось - они либо не умели одновременно тегированный и нетегированный трафик, как в моём примере, либо были специфичны для драйвера. А с беспроводными интерфейсами у меня не получилось ни VLAN на существующем соединении поднять, ни сразу к двум сетям подключиться. Для некоторых аспектов конфигурации сети мне удавалось найти нужную команду в netsh, но не в PowerShell.

Остальные заклинания изолируют отдельные процессы от основной сети, монтируют образ диска игнорируя заголовок фиксированного размера (что часто удобно для таблиц разделов и контейнеров), создают виртуальные диски - один склейкой файла с реальным диском и другой из физического диска с copy-on-write накоплением изменений в файле. Последнее QEMU для Windows сможет только для виртуальных машин - без сторонних средств (с ними нарушается условие "быстро") не выйдет подключить к ОС хоста созданный qcow2-образ.

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

особых преимуществ у десктопного линукса не осталось

Всё ещё проще по-быстрому что-то сделать с сетевыми или блочными устройствами для пятиминутного эксперимента без необходимости запускать виртуальные машины. В винде будет сложно придумать быстрые аналоги ip link add link wlp2s0 name vlan8 type vlan id 8, iw phy phy0 interface add wlan1 type managed, unshare -n, ethtool -e eno1, ip netns exec foo firefox с утащенным туда usb-ethernet, mount -o loop,offset=1048576 disk.img /mnt/disk, dmsetup create bar -t $'0 2048 linear /dev/loop0 0\n2048 12345 linear /dev/sda3 2048', qemu-img create -f qcow2 -b /dev/sdc -F raw cow.img && qemu-nbd -c /dev/nbd0 cow.img.

А чем вариант с Alt+F2 отличается от Win+R? Или от Win (открыть "пуск") и напечатать в строке поиска часть имя программы.

Проверил, проблема есть. XMonad 0.17.2, X.Org server 1.21.1.11, libxkbcommon 1.5.0.

setxkbmap -option ''
setxkbmap -option grp:switch,grp:ctrl_shift_toggle,grp_led:caps us,ru

Открываю браузер (chromium). Левой рукой сначала держу левый shift, затем зажимаю ещё ctrl - загорается индикатор (включилась раскладка ru), правой нажимаю-отпускаю T - "undo close tab" не срабатывает. Нажимаю на стрелки - выделение в textarea (где я прямо сейчас печатаю этот текст) происходит по символам, а не по словам, как ожидается.

setxkbmap -option ''
setxkbmap -option 'grp:caps_toggle,grp_led:caps,compose:ralt'

И всё сразу "починилось" - ctrl-shift-t и ctrl-shift-стрелки работают, как раньше. Наверное, ломаются какие-то сочетания с caps lock, но я таких не знаю.

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

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

Не решится ли проблема с авторизацией вот этим кодом? Год назад на Хабре была статья про оболочку над электронным дневником.

Сейчас у самого популярного инстанса Synapse есть проблема - matrix.org для внешних по отношению к нему пользователям показывает всех в состоянии "offline". Не будет ли у Beeper той же проблемы, когда нагрузка будет сопоставима?

Не проверял покупкой, но на странице eternalhost "вечные" тарифы ещё есть: за 7800, 15600 и 31200 рублей. Я что-то упустил?

А есть ли хоть какая-нибудь совместимость между вашими процессорными модулями и модулями других производителей, например того же Стартеркита? Понятно, что на вашей плате есть уникальная периферия, но заработает ли хотя бы питание и UART-консоль?

Я предлагаю воспользоваться инструментами (запросом к системе сборки, кнопкой references в IDE, глобальным code search), чтобы найти все проекты и поправить их. А потом запустить тесты, чтобы убедиться, что не стало хуже.

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

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

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

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

А как быть с базовыми (инфраструктурными) библиотеками, улучшение которых приносит пользу всем проектам? Аллокаторы, настройки системы сборки, конфигурации, авторизации, мониторинга, service discovery.

Если кто-то смог привнести баг, который вызвал последствия в соседнем проекте, значит в этом проекте недостаточно тестов. Досадно, но после исправления бага и увеличения тестового покрытия, а также принятия мер по искоренению появления проблем такого же класса в будущем (например, перенастройкой линтера, фаззера или изменения правил ревью для директории) растёт качество кода всего монорепозитория.

Ещё полезный эффект - появление глобального отношения порядка. Всегда можно сказать, что какой-то код влили в trunk в такой-то момент времени, и это позже или раньше какого-то другого кода. Это удобно, чтобы описывать правила вида "мы не поддерживаем совместимость по ABI такой-то системы дольше N коммитов и M времени" или "нельзя запускать на проде код старее коммита X".

В Alpine Linux есть режим diskless, который делает то же самое - initramfs ставит из репозитория (сетевого или локального) пакеты и не переключается на традиционный root, оставаясь полностью в памяти.

Для сохранения изменений есть инструмент lbu, который создаёт новый пакет, содержащий всё то, что отсутствует в уже установленных пакетах (обычно это конфиги) и зависящий от world (списка уже установленных пакетов). Таким образом, можно сделать единый загрузочный носитель для множества серверов - они будут загружать одно и то же ядро, один и тот же initramfs, но далее специализироваться, устанавливая (согласно своему hostname) нужный lbu. На реальном железе такая "переустановка" на каждую перезагрузку занимает всего пятую часть всего процесса загрузки - apk достаточно быстрый пакетный менеджер, а openrc умеет параллельно поднимать сервисы.

По поводу пакетов:

% curl -sfSL https://dl-cdn.alpinelinux.org/alpine/v3.19/community/x86_64/ | wc -l
17554
% curl https://dl-cdn.alpinelinux.org/alpine/v3.19/main/x86_64/ | wc -l
5447
% curl http://tinycorelinux.net/15.x/x86/tcz/ | wc -l
2526

Самый минималистичный - это тот, который сделан под конкретное применение на конкретном железе; современное ядро с сетью и минимальным юзерспейсом можно в 6M RAM уместить, загружаться сможет с дискеты на 2.8M. Если чуть более общего назначения, то OpenWrt, современные версии с выключенным вебинтерфейсом неплохо чувствуют себя на 48M, более старые можно использовать на устройствах с 32M.

Если в организации уже есть устройства от MikroTik и средства на покупку лицензии, то можно и RouterOS рассмотреть.

А не лучше ли то же самое делать на Alpine? Пакетов сильно больше, пользователей (пусть и в "контейнерном", а не "системном" исполнении) тоже больше.

Оперативки там действительно 128M, а вместо диска используется NFS-клиент (и сервер 10.42.100.60).

1
23 ...

Information

Rating
1,863-rd
Registered
Activity