Pull to refresh
7
0
Alexander Yaburov@impalex

Разработчик

Send message

Динозаврами. :)

А если серьезно, это всё те же программисты. ИИ ничем не мешает создавать что-то, чего никто еще не делал, но может снять часть рутинных моментов. Вы напишете "быстрое вычисление обратного корня", а ИИ - тесты для него.

Никто не вымрет. Хотя расслоение, скорее всего, произойдет. И уже, как мне кажется, происходит. Будут, назовем их, "операторы промптов", которые могут делать простые проекты быстро, но так же быстро будут упираться в потолок на чем-то сложном или нетривиальном. И будут "программисты", которые просто используют ИИ-инструменты в качестве "усилителя".

Не ошибаетесь. Не знаю, у кого заказывалось, но исполнитель выполнил свою работу максимально топорно. Однотипные, одной пачкой, даже без попытки имитации органического трафика, написаны языком, которым реальные пользователи не пишут, не соответствуют реальности (постоянные утверждения про "без рекламы"), местами видны следы нейронки (когда та сбивается, и начинает путаться в символах) - " интерфيل ", " Удобно، ". Печально... Поначалу автор оставлял положительное впечатление, несмотря на все косяки (ну, учится человек, разбирается, делится опытом).

Эмиль, остановитесь, пожалуйста. Это уже третья статья про одно и то же, без какой-либо полезной информации.

И чем дальше, тем глубже Вы себя закапываете. Статьи можно уже разбирать для сборника "как делать не надо". Глядя на приведенный onCreate, у меня волосы дыбом встают. Смешивание UI и data. Контекст активности в Room вместо контекста приложения. Пересоздание базы при повороте экрана... можно продолжать, тут много "что не так".

Не использование проверенных временем паттернов - это не повод для гордости.

Прошу прощения, я немного покритикую.

PIN сохраняется в DataStore

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

Сервис в таком виде, что сейчас - не самый лучший вариант. Если бы Вы публиковались в Google Play, то с большой вероятностью приложение завернули бы на модерации.

Обновление уведомления каждую секунду - нагрузка на систему, лишний расход батареи.

Использование delay(1000) для измерения времени - плохая практика. Вызов delay(1000) не даст ровно одну секунду, со временем накопится дрифт. Используйте System.currentTimeMillis() при измерении отрезков времени.

Из контекста не ясно, откуда берется scope. У Service() нет своего лайфцикла (речь про lifecycleScope). Не знаю, что там за кадром, но в теории, если быть неаккуратным со scope, можно получить утечку памяти.

Если сервис нужен только для таймера, а я не вижу больше ничего, обратите внимание на методы setUsesChronometer и setChronometerCountdown у уведомлений.

Каждый экран — отдельная Activity с Compose-контентом. Да, я знаю про single-activity с Navigation Compose, но для приложения такого масштаба это было бы оверинжиниринг.

Почему это "оверинжиниринг"? Наоборот же, многое упрощается. Один лайфцикл, одна точка конфигурации, один DI scope, удобная навигация. Куча разных activity больше похожа на привет из 2015-го.

Если кто-то решит так использовать старое железо - аккуратнее с зарядкой. Обязательно надо что-то "колхозить". У меня когда-то какой-то из старых нексусов в подобном качестве работал. Результат - через какое-то время вздувшаяся батарея разворотила корпус. Как говорится, сам дурак. Не наступайте на те же грабли.

"Мешает" - больше имеется в виду, что мешает избавиться от привычки смотреть в клавиатуру, а не на экран. Это как дополнительные колесики для детского велосипеда - пока их не уберешь, не научишься ездить.

Сценарий знаком каждому: вы печатаете длинное сообщение, поднимаете глаза на экран, а там — ghbdtn, rfr ltkf&.

Не каждому. Зачем Вы обобщаете? :) Живу с тремя раскладками - en/ru/jp - сценарий не знаком. (Кстати, стало вдруг интересно, как Ваша утилита отреагирует на ту же хирагану) :) Приучайтесь смотреть не на клавиатуру, а на экран, это совсем не сложно.

Каждому своё, конечно... но подобного рода софт больше мешает, имхо.

"Ребенка", к сожалению, уже давно выплеснули... и не одного.
Ставьте эти самые три буквы, дальше будет только хуже.

Такое чувство, что выжгли здоровенный кусок интернета. Не работает веб-версия Telegram, Steam, Digital Ocean, Twitch, капча Cloudflare сломана... список можно продолжать. Туда же попал и мой личный VPS - открыть свой же сайт невозможно, сломан IMAP.

Интересно, что коннект проходит, данные передаются, но все глохнет после десятка (или около того) переданных килобайт.

С горем пополам удается пробить все это с помощью туннеля по трем буквам (первая не V) - почему-то (пока?) работает.

PS: Курган. Домашний дом.ру и мобильный t2 - картина одинакова.

Увы, нет, не снимает. Это просто разновидность "создателя". Сама идея мне нравится (ну люблю я фантастику), но это просто введение новых сущностей. Готовы объяснить, кто "создал" тех, кто симулирует?

Возможно потому что это не одномоментный процесс, не?

Введение некоего "создателя" не решает проблему, а только усугубляет ее.

Намеренно. Для меня, как для пользователя, такой интерфейс (скрытие родителя) является дизориентирующим. Если сильно надо скрывать, то это делается легкой перекомпоновкой:

@Composable
fun NestedMenuTest(modifier: Modifier = Modifier) {
    var isExpanded by rememberSaveable { mutableStateOf(false) }
    var isNestedExpanded by rememberSaveable { mutableStateOf(false) }
    Box(modifier = modifier) {
        IconButton(onClick = { isExpanded = true }) {
            Icon(Icons.Default.MoreVert, contentDescription = null)
        }
        DropdownMenu(expanded = isExpanded && !isNestedExpanded, onDismissRequest = { isExpanded = false }) {
            DropdownMenuItem(text = { Text(text = "Item 1") }, onClick = { })
            DropdownMenuItem(
                text = { Text(text = "Item 2") }, onClick = { isNestedExpanded = true },
                trailingIcon = {
                    Icon(Icons.Default.MoreVert, contentDescription = null)
                })
            DropdownMenuItem(text = { Text(text = "Item 3") }, onClick = { })
        }
        DropdownMenu(expanded = isNestedExpanded, onDismissRequest = { isNestedExpanded = false }) {
            DropdownMenuItem(text = { Text(text = "Nested Item 1") }, onClick = { })
            DropdownMenuItem(text = { Text(text = "Nested Item 2") }, onClick = { })
        }
    }
}

Вы все несколько переусложняете.

Но в любом случае, такого рода решения не очень хороши с точки зрения юзабилити. По моему скромному мнению.

Ну оно так-то достаточно просто делается... Пример, набросано за несколько минут:

@Composable
fun NestedMenuTest(name: String, modifier: Modifier = Modifier) {
    var isExpanded by rememberSaveable { mutableStateOf(false) }
    var isNestedExpanded by rememberSaveable { mutableStateOf(false) }
    Box(modifier = modifier) {
        IconButton(onClick = { isExpanded = true }) {
            Icon(Icons.Default.MoreVert, contentDescription = null)
        }
        DropdownMenu(expanded = isExpanded, onDismissRequest = { isExpanded = false }) {
            DropdownMenuItem(text = { Text(text = "Item 1") }, onClick = { })
            DropdownMenuItem(
                text = { Text(text = "Item 2") }, onClick = { isNestedExpanded = true },
                trailingIcon = {
                    Icon(Icons.Default.MoreVert, contentDescription = null)
                    DropdownMenu(expanded = isNestedExpanded, onDismissRequest = { isNestedExpanded = false }) {
                        DropdownMenuItem(text = { Text(text = "Nested Item 1") }, onClick = { })
                        DropdownMenuItem(text = { Text(text = "Nested Item 2") }, onClick = { })
                    }
                })
            DropdownMenuItem(text = { Text(text = "Item 3") }, onClick = { })
        }
    }
}
Результат
Результат

Возможно стоит еще немного подумать над интерфейсом? Потому что каскадное меню на смартфоне - это перебор.

PS: Эмулятор умеет записывать видео (ну или через adb shell screenrecord тоже вариант).

Именно в этом диалоге использовалась Llama-3-8B-Stheno-v3.1. Старенькая, но весьма адекватная на мой взгляд модель, хотя результатов как от взрослых моделей ждать от нее не стоит. Найти можно на huggingface.

Локальная небольшая нейронка (а не монстр вроде ChatGPT), крутящаяся на моей 4070 и то смогла в двух словах объяснить, что это такое.

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

Прошу прощения, но...

Pig wings are a pork product made from the fibula of a pig's shank[1] - a single bone surrounded by lean, tender meat.[2]

https://en.wikipedia.org/wiki/Pig_wing

Так что вопрос про свиные крылышки не такой уж и "подковыристый". =)

Вики утверждает, что программируемые уже разобрали.

Долгое время особенности работы оригинальных калькуляторов семейства Б3-34, включая МК-61, не позволяли создать эмулятор, полностью повторяющий работу микрокалькулятора. В 2012-м году Феликсу Лазареву под оптическим микроскопом удалось отсканировать кристаллы микропроцессоров, использующихся в микрокалькуляторах и разобраться в системе команд ядра. В результате работ при помощи эмулятора возможно полностью и точно повторить всю работу микрокалькулятора, включая все недокументированные функции

https://code.google.com/archive/p/emu145/downloads

1

Information

Rating
4,971-st
Date of birth
Registered
Activity