Archive for the 'Programming' Category


Nowy projekt + dobry promotor = praca dyplomowa

Ponieważ udało mi się uzyskać zgodę na realizację projektu, o którym wspominałem w poprzednim poście, w ramach mojej pracy dyplomowej, jestem wniebowziety. Oczywiście wiąże się to z paroma problemami, jak bardzo mało czasu na rozpracowanie takiego systemu, jaki chciałbym zrobić i sądzę, że do obrony nie uda mi się wprowadzić wszystkich funkcjonalności, które chciałbym widzieć w swoim systemie. Nie mniej poniżej znajdziecie wstępną dokumentację projektu.

Oczywiście wszystko idzie bardzo powoli, bo dopiero uczę się technologii J2EE, więc wiele rzeczy sprawdzam na żywo, jak będzie działało, testuję nowe narzędzia, itd. Jeszcze niestety stosuję przymiarki do ostatecznych rozwiązań. Póki co mogę podzielić się swoimi wrażeniami w ramach tego, co poznałem już od strony serwera aplikacji.

Java Server Pages jest dziwne… ale z niego głównie korzystam przy szczątkowym layoucie do testowania postępów.

Servlety są fajne, ale dają mniejszą wygodę przy projektowaniu responsów, niż JSP. To takie programowe pisanie Stringów do strumienia wyjściowego. Większa kontrola nad przepływem danych i sterowaniem, mniejsza wygoda przy formowaniu stringów w jakiś w miarę estetyczny sposób.

względem PHP - już samo JSP daje większą wygodę, ze względu na tagi, które są najdziwniejszym, ale bardzo ciekawym elementem w JSP. Właściwie poza wbudowanymi bibliotekami tagów, z których możemy korzystać, zawsze możemy napisać własne tagi, które będą składniowo przypominały html, ale wykonywały jeszcze dodatkowe zadania.

Dodatkowo super funkcjonalnością są filtry do servletów, załatwiają choćby sprawę headerów dodawanych masowo do wszystkich plików. Zamiast ręcznie dodawać do każdego pliku spełniającego kryteria (w szczególności np do wszystkich), robimy sobie filtr, który dodaje do response’a odpowiedni ciąg znaków (chociaż ich rola nie ogranicza się do tego)

Kolejną super kwestią jest choćby ServletContext, świetny sposób na to, by wszyscy użytkownicy działali na tych samych instancjach zmiennej, coś na zasadzie zmiennych globalnych, w ramach Deploy’a.


Dokumentacja

Posted on 12 November 2009
Under: Programming | 3 Comments »

Study, study, study, study, J2EE, study… Aha… i nowy projekt

Still no time for anything. Zacząłem naukę Java Enterprise Edition, w planach Hibernate, Spring, Struts… i by się miło uczyło będę wdrażał całkowicie nowy projekt bazujący trochę na pomyśle, który opisałem tutaj daaawno temu.

Otóż pomysł polega na wykorzystaniu Character Creatora do systemu D&D (wyszła rok temu 4 edycja, czas coś zrobić). Jednak CC ma stanowić tylko jeden z modułów aplikacji. Sam system zaś ma zarządzać kontami użytkowników, którzy z kolei tworzą sobie postaci do gry w D&D. Następnie udostępniają swoje postaci do sesji dla MG prowadzącego rozgrywkę w realu. Całe zarządzanie Punktami Doświadczenia, a więc i levelowaniem postaci będzie zrzucone właśnie na system. MG decyduje, ile przyzna PD konkretnym graczom (albo całej drużynie), a gracz może rozwinąć postać tylko w momencie, gdy liczba PD na to pozwala. Póki postać jest udostępniona MG, wszystkie zmiany w postaci są do wglądu przez niego, a nawet kontrolowane ich wprowadzenie (np. jeśli MG stwierdzi, że moment nie jest najlepszy na levelowanie postaci, blokuje taką możliwość nawet, jeśli zgromadzone PD na to pozwalają).

Dokładniejsza specyfikacja wkrótce. Nie trzeba wspominać, że wszystkie restrykcje biznesowe na tworzenie postaci również jest zrzucone na system (niedostępność pewnych opcji, jeśli wymagane są dodatkowe np. umiejętności do ich wyboru) Projekt będzie się rozwijał o różne pomocnicze narzędzia w całym procesie gry.

Posted on 5 August 2009
Under: Programming, General | 6 Comments »

JFileTree & no time for nothing

Wreszcie zaczęły się wakacje, ale czasu nie przybyło. Tak czy inaczej o to prezentuję swoją klasę, która wraz z małym dodatkiem pojawiła się w mojej bibliotece. MP na razie nie ma - mocna praca nad projektem do pracy, więc nie chce mi się wymyślać tematu MP. Jak ktoś podrzuci, może się zajmę.

Klasa to JFileTree i dziedziczy ona po JTree ze standardowej biblioteki swing. Co nowego? Konstruujesz za pomocą prostego konstruktora JFileTree(File rootDirectory), lub  wogóle bez parametrów, by uzyskać dostęp do całego systemu plików. Pliki pobierane są nie przez listowanie folderów z klasy File, ale poprzez klasę FileSystemView, która poza kilkoma innymi narzędziami, dba o to, by to co ukryte, takie pozostało.

Klasa również obsługuje obiekty FileFilter, by określić, jakie dane mają być wyświetlane w drzewie. Generalnie sporo funkcjonalności zaczerpniętych jest z klasy JFileChooser. Dodatkowo domyślny CellRenderer wyświetla ikony pobrane z natywnego systemu. Poniżej kilka screenów z działania klasy. Wysoka rekurencyjność przy wczytywaniu drzewa wyeliminowana dzięki dogrywaniu elementów na żądanie.

Dodatkowo z klasy można korzystać w IDE NetBeans przy graficznym tworzeniu aplikacji. Docelowo klasa ma być wyposażona w analogiczną do obecnych w JFileChooser metodę showFileSelectDialog.

Po szczegóły zapraszam na stronę api mojej biblioteki.

[edit]

Klasa obecnie obsługuje już wyświetlanie okna dialogowego do selekcji plików. Dodatkowo w bibliotece znalazła się klasa do przekształcania Stringów do postaci nie powodujących kolizji przy parsowaniu HTML, lub XML (np. “&lt;” zamiast “<”), kilka drobnych narzędzi dodanych do tej klasy. Szczegóły ponownie w javadoc.



qbixlib - biblioteka gotowa do ściągnięcia i używania
javadoc - api mojej biblioteki
qbixlib javadoc - api do ściągnięcia w postaci archiwum zip

Posted on 5 July 2009
Under: Programming | 2 Comments »

Brak MP i początki nowego projektu

Po długiej przerwie wracam do życia, aczkolwiek bez liniki kodu dla publiki. Moje obecne prace skupione są na aplikacji, która będzie działać wewnątrz firmy… Że formalnie nie należy to jeszcze do moich obowiązków (trzeba się jakoś sprzedać), robię to po pracy. Z tego powodu na dziś nie przygotowałem żadnego MiniProgramu… Drugi powód jest taki, że zwyczajnie nie miałem czasu i ochoty na wymyślenie pomysłu dla MP. Tradycyjnie wszelkie pomysły mile widziane w komentarzach.

No i wracając do projektów. Zacząłem rozmyślać nad uruchomieniem nowego projektu. Kolejny multicommunicator, ale…

  • Obsługuje różne protokoły różnych innych komunikatorów (nie ma własnego)
  • Zakłada implementację wszystkich funkcjonalności danego komunikatora (przesyłanie plików [które obecnie średnio działa np. poprzez protokół gg w tlen], rozmowy głosowe, skanowanie poczty [jak w przypadku tlena])
  • Protokoły, jak to się już obecnie przyjęło, działałyby na zasadzie pluginów, co daje łatwy sposób dodawania nowych pluginów i powoduje, że mogę przygotować jakieś małe sdk do ich robienia.
  • Projekt zakłada multiplatformowość

Mówiąc szczerze jeszcze nie wgryzałem się w dostępne w necie protokoły i niewykluczone, że rzeczywistość jeszcze zrewiduje moje poglądy na temat możliwości, lub sensu przedsięwzięcia. Tym czasem pozdrawiam.

Posted on 12 May 2009
Under: Programming, General | No Comments »

MP#3 & MP#4 i pare słów na temat NetBeans na Ubuntu

W końcu gdy znalazłem trochę czasu na pisanie. Oto dwie aplikacje w ramach projektu MiniProgram. Jedna to wariacja na temat proponowanego w komentarzach Panica.

Druga aplikacja, to saper lub minesweeper, jak kto woli. Też dość niestandardowy, bo zrobiony na hexach (sześciokąty - dla nieanglojęzycznych). Wydawało się, że będzie więcej problemów, ale jednak nie było aż tak inaczej. W sumie zrobiłem model danych do sapera, który dość łatwo przerobić na dowolne siatki, więc wiecej czasu poświęciłem na przypomnienie sobie zabaw na Graphics’ach.

Jeśli chodzi o grafikę, to nie jest to moja własność - jest całkowicie skopiowana z gnomemine - saper w wersji linux’owej

Ze względu na wspomnianą zabawę wzbogaciłem swoją bibliotekę o kolejne metody, tym razem tworzące BufferedImage na podstawie ścieżki dostępu. Niestety nie napisałem tego w docsach, jeśli nie zapomnę, to przy następnej okazji się pojawi - ścieżka dostępu we wszystkich ImageUtils prowadzi od pliku z klasą wywołującą, nie od folderu, w którym jest uruchamiany plik. Dzięki temu można przechowywać grafikę wewnątrz archiwum jar i udostępniać całą aplikację w jednym archiwum. Bazuje to na mechanizmie refleksji i klasach, nie na plikach, dzięki czemu było to możliwe.

Obie aplikacje, wraz z źródłami, jak również bibliotekę można pobrać z linków poniżej. Biblioteka jest również dołączona do samej aplikacji Saper. Życzę miłej zabawy, a sobie licznych komentarzy i kolejnych pomysłów.

I w końcu oberwie się również NetBeans’owi. Pomijając fakt, że na linux GDI dla swingów nie do końca działa (nie mogę zmieniać wielu właściwości, ale również wygląd okna, szerokość przycisków itd. różni się znacząco od tego zamieszczonego w GDI). Problem pojawia się również z zapisywaniem wersji za pomocą Subversion na dysk zewnętrzny z systemem plików NTFS. Część rzeczy dopisało, części nie… Obecnie staram sie nie stracić historii wersji i jednocześnie przywrócić stan repozytorium sprzed próby wprowadzenia zmian. Historia pokaże, czy się uda. W konkluzji mimo iż już zaczynałem lubić ubuntu niestety programowanie pozostanie u mnie domeną systemów spod znaku motyla.



qbixlib - qbixlib w wersji binarnej, do pobrania i używania
qbixlib javadoc - API do wspomnianej wyżej biblioteki
Saper - Wspomniany już saper na hexach
Panic - kliknij i spróbuj kliknąć jeszcze raz, jak najszybciej się da

Posted on 22 March 2009
Under: Programming | No Comments »

Simple Installer

Ponownie pewien postęp na drodze do stworzenia mojej aplikacji i właściwie ostatni krok do tego, by można było ją udostępnić testerom. Najpierw kilka warunków, które musiały być spełnione przez mój installer:

  • instaler i rzeczy instalowane muszą zawierać się w jednym pliku
  • możliwość wprowadzenia instalacji na koncie z ograniczeniami
  • program napisany w javie, bo obecnie jest mi to najbliższy język programowania

Może instaler jest słowem nadwyrost względem kodu, który napisałem, ale po dorobieniu GUI robi to, co do niego należy - kopiuje odpowiednie pliki w odpowiednie miejsca. Na podstawie klasy JShortcut, z której też w aplikacji korzystam, można dodać tworzenie skrótu na pulpicie, a w następnych wersjach byćmoże dodam skrót do autostartu i MenuStart. Na razie jest to bezwzględne minimum, by zapewnić jako taką wygodę w operowaniu.

Sposób korzystania bardzo prosty - do archiwum jar z instalerem i jakimś mainclassem do uruchamiania installera dogrywamy folder Install i ewentualnie Optional. W folderach umieszczamy pliki do skopiowania i tyla roboty - wystarczy stworzyć obiekt.

Druga sprawa to fakt, że chyba już na stałe przerzuciłem się na NetBeans. Ma kilka mankamentów, kilka skrótów rozwiązało moje poprzednie zastrzeżenia, więc jest ok. A dodatkowo ładnie generuje html bez żadnych pluginów.

Dodatkowo: nadal czekam na propozycje miniprogramów w komentarzach.


Linki i załączniki:
installer

Posted on 25 February 2009
Under: Programming | 5 Comments »

Updater

Wreszcie po sesji (częściowo zdanej) mam trochę czasu, by przysiąść do swojego projektu. Jednym z ważniejszych modułów przed wkroczeniem do fazy testów jest możliwość robienia w prosty sposób aktualizacji, by moi “testerzy” się nie męczyli kopiując co chwilę jakieś pliki, które modyfikowałem.

Poniżej prezentuję więc moją implementację prostego systemu aktualizującego:


Linki i załączniki:
updater

Posted on 10 February 2009
Under: Programming | No Comments »

Miniprogram #2 + kawałek filantropii

Tak się jakoś stało, że ostatnio zostałem poproszony o zrobienie małej pracy w C# na jeden z przedmiotów… Efektem jest gierka symulująca w pewnym ograniczeniu grę BlackJack z krupierem korzystającym z zasady tzw. miękkiej siedemnastki.

Program działa na jednej talii, ale zaimplementowane klasy obsługują dowolną ich liczbę. Jest możliwość sterowania również, czy krupier ma korzystać z wspomnianej zasady hit’owania przy miękkiej siedemnastce. Tym razem z uwagi na fakt, że jest to C#, dawno w tym nie pisałem i nie chce mi się oddzielać rzeczy potrzebnych od mniej potrzebnych związanych z projektem, a nie źródłami, nie zamieszczam źródeł. Program do ściągnięcia pod tym postem.

Drugą sprawą jest baner, który pojawił się po prawej stronie bloga. Nie jest to baner płatny, a raczej ideologiczny. Jestem dawcą krwi od 2004 roku i mocno popieram tę ideę. Obecnie są wielkie braki krwi w każdym z województw. Sam byłem świadkiem, jak w punkcie krwiodawstwa był pewien pan, który nie mógł mieć przeprowadzonej operacji, bo nie było odpowiedniej grupy. Szczęściem akurat ja miałem odpowiednią, ale to tylko kropla w morzu.

Jeśli nie robicie tego z choćby prozaicznego “mnie też może coś takiego spotkać”, to dodam:

  • masz dzień wolny od pracy, lub szkoły (dostajesz zaświadczenie i zgodnie z ustawą masz ten dzień normalnie pełnopłatny).
  • Dostajesz ekwiwalent w słodyczach za krew (zależnie od ośrodka, w moim ośrodku jest to 8 czekolad)
  • Po oddaniu 18 litrów jeździsz komunikacją miejską na legitymację krwiodawcy (da się to zrobić w 3 lata oddając regularnie płytki krwi)
  • Od zeszłego roku możesz odpisać ekwiwalent pieniężny od dochodu w rocznym zeznaniu podatkowym.
  • W jakichś przypadkach masz pierwszeństwo w kolejce (z krwią rzecz jasna na czele w wypadku takiej konieczności) w placówkach medycznych, niestety nie orientowałem się, jakich.

Jeśli twierdzisz “mam popularną grupę krwi, na co ona komu”, to pomyśl - jeśli jest ona tak popularna, to dużo więcej osób potrzebujących posiada tę właśnie grupę krwi, więc jest ona również cennym darem dla innych.

Po szczegóły odsyłam na stronę internetową krewniaków. Znajdziecie tam najbliższe punkty krwiodawstwa i informacje, co powinniście zrobić, by nie jechać na darmo.


BlackJack

Posted on 3 February 2009
Under: Programming, General | No Comments »

Miniprogram #1

Z nudów w czasie przerwy obiadowej bodajże, w pracy napisałem małą aplikacyjkę bazującą na czymś, co krążyło kiedyś kiedyś w internecie. A były to czasy modemów 56k i łączy, na których nawet takiej prędkości nie dało się osiągnąć. Do ściągnięcia pliczek i źródła w jednym zipie. Tak samo, jak autor bloga, o którym wspominałem, będę wdzięczny za propozycje minigierek/programów w komentarzach.

Obecna aplikacja ma kilka małych efektów, które niestety w 10 minut nie zostały wychwycone, a teraz mi się już nie chce tego zmieniać, np:
- po wciśnięciu prawym da się najechać na “tak”
- wystarczy wcisnąć spację, domyśny focus
- problem z rozmiarem okna (nie wszystko się mieści) pod Vistą.


podwyżka

Posted on 29 January 2009
Under: Programming | 4 Comments »

Mała reorganizacja

Dziś tylko taki aspekt dotyczący kształtu strony, niewiele raczej o samym programowaniu.

Pierwsze primo - na stronie “o mnie” dodałem swoje CV, bo zawsze jestem otwarty na propozycje. Zarówno zatrudnienia, jak i jakiegoś małego zleconka typu projekt na zaliczenie czy cuś.

Drugie primo - dodałem podstronę z downloadem, by było łatwo znaleźć coś, nad czym pracowałem, lub pracuję gdy pojawią się projekty w trakcie:]

Terzio - już spoza spraw organizacyjnych, co by nie był to post zupełnie nie związany z programowaniem - zmieniłem IDE, którym się posługuję. Dotychczas był to Eclipse, ale z przyczyn braku dobrych bezpłatnych wtyczek do projektowania swingów w Javie < JDK6 przerzuciłem się na NetBeans. Nie miałem za bardzo jeszcze czasu przy nim przysiąść, więc nie wiem jeszcze jak to będzie, ale tak na szybko to…

zalety:
- graficzne projektowanie swingów
- regiony (wtyczka cofee-bytes w eclipse przestała być rozwijana)

wady:
- jeśli masz w projekcie kilka klas z metodą main, za każdym razem pyta się, którą uruchomić, zamiast uruchomić ostatnią lub aktualnie otwartą.
- zawsze uruchamia projekt bierząco ustawiony jako główny

Jak trochę się z nim zapoznam, podzielę się swoimi wrażeniami.

Po czwarte: miałem zrobić na ćwiczeniach z Algorytmów i Struktur Danych mały system RSA. Wykładowca prawdopodobnie nie przewidział, że w Javie klasa BigInteger będzie miała wszystkie potrzebne metody zaimplementowane, jak muliplikatywna odwrotność, największy wspólny dzielnik, czy potęgowanie modulo (Dostępne dopiero od wesji JDK6). Chwilowo mam jeszcze problem z generowaniem kodu i kluczy (w półtorej godziny się nie udało wykryć błędu), więc już nie w walce o punkty, ale dokończę to coś w wolnym czasie i zamieszczę wraz z kodami.

I wreszcie piąte: zastanawiam się również nad takim małym projektem, jaki prowadzi autor tego bloga w celach autoterapeutycznych, czyli co dwa tygodnie jakiś programik, gierka - pozwoli to może się odprężyć i sprawi że będę coś pisał nawet, gdy nie będę miał natchnienia na kontynuowanie rozpoczętych większych projektów. Ale to już zostawiam na po sesji.

Się okazuje, że jednak więcej w sumie znowu po fachu, tym bardziej szczęśliwy pozdrawiam i do następnego razu.

Posted on 14 January 2009
Under: Programming, Site | No Comments »