Освоєння Ajax: Частина 4. Використання DOM для створення Web-додатків з швидкою реакцією, AJAX, Інтернет-технології, статті

Вододіл між програмістами (які працюють з серверними
додатками) і Web-програмістами (затраченими свого часу на HTML, CSS і
JavaScript) існує вже давно. Однак Document Object Model (DOM)
ліквідувала прірву і зробила роботу з XML на сервері і з HTML на клієнтському
комп'ютері можливою і ефективною. У цій статті Брет МакЛафлін знайомить з
Document Object Model, пояснює її використання в Web-сторінках і починає
досліджувати її використання з JavaScript.


Як і багато Web-програмісти ви, можливо, працювали з HTML. З HTML
програмісти починають роботу над Web-сторінкою; HTML часто є останньою
річчю, яку вони роблять по завершенні роботи з додатком або сайтом,
вилизуючи до останнього біта розміщення, колір або стиль. І, таким же звичайним,
як і використання HTML, є неправильне уявлення про те, що на
насправді відбувається з HTML, коли він вступає в браузер для візуалізації на
екрані. Перед тим як я заглиблюючись у те, що, на вашу думку, може відбуватися
(І чому це, ймовірно, не правильно), я хочу прояснити інформацію про процеси,
залучених до проектування та обслуговування Web-сторінок:



  1. Хтось (звичайно, ви!) Створює HTML в текстовому редакторі або IDE.
  2. Потім ви завантажуєте HTML на Web-сервер, наприклад, Apache HTTPD, і робите
    його загальнодоступним по Інтернет або інтранет.
  3. Користувач запитує вашу Web-сторінку в браузері, наприклад Firefox або
    Safari.
  4. Браузер користувача виконує запит HTML на ваш Web-сервер.
  5. Браузер візуалізує сторінку, отриману від сервера, в графічному і
    текстовому вигляді; користувачі дивляться і активують Web-сторінку.

Хоча все це загальновідомо, речі швидко стають цікавими. Фактично,
величезна кількість "речей", що відбуваються між кроками 4 і 5, і є
предметом розгляду даної статті. Термін "річ" дійсно застосуємо,
оскільки більшість програмістів ніколи не замислюються про те, що
дійсно відбувається з їх розміченим документом, коли браузер користувача
запитує його для відображення:



Виявляється, відповіддю на всі ці питання є Document Object Model.
Тому давайте без зайвої суєти заглибимося в DOM.


Web-програмісти і розмітка


Для більшості програмістів їх робота закінчується там, де починається
Web-браузер. Іншими словами, закинувши файл в каталог на вашому Web-сервер, ви
зазвичай робите позначку "зроблено" і (з надією) ніколи про нього більше не
згадуєте
! Це відмінна мета, коли потрібно написати ясні,
добре-організовані сторінки, нема нічого поганого в очікуванні того, що ваша
розмітка відображається належним чином у всіх браузерах, з різними версіями
CSS і JavaScript.


Проблема полягає в тому, що такий підхід обмежує розуміння
програмістом того, що насправді відбувається в браузері. Більш важливо те, що
він обмежує вашу здатність оновлювати, змінювати і реструктуризувати
Web-сторінку динамічно, використовуючи JavaScript на стороні клієнта. Позбудемося
цього обмеження і навіть підвищимо інтерактивність ваших Web-сайтів.


Що робить програміст


Як типовий Web-програміст, ви, можливо, запускаєте ваш текстовий редактор
і IDE і починаєте вводити HTML, CSS або навіть JavaScript. Легко думати про всі
цих тегах, селекторах і атрибутах тільки як про невеликі завдання, які ви
вирішуєте для того, щоб сайт виглядав належним чином. Але ви повинні розширити
ваші уявлення за ці рамки – уявіть, що ви організуєте ваше
вміст. Не турбуйтеся, я обіцяю, що не перетворю це в лекцію про красу
розмітки або про те, що ви повинні зрозуміти справжній потенціал вашої Web-сторінки
або що-небудь ще метафізичне. Що ви дійсно повинні розуміти точно –
це яка ваша роль в Web-розробці.


Коли справа стосується зовнішнього вигляду сторінки, ви, в кращому випадку, можете
тільки давати поради. Якщо ви надаєте таблицю стилів CSS, користувач
може перевизначити ваші варіанти стилю. Коли ви надаєте розмір шрифту,
браузер користувача може змінити ці розміри для людей з проблемами зору
або масштабувати їх для великих моніторів (з однаково великими дозволами).
Навіть вибрані вами кольори і гарнітури шрифтів залежать від монітора користувача та
від встановлених на його системі шрифтів. Звичайно, здорово зробити зі сторінки
шедевр, але на все це ви маєте не саме великий вплив.


Єдине, що знаходиться під вашим абсолютним контролем – структура
Web-сторінки. Ваша розмітка є незмінною, і користувачі не можуть
зіпсувати її; їх браузери можуть тільки витягти її з вашого Web-сервера і
відобразити (хоча і в стилі, більше відповідному смаку користувача, а не
вашому). Але організація цієї сторінки (чи знаходиться слово в даному параграфі,
або в іншому теге div) Повністю залежить від вас. Коли справа
стосується дійсного зміни вашої сторінки (що й роблять більшість
Ajax-додатків), ви працюєте зі структурою сторінки. Хоча цікаво змінити
колір фрагмента тексту, набагато більш вражаючим є додавання тексту або
цілої секції на існуючу статтю. Не важливо, як користувач змінює стиль
цієї секції – ви працюєте з організацією самої сторінки.


Що робить розмітка


Як тільки ви усвідомлюєте, що ваша розмітка, насправді, тільки структура
сторінки, то зможете поглянути на неї по-іншому. Замість того, щоб вважати,
що тег h1 робить текст великим, жирним і чорним, думайте про нього,
як про заголовку. Як його бачить користувач (чи використовує він ваш CSS, свій
власний або комбінацію обох) – це другорядне питання. Тобто,
уявляйте розмітку як засіб забезпечення даного рівня структури;
p вказує, що текст знаходиться в параграфі, img
відзначає зображення, div розділяє сторінку на секції і т.д.


Ви повинні також чітко розуміти, що стиль і поведінку (обробники подій і
JavaScript) застосовуються до цієї структури після її створення. Розмітка
вже має бути створена перед тим, як з нею можна працювати і накладати стиль.
Тобто, так само як ви можете зберігати CSS в окремому файлі від вашого HTML,
структура вашої розмітки відокремлена від її стилю, форматування і поведінки. Хоча
ви напевне можете змінювати стиль елемента або фрагмент тексту з JavaScript,
цікавішим є дійсне зміна структури, на якій
заснована ваша розмітка.


Як тільки ви будете пам'ятати, що ваша розмітка забезпечує тільки структуру
або "скелет" для вашої сторінки, ви будете "на коні". І більше того, ви побачите,
як браузер бере цю текстову структуру і перетворює її в щось набагато
більш цікаве – набір об'єктів, кожен з яких може змінюватися,
додаватися або видалятися.










Деякі додаткові думки про
розмітці


Редагування звичайного тексту: Правильно чи ні?
Звичайні
текстові файли ідеальні для зберігання розмітки, але це не так для
редагування цієї розмітки. Цілком прийнятно використовувати такі IDE як
Macromedia DreamWeaver (або трохи більше нав'язливу Microsoft ® FrontPage ®) для
роботи з розміткою Web-сторінки. Ці інтегровані середовища часто пропонують
скорочені команди і допоміжну інформацію при створенні Web-сторінок,
особливо при використанні CSS і JavaScript, що знаходяться в зовнішніх файлах
щодо файлу розмітки сторінки. Багато диваки до цих пір вважають за краще
старий добрий Notepad або vi (зізнаюся, я один з них), і це теж відмінний
варіант. У будь-якому випадку кінцевий результат – це текстовий файл з розміткою.


Текст по мережі: Хороша річ
Як уже згадувалося, текст – це
відмінний носій інформації для документів, наприклад, HTML або CSS,
переданих по мережі сотні і тисячі разів. Коли я кажу, що браузеру не просто
представляти текст, це означає саме перетворення тексту в візуальну і
графічну сторінку, яка відображається користувачеві. Не має значення, як
браузер насправді витягнув сторінку з Web-сервера, у даному випадку текст все
ще є кращим
варіантом.


Переваги текстової
розмітки


Перед обговоренням Web-браузера варто розглянути питання, чому звичайний текст
є абсолютно кращим вибором для зберігання вашого HTML-коду
(Додаткова інформація наведена в розділі "Деякі додаткові думки про розмітку"). Враховуйте
наступні часті завдання браузера:



Складність полягає не в кодуванні цих завдань; досить просто виконати
кожну з них. Складність у браузері, що виконує ці завдання. Якщо розмітка
зберігається в тексті і, наприклад, ви хочете вирівняти текст по центру
(text-align: center) Елемента p в класі
center-text, Як це зробити?



Ці важкі питання є причиною, чому так мало людей займається в
Нині програмуванням браузерів (тим, хто робить це, потрібно сказати
щире "Спасибі!").


Очевидно, звичайний текст – це не дуже хороший спосіб зберігання HTML для
браузера, навіть якщо текст і є хорошим рішенням для початкового
отримання розмітки сторінки. Додайте до цього здатність JavaScript
міняти структуру сторінки, і справа дійсно стане мудрованим. Повинен
Чи браузер записати змінену структуру на диск? Як він може слідкувати за
поточним станом документа?


Очевидно, текст не є відповіддю. Його важко модифіковані, важко
застосовувати стилі і поведінка, і, в кінцевому підсумку, він служить слабким відображенням
динамічної природи сучасних Web-сторінок.


Переходимо до дерев


Вирішенням цієї проблеми (принаймні, рішенням, обраним в сучасних
Web-браузерах) є використання деревовидної структури для представлення
HTML. Погляньте на



<html>
<head>
<title>Trees, trees, everywhere</title>
</head>
<body>
<h1>Trees, trees, everywhere</h1>
<p> Welcome to a <em> really </ em> boring page. </ p>
<div>
Come again soon.
<img src="http://www.ishodniki.ru/"come-again.gif" />
</div>
</body>
</html>


Браузер приймає її і перетворює в деревоподібну структуру, зображену
на малюнку 1.


Малюнок 1. Лістинг 1 у вигляді
дерева



Я зробив кілька дуже невеликих спрощень для цілей цієї статті.
Експерти в DOM або XML знають, що прогалини можуть мати вплив на уявлення
тексту в документі і на розбиття деревовидної структури в Web-браузері. Облік
цього дає мало, а тільки заплутує справу, тому якщо ви знаєте про вплив
прогалин – відмінно, якщо ні, продовжуйте читання і не турбуйтеся про це.
Коли це стане важливо, ви завжди знайдете все необхідне.


На відміну від дійсної структури дерева, першою річчю, яку ви можете
помітити, є те, що все в дереві починається з самого зовнішнього,
всеосяжного елемента HTML, яким є html. Згідно
метафорі дерева, він називається коренем. Тому, навіть хоча він знаходиться
внизу дерева, завжди починайте пошук і аналіз дерев з нього. Якщо вам зручніше,
можете перевернути все з ніг на голову, хоча це трошки не вписується в
метафору дерева.


З кореня відходять лінії, що показують взаємини між різними частинами
розмітки. Елементи head і body є нащадками
кореневого елемента html; title – Це нащадок
head, А текст "Trees, trees, everywhere" – нащадок
title. Подібним же чином організовано і все дерево.


Кілька додаткових
термінів


Продовжуючи метафору дерева, кажуть, що head і body
є гілками html. Вони є гілками тому, що в
свою чергу мають власних нащадків. Якщо ви пройдете до решт дерева, то,
швидше за все, потрапите в текстові елементи, наприклад "Trees, trees, everywhere"
і "really". Вони часто називаються листям, Оскільки не мають власних
нащадків. Вам не потрібно запам'ятовувати всі ці поняття; часто легше просто
представити деревоподібну структуру, коли ви намагаєтеся зрозуміти, що означає
конкретний термін.


Значення об'єктів


Тепер, коли у вас на озброєнні є деяка основна термінологія, час
сконцентруватися на цих маленьких прямокутнички з назвами елемента і
текстом всередині (малюнку 1, І такі елементи, як кутові дужки і
escape-послідовності (наприклад, використання < для
< і > для >) Більше не
стають проблемою. Це робить роботу браузера, принаймні, після аналізу
отриманої HTML-сторінки, набагато легше. Операція визначення того, елемент це
або атрибут, і наступного визначення того, що робити з цим типом об'єктів,
є простою.


Використовуючи об'єкти, Web-браузер може змінити властивості цих об'єктів.
Наприклад, кожен об'єкт має батька і список нащадків. Тому додавання
нового дочірнього елемента або тексту представляє собою просте додавання
нового нащадка в список нащадків елемента. Ці об'єкти також мають властивість
style, Тому динамічна зміна стилю елемента або ділянки
тексту стає тривіальним завданням. Наприклад, ви можете змінити висоту
елемента div, Використовуючи наступний JavaScript-код:





someDiv.style.height = "300px";


Іншими словами, Web-браузер може дуже просто змінити зовнішній вигляд і
структуру дерева, використовуючи подібні властивості об'єкта. Порівняйте це з тими
складними типами дій, які браузер повинен був робити, якби сторінка
внутрішньо представлялася у вигляді тексту (кожна зміна властивості або структури
вимагало б від браузера перезапису статичного файлу, його повторного
синтаксичного аналізу та повторного відображення на екрані). Все це стає
можливим з об'єктами.


Тепер витратьте час на відкриття будь-якого вашого HTML-документа і на
схематичне подання його у вигляді дерева. Хоча це може здатися
незвичайним проханням (особливо у статті, яка містить дуже малий об'єм коду), ви
повинні познайомитися із структурою цих дерев, якщо хочете вміти керувати
ними.


Під час роботи ви, можливо, виявите деякі дивності. Наприклад,
уявіть наступні ситуації:



Познайомившись з такого роду проблемами, ви набагато краще зрозумієте наступні
кілька розділів.


Строгість іноді корисна


Якщо ви пробували виконати тільки що згадане мною вправу, то,
можливо, виявили деякі потенційні проблеми при перегляді вашої
розмітки у вигляді дерева (якщо ви вправу не робили, просто повірте мені на
слово!). Фактично, ви виявите деякі з них в малюнку 1, Починаючи з
способу розбиття елемента p. Якби ви запитали звичайного
Web-розробника, яке текстове вміст елемента p, Самим
поширеним відповіддю була б "Welcome to a really boring Web page". Якщо ви
порівняйте це з лістинг 1).
Більше того, виділений текст "really" не є дочірнім елементом
p; Він – нащадок em, Який є нащадком p.


Для вас дуже важливо розуміти цю концепцію. Навіть якщо текст "really" буде
відображатися разом з рештою тексту елемента p, Він все одно
є прямим нащадком елемента em. Він має відмінне від
іншого тексту p форматування і може бути переміщений
незалежно від решти тексту.


Щоб допомогти закріпити все це у вашій голові, спробуйте намалювати схему
HTML з лістингів 3,
перевіряючи збереження тексту з його коректним предком (не дивлячись на те, як цей
текст може в кінцевому підсумку відображатися на екрані).


Лістинг 2. Розмітка з трохи хитрою вкладеністю
елементів






<html>
<head>
<title>This is a little tricky</title>
</head>
<body>
<h1> Pay <u> close </ u> attention, OK? </ h1>
<div>
<p> This p really isn "t <em> necessary </ em>, but it makes the
<span id="bold-text"> structure <i> and </ i> the organization </ span>
of the page easier to keep up with.</p>
</div>
</body>
</html>


Лістинг 3. Ще більш
хитра вкладеність елементів






<html>
<head>
<title>Trickier nesting, still</title>
</head>
<body>
<div id="main-body">
<div id="contents">
<table>
<tr> <th> Steps </ th> <th> Process </ th> </ tr>
<tr> <td> 1 </ td> <td> Figure out the <em> root element </ em>. </ td> </ tr>
<tr> <td> 2 </ td> <td> Deal with the <span id="code"> head </ span> first,
as it”s usually easy.</td></tr>
<tr> <td> 3 </ td> <td> Work through the <span id="code"> body </ span>.
Just <em> take your time </ em>. </ Td> </ tr>
</table>
</div>
<div id="closing">
This link is <em> not </ em> active, but if it were, the answers
to this <a href="answers.html"> <img src="http://www.ishodniki.ru/"exercise.gif" /> </ a> would
be there. But <em>do the exercise anyway!</em>
</div>
</div>
</body>
</html>


Ви знайдете відповіді на ці вправи в GIF-файлах tricky-solution.gif (малюнок
3
) В кінці цієї статті. Не заглядайте в них, поки не витратите час на
самостійну роботу. Це допоможе зрозуміти, як суворі правила застосовуються до
структурі дерева, і дійсно допоможе вам на шляху до освоєння HTML і його
деревоподібної структури.


Як щодо атрибутів?


Чи стикалися ви з якими-небудь проблемами, коли визначали, що робити з
атрибутами? Як я вже говорив, атрибути мають свій власний тип об'єкта, але
атрибут насправді не є нащадком елемента, в якому з'являється –
вкладені елементи і текст не перебувають на такому ж "рівні" атрибуту, і ви
побачите, що відповіді на вправи з лістингів 3 не показують атрибути.


Атрибути дійсно зберігаються в об'єктній моделі, яку використовує
браузер, але вони мають трохи інше положення. Кожен елемент містить список
доступних йому атрибутів окремо від списку дочірніх об'єктів. Тобто,
елемент div може мати список, що містить один атрибут з ім'ям
"Id" і інший з ім'ям "class".


Пам'ятайте, що атрибути елемента повинні мати унікальні імена; іншими
словами, елемент не може мати два атрибути "id" або два атрибути "class". Це
дозволяє зберігати список і звертатися до нього дуже просто. Як ви побачите в
наступній статті, ви можете просто викликати метод, наприклад,
getAttribute(“id”), Для отримання значення атрибуту за його імені.
Ви можете також додавати атрибути та встановлювати (або скидати) значення
існуючих атрибутів за допомогою дзвінків подібних методів.


Також варто підкреслити, що унікальність імен атрибутів робить цей список
відмінним від списку дочірніх об'єктів. Елемент p міг би мати
кілька елементів em, Тобто, список дочірніх об'єктів може
містити дубльовані елементи. Хоча список нащадків і список атрибутів
працюють аналогічно, один може мати дублікати (нащадок об'єкта), а другий –
немає (атрибути елемента). Нарешті, тільки елементи можуть мати атрибути, тобто,
текстові об'єкти не мають списків, що приєднуються до них для зберігання
атрибутів.


Недбалий HTML


Перш ніж йти далі, варто витратити деякий час ще на одну тему,
пов'язану з перетворенням браузером розміток в деревоподібне уявлення, –
як браузер справляється з розміткою, яка не є граматично правильною.
Граматично правильний – Це термін, використовуваний в основному в XML. Він
означає два основних правила:



Уважно вивчіть два ці правила. Вони не тільки спрощують структуру
документа, але і усувають двозначність. Потрібно спочатку зробити шрифт жирним,
або похилим? Або навпаки? Якщо цей порядок і двозначність здається не
дуже важливим, пам'ятайте, що CSS дозволяє правилами перевизначати інші
правила, тобто, якщо, наприклад, шрифт тексту всередині елементів b
був відмінним від шрифту всередині елементів i, То порядок застосування
форматування стає дуже важливим. Отже, граматична
правильність HTML-сторінки починає грати важливу роль.


У тих випадках, коли браузер отримує документ, який не є граматично
правильним, він просто робить найкраще, на що здатний. Отримана деревоподібна
структура є в кращому випадку апроксимацією того, що мав намір передати
автор оригінальної сторінки, і в гіршому – щось зовсім інше. Якщо ви
колись завантажували вашу сторінку в браузер і бачили щось абсолютно
несподіване, то значить ви бачили результат безуспішних спроб браузера
здогадатися про структуру вашого документа. Природно, виправити це досить
просто: перевірте, чи є ваш документ граматично правильним! Якщо ви
сумніваєтеся в чомусь при написанні таких стандартизованих HTML-сторінок,
зверніться за допомогою до розділу "Ресурси“).


Хоча більш важливо, що DOM визначає типи і властивості об'єктів – це дозволяє
браузерам представляти розмітку (в наступній статті цієї серії будуть розглянуті
особливості використання DOM з вашого JavaScript і Ajax-коду).


Об'єкт document


Перше, і найголовніше, вам необхідно отримати доступ до самої об'єктної
моделі. Це дивно просто; для використання вбудованої змінної
document в будь-якому місці JavaScript-коду, що виконується на вашій
Web-сторінці, ви можете написати наступне:





var domTree = document;


Звичайно, цей код абсолютно даремний сам по собі, але він демонструє те,
що кожен браузер робить об'єкт document доступним для
JavaScript-коду, і цей об'єкт представляє повне дерево розмітки (


var domTree = document;
var phoneNumberElement = document.getElementById ("phone");
var phoneNumber = phoneNumberElement.value;


Тут немає типів; JavaScript управляє створенням змінних і призначенням їм
коректних типів при необхідності. В результаті використовувати DOM в JavaScript
стає досить тривіальним завданням (в наступній статті буде
розглядатися DOM по відношенню до XML і трохи більш складні ситуації).


На закінчення


Зараз я збираюся вас трохи заінтригувати. Очевидно, що ця стаття не
була повністю вичерпним оглядом DOM; фактично ця стаття лише трохи
більше, ніж введення в DOM. DOM більше розказаного мною сьогодні!


Наступна стаття даної серії розвиває ці ідеї і детальніше розглядає
використання DOM в JavaScript для оновлення Web-сторінок, динамічного
зміни HTML і створення більш інтерактивних програм для ваших
користувачів. Я повернуся до DOM знову в наступних статтях при розгляді
використання XML у ваших Ajax-запитах. Тому освоюйте DOM; це головна
частина Ajax-додатків.


Було б досить просто зайнятися зараз DOM більш інтенсивно, детально
розглядаючи переміщення в DOM-дереві, отримання значень елементів і тексту,
ітерацію за списком вузлів і т.д., але це, можливо, залишило б у вас відчуття,
що DOM має відношення до коду, а це не так.


Перед наступною статтею спробуйте подумати про структури дерева і попрацюйте
з деякими вашими власними HTML-сторінками, подивіться, як Web-браузер
перетворює ці HTML в деревоподібне подання розмітки. Також продумайте
структуру DOM-дерева і пропрацюйте спеціальні випадки, розглянуті в цій
статті: атрибути, текст, що має суміш елементів, елементи, не мають
текстового вмісту (наприклад, елемент img).


Якщо ви чітко засвоїте ці концепції і потім вивчіть синтаксис JavaScript і
DOM (у наступній статті), це значно полегшить створення інтерактивних
Web-додатків з швидкою реакцією.


І не забувайте, тут наведено відповіді для лістингів 3 – Вони теж включені в код
прикладів!


Рисунок 2. Відповідь для лістингу 2


Малюнок 3. Відповідь для лістингу
3





Ресурси

Навчитися



  • Домашня сторінка DOM на World Wide Web
    Consortium: Відвідайте відправною пункт для всього, що стосується DOM.


  • DOM Level
    3 Core Specification: Визначення основ Document Object Model, від доступних
    типів і властивостей до використання DOM в різних мовах
    програмування.


  • Ajax для
    Java-розробників: Створення динамічних Java-додатків
    “, Philip McCarthy
    (DeveloperWorks, вересень 2005): Погляньте на Ajax з боку сервера та мови
    Java, познайомтеся з принципово новим підходом до створення динамічних
    Web-додатків.


  • Виклик
    SOAP Web-служб за допомогою AJAX, Частина 1: Створення клієнта Web-служб

    (DeveloperWorks, жовтень 2005) – досить просунута стаття з інтеграції Ajax
    з існуючими web-службами, заснованими на SOAP. Дізнатися, як реалізувати
    заснованих на Web-браузері клієнтів SOAP Web-служб, використовуючи шаблон
    проектування Ajax.


  • Коди
    стану HTTP: Огляд повного списку кодів стану з W3C.


  • Head Rush
    Ajax", Елізабет Фрімен, Ерік Фрімен і Брет МакЛафлін (O" Reilly Media,
    Inc., Березень 2006): Завантажує ідеї з цієї статті в вашу голову в стилі "Вперед
    головою ".


  • Java і XML“,
    друга редакція, Брет Маклафлін (Серпень 2001, O "Reilly Media, Inc.): Обговорення
    автором перетворень XHTML і XML.


  • JavaScript:
    Повне керівництво", Девід Фленаган (Листопад 2001, O" Reilly Media, Inc.):
    Вичерпні інструкції по роботі з JavaScript, динамічними Web-сторінками, а
    в підготовлюваному виданні додані дві голови з Ajax.


  • Вперед
    головою в HTML з CSS & XHTML", Елізабет і Ерік Фрімен (Грудень
    2005, O "Reilly Media, Inc.): Досконально джерело інформації для вивчення
    XHTML, CSS та їх об'єднання.


  • Зона Web Architecture на
    developerWorks: Удоскональте ваші навички в Web-будівництві.


  • : Слідкуйте за брифінгами для
    технічних розробників.


  • Отримати продукти і
    технології


    Обговорити




    Про автора











    Брет Маклафлін працює з комп'ютерами з часів Logo (пам'ятаєте маленький
    трикутник?). За останні кілька років він став одним з найбільш відомих
    авторів і програмістів співтовариства за технологіями Java і XML. Він працював в
    Nextel Communications над реалізацією складних корпоративних систем, в Lutris
    Technologies, фактично, над створенням сервера додатків, а з недавнього
    часу – в O "Reilly Media, Inc., де продовжує писати і редагувати книги по
    даної тематики. Його готується книга ""Розглядає інноваційний підхід"

    Схожі статті:


    Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

    Коментарів поки що немає.

    Ваш отзыв

    Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

    *

    *