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

Кронос

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

Путешествие по проекту и препятствия, с которыми пришлось столкнуться

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

  • Я взял ручку и бумагу и набросал все, что, по моему мнению, должно быть в этом приложении, как оно должно работать. Это была простая, но важная часть, у меня было общее представление о том, как будут выглядеть интерфейс и серверная часть.
  • Я хотел узнать как можно больше, работая над этим. Я боялся, что если я сначала сделаю бэкэнд, то он может просто закончиться в интерфейсе командной строки. Это также ограничило бы количество людей, использующих его. Сначала я взялся за интерфейс, HTML был легкой прогулкой, а CSS доставил мне небольшие проблемы, так как у меня не было опыта его реализации, особенно в части макета сетки.
    Я решаю назвать приложение чем-то пугающим, что станет вишенкой на устрашающем распределении оценок. Поэтому я назвал его Grim_Reaper и сделал веб-страницы темнее. Но позже я понял, что это было намного мрачнее, чем само распределение оценок, поэтому я изменил имя на «Кронос», хранителя, чтобы облегчить тон.

  • Я разбирался в основах git, но мало использовал его в командах терминала. Теперь, после интенсивного использования команд git, я могу сказать, что основные команды git — это мышечная память.
  • Теперь была важная часть, когда мне нужно было получить запрос от внешнего интерфейса для данных, а затем отправить данные обратно во внешний интерфейс после извлечения из бэкэнда. Я пытался найти решения для этого, изучил базовый javascript, который не нужен для этой части проекта, но позже был использован. После того, как некоторые друзья порекомендовали «flask», я узнал о веб-фреймворках. Я сразу же приступил к его изучению, не просматривая никаких руководств или видео-лекций, только документацию. Оглядываясь назад, я сожалею об этом поступке, так как это сэкономило бы мне время и силы, но, опять же, смотреть видеолекцию — не мое. Я гуглил такие вещи, как запросы, метод HTTP и присвоение URL. Здесь я столкнулся с проблемами, когда статические файлы, такие как CSS и изображения, не загружались, что было решено путем назначения для них динамического URL-адреса времени выполнения.
  • Затем я работал над сбором данных за прошлый год, объединение этих отдельных оценок, содержащих файлы, в один файл оказалось проще, чем ожидалось, поскольку .json был похож на словарь в python. Только извлечение предыдущих записей казалось невозможным, пока не пришла идея извлечь их из истории контроля версий блэкджека бота (https://github.com/metakgp/blackjack).
  • Поиск по запрошенному курсу и построение графиков:
    Поиск записей по запрошенному коду был простым. Однако я хотел распределения оценок в виде диаграмм. Это была самая сложная часть всего проекта. Во-первых, количество графиков было переменным, так как количество записей для каждого данных было разным. Во-вторых, я запутался между использованием chart.js для создания графиков и загрузкой сшитых графиков в одно изображение. Я выбрал второй, так как у меня уже была большая часть кода, работающего на питоне. Графики были созданы с помощью matplotlib, и для объединения графиков в одно изображение я использовал Pillow, ответвление Python Imaging Library (pil). Далее было, как передать изображение на html-страницу. Это казалось еще одним препятствием, так как изображение не было статичным и не обновлялось для последующего запроса на разные курсы (т.е. отображало то же изображение, что и первое, для всех запросов). Это было решено путем создания динамического URL-адреса для запрошенного кода и удаления предыдущих существующих изображений для ранее запрошенных курсов.

После завершения

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

Outro

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

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

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