21
June
2007

Прозрачные окна в Java Swing (transparent windows)

Posted in: Java GUI, Swing, AWT, SWT, Java technologies, J2SE | 14 Comments

Библиотека Java Swing не предоставляет возможности создания прозрачных (transparent) окон без использования native кода.
Наткнулся на одну интересную статью. В ней рассказывается, как можно без этого самого native кода сделать “прозрачные” око?ки в Java Swing. Реализуется это при помощи хитрого хака:

  • Делаем скрин?от перед прорисовкой окна.
  • ?спользуем этот screenshot как background фон для на?его око?ка.
  • Располагаем все это дело так, чтобы реальное изображение экрана и фон окна совпадали - соответственно, создастся иллюзия прозрачного окна.

(more…)

12
June
2007

Системы управления проектами (issue tracking system)

Posted in: Project Management, Полезные программы | 10 Comments

При разработке програмного обеспечения как боль?ие, так и маленькие софтверные компании используют системы учета задач, о?ибок, управления проектами (bug tracker, issue tracking system, project management application).
На данный момент такого рода продуктов существует немало. Есть простые системы, функционал которых ограничивается учетом о?ибок и отслеживанием их статуса. Есть более сложные, которые позволяют, например, строить различные графики по проектным рискам, интегрироваться с системами версионного контроля, осуществлять сложный поиск по проектной документации и так далее.
В идеале система управления проектами - это некоторое серверное приложение, которое позволяет делать следующее:
(more…)

6
June
2007

Java Головоломки (Java Puzzlers)

Posted in: Java technologies, J2SE, Ваш досуг. Полезные советы | 3 Comments

Всем привет.
Для разнообразия посмотрим на язык программирования Java с другой стороны.
Ниже вы найдете одну очень интересную ссылку. К моему глубочай?ему сожалению, я обнаружил ее совсем недавно.
Два серьезных дядьки - Джо?уа Блок (Joshua Bloch) и Нил Гафтер (Neal Gafter) в совсем несерьезном стиле предлагают ва?ему вниманию восемь интересней?их головоломок.
(more…)

21
May
2007

Паттерн Adapter (Адаптер)

Posted in: Паттерны проектирования | 3 Comments

Вернемся к рассмотрению структурных паттернов проектирования. На этот раз мы рассмотрим ?аблон проектирования под названием Adapter (его еще называют Wrapper на ряду с паттерном Facade).
?так, паттерн Adapter используется для того, чтобы объекты с разными интерфейсами могли работать друг с другом. Существует два типа адаптеров - Class Adapter и Object Adapter.
Для начала мы рассмотрим каждый из этих типов, а потом я объясню разницу между двумя wrapper’ами - адаптером и фасадом.
(more…)

11
April
2007

Исключения в Java (exceptions, errors, исключительные ситуации)

Posted in: Java technologies, J2SE | 10 Comments

Эта статья посвящается очень важному вопросу программирования - исключительным ситуациям и ошибкам (exceptions and errors).
В языке Java исключения (Exceptions) и ошибки (Errors) являются объектами. Когда метод вызывает (бросает - throws) исключительную ситуацию, он на самом деле работает с объектом. Но такое происходит не с любыми объектами, а только с теми, которые наследуются от Throwable.
Упрощенную диаграмму классов ошибок и исключительний вы можете увидеть на следующем рисунке:
(more…)

12
March
2007

Новый дизайн (new blog design)

Posted in: Разное (uncategorized) | 8 Comments

При?ла весна…
В интернете распустились блоги, затмевая друг друга разнообразием красочных страниц…
Наконец-то и у моего сайта новый уникальный дизайн.
Спасибо моей любимой жене, которая не пожалела времени на создание макета и верстку, без которых, казалось бы, можно прожить :). Если честно, я не сразу проникся всей глубиной символизма, вложенного в дизайн.
Если вас интересует, как выглядел блог рань?е, смотрите следующую ссылку:
(more…)

10
March
2007

Производительность при работе с XPath в Java (performance issues)

Posted in: Технологии XML, XPath, Java technologies, J2SE | 1 Comment

Пакет javax.xml.xpath (Java 1.4) предоставляет пользователю независимый API для вычисления XPath выражений.
По умолчанию используется Sun’овская реализация всех классов из этого пакета. Работая с этой имплементацией была обнаружена одна интересная вещь.
По мере углубления в DOM-дерево (Document Object Model), скорость вычисления одних и тех же XPath выражений постепенно падает.
В этой статье я хочу продемонстрировать описанную проблему, а также предложить альтернативный способ работы с сильноветвящимся DOM-деревом при вычислении XPath.
(more…)

26
February
2007

SCRUM Митинг (daily scrum meeting)

Posted in: Project Management | 2 Comments

Существует 2 основных типа, на которые делятся методологии разработки програмного обеспечения (software development methodology). Это структурные и гибкие методологии. Структурные методологии предполагают высокоформализованный подход к разработке ПО (каскадная модель). Гибкие методологии (Agile) ориентированы в основном на итеративную разработку с минимально допустимой формализацией процесса.
Об основных принципах гибких методологий я расскажу в другой статье. А обратить ва?е внимание хочу вот на что. Agile методологии очень хоро?о себя зарекомендовали и сейчас даже самый высокоформализованный процесс трудно себе представить без “гибких” элементов, в частности митингов.
?так, SCRUM-meeting.
(more…)

13
January
2007

Паттерн Builder (Строитель)

Posted in: Паттерны проектирования | 12 Comments

Паттерн Builder является паттерном создания объектов (creational pattern). Суть его заключается в том, чтобы отделить процесс создания некоторого сложного объекта от его представления. Таким образом, можно получать различные представления объекта, используя один и тот же “технологический” процесс.
Паттерн Строитель иногда путают с паттерном проектирования Factory. ? не удивительно, так как они действительно во многом схожи.
В этой статье я опи?у неболь?ой пример реализации Builder’a на языке Java, а так же попробую коротко объяснить разницу между Builder и Factory.
(more…)

1
December
2006

Проблема с rowset.jar (NullPointerException)

Posted in: Базы данных, SQL, Oracle, Java technologies, J2SE | 2 Comments

Библиотека rowset.jar предоставляет набор имплементаций для таких интерфейсов, как CachedRowSet, FilteredRowSet, JoinRowSet и т.д, а также другие необходимые классы для работы с ними.
Чаще всего программистам приходится иметь дело именно с com.sun.rowset.CachedRowSetImpl. Этот класс позволяет кэ?ировать данные из data source (так сказать, работать в режиме off-line).
В этой статье я хочу рассказать о проблеме, которая возникла у меня при работе с библиотекой.
А именно, при попытке создать объект CachedRowSetImpl валился следующий Exception:

java.lang.NullPointerException
 at java.io.Reader.<init>(Reader.java:61)
 at java.io.InputStreamReader.<init>(InputStreamReader.java:80)
 at java.util.Properties.load(Properties.java:266)
 at java.util.PropertyResourceBundle .<init>(PropertyResourceBundle.java:96)
 at com.sun.rowset.JdbcRowSetResourceBundle.<init>(Unknown Source)
 at com.sun.rowset.JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(Unknown Source)
 at com.sun.rowset.CachedRowSetImpl .<init>(Unknown Source)
 at TestRowSet.main(TestRowSet.java:14)

(more…)