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

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

Мне нужен был товарищ по команде, и я связался с Ади Баджпаем, и он немедленно согласился. Я выбрал название нашей команды - Évariste ( https://en.wikipedia.org/wiki/%C3%89variste_Galois)

Пришлось открыть учетную запись на IBM Bluemix (пока мы были в разгаре конкурса, она была переименована в IBM Cloud). Нам дали 90-дневный пробный аккаунт.

У меня в голове была идея. Я всегда чувствовал, что образование требует взаимодействия. Моей целью было создать приложение, которое позволяло бы пользователям подключаться к другому. Один пользователь задает вопрос, и система свяжет его с другим пользователем. Обоим будет предоставлено окно чата один на один с двунаправленным редактором кода. Оба пользователя могут редактировать код, а остальные могут видеть изменения. Я планировал также добавить голосовой и видеочат для правильного взаимодействия (чего не произошло из-за ограничения по времени).

Наша команда была зарегистрирована 7 октября 2017 года. Мы сразу начали работу над проектом. Я назвал его HumbleHelper. Изначально я планировал использовать Firebase, так как у меня уже был опыт работы с ним. Фактически, я даже написал двунаправленный редактор кода за 15 минут. Позже я понял, что нам нужно разместить проект в IBM Cloud.

Я просмотрел документацию по IBM Cloud и понял, что он позволяет вам кодировать свой собственный сервер, в отличие от Firebase. Разве это не красиво? Поэтому я решил использовать сервисы IBM Cloud.

Я создал приложение Cloud Foundry, и когда мне пришлось выбирать язык, я каким-то образом видел только документы Java и Node JS, и я подумал, может быть, это единственные два варианта.

Я не собирался выбирать Java, поэтому выбрал Node. Имейте в виду, у меня не было нулевых знаний о Node, я знал только, как это писать.

«Хорошо, мне нужно изучить Node!» И я сделал именно это. Я продолжал изучать Node по ходу дела. Я быстро учусь и за день создал базовую структуру, которая позволяет вам создать учетную запись и войти в нее.

Я использовал IBM AppId для аутентификации и базу данных Cloudant NoSQL для хранения данных.

Нашей первой контрольной точкой была «Контрольная точка генерации идей», куда мы должны были представить идею. Это было мое представление -

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

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

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

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

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

Мы также считаем, что еще одной серьезной причиной проблем для учащихся является отсутствие надлежащих знаний о том, с чего начать. В Интернете есть много руководств / учебных пособий, но не все они одного уровня. Чтобы справиться с этой серьезной ситуацией, мы хотим составить список онлайн-руководств и руководств. Каждый пользователь сможет оценить свой любимый сервис, тем самым проложив правильный путь для будущих HumbleFools.

ОБЗОР ХАРАКТЕРИСТИК

1. двустороннее частное соединение.

2. Редактор кода в реальном времени. Помощник и помощник смогут взаимодействовать с редактором. Это поможет легко понять ошибки или лазейки.

3. Текстовый, голосовой или видеочат с согласия помощника. Это поможет в объяснении концепций / логики.

4. Сборник материалов, оцененных и предложенных сообществом.

WOEKFLOW

1. У пользователя X проблема с кодом или концепцией.

2. X задает вопрос в HumbleHelper.

3. HumbleHelper ищет онлайн-пользователей на основе языка программирования.

4. Некоторым онлайн-пользователям отправляется запрос. Если ни один из них не принимает, по истечении определенного времени запрос отправляется другой группе. Если никто не принимает после долгого ожидания, помощник уведомляется.

5. Онлайн-пользователь получает запрос и проверяет вопрос.

6. Если (а) он принимает запрос, открывается сеанс, на котором они могут обсудить тему.

7. В конце сеанса помощника просят оценить помощника.

8. По оценкам, помощник получит признание.

Последнюю функцию предложил Аади, но я не смог включить ее, потому что Cloudant позволил только 1 ГБ места, и я не хотел хранить много неважной информации.

Я не мог включить голосовой и видеочат из-за нехватки времени и того факта, что приближались семестровые экзамены. Да ладно! Я бакалавр наук. Студент математики в одном из самых известных колледжей Калькутты! Мне нужно учиться!

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

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

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

Затем я решил реализовать чат. И я выбрал Socket.IO.

Я имел в виду другое. Мне приходилось уведомлять пользователей, когда кто-то просил о помощи, или просто об общей информации. Socket.IO справился бы с этим. То, что я сделал, было -

  1. Создайте хеш.
  2. Как только пользователь открывает домашнюю страницу, он регистрирует сокет в пространстве имен «/ notification».
  3. Промежуточное ПО захватывает сокет и сохраняет его в хэше вместе с идентификатором электронной почты пользователя.
  4. Поскольку идентификаторы электронной почты были уникальными (обрабатывались IBM AppID), мы могли уведомлять пользователей по идентификатору emai.

Я гордился собой, но ничего не вышло. Уведомление не будет доставлено.

Я заполонил код console.logs. Хэш был заполнен пользователями. Тогда почему не работало?

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

В один прекрасный день (или ночь, я забыл) я подумал: «Нет! Сдаться - это не так, Aniket-y. Да ладно! Вы научились программировать и не можете решить эту проблему? »

Я обратился к нашему спасителю StackOverflow.

Я набрал очень длинный вопрос, подробно описывая все детали.

Как только я нажал «Отправить», в моей голове промелькнула одна мысль.

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

Я проверил код и сделал ту же ошибку - я забыл вызвать следующую функцию.

(Те, кто не знает, при регистрации промежуточного ПО, если вы не позвоните в следующий раз, промежуточное ПО после вашего не будет зарегистрировано)

В свою защиту, я впервые работал с промежуточным программным обеспечением.

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

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

Вы могли подумать, какова была роль Ади. Ну, он работал над своими проектами Google Code-In (где он стал великим чемпионом). Но мне удалось выжать из него логотип. Логотип тоже сделал я, и он сделал его презентабельно.

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

Ага, это настоящий снимок экрана из поисковой части.

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

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

Вместо этого через 2 минуты он просто сказал пользователю повторить попытку позже.

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

У меня была еще одна идея о том, как заархивировать вопрос из будущего. Сначала я подумал, что после чата помощника попросят дать краткий ответ на вопрос, чтобы его можно было использовать в случае, если у кого-то есть такой же вопрос. Аади, однако, правильно заметил, что помощник должен делать слишком много работы бесплатно. Поэтому я сделал это необязательным. Если помощник давал ответ, он давал ему дополнительные «HumbleSwags» (придумано Аади)

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

Между тем, они продлили крайний срок с 6 декабря до 18 декабря, и это хорошо. Но мои экзамены уже начались в ноябре и должны были закончиться 18 декабря :)

Теперь я хотел сделать его ударопрочным. Я создал больше экземпляров процесса из панели управления IBM, и Socket.IO перестал работать. Я пробовал другие модули, такие как кластер, но ничего не работало, не нарушая существующие. Оставался один день, а я ничего не знал о дифференциальном уравнении, которое ждало меня на предстоящих экзаменах. Итак, разочарованный, я решил трахнуть это (не буквально) и оставил как есть.

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

Демо

"Презентация"

Законное требование: не обращать внимания на мое лицо. Я сидел напротив света. В остальном я красавчик :). Не обращай внимания и на мой голос. Мне пришлось говорить тихо, потому что мама делала свою работу. Не обращайте внимания на дрянные видео и презентацию. Я сделал их за два часа до отправки. Жизнь трудна, когда вы многозадачный волшебник.

Я объяснил код, трудности и все остальное в видео.

Я отправил все 18 декабря.

Я не надеялся на победу. Я был почти уверен, что это мусор. Идея была, скорее всего, тупой. Код был определенно ужаснее логова Медузы. У меня в голове была картина, как судьи смеются и катятся по полу, глядя на мой код (и мои видео).

Результат должен был быть объявлен 7 января. Но результат отложили на два дня.

9 числа перенесено еще на 3 дня.

Я подумал, может быть, судьи поранились, смеясь над моим кодексом.

18 января я разговаривал со своим другом о том, как сильно мне нужно покупать телефон. Мне нужно было еще около 5000 ₹, чтобы купить приличный телефон.

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

И эй! Это имя выглядит так знакомо! Это я? Да, действительно. Похоже, TopCoder не смог правильно разобрать название команды, но подождите! Это правда я?

Это было невероятно. Это был мой первый вызов TopCoder, мой первый раз, когда я писал Node, мой первый раз, когда я работал с сервером, и мой первый раз, когда я работал в крупномасштабном проекте.

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

Фактически, я действительно хочу когда-нибудь выпустить HumbleHelper с соответствующими средствами и всем остальным, но этот день еще не наступил.

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

Спасибо TopCoder за предоставленную мне возможность.

✉️ Подпишитесь на рассылку еженедельно Email Blast от CodeBurst 🐦 Подпишитесь на CodeBurst на Twitter , просмотрите 🗺️ Дорожная карта веб-разработчиков на 2018 год и 🕸️ Изучите веб-разработку с полным стеком .