13

Как стать программистом. Сервис доставки живых спортивных трансляций

Приветствую всех! Хочу рассказать о своем опыте входа в мир разработки, ну и промежуточном результате. Это мой первый пост в сообществе и целом на Пикабу.

Честно сказать, с детства восхищался айти, но в рамках кинематографа, тайно мечтая приблизиться к искомому.  День Х настал уже в сознательном возрасте 23-24, после сильнейшего кислотного трипа, приехав домой с четкой мыслью что буду ненавидеть себя до конца жизни, если не попробую , заказал книгу по C++  Страуструпа. Через не могу, прочел и прорешал это. Никому не рекомендую начинать с плюсов, это вас задемотивирует + большей вероятностью забьете. Но тогда опыта не было, первую работу тоже искал в качестве разработчика С++. Волшебным образом мне  повезло. Навешал лапши на уши о том что все могу,  и меня взяли на 20000р в мес с маленькую фирму, пилить их хотелки, попутно занимаясь полным спектром работ от погрузки/разгрузки/демонтажа конструкций до работы на подряде на местных заводах . Уволился через год-полтора и так получилось что обратил свое внимание на C#.

За 3-4 месяца так же прочел неск книг по шарпу, поверил в себя и пошел на собеседования(СПб). По истечению полугода так никуда и не взяли, от части из-за слабо прокачанных социальных скилов и неуверенности в себе. Бывали даже панические атаки прям на интервью)

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

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

Собственно, начался ресёрч и планирование примерно в апреле 2018 года, цель была сделать сервис который бы транслировал живые спортивные события, был прост и стабилен + работал на всех устройствах. Через 3 месяца от начала разработки скилы начали прокачиваться, голова наполнялась не серой теорией. Все это время я работал в техподдержке и в момент очередной ссоры с начальством,  разослал резюме десяткам фирм мне пришло интересное предложение. Т.к я уже имею опыт бесполезных поездок на себеседования, решил отправить им свое тестовое задание, которое делал для других. Десктопное мини приложение где для чтения и выгрузки огромного текстового файла использовалась многопотоночность и асинхронность + шаблон MVVM. В результате меня пригласили на встречу и в последствии взяли на работу. Это был успех) Зарплата выше чем в поддержке в 2 раза. Окрыленный я, чуть поздабив на домашний проект, влился в рабочие процессы, получил колоссальное кол-во опыта и к декабрю 2018 продолжил домашнюю разработку сервиса по спортивным трансляциям. Переделывал все раза 3-4 :-)

По итогу проект сейчас состоит из пяти микросервисов. Основополагающий это сервис синхронизации данных в БД от других микросервисов. WEB  API. Сделан на .NET Core, изучал и сразу применял шаблоны проектирования, такие как фабрика, синглтон, репозиторий(это подсмотрел в офисных проектах и в книгах  по шаблонам проектирования)

Проект написан не на чистом .net стеке, так же использовался nodejs(для старта ffmpeg, временных инстанцев http серверов. На nodejs это оказалось проще и быстрее), примечательно что вызывать nodejs код можно прям из .net приложения использую INodeSerevices, оч удобно.

База данных сперва была MSSQL, но потом переехал на Postgres, тоже подглядел в офисных проектах.

Покупаю видео поток у контент провайдеров, ретранслирую через свой сервер. Что бы работал телеграм вынужден был купить socks5  proxy, так же в перспективе нужно будет покупать расширенный аккаунт для ngrok, т.к он выполняет роль https  тоннеля, который перенаправляет пакеты от телеграм на мой локальный порт и адрес, иначе нужен будет SSL сертификат и свой домен.

Сперва ретрансляция одного потока занимала примерно 50% CPU, это опустило меня на дно отчаяния т.к по моим расчетам нужен был хотя бы двухпроцессорный сервак б.у с алиэкспресс примерно на 36-48 ядер. Очень не хотелось тратить 1000$ на подходящий сервер, что бы найден способ, снижающий нагрузку до смешных 0.5 - 1%.


Сейчас сервисом пользуется один человек, с подачи которого все это затевалось) Но мне бы хотелось поделиться этим с людьми, т.к ресёрч показал что годных сайтов/сервисов по прямыми трансляциям и большим ассортиментом, да еще и чтоб работало на ios/android , просто нет. По этому оставляю тут адреса.

Канал: @LiveSportsStreams Bot: @LiveSportStreamsBot.


Спасибо за внимание, надеюсь на фидбек, отвечу на любые вопросы.

Лига программистов

2.1K постов11.9K подписчиков

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

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

0
Автор поста оценил этот комментарий

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

Вы же инди и NDA на вас не давит.


Если уж постите рекламу коммерческого сервиса в сообществе программистов и сочувствующих, то хоть сделайте ее интересной для целевой аудитории. @moderator

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Старался сделать интереснее, но опыта особо нет. Сперва была цель сделать чтоб хоть как-то работало, написал монолит, столкнулся с тем что IOS  ничем кроме HLS и WEBRTC не передать живой контент, готовый к воспроизведению. Пошел по пути webrtc, вебсокеты оказались весьма сложны в освоении и когда прототип на вебсокетах был готов, выкинул его на помойку из-за того что сажает батарею устройств за 2 часа почти в ноль из-за транскодирования потока на стороне клиента + WebRtc(а иначе мне бы приходилось транскодить поток отдельно для каждого пользователя, а это колоссальная нагрузка на сервер)  не поддерживается на ios ниже 11 и андроиде ниже 5 версии. Убил на это примерно месяца 3. Начитался про ffmpeg, hls  и понял что это единственно верное направление. Закончил полностью рабочий монолит примерно в мае, отдохнул, привел мысли в порядок и понял что ЭТО адски сложно будет поддерживать, было принято решение распилить на микросервисы. Если коротко то в аднный момент их несколько: dataService - парсит инфу о спортивных событиях с сайтов каналов(пришлось освоить Selenium), так же прибегнул к алгоритмам нечеткого поиска типа Левинштейна. schedulerService - имеет один webapi  контроллер, который принимает сигнал о том что парсинг данных закончен и пора бы обработать входящие спортивные евенты, преобразовать их объект типа Stream и запланировать старт и окончание события, для планирования использовал библеотеку Quartz.Net. launcherService, просто запускает стрим, который приходит на контроллер после срабатывания тригера Quartz на шедулере. Большая проблема была с организацией портов,  полчалось так что стартует стрим, а нужный порт занят. Решил следующим образом: т.к старт стримов происходил непосредственно с помощью скриптов NodeJs и npm пакета fluent-ffmpeg и  hls-server, а вызывалось все это через INodeService в .Net Core приложении, нашел npm пакет fkill, который убивает слушателя порта. Далее столкнулся с синхронизацией контекстов баз данных, используя EntityFramework, запили потокобезопасные репозитории для всех необходмых типов данных. SyncService  -  сервис синхронизации, самое сердце приложения, именно он принимает на себя все обращения, типа срабатывания тригеров от шедулера, окончания работы парсера т.д. Когда распилил все на микросервисы, поддерживать стало в миллиардры раз проще) Планирую добавить сервис логгирования, сервис аналитики пользователей и антиспам модуль

показать ответы
Автор поста оценил этот комментарий

Раскрутка

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Я и не скрывал, один подписчик же

0
Автор поста оценил этот комментарий

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

Вы же инди и NDA на вас не давит.


Если уж постите рекламу коммерческого сервиса в сообществе программистов и сочувствующих, то хоть сделайте ее интересной для целевой аудитории. @moderator

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

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

показать ответы
0
Автор поста оценил этот комментарий

может и книгу по шарпу хорошую подскажете?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Адам Фримен asp.net core mvc2

0
Автор поста оценил этот комментарий

так с чего начинать, если не с С++?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

с java или шарпа

показать ответы
0
Автор поста оценил этот комментарий

Согласен, а автору совет: сделай API, задокументируй. А потом можно и рекламировать

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

так понимаю речь о паблик АПИ? для кого\чего? все уже работает как должно, это не опенсорс

0
Автор поста оценил этот комментарий

в скором с++ планирует даже отказаться от указателей

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

В современном (прикладном) C++ необоснованная явная работа с сырой памятью (new/delete, арифметика указателей) и так осуждается. Все как у всех, с поправкой на RAII и умные указатели вместо сборщика мусора. Код получается няшный, но это будто бы еще один язык в языке, со своими правилами и стилем (=


Ну и плюсы нет библиотек, на том же шарпе полезностей разных куча.

Спорить с очевидным конечно же не буду, но под C++ вполне канают сишные библиотеки, коих вагон и маленькая тележка. Но нельзя назвать их удобными (низкоуровневые же), не говоря уже о том, что для C/C++ до сих пор не существует стандарта де-юре даже для банальной сборки проектов, не говоря уже о модулях...


И все же у С++ есть ряд киллер-фич, которых мне не хватает в сишарпе:

1) const-correctness

Позволила бы не городить иммутабельных обёрток и копировать данные для вывода их наружу. Да и самой мутабельностью управлять было бы куда проще под присмотром компилятора.


2) constexpr

Позволило бы делать вычисления во время компиляции.

Особенно грустно видеть интерполированные строки, которые не могут давать константный результат. Банальная конкатенация через "+" может, например.


3) шаблоны

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

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Кажется да, попался на первоапрельский пост)Честно сказать, так обрадовался что отключил критическое мышление) А где можно посмотреть пример кода, о котором говоришь "Код получается няшный, но это будто бы еще один язык в языке, со своими правилами и стилем"?

показать ответы
0
Автор поста оценил этот комментарий

а стримить на ютуб не вариант?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Скорее всего получу бан т.к контент проприетарный. Все-таки ретранслирую тв каналы

0
Автор поста оценил этот комментарий

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

Жуткой вещью остаются шаблоны. Но когда-нибудь запилят концепты и многое станет проще и логичнее.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

Кстати очень понравился QML
показать ответы
0
Автор поста оценил этот комментарий

попроси друга отправить ссылку на Ютуб.

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

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

показать ответы
0
Автор поста оценил этот комментарий

ну, ютубчик же как-то превьювается и съедается встроенным плеером

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

хм, можно поподробнее?

показать ответы
0
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Особенно когда на элементарную ошибку синтаксиса тебе вылазит сообщение о ошибке состоящее из пяти строк кракозябров. Плюс на С++ все слишком низкоуровневое и кодить на с++ возможно разве что с помощью QT

показать ответы
0
Автор поста оценил этот комментарий

Ну шикарно же! Тема необычная. Если структурировать, сдобрить примерами и конкретикой, это можно было бы хоть на Хабр выкладывать - может получиться интереснее типичных статей там. По моему скромному мнению.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

0
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

1
Автор поста оценил этот комментарий
Бота добавил, как пользоваться не понял. "Пользуйтесь командами бота" (с) Списка команд нет, /help не работает
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Добавил ссылки на команды в сервисное сообщение бота

0
Автор поста оценил этот комментарий

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

Вы же инди и NDA на вас не давит.


Если уж постите рекламу коммерческого сервиса в сообществе программистов и сочувствующих, то хоть сделайте ее интересной для целевой аудитории. @moderator

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

https://gist.github.com/stgmt/81fa2db9d6d2c66a1fb2519036a36e5c вот кстати реализация репозитория слоя доступа к данным

0
Автор поста оценил этот комментарий

@ghsee, что не понравилось, айпи адрес вместо домена, страница плеера не адаптирована под мобильный браузер. Зачем бот то? Можно было так же на сайте организовать список

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

показать ответы
0
Автор поста оценил этот комментарий

удваиваю.

реквестирую завести видеопоток прямо в телегу

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

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

показать ответы
1
Автор поста оценил этот комментарий
Бота добавил, как пользоваться не понял. "Пользуйтесь командами бота" (с) Списка команд нет, /help не работает
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

help  и правда нет. иконка команд около клавиатуры, по стандарту все команды доступны через слеш /.  /all /now. В описании так же указаны команды

2
Автор поста оценил этот комментарий

Круто, да.

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

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Это не опенсорс. Задавай вопросы по стеку технологий, обещаю тебе интересный диалог

показать ответы
Автор поста оценил этот комментарий

Один человек? Мдаааа

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Это не конструктив.