W poprzednim roku wziąłem udział w konkursie Daj Się Poznać 2016. Miałem wiele różnych pomysłów, jednak wybrałem edytor agendy. Aplikacja ma zautomatyzować prace wykonywaną w Excelu i Wordzie.
Projekt AgendaEditor był rozwijany na GitHubie: https://github.com/mkczyk/agenda-editor/
Pełna wersja aplikacji nie powstała, ale udało mi się zrobić założoną wersję MVP (Minimum Viable Product – minimalna wersja produktu). Ostatnia wersja wyglądała tak (tutaj ostatni wpis z aktualizacją).
Dzięki konkursowi i rozwojowi projektu, powstał też prawie-kurs AngularJS. Nie jest to dokładnie forma kursu, ale w większości co drugi post dotyczył samego Angulara, a każdy kolejny zastosowania wiedzy w praktyce. Dlatego na blogu najlepiej wpisy czytać od końca (w kolejności dodawania). Tutaj wygodna kolejność:
- Wprowadzenie do AngularJS – Czyli co to w ogóle jest.
- Skąd czerpać wiedzę o Angularze? – Gdzie oprócz mojego bloga można poczytać o Angularze. Polecane książki.
- Hello world w AngularJS – porównanie z JavaScriptem – To tak naprawdę pokazuje czemu uczyć się Angulara. I oczywiście nieśmiertelne „Hello World”.
- Kontroler w AngularJS
- AgendaEditor: lista i formularz w AngularJS
- AgendaEditor: dynamiczne dodawanie pól
- Podpięcie Bootstrapa do AngularJS
- Korzystanie z Bootstrapa
- Menu w AngularJS czyli routing
- Uruchamianie aplikacji AngularJS
- Obsługa dat i godzin w JavaScript
- Dodawanie godzin w JavaScript
- Wymiana danych pomiędzy kontrolerami w AngularJS czyli serwisy
- AgendaEditor: wymiana danych pomiędzy zakładkami poprzez serwisy
- Gettery i settery dla dwustronnego wiązania w AngularJS
- Prosty import i eksport danych w AgendaEditor
- Drag & drop w AngularJS
Funkcjonalności jakie zakładam do dodania, to:
- Import danych z Google Docs (jak robimy formularz zgłoszeniowy, to dane lądują w arkuszu Google Sheets; zamiast ręcznie kopiować, dane mogłyby automatycznie lądować w edytorze po podaniu linku).
- Generowanie agendy w formie ogłoszenia (PDF/DOC/DOCX/PNG).
- Dodawanie przerw (nie tylko wystąpień).
Obecnie dużo da się zrobić po stronie klienta. Ale spodziewam się, że wreszcie przyda się backend i będę mógł pisać o Javie i Springu.
Wartymi rozważenia funkcjonalnościami jeszcze są:
- Automatyczne tworzenie ankiet Google Forms przez API. Często na konferencje/seminaria formularze zgłoszeniowe tworzone są własnie tam. Aplikacja mogłoby robić takie formularze automatycznie (a może i od razu pobierać link do arkusza).
- Aby utworzyć formularz, wymagane są uprawnienia. Dlatego należy dodać logowanie przez Google OAuth 2.
- I tutaj może już być wymagany backend. Przechowywanie w bazie zarejestrowanych użytkowników czy implementacja OAuth (przechowywanie niejawnych kodów aplikacji).
Chciałem również pobawić się sztuczną inteligencją (Machine Learning, Deep Learning np. TensorFlow lub Deeplearning4j). Ale w takiej aplikacji nie mam pomysłu jakie mogłoby mieć tu zastosowanie. Początkowo chciałem zaprzęgnąć uczenie maszynowe do pobierania danych ze zgłoszeń przez emailowych (często organizatorzy konferencji w ten sposób mają rejestrację – a potem trzeba szukać gdzie jest tytuł wystąpienia, kto się zgłosił itd.). Ale po pierwsze nie miałbym dużo danych uczących. A po drugie chyba lepiej próbować zachęcać do korzystania z formularzy zamiast pisania emaili ze zgłoszeniami (a co jakby zgłoszeń było 500?). Może uda się zastosować uczenie maszynowe w innym miejscu (np. wykrywanie pól w arkuszu z danymi). Albo po prostu pobawię się poza tym projektem (zobaczymy czy mi czas pozwoli).
Bawiłem się dokumentami google w pythonie, problem jaki napotkałem to krótki czas życia sesji. Praktycznie przy każdej operacji na arkuszu dla pewności trzeba było jeszcze raz otworzyć arkusz. Poza tym czas odpowiedzi, nawet pobranie wartości z jednej komórki był rzędu 2000-3000 milisekund, ale to być może wina biblioteki 😀
Jestem ciekaw jak to będzie wyglądać w Javie, a widzę, że ten projekt rozwija się w bardzo fajnym kierunku, na pewno będę śledzić bloga 😉 Powodzenia
A może znacie jakieś blogi na temat własnie sztucznej inteligencji? Bardzo mnie to interesuje!