Статья описывает актуальный способ работы с гугл диском из командной строки (Linux), а также добавление ежедневной задачи для бэкапа и синхронизации локальных файлов с удалёнными директориями.
Рубрика / Решения
Скриптовое вуду, терминальная бытовуха, почин веба и линуксов.
Бенчмарки быстро
Как быстро сравнить время работы разных команд: использовать пакет hyperfine.
Страница проекта содержит полезные примеры, здесь парочка тех, что я использовал для запуска тестов различных команд (бенчмарканья? бенчмаркинга?).
Удалить ненужные файлы и освободить место на диске (Linux)
Собрал в одном месте все команды, которые обычно запускаю, чтобы очистить место под большие файлы.
В этот раз я перепрошивал свою портативку (Anbernic RG351p), и мне нужно было срочно найти 50ГБ свободного места (нашёл).
Аркадные видео-игры: первые годы
Первые видео-игры по сегодняшним меркам выглядят невероятно примитивно, и тем не менее, всё ещё очаровательно. Когда читаешь спецификации железа, на котором это было сделано, просто не можешь поверить, насколько ограничены в ресурсах были разработчики, и какого труда стоило написать на чистом ассемблере хоть что-то, напоминающее игру.
Интересно, что первые игры часто даже не могли позволить себе AI из-за ограничений по памяти, и одни из самых первых массовых видео-игр чаще всего были соревнованием двух игроков против друг-друга.
Linux: скрипты и настройки
Чтобы поделиться с коллегами, я почистил и обновил свой приватный репозиторий со скриптами и различными конфигами, что собирал какое-то время, и выложил его на гитхаб под названием dev-scritps.
dev-scritps (Linux) — это набор полезных настроек для профиля пользователя, терминала, vim, git. Репо также содержит набор общих скриптов, команд и хоткеев.
Это не абсолютно исчёрпывающий туториал по конфигурации Всего, но настройки, которые я применяю при каждой новой установке Linux. Горячие клавиши (и в vim тоже), которые я нажимаю каждый день; скрипты, которые я писал для разных проектов так много раз, что в конце-концов они превратились в общие, и осели в этом репозитории.
WordPress: тестирование плагинов с PHPUnit и WP_UnitTestCase
Статья описывает отладку плагинов в тестовом окружении WordPress Testing Framework. Это значит, что в тестах можно будет пользоваться API WordPress, переключать роли пользователей сайта, автоматически создавать категории, посты, тэги, комментарии, вложения и тому подобное.
Последний раз проверено с PHP ^7.2, PHPUnit ^6.5, WordPress 4.9.8
Установка PHPUnit и Selenium
Статья описывает настройку окружения для функциональных тестов на PHP.
Например, такой типичный тест может:
- Открыть URL http://example.org/mypage в браузере
- Проверить, что на странице 20 картинок
- Нажать на вторую ссылку в навигации
- Проверить, что на новой странице также 20 картинок
- Закрыть браузер
А также произвести сложные выборки из DOM, вставить в поля формы текст и перейти по истории назад и вперёд.
Symfony: фильтр связанных полей в формах
Задача: вывести в форме только те связанные объекты OneToOne/OneToMany, которые ещё не были связаны с сущностями данного типа.
Например: при создании нового счёта вывести только те заказы, которые ещё не прикреплены ни к каким счетам (связь один-к-одному: счёт может относиться только к одному заказу). А при редактировании счета выводить все незанятые заказы, плюс тот, к которому счёт уже прикреплён.
Я взял код из рабочего проекта, немного упростил его и переименовал сущности. Подробнее (и понятнее) ниже.
PHPUnit + Symfony: ошибка Resetting the container is not allowed when a scope is active
Возникает в функциональных тестах PHPUnit с использованием клиента, открывающего указанные URL-адреса.
1) MyBundle\Tests\Controller\ControllerTest::testRoute
Symfony\Component\DependencyInjection\Exception\LogicException: Resetting the container is not allowed when a scope is active.
Терминал и его команды
Подборка сниппетов для bash, которые используются слишком редко, потому не сохраняются в истории и вылетают из головы, но при этом бывают полезными.
Процессы
Убить все процессы с заданным именем
1 | for p in $(ps aux | grep -i httpd.worker | cut -d " " -f 4,5) ; do kill $p ;done |
Когда не доверяешь pkill.
Узнать родителей процесса
1 | ps -ocommand= -p $p | awk -F/ '{print $NF}' | awk '{print $1}' |
Узнать родителей всех порождённых процессов
1 | for p in $(ps aux | egrep oracle | cut -d ' ' -f 4); do ps -ocommand= -p $p | awk -F/ '{print $NF}' | awk '{print $1}' ;done | uniq |
Во всех командах параметр -f
для cut
может требовать подбора верного числа.
Вывести процессы, сортированные по потребляемой памяти
1 | ps -eo pmem,pcpu,vsize,pid,cmd | sort -k 1 -nr | head -5; free -m |