Надоело мне тут прокрастинировать и решил заняться чем-то новым. Да, давно, с пол года назад. В общем выбор пал на C#.
За это время успел начать писать десятка три проектов и ничего не закончил) Да, действительно. На определённом этапе понимаешь, что без глубокого планирования ты будешь десяток раз переделывать приложение с 0 и это надоедает.
Но определённые успехи тоже есть: писать бросал не потому что оно не работает, и даже не потому что идея начинала казаться слишком сложной. Нет, я бросал на этапе "сделать красиво". То есть код есть. Он работает. Свою задачу выполняет. Но "Как показать результат?" - этот вопрос меня отсылал в нокаут. В смысле я могу выводить что-то в консоль или в пару полей на пустой форме, но в каком веке мы живём, чтоб в консоли что-то выводить?)
Первая серьёзная попытка была месяца два назад: прицепил библиотеку OpenTK и полез в геймдев. Что такое геймдев с точки зрения кода и чтоб максимально просто? Несколько моделей, координаты которых нужно посчтитать (масштаб, поворот, движение) и спроецировать на экран. Сколько гайдов на такой простой алгоритм? Правильно. Нисколько. Может в дебрях ютуба на OpenGL и есть, но на OpenTK я не нашел. Максимальная примитивщина: игрок (камера) движется по платформе вокруг кубиков, управление с клавиатуры/мыши реалтайм. Да, я справился с обьектным подходом. Коллекция моделей даёт свои координаты, которые летят в шейдер, где умножаются на пачку матриц (да, одолел кватернионы) и тут же выводятся на экран без обратной связи. ДА, для десятка объектов примерно 90% расчётов уже только на видюхе. И да, графический процесс почти не зависел от физического - он получал координаты объектов из буфера и рисовал, а физ.ядро считало своё и складывало в этот буфер. Решил приделать простую менюшку, типа интерфейс и... Лежит сейчас недописанный с кучей ошибок.
А вчера я решил, что так продолжаться не должно. В комментах кому-то пару месяцев назад пообещал сделать погодного бота, чтоб через телегу можно было спросить погоду на какой-то город и узнать насколько прогноз врёт. И всю новогоднюю ночь до сейчас я это пытался сделать. Но уже работает. В базе 1'000 городов Украины (где и живу) более 150'000 уникальных записей прогнозов на следующие 10 дней. Обновляется в реальном времени. Реагирует на команды с консоли и сообщения бота в Телеге. Изначальная задача : обеспечить работоспособность. Умеет самообновляться по команде. В смысле сохранить данные, закрыться, заменить исполняемые файлы и открыться обратно. Работает шустро: отклик в телеге около секунды. Из недостатков: только один погодный сайт, данные по реальной погоде так же ещё не подгружаются. Но это вопрос добавления кода: нужно зайти на погодный ресурс, посмотреть как формируются ссылки и прогнозы, настроить автоматический расчёт ссылок и быстрый парсинг результата. Добавить новые объекты в основной код. С телегой та же ситуация, что и с OpenTК у меня была: сесть и начать долбить её методы, пока не разберусь что как работает. Жёсткой математики тут нет, так что будет легче.
Реальные проблемы: дикая скорость записи файлов. Уже сейчас для презапуска нужно ждать минут 5 пока он сохранит данные, и столько же для загрузки. Ну при загрузке приложение уже работает хотя бы.
Что уже умеет: короткое сообщение в телеге (после пары проверок конечно) пытается прицепить как название города для сбора статистики. Проверка проходит в течении 10 секунд, добавление результатов ещё в течении 30. Вообще обе задачи на город длятся максимум пару секунд, но они добавляются в текущую очередь задач, так что приходится ждать.
Если введённое сообщение содержит название города, что уже в базе - отсылает сообщением часть прогноза на сегодня. Почему часть? Я почти сутки это писал - кинул пару свойств для проверки и нормально. Это единственный настроенный отклик.
Так же сохраняет мне все пришедшие сообщения, умеет распознавать номера телефонов, имейлы, ссылки и сохранять отдельно. Картинки и прочее уже не настраивал - хочу спать.
Внутри приложения 4 потока:
1. Пытается вытащить из списка GET запросов завершённые и добавляет в список прогнозов/городов. Бесконечный цикл с задержкой 1/10 секунды после каждой попытки чтения.
2. Пытается отправить GET запросы на сайт и записать отклик. Если список пуст - генерирует новый. Задержки те же.
3. Бот телеги. Раз в пол секунды читает сообщения и пытается на них реагировать.
4. Консоль. Ожидает команд. У бота и консоли обработчики разные, не пытайтесь)
Бота можно найти по имени @ArsokoWeatherTestBot
Потыкайте в него, интересно сколько продержится))
В общем буду рад как критике и предложениям по функционалу, так и работе разрабом. Для последней цели собственно и стараюсь. Как уже писал выше бот умеет сохранять сообщения что бы я потом прочитал. Борисполь если что, но рассматриваю переезд.
Пока писал этот пост, стало на 20к результатов больше. Чувствую что сохраняться вечером он будет минут 15... Придётся переписать эту функцию первой.
Первый GetCount когда начал писать пост, второй - понятно)
Так же видно время реакции на добавление города.
Если честно я ожидал мегабайт на каждую 1000 записей, приятно удивлён.
Записей на 01.01 мало потому что прогноз в прошлое мы не сохраняем.
Да, он работал с перерывами с 2 ночи, я старался избежать потери данных.
Вопрос знатокам: какой самый лучший способ сохранения кучи мелких объектов в файл?
Ну а я спать, надеюсь бот выдержит этот день.