Сообщество - ИТ-проекты пикабушников

ИТ-проекты пикабушников

592 поста 3 428 подписчиков

Популярные теги в сообществе:

3

Сделали ИИ для онлайн-школ на GetCourse, который просто отвечает на вопросы и взорвали рынок (личный проект)

Сделали ИИ для онлайн-школ на GetCourse, который просто отвечает на вопросы и взорвали рынок (личный проект)

Как простой продукт, который лежит на поверхности, может выстрелить, даже если конкуренты уже делали что-то похожее. Вот что именно мы сделали, кому продали и почему это сработало

Проблема

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

  • «Где ссылка на вебинар?»

  • «Почему не открывается урок?»

  • «А запись будет?»

  • «Не могу войти в личный кабинет»

Решение

Мы сделали ИИ-сотрудника поддержки, который встраивается в GetCourse и сам отвечает на типовые вопросы, видит статусы учеников, оплаты и уроки, а сложные случаи передаёт человеку.

Просто подключил и...

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

  • Составить базу знаний школы, по которой будет отвечать ИИ (вопросы про цены, состав курса, преподавателей и т.п)

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

  • Составить промты под описанную логику, чтобы соответствовать стилю школы

Сначала никто не хотел покупать, так как многие уже обожглись обертками ChatGPT, которые писали бред и откровенно вредили репутации бренда

Как это работает на примере школ

Первая продажа была ооочень сложной и случилась буквально через нетворкинг. Один мой знакомый знал другого... Таким образом вышли на школу.

Онлайн-школа "Лунара"

Проводит до 15 параллельных вебинаров, где участвуют тысячи учеников. На одного сотрудника поддержки получается около 120−140 обращений в день, а время ответа от 30 минут и выше.

Каждый запуск для школы это боль, потому что приходится выводить на линию больше людей. Хочешь больше продаж, нанимай еще больше людей.

Чтобы решить проблему, мы сделали следующее:

  1. Разложили все обращения по типам

  2. Собрали структурированный FAQ

  3. Обучили на этом AI и встроили его в GetCourse

  4. Настроили правила типа: "не уверен — передай человеку"

  5. Несколько раз докрутили тон и формулировки

В итоге, не с первого раза, но все заработало. AI стал закрывать около 30% обращений сам. Нагрузка на людей упала почти вдвое, а время ответа сократилось, при том что качество не упало.

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

Примеры ответов

Примеры ответов нейросети

В итоге, почему такой "простой" продукт «зашёл»

На бумаге всё выглядит просто: «Сделайте ботика в GetCourse, чтобы на сообщения отвечал», но по факту «очевидное» мало кто делает нормально.

  • Первое, наше преимущество оказалось в том, что мы выбрали узкую и понятную нишу. Продюсеру не надо объяснять, что мы делаем. Он слышит: «мы экономим Х% от вашего ФОТ на поддержке в GetCourse» и все.

  • Второе, мы сразу выбрали узкую нишу и начали бить только в эту сторону. Не отвлекались на все остальное.

  • Третье, мы не сорили фичами не делали все подряд, а сознательно начали с одного самого горячего функционала — поддержки.

  • Четвертое, мы запустили первый и единственный сервис интегрированный именно с GetCourse. Другие пока только работают в самих школах, но не интегрированы

Если у вас онлайн-школа на GetCourse

Меня зовут Александр Иванов

Если вы хотите подключить бота, который сможет отвечать на 80% сообщений в поддержке, то просто напишите мне в телеграм (@GoldBatya)

Посчитаем вместе сколько стоит ваша поддержка сейчас и окупиться ли внедрение нашего ИИ-сотрудника.

Показать полностью 5
5

Logistics_Analyzer "Что если?" и новые функции программы

В старых постах:

  1. Разработка своей программы, суровые реальности и как такое продавать?

  2. Logistics_Analyzer виджет панель и как она работает

    Я уже немного рассказал о процессе разработки и функциях программы. Теперь покажу, что удалось улучшить за неделю, и расскажу об отдельной функции "Что если?".

Рассмотрим развитую розничную сеть: в каждом регионе — 10 магазинов и 1 склад. Ключевые особенности текущей операционной модели:

  • Доставка до клиента организована на уровне магазинов (не склада).

  • Товарная матрица жёстко фиксирована: перемещение ассортимента между точками возможно только в рамках допустимых категорий (например, нельзя заменить «Телефоны» на «Хлеб» при перераспределении).

  • Доступны фактические данные по:

    • продажам (с доставкой / без),

    • остаткам на точках,

    • SKU-уровню заказов с доставкой (включая адреса и объёмы).

На основе этих данных можно реализовать следующие аналитические и управленческие модули:

  1. Определение зон покрытия магазинов
    По адресам доставок (без привязки к квартирам) и частоте заказов за период (например, за год) строится геопространственная область — зоны ответственности каждого магазина. Границы определяются экстремальными точками доставок.

  2. ABC-анализ по SKU на уровне точки
    На основе фактических продаж формируется структура ассортимента: приоритетные, средние и низколиквидные SKU — с учётом оборачиваемости и вклада в выручку.

  3. Моделирование альтернативного размещения при закрытии точки
    Сопоставление товарных матриц, зон покрытия и ABC-профилей позволяет идентифицировать подходящие точки-реципиенты для перераспределения остатков — с минимальными логистическими и коммерческими потерями.

  4. Планирование перераспределения
    Комбинируя:

    • текущие остатки (на отправляющей точке),

    • лимиты хранения и нормативы по категориям (на принимающих точках),

    • совместимость товарных матриц,

    • пересечения зон покрытия и клиентской базы,
      формируется оптимальный план перемещения запасов — как при частичной реорганизации сети, так и при полном закрытии объекта.

Пример конфигурации:
Объект А характеризуется своей зоной покрытия и текущими остатками. Объекты Б, В, Г и др. — собственными остатками, ограничениями хранения по категориям, продажной динамикой и клиентскими зонами. Система оценивает все взаимодействия и предлагает планы по перераспределению товаров (Зон ожидается в будущем)

Пример созданный вручную по зонам доставки и расположению объектов.

Пример созданный вручную по зонам доставки и расположению объектов.

Компания Х решила закрыть объект А. Теперь нужно оценить, как это повлияет на:

- остатки товаров в других магазинах и на складе;

- зоны доставки других магазинов;

- среднее время доставки клиентам и стоимость перераспределения товарных остатков.

На основе этого анализа мы составим техническое задание для программы. Вот его основные пункты:

1. Определить регион, в котором находится объект А.

2. Выяснить фактические остатки товаров на этом объекте.

3. Найти ближайшие объекты с аналогичной товарной матрицей.

4. Провести ABC-анализ товаров на всех объектах за последний год.

5. Разработать план перераспределения товаров. Учитывать информацию из пунктов 1–3, а также средние затраты на перевозку одного кубического метра (задается при создании региона). Рассчитать оптимальное перераспределение.

Предложенная логика в целом корректна, однако в текущей реализации не учитывается стоимость доставки как функция пройденного расстояния или объёма груза.

Например, можно оперировать не стоимостью за километр, а средней себестоимостью перевозки на единицу объёма — скажем, при известных затратах в 1,5 млн ₽ на перевозку 160 м³ получаем удельную стоимость ~9,4 тыс. ₽/м³. (Цифра условная и приведена для иллюстрации.)

Более гибкий и масштабируемый подход — задать набор типов транспорта («траков») с атрибутами: тип маршрута, грузоподъёмность, объём и соответствующая средняя стоимость перевозки. Это позволит учитывать различия в логистике более точно.

С учётом этого, скорректирую модель и вернусь к дальнейшей проработке.

Программа, следуя установленным правилам, рассчитывает оптимальное размещение товаров. Если отключить АВС-анализ, она будет учитывать только остатки, местоположение и матрицу.

Ниже приведу пример работы данного функционала, данные заглушка и программа не может правильно разместить товары, поэтому все = 0.


P.S. Сейчас создание достоверных данных не является приоритетом.

Окно фактических остатков

Окно фактических остатков

Окно ближайших объектов в регионе состоящий из магазинов с доступным хранением.

Окно ближайших объектов в регионе состоящий из магазинов с доступным хранением.

План перераспределения остатков.

План перераспределения остатков.

Да, так как и писал - данные тестовые и в самом деле в регионе нет аналогичных матриц

Аналогично скрину выше, не нашли куда перевозить, доставка = 0.


И теперь основной вопрос "А что будет с доставкой? Как сильно закрытие повлияет на SLA по скорости?". Данный расчет сейчас является приоритетной доработкой которой я занимаюсь.
Логика которая мною вкладывает в анализ - следующая:

  1. Смотреть на расстояние различных точек на карте

  2. Делить действующую зону на кластеры

  3. Определить оптимальные объекты по времени которые находятся рядом

  4. Сделать ренден всех 3-ех пунктов и показывать изменения в зонировании доставки с отчетом об изменении среднего времени и какие районы слишком далеко.

Для инфраструктуры это очень важный фактор, от которого зависит многое. Так же этот фактор должен работать и при открытии нового объекта. Но сейчас такой функционал не реализован


Функция выбора источника данных для программы и совместная работа с одним исполняемым файлом.

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

Окно выбора исполняемой БД на SQLite 3

Окно выбора исполняемой БД на SQLite 3

2 пользователя работают с одним исполняемым файлом, вносят корректировки, строят дашборды, удаляют или дополняют данными программу. Но как копии приложения узнать что внесены изменения в хранилище? Для этого было реализовано metadata таблица. исполняемое приложение запускается, запоминает метаданные времени БД и проверяет обновления, в случае изменения метаданных моментально сигнализирует о том что необходимо обновить данные.

Если выбрать "Позже" то обновление данных будет отложено на 30 секунд.

Если выбрать "Позже" то обновление данных будет отложено на 30 секунд.

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

Окно ввода сообщения для описания проблемы

Окно ввода сообщения для описания проблемы

После отправки - логи приходят ко мне в ТГ через бота. Все логи запаковываются в zip архив, параллельно запускает процесс удаления логов из папки.

Информирования о проблеме у определенного пользователя.

Информирования о проблеме у определенного пользователя.


Почему я быстрее реализовал совместный доступ и отправку логов, вместо того что бы наполнить данными и показать на примере где все логично? Наверное потому что лень тратить много времени на создание данных, а потом их дополнять и править. Программа не окончательная, система хранения меняется. Например сейчас я понял что стоимость доставки и распределения товара можно завязать на типы траков - буду реализовывать и менять хранение. Менее затратно по времени дописать скрипт, чем создавать новую логику в 1000 строк данных.


Всем спасибо за то что дочитали.

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

Показать полностью 9
3

Лёрника, часть следующая

Всем привет! продолжаю работать над сервисом, пока что в демо режиме, доступен по ссылке:

https://learnika.ru/

сделал следующую стадию: Календарь. учитель может сделать слот с занятием, назначить тему, цену, время, ученика. Ученик, в свою очередь, должен этот урок подтвердить.

Тут хотелось бы выслушать "отзывы и предложения" по работе слотов, что улучшить, что доделать.

желтый, как вы понимаете, неподтвержденный урок. он ожидает подтверждения от ученика, чуть позже добавлю туда клавишу "подключиться к видеоконференции".

Вид со стороны ученика:

И... как долго я ругался с этим фронтом, ненавижу js! С сервером проблем нет и небыло за все время! написал сервисы, эндпоинты, энтити, все работает, curl запросы отправляет, данные ходят во все стороны, но на странице нормально не отображается, или вообще модальное окно не открывается вовсе. Но, я победил.

следующий этап: "оставьте отзыв" на преподавателя и кастомизация подключение jitsi.

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

точки и запятые насыпал вот тут: .............,,,,,,,,,,,,,,,, кто "чувствительный" могут брать оттуда и расставлять по своему усмотрению.

как то так, всем спасибо за внимание!

Показать полностью 2
4

Сделал сайт за 3 часа, а потом ещё 8 учил ИИ не звучать как… ИИ

Захотел поиграться с ИИ генераторами кода и сайтов "под ключ". Вспомнил про lovable, посидел 3 вечера - и получилась такая штука: realt-texts.com.

Вводишь данные об объекте недвижимости, жмёшь кнопку - получаешь человеческий текст для объявления, описывающий квартиру/дом, локацию (реальные данные с описанием), и переписанные красиво твои кривые тезисы, если ты их ввел в отдельном поле.

Началось все с того, что сижу как-то, скучаю, и вижу когда-то давно открытую вкладку с сервисом lovable (не реклама этого сервиса, потому что если тут реклама, то скорее моего "детища", но этот сервис реально хорош).

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

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


Час 1 — из идеи в «о, оно уже что-то умеет»

В lovable.dev набросал задачу в духе:

«Сделай веб-сервис, где пользователь вводит параметры объекта недвижимости, а сервис генерирует описание. Нужны фронт и бэк».

Через какое-то время у меня:

  • уже есть работающие основные "команды"

  • компоненты

  • базовые стили

  • бэкенд-эндпоинты

Технически всё ок, но визуально это кричало:
«Я — авто-сгенерированный шаблон, меня делали за пять минут».

Поэтому первый час ушёл на приведение этого в человеческий вид:

  • подчистил верстку

  • попросил сделать интерфейс более минималистичным и сфокусированным

  • поправил отступы и шрифты, чтобы не выглядело как демка конструктора

  • упростил сценарий: зашёл → ввёл параметры → нажал «сгенерировать»

Без фигмы, без дизайна в сто итераций. Просто спорил с ИИ ассистентом, пока картинка не стала минимально приятной.

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


Час 2 — прикручиваем мозги: ИИ, база и PDF

Когда внешне всё перестало раздражать, надо было заставить сервис делать что-то полезное.

Во второй час я попросил подключить ИИ модель и базу данных.

Генерация текста

  • настроил бэкенд-эндпоинт, который принимает ввод пользователя и настройки

  • подключил к нему вызов модели

  • добился, чтобы на фронт возвращалась не просто простыня текста, а нормальная структура

База данных

Сохраняю:

  • сгенерированные описания

  • немного метаданных — какие параметры были, когда сгенерировано и т. д.

Это нужно, чтобы потом можно было посмотреть, чем люди вообще пользуются и что стоит улучшать.

PDF

  • сделал эндпоинт, который берёт готовый текст

  • рендерит его в аккуратный PDF

  • отдаёт файл на скачивание

Итого ко второму часу у меня уже есть рабочее ядро:

Пользователь вводит данные → жмёт кнопку → получает описание + PDF.

Не идеально, но больше, чем «получите ваш список параметров обратно».


Час 3 — домен, HTTPS и ощущение «что-то поехало»

Следующий логичный шаг — вытащить всё это на нормальный домен.

В несколько кликов получилось:

  • зарегистрировать realt-texts.com

  • привязать его к сервису (там какая-то магия была, в основном все само случилось)

И вот через какое-то время применились все настройки, вбиваю в адресную строку только что купленный домен — и там открывается мой сервис.
Красота!


+8 часов — ИИ пишет, но читать это не хочется

На этом этапе можно было бы сказать «ну всё, готово», но нет.

Интерфейс есть, логика есть, домен есть.
Пробую генерировать тексты — и получаю:

«Предлагается к вашему вниманию прекрасная квартира, которая станет идеальным вариантом для комфортной жизни…»

То есть формально всё нормально, но сухо, однообразно и кривовато.

И.... дальше примерно 8 часов ушло на то, чтобы ИИ перестал звучать как робот.

Что пришлось делать

1. Мучить system prompt

Переписывал его много раз, задавая:

  • более живой тон

  • нежелательные клише и фразы

  • как себя вести, если информации мало

  • как реагировать, если пользователь прислал гигантский текст со своими формулировками

2. Тестировать реальные сценарии

Гонял всё подряд:

  • «мне нужно описание студии в новостройке» — и больше ничего

  • длинные описания с кучей условий и запретов

  • кривые, обрывочные фразы — как обычно пишут в реальных формах

3. Борьба с тараканами

Вылезали классические проблемы ИИ:

  • слишком общий, безликий текст

  • игнорирование части инструкций

  • неожиданные скачки стиля — от "канцелярита" до странного дружеского «эй, бро, смотри какая квартирка»

4. Задание структуры

Пришлось более жёстко задавать рамки:

  • примерную длину описания

  • порядок: сначала локация и ключевые плюсы, потом уже детали

  • как обходиться с отсутствующей информацией — чтобы ИИ не додумывал «вид на море» там, где максимум вид на соседний подъезд

И да, это действительно заняло больше всего времени.
Код, база, домен — всё это делается намного быстрее, чем «сделай так, чтобы ИИ писал как нормальный человек».


+2 часа — полировка, чтобы не казалось, что это сырая демка

Когда тексты перестали вызывать внутренний фейспалм, я сел доводить всё до состояния «этим не стыдно поделиться с незнакомыми людьми».

За примерно 2 часа:

  • сделал адекватные состояния загрузки, пока модель думает

  • добавил нормальную обработку ошибок, чтобы вместо сухой «ошибка» был понятный текст

  • переписал подписи на кнопках и подсказки, чтобы всё звучало проще и дружелюбнее

  • проверил мобильную версию и поправил всё, что поехало на маленьких экранах

Вроде мелочи, но уже ощущение, что у меня получается что-то приличное.


Аналитика, cookies и немного SEO

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

За примерно час:

  • подключил Google Analytics, проверил, что события прилетают

  • добавил простой баннер про cookies (там тоже как-то сразу из гугла мне предложило несколько сервисов, которые это настраивают)

После этого уже имело смысл чуть-чуть заняться SEO.
Тут помог ChatGPT:

  • накидали фразы, которые могут вводить риелторы и продавцы

  • переписали заголовок страницы, описание и часть текста так, чтобы и понятно было, и поисковикам не грустно

  • нагенерили тексты, описания, отзывы (ну да, грешен :)

Настоящим SEO это не назовёшь, но для старта пока нормально.


Что по времени в итоге

  • 1 час — базовый внешний вид и верстка

  • 1 час — генерация текста + база + PDF

  • ~1 час суммарно — домен, аналитика, cookies

  • 8 часов — настройка поведения ИИ и промптов

  • 2 часа — полировка интерфейса и пользовательских мелочей

  • 2 часа — мини-SEO вместе с ChatGPT

В сумме получилось около 15 часов от идеи до живого AI-сервиса на отдельном домене.

Показать полностью
6
Вопрос из ленты «Эксперты»

Как один исчезнувший стикер довел меня до написания бота

Думаю, каждый, кто активно пользуется Telegram, сталкивался с этим чувством: на экране всплывает уведомление, вы видите начало фразы, но стоит разблокировать телефон и открыть чат — а сообщения уже нет. Остается только гадать, что там было: опечатка или важная информация, которую от вас решили скрыть?

Меня как разработчика эта ситуация всегда цепляла. Это не просто мелкое неудобство, а сломанный пользовательский опыт: информация была доставлена, но тут же отобрана. Я решил, что с этим можно что-то сделать, и так появился мой пет-проект — бот, который возвращает пользователю контроль над его диалогами.

Что умеет бот

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

Я сфокусировался на трех ключевых функциях:

• 📝 Перехват удаленных сообщений. Если собеседник отправил сообщение, а через секунду его удалил, бот успеет пересылать вам копию. Это работает со всеми типами контента: текст, голосовые, стикеры, файлы, геолокация и т.д.

• 🔄 История изменений. Когда кто-то редактирует свое сообщение, меняя его смысл, бот присылает наглядное уведомление в формате «Было» / «Стало».

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

Как один исчезнувший стикер довел меня до написания бота

Немного цифр и первых инсайтов

За несколько месяцев тестирования накопилось примерно 21 тысяча событий (изменение/удаление/исчезающие медиа). И главное открытие: люди куда чаще отправляют исчезающие медиа, чем удаляют текст. Текст чаще просто исправляют. А вот фото — прячут намеренно.

P.S. (это анонимные логи операций, не содержащие содержание сообщений — только типы действий: удаление, редактирование, исчезающие медиа). Если что — бот не сидит с лупой над вашей перепиской. Максимум, что он “видит”, это то, что кто-то где-то что-то удалил. Представляете? У нас даже нет пункта «почитать драму», только «о, кто-то снова нажал удалить у всех». Так что бот остаётся цифровым Форрестом Гампом: он знает, что что-то произошло, но понятия не имеет, что именно. 😄

Под капотом: возможности и ограничения Telegram Business API

Бот работает исключительно через официальный Telegram Business API. Это не сторонний клиент и не "серая" схема.

Однако важно понимать и его ограничения, чтобы не было ложных ожиданий:

1. Бот не видит историю. Он начинает работать только с момента подключения и не имеет доступа к сообщениям, отправленным ранее.

2. Бот работает только в личных чатах. Технология Telegram Business API на данный момент не позволяет отслеживать события в групповых чатах.

Что дальше?

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

Ссылка на бота: @dialog_guard_bot

Показать полностью 1
11

Разработка своей программы, суровые реальности и как такое продавать?

Начнем пожалуй с предыстории.

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

- Нам нужно создать модель которая посчитает нам условия закрытия одного из объектов и как это может повлиять на инфраструктуру, сроки вчера. Чем быстрее тем лучше.

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

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

Спустя время мы конечно закрыли проект со всеми расчетами, применили изменения. Но только вдумайтесь, целый департамент на протяжении пары месяцев считает рентабельность изменения целой инфраструктуры и влияние на него всего лишь закрытием 1-2 объектами. Это колоссальные затраты для компании.

Со временем я перешел в IT, сменил свою сферу деятельности, в свободное время изучал различные языки программирования, фреймворки и понял "А что если разработать аналог для логистической инфраструктуры. Да, конечно дизайн будет не броский, но нам важна лишь функциональность и работоспособность данной программы". Соответственно в начале 25г мною было принято решение начать разработку. Как раз время AI инструментов, не идеальные, но какие-то нюансы они могут подтянуть что бы не лезть в тех доку на изучение той или иной функции/метода/условия.


Язык: Python.

Библиотеки для интерфейса: PyQt6.

Хранилище всей информации: SQLite3.

Частично использовалось: HTML, JS.

И множество второстепенных библиотек для кодирования информации, реализации возможности подключения внешних БД, работы с таблицами и т.п.


Python — язык не самый лучший, да и PyQt библиотека своеобразная и довольно хорошо нагружает систему, сама программа начинает весить тоже немало. Но ведь мы не гонимся за «вау-эффектом».

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

«Оптимизации доставок», «1С:Транспорт», «SAP», «Транспортный анализ» и т.п. Но ни одной подходящей под мое описание программы не было.

Что включало в себя мое виденье всей системы:

  1. Интерактивная карта с маркерами объектов.

  2. Автоматический расчет зонирования регионов в зависимости от исторических данных продаж с доставками.

  3. Отображение линий снабжения объекта прям на карте в формате «Объект А -> Объект Б -> Объект С».

  4. Планирование маршрута при выборе определенных объектов.

  5. Возможность построение интерактивных дашбордов.

  6. Возможность создание различных интерактивных виджетов и их настройка.

  7. Внутренний аналитический куб.

  8. Подключение к внешним БД как к источнику данных и тонкая настройка самим пользователем с маппингом полей.

  9. Создание регионов по складам (ручное выделение самого региона на карте).

И прочие функции, по типу DAX-языка при создании вычислительных полей.

Вишенка на торте всей программы:

10. Анализ инфраструктуры автоматически на ядре программы в формате «Что если?».

А что, если мы закроем магазин на Савеловской — как это повлияет на зону доставок ближайших магазинов/складов. А куда перевозить товар? Сколько машин надо и какая утилизация будет? А какие магазины есть в регионе? А что будет с инфраструктурой, если мы закроем целый склад? Кто теперь будет снабжать товаром магазины? А какая матрица товара есть сейчас? Как изменится структура поставок от основного склада на магазин, будем ли мы задействовать транзитные склады?

Первое, что я начал делать — накидывать БД, да, мы не имеем сервера, поэтому нам надо хранить данные для работы программы локально. Почему не сделать под клиента? Ну-у-у... Возможно, потому что у всех своя структура хранения, а аналитики есть везде, написать SQL-запрос и выгрузить данные по шаблону куда проще, чем делать программу с адаптивом. Имея опыт в работе с логистикой и инфраструктурой, я понимал, какая +- система хранения у всех компаний, труда собрать хранение мне не составило.

Вторым моим шагом стало изолирование всех действий с БД в программе. Т.е. все методы программы не должны общаться на прямую с хранением, а ходить через выделенный файл (ресурс).

Третий шаг — создание интерфейса, вкладок, виджетов и т.д. Можно было сделать через WebView, писать отдельно файлы форм, настраивать JS-логику, передавать сигналы в .py-файлы и т.д. Но это слишком усложняет весь проект, расширяя его код. В таком случае один я уже не смог бы вывести. Поэтому выбрал PyQt6. Долго анализировал, как лучше сделать, но ничего умнее не придумал. Так и родился первый интерфейс программы:

Один из вариантов левого меню.

Один из вариантов левого меню.

Возможность группировать объекты в рамках ближних зон и разгруппировать при приближении.

Возможность группировать объекты в рамках ближних зон и разгруппировать при приближении.

Система отображения линий снабжения.

Система отображения линий снабжения.

Возможность выбрать среди нескольких типов карт.

Возможность выбрать среди нескольких типов карт.

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

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

Создание отдельных связей между нестандартными таблицами, на этой основе можно построить запросы.

Создание отдельных связей между нестандартными таблицами, на этой основе можно построить запросы.

Возможность построить свои дашборды. Перемещать, настраивать и т.д. 

Возможность построить свои дашборды. Перемещать, настраивать и т.д. 

Подключить внешнюю БД (на примере sqlite как заглушка).

Подключить внешнюю БД (на примере sqlite как заглушка).

Анализ «Что если?». В анализе пока что реализована лишь один тип «Закрытие объекта», в будущем планируется добавить еще множество конструкторов и методов.

Анализ «Что если?». В анализе пока что реализована лишь один тип «Закрытие объекта», в будущем планируется добавить еще множество конструкторов и методов.

Пример работы анализа. Данные не фактические, лишь заглушки для проверки работы.

Пример работы анализа. Данные не фактические, лишь заглушки для проверки работы.

Также есть toolbar с интерактивностью. Наводя на кнопки, они расширяются в бок, показывая текст кнопки.

Также есть toolbar с интерактивностью. Наводя на кнопки, они расширяются в бок, показывая текст кнопки.

Скриншотами выше я показал лишь часть того, что реализовано в программе. В действительности функционал гораздо больше.

Четвертый шаг — создание ядра всего мыслительного процесса, пользователь нажал на кнопку, а что дальше? Дальше как раз таки отдельные компоненты, которые получают запрос и идут по логике дальше, забирают/обновляют/удаляют данные через шаг 2, интерпретируют их и отдают ответы на модули, которые вызывали.

Да, конечно, с ядром программы я возился довольно долго. Ввиду того что это не 1С, а свой, по сути, уникальный продукт, мне на 80% удалось создать полный конструктор ядра. Что это значит? Значит то, что всю дальнейшую логику мне надо лишь описывать в исполняемых файлах core. Это дало прирост к написанию более качественного кода, более чистого. Да, репозиторий программы увеличился с 15 mvp файлов до 80. Отдельный исполняемый файл практически на каждую форму и отдельно логический файл. Зато мы сразу имеем максимально декомпозированную структуру, которую легко править и изменять процессы.

Далее было много различных шагов, криптография подключения к БД, логирование действий для отслеживания ошибок программы, перевод карты на формат HTML+JS. Получение API ключей и т.д.


В последний момент я задался вопросом: «Как распространять обновления программы? Ведь если я внесу новые правки — пользователь должен их получить. Также я должен делать логирование для использования программы».

Долго я думал над тем, как сделать это все на бесплатном формате. Получилось сделать обновление через Яндекс Диск, авторизацию выделено и рассылку информации о грядущих обновлениях пользователям.

Окно авторизации.

Окно авторизации.

Провал авторизации.

Провал авторизации.

Окно после успешной авторизации с новостной панелью.

Окно после успешной авторизации с новостной панелью.

Интерфейс для лаунчера я накидал быстро с помощью нейронки, вручную написал код для авторизации на js с py. Настроил всё и протестировал. И «О чудо!» не имея большого бюджета у меня получилось реализовать это всё, над безопасностью авторизации еще, безусловно, стоит потрудиться.

Через некоторое время написал тест кейсы, написал алгоритм для тестирования всех модулей, поправил баги, которые вызывали сбои. Сейчас готова версия 0.5.8. До релиза v1.0.0 еще далеко, много разделов, которые моя голова хочет реализовать.

Что делать дальше? Когда я только начинал, был уверен, что проект можно продать. Я видел такие кейсы и раньше. Думал, что смогу развивать его сам, возможно, еще на год разработки в свободное время меня хватит, и я не погрязну во всей архитектуре. Но год спустя сомнения все чаще берут верх. Может, я зря трачу время?

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


Если у вас есть идея и желание реализовать её самостоятельно, смело действуйте.

В скором времени постараюсь выложить еще пост о новых функциях программы.

Делитесь своими комментариями и мнениями.

Показать полностью 14
3

Продолжение поста «VK Desktop Client — Версия 1.1.0»2

Сегодня получил фидбэк от 1 человека!

Мне сообщили что есть проблемы со входом и нашёл свои косяки.

Выпустил патч 1.1.2

Что нового:

- Исправлен вход по QR-коду (устранена ошибка Сессия истекла).

- Оптимизация памяти: уменьшено потребление ОЗУ и улучшена очистка мусора.

- Исправлены быстрые действия в панели задач (кнопки Моя музыка, Сообщения).

- Обновлены внутренние компоненты (User-Agent Chrome 131).

Также изучаю способ шифрования сообщений в VK, по возможности в будущих обновлениях добавлю!

Если у вас нету клиента, скачивайте latest версию 1.1.2 -
https://github.com/yamixdev/vk-desktop/releases
Исходный код - https://github.com/yamixdev/vk-desktop
Хотите помочь с разработкой и предложить свои идеи, я открыт!
Также насчёт билда под LINUX, у вас есть исходный код программы, можете себе собрать версию и модифицировать под себя, по желанию!

Показать полностью
5

Лёрника

Всем привет! Давно ничего не писал про проект, потому что скрупулезно работал. Итак, она все еще разрабатывается, но, доступна по ссылке - https://learnika.ru/ пока что в демо режиме, но с рабочим функционалом. Иногда будет недоступна, когда я буду что либо с ней делать.
Да, проект еще не полностью готов, и, думаю, есть наличие уязвимостей, это еще будет прорабатываться.


На данный момент - обычная регистрация через почту с одноразовым паролем с возможностью просматривать карточки уроков и возможностью написать преподавателю. Ранее хотел сделать регистрацию через госуслуги, но, это оказалось геморроем, потому что постоянно "сервис временно недоступен". потому я отложил на время госуслуги и задействовал яндекс верификацию. Чтобы начать выкладывать карточки своих уроков необходимо пройти регистрацию через яндекс. Впринципе, если с госуслугами не получится, то останусь на яндексе и переведу регистрацию полностью через него. Как ни странно, но система аутентификации у яндекса мне нравится. При регистрации защиту от ботов предоставляет google recaptcha.

Главная страница

Главная страница


Последнее нововведение - чаты. Реализация через webSocket, это накладывает некоторые ограничения на количество пользователей, до, 32 тысяч человек за раз там +-. Но это пока что не критично.

Чаты пока пустые, писать неком

Чаты пока пустые, писать неком


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

Загрузка аватара пользователя и загрузка обложки урока работает по одному принципу - пережимает изображение на сервере, исходное изображение удаляется с сервера и на нем остается сильно сжатое для экономии памяти.

Вчера весь день запускал сервер. я взял обычную vps, и первое с чем я столкнулся - сайт открывается, но регистрация не работает, постоянная ошибка. логи сервера в начале показали что запросы до spring boot доходят, но сам spring их блокирует. Пришлось повозиться с конфигами nginx, но там было не сложно. Потом, при попытке зарегистрироваться, запрос от hibernate идет на БД, но запись не появляется. Магия, подумал я, но нет, по какой то причине миграция БД с созданием схемы не работала. Решил проблему прямым запросом в саму базу. И вуаля, запись появилась. Но, следующий подвох - письма не приходят, точнее, не отправляются. Ну, первое что я проверил - работают ли порты? при попытке послушать 465 порт мертвые с косами стоят и тишина... тоже самое и с 587 портом, проблему так же решил путем включения портов в панели управления хостингом. Я такого не ожидал, потому что ранее не сталкивался.

Еще немного поработал с логотипом, мучался и сам, и с нейронками, в итоге пришел к виду вот такого логотипа:

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

Как то так, продолжаю работу над проектом, в планах закончить и полностью запустить до нового года. Всем спасибо за внимание!

Показать полностью 4
Отличная работа, все прочитано!