Witaj!

Witaj na mojej stronie! Stworzyłem ją ze względu na szybkie tempo naszego współczesnego życia. Wiele razy, kiedy poznawałem nowych klientów, znajomych lub kiedy po prostu nawiązywałem kontakt z kimś przez internet, potrzebowałem łatwiej i szybkiej metody, by powiedzieć ludziom coś o mnie. Ta strona jest rezultatem moich wysiłków, by móc to zrobić w formie jednego, krótkiego linka. Dzięki niej dowiesz się więcej o mnie, mojej pracy i zainteresowaniach.

Znajdziesz tutaj garść moich artykułów, galerie ze zdjęciami z ważnych wydarzeń lub podróży, próbki mojego kodu i informacje związane z pracą. Życzę Ci interesującej lektury.

Szymon Wieloch

Firmy, dla których pracowałem

Biologiczne pipeliny przeznaczone do badań nad rakiem.
Samochodowy router wiadomości (gateway).
Prototyp aplikacji zdolnej do wykrycia id otworzenia topologi sieciowej przy pomocy protokołu SNMP i kilku innych źródeł danych.
Rozwój nowoczesnego cyfrowego radia montowanego w luksusowych samochodach.
Platforma aukcji czasu rzeczywistego (ang. Real Time Bidding), która wyświetla reklamy na komórkach. Ten projekt (stworzony prawie całkowicie przeze mnie) zarobił 20 000 000 USD w ciągu kilku lat.
System zarządzania treścią (ang. Content Management System) największego polskiego portalu z informacjami i rozrywką.
Komponent do zarządzania i monitorowania najszybszej na świcie bazy danych przeznaczonych do celów analitycznych.
Mobilny klient VoIP, trochę podobny do Skype. Integrował się z interfejsem telefonu komórkowego, umożliwiając używanie normalnego interfejsu telefonicznego do prowadzenia rozmów przez IP.
Warstwa telekomunikacyjna systemu używanego w serwisach mobilnych. Odtwarza tzw. ring back tones, czyli muzykę zastępującą sygnał czekania na połączenia. Jest używany przez wszystkich polskich dostawców serwisów telekomunikacyjnych przez usługi takie jak „Czasoumilacz” czy „Granie na czekanie”.

Moje komercyjne projekty Moje CV

Zatrudnij mnie jako programistę

Mam ponad 10 lat doświadczenia w tworzeniu złożonych rozwiązań softwareowych dla najlepszych firm. Od kilku lat jestem samozatrudniony i pracuję kontraktach, najczęściej dla amerykańskich lub zachodnioeuropejskich firm. Jestem także otwarty na pracę zdalną.   Jestem dumny z bycia osobą bardzo efektywną i praktyczną. Uwielbiam pracę w dynamicznych, zwinnych zespołach, które w pełni wykorzystują moje umiejętności, wysoką motywację i zdolność eleganckiego rozwiązywania złożonych problemów.

Moje umiejętności koncentrują się wokół rozwoju oprogramowania oraz zarządzania tym procesem ze szczególnym naciskiem na C/C++, Rust, Python, stos webowy (HTML5, CSS, JavaScript) i metodyki zwinne (agile) takie jak Scrum czy Kanban. Specjalizuję się w niskopoziomowym programowaniu powiązanym z elektroniką, telekomunikacją, systemami czasu rzeczywistego lub wysokowydajnymi, a także finansami.

Skontaktuj się ze mną

Ukończone kursy i certyfikaty

„Elektronika i telekomunikacja” – studia magisterskie z elektroniki i sieci telekomunikacyjnych ze specjalizacją w telekomunikacji.
Master Of Buisness Administration – podyplomowe studia biznesowe znane z elitarnego poziomu. Amerykański dyplom National-Louis University.
„Coach i trener” – Partner W Rozwoju – podyplomowe studia z coachingu i trenerstwa.
PRINCE2 Foundation, PRINCE2 Practitioner – kursy i certyfikaty zarządzania dużymi projektami.
Professional SCRUM Master – szkolenie i certyfikat zwinnego zarządzani projektami informatycznymi.
„Project Management Foundation”, „Project Management Orientation” – wewnętrzne kursy IBM zarządzania projektami.
Cisco CCNA – roczny kurs konfigurowania i zarządzania sieciami informatycznymi.
Szkolenia „Budżetowanie projektów” i „Zarządzanie zespołem projektowym” – uzupełniające kursy zarządzania projektami.
First Certificate In English – certyfikat językowy.
Practitioner In The Art Of NLP – kurs i certyfikat NLP.
Ponad 50 godzin szkoleń z zakresu umiejętności interpersonalnych, organizacji pracy, negocjacji, motywowania i innych w czasie regularnych spotkań.
Szkolenia „Kontakt i relacja”, „Automotywacja” oraz dodatkowo ponad 80 godzin szkoleń z zakresu NLP, Gestalt i umiejętności interpersonalnych podczas cyklicznych spotkań.

Zdjęcia moich certyfikatów

Poznaj mnie

Dzięki tej stronie możesz także dowiedzieć się więcej o moim życiu prywatnym i charakterze. Umieściłem tutaj wiele moich artykułów, które napisałem w ramach studiów MBA, umieściłem na różnych forach, albo stworzyłem dla zaprzyjaźnionych blogów. Znajdziesz tu także zdjęcia z ważnych wydarzeń w moim życiu prywatnym i z podróży.

Losowe posty

Indie

Zdjęcia z prawie miesięcznej podróży po Indiach.

Biegi długodystansowe

Biegi długodystansowe były moją pasją przez wiele lat. W tym czasie przebiegłem dwa maratony oraz szacunkowo 2000 km.

Trening survivalowy

Zdjęcia z weekendowego kursu przetrwania w trudnych warunkach.

Ogrody Toskanii

Zdjęcia z tygodniowej wycieczki po jednym z najpiękniejszych regionów Włoch.

Łączniki zdań

Czy rozmawiając z drugą osobą i mówiąc jej o zaletach i wadach jakiegoś Twojego pomysłu chciałbyś, żeby ta osoba zapamiętała bardziej zalety, czy też wady? Właściwie to pytanie było tylko retoryczne, ponieważ jestem pewien, że zapamiętanie przez drugą osobę zalet jest dla Ciebie dużo lepszą perspektywą.

Himalaje

Zdjęcia pochodzą z dwudniowej wyprawy na szczyt Panchase w Himalajach.

Certyfikaty – walka wręcz

Certyfikaty, które otrzymałem po egzaminach lub ukończonych kursach walki wręcz.

Geneza NLP

NLP stworzyli na początku lat siedemdziesiątych Richard Bandler oraz John Grinder. Prowadząc wtedy grupy Gestaltowe (Gestalt to podejście psychoterapeutyczne) zauważyli oni, że w całym procesie psychoterapii tylko kilka punktów jest tak naprawdę istotnych, a także że często osoby mające wspaniałe możliwości (np. ich właśni trenerzy Gestaltu) sami nie mają świadomości, co robią, dlatego nie są w stanie przekazać w pełni posiadanych umiejętności innym osobom.

Gry w HTML5

W momencie pojawienia się HTML 5 zaczęło się pojawiać nowe zjawisko – gry komputerowe działające w przeglądarce (i niekorzystające z rozszerzenia Flash). Być może te gry są przyszłością współczesnej rozrywki…

Skok ze spadochronem

Zdjęcia z mojego skoku ze spadochronem z 4 km.

Jaki język programowania wybrać?

Współczesny świat IT wytworzył co najmniej kilkadziesiąt języków programowania. Każdy z nich ma swoje wady i zalety. Jeśli masz przed sobą jakieś zadanie do wykonania – który z nich powinieneś wybrać?

Programowanie urządzeń typu embedded

W sferze programowania – podobnie jak w modzie – istnieją pewne trendy. Od dłuższego czasu można zaobserwować tendencję do korzystania z prostych, wysokopoziomowych rozwiązań kosztem szybkości działania. Jest to spowodowane przede wszystkim rosnącymi kosztami tworzenia dużych systemów oraz tanienia mocy obliczeniowej komputerów. Najczęściej wykorzystywanymi językami wysokiego poziomu są Java oraz C#. Programowanie w tych językach jest niezwykle szybkie i proste. Badania wykazały, że w języku Java tę samą aplikację pisze się około dwóch razy szybciej niż w konkurencyjnym języku C++, do dla firmy oznacza ograniczenie kosztów produkcji oprogramowania o połowę. Jednak to podejście nie sprawdza się w każdym przypadku. Najlepszym przykładem sytuacji, gdzie programowanie na wysokim poziomie się nie sprawdza, są systemy tupu embedded. Są to wysoce wyspecjalizowane urządzenia, które ze względu na produkcję w milionach egzemplarzy najczęściej mają sprzętową moc obliczeniową ograniczoną do minimum.

Przykładem urządzenia typu embedded może by odtwarzacz plików mp3. Producent zamierza wyprodukować miliony podobnych urządzeń i dlatego będzie się starać, żeby koszty poszczególnych elementów były jak najniższe. Jeżeli oszczędzimy 1 zł na każdym urządzeniu, używając słabszego procesora, to ta niewielka kwota pomnożona np. przez 50 000 000 wyprodukowanych egzemplarzy da już znaczącą różnicę w kosztach produkcji urządzenia. Drugim powodem, dla którego urządzenia typu embedded mają niską moc obliczeniową, jest oszczędność energii. Im mniejsza jest moc obliczeniowa procesora i im prostsze oprogramowanie, tym dłużej będzie działać nasz odtwarzacz.

Przy produkcji wielu milionów prostych, wyspecjalizowanych urządzeń korzystających z baterii najczęściej nie opłaca się korzystać z języków niskiego poziomu, najczęściej C lub C++. Języki te dodatkowo pozwalają na wysoki poziom kontroli nad wewnętrznym zachowaniem aplikacji, np. umożliwiają zarządzanie przydziałem pamięci, co pozwala na znaczne przyspieszenie aplikacji, chociaż jest to możliwe tylko dzięki dodatkowej pracy wysoko wykwalifikowanego programisty.

Przykład systemu typu embedded

Jednym z najpopularniejszych systemów typu embedded są telefony komórkowe. Mimo że współczesne telefony mają już moc obliczeniową zbliżoną do komputerów, a ostatnio pojawiły się produkty firmy Blackberry, które wykorzystują sprzętową maszynę Javy i przez to umożliwiają szybkie wykonywanie aplikacji napisanych w języku wysokiego poziomu, to ciągle jednak telefony komórkowe traktowane są jako systemy z ograniczonymi zasobami i wymagające daleko idącej optymalizacji.

Jednym z najpopularniejszych systemów operacyjnych stworzonych do programowania aplikacji w językach niskiego poziomu jest Symbian. Jest to system operacyjny napisany w języku C++. Udostępnia on pełne API, które umożliwia programowanie aplikacji na ten system operacyjny w języku C++. Symbian został zaprojektowany z myślą o ograniczeniu zużycia zasobów i dlatego programista programujący na ten system operacyjny już od samego początku spotyka się z technikami optymalizującymi zużycie zasobów. Symbian np. nie wykorzystuje wprowadzonych do języka C++ wyjątków, tylko zapewnia swój własny mechanizm, tzw. leavy.

Niestety, optymalizacja sposobu programowania pociąga za sobą znaczne utrudnienie dla programisty. Symbian jest znany z tego, że jest jedną z najtrudniejszych platform programistycznych. Inną znaną cechą jest bardzo duża liczba błędów istniejących ciągle w systemie. Przy niskopoziomowym programowaniu niestety programiści mylą się znacznie częściej niż przy programowaniu wysokopoziomowym. Efektem błędów w systemie wielokrotnie są problemy ze stworzeniem działającej aplikacji. Programiści zmuszeni są do szukania obejść błędów, które właściwie nie powinny w ogóle istnieć. To dodatkowo zwiększa koszty stworzenia oprogramowania na ten system operacyjny.

Alternatywy

Firma Blackberry wprowadziła na rynek telefony komórkowe wykorzystujące tzw. sprzętową maszynę wirtualną Javy. Na normalnym komputerze aplikacja napisana w języku Java jest wykonywana przez zewnętrzny program, co dodatkowo spowalnia działanie aplikacji. wykorzystanie sprzętowej maszyny wirtualnej, czyli stworzenie procesora interpretującego bezpośrednio tzw. kod binarny Javy umożliwiło znaczne przyspieszenie działania Javy i tym samym otwarło drogę do programowania systemów w tym języku. Technologia ta jeszcze nie jest dobrze rozwinięta, ale stanowi ciekawą alternatywę dla tradycyjnego programowania niskopoziomowego systemów ebedded.

Czy programowanie niskopoziomowe się opłaca?

Niestety nie da się jednoznacznie odpowiedzieć na pytanie, czy niskopoziomowe programowanie systemów ebedded się opłaca. Z całą pewnością jest opłacalne wtedy, kiedy poziom komplikacji oprogramowania jest bardzo niski, urządzenie jest produkowane w milionach egzemplarzy i wykorzystywana jest bateria do zasilania urządzenia. Od pewnego momentu opłaca się już programować na wysokim poziomie, jednak przejście to jest płynne i podjęcie decyzji o zastosowaniu jednej lub drugiej technologii jest możliwe dopiero po daleko idącej kalkulacji kosztów i analizie wymagań.