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!
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#
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
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
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)
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
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
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
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
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
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
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
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 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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