Archiwum autora: Marcin Kowalczyk

Hello world w AngularJS – porównanie z JavaScriptem

W tym wpisie przedstawię jak napisać najprostsze Hello World w AngularJS. Na prostym przykładzie pokażę także co nam daje Angular w stosunku do użycia samego JavaScriptu.

Najprostszy przykład

Najprostszym przykładem kawałka kodu, który może wykonać jakieś działanie po stronie użytkownika, będzie dodanie dwóch liczb.

JavaScript

Zacznijmy od przykładu, jak można by to zrobić w JavaScripcie (jeszcze bez użycia Angulara). Używamy standardowego szablonu strony w HTML5. W miejscu gdzie ma pojawić się wynik wstawiamy skrypt JavaScript dodający dwie liczby:

Widzimy wynik działania programu:

AngularJS

Teraz to samo chcielibyśmy uzyskać za pomocą AngularJS. Szablon strony się nie zmieni. W sekcji <head> musimy jednak dodać bibliotekę Angulara (plik js). W jednym w poprzednich wpisów pisałem skąd pobrać Angulara. Możemy go pobrać, zapisać w folderze z plikiem naszej strony, a następnie podać ścieżkę bezpośrednio do niego (jest to dobre rozwiązanie do pracy offline lub gdy chcemy zadbać o to, aby aplikacja działała bez podłączenia z innymi serwerami):

Do szybciej pracy i na potrzeby tego przykładu użyjemy serwerów CDN skąd będzie automatycznie pobierana biblioteka AngularJS w wersji 1.5.3.

Musimy również zainicjalizować aplikację (powiedzieć Angularowi gdzie ma działać tzn. który fragment strony będzie zarządzany przez Angulara – czyli zawartość którego tagu Angular będzie mógł zmieniać). Wystarczy dodać dyrektywę ng-app w tagu <body> (może być inny np. <html> lub jakiś nadrzędny <div>). O dyrektywach będzie później, ale używa ich się tak jak atrybutów HTML (w tym wypadku nie podajemy parametrów, więc nie ma znaku równości i określonej wartości).

Zaś w miejsce gdzie powinien pojawić się wynik wstawimy wyrażenie {{2+3}} (zamiast skryptu JavaScript z poprzedniego przykładu). Podwójne nawisy klamrowe oznaczają interpolację (czyli po prostu wykonanie kodu, obliczenie wyrażenia itd.). Będziemy z tego bardzo często korzystać.

Całość wygląda tak:

A wynik działania jest identyczny jak w poprzednim przypadku:

Hello World – przykład drugi

Zajmiemy się teraz troszkę bardziej skomplikowanym przykładem. Chcemy mieć pole tekstowe <input type="text"> i żeby tekst z niego był przepisywany gdzieś w inne miejsce na stronie. Ale żeby działo na bieżąco się to podczas pisania (a nie np. dopiero po kliknięciu przycisku).

JavaScript

W samym JavaScripcie jest to zadanie, w którym trzeba obsłużyć dwa przypadki:

  • onkeyup (puszczenie klawisza) – każdorazowo, gdy naciśniemy literę
  • onkeydown (naciśnięcie klawisza) – jeśli przytrzymamy klawisz, zostanie on wielokrotnie powtórzony. Tę sytuację też musimy obsłużyć.

Do tych dwóch zdarzeń dla znacznika <input> przypisujemy tą samą funkcję update() (o niej niżej). Musimy także nadać mu id, aby móc się do niego odwołać:

Należy także mieć gdzie dane umieszczać. Dlatego zróbmy <span> (równie dobrze może być jakiś <div>) z ustalonym id:

Przejdźmy teraz do funkcji update(), która będzie odpowiadać za przepisywanie tekstu (wywołuje się po każdym wciśnięciu lub puszczeniu klawisza).

Pobieramy tekst z naszego elementu <input> o id myText. Następnie jako zawartość elementu <span> o id myResult podajemy wcześniej pobrany tekst.

Całość kodu w tym przykładzie wygląda tak:

Wynik działania:

Prawda, że trzeba samemu zadbać o wiele rzeczy? Przejdźmy teraz do Angulara i zobaczymy jak on ułatwi nam pracę.

AngularJS

Angular zachęca do tworzenia dynamicznych i interaktywnych aplikacji internetowych. Zadanie, które mamy wykonać, to standardowe działanie. Wiele z nich jest niemalże gotowych.

Pierwszą rzeczą, którą musimy dodać to umieszczenie w tagu <input> dyrektywy ng-model, a jako parametr podanie dowolnej zmiennej:

Dyrektywa ng-model zapewnia dwukierunkowe wiązanie danych (ang. two way binding, dwustronne wiązanie). Modyfikacja zmiennej powoduje, że wszędzie gdzie jest użyta zmiany zachodzą automatycznie. Dlatego teraz wystarczy użyć dwóch nawiasów klamrowych (interpolacja wyrażenia)  z naszą zmienną myText:

Cały kod wygląd tak (dużo krótszy niż w poprzednim przykładzie, który robi to samo):

Wynik działania:

Podsumowanie

Za pomocą samego JavaScriptu da się zrobić to samo co w AngularJS. Można to jednak osiągnąć dużo mniejszym nakładem pracy. Zamiast dłuższego skryptu JavaScript: wystarczy użyć interpolacji wyrażeń w AngularJS np. {{2 + 3}}  lub {{jakasZmienna}}.W pierwszym przykładzie co prawda tak bardzo nie widać jak Angular ułatwia pracę, bo poświęciliśmy więcej pracy na samą jego konfigurację (to jednak trzeba zrobić tylko raz na początku tworzenia aplikacji). Aby skonfigurować AngularJS należy:

  1. Dodać bibliotekę (lokalny plik angular.js lub pobierany z serwerów) w tagu <script>.
  2. Zainicjalizować aplikację czyli określić, który tag będzie zarządzany przez AngularJS (po prostu dodać dyrektywę ng-app w którymś tagu).

Ale drugi przykład pokazał, że AngularJS naprawdę przyspiesza tworzenie aplikacji (szczególnie jeśli chodzi o standardowe działania).

Skąd czerpać wiedzę o Angularze?

AngularJS jest stosunkowo nową technologią (2009 rok), ale już na tyle dojrzałą, żeby powstało trochę dodatkowych materiałów. W tym wpisie przedstawię z czego ja się uczyłem, z czego można i co polecam.

Oficjalna dokumentacja

Najważniejszym źródłem wiedzy programisty jest zazwyczaj dokumentacja.
Dostępna jest pod adresem: https://docs.angularjs.org/api. Z niej dowiemy się z czego możemy skorzystać, jakie parametry przyjmują funkcje itd. Zawartych w niej jest również trochę przykładów. Często wystarczy skopiować fragment kodu i zmodyfikować na własne potrzeby.

Jednak jej struktura nie każdemu może przypaść do gustu. Czasem szybciej znaleźć coś w niej wykorzystując Google. Przykładowo, jeśli chcemy dowiedzieć się jak użyć funkcji $http (o niej będzie w kolejnych wpisach), łatwiej zadać pytanie w Google: „angular http”. Pierwszym linkiem (przynajmniej teraz) jest konkretna strona z dokumentacji.

Na oficjalnej stronie jest również dobry tutorial, omawiający po kolei jak tworzyć aplikację. Tutorial z podstawami AngularJS opublikowała również organizacja W3C.

Społeczność

Chyba każdy programista zna StackOverflow. Jest bardzo aktywny tag AngularJS. Tak samo jak z dokumentacją, wyszukiwanie przez Google może być szybsze.

Istnieją również grupy w serwisach społecznościowych:

Na Wykopie pod tagiem angularjs czasem coś się dzieje. Oczywiście na zagranicznym odpowiedniku, Reddicie na subreddicie r/angularjs pojawia się tego więcej.

Na forach internetowych aktywność jest mniejsza. Przykładowo na 4programmers w dziale webmastering, raz na jakiś czas pojawi się temat o Angularze.

Książki

Na początek polecam przede wszystkim AngularJS. Pierwsze kroki, autorzy: Dariusz Kalbarczyk, Arkadiusz Kalbarczyk. Dobrze wytłumaczone od podstaw, przyjemnie się czyta.

Istnieją jeszcze AngularJS. Praktyczne przykłady (Chandermani) oraz AngularJS. Profesjonalne techniki (Adam Freeman). Wszystkie trzy wydawnictwa Helion.

Jeśli ktoś woli, to te dwie ostatnie są również dostępne w języku angielskim: AngularJS by Example (wydawnictwo Apress) oraz Pro AngularJS (wydawnictwo Packt Publishing).

W języku polskim

Jeśli chodzi o polskojęzyczne materiały, to nie mamy tego dużo, ale trochę jest.

Są wspomniane już książki (szczególnie AngularJS. Pierwsze kroki). Istnieją miejsca w sieciach społecznościowych (np. AngularJS Polska na Facebooku).

Znalazłem również polskojęzyczny tutorial dostępny pod adresem:
http://10clouds.github.io/acodemy.io/
Są to materiały z warsztatów programowania acodemy.io, które już się odbyły. Nie jest tego dużo, ale podstawy są ładnie opisane. Swoją drogą, bardzo fajna inicjatywa z takim kursem (szkoda, że sam nie mogłem w nim uczestniczyć, aby doszlifować swoje umiejętności).

Aktywności w polskiej blogosferze związanej z Angularem nie ma dużej. Czasem pojawiają się pojedyncze wpisy na jego temat. Udało mi się znaleźć jeszcze jeden tutorial na blogu mrzepinski.pl/angularjs-tutorial.

Oczywiście zachęcam również do czytania tego bloga, który właśnie czytasz. Będą tu umieszczał wyselekcjonowane i najważniejsze informacje. A przede wszystkim praktyczne porady i wpisy związane z tworzeniem projektu w Angularze.

Wprowadzenie do AngularJS

Strony internetowe mogą być statycznymi plikami pobieranymi z serwera przez przeglądarkę użytkownika. Często jednak istnieje konieczność, aby treść na nich była dynamiczna, zmieniała się w zależności od tego co robi użytkownik. Istnieją dwa podejścia:

  • Zmiany wykonywane po stronie klienta. Przeglądarka użytkownika wykonuje skrypty i dynamicznie zmienia zawartość strony.
  • Zmiany wykonywane po stronie serwera. Wygenerowana „nowa” strona przesyłana do użytkownika. Są to aplikacje internetowe (aplikacje webowe).

Kiedyś aplikacje webowe pisało się głównie wykorzystując drugie podejście. Jeśli użytkownik wykonał jakąś interakcję (np. coś kliknął), to cała strona była przeładowywana (serwer generował „nową” stronę i wysyłał użytkownikowi). Używane były tu technologie PHP, Java (np. framework Spring MVC), C# (framework ASP.NET) itd.

Oczywiście można było dodać skrypty pisane w języku JavaScript, które trochę ożywiały stronę (np. powszechne zegarki, ruszające się menu itd.). Po wprowadzeniu klasy XMLHttpRequest (technologia AJAX), JavaScript mógł również komunikować się z serwerem. Oznaczało to koniec z odświeżaniem całej strony. Po wysłaniu zapytania i otrzymania odpowiedzi, przeładowywany jest jedynie fragment strony.

Czym jest AngularJS?

AngularJS jest frameworkiem JavaScript, który ułatwia tworzenie aplikacji webowych w taki właśnie sposób. Dzięki niemu w szybki i wygodny sposób możemy tworzyć jednostronicowe aplikacje webowe (ang. single-page application, SPA). Zapewnia wiele ułatwień, które wpływają na szybkość tworzenia profesjonalnych aplikacji np. wzorzec Model-Widok-Kontroler (ang. Model-View-Controller, MVC), system szablonów, dwukierunkowe wiązanie danych (ang. two way binding), szybkie tworzenie klientów REST i wiele innych. Z pewnością o wielu z nich będziesz mógł jeszcze poczytać na tym blogu.

Skąd pobrać Angulara?

Strona domowa projektu dostępna jest tutaj: https://angularjs.org/. Za rozwój AngularJS odpowiada Google. Obecnie, gdy powstaje wiele frameworków (szczególnie JavaScript), które zyskują popularność tylko na chwilę, możemy być bardziej spokojni o los tego konkretnego, gdyż czuwa nad nim duża firma.

W chwili pisania tego wpisu, istnieją dwie gałęzie Angulara:

  • AngularJS 1 – starsza, ale bardziej stabilna gałąź. Na tej się skupimy.
  • Angular 2 – nowsza, ale zdania o niej są podzielone. Na razie odpuszczamy (zobaczymy co z nią będzie dalej).

Teraz najnowszą wersją AngularJS 1 jest 1.5.3. Możemy ją pobrać stąd:
https://ajax.googleapis.com/ajax/libs/angularjs/1.5.3/angular.min.js
lub stąd:
https://code.angularjs.org/1.5.3/angular.min.js
Są to pliki zminifikowane (tak, żeby zajmowały mniej miejsca). Tego zazwyczaj będziemy używać.

Jeśli chcemy zobaczyć oryginalny plik (przed minifikacją), dostępny jest tutaj:
https://code.angularjs.org/1.5.3/angular.js

Zaś tutaj dostępne są dodatkowe moduły (czasem będziemy potrzebowali jakiś dodać do naszej aplikacji):
https://code.angularjs.org/1.5.3/
Jak możecie zauważyć, tam są również inne wersje, wystarczy poprzechodzić po strukturze folderów z adresu:
https://code.angularjs.org/

W kolejnych wpisach będziesz mógł znaleźć, jak napisać hello world w AngularJS oraz rozwijać aplikację webową opartą na nim.

Jak zrobić agendę seminarium – obecne rozwiązanie (Word)

W poprzedniej części przedstawiłem jak wygenerować taką listę wystąpień w Excelu:

15:00-15:30 – „Programowanie w Spring” – Jan Kowalski
15:30-16:00 – „Programowanie w AngularJS” – Janusz Nowak
16:00-16:15 – „Jak pisać dobry kod?” – Iks Iksiński
16:15-16:30 – „Długi temat związany z informatyką i programowaniem, taki że jest długi” – Igrek Przykładowy
16:30-16:50 – „Jakiś temat o informatyce” – Tomasz Kowalski
16:50-17:05 – „Jakiś przykładowy temat” – Anna Nowak
17:05-17:20 – „Przykładowy inny temat” – Jan Przykładowy
17:20-17:35 – „Przykładowy temat o czym innym” – Jan Przykładowy
17:35-17:50 – „Jakiś krótki temat” – Jan Przykładowy
17:50-18:05 – „Inny temat wystąpienia” – Jan Przykładowy
18:05-18:20 – „Jeszcze inny temat” – Jan Przykładowy
18:20-19:05 – „Jakiś przykładowy, ale dłuższy temat wystąpienia” – Janusz Prezentacji
19:05-19:20 – „Jeszcze inny przykładowy temat” – Jan Przykładowy
19:20-19:35 – „Temat przykładowy” – Jan Przykładowy

Teraz na jej podstawie przygotujemy dokument w Wordzie z agendą gotową do wydruku, a także grafikę do wstawienia do wydarzenia na Facebooku.

Szablon w Wordzie

Udostępniam szablon agendy: ogloszenie_seminarium_naukowe.docx. Można do niego wkleić powyższą, wygenerowaną listę wystąpień.

Będzie to wyglądać w ten sposób:

ogloszenie1

Jak widzimy, tekst jest dosyć surowy. Wprowadźmy drobne zmiany.

Po pierwsze zamieńmy myślniki pomiędzy godziną a tytułem na tabulatory (żeby był trochę większy odstęp). Można to zrobić za pomocą funkcji „Znajdź i zamień” (skrót: Ctrl+H) w Wordzie.
W pole „Znajdź” wklejamy:  – „  (oznacza to, że szukamy spacji, myślnika, cudzysłowu otwierającego – takie wystąpienie znajduje się tylko raz w danej linii z wystąpieniem).
W pole „Zamień na” wklejamy: ^t„  (oznacza to, że znaleziona powyżej wystąpienia chcemy zamienić na tabulator – jest to symbol specjalny w stylu Worda oraz otwierający cudzysłów, który wyżej usunęliśmy).

Znajdź i zamień

Po drugie dodajmy odpowiednie odstępy. Wstawimy interlinię 1,5 wiersza, żeby poszczególne wystąpienia były od siebie bardziej oddzielone. Wstawimy odstępy przed i po akapicie, żeby odstępy między wystąpieniami były większe niż odstęp pomiędzy liniami w przypadkach gdy tytuł jest długi i zawija się do kolejnej linii. Dla takich wierszy również dobrze ustawić wysunięcie 3,35 cm, aby zaczynał się równo z linią rozpoczęcia.

Zaznaczmy wklejony wcześniej tekst, kliknijmy prawym przyciskiem myszy → „Akapit” i ustawmy jak na zrzucie ekranowym poniżej:

tabulatory

Efekt będzie już dużo lepszy:ogloszenie2

Na koniec jeszcze chcielibyśmy dodać pogrubienie tytułów wystąpień. Wszak to zazwyczaj najbardziej interesuje słuchaczy seminariów czy konferencji. Ręczne zaznaczanie każdego tematu i stosowanie pogrubienia jest mozolne. Dlatego znowu skorzystajmy z funkcji „Znajdź” (Ctrl+H, zakładka „Znajdź” lub w starszych wersjach po prostu Ctrl+F).

W pole tekstowe wklejamy „*” (oznacza to, że chcemy znaleźć dowolny ciąg tekstu wraz z cudzysłowem otwierającym i zamykającym). Musimy jednak zaznaczyć opcję „Użyj symboli wieloznacznych”, aby gwiazdka * była zinterpretowana jako znak specjalny (aby ta opcja się pojawiła, musimy kliknąć przycisk „Więcej >>”).

Chcemy zaznaczyć wszystkie wystąpienia równocześnie, dlatego nie klikamy przycisku „Znajdź”, a „Znajdź w” → „Dokument główny”:
znadź do boldDzięki powyższym działaniom, zaznaczone zostaną wszystkie tytuły wystąpień. Możemy je teraz pogrubić za jednym razem:
ogloszenie3Mamy już gotową agendę w pliku DOCX do wydruku.

 

Zapis DOC do PNG

Nie ma prostego sposobu na zapis pliku z Worda jako grafikę np. PNG (niby istnieją np. narzędzia online, płatne lub mało znane, my skupimy się na stabilnych rozwiązaniach). Oczywiście możemy zrobić zrzut ekranu, ale rozdzielczość będzie dosyć mała.

Zapis DOC do PDF

Istnieją jednak dobre narzędzia do konwersji plików PDF na PNG. Dlatego najpierw musimy zająć się konwersją DOC (lub DOCX) do PDF.
Będzie to wyglądać tak: ogloszenie.docx → ogloszenie.pdf → ogloszenie.png.

Sposób 1. Word

W nowszych wersjach Worda (od wersji 2010) możemy zapisać DOC(X) jako PDF. Kiedyś nie było domyślnie tej opcji. W Wordzie 2007 należy doinstalować dodatek Zapisz jako PDF lub XPS. A w jeszcze starszych wersjach konieczne było skorzystanie z wirtualnej drukarki zapisującej do PDF (np. Bullzip PDF Printer).

Sposób 2. Office To PDF

Istnieje również narzędzie Office To PDF. Jest to mały program, dzięki któremu zapiszemy DOC(X) jako PDF. Po ściągnięciu i uruchomieniu wiersza poleceń w katalogu z programem i plikiem źródłowym możemy wpisać polecenie:

OfficeToPDF.exe ogloszenie_seminarium_naukowe.docx ogloszenie.pdf

Pierwszy parametr to oczywiście plik źródłowy, a drugi, plik docelowy.

Zapis PDF do PNG

Teraz, gdy już mamy plik PDF, możemy go przekonwertować na plik graficzny np. PNG.

Sposób 1: PDF do PNG. Adobe Acrobat

Jest to rozwiązanie płatne. Nie mylmy go darmowym Adobe Reader, w którym nie ma opcji zapisu do plików graficznych. Po prostu otwieramy plik PDF w Adobe Acrobat i zapisujemy jako plik PNG.

Sposób 2: PDF do PNG. ImageMagick

ImageMagick jest darmowym narzędziem o dużych możliwościach konwersji i przetwarzania grafik. Wadą dla początkującego użytkownika jest dostęp do funkcji jedynie za pomocą wiersza poleceń. Można go ściągnąć z oficjalnej strony.

Po instalacji uruchamiamy wiersz poleceń i przechodzimy do katalogu plikiem PDF, który chcemy zapisać jako PNG i wpisujemy polecenie:

convert -background White -flatten -density 300 ogloszenie.pdf ogloszenie.png

convert oznacza, że uruchamiamy ImageMagick (jeśli nie został wykryty, dodajmy katalog z nim do zmiennej środowiskowej PATH). Ustawiamy tło na białe. Parametr 300 oznacza docelową rozdzielczość pliku. Jeśli chcemy większą, możemy wpisać np. 600. Ostatnie dwa parametry to plik źródłowy oraz docelowy (istotne są rozszerzenia plików).

Tak przygotowany plik PNG możemy wykorzystać np. do wstawienia jako zdjęcia na wydarzenie na Facebooka (nie zapominajmy jednak wkleić również wersji tekstowej agendy!):
facebook png

 

Jak zrobić agendę seminarium – obecne rozwiązanie (Excel)

W poprzednim wpisie omówiłem jaki projekt będę tworzył (AgendaEditor). Tutaj opiszę jak robiłem agendy seminariów ręcznie oraz jak trochę pomagał mi Excel i Word. Komuś może przydać się wiedza zawarta tutaj (szczególnie zanim powstanie projekt, o którym mowa).

Dane wejściowe i wynik

Danymi wejściowymi jest godzina rozpoczęcia wydarzenia oraz lista:

  • temat wystąpienia,
  • imię i nazwisko prelegenta,
  • czas wystąpienia (domyślnie np. 15 minut).

Chcę otrzymać:

  • Listę wystąpień z policzonymi godzinami dla każdego wystąpienia w formacie:
    godzina_rozpoczęcia-godzina_zakończenia – „Temat wystąpienia” – Imię i nazwisko
    np.
    15:00-15:30 – „Programowanie w Spring” – Jan Kowalski
    Potrzebne jest to np. do wklejenia jako treść wydarzenia na Facebooku.
  • Plik DOC/DOCX z agendą gotową do wydrukowania. Treść na podstawie listy wyników z powyższego punktu, ale z dodanymi dodatkowymi informacjami np. logiem, datą itd.
  • Plik PNG agendy (może być identyczny jak ten z pliku wyżej). Potrzebny do wstawienia jako zdjęcie na Facebooka.

Oczywiście wszystko można zrobić ręcznie, ale zajmuje to dużo czasu. Dlatego trochę przyspieszmy sobie pracę…

Generowanie listy wystąpień w Excelu

Utworzyłem arkusz w Excelu, który pomaga w generowaniu listy wystąpień. Do pobrania : Edytor-agendy.xlsx

Wygląda on tak: edytor agendy

W niebieskie pola (kolumny C, D, E) wpisujemy nasze dane wejściowe. W kolumnie A i B obliczają się godziny kolejnych wystąpień. Zaś w kolumnie G dostępna jest gotowa lista wystąpień do skopiowania. Tak stworzoną listę możemy wkleić np. do szablonu agendy w Wordzie lub na wydarzenie na Facebooku.

Szczegóły techniczne arkusza

W Excelu godziny można normalnie dodawać. Jest to bardzo pomocne i przyspieszyło pracę. Musimy jednak pamiętać, żeby format liczb był ustawiony na gg:mm. Jednak jeśli po prostu wpiszemy w komórkę liczbę w takim formacie, Excel rozpozna go automatycznie.

dodawanie godzin

Formuła do generowania listy wystąpień wygląda tak:
=TEKST(A6;"gg:mm") & "-" & TEKST(B6;"gg:mm") & " – „" & C6 & "” – " & D6

Funkcja TEKST zwraca godzinę w formacie podanym jako drugi parametr. Jest to konieczne, aby móc dodać do siebie fragmenty tekstu. Znaczek ampersand & oznacza dodawanie tekstu (tzw. konkatenacja). W innych językach programowania jest to po prostu to samo co plus + (np. Java) lub kropka . (np. PHP). Dodaję łącznik, myślnik oraz temat w prawidłowych polskich cudzysłowach „...” zamiast wpisanych ręcznie "...".

Umieszczenie na Facebooku

Tak przygotowaną listę wystąpień możemy umieścić np. w wydarzeniu na Facebooku:
ogłoszenie seminarium facebookZaletą jest krótki czas tworzenia listy. Jeśli nastąpią jakieś zmiany, np. zmiana długości jednego wystąpienia, to po wpisaniu do arkusza, wszystkie zmiany zostaną obliczone natychmiastowo. Nam pozostaje jedynie skopiowanie całej listy i ponowne wklejenie do wydarzenia.

W kolejnej części opiszę jak zrobić plik agendy w Wordzie i wygenerować z niego grafikę PNG.

Pomysł na projekt: Edytor agendy

Jaki powinien być projekt?

W związku z konkursem „Daj Się Poznać”, musiałem znaleźć pomysł na projekt. Jakie warunki powinien według moich założeń spełniać?

  • Rozwiązywać jakiś realny problem. Pisząc projekt, który może się do czegoś przydać, mamy większą motywację. Poza tym po co marnować czas, na coś, co będzie leżało nieprzydatne?
  • Być dosyć małym projektem, żeby jedna osoba w ciągu 2,5 miesiąca dała radę go napisać (po za innymi zajęciami i projektami chociażby na studia). Ale musiał być na tyle duży, żeby mieć o czym pisać w 20 wpisach.
  • Muszę chcieć opublikować kod projektu. Nie może to być pomysł, na którym chciałbym w przyszłości zarabiać. Kod chcę pisać dosyć powoli, żeby jego jakość była na tyle wystarczająca, aby komuś mógł się przydać.
  • Projekt powinno dać się zrobić w technologiach, które już chociaż trochę znam. Niby mógłbym wziąć coś nowego (np. Scala) i ucząc się pisać projekt. Jednak jakość projektu zapewne byłaby sporo niższa, niż w wypadku, gdy użyję poznanej już wcześniej technologii. Chciałbym wykorzystać język programowania Java, najlepiej framework Spring. Ostatnio poznałem także AngularJS, w którym przyjemnie tworzy się aplikacje klienckie w stylu architektonicznym REST.

Czy jest coś takiego, co byłoby przydatne i ktoś mógłby to zrobić, ale nigdy nie ma na to czasu? A jednocześnie spełniałoby powyższe warunki? Niech ktoś

Oczywiście tak. Na co dzień przychodzi do głowy kilka pomysłów. Wybrałem według mnie najodpowiedniejszy na ten moment.

Zarys projektu: Edytor Agendy (AgendaEditor)

Aplikacja webowa do tworzenia i generowania agendy dla seminariów i konferencji. 

Jaki jest realny problem? Jaki proces biznesowy chciałbym zautomatyzować? Przeprowadźmy jego krótką analizę.

Analiza problemu – tworzenie agendy

Na początek dwa słówka:
Prelegent – osoba, która wygłasza prelekcję czyli wykład dla słuchaczy (publiczności).
Agenda – ustalony plan wystąpień zawierający listę: imię i nazwisko prelegenta, temat, godzinę rozpoczęcia i zakończenia.

Na uczelniach często organizowane są konferencje i seminaria naukowe. Ich celem jest zazwyczaj prezentacja wyników badań naukowych i wymiana informacji. Również firmy często biorą udział w konferencjach branżowych. Cel jest podobny, lecz celem jest skupienie trochę innej grupy ludzi. Zamiast naukowców, prelekcje wygłaszają praktycy, ludzie z danej branży.

Jak zazwyczaj wygląda przebieg procesu tworzenia agendy (w uproszczeniu, ograniczając się do powstawania samego dokumentu)?

  1. Ogłaszana jest możliwość zgłaszania tematów (tzw. Call For Papers, CFP).
  2. Prelegenci rejestrują się, przysyłają swoje tematy wystąpień (również z innymi danymi np. afiliacja, abstrakt itd.). Czasem również jest możliwość wyboru ile czasu będzie przeznaczone na wystąpienie.
  3. Organizatorzy konferencji układają agendę (plan wystąpień). Często pojawiają się w niej zmiany (np. któryś z prelegentów ma prośbę, aby przesunąć go na inną godzinę).
  4. Agenda jest publikowana. Zazwyczaj w formie dokumentu PDF (lub rzadziej DOC). Niekiedy jest potrzebny także plik graficzny (jeśli chcemy np. wstawić jako zdjęcie, aby ładnie wyświetliło się w wydarzeniu na Facebooku).

Sam również brałem udział w organizacji kilku konferencji. Jeśli mamy do ułożenia jedną agendę na kilka miesięcy i jest tylko kilku prelegentów, z powodzeniem można to zrobić ręcznie (np. w Wordzie lub Excelu). Nie ma potrzeby tworzenia narzędzia, jeśli jego zrobienie zajmie więcej czasu niż ręczne wykonanie zadania.

Jednak gdy wydarzeń i prelegentów jest więcej, tworzenie agendy jest bardziej czasochłonne. Dla przykładu, organizowałem konferencję, której agenda miała 7 stron, a wystąpień było ponad 50. Pomyśl, że policzyłbyś godziny wystąpień ręcznie, a potem następuje zmiana, np. pierwszy wykład ma trwać dłużej lub krócej albo chcesz jedną osobę przesunąć na początek dnia. Poprawa zajęłaby dużo czasu. Ja zrobiłem sobie tabelkę w Excelu, w której automatycznie przeliczało mi godziny wystąpień. Ale wiem, że wiele osób robi to ręcznie (szczególnie na innych kierunkach niż informatyka).

Innym przykładem są seminaria koła naukowego. Jest ich wiele, a zmiany często wprowadzane w ostatniej chwili. Aż chciałoby się przyspieszyć i zautomatyzować proces tworzenia wynikowej agendy. To właśnie wtedy zrobiłem tabelkę w Excelu, dzięki której mogłem w szybki sposób wprowadzać zmiany (napiszę o niej w którymś w kolejnych wpisów). Jednak ona ma też wady, które dałoby się wyeliminować tworząc dedykowaną aplikację do tworzenia agendy.

Podstawowa funkcjonalność AgendaEditor

Projekt edytora agendy nazwałem mało kreatywnie, po prostu: AgendaEditor. Interfejs aplikacji będzie w języku polskim, gdyż jest przeznaczony w pierwszej kolejności głównie dla osób, które wiem jak organizują konferencje. Kod projektu będzie umieszczony na GitHubie, a nazwy klas, zmiennych i metod będą w języku angielskim. Jest to dobra praktyka, a być może dzięki temu, że projekt jest opensource, kiedyś będzie rozwijany nie tylko przeze mnie. Jeśli aplikacja się sprawdzi będzie można dodać tłumaczenie interfejsu, aby ludzie z całego świata mogli szybciej tworzyć agendy wydarzeń.

Wiem, że nie mogę poświęcić zbyt dużo czasu na projekt. Ale równocześnie chcę go skończyć, aby dało się go używać. Kończmy projekty, gdyż takie nierealizowane zadania dosyć mocno demotywują do dalszej pracy. Dlatego zaplanuję minimalną użyteczną wersję oraz możliwość jej rozbudowy (gdy będę mógł dłużej nad nim pracować).

Wersja minimalna

Przerzucenie funkcjonalności z Excela oraz wprowadzenie kilku usprawnień.

  • Wprowadzenie godziny rozpoczęcia wydarzenia.
  • Wprowadzenie listy wystąpień: tematu, imienia i nazwiska, długości.
  • Możliwość łatwej zmiany kolejności wystąpień (najlepiej drag&drop lub chociaż przyciski ze strzałkami).
  • Generowanie listy wystąpień z policzonymi godzinami wystąpień (na podstawie godziny rozpoczęcia i długości wystąpień) w formie tekstowej gotowej do skopiowania i wklejenia np. do Worda.

Taką aplikację w sumie można by napisać w samym JavaScripcie (np. AngularJS). Jednak to jeszcze nie koniec 😉

Możliwość rozbudowy

Pomysłów do głowy przychodzi tyle, że aplikacji można nie skończyć nigdy. Wymienię jednak kilka funkcjonalności, które mogłyby się pojawić:

  • Generowanie pliku DOC z listą wystąpień.
  • Generowanie gotowej agendy w pliku DOC na podstawie szablonu (pliku DOC z nagłówkami, stopkami itd.).
  • Generowanie pliku PDF i PNG.
  • Dodawanie szablonów i ich edycja (np. zmiana logo, nagłówka itd.).
  • We wprowadzanych danych dodanie obszaru tematycznego. Na jego podstawie będzie następował automatyczny podział na panele.
  • Możliwość zgłaszania się prelegentów. Może być bezpośrednio w aplikacji. Albo poprzez ankiety z Google Sheets, z których dane będą pobierane do aplikacji i na ich podstawie tworzona agenda.

Tu już potrzebna jest część serwerowa. Chciałbym ją napisać w Javie (z wykorzystaniem frameworka Spring i kilku bibliotek). Umieścić mogę ją na jakimś serwerze aplikacyjnym, być może Azure.

Propozycje technologii do wykorzystania

Jak już wyżej pisałem, chciałbym napisać aplikację w Javie z wykorzystaniem frameworka Spring. Po stronie klienta będzie AngularJS (oczywiście z JavaScript, jQuery, HTML, CSS, Bootstrap). Całość w stylu architektonicznym REST (będzie możliwość napisania aplikacji np. na Androida z wykorzystaniem tej samej części serwerowej). A aplikację chciałbym wrzucić na serwer Azure.

Konkurs programistyczny Daj Się Poznać

Logo Daj Się Poznać

Od dłuższego czasu zbierałem się do założenia bloga. Chciałem go pisać, ale zawsze były jakieś ważniejsze sprawy. Zbyt mało czasu, brak motywacji. Pewnie wiele osób się z tym spotkało. Potrzebny jest jakiś impuls, żeby zacząć na dobre.

Dodatkowo chciałem napisać jakiś własny, mały projekt opensource, którego kodem mógłbym się pochwalić. Co prawda na własne potrzeby pisałem programy, ale zazwyczaj do rozwiązania konkretnego, wąskiego problemu, a nie dokończone aplikacje. Tworzyłem również projekty na potrzeby studiów. Poznając nową technologię przez cały semestr, rozwiązując zadania na laboratoriach, na koniec często był do zrobienia projekt. Temat zazwyczaj narzucony lub do wyboru z listy (choć zdarzało się również, że można było zaproponować własny). Aplikacja była implementowana w ciągu kilku dni na zaliczenie, po poznaniu całego potrzebnego materiału z zajęć. Zazwyczaj nie było czasu na jej dokładne przetestowanie i dopracowanie, zwłaszcza, gdy trzeba było się równolegle uczyć do kolokwiów czy egzaminów. Mam może ze trzy czy cztery projekty, które nadają się do pokazania. Ale myślę, że jakość kodu dałoby się jeszcze mocno poprawić (zwłaszcza jak pisałem i jednocześnie dopiero się uczyłem nowej technologii, teraz napisałbym je lepiej).

Konkurs programistyczny Daj Się Poznać

Dotarła do mnie informacja, że jest konkurs programistyczny „Daj Się Poznać”. Najczęściej konkursy informatyczne/programistyczne polegają na rozwiązywaniu algorytmicznych zadań (typu tych ze SPOJ jak np. Kodigo). Czasem są te polegające na stworzeniu projektu (jak Imagine Cup od Microsoftu). Rzadko pojawiają się takie jak Join IT Community od strefainzyniera.pl, w którym zadaniem jest napisanie artykułu na wybrany temat z programowania (wspominam go miło, zdobyłem I miejsce ex aequo w kategorii Java).

Jak usłyszałem o konkursie „Daj Się Poznać”, w którym trzeba:

  • pisać blog o programowaniu,
  • tworzyć aplikację opensource,

to pomyślałem, że jest on idealny dla mnie. Potrzebowałem jakiejś motywacji, żeby zacząć pisać regularnie na blogu oraz tworzyć aplikację. Mimo tego, że obecnie mam dużo rzeczy do zrobienia, których nie chciałbym sobie odpuścić, nie mogłem przegapić takiej szansy. Zgodnie z założeniami konkursu oprócz tworzenia aplikacji, trzeba pisać na blogu minimum dwa razy w tygodniu przez 10 tygodni, co razem daje 20 wpisów. Wiem, że realizacja tych zadań będzie dla mnie dosyć trudna, ale trzeba spróbować.

Zgłoszenia były do końca lutego 2016, jednak zostały przedłużone do 13 marca 2016. Wszystkie informacje i formularz zgłoszeniowy dostępny jest na stronie konkursowej: http://dajsiepoznac.pl. Na Facebooku jest wydarzenie, do którego można dołączać. Zaś na tej stronie, jest lista ze zgłoszonymi blogami i automatycznie pobieranymi z nich wpisami (za pomocą RSS) – można śledzić blog pozostałych uczestników.

Zachęcam wszystkich do wzięcia udziału w konkursie. Będzie to dla mnie pozytywna konkurencja. Im więcej osób się zaangażuje w pisanie bloga, tym więcej powstanie ciekawej treści o programowaniu (z której w części prędzej czy później sam skorzystam). Jeśli przy tym powstanie ciekawa, darmowa aplikacja, tym lepiej dla wszystkich!

Trochę o mnie i o nowym blogu IT

Dlaczego zainteresowałem się informatyką i pisaniem o niej?

Informatyką interesowałem się od małego. Na początku styczności z komputerem były to głównie gry, później oprogramowanie użytkowe i systemy operacyjne. Jeszcze bez internetu pozyskiwałem informacje skąd się dało. Czytałem dużo czasopism typu Komputer Świat – wiele się z nich nauczyłem. Napisałem nawet dwa artykuły, które zostały umieszczone w magazynie elektronicznym AM Komputery (część Action Mag), dołączanym do płyty CD-Action. Pod koniec gimnazjum poznałem podstawy programowania i dzięki temu bardziej zainteresowałem się tematem tworzenia oprogramowania.

Następnie poszedłem do technikum informatycznego w Zespole Szkół nr 1 im. Kazimierza Wielkiego w Mińsku Mazowieckim. W tym czasie już czytałem mniej czasopism ze względu na powszechny dostęp do internetu. Nauka w technikum pozwoliła mi usystematyzować swoją wiedzę i poznać bardziej specjalistyczne zagadnienia z sieci, systemów operacyjnych czy programowania. Zdobywanie nowej wiedzy pod okiem doświadczonych ludzi było bardzo cenne. Pisaniem zajmowałem się głównie na forach internetowych (pomagając rozwiązywać problemy czy dyskutując na tematy o technologiach) oraz jako sprawozdania z zajęć na potrzeby szkoły.

Postanowiłem kontynuować ścieżkę związaną z informatyką i poszedłem na studia na informatykę na Uniwersytecie Przyrodniczo-Humanistycznym w Siedlcach, gdzie obecnie jestem. Część wiedzy zdobytej w technikum utrwaliłem i rozszerzyłem na studiach. Było wiele przedmiotów, na których poznałem podstawy teoretyczne, ale także dużo nowych technologii w praktyce. Tak samo jak w technikum już czytałem mniej czasopism (nawet ich ilość spadła w porównaniu do tamtego czasu), ale za to więcej książek technicznych i materiałów internetowych. Oczywiście zdobyłem bardzo dużo wiedzy od kadry naukowej uczelni, zarówno z wykładów, jak i udostępnianych materiałów. Do zakończenia toku nauki czeka mnie jeszcze kilka przedmiotów, na których mam nadzieję poznać wiele ciekawych zagadnień. Poza przedmiotami udało mi się wziąć udział w kilku wartościowych kursach i uzyskać kilka certyfikatów. Znalazłem również czas na aktywność w kole naukowym, udział w konferencjach, pisaniu artykułów (np. w publikacjach pokonferencyjnych), organizację seminariów naukowych, konferencji oraz innych wydarzeń. Od pierwszego roku jestem aktywnym członkiem Koła Naukowego Informatyków Genbit (strona, fanpage na Facebooku), którego byłem przewodniczącym przez 2 lata (październik 2013 – październik 2015). W jego ramach organizowałem Ogólnopolską Konferencję Inżynierii Gier Komputerowych (w skrócie IGK) X 2013, XI 2014, XII 2015, XIII 2016 (w XI-XII byłem przewodniczącym Komitetu Organizacyjnego). Zorganizowałem również pierwszą edycją Siedleckich Targów Gier 2015. Dzięki takim wydarzeniom zdobyłem dużo cennego doświadczenia i umiejętności. Nie wszystkie były bezpośrednio związane z informatyką, ale również bardzo przydatne. Nauczyłem się jak zarządzać zespołem, pracować w grupie, organizować czas i planować zadania czy przemawiać publicznie. Są to kompetencje miękkie, które mogą przydać się w branży IT.

Dlaczego chcę pisać swojego bloga?

Miałem kilka podejść do tworzenia własnej strony internetowej czy bloga, ale jak to często bywa, „szewc bez butów chodzi” (przez jakiś czas zajmowaniem się tworzeniem stron dla innych). Dawno temu, przez chwilę, miałem bardzo prostą stronę, ale nie kontynuowałem jej rozbudowy. Stworzyłem też bloga, na którym miałem kilka wpisów, ale potem z braku czasu, nie kontynuowałem go. Postanowiłem dać sobie jeszcze jedną szansę.

Mam trochę wiedzy, którą czasem chciałbym się podzielić. Często w rozmowie z kolegami coś tłumaczę. Mógłbym to opublikować dla szerszego grona osób. Czasem uda mi się rozwiązać jaki problem, którego rozwiązania nie znalazłem w internecie – być może ktoś będzie też szukał i dzięki mojemu wpisowi, odnajdzie gotową odpowiedź. To niejakie podziękowanie za to, co publikują inni i że mogłem czerpać wiedzę z wpisów innych na blogach czy forach. A z drugiej strony własne archiwum z opracowanymi informacjami. Obecnie specjalizuję się w programowaniu. Poznaję wiele nowych technologii, o których nieraz nie ma dużo informacji (zwłaszcza w języku polskim). Chciałbym o nich pisać. Pozwoli to usystematyzować moją wiedzę, ale może ktoś też z niej skorzysta. Mam nadzieję, że czasem zajrzy tu też ktoś bardziej doświadczony ode mnie i np. podpowie alternatywne rozwiązanie i inne możliwości.

Pokażę czym się zajmuję i interesuję. Za około rok, po skończeniu studiów, będę wkraczał na rynek pracy. Być może taki zbiór wiedzy przyda się, aby pokazać co chciałbym w życiu robić. Bo ważne, aby robić to, co się lubi 🙂