<class-path-extension>
<runtime-relative-path>ext/hexedit.jar</runtime-relative-path>
<binary-origin>release/modules/ext/hexedit.jar</binary-origin>
</class-path-extension>
Repeat this section for every jar put in ...ext folder.
Immediately you should see them in Libraries folder of you Project's view.
Tuesday, May 19, 2009
How to attach an external jar without wrapping it
Netbeans Platform creators recommend wrapping all external JARs into dedicated module. I don't want to. I just want to include it in my module. The way to do it (described here) is to put all needed jars in release/modules/ext folder and adding some extra XML to project.xml
Labels:
develop
New Netbeans Plugin on the way
I'm during exploring Netbeans Platform architecture. I like it very much. As I already have a Netbeans Platform Certified Associate certificate, I plan to gain higher level Netbeans Certified Engineer.
To achieve that I have to write a Netbeans Platform plugin. It will be a IM client with various awesome features ;) My plans were commented by Geertjan Wielenga (Netbeans Documentation and Tutorials master writer) whom I met personally. Geertjan said that my plugin would qualified me as a Certified Engineer. Awesome! :D
So I'm developing it right now, at 1:20am as this is the only time when I don't have to look after my children :)
I plan to put some early screenshots as soon as there will be something good to show.
To achieve that I have to write a Netbeans Platform plugin. It will be a IM client with various awesome features ;) My plans were commented by Geertjan Wielenga (Netbeans Documentation and Tutorials master writer) whom I met personally. Geertjan said that my plugin would qualified me as a Certified Engineer. Awesome! :D
So I'm developing it right now, at 1:20am as this is the only time when I don't have to look after my children :)
I plan to put some early screenshots as soon as there will be something good to show.
Labels:
develop
Tuesday, March 31, 2009
Zdobyłem certyfikat "Netbeans Platform Certified Associate" :
W miniony weekend (28-29 III 2009) przeszedłem szkolenie z podstaw Netbean Platform. Szkolenie zorganizowane z ramienia Warszawa JUG, prowadziło dwóch miłych panów z Suna (Geertjan Wielenga i Karol Harezlak), którzy na codzień zajmują się rozwijaniem Netbeansów.
Na koniec szkolenia wszyscy uczestnicy otrzymali certyfikat, który jest pierwszym stopniem wtajemniczenia. W sumie oznacza "liźnięcie" tematu. Dalsza możliwość to Certified Engineer, o który mam zamiar się starać.
[caption id="attachment_46" align="aligncenter" width="300" caption="Netbeans Platform Certified Associate"]
[/caption]
Podczas szkolenia zdobyłem też najnowszą książkę Geertjana et al. za najciekawsze pytanie, o czym Geertjan wspomniał na swoim blogu :D
Ciekawostką jest, że Karol jest Polakiem, który od kilku lat pracuje w Pradze dla Suna, przy rozwoju modułu Mobility Netbeansów.
[caption id="" align="aligncenter" width="576" caption="Ekipa szkolenia (ja robiłem zdjęcie)"]
[/caption]
[caption id="" align="aligncenter" width="576" caption="Ekipa szkolenia (ze mną po środku, bo Łukasz robił zdjęcie ;)"]
[/caption]
Na koniec szkolenia wszyscy uczestnicy otrzymali certyfikat, który jest pierwszym stopniem wtajemniczenia. W sumie oznacza "liźnięcie" tematu. Dalsza możliwość to Certified Engineer, o który mam zamiar się starać.
[caption id="attachment_46" align="aligncenter" width="300" caption="Netbeans Platform Certified Associate"]
Podczas szkolenia zdobyłem też najnowszą książkę Geertjana et al. za najciekawsze pytanie, o czym Geertjan wspomniał na swoim blogu :D
Ciekawostką jest, że Karol jest Polakiem, który od kilku lat pracuje w Pradze dla Suna, przy rozwoju modułu Mobility Netbeansów.
[caption id="" align="aligncenter" width="576" caption="Ekipa szkolenia (ja robiłem zdjęcie)"]
[caption id="" align="aligncenter" width="576" caption="Ekipa szkolenia (ze mną po środku, bo Łukasz robił zdjęcie ;)"]
Tuesday, February 10, 2009
Crystal Reports java viewer JNDI problem
I hate Crystal Reports. We use CR XI and it really sucks. Crystal Reports java library has some awful bugs.
When report viewer is loading there's some output to stdout:
Why? Because inside CR classes there's a direct output to std out and it sucks. But it's a minor problem.
The worst bug is inside database connection layer, somewhere very deep inside CR java lib. Under an unknown condition sometimes it throws some exceptions with "error finding JNDI name" message. It happens while "switching database". If you don't know what's this, try to dig the net.
The problem is that the reason cannot be defined. The same report sometimes causes this error to appear while another invocation causes nothing bad to happen and the report displays properly.
Workaround
Did I mentioned that Crystal Reports sucks? Oh, yes. As I wrote repeating invocation of a report causes it to display properly. So after two days of debugging and digging throught the Internet with no solution I came to stupid but successful idea. Repeat tables switching until no error appears. The process doesn't take too long. It always took only two loops to successful switch. SWITCH_TABLE_RETRIES is limit of tries (mine is set to 3 and it works well).
There's another bug discovered by some guy and another weird solution.
CR sux :) The end.
And some polish phrases to be indexed by google and help my colleagues to solve the problem.
Błąd podczas znajdowania nazwy JNDI
Problem z Crystal Reports XI
Przeglądarka
Błąd wyświetlania raportu, raportów
When report viewer is loading there's some output to stdout:
Crystal Report Viewer 11.8.4.1197
java.vendor = Sun Microsystems Inc.
java.version = 1.6.0_10
os.name = Windows XP
os.version = 5.1
os.arch = x86
Why? Because inside CR classes there's a direct output to std out and it sucks. But it's a minor problem.
The worst bug is inside database connection layer, somewhere very deep inside CR java lib. Under an unknown condition sometimes it throws some exceptions with "error finding JNDI name" message. It happens while "switching database". If you don't know what's this, try to dig the net.
The problem is that the reason cannot be defined. The same report sometimes causes this error to appear while another invocation causes nothing bad to happen and the report displays properly.
Workaround
Did I mentioned that Crystal Reports sucks? Oh, yes. As I wrote repeating invocation of a report causes it to display properly. So after two days of debugging and digging throught the Internet with no solution I came to stupid but successful idea. Repeat tables switching until no error appears. The process doesn't take too long. It always took only two loops to successful switch. SWITCH_TABLE_RETRIES is limit of tries (mine is set to 3 and it works well).
boolean successSwitch = false;
//Update old table in the report with the new table.
for (int j = 0; j < SWITCH_TABLE_RETRIES; j++) {
if (successSwitch) {
if (j > 1 && Logger.getLogger(AbstractReport.class).isDebugEnabled()) {
Logger.getLogger(AbstractReport.class).debug("Switch tables after tries: " + j);
}
break ;
}
try {
databaseController.setTableLocation(t, tables.getTable(i));
successSwitch = true;
} catch (final Throwable th) {
//if it's the last try as we failed
if (j + 1 == SWITCH_TABLE_RETRIES) {
Logger.getLogger(AbstractReport.class).error("Switch tables error " + th.getMessage());
}
}
}
There's another bug discovered by some guy and another weird solution.
CR sux :) The end.
And some polish phrases to be indexed by google and help my colleagues to solve the problem.
Błąd podczas znajdowania nazwy JNDI
Problem z Crystal Reports XI
Przeglądarka
Błąd wyświetlania raportu, raportów
Wednesday, October 8, 2008
Java performance: Strings
Here's a short report about different Strings concatenation methods I performed.
Strings joining is very often repeated operation.
String str1 = "Mary had ";
String str2 = "a little ";
String finalStr = str1 + str2 + " lamb";
Did you know that creating finalStr will cost you 3 String object creations? Maybe it's somehow optimized inside JVM but still takes very long time and resources. The solution is to use StringBuffer (synchronized) or StringBuilder (not synchronized). Difference between StringBuffer and StringBuilder is that StringBuffer is thread-safe which means that finalString could be assembled by few concurrent threads. But if you don't need multithreaded string concatenating (which is the most often case!) use StringBuilder.
Below is the time comparison of three concatenation methods. First I joined 10 strings (often case) and then I checked work time for 1000 strings which will point out sharply performace differences. (Time is given in microseconds)
10 strings
+ concatenation: 126us
StringBuffer: 23us
StringBuilder: 11us
1000 strings
+ concatenation: 11810us (11.81ms)
StringBuffer: 253us
StringBuilder: 123us
Conclusion:
Use StringBuilder!
Strings joining is very often repeated operation.
String str1 = "Mary had ";
String str2 = "a little ";
String finalStr = str1 + str2 + " lamb";
Did you know that creating finalStr will cost you 3 String object creations? Maybe it's somehow optimized inside JVM but still takes very long time and resources. The solution is to use StringBuffer (synchronized) or StringBuilder (not synchronized). Difference between StringBuffer and StringBuilder is that StringBuffer is thread-safe which means that finalString could be assembled by few concurrent threads. But if you don't need multithreaded string concatenating (which is the most often case!) use StringBuilder.
Below is the time comparison of three concatenation methods. First I joined 10 strings (often case) and then I checked work time for 1000 strings which will point out sharply performace differences. (Time is given in microseconds)
10 strings
+ concatenation: 126us
StringBuffer: 23us
StringBuilder: 11us
1000 strings
+ concatenation: 11810us (11.81ms)
StringBuffer: 253us
StringBuilder: 123us
Conclusion:
Use StringBuilder!
Labels:
develop,
java,
performance
Paralell port programming under Java (Windows XP)
There's been a lot of neat articles. So I won't repeat this topic again. There's very handy Communications API by sun. But while serial ports worked as a charm I had troubles with paralell port. I couldn't write any byte into LPT port. I've searched the net and I've found an important notice from Paul J. Perrone, a java programmer, which I will cite here because it can disappear in the future from cited forum.
"The OS and
driver software must cleary require that the status input lines be
broadcasting signals that indicate the external device is OK (...)
After some more tinkering, the trick was to tie the parallel port
status lines 10 & 11 (Ack and Busy) to low/ground and lines 12, 13, &
15 (paper out, select, & error) to high/5V. This should be done
through the output of a buffer chip though. I also tied lines 18-25 to
low/ground."
The point is that driver must be shure that there's a plenty of paper, "printer" is ready to go, there's no error... All these informations are provided by special status lines, mentioned above. So I did all the soldering. And provided external +5V for proper high states. And well... it didn't work... :) Maybe it will for you.
So I dug and finally I've found a solution for Windows XP. Sorry, this time not for Linux. The problem is that port connection is hardware and OS dependent, so every library must have some kind of JNI library with proper DLL or other native lib.
Library that worked for me can be obtained at http://www.hytherion.com/beattidp/comput/pport.htm I must confess that all the soldering from citation above left in my LPT connector. I'm sure that's not necessary to put some "config" bits on all these state inputs.
Best regards, and enjoy parallel port programming!
"The OS and
driver software must cleary require that the status input lines be
broadcasting signals that indicate the external device is OK (...)
After some more tinkering, the trick was to tie the parallel port
status lines 10 & 11 (Ack and Busy) to low/ground and lines 12, 13, &
15 (paper out, select, & error) to high/5V. This should be done
through the output of a buffer chip though. I also tied lines 18-25 to
low/ground."
The point is that driver must be shure that there's a plenty of paper, "printer" is ready to go, there's no error... All these informations are provided by special status lines, mentioned above. So I did all the soldering. And provided external +5V for proper high states. And well... it didn't work... :) Maybe it will for you.
So I dug and finally I've found a solution for Windows XP. Sorry, this time not for Linux. The problem is that port connection is hardware and OS dependent, so every library must have some kind of JNI library with proper DLL or other native lib.
Library that worked for me can be obtained at http://www.hytherion.com/beattidp/comput/pport.htm I must confess that all the soldering from citation above left in my LPT connector. I'm sure that's not necessary to put some "config" bits on all these state inputs.
Best regards, and enjoy parallel port programming!
Tuesday, October 7, 2008
Alternatywne pole twórcze Developera - kuchnia!
Z cyklu Developer masochista wyżywa się nie tylko na klawiaturze, proponujemy dzisiaj Państwu pizzcę.
public class Pizza extends Food implements EasyStuff, QuickJob {
//TODO pizza!
}
Uwaga. Tricki są wykonywane przez doświadczonych kaskaderów-amatorów, którzy przeżyli już niejedno złamanie. Nie próbujcie tego w domu! Lepiej idźcie do Picy Hut albo MacDynalda i najedzcie się do syfa... syta. :)
Ciasto
Naszym sekretem jest ciasto... sie reklamuje jedna z sieci picerskich, a przecież wszystko kręci się wokół mąki, wody, drożdży i soli?! No, oczywiście trzeba jeszcze wiedzieć jakie są proporcje, jaka ma być temperatura drożdży w trakcie rozkwitu, w jakiej kwadrze księżyca solić, ile dziewic musi przy tym śpiewać pieśni wojenne oraz ile czasu zagniatać pośladkami ciasto...
Dobra, moje ciasto nie jest idealne, ale w sumie badziewie to to też nie jest i da się zszamać ze zmakiem.
Potrzebujemy 3 szklanki mąki, 2/3 szklanki ciepłej wody, 30g drożdży, sól, olej. W 1/3 szklanki wody rozpuszczamy drożdże i wstawiamy do ciepłego miejsca na 15 min. Ja włączam na chwilę piekarnik żeby złapał trochę ciepła.
Mąkę warto przesiać sitkiem (np. takim do herbaty), bo często są w niej syfy. Szczególnie jeśli jest to low-endowa mąka (jedynka, euroshopper itp. tani produkt). Ostatnio używałem takiej. Już wiem dlaczego dało się obniżyć koszty produkcji. Mieląc ją z tym z czym przyjechała. W sitku zostało mnóstwo drobnych kamyków....
Kiedy drożdże się spączkują mieszamy je z resztą wody, mąki i łyżką soli. Zagniatamy. Pośladkami nie warto, bo potem zostają włosy w cieście...
Ugniatamy, ugniatamy, ugniatamy... Kiedy poczujesz, że warto dodać wody, dodaj i tak samo z mąką. Ciasto nie może lepić się do rąk. Na końcu dodaj ok 1 łyżki stołowej oleju.
Sos
Nie mam specjalnego sosu. Możliwości jest kilka. Bardzo klasyczny sos robi się z pomidorów świeżych lub z puszki. Jednak te trzeba by dusić w nieskończoność.
Proponuje przecier pomidorowy, przyprawy (oregano, bazylia), łyżka kwaśnej śmietany oraz opcjonalnie drobno posiekany czosnek*. Ostatnio dodaję również ok. łyżki oleju, sos się wtedy mniej wysusza podczas pieczenia.
*Do czosnku jest zawsze komentarz: przed obraniem należy go lekko rozgnieść. Musi pęknąć. Według jakiejś kosmicznej sztuki tai-chi, kung-fu i feng-shui wtedy dzieje się coś pozytywnego i jest lepszy (?!). Być może to kwestia jakichś olejków, które się uwalniają albo może to kwestia złamania silnej woli czosnku, żeby dał się pokroić żywcem. Nie wiem, ale zawsze go gniotę ;)
Dodatki
Czyli to co stanowi o tożsamości pizzy oraz podnosi jej wartość, bo... ! jest cholernie droga w każdej picerni! Ale my mamy na to remedium. Sami se upieczemy wymarzoną pizzę.
Każdy kto jada pizzę wie co można na nią wrzucić, więc nie ma sensu dywagować na ten temat. Warto tylko pamiętać, aby nie pomieszać za dużo smaków ze sobą i że niektóre rzeczy trochie do siebie nie pasują.
Na końcu klasycznie posypujemy żółtym serkiem marki dowolnej. Ser może być w plastrach lub starty. Mam taką fajną książkę z Gazety Wybiórczej, o pizzach, i powiem Wam, że pizze z serem to 1/3 propozycji. Większość sera nie ma, ale komercyjne oblicze pizzy zawsze obcieka serem. Tu dodam, że ciekawą propozycją może być ser pleśniowy. Smakuje naprawdę nieźle. Czasem używam go pod naciskiem mojej żony, smackoschki serów pleśniowych*.
*Tu kolejna gwiazdka, jak przy promocji kredytu 0% czy innego gówna. Tak jak śledzik lubi wódeczkę, tak serek pleśniowy wprost kocha (pół-)wytrawne winko. Polecam bardzo, bardzo.
Pieczemy
Ja mam cholerny piekarnik gazowy. Szybko się nagrzewa, ale pali tylko od dołu i potrafi przypalić ciasto, a na górze jeszcze surowe. W każdem razie potrzebujecie jakiegoś piekarnika. Nie, nie, mikrofala odpada. Pieczemy 20-25 min. Byle nie za długo, bo dodatki się zeschną, a ciasto, o ile cienkie, przyjara.
Podsuma
Nie bój się eksperymentować. To najprzyjemniejsze. Moje żarcie nigdy nie smakuje... (ekhm...) tak samo, bo zawsze coś kombinuje. To mnie rajcuje. Moje pizze czasem są swego rodzaju katharsis, ale nie dla człowieka tylko dla lodówki :D Wrzucam co się rusza i fajnie to smakuje. Wiecie jaka ciekawa jest pizza ze starą kieł... yyyy, w każdem razie można uzyskać niespotykane efekty. Do tego możecie powiedzieć, że umiecie gotować ;) a to już dobry materiał na męża/żonę.
Smacznego! ;)
public class Pizza extends Food implements EasyStuff, QuickJob {
//TODO pizza!
}
Uwaga. Tricki są wykonywane przez doświadczonych kaskaderów-amatorów, którzy przeżyli już niejedno złamanie. Nie próbujcie tego w domu! Lepiej idźcie do Picy Hut albo MacDynalda i najedzcie się do syfa... syta. :)
Ciasto
Naszym sekretem jest ciasto... sie reklamuje jedna z sieci picerskich, a przecież wszystko kręci się wokół mąki, wody, drożdży i soli?! No, oczywiście trzeba jeszcze wiedzieć jakie są proporcje, jaka ma być temperatura drożdży w trakcie rozkwitu, w jakiej kwadrze księżyca solić, ile dziewic musi przy tym śpiewać pieśni wojenne oraz ile czasu zagniatać pośladkami ciasto...
Dobra, moje ciasto nie jest idealne, ale w sumie badziewie to to też nie jest i da się zszamać ze zmakiem.
Potrzebujemy 3 szklanki mąki, 2/3 szklanki ciepłej wody, 30g drożdży, sól, olej. W 1/3 szklanki wody rozpuszczamy drożdże i wstawiamy do ciepłego miejsca na 15 min. Ja włączam na chwilę piekarnik żeby złapał trochę ciepła.
Mąkę warto przesiać sitkiem (np. takim do herbaty), bo często są w niej syfy. Szczególnie jeśli jest to low-endowa mąka (jedynka, euroshopper itp. tani produkt). Ostatnio używałem takiej. Już wiem dlaczego dało się obniżyć koszty produkcji. Mieląc ją z tym z czym przyjechała. W sitku zostało mnóstwo drobnych kamyków....
Kiedy drożdże się spączkują mieszamy je z resztą wody, mąki i łyżką soli. Zagniatamy. Pośladkami nie warto, bo potem zostają włosy w cieście...
Ugniatamy, ugniatamy, ugniatamy... Kiedy poczujesz, że warto dodać wody, dodaj i tak samo z mąką. Ciasto nie może lepić się do rąk. Na końcu dodaj ok 1 łyżki stołowej oleju.
Sos
Nie mam specjalnego sosu. Możliwości jest kilka. Bardzo klasyczny sos robi się z pomidorów świeżych lub z puszki. Jednak te trzeba by dusić w nieskończoność.
Proponuje przecier pomidorowy, przyprawy (oregano, bazylia), łyżka kwaśnej śmietany oraz opcjonalnie drobno posiekany czosnek*. Ostatnio dodaję również ok. łyżki oleju, sos się wtedy mniej wysusza podczas pieczenia.
*Do czosnku jest zawsze komentarz: przed obraniem należy go lekko rozgnieść. Musi pęknąć. Według jakiejś kosmicznej sztuki tai-chi, kung-fu i feng-shui wtedy dzieje się coś pozytywnego i jest lepszy (?!). Być może to kwestia jakichś olejków, które się uwalniają albo może to kwestia złamania silnej woli czosnku, żeby dał się pokroić żywcem. Nie wiem, ale zawsze go gniotę ;)
Dodatki
Czyli to co stanowi o tożsamości pizzy oraz podnosi jej wartość, bo... ! jest cholernie droga w każdej picerni! Ale my mamy na to remedium. Sami se upieczemy wymarzoną pizzę.
Każdy kto jada pizzę wie co można na nią wrzucić, więc nie ma sensu dywagować na ten temat. Warto tylko pamiętać, aby nie pomieszać za dużo smaków ze sobą i że niektóre rzeczy trochie do siebie nie pasują.
Na końcu klasycznie posypujemy żółtym serkiem marki dowolnej. Ser może być w plastrach lub starty. Mam taką fajną książkę z Gazety Wybiórczej, o pizzach, i powiem Wam, że pizze z serem to 1/3 propozycji. Większość sera nie ma, ale komercyjne oblicze pizzy zawsze obcieka serem. Tu dodam, że ciekawą propozycją może być ser pleśniowy. Smakuje naprawdę nieźle. Czasem używam go pod naciskiem mojej żony, smackoschki serów pleśniowych*.
*Tu kolejna gwiazdka, jak przy promocji kredytu 0% czy innego gówna. Tak jak śledzik lubi wódeczkę, tak serek pleśniowy wprost kocha (pół-)wytrawne winko. Polecam bardzo, bardzo.
Pieczemy
Ja mam cholerny piekarnik gazowy. Szybko się nagrzewa, ale pali tylko od dołu i potrafi przypalić ciasto, a na górze jeszcze surowe. W każdem razie potrzebujecie jakiegoś piekarnika. Nie, nie, mikrofala odpada. Pieczemy 20-25 min. Byle nie za długo, bo dodatki się zeschną, a ciasto, o ile cienkie, przyjara.
Podsuma
Nie bój się eksperymentować. To najprzyjemniejsze. Moje żarcie nigdy nie smakuje... (ekhm...) tak samo, bo zawsze coś kombinuje. To mnie rajcuje. Moje pizze czasem są swego rodzaju katharsis, ale nie dla człowieka tylko dla lodówki :D Wrzucam co się rusza i fajnie to smakuje. Wiecie jaka ciekawa jest pizza ze starą kieł... yyyy, w każdem razie można uzyskać niespotykane efekty. Do tego możecie powiedzieć, że umiecie gotować ;) a to już dobry materiał na męża/żonę.
Smacznego! ;)
Subscribe to:
Posts (Atom)
