Dec 05

Оказывается, есть у iwannabedeveloper.com есть проект-побратим авторства Google - называется Google Code for Educators. Сайт на английском, но там уже можно почитать интересные и доступно написанные статьи:

Nov 23

Может показатся, что другого бесплатного сервера БД кроме MySQL на текущий момент не существует - слишком уж он распространен. Однако это не совсем верно. Даже не говоря о таких замечательных open source СУБД как Postgre, на текущий момент разработчик может сводобно получить и использовать такие “большие” системы как MS SQL Server, IBM DB2 и даже Oracle.

Самый легкий для понимания и установки, а также довольно распространенный в наших широтах, MS SQL Server 2005 Express Edition доступен на сайте Microsoft для свободного скачивания и использования. Чтобы познакомится поближе с этим зверем делаем так:

  1. Скачиваем MS SQL Server 2005 Express Edition Download
  2. Скачиваем архиполезную тулзу MS SQL Server Management Studio Express
  3. Скачиваем сопутствующие вещи (ссылки см. там же) - например .NET Framework 2.0
  4. Устанавливаем это хозяство на своей машине

Очень сложно, верно ? Отож.

С помощью Server Management Studio можно создавать и удалять базы и таблицы, просматривать данные в таблицах MSSQL, делать запросы, создавать процедуры и триггеры, управлять аккаунтами пользователя. С помощью Server Configuration Manager настраиваются сетевые соединения и прочее.

После того как базовые функции освоены, можно попробовать использовать MSSQL в связке с PHP, Coldfusion, ASP.net или чем угодно для создания веб-сайтов или desktop-приложений. Как это делать - зависит от конктретного языка, в любом случае это не сложнее чем с MySQL. Есть правда несколько ловушек куда можно угодить, делая первые шаги:

  • Супер-пользователь в SQL Server зовется не “root” а “sa”
  • Протокол TCP/IP по умолчанию отключен, посему соединится с сервером из скрипта может не получится. Чтобы активировать протокол нужно воспользоваться тулзой MS SQL Server Configuration Manager: в разделе Protocols найти TCP/IP и его свойствах на вкладке протокол поставить Yes рядом с позицией Enabled.
    SQL Server Configuration Manager
  • В отличие от прошлых версий и от MySQL, в MS SQL Server 2005 Express Edition порт не установлен жестко в конкретное значение. Поэтому если вы зовете MSSQL по стандартном порту 1433 - он вас не услышит. Узнать какой порт используется в конкретном случае можно той же тулзой MS SQL Server Configuration Manager, поле TCP Dynamic Ports на закладке IP Addresses в Свойствах (Properties) протокола TCP/IP.
  • По умолчанию, в SQL Server отключена “родная” аутентификация, и включена только Windows Authentification. Проще говоря, просто по логин-паролю в сервер не зайдешь. Чтобы включить SQL Server Authentication, зайдите тулзой MS SQL Server Management Studio Express используя Windows-аутентификацию, клацнув правой клавишей на сервере вызовите его Свойства (Properties), в закладке Security позиция Server Authentification - выставить радиобатон в позицию “SQL Server and Windows Authentication mode”
  • Лучший способ принести или унести БД целиком - сделать Detach базы данных в одном месте, и сделать Attach на другом сервере - дешево и сердито. База данных в сервере MS SQL - это один файл с расширением .mdf + файл лога .ldf (но он не требуется при переносе)
  • Если вы создали таблицу под одним пользователем (например находясь в Management Studio Express под пользователем sa), а пытаетесь работать с таблицей из PHP под другим пользователем, то таблицу вы скорее всего не увидите, поскольку они созданы в разных схемах. Под sa эта схема скорее всего называется ‘dbo’, а у пользователя - совпадает с его логином. Так что dbo.Accounts и vasya.Accounts - это две разные таблицы. Чтобы перекинуть таблицы из одной схемы в другую можно сделать одну хитрость. Запустить скрипт приведенный ниже:

    SELECT 'ALTER SCHEMA dbo TRANSFER ' + TABLE_SCHEMA + '.' + TABLE_NAME
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = 'vasya'
    

    Затем скопипастить получившиеся строки в окно запроса и выполнить их все. Таблицы перейдут из схемы vasya в схему dbo.

Microsoft прилагает массу усилий в конкурентной борьбе за долю MS SQL Server на рынке. Интернет щедро заполнен публикациями о том как делать те или иные вещи с помощью MS SQL, а сам сервер и сопутствующее ПО достаточно дружественны к неопытному пользователю.

Ссылки по теме:
IBM DB2 Trial Downloads
Oracle Database 10g Express Edition

Oct 13

Представьте что вы - редколлегия студенческого журнала. Денег на издание журнала “в формате мертвого дерева” само собой у вас нет, поэтому вы мудро решаете издаваться в web, допустим на “шаровом” сервере предоставленном университетом. Вы отсканировали архив статей и набили новые статьи в файлы. Теперь надо как то разместить их в web. Можно создать весь сайт на чистом HTML, тупо верстая каждую страницу… Но именно для того, чтобы не заниматься тупой работой, создавая однотипные файлы Statya1.html, Statya2.html и так еще 348 раз, можно отмучаться один раз, создав файл Statya.php и с помощью него отображать все 350 статей вашего студенческого журнала. Но все-же чего то не хватает. Как же скрипт Statya.php узнает, какую именно статью пожелал увидеть пользователь на экране своего браузера ?

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

Параметры передаваемые в строке запроса

Допустим вы хотите создать страницу на которой выводится 350 ссылок на все статьи вашего сайта. Каждая из ссылок должна иметь такой вид:
Statya.php?id=1 Statya.php?id=2 и так далее. Такая запись позволяет передать на сервер не только название запрашиваемого скрипта, но и идентификатор статьи которую хотите вывести на экран. Если ваши статьи идентифицируются не числовым ключем, а текстовым, то можно например передавать такой параметр: Statya.php?nazvanie=Peredacha+dannih+v+HTTP+zaprose. Пробелы в таком случае будут заменены символом +, а также будут заменены другие служебные символы. Это требование накладывается стандартом RFC1738 который определяет вид строки запроса (URI). Так как параметры очевидно являются частью URI - то требования стандарта распространяются и на них. Если надо передать больше чем 1 параметр, строка запроса выглядит так: Statya.php?id=230&category=10 - то есть параметры разделяются символом амперсанда (&).

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

GET /Statya.php?id=23 HTTP/1.1
Host: student-journal.com

То есть, браузер, используя метод протокола HTTP GET, “попросит” сервер выдать (или выполнить) Statya.php и все параметры будут переданы тут-же вместе с именем запрошенного файла. Достоинство метода очевидно - можно легко сгенерировать ссылку нужного вида и передать серверу на обработку. Недостаток этого метода в том, что таким образом нельзя передать данные большого объема или содержащие символы не из таблицы ASCII и двоичную информацию (файлы). Хотя стандарт RFC2616 не накладывает ограничения длину заголовка запроса вообще и на длину строки запроса (URI) в частности, такие ограничения накладываются браузерами, web-серверами и прокси-серверами. Обычно не стоит делать длину запроса больше 2000 символов.

Посылка форм

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

<form action="search.php">
<input type="text" name="search"/> <input type="submit" value="Search"/>
</form>

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

GET /search.php?search=blabla HTTP/1.1
Host: student-journal.com

Получается, мы опять сталкиваемся с ограничением на длину вводимых данных. Как-же например передать на сервер текст статьи из 20-30 страниц ? Надо воспользоваться методом POST. При запросе GET не используется тело запроса, а только заголовок. При запросе POST можно передать данные в теле запроса. Для этого изменим форму:

<form method="post" action="search.php">
<input type="text" name="search"/> <input type="submit" value="Search"/>
</form>

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

POST /search.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
Host: student-journal.com

search=blabla

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

Ссылки по теме

Стандарт на посылку форм в HTTP запросах
Записка Microsoft о максимальной длине строки запроса (URI)
Опыты по определению максимальной длины строки запроса

Sep 22

Поддержим Настю!

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

Одна из нас - Анастасия Стёпина - участвует в в конкурсе “Мисс Интернет”. Давайте же её поддержим!

Голосовать тут.

Анастасия Стёпина

Aug 15

Собеседование - важный этап устройства на (новую и интересную) работу.

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

Если вам интересно, на какие вопросы надо знать при устройстве на работу в Yahoo!, почитайте тут. Есть очень интересные.