January
Паттерн Builder (Строитель)
Posted in: Паттерны проектирования | 5 Comments
Паттерн Builder является паттерном создания объектов (creational pattern). Суть его заключается в том, чтобы отделить процесс создания некоторого сложного объекта от его представления. Таким образом, можно получать различные представления объекта, используя один и тот же “технологический” процесс.
Паттерн Строитель иногда путают с паттерном проектирования Factory. И не удивительно, так как они действительно во многом схожи.
В этой статье я опишу небольшой пример реализации Builder’a на языке Java, а так же попробую коротко объяснить разницу между Builder и Factory.
(more…)
December
Проблема с 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)
November
Порадовать решил моих благодарных читателей. К сожалению, copyright не мой.
Итак, был придуман антипаттерн проектирования - Public Morozov. Это класс, который открывает доступ ко всем полям и методам класса-предка, не зависимо от их модификаторов видимости.
Ну и для того, чтобы окончательно скрасить рабочие будни, еще пару перлов…
(more…)
October
Как говорится: случайность - частный случай закономерности. Поэтому наверняка вы используете случайные числа в некоторых своих разработках.
В Java есть класс для работы со случайными (точнее псевдослучайными) числами - java.util.Random. Тем не менее, некоторые люди пользуются им не совсем так, как надо.
Пример:
(more…)
October
Игра “Меморина” (Java Swing GUI Game) и проблема с ImageIcon
Posted in: Java GUI, Swing, AWT, SWT, Java technologies, J2SE | 5 Comments
Ну прямо гейм-девелопер какой-то.
Попросили меня написать маленькую игрушечку с использованием графической библиотеки Java Swing. Игра всем знакома и называется “Меморина”.
Думаю, заказчик не будет сильно зол за то, что я выложу игру на всеобщее обозрение…
Еще столкнулся с такой проблемой: при загрузке картинок из jar-файла возникает исключительная ситуация ImageFormatException, хотя при запуске из IDE все проходит без ошибок.
(more…)
September
Если MP3-плеер не понимает русский язык (mp3-player java-utility)
Posted in: Java technologies, J2SE, Полезные программы | 13 Comments
MP3 плеер вещь хорошая и полезная…
К сожалению, иногда он “расставляет все точки над i”, равно как и над e, и над о, и так далее, в названиях песен. А все потому, что не понимает русский (и/или украинский) язык.
Хорошо, если на сайте производителя есть множество софта, в частности для перепрошивки и загрузки шрифтов. А если нет?
Тогда вы попали туда, куда нужно.
(more…)
August
Object-Oriented Design: решение задачи по проектированию
Posted in: Паттерны проектирования | 2 Comments
Есть такой сайт - http://www.topcoder.com.
Здесь проводятся онлайн и оффлайн соревнования по объектно-ориентированному проектированию и программированию (.NET и Java).
Более года назад мне тоже довелось участвовать в соревнованиях по проектированию. Результат довольно неплохой - четвертое место из более чем 30 участников. Это был мой первый опыт в ОО проектировании (OOD) и написании спецификаций (specification). А опытом нужно делиться…
(more…)
July
Не так давно на блоге Intruder’s Register появилась статья о том, стоит ли переходить на Feed Burner. Среди пунктов “за” был следующий - отображение статистики читателей фида.
Мне кажется, информация о том, через какой RSS-reader вас читают, - излишняя роскошь. А вот отображение количества уникальных читателей фида за текущий день очень даже не помешает (скорее всего вы уже обратили внимание на “STATS” в сайдбаре).
Вместо поиска всевозможных плагинов для Wordpress, я принял решение модифицировать существующий plug-in WP Shortstat.
(more…)
June
Регулярные выражения (Regular Expressions) позволяют сопоставлять текст с указанным шаблоном, а также выполнять замену текста. Эти операции осуществляются с помощью универсальных символов, которые специальным образом интерпретируются.
Регулярные выражения используются в большом количестве языков программирования.
В Java тоже есть пакет, который позволяет работать с ними - java.util.regex.
(more…)
June
Oracle DBMS Metadata (DDL)
Posted in: Java technologies (translated), Базы данных, SQL, Oracle | No Comments
The Russian version of this article can be found here.
All SQL statements are devided into two main categories:
DDL - data definition language;
DML - data manipulation languauge.
DML is used to change the data in the database tables. Instructions of DML are well-known for everyone: insert, update, delete. In order to save changes to database (so, the other users will see them), you need to execute commit operator. To discard all of your changes you have to execute rollback operator.
All database objects (triggers, tables, indices, etc.) have their definitions. DDL-expressions (metadata) of these objects can be extracted from the database schema. DDL-expressions will help you during database analysis and optimization.
This article will teach you, how objects’ definitions can be extracted from the Oracle database instance.
(more…)