Проектирование

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

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

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

Если каменщик один из кирпичей положит неправильно - здание не рухнет, а из-за пропущенного в программе пробела разбился один из Шатлов.

Проектирование - это центральный этап в создании сайта. Далее мы рассмотрим все этапы проектирования: от принятия архитектурных решений, до прогона на контрольном примере.

Архитектура web-проекта или дизайн второго порядка (дизайн, который не дизайн).

Странные выражения "дизайн второго порядка" и "дизайн, который не дизайн" объясняются во введении.

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

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

Цитата:

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

Слабая связанность - достигается должной степенью абстракций. Отказом от конкретных способов реализации. Т.е. новостную ленту мы можем сделать на Django+MySQL. А вот счетчик посещений реализуем комплексом из C+libevent+NoSQL DB+python+Postgresql.
...
Веб-программисты постепенно объеденили в себе множество профессий: верстальщиков, JS-программистов и флеш-аниматоров, программистов бизнес-логики, DB-администраторов, системных администраторов и местами даже проектировщиков-архитекторов и менеджеров.
...
Идея заложенная в паттерне проектирования MVC - весьма прозрачна. Мы создаем код, который умеет работать с данными (Models/Controllers), мы создаем код который умеет управлять контекстом исполнения (Controller), и пишем код который ответственен за отображение данных (Views/Templates).

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

исходник: http://kerah.redpandaz.net/2011/02/creatio-ex-nihilo.html

 

Анализ задачи на примере романа Льва Толстого "Анна Каренина"

Публикация проекта в интернете

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

  1. Для сайта необходимо выбрать/купить/зарегистрировать имя - домен, например: site.ru
  2. Готовый сайт (он может состоять из одной странички или из сотен файлов и папок + БД) необходимо перенести на хостинг (сервер умеющий отдавать html-странички по запросу браузеров пользователей).
  3. На одном железном сервере может под управление вебсервера (например apache) работать множество сайтов (виртульных хостов) - нужно прописать в один из них путь к папке нашего сайта и указать домен
  4. Чтобы сайт стал видим в интернете необходимо настроить DNS, т.е. связать действительный адрес сервера - IP с человеческим именем - доменом.

Все придется делать в терминале - текстовом (не графическом) окне операционной системы семейства Unix. Хорошо иметь такой у себя под рукой, чтобы не упражняться на удаленном чужом.

Для начала познакомимся с несколькими утилитами - это видеоуроки (классический образец - http://www.youtube.com/watch?v=3I8CTfHhbwE - скринкаст установки убунты).

Практическое занятие. Подготовка к отладке вебпроекта на локальном компьютере.

Здесь собраны все видеоуроки (скринкасты - озвученные ролики, записанные с экрана во время работы), относящиеся к созданию и оживлению вебпроекта.
Для учебы это очень удобно, т.к. ролик можно перемотать назад, поставить на паузу и рассмотреть картинку или десять раз прослушать, что там шепелявит преподаватель.

Контекст: 
Вы работает на своем персональном компьютере с операционной системой Linux (на скринах дистрибутив Ubuntu, но это не принципиально).
В ней установлен вебсервер apache с поддержкой скриптового языка PHP и СУБД MySQL.

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

Термины:
Хост - компьютер, настроенный для работы в качестве вебсервера, обеспечивающий доступ к сайтам через интернет.
Хоститься - располагать свой сайт (файлы и папки) на хосте.
Локальный хост - компьютер имеющий все признаки хоста, кроме доступа сайтов через интернет. Используется разработчиком сайтов для отладки проектов.
Виртуальный хост - часть ресурсов (память, процессор) хоста выделенная вебсервером для отдельного домена (проекта).
Вебсервер - программа-демон запущенная на хосте и обеспечивающая выдачу по запросам браузеров HTML-страниц (вебстарниц). Обычно это apache, но есть и другие.
Сайт - совокупность .вебстраниц связанных гиперссылками, имеющий адрес в интернете - домен. Все страницы одного сайта располагаются на одном домене.
Домен - человеко-понятное имя сайта на естественном языке.
IP-адрес - физический адрес, номер компьютера (хоста) в едином для всего интернета адресном пространстве. Состоит из 4-х групп чисел по 1-3 цифре в каждой, разделенных точками, наример сайт mgimo.ru имеет IP 212.16.16.172, localhost всегда (так принято) 127.0.0.1

Вопросы можно задавать в комментах к этой странице. Но вначале необходимо просмотреть все пронумерованные (1-12) ролики и попытаться повторить описанные там действия. Ролики короткие (от 5 секунд до 5 минут), действия несложные - если все это занятие (в обозначенном выше контексте) займет у вас больше 15 минут, значит вы полный тупица или просто записались не на тот курс :-)


Утилиты командной строки Unix

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

Ролики №№ 1-10:
  1. Открыть терминал
  2. Что в нем?
  3. Подстроим профиль под свой вкус
  4. Просмотр листинга текущей папки (каталога, директории - это синонимы)
  5. Просмотр листинга текущей папки в деталях
  6. Открыть существующую папку
  7. Создать новую папку
  8. Создать новый файл
  9. Очистить экран
10. Универсальный справочник

Midnight Commander

В mc можно работать с помощью одних только клавиш или использовать мышь или и то и другое вперемежку.

Ролик №11: Повторить операции выполненные в пп. 4-8 в mc

Apache и файл hosts

Для того чтобы иметь возможность готовить проект к публикации на своем компе, нужно настроить вебсервер apache.
Еще желательно вместо настоящего DNS прописать в локальном файле /etc/hosts какой-нибудь домен. Поскольку он будет работать только у вас и никто в большом мире его не увидит, это домент может быть каким угодно, хоть mgimo.ru или google.com. Лично я придумал себе зону .xx и все свои проекты отлаживаю в ней.

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

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

<VirtualHost *:80>
    ServerName test.xx
    DocumentRoot /var/www/test
    DirectoryIndex index.php index.html
    AddDefaultCharset UTF8
</VirtualHost>

Настройка локального хоста разжевана в ролике.

Ролик №12: Подготовка к отладке вебпроекта на локальном хосте

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

Видеоуроки по темам: Терминал, Midnight Commander, Apache, Hosts

Смотреть можно прямо с ютуба или скачать на свой компьютер (они довольно тяжелые).

1. Необязательная утилита key-mon (вспомогательный инструмент для визуализации нажатых клавиш - очень помогает при создании видеоуроков - скринкастов)

Скачать в высоком качестве 246Мб

2. Утилита clear - очищает дисплей

Скачать в высоком качестве 148Мб

3. Утилита ps - показывает запущенные процессы (демоны)

Скачать в высоком качестве 452Мб

4. Утилита top - показывает запущенные процессы в динамике. Обновляет информацию каждую секунду. Остановка клавишей Q

Скачать в высоком качестве 332Мб

5. Midnight Commander - файловый менеджер. В нем можно на сервере создать простой web-проект. В mc можно работать с помощью одних только клавиш или использовать мышь или и то и другое вперемежку

Скачать в высоком качестве 390Мб

6. Настройка apache и localhost`а для запуска/прогона на нем тестового проекта.
В этом ролике рассказано и показано, как можно на своем локальном компьютере запустить свой проект. Придется настроить апач точно как на сервере (да это и есть сервер), а вместо DNS, прописать домен в файле /etc/host

Скачать в высоком качестве 700Мб

Управление проектом

Менежмент и инжиниринг разные профессии. Американцы не берут на управленческие позиции людей с инженерным опытом - считают это вредно для руководителя. Отечественная практика прямо противоположна. Да и у них исключения бывают: Линус Бенедикт Торвальдс - пример самый яркий, но не единственный. Похоже для СПО это норма.

Эту статью нужно прочитать, чтобы получить представление о практике управления web-проектом. (взято отсюда: http://www.webmascon.com/topics/business/8a.asp )

 

Цитата с хабра:

 Сам активно работаю над стартапом, могу выделить вещи которые должен четко понимать автор проекта прежде чем искать инвестора и команду для реализации:

— нужно ясно представлять что будет являться продуктом (продукт может быть бесплатным, но должен иметь ценность и интерес для пользователя)

— нужно ясно представлять кто твой «покупатель», что должно побудить его воспользоваться твоим продуктом (идея продукта может быть не уникальной если планируется уникальный способ продвижения который позволит набрать достаточную аудиторию).

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

— и главное на мой взгляд выделить основной функционал и реализовать только его выкинув при этом ко всем чертям всякую универсализацию/реализацию на все случаи жизни (если она не является продуктом конечно). Если действительно что-то еще понадобится вы допилите это в процессе.

И еще, без сильного разработчика способного поднять проект (в одиночку или с командой) имеющего долю в проекте скорее всего не обойдется.

исходник: http://habrahabr.ru/post/111481/#comment_3556836

 

Пример формального ТЗ "сделанного по ГОСТу": http://www.rugost.com/index.php?option=com_content&view=article&id=182:4...

Пример (на англ. яз.): грамотной спецификации

Техническое задание на проектирование портала МГИМО: http://soft4edu.org/?q=ru/book/export/html/11