to post messages and comments.

← All posts tagged Android

Короче, пишешь ты такой на андроеде media player. Взял в руки С, взял OpenSL ES, который на С написан, и там они размахивают тем, что тред у них, в котором ты кормишь данными звуковуху, работает в реалтайм приоритете.

Значит, написал ты код, у него 1% cpu time, музыка сладчайшая льется, а потом нажимаешь home, прога уходит в background, и звук начинает рваться.

И через некоторое время ты перетаскиваешь код в android service (который отдельно от гуя работает) и там тебе дают больше ресурсов, и не замедляют проц, когда ты уходишь в фон. И видишь ты, что твои наиболее жручие рутины в сервисах работают в фоне наконец-то за нормальное время а не тормозят в 10 раз как если как раньше в процессе гуя.

Но звук все равно рвется. Тогда ты начинаешь кормить звуковуху кусками не по 10 мсек, а по 500. Шоб значит, цыкл не тормозил. И с ужасом наблюдаешь, что реалтаймовый OpenSL ES пока играет эти 500 мсек ВНУТРИ СЕБЯ — прерывается 5 раз и хрипит.

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

Оказывается, что если ты инициализировал плеер не с частотой 48000 а с 44100, то такая жопа. А 48000 надо узнавать только из жабового вызова, который вернет нативную частоту всей колымаги. В старых устройствах оно вообще ничего не возвращает, и надо пользовать 44100, в новых 48000 вот.

Мне в общем норм по-всякому, но надо ж об этом где-то писать покрупнее, шоле.

Сколько я времени потратил на неправильно написанные JNI названия функций на C стороне! Мама! Просто дофига. Программа на андроеде крешится в рантайме оттого что не находит ф-ю.

А петонисты и пхп-шники, а еще жабоскриптеры живут в этом и для них норм. Кошмар.



Потребительства псто.
Xiaomi mi 5s plus всем пока хорош, после нексус 6. Батарейка, перформанс, сканер пальца ваще зверь, первый минус — экран маркий. уже думал такого не бывает, забыл как это. Зато самое главное счастье, которое было в обязательном списке, это юсб-ц. Потому что на всех моих телефонах микроюсб держался в разьеме как бублик в руках младенца — неизвестно когда вывалится. Теперь я счастлив. Турбо зарядка! Правильное расположение кнопок включения, громкости. Идеально была бы ещё кнопа Хоум как на ми5, но такого телефона ещё не придумали.

Залил новую версию Juick Advanced (22.0.49) на Google Play:

Починил дискуссии (угнич поменял схему авторизации на вебе, куки другие итп)
Починил unanswered (угнич поменял схему авторизации на API, на клиенте я обновил, а на сервере старая была, облом)
Укоротил матюк на весь экран (теперь пару строк), если сервак лежит или угнич что-то еще поменял.

Всем успехов в труде!

Puffin Browser недавно вышла новая версия, он внешне улучшился, и кроме всего прочего, они кажись переписали изображение страницы на native/opengl (раньше было видать на джавке), внутре армовский бинарничег 8метров, так что он теперь гораздо шустрее выглядит.

Задолбала реклама в youtube, xposed для андроеда 7.1 нету, чтобы запатчить на лету, поэтому скачал патченный APK, поставил. Притом, что реклама в трубе была еще куда ни шло, я терпел, пока там не появилась реклама yandex taxi, от внезапного начала которой у меня нервный тик. Проголосовал рублем^Wadb .

Сценарий ужасной антиутопии:

Новый телефон жрет батарею несколько дней подряд, потом перестает. Это потому что (и все это знают) он слушает и снимает непрерывно и отправляет все в Соответствующую Корпорацию, где на основании услышанного и увиденного строится профиль пользователя, ассоциируется с живым известным человеком, и покуда уровень достоверности не превысит требуемого перога, данные всё должны идти и идти. Если засунуть телефон в ящик, понятное дело, это не ускорит его "бутстрап", и поэтому все покорно подчиняются, декламирую стихи, танцуют, ходят голыми перед камерой, лишь бы он сука включился уже в нормальный режим работы.

Делается это все для того, чтобы "телефоны не крали", потому что телефон регулярно проверяет фон, и если долгое время не слышит референсных звуков (голос хозяина, жены или детей), то считается украденным и блокируется.

Подавляющее число граждан искренне одобряют это.

Или не, не так.

Активное меньшинство продавило этот закон в законодательном органе, устраивая парады перед законодательным органом, одиночные пикеты с лозунгами "нет воровству телефонов" и проведя публичную компанию по 1-му каналу "если ты хочешь, чтобы твой телефон украли — ты ватник^Wунтерменш^Wнедостоин гражданства^Wбудешь лишен права голоса в этой стране, потому что это же очевидная выгода, а ты просто дебил, ну как можно не понимать этого????!!!11"

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

У меня есть чувство, что гугловцы в андроеде в будущем перейдут на какой-то другой язык, оставив слой для совместимости с далвик-байткодом.

Предположим что это дарт, он типа жаба, но не жаба, значит подходит, не придется много менять (как если бы брать язык с reference counting или голую сишечку).

Далее нам нужно сделать его самым крутым, набрав все самое хорошее из всего что есть на данном участке истории. Есть знакомый андроидский фреймворк, который хорош тем, что его все знают. Есть прекомпиляция в нативный код (у микрософта так делается в их маркете). Остальные ништяки приходят из самого дарта: язык не ограниченный оракловскими копирайтами итд.

Шаг1: транслятор исходников из жабы в дарт. Вместо java.lang.String имеем дартовские стринги и всякие java.* попадают в соответственные дартовские места. Раздаем третьим девелоперам в обязательном порядке.

Шаг2: Транслируем весь свой андроед-фреймворк в дарт (сорцы), старые выкидываем.

Шаг3: Натягиваем на фреймворк слой совместимости с жабой: он включает в себя современный далвик/арт, и тонкие враппер-методы, которые оборачивают в жабу весь дарт-рантайм. Замораживаем развитие этого жабо-слоя, чтобы на нем не писали, а все что уже понаписано, чтобы работало.

Шаг4: пишем правильный рантайм для дарта: компиляция в нативный код может делаться как у микрософта, на плей маркете под конкретное железо, равно как и в девелоперских тулзах, чтобы девелоперы не грузили байткод на устройство больше ни в каком виде. DEX, умри.

Шаг5: говорим ораклу досвиданья, тусуйтесь без нас.

Шаг6, естественно, имеем уже и щас также компилятор дарта в жабо-байткод, чтобы дарт жил и поверх JVM.

Шаг7: под это дело плагин в Android Studio (IDEA-based), как раз они купили под это дело правильное IDE.

Все эти шаги сами по себе реалистичны, а результат крут. Гугл известен такими несложными шагами, дающими вместе качественно более значимый результат (например GWT сделали практически из того что было, а поди ж ты!)

Это все у меня возникло в голове, когда я думал какой Language Level ставить андроидскому проекту в Идее.

У меня сегодня автоматически удалились с андроеда все гугл-аккаунты, включая Google Apps (мыло внутри компании). Кроме того, на другом телефоне, на котором мы с женой шарим todo, тоже удалился аккаунт. Залогинились снова, всё ок.

Что это было?

Объявляется открытие сезона переезда сервера Juick Advanced на новый хостинг.
В связи с этом в течение ближайшей недели-двух могут случаться недоставка уведомлений и непоказ картинок, если они у вас через JA proxy.
В связи с этим обновите клиента, когда он апдейт объявится на Google Play.
В связи с этим также предлагаю всем выразить коллективную благодарность юзеру @mintcat , который в стародавние времена любезно протянул руку помощи моему начинающему проекту.

А вот скажите, есть ли такой сервис, чтобы я с разных своих серверов регулярно слал на него всякие показатели, типа "последняя почта была 3 часа назад", "места осталось 2000 гб", итд, а потом еще мог ставить на эти цифры руками на каждый отдельный случай всякие уровни желтого и красного, и чтобы потом оно мне все попадало на андроед и еще верещало когда что-то пошло в красный уровень? Чтобы там было сведено всё в одну таблицу/список на которое удобно смотреть.

Когда я активно пилил Juick Classic и Juick Advanced, существовал один challenge: как помечать уже прочитанные, чтобы читанные в Juick Classic и читанные в Juick Advanced отмечались в одной базе данных. Я даже напилил синхронизацию read markers с сервером в обе стороны, но Juick Classic почил, потому что поменяли дизаен, кароче такое.

Щас не то шобы я собираюсь пилить, потому что как-то не складывается пока нынче, но почитываю и жуечку и пойнтач и даже бнвач, и вот одно из последних дел что я сделал — это общую ленту для них в JA, и теперь Juick Classic вообще даже идеологически не вписывается в этот зоопарк.

Но идеи в голове у меня плодятся, одна отмороженнее другой. Идея синхронизации веба на десктопе с Juick Advanced решается тем, чтобы на самом JA захостить веб-сервер и ходить туда бровзером (шобы не вбивать ip address с портом, можно сделать редирект с веб сайта на текущий intranet address). Тогда можно будет и запилить и свой клевый гуй с прокруткой, и автокомплит и подсказку тегов при создании, и unanswered там же будут, и уведомления об ответах, читаемые одновременно с девайса и веба и выскакивающие в бровзере. И единообразная лента для всех источников. Короче, узелок на память.