Python и разработка простого веб-приложения, использующего технологии машинного обучения
Содержание:
- Deep Anomaly Detection
- Расширяем возможности шаблона в Django
- Начальная настройка приложения в Django
- Создание новой страницы «О нас» в Django
- Шаг 4 — Настройка виртуальной среды
- #5: Создание микроблога с помощью Flask
- Минусы использования Python в веб-разработке
- Пишем тесты для Django приложений
- #3: Создание калькулятора
- Как пользоваться ADB run
- Свойство text библиотеки Beautiful Soup
- Создаем и запускаем сайт при помощи Flask и Heroku.
- Как начать создание сайта на Python Django?
- Работа с Git и GitHub
- Почему Python?
- #1: Автоматизация нудных дел
- #11: Бросаем вызов!
- Ресурсы для младших школьников
- Поиск сайта для скрапинга
- Cookies
- Пишем программу 3D-моделирования в 500 строках кода
- Введение
Deep Anomaly Detection
Из песочницы
Детекция аномалий с помощью методов глубокого обучения
Выявление аномалий (или выбросов) в данных — задача, интересующая ученых и инженеров из разных областей науки и технологий. Хотя выявлением аномалий (объектов, подозрительно не похожих на основной массив данных) занимаются уже давно и первые алгоритмы были разработаны еще в 60-ых годах прошлого столетия, в этой области остается много неразрешенных вопросов и проблем, с которыми сталкиваются люди в таких сферах, как консалтинг, банковский скоринг, защита информации, финансовые операции и здравоохранение.В связи с бурным развитием алгоритмов глубоко обучения за последние несколько лет было предложено много современных подходов к решению данной проблемы для различных видов исследуемых данных, будь то изображения, записи с камер видеонаблюдений, табличные данные (о финансовых операциях) и др.
Расширяем возможности шаблона в Django
Главная сила шаблонов в их способности расширяться. Если задуматься, то на большинстве сайтов есть содержимое, которое повторяется на каждой странице (заголовки, футеры и так далее). Для разработчиков было бы здорово иметь одно установленное место для кода заголовка, которое бы передавалось по наследству каждому шаблону.
Это возможно! Создадим HTML-файл , у которого будет заголовок с ссылками на две созданные нами страницы. Название для файла можно выбрать любое, в данной случае просто стало традицией. Теперь закрываем веб-сервер и затем создаем новый файл.
Shell
(pages) $ touch templates/base.html
1 | (pages)$touchtemplatesbase.html |
В Django, шаблонный язык для добавления ссылок и базовых логических операций минимален. Ознакомиться со встроенным списком шаблонных тегов можно в . Шаблонные теги оформляются так , где «something» сам по себе является тегом. Вы даже можете создать собственные шаблонные теги.
Для добавления URL-ссылок в проект мы можем использовать , который присваивает себе имя URL паттерна в качестве аргумента. Помните, как мы добавляли опциональные URL названия двум адресам в ? Это было сделано именно по этой причине. Тег использует эти названия для автоматического создания ссылок.
URL путь для нашей домашней страницы был назван , поэтому для настройки ссылки к ней мы будем использовать: .
Python
<!— templates/base.html —>
<header>
<a href=»{% url ‘home’ %}»>Home</a> | <a href=»{% url ‘about’ %}»>About</a>
</header>
{% block content %}
{% endblock content %}
1 |
<!—templatesbase.html—> <header> <ahref=»{% url ‘home’ %}»>Home<a>|<ahref=»{% url ‘about’ %}»>About<a> <header> {%block content%} {%endblock content%} |
Внизу мы добавляем тег-блок под названием . При наследовании, блоки могут быть переписаны дочерними шаблонами. Закрывающему тегу можно дать название — просто напишите . Это может стать хорошей подсказкой при ориентировке в крупных файлах шаблонов.
Python
<!— templates/home.html —>
{% extends ‘base.html’ %}
{% block content %}
<h1>Homepage</h1>
{% endblock content %}
1 |
<!—templateshome.html—> {%extends’base.html’%} {%block content%} <h1>Homepage<h1> {%endblock content%} |
и
Python
<!— templates/about.html —>
{% extends ‘base.html’ %}
{% block content %}
<h1>About page</h1>
{% endblock content %}
1 |
<!—templatesabout.html—> {%extends’base.html’%} {%block content%} <h1>Aboutpage<h1> {%endblock content%} |
Запускаем сервер с и открываем страницы и вновь. Как видите, на обоих страницах появились заголовки.
Неплохо, правда?
Домашняя страница с заголовком
Страница «About» с заголовком
С шаблонами можно осуществить множество операций. Обычно создается файл а затем в проекте добавляются дополнительные шаблоны которые расширяют базовый файл.
Начальная настройка приложения в Django
Начальная настройка приложения Django включает следующие этапы:
- создание директории для кода;
- установка Django в новом ;
- создание нового проекта в Django;
- создание нового приложения ;
- обновление файла .
Будучи в командной строке, убедитесь, что вы сейчас не находитесь в действующем виртуальном окружении. Если перед знаком доллара () есть текст в скобках, значит, окружение активно. Выполните команду и деактивируйте его.
Создаем новую директорию под названием на рабочем столе или в любом другом месте. Главное, чтобы папка была легко доступной и не пересекалась с другими проектами.
В заново открытой командной строке наберите следующее:
Shell
$ cd ~/Desktop
$ mkdir pages && cd pages
$ pipenv install django==3.0.*
$ pipenv shell
(pages) $ django-admin startproject pages_project .
(pages) $ python manage.py startapp pages
1 |
$cd~Desktop $mkdirpages&&cdpages $pipenv install django==3.0.* $pipenv shell (pages)$django-admin startproject pages_project. (pages)$python manage.pystartapp pages |
Откройте в вашем текстовом редакторе файл . В самом низу списка проектов добавьте приложение :
Python
# pages_project/settings.py
INSTALLED_APPS =
1 |
# pages_project/settings.py INSTALLED_APPS= ‘django.contrib.admin’, ‘django.contrib.auth’, ‘django.contrib.contenttypes’, ‘django.contrib.sessions’, ‘django.contrib.messages’, ‘django.contrib.staticfiles’, ‘pages.apps.PagesConfig’,# новое |
Запускаем локальный сервер при помощи команды :
Shell
(pages) $ python manage.py runserver
1 | (pages)$python manage.pyrunserver |
Затем переходим на .
Приветственная страница Django
Создание новой страницы «О нас» в Django
Процесс добавления страницы «О нас» очень похож на то, что мы только что сделали. Создадим новый файл шаблона, новое представление, а также новый адрес URL.
Закрываем веб-сервер через комбинацию и создаем новый шаблон под названием .
Shell
(pages) $ touch templates/about.html
1 | (pages)$touchtemplatesabout.html |
Затем добавляем короткий HTML заголовок.
Python
<!— templates/about.html —>
<h1>About page</h1>
1 |
<!—templatesabout.html—> <h1>About page<h1> |
Создаем новое представление для страницы.
Python
# pages/views.py
from django.views.generic import TemplateView
class HomePageView(TemplateView):
template_name = ‘home.html’
class AboutPageView(TemplateView): # новое
template_name = ‘about.html’
1 |
# pages/views.py fromdjango.views.generic importTemplateView classHomePageView(TemplateView) template_name=’home.html’ classAboutPageView(TemplateView)# новое template_name=’about.html’ |
Далее связываем его с URL в .
Python
# pages/urls.py
from django.urls import path
from .views import HomePageView, AboutPageView # новое
urlpatterns = [
path(‘about/’, AboutPageView.as_view(), name=’about’), # новое
path(», HomePageView.as_view(), name=’home’),
]
1 |
# pages/urls.py fromdjango.urls importpath from.views importHomePageView,AboutPageView# новое urlpatterns= path(‘about/’,AboutPageView.as_view(),name=’about’),# новое path(»,HomePageView.as_view(),name=’home’), |
Запускаем сервер при помощи .
В браузере переходим по адресу . У вас должна появиться новая страница — «About page».
Страница «О Нас»
Шаг 4 — Настройка виртуальной среды
Вы, должно быть думаете, что это за виртуальная среда такая, да? Я тоже так думал. Но не переживайте, я всё объясню. Виртуальная среда поможет нам отделить нашу среду разработки и установки пакетов от остальной системы. То есть, всё, что мы установим в виртуальной среде, не повлияет на реальную систему. Очень удобно, ага. Давайте же настроим её.
- Установим , прописав в терминале .
2. Перейдите на тот же уровень, где находится ваша корневая папка и напишите , чтобы создать виртуальную среду (посмотрите на иерархию ниже, если вы ещё не разобрались, в моем случае корневая папка — ).
3. Для активации виртуальной среды, выполните , а для деактивации просто напишите .
Виртуальная среда создана
Когда мы войдем в виртуальную среду, увидим что-то подобное
#5: Создание микроблога с помощью Flask
Похоже, что у каждого сегодня есть блог, и нет ничего плохого в том, чтобы иметь собственный уютный хаб онлайн. С развитием и Instagram, микроблоги стали чрезвычайно популярными. В этом проекте Мигеля Гринерга, вы научитесь создавать собственный микроблог.
Он называется «Мега-руководство Flask», и однозначно соответствует названию. Проработав 23 главы, вы получите глубокое представление о веб-фреймворке Flask. К концу проекта, вы сможете создать полностью работающее веб приложение.
Вам не нужно знать что-либо о Flask, чтобы приступить к делу, так что это идеально для тех, у кого чешутся руки, чтобы приступить к веб разработке.
Минусы использования Python в веб-разработке
Несмотря на все преимущества,
перечисленные выше, Python имеет также
некоторые серьезные ограничения. Давайте
коротко по ним пройдемся.
- Ограничения скорости. Поскольку Python это интерпретируемый язык программирования, программы на нем работают медленнее, чем написанные на компилируемых языках.
- Проблемы с потоками. Global Interpreter Lock (GIL) допускает выполнение только одного потока в каждый отдельный момент. Это создает заметные ограничения для использования языка Python.
- Простота. Хотя простота, на первый взгляд, это преимущество, она также является и недостатком. У программистов, привыкших к простому синтаксису, часто возникают трудности при переходе на более сложные языки, такие как Java.
Пишем тесты для Django приложений
Наконец-то мы добрались до тестов
Хотя в приложениях это является базовым концептом, очень важно, чтобы добавление тестов в Django вошло у вас в привычку. Цитируя Джейкоба Каплан-Мосса, одного из создателей Django: «Непротестированный код можно считать сломанным«
Написание тестов важно, так как это автоматизирует процесс подтверждения того, что код работает должным образом. В приложении, подобном этому, вы сами можете увидеть, что домашняя страница и страница с описанием проекта на месте и содержат все необходимые данные
Однако с ростом нашего проекта, будет увеличиваться и количество веб-страниц, поэтому идея самостоятельной проверки сотен или даже тысяч страниц не представляется возможной.
Кроме того, когда мы делаем определенные изменения в коде — добавляем новый функционал, изменяем существующий, удаляем неиспользуемые элементы сайта — мы должны быть уверены в том, что все оставшиеся аспекты сайта по-прежнему работают должным образом. Автоматические тесты действуют таким образом, что компьютер каждый раз будет проверять работоспособность проекта, отталкиваясь от единожды написанного ранее правильного кода. К счастью, в Django есть встроенные инструменты для написания и запуска тестов.
Python
# pages/tests.py
from django.test import SimpleTestCase
class SimpleTests(SimpleTestCase):
def test_home_page_status_code(self):
response = self.client.get(‘/’)
self.assertEqual(response.status_code, 200)
def test_about_page_status_code(self):
response = self.client.get(‘/about/’)
self.assertEqual(response.status_code, 200)
1 |
# pages/tests.py fromdjango.testimportSimpleTestCase classSimpleTests(SimpleTestCase) deftest_home_page_status_code(self) response=self.client.get(‘/’) self.assertEqual(response.status_code,200) deftest_about_page_status_code(self) response=self.client.get(‘/about/’) self.assertEqual(response.status_code,200) |
База данных нам пока не нужна, поэтому сейчас можно использовать простой . При наличии базы данных нужно обратиться к . Затем проводится проверка, в результате которой у каждой страницы должен быть код состояния 200 — это успешный ответ на стандартный HTTP запрос. Таким образом, становится понятно, что запрашиваемая страница действительно существует, но при этом не раскрывается ее содержимое.
Для запуска теста остановите веб-сервер, использовав комбинацию , а затем наберите в командной строке :
Shell
(pages) $ python manage.py test
Creating test database for alias ‘default’…
System check identified no issues (0 silenced).
..
———————————————————————-
Ran 2 tests in 0.014s
OK
Destroying test database for alias ‘default’…
1 |
(pages)$python manage.pytest Creating testdatabase foralias’default’… System check identified no issues(silenced). .. ———————————————————————- Ran2tests in0.014s Destroying testdatabase foralias’default’… |
Все успешно! В будущем мы будем использовать более сложные тесты, особенно это важно при работе с базами данных
#3: Создание калькулятора
Этот простой проект – отличный шлюз в мире GUI программирования. Создание бекенд сервисов – это важная часть развертывания, но может появиться необходимость во фронтенде, которую стоит учитывать
Создание приложений, которыми пользователи могут легко пользоваться – это первостепенная важность
Если вам интересен UX\UI дизайн, то это руководство вам понравится. Вы будете работать с модулем tkinter, стандартным пакетом графического пользовательского интерфейса, который поставляется вместе с Python.
Модуль tkinter – это обертка вокруг Tcl/Tk, комбинация скриптового языка Tcl и расширения фреймворка графического пользовательского интерфейса Tk. Если у вас есть установленный Python, то у вас уже есть готовый к использованию tkinter. Вам нужно сделать простой вызов перед началом:
Python
<span class=»kn»>from</span> <span class=»nn»>tkinter</span> <span class=»k»>import</span> <span class=»o»>*</span>
1 | <span class=»kn»>from<span><span class=»nn»>tkinter<span><span class=»k»>import<span><span class=»o»>*<span> |
После проведения установки, вы можете начать работу с постройкой своего первого GUI калькулятора в Python.
Попрактикуйтесь в использовании модуля tkinter и наблюдайте за тем, как ваше виденье материализуется на экране. После того, как вы окрепнете, вы можете начать работать с другими GUI инструментами Python. Ознакомьтесь к официальной документацией GUI программирования в Python для дополнительной информации.
Как пользоваться ADB run
Свойство text библиотеки Beautiful Soup
Возвращаемая разметка — это не совсем то, что нужно. Для получения только данных — цитат в этом случае — можно использовать свойство из библиотеки Beautiful Soup
Обратите внимание на код, где происходит перебор всех полученных данных с выводом только нужного содержимого
Копировать
Это и дает вывод, который требовался с самого начала.
Для поиска и вывода всех авторов можно использовать следующий код. Работаем по тому же принципу — сперва нужно вручную изучить страницу
Можно обратить внимание на то, что каждый автор заключен в тег с классом. Дальше используем функцию и сохраняем результат в переменной
Также стоит поменять цикл, чтобы перебирать сразу и цитаты, и авторов.
Копировать
Таким образом теперь есть и цитаты, и их авторы.
Наконец, добавим код получения всех тегов для каждой цитаты. Здесь уже немного сложнее, потому что сперва нужно получить каждый внешний блок каждой коллекции тегов. Если этот первый шаг не выполнить, то теги можно будет получить, но ассоциировать их с конкретной цитатой — нет.
Когда блок получен, можно опускаться ниже с помощью функции для полученного подмножества. А уже дальше потребуется добавить внутренний цикл для завершения процесса.
Копировать
Этот код даст такой результат. Круто, не так ли?
Создаем и запускаем сайт при помощи Flask и Heroku.
Jan 30, 2019·8 min read
Предыдущие части: Часть 1, Часть 2, Часть 3
Время от времени появляются новые языки программирования, а с ними и крупные сообщества пользователей. Python существует уже довольно долго, поэтому я могу уверенно сказать, что это не просто язык, а целая религия. Хотите напечатать “hello world”? Легко. Создать приложение для работы с базой данных? Пожалуйста. Создать приложение на основе GUI? Ага. Визуализация? И это есть. Сложные алгоритмы машинного обучения? Python поможет и в этом. В любой задаче программирования Python может вам помочь. Однако в одной сфере Python явно недооценивают. Это back-end разработка. Но вскоре и это изменится. А мы же сделаем первый шаг, чтобы побольше об этом узнать.
Как начать создание сайта на Python Django?
Всего несколько простых шагов и ваш компьютер будет готов к созданию сайтов с использованием Python и Django.
Шаг 1. Установка интерпретатора Python. Его можно скачать с сайта python.org. Если вы не знаете, какая версия Python вам нужна, то скачивайте последнюю для вашей версии операционной системы и следуйте инструкции по установке на указанном сайте.
Шаг 2. Установка редактора. В принципе, можно ограничиться и простым текстовым редактором, но для удобства лучше установить IDE (интегрированную среду разработки). Я рекомендую использовать PyCharm Community Edition. Это бесплатная версия PyCharm с широкими возможностями для программирования на языке Python. Есть версии для Windows, Linux и macOS.
Шаг 3. Начинаем создание сайта на Django. Для новичков на сайте djangoproject.com есть понятное руководство для знакомства и старта разработки с использованием данного фреймворка. Документация на английском, так что знание языка крайне желательно. Да и вовсе обязательно, если хотите добиться успехов в этой сфере.
Ну что же, старт разработки на Python Django не так уж и сложен, но и нет так уж и прост… Главное поставить цель и идти к ней. Для этого читайте следующий пост серии о разработке сайта на Django и Python – Установка Django и создание проекта.
Удачи в разработке сайтов!
Работа с Git и GitHub
Пришло время зафиксировать изменения с git и загрузить данные на GitHub. Начнем с инициализации нашей директории.
Shell
(pages) $ git init
1 | (pages)$git init |
Используйте для просмотра изменений в коде, а затем для их добавления. Теперь мы можем добавить первый коммит.
Shell
(pages) $ git status
(pages) $ git add -A
(pages) $ git commit -m ‘initial commit’
1 |
(pages)$git status (pages)$git add-A (pages)$git commit-m’initial commit’ |
На GitHub создаем новое хранилище. Назовем его . Не забудьте отметить тип «Private», а затем нажмите кнопку «Create repository».
На следующей страницы пролистайте вниз до фразы «…or push an existing repository from the command line». Скопируйте текст и вставьте две команды в терминале.
Все должно выглядеть, так как указано ниже, только вместо в качестве имени пользователя будет указано ваше никнейм на GitHub.
Shell
(pages) $ git remote add origin https://github.com/wsvincent/pages-app.git
(pages) $ git push -u origin master
1 |
(pages)$git remote add origin httpsgithub.comwsvincentpages-app.git (pages)$git push-uorigin master |
Почему Python?
Python является одним из наиболее динамично развивающихся языков программирования в мире благодаря своей простоте и универсальности. Он достаточно прост в изучении и понимании синтаксиса. При этом достаточно мощный по своим возможностям. На нем можно писать как простенькие скрипты, так и сложные приложения и даже некоторые виды игр. Еще одним плюсом языка Python является его кросс-платформенность, т.е. написанный код будет работать на любой операционной системе и на устройствах различного типа – от компьютера до смартфона. Главное – установить интерпретатор языка Python на устройство в нужной версии и можно выполнять код. Если вы новичок в программировании и разработке программного обеспечения, то изучение языка Python будет отличным вариантом для применения получаемых знаний на практике, а мощь и универсальность языка позволит легко переключаться между проектами различного назначения без необходимости кардинального переобучения.
#1: Автоматизация нудных дел
Это ресурс по «практическому программированию для начинающих». Как и говорится в заголовке, с этой книгой вы можете узнать, как автоматизировать скучные процессы, такие как обновление электронных таблиц, или переименовывать файлы на компьютере. Это отличная отправная точка для тех, кто уже освоил основы Python.
У вас будет шанс попрактиковаться в том, что вы уже выучили на данный момент, создавая словари, проводя скрейпинг сайтов, работая с файлами и создавая объекты и классы. Практические приложения, встречающиеся в этой книге дадут вам реальное представление о том, что вы можете делать незамедлительно.
#11: Бросаем вызов!
Если вы не уверены в том, что готовы окунаться в некоторые крупные проекты, упомянутые ранее, при этом мелкие вас не очень интересуют, вы можете думать: а чем еще можно заняться?
Кодерские задачки могут помочь вам попрактиковаться в навыках работы в Python и получить поверхностное представление обо всем спектре вещей, которые вы можете делать в Python,
Проще говоря: вам предоставят проблему, и вам нужно найти решение, в котором используется Python.
У вас будет шанс разработать решения, которые имеют смысл для вас, при этом у вас есть возможность углубиться в язык Python при помощи подсказок. Так вы получите представление о том, какие модули вам нужно импортировать, чтобы решить проблему.
Кодовые челенджы – это хороший способ освоить наибольшее количество библиотек, методов и фреймворков. Вы гарантированно найдете что-нибудь, что зацепит ваш интерес, и захотите уделять этому свободное время. Вы можете вернуться к этому списку и найти то, что зажгло в вас интерес, когда вы использовали это в одном из челенджей.
Чтобы начать, попробуйте одно из следующих, чтобы оценить свои силы:
- Python Challenge. Более 20 доступных уровней. Создавайте простые скрипты в Python, чтобы решить уровень. По интернету есть разбросанные подсказки, но старайтесь искать решение самостоятельно!
- PyBites Code Challenge. Включает в себя 50 задач, и количество растет! Эти задачи направлены на то, чтобы вы научились работать в Python для создания приложений, которые будут решать определенные проблемы.
Если вы предпочитаете программировать в таких задачах самостоятельно вместо пошаговых инструкций, то не будет лишним иметь под рукой вспомогательный ресурс.
Книга Python Tricks – это отличный источник информации, который поможет при работе с задачами. В книге рассматриваются малоизвестные части Python, на основании которых и формируются задачи.
Ресурсы для младших школьников
- Build a «Pypet». Изучите основы программирования на Python, создавая тамагочи в стиле «Pypet» от Татьяны Тилоски.
- Guido van Robot Учебный инструмент, в котором учащиеся пишут простые программы с использованием языка, похожего на Python, для управления моделируемым роботом. Проект включает план обучения, так как прошел испытания в средней школе Йорктауна.
- Python for Kids от Джейсона Р. Бриггса. Книга с примерами кода и головоломками.
- PythonTurtle обучающая среда на Python, подходящая для начинающих и детей. Ресурс ориентирован в преимущественно на детей, но, как известно, успешно используется взрослыми.
- Young Coders tutorial Это полный текст учебника, который ежегодно преподается в PyCon (Северная Америка), с примерами и упражнениями. Это учебное пособие дает базовые навыки и выстраивает работу со сложной логикой и играми. Подходит детям от 10 лет и начинающим взрослым.
- свободно могут использовать для домашнего обучения школьники и студенты старше 13 лет. Исходя из нашего опыта, обучающиеся этого возраста усваивают материал так же быстро, как и взрослые новички в программировании.
Поиск сайта для скрапинга
Для знакомства с процессом скрапинга можно воспользоваться сайтом https://quotes.toscrape.com/, который, похоже, был создан для этих целей.
Из него можно было бы создать, например, хранилище имен авторов, тегов или самих цитат. Но как это сделать? Сперва нужно изучить исходный код страницы. Это те данные, которые возвращаются в ответ на запрос. В современных браузерах этот код можно посмотреть, кликнув правой кнопкой на странице и нажав «Просмотр кода страницы».
На экране будет выведена сырая HTML-разметка страница. Например, такая:
На этом примере можно увидеть, что разметка включает массу на первый взгляд перемешенных данных. Задача веб-скрапинга — получение доступа к тем частям страницы, которые нужны. Многие разработчики используют для этого, но библиотека Beautiful Soup в Python — более дружелюбный способ извлечения необходимой информации.
Cookies
Cookies (печеньки) — небольшой фрагмент данных, отправленный веб-сервером и сохраняемый на компьютере пользователя. Браузер всякий раз при попытке открыть страницу соответствующего сайта пересылает этот фрагмент данных веб-серверу в составе HTTP-запроса.
Собственно, cookies — хороший способ сохранить некоторые данные о пользователях.
Отправка печенек осуществляется заголовком Set-cookie:
#!/usr/bin/env python3 print("Set-cookie: name=value; expires=Wed May 18 03:33:20 2033; path=/cgi-bin/; httponly") print("Content-type: text/html\n") print("Cookies!!!")
Например, если сохранить этот скрипт в /cgi-bin/cookie.py и зайти на localhost:8000/cgi-bin/cookie.py, то вам поставится печенька с именем name и значением value. Срок её хранения до мая 2033 года, отправляется повторно на сервер только к скриптам, которые расположены в /cgi-bin/, и передается только http-запросами (её нельзя получить из браузера пользователя с помощью javascript).
Все эти параметры не являются обязательными. Можно написать так:
#!/usr/bin/env python3 print("Set-cookie: name=value") print("Content-type: text/html\n") print("Cookies!!!")
Пишем программу 3D-моделирования в 500 строках кода
Перевод
Введение
Люди от природы креативны. Мы постоянно проектируем и создаём новые, полезные и интересные вещи. Сегодня мы пишем ПО, помогающее процессу проектирования и творчества. Программы САПР (Computer-aided design, CAD) позволяют творцам проектировать здания, мосты, графику видеоигр, чудовищ для фильмов, объектов для 3D-печати и множество других вещей перед созданием физической версии проекта.
По своей сути, инструменты CAD являются способом абстрагирования трёхмерного проекта в нечто, что можно просматривать и редактировать на двухмерном экране. Чтобы справляться со своей задачей, инструменты CAD должны обеспечивать три основных элемента функциональности. Во-первых, они должны иметь структуру данных, описывающую проектируемый объект: это то, как компьютер понимает создаваемый пользователем трёхмерный мир. Во-вторых, инструмент CAD должен обеспечивать отображение проекта на экране пользователя. Пользователь проектирует физический объект с тремя измерениями, но экран компьютера имеет всего два измерения. Инструмент CAD должен моделировать способ восприятия нами объектов и отрисовывать их на экране так, чтобы пользователь смог понять все три измерения объекта. В-третьих, CAD должен предоставлять возможность взаимодействия с проектируемым объектом. Пользователь должен быть способен дополнять или модифицировать проект, чтобы создать нужный результат. Кроме того, все инструменты должны иметь возможность сохранения и загрузки проектов с диска, чтобы пользователи могли сотрудничать, обмениваться своей работой и сохранять её.