a_jelly: (Default)
Чем дольше мы работаем c Android, тем больше становится размер его репозиториев. Если версия 4 была еще туда-сюда, и занимала всего каких-то 6.4 Gb что уже казалось ужасом (репозиторий такого размера SVN не переварит никогда), то дальше становилось только хуже. Собственно, это была одна из причин, по которой мы перешли с SVN на чистый Perforce. Аппетиты Google меж тем продолжали расти. У них же тоже Perforce, а он всё стерпит. Версия 6.0 уже занимала 36 гигабайт (36, Карл). Причем код Framework вырос незначительо (с 846 до 1400 Мб.). Основной объем занимает каталог Prebuilt. Он разросся с двух гигабайт до 7! Также разрослись внешние библиотеки.

Что лежит в prebuilt? В основном какие-то левые бинарники, которыми Android и собирается. Изначально у них были довольно простые требования. Типа, иметь gcc такой-то версии, bash такой-то, git и еще кое-что. Но чем дальше, тем больше Google понимал, что не смогут сделать нормальную среду сборки независимой от окружения. Оно и понятно. Если посмотреть внутрь, то там ТАКОЕ! Сыграл свою роль и уход от православного Make на самописные многостадийные системы сборки. В итоге было принято "стратегическое" решение не обращать внимание на то, что там установлено у юзера, а тупо затащить в репозиторий все бинарники, которые могут понадобиться при сборке. Начиная с JDK и кончая Clang. Так и было сделано. Ну а что, диски же дешевеют?

Как результат репозиторий Android 11 занимает уже не 36 гигабайт, а 120 гигабайт. И львиную долю (55 GB) всего этого беспредела по-прежнему занимает prebuilts. Как вы понимаете, разработчику (то есть мне) давно надоела такая ситуация. Во-первых, нужно много мета на SSD, во-вторых, нужно хранить все в VCS. Что не может радовать. Поэтому я задумался над решением, которое позволяло бы выделить из всего этого скопища файлов что-то действительно необходимое для сборки. Идея была проста - запустим сборку, посмотрим какие файлы будут прочитаны из репозитория во время процесса компиляции и вуаля!

Легко сказать, но трудно сделать! Процесс сборки с нуля занимает 8 часов. А сам репозиторий содержит более миллиона файлов. Потенциально мне мог бы помочь Inotify, но он не работает рекурсивно. А надеяться, что можно будет добавить все десятки тысяч директориев без просадки производительности не было и мысли. Тогда я задумался о FUSE. На просторах Github я нашел подходящий проект Rémi Flament - loggedfs. Он был создан для других целей и с другим дизайном, но подходил мне как основа для переделки. Так был рожден проект distillerFS - https://github.com/a-jelly/distillerFS

Я избавился от зависимостей pcre и libxm2, а также переписал код с С++ на чистый С (прости меня, Rémi!). Также я добавил конфигурацию на TOML, который более человеко-читаем чем XML, и логику сохранения журнала всех действий в памяти. Это позволило практически не снижая производительности и используя не запредельно много памяти запустить сборку в режиме логирования. Спустя восемь часов я имел полный список файлов, которые были РЕАЛЬНО необходимы. Конечно, каждая конфигурация сборки (скажем, если мы сменим hardware platform) может затронуть несколько другие файлы. Но ничто не мешает запустить все необходимые конфигурации, собрать по ним статистику и затем сделать join.

Были проблемы и с семантикой. Так, система сборки Android часто проверяет наличие файла, чтобы потом никак его не использовать. В этом случае файл можно не копировать, а просто сделать touch на это имя. В общем, через неделю экспериментов у меня получился скрипт, который создает из лога сборки новый репозиторий, но уже гораздо более компактный. После "дистилляции" обьем файлов для Android 11 уменьшился с 120 до 6 гигабайт!
Мне кажется - неплохая прибавка к пенсии. Понятно, что distillerFS можно использовать и для других целей, так что если вдруг у вас возникла необходимость в быстром логировании доступа к диску - можете пользоваться. Лицензия либеральная - Apache. Так было изначально, и я не стал ничего менять.

Сборка тривиальная:
sudo apt-get install libfuse-dev
git clone https://github.com/a-jelly/distillerFS
cd distillerFS
make
make install

Дистилляция тоже не сложная:
start_distfs.sh
cd OriginalRepo
make
stop_distfs.sh
process_log.lua access.log /home/user/OriginalRepo /home/user/DistilledRepo > copy_distist.sh
sh copy_dist.sh

Lua-скрипт прилагается. Понятно, что он заточен под мои цели, и вы можете доработать его рашпилем, если необходимо.
Такие дела.
a_jelly: (Default)
Пофиксил в Android ошибку обработки Page Up в ListView. Классическая копипаста с ошибкой +/-1 в результате. Странно, что за несколько лет ее никто не заметил. Видимо, мало народу сидит с физическими клавами.
Ну, и не боги знать, GUI пишут.
a_jelly: (Default)
Сделал commit под номером 1001 в репозиторий с Android-ом.
Заодно возникла идея названия книжки сказок для программистов.
a_jelly: (Default)
Во...

በደህነት ፖሊሲዎች ምክንያ ካሜራ ቦዝኗል

P.S. Комментарии скринятся, чтоб другим было интереснее.
Наталья была близка...

Итак, я раскрываю коменты. Первой к правильному ответу подошла Наталья. Это Амхарский язык в котором дейстивтельно применяется геэзский алфавит. Амхарский относится к южной ветви семитских языков. Является государственным языком в Эфиопии. Хотя назвать его "эфиопским" было бы не совсем верно. Такие дела.
a_jelly: (Default)


В последнее время стал чаще замечать анонсы типа: "Северная Корея выпустила собственный смартфон", или "В Сколково создан первый российский смартфон". На самом деле, суть не в названии страны или компании конечно. Суть в том, что такое - "собственный смартфон"?

Поскольку простые люди, маркетологи и программисты вкладывают в это слово разный смысл, попробуем дать несколько последовательных определений, приближающих нас к идеалу по оси "собственности".

Ведь и вправду, что такое iPhone 3, как не Samsung (и еще уйма других компаний) с яблочным логотипом и подлатаной GNU-той операционкой?

Итак, уровни приближения:

1. Дешевый и эффективный
- Купить телефоны в Китае, поменять фон и приклеить логотип

2. Чуть менее дешевый
- Купить телефоны в Китае, поменять всю оболочку (launcher) и приклеить логотип
(по этому пути идут многие компании, кстати!)

3. Традиционный "честный" вариант
- На базе имеющегося reference design задизайнить свой аппарат
- Заказать в Китае платы, аккумуляторы, корпуса...
- Собрать все это (в Китае же)
- Собственноручно скомпилить Android под конфигурацию своего телефона,
- И конечно - поменять оболочку на свою

4. Вариант для больших
- Создать свой reference design на базе известной архитектуры (ARM к примеру)
- Создать и развести (в Китае?) плату
- Самолично задизайнить и отштамповать корпуса
- Портировать на него Linux
- Взгромоздить поверх него Android
- Не забыть поменять логотип

5. Вариант для очень больших (сейчас почти не реален, но раньше так делали многие)
- Создать свой reference design на базе известной архитектуры CPU
- Создать и развести плату (на своих мощностях)
- Самолично задизайнить и отштамповать корпуса
- Портировать (или написать) под получившуюся платформу свою собственную OS
- Не забыв про прикладной soft
- И, разумеется, свою оболочку

6. Идеальный вариант сферического телефона Сколково (переносной, полупортативный)
- Создать свою архитектуру CPU (на крайняк - взять свободную типа Leon2 в VHDL)
- Испечь в Зеленограде процессоры с этой архитектурой (180 Нм, ну вы в курсе)
- Там же сделать всю обвязку как то - память, GSM, GPS, WiFi, Bluetooth и т.п.
- Не забыть про экран (Amoled конечно!)
- Создать reference design на базе всей имеющейся ботвы
- Развести плату (опять же - в Зеленограде)
- Произвести плату, корпус и конечно коробки для переноски (снабдить ручками!)
- Написать свою ОS под новую архитектуру (ну, или портировать Фантом от DZ)
- Написать весь системный soft под эту ОS (ну там, стеки протоколов... вы знаете)
- Написать прикладной софт под эту OS
- На базе этого навалять оболочку, интегрировав туда свой софт (как то: звонилка, календарь,
adress book, E-mail клиент и до кучи Web-browser)
- Собрать все вместе и показать президенту

Как видим, создание воистину собственного телефона (аутентичного и православного) - практически непосильная задача, намного превосходящая по трудоемкости создание национальной операционной системы, не говоря уж о браузере. Задача столь сложная, что последние несколько лет никто даже не пытается ее решать в одно жало. Да и незачем. Международная интеграция достигла такого уровня, что лепить на коленке то, что можно интегрировать нет смысла.

Большинство компаний не идут дальше третьего уровня. Совсем небольшое выходят на четвертый. 2-3 (на сегодня) живут на пятом. На шестом уровне сегодня нет никого, да и не больно то надо.

Дальше конечно начинает вставать вопрос национальной гордости. А до какого уровня сейчас может дотянуться Россия/Нигерия/Северная Корея/подставить свое?

На этот вопрос ответить непросто. Вероятно до четвертого, если брать Россию. Ценой урезания функциональности или наоборот, напряжения всех сил - можно вылезти на пятый. Но в это верится слабо.

Такие дела...
a_jelly: (Default)
Какая же все-таки тупая система сборки в Eclipse! Уж начто я ненавижу make и прочих муравьев, но они и то лучше...
a_jelly: (Default)
Разработка под Android чем-то напоминает старую добрую разработку под IBM/370. В части процедуры.

Сначала в редакторе пишешь много-много кода стараясь не ошибиться в синтаксисе. Потом выкладываешь файл на компиляторную ферму. Запускаешь сборку. Ждешь 3-5 минут; если вылетает ошибка - правишь. Между трансляциями можно вздремнуть, или прочесть пару-тройку новостей в сети.

Наконец, генерится образ, ты его перепрошиваешь, включаешь device. Делаешь тестовый прогон и...
Все повторяется снова.
a_jelly: (Default)
До чего же глючен Android внутри. Все на живую нитку. Как оно вообще работает? Ума не приложу.
Даже Джобсовское поделие со стороны смотрелось лучше.
a_jelly: (Default)
Вот тут Gizmodo разродилось сравнительной статьей, почему платформа Android лучше чем iPhone (как будто мужики не знали). Общий пафос - Android дает больше свободы. Но мы то с вами знаем, еще с 1984, что "свобода - это рабство". Или, можно переформулировать - рабство (все мы знаем у какой компании) - это и есть подлинная свобода. Во всяком случае - миллионы пользователей в это верят. И будут продолжать верить несмотря ни на что.

December 2025

S M T W T F S
 123456
78910111213
14151617181920
21 222324252627
282930 31   

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 2nd, 2026 01:14 pm
Powered by Dreamwidth Studios