All streams
Search
Write a publication
Pull to refresh
11
0
Osip Fatkullin @osipxd

Android Developer

Send message

Для старта покатит. Но в Maven Central публикация получается качественней как раз из-за того что Maven Central требует, чтобы были:
- исходники
- JavaDoc
- подпись
- данные о библиотеке и о разработчике в pom.xml

Хотя сам процесс публикации не удобный, это да.

У других решений есть "фатальный недостаток" :)

Ради интереса прогнал assembleDebug --scan на проекте сначала с использованием buildSrc, потом с included build. Проект небольшой, состоит из трёх модулей: app, ui-kit и ещё один модуль-библиотека.


Получил такие результаты:


# Замер без кэшей для сравнения (--rerun-tasks --no-build-cache)
No cache:                            3m 9.846s, 0 avoided tasks

# buildSrc (127 tasks)
No changes:                          2.185s, 89 avoided tasks
Dependency version (non-ABI change): 3m 4.044s, 14 avoided tasks
Add dependency (ABI change):         3m 21.682s, 14 avoided tasks

# included build (115 tasks)
No changes:                          4.928s, with 87 avoided tasks
Dependency version (non-ABI change): 3m 44.495s, 13 avoided tasks
Add dependency (ABI change):         3m 38.804s, 13 avoided tasks

no changes — cначала прогонял несколько раз таск без каких либо изменений. Чтобы посмотреть сколько времени проект собирается когда есть все кэши.
dependency version — менял версию зависимости. Пересобирал проект три раза, каждый раз менял версию у разных зависимостей.
add dependency — добавлял новую константу с зависимостью. Прогонял сборку так же три раза, добавляя каждый раз новую константу.


По build-scan'ам не заметил особой разницы, разве что с buildSrc по какой-то причине чуть быстрее проходит "холостой" билд без внесения изменений (всегда около 2 сек, против 4-5 сек с included build) при том что тасок становится немного больше.
По времени есть небольшой разброс, но это не бенчмарк и замеров слишком мало поэтому скорее стоит ориентироваться на avoided tasks. При внесении любого изменения в buildSrc или included build все модули пересобирались.


Может неправильная методика замеров? Или стоит смотреть разницу на проектах с бОльшим количеством модулей?

Хм, и правда. Невнимательно прочитал change log, там действительно только про инвалидацию конфигурации, но не про кэши.

Спасибо за статью!
Есть только одно дополнение про этот абзац.


любое изменение в buildSrc будет инвалидировать весь кэш сборки, что может быть несущественно для средних и маленьких проектов, но выливаться в серьезные проблемы для больших команд.

Эту проблему поправили в Gradle 6.8

Чтобы поставить себе i3, нужно сначала обкатать шелл с плюшками? Мне это всё как-то странно.

Зависимость не прямая, но у меня примерно так и было


не очень понятно, зачем нужны плюшки. Больше похоже, что всё это чисто дело вкуса.

Чтобы знать об их существовании и использовать если понадобится :) Вы уже нашли комфортное для себя окружение, а плюшки могут быть полезны тем кто его только ищет.

bash и zsh отличные шеллы, но для статьи между вариантами "поставьте fish" и "поставьте zsh и oh-my-zsh, потом поставьте плагин zsh-autosuggestions, настройте вот это и вон то" я выбрал первый.
Fish можно попробовать "бесплатно" — не тратя время на настройку. Не зашло — выкинул, настроил другой шелл. Если не настраивал, то и выкидывать не жалко.
Главное, чтобы читатель увидел какие фичи вообще бывают и тогда он при желании сможет настроить их и для других оболочек.

Ничего не имею против zsh + ohmyzsh, но отвечу для тех кто тоже столкнётся с проблемой совместимость fish и bash.


Если использовать fish только как интерактивную оболочку, боль от отсутствия обратной совместимости минимизируется.
Иногда возникаю проблемы, что копипаста со stackowerflow или какой-то скрипт не работает (потому что в нём нет shebang), но тут есть варианты как это исправить.


  1. Если команда простая, её можно адаптировать под синтаксис fish.
  2. Всегда остаётся вариант выполнить команду через bash:
    $ bash script.sh              # Запускаем скрипт в bash
    $ bash -c 'your command here' # А теперь команду
  3. Если учитывать решения с плагинами, можно попробовать fish.reply

Спасибо за комментарий. Попробую ответить.


1) настройка «под себя» это первый гвоздь в гроб пользователя, это отчасти работает если кроме пары настроенных ПК вы ничем не пользуетесь, а когда у вас например 600 стандартных ПК, то у вас есть только та консоль, что уже установлена

Зависит от задачи. Не каждый работает с таким количеством компов, поэтому смею предположить, что для большинства пользователей настройка под себя приемлема.


2) если умирает какой-то проект на который вы подсели, то будет ломка, я не хочу ломки

Хороший аргумент. Можно снизить шансы, что это произойдёт если выбирать популярные опенсорсные утилиты. Вероятность, что они умрут меньше, потому что сообщество может взять поддержку утилиты на себя. С другой стороны проект может умереть и вы этого даже не заметите если утилита работала и работает исправно.


3) консоль требует очень-очень хорошей памяти, которой например у меня нет и я быстрее всё сделаю «стрелочками» в FAR/NC чем вспоминая команды и их формат в консоли.

Наверное я не до конца понял. Вы имеете в виду только работу с файлами в этом пункте? Если так, то это не противоречит статье. Возможно, стоит добавить ещё один спойлер с файловыми менеджерами :)

Согласен, будет неприятно, но лучше чем если человек вовсе не знаком с консолью.
Я хочу заинтересовать людей, которые не хотят пользоваться консолью из-за того, что им некомфортно. Тут ведь как. Вошёл во вкус и вот сам не заметил как поставил себе i3 и пишешь скрипт на каждый блок в статусной строке :)

К сожалению, клавиша z в top на macOS ничего не делает, да и в целом в этой версии топа довольно мало функций


Вот всё что есть


А вот если linux, то действительно можно добавить цветов.

Для картинки нужна была несуществующая команда :)
P.S Не знал, что для say можно ещё и голос выбрать, спасибо за ссылку
Спасибо за вопрос. Есть возможность использовать netcat?
Стоит еще упомянуть, что при асинхронном обновлении, адаптер не подписывается на изменения дочерних групп, а значит при вызове `notify*` из этих групп он не узнает о том, что что-то изменилось и как следствие, например, разворачивание/сворачивание `ExpandableGroup` не будет работать. Объясняется отсутствие подписки тем, что с ней были утечки памяти.

Кстати, Groupie, начиная с 2.2 поддерживает androidx (что сделало невозможным использование её на проектах, которые еще не настолько стильные и молодёжные) и предоставляет метод asyncUpdate для просчитывания DiffUtil в бэкграунде.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Works in
Date of birth
Registered
Activity