Кресты на моей кукухе
Всего 2 вечера, и OpenWRT поддался сборке Фан факт, который я выяснил в процессе сборки: чтобы собрать golang версии 1.22, вам нужен golang версии 1.20. Чтобы собрать golang версии 1.20, вам нужен golang версии 1.17. Как собирается golang версии 1.17, ведомо…
Ещё 2 вечера, чтобы выяснить, что объясняться надо не только с роутингом, но и с фаерволом
"Да, сюда мы тоже этот баг занесли. И когда я говорю «мы», я имею в виду «я»"
❤7😁4
Впервые в жизни сбацал сайт: https://onemillioncheckboxes.eezo.top/. Клацнутные вами чекбоксы будут видны другим зашедшим
Идея стырена у https://onemillioncheckboxes.com/. Вдохновился прикольной статьёй его автора про то, как пришлось бороться с собственной популярностью — подумал, что это неплохой вариант простенького проекта, который интересно сбацать для развлечения
Развлекать себя решил очередным соприкосновением с растом, а ещё, впервые, — с фронтендом. Браузер без энтузиазма воспринял мою попытку вгрузить в него миллион чекбоксов одной html-страничкой (в 100 метров текста), так что надо было сОфТвАрЕ эНжИнИрИтЬ. В качестве фреймворка взял довольно хайповый vanilla js. Продираясь наощупь, наполовину не вдупляя происходящее, заставил-таки браузер рисовать только нужные чекбоксы, а ненужные не рисовать. Почувствовал себя настоящим фронтендером. Доволен
Потом ещё, чтобы интегрировать в свою держалку сервисов, пришлось освоить азы сборки докер образов и docker-compose файликов
Со стороны бекенда ничего особо интересного: перекидываюсь жсонами по вебсокету, апдейты от одного пользователя рассылаю всем. Интересно понагружать, посмотреть, где будет ломаться. Моя ставка — жсоны. Вероятно, можно будет чё-нить выиграть, если паковать данные в формат поменьше, возможно, предподготавливать сообщения, какими-нибудь такими вещами нехорошими заниматься. Плюс все апдейты синхронизируются на одном потоке — теоретически, в это можем упереться. Скорее всего, побить рейндж на части, но как из этих частей собирать снапшот — неясно. Возможно, и не надо общий снапшот: научить клиента хендлить распиленное состояние
Но это уже когда-нибудь потом. Пока у меня руки чешутся написать другое
Идея стырена у https://onemillioncheckboxes.com/. Вдохновился прикольной статьёй его автора про то, как пришлось бороться с собственной популярностью — подумал, что это неплохой вариант простенького проекта, который интересно сбацать для развлечения
Развлекать себя решил очередным соприкосновением с растом, а ещё, впервые, — с фронтендом. Браузер без энтузиазма воспринял мою попытку вгрузить в него миллион чекбоксов одной html-страничкой (в 100 метров текста), так что надо было сОфТвАрЕ эНжИнИрИтЬ. В качестве фреймворка взял довольно хайповый vanilla js. Продираясь наощупь, наполовину не вдупляя происходящее, заставил-таки браузер рисовать только нужные чекбоксы, а ненужные не рисовать. Почувствовал себя настоящим фронтендером. Доволен
Потом ещё, чтобы интегрировать в свою держалку сервисов, пришлось освоить азы сборки докер образов и docker-compose файликов
Со стороны бекенда ничего особо интересного: перекидываюсь жсонами по вебсокету, апдейты от одного пользователя рассылаю всем. Интересно понагружать, посмотреть, где будет ломаться. Моя ставка — жсоны. Вероятно, можно будет чё-нить выиграть, если паковать данные в формат поменьше, возможно, предподготавливать сообщения, какими-нибудь такими вещами нехорошими заниматься. Плюс все апдейты синхронизируются на одном потоке — теоретически, в это можем упереться. Скорее всего, побить рейндж на части, но как из этих частей собирать снапшот — неясно. Возможно, и не надо общий снапшот: научить клиента хендлить распиленное состояние
Но это уже когда-нибудь потом. Пока у меня руки чешутся написать другое
🔥4
Я тут заметил, что давно перестал слышать фразу "до морковкина заговенья"
Как оказалось, заговенье это день перед постом, когда люди обычно наедаются всякой жирной пищи, потому морковкино заговенье это оксюморон, и потому выражение имеет значение, которое имеет. Не знал
Как оказалось, заговенье это день перед постом, когда люди обычно наедаются всякой жирной пищи, потому морковкино заговенье это оксюморон, и потому выражение имеет значение, которое имеет. Не знал
👏7
Lock-free очереди не нужны
Господь дал нам циклический буффер на fetch-and-add'ах, но мы были неблагодарны, сказали, что не настоящий lock-free, ведь могут быть livelock'и — и стали придумывать, как оных избежать
Первая идея просто ошеломительной простоты: а давайте мы затолкаем FAA-очереди в очередь Майкла-Скотта (представьте себе самый простой lock-free односвязный список — вот это она), и будем добавлять новую вместо livelock'а. По памяти не ограничено, очищение памяти не проще, чем через hazard pointer'ы, да и хер с ним
Люди изголялись, как улучшить ситуацию с последним: добавляли слои индирекции, придумали подход fast-path-slow-path и даже добились wait-freedom по цене lock-freedom. Но самую, сука, дурацкую lock-free очередь в своих же бенчмарках обогнать не смогли. То есть, работы это скорее доказательства, что теоретически wait-free очередь может жить на ограниченной памяти, и в целом чувствовать себя неплохо, но на деле ограничивайтесь, мужики, obstruction freedom, и всё у вас будет ништяк
Вход в кроличью нору, чтобы при желании пойти читать референсы: wCQ: A Fast Wait-Free Queue with Bounded Memory Usage
Господь дал нам циклический буффер на fetch-and-add'ах, но мы были неблагодарны, сказали, что не настоящий lock-free, ведь могут быть livelock'и — и стали придумывать, как оных избежать
Первая идея просто ошеломительной простоты: а давайте мы затолкаем FAA-очереди в очередь Майкла-Скотта (представьте себе самый простой lock-free односвязный список — вот это она), и будем добавлять новую вместо livelock'а. По памяти не ограничено, очищение памяти не проще, чем через hazard pointer'ы, да и хер с ним
Люди изголялись, как улучшить ситуацию с последним: добавляли слои индирекции, придумали подход fast-path-slow-path и даже добились wait-freedom по цене lock-freedom. Но самую, сука, дурацкую lock-free очередь в своих же бенчмарках обогнать не смогли. То есть, работы это скорее доказательства, что теоретически wait-free очередь может жить на ограниченной памяти, и в целом чувствовать себя неплохо, но на деле ограничивайтесь, мужики, obstruction freedom, и всё у вас будет ништяк
Вход в кроличью нору, чтобы при желании пойти читать референсы: wCQ: A Fast Wait-Free Queue with Bounded Memory Usage
👍3😱3
Заморозить компьютер, чтобы вынудить меня его перегрузить, чтобы накатить обновление, это осознанная тактика винды или я опараноел в край?
Upd. Блядь, винда, обои-то что тебе сделали, ирод ты окаянный
Upd. Блядь, винда, обои-то что тебе сделали, ирод ты окаянный
👨💻1
Это мы слушаем
https://youtu.be/RYCR55P99yg?si=1a7s0250DyZFk1ZK
https://youtu.be/RYCR55P99yg?si=1a7s0250DyZFk1ZK
YouTube
Плейлист, под который удобно чувствовать себя котёнком-невдуплёнком 🙀🐾
00:00 The cat from ipanema - j1gggs
01:37 Meow - ivusm
04:01 Cute circus - Tsundere twintails
07:04 Daycare theme - Allen Simpson
09:34 Bubblegum K.K. - (From "Animal Crossing: New Leaf")
12:11 Детский сад ( из к/ф "Усатый нянь")
14:30 Cats on Mars…
01:37 Meow - ivusm
04:01 Cute circus - Tsundere twintails
07:04 Daycare theme - Allen Simpson
09:34 Bubblegum K.K. - (From "Animal Crossing: New Leaf")
12:11 Детский сад ( из к/ф "Усатый нянь")
14:30 Cats on Mars…
Фан факт: если не трогать окулус квест слишком долго, он магически превращается в кусок пластика
А ещё тот факт, что приложение, нужное для коннекта шлема с компом, требует фейсбук логина, вымораживает
А ещё тот факт, что приложение, нужное для коннекта шлема с компом, требует фейсбук логина, вымораживает
😁1
Страшные люди пишут на сях лок-фри алгоритмы
Вот пишет он в статье, мол
Вот пишет он в статье, мол
Cache_Remap
нужна, чтобы пореже трогать одну кеш-линию. А смотришь в реализацию — там какая-то мрачная битовая магия, с полчаса медитируешь, чтоб понять, что это он младшие битики наверх утащил. Ща ещё столько же, походу, буду искать, куда этот кудесник флажок запрятал. А потом гадать, что за волшебные условия он расставил по коду, но не по псевдокоду в статье. Ъуъ👌2
У меня курс про лок-фри алгоритмы был на жаве/котле, потому для меня от имплементации пейперов на сях несёт какой-то хтонью
Автор в статье: так как мы хотим хранить значения в диапазоне [0, n-1], в качестве null'а возьмём 2n-1
Я: отлично, логично, всё понятненько
Автор в коде: очевидно, в качестве null можно взять использовать n-1
Я: *второй вечер бью голову об вопрос* почему...
Upd. ненулевой шанс, что имплементация подогнана под бенчи, а бенчи могут этот корнер-кейс и не задеть 🙃
Upd 2. попробовать что ли автору написать...
Upd 3. похоже, действительно алгоритм ломается, если брать n-1 вместо 2n-1, но бенчи это не покрывают и не особо проверяют. Да и бенчи не слишком-то честные...
Upd 4. или бенч всё-таки честный... но тогда и алгоритм работает? ну что за качели
ЪУЪ
Я: отлично, логично, всё понятненько
Автор в коде: очевидно, в качестве null можно взять использовать n-1
Я: *второй вечер бью голову об вопрос* почему...
Upd. ненулевой шанс, что имплементация подогнана под бенчи, а бенчи могут этот корнер-кейс и не задеть 🙃
Upd 2. попробовать что ли автору написать...
Upd 3. похоже, действительно алгоритм ломается, если брать n-1 вместо 2n-1, но бенчи это не покрывают и не особо проверяют. Да и бенчи не слишком-то честные...
Upd 4. или бенч всё-таки честный... но тогда и алгоритм работает? ну что за качели
ЪУЪ
🔥2
Ларчик просто открывался: я дурачок, всё работает и написано прям по статье