Немного исправил шапку окна чатов: - добавил прозрачность по градиенту в верхней и нижней областях окна чатов - растянул список сообщений во весь экран - кнопкам задал стандартный стиль, который разрабатываю для приложения (сейчас он выглядит неочень так как не до подбора цветов и анимаций, в основном над формами работаю)
Хорошо когда есть режим отладки, можно проинспектировать поведение виджетов:
Плохо только то, что приходится перезапускать приложение для переключения визуализации режима отладки. Смена состояния визуализации отладки задается так:
debugPaintSizeEnabled = Config.debugUI_Debug;
Flutter перестраивает виджеты быстро, на лету. Но так как мне приходится работать не только над виджетами, то иногда приходится перезапускать Flutter полностью. А это долго. Кстати, еще константы, кажется, он не умеет обновлять если поменять их значения. Приходится перезапускать приложение или менять имена переменных констант (то, что сейчас называют "лайф-хак").
Тут видно размытие и плашку с названием чата:
А тут плашка с эмодзи и профилем собеседника (персональный чат):
Еще добавил интерактивную анимашку в окно пустого чата (в качестве заглушки, потом нужно будет подобрать нужную анимацию). Анимашка скачана из сети, не моя. Пока показывать не буду. Неплохо получается, даже замечательно, вроде, не тормозит 😂.
Также вынес некоторый код темы в отдельные компоненты, унифицировал это дело.
Сейчас работаю над областью ввода и отправки сообщения. Покажу что получилось. Клиентское приложение получается собирать быстрее так как серверная логика продумана, основные механизмы сделаны. Просто сиди и собирай как конструктор, ну и редактируй потихоньку, если что-то новое добавляешь.
-- По вечерам разрабатываю сервис для общения. Кому интересено, можете подписаться куда-нибудь на меня, попробуете его в числе первых. Постепенно буду продолжать делиться успехами разработки.
Вчера немного "причесал" профили собеседников и механизм их синхронизации/отображения. На самом деле не все продумал, но "как-то оно уже работает" и оображается в групповом чате:
Создал "шапку/header" для окна с чатами. Туда добавил информацию/статус о собеседнике или чате. Также добавил иконки-кнопки аудио и видео-звонков. Звонки пока не работают, просто метсо для иконок выделил чтобы оценить как оно смотрится, оценить функциональность этих элементов. У пользователей также имеется статус состояния в сети и иконка эмоджи. В планах добавить возможность видеть: 1) заряд аккумулятора собеседника (полезно для понимания состояния собеседника) 2) Через что пользователь вышел в интернет: Wi-Fi или мобильная сеть
У групп тоже есть аватарка и название:
Также добавлено отображение измененных/отредактированных сообщений :
Дату редактирования поставил случайную
Из текущих недочетов (помимо красивого внешнего вида): - пока не оптимизировано переключение на окно переписки, из-за этого имеются задержки в начале отображения окна и элементы появляются как в старых браузерах: сперва одни элементы, потом другие. Не сразу все вместе отрисовывается. - не добавлено поле ввода.
Над отображением и порядком загрузки элементов будем работать позже, это некритично. А вот поле ввода нужно бы сделать как можно быстрее и научить приложение обмениваться сообщениями.
Также прокинул "Fingerprint" с клиентов на сервер. Сервер их получает и сейчас технически можно начать работать над разпознаванием разных устройств. Это необходимо для синхронизации данных между устройствами, которые подключены к одному аккаунту. То есть чтобы на телефоне и планшете у пользователя, условно, история переписки была всегда синхронизирована.
Текущая ближайшая задача - организовать обмен сообщениями.
-- По вечерам разрабатываю сервис для общения. Кому интересен сервис для общения, можете подписаться куда-нибудь на меня, попробуете его в числе первых. Постепенно буду продолжать делиться успехами разработки.
В конце мая был у меня ДР. И так получилось, что я пригласил разных товарищей на шашлыки. Но не со всеми был хорошо знаком, там были ребята со спорта и коллеги с работы.
За неделю до выезда началось - "Что тебе подарить?". От одних, от других... Решил составить список подарков - пришлось посидеть и повыдумывать. В какой-то момент даже спросить ИИ, что нынче есть нового в областях, которые интересны, но которыми занимаешься не профессионально, а просто для удовольствия. Мне, например, нравится вино пить и хочется чтобы это было грасиво, но о всяких пневматических штопорах и декантерах я как-то раньше не задумывался.
Отправил список одним, потом другим. В итоге думаю, сейчас купят одно и то же из этого списка, будет конфуз на вручении. Подумал, может в гугл документах разместить, но меня же будет подмывать посмотреть, что там наотмечали. И решил я, что могу запилить приложение для составления списков подарков. Ну и не без ИИ, конечно.
Главная фишка должна была быть - Легкость. Без регистрации, без смс - зашел, накидал своих хотелок и отправил в чат с друзьями приглашенными. Можно сразу кидать ссылки из магазинов - они должны распарситься и подтянуться картинки и наименование. Если людей ожидается много, и подарков нужно придумать много, но свои идеи кончились, можно попросить ИИ предложить варианты по вашим увлечениям / хобби. Ссылку можно кинуть в чат. Друзья зашли, посмотрели, отметили, что будут дарить - у других подарок закрывается как уже выбранный. Автор списка не видит кто и что отметил.
Короче, к своему ДР не успел, прикручивал ИИ и парсер ссылок, но сейчас готов показать. Реферальные программы тоже прикрутил (чего уж скрывать) - чтобы хостинг и токены окупались хотя бы.
Вот оно, мое детище - https://podaristo.ru Прошу потыкать уважаемое сообщество! Многого не жду, но хотелось бы получить честную обратную связь и поддержку! Что хорошо получилось и интересно, а что ломается (за парсер данных по ссылкам и подсказки AI переживаю), может что-то тормозит или просто отстойно выглядит. Пишите в комменты, буду править.
Некоторое время назад я показывал здесь приложение для учёта тренировок, питания и прогресса, которое собирал для себя с помощью нейросетей.
Изначально оно вообще не планировалось для публикации. Мне просто надоело жить в десятке Excel-файлов, записывать тренировки в одном месте, вес в другом, питание в третьем, а потом ещё пытаться как-то всё это анализировать.
После прошлого поста почитал комментарии. Часть людей заинтересовалась проектом, часть закономерно покритиковала, а кто-то нашёл баги, которые я сам уже давно перестал замечать.
В итоге решил не забрасывать всё это дело и за последние дни немного привести проект в порядок.
Что успел сделать:
— открыл исходный код и выложил проект на GitHub; https://github.com/IbhodII/Forma-public — переделал вход через Яндекс, чтобы он больше не был привязан к моим личным идентификаторам; — починил редактирование блоков упражнений на графике пульса в аналитике тренировок; — исправил ещё несколько найденных багов и мелких косяков.
Заодно наконец записал полноценный обзор приложения.
Получилось почти 25 минут, потому что решил показать вообще всё, что успел натаскать в программу за эти годы: учёт веса, питания, тренировок, аналитику, интеграцию с Polar, импорт велотреков и прочие вещи, которые раньше жили в таблицах и заметках.
Видеообзор (переложение двух предыдущих постов в видеоформат с демонстрацией всего функционала):
С одной стороны — попытка собрать в одном месте всё, чем я пользовался последние несколько лет для тренировок.
С другой — проверка того, что вообще можно успеть сделать с помощью современных нейросетей за относительно короткое время.
В общем, если кому интересно посмотреть на результат — ссылки на GitHub и обзор оставлю в комментариях.
Ну а если найдёте очередной баг, что очень вероятно. Отправьте его описание на почту которая указана в приложении, как только появятся деньги на разработку в первую очередь буду править найденные баги
Привет, Пикабу! Тема качества интернета и споров с провайдерами о том, куда делась заявленная скорость, актуальна всегда. Обычно для тестов мы идем на известные всем сайты, пробираемся через баннеры и ждем, пока прогрузится тяжелый интерфейс. Сегодня хочу рассказать про полезный инструмент без лишнего мусора — российский независимый сервис OpenSpeedTest.ru, который недавно выкатил масштабное обновление.
Ребята полностью переписали движок, сделали классный SaaS-виджет для вебмастеров и выкатили CLI-утилиту, с помощью которой можно настроить круглосуточный мониторинг своего канала. Статья не является рекламой — просто делюсь годным техническим апдейтом, который может быть полезен как обычным пользователям, так и сисадминам.
⚙️ Глобальное обновление движка: отказ от Canvas в пользу FPS
Первое, что стоит отметить — изменения «под капотом». Разработчики обновили алгоритмы замера и полностью переработали визуализацию.
Вместо тяжелого элемента <canvas>, который часто заставляет кулеры ноутбуков шуметь, новый спидометр построен на нативной SVG-анимации. Что это дало:
Идеальные 60 FPS даже на старых смартфонах и слабом железе.
Zero Load Impact: скрипт загружается асинхронно, весит сущие копейки и не тормозит работу браузера.
Сам движок теперь еще точнее отрабатывает замеры пинга, джиттера (Jitter) и скоростей Download/Upload, что особенно актуально для современных гигабитных тарифов.
💻 CLI-мониторинг: мечта сисадмина (и параноика)
Если вы любите все автоматизировать или просто хотите доказать провайдеру, что по ночам у вас проседает канал — для вас выпустили консольную утилиту.
Она работает «из коробки» на Linux и macOS и представляет собой единый скомпилированный бинарник без кучи зависимостей. Скачивается и запускается в пару команд:
Интеграция в Cron / CI/CD. Закидываете скрипт в планировщик, чтобы он делал замеры, например, каждый час.
Единый дашборд. Все результаты тестирования (Ping, Jitter, DL/UL) мгновенно улетают по API в ваш личный кабинет на сайте, где строятся наглядные исторические графики. Теперь у вас будут железобетонные логи работы сети 24/7.
Для быстрых проверок без записи в историю предусмотрен флаг --no-submit, а для тестов конкретного узла — флаг --server ID.
🌐 Виджет для вашего сайта
Для владельцев сайтов, блогов или локальных порталов завезли конструктор виджетов. Хороший способ удержать пользователя на странице, дав ему полезный инструмент прямо в вашей статье или сайдбаре.
Дизайн без боли. Забудьте про кривые iframe. Прямо в браузере есть визуальный редактор на 100+ вариаций дизайна. Можно настроить цвета бренда, скругления углов, выбрать темную/светлую тему или даже накинуть эффект матового стекла (Glassmorphism).
100% Адаптивность. Виджет сам понимает ширину родительского блока и корректно отображается везде.
Защита домена. Ваш настроенный виджет никто не сможет скопировать себе: API-ключ жестко привязывается к вашему домену в личном кабинете.
Безопасно для SEO. Из-за асинхронной загрузки и легкости движка, виджет никак не портит показатели PageSpeed Insights вашего сайта.
После замера пользователь может скопировать красивую ссылку на результаты и поделиться ей, например, в соцсетях.
Приятно видеть, когда отечественные сервисы развиваются именно в сторону удобства для IT-сообщества (открытый CLI, легковесные скрипты, удобные API), а не просто обвешиваются рекламой.
А какими инструментами вы мониторите стабильность своего домашнего или рабочего интернета? Пишите в комментарии, будет интересно почитать!
Как-то так получилось, очень много времени потратил на разбор ошибки, которая потом самоликвидировалась:
Были демоны и куда-то пропали 😂
Надеюсь ликвидировалась с концами. В чем была проблема: нужно получить из локальной базы данных переписку пользователя. Эта база синхронизируется с сервером, приложение использует ее для вывода сообщений на экран.
Взять из БД и вывести все сообщения - это легко. Но мы же знаем к чему это может привести, когда сообщений тысячи. Так что просто брать и грузить все что есть в память - это тупиковый путь. Хотя... Если ты хомяк, у тебя нет конечной цели, есть только путь... то почему бы не заниматься абсолютно бесперспективной и бесцельной ерундой 😂
В итоге брал из БД сообщения и подгружал по мере необходимости. И так пока пользователь не доберется до начала переписки. Проблемы были в момент подгрузки: 1) ListView.builder дергался 2) В момент подгрузки скрол терял каcание экрана В итоге как-то само собой разрешилось. Нужно было всего лишь выставить reverse: true и еще какие-то мелочи специфичные сделать. Так и не понял что за "магия", но ладно.
Дело в том, что многие компоненты достаточно навороченные и под капотом много чего сами по себе делают. А еще сверху машина Flutter производит свои манипуляции. В общем, тонкостей хватает. Вот первый вариант сообщений в истории переписки:
Да-да, знаю что так себе выглядит. Внешний вид буду дорабатывать позже. Главное вынес все компоненты в разные классы, раскидал их на основе функций. Таким образом можно будет работать с каждым компонентом отдельно.
Нужны эмоджи? Пожалуйста, их тоже добавил и продумал задолго до работы над чатом 😂
Вот они:
Сообщения представляют из себя числа. Почему числа? Чтобы было проще видеть порядок и отследить ошибки.
Сдается мне я как всегда что-то не продумал и узнаю об этом в конце и это приведет к тому, что всю работу придется поставить с ног на голову. Но увидим, пока, вроде, получается.
Забыл добавить курсорную синхронизацию сообщений и эмоджи. Так что сообщения прилетели не с сервера, а пока из локальной БД (телефона) в которой их создал ручками.
Слева находится аватарка собеседника. Ее нужно подгрузить с профилем, сторис и прочим. Еще не сделал, но это следующая задача. В списке чатов эти данные подгружаются. Нужно бы и в переписку подобным образом грузить. А вообще, хорошо бы доработать сущность модели профиля пользователя, сейчас она немного аморфная.
А медиа можно передавать?
Вот медиа из БД в переписке, их тоже заранее продумал:
Да, да, сам в шоке от того как это выглядит, но и TotalReload ближе к началу выглядел так:
К концу вот так:
Так что не переживайте, все будет 😀
На ближайшее время запланирована работа над отображением профиля собеседника, синхронизация переписки и эмоджи.
Что с синхронизацией
Вообще, меня терзают смутные сомнения. Дело в том, что на форуме подсказали "просто синхронизируй". Но сдается мне что нужно "батчить". Из геймдева мне известно, что есть такие вещи как Пулинг и Батчинг. И это прям катастрофически важные механизмы, которые позволяют оптимизировать производительность. Пулинг - это, условно, умное хранение данных в ОЗУ. Устройства не любят постоянно обращаться к жесткому диску (или еще куда-то) для доступа к данным. Для этого используется пулинг.
А батчинг - это в основном про GPU (про видеокарту). Обьекты в сцене обьединяются в пачки и пачками подаются видеокарте для обработки. Видеокрты очень любят работать с "однородными" данными (пачками) и с радостью обрабатывают их всеми своими ядрами. За счет этого можно, условно, отрисовать 1000 сфер и иметь 30 ФПС. Без батчинга на той же карте можно, условно, отрисовать 50 сфер с тем же ФПС. Разницу улавливаете, имеет смысл вникнуть в тему поглубже? Думаю ответ очевиден.
Так вот, пробегусь по вопросу насчет того как батчинг сказывается на производительности. Сдается мне что передавать данные по сети лучше пачками.
Пока на этом все. Если появятся новости, то обязательно сообщу.
-- По вечерам разрабатываю сервис для общения. Кому интересен сервис для общения, можете подписаться куда-нибудь на меня, попробуете его в числе первых. Постепенно буду продолжать делиться успехами разработки.
После доработки серверного микросервиса по рассылке сообщений вернулся к клиентскому приложению, а если точнее - к чатам. Как-то так получилось, после правок серверной части, клиентское приложение немного развалилась. Пришлось доработать интерфейс взаимодействия и это повлекло доработку клиента.
Приступил к работе над созданием чатов. Вообще, технически все сделано, но оказалось что клиенту нужно добавить систему черновиков. Зачем нужны черновики? Конечно, хорошо бы закругляться и быстрее выпускать упрощенную первую версию приложения, где доступен только режим личной переписки. Групповые чаты и каналы добавим позже.
Но черновики нужны, лучше их не пропускать. Вообще, лучше ничего не пропускать, как-то уже пробовал халтурить и из этого получались катастрофы: - не стал дотошно прорабатывать сервис по доставке сообщений - всплыли сюрпризы с идемпотентностью, а это равносильно тому, что сервис будет присылать сообщения "как попало" 😂 - не стал разбираться с context на сервере и когда-то заключил "как-нибудь потом разберусь с ним", пришлось весь сервер ревизировать 😂 - не строил логику приложения / схемы, в результате пришлось строить 😂 - не закладывал в архитектуру softDelete. Просто удалял все с диска. Решил исправить момент и пришлось неплохо так поработать чтобы удаление происходило как надо 😂
Зачем нужны черновики?
Человек начинает писать сообщение в чате, выходит из переписки не отправив сообщение. Это сообщение нужно сохранить в черновик (не зря же человек писал). Есть еще одна ситуация: человек пишет первое личное сообщение, не отправляет его. Это сообщение сохраняется в черновик и переписка с этим черновиком появляется в общем списке чатов. Например на фото видно эту ситуацию. Начал писать человеку, стер сообщение, вышел в список чатов и в общем списке чатов появился личный чат без сообщений:
Красота, все работает.
Далее нужно будет отправлять команды создания и удаления чатов, обрабатывать удаленные и созданые чаты с учетом черновиков. Примерно одновременно с созданием и удалением чатов начну работу над экраном переписок. Вообще-то эту работу начал давно, но более плотно к ней приступлю в ближайшее время.
Что крутого в этом сервисе, почему он выстрелит, зачем ты его делаешь, на что рассчитываешь?
Эти вопросы прилетают и в личные и сюда. Ни на что не рассчитываю, ни на какое "выстрелит". В первую очередь собираю платформу как минимум для возможности общения между семьей и друзьями. Этот проект - это в какой-то степени мой "Hello World". В отличии от конкурентов не планирую использовать дорогие сервисы по доставке сообщений, хранилища и тп. Все планирую поставить у себя и на поддержание работоспособности системы настраиваюсь тратить МИНИМУМ усилий. Частично для этого встраиваю систему защиты и балансировки нагрузки на сервер, чтобы оно работало "без меня". Хотя, писал ранее что законы меняются, все крутится-вертится и мне придется крутить головой как танк башней, чтобы куда-нибудь не вляпаться. С этим пока не знаю что делать и как быть.
Пока на этом все, обязательно поделюсь следующей порцией успехов.
-- По вечерам разрабатываю сервис для общения. Кому интересен сервис для общения, можете подписаться куда-нибудь на меня, попробуете его в числе первых. Постепенно буду продолжать делиться успехами разработки.
Делаю прогу для айфона и пишу об этом на Пикабу. Такой вот сериал =)
Программа для прогноза погоды, называется Погода рядом. Уже есть не только сама погода, но и удобные виджеты и уведомления о дожде.
В комментариях мне предложили добавить в программу народную погоду. Я сперва вообще не понял о чём речь, потом понял, но дело оказалось не простым. И всё же я смог добавить в погодное приложение народные метеостанции Народомон!
Смысл простой: прогноз прогнозом, но иногда хочется понять, какая погода прямо сейчас рядом с тобой. Особенно когда город большой, районов много, а “официальная” температура одна на всех.
Теперь на карте можно смотреть температуру с ближайших народных метеостанций. На скрине, например, рядом с Москвой видно, что в разных точках значения отличаются: где-то +15, где-то +20, где-то +22. Для реальной городской погоды это вполне нормально.
Сразу оговорюсь: это не замена прогнозу и не абсолютная истина. Станции народные, у кого-то датчик стоит идеально, а у кого-то может висеть на солнце, у стены или возле окна. Поэтому такие данные лучше воспринимать как дополнительную подсказку.
И отдельно хочу заметить, что поскольку приложение бесплатное и без рекламы, я не могу платить народомону, а значит пока использую их беспланые лимиты - только 3 станции на карте и не частые обновления данных, чтобы не нагружать их сервис, всё же они тоже многое делают бесплатно и их вполне можно понять. Энтузиасты =)
Народомон разрешил использовать их данные — за это им отдельное спасибо.
Дальше хочу добавить информацию по ветру и подумать над фильтрацией подозрительных станций, чтобы не показывать совсем странные значения.
Буду рад критике, замечаниям и хотелкам. Что бы вы сами хотели видеть в таком погодном приложении?