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 фон для на?его око?ка.
- Располагаем все это дело так, чтобы реальное изображение экрана и фон окна совпадали - соответственно, создастся иллюзия прозрачного окна.
June
2007
Системы управления проектами (issue tracking system)
Posted in: Project Management, Полезные программы | 10 Comments
При разработке програмного обеспечения как боль?ие, так и маленькие софтверные компании используют системы учета задач, о?ибок, управления проектами (bug tracker, issue tracking system, project management application).
На данный момент такого рода продуктов существует немало. Есть простые системы, функционал которых ограничивается учетом о?ибок и отслеживанием их статуса. Есть более сложные, которые позволяют, например, строить различные графики по проектным рискам, интегрироваться с системами версионного контроля, осуществлять сложный поиск по проектной документации и так далее.
В идеале система управления проектами - это некоторое серверное приложение, которое позволяет делать следующее:
(more…)
June
2007
Java Головоломки (Java Puzzlers)
Posted in: Java technologies, J2SE, Ваш досуг. Полезные советы | 3 Comments
Всем привет.
Для разнообразия посмотрим на язык программирования Java с другой стороны.
Ниже вы найдете одну очень интересную ссылку. К моему глубочай?ему сожалению, я обнаружил ее совсем недавно.
Два серьезных дядьки - Джо?уа Блок (Joshua Bloch) и Нил Гафтер (Neal Gafter) в совсем несерьезном стиле предлагают ва?ему вниманию восемь интересней?их головоломок.
(more…)
May
2007
Паттерн Adapter (Адаптер)
Posted in: Паттерны проектирования | 3 Comments
Вернемся к рассмотрению структурных паттернов проектирования. На этот раз мы рассмотрим ?аблон проектирования под названием Adapter (его еще называют Wrapper на ряду с паттерном Facade).
?так, паттерн Adapter используется для того, чтобы объекты с разными интерфейсами могли работать друг с другом. Существует два типа адаптеров - Class Adapter и Object Adapter.
Для начала мы рассмотрим каждый из этих типов, а потом я объясню разницу между двумя wrapper’ами - адаптером и фасадом.
(more…)
April
2007
Исключения в Java (exceptions, errors, исключительные ситуации)
Posted in: Java technologies, J2SE | 10 Comments
Эта статья посвящается очень важному вопросу программирования - исключительным ситуациям и ошибкам (exceptions and errors).
В языке Java исключения (Exceptions) и ошибки (Errors) являются объектами. Когда метод вызывает (бросает - throws) исключительную ситуацию, он на самом деле работает с объектом. Но такое происходит не с любыми объектами, а только с теми, которые наследуются от Throwable.
Упрощенную диаграмму классов ошибок и исключительний вы можете увидеть на следующем рисунке:
(more…)
March
2007
При?ла весна…
В интернете распустились блоги, затмевая друг друга разнообразием красочных страниц…
Наконец-то и у моего сайта новый уникальный дизайн.
Спасибо моей любимой жене, которая не пожалела времени на создание макета и верстку, без которых, казалось бы, можно прожить :). Если честно, я не сразу проникся всей глубиной символизма, вложенного в дизайн.
Если вас интересует, как выглядел блог рань?е, смотрите следующую ссылку:
(more…)
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…)
February
2007
Существует 2 основных типа, на которые делятся методологии разработки програмного обеспечения (software development methodology). Это структурные и гибкие методологии. Структурные методологии предполагают высокоформализованный подход к разработке ПО (каскадная модель). Гибкие методологии (Agile) ориентированы в основном на итеративную разработку с минимально допустимой формализацией процесса.
Об основных принципах гибких методологий я расскажу в другой статье. А обратить ва?е внимание хочу вот на что. Agile методологии очень хоро?о себя зарекомендовали и сейчас даже самый высокоформализованный процесс трудно себе представить без “гибких” элементов, в частности митингов.
?так, SCRUM-meeting.
(more…)
January
2007
Паттерн Builder является паттерном создания объектов (creational pattern). Суть его заключается в том, чтобы отделить процесс создания некоторого сложного объекта от его представления. Таким образом, можно получать различные представления объекта, используя один и тот же “технологический” процесс.
Паттерн Строитель иногда путают с паттерном проектирования Factory. ? не удивительно, так как они действительно во многом схожи.
В этой статье я опи?у неболь?ой пример реализации Builder’a на языке Java, а так же попробую коротко объяснить разницу между Builder и Factory.
(more…)
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)