Biegi długodystansowe
Biegi długodystansowe były moją pasją przez wiele lat. W tym czasie przebiegłem dwa maratony oraz szacunkowo 2000 km.
Programista • Coach • Trener
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
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
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.
„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ń. |
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.
Biegi długodystansowe były moją pasją przez wiele lat. W tym czasie przebiegłem dwa maratony oraz szacunkowo 2000 km.
Czy zastanawiałeś się kiedyś, jak to jest, że tak wielu ludzi jest uzależnionych od hazardu? Jak to się dzieje, że – mimo iż wiedzą, że w kasynach pieniądze się na ogół przegrywa, a nie wygrywa – ciągle grają i przegrywają w nich całe swoje majątki? Jak to jest możliwe?
Poznałem wielu początkujących trenerów i pewną liczbę osób doświadczonych w tym zawodzie. Pomiędzy pierwszymi a drugimi rysowała się jedna wyraźna różnica – pierwsi prowadzili swojej zajęcia w sposób przypominający wykłady. Drudzy zdecydowanie preferowali metody interaktywne i warsztatowe. Początkujący trenerzy najczęściej wynoszą swój model prowadzenia zajęć z czasów studiów, ale szybko odkrywają, że jest zupełnie nieefektywny. I wtedy szukają sposobu, by uczynić swoje zajęcia bardziej interaktywnymi. Jednym ze sposobów, by poznać naukowe metody uczenia jest sięgnięcie po książkę „Telling Ain’t Training” Harolda Stolovitcha i Erici Keeps, którą i ja przeczytałem, by podnieść swój warsztat trenerski.
Moasis to projekt, który miałem przyjemność stworzyć od początku do końca sam, a do tego odniósł bardzo duży sukces komercyjny, zarabiając około 1 000 000$ w ciągu roku i około 20 000 000$ w ciągu 5 lat.
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.
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.
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.
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ń.
W jednym z poprzednich artykułów opisałem ideę działania operacji asynchronicznych. Poza wieloma zaletami operacje asynchroniczne mają jedną poważną wadę – są skomplikowane. Stosunkowo trudno jest zaimplementować dużą, multiplatformowa aplikację. Oczywiście możliwe jest obudowanie funkcji do obsługi operacji asynchronicznych klasami, które znacznie uproszczą nam korzystanie asynchronicznych operacji. Dzięki podejściu obiektowemu i zastosowaniu rozwiązań wyższego poziomu
można utworzyć prosty i łatwy w użyciu interfejs.
„Spełnij swoje marzenia” to multimedialny kurs stworzony w technologii Flash. Przy pomocy ciekawego narzędzia można połączyć dźwięk, obraz (w tym animacje) i tekst by stworzyć multimedialny wykład. Tutaj technologia została wykorzystana by nauczyć Cię podstaw samorozwoju, w tym technik budowania zbalansowanego życia.
Certyfikaty, które otrzymałem po egzaminach lub ukończonych kursach walki wręcz.
Zdjęcia z weekendowego kursu przetrwania w trudnych warunkach.
Moje aktualne CV w języku angielskim.
Zdjęcia pochodzą z dwudniowej wyprawy na szczyt Panchase w Himalajach.
W dobie wielu konkurujących ze sobą systemów operacyjnych programista często staje przed wyborem platformy docelowej. Często okazuje się, że wybór ten nie jest prosty, ponieważ różni użytkownicy mają różne oczekiwania w stosunku do platformy. Podobnie było w przypadku oprogramowania telekomunikacyjnego, którego rozwijaniem zajmuję się dotychczas. Ze względu na łatwość i dobrą znajomość środowiska pierwotnie wybrany został system operacyjny Windows. Niestety, okazało się, że dostawca sprzętu niektóre potrzebne funkcje udostępnia jedynie pod systemem Linux RHEL. Najlepszym rozwiązaniem podczas pisania oprogramowania jest takie tworzenie kodu, aby był on dostępny pod maksymalną liczbą platform. Łatwo powiedzieć.