Satont.
296 subscribers
318 photos
52 videos
1 file
201 links
Download Telegram
О боже, у YouTube появился real-time траспорт в апи для сообщений со стримов, не может быть.

НОО.
Что вы думаете, какой траспорт они выбрали? WS? IRC? Webhooks? SSE? Может быть Long-polling?
Да нифига подобного, чуваки решили выбрать grpc стримы. Пожалуй самый малоудобный транспорт из всех.

Гугл клоуны, я не удивлён.
🥴5😁1
Channel photo updated
🚀 Blazingly fast twir builds
3min -> 1min

Первым делом я посмотрел, и подумал. А зачем мне билдить 2 билеотеки types+api, которые являются deprecated. То есть они обе потихоньку выпиливаются, и я могу убрать их из пайплайна, и убрать их из гитигнора. Там ничего не меняется, потому конфликтов не будет в будующдем.
Результат: -40 секунд.

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

Потом я обратил внимание, что почему-то сам go build приложений не работает.
Случилось так, потому что у меня матрица на билд всех моих (микро)сервисов. Оно просто не может конкуретно записать билд кэш из-за параллельных билдов.
Добавил каждому приложению свой уникальный кэш-ключ с хэшом на go.mod, что позволило мне сильно сократить скорость билда.
      - name: Compute Go files hash
if: ${{ matrix.folders.runtime == 'go' && env.run-build == 'true' }}
id: go-files-hash
run: |
echo "hash=$(sha256sum go.work go.work.sum ${{ matrix.folders.path }}/go.mod ${{ matrix.folders.path }}/go.sum 2>/dev/null | sha256sum | awk '{print $1}')" >> $GITHUB_ENV

- name: Cache Go build
if: ${{ matrix.folders.runtime == 'go' && env.run-build == 'true' }}
uses: actions/cache@v4
with:
path: |
~/.cache/go-build
key: ${{ runner.os }}-go-${{ matrix.folders.path }}-${{ env.hash }}
restore-keys: |
${{ runner.os }}-go-${{ matrix.folders.path }}-


Итог: -30 секунд.

Далее я увидел, что gha кэш на докер образы почему-то тоже как-то непорядочно медленно распаковывается. Я решил потестить кэш через свой registry:
      - name: Build docker image
if: env.run-build == 'true'
uses: docker/build-push-action@v5
with:
context: .
file: ./${{ env.folder }}/${{ env.app }}/Dockerfile
push: true
tags: |
registry.twir.app/twirapp/${{ env.app }}:latest
cache-from: type=registry,ref=registry.twir.app/twirapp/${{ env.app }}:latest
cache-to: type=inline

И билд докер образа теперь занимает 10!!!! секунд.

И того, теперь у меня приложения билдятся не 2.5-3 минуты, а одну.

https://github.com/twirapp/twir/blob/main/.github/workflows/dockerv3.yml
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥111😁1
Сделал вот такой вот виджет валорант статистики.
Стата берётся за стрим текущий.

Дизайн взял у зрителя с проекта https://beta.valory.su
❤‍🔥8🔥2
Вернул https://twir.app за cloudflare, потому те кто из России сообщите доступен ли домен без впн, запретов, и прочего.
Anonymous Poll
41%
Доступен
14%
Не доступен
45%
Посмотреть результат
Satont.
Вернул https://twir.app за cloudflare, потому те кто из России сообщите доступен ли домен без впн, запретов, и прочего.
Проголосуйте те, кто не проголосовал. Кому лень печатать адрес, вот: https://twir.app
1
Satont.
Вернул https://twir.app за cloudflare, потому те кто из России сообщите доступен ли домен без впн, запретов, и прочего.
Перевёл реверс прокси на другой хост, теперь проблем с доступом из России быть не должно.
Spotify представили loselss кач-во музыки.

2025 год...
Пути-безопасный i18n на Golang бэкенде в Twir.

Захотелось мне поюзать i18n на бэке твира, и сразу в голове появилась мысль: а почему бы мне не сделать type-safe путь до строк? Например в TypeScript это легко решается декларированием глобального типа в одном месте, с базой от импорта .json, с последующей трансформацией в плоскую структуру.
Я захотел так же в го.

В итоге написал реализацию генератора через AST дерево, смотрит в yaml файлики и ключи внутри, и в итоге генерирует мне вложенные структуры ключей, с типизированными переменными внутри строк перевода. Склееный контент всех файлов тоже выплёвывается в .go файл, потому не нужно эмбедить переводы в бинарь, они уже и так есть в map.

То есть, если мой генератор видит строку вида Error happend, {reason}, он автоматом сгенерит структуру с филдом Reason внутри.

Использование либы максимально простое получилось:
i18n.GetCtx(
ctx,
locales.Translations.Commands.Seventv.Errors.ProfileNotFound.SetVars(locales.KeysCommandsSeventvErrorsProfileNotFoundVars{Reason: err.Error()}
)



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

Ни и вот пример сгенерированного файла: https://github.com/twirapp/twir/blob/main/apps/parser/locales/locales.go

Осталось только действительно взять и написать переводы. =)
😁2👍1
Наконец-то кто-то со скиллами и желанием в продвижении создал дистрибутив основанный на арче, имеющий тайлинг из коробки, и кучу свистоперделок, чтобы людям не сведующим во всём этом было проще.

Я видел уже не первый кейс непроплаченной рекламы, где люди действительно рады и получают удовольствие.

Может следующий год действительно станет годом Линукса на десктопе? Кажется мы сейчас очень сильно приближаемся к этому, ведь кач-во софта на порядок выросло, врождённые болячки уже почти зажили.
Хотя я конечно понимаю, что система не для всего пула задач, но всё же.

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

Даёшь Arch в массы! Даёшь само-контроль за стабильностью и работоспособностью своей системы!
Скажем нет баганым апдейтам максоси!

Именно вы станете собственником вашей системы.

Именно вы будете решать что ей делать, а что не делать.

Именно вы будете выбирать как система выглядит, и как вы хотите её настраивать.

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

Именно вы не просрете все ваши файлы с обновой винды.

Именно вы получите нативный экспириенс.

П.С
DHH кстати руби на рельсах создал, небольшой факт.
И бейзкэмп, тоже небольшой факт.
🔥9😐1🆒1
Ребят, включите BBR на своей системе, скажите мне спасибо.
Если коротко, то это более новый алгоритм контроля над перегрузкой в TCP, от Google.

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

Поищите как сделать это на вашей системе, его можно и на Windows и на Linux сделать.


- Arch
- Windows / Если у вас 23h2+, то прочтите снонску внимательней, иначе может отвалиться что нибудь. Надо ещё пару команд написать.
- Debian/Ubuntu
14😁1
В последних версиях редакторов jetbrains наконец появилась возможность включить VUE LSP третьей версии.

Сильно улучшает производительность, наконец вью стало приятно писать.

Поставьте галку вот тут, больше ничего делать не нужно.
4❤‍🔥1🤪1
2️⃣7️⃣🎉

Тяжёлый год, но в целом успешный.

Ощущаю ли я себя взрослым дядей? Никак нет.
Please open Telegram to view this post
VIEW IN TELEGRAM
27🎉304❤‍🔥4🎄1
Forwarded from suhodolskiy
Немного запоздалая новость, но вслед за WebStorm теперь и DataGrip от JetBrains можно использовать бесплатно для личных и некоммерческих проектов.

https://blog.jetbrains.com/datagrip/2025/10/01/datagrip-is-now-free-for-non-commercial-use/

Я активно использую плагин для работы с бд прямо в goland, но только для разработки. Для продакшена я использую отдельное приложение TablePlus, чтобы не перепутать и случайно не наделать проблем 😆 Однако подписка закончилась, так что думаю, что это знак, чтобы дать ещё один шанс DataGrip 🤷‍♂️
❤‍🔥2👍2
Помните я говорил, что в ноде нет глоба из под коробки?

Забудьте, есть. Но много ли из вас знало об этом?
4❤‍🔥1
https://twir.app/url-shortener

1 — было
2 — стало
16❤‍🔥1😁1