Microsoft планирует заменить весь код на C/C++ кодом на Rust к 2030 😊
Такое заявление сделал Гален Хант, выдающийся (!) инженер из Microsoft.
Выглядит это всё супер нереалистично. Особенно когда читаешь «наша цель – один инженер, один месяц, один миллион строк кода». Добиться этого планируют, естественно, с помощью ИИ. Предполагается, что внутренняя LLM'ка microsoft будет переписывать код с C/C++ на Rust, а реальный инженер будет по диагонали его смотреть и аппрувить изменения. Я люблю Rust, но боюсь даже представить, что из этого всего получится.
Такое заявление сделал Гален Хант, выдающийся (!) инженер из Microsoft.
Выглядит это всё супер нереалистично. Особенно когда читаешь «наша цель – один инженер, один месяц, один миллион строк кода». Добиться этого планируют, естественно, с помощью ИИ. Предполагается, что внутренняя LLM'ка microsoft будет переписывать код с C/C++ на Rust, а реальный инженер будет по диагонали его смотреть и аппрувить изменения. Я люблю Rust, но боюсь даже представить, что из этого всего получится.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯1
Please open Telegram to view this post
VIEW IN TELEGRAM
🍾5🔥2
На неделе открыл для себя ty – дико набирающий популярность тайп чекер и языковой сервер для python от Astral (создатели uv и Ruff). Я не очень люблю python из-за его динамической типизации, мне не нравится, когда я не сразу понимаю, что стоит за переменной, когда IDE не подсказывает мне, какие методы у этой переменной можно вызвать и т.д.
С ty всё становится по-лучше. Установил его себе в VS Code в виде плагина, и сразу куча подсказок: все типы подсвечены, все доступные по объекту методы я вижу, все ошибки типа «зачем ты делишь строку на число, придурок» сразу выводятся у меня на экране. Помимо этого оно ещё и работает супер быстро, потому что написано на Rust. В общем, это просто бесподобно, всем советую, кто пишет на python и не пользуется специализированными редакторами типа PyCharm (в них, я думаю, и так из коробки идут хорошие языковые сервера для питона).
Единственное, имейте в виду, что ty — это всё-таки новый инструмент, и возможны сюрпризы. Особенно с выходом новых версий.
С ty всё становится по-лучше. Установил его себе в VS Code в виде плагина, и сразу куча подсказок: все типы подсвечены, все доступные по объекту методы я вижу, все ошибки типа «зачем ты делишь строку на число, придурок» сразу выводятся у меня на экране. Помимо этого оно ещё и работает супер быстро, потому что написано на Rust. В общем, это просто бесподобно, всем советую, кто пишет на python и не пользуется специализированными редакторами типа PyCharm (в них, я думаю, и так из коробки идут хорошие языковые сервера для питона).
Единственное, имейте в виду, что ty — это всё-таки новый инструмент, и возможны сюрпризы. Особенно с выходом новых версий.
GitHub
GitHub - astral-sh/ty: An extremely fast Python type checker and language server, written in Rust.
An extremely fast Python type checker and language server, written in Rust. - astral-sh/ty
👍3
Энтузиасты нашли способ защищать свои веб-сайты от ботов, скачивающих информацию для ИИ. Оказывается, такой бот никогда не стянет контент, в котором есть много нецензурных слов, острых политических заявлений или всякого непотребства.
На основе этого тезиса родился вот такой проект в гитхабе. Он вставляет в код вашего сайта прозрачные ссылки на... порносайты.
На основе этого тезиса родился вот такой проект в гитхабе. Он вставляет в код вашего сайта прозрачные ссылки на... порносайты.
GitHub
GitHub - vivienhenz24/fuzzy-canary: Poor-man's solution to stopping AI companies from scraping your blog
Poor-man's solution to stopping AI companies from scraping your blog - vivienhenz24/fuzzy-canary
😁2
История одного дебага
Столкнулись недавно с очень странным поведением одного нашего внутреннего Java-приложения. В чём оно заключалось: представьте, у вас есть сервис «A» в K8S, который ходит по HTTP в сервис «Б», который расположен где-то в вашей инфраструктуре. Сервис «Б» доступен по доменному имени с хелсчеками доступности адресов. То есть если один из инстансов «Б» становится недоступным, то он пропадает из DNS-выдачи.
И в чём же была проблема? В общем, в какой-то момент у нас один из инстансов «Б» всё-таки отвалился. Со стороны инфраструктуры всё отработало четко, хелсчеки сработали и убрали из DNS A-запись мертвого «плеча». Но (!) при этом у нас сервис «А» начал в логах сообщать об ошибках при подключении к сервису «Б». В ошибках было написано «timeout». Продолжались они 15-16 минут, а потом сами проходили.
Первая мысль: «А» продолжает ходить в мертвый инстанс «Б» из-за DNS-кеша. Пошли проверять: ни CoreDNS k8s-кластера, ни JVM приложения не хранят кеш так долго. Значит, не DNS-кеш, тогда что?
Пробуем снять TCP dump трафика из контейнера нашего сервиса «А» и видим, что... В дампе этого трафика нет... Есть хождения в другие сервисы, но нет в наш сервис «Б». При этом «А» в логах постоянно пишет, что пытается сходить до «Б» и ловит таймаут. Тут сразу мысль, что как-то не так сняли дамп и надо повторить. Повторили несколько раз, и та же шляпа.
Пошли к разработчикам с этой проблемой, но они разводят руками. Говорят, что приложение простое, никакой сложной логики там нет. Грубо говоря, ломаться там нечему. В целом я сам, когда на код глянул, то у меня такие же мысли были. Но, судя по дампу, дело было точно в приложении, надо было просто найти конкретное проблемное место.
В какой-то момент глаз пал на библиотеку, которая использовалась в сервисе «А» для выполнения HTTP запросов – OkHttp. По дефолту она использует HTTP/2, мы вместе с разрабами решили попробовать переключить её на HTTP/1.1. И о чудо! При попытке воспроизвести проблему она не повторилась!
То есть по итогу проблема в чем была: OkHttp устанавливал HTTP/2 соединение с одним из инстансов сервиса «Б», и когда этот инстанс умирал и пропадал из DNS-выдачи, OkHttp почему-то не разрывал с ним соединение, и как-будто бы продолжал пытаться с ним связаться, но на самом деле нет. Судя по tcp дампу, OkHttp никакие TCP пакеты в сторону отвалившегося сервиса не отправлял, но в логах писал про какие-то таймауты😡 . И продолжалось это всегда около 15 минут, после этого OkHttp пробовал наконец реально установить соединение с сервисом «Б», и всё начинало работать.
Столкнулись недавно с очень странным поведением одного нашего внутреннего Java-приложения. В чём оно заключалось: представьте, у вас есть сервис «A» в K8S, который ходит по HTTP в сервис «Б», который расположен где-то в вашей инфраструктуре. Сервис «Б» доступен по доменному имени с хелсчеками доступности адресов. То есть если один из инстансов «Б» становится недоступным, то он пропадает из DNS-выдачи.
И в чём же была проблема? В общем, в какой-то момент у нас один из инстансов «Б» всё-таки отвалился. Со стороны инфраструктуры всё отработало четко, хелсчеки сработали и убрали из DNS A-запись мертвого «плеча». Но (!) при этом у нас сервис «А» начал в логах сообщать об ошибках при подключении к сервису «Б». В ошибках было написано «timeout». Продолжались они 15-16 минут, а потом сами проходили.
Первая мысль: «А» продолжает ходить в мертвый инстанс «Б» из-за DNS-кеша. Пошли проверять: ни CoreDNS k8s-кластера, ни JVM приложения не хранят кеш так долго. Значит, не DNS-кеш, тогда что?
Пробуем снять TCP dump трафика из контейнера нашего сервиса «А» и видим, что... В дампе этого трафика нет... Есть хождения в другие сервисы, но нет в наш сервис «Б». При этом «А» в логах постоянно пишет, что пытается сходить до «Б» и ловит таймаут. Тут сразу мысль, что как-то не так сняли дамп и надо повторить. Повторили несколько раз, и та же шляпа.
Пошли к разработчикам с этой проблемой, но они разводят руками. Говорят, что приложение простое, никакой сложной логики там нет. Грубо говоря, ломаться там нечему. В целом я сам, когда на код глянул, то у меня такие же мысли были. Но, судя по дампу, дело было точно в приложении, надо было просто найти конкретное проблемное место.
В какой-то момент глаз пал на библиотеку, которая использовалась в сервисе «А» для выполнения HTTP запросов – OkHttp. По дефолту она использует HTTP/2, мы вместе с разрабами решили попробовать переключить её на HTTP/1.1. И о чудо! При попытке воспроизвести проблему она не повторилась!
То есть по итогу проблема в чем была: OkHttp устанавливал HTTP/2 соединение с одним из инстансов сервиса «Б», и когда этот инстанс умирал и пропадал из DNS-выдачи, OkHttp почему-то не разрывал с ним соединение, и как-будто бы продолжал пытаться с ним связаться, но на самом деле нет. Судя по tcp дампу, OkHttp никакие TCP пакеты в сторону отвалившегося сервиса не отправлял, но в логах писал про какие-то таймауты
Please open Telegram to view this post
VIEW IN TELEGRAM
square.github.io
Overview - OkHttp
Square’s meticulous HTTP client for the JVM, Android, and GraalVM
😱4
Важное отличие HTTP/1.1 от HTTP/2
В продолжение поста про дебаг джавы хотелось бы ещё рассказать про одну важную фишку, которой обладает HTTP/2 и не обладает HTTP/1.1, и с которой пришлось детально разбираться во время упомянутого дебага.
А именно я говорю про возможность отправлять несколько HTTP-запросов в рамках одного TCP соединения. Есть она в обеих версиях, но её реализации сильно отличаются друг от друга.
В HTTP/1.1 существуют keep-alive соединения, использование которых указывается в хедере «Connection: Keep-Alive». Значение keep-alive является дефолтным, но при этом вы можете указать «Connection: Close», и на каждый запрос у вас будет открываться новое соединение. Запросы и ответы на них в рамках keep-alive соединения должны идти последовательно: запрос -> ответ -> запрос -> ответ. Если на предыдущий запрос ещё не пришёл ответ, то следующий запрос в рамках текущего соединения отправить нельзя, только открывать новое. При этом теоретически в HTTP/1.1 есть возможность отправлять несколько запросов сразу, но ответы на них должны приходить в том же порядке, в котором были отправлены запросы. Это называется "pipelining", и он отключен в большинстве браузеров, так что считайте, что на практике его не существует.
В HTTP/2 все соединения по факту keep-alive, и нельзя указать, чтобы на каждый запрос открывалось новое. И самое важное: в HTTP/2 запросы и ответы в рамках соединения необязательно должны быть последовательными, как в HTTP/1.1. Это вам позволяет по сути вообще не открывать новых соединений с сервером, так как всё ваше общение будет происходить только в одном.
P.S. Keep-alive в HTTP/1 и HTTP/1.1 реализован одинаково, за исключением того, что в HTTP/1.1 он включен по дефолту.
В продолжение поста про дебаг джавы хотелось бы ещё рассказать про одну важную фишку, которой обладает HTTP/2 и не обладает HTTP/1.1, и с которой пришлось детально разбираться во время упомянутого дебага.
А именно я говорю про возможность отправлять несколько HTTP-запросов в рамках одного TCP соединения. Есть она в обеих версиях, но её реализации сильно отличаются друг от друга.
В HTTP/1.1 существуют keep-alive соединения, использование которых указывается в хедере «Connection: Keep-Alive». Значение keep-alive является дефолтным, но при этом вы можете указать «Connection: Close», и на каждый запрос у вас будет открываться новое соединение. Запросы и ответы на них в рамках keep-alive соединения должны идти последовательно: запрос -> ответ -> запрос -> ответ. Если на предыдущий запрос ещё не пришёл ответ, то следующий запрос в рамках текущего соединения отправить нельзя, только открывать новое. При этом теоретически в HTTP/1.1 есть возможность отправлять несколько запросов сразу, но ответы на них должны приходить в том же порядке, в котором были отправлены запросы. Это называется "pipelining", и он отключен в большинстве браузеров, так что считайте, что на практике его не существует.
В HTTP/2 все соединения по факту keep-alive, и нельзя указать, чтобы на каждый запрос открывалось новое. И самое важное: в HTTP/2 запросы и ответы в рамках соединения необязательно должны быть последовательными, как в HTTP/1.1. Это вам позволяет по сути вообще не открывать новых соединений с сервером, так как всё ваше общение будет происходить только в одном.
P.S. Keep-alive в HTTP/1 и HTTP/1.1 реализован одинаково, за исключением того, что в HTTP/1.1 он включен по дефолту.
👍3
Кому нечем заняться на новогодних выходных, но при этом хочется подтянуть/обновить свои знания SQL, есть прикольная web-игра, где вы в роли детектива расследуете дела, в которых вам нужно «добывать» из базы нужные записи, используя SQL.
Интересно позалипать в такое, да и сделано всё со стилем, даже звуки при нажатиях на кнопки есть☺️ . Я только не понимаю, почему у всех моих ответов efficiency rating 90%, а не 100%. Чего-то не хватает...
https://sqlcasefiles.com/
Интересно позалипать в такое, да и сделано всё со стилем, даже звуки при нажатиях на кнопки есть
https://sqlcasefiles.com/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
В дополнении к посту про SQL-игру наткнулся ещё на Kubernetes Quest :)
Через kind у вас локально разворачивается мини-кубер, и для каждого уровня в игре деплоятся ресурсы в отдельном неймспейсе. Фиксить надо будет проблемы с запуском подов, с трафиком в них/от них, с SecurityContext параметрами и так далее.
В целом какую-то существенную пользу для себя вы сможете извлечь только в случае, если вы прям очень слабо разбираетесь в кубе. Если вы его уже админили или просто долгое время работали с ним как потребитель, то в целом для вас эта игра — это просто жевачка для мозга. Можете сразу начинать с последних уровней, хотя даже последний 50-й уровень там не очень сложный.
Через kind у вас локально разворачивается мини-кубер, и для каждого уровня в игре деплоятся ресурсы в отдельном неймспейсе. Фиксить надо будет проблемы с запуском подов, с трафиком в них/от них, с SecurityContext параметрами и так далее.
В целом какую-то существенную пользу для себя вы сможете извлечь только в случае, если вы прям очень слабо разбираетесь в кубе. Если вы его уже админили или просто долгое время работали с ним как потребитель, то в целом для вас эта игра — это просто жевачка для мозга. Можете сразу начинать с последних уровней, хотя даже последний 50-й уровень там не очень сложный.
Meta* использует CPU планировщик, который Valve разработали для Steam Deck
Планировщик называется LAVD (Latency-criticality Aware Virtual Deadline), алгоритм основан примерно на тех же принципах, что и EEVDF (основной планировщик Linux с версии 6.6). Отличается он тем, что пытается рассчитывать критичность задержки (latency) для потока, основываясь на том, как часто он ждал выполнения, или как часто другие потоки ждали его. Соответственно, чем критичнее поток, тем большие приоритет он будет иметь. Если у вас, например, запущена какая-то игра и открыт браузер, в котором что-то происходит, то приоритет выполнения будет передан игре, а на браузер планировщик будет реже отвлекаться.
Удивило, что, оказывается, Valve не сами разработали LAVD, а при помощи консалтинговой компании, специализирующейся именно на разработке ПО с открытым исходным кодом. Я до сегодняшнего дня вообще не знал, что такое существует. Компания называется Igalia, полистал немного их блог, представляю, как там интересно работать разрабом. Про то, как эти ребята помогали Valve у них есть них отдельная статья, а чуть более подробно про LAVD есть вот такая презентация и запись доклада на ютубе (преза в видео на ютубе отличается от той, что по ссылке).
LAVD — это BPF планировщик, часть его работает в пространстве пользователя, а другая в пространстве ядра. Недавно я писал статью про BPF-шедулеры, кому интересно узнать про них поподробнее, вот ссылка☺️ (Upd: поправил ссылку).
*Meta (владеет Facebook, Instagram и Threads) признана в России экстремистской организацией и запрещена.
Планировщик называется LAVD (Latency-criticality Aware Virtual Deadline), алгоритм основан примерно на тех же принципах, что и EEVDF (основной планировщик Linux с версии 6.6). Отличается он тем, что пытается рассчитывать критичность задержки (latency) для потока, основываясь на том, как часто он ждал выполнения, или как часто другие потоки ждали его. Соответственно, чем критичнее поток, тем большие приоритет он будет иметь. Если у вас, например, запущена какая-то игра и открыт браузер, в котором что-то происходит, то приоритет выполнения будет передан игре, а на браузер планировщик будет реже отвлекаться.
Удивило, что, оказывается, Valve не сами разработали LAVD, а при помощи консалтинговой компании, специализирующейся именно на разработке ПО с открытым исходным кодом. Я до сегодняшнего дня вообще не знал, что такое существует. Компания называется Igalia, полистал немного их блог, представляю, как там интересно работать разрабом. Про то, как эти ребята помогали Valve у них есть них отдельная статья, а чуть более подробно про LAVD есть вот такая презентация и запись доклада на ютубе (преза в видео на ютубе отличается от той, что по ссылке).
LAVD — это BPF планировщик, часть его работает в пространстве пользователя, а другая в пространстве ядра. Недавно я писал статью про BPF-шедулеры, кому интересно узнать про них поподробнее, вот ссылка
*Meta (владеет Facebook, Instagram и Threads) признана в России экстремистской организацией и запрещена.
Please open Telegram to view this post
VIEW IN TELEGRAM
Phoronix
Meta Is Using The Linux Scheduler Designed For Valve's Steam Deck On Its Servers
An interesting anecdote from this month's Linux Plumbers Conference in Tokyo is that Meta (Facebook) is using the Linux scheduler originally designed for the needs of Valve's Steam Deck..
👍3🔥1
Новость не новая, но всё же. Выше прикреплён график количества вопросов, задаваемых на StackOverflow по месяцам.
Я знал, что активность у них упала, но не ожидал, что так сильно. Большой спад видно в 2022 году, как раз когда ChatGPT зарелизили, если мне не изменяет память и гугл.
У меня за всю жизнь на StackOverflow всего вопросов 7-10 задано, но сколько раз этот сайт спасал меня во время дебагов ещё когда я был разрабом...💧
https://data.stackexchange.com/stackoverflow/query/1926661#graph
Я знал, что активность у них упала, но не ожидал, что так сильно. Большой спад видно в 2022 году, как раз когда ChatGPT зарелизили, если мне не изменяет память и гугл.
У меня за всю жизнь на StackOverflow всего вопросов 7-10 задано, но сколько раз этот сайт спасал меня во время дебагов ещё когда я был разрабом...
https://data.stackexchange.com/stackoverflow/query/1926661#graph
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔2😢1
Вместо тестового задания прислали вирус
С одним пользователем Reddit в LinkedIn связался рекрутёр и предложил пройти тестовое задание. Задание из себя представляло ссылку на репозиторий в Bitbucket. Внутри был файл для автозапуска скриптов в VSCode — «.vscode/tasks.json». В нём можно определять скрипты, которые будут автоматически запускать при простом открытии папки.
Таким образом, VSCode скачивал на комп скрипт, который дальше запускался, начинал сканировать файловую систему на наличие паролей/ключей и отправлять их злоумышленникам.
Если вы боитесь попасться на такое, то либо клонируйте репозитории в папки, которые не входят в ваш список «Trusted Workspaces» и не жмите на кнопку «Trust Workspace» при открытии папки репозитория, либо в settings.json укажите
https://www.reddit.com/r/programming/comments/1pzvo25/psa_be_aware_when_opening_take_home_challenges/
С одним пользователем Reddit в LinkedIn связался рекрутёр и предложил пройти тестовое задание. Задание из себя представляло ссылку на репозиторий в Bitbucket. Внутри был файл для автозапуска скриптов в VSCode — «.vscode/tasks.json». В нём можно определять скрипты, которые будут автоматически запускать при простом открытии папки.
Таким образом, VSCode скачивал на комп скрипт, который дальше запускался, начинал сканировать файловую систему на наличие паролей/ключей и отправлять их злоумышленникам.
Если вы боитесь попасться на такое, то либо клонируйте репозитории в папки, которые не входят в ваш список «Trusted Workspaces» и не жмите на кнопку «Trust Workspace» при открытии папки репозитория, либо в settings.json укажите
"task.allowAutomaticTasks": "off". В идеале конечно лучше, как этот парень из реддита, перед клонированием репозитория с тестовым заданием (по хорошему вообще любого репо из интернета) тупо проверять ВСЕ файлы, которые в нём есть, на предмет наличия разного рода дичи.https://www.reddit.com/r/programming/comments/1pzvo25/psa_be_aware_when_opening_take_home_challenges/
Reddit
From the programming community on Reddit: PSA: Be aware when opening "take home challenges" from untrusted recruiters
Posted by Phantom569 - 1,511 votes and 72 comments
👍7
Наткнулся недавно на быстро набирающее обороты объектное хранилище RustFS. За полгода 18 тысяч звёзд на гитхабе — это очень неплохо. А в связи с новостями о прекращении разработки community-версии MinIO подобные проекты прям особенно интересны.
Смущает, что это всё-таки на 200% коммерческий продукт (даже уже торговое имя зарегистрировали), который был выведен в open source скорее всего для упрощения разработки, привлечения к себе внимания и поднятия репутации. И пока не понятно, какую стратегию поведения по отношению к сообществу выберут владельцы RustFS. Что будет доступно в Enterprise-версии, чего не будет в Community? Как быстро для Community-версии будут исправляться уязвимости? И главное, не ждёт ли RustFS судьба MinIO.
В наше время open source проектам сильно не хватает финансовой поддержки (оказывается, не всем меинтейнерам нравится работать за бесплатно), и, к сожалению или к счастью, из-за этого проектов, подкреплённых чьим-то капиталом, будет становиться всё больше и больше.
Смущает, что это всё-таки на 200% коммерческий продукт (даже уже торговое имя зарегистрировали), который был выведен в open source скорее всего для упрощения разработки, привлечения к себе внимания и поднятия репутации. И пока не понятно, какую стратегию поведения по отношению к сообществу выберут владельцы RustFS. Что будет доступно в Enterprise-версии, чего не будет в Community? Как быстро для Community-версии будут исправляться уязвимости? И главное, не ждёт ли RustFS судьба MinIO.
В наше время open source проектам сильно не хватает финансовой поддержки (оказывается, не всем меинтейнерам нравится работать за бесплатно), и, к сожалению или к счастью, из-за этого проектов, подкреплённых чьим-то капиталом, будет становиться всё больше и больше.
GitHub
GitHub - rustfs/rustfs: 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance…
🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting migration and coexistence with other S3-compatible platfor...
👍4
Увидел в новостях заголовок «Tailwind сокращает 75% персонала из-за ИИ». Подумал, что опять какая-то шляпа, пошёл искать источник и отрыл вот такой комментарий в гитхабе.
Как оказалось, это действительно правда, они реально уволили 75% своих инженеров из-за ИИ, но есть нюанс👍 .
Tailwind — это UI фреймворк для CSS, который типа облегчает оформление стилей для вашего сайта. В крупном проде зачастую стили пишут с нуля и создают свою «библиотеку компонентов», поэтому я лично не видел, чтобы Tailwind использовали для чего-то серьёзного. Но при этом он отлично подходит для рисования всяких статических страничек типа лендингов и т. п. Но это так, лирическое отступление.
В общем, в чём суть: у них есть платный продукт – Tailwind Plus, который и приносит им все бабки. И вот случилось так, что доходы с его продаж упали на 80%. Произошло это из-за того, что он продвигался, грубо говоря, через рекламные вставки в документации бесплатной версии Tailwind.
А документацию люди, оказывается, перестали читать, потому что по всем вопросам они сразу идут к ИИшке. И эта самая ИИшка, разумеется, не пытается продать пользователю компоненты от Tailwind за тыщу баксов.
Это официальная версия, но думаю дело не только в том, что документация потеряла «человеческих» читателей. Какой-нибудь условный Claude Code может достаточно быстро склепать те же компоненты, которые доступны в Tailwind Plus. И соответственно зачем мне вообще тогда этот платный CSS-код?
Как оказалось, это действительно правда, они реально уволили 75% своих инженеров из-за ИИ, но есть нюанс
Tailwind — это UI фреймворк для CSS, который типа облегчает оформление стилей для вашего сайта. В крупном проде зачастую стили пишут с нуля и создают свою «библиотеку компонентов», поэтому я лично не видел, чтобы Tailwind использовали для чего-то серьёзного. Но при этом он отлично подходит для рисования всяких статических страничек типа лендингов и т. п. Но это так, лирическое отступление.
В общем, в чём суть: у них есть платный продукт – Tailwind Plus, который и приносит им все бабки. И вот случилось так, что доходы с его продаж упали на 80%. Произошло это из-за того, что он продвигался, грубо говоря, через рекламные вставки в документации бесплатной версии Tailwind.
А документацию люди, оказывается, перестали читать, потому что по всем вопросам они сразу идут к ИИшке. И эта самая ИИшка, разумеется, не пытается продать пользователю компоненты от Tailwind за тыщу баксов.
Это официальная версия, но думаю дело не только в том, что документация потеряла «человеческих» читателей. Какой-нибудь условный Claude Code может достаточно быстро склепать те же компоненты, которые доступны в Tailwind Plus. И соответственно зачем мне вообще тогда этот платный CSS-код?
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔3👍2
Знаменитые гугловские DNS-сервера 8.8.8.8 и 8.8.4.4 этой ночью лежали в некоторых регионах (по большей части США).
Очередное напоминание о том, что даже, казалось бы, супернадежный и используемый по всему миру сервис может для вас тупо стать недоступен на несколько часов.
Если вы строите критическую для бизнеса инфру, то по возможности (зачастую финансовой) дублируйте провайдеров вообще для всех внешних сервисов, которыми пользуетесь (сейчас не только про DNS). Это добавит дополнительной работы, но оно того стоит. Не верьте заявлениям провайдеров о том, что они «никогда не падают».
Очередное напоминание о том, что даже, казалось бы, супернадежный и используемый по всему миру сервис может для вас тупо стать недоступен на несколько часов.
Если вы строите критическую для бизнеса инфру, то по возможности (зачастую финансовой) дублируйте провайдеров вообще для всех внешних сервисов, которыми пользуетесь (сейчас не только про DNS). Это добавит дополнительной работы, но оно того стоит. Не верьте заявлениям провайдеров о том, что они «никогда не падают».
👍7
Зачем нужен tracepath, когда есть traceroute?
Иногда заходишь на хост что-то продебажить, вводишь «trace», нажимаешь tab и не видишь привычного traceroute, вместо него какой-то tracepath. И вроде по названию похожее что-то, да и команда формата
Ответ на этот вопрос простой — привилегии. Traceroute для того, чтобы пользоваться им «в полную силу», требует root-прав, когда tracepath может полностью работать и от обычного пользователя.
А зачем traceroute'у root-права? Для использования raw-сокетов. Нужно это ему для отлавливания ICMP-ошибок. Дело в том, что Linux умеет перенаправлять ICMP-ошибки типа "Timeout Exceeded" на UDP-сокеты, к которым эта ошибка относится, но он не умеет делать тоже самое для TCP и ICMP. Именно поэтому traceroute использует raw-сокеты – ему нужна возможность "снифать" все ICMP-пакеты на хосте, чтобы дальше сопоставлять их с нужными сокетами. И именно поэтому для tracepath не нужен root-доступ, так как он использует только UDP-пробы.
А теперь другой вопрос: почему для использования raw-сокетов нужен root? Я думаю, по предыдущему абзацу это уже стало +- понятно. Грубо говоря, на уровне raw-сокетов нет «изоляции пакетов по процессам», то есть получая доступ на чтение пакетов raw-сокета с какого-нибудь интерфейса, вы получаете доступ для чтений ВООБЩЕ ВСЕХ пакетов, которые прилетают/улетают с этого интерфейса. Соответственно, вы можете сканировать весь трафик хоста.
Иногда заходишь на хост что-то продебажить, вводишь «trace», нажимаешь tab и не видишь привычного traceroute, вместо него какой-то tracepath. И вроде по названию похожее что-то, да и команда формата
tracepath x.x.x.x работает и выводит знакомый результат, но всё равно видно, что это не то, к чему привык. Хотя бы потому, что тупо количество опций сильно меньше. Тогда зачем его устанавливают, если у него меньше возможностей, чем у traceroute?Ответ на этот вопрос простой — привилегии. Traceroute для того, чтобы пользоваться им «в полную силу», требует root-прав, когда tracepath может полностью работать и от обычного пользователя.
А зачем traceroute'у root-права? Для использования raw-сокетов. Нужно это ему для отлавливания ICMP-ошибок. Дело в том, что Linux умеет перенаправлять ICMP-ошибки типа "Timeout Exceeded" на UDP-сокеты, к которым эта ошибка относится, но он не умеет делать тоже самое для TCP и ICMP. Именно поэтому traceroute использует raw-сокеты – ему нужна возможность "снифать" все ICMP-пакеты на хосте, чтобы дальше сопоставлять их с нужными сокетами. И именно поэтому для tracepath не нужен root-доступ, так как он использует только UDP-пробы.
А теперь другой вопрос: почему для использования raw-сокетов нужен root? Я думаю, по предыдущему абзацу это уже стало +- понятно. Грубо говоря, на уровне raw-сокетов нет «изоляции пакетов по процессам», то есть получая доступ на чтение пакетов raw-сокета с какого-нибудь интерфейса, вы получаете доступ для чтений ВООБЩЕ ВСЕХ пакетов, которые прилетают/улетают с этого интерфейса. Соответственно, вы можете сканировать весь трафик хоста.
👍3
Как проверить доступ по TCP, если нет ни netcat'а, ни telnet'а, ни других сетевых утилит?
Такое может произойти, например, в каком-нибудь контейнере, соответственно, скорее всего, у вас не будет возможности установить недостающие утилиты. Тогда как быть? Если в окружении установлен bash, то вам повезло.
Меня в своё время удивило, что в баше есть встроенный псевдо-девайс
Если у вас команда выше выполнилась моментально, то, скорее всего, доступ есть и всё окей. Убедиться в этом вы можете, просмотрев её код возврата
Такое может произойти, например, в каком-нибудь контейнере, соответственно, скорее всего, у вас не будет возможности установить недостающие утилиты. Тогда как быть? Если в окружении установлен bash, то вам повезло.
Меня в своё время удивило, что в баше есть встроенный псевдо-девайс
/dev/tcp, через который вы можете открывать TCP-соединение и обмениваться сообщениями с другой стороной. Именно обмен сообщениями таким образом крайне неудобен, но если надо просто проверить, есть ли куда-то доступ, то это может быть очень полезно.> /dev/tcp/1.1.1.1/53
Если у вас команда выше выполнилась моментально, то, скорее всего, доступ есть и всё окей. Убедиться в этом вы можете, просмотрев её код возврата
echo $?, если «0», то TCP-соединение успешно установлено.🆒2👍1💯1
Идея для тех, кто давно думает о небольшом пет-проекте, но не знает, что именно делать.
Вот вам вариант: разверните NTP-сервер, настройте на нём самый базовый мониторинг + алерты и добавьте его в публичный пул NTP-серверов.
Что вы от этого получите?
Ну, во-первых, лишний раз вспомните, как работает NTP, какие есть NTP-серверы, как они настраиваются и так далее. Если вы вообще не знаете, что такое NTP, то польза для вас в таком случае умножается на 2.
Во-вторых, вы получите проект, которым вот прям 1000% люди будут пользоваться, и, скорее всего, почти сразу, как он попадёт в пул. Понятно, что для сообщества конкретно ваш сервак — это не что-то критическое, и что если вас из этого пула убрать, то пользователи просто перейдут на другие сервера, но вам-то что с этого? Вы заходите на свой сервер, снимаете сетевой дамп и видите, что к вам каждую секунду приходят пользователи со всей России и даже чуть-чуть из европейских стран.
Вот вам вариант: разверните NTP-сервер, настройте на нём самый базовый мониторинг + алерты и добавьте его в публичный пул NTP-серверов.
Что вы от этого получите?
Ну, во-первых, лишний раз вспомните, как работает NTP, какие есть NTP-серверы, как они настраиваются и так далее. Если вы вообще не знаете, что такое NTP, то польза для вас в таком случае умножается на 2.
Во-вторых, вы получите проект, которым вот прям 1000% люди будут пользоваться, и, скорее всего, почти сразу, как он попадёт в пул. Понятно, что для сообщества конкретно ваш сервак — это не что-то критическое, и что если вас из этого пула убрать, то пользователи просто перейдут на другие сервера, но вам-то что с этого? Вы заходите на свой сервер, снимаете сетевой дамп и видите, что к вам каждую секунду приходят пользователи со всей России и даже чуть-чуть из европейских стран.
🤔2
Всем, кто планирует искать в этому году работу, вот сайт для сравнения зарплат на разных грейдах в разных российских IT-компаниях.
По ссылке указаны зарплаты программистов, но у SRE/DevOps инженеров они сейчас +- такие же. В целом по компаниям, которых я знаю, цифры примерно сходятся.
https://www.levels.fyi/ru-ru?tab=levels
UPD: может не открываться без впн
По ссылке указаны зарплаты программистов, но у SRE/DevOps инженеров они сейчас +- такие же. В целом по компаниям, которых я знаю, цифры примерно сходятся.
https://www.levels.fyi/ru-ru?tab=levels
UPD: может не открываться без впн
👍3