PJ Dev
480 subscribers
58 photos
1 video
1 file
67 links
История в прямом эфире о том, как я стал разработчиком, изменил свои привычки и улучшил качество жизни

https://pjdev.ru/
Download Telegram
После собеседования я спросил у Антона, насколько он был честен в своей оценке. По его словам, мои знания core-python на хорошем уровне, но этого мало для того, чтобы начать работать, да еще и есть что подтянуть.

А дальше он дал рекомендации:
1. Разобраться с асинхронным и конкурентным программированием.
2. Изучить SQL на более серьёзном уровне.

Я решил начать с асинхронного программирования, и опять же, по рекомендации Антона, начал изучение с книги "Asyncio и конкурентное программирование на Python" автора Мэтью Фаулер. Книга действительно популярная, не раз мне её рекомендовали.

Все началось с простых понятий: процесс, поток, конкуренция и параллелизм. Далее тебя знакомят с командами async и await. Объясняют, что такое GIL, а дальше начинаются сложности. Автор предлагает написать свой асинхронный эхо-сервер с неблокирующими сокетами и использованием модуля selectors для построения цикла событий сокетов.

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

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

#программирование #python #asyncio
🔥163👍1
Дочитал я, в общем, первые четыре главы книги "Asyncio и конкурентное программирование на Python", которые рекомендует осилить автор. И сел думать: "А что дальше... и где это применять?!"

Почитал еще другие ресурсы, а там пишут, что асинхронное программирование чаще всего используется в крупных микросервисах, что логично. Ведь там возникает множество различных запросов, а скорость выполнения ограничена скоростью ввода\вывода (IO-bound). Еще пишут, что асинхронное программирование часто используют в парсерах и в ТГ ботах. А у меня таких проектов, к сожалению, нет.

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

В любом случае это был полезный опыт. Я стал лучше понимать, как работает процессор, что такое процессы и потоки. В чем разница между IO-bound и CPU-bound. Да и в целом для чего нужен асинхронный код и где его можно использовать, а где он вовсе может навредить. Уверен, что в будущем мне эти знания пригодятся.

И так план на ближайшие пару недель:
1. Завершить курс по GIT, который я давно начал, но бросил из-за более приоритетных дел. Постараюсь написать на него обзор с публикацией на Habr. Будет мой первый пост.

2. Я вступил в сообщество "Ботаним с Диджитализируй!", где ребята разбирают умные книги, касающиеся разработки. Пойду по их следам, и начну читать книгу "PostgreSQL Основы языка SQL : учебное пособие Евгений Моргунов". Постараюсь побольше попрактиковаться с SQL, может как-то более широко внедрить его в свою игру или напишу какой-нибудь новый учебный проект под это дело. Автор клуба предлагает работать с БД через Docker, заодно вспомню что такое контейнеры.

#программирование #python #asyncio #книги
🔥9👍5👌1
Многие из моих подписчиков уже знают, кто такой Тимофей Хирьянов, так вот, он недавно на своём канале запустил новую серию лекций "Информатика на Python". Я уже посмотрел первую, и в целом, нашёл для себя некоторые интересные моменты.

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

Если кто-то еще не знаком с творчеством Хирьянова, то очень рекомендую познакомиться: шикарный педагог и просто очень приятный человек. У него на канале много различных видео, в том числе и по Си.

Когда я только начинал своё погружение в мир Python, он мне очень сильно помог в этом. А сейчас, когда я уже сам преподаю детям, я во многом беру пример с него. В каком-то смысле мой кумир.

#Программирование #Python #Информатика #Рекомендация
🔥114👍4
Мне тут в комментариях недавно посоветовали книгу Эрика Мэтиза — "Изучаем Python. Программирование игр, визуализация данных и веб-приложения". Так вот, я написал один из проектов книги — копию игры Alien Invasion на PyGame. Так что минувшая неделя прошла довольно продуктивно.

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

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

Немного о самой книге. Она разделена на две части:
1) Основы программирования — это переменные, типы данных, операторы, циклы, функции, классы, работа с файлами и тестирование. В общем весь базовый арсенал. Эту часть я пропустил, так как в целом с ней уже достаточно хорошо знаком и перешёл сразу к проектам.

2) Три проекта:
- Игра на PyGame;
- Проект по визуализации данных на Matlib + Pygal;
- Создание веб-приложения на Django.

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

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

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

P.s. в комментарий добавил короткое видео с геймплеем.

#Программирование #Python #PyGame
👍10🔥6🤓2
Начал делать следующий проект из книги Эрика Мэтиза — "Изучаем Python. Программирование игр, визуализация данных и веб-приложения".

По сути, стандартное ToDo веб-приложение, где есть модели разделов и записей к ним. Возможность зарегистрироваться \ авторизоваться. Каждый пользователь видит только свои записи и разделы. На странице раздела перечислены все записи, а под каждой записью есть кнопка позволяющая отредактировать её, и есть кнопка добавить новую запись.

Пока что работаю в приватном репозитории, но как закончу думаю расшарю его. Может у кого-то будут советы и рекомендации, буду рад адекватной критике.

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

#Программирование #Python #Django
👍4🔥43
Завершил проект, о котором писал выше. Если так вообще можно выразиться.

Выглядит он, конечно, очень сыро. Много чего не доделано:

Где-то оформление есть, а где-то отсутствует;
Шаблоны не доведены до ума;
Вывод записей выглядит странно и нет страницы отдельной записи
.

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

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

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

P.s. Посмотрел на предыдущий пост и осознал, что написал хоть и примитивный проект, но всего за сутки с учётом работы. Это радует, значит какие-то знания в голове все-таки отложились.

#Программирование #Python #Django
🔥5👍42👌1
Продолжаю работу над проектом, который начал делать по книге. Давайте немного расскажу вам о нём, чтобы было понятно о чем идет речь.

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

А вот заметки — очень интересная тема. Так вышло, что я все время сохраняю информацию куда попало: в избранное в ТГ, избранное ВК, notion, Яндекс документы, приложения заметок и т.д. Нет единого формата, который было бы удобно использовать на всех устройствах. И так получается, что хватаю ближайшее приложение под рукой и записываю в него. Наверное это не лучшая привычка, и надо учиться правильно и структурированно хранить важную для себя информацию. Вот сейчас я сделаю себя такой сайт, а может потом он еще кому понравится.

По сути на данном этапе у меня уже реализованы:
1. Главная страница с приветствием.
2. Страница с разделами пользователей. Каждый пользователь видит только свои разделы.
3. Страница создания нового раздела
4. Страница раздела, где отображены все записи из данного раздела.
5. Страница создания новой записи
5\6. Страницы регистрации \ авторизации. Пока только по логину и паролю без подтверждения.


Сейчас привёл весь сайт в единое стилевое оформление при помощи библиотеки bootstrap 5. Немного изменил модель записей, чтобы у каждой записи был заголовок.

Следующим шагом создам страницу записи и доработаю процесс регистрации.

#Программирование #Python #Django

P.s. Дописываю пост на счёт Школы21, но он пока еще не готов: получилось очень много букв, примерно пять страниц А4, а я еще не все сказал, что хотел. В общем, думаю еще несколько подходов к нему, и будет готово.
👍6🔥6👏21👌1
Продолжаю работу над своим проектом, который пока имеет кодовое название Impnote.

Добавил Email Backends, который позволяет отправлять письма пользователям и немного изменил процедуру регистрации. Все изменения уже есть на GitHub.

Теперь пользователь должен подтвердить свою учётную запись через ссылку, которая приходит на почту, чтобы активировать аккаунт. До тех пор, пока аккаунт не активирован, залогиниться не получится.

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

Может кто-нибудь в курсе, как это по уму настроить? В общем нужна ваша помощь. Поделитесь ссылками или так расскажите, буду крайне признателен.

P.s. на улице вообще какая-то жуть происходит.

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

#Программирование #Python #Django
🔥5👍31😱1
Каждый раз после длительного отдыха замечаю, что меня прям тянет поработать. Вот чувствую, что начинаю скучать по коду.

Уже несколько дней сижу и пишу небольшой проект-игру. Пока он для меня исключительно учебный: осваиваю различные возможности игрового двжика PyGame. Учусь по видео с канала Clear Code.

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

В общем из нового: научился работать с Tile editor (программа для рисования карт), и уже создал с её помощью небольшой лабиринт. Сделал корректную обработку столкновений персонажа со стенами и физическое проявление всех объектов нарисованных на карте.

Дальше в планах научиться работать с анимацией и сделать взаимодействие между персонажем и объектами.

P.s. позже в ReadMe напишу инструкцию по запуску, а сейчас, если коротко, то необходимо создать venv, клонировать проект и установить PyGame.

#Программирование #PyGame #Python
👍8🔥32
Разработка игры продолжается:

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

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

— Добавил несколько видов оружия и заклинаний для главного персонажа (дальше можно свободно добавлять и удалять по шаблону)

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

P.s. в комментариях справедливо спросили почему я решил заняться игрой, хотя вроде планировал двигаться в сторону backend. На это есть несколько причин:

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

2. Это просто весело. А еще мне нравится, как явно растёт мой уровень разработки. Если посмотреть на первые игры, которые я писал и то, что есть сейчас — это просто небо и земля.

P.s.s. весь код есть на GitHub в ветке Develop, но сейчас не получится его запустить без дополнительного вмешательства в код, позже это исправлю.

#Программирование #Python #PyGame
👍8👾4🔥2👏21
Закончил обучающий проект по созданию игры. Кому интересно опробовать — добро пожаловать на GitHub.

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

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

P.s. небольшое видео с тем, что получилось.

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

#Python #Программирование #PyGame
🔥11👍71👏1
Взялся разбираться с FastApi, решил прикрутить к этому делу сверху Alembic, SQLAlchemy и в качестве БД использовать уже знакомый PostgreSQL.

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

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

У меня уже есть опыт работы с Django, соответственно есть с чем сравнить. Так вот Django мне показался намного проще: почти все и сразу идёт из коробки в рабочем состоянии. Помимо этого Django даёт тебе вполне понятную структуру проекта, которой можно пользоваться, а в FastApi ты сам волен решать, как эта структура будет выстроена.

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

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

#Программирование #Python #FastApi
5🔥4👍3