Уроки по программированию

На этом сайте регулярно выходят уроки и статьи по программированию.
Основные темы: Python, Django, Базы Данных, Java, Компьютерная графика.

Последние статьи

Python

Делаем свой asyncio на основе Python генераторов (Чтобы понять как устроены asyncio и корутины)

Если вы когда нибудь использовали asyncio, то скорее всего слышали что корутины(coroutine), которые являются основой asyncio, сделаны на основе Python генераторов(generator). Но не всем сразу понятно как именно это сделано.

Мы знаем что генераторы в Python - это функции с ключевым словом yield внутри. И они работают как обычные итераторы. Генераторы не возвращают все значения сразу, а работают "лениво" (lazy), возвращая следующее значение только когда нужно, т.е. когда итерация доходит до следующего элемента. А до этого момента генератор стоит на месте и ждет, пока в этот момент работает другой код. Получается, когда мы используем генераторы, у нас есть несколько потоков выполнения?

Давайте в этом вместе разбираться. Попробуем использовать генераторы в вместо async функций в asyncio.  

Читать дальше →
Python

Отладка Python кода в PyCharm (Debugging)

Отладка кода или Debugging - это поиск ошибок в коде и изучение как работает ваш код. 

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

Встроенный в PyCharm отладчик кода(Debugger) это очень удобный инструмент для понятия вашего кода. С помощью него вы сможете понять в каком порядке работает ваш код, какое значение у каждой переменной в каждый момент времени и в какой строчке происходит ошибка. 

И так, поехали.

Читать дальше →
Python

Работа в терминале в Windows, Linux и MacOS (cli, shell, bash, cmd)

Интерфейс командной строки (Command line interface или CLI) - это один из первых интерфейсов взаимодействия с пользоватлем. Но до сих пор очень даже актуальный и востребованный.


CLI - это текстовый способ ввода и вывода информации. То есть вы печатаете команду и видите текстовый результат её работы.


Он зародился в 1960-х годах и унаследовался от телетайпов и печатных машин. Все эти годы активно использовался всеми владельцами компьютеров, пока не появились графические интерфейсы. В середине 1990-х годов графические интерфейсы начали массово завоёвывать рынок и компьютеры стали доступны для большего количества людей. Ведь, согласитесь, перетаскивать файлы, нажимать кнопки мышкой или пальцем и видеть эти кнопки, а так-же фотографии и графики намного интереснее и удобнее, чем вводить команды на клавиатуре и видеть текстовый ответ :)
Но у интерфейса командной строки есть важные преимущества! У него намного лучше отзывчивость, быстрее отображается результат и вы быстрее и более точно сделаете нужное вам действие (если знаете команды, конечно же). Так же у вас больше контроля над программой запущенной в терминале.

Читать дальше →
Python

Делаем простого телеграм бота на Python

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

У вас должен быть установлен Python 3.  Если нет, то вы можете прочитать здесь как это сделать на Windows.

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

Читать дальше →
Python

Как установить Python 3 на Windows?

Чтобы начать писать прграммы на языке Python, нужно обязательно скачать интерпретатор языка Python и все необходимое для выполнения Python-кода. Также вам нужна программа для написания кода(редактор). Я рекомендую для начала Sublime Text

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

В этой статье я расскажу как скачать его на Windows 7 и Windows 10.

 

Читать дальше →
Python

Юнит-тесты на Python на примере функции находящей n-ное число Фибоначчи

Юнит-тестирование (англ. unit testing) — процесс в программировании, позволяющий проверить на корректность отдельные модули программы.

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

В python для написания unit тестов рекомендуется использовать библиотеку unittest. О нем мы и сейчас поговорим. 

Читать дальше →
Компьютерная графика

Как рисовать на Python с помощью библиотеки Pillow?

В питоне есть библиотека PIL(Python Image Library) и его близнец Pillow(расширенная версия PIL). 

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

В этой статье я кратко расскажу как создавать свои изображения и рисовать графики на них.

Читать дальше →
Компьютерная графика

Система частиц или как сделать крутые эффекты

Привет друзья! В этой статье мы поговорим о таких вещах как:

 -Что такое Particle System в Unity

 -Текстуры и материалы для эффектов

 -Создаем свой эффект

 -Где достать бесплатные текстурки

 -И немного советов новичкам :)

Читать дальше →
4556 0 50 Кривцов Артем
Компьютерная графика

3D модели и анимация. Что это и где искать?

В этой статье вы узнаете:

  - Что такое 3D модель?

  - Что такое текстура и карты?

  - Где найти модели бесплатно?

  - Что такое анимация и риг?

  - Как применить анимацию к модели?

  - Как всё это импортировать в Unity

Читать дальше →
4504 0 47 Христофориди Дмитрий Иванович
Компьютерная графика

Примитивный игровой движок на Java

Чтобы понять как работают игровые движки и сами игры, давайте попробуем сами написать простой 2D движок. 

Во всех играх есть основной игровой цикл, который непрерывно повторяется:

1. Чтение устройств ввода (клава, мышь, джойсткик, таймер)
2. Обновление игровых объектов
3. Отрисовка

И этот цикл повторяется пока игра запущена. FPS (frames per second) - сколько кадров в секунду отрисовал игровой движок или сколько циклов сделал данный цикл.

Читать дальше →
Компьютерная графика

Примеры на обработку изображений

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

1. Дивергент

* В этом варианте спрячем зашифрованное изображение в красном канале.
* Нужно будет вытащить только красный канал, чтобы найти ответ.
Читать дальше →
Компьютерная графика

Работа с изображениями в Java: чтение, запись, изменение

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

Того, что здесь будет показано вполне достаточно чтобы выполнить все лабы. 

Итак, поехали. 

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

Читать дальше →
Компьютерная графика

Введение в Unity3D: Создание 2D Игры НЛО

Наконец-то я начну писать про Unity3D. Эта статья будет переводом видео-туториала с официального сайта Unity3D. Вот ссылка на оригинальный туториал: https://unity3d.com/learn/tutorials/s/2d-ufo-tutorial

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

С помощью Unity довольно просто создать замечательные игры! Надеюсь вы будете удивлены и вам он понравится. 

Читать дальше →
Компьютерная графика

Рисуем простой клеточной автомат на Java

Привет, всем! В этой статье покажу как используя ООП, написать простой клеточный автомат на языке Java. 

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

Для лабиринта правила такие:

Читать дальше →
Компьютерная графика

Рисование и формы в Java, Python и JS

Привет всем!

Сегодня расскажу про то, как рисовать и создавать формы используя разные языки как Java, Python и JS. Эта статья поможет вам понять только основы и покажет несколько примеров. Все остальное придется вам изучить самим. 

Мы напишем программу, в которую можно будет добавлять разные геометрические фигуры и их анимировать. 
Рисование и формы в Js, Python, JS

Читать дальше →
Веб-программирование

Мини соц сеть на Django. Часть 2.

В предыдущей статье мы создали основу для соцсети, где есть регистрация пользователей, заполнение дополнительных данных о пользователе и страница профиля.

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

Начнем с модели Поста.

Читать дальше →
Веб-программирование

Мини соц сеть на Django. Часть 1.

Эта статья предполагает, что вы уже прочитали все предыдущие статьи про Django и освоили все, что там написано. 

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

Какой функционал будет в нашей мини соцсети:

 

Читать дальше →
Веб-программирование

Модели и База данных в Django (Django 4.2)

В Django используется так называемый ORM чтобы хранить данные в БД. ORM - это такая штука, которая облегчает жизнь разработчика, избавляя его от написания нудных SQL запросов. А вместо них предлагает работать с обычными классами, объектами и методами. 

Хочешь создать запись в таблице БД? Создай один объект и вызови метода save() И все готово! Классно, да?

Читать дальше →
Веб-программирование

Регистрация пользователей в Django

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

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

Читать дальше →
Веб-программирование

Расширение или наследование шаблоново в Django

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

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

Читать дальше →
Веб-программирование

Статические файлы (js, css, картинки) в Django

Каждый из вас, кто уже попробовал перевести свой сайт на Django, скорее всего столкнулись с проблемой с файлами CSS и JS. Вы наверное пробовали их засунуть в папку templates или куда-нибудь еще, но все равно не сработало. И ваш сайт загрустил без стилей и вместе с ним вы тоже. ☹️

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

Файлы которые, не меняются пока работает ваш сайт или веб-приложение, называется статическими(statiс files).

Читать дальше →
Веб-программирование

Основы Django фреймворка (Django 4.2)

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

Расскажу о трех важных вещах в Django:

1. urls - пути на сайта
2. views - обработчики или контроллеры(вьюшки)
3. templates - шаблоны(html - файлы)
 

Читать дальше →
Веб-программирование

Создаем веб-приложение на Django 4.2

В этой статье я расскажу как создать проект на Django 4.2 и запустить его. 

Вот такие шаги нужно выполнить чтобы создать сайт на Django.

1. Установить Python и pip
2. Установить virtualenv и создать виртуально окружение
3. Активировать виртуальное окружение
4. Установить Django
5. Создать пустой django проект
6. Добавить что-нибудь в проект
7. И запустить его

Пройдемся по каждому шагу. 

Читать дальше →
Веб-программирование

Разбор задач со 2-й лабы.

Привет, всем. 👋
Вы молодцы! Многие решили задачу на python. Конечно, они были очень очень простыми, но все равно, вы молодцы. 

Здесь я сделаю разбор этих задач и покажу как их решить с помощью python.

Задача 1409. Два бандита

Условия: http://acm.timus.ru/problem.aspx?space=1&num=1409

Читать дальше →
Веб-программирование

Как эффективно подготовиться к олимпиадам по программированию?

Михаил Рубинчик, менеджер Образовательные программы СКБ Контур, тренер команд УрФУ по спортивному программированию

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

Читать дальше →
Веб-программирование

Делаем игру с Роботом на jQuery, HTML, CSS

Предыдущую классную работу все выполнили? Мне скинули всего 3-4 человека 😏. 

Ребята, спрашивайте если что-то не понятно! На этой неделе меня не будет, так что вам придется самим поработать. Эта работа небольшая. Будем делать маленького робота. 🤖 А чем он будет заниматься, я по ходу щас придумаю.

Здесь нам обязательно пригодится jQuery, которую можно скачать здесь (compressed production). Откройте ваш любимый редактор кода. Или скачайте: Brackets, Sublime Text, PyCharm

Приступим..

Читать дальше →
Веб-программирование

Классная работа №2: Диско!

Привет, друзья! 

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

Итак, поехали! 

Инспектор кода

Читать дальше →
Java

Автоматизация тестов!

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

Автоматизированные тесты, или коротко просто тесты, это специальные программы, которые будут проверять правильность работы ваших классов и методов, запуская их и проверяю их результат. 

Все современные среды для программирования как Intellij IDEA, PyCharm позволяют в удобном виде отображать результаты тестов. 

И так, напишем свой первый тест. 

Читать дальше →

Командная работа в Git

Прежде чем читать эту статью, вам нужно прочитать статью Работа с Git, что это такое - Git?

Командная работа в git

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

В этой статье я расскажу как это делается.

Читать дальше →

Работа с Git, что это такое - Git?

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

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

Читать дальше →
Java

Анимация и двойная буферизация при рисовании

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

Итак, приступим. 

Создадим основной класс AnimationApp

Читать дальше →

Два способа разработки программного обеспечения, или Одна ночь из жизни программиста Миши

«Две тропинки идут рядом: путь жизни и путь смерти… Люди не идут никаким путём, ни путём жизни, ни путем смерти. Вихрь носит их, как солому.»

Густав Майринк, «Голем»

 

В офисе было тихо и темно, лишь стук клавиш и редкие щелчки мыши нарушали едва различимое жужжание кулера, да широкоформатный монитор освещал измождённое лицо regular developer'а Миши. Сторонний наблюдатель мог бы подумать, что идёт обычная рабочая ночь с пятницы на субботу. Так оно и было для тысяч других разработчиков по всему миру, но только не для Миши. Поставив очередную пустую бутылку под стол, он внезапно почувствовал, что граница, отделяющая его от гордого титула «senior developer», не так уж и далека.

Читать дальше →
Java

Работа с формами и рисование(график)

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

Как пример возьмем функцию sin(x). В приложение добавим возможность указывать цвет графика и название графика, чтобы было немного прикольно. 

И так приступим...

Читать дальше →
Java

Как я решил задачу "Покер"

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

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

Начало
Первая задача это генерация наборов карт. В стандартной колоде всего 52 карты, 4 масти(suit) и 13 достоинств(rank). У каждой карты есть ее достоинство и масть. Сначала я решил создать класс, который будет представлять одну карту и у которого будут два свойства: Достоинство и Масть. 

Читать дальше →
Java

Рекурсия

Рекурсия - это когда что-то находится внутри себя или является частью самого себя. 

Например вот:

Рекурсия в Java

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

 

Читать дальше →

Первая история из книги "Голос Монстра"

  Давным-давно, задолго до того, как появился этот город с дорогами и поезда с машинами, тут была зеленая долина, — повело рассказ чудовище. — Все холмы покрывали леса, а вдоль каждой дороги росли деревья. Они нависали над речными потоками и защищали дома, потому что в те времена уже были дома из камня и земли… Это было королевство.
— Что? — удивился Конор, оглядывая темный сад. — Где?
Чудовище с любопытством склонило голову на бок.
—  Ты об этом не слышал?

Читать дальше →

Отладка(debugging) кода в PyCharm и Intellij IDEA

Debugging - (рус. Отладка) процесс нахождения и исправления ошибок в программе. Есть специальные инструменты для программистов для помощи при отладке кода. Например все среды разработки от JetBrains, такие как PyCharm, Intellij IDEA, Android Studio, имеют замечательный и мощный отладчик прямо из коробки. 

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

Хотите узнать больше?  

Читать дальше →
Java

Как писать в стиле ООП?

В этой статье кратко расскажу как нужно писать в стиле ООП, зачем он нужен и в чем его особенность. 

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

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

Читать дальше →
Java

Ввод и вывод данных с Консоли

В Java есть понятия "Стандартный ввод" (Systen.in) и "Стандартный вывод" (Systen.out). По умолчанию стандартный ввод и вывод связаны с Консолью, откуда запускается программа. Поэтому если мы хотим вывести данные в консоль, мы пишем в стандартный вывод(System.out) :

System.out.println("Я пишу в стандартный вывод");

Также чтобы чтобы считать данные с консоли нужно считать данные из стандартного ввода (System.in). Но, объект System.in сам по себе позволяет считывать данные только по байтам и это очень неудобно.

System.out.read();

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

Читать дальше →
Java

Каты на каждый день

Что такое Каты? 

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

 

Каты на каждый день

 

В программировании также можно использовать каты, чтобы держать себя всегда в форме. Для этого нужно определенные задачи решать каждый день (желательно утром). При этом с каждым разом можно решать по разному, улучшая скорость решения, выполнения или чистоту кода. Самое главное: каждый раз писать код с нуля. 

Читать дальше →
Java

Классы: Холодильник и Еда

Задача: Написать класс Холодильник, в который можно класть Еду, проверять заполненность и т.п. 

Решение:
Создаем класс Food представляющий Еду

public class Food {
    public String name;
    public int size = 10;

    public Food(String name, int size){
        this.name = name;
        this.size = size;
    }
}

 

Читать дальше →