Jak to się u mnie zaczęło? Czyli droga od pasji w okół komputerów do bycia programistą..

17:59, 29 sierpnia 2010 roku

| Notka, Opinie, Praca, Projekty

Od czego zacząć gdy chce się zostać programistą? Od książek.. Wiedza i praktyka to podstawa, a im wcześniej zaczniesz się uczyć tym szybciej zaczniesz robić rzeczy które są Ci pomocne lub które mogą pomóc ludziom w robieniu ich monotonnych rzeczy – czyli zarabiać na swoich programach, swojej pasji. W końcu podstawowa cecha każdego programisty to lenistwo ;-)

Od dawna zbierałem się do napisania notki o moich początkach, pewnie będzie ona długa, ale myślę, że teraz jest dobry moment na napisanie tego tekstu.

Takim ostatnim kamykiem w bucie, który spowodował, że zabrałem się za pisanie jest film na blogu Jakuba Dąbkowskiego, który był moim Project Managerem gdy pracowałem w Implixie.

Co ciekawe, za niecałe trzy tygodnie ten blog będzie obchodził trzecie urodziny (three is the magic number). I choć te trzy lata to ułamek mojego zajmowania się programowaniem, to jest to główny okres mojego bycia zawodowym programistą, czyli zarabiania na tym co lubię robić. Zbiega się to też z początkami mojej pracy w Implixie.

Wspomniany wpis/video na blogu Jakuba

Chłopaki skupili się na tym co trzeba, żeby zostać “programistą aplikacji internetowych”.

Ja bym zaczął trochę wcześniej. Według mnie, żeby zacząć w ogóle programować – wszystko jedno czy strony WWW, duże aplikacje webowe, aplikacje desktopowe, serwery, bazy danych, sterowniki do drukarek czy anten kierunkowych w satelitach NASA trzeba mieć pojęcie o komputerach generalnie – czyli jak to się wszystko kręci. Myślę, że ogólna wiedza, lub wiedza skąd daną wiedzę szybko zdobyć, przyda się każdemu.

Nie mówię, że naukę programowania należy zacząć od Assemblera, ale przydaje się mieć pojęcie czemu 32bitowe procesory mogą obsłużyć max 4Gb RAMu?

Dopiero gdy posiądziemy podstawową wiedzę można się zastanowić “co tak naprawdę chce programować?” i iść w tym konkretnym kierunku, bo opcji jest multum – choć nie trudno się potem cofnąć. Gdy ja stanąłem na tym rozdrożu wybrałem aplikacje internetowe – ale o tym czemu, to będzie dalej.

Tekst jest długi – jeżeli nie chce Ci się czytać wszystkiego – to przedostatni paragraf jest podsumowaniem.

Trochę mnie w liczbach żebyście wiedzieli czy warto dalej czytać..

Od ośmiu miesięcy pracuję w MTV Networks Polska. Od pięciu lat prowadzę swoją firmę – Zeno.pl . Zlecenia dla klientów realizuje od ośmiu lat. W tym czasie pracowałem z/dla/w ponad 20 różnych firmach przy różnych projektach. Przez większość tego czasu byłem freelancerem. Często byłem zatrudniany na kilka miesięcy aby rozwiązać jakiś problem, zrealizować jakieś konkretne zadanie lub uporządkować pracę innych programistów. Teraz jestem “zaczepiony” w jednej konkretnej firmie – po raz pierwszy w korporacji i jest to kolejne ciekawe wyzwanie i masa doświadczeń.

Firmy dla których pracowałem były zupełnie różne – od molochów będących kontynuacją firm rodem z PRLu, przez małe, kilkuosobowe firmy zarabiające bezpośrednio na ruchu na ich stronach, firmy które tworzą oprogramowanie które jest wykorzystywane przez ich użytkowników – z czego czerpią profity po firmy które tworzą “content” i na nim zarabiają. W modelach B2B, abonamentowych i całej masie innych. Z każdego takiego kontraktu czy współpracy starałem się wynieść maksymalnie dużo wiedzy o danym biznesie i sposobie zarządzania firmą, prowadzenia projektów, marketingu i wszystkim innym co w danej firmie się toczyło.

A tak generalnie, to programuję od 18 lat, czyli przełomu zerówki i pierwszej klasy podstawówki – o ile można nazwać programowaniem grzebanie się w GW BASICu i QBasicu.

Początki

Moi rodzice zrobili błąd kupując komputer gdy miałem dwa lata. Napromieniowywałem się monitorem siedząc na ich kolanach i pewnie dlatego tak weszło to w moją krew. Gdy tylko byłem w stanie grałem na tym starożytnym już PCcie w Spacewars, PC-POOLa, Prince of Persia, Space Quest oraz jakiś fikuśny program do nauki angielskiego. Był tam też GW BASIC, do którego to moi rodzice nabyli mi książkę gdy miałem jakieś sześć lat. Niesamowicie pochłonęło mnie rysowanie w ASCII “wyścigówek” i przesuwanie ich po ekranie.

Potem przyszedł update systemu i Sim City – które to trzeba było umieć odpalić w trybie CGA, do tej pory pamiętam, że był to przełącznik /m . Ale oprócz tego dostał mi się też QBasic z grą (z kodem źródłowym!) w której dwie małpy rzucały w siebie bananami po ustawieniu odpowiedniego kątu i siły rzutu (taki pierwowzór Scorcha). Grzebałem się w tym kodzie i zmieniałem parametry gry ile mogłem. W międzyczasie pojawił się MKS Vir z bazą wirusów – przez którą zainteresowałem się tematyką infekcji komputerów i jak to się właściwie dzieje, że komputer choruje.

Brat znajomego miał Amigę 600 – na której to cięło się w gry.. i patrzyło jak ów brat robi animacje. I choć realizm efektów powalał na kolana ;-), to nigdy do grafiki mnie nie ciągnęło.

W pierwszej podstawówce do której chodziłem głównie zajmowaliśmy się graniem w Prince of Persia 2 i The Lost Vikings. Ale też chodziliśmy do położonego nieopodal Pałacyku dla Młodzieży gdzie mieliśmy zaszczyt przepisywać kod z wydruków do Commodore 64 i obserwować jak komputer generuje przepiękną grafikę, w tym fraktale. Lub.. gdy mieliśmy szczęście i przed nami była jakaś grupa, która wczytywała gry z kaset – mogliśmy w nie pograć. Ale to była rzadkość, bo zazwyczaj trzeba było zaczynać proces ładowania od nowa – w końcu podłogi były krzywe i gdy się po nich chodziło, to magnetofony drgały i program się nie wczytywał (ale ból z głowicami chyba każdy zna ;-) ).

Nie pamiętam już kiedy, ale nastąpił wielki skok – od pierwszego PCa – IBM PC AT, 12MHz z Turbo, 648KB RAMu i 20Mb dysku, z dwoma stacjami dyskietek 5,35″ przeszliśmy do Intel Pentium 75MHz, 32Mb RAMu i, zdaje się, że 1,2Gb dysku oraz S3 Trio64V+. Na ekranie własnego komputera pojawił mi się kolor! Który do tej pory widziałem w Pegasusach, Amigach i komputerach w szkołach do których chodziłem.

Ze starym ATkiem w domu rozwiązywałem tonę problemów, ale nigdy nie wyszedłem poza DOSa i Norton Commandera. I mimo, że wiedziałem co to jest autoexec.bat i config.sys oraz umiałem zainstalować znajomym sterowniki do czytnika CD to sam takowego nie miałem. Przy pierwszej styczności z CD-ROMem nie wiedziałem nawet, że jest to po prostu “stacja dyskow” i wchodzi się na niego tak samo jak na dyskietki ( pisząc, zazwyczaj, d: <enter>). A teraz była nowa jakość – Windows 95 który sam kumał takie rzeczy.

Trochę żałuję, że ominąłem posiadanie własnego 386/486, i mocne obcowanie z Win 3.1/3.11 – ale cóż ;-)

Za to razem z owym Pentiumem przyszli Settlers II i Fatal Racing.

Potem nadszedł Gambler, a razem z nim cheaty do gier (Tips&Tricks). A to otworzyło zupełnie nowe możliwości – bo nie dość, że miało się programy które potrafiły wyszukiwać w pamięci konkretne liczby, to jeszcze trzeba było czasem edytować pliki w Hexach. Z tego przyszła wiedza o adresowaniu pamięci, typach danych w niej przechowywanych, o przeliczaniu liczb z systemu dziesiętnego do szesnastkowego i bitowego – w końcu, jak chciało się mieć 1000 sztuk złota, to trzeba było wiedzieć co tam w pliku “save” wpisać i gdzie.

W szkole mówili na mnie “piter-cziter” bo właściwie nie było gry w której nie grzebałem. Moim największym osiągnięciem w tej dziedzinie było sprawienie, aby demo pierwszej części GTA nie wyłączało się po jakimś-tam czasie ( 5 minut? ).

Potem stałem się naczelnym naprawiaczem komputerów – zarówno hardware jak i software nie miały przede mną tajemnic. Formatowałem dyski, instalowałem systemy, wymieniałem karty graficzne – w końcu był boom na akcelerację 3D. Nawet kręciłem sprzęt – zaczęło się od przetaktowania mojego Pentium 75 na Pentium 90 – żeby Diablo II lepiej działało. Potem wyciągało się to kilka klatek więcej w Quake II.

Pod koniec podstawówki – 6, 7, 8 klasa - uczyłem się AC LOGO i rysowałem tym nieszczęsnym żółwiem przeróżne rzeczy. Potem liceum i Turbo Pascal.

Ale zanim nastąpiło liceum pojawił się Internet, a moja zacna rodzicielka była instruktorem w Altkom Akademia. Raz na jakiś czas w weekend, cała zgraja dzieciaków z podstawówki, pakowała się do sali wykładowej i w zamian za zainstalowanie na tym sprzęcie systemu operacyjnego i rzeczy potrzebnych do prowadzenia wykładów od poniedziałku, mogła grać ze sobą przez sieć, surfować po necie, gadać na IRCu i sprawdzać e-mail’e. Co za tym szło trzeba było rozwiązywać problemy z siecią – TCP/IP nie miało przed nami tajemnic. W końcu co powstrzyma ośmioro dzieciaków przed sprawdzeniem kto jest lepszy w Quake’a?

Co więcej system “instalowało” się używając Norton Ghost, również przez sieć.

W Altkom Akademii, gdy jeszcze była w domu handlowym Arka (tam, gdzie teraz jest Traffic) spędziłem pierwszą wakacyjną pracę. W ciągu ponad miesiąca nauczyłem się robić kable sieciowe i poruszać się jakoś w Linuxie. Ba, uczestniczyłem w stawianiu rozwiązania terminalowego – gdzie wszystkie pliki miały być dostarczane na komputery klienckie (terminale) z centralnego serwera, nawet nie wiedziałem, że to tzw. cienki klient. Nagrałem też pierwszą płytę CD (trwało to strasznie długo – ale co poradzić, nagrywarka 2x ).

Na koniec podstawówki stworzyliśmy w klasie naszą kronikę na CD. Nauczyłem się HTMLa, CSSów (no, powiedzmy ;-) ) i w wyniku tych prac każdy uczeń dostał płytkę z danymi kontaktowymi swoich kolegów, zdjęciem, jakimś krótkim “o sobie” i całą masą różnych innych rzeczy. Np. zeskanowanymi kronikami klasowymi. A wszystko ostylowane pięknymi tabelkami w tabelkach tabelek.

Razem z Internetem i Turbo Pascalem przyszła ochota i możliwości na naukę czegoś więcej. Zaczęła się moja era C i C++. Programowanie strukturalne, obiektowe, pierwsze klasy, dziedziczenie, hermetyczność, algorytmy i struktury danych. Ogrom wiedzy który trzeba było przyswoić przytłaczał, ale też kusił możliwościami.

Potem różne burzliwe dzieje sprawiły, że zamieszkałem u znajomego, świeżo upieczonego studenta PJWSTK na kierunku “programowanie gier komputerowych”. Jednocześnie pojawiło się PHP (a właściwie zaczęło być o nim głośniej) a to jak rozwijał się Internet sprawiało, że potencjał w nim siedzący był niesamowicie kuszący.

Ja stanąłem przed wyborem – zająć się aplikacjami – czyli pisaniem w C++ lub Javie, czy pójść w kierunku aplikacji internetowych – JSP, ASP, PHP. Wybrałem aplikacje internetowe i PHP – głównie dlatego, że stroną WWW łatwiej dotrzeć do wielu osób. A odkąd zacząłem programować chciałem, żeby z moich rozwiązań korzystało jak najwięcej osób.

Oczywiście nie zmieniało to faktu, że bawiłem się DirectX’em, czytałem zawzięcie o efektach graficznych, o tym jak karty graficzne generują obraz na ekranie itp. itd. Ale to była zabawa, poważna nauka, praca i czas szły w PHP.

Najważniejsze było to, że wiedziałem, że to jest moja przyszłość i że właśnie to chce w życiu robić.

W międzyczasie zacząłem chorować, przez trzy lata tułałem się bez diagnozy i byłem przykuty do mieszkania. I mimo, że spałem długimi godzinami i byłem mocno wycieńczony – to gdy mogłem czytałem. Póki co żaden tutorial w internecie nie nauczył mnie podstaw danego zagadnienia tak dobrze, jak książka. Może to dlatego, że książkę wygodniej się czyta niż tekst na ekranie. A może raczej jest to spowodowane tym, że jednak aby wydać książkę trzeba o wiele więcej wysiłku – więc i jakość przekazywania wiedzy jest lepsza. Cokolwiek by to nie było – polecam na początku uczyć się z książek. Z internetu można uzyskać całkiem trafny pogląd na to co dany język czy baza danych mogą. Internet jest genialny do poszerzania wiedzy, wyszukiwania rozwiązań dla konkretnych problemów i idealny żeby znaleźć książkę na dany temat ;-), ale nie sprawdza się do początkowej nauki. Polecam też dobrze nauczyć się angielskiego – prosta sprawa – najwięcej zasobów w necie jest właśnie po angielsku.

Choroba dała mi łącznie pięć lat, przez które głównie, ale nie tylko, siedziałem w mieszkaniu i czytałem wszystko co mi w ręce wpadło. Moi znajomi w tym czasie szli na studia, ja zaczynałem wykonywać zlecenia dla pierwszych klientów. Od prostego pocięcia grafiki do statycznej strony WWW, przez jakieś prościutkie skrypty wyświetlające aktualną datę na stronie. Dynamicznie generowaną galerię skanów – po wgraniu pliku txt i jpg o tych samych nazwach pojawiały się na liście i opis był brany z pliku. I tak powoli szedłem do przodu.

Gdy myślałem o możliwościach które daje nam Internet miałem niesamowite wizje przyszłości i tego jak to może na nas wpłynąć. Porywałem się na projekty olbrzymie, których nie byłem w stanie wtedy zrealizować.

Zawsze moją przewodnią myślą było to, żeby robić narzędzia które ułatwią ludziom życie. Lub wzbogacą je jakoś. Ułatwią robienie rutynowych rzeczy, żeby mieli więcej czasu na rzeczy kreatywne, których nie da się tak łatwo ubrać w język komputera.

Miałem po drodze sporo porażek. Niektóre wynikały z mojego charakteru, inne z braku wystarczającej wiedzy. Ale z każdej z nich brałem ile mogłem i starałem się nie popełniać drugi raz tych samych błędów.

Pierwszym takim projektem była strona internetowa dla mojego liceum, która miała być jednocześnie forum wymiany myśli, miejscem do prezentacji i ewentualnej sprzedaży swoich wyrobów przez uczniów (bo mieliśmy tam witrażownie i parę innych kreatywnych zajęć) i całą masą innych funkcjonalności. Nie było wtedy AJAXa, jQuery, zdaje się, że nawet XHTML raczkował. A ja “robiłem strony” od niecałego roku. W efekcie czego powstała strona, z autorskim forum z “bazą danych” w XMLu  – marny pomysł ;-) . I na tym się skończyło.

Potem przyszedł projekt gry przeglądarkowej, zdaje się, że wtedy nie było jeszcze OGame’ów i innych bajerów. Chociaż pewnie pierwszy pomysł na grę przez przeglądarkę to to nie był.

Ale każde to niepowodzenie sprawiało, że uczyłem się dalej i chciałem móc dojść do takiego etapu w którym mógłbym zrealizować to wszystko efektywnie i efektownie.

Miałem też sukcesy. Jedna z pierwszych stron, zrobionych już po zarejestrowaniu Zeno.pl, dalej działa – mistrzowieimprez.pl . A na końcu źródła strony można wciąż zobaczyć
<!-- Powered by ZenoFUEL 1.0.23 check it at: http://fuel.zeno.pl -->

Zupełnie nowatorski projekt, jak na tamte czasy, dwu-klikowego uploadu zdjęć do neta, z generowaniem linków na fora, do maili, itp. itd. – winogrono.net -  miał ponad 150k odsłon miesięcznie po dwóch miesiącach działania. A linki z wykorzystaniem winogrono.net dostawałem np. od ludzi grających w EVE Online lub znajomych na GG, którzy nie wiedzieli, że to moja strona. Było to też ciekawe użycie marketingu wirusowego – bo ludzie sami zarażali innych – dając im linka do strony sprawiali, że ludzie sami zaczynali używać tego narzędzia.

Niesamowite jest to, że grając przez sieć w różne gry: Ultima OnLine, Counter Strike, Day of Defeat, Battlefield 1942 poznałem całą masę ludzi którzy albo robili to co ja i mogliśmy się wymieniać doświadczeniami, albo chcieli robić to co ja i mogłem ich uczyć.

Tak spotkałem Kamila z którym współpracuję do tej pory i który ogromem swojej wiedzy w niektórych dziedzinach przewyższa mnie oraz melera który aktualnie rozrywany jest przez klientów chcących by zrobił im grafikę. Przez moją “szkółkę” przewinęło się w ciągu ostatnich pięciu lat kilka osób, które teraz pracują w różnych firmach jako programiści WWW i odnoszą w nich sukcesy.

Pierwszy staż w firmie miałem w 2004 roku, była to znów Altkom Akademia, gdzie robiłem zupełnie nowe dla mnie rzeczy w PHP. Między innymi program do rejestracji sal oraz rejestracji gości w biurze. Opiekowałem się też po części outsource’owanym do Altkomu systemem księgowym dla HP. No i robiłem aplikację do zamawiania sprzętu łącznie z wysyłaniem maili do różnych ludzi gdy spełnione zostały określone warunki – np. koszt przewyższał 5000zł.

Po stażu, w 2005 roku, założyłem Zeno.pl, bo liczba zleceń była już znacząca a projekty coraz ciekawsze i trudniejsze. W sierpniu 2007 wpadłem na szalony pomysł wyprowadzenia się do Gdyni, gdzie we wrześniu dostałem pracę w Implixie – rozmawiając przez Skype’a a potem na żywo w biurze. Zajmowałem się wtedy dużymi aplikacjami – m.in. talkstream.com czy getresponse.comnauczyłem się sporo o wysyłce maili, łączenia PHP z Flashem i całej masy innych rzeczy.

Po czterech miesiącach dostałem ofertę nie do odrzucenia znów w Warszawie, gdzie nauczyłem się kodowania plików flv do formatów webowych. Powstała, i niedługo potem upadła, jedna z pierwszych telewizji przez internet w Polsce ;-)

Potem była praca w różnych firmach ( goldenline, profeo, linkedin ). Przychodziłem, robiłem coś dużego i szedłem dalej. Czasem nadzorowałem projekt, czasem oceniałem jego koszty czasowe lub pieniężne. Uczestniczyłem w negocjacjach. W końcu zaczęły się zlecenia gdzie prowadziłem projekty. Ale głównie programowałem. Rzadko uczyłem się nowych rzeczy, po drodze “liznąłem” PERLa i Pythona. Nadszedł okres lekkiej stagnacji.

Potem wybuchł AJAX i biblioteki JavaScript’owe.  I znowu było się czego uczyć. Ale od momentu w którym zacząłem być freelancerem uczę się na bieżąco tego co jest mi potrzebne i trzymam rękę na pulsie, żeby wiedzieć co może niedługo przyjść.

Teraz znów uczę się nowych rzeczy – bo skala projektów w MTV jest o wiele większa niż projektów z którymi miałem do czynienia do tej pory, a co za tym idzie, rozwiązania problemów są zupełnie inne. Nowe wyzwania potrzebują nowego spojrzenia.

Czego można się z tego nauczyć?

Moja droga nie jest zbyt standardowa. Chociaż prawdą jest, że IT to taka fajna dziedzina, którą może zająć się każdy kiedy chce. Jasne, nie każdy nauczy się programować – ale jeżeli chce, to może kupić książkę i spróbować. Ja wiązałem moje życie zawodowe z komputerami od podstawówki. Spadła na mnie choroba, która mimo całej swej uciążliwości, sprawiła, że miałem dużo czasu na naukę tego czego chciałem się uczyć. Tak czy siak, można z tego wyciągnąć trochę uniwersalnych rad, a może ktoś wyciągnie coś jeszcze?

Jeżeli pasjonują Cie komputery – poznawaj je. Nie musisz decydować się od razu na jakąś dziedzinę, sprawdź co sprawi Ci największą frajdę. Cała masa ludzi robi teraz niesamowite rzeczy – czytniki fal mózgowych, operowanie komputerem za pomocą ruchów dłoni, urządzenia szóstego zmysłu, robotyka – wszędzie jest programowanie. I nawet jeżeli za jakiś czas stwierdzisz, że nie chcesz już programować anten satelitarnych dla NASA i wolisz robić strony firmowe w jakimś języku webowym – to część Twojej wiedzy będzie dalej przydatna (chociaż kto wie w czym pisze się w NASA :O ).

Na początku ucz się z książek – to najbardziej kompletne ( choć często nie wolne od błędów ) źródło wiedzy.

Czegokolwiek nie będziesz programować naucz się podstaw i aktualnych trendów – znajomość słownictwa, ogólnych zagadnień, stosowanych skrótów, nazw różnych algorytmów, nomenklatura programowania obiektowego czy wzorców projektowych ułatwi Ci zrozumienie tego co do Ciebie mówią.

Naucz się uczyć i szukać wiedzy – nie jesteś w stanie zapamiętać wszystkiego, ale powinieneś pamiętać co wpisać w Google, żeby znaleźć odpowiedź na Twoje pytanie.

Bierz udział w dyskusjach na forach, dołącz do społeczności, dopytuj się czemu tak a nie inaczej i staraj się zrozumieć rozwiązania. W takich miejscach znajdziesz wiele inspiracji.

Staraj się poznawać zagadnienia poboczne do tego nad czym aktualnie pracujesz – poznanie większego obrazu pozwoli Ci lepiej umiejscowić to co robisz. Możesz też wpaść na zupełnie nowe rozwiązania Twoich problemów.

Nie bój się nowych wyzwań – nawet jeżeli Ci się nie uda, będziesz bogatszy o doświadczenia i wiedzę. Z porażek wyciągaj maksimum informacji na przyszłość.

Sprawdzaj się, wiedz ile czasu zajęło Ci dane zadanie, z czym były problemy co poszło gładko – śledzenie postępów motywuje.

Nie daj się zaskoczyć i nie popadaj w stagnację. Jeżeli czujesz, że stoisz w miejscu – znajdź nową dziedzinę w której możesz się rozwijać.

Podsumowując

Ja sam, na początku, nie wiedziałem, że uczę się programować. Zdałem sobie z tego sprawę dopiero pod koniec podstawówki, gdy brałem udział w Olimpiadzie Informatycznej.. w AC LOGO ;-) Najpierw była to dla mnie zabawa (a co by było, gdyby małpa rzucała dwoma bananami, albo losową ich liczbą!), lub sposób na osiągnięcie celu w grze (nie chce mi się tłuc tych trolli w kółko, wrzucę sobie 29837192gp i od razu kupię tą mega zbroję). Uczyłem się tego co było mi potrzebne żeby te cele osiągnąć – ułatwić sobie życie, skrócić ilość czasu potrzebną mi na przejście gry, nie rezygnując z fabuły – bo fabuła fajna, 4h zbierania gp – nudne. To była taka nieświadoma nauka.

Potem zacząłem się uczyć świadomie – miałem szczątkową wiedzę, głównie z obserwacji. Zacząłem ją systematyzować przez uczenie się kontekstu i innych możliwości – wiedziałem co to integer, ale float? Wiedziałem, że można sortować wyniki, ale jak zrobić to najszybciej na danym zbiorze danych?

Gdy już miałem kompletniejszą wiedzę podstawową zacząłem szukać mojej niszy, mojej specjalizacji – tego w czym chce być naprawdę dobry. W końcu znalazłem – aplikacje internetowe. Zacząłem szukać rozwiązań najbardziej pasujących do mojego wyobrażenia siebie i tego co chciałem w danym momencie osiągnąć i zasobów które miałem aby zrealizować te cele – wybrałem PHP.

Kupiłem podręcznik do PHP i okazało się, że potrzebuję jeszcze nauczyć się bazy danych i konfiguracji Apache’a i najlepiej skubnąć coś więcej Linuxa. Potem zacząłem realizować moje pomysły, uczyłem się znów na bieżąco, ale tym razem świadomie, tego co było mi potrzebne. Wykorzystywałem wiedzę z C++ o programowaniu obiektowym by projektować drzewa klas. Łączyłem różne dziedziny ze sobą na coraz to nowe sposoby.

Potem przyszły dodatkowe technologie dające więcej możliwości w mojej dziedzinie – JavaScript, AJAX, XML, XSLT.. itd. itp. I znów nauka, rozwiązywanie problemów, nowe możliwości, nowe problemy i znów nauka..

PS

Tak, robiłem wtedy i robię dalej w życiu inne rzeczy niż siedzenie przed komputerem.

Nie, nie mam kolekcji flanelowych koszul w szafie ;-)

Tak, lubię komputery – jako narzędzia i dostarczycieli pewnej części rozrywki i spędzam przed nimi sporo czasu. Ale spędzam też sporo czasu na spacerach, w kinie, na imprezach, koncertach, czytając książki czy robiąc inne nie potrzebujące komputera rzeczy ;-)

Wszelkie pytania piszcie w komentarzach – postaram się odpowiedzieć.


Napisane przez Zenobius | View Comments | Permalink

DB2 V9.x i PHP – co mi da ich mariaż?

02:10, 19 czerwca 2010 roku

| Notka, Opinie, Praca

Dobrych kilka lat temu usłyszałem o powstaniu hybrydowych baz danych. Hybrydowe w poprzednim zdaniu oznacza łączące silniki relacyjne z hierarchicznymi. Z moich informacji, z tego co wiem, wynika, że póki co połączenie XMLa (bo to zazwyczaj jest implementacją hierarchiczności) z relacyjnością zostało dodane w takich bazach jak Oracle czy IBM DB2.

Od tamtego czasu sporo się w bazach namieszało, Oracle przejęło MySQLa, Facebook zrobił własną bazę danych, która aktualnie jest pod opieką fundacji Apache i zwie się Cassandra (zresztą, to co zrobił Facebook z PHPem zasługuje na osobny wpis). Przyszłość bazowa może być bardzo ciekawa :-)

Ale skupmy się na temacie mariażu DB2 z PHP.

Po co?

XHTML to XML. Ten prosty fakt sprowadza się do tego, że możemy zapisywać gotowe kawałki kodu XML w bazie danych w polach XML – wyciągać odpowiednie kawałki, składać ze sobą i “wypluwać” stronę. Proste, ale od czegoś trzeba zacząć.

XML nadaje się świetnie do składowania różnych płynnych danych – jako, że nie narzuca nam z góry formy w której musimy je przechowywać (możemy sami sobie je narzucić poprzez DTD lub XML Schema). W przypadku chęci posiadania wielu adresów klienta, czy wielu numerów telefonu jednej osoby – XML jest lepszą alternatywą, niż tworzenie kolejnej tabeli tylko na któreś z tych danych. PHP jest biedne (miejmy nadzieję, że “jeszcze biedne” a nie “na zawsze biedne”) jeżeli chodzi o modyfikację XML. Jedynym sposobem sensownej modyfikacji jest DOM, który jest o wiele bardziej nieprzyjemny w użyciu niż SimpleXML. Coś za coś, możliwe, ze udostępnię w jakimś czasie klasy do modyfikacji PHP pozwalające na dowolną modyfikację XMLa z łatwością SimpleXMLa.

XML w połączeniu z XSLT może robić za świetną warstwę danych i wizualizacji. Przy pomocy XSLT możemy przetworzyć dowolny plik XML do.. dowolnego innego formatu opartego na tekście. W naszym kontekście oznacza to możliwość przeniesienia warstwy widoku na klienta. Do klienta wysyła się plik XML z danymi (za każdym razem w odpowiedni sposób zmodyfikowany – aby odzwierciedlić dane które są aktualne), oraz szablon XSLT który parsuje XML do XHTMLa i pokazuje użytkownikowi za pomocą przeglądarki. To jest dość ciężki punkt, gdyż trudno w XSLT tworzyć dynamiczne linki (składać atrybut node’a XMLowego z kilku wartości). Ale przy odpowiednim przetworzeniu XMLa po stronie PHP, żeby lepiej nadawał się do parsowania przez XSLT – jest to do zrobienia.

Pierwsze dwa punkty były dość trywialne. Ot, kolejna opcja do rozwiązania dość popularnego problemu. Mająca swoje minusy i plusy – wybrać można co się chce.

Trzeci punkt to zupełnie nowe (a może już nie takie nowe i ktoś już tak robi?) podejście do parsowania stron i pokazywania ich klientowi. Parsowanie szablonu i upychanie do niego odpowiednich danych to jest ból i dla serwera i dla ludzi którzy muszą uczyć się specyficznego, użytego w naszym projekcie, języka szablonów.

Tak naprawdę XSLT jest, znów, kolejnym językiem do nauczenia.. ale w odróżnieniu od Smarty czy OPT spełnia więcej niż jedną funkcję i można go zastosować do dowolnej transformacji dowolnego pliku XML – ma to swoje plusy.

Co do serwera to zostaje on odciążony od tego – klient dostaje XML i XSTL i to jego przeglądarka zajmuje się przetworzeniem szablonu i wrzuceniu w niego danych – to jest piękne. Oczywiście to serwer może przetwarzać XMLa do XSLT przy użyciu np. XSL i klient dostaje już gotowego XHTMLa (ale skrótów, uff :-) ). Np. jeżeli nie chcemy udostępniać użytkownikowi XMLa z danymi.

Przy użyciu jednego zestawu danych XML możemy dostarczyć stronę na wiele platform przy użyciu różnych szablonów XSLT.

Wszystko to co powyżej opisałem da się zrobić przy użyciu DB2 w połączeniu z PHP.

Mam wrażenie, że nie wszystko zostało tu napisane, więc temat będę jeszcze rozwijał. Postaram się też opublikować kod implementujący te rozwiązania. Opis instalacji DB2 na Linuxie i połączenie z PHP znajdziecie na moim blogu parę postów niżej.


Napisane przez Zenobius | View Comments | Permalink

Fixasg.pl – napraw swoją replikę!

01:26, 05 maja 2010 roku

| FixASG.pl, Notka, Projekty

Po długich bojach udało się nam firmowo zrealizować FixASG.pl – pomysł meler’a, w wersji dla ASG. Pomysł prosty – czyli najlepszy ;-) Trzy kroki i dojdziecie do poradnika jak naprawić swoją luśnię.

W portalu publikować będziemy poradniki na temat naprawy replik do ASG. Redakcja powoli się buduje, więc tekstów dużo nie ma. Stale też wprowadzamy nowe funkcjonalności.

Jest to pierwszy portal stworzony na silniku Platformy Społecznej, o której więcej w kolejnych wpisach i przy odsłonach kolejnych serwisów.

Mam nadzieję, że portal przypadnie wam do gustu i będzie pomocy w bojach z waszą bronią :-)


Napisane przez Zenobius | View Comments | Permalink

Instalacja DB2 na Linux’ie. Łączenie DB2 z PHP.

23:11, 28 lutego 2010 roku

| Notka, Tutorial

Edit: dodałem tekst o tym co może wyniknąć z połączenia DB2 z PHP.

O tym, czemu w temacie tej notki DB2 i PHP występują w jednym zdaniu, będzie gdzie indziej. A zapewniam, że temat jest interesujący. Poniżej opis jak zainstalować DB2 na serwerze z Linuxem ( testowaliśmy to na systemach: Fedora, CentOS, RedHat, Ubuntu ). Większość tego tutoriala została najpierw przetestowana przez Kamila, mi udało się rozwiązać kluczowy problem. Ale.. po kolei.

Ten poradnik jest też dla tych, którym po instalacji DB2 i sterowników pod PHP wyskakują błędy połączenia z bazą mimo, że wszystko poszło jak trzeba (patrzcie na punkt ostatni)!

Jaki Linux?

Po pierwsze, musimy zdecydować się na jakąś dystrybucję. DB2, jako, że jest produktem IBM’a, lubi się z RedHat’em (czyli z Fedorą i CentOS’em również) oraz SuSE. Kamilowi udało się to wszystko zrobić na Ubuntu. Myślę, że i inne dystrybucje dadzą sobie radę.

Ja osobiście używam Windowsa ( tak, Windowsa ) jako środowiska do pisania kodu, natomiast Linux’a postawionego mam na SUN’owskim VirtualBox‘ie. Do plików na nim dostaje się przez Sambę. Dzięki temu PDT myśli, że pracuje na Windzie, a ja odpalam wszystko na Linuxie. Jak się komuś spodoba taki sposób, to napiszę kiedyś jak to sobie ustawić wszystko.

Ale.. nie chce wywoływać burzy Win vs. Linux, czy dystrybucja A vs. dystrybucja B, więc na tym co powyżej poprzestanę.

Czego mi potrzeba?

Na pewno wspomnianego już Linux’a ;-) Poza tym trzeba ściągnąć DB2 w wersji Express-C (testowaliśmy z wersją 9.5 jak i 9.7 ), chyba, że ktoś ma licencje na pełną wersję DB2. Ale nie sądzę, żeby wtedy wchodził na mojego bloga ;-)

Jako, że na końcu tego tutoriala mamy mieć możliwość podłączenia się do DB2 za pomocą PHP – to przyda się mieć Apache’a oraz PHP ( my używaliśmy do tego 5.3.1 ). My zaczynaliśmy od czystego, ale myślę, że nie będzie problemów z “brudnym”.

Przy instalacji DB2 przez setup graficzny trzeba mieć zainstalowaną Java’e. Sposób wytestowany jest zarówno graficznie jak i z linii poleceń, aczkolwiek druga opcja oznacza więcej ręcznego babrania się w konfiguracji. W przypadku serwerowych systemów trudno o jakiegoś managera okien, jeżeli bawimy się na Linux’owym desktopie – to droga wolna.

Aby skompilować DB2 oraz drivery do połączenia z PHP potrzebny jest.. kompilator ( d-oh! ). Wypada więc zainstalować gcc .

Instalacja DB2

Ja omówię instalacje z linii poleceń. Kamil pewnie wrzuci na swojego bloga informacje o instalacji graficznej. Chociaż ona zazwyczaj polega na czytaniu tego co na ekranie i umiejętnym klikaniu “next” ;-)

Z linii poleceń

Ściągamy plik, rozpakowujemy, wchodzimy do katalogu który powstał, potem od katalogu expc no i zaczyna się zabawa..

1. Uruchamiamy:
./db_install
2. Wybieramy katalog instalacji ( domyślnie jest to /opt/ibm/db2/V9.[x]), katalog trzeba zapamiętać! ( x to wersja DB2 którą się instaluje ).

3. Wpisujemy “EXP” i pacamy “enter”

4. Instalacja robi swoje, idziemy po herbatę/kawę/colę/lub-gdzie-chcemy ;-)

5. Jeżeli wróciliśmy i na ekranie znaleźliśmy błąd w stylu
ERROR:
The following library files could not be loaded by db2langdir
in /tmp/exp/disk1/db2/linux/install/../bin

libstdc++.so.5
libstdc++.so.5
to oznacza to iż brakuje nam niektórych bibliotek C++ i musimy zrobić coś takiego
yum install compat-libstdc++-33
Po czym wracamy do pkt. 1 .

6. Przechodzimy do konfiguracji serwera po instalacji ręcznej. Opis tego procesu, po polsku, znajduje się w InfoCenter IBM’a.

Parę wskazówek, sugestii i rzeczy pomocnych do pkt 6. :

1) nie bawcie się w zmienianie domyślnych, sugerowanych tam rzeczy, jeżeli nie wiecie co robicie. DB2 w wielu miejscach ma różne ustawienia, które również trzeba wtedy zmienić. Czasem trudno do tego dojść. Jeżeli zdecydujecie się na wprowadzenie DB2 na produkcyjny serwer – wtedy poświęćcie czas na dokładniejszą naukę i zrozumienie zasad działania DB2.

2) w podpunkcie 3cim, jako typ uwierzytelniania, wybieramy “server”. Jest to najpopularniejsza metoda uwierzytelniania do której jesteśmy przyzwyczajeni. Jako login/hasło do bazy podajemy wtedy usera którego stworzyliśmy w podpunkcie 1szym. Czyli domyślnie db2inst1 i hasło takie jakie utworzyliśmy. Jak wyżej – nie kombinujcie z tym, chyba, że wiecie co robicie :-)

3) konfiguracja komunikacji DB2. W podpunkcie 3cim wpisujemy tą komendę
update database manager configuration using svcename serwer1|3100
razem ze znakiem |. Oczywiście biorąc pod uwagę swoją nazwę usługi, port itp.

Instalacja DB2 to, aktualnie, prościzna. Jeżeli trzymamy się instrukcji i czytamy to co “mówi” nam system – to jesteśmy w domu. “Tricky” jest kolejny punkt..

Instalacja driverów do DB2 dla PHP

Do połączenia się z DB2 potrzebujemy jakichś driverów. My używamy PDO_IBM. Dostępny jest także ibm_db2 który bardziej przypomina zestaw funkcji do MySQL’a, więc nie bierzemy go nawet pod uwagę (OOP ftw ;-) ).

Bardzo ważne jest aby zainstalować PDO_IBM w wersji 1.2.5 . Wersje wyższe (podczas pisania tego tekstu dostępne są 1.3.0 i 1.3.1) powodują sporo błędów przy wykonywaniu zapytań.

Kolejną sprawą jest to, że Fedora uparcie twierdzi, że PDO jest zainstalowane gdy próbujemy je zainstalować poprzez PECL’a. Natomiast gdy próbujemy zainstalować PDO_IBM to twierdzi, że PDO nie widział na serwerze. Tworzy to pewien impas. Jedynym sposobem na przełamanie owego jest ręczna kompilacja sterowników. A oto jak sprawić, by PHP miało PDO oraz PDO_IBM :
pecl download PDO_IBM-1.2.5
tar -xzf PDO_IBM-1.2.5.tgz
cd PDO_IBM-1.2.5
phpize

Jeżeli nie mamy phpize, trzeba sobie zainstalować paczkę php-devel poprzez
yum install php-devel.i686
Teraz czas na zapamiętany wyżej katalog, w którym zostało zainstalowane DB2. Należy go wstawić w miejsce mojego /opt/ibm/db2/V9.5/ .
./configure --with-pdo-ibm=/opt/ibm/db2/V9.5/
make
make install

W tym momencie plik pdo_ibm.so znajduje się w katalogu z extensions do PHP. Teraz należy dodać extension=pdo_ibm.so . W ulubionym edytorze stwórz sobie plik pdo_ibm.ini w katalogu /etc/php.d/ i wpisz tam extension=pdo_ibm.so .

Teraz resecik apache’a i..
php -m
Jeżeli nie ma błędu, a na liście pojawia się pdo_ibm – to jesteśmy w domu :-)

Tworzenie bazy danych w DB2

W necie jest dobry “survival guide” dla DB2. Jako, że jest to baza danych z długą historią życiową ma sporo naleciałości niezrozumiałych dla ludzi którzy nigdy nie mieli nic wspólnego z bazą danych tego typu. Jednym z przykładów na “wtf?” jest długość nazwy bazy danych. Otóż maksymalna długość nazwy bazy danych to 8 znaków.

Podobną śmiesznością jest “escapowanie” stringów. Otóż żeby “uciec” znak ‘ należy go poprzedzić drugim ‘. Czyli np.
SELECT ... WHERE name = 'Don''t be stupid!';
Żeby dostać się do linii poleceń db2, zakładając, ze właściciel instancji nazywa się db2inst1 klepiemy:
su db2inst1
db2

W linii poleceń db2 klepiemy:
create database test
I mamy już bazę danych ;-)

Tworzenie bazy danych DB2 nie uwzględniającej wielkości znaków przy sortowaniu ( do czego przyzwyczaja nas każda inna baza w standardzie )

W DB2 9.7 lub wyższej możemy sprawić, aby silnik nie uwzględniał wielkości liter przy sortowaniu. Aby tak się stało musimy stworzyć bazę z odpowiednim “collate”
CREATE DATABASE test
USING CODESET UTF-8 TERRITORY PL
COLLATE USING UCA500R1_LEN_S2


Ważna sprawa! Nie można zmienić “collate” później. Więc stosujcie to domyślnie przy tworzeniu bazy danych. Pomysł zgapiono z oficjalnego poradnika IBMa dotyczącego DB2.

Problem z kodowaniem znaków do UTF8

Jeszcze jeden mały “pro tip” który może się przydać, żebyście nie musieli przechodzić przez to co ja. Aby klient zwracał do PHP dane z odpowiednim kodowaniem UTF8 trzeba przelogować się na usera db2inst1 ( su db2inst1 ) i odpalić komendę
db2set db2codepage=1208
Miłej zabawy ;-)

A o pytania, instrukcje i sugestie proszę uderzać w komentarze. Nie uważam się za guru Linux’a ani za guru DB2 – to co tu opisałem to to do czego udało mi się dojść w ciągu ostatnich 3-4 lat obcowania z tą bazą w połączeniu z PHP.


Napisane przez Zenobius | View Comments | Permalink

Bojkotuj IE6!

19:33, 29 lipca 2009 roku

| Ciekawe strony, Notka, Opinie, Praca

Wreszcie wielcy tego świata (no, Internetu ;-) ) wzięli się na poważnie za bojkotowanie Internet Explorera 6. Każdy kto robi strony zna ból optymalizacji wyglądu, JavaScript’a itp. Zaczął YouTube. W Polsce wziął się za to epuls.pl .

Chociaż najlepiej gdyby zrobiła to nasza-klasa.pl która przyciągnęła przed komputery rzeszę ludzi którzy z Internetu prawie w ogóle do tej pory nie korzystali. A to właśnie brak świadomości komputerowej prowadzi do ignorancji.

Od marca w Polsce trwa akcja stop IE6, która ma na celu obniżenie, do końca roku, liczby internautów korzystających z IE6 do mniej niz 5%. Według ranking.pl, od początku roku, udział IE6 w rynku przeglądarek w Polsce spadł o 10% z 24% do 14% – tak więc wszystko jest na dobrej drodze :-)

W skrócie: czemu IE6 to przeżytek?

Jest to przeglądarka która liczy sobie ponad połowę wieku internetu. Istnieje od 2001 roku. Microsoft dawno przestał ją wspierać i tworzyć do niej aktualizacje.

To jak używać magnetofonu w erze CD, video w erze DVD, albo jak to ujęli trafnie na ie6.pl czarno-białego, 35cio letniego telewizora w erze telewizji HD.

Czy byłby sens wymyślania HD skoro ludzie maja antyczne telewizory?

Jasne, kupienie telewizora oznacza wydanie pieniędzy. Ale w przypadku Windows’ów mamy wiele możliwości: aktualizacja systemu do nowszej wersji, wgranie update’ów (w XP można zaktualizować system i mieć choćby IE7), możesz zainstalować też dowolną inną przeglądarkę taką jak FireFox, Opera, Chrome.

Jeżeli masz pirackiego windows’a  to nie masz wyboru i musisz wgrać FF, Opere albo Chrome.

Jeżeli siedzisz w pracy i nie masz wpływu na to co jest zainstalowane na Twoim komputerze, to idź do administratora systemu z jakimś dobrym piwkiem albo kilkoma i podaj mu link do http://ie6.pl – niech poczyta i zrobi wam w firmie update – to nie kosztuje nic, oprócz jego czasu.

No, chyba, że Twoj szef nie chce, żebyś oglądał strony w pracy ;-) wtedy zostanie przy IE6 na pewno się sprawdzi, bo niedługo żadna strona nie będzie tej przeglądarki obsługiwać ;-)

Zeno.pl przyłącza się do tej chwalebnej akcji! :-)

Portale, które tworzymy w ramach firmy, nie będą obsługiwać wszystkich funkcji przy korzystaniu z IE6. Nie będą też zawsze wyglądać tak jak ich wersje pod teraźniejsze przeglądarki. Czas który spędzilibyśmy optymalizacją pod IE6 zostanie zagospodarowany na robienie nowych rzeczy.

Będziemy też odradzać klientom używanie IE6, ale jeżeli ktoś sie uprze, to stworzymy stronę również w takiej wersji. Natomiast grafika będzie wtedy odpowiednio dostosowana pod IE6 i cudowną ere kwadratowych, ciężkich stron na tabelkach ;-)


Napisane przez Zenobius | View Comments | Permalink

Czemu PHP a nie ASP lub JSP?

11:36, 26 lipca 2009 roku

| Opinie, Praca

Ostatnio ktoś mnie zapytał “czemu akurat PHP?”.

Gdy stałem przed wyborem języka w którym będę tworzył strony/aplikacje internetowe zrobiłem rozeznanie w terenie.

ASP oznacza IIS Microsoftu. Cóż, mimo, że pracuje na Windowsie (tak, pracuje na Windowsie), to nie ufam temu systemowi jako systemowi na serwer. Poza tym Windows oznacza licencję, co oznacza wydawanie pieniędzy. Gdy ma się 16 lat wizja kupowania Windows Server jest przerażająca. Chociaż dziś, po 7 latach, nie zmienił bym zdania ;-)

No i kurde.. serwer który musi mieć odpaloną grafikę? Nieee.. to nie jest normalne.

JSP oznacza Javę. Java jest ciężka. Maszyna wirtualna to narzut. Java nie jest demonem prędkości. Jedyny plus Javy to przenośność. Ale ten sam plus ma PHP. Do pisania aplikacji internetowych JSP sie nie nadaje. Grono przeszło na Pythona, strona Plus GSM bardziej nie śmiga niż śmiga..

Stanęło więc na PHP. W końcu język ten został stworzony po to, żeby pisać aplikacje internetowe. Kod działa na każdym systemie na którym można zainstalować serwer WWW który go obsługuje (Apache, lighthttpd, you name it..). Kod jest szybki, język się rozwija. A ja lubie Open Source i wszystko co się z nim wiąże (tak, wiem, Zend trzyma łapę na PHP, ale to co się dzieje z PHPem jest wg mnie bardzo sensowne).

Koszty związane z PHPem to dobra książka która go nauczy i łącze do internetu :-)


Napisane przez Zenobius | View Comments | Permalink

Giganci komputerowi (i my – szaraczki ) w “czasach kryzysu”

16:18, 27 października 2008 roku

| Artykuły z błędami, Opinie

Chyba redakcja Computerworlda śpieszyła się z opublikowaniem artykułu i zrobili parę byków.

Jest tu cała masa mniejszych lub większych  błędów ortograficznych czy powtórzeń słów.

Co do samego artykułu:

Po pierwsze “kryzys” ( to słowo jest zdecydowanie nadużywane i przede wszystkim przesadzone ) dopiero może się zacząć. Komentarz do artykułu napisany przez Anubisa dobrze oddaje to co się tak naprawdę dzieje. Trudno żeby od razu zyski wszystkich gigantów posypały się na łeb na szyję. Szczególnie, że giganci działają na wielu rynkach – często na tych, których kryzys nie dotyczy.

Po drugie – informatyka rozwija się szybko. Wydatki na reklamę w internecie mają przegonić te przeznaczone na reklamę w radiu, gazetach i telewizji. Powodem tego jest możliwość większego kontrolowania grupy docelowej i tego jak reklama działa – czyli zwrotu inwestycji i kontroli wydatków.

W czasach gdy benzyna i ropa drożały zaczęły rozwijać się systemy do komunikacji online – np. video-konferencji. Okazało się, że zamiast lecieć (paliwo) czy jechać (paliwo) można porozmawiać przez Internet.

Gdy ludzie nie mają pieniędzy – szukają możliwości kupienia rzeczy jak najtaniej, więc przydają się portale aukcyjne i porównywarki cenowe.

Aplikacje, czy to internetowe, czy stand-alone  pomagają zautomatyzować pracę, zwiększyć jej efektywność. Dzięki czasowi zaoszczędzonemu na powtarzających się zadaniach można skupić się na czymś nowym. Zamiast ręcznie “pielęgnować” dane można zlecić to systemowi. Zamiast samemu przekazywać wiedzę drugiej osobie, można przekazać jej podstawy, a resztę udostępnić przez system zarządzania wiedzą. Zamiast pisać odręcznie faktury można zrobić sobie szablon w (Open)Office. Itd.

Gdy trzeba będzie szukać oszczędności, trzeba będzie zainteresować się tym co daje nam informatyka.

Moim zdaniem, jeżeli nawet kryzys nadejdzie to informatyka i Internet, w najgorszym przypadku, będą stały w miejscu. A jak dobrze pójdzie to jeszcze na tym zyskają. A osoby które najszybciej zdadzą sobie sprawę z tego, że inwestycje (zarówno czasu – przez wykorzystywanie tego co nam Internet daje, jak i pieniędzy – przez kupowanie rozwiązań) w informatykę dają zysk będą miały największe szanse przeżyć kryzys “obronną ręką”.

Update:

Temat został podchwycony przez TVN w tym artykule.


Napisane przez Zenobius | View Comments | Permalink