воскресенье, 23 февраля 2014 г.

О веб-фреймворках

Некоторое время назад мне пришлось освоить Django, при чём его возможности я использовал довольно интенсивно. Кроме того, я немного знаком с веб-фреймворком Dancer, на котором написал небольшое веб-приложение, и с Flask, с которым я немного экспериментировал. Суммируя приобретённый опыт, хочется озвучить несколько мыслей о веб-фреймворках вообще.

Что нравится в веб-фреймворках:

1. Система маршрутизации запросов. Позволяет легко создавать приятно выглядящие URL, легко их переделывать, определять, какой код будет запущен для обработки определённого URL.

2. Средства для доступа к данным запроса и ответа. Тут без комментариев. PHP сам по себе по этому критерию уже можно считать мини-фреймворком, потому что он позволяет избавиться от необходимости ручного парсинга данных протокола CGI и реализует удобный доступ к POST, GET, COOKIE и SESSION. Возможно именно этим и была обусловлена его популярность.

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

Что не нравится в фреймворках (на примере Django):

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

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

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

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

ORM способствует увеличению количества неоптимальных запросов. Чтобы от ORM был толк, нужно не только знать SQL, но и знать тонкости работы ORM, чтобы понимать, какой запрос в каждом конкретном случае будет реально выполнен. Большинство же веб-программистов, использующих ORM, используют его лишь потому, что не понимают/не умеют/не хотят знать SQL. Не все, но большинство, увы.

Критика ORM - вообще обширная тема. Многие считают, что одна из задач ORM заключается в предоставлении удобной абстракции над разными СУБД. Но не многие знают, что для этой задачи существует нечто под названием DBAL. На мой взгляд, если задача абстракции от СУБД действительно встала, то стоит пользоваться DBAL, а не ORM. ORM в Django плох ещё и тем, что ограничен в возможностях и противопоставляет себя гораздо более достойной альтернативе - SQLAlchemy.

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

1. Система маршрутизации запросов.
2. Средства для доступа к данным запроса и ответа.
3. Шаблонизатор без возможности вызова кода приложения.
4. Библиотека валидации данных.
5. При необходимости, если нужно обеспечить работу приложения над несколькими разными СУБД, - DBAL.

воскресенье, 16 февраля 2014 г.

Ещё о манипуляции сознанием

Максим Шевченко и срыв покровов. Междусобойчик телевизионщиков, на котором мастер делится секретами мастерства с подрастающей сменой.


Диванные аналитики, смотреть обязательно!

воскресенье, 9 февраля 2014 г.

Прочитанное за 2013 год

В 2013, как и в 2012 тоже прочитал довольно мало.

Тед Чан

1. Купец и волшебные врата



Содержание:

o Купец и волшебные врата (повесть)
o Вавилонская башня (рассказ)
o Понимай (рассказ)
o Деление на ноль (рассказ)
o История твоей жизни (рассказ)
o 72 буквы (рассказ)
o Эволюция человеческой науки (рассказ)
o Ад — это отсутствие Бога (рассказ)
o Тебе нравится, что ты видишь? (рассказ)

Евгений Лукин

2. С нами Бот



Содержание:

o С нами бот (повесть)
o Мгновение ока (рассказ)
o Чичероне (рассказ)
o Время разбрасывать камни (рассказ)
o 49 секунд (рассказ)
o Как отмазывали ворону (эссе)
o Манифест партии национал-лингвистов (эссе)
o История одной подделки, или Подделка одной истории (эссе)
o Типа декрет об отмене определенности (эссе)
o В защиту логики (эссе)
o Взгляд со второй полки (эссе)
o Враньё, ведущее к правде (эссе)
o Затворите мне темницу (эссе)
o Кризис номер два (эссе)
o Разборка с Маркионовым (эссе)
o Сравнительное естествознание (эссе)

Филип Киндред Дик

3. Солнечная лотерея



Содержание:

o Солнечная лотерея (роман)
o Мир, который построил Джонс (роман)
o Человек, который умел шутить (роман)
o Небесное око (роман)
o Марионетки мироздания (роман)

4. Человек в высоком замке



Содержание:

o Порвалась дней связующая нить (роман)
o Доктор Будущее (роман)
o Молот Вулкана (роман)
o Человек в Высоком замке (роман)

5. Игроки с Титана



Содержание:

o Игроки с Титана (роман)
o Сдвиг времени по-марсиански (роман)
o Симулякры (роман)

6. Стигматы Палмера Элдрича



Содержание:

o Предпоследняя правда (роман)
o Кланы Альфанской луны (роман)
o Стигматы Палмера Элдрича (роман)

Доннела Медоуз

7. Азбука системного мышления



Фред Хойл, Джон Эллиот

8. Андромеда



Содержание:

o Андромеда (роман)

Рэндал Шварц, Том Феникс и брайан д фой

9. Изучаем Perl, 5-е издание



Прочитал и выполнил все уроки. Сверил свои решения с ответами и сделал выводы.

Рэндал Шварц, Брайан Д. Фой и Том Феникс

10. Perl: изучаем глубже, 2-е издание



Прочитал и выполнил все уроки. Сверку начал, но так и не закончил.