Poniżej znajdują się komercyjne projekty, w których brałem udział na przestrzeni mojej kariery:

Ardigen(ardigen.com)

Biologiczne pipeline-y

Badania nad genetyką wymagają przetwarzania olbrzymich ilości danych, których przetworzenie na jednej maszynie zjęłoby miesiące lub lata. By skrócić ten proces stworzono systemy wirtualizacji zasobów sprzętowych (np. AWS Batch) oraz narzędzia pozwalające zrównoleglać tę pracę na tych wirtualnych maszynach (np. NextFlow). Taki proces przetwrzania konkretnego rodzaju danych nazywa się z angielskiego pipeline-em. Celem projektu było stworzenie oraz rowój kilku takich pipelinów przeznaczonych do badań nad nowotworami w zakresie szczepionek immunologicznych, leków mikrobiologicznych oraz testowania nowych terapii farmakologicznych.

Czas trwania: trwa nadal

Technologie: NextFlow, Python, R, Bash, Django, AWS, Kubernetes, Data Science

Global Logic (globallogic.com)

Samochodowy ruter wiadomości

Integracja i testowanie wewnętrznych części samochodu, w szczególności komponentu łączącego kilka różnych sieci samochodowych i przełączającego wiadomości między nimi.

Czas trwania: 18 miesięcy

Technologie: C, AUTOSAR, Perforce, Python, Jira

Collective Sense (collective-sense.com)

Wykrywanie topologi sieciowej

Narzędzie do wykonywania aktywnych skanów sieci w celu odtworzenia jej topologii. Aplikacja była zdolna do iteracyjnego przetwarzania hostów i routerów w taki sposób, by krok po kroku dostać się do wszystkich urządzeń w sieci i odtworzyć wszystkie urządzenia oraz połączenia pomiędzy nimi. Zostałem jedynym programistą tej aplikacji oraz zaprojektowałem, zaimplementowałem i testowałem cały kod przy tylko minimalnej pomocy ze strony specjalisty sieciowego i testera. Ten projekt był wyjątkowo mocno nastawiony na R&D i odkrywanie, co w ogóle jest możliwe, ponieważ zasadniczo nie ma standardowej metody wykrywania topologii sieciowej i żadna sieć nie była projektowana z myślą o udostępnianiu metainformacji o niej.  Aplikacja była częściowo oparta na algorytmach znalezionych w kodzie aplikacji o otwartym źródle OpenNMS, która ma w założeniach ten sam cel, ale szybko przemieściłem się dalej, wchodząc w technologie i protokoły, które nie były wspierane przez żadne aplikacje do wykrywania topologii  i musiałem  po prostu czytać specyfikacje protokołów i budować oraz testować swoje własne pomysły.

Głównym mechanizmem wykrywania topologii sieciowej było pobieranie informacji z urządzeń przy pomocy protokołu SNMP, konsoli, niektórych otwartych portów oraz przez parsowanie strony HTML do zarządzania danym urządzeniem. W ten sposób da się zebrać małe kawałeczki informacji o budowie sieci. Następnie trzeba połączyć te fragmenty w jedną pełną topologię sieciową przy pomocy swoich własnych algorytmów. Czasem haki i zgadywanie muszą zastąpić solidne informacje. Algorytm musi także poprawnie radzić sobie z przypadkami, gdy nie są dostępne wszystkie informacje i trzeba budować topologię poprzez wybieranie jej bardziej prawdopodobnych układów.

Niestety na rynku dostępne są tysiące różnych modeli urządzeń, setki protokołów sieciowych, setki standardów opisujących jak dane urządzenie powinno udostępniać informacje, które posiada, a każdy model ma setki błędów. To uczyniło niemożliwym zbudowanie aplikacji, która działałaby w każdej sieci i zmusiło mnie do stworzenia czegoś prostszego, co było zdolne do odtworzenia około 95% istniejących sieci – tych najbardziej popularnych.

Czas trwania: 19 miesięcy.

Technologie: Python, PostgreSQL, SNMP, Trello, Kanban, wiele różnych protokołów sieciowych

Automatyzacja pentestów

Automatyzacja wykonywania wielu konsolowych aplikacji, które testowały bezpieczeństwo urządzeń przez próbę złamaniach ich zabezpieczeń (np. nmpa, whatweb, metasploit). Później ten projekt został przekazany studentowi, a ja monitorowałem, przeglądałem kod i pomagałem mu kontynuować jego pracę.

Czas trwania: 3 miesiące

Technologie: Python, nmap, git, Kanban

Delphi (delphi.com)

Interfejs do zarządzania radiem samochodowym w HTML

Podczas rozwijania radia samochodowego radia nie mają interfejsów. By je przetestować podczas jazd testowych, potrzebny jest tymczasowy interfejs. Celem tego projektu było stworzenie interfejsu HTML, który połączył się do radia przy pomocy websocketów, a następnie przesyłał wiadomości sterujące. Interfejs zawierał także informacje nt. dostępnych stacji radiowych, jakości odtwarzanych stacji radiowych oraz informacje debugowe.

Czas trwania: 2 miesiące

Technologie: HTML, JavaScript, jQuery, C++, git, websockety

Prototyp strumieniowania audio

Wbudowany sterownik czasu rzeczywistego stworzony dla systemu operacyjnego czasu rzeczywistego NutteX. Jego głównym celem było pobieranie audio ze źródła i strumieniowanie go w cyfrowym formacie do innych części samochodu przy pomocy protokołu UDP, aby każdy głośnik w samochodzie miał dostęp do cyfrowej reprezentacji dźwięku i był w stanie wygenerować audio wysokiej jakości bez analogowych szumów.

Czas trwania: 2 miesiące

Technologie: C, NutteX, UDP, git

i2a Solutions (i2asolutions.com)

Skalowalna platforma aukcji w czasie rzeczywistym

To był mój największy sukces komercyjny – aplikacja, która w ciągu kilku lat zarobiła około 20 000 000 dolarów. Jej głównym zadaniem było wykonywanie aukcji miejsc reklamowych w czasie rzeczywistym i umożliwienie klientom wyświetlania reklam na urządzeniach mobilnych i stronach internetowych.  Kiedy zacząłem pracę dla firmy Moasis (za pośrednictwem i2a Solutions), ich oprogramowanie było w stanie poradzić sobie z zaledwie 200 aukcjami w ciągu sekundy. Zostałem jedynym programistą nowej wersji systemu, a tym samym także architektem całego mechanizmu dokonywania aukcji i rozdzielania pracy między poszczególne serwery. Przede mną stanęły dwa największe wyzwania – firma chciała osiągnąć bardzo dużą średnią wydajność, ale także czas przetwarzania pojedynczego żądania był kluczowy – wszystko powyżej 50 milisekund czyniło ten system bezużytecznym ze względu na budowę sieci do aukcji reklam.

Po stworzeniu od zera nowej wersji oprogramowanie działało na farmie wirtualnych serwerów i z łatwością radziło sobie z 80 000 żądań na sekundę. Średni czas odpowiedzi było w okolicach 1 milisekundy, a czas maksymalny w okolicach 5 milisekund. Wszystko to zostało osiągnięte przy pomocy darmowych i ogólnodostępnych narzędzi takich jak MySQL, Cassandra, Memcache itp. Kluczem okazały się dobre mechanizmy przewidywania ruchu, które wyeliminowały konieczność komunikacji między serwerami, a także agregacja żądań do bazy danych.

Niewielką częścią tej pracy było dokonywanie małych zmian w części frontendowej utworzonej w języku Python i frameworku Django.

Czas trwania: 15 miesięcy

Technologie: C++, Python, JavaScript, Boost, MySQL, CppCms, CppDb, Cassandra, Memcache, aplikacje czasu rzeczywistego

Aplikacja do zarządzania mistrzostwami pływackimi

Rozszerzenie istniejącego backendu aplikacji, która zbierała rezultaty w zawodach pływackich i później udostępniała te rezultaty przy pomocy API JSON-owego klientom webowym i mobilnym.

Czas trwania: 3 miesiące

Technologie: Java EE, JBoss, SVN, Hibernate, SQL Server

Dreamlab/Onet (onet.pl)

CMS w Onecie (zarządzanie treścią)

Moja praca polegała na rozwijaniu głównie backendu systemu zarządzania treścią napisanego oraz odrobinę frontendu napisanego w Qt w języku Python. Dodatkowo do moich zadań należały 24h dyżury, w których czasie byłem zobowiązany do naprawiania krytycznych błędów w działaniu systemu. Częścią pracy był też kontakt z redaktorami piszącymi teksty – użytkownikami systemu. Pod koniec pracy wyspecjalizowałem się w części systemu, która migrowała treści ze starego systemu do nowego – konwersja, usuwanie zbędnych komponentów (np. reklam wklejonych bezpośrednio w tekst), czyszczenie znanych i powtarzających się problemów.

Czas trwania: 19 miesięcy

Technologie: Python, JavaScript (Node.js), SVN, Scrum, ITIL, devops, chmura, PostgreSQL, Scrum

IBM (ibm.com)

Skalowalna sieć agentów

W pełni skalowalna sieć agentów, która była w stanie sobie poradzić z milionami podłączonych urządzeń i umożliwiała dwukierunkową wymianę wiadomości pomiędzy podserwisami i podagentami.

Czas trwania: 3 miesiące

Technologie: C, wiele różnych systemów operacyjnych, make, Jazz, Jira.

Zdalny skaner komputera

Podagent wykorzystujący poprzednio opisaną sieć agentową. Jego celem było wykonywanie skanów podłączonych urządzeń i znajdowanie zainstalowanego oprogramowania.

Czas trwania: 3 miesiące

Technologie: C, Jazz, wewnętrzne narzędzia IBM, Jira.

Komponent zarządzający bazą danych Neteeza

Neteeza jest korporacją kupioną przez IBM ze względu na ich fenomenalnie szybką bazę danych stworzoną do celów analityki biznesowej. Ma postać wielkiej szafy z dziesiątkami dysków, procesorów, komponentów FPGA, elementów sieciowych oraz jednostek zasilających.  Moja praca polegała na utrzymywanie u rozszerzaniu komponentu zarządzającego sprzętem, na przykład implementacja pobierania szczegółowych informacji z dysków przy pomocy protokołu SMART czy przeciwdziałanie tzw. „false positives”, czyli nieprawdziwym i krótkotrwałym alarmom zgłaszanym przez różne komponenty przez opóźnianie momentu, kiedy były one raportowane.

Czas trwania: 12 miesiące

Technologie: C++, AccuRev, wewnętrzne narzędzia IBM, Eclipse.

Qnective (qnective.com)

Klient VoIP na Symbiana

Klient VoIP stworzony na platformę Symbian, który integrował się z telefonem w taki sposób, że normalnie wykonywane połączenia telefoniczne przekierowywane były do wspomnianego klienta, a sam dźwięk i sygnały sterujące wysyłane były przez sieć IP. Do moich zadań należało m.in. zaprojektowanie protokołu komunikacyjnego pomiędzy serwerem a klientami oraz implementacja serwera SIP stojącego na localhoście na komórce (to był jedyny sposób na pełną integrację telefonu z aplikacją).

Czas trwania: 17 miesięcy

Technologie: C++, Symbian, SVN, Eclipse, VoIP, SIP, strumieniowanie audio po RTP

Klient VoIP na Blackberry

Utrzymywanie i poprawianie klienta VoIP na Blackberry. Głównym elementem projektu było poszukiwanie sposobu na odtwarzanie audio strumieniowanego w czasie rzeczywistym do komór przez strumień RTP (coś, czego Blackberry normalnie nie wspiera).

Czas trwania: 3 miesiące

Technologie: Java ME, Blackberry, Eclipse, SVN

Wind Mobile

NaviVoice

Mój pierwszy komercyjny projekt. Zostałem jedynym programistą aplikacji, która zarządzała telefoniczną sygnalizację i media używając do tego kart firmy Dialogic. Jej celem było utworzenie dużo prostszego i niezależnego od protokołu API dla biznesowych aplikacji wyższego poziomu. NaviVoice wspierał kilka analogowych protokołów, SS7, ISDN, SIP i kilka mniej popularnych technologii. Typowym zastosowaniem było odtwarzanie tzw. „Ring Back Tone”, czyli muzyki, którą użytkownicy mogą ustawić jako zastępstwo dla sygnału czekania dla przychodzących połączeń. W ramy projektu wchodziło utrzymywanie aplikacji, naprawianie błędów, migracja z Windowsa na rozwiązania multiplatformowe (głównie Windows i Linux) i implementacja protokołu BICC, który jest częścią stosu SS7.

Czas trwania: 13 miesięcy

Technologie: C++, Code Blocks, SVN, VSS, Windows, Linux, boost, Adaptive Communication Environment (biblioteka C++), stos SS7, SIP, VoIP

Platforma strumieniowania wideo dla urządzeń mobilnych

Projekt testowy wykorzystujący przesyłanie obrazu MPG4 przez sieć 3G jako rozmowy wideo. Aplikacja potrafiła wyświetlać różne filmiki, menu oraz reagować na wciskanie przycisków na telefonie. Projekt wykorzystywał karty firmy Dialogic razem z ich sterownikami i API.

Czas trwania: 3 miesiące

Technologie: SVN, C++, SS7, Eclipse