Dziś zmierzyłem się z całkiem ciekawym problemem. Prosta Javova aplikacja miała odczytać zawartość plików csv, policzyć wskaźniki, uzupełnić obiekty Hibernate i zapisać wszystko do bazy danych. Wszystko zrobiłem szybciutko ale powstał pewien problem… Aplikacja działała wolno ale procesor był obciążony tylko w 50%. To nie byłby problem przy małej ilości danych, natomiast ja musiałem zaimportować 864 pliki o łącznej wadze 36,3 MB! Niby niewiele, ale przypomina… to są pliki tekstowe.

Gdzie szukać problemu? Sama aplikacja była wydajna, bo operacja matematyczne to błahostka. Nie implementowałem też żadnych skomplikowanych reguł. Może baza danych? Faktycznie interfejs sieciowy miał słabą responsywność. Zwiększyłem cache dla bazy danych do 1GB, zaalokowałem więcej pamięci dla aplikacji Javy (-XX:MaxPermSize=512m -Xms1024m -Xmx2048m) i aplikacja chodzi szybciej, ale nadal za wolno.

Continue reading

Wczoraj założyłem sobie płatne konto na GitHub’ie, aby mój projekt edukacyjny (pisany w Symfony 1.4) posiadał kontrolę wersji – po za tym przyda mi się to w pracy zawodowej. Wcześniej używałem SVN lub CVS, i w zasadzie zupełnie przez przypadek zacząłem używać GIT’a. Skusił mnie głównie GitHub, który zajmuje się hostingiem repozytoriów – koniec z utrzymywaniem własnego serwera. Trafiłem tam przy okazji czytania na temat Warszawa JUG (http://github.com/warszawajug). Przyjrzałem się dokładniej GitHub’owi i bardzo mi się on spodobał.Continue reading

Ostatnio programując na co dzień w Javie i używając Springa, Hibernate, Struts i Velocity nie natrafiłem na żaden interesujący problem dlatego nie pojawił się na blogu żaden wpis, który tego dotyczy.

Ale za to jest coś ciekawego w Doctrine :) W wersji 1.2 nie ma rozsądnej formy dziedziczenia, to co proponują autorzy nie podoba mi się. postanowiłem użyć takiego przypadku:

sf_guard_user to klasa standardowego pluginu, która odpowiada użytkownikowi. Dodatkowo stworzyłem tabelę ae_experts z jednym kluczem obcym odwołującym się do użytkownika. Czyli każdy ekspert jest również użytkownikiem. Tak sobie pokrętnie wytłumaczyłem obiektowo relacyjną bazę danych.

Efekt, który chciałem osiągnąć to przy każdym pobraniu eksperta jest również pobierany użytkownik. Skoro ekspert to user, to warto wyświetlać domyślnie imię i nazwisko. Aby to osiągnąć w klasie Expert (Expert.class.php) dodałem taki kod:

/**
 * Expert
 *
 * This class has been auto-generated by the Doctrine ORM Framework
 *
 * @package    ask-expert
 * @subpackage model
 * @author     Beriko Software, Grzegorz Bernaś
 * @version    SVN: $Id: Builder.php 7490 2010-03-29 19:53:27Z jwage $
 */
class Expert extends BaseExpert
{
	public function preDqlSelect($event)
	{
		$params = $event->getParams();
		$query  = $event->getQuery();
		$alias  = $params['alias'] . '.sfGuardUser';
		if ((!$query->isSubquery() || ($query->isSubquery() && $query->contains(' '.$params['alias'].' '))) && !$query->contains($alias))
		{
			$query->innerJoin($alias);
		}
	}

	public function __toString() {
		return $this->getSfGuardUser()->getFirstName().' '.$this->getSfGuardUser()->getLastName();
	}
}

Ale to nie wszystko, kod nie będzie działać jeżeli nie włączymy DQL’a (Doctrine Query Language). Aby to zrobić w pliku ProjectConfiguration.class.php do klasy ProjectConfiguration dodaj taki kod:

class ProjectConfiguration extends sfProjectConfiguration
{
	public function configureDoctrine(Doctrine_Manager $manager)
	{
		$manager->setAttribute(Doctrine_Core::ATTR_USE_DQL_CALLBACKS, true);
	}
}

Dzięki temu nie mam dwóch zapytań tylko jedno :) Nie wiem jaki to będzie miało wpływ na wydajność i pracę w przyszłości kiedy mój projekt edukacyjny urośnie, ale czas pokaże.

W dniach 16 – 18 grudnia uczestniczyłem w szkoleniu Wzorce projektowe .NET, na szkoleniu zorganizowanym przez Integral Technologies Sp. z o.o. zapoznałem się z następującymi zagadnieniami:

  • Wzorce architektoniczne: koncepcje obiektowości na przykładzie praktycznej aplikacji wielowarstwowej,
  • Wzorce projektowe – omówienie na przykładach C#,
  • Wzorce bezpieczeństwa w aplikacjach .NET,
  • Wzorce dla rozwiązań rozproszonych,
  • Wzorce analityczne – modelowanie architektury za pomocą VSTS wraz z tworzeniem testów,
  • Wzorce implementacyjne – dobre zwyczaje programowania w C#,
  • Wzorce dla ASP.NET (dobre zwyczaje pisania stron webowych, MVP, MVC, REST itp.),
  • Wzorce dla aplikacji desktopowych.

Szybkie jednodniowe szkolenie teoretyczne na temat SOA. Zostało ono przeprowadzone w polskiej siedzibie Oracle. I powiem szczerze, że strasznie się wynudziłem – teorii jest niewiele, ale nauczyłem się, że można o niej mówić przez bite 7 godzin…

Zostały przedstawione następujące zagadnienia:

  • Introduction to SOA,
  • The SOA Six-Domain Model cz I,
  • The SOA Six-Domain Model cz I – practis,
  • The SOA Six-Domain Model cz II,
  • The SOA Six-Domain Model cz II – prctis,
  • Implementing SOA with BEA Products,
  • Implementing SOA with BEA Products – practis.

W ramach przygotowań do egzaminu Sana zrobiłem pierwsze dwa testy na JavaBlackBelt. Oto wyniki:

Java SE – Basic
czas: 23 minuty 16 sekund
wynik: 90% (2 niepoprawne odpowiedzi na 20 możliwych)

OO for Java – Basic
czas: 13 minut 13 sekund (pechowo? ;))
wynik: 76% (3 niepoprawne odpowiedzi na 13 możliwych)

Może wyniki nie powalają, ale jest to dobry start w drodze do SCJP 6. Dzięki temu zdobyłem żółty pas, czas pójśc o krok dalej.

Oczywiście jak to zwykle bywa, zamiast pilnie zakuwać API Doc pochłonęła mnie praca…

W dniach 16 – 20 kwietnia 2007 odbyłem szkolenie w firmie Altkom w zakresie programowania w języku Java. Poniżej przedstawiam opis oraz program szkolenia:

Kurs jest przeznaczony jest dla osób chcących nauczyć się projektować i budować aplikacje przy użyciu języka Java w wersji 5.0.

Oczekiwane przygotowanie słuchaczy:
Znajomość środowiska Windows, pożądane doświadczenie w programowaniu w innym języku obiektowym lub strukturalnym (C, C++, PLSQL, Pascal itp.)

Continue reading

News mocno spóźniony – ale jak to mawiają, lepiej późno niż wcale. W dniach 26-28 luty brałem udział w szkoleniu na temat Adobe LiveCycle Policy Server.
Szkolenie dotyczyło zabezpieczeń dokumentów PDF w oparciu o serwerowe rozwiązania Adobe. Rozwiązanie idealna dla dużych firm, gdzie bezpieczeństwo dokumentów elektronicznych jest bardzo istotne.Continue reading