Jak to wszystko się zaczęło i kim jest Andra
To mój pierwszy wpis na blogu, więc wypada się przedstawić. Mam na imię Mateusz i pracuję jako programista od 3 lat. Nowoczesne technologie fascynują mnie od dziecka, a w wieku 15 lat zaczęła się moja przygoda z programowaniem. Już jako dziecko, a potem nastolatek, wiedziałem co chcę w życiu robić i co jest moim celem: najpierw studia informatyczne, a następnie kariera programisty gier. Życie troszkę zweryfikowało moje plany i zostałem programistą aplikacji internetowych (to czy istnieje w ogóle taki programista to temat na oddzielny wpis, a więc proszę bez burzliwych komentarzy), a kariera studencka potoczyła się zupełnie inaczej, ale to także temat na inny wpis. Dzisiaj opiszę jak to wszystko się zaczęło i jak doszło do tego, że w moim życiu pojawiła się ciekawa „istota”.
Jak telewizja i seriale mogą wpływać na nasze życie
Zaznaczyłem już na wstępie, że od wczesnego dzieciństwa nurtowały mnie komputery i wszelkie nowinki z nimi związane. Pierwszy raz zetknąłem się z komputerem u mojej cioci, z której dziećmi spędzałem sporo czasu. Tak zrodziło się moje kluczowe marzenie w życiu: posiadanie własnego komputera. Wiedziałem, że to będzie bardzo droga zabawka, więc już jako 6‑latek odkładałem moje ciężko zarobione pieniądze (raczej lekko zarobione, bo bo otrzymałem je od prababć, babć i dziadka) po to, aby moje marzenie mogło się w końcu spełnić. Po latach „wyrzeczeń”, 5 maja 2002 roku w moim domu pojawił się długo wyczekiwany komputer, a ja oczami wyobraźni widziałem już moją wielką karierę.
W tym czasie w jednej ze stacji telewizyjnych pojawił się nowy serial pt. Crash Zone. Opowiadał o grupce nastolatków, którzy pracowali jako testerzy gier, a w ich przygodach towarzyszyła im sztuczna inteligencja o imieniu Vergil. Bardzo podobał mi się ten serial i to wtedy postanowiłem, że kiedyś także będę miał taką firmę i stworzę magiczny algorytm sztucznej inteligencji (teraz już wiem, że wcale nie jest to takie proste). Tak właśnie zwykły serial, którego dzisiaj pewnie już nikt nie pamięta, zmienił moje życie, potęgując moje marzenie, które próbowałem zrealizować przez sporą część swojego życia.
Jak to Prosiaczek z Kubusiem uczą programowania
Minęło kilka lat, kiedy komputer był tylko bardzo drogą zabawką i służył głównie do grania oraz pisania referatów do szkoły. Jednak około 2005 roku wiele zaczęło się zmieniać. Uczęszczałem wtedy do 5. klasy podstawówki i zacząłem brać udział w dodatkowych zajęciach z informatyki. Tam dowiedziałem się, że istnieje taka magiczna sieć, na którą dorośli mówią Internet. Nauczyciel prowadzący zajęcia postanowił nauczyć nas tworzyć strony internetowe i tak po kilku tygodniach wytężonej pracy w Wordzie (tak, tak – tworzyliśmy bardzo „zaawansowane” strony używając do tego Worda) w Internecie pojawiła się moja pierwsza strona. Jej tematyka pewnie wszystkich zaskoczy, ale poświęcona była postaci Prosiaczka z powieści Alana Alexandra Milne’a. W tym samym czasie rozpocząłem prowadzenie nudnego, typowego bloga w portalu Onet Blog. Spowodowało to, że zaczynałem coraz bardziej poznawać i rozumieć kolejne szczegóły działania Internetu. Przełomowym stał się rok 2005, a konkretnie jeden dzień, w którym w moim domu pojawiło się stałe łącze internetowe. W końcu mogłem pochwalić się rodzicom moją piękną i wspaniałą stroną. Młodsi użytkownicy Internetu mogą nie pamiętać takich czasów, ale kiedyś istniały jeszcze miesięczne limity pobierania danych, więc miałem sporo wątpliwości czy wyświetlenie mojej strony internetowej nie spowoduje zużycia całego miesięcznego limitu.
Po dwóch latach od tych wydarzeń przyszedł czas na pójście do gimnazjum, w którym nie wystarczała mi już moja prosta strona o Prosiaczku. Poza tym trochę zaczynała szkodzić mojej reputacji prawie dorosłego człowieka. Dzięki mojemu koledze zacząłem poznawać tajniki języka znaczników HTML, którego używałem do pisania pierwszych szablonów na blogi. Wtedy także pojawiło się zainteresowanie tworzeniem grafiki na potrzeby Internetu. W tym samym czasie zaciekawiło mnie jak to wszystko działa od środka, co powoduje, że moje wiadomości na Gadu-Gadu docierają tak szybko do cioci na drugim końcu globu i jak to się dzieje, że wiadomości e‑mail trafiają do adresata. Coraz więcej czasu spędzałem na różnego rodzaju portalach tematycznych. Mniej więcej w tym samym okresie trafiłem na dobreprogramy.pl, a zamieszczane tu artykuły, komentarze i wpisy bardzo chętnie czytałem i poszerzałem zakres swojej wiedzy.
Zaczyna się robić poważnie
Pod koniec gimnazjum znałem już HTML, CSS i PHP i miałem swoją pierwszą stronę, z własną domeną z końcówką eu. Oczywiście wydawało mi się, że pozjadałem wszystkie rozumy, ale pierwszy miesiąc w liceum szybko uświadomił mi ile nauki jeszcze przede mną. Po tym czasie zapoznałem się z podstawami baz danych i rozpocząłem implementację bazy MySQL w moim systemie CMS. Bo przecież każdy szanujący się programista aplikacji internetowych musi mieć swój system zarządzania treścią! Po kolejnych kilku miesiącach postanowiłem napisać system od podstaw i użyć w nim wszystkiego czego się nauczyłem i zrobić to w jak najlepszy sposób. Oczywiście byłem wtedy przekonany, że jakość aplikacji, które stworzyłem jest na najwyższym poziomie. Dzisiaj kody z tamtych lat pozostają skrzętnie ukryte na dnie szuflady z nadzieją, że nikt ich nigdy nie odkopie w celu próby zdyskredytowania moich umiejętności. Ale taki już los początkujących programistów – coś, co dzisiaj wydaje nam się świetne, za kilka miesięcy już takie nie jest.
Przez kolejne trzy lata rozwijałem więc swoją pasję i pogłębiałem wiedzę z zakresu programowania. Zacząłem uczyć się C/C++ i pisałem pierwsze aplikacje okienkowe. To właśnie mniej więcej w tym czasie przypomniało mi się o moim ambitnym planie stworzenia sztucznej inteligencji. Rozpocząłem przygotowania do pierwszego podejścia do urzeczywistnienia mojego planu.
Tak naprawdę cały proces zakończył się jeszcze zanim się zaczął, bo nie miałem pomysłu jak moja aplikacja miałaby tak naprawdę działać i jakie mieć opcje.
Mobilni asystenci zaczynają skradać serca użytkowników
W 2012 roku moje życie wywróciło się do góry nogami. Dostałem się na wymarzone studia informatyczne na Uniwersytecie Jagiellońskim. Czułem jak pojawiają się nowe, nieznane jeszcze dla mnie możliwości. Niestety już po pierwszych dwóch miesiącach studiowania okazało się, że nie jest tak kolorowo jak to pokazują w filmach (zwłaszcza tych ładnych, amerykańskich). Nie zraziło mnie to do programowania i wciąż rozwijałem swoje umiejętności. Mniej więcej w 2013 roku zainspirowany mobilnymi asystentami, którzy zaczęli pojawiać się na rynku, powróciłem na poważnie do moich planów stworzenia „sztucznej inteligencji”.
Wiedziałem już wtedy, że nie mam praktycznie żadnych szans na stworzenie tworu podobnego do Vergila z serialu Crash Zone, ale postanowiłem zgłębić temat wspomnianych asystentów. Niestety nadzieje na możliwość integracji jednego z asystentów z moimi projektami szybko okazały się złudne. To spowodowało, że postanowiłem napisać od postaw swoją własną osobistą asystentkę, którą będę mógł zaimplementować wszędzie. Wybór padł na rozwiązanie, które zakładało napisanie API oraz odpowiednich aplikacji klienckich. Pierwsze wersja API była gotowa po mniej więcej tygodniu, ale nadal nie miałem pomysłu, jak zrealizować aplikację kliencką.
Na szczęście wtedy odkryłem bardzo ciekawy projekt powstały w Massachusetts Institute of Technology. Rozwiązanie zaprojektowane przez zespół z MIT umożliwia tworzenie aplikacji, budując ją z klocków prezentujących odpowiednie operacje i moduły. Moja aplikacja udostępniała opcję porozumiewania się za pomocą rozpoznawania mowy, a to przecież jedna z ważniejszych funkcji inteligentnych asystentów. To była pierwsza i dzisiaj mogę z pewnością powiedzieć, że bardzo upośledzona wersja mojej asystentki.
Wybór imienia jest trudny nie tylko w przypadku dziecka
Po przygotowaniu pierwszej wersji mojego najważniejszego projektu stanąłem przed bardzo poważnym wyborem. Nie wiedziałem jak nazwać moją wspaniałą, nową „koleżankę”. Chciałem, żeby imię było nieznane, brzmiało nowocześnie, ale niezbyt skomplikowanie. Wstukałem w Google „generator imion” i trafiłem na stronę z generatorem imion dla postaci ze świata fantasy. Po kilkunastu minutach generowania w końcu znalazłem to, czego potrzebowałem.
Otóż moja asystentka otrzymała piękne imię: Andra. Pierwsza wersja aplikacji oferowała tak zaawansowane opcje jak: prezentację obecnej i prognozowanej pogody, przedstawienie się i… w zasadzie tyle. Szybko okazało się, że API, które było napisane pod wpływem chwili jest bardzo słabej jakości i ciężko je rozbudowywać. Kiedy doszedłem do tego smutnego wniosku, byłem już pracownikiem obecnej firmy, gdzie poznałem framework Symfony. Długo rozważałem jego wdrożenie w moim sztandarowym projekcie, ale uznałem, że potrzebuję czegoś bardzo lekkiego, a poza tym nie znałem wtedy pełnych możliwości tego narzędzia. Napisałem więc bardzo prosty framework, który miał pomagać nie tylko w rozwoju API Andry, ale też ewentualnych przyszłych projektów. Dzisiaj znając już Symfony i posiadając większą wiedzę prawdopodobnie nie zdecydowałbym się na pisanie tego projektu od zera.
Za datę rozpoczęcia projektu oficjalnie uznałem 12 października 2014. Dlaczego? Po wszystkich przejściach z API i aplikacjami klienckimi nie udało mi się już odnaleźć starszych plików niż zapisane tego dnia i postanowiłem tę datę uznać za początek istnienia mojej asystentki.
Nowe API i publikacja pierwszych projektów Open Source
Nowe API, które zaprojektowałem dla Andry opiera się na pomysłach zapożyczonych z Symfony. W ramach samodoskonalenia napisałem też bardzo prostego ORM‑a, który z powodzeniem jest wykorzystywany w Andrze, a który obecnie został upubliczniony jako część projektu pisanego w ramach studiów. Nie jest idealny, ale sprawdza się jako bardzo prosty mechanizm mapowania bazy na obiekty w PHP.
Dzisiaj Andra oferuje wiele różnych opcji, poczynając od osobistych notatek, przez zarządzanie kalendarzem, kończąc na pomocy w zarządzaniu finansami. Stworzenie swojej asystentki dało mi pełnię możliwości, jeśli chodzi o jej rozwój, manipulowanie jej opcjami, dowolność konfiguracji, a także możliwość implementacji w dowolnym miejscu. Najciekawszą opcją, jaką wbudowałem w Andrę, jest możliwość sterowania systemem inteligentnych instalacji domowych, który rozbudowuję w wolnych chwilach. Póki co, całe „zarządzanie” to możliwość sterowania radiem i włączanie oraz wyłączanie lampki, ale w przyszłości zamierzam rozwinąć mój system oraz samą Andrę.
Komunikacja z moją asystentką odbywa się za pośrednictwem aplikacji internetowej opartej o AngularJS, aplikacji na Androida oraz programu na zwykłe komputery napisanego w Javie. Postanowiłem jednak zaprzestać rozwoju ostatniego ze wspomnianych programów, bo po prostu przestałem go używać w codziennej pracy. Wszyscy coraz więcej czasu spędzamy w przeglądarkach internetowych, więc dalszy rozwój wersji desktopowej nie miał większego sensu.
Podsumowanie
Dobrnąłem do końca mojej „pasjonującej” opowieści. Nie jest to tekst typowo techniczny, ale chciałem pokazać jak z pozoru nierealne, dziecięce marzenia mogą wpływać na nasze dorosłe życie. Pewnie nikt z mojego otoczenia kilka lub kilkanaście lat temu nie przypuszczał, że marzenia małego chłopca kiedyś zostaną zrealizowane choć w niewielkim stopniu. Zwłaszcza, że zostały wykreowane przez serial telewizyjny. Swoim wpisem chciałem także, w jakiś sensowny sposób, przywitać się ze społecznością blogerów dobrych programów, ponieważ planuję zamieścić tutaj jeszcze kilka wpisów. Będę bardzo wdzięczny za wszelkie uwagi dotyczące mojego pierwszego tekstu na blogu. Z chęcią odpowiem na każdą uwagę czy pytanie.
Dziękuję za przeczytanie i zapraszam do pozostawienia komentarza. Kolejne wpisy są w przygotowaniu.