Существует у айтишников весёлая забава — создавать похожие, а иногда и идентичные продукты. У начинающих мобильных разработчиков это todo-листы, у ардуинщиков — метеостанции, у банкиров — покупка билетов на самолёт (хотя казалось бы…), а у студентов — приложения с расписанием своего учебного заведения.

В первых двух случаях смысл понятен — обучение программированию.

Третий случай тоже прост — извлечение прибыли.

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

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

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

Таким студентом стал и я много лет назад. Но у моего приложения была одна уникальная фича.

Моё приложение умело добавлять события в календарь смартфона. Занятия располагались вместе с остальными задачами на день, которые находились в моём Google календаре. Их можно было смотреть в виджетах или с умных часов.

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

Не хотелось, чтобы идея ушла в небытие.

Мне повезло стать Android-разработчиком и получить много опыта во время работы. Поэтому 15 месяцев назад я приступил к созданию с нуля chronus — это приложение не только добавляет расписание в календарь, но ещё и имеет много уникальных, реально полезных фичей, не имеет рекламы и лишнего булщита, а вишенка на торте — вы имеете возможность интегрировать ваше учебное заведение за пару вечеров.

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

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

1: Скорость

Урок первый, по мнению одного обладателя бугатти

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

Не хочется ждать полсекунды, пока календарь открывается? Можно вывести виджет календаря на рабочий стол. Или включить уведомления (о них будет подробнее в 4-ом пункте).

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

2: Просмотр доступен везде — выбирай наиболее удобный способ

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

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

А ещё у chronus имеется интеграция с облачным календарём (например, прикреплённым к Google аккаунту), поэтому расписание доступно также с компьютера или с Apple-девайсов — хотя версия для iOS ещё не выпущена, ходить с расписанием в айфоне можно уже сейчас.

3: Готовность к изменениям

Во многих учебных заведениях расписание меняется очень неожиданно. Иногда — даже меньше, чем за сутки. Невозможно всегда быть к этому готовым.

Когда chronus синхронизирует расписание, он сравнивает его с расписанием, полученным ранее. Если приложение замечает изменение в течение ближайших трёх суток, то сообщает об этом в уведомлении.

Уведомление при обнаружении изменений в расписании

Некоторые приложения получают данные со своих серверов, где они кешируются. В теории подход правильный, но, на деле, данные на сервере часто не обновляются днями и даже неделями. Одна из причин — иногда получение данных для таких серверов банится анти-ddos'ом сайта ВУЗа, после чего студенты просто остаются без актуального расписания.

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

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

4: Максимальная настройка под себя

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

Пример настройки — слева, само напоминание — справа

Хочется скрыть расписание другой подгруппы? Может быть, некоторые занятия являются необязательными факультативами? Или, может, вы — энгри бёрд, и не ходите на скучные лекции? И это можно настроить.

Пример скрытия некоторых занятий

Я намеренно не стал добавлять отображение расписания внутри приложения, чтобы студенты привыкали к календарю как инструменту. Можно выбрать любой предустановленный, либо найти сторонний в Google Play.

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

Календарь Google, MIUI и Flyme

Кроме того, в приложение можно добавить неограниченное количество расписаний групп, преподавателя или аудиторий. Их можно смотреть как одновременно, так и по отдельности.

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

5: Ничего бесячего, только расписание на максималках

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

Для одного учебного заведения — это когда помимо расписания в приложении может появиться личный кабинет, заметки, рейтинг преподавателей. Всё, что разработчику придёт в голову. И иногда эти идеи сомнительны, мягко скажем.

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

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

Могут ли они повлиять на коварного преподавателя, занизив ему рейтинг в каком-то неофициальном приложении? Ха-ха.

Выходит, от приложений с расписанием нужно только расписание. Всё остальное лишь перегружает их.

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

Не удивляйтесь началу занятий в 5 утра — я находился в другом часовом поясе. И не удивляйтесь отсутствию расписания у конкурентов — у них постоянно что-то ломается, я не виноват

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

Chronus можно настроить и забыть про него, никогда больше в него не заходить — расписание будет ждать в календаре, будет обновляться само.

6: Вам не нужно разрабатывать такое же приложение

Согласитесь, все фишки приложения звучат невероятно очевидно, буквально лежат на поверхности. Но я бы не стал создавать chronus, если бы они были где-либо ещё. К ним я пришёл сам, такой функциональности нет ни у одного из конкурентов (точнее — я не встречал).

Но если бы я ограничился лишь своим ВУЗом, то не сделал бы жизнь студентов лучше глобально, поработал бы только для своих. Всем остальным пришлось бы тратить кучу времени на создание такого же приложения, покупать аккаунт разработчика, следить за багами (не связанными с парсингом расписания), обновлять его, поддерживать работу сервера.

Поэтому теперь chronus — единая платформа для расписаний учебных заведений. На днях я опубликовал на GitHub шаблон для создания интеграции с вашим учебным заведением. Теперь достаточно, следуя инструкциям, реализовать всего две функции на Kotlin. Всё максимально упрощено, инструкции максимально подробные, поэтому любой человек со знаниями в программировании сможет создать интеграцию за пару вечеров.

В знак благодарности за создание интеграции я предоставляю отдельную страницу, на которой вы сможете рассказать о себе, в том числе сможете пропиарить свои соцсети и проекты (разумеется, при необходимости вы сможете обновить эту информацию в любой момент). Кто окажется первее, тот и застолбит за собой целое учебное заведение. Успевайте запилить интеграцию, или даже несколько — помогать другим ВУЗам тоже можно :).

Примеры самопиара

Итоги

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

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

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

К моменту публикации этой статьи в chronus отсутствуют известные баги, crash-free равен 100%, а размер приложения в разы ниже конкурентов — последняя версия с поддержкой шести ВУЗов занимает менее 2,5 МБ.

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

Когда я пойму, что людям интересен проект и аудитория активно растёт, я выпущу версию для iOS.

После становления лидером среди схожих приложений (став популярнее, чем коммерческие аналоги), я обещаю опубликовать все наработки в opensource.

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

Хотите разработать интеграцию? Вам на GitHub, там все инструкции.

Попробовать приложение можно, скачав его в Google Play. Работа на Apple девайсах сейчас доступна через синхронизацию календарей.

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