Jul 13

Студент-программист ощутил реальный смысл слова “deadline”…
Deadline

Jul 04

LIFO и другие

сатира, аффтар: Скакунов Александр No Comments »

Я полагаю, все знают принцип LIFO - “Last In First Out“, что означает “Последним Пришёл - Первым Ушёл” (т.е. стэк). Но есть и другие варинты:

  • LIFO - это а) босс, б) особо ценный сотрудник, который делает всю работу за полдня, а потом убегает на вторую работу, в) вторая смена, синхронизированная по времени с Америкой.
  • FIFO и LILO - жаворонки и совы соответственно;
  • FILO - самый опасный вид работников: несмотря на то, что находятся на работе дольше всех, практически не выполняют свои обязанности, замещая их сидением в интернете и филоня на курилке.
Jul 02

TortoiseSVN по-русски

dev, ссылки, аффтар: Скакунов Александр No Comments »

Кому надо русифицировать TortoiseSVN, скачайте русский пак (1.72 Мб)

P.S. У кого инсталлятор SVN говорит о том, что надо сначала обновить Windows Installer - просто скачайте обновление (2.6 Мб), а потом ставьте SVN.

Jun 25

Анатомия HTTP запроса

HTTP, аффтар: Родион Быков 3 Comments »

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

Когда вы пробовали создавать первые HTML страницы, вы либо открывали их через двойное нажатие мышкой браузером прямо с диска (файловой системы), либо выкладывали на локальный или удаленный web-сервер и открывали браузером URL. В обоих случаях, результать один и тот-же - вы видете HTML страницу в браузере. Однако, когда вы открываете страницу расположенную на web-сервере через HTTP протокол, неявно передается достаточно много дополнительной информации, а именно заголовки HTTP. Протокол передачи - это договор между сервером и клиентом о допустимых вопросах и ответах. Протокол задокументирован в виде стандарта RFC2616.

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

Клиент: Привет! Я Мозилла-Файрфокс, можно-ли мне файлик products.html с хоста shop.com ?
Сервер: Да, есть у меня такой файлик, он имеет тип text|/html и вот его содержимое.
(Клиент получает целиком файл, смотрит на него и натыкается на тег <img>)
Клиент: Привет! Я Мозилла-Файрфокс, можно ли мне файлик product.jpg с хоста shop.com ?
Сервер: Да, есть у меня такой файлик, он имеет тип image/jpg и вот его содержимое.
(Клиент получает файл и отображает на экране)

И так далее. Что кстати сразу замечу - сервер понятия не имеет что оба раза это был один и тот же клиент. HTTP-протокол называется “stateless” - он не хранит состояние соединения и передачи. Вопрос - ответ - “вiльна каса”.

Вернемся к заголовкам. Они бывают двух типов - заголовки запроса (request) и заголовки ответа (response). Например, вы набираете URL нашего сайта и он открывается. На языке современного протокола HTTP версии 1.1 это выглядит так:

Запрос:

GET / HTTP/1.1
Host: iwannabedeveloper.com
User-Agent: Mozilla/5.0

Ответ сервера:

HTTP/1.1 200 OK
Date: Mon, 25 Jun 2007 13:50:37 GMT
Server: Apache/2.0.46 (CentOS)
Accept-Ranges: bytes
X-Powered-By: PHP/4.3.2
X-Pingback: http://iwannabedeveloper.com/xmlrpc.php
Content-Encoding: gzip
Vary: Accept-Encoding
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8

После заголовков следует содержимое страницы в виде HTML:


< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Выглядит довольно просто. В запросе клиент указывает какой файл он просит сервер вернуть и опознает себя (хоть и не обязан) как Mozilla. Запрос посылается методом GET, и есть еще метод POST, но о нем в следующий раз. В ответ клиент получает информацию о запрашиваемом файле и сам файл. Наиболее значимые заголовки ответа - это Content-Type и Status. Content-Type сообщает клиенту какого типа файл будет передаваться, а в случае HTML, какая кодировка будет использоваться. Список типов файлов (MIME-types) стандартизована и с ней можно ознакомится здесь. Status - (200 ОК) - это стандартизованный код выполнения запроса. Код 200 означает что запрошенный файл был найден и успешно передан клиенту. Например код 404 означает что файл не найден, код 301 - что файл перемещен в другое место, а код 500 - что во время выполнения запроса произошла непоправимая ошибка на сервере. Список кодов описан в упомянутом стандарте RFC2616.

Вот в кратце как работает HTTP протокол. Есть еще много вопросов которые мы разберем позже - например, как передаются формы и файлы других типов или как можно управлять передаваемыми заголовками с помощью PHP.

Jun 25

SVN

dev, аффтар: Скакунов Александр 6 Comments »

Давайте разберёмся, что такое SVN и зачем он нужен.

Я сейчас читаю книжку “Building scalable web sites” (”Создание масштабируемых веб-сайтов“) на примере проекта Flickr.com, так вот в разделе разработки значится три вещи, которые обязательно должны быть в девелоперской команде:

  1. система контроля версий;
  2. одно-шаговая сборка проекта;
  3. баг-тракер (система учета ошибок и фич)

На первом месте стоит система контроля версий. Почему?

Во-первых, она позволяет разработчику быстро исправить свои ошибки. Система хранит все промежуточные “фотографии” проекта и позволяет по ним перемещаться, при необходимости возвращая систему на прежнее, стабильное состояние. Разработка есть творчество, это факт. Иногда такое “натворишь”, что хочется всё отменить и начать сначала. Вот система контроля версий и позволяет это сделать - она хранит все этапы создания ваших приложений.

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

Реализаций таких систем много, есть платные и бесплатные. Самые популярные: CVS (Сontrol Version System) и SVN (Subversion). Мы будем пользоваться последней из них - SVN.

Пара ссылок для ознакомления: описание в Википедии и подробный мануал работы с системой (на доходивом русском).

Итак, есть где-то какой-то SVN, который делает кучу всего полезного. Как им пользоваться?

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

Серверную часть за вас уже проинсталлировали и дали УРЛ вида http://svn.server.com:7575/projects/super_project/ Это всё, что нам пока нужно.

На клиенте нужно поставить специальную программу - Tortoise SVN, которая будет за вас общаться с сервером, автоматизируя кучу ручной работы. Качаем, инсталлируем, ничего сложного. Теперь заходим в ваш document root (ту папку, документы которой показывает ваш броузер, когда вы заходите на http://localhost), создаем папку для нашего проекта, заходим, ПКМ (правый клик мыши), “SVN Checkout” - чтобы стянуть файлы с сервера в эту папку (надо же нам над чем-то работать). Появится диалог, как на рисунке.

1.png

Нажимаем ОК, у вас спросят логин/пароль. Вводим.

2.png

После этого папка начнет наполнятся файлами. Отлично!

31.png

Теперь собственно работа над проектом: вы спокойно правите файлы, и потом решаете опубликовать ваши наработки. Для этого в папке с проектом ПКМ и “SVN Commit“. Сервер получит ваши наработки и сам хитро соединит ваши правки с работой других людей.

После этого вы наверняка захотите получить себе результат этого объединения (это и есть командная работа). Для этого ПКМ и “SVN Update“.