2010-06-28

Build Tools : Proguard

ProGuard is a free Java class file shrinker, optimizer, obfuscator, and preverifier. It detects and removes unused classes, fields, methods, and attributes. It optimizes bytecode and removes unused instructions.
The proguard-maven-plugin is maven2 plugin to execute ProGuard
© Maven proguard Plug-In - Overview;
Configurable, easily mavenizable, recommended.

The Maven Way (continued)

I am trying to migrate a Java application built by Ant to Maven2. among other the build perform the following operations: 1) Running a javadoc doclet to find annotated Java files to be externalize later as web services 2) compile a small part of the code for step 3 3) run Axis java2wsdl on the compiled code from step 2 4) produce java code with wsdl2java on the wsdl files from step 3 5) compile the entire code when trying to "mavenize" the process I can accomplish each task at a time but fail to achieve them all in that order.
Steps 2-3/4 sound like they should be in a separate module. If you move them to a separate module (or two) you can leave things like the compiler plugin bound to the compile phase. By trying to keep things as a single module you are fighting Maven.... and that is not "the Maven Way"... you will have a much easier time if you give in and put them in a separate module.
© Re: How to perform ordered tasks in Maven2 build;
В самом деле, этот функционал уже два с половиной года делают (притом регулярно порядок выполнения плагинов менялся, я сам обжегся при переходе на 2.0.9). Скорее всего любая идея по реализации упорядоченного выполнения плагинов вызывает такие бурления в среде разработчиков, что ничего определенного (пусть бы и не такого умного как антовские зависимости таргетов) не будет еще очень долго. Даже этот тред весьма показателен: после совета в нижней цитате ничего дельного не сказали - но пофлеймили очень хорошо.

В общем, мое мнение в целом не поменялось - "плакали, кололись, но продолжали...". Ничего лучше интегрированного с метаданными проекта и зависимостей пока вроде бы не придумали. Достаточно сделать в продукте несколько killer features, и несколько достаточно серьезных просчетов в юзабельности можно попросту игнорировать.

IntelliJ project metadata sharing practices

Since *.iws file stores your personal preferences, it should not be placed under version control. On the contrary, the project and module files (*.ipr and *.iml) store project-wide settings, and should be shared.
The files that store local settings (workspace.xml and tasks.xml), should not be placed under version control. All the other settings files should be shared.

2010-06-27

Lingering Close and Http 1.1 Expect: continue

Необходимо заметить, что ограничение размера числом больше 1M будет работать не всегда. Дело в том, что около 20% всех запросов выполняется через прокси-сервера Squid, в которых по умолчанию стоит ограничение на 1M (директива request_body_max_size) и его очень редко меняют. В отличие от Apache Squid после передачи сообщения о 413 ошибке сразу же закрывает соединение.

В стандарте HTTP/1.1 для закачивания файлов предусмотрен заголовок браузера "Expect: continue", в ответ на который сервер может вернуть сообщение об ошибке или же ответить кодом "HTTP/1.1 100 Continue", после чего браузер может передавать тело запроса. Однако ни один из современных браузеров это не поддерживает.

2010-06-12

Swing Hacks

Swing Hacks will show you how to extend Swing's rich component set in advanced and sometimes non-obvious ways. The book touches upon the entire Swing gamut-tables, trees, sliders, spinners, progress bars, internal frames, and text components. Detail is also provided on JTable/JTree, threaded component models, and translucent windows. You'll learn how to filter lists, power-up trees and tables, and add drag-and-drop support.

Swing Hacks will show you how to do fun things that will directly enhance your own applications. Some are visual enhancements to make your software look better. Some are functional improvements to make your software do something it couldn't do before. Some are even just plain silly, in print only to prove it could be done. The book will also give you give you a small glimpse of the applications coming in the future. New technology is streaming into the Java community at a blistering rate, and it gives application developers a whole new set of blocks to play with.