Poniżej prezentuję wybrane projekty, z którymi miałem coś wspólnego...

Trochę się tego nazbierało - sam nie przypuszczałem, że aż tyle!  Użyj filtru, by ograniczyć ten wykaz →
Są tu programiki robione dla siebie, jak i takie na zamówienie. Są też projekty ze studiów oraz kilka gierek.

Docelowo część z tych programów będzie do ściągnięcia, niektóre nawet ze źródłami. Jeśli już teraz któryś Cię interesuje, napisz!

BossaAPI .NET Class Library

2011

Dom Maklerski BOŚ S.A. (jako pierwszy w kraju i wciąż chyba jedyny...) udostępnił niedawno klientom mechanizmy (tzw. API) pozwalające programistom na tworzenie własnych aplikacji do obsługi rachunku i składania zleceń na Warszawskiej Giełdzie Papierów Wartościowych. Potencjał tego ogromny, jednak interfejs jaki nam bossa zaoferowała - przynajmniej w tej pierwszej, pilotażowej wersji - doprawdy koszmarny :-(
Postanowiłem więc przygotować coś ciekawszego, prostszego w użyciu i bardziej uniwersalnego...
Głównie na własne potrzeby, ale również tak, by i inni mogli z tego z powodzeniem korzystać. I działania te zostały docenione! Biblioteka otrzymała Nagrodę Specjalną w "konkursie bossaAPI", w którym oceniano rozmaite aplikacje korzystające z tego API.

Ciekawostka: była to praktycznie pierwsza moja styczność ze środowiskiem Visual Studio, .NET i językiem C#.

.NET, C#

Niniejsza strona WWW

2009 - . . .

Oparta na autorskim frameworku w PHP, o którym niżej. Rozbudowywana pomału, wedle aktualnych potrzeb. Kiedyś, by podzielić się zdjęciami ze spływu kajakowego, powstał odpowiedni moduł - prosty "album" z obsługą też nagrań wideo, któremu wystarczy umieścić pliki w nowych folderach na serwerze, a reszta działa już sama: przeglądanie w różnych wielkościach, nawet w oryginalnej rozdzielczości aparatu, pobieranie całych zestawów na własny dysk. Teraz dodałem tę część z całą historią swoich programistycznych "potyczek" - jako uzupełnienie do Curriculum vitae. Kolejne moduły w planach, czekają na swoją okazję...

PHP, HTML, CSS, JavaScript

Samolicz kosztorysowy SYKAL i tematy z nim powiązane

1998 - 2010

Wyjątkowo nie mój prywatny projekt, a firmy której poświęciłem ostatnie 12 lat. W zespole 1..3-osobowym - początkowo jako pomocnik, po paru latach jako główny projektant i programista. SYKAL to system kosztorysowania robót budowlanych charakteryzujący się m.in. łatwością obsługi (stworzony dla budowlańców, którzy niekoniecznie nawet Worda potrafią obsługiwać). e-SYKAL to jego wersja przechowująca wszystkie dane na serwerze w Internecie (połączenie Delphi z PHP z MySQL). Zarówno "backend" e-SYKAL'a, jak i cała strona www.samolicz.pl (w tym sklep, obsługa płatności, forum i inne) działają też na moim frameworku PHP-Inside.

Delphi, BDE/DBase, PHP, MySQL

PPW - Portfel Papierów Wartościowych

2008 - . . .

Aplikacja wspomagająca analizę historii własnego rachunku giełdowego, do której nie trzeba ręcznie przepisywać wszystkich wykonanych operacji - importują się same na podstawie podanego "wyciągu" z rachunku. Ułatwia śledzenie stanu rachunku w czasie i zysków/strat na poszczególnych papierach, z inteligentnym uwzględnieniem też sytuacji nietypowych typu: odjęcie praw poboru, zamiana praw do akcji na akcje itp. Obsługa różnych biur maklerskich dzięki systemowi wtyczek. Otwarta architektura umożliwiająca wykorzystanie tak zaimportowanej bazy również w innych projektach.

Projekt rozpoczęty w ramach pracy magisterskiej (wg własnego pomysłu, który zresztą zrodził się jeszcze parę lat wcześniej), niestety z braku czasu utknął mniej więcej w połowie. Cały czas jednak z nadzieją, że niedługo do niego wrócę...

Java, NetBeans, JavaDB (Derby)

PHP-Inside - Clean & Simple PHP Template Engine / Framework

2008 - . . .

Zbiór klas PHP5 i kilku plików inicjalizujących, których zadaniem jest ułatwienie tworzenia nawet bardzo złożonych witryn www. Zaprojektowany z naciskiem na: czytelność (zarówno kodu PHP, jak i części HTML, dzięki zastosowaniu systemu szablonów z bardzo prostymi znacznikami), elastyczność i łatwość rozbudowy (dodanie podstrony - to stworzenie nowego pliku .html lub .php, a dodanie zupełnie nowego znacznika - to napisanie dokładnie jednej metody w istniejącej lub nowej klasie, nie trzeba edytować żadnych plików konfiguracyjnych, definiować zależności itp.), bezpieczeństwo (m.in. odporność na przekazanie przez użytkownika niespodziewanych argumentów) oraz możliwie efektywne pozycjonowanie strony. I wszystko to przy zachowaniu lekkości kodu i niewielkich wymagań co do serwera. Docelowo kod framework'a zamierzam udostępnić wszystkim zainteresowanym i znajdzie się tutaj cały dział na jego temat, a póki co - tylko kilka słów na temat jego najważniejszych cech...

Treść kolejnych podstron zapisujemy w zwykłych plikach .html ze znacznikami typu: ${KLASA:Metoda} oraz podobnymi dla instrukcji warunkowych, tworzenia pętli itp. Framework automatycznie ładuje daną klasę i wywołuje jej odpowiednią metodę. Daje to wyraźne odseparowanie kodu PHP od statycznej części HTML-owej. Kod JavaScript oraz style CSS również zapisujemy w oddzielnych plikach .js i .css - wspólnych dla całej witryny lub indywidualnie przy konkretnym pliku .html. To nazwy tych plików i ich ułożenie w kolejnych podkatalogach definiują domyślne adresy URL poszczególnych stron witryny (choć system jest na tyle elastyczny, że te domyślne ustawienia zawsze można zmienić, np. pod kątem SEO). Również wspólne elementy (np.: główny szablon całej strony, wzorzec nagłówka itp.) - zwykle definiujemy raz, globalnie, ale w każdej chwili możemy podmienić dla wybranej podstrony.

System posiada wbudowane klasy do m.in.: błyskawicznej budowy zaawansowanego menu (do poruszania się między stronami), obsługi formularzy (z zapamiętywaniem i weryfikacją wprowadzanych przez użytkownika danych), obsługi błędów i debugowania, obsługi zapytań AJAX, inteligentnego przetwarzania plików CSS/JS oraz wiele innych pomagających w tworzeniu wydajnego i zoptymalizowanego dla wyszukiwarek internetowych serwisu.

PHP, HTML

Komponenty do Delphi

1998 - 2008

większość prezentowanych niżej komponentów działa nawet pod Delphi3, niektóre tylko wymagają Delphi4

TFindFiles - kompleksowe rozwiązanie do wyszukiwania plików w podanych katalogach (wraz z podkatalogami, z zaawansowanymi możliwościami filtrowania plików po nazwie, atrybutach, a nawet ich zawartości oraz z opcją ewentualnego sortowania wg różnych kryteriów). To wszystko bardzo łatwe w użyciu i niesamowicie szybkie! Gwarantuję: nie ma pod Windows szybszej metody na przeszukanie np. całego dysku, a jak najbardziej można to zrobić wieeelokrotnie wolniej, jeśli ktoś nie wie na co zwracać uwagę.

TRawPrinter - drukowanie pod Windows, ale w trybie tekstowym, korzystając m.in. z wbudowanych czcionek drukarki. Były kiedyś takie czasy, że miało to ogromny wpływ na szybkość, a czasem i jakość wydruku... W przeciwieństwie do "specjalistów", którzy coś takiego próbowali robić komunikując się bezpośrednio z portem drukarki, ta metoda współpracuje ze "spoolerem" (czyli wydruki trafiają do standardowej, systemowej kolejki wydruków) i obsługuje też drukarki sieciowe albo podłączone na USB.

THtmlParser - lekki komponent do przetwarzania, jak również aktualizacji, dowolnego tekstu HTML. Dziś, w czasach wszechobecnego XML'a, to może nic specjalnego, ale kiedyś - znaleźć prosty i szybki kod, i to bez uzależniania się od zewnętrznych bibliotek - nie było łatwo.

TDrawEquation - coś a'la zwykły TLabel, ale potrafiący wyświetlić niemal każde wyrażenie matematyczne: ułamki, pierwiastki, znaki z alfabetu greckiego, indeksy górne i dolne, a nawet macierze - kolejne elementy praktycznie dowolnie zagnieżdżane jeden w drugim i wszystko automatycznie skalowane wraz z wymiarami komponentu. Wyświetlany wzór, definiowany z wykorzystaniem prostego języka opisu z zaledwie kilkoma słowami kluczowymi, możemy modyfikować na bieżąco w trakcie działania programu.

TThreadMgr - komponent ułatwiający uruchamianie dłuższych operacji w oddzielnym wątku programu, przejmujący też na siebie wiele problemów, o jakich należy pamiętać tworząc aplikacje wielowątkowe. Po uaktywnieniu tworzy jeden wątek, który może cyklicznie wykonywać jakąś pracę (zdefiniowaną w zdarzeniu OnJobExecute), inicjalizowaną za każdym razem metodą StartNewJob. Komponent, jeśli trzeba, stara się możliwie szybko przerwać poprzednie zajęcie i uruchomić to nowe (może być od razu, może być z zadanym dowolnym opóźnieniem - by ograniczyć niepotrzebne wywołania, gdy np. restartujemy zadanie po wpisaniu każdej kolejnej literki w polu wyszukiwania). Udostępnia zdarzenia wywoływane przed, w trakcie lub po ukończeniu zadania (synchronizowane z głównym wątkiem aplikacji). Ułatwia także obsługę wyjątków, jakie powstaną w tym wątku.

TMyIniFile - klasa zastępująca standardowe TIniFile, które jak się okazało przy zapisywaniu większych plików pod Windows2000, potrafi być koszmarnie wolne. Przy okazji zmieniony trochę interfejs (dla wygodniejszego dostępu do poszczególnych sekcji pliku .ini), tak więc nie jest to całkowicie kompatybilne z TIniFile.

TEzTwain - komponent obudowujący darmową bibliotekę EZTW32.DLL do komunikacji z praktycznie dowolnym skanerem przez interfejs TWAIN. Stworzony na własne potrzeby m.in. do programu "ScanMachine", o którym niżej.

TTiffFile - jak tego potrzebowałem jakieś naście lat temu, nie było żadnych darmowych komponentów, ani nawet zewnętrznej biblioteki .dll do odczytu obrazków TIFF. No to usiadłem nad specyfikacją formatu i napisałem swój :-)

TPJGraph - niesamowicie prosty (ok. 200 linii kodu), acz skuteczny komponent do szybkiego rysowania wykresu liniowego dowolnych danych (na osi odciętych kolejne piksele ekranu, oś rzędnych to dowolne liczby rzeczywiste, automatycznie skalowane do dostępnej wysokości komponentu). Możliwość przewijania wykresu w poziomie, dowolnego ustalania kolorów, dorysowywania własnych elementów na wykresie.

TPJSpin - kontrolka do wygodnego wyboru wartości liczbowej za pomocą myszki, trochę jak te np. z Corel DRAW, ale lepsza i ładniejsza ;-) ... choć bez możliwości edycji wartości wprost z klawiatury.

TPJActiveBtn - przycisk, którego wygląd w całości definiujemy za pomocą trzech bitmap (dla różnych jego stanów), pozwalający na dodatek reagować na dłuższe przyciśnięcie wielokrotnym wywoływaniem zdarzenia, z dowolnie określoną częstotliwością.

TMovingPanel - zwykły TPanel, który dodatkowo można "złapać" myszką i przesuwać, w obszarze o ustalonych granicach.

TPanelEx - kolejna pochodna standardowego TPanel, ale z masą jeszcze dodatkowych właściwości i zdarzeń. Oferuje m.in. wielowierszowe "Caption", automatyczne dopasowywanie wymiarów do wyświetlanego tekstu, udostępnione zdarzenia do obsługi klawiatury (brakujące OnKeyDown/Up, OnKeyPress), obsługi myszki (OnMouseEnter/Leave i bardziej zaawansowane: OnHitTest, OnSetCursor), do rysowania bezpośrednio na panelu (OnBeforePaint/AfterPaint oraz OnEraseBkgnd).

Delphi

BSTW - Bezpieczne Środowisko Testowania Wiedzy

2006

Praca inżynierska, dwuosobowa (drugi kolega to Adam Mścisz). Naszym celem było stworzenie systemu do przeprowadzania testów wyboru (zaliczeniowych itp.) na komputerach w sieci (np. w sali laboratoryjnej).

Powstały trzy moduły: administracyjny (dla nauczyciela, do definiowania testów i analizowania wyników), moduł testujący (dla uczniów) oraz serwer (organizujący pracę tych powyższych i pośredniczący w ich dostępie do bazy danych). Komunikacja między komputerami szyfrowana dzięki SSL, dostosowanie do różnych serwerów SQL, uwierzytelnianie przez system wtyczek o otwartej architekturze (jako przykład klucze prywatne/publiczne, a docelowo przystosowane m.in. dla czytników biometrycznych).
System uodporniono również na sytuacje awaryjne typu: utrata połączenia w trakcie testu, restartu komputera itp.

Java, NetBeans, MySQL, SSL

PUTZA - Strona WWW mojego rocznika Informatyki na Politechnice (zaoczne)

2004 - 2006

Pierwszy większy projekt w PHP, pierwowzór niektórych rozwiązań w opisanym wyżej PHP-Inside. Stworzony trochę dla zaspokojenia bieżących potrzeb naszej grupy, a trochę dla "sprawdzenia się" i przećwiczenia możliwości PHP, MySQL, mechanizmu bezpiecznej autoryzacji użytkowników itp. Stronka stworzona całkowicie od zera, wg mojego własnego pomysłu - ostatecznie zastąpiła nie tylko grupowe forum dyskusyjne oraz serwer do wymiany plików, ale od początku oferowała m.in. posegregowane informacje nt. przedmiotów, kontaktów do wykładowców i innych studentów z grupy oraz przydatny "terminarz", który błyskawicznie informował nas jakie mamy w najbliższych dniach zajęcia, jakie zaliczenia, o której godzinie, w jakiej sali, które już się odbyły itd.

PHP, HTML, CSS, MySQL

Tablet

2006

Program napisany w ramach zaliczenia przedmiotu Komunikacja człowiek-komputer, wg pomysłu dr. Jacka Jelonka, służący do wizualizacji danych z tabletu (takiego bardziej profesjonalnego, rozpoznającego nie tylko siłę, ale i kąt nacisku rysika na powierzchnię), wykorzystywany w medycynie do analizy zdolności motorycznej rąk u chorych.
Przedstawia obraz całej "ścieżki" narysowanej rysikiem na podstawie danych zarejestrowanych przez ww. tablet - również w formie animacji z dowolnie wybraną prędkością - kolorując poszczególne punkty wg wybranych kryteriów (nacisk, azymut, nachylenie, chwilowa prędkość). W projekcie pomagał kolega z grupy, Adam Mścisz.

Delphi

Trans-West Organizer

2004 - 2006

Aplikacja stworzona na zamówienie firmy zajmującej się sprzedażą rozmaitych części i urządzeń przemysłowych. Początkowo program służył do ewidencji odbieranych i wysyłanych przesyłek, telefonów oraz jako prosty terminarz. W kolejnej wersji doszedł moduł do organizacji całego procesu obsługi klienta: począwszy od otrzymanego od niego zapytania, przez kontakt z producentem lub dostawcą danej części, kolejne etapy negocjacji ceny, aż po ostatecznie złożone zamówienia i ich potwierdzenia. I to wszystko w formie jednej bardzo rozbudowanej, ale jednocześnie przejrzystej tabeli.
Cały system zbudowany w Delphi4, pracujący w sieci, z wykorzystaniem serwera bazy danych Firebird SQL, z obsługą wielu użytkowników i oddzielnym programem administracyjnym do zarządzania bazą danych.

Delphi, Firebird

ftpsync

2003

Używany przeze mnie regularnie przez wiele lat programik do synchronizacji lokalnych katalogów z plikami stron www z serwerem FTP, gdzie te strony były hostowane. Błyskawicznie przenosił zmiany w jedną i w drugą stronę, na podstawie dat modyfikacji plików (uwzględniając różnicę strefy czasowej, jak i ograniczenia dokładności czasu dla starszych dat na serwerze), obsługiwał rekurencyjnie podkatalogi, pomijając ewentualnie wskazane pliki/katalogi. Program konsolowy (bez GUI), sterowany głównie za pomocą pliku .ini, do komunikacji z serwerem wykorzystywał bibliotekę Synapse.
Dziś "wyparty" przez system kontroli wersji (svn), jak również wbudowane dopiero parę lat temu funkcje Total Commandera.

Delphi, Synapse

Sokoban

2003

Program napisany w czystym języku C na zajęciach z Programowania niskopoziomowego. Klon znanej gierki, w której nasz "magazynier" musi poprzestawiać rozrzucone na planszy "paczki" - tak, by wszystkie znalazły się z powrotem na wyznaczonym obszarze. W przeciwieństwie do oryginału, ten Sokoban - gdy się np. zablokuje - potrafi się cofnąć o dowolną liczbę ruchów (licznik wykonanych ruchów oraz czas pozostają jednak bez zmian). Układ planszy każdy może zdefiniować po swojemu - wystarczy przygotować zwykły plik tekstowy, gdzie znaki w kolejnych wierszach/kolumnach określają wprost zawartość danego pola.

Borland C, BGI

SAFARI Trajectory Planner

2002

SAFARI to unikatowy robot skonstruowany przez pracowników Politechniki Poznańskiej, potrafiący wspinać się np. po wieżowcach. Mi przypadła przyjemność zaprojektowania od nowa bazowej biblioteki klas C++ oraz widgetów QT reprezentujących takiego robota, jego parametry, dowolnie zdefiniowaną trajektorię... i potrafiącej zobrazować wszystkie ruchy wykonywane przez podstawowe elementy konstrukcji robota. Wszystko po to, by ułatwić testowanie algorytmów sterowania robotem oraz wizualizację jego działania. Wykorzystano bibliotekę QT (TrollTech), aby kod można wykorzystać na dowolnej platformie - zarówno na samym robocie, jak i zwykłych komputerach pod różnymi systemami operacyjnymi.

Częścią projektu była też pierwsza aplikacja wykorzystująca tę bibliotekę - planer trajektorii robota - która, po wskazaniu myszką kolejnych punktów pośrednich (i żądanej orientacji robota w każdym z nich), pozwalała m.in. na obejrzenie animacji pokonywania przez niego całej zadanej trasy.

C++, QT

Progowanie

2002

Aplikacja zbudowana w ramach pracy przejściowej, częściowo związana z przedmiotem Systemy wizyjne, mająca na celu testowanie algorytmów do wstępnej obróbki obrazu z kamery np. robota. Zanim taki robot będzie w stanie rozpoznać swoje otoczenie, musi m.in. odnaleźć na rysunku krawędzie poszczególnych obiektów. A jeszcze wcześniej powinien obraz ten "oczyścić" ze wszystkich zbędnych informacji - i tym właśnie zajmuje się ta aplikacja. Kolejno: gradientowanie (według dowolnie zdefiniowanej maski filtracyjnej albo metodą Deriche'a), pocienianie krawędzi, aż po ostateczne progowanie (jednym z sześciu wbudowanych algorytmów). Użytkownik może oglądać każdy z tych etapów pośrednich, eksperymentować z ich parametrami, wyświetlić histogram obrazu oraz oczywiście zapisać dowolny z wygenerowanych rysunków na dysk.

C++ Builder

identRIV

2001

Program na zaliczenie przedmiotu Identyfikacja obiektów sterowania (Automatyka), prezentujący działanie tzw. metody RIV do rozpoznawania parametrów obiektu na podstawie znanych tylko przebiegów sygnału wejścia oraz wyjścia z tego obiektu. Program umożliwia zdefiniowanie przez użytkownika praktycznie dowolnego obiektu (opisanego podanym wzorem transmitancji), rodzaj zadanego sygnału wejściowego oraz zakłóceń. Po czym zamodeluje działanie tego obiektu, wyświetlając wyniki na wykresach... i spróbuje na podstawie "odczytanych" wartości sygnału wyjściowego odgadnąć, jaki to obiekt został mu zdefiniowany.

C++ Builder

Obroty

2000

Program powstały jako praca dodatkowa z przedmiotu Podstawy Robotyki, ma na celu ułatwienie każdemu zapoznania się z wykorzystywanymi tam bardzo często operatorami obrotu układu współrzędnych 3D.
Z wykorzystaniem grafiki trójwymiarowej (OpenGL), wyrazistych animacji oraz wglądem do podstawowej teorii na ten temat - wyjaśni każdemu "młodemu" Robotykowi, co to jest macierz kosinusów kierunkowych, co to kąty Eulera i jak ich konkretne wartości przekładają przekładają się w praktyce na wzajemne ułożenie względem siebie dwóch trójwymiarowych układów współrzędnych.

Delphi, GLScene

Zdjęcia

2000

Pełnoekranowa przeglądarka zdjęć np. z wakacji, stworzona do nagrania np. na płytę CD i robienia pokazu w większym gronie. Z przewijanymi na dole ekranu opisami, możliwością uruchomienia automatycznego pokazu, jak i ręcznego przełączania zdjęć, a także opcją powiększania interesujących fragmentów.

Delphi

pjPlayer

2000

Odtwarzacz plików .avi, korzystający z DirectX oraz dość oryginalnej metody buforowania dekodowanych strumieni obrazu i dźwięku (przetwarzanych "na zapas", w oddzielnych wątkach). Stworzony trochę dla zabawy, a trochę w ramach eksperymentu - na ile takie podejście pozwoli poprawić płynność odtwarzanego filmu na słabszych komputerach. I efekty były nawet obiecujące :-) Ale równocześnie sprzęt tak poszedł do przodu i tyle kolejnych, coraz lepszych "playerów" się pojawiało, że nie było sensu tego dalej rozwiajać.

Delphi, DirectShow

ScanMachine

2000

Kto próbował korzystać z oprogramowania dołączanego do skanerów "w zeszłym wieku" (a przynajmniej do tych tańszych), wie jak toporne to były narzędzia. Tym bardziej, gdy trzeba było zeskanować np. kilkadziesiąt stron jakiegoś dokumentu...

Zrobiłem więc sobie programik, który korzystając ze standardowego interfejsu TWAIN, pozwalał m.in.: ustawić raz parametry (rozdzielczość, kolory itp.) i kliknięciem jednego przycisku rozpoczynać skanowanie kolejnych stron - zapisując je automatycznie w kolejno numerowanych plikach we wskazanym katalogu albo... od razu wysyłając na drukarkę (takie ksero, na dodatek z możliwością zmniejszania stron, np. do 2 lub 4 na jednej kartce).

Delphi, TWAIN

WinBuddy

2000

Niewielki programik, który integrował w sobie różne drobne funkcje przydatne w codziennym korzystaniu z komputera. Oczekiwał na pasku zadań na swój "moment" i udostępniał żądaną opcję po praktycznie jednym kliknięciu myszką - nawet klikanie na ikonkę w tray'u okazało się zbędne, gdyż panel programu ukazywał się już po najechaniu tam myszką :-) Przede wszystkim prosty notatnik z opcją szyfrowania wybranych notatek oraz automatycznego "zbierania" tekstów kopiowanych do schowka. Do tego np.: usypianie komputera, ekranu, dysków twardych, automatyczna podmiana tapet pulpitu oraz uruchamianie dowolnych innych aplikacji.

Innym projektem, który zrodził się obok tego, był jeszcze mniejszy "starter". Programik do błyskawicznego wywoływania rozmaitych funkcji Windowsa lub uruchamiania innych programów za pomocą w pełni definiowalnego, wielopoziomowego menu, sterowanego za pomocą tylko kilku klawiszy (góra, dół, enter, escape i ewentualnie cyfry 0..9 - łatwe do powiązania np. z pilotem). Obsługiwał zaawansowane sterowanie mikserem karty dźwiękowej, rozdzielczością i wygaszaczem ekranu, restartowanie systemu, uruchamianie tunera TV, muzyki itp.

Dziś podobnych programików jest w Internecie tyle, że aż trudno zliczyć. A i sam system operacyjny się mocno rozwinął, więc tego typu dodatki są już najczęściej zbędne. Ale... w czasach Win98 - mimo, że tak naprawdę nigdy niedokończone - nawet nie raz mi się przydawało.

Delphi

RACE

1999

W ramach projektu zaliczeniowego z przedmiotu Podstawy Informatyki (2. semestr) udało mi się, przy pomocy dwóch kolegów (Dominik Dekert, Marcin Emmons), zrealizować od początku do końca pomysł sprzed paru lat - grę wyścigową. Tym razem w języku C++ i bardziej "na skróty" (wykorzystanie biblioteki DJGPP do obsługi grafiki i uproszczenie widoku toru do statycznego rzutu z góry - bez jego przesuwania/obracania, po którym poruszają się tylko samochodziki). W zamian za to pojawiła się możliwość gry w sieci lokalnej (od 1 do 4 graczy - każdy przy własnym komputerze - ścigają się wspólnie po jednym torze), z wykorzystaniem protokołu IPX.
Tor, na którym odbywa się wyścig, można przygotować samemu. Wystarczy zwykła bitmapa, na której dołączonym edytorem oznacza się obszar samej nawierzchni (poza nią samochody są mocno spowolnione i wyraźnie tracą przyczepność) oraz kolejne "checkpointy", przez które gracz powinien przejechać, aby zaliczono mu okrążenie. Co do sterowania samochodem - możemy przyśpieszać, hamować, cofać... a zastosowany model fizyki pozwala m.in. na pokonywanie zakrętów "bokiem" w kontrolowanym poślizgu oraz "odbijanie" się od przeciwników (jak w opisanym niżej Bumber Cars).

C++, DJGPP

ProgTel - czyli "Najprostszy z możliwych Program Telewizyjny"

1999

Aplikacja pobierająca program telewizyjny ze wskazanej strony internetowej (parsująca kod HTML stron www - wtedy jeszcze nie istniało coś takiego, jak XMLTV ;-)) i pozwalająca na przeglądanie go w bardziej przejrzystej formie, ale przede wszystkim - konwertująca pobrane dane do formatu TVGuide używanego w aplikacji JTV (jeden z popularniejszych wtedy w naszej części Europy programów do oglądania telewizji za pomocą karty TV, autorstwa innego Polaka: Jarosława Kowalskiego).

Delphi

IconToGlyph

1999

Z Delphi zawsze był taki problem, że jako ikonkę do przycisków (tzw. "glyph") trzeba podać bitmapę... a przecież tyle wszędzie ładnych ikonek w normalnym formacie plików .ico. Zrobiłem więc mały programik, który wspomagał tę konwersję. Wystarczy przeciągnąć plik ikonki na okienko programu, ewentualnie ustawić jeszcze wymiary i kolor tła, i możemy zapisać to jako plik .bmp albo skopiować do schowka i tak wkleić wprost do Delphi.

Delphi

Random Image Viewer

1998

Pierwsze zlecenie od zupełnie obcego człowieka. I to od razu takiego z zagranicy :-) Mieszkaniec USA, polskiego pochodzenia (choć języka polskiego znał tyle, co nic), poszukiwał programisty na naszych grupach dyskusyjnych... no i się zgłosiłem.
Stworzony programik to przeglądarka plików graficznych, ale o dość nietypowych właściwościach (używana do komponowania wzorów na bodajże płytki albo tapety, które układała jego firma). Po pierwsze: wyświetlała dwa obrazki na raz (w drugiej wersji, zamówionej po kilku miesiącach, z możliwością ich dowolnego przesuwania myszką i nakładania na siebie), po drugie: wyświetlane obrazki wybierane były losowo spośród wszystkich plików we wskazanych katalogach dysku.
Na potrzeby tego programu stworzyłem m.in. własny komponent do odczytu plików graficznych w formacie TIFF.

Delphi

Plan Lekcji

1997

Program umożliwiający błyskawiczne przygotowanie eleganckiego wydruku szkolnego planu lekcji - takiego dla ucznia, nie dla całej szkoły. Prostego wydruku niewielkich rozmiarów, który można schować np. do piórnika. Po uruchomieniu wystarczy wybrać z listy przedmioty, które nas dotyczą, podać numery sal, wskazać dłuższe przerwy (by określić godziny rozpoczęcia kolejnych zajęć), a potem kilka ruchów myszką i mamy gotowy plan na cały tydzień.
Z tego, co pamiętam, programik parę razy trafił na płyty CD dołączane do różnych wydawnictw. O jednym wiem na pewno (Czarny Kruk), bo na ich prośbę przygotowywałem specjalną wersję na tę okazję.

Delphi

Moje pierwsze WWW

1997

W początkowych latach polskiego Internetu nie mogło zabraknąć i mojej prywatnej strony WWW :-) Hostowana na darmowych serwerach Polboxu, kodowana oczywiście ręcznie w HTML'u (Notatnik + Paint Shop Pro), wyglądała co prawda trochę "dziecinnie"... ale to była wtedy norma ;-) Znalazło się tam m.in. parę moich programów i gier do ściągnięcia (niektóre z nich opisane niżej) oraz zbiór kilkudziesięciu najważniejszych linków poukładanych na jednym ekranie - pełniący rolę strony startowej dla przeglądarki.

HTML, JavaScript

Teacher

1996

W skrócie: SuperMemo dla ubogich ;-) A poważniej: program do wspomagania nauki rozmaitych zbiorów danych, np.: słówek języka obcego, faktów historycznych, danych z geografii itp. itd. Przydawał się przede wszystkim na ostatni dzień przed jakimś sprawdzianem, kiedy trzeba było naraz przyswoić sobie dużo informacji albo chociaż sprawdzić co się pamięta, a co jeszcze nie...

Wystarczy przygotować plik tekstowy z opisem danych: kolejne pytania/zagadnienia zorganizowane w ustaloną dowolnie liczbę kolumn, z których wybieramy te jakie przy sprawdzaniu wiedzy mają być domyślnie ukryte, jak i dowolną liczbę uznawanych za prawidłowe w danym przypadku odpowiedzi. Zdefiniowaną bazę można potem zwyczajnie przeglądać albo włączyć tryb "nauki", gdzie program sam losowo wybiera poszczególne pytania - spośród tych, na które nie udzieliliśmy dotąd prawidłowej odpowiedzi (do skutku). Ostatni tryb pracy to "test", gdzie każde pytanie pojawia się dokładnie raz (w losowej kolejności) i albo odpowiemy prawidłowo albo nie - otrzymując na końcu podsumowanie.

Turbo Pascal

Bumper Cars

1996

Wyścigi dla dwóch osób z dodatkową atrakcją: samochody, wyposażone w gumowe zderzaki, mogą się zderzać do woli (odbijając się od siebie zgodnie z prawami fizyki). Takie przynajmniej były założenia... Przy "produkcji" grafiki wykorzystano 3D Studio i Paint Shop Pro, a programowanie odbyło się w Borland Pascalu (z uwagi na wymagania pamięciowe, praca w trybie chronionym procesora) z dużym dodatkiem kodu czysto assemblerowego (niemal cała obsługa ekranu i obliczeń związanych z obracaniem toru).

Kilka torów do wyboru (dołączony również ich edytor), lista najlepszych wyników, samo sterowanie samochodami, weryfikacja toru jazdy (gdyby ktoś próbował jechać "na skróty) - to wszystko praktycznie działało i to całkiem płynnie. Zabrakło obsługi zderzeń samochodów i jakiejś oprawy dźwiękowej... już sam nie pamiętam, dlaczego tego nie dokończyłem :-/ Pamiętam za to, że były jeszcze jakieś przymiarki do wersji w pełni 3D... może dlatego? Projekt w każdym razie znalazł swoją kontynuację w postaci programu zaliczeniowego na studiach (opisany wyżej RACE).

Borland Pascal, assembler

Draw3D

1995

Program powstały w ramach nauki odwzorowywania współrzędnych w przestrzeni trójwymiarowej na płaszczyznę ekranu. Można w nim przedstawić rozmaite sceny 3D złożone z podstawowych obiektów typu: prostopadłościan, prostokąt, odcinek - definiowanych w postaci ciągu poleceń z odpowiednimi współrzędnymi X, Y, Z wierzchołków (wbudowano w nim edytor tego "programu" do opisu zawartości sceny). Stworzoną scenę można potem oglądać z dowolnego punktu w tej przestrzeni - obracając dookoła, przybliżając lub oddalając od niej wirtualną "kamerę".

Turbo Pascal, BGI

ODSETKI

1995 - 1997

Aplikacja pisana na początku liceum dla Spółdzielni Mieszkaniowej "Osiedle Młodych" w Poznaniu (jednej z największych spółdzielni w Polsce), służąca do obliczania odsetek od kredytu mieszkaniowego dla każdego lokatora. Program zapamiętywał m.in. stan zadłużenia poszczególnych członków spółdzielni na koniec każdego kwartału i pozwalał na wydruk tabelki przedstawiającej przebieg stanu kredytu od momentu wpisania ich do systemu. Oparty na własnym formacie plikowej bazy danych, z obsługą jednoczesnej pracy wielu osób w sieci, z dołączonym programem administracyjnym do definiowania użytkowników i ich haseł dostępu.

Wbudowany edytor tekstu (z funkcją podstawiania do zdefiniowanego pisma danych dowolnie wybranego członka) z czasem został "zaadoptowany" przez pracownice Spółdzielni nawet do tworzenia dokumentów niezwiązanych z tymi kredytami :-)

Turbo Pascal, Turbo Vision

PLS

1995

W czasach systemu operacyjnego DOS praktycznie każdy PC w naszym kraju miał ładowany przy starcie systemu jakiś rezydentny programik obsługujący polskie znaki: ąćęłńóśźż. Co prawda, coś takiego było wbudowane w system MS-DOS, ale o dziwo nie obsługiwało akurat tego standardu kodowania, co najczęściej potrzeba i na dodatek było trochę problematyczne (dwa oddzielne moduły, duże zużycie pamięci). Niemal każdy korzystał więc z jakiegoś zastępczego programiku, a ja miałem swój własny - instalowany też na innych komputerach, którymi miałem okazję zarządzać.
Programik obsługiwał zarówno wyświetlanie polskich "ogonków" na ekranie (dla kart EGA/VGA), jak i wprowadzanie ich z klawiatury (z prawym klawiszem Alt). I to wszystko w jednym ze standardów do wyboru: Mazovia, LatinII (852), DHN, Windows (CP1250).

Turbo Pascal, assembler

Snajper

1995

Gierka powstała w ramach zabawy z obsługą myszki w trybie graficznym, pod DOS'em (w oparciu o własny moduł napisany w Pascalu i assemblerze do komunikacji z driverem myszy). Próbujemy trafić kursorem myszki jak najbliżej środka tarczy strzelniczej. Mamy dziesięć strzałów, a stoper mierzy czas. Jeśli skończymy przed wyznaczonym czasem, dostajemy drobny bonus. Wszystko wydaje się łatwe, ale... zapomniałem dodać, że kursor (celownik) strasznie się "trzęsie" i trzeba mieć niezłe wyczucie, aby trafić w dziesiątkę ;-) Na końcu, jeśli otrzymałeś dobry wynik, możesz się dopisać do listy rekordów.

Turbo Pascal, BGI

Piłkarze

1994

Gierka, w którą "za moich czasów" grywało sie na kartce na nudnych lekcjach w szkole :-) A może wciąż jest popularna? Przeznaczona dla dwóch osób, które na zmianę przesuwają piłkę po kolejnych kratkach boiska, starając się z nią dojść do bramki przeciwnika. Ruchy wykonujemy w jednym z 8 kierunków (także na ukos), przy czym nie można ponownie przejść po raz już wykorzystanej linii. Jeśli dotrzemy do krawędzi boiska lub w miejsce, gdzie piłka była już wcześniej - możemy "iść" dalej. W przeciwnym razie następuje zmiana zawodnika.

Turbo Pascal, BGI

Puzzle

1994

Prymitywna - działająca w trybie tekstowym - a mimo to wciągająca gra logiczna.
Zadanie proste: ułożyć przemieszane numerki we właściwej kolejności, korzystając z jednego wolnego pola, na które można przesuwać sąsiednie elementy. A wszystko to w jak najmniejszej liczbie ruchów (program przechowuje listę najlepszych wyników).

Turbo Pascal

Kolędy

1993

Każdy od czegoś zaczynał... W moim przypadku był to BASIC, a ten oto programik to chyba pierwszy mój "produkt", z którego rzeczywiście korzystał ktoś poza samym autorem :-) No i rozprzestrzenił się on niesamowicie, bo kopiowali go znajomi rodziców z pracy, ich znajomi itd. - niemal każdy, kto miał dostęp do komputera PC. A przecież wtedy jeszcze nawet nie było Internetu!
Cóż takiego robił ten program? Ano po prostu odgrywał melodie naszych polskich kolęd (na tym głośniczku wbudowanym w każdy komputer... swoją drogą kiedyś to były prawdziwe głośniczki, nie takie "brzęczyki" jak ostatnio - tamtego nawet dało się słuchać) i jednocześnie wyświetlał ich tekst na ekranie. Na okres Świąt Bożego Narodzenia - niezastąpione ;-)

Basic