📰 SQLite should have (Rust-style) editions
Источник (r/programming): https://www.reddit.com/r/programming/comments/1uxgmmq/sqlite_should_have_ruststyle_editions/
📍 Подпишись на создателей: https://t.me/linuxexe
Источник (r/programming): https://www.reddit.com/r/programming/comments/1uxgmmq/sqlite_should_have_ruststyle_editions/
📍 Подпишись на создателей: https://t.me/linuxexe
Почему умные люди ненавидят C++ сильнее всего
Есть интересная закономерность. Чем лучше человек понимает программирование — тем злее он говорит о C++. Новички его боятся. Мидлы терпят. А по-настоящему опытные разработчики смотрят на него с таким выражением лица, будто им предложили починить ядерный реактор отвёрткой из IKEA.
Почему так?
Потому что гении видят язык насквозь. И то, что они там видят, им не нравится.
C++ — это не просто сложный язык. Это язык, который накапливал фичи 40 лет, никогда ничего не выбрасывая. Каждый стандарт добавлял новый слой поверх старого. Сейчас это Франкенштейн, где мирно сосуществуют сырые указатели из 1983 года, концепты из C++20 и три разных способа инициализировать переменную, которые ведут себя по-разному в зависимости от фазы луны.
Умный человек сразу замечает: язык не имеет единой философии. В Python всё — объект. В Haskell всё — функция. В C++ всё — исторически сложилось.
Вот конкретный пример который сводит с ума
Возьми простую задачу — создать вектор из трёх единиц.
std::vector<int> v1(3, 1); — три элемента со значением 1
std::vector<int> v2{3, 1}; — два элемента: 3 и 1
Одна пара скобок меняет смысл полностью. Это не баг. Это "фича" uniform initialization из C++11, которая конфликтует со старым синтаксисом. Комитет знал об этом. Оставили как есть.
Или undefined behavior. В большинстве языков если ты написал что-то неправильно — получишь ошибку. В C++ ты можешь написать технически компилируемый код, который будет работать нормально на твоей машине, нормально на CI, а на продакшне в пятницу вечером тихо съест память и уйдёт. И это не просто баг — это поведение, которое стандарт явно оставил "неопределённым", чтобы дать компиляторам свободу оптимизировать.
Гений понимает: это не просто сложность. Это непоследовательность, возведённая в принцип.
Люди вроде Линуса Торвальдса, Джоэла Спольски, Дейкстры в своё время — они не ненавидели C++ потому что он сложный. Они ненавидели его потому что он сложный без достаточной причины. Потому что за этой сложностью не стоит красивая модель мира — стоит комитет из 200 человек с противоречивыми хотелками и груз обратной совместимости.
При этом C++ никуда не денется
Игры, операционные системы, базы данных, браузерные движки — всё это на C++. Потому что скорость реальная, контроль реальный, и замены пока нет. Rust пытается, но там своя боль.
Практический вывод такой: если ты пишешь на C++ и тебе не больно — ты ещё не писал достаточно. Если тебе больно — добро пожаловать в клуб. Здесь все злые, кофе крепкий и undefined behavior подстерегает за каждым углом.
📍 Подпишись на создателей: https://t.me/linuxexe
Есть интересная закономерность. Чем лучше человек понимает программирование — тем злее он говорит о C++. Новички его боятся. Мидлы терпят. А по-настоящему опытные разработчики смотрят на него с таким выражением лица, будто им предложили починить ядерный реактор отвёрткой из IKEA.
Почему так?
Потому что гении видят язык насквозь. И то, что они там видят, им не нравится.
C++ — это не просто сложный язык. Это язык, который накапливал фичи 40 лет, никогда ничего не выбрасывая. Каждый стандарт добавлял новый слой поверх старого. Сейчас это Франкенштейн, где мирно сосуществуют сырые указатели из 1983 года, концепты из C++20 и три разных способа инициализировать переменную, которые ведут себя по-разному в зависимости от фазы луны.
Умный человек сразу замечает: язык не имеет единой философии. В Python всё — объект. В Haskell всё — функция. В C++ всё — исторически сложилось.
Вот конкретный пример который сводит с ума
Возьми простую задачу — создать вектор из трёх единиц.
std::vector<int> v1(3, 1); — три элемента со значением 1
std::vector<int> v2{3, 1}; — два элемента: 3 и 1
Одна пара скобок меняет смысл полностью. Это не баг. Это "фича" uniform initialization из C++11, которая конфликтует со старым синтаксисом. Комитет знал об этом. Оставили как есть.
Или undefined behavior. В большинстве языков если ты написал что-то неправильно — получишь ошибку. В C++ ты можешь написать технически компилируемый код, который будет работать нормально на твоей машине, нормально на CI, а на продакшне в пятницу вечером тихо съест память и уйдёт. И это не просто баг — это поведение, которое стандарт явно оставил "неопределённым", чтобы дать компиляторам свободу оптимизировать.
Гений понимает: это не просто сложность. Это непоследовательность, возведённая в принцип.
Люди вроде Линуса Торвальдса, Джоэла Спольски, Дейкстры в своё время — они не ненавидели C++ потому что он сложный. Они ненавидели его потому что он сложный без достаточной причины. Потому что за этой сложностью не стоит красивая модель мира — стоит комитет из 200 человек с противоречивыми хотелками и груз обратной совместимости.
При этом C++ никуда не денется
Игры, операционные системы, базы данных, браузерные движки — всё это на C++. Потому что скорость реальная, контроль реальный, и замены пока нет. Rust пытается, но там своя боль.
Практический вывод такой: если ты пишешь на C++ и тебе не больно — ты ещё не писал достаточно. Если тебе больно — добро пожаловать в клуб. Здесь все злые, кофе крепкий и undefined behavior подстерегает за каждым углом.
📍 Подпишись на создателей: https://t.me/linuxexe
Привет, хакеры! На связи linux.exe. Сегодня разберем вечный спор «какой дистрибутив выбрать» на одном супер-практичном примере.
Представьте задачу: у вас есть современный ноутбук с гибридной графикой (Intel + Nvidia), на котором нужно развернуть окружение для веб-разработки (свежий Node.js, Docker, Python) и вечерком запустить Cyberpunk 2077 через Steam Proton.
Давайте посмотрим, как с этим справятся три популярных гиганта: Ubuntu, Fedora и Arch Linux.
Кандидат 1: Ubuntu 24.04 LTS (Классика для работы)
Установка Docker и Node.js тут делается за пару минут, но есть нюанс. Из коробки через стандартный менеджер пакетов apt вам могут прилететь устаревшие версии инструментов. Придется подключать сторонние репозитории (PPA) или использовать Snap-пакеты.
С гибридной графикой проблем нет. Драйверы Nvidia ставятся одной галочкой при установке системы. Переключение видеокарт работает сносно через встроенную утилиту.
Для игр Steam ставится легко, но если выберете версию из Snap-магазина, могут возникнуть проблемы с доступом к дискам. Лучше качать обычный deb-пакет.
Вердикт: Отличный выбор, если не хочется думать, но будьте готовы к возне с репозиториями ради свежего софта.
Кандидат 2: Fedora Workstation 40 (Золотая середина)
Федора предлагает свежий софт без необходимости подключать левые репозитории. Node.js и Python здесь всегда актуальных версий. Вместо Docker из коробки предлагается Podman, который работает без root-прав и отлично интегрирован в систему.
С графикой Nvidia чуть сложнее. Из-за жесткой политики свободного ПО проприетарные драйверы нужно включать вручную через магазин приложений (репозиторий RPM Fusion). Но после этого все работает отлично. Сессия Wayland включена по умолчанию, и на ней гибридная графика работает даже плавнее, чем в Ubuntu.
Для игр это шикарная платформа, так как свежее ядро обеспечивает лучшую поддержку нового железа и геймпадов.
Вердикт: Идеально для разработчиков, которые хотят современный софт без красноглазия.
Кандидат 3: Arch Linux (Конструктор для гиков)
Здесь вы собираете систему сами с нуля. Node.js, Python и Docker ставятся одной командой и всегда будут самых последних версий. Никаких старых пакетов.
С гибридной графикой придется повозиться вручную. Нужно установить драйверы, настроить утилиту для переключения видеокарт (например, envycontrol или optimus-manager). Ошиблись в конфиге — привет, черный экран при загрузке.
Для игр Arch — это рай. Благодаря репозиторию AUR вы можете поставить абсолютно любую версию Proton, кастомные ядра и самые свежие драйверы. Производительность в играх тут часто на пару кадров выше, чем у конкурентов.
Вердикт: Максимальная производительность и свежесть, но за это придется заплатить временем на чтение Arch Wiki.
Итог эксперимента:
Если вам нужно просто запустить систему и работать, не вникая в детали — ставьте Ubuntu.
Если хотите баланс между свежим софтом, безопасностью и стабильностью — Fedora ваш бро.
Если хотите выжать максимум из железа, обожаете настраивать все под себя и не боитесь терминала — Arch Linux ждет вас.
А что крутится на вашем рабочем железе? Пишите в комментарии!
📍 Подпишись на создателей: https://t.me/linuxexe
Представьте задачу: у вас есть современный ноутбук с гибридной графикой (Intel + Nvidia), на котором нужно развернуть окружение для веб-разработки (свежий Node.js, Docker, Python) и вечерком запустить Cyberpunk 2077 через Steam Proton.
Давайте посмотрим, как с этим справятся три популярных гиганта: Ubuntu, Fedora и Arch Linux.
Кандидат 1: Ubuntu 24.04 LTS (Классика для работы)
Установка Docker и Node.js тут делается за пару минут, но есть нюанс. Из коробки через стандартный менеджер пакетов apt вам могут прилететь устаревшие версии инструментов. Придется подключать сторонние репозитории (PPA) или использовать Snap-пакеты.
С гибридной графикой проблем нет. Драйверы Nvidia ставятся одной галочкой при установке системы. Переключение видеокарт работает сносно через встроенную утилиту.
Для игр Steam ставится легко, но если выберете версию из Snap-магазина, могут возникнуть проблемы с доступом к дискам. Лучше качать обычный deb-пакет.
Вердикт: Отличный выбор, если не хочется думать, но будьте готовы к возне с репозиториями ради свежего софта.
Кандидат 2: Fedora Workstation 40 (Золотая середина)
Федора предлагает свежий софт без необходимости подключать левые репозитории. Node.js и Python здесь всегда актуальных версий. Вместо Docker из коробки предлагается Podman, который работает без root-прав и отлично интегрирован в систему.
С графикой Nvidia чуть сложнее. Из-за жесткой политики свободного ПО проприетарные драйверы нужно включать вручную через магазин приложений (репозиторий RPM Fusion). Но после этого все работает отлично. Сессия Wayland включена по умолчанию, и на ней гибридная графика работает даже плавнее, чем в Ubuntu.
Для игр это шикарная платформа, так как свежее ядро обеспечивает лучшую поддержку нового железа и геймпадов.
Вердикт: Идеально для разработчиков, которые хотят современный софт без красноглазия.
Кандидат 3: Arch Linux (Конструктор для гиков)
Здесь вы собираете систему сами с нуля. Node.js, Python и Docker ставятся одной командой и всегда будут самых последних версий. Никаких старых пакетов.
С гибридной графикой придется повозиться вручную. Нужно установить драйверы, настроить утилиту для переключения видеокарт (например, envycontrol или optimus-manager). Ошиблись в конфиге — привет, черный экран при загрузке.
Для игр Arch — это рай. Благодаря репозиторию AUR вы можете поставить абсолютно любую версию Proton, кастомные ядра и самые свежие драйверы. Производительность в играх тут часто на пару кадров выше, чем у конкурентов.
Вердикт: Максимальная производительность и свежесть, но за это придется заплатить временем на чтение Arch Wiki.
Итог эксперимента:
Если вам нужно просто запустить систему и работать, не вникая в детали — ставьте Ubuntu.
Если хотите баланс между свежим софтом, безопасностью и стабильностью — Fedora ваш бро.
Если хотите выжать максимум из железа, обожаете настраивать все под себя и не боитесь терминала — Arch Linux ждет вас.
А что крутится на вашем рабочем железе? Пишите в комментарии!
📍 Подпишись на создателей: https://t.me/linuxexe
Мало кто знает, но первое сообщение Линуса Торвальдса о Linux было… максимально скромным.
25 августа 1991 года он написал в телеконференцию comp.os.minix буквально следующее: «Я делаю (бесплатную) операционную систему — просто хобби, она не будет большой и профессиональной, как GNU».
Не будет большой. Ага. 🙂
Тогда ядру было меньше месяца, оно работало только на его железе — Intel 386 — и умело немного: терминал и диск. Линус сам не верил, что это выйдет за рамки личного проекта. Он просто хотел поиграться с защищённым режимом процессора и не платить за Minix.
Но дальше случилось кое-что важное: он открыл код.
Уже в сентябре 1991 года вышла версия 0.01 — 10 000 строк кода, выложенных в открытый доступ на FTP-сервер Хельсинкского университета. Без лицензии GPL — она появится чуть позже, в версии 0.12. Первая версия вообще запрещала коммерческое использование.
Сообщество подхватило моментально. Люди начали присылать патчи, портировать утилиты, тестировать на разном железе. Линус отвечал почти на каждое письмо лично.
Через три года — ядро Linux уже использовалось на серверах. Через десять — оно работало на большинстве веб-серверов в интернете. Сейчас Linux крутится на 97% суперкомпьютеров мира, на всех Android-устройствах, на серверах Google, Amazon, Meta.
Хобби-проект. Не будет большим. 😄
Вот что бывает, когда открываешь код и говоришь «присылайте патчи».
— linux.exe
📍 Подпишись на создателей: https://t.me/linuxexe
25 августа 1991 года он написал в телеконференцию comp.os.minix буквально следующее: «Я делаю (бесплатную) операционную систему — просто хобби, она не будет большой и профессиональной, как GNU».
Не будет большой. Ага. 🙂
Тогда ядру было меньше месяца, оно работало только на его железе — Intel 386 — и умело немного: терминал и диск. Линус сам не верил, что это выйдет за рамки личного проекта. Он просто хотел поиграться с защищённым режимом процессора и не платить за Minix.
Но дальше случилось кое-что важное: он открыл код.
Уже в сентябре 1991 года вышла версия 0.01 — 10 000 строк кода, выложенных в открытый доступ на FTP-сервер Хельсинкского университета. Без лицензии GPL — она появится чуть позже, в версии 0.12. Первая версия вообще запрещала коммерческое использование.
Сообщество подхватило моментально. Люди начали присылать патчи, портировать утилиты, тестировать на разном железе. Линус отвечал почти на каждое письмо лично.
Через три года — ядро Linux уже использовалось на серверах. Через десять — оно работало на большинстве веб-серверов в интернете. Сейчас Linux крутится на 97% суперкомпьютеров мира, на всех Android-устройствах, на серверах Google, Amazon, Meta.
Хобби-проект. Не будет большим. 😄
Вот что бывает, когда открываешь код и говоришь «присылайте патчи».
— linux.exe
📍 Подпишись на создателей: https://t.me/linuxexe
Совет по безопасности, который реально стоит внедрить 🔐
Многие линуксоиды настраивают систему один раз и забывают. А потом удивляются. Вот несколько вещей, которые стоит проверить прямо сейчас.
— Проверь, кто имеет sudo-доступ
Выполни:
getent group sudo
Там должны быть только те пользователи, которым ты сам это разрешил. Лишний аккаунт с sudo — это уже потенциальная дыра.
— Отключи вход root по SSH
В файле /etc/ssh/sshd_config найди строку:
PermitRootLogin yes
Замени на:
PermitRootLogin no
После этого перезапусти sshd. Брутфорс root через SSH — классика жанра, не надо им помогать.
— Используй SSH-ключи вместо паролей
Пароли — слабое место. Ключи — нет. Если ещё не перешёл, самое время. Можно вообще запретить аутентификацию по паролю через SSH, добавив в sshd_config:
PasswordAuthentication no
Только сначала убедись, что ключ уже добавлен, иначе сам себя закроешь 😄
— Посмотри на открытые порты
ss -tulpn
Видишь что-то, чего не ожидал? Значит, какой-то сервис висит и ждёт соединения. Либо закрой порт, либо разберись, что это вообще такое.
— Обновляйся регулярно
Звучит банально, но реально работает. Большинство взломов — это эксплуатация уже известных уязвимостей, для которых патч давно вышел. Настрой автоматические обновления безопасности или хотя бы проверяй вручную раз в неделю.
— Проверь SUID-файлы
find / -perm -4000 -type f 2>/dev/null
SUID — это файлы, которые запускаются с правами владельца, а не того, кто их запускает. Если там что-то лишнее и незнакомое — повод разобраться.
Безопасность в Linux — это не разовая настройка, это привычка. Пять минут раз в месяц лучше, чем паника после инцидента 🛡️
📍 Подпишись на создателей: https://t.me/linuxexe
Многие линуксоиды настраивают систему один раз и забывают. А потом удивляются. Вот несколько вещей, которые стоит проверить прямо сейчас.
— Проверь, кто имеет sudo-доступ
Выполни:
getent group sudo
Там должны быть только те пользователи, которым ты сам это разрешил. Лишний аккаунт с sudo — это уже потенциальная дыра.
— Отключи вход root по SSH
В файле /etc/ssh/sshd_config найди строку:
PermitRootLogin yes
Замени на:
PermitRootLogin no
После этого перезапусти sshd. Брутфорс root через SSH — классика жанра, не надо им помогать.
— Используй SSH-ключи вместо паролей
Пароли — слабое место. Ключи — нет. Если ещё не перешёл, самое время. Можно вообще запретить аутентификацию по паролю через SSH, добавив в sshd_config:
PasswordAuthentication no
Только сначала убедись, что ключ уже добавлен, иначе сам себя закроешь 😄
— Посмотри на открытые порты
ss -tulpn
Видишь что-то, чего не ожидал? Значит, какой-то сервис висит и ждёт соединения. Либо закрой порт, либо разберись, что это вообще такое.
— Обновляйся регулярно
Звучит банально, но реально работает. Большинство взломов — это эксплуатация уже известных уязвимостей, для которых патч давно вышел. Настрой автоматические обновления безопасности или хотя бы проверяй вручную раз в неделю.
— Проверь SUID-файлы
find / -perm -4000 -type f 2>/dev/null
SUID — это файлы, которые запускаются с правами владельца, а не того, кто их запускает. Если там что-то лишнее и незнакомое — повод разобраться.
Безопасность в Linux — это не разовая настройка, это привычка. Пять минут раз в месяц лучше, чем паника после инцидента 🛡️
📍 Подпишись на создателей: https://t.me/linuxexe
jq — швейцарский нож для JSON в терминале
Если ты хоть раз работал с API или логами в формате JSON, то знаешь эту боль: curl что-то возвращает, а в ответ — одна длинная строка без переносов, нечитаемая каша. Вот тут и спасает jq.
Это маленькая консольная утилита, которая умеет парсить, фильтровать и трансформировать JSON прямо в терминале. Без Python-скриптов, без node, без ничего лишнего.
Базовый пример — просто красиво отформатировать ответ:
curl -s https://api.github.com/users/torvalds | jq .
Всё, получаешь читаемый цветной вывод с отступами. Уже приятно.
Но дальше интереснее. Допустим, нужно вытащить только одно поле:
curl -s https://api.github.com/users/torvalds | jq .public_repos
Или пройтись по массиву и забрать конкретные поля из каждого объекта:
jq '.[] | {name: .name, url: .html_url}'
Можно фильтровать по условию — например, оставить только репозитории с больше чем 100 звёздами:
jq '.[] | select(.stargazers_count > 100) | .name'
Это уже почти полноценный язык запросов к данным, только лёгкий и без overhead'а.
Несколько вещей, которые реально ускоряют работу:
— jq -r убирает кавычки из строк, удобно когда передаёшь значение дальше по пайпу
— jq -c выводит компактно, в одну строку — хорошо для логирования
— jq keys показывает все ключи объекта, когда не знаешь структуру
— jq length считает элементы массива или символы строки
Ещё одна фича, которую многие не знают — jq умеет читать файлы напрямую:
jq '.users[] | .email' data.json
Не нужно делать cat | jq, просто передаёшь файл аргументом.
Устанавливается везде элементарно:
apt install jq / brew install jq / pacman -S jq
Бинарник весит меньше мегабайта, зависимостей почти нет. Идеально для скриптов и CI/CD пайплайнов, где лишний runtime — это лишняя головная боль.
Если работаешь с AWS CLI, kubectl, GitHub Actions или любым другим инструментом, который плюётся JSON — jq становится таким же привычным, как grep. Один раз нормально разобраться и потом не понимаешь, как жил без него.
📍 Подпишись на создателей: https://t.me/linuxexex
Если ты хоть раз работал с API или логами в формате JSON, то знаешь эту боль: curl что-то возвращает, а в ответ — одна длинная строка без переносов, нечитаемая каша. Вот тут и спасает jq.
Это маленькая консольная утилита, которая умеет парсить, фильтровать и трансформировать JSON прямо в терминале. Без Python-скриптов, без node, без ничего лишнего.
Базовый пример — просто красиво отформатировать ответ:
curl -s https://api.github.com/users/torvalds | jq .
Всё, получаешь читаемый цветной вывод с отступами. Уже приятно.
Но дальше интереснее. Допустим, нужно вытащить только одно поле:
curl -s https://api.github.com/users/torvalds | jq .public_repos
Или пройтись по массиву и забрать конкретные поля из каждого объекта:
jq '.[] | {name: .name, url: .html_url}'
Можно фильтровать по условию — например, оставить только репозитории с больше чем 100 звёздами:
jq '.[] | select(.stargazers_count > 100) | .name'
Это уже почти полноценный язык запросов к данным, только лёгкий и без overhead'а.
Несколько вещей, которые реально ускоряют работу:
— jq -r убирает кавычки из строк, удобно когда передаёшь значение дальше по пайпу
— jq -c выводит компактно, в одну строку — хорошо для логирования
— jq keys показывает все ключи объекта, когда не знаешь структуру
— jq length считает элементы массива или символы строки
Ещё одна фича, которую многие не знают — jq умеет читать файлы напрямую:
jq '.users[] | .email' data.json
Не нужно делать cat | jq, просто передаёшь файл аргументом.
Устанавливается везде элементарно:
apt install jq / brew install jq / pacman -S jq
Бинарник весит меньше мегабайта, зависимостей почти нет. Идеально для скриптов и CI/CD пайплайнов, где лишний runtime — это лишняя головная боль.
Если работаешь с AWS CLI, kubectl, GitHub Actions или любым другим инструментом, который плюётся JSON — jq становится таким же привычным, как grep. Один раз нормально разобраться и потом не понимаешь, как жил без него.
📍 Подпишись на создателей: https://t.me/linuxexex
💡 Bash/Zsh: !! и !$
Две короткие подстановки, которые реально ускоряют работу:
!! — повторить предыдущую команду
!$ — взять последний аргумент предыдущей команды
Пример:
mkdir /tmp/test-project
cd !$
Вторая команда превратится в:
cd /tmp/test-project
А если забыл sudo:
sudo !!
Терминал любит тех, кто знает его маленькие трюки.
📍 Подпишись на создателей: https://t.me/linuxexex
Две короткие подстановки, которые реально ускоряют работу:
!! — повторить предыдущую команду
!$ — взять последний аргумент предыдущей команды
Пример:
mkdir /tmp/test-project
cd !$
Вторая команда превратится в:
cd /tmp/test-project
А если забыл sudo:
sudo !!
Терминал любит тех, кто знает его маленькие трюки.
📍 Подпишись на создателей: https://t.me/linuxexex
Сейчас 00:54 но почему-то я хочу захватить мир за виликую папуастическую империю древних ингров
🛠 Инструмент дня: ripgrep
Если ты до сих пор ищешь по проекту через grep -R, попробуй rg.
Пример:
rg "TODO|FIXME"
ripgrep быстрый, по умолчанию уважает .gitignore и удобно показывает контекст. Для больших репозиториев разница чувствуется сразу.
Полезные варианты:
rg -n "pattern" — с номерами строк
rg --files — список файлов проекта
rg -t py "async def" — искать только в Python-файлах
Один из тех инструментов, после которых назад возвращаться не хочется.
📍 Подпишись на создателей: https://t.me/linuxexex
Если ты до сих пор ищешь по проекту через grep -R, попробуй rg.
Пример:
rg "TODO|FIXME"
ripgrep быстрый, по умолчанию уважает .gitignore и удобно показывает контекст. Для больших репозиториев разница чувствуется сразу.
Полезные варианты:
rg -n "pattern" — с номерами строк
rg --files — список файлов проекта
rg -t py "async def" — искать только в Python-файлах
Один из тех инструментов, после которых назад возвращаться не хочется.
📍 Подпишись на создателей: https://t.me/linuxexex