Найти в Дзене
Короче, веселье
Минцифры решило подключить к блокировке VPN сами сайты и приложения. Не только операторов, а теперь ещё и «Яндекс», VK, Wildberries, Ozon, Сбер, Авито, Wink, ivi и ещё с десяток крупных игроков. Что от них хотят? Чтобы к 15 апреля они: - заблокировали доступ пользователям с включенным VPN по спискам РКН -сами научились выявлять новые способы обхода - в идеале - вообще отключали весь функционал, если видно VPN А если не сделают? То лишат IT-льгот, выкинут из «белых списков» и из перечня ПО для предустановки на гаджеты. На мой взгляд - весьма болезненно. Но есть нюансы, которые мне лично пока непонятны...
1 день назад
ripgrep: grep, который не заставляет ждать
grep хорош, но на больших проектах он тормозит. ripgrep (команда rg`) ищет в 10-20 раз быстрее, умеет игнорировать .gitignore` по умолчанию и выводит результат с контекстом. Фраза «подожди, я сейчас найду где это используется» — это симптом, который лечится заменой инструмента. ➤ Вариант 1 (Поиск по коду проекта): находит все вызовы функции за доли секунды, даже в проекте с 10k файлов.# Найти все вызовы calculate_price во всём проекте rg "calculate_price" # Только в Python-файлах, игнорируя тесты rg -t py "calculate_price" -g "!tests/**" # Найти TODO и показать имя файла и номер строки rg...
2 дня назад
ripgrep: grep, который не заставляет ждать
grep хорош, но на больших проектах он тормозит. ripgrep (команда rg`) ищет в 10-20 раз быстрее, умеет игнорировать .gitignore` по умолчанию и выводит результат с контекстом. Фраза «подожди, я сейчас найду где это используется» — это симптом, который лечится заменой инструмента. ➤ Вариант 1 (Поиск по коду проекта): находит все вызовы функции за доли секунды, даже в проекте с 10k файлов.# Найти все вызовы calculate_price во всём проекте rg "calculate_price" # Только в Python-файлах, игнорируя тесты rg -t py "calculate_price" -g "!tests/**" # Найти TODO и показать имя файла и номер строки rg...
2 дня назад
fzf: поиск, который работает везде
Каждый день мы ищем: файлы в проекте, команды в истории, процессы для убийства. grep находит, но не выбирает. fzf добавляет интерактивный поиск с нечетким сопоставлением туда, где его раньше не было. Утилита принимает список строк на вход, а на выходе отдаёт выбранную. ➤ Вариант 1 (Поиск по истории команд): привязка к Ctrl+R превращает поиск в истории из слепого перебора в интерактивную прогулку.# Добавить в .bashrc или .zshrc bind '"\C-r": "\C-e \C-u history | fzf --tac --no-sort | xargs -I {} echo {}"' ➤ Вариант 2 (Быстрый переход в папку): больше не нужно помнить, где лежит проект, запущенный месяц назад...
5 дней назад
fzf: поиск, который работает везде
Каждый день мы ищем: файлы в проекте, команды в истории, процессы для убийства. grep находит, но не выбирает.тает ведобавляет интерактивный поиск с нечетким сопоставлением туда, где его раньше не было. Утилита принимает список строк на вход, а на выходе отдаёт выбранную. ➤ Вариант 1 (Поиск по истории команд): привязка к Ctrl+R превращает поиск в истории из слепого перебора в интерактивную прогулку.# Добавить в .bashrc или .zshrc bind '"\C-r": "\C-e \C-u history | fzf --tac --no-sort | xargs -I {} echo {}"' fzf: поиск, который работает везде Каждый денбольше не нужно помнить, где лежит проект, запущенный месяц назад...
5 дней назад
Midnight Commander - это та утилита, которая кажется бессмысленной, пока не появится задача на сервере, где нужно быстро перекинуть 50
файлов из одной папки в другую. cp -r с кучей флагов - это долго. А в mc это делается секунд за 10. Как это работает: Запустили mc - две панели. Левая папка, правая папка. Стрелки - навигация. Tab - переключить панель. F5 - копировать, F6 - переместить, F7 - создать папку, F8 - удалить. Всё. Где реально выручает · Выборочное копирование. Нужно из 500 файлов перенести 20 конкретных? Отмечаем их пробелом, жмём F5 - готово. · Редактирование на месте. Нажали F4 - открылся редактор с подсветкой. Поправили конфиг - Ctrl+S, F10 - вышел. · Архивы. Нажали Enter на .tar.gz - внутри, как в обычной папке...
6 дней назад
Вот короткая версия поста про mc
--- Пост: mc — файловый менеджер, который спасает, когда лень вспоминать команды Midnight Commander — это та утилита, над которой смеются, пока не оказываются на сервере, где нужно быстро перекинуть 50 файлов из одной папки в другую. cp -r с кучей флагов — это долго. А в mc это делается за 10 секунд. Как это работает Запустил mc — две панели. Левая папка, правая папка. Стрелки — навигация. Tab — переключить панель. F5 — копировать, F6 — переместить, F7 — создать папку, F8 — удалить. Всё. Где реально выручает · Выборочное копирование. Нужно из 500 файлов перенести 20 конкретных? Отмечаешь их пробелом, жмёшь F5 — готово...
6 дней назад
Вот короткая версия поста про mc
--- Пост: mc — файловый менеджер, который спасает, когда лень вспоминать команды Midnight Commander — это та утилита, над которой смеются, пока не оказываются на сервере, где нужно быстро перекинуть 50 файлов из одной папки в другую. cp -r с кучей флагов — это долго. А в mc это делается за 10 секунд. Как это работает Запустил mc — две панели. Левая папка, правая папка. Стрелки — навигация. Tab — переключить панель. F5 — копировать, F6 — переместить, F7 — создать папку, F8 — удалить. Всё. Где реально выручает · Выборочное копирование. Нужно из 500 файлов перенести 20 конкретных? Отмечаешь их пробелом, жмёшь F5 — готово...
6 дней назад
ERR в bash: отлавливаем ошибки там, где set -e бессилен
Все знают про set -e, который прерывает скрипт при первой ошибке. Но у него есть особенности: он срабатывает не на все ошибки, и его поведение может меняться в зависимости от контекста. Например, ошибка в конвейере (`cmd1 | cmd2`) не остановит скрипт, если не включен set -o pipefail. Или ошибка в условии if — там set -e вообще игнорируется. Но есть механизм, который дает полный контроль над обработкой ошибок — ловушка ERR. trap 'echo "Ошибка в строке $LINENO"' ERR сработает при любой ошибке выполнения команды, независимо от настроек set -e. Причем вы получите номер строки, где это случилось. ...
1 неделю назад
Vagrant: изоляция через виртуальные машины
Docker работает на уровне ядра хоста и разделяет с ним ресурсы. Для некоторых задач этого недостаточно: нужно тестировать модули ядра, использовать специфичные сетевые конфигурации или эмулировать полноценную инфраструктуру. Vagrant позволяет поднимать виртуальные машины с заданными параметрами и автоматически их настраивать. * Вариант 1 (Веб-сервер под Ubuntu): Vagrant.configure("2") do |config| config.vm.box = "ubuntu/focal64" config.vm.network "private_network", ip: "192.168.56.10" config.vm.provider "virtualbox" do |vb| vb.memory = "2048" vb.cpus = 2 end config.vm.provision "shell", inline:...
1 неделю назад
Управление зависимостями Python: фиксация версий
Обновление пакетов в Python-проекте без системы управления зависимостями часто приводит к неожиданным поломкам. Пакет обновляется, тянет за собой другие версии библиотек, и приложение перестает работать. Современные инструменты разделяют понятия "зависимости, которые нам нужны" и "конкретные версии, которые установлены". * Вариант 1 (Poetry): # Команды для работы с зависимостями poetry add requests@latest # Добавление или обновление пакета poetry update # Обновление всех пакетов в рамках ограничений poetry export -f requirements.txt --output requirements.txt # Экспорт для Docker * Вариант 2 (pip-tools): pазделение на прямые и транзитивные зависимости...
1 неделю назад
GitLab CI: автоматизация сборки и доставки
Ручной деплой на сервер требует запоминания последовательности команд и несет риск ошибки из-за человеческого фактора. CI/CD-пайплайны делают процесс воспроизводимым: одна и та же последовательность шагов выполняется каждый раз. GitLab CI встроен в систему контроля версий, что позволяет привязать деплой к событиям в репозитории. ➤ Вариант 1 (Тесты и деплой на staging): # .gitlab-ci.yml stages: - test - deploy run_tests: stage: test script: - npm install - npm run test deploy_staging: stage: deploy script: - rsync -avz --delete ./ user@staging-server:/var/www/html/ only: - develop ➤ Вариант...
2 недели назад