Java world tendencies
Январь 30th, 2008По последним данным количество вакансий, где необходим Spring сравнилось с теми, где требуют знания EJB.
Spring Overtakes EJB as a Skills RequirementОпубликован первый черновик HTML5
Январь 26th, 2008W3C официально опубликовала первый черновик нового интернет-формата - HTML 5. Похоже, веб-мастерам придётся активно переучиваться - нас ждут новые интересные возможности, и уже ожидаемые теги <video> и <audio> - мелочь по сравнению с описанными на уровне формата возможностями соединения с SQL-СУБД на стороне клиента, тегом <canvas> и возможностью открывать новые сетевые соединения (опять же, на стороне клиента!) через как TCP, так и Bluetooth.
HTML 5 - W3C Working Draft 22 January 2008
DIV vs. TABLE
Январь 25th, 2008Недостатки табличной верстки
У табличной верстки есть много недостатков. Рассмотрим их по порядку:
- Web-стандарты. Используя табличную верстку невозможно сверстать более или менее серьезный макет, который бы не содержал синтаксических ошибок в коде.
- Семантика. Таблицы были введены в HTML исключительно для облегчения представления табличной информации (прайс лист и т. д.), но поскольку в спецификации HTML 3.2 не было каких-либо других способов позиционирования элементов на странице, тогдашние web-мастера использовали таблицы для разметки страницы на блоки (меню, шапка, подвал и т. д.).
- Нелогичность поведения таблиц. Если вы верстали или верстаете таблицами, то наверняка сталкивались с нелогичностью поведения таблиц в сложных макетах и разных браузерах. Это связано с тем, что таблицы не предназначены для верстки и с тем, что большинство браузеров отрисовывают страницы с табличной версткой в кварк режиме, а этот режим у всех браузеров разный.
- Читабельность кода и редизайн. Вы когда-нибудь пробовали разобраться в коде чужого сайта, сверстанного таблицами — наверное это было нелегко. А внести какие-либо серьезные изменения в дизайн иногда вообще невозможно, легче сверстать все заново.
- Размер кода. В подавляющем большинстве случаев верстка таблицами значительно увеличивает код страницы по сравнению с блочной версткой.
Таким образом, мы выяснили, что табличная верстка это не только вчерашний день, но и много проблем для верстальщика и пользователя.
Кроссбраузерность блочной верстки
У блочной верстки есть один единственный недостаток — отсутствие полноценной поддержки CSS 2.0 в некоторых браузерах.
Преимущества блочной верстки
- Соответствие стандартам. Правильная блочная верстка полностью соответствует стандартам HTML и CSS. Это обеспечивает легкое понимание вашего кода теми, кто знаком со стандартами и гарантируемую поддержку в новых версиях браузеров.
- Отделение содержания от представления. Это обеспечивает легко читабельный код и смену дизайна всего сайта простым изменением файла стилей.
- Правильное отображение страниц разными устройствами. Возможность создания разных файлов стилей для разных устройств (КПК, принтер и т. д.) без изменения HTML кода.
- Легкость и логичность верстки. Вы просто берете нужный блок и, используя стили, определяете его размеры, вид и место на странице.
Возможности языка Java: статический импорт
Январь 24th, 2008 Объявление статического импорта аналогично объявлению обычного импорта. При объявлении обычного импорта классы импортируются из пакетов, что позволяет их использовать без указания имени пакета перед именем класса. При объявлении статического импорта статические члены импортируются из классов, что позволяет им быть использованными без указания имени содержащего их класса.
Статический импорт Для того чтобы получить доступ к статическим членам классов, требуются указать ссылку на класс. К примеру, необходимо указать имя класса Math:
double r = Math.cos(Math.PI * theta);
Чтобы обойти это, иногда добавляют статические методы в интерфейс и наследуются от этого интерфейса. Это плохая идея. Фактически это настолько плохая идея, что для нее есть свое название: Constant Interface Antipattern (см. Effective Java, 17 статья). Дело в том, что использование статических членов класса другим классом всего лишь деталь реализации. Когда же класс реализует интерфейс, его члены становится частью публичного АРI этого класса. Детали реализации не должны становиться публичным программным интерфейсом.
Конструкция статического импорта позволяет получить прямой доступ к статическим членам без необходимости наследования от того типа, который содержит эти статические члены. Вместо этого, программа импортирует члены индивидуально:
import static java.lang.Math.PI;
или все целиком:
import static java.lang.Math.*;
Однажды импортированный статический член может быть использован без указания имени класса:
double r = cos(PI * theta);
Объявление статического импорта аналогично объявлению обычного импорта. При объявлении обычного импорта классы импортируются из пакетов, что позволяет их использовать без указания имени пакета перед именем класса. При объявлении статического импорта статические члены импортируются из классов, что позволяет им быть использованными без указания имени содержащего их класса.
Так когда же следует использовать статический импорт? Только в некоторых случаях! Используйте его только если иначе вы вынуждены объявлять локальные копии констант или при неправильном использовании наследования (Constant Interface Antipattern). Другими словами, использование его оправданно, когда требуется постоянное использование статических членов одного класса из одного или двух других классов. Чрезмерное использование статического импорта может сделать вашу прорамму нечитаемой и тяжелой в поддержке ввиду того, что пространство имен увеличится из-за всех статических членов из вашего импорта. Тот, кто будет читать ваш код ( включая вас, спустя несколько месяцев после написания кода) не будут знать какому из статически импортированных классов принадлежит тот или иной член. Импортирование всех статических методов из класса может быть частично вредно для читабельности; если вы нуждаетесь только в одном или двух методах, импортируйте их по-отдельности. Использованный умело, статический импорт может сделать вашу программу более наглядной, исключая из программного кода нунжные повторения имен классов.
Перевод Комарова Е., Дмитриев А.
Ужасы нашего городка
Январь 23rd, 200825 лучших багов в Java просто поражают. Поражают своим средним возрастом. Первому из них 6 лет, второму - 9 лет. Там есть и совсем ископаемые экземпляры выдержки с 1997 года.
Android может поссорить Google и Sun
Январь 22nd, 2008Компания Sun разглядела в новой открытой платформе Android от Google прямую угрозу как для своей виртуальной машины Java Micro Edition, так и для новой мобильной Java-платформы, которую собиралась превратить в новый стандарт для мобильного рынка. Дело в том, что платформа от Google позволяет разработчикам не платить за лицензию Java ME, а пользоваться бесплатной разработкой, которая называется Dalvik. Пока Sun обвиняет Google только в дополнительной фрагментации рынка, но можно не сомневаться, что создатели Java не упустят возможности засудить Google за нарушение законов об интеллектуальной собственности.
Впрочем, пока вся доступная информация указывает на то, что в Dalvik используются только открытые стандарты и технологии, дополненные собственными наработками Google, такими как новый формат исполняемого файла. Такое положение дел подтверждается и репутацией основателей Google. Сам интернет-гигант рассматривает свои действия как попытку стандартизации рынка мобильных Java-платформ, путём предоставления первого решения, обладающего достаточной функциональностью, чтобы устроить разработчиков.
Cheat Sheets
Январь 20th, 2008Небольшой набор шпаргалок:
Reverse-Ajax
Январь 20th, 2008Аджакс видели и пользовали, наверное, все. И, наверное, всем приходила идея типа “а неплохо бы иметь возможность отправлять запросы с сервера к клиенту”
Давиче нашел технологию разрешающую сие осуществить. Comet называется. Если коротко, то она в комбинации с хитрым client-side кодом разрешает направлять клиенту разного рода запросы. Про пример использования этой технологии в паре с DWR Reverse-Ajax можно почитать на IBM developerWorks.
Как получить элемент страницы через JavaScript
Январь 17th, 2008Особенности получения элементов страницы через JavaScript для разных броузеров.
Приведем небольшой код:
<html>
<script>
window.onload = function() {
var el = document.getElementById(”ns1.name”);
// print only MSIE
if (el) alert(”value1 = ” + el.value);
// print Firefox, Mozilla, MSIE, Opera
el = document.getElementById(”ns1.id”);
if (el) alert(”value2 = ” + el.value);
}
</script>
<body>
<form>
<input name=”ns1.name” id=”ns1.id” value=”TESt”>
</form>
</body>
</html>
Оказывается MSIE получает элемент по функции getElementById не только через его ID но и по его NAME атрубуту.