В рамках респект-апа.
Будет какая-то презенташка в нуль посте?
Seneca
> В рамках респект-апа.
благодарности 🙏
Seneca
> Будет какая-то презенташка в нуль посте?
мне ради видео необходимо собрать несколько вариантов подложек интерфейса, просто что бы показать кастомизацию. А ещё мне надо перенести приложение на основной компьютер, здесь весь софт для записи и монтажа, ну и в целом это такой ачивмент в разработке "запустилось с нуля на другой машине". Я уже выполз немного на реддит и в твиттер, пока конечно никакого внимания, но надо вести эти блоги и хоть где то в интернете светиться. Просто где то в ближайшем будущем, после... эммм.. 150 часов где то. вот после этого времени предстоит тратить каждый день какое то количество внимания на написание текстов. Благодарности kamti, я посмотрел как должны выглядеть страницы товаров на маркетплейсах. блин, ещё где то надо вымутить кажется 125 долларов на то что бы купить место в стиме. а вообще мне нейросеть сказала - есть несколько путей - по подписке за 5-6$ в месяц, либо однократная продажа вечной лицензии за 20$, либо freeware + ads + in-apps + премиальные функции по подписке. в будущем я обязательно сделаю внутри магазин шкурок-оформлений и модулей персонажей, а возможно и кастомизацию самих персонажей (шапочки, цацки). Короче работы предстоит ещё много, но сейчас один из центральных ачивментов - это выпустить самую первую версию в плаванье что бы её можно было скачать и установить себе.
Приветствую, дорогой читатель.
У меня появился кандидат на девятый модуль.
Объясняю контекст и предысторию и вообще это (надеюсь) будет интересно почитать. Свежак из кухни разработки.
Так вот.
У меня при нажатии правой кнопкой мыши на тамагочи открывается быстрая панелька 3х3 из доступных функций. Это удобно и позволяет быстро вызывать то или иное.
Некоторое время назад когда я ковырял AI - эта кнопка была занята непосредственно этим модулем, но я всё же принял решение что если я и буду выпускать это в публичное плаванье, то как отдельный проект. Здесь, внутри Qwa хотя и есть куда это применить, но оно здесь совершенно не нужно и выбивается из концепции.
До поры последний слот пустовал, и я даже не искал что бы туда поместить, думал выпустить как есть.
Но всё же меня внезапно посетило аж две конкурирующие за это время мысли.
Мысль первая - одна повседневная моя боль заключается в том что мой ПК и мой Ноутбук являются двумя отдельными пространствами. Из-за особенностей домашней сети они у меня находятся в разных подсетях, и какого то удобного способа перекидывать файлы между этими компами нет. То есть в моём мире сейчас что бы на компе появилась песенка которую я скачал на ноутбук - я её перекидываю через телеграмм. В принципе для музыки - норм. А вот для синхронизации проектов в разработке - не норм. И в будущем я всё ещё планирую связать Qwa и iMeYou в единую систему, и я хочу что бы файлы доступные Qwa на пк были доступны iMeYou на телефоне. А так же все остальное общее - общий клипборд, общий Essentials, и так далее. Это далёкая мечта к которой я подойду вплотную вероятно не раньше следующей осени. Однако размышляя о том как это организовать меня посетила идея написания своего лайтового клиента для Google Drive - что бы можно было драг-н-дропать внутрь файл, и драг-н-дропать оттуда, что бы был удобный поиск (возможно по содержанию), и возможность сделать синхронизируемые файлы. Это __нужная__ лично мне опция и я понимаю её ценность.
Мысль вторая - супер-поиск. В принципе весь концепт приложения строится на организации данных в удобную быструю и доступную инфраструктуру. Это приложение про быстрый доступ к своим самым часто используемым файлам и разнообразным данным. Оно нужно тому кто много пользуется компьютером, и хочет что бы это было удобней. Соответственно сейчас у меня в каждом окошке уже реализуется поиск, оно уже есть, но каждый модуль живёт своей собственной жизнью. И я подумал что могу создать идеальный вкуснейший инструмент - просто строку поиска (с голосовым вводом) которая:
1. проверит все модули и достанет оттуда всё что подходит под поиск.
2. залезет в гугл и покажет тебе первые 10 элементов поисковой выдачи
3. залезет в гуглокартинки и покажет тебе ближайшие 10 картинко
4. залезет в википедию и попробует найти там подходящую статью
5. залезет в историю твоего общения с нейросетью через приложение, и найдёт там соответствующие посты
6. залезет в твою историю предыдущих действий в приложении и попробует найти там нечто подходящее
7. пошариться в файловой системе по индексированным папкам (documents / downloads и прочим)
и выдаст тебе на весь экран вкусные виджеты того что оно там нашло. Очень важно - это должно быть __красиво__.
В общем то у меня образовались такие два кандидата, и я с первого раза не смог выбрать.
В сторону первого - это действительно важный и нужный фичер, этого в хорошем виде действительно нет на пк, или оно очень платное. Это нужно в конце концов мне и это интересный челленж для разработки. Минус - это задача со звёздочкой, и 90% пользователей это потенциально совсем не нужно.
В сторону второго - это может быть супер удобной точкой входа для работы в приложении (ALT+D —> вписал что ищешь —> нажал на виджет с целевым действием или выбрал его через hotkey). Это супер понятно зачем оно нужно в приложении, и оно в отличии от гуглодрайва - вполне нужно почти любому пользователю из моей целевой аудитории. Из минусов, почему я сомневаюсь (немного до сих пор) - потому что я могу по сути расширить уже существующий модуль Virtual Keyboard, там уже есть строка поиска, которая гуглит, и в принципе расширить этот интерфейс. Но там другое назначение, поэтому вынести в отдельную кнопку - допустимо.
Со всей этой дилеммой я пришёл к нейросети и посоветовался с ней. Она мне аккуратно разложила все мои метания, привела все за и против и была убедительна, и чаша весов таки склонилась в сторону супер-поиска. Таким образом, господа, анонсирую новый модуль. Да, я в очередной раз нос к носу стою с релизом, и в очередной раз убегаю обратно в лабораторию пилить очередной киллер-фичер) Таков путь))
Спасибо что читаете. <3
100-300р + наценки стима + наценки по переводам из банка в банк.
paveloid1982
хм) Я думаю поставить цену в 20$ в качестве однократной лицензии.
****
UPDATE:
Вот да, именно этим словом я и хочу поделиться)
Чеклист:
• Апдейт корректно загружается в гитхаб
• Метаданные апдейта корректно скачиваются с гита
• Интерфейс апдейтера корректно отображается
• Апдейт корректно скачивается
• Апдейт корректно распаковывается
Но на распаковке у меня сейчас конфликт из-за того что я не могу скриптом перезаписать файлы одновременно с тем что приложение в настоящий момент запущенно. Именно для таких целей делают лаунчеры проверяющие на апдейты. В общем я помозгую.
Возрадумеся. По сути самый главный для публикации и выпуска приложения модуль готов.
У меня получилось обновить приложение (по факту откатить, но это не суть).
То есть вся цепочка от проверки, до загрузки и деплоймента таки прошла успешна, оказалось то что мне надо без всяких лаунчеров достижимо командой в powerShell. Что ж, это хорошо.
В процессе пока делал, пообщался с нейросетью и вскрылись некоторые проблемы и уязвимости, фиксом которых я займусь в ближайшее время.
1. Узявимость localhost:port. Для общения модулей между собой я открываю порты, но эти порты уязвимы к атакам. Соответственно предстоит переписать на другой способ взаимодействия, безопасный и защищённый от атак. В частности меня интересует команда --forceCloseForUpdate которая фактически закрывает приложение, и тот метод который у меня реализован для защиты от запусков нескольких инстансов тоже стоит изменить.
2. Уязвимость master ключа для шифрования. Я как то проглядел реализацию текущего способа хранения ключей, и оказалось что ключ буквально лежит в папке documents в двух кусочках. В общем это конечно тот ещё кринж. Буду переносить на защищённое виндоусовское хранилище ключей и фетчить оттуда. А то в текущей реализации при условии открытого исходного кода это шифрование не надёжней base64. Поскольку clipboard и essentials вполне могут содержать требующие дополнительной защиты данные, я размышляю над тем что бы добавить мастер-пин к приложению, который вводится однократно при запуске и является частью ключа для расшифровки. Беспечный пользователь может убрать галочку в настройках, параноидальный будет вводить пин при первом открытии модуля в сессии.
На счёт super-search.
Я некоторое время мыслил по поводу этого модуля, и чувствую его колоссальный потенциал, но и огромный технический вызов для реализации. Необходимо создать единый интерфейс который фактически включает в себя часть функционала почти всех существующих интерфейсов, рисует для них виджеты. Так же я вижу этот интерфейс потенциально весьма выразительным с точки зрения реализации. То есть да, единая кнопка которая найдёт данные и в гугле, и в википедии, и в системе приложения и на компьютере пользователя - потенциально очень вкусно, но работы тут поле не паханное. Я все ещё думаю над тем - сделать это до первой публикации (или ЗБТ), либо после, но это может быть самым главным интерфейсом приложения и главным killer-feature с точки зрения UX. We are cooking! :)
PeeKay
> Узявимость localhost:port. Для общения модулей между собой я открываю порты, но эти порты уязвимы к атакам. Соответственно предстоит переписать на другой способ взаимодействия, безопасный и защищённый от атак.
Открывать порты, если нужно межпроцессеое взаимодействие - норм, это просто транспорт. Уязвимым он станет, если уязвимым будет код, обрабатывающий входящие запросы. Другие способы передачи данных между процессами в этом плане не лучше.
Доброго времени, читатель!
Что ж, я наконец накопил достаточно маны, и взялся за финальный модуль - super-search.
К настоящему моменту он ещё не полностью готов, и потому покажу я его в следующий раз.
Но у меня есть рисунок ключа (С), или даже лучше - рассказ о ключе который открывает все двери.
Что уже есть:
1. строка поиска. Нажимаете на клавиатуре ALT+F и можете сразу начать вводить текстовой промпт.
2. После ввода программа проверит Essentials, Clipboard, EatenFiles и несколько папок с системными файлами (можно добавлять свои папки по желанию) - будет искать вхождения как целиком промпта, так и отдельных его элементов. Поддерживает несколько языков.
3. Долго возился с поисковыми системами. Гугл, прости, но 5$ за 1000 запросов - как то чересчур. Поэтому я выбрал поисковик DuckDuckGo, бесплатный и не требует ключей
4. Запрос идёт в википедию, из неё извлекаются релевантные запросу статьи если промпт короче 5 слов (ну что бы не искать портянки текста)
5. Запрос идёт в несколько баз с изображениями, и извлекаются несколько релевантных изображений (6 шт)
Это то что получилось сделать за один день. Суммарно я просидел, кажется, часов 14.
Осталось прикрутить поиск видео с ютуба подходящих под промпт видео, вынести из вывода википедии ссылки в отдельный блок "Смотрите так же", и прикрутить нейросетевую выдачу deepseek к поисковику, и можно будет заняться внешним видом.
Примерно такой рывок я совершил за сегодня.
А ещё я обнаружил парочку багов с которыми предстоит разобраться.
Такой вот отчёт о разработке )
kkolyan
да, спасибо, наверное ты прав, но всё таки порт открыт вообще ко всему, и что бы сделать его безопасным надо накрутить туда всяких одноразовых токенов и прочих флагов, есть все же дефолтно более защищённые каналы)
PeeKay
В каком смысле "вообще всему"? Какой локальный канал открыт меньше?
"дефолтно более защищенные каналы" это какие?
С графикой беда! Логотип не внушает доверия. Надо бы заморочиться на эту тему.
OnzaRain
Да, я с вами согласен. Проекту очень потребно внимание хорошего художника который с пониманием дела создаст визуальную составляющую. Несмотря на несколько лет работы фрилансером художником - я всё равно не разбираюсь в такого рода креативах. Нарисовать меч, топор, файерболл или орка - да, а вот логотип-леттеринг что бы убедительно было - как будто бы чего-то нехватает.
kkolyan
> "дефолтно более защищенные каналы" это какие?
Нейронка мне говорила про какие то проименованные каналы, которые подписываются процессом, что-то такое. Потом ещё передача запроса через локальный файл шифрованный + слушатель этого файла. Хотя мне кажется почти избыточным просто зашифровать сообщение (--forceCloseForUpdate) тем же симметричным шифрованием которым я шифрую файлы.
PeeKay
именованные каналы (named pipes) и файлы - это все не более защищено чем просто сокет на локалхосте. в любом случае нужен какой-то протокол безопасности сверху. сокеты хороши тем что они популярны, соответственно для них больше выбор, качество и доступность решений. можно конечно велосипед сделать, security by obscurity, но считается что это все-таки хуже работает чем стандартные методы вроде TLS.
PS: ну да, в винде для named pipes какое-то секьюрити есть, не в курсе насколько оно хорошее. но это будет OS-specific решение... но если это ок, то вероятно стоит попробовать, возможно будет меньше приседаний чем с TLS.
На правах лога разработки:
0. У меня замечательная новость. Я веду переговоры с одним замечательным человеком, который потенциально готов принять на себя расходы по публикации и весь объем труда связанный с размещением игры в Steam.)
Далее по поводу прогресса:
1. Сначала раскатал губу и выстроил целую многоуровневую систему защиты, суть которой была в том что master-key сначала делится на 64 части и сохраняется в 64 рандомных места в реестре , этот список мест записывается в другом месте в идеальном порядке, после чего генерится из метаданных ПК специальная байт строка, и относительно этой байт строки master-key перемешивает 64 фрагмента и получается тот самый ключ для encrypt\decrypt. Подобное даже при прямом доступе к системе сломать достаточно сложно. Сам ключ внутри процесса тоже хранится в 64 кусочках, и собирается перед encrypt\decrypt, и тут же чистится, что б не висел в памяти. В общем то очень сложносочинённая система, нейросеть мне её конечно написала и я даже порадовался, но что то у неё не заладилось с библиотеками win32 и ffi, я так покрутил эти 100 ошибок компиляции, провёл пару итераций, и решил обойтись более простым способом - это хранение просто в защищённом хранилище в двух отдельных местах два куска мастер ключа. В общем безопасность скорее против рандомного скраппера чем против целевой атаки, но давайте честно - против целенаправленной атаки вообще вряд ли что-либо устоит, тем более что можно просто поставить break-point на decrypt\encrypt в момент когда ключ собран, и таким образом его получить из памяти. В общем security by obscrutiy как она есть, но теперь хотя бы ключ не лежит в папке documents.
2. Вторую задачу с передачей между процессами команд я решил просто путём шифрования сообщения и расшифровки его при получении. Конечно тоже та ещё калитка в чистом поле, но если мастер-ключ не скомпрометирован, то на дурака подделать запросы не получится, так что вполне годится.
3. Позавчера внезапно "Интеллектуальное управление приложениями" в Windows 11 мне спонтанно вбанило на моей локальной машине приложение. При этом ни в журнале событий нигде никакой инфы нет, и кнопки "мне пофиг, запустить" в вслывающем окне тоже не было. Это очень меня напрягло. Технически это решается подписью исполняемого файла сертификатом безопасности. Пока что для разработки я просто отключил эту функцию, но в моменте испытал гнев.
Известных мне багов осталось, кажется, штуки 4, и надо доделать Search модуль, думаю к понедельнику-вторнику будет готово.
Так же упомянутый в п.0 человек высказал очень ценное и важное суждение - нужно в любом случае до релиза решить вопрос с графикой. Просто спрайт без анимаций - это огромная упущенная возможность и потенциально -60-70% продаж. У меня есть весь февраль на то что бы решить задачу с 3Д моделью, мы нашли отличную модель на сторах, будем связываться с автором и закажем полноценный ассет со всеми нужными движениями. По такому поводу я основательно займусь всей той частью которая называется "Тамагочи", и разовью это настолько, насколько могу. Предстоит много работы!)
Спасибо что читаете!)
Привет, читатель.
Время медленно протекает, и медленно но верно в фоновом режиме идёт проработка. Самое сложное в работе - это сформулировать вижен. Когда нет вижена - работа вряд ли может продолжаться, потому что нет конкретного понимания куда двигаться.
Я начал разработку модуля поиска, но столкнулся с тем что сам модуль выглядит сейчас слишком агрессивно по отношению к пользователю. Что я имею ввиду? Сейчас поисковое окно с первого же вызова занимает весь экран компьютера, и то как это происходит - вызывает определённый ступор, резкая смена картинки буквально вышибает дух, ты забываешь что ты пытался искать и что делать.
И мне во сне пришёл вижен. Сам. приснился. я запомнил.
1.
При вызове слева из-за пределов экрана выдвигается окошко поиска и занимает 35% ширины экрана. Т.е не пол экрана, и плавным из фейда появлением. Что бы пользователь не смотрел в упор в глаза исполнителю желаний, а как будто "призывал" его на помощь.
2. Поле для ввода сразу содержит последний текст из клипборда. и сразу его ищет. Это UX. я скопировал текст в буфер, нажал ALT+F и тут же окошко мне это нашло. Текст сразу является выделенным, так что можно сразу начать писать что-то другое.
3. Поисковая выдача будет интегрированна с bing потому что bing платит ревшейр, который при 30 запросах в месяц на 2000 пользователей даёт пятьсот долларов.
4. изначально поисковая выдача представлена в основном окне как набор однострочных виджетов содержащих только фавикон, домен, титул страницы. дефолтно показывается 4 строки выдачи. справа в блоке доступные на хоткеи кнопки Search , Wiki, Images, Video, Preferred. В Preferred вы добавляете домены по которым хотите производить дополнительный поиск. я сделаю изначальные пресеты на разные темы - что то вроде автоматических подписок на поиск контента.
5. все результаты прошлого поиска кэшируются и храняться на пк в шифрованном виде. Для быстрого поиска. Историю прошлых запросов можно увидеть в выпадающем меню автозамены при пустом вводе.
6. на одном экране (35% от ширины слева и 60% при открытой выдачей поисковика или других типов выдачи) слева находятся по очереди: поле ввода, 7 иконок других модулей что бы открыть их отсюда, первая строчка выдачи поиска или последней открытой модели, блок eaten files и блок выдачи из файловой системы (основные папки + все локации каждого EatenFiles). Они прокручиваются вниз произвольно, одновременно показывая до 9 элементов выдачи каждый. Если выдачи на ключевые запросы меньше - окошки динамически уменьшаются по вертикали. Далее две колонки - выдача Essentials и Clipboard. Снизу кнопка "закрыть".
вот такая штуковина вас ждёт на рабочем столе - одна кнопка что бы получить доступ сразу ко всей экосистеме приложения.
Вот такие у нас нынче электроовцы.