24 декабря 2013

Save programmers' SSD

Recently, building project, I thought, how many file i/o operations happen during build process, and how terribly it reduces my SSD lifetime by consuming a limited number of write cycles. Immediately appeared a natural wish to link a build system's temporary files directory somewere in tmpfs. At first I wanted to write a shell script, but soon understood that it's a wrong way and decided to include according instructions in build project. As I wanted to make this easily reusable, a small SaveSSD plugin for Gradle was born. Source code is published at Github, and the compiled library can be included in project by referencing my maven repository at Bintray. Plugin was tested in Android Studio and Intellij IDEA with Android and Java projects, but it should work with any Gradle project on all *nix systems (on Windows it just does nothing). By the way, as RAM access is much faster, than HDD access, HDD owners also can gain profit from SaveSSD plugin usage - build process becomes faster. Nevertheless, there is an option to turn it on and off for every team member individually.

Спасаем программерские SSD

Недавно, ожидая завершения сборки проекта, я задумался, сколько операций файлового ввода-вывода происходит во время этого процесса: генерация файлов с байткодом, файлы ресурсов, одексированные файлы, оптимизация всего этого ProGuard'ом, выполнение тестов и т.п., а также отчёты и логи о каждом действии, и как это влияет на срок жизни моего SSD. И сразу захотелось прилинковать каталог с временными файлами системы сборки куда-нибудь в tmpfs. Сначала хотел написать shell-скрипт, но, быстро осознав негобкость такого подхода, решил включить соответствующие инструкции в сам проект, а также сделать их подходящими для повторного использования с минимумом усилий. В результате получился плагин SaveSSD для Gradle (системы сборки и управления зависимостями, используемой в качестве основной в Android Studio, а также поддерживаемой в некоторых других IDE). Полную инструкцию по использованию можно посмотреть на Github, где опубликованы исходники, а подключить скомпилированную библиотеку можно, сославшись на мой репозиторий в Bintray. Протестировано в Android Studio и Intellij IDEA на Android и Java проектах, но должно работать с любыми Gradle-проектами на *nix-системах (при запуске под Windows плагин просто ничего не делает). Кстати, поскольку скорость доступа к RAM существенно выше, чем к HDD, владельцы HDD тоже могут получить от этого плагина выгоду в виде ускорения сборки. Тем не менее, предусмотрена возможность включать и выключать его каждому участнику команды индивидуально, по желанию.