Moja droga programistyczna
2007-11-18 kategorie: praca
Pisałem w innej notce, że komputery zainteresowały mnie na studiach. Nie jest to tak do końca prawda. Na studiach miałem okazję tak naprawdę z bliska zapoznać się z komputerami i dać się "wciągnąć", ale początki tego zainteresowania były wcześniej.
Tak dawno, że aż nieprawda ;-), gdzieś w latach siedemdziesiątych, kiedy to w środku głębokiego PRL-u prawie nikomu nie śniło się o komputerach, popularne wtedy czasopismo "Przekrój" zaczęło - chyba w przypływie jakiegoś jasnowidzenia - drukować w odcinkach kurs programowania w BASIC-u! Rzecz mnie zafascynowała. Wyciąłem sobie z "Przekroju" wszystkie odcinki tego kursu, przeczytałem kilka razy i na kartce papieru zacząłem sam klecić jakieś proste programiki.
Interesowała mnie w tym czasie elektronika i kupowałem rozmaite książki popularno-naukowe, które choćby w odległy sposób z tą tematyką się wiązały - np. podręcznik realizacji programów telewizyjnych, książkę o szyfrach i szyfrowaniu, a także szereg pozycji traktujących o komputerach. Stopniowo zaczęły mi się te komputery coraz bardziej podobać, i kiedy będąc w szkole średniej dowiedziałem się, że będzie u nas działać kółko informatyczne, bez namysłu zapisałem się na nie.
Na kółku uczyliśmy się pisać na papierze programy w Pascalu - komputera przecież jeszcze dotychczas nikt z nas na oczy nie widział... Pisanie programów na papierze nie było jednak w tamtych czasach nawet dla zawodowych programistów niczym dziwnym (dopiero po wielokrotnym sprawdzeniu i poprawieniu przepisywało się te programy z kartki do komputera), a atrakcją kółka był fakt, że raz czy dwa udało się nam uruchomić te programy na prawdziwym komputerze w centrum obliczeniowym UJ ;-).
Tak się złożyło, że na studia poszedłem na UJ właśnie, mogłem więc pogłębiać swoją znajomość z tymże centrum obliczeniowym, z Pascalem oraz - co uważam za najważniejsze doświadczenie w swojej informatycznej drodze - z systemem operacyjnym George 3, pod którym pracował komputer Odra 1305 we wspomnianym centrum. System ten był tak rewelacyjnie jak na owe czasy zaprojektowany, zawierał wiele tak świetnych mechanizmów (chociażby wirtualny system plików, gdzie pliki nie są "przywiązane" do ich fizycznej lokalizacji na dysku i mogą być w trakcie pracy dowolnie przemieszczane przez system z jednego urządzenia na inne), że zrozumienie i nauczenie się go spowodowało, że później już niestraszne mi były wszelkie DOS-y, Unixy, VMS-y, Netware'y czy cokolwiek innego: w każdym z tych systemów można było dostrzec pewne odpowiedniki (lub ich brak) pojęć i obiektów znanych z George'a i analogiczne mechanizmy.
Po nastaniu rewolucji mikrokomputerowej stałem się dumnym posiadaczem komputera Commodore Plus/4. Przydały mi się wtedy "Przekrojowe" lekcje BASIC-a - całkiem sporo z nich jeszcze pamiętałem... Potem nauczyłem się asemblera procesora 6502 - we wszystkich ówczesnych prymitywnych 8-bitowych mikrokomputerach zrobienie wielu bardziej zaawansowanych rzeczy było możliwe tylko przy użyciu asemblera... Dla rodziny Plus/4 (do której należały jeszcze dwa prostsze modele, C-16 i C-116) napisałem szereg programów, które zyskały sobie całkiem sporą popularność w ówczesnym środowisku polskich "commodorowców".
Z kolei podjęcie pracy zawodowej było wkroczeniem w nieznany dotychczas świat pecetów i MS-DOS-a. Po pewnym okresie pracy w tym systemie zorientowałem się, że ciągle brakuje mi w nim pewnych komend i funkcji - z reguły tych, które znałem z George'a, m.in. możliwości stosowania rozbudowanych wstawek parametrów w komendach systemowych czy komendy LF, służącej do drukowania zawartości plików, z jej różnorodnymi opcjami umożliwiającymi np. wydrukowanie tylko fragmentu pliku zawartego pomiędzy określonymi wierszami. Napisałem wówczas (znowu w Pascalu, tym razem w jego znanej borlandowskiej wersji Turbo) pakiet programików narzędziowych, który miał uzupełnić te braki - do dzisiaj nadal niektórych z nich używam... :-)
Były to pierwsze moje programy, które postanowiłem potraktować jako produkt: zaopatrzyć w "profesjonalną" dokumentację i postarać się o ich w miarę szerokie rozpowszechnienie. To ostatnie było dość trudne, bo jeszcze nie było ogólnie dostępnego Internetu - niemniej jednak działały wówczas firmy zajmujące się wysyłkową sprzedażą dyskietek z programami freeware i shareware, i próbowałem sprzedawać swoje programy jako shareware przez takie właśnie firmy. Osiągnąłem nawet pewien sukces, bo kilka osób rzeczywiście mi za programy zapłaciło, co było jakimś osiągnięciem w czasach, kiedy wszyscy powszechnie korzystali z pirackich kopii... ;-) Dla zainteresowanych pakiet ten jest do ściągnięcia tutaj - oczywiście teraz już całkowicie bezpłatnie... Do napisania tych programów - i innych, które pisałem dla doraźnych potrzeb - stworzyłem sobie specjalną bibliotekę procedur do Turbo Pascala, którą także miałem zamiar rozpowszechniać, ale niestety nigdy nie udało mi się na tyle uporządkować i udokumentować kodu tej biblioteki, aby nadawał się do upublicznienia...
Napisałem też w 1993 roku książkę "MS-DOS dla dociekliwych", będącą podsumowaniem moich doświadczeń z DOS-em - w szczególności związanych z pisaniem w DOS-ie zaawansowanych plików wsadowych, czyli inaczej mówiąc prób programowania skryptowego w jego prymitywnym języku poleceń... Od czasów George'a, w którym większość podstawowego oprogramowania systemowego była uruchamiana za pośrednictwem skryptów powłoki (zwanych tam "makroinstrukcjami"), zawsze lubiłem programowanie skryptowe - dlatego przez jakiś czas używałem 4DOS-a, alternatywnego, znacznie bardziej zaawansowanego shella dla DOS-a, w którym możliwe było programowanie skryptowe z prawdziwego zdarzenia (o 4DOS-ie też zresztą pisałem w tej książce).
Od kiedy zająłem się administracją serwerami, programowanie sprowadziło się do doraźnych bieżących potrzeb - skryptów w shellu, Perlu czy PHP (z rzadka trzeba sięgnąć po C, gdy możliwości języków skryptowych nie wystarczają...) służących rozwiązaniu jakiegoś konkretnego problemu czy wykonaniu konkretnego zadania związanego z pracą serwera. Napisałem jednak także kilka dużych aplikacji internetowych w PHP - przede wszystkim system rekrutacyjny wykorzystywany przez moją uczelnię czy system SID, służący do publikowania na stronach WWW planów studiów w jednolity sposób w skali całej uczelni (niestety, z uwagi na zmiany zasad tworzenia planów studiów wkrótce po wdrożeniu przestał on być wykorzystywany, ale to już nie moja sprawa...). Na skryptach w PHP działa także ta strona :-)
W administrowaniu serwerem jednym z poważniejszych problemów jest walka ze spamem zalewającym serwer pocztowy. Dotychczas radziłem sobie z tym metodą klecenia różnych filtrów, działających na różnych etapach przetwarzania listu, w oparciu o różne zasady i zrealizowanych w różnych technologiach. Doszedłem do wniosku, że pora to uporządkować i od pewnego czasu pracuję nad uniwersalnym, zintegrowanym filtrem antyspamowym (działającym w oparciu o interfejs milter w sendmailu) - idea jego ma być taka, że łącząc różne metody filtrowania ma on odrzucać jak najwięcej spamu w sposób jak najbardziej "lekki" dla serwera - czyli już na etapie transakcji SMTP, bez zaprzęgania do pracy narzędzi analizujących treść listu, takich jak SpamAssassin. Oczywiście ten ostatni i tak musi być końcowym stopniem filtrowania, ale chodzi o to aby miał jak najmniej pracy i tym samym jak najmniej obciążał serwer. Gdy tylko filtr ten będzie ukończony, udostępnię go na tej stronie.