Есть такой онлайн-сервис SunCalc. Он использует астрономические формулы, чтобы показывать положение солнца в заданных координатах и заданное время. Я его применяю, например, чтобы выбрать время и место съёмки.
Так вот, там в сервисе взяты Google-карты, и уже несколько лет на каждом тайле отображается ватермарка "For development purposes only", а при старте сервиса выскакивает ошибка о некорректной загрузке карт. Это произошло из-за того, что Гугл в какой-то момент поменял карты, не сохранив обратную совместимость, и сделал платной ту квоту, которая прежде была бесплатной, увеличив стоимость использования в 14 раз!
В SunCalc, как и во множестве подобных проектов на базе API крупных компаний, нет рекламы и монетизации. А код сервиса доступен в Open Source. Это просто удобная онлайн-тулза от энтузиаста. Он на ней не зарабатывает, даже наоборот: тратит собственные деньги на оплату серверов, просто чтобы привнести в мир некоторое универсальное общественное благо. Формально, конечно, Гугл, как владелец своих карт, имеет полное право раздавать доступы к этим картам на любых условиях. Но фактически нет никакой хорошей и рациональной причины, по которой бесплатный некоммерческий общественно-полезный сервис не должен иметь возможность применять эти карты.
Платить автор сервиса точно не будет: нет никакого смысла выкидывать сотни долларов в месяц просто так ради жадности Гугла. Получается, что пользователи на ровном месте испытывают неудобства. Хоть и небольшие, но всё-таки — работать с чистой картой без надписей и затемнения гораздо приятнее.
Вот вам ещё про вред капитализма и монополий. Не то, чтоб я видел какую-то другую более работающую экономическую систему (социализм с его плановой экономикой во много раз хуже и нежизнеспособнее, разумеется). Но просто каждый раз раздражают такие ситуации, когда на них наталкиваюсь. Какого хера вообще?
#web#dev
https://github.com/aio-libs/aiohttp-debugtoolbar
aiohttp_debugtoolbar provides a debug toolbar for your #aiohttp#web application. Library is port of pyramid_debugtoolbar and still in early development stages. Basic functionality has been ported:
basic panels
intercept redirects
intercept and pretty print exception
interactive python console
show source code
🚀Вышел AndroidX WebKit 1.16.0. Забирай в работу интеграции
👉 minSdk поднят до 24 (Android 7.0) — учитывайте при апгрейде.
👉 Async-старт WebView вышел из experimental. startUpWebView вместе с ProcessGlobalConfig позволяют прогреть WebView в фоне до того как он понадобится UI. Эту штуку давно ждали в стабильной версии — для меня самое ценное обновление этого релиза.
👉 Navigation API тоже стабильный. Больше не надо @OptIn — addNavigationListener даёт колбэки на разных стадиях навигации, ошибку загрузки через Navigation.webResourceError, URL текущей страницы через Page. Главное — теперь FCP и LCP метрики прилетают напрямую из WebView без инъекции JS:
// Перед использованием проверь
// WebViewFeature.isFeatureSupported(WebViewFeature.NAVIGATION_LISTENER)
WebViewCompat.addNavigationListener(webView, object : NavigationListener {
override fun onFirstContentfulPaintMillis(page: Page, millisFromNavStart: Long) {
analytics.report("FCP", millisFromNavStart, page.url)
}
override fun onLargestContentfulPaintMillis(page: Page, millisFromNavStart: Long) {
analytics.report("LCP", millisFromNavStart, page.url)
}
override fun onNavigationCompleted(navigation: Navigation) {
navigation.webResourceError?.let { err ->
Log.w("WV", "load failed: ${err.errorCode}")
}
}
})
На один WebView можно вешать несколько листенеров и прокидывать свой Executor если нужны колбэки в фоновом потоке.
👉WebViewCompat.saveState теперь умеет ограничивать размер state. Если ловили TransactionTooLarge при сохранении состояния — это для вас.
👉 Подвезли addJavaScriptOnEvent для инъекции JS на загрузку документа и инъекцию скриптов в isolated worlds без конфликтов со страницей. Гибридным приложениям пригодится.
👉 [EXPERIMENTAL] BackForwardCacheSettings полностью переписали. Если использовали старый Builder через WebSettingsCompat.setBackForwardCacheSettings — ловите ошибку компиляции при апгрейде. Теперь так:
val settings = WebSettingsCompat.getBackForwardCacheSettings(webView.settings)
settings.setMaxPagesInCache(5)
👉Profile.setSpeculativeLoadingConfig депрекейтнут, замена через Profile.setMaxPrerenders плюс PrefetchCache.setMaxPrefetches и setPrefetchTtlSeconds (тоже experimental).
#Android#Webview#Web#AndroidDev
Вопросы не задавали, и мне задать не дали. Презентацию прервали, я ушёл. Позже в коридорах уже конкретные мужики инженеры, с кем я изначально обсуждал проект, нормально высказали пожелания и дали мне ответы. А ещё упаковали с собой коробку с несколькими газоанализаторами и ПЛК к ним.
В общем, настроение моё было смешанное. Вроде у нас договор, так что кинуть меня не должны были. Но вроде как начальству пофиг. Но по меньшей мере я понял, что делать нужно попроще, и после возвращения домой выпилил движок с выражениями, оставив набор выпадающих условий. А ещё подключил к настоящим устройствам и погонял дома у себя с помощью зажигалки.
В итоге всё закончилось хорошо. Проект я сдал, оплату получил. Используют ли его, я не знаю, надеюсь, что хотя бы экспериментально установили кому-нибудь из клиентов на производство. Но это первый мой заказ, который включал сразу бэк, фронт, работу с железом, шифрование, формирование установочных пакетов. Короче, опыта набрал прилично. На первом фото сборка газоанализаторов у моего компьютера, на втором дашборд с графиками концентраций.
#dev#gadgets
На днях мне пришёл крутой девайс — Flipper Zero.
Flipper Zero — это электронный гаджет, который запустил на Kickstarter два года назад русский специалист по компьютерной безопасности Павел Жовнер. Кампания была супер успешна и собрала почти $5 млн! Об этом даже писали в Forbes, а автора приглашали на разные интервью и айти подкасты. Скорее всего, если вы айтишник, то слышали о проекте, а может даже купили себе Flipper.
В ходе кампании проект столкнулся с чудовищными сложностями. Пандемия и остановки производств. Кризис микрочипов. Дефекты сборки. Ребятам приходилось несколько раз менять сборочные линии, перепроектировать плату, искать для компонентов аналоги. Это при том, что вообще сам Кикстартер официально не работает с россиянами, а с китайцами по многочисленным рассказам не так просто договориться до подходящего уровня качества, если заказ не типовой. Отсюда много задержек, первая крупная партия была выпущена, кажется, на год позже, чем заявлено. Но даже в более мягких условиях очень многие проекты не выживают, не справляются с финансовым менеджментом, не просчитывают риски. А тут авторы очень круто везде среагировали и даже в некотором смысле вышли за границы возможного, чтобы выполнить свои обязательства. Моё уважение.
Базово Flipper это небольшой микропроцессор с оснасткой в виде радиомодулей и других средств беспроводной коммуникации. Глобально в этом нет ничего принципиально нового, что-то подобное и раньше мог собрать любой фанат электроники. Но есть несколько нюансов, которые делают устройство крайне любопытным.
Во-первых, кампания велась образцово. Привлекательная затравка и маркетинг «Flipper это тамагочи для хакеров!», регулярные обновления с подробными интересными статьями на радиолюбительские и программистские темы. По этой кампании можно учиться как в принципе презентовать и продвигать электронику на крауд-площадках, особенно в условиях задержек и кризисов.
Во-вторых, качество сборки и компоненты. Здесь лучшее железо по соотношению цена/функциональность, его подбирали люди, которые очень глубоко шарят в теме. Отличный UI/UX и эргономика. Оптимизированное энергопотребление.
В-третьих, что, наверное, самое важное: открытый исходный код прошивки и акцент на комьюнити, где энтузиасты могут писать всякие разные приложения.
На борту две RFID антенны на разные частоты, ИК-приёмопередатчик, субгигагерцовый радиопередатчик, контакты для iButton (у нас это называют "магнитный ключ" или "таблетка", типа как от домофонов), а также многофункциональные порты ввода-вывода GPIO. Из коробки устройство может, например, скопировать и повторить незашифрованный сигнал управления. Конечно, автомобиль вы так не откроете (странно было бы, если бы могли), но, например, на своих умных шторах я уже проверил: Flipper может записать сигнал от пульта штор на частоте 433МГц, а потом воспроизвести его, и шторы открываются! Ещё можно сохранять 125 кГц RFID электронные карты доступа и брелоки. У меня такой, например, от гаража. Что касается высокочастотного RFID (домофоны в новых домах, в паркингах), то есть нюансы, об этом я расскажу попозже.
Прямо сейчас каких-то фантастических функций всё же нет. Думаю, маркетинг частично сыграл злую шутку: некоторые купившие жалуются, типа, где тут кнопка "взломать всё", как в игре Watch Dogs? Даже при росте софтварной оснастки нужна определённая техническая грамотность, чтобы понять, что и как можно делать. Первые устройства только недавно поступили людям на руки, комьюнити разгоняется, документация пишется. Ещё нет ни SDK, ни толком хороших примеров. Персонально я считаю серьёзным недостатком, что в качестве места для сообщества выбран Discord: он совершенно не подходит на роль базы знаний, на закреплённых сообщениях далеко не уедешь.
Но потенциал у вещицы достаточно большой, как мне кажется. Буду писать иногда о своих экспериментах.
#gadgets#dev
Посоветую вам YouTube-канал Stuff Made Here (в свете событий можно скачать все ролики с него и потом ностальгировать по ютубу вечерами).
Пожалуй, это самый крутой инженерный видеоблог, который я встречал. У автора целый подвал роботизированных станков за миллионы баксов (просто несбыточная мечта гика). И он с их помощью городит электронно-механические конструкции, которые совмещают в себе сложное программирование и вполне очевидную практическую цель, как правило недостижимую или труднодостижимую без длительных тренировок. Вот я прикладываю видео, где он делает бильярдный стол и роботизированный кий, который позволяет не промахиваться.
Продемонстрированы все стадии разработки: неудачные прототипы, подбор алгоритма, проверка гипотез. При этом подано всё в довольно понятном и динамичном стиле. с хорошим юмором. Ролик длиной 20-30 минут обычно содержит недели и месяцы разработки.
Короче, очень круто. Если что-то и смотреть на ютубе напоследок, то вот примерно такого уровня контент, имхо.
#dev#gadgets
https://www.youtube.com/watch?v=vsTTXYxydOE
Apple удалила из AppStore около десятка приложений компании VK (MailRu Group). И это не ошибка и не случайность. Да, бывало так, что приложение с пользовательским контентом блокировали за какой-то запрещенный пост. Но тут побанили сразу всю компанию — действие явно политическое.
Думаю, в Apple сидели и вспоминали, что они еще могут сделать против русских. ApplePay отрубили, банки удалили, айфоны продавать перестали. Потом такие: "А, есть же еще принадлежащая государству соцсеть, чего это мы про нее забыли. Удаляем!".
Можно говорить о том, что ВК уже никому не нужен, поэтому невелика потеря. И о том, что нужно блокировать продукты кровавого режима. Но, как ни крути, это прецедент. Напомню, что Еврокомиссия сейчас будет принимать против Apple свод антимонопольных законов, и подобные прецеденты совершенно точно не останутся незамеченными.
А кто-то сейчас купил по параллельному импорту iPhone 14 за 140к, лол.
#web#gadgets
На днях Еврокомиссия предъявила компании Apple обвинения в нарушении антимонопольного законодательства. Если дело выгорит, то яблокам грозит по-настоящему серьёзный штраф — до 20% от всего оборота.
Нарушение как раз состоит в том, что Apple под флагом безопасности, как она это любит, запрещает сторонним приложениям использовать NFC-модуль для оплаты. Я уже об этом писал: на андроидах после блокировок можно платить телефоном через MirPay и аналоги, а вот айфоны вообще остались без инструмента оплаты в России.
Это, конечно, совпадение, что такие разборки идут нам — русским, оставшимся в стране — на руку. Начало сбора материалов для этого дела было задолго до текущих событий. Впрочем, окончательно текст нужного закона согласован в ЕС только 24 марта — и я уверен, что они одним глазком посматривали на происходящее в России. Так, на всякий случай.
Там в законе много интересного:
1. Компании обязаны давать пользователям возможность менять браузер по умолчанию и поисковый движок. Интересно, заставит ли это Apple разрешить использовать в сторонних браузерах какой-то иной движок, кроме Safari? Ведь из-за этого сам смысл альтернативных программ для просмотра web-страниц теряется почти полностью.
2. Платформам запрещается под угрозой исключения из магазина навязывать свои средства обработки платежей в приложениях. Судя по всему, здесь сыграл роль иск от Epic Games.
3. От встроенных средств обмена сообщениями требуют interoperability. Непонятно, означает ли это возможность работы между протоколами (например, отправлять из iMessage сообщения в WhatsApp), или всё-таки что-то не столь значительное.
4. Ну и да, разработчики смартфонов обязаны предоставить fair access to the supplementary functionalities, к которым относят и NFC. В теории это может означать ещё и, например, право для несистемных приложений выполнять на iOS фоновые процессы (сейчас это возможно только в качестве реакции на изменение координат).
Мне нравится этот процесс и с чисто практической точки зрения и с идеологической. Я уже писал о том, что монополии — один из наиболее значительных недостатков капитализма. В теории вроде бы всё честно: компания делает продукт и имеет право предоставлять его людям на удобных ей условиях, потому что это их продукт. Но в данном случае Европа пользуется правом сильного, потому что может. Иронично: крупные компании по праву сильного и благодаря наличию возможности вставляют палки в колёса обычным потребителям, которые из-за этого не полностью могут пользоваться собственными же смартфонами. А антимонопольные комиссии по праву сильного и благодаря наличию возможности вставляют палки в колёса компаниям, которые из-за этого не полностью могут определять условия продаже собственной же продукции.
#gadgets#web
Text Slide анимация числа для вашего проекта
Без зависимости и удобно настраиваемый
После последнего поста с рефом слайд-анимации даты, мне накидали вопросов про реализацию, рассказываю. Сегодняшнюю моду на такой эффект дали яблочники, у них нативно можно вызвать метод contentTransition и в SwiftUI такое делать изи. Но а как же другие среды? Для веба есть классное решение — NumberFlow, использовали недавно его на одном из проектов, кайф.
🛠 Поддержка: React, Vue, Svelte, TS/JS
🔗NumberFlow: Show case
🔗Github: Number Flow
Для Android слышал, делают через Jetpack Compose, но как работает в реальности — хз, на промо хорошо :)
#dev#frontend#полезное
Яндекс выложил в открытый доступ нейросеть YaLM 100B, которая может псевдоразумно отвечать на вопросы и вести беседу. К сожалению, попробовать её лично я не могу, потому что для запуска нужно около 200+ гигабайт видеопамяти, это приличная такая майнинг-ферма. Но по скриншотам она действительно хорошо работает. Хотя про GPT-3 тоже так говорили, а на деле очень так себе.
А ещё неделю назад по сети ходила новость о том, что один из разработчиков в Google пообщался с их нейросетью и увидел в ней признаки разума. Вплоть до того, что нанял юриста защищать интересы нейросети! Его в итоге отправили в оплачиваемый принудительный отпуск, подлечиться, наверное.
Разработчики знают о мысленном эксперименте "Китайская комната", но обывателю он, на мой взгляд, сложен для понимания, поэтому я попробую привести другой пример. Представьте, что у вас есть кубики с буквами, и там набор граней, которые составляют фразу "Привет, человек". Вы эти грани намазали чем-то вкусным и научили вашу собаку переворачивать кубики вкусными гранями вверх в ответ на команду "Привет, собака". В итоге, если вы говорите "Привет, собака", она переворачивает кубики так, чтобы из них сложилось "Привет, человек".
Научилась ли собака при этом говорить на человеческом языке и осознанно отвечать на приветствие? Нет. Нейросеть гораздо глупее собаки (та хотя бы способна именно сознанием различать разные человеческие фразы). Это просто набор алгоритмов, которые складывают кубики, а мы уже на этих кубиках что-то читаем. Чтобы кубики складывались правильно, этих алгоритмов много, и параметров, которыми такая нейросеть оперирует, 100 миллиардов.
Даже очень хороший алгоритм по подбору кубиков не является разумным фактически ни в каком смысле этого слова. Впрочем, это не значит, что он не может решать нужные нам задачи. Такую сетку вполне нормально поставить в условной службе поддержки отбиваться от дурачков, задающих банальные или глупые вопросы.
Что еще посмотреть по теме:
«Теорема о бесконечном количестве обезъян»;
И очень крутой фантастический рассказ Хорхе Луиса Борхеса «Вавилонская библиотека». В Библиотеке точно будет книга, которая станет буквально с вами разговаривать: вы задаёте вопрос (любой), переворачиваете страницу и видите там ответ на него, будто бы от разумного существа.
#dev#fiction