Autor: jsierzega

Logowanie, rejestracja i zabezpieczanie aplikacji

Niestety zawaliłem coś po raz kolejny, w piątek nie było wpisu na tematy związane z IT. Mam nadzieję, że za to nie wylecę z konkursu Szeroki uśmiech. Ten zaległy wpis zostanie nadrobiony w późniejszym czasie. Dziś jest poniedziałek, a więc będzie o tym, co zmieniło się w projekcie przez ostatni tydzień. Jeśli ktoś nie pamięta o czym jest mój projekt (a jest taka możliwość, ponieważ projektów w konkursie jest masa Uśmiech) to zapraszam do zerknięcia na pierwszy wpis w którym wszystko dokładnie wyjaśniam. Koniec wstępu, przejdźmy do części właściwej:

 

Strona logowania i rejestracji

Strona przedstawia się następująco:

screen

Jak widać, nie jest to dzieło artystyczne, ale wszystkie bajery są (no może poza przypominaniem hasła Szeroki uśmiech). Na chwilę obecną jest to jedyny widok w aplikacji. Zaimplementowane są jedynie alerty informujące o powodzeniu/niepowodzeniu akcji, i nie ma żadnych przekierować na inne strony.

Kod obsługujący akcje w Angular2 jest następujący:

screen2

Jak widać, to również nie jest dzieło artystyczne… a jest tak dlatego, że Angular2 jest w tym momencie nową technologią której jeszcze nie znam, i najpierw chciałem napisać coś co po prostu działa. Warto to teraz zrefaktoryzować poprzez np. podzielenie tego na dwa moduły, jeden do rejestracji, a drugi o logowania, i  nie trzeba będzie już tak kombinować z nazwami zmiennych aby się nie pokrywały.

 

Co jeszcze jest do zrobienia?

Koniecznie trzeba zrobić sensowną implementację tokenów uwierzytelniających. W tym momencie włączone jest domyślne uwierzytelnienie http basic oferowane przez framework Spring Security. Opiera się to na przesyłaniu zakodowanego w Base64 stringa składającego się z nazwy użytkownika i hasła w każdym requeście. Jest to bardzo niebezpieczne, ponieważ wystarczy podsłuchać jakikolwiek request, aby zdobyć dane logowania. Dodatkowo transmisja nie jest w tym momencie w żaden sposób szyfrowana, a więc ta aplikacja nie ma póki co nic wspólnego z bezpieczeństwem.

Co więc zrobić?

Aby maksymalnie utrudnić takie sztuczki, należy zrobić kilka rzeczy. Po pierwsze: należy szyfrować transmisję między klientem a serwerem jesli tylko jest taka możliwość. Po drugie: należy zaimplementować sensowny mechanizm generowania i weryfikacji tokenów. Taki token należy wygenerować w oparciu o informacje które są znane nam, ale nie są znane osobie, która ma złe zamiary. Można użyć np. dokładnej daty ostatniego logowania (łącznie z godziną i minutą, a nawet sekundą), daty rejestracji (o ile nie wyświetlamy jej gdzieś w aplikacji itp.). Muszą być to informacje możliwe do zweryfikowania. Np. gdy w tokenie znajduje się data ostatniego logowania, to musimy ją gdzieś zapisać np. w bazie danych. Jeśli nie będziemy zapisywać tej informacji, to nie będzie można zweryfikować, czy token jest prawidłowy. Wszystkie informacje w nim zawarte, muszą być dostępne w czasie weryfikacji. Po trzecie: warto zaimplementować mechanizm wygadania tokenów. Trzeba ustalić czas w którym można się uwierzytelnić tokenem od momentu jego wygenerowania. Może to być np. 15 minut. Po tym czasie, nie można już użyć tego tokenu, i potrzebujemy wygenerować nowy.

Warto zauważyć, że w takim wypadku, przechwycenie sesji nadal jest możliwe, bo używamy tokenów. Musimy je mieć, aby wiedzieć kto wysyła dany request do serwera. Jednakże, jeśli zadbamy o bezpieczeństwo to:

1. Ciężko będzie o zdobycie tokena, jeśli połączenie będzie szyfrowane.

2. W przypadku, gdy to się jednak uda, atakujący nie posiada danych logowania. A więc może działać tylko w ramach jednej sesji

3. Atakujący ma dostęp tylko przez krótki czas. Gdy minie ważność przechwyconego tokena, dostępu już nie ma, a bez danych logowania nie można zdobyć nowego

 

Jak odpalić aplikację?

W projecie używany jest Maven, a więc uruchomienie nie jest trudne. Wymagana jest tylko zainstalowana Java, zainstalowany Maven oraz baza danych Postgresql (konfiguracja bazy danych odbywa się w pliku application.properties w folderze resources). Po pobraniu kodu z repozytorium wydajemy komendę: “mvn spring-boot:run”. Ta komenda zapoczątkuje całą serię czynności. Najpierw pobrany zostanie nodeJS, oraz npm (Node Package Manager), po czym npm pobierze i zainstaluje wszystkie biblioteki wymagane kompilacji frontendu aplikacji. Następnie frontend zostanie skompilowany (polega to m.in na translacji plików TypeScript na pliki JavaScript, bo tylko takie obsłuży przeglądarka), oraz łączeniu plików html i css. Następnie Maven pobierze biblioteki konieczne do skompilowania części serwerowej napisanie w Javie. Potem nastąpi kompilacja kodu źródłowego w Javie, a w końcu uruchomienie części serwerowej aplikacji. Za pierwszym razem wszystko może potrwać kilka minut. Po załadowaniu aplikacji, będzie ona dostępna na porcie 8080.

Tak, wiem że to wszystko muszę napisać jeszcze raz, po angielsku, mniej szczegółowo, i umieścić w pliku readme.md na githubie, naprawię to rażące zaniedbanie Uśmiech

A tym czasem pora już kończyć kolejny wpis na blogu. Dziękuję tym, którzy poświęcili czas na jego przeczytanie.

Jak szybko zacząć z frontendem do aplikacji?

Jest poniedziałek, a więc ukazuje się u mnie wpis dotyczący projektu konkursowego Uśmiech

Obecnie mamy mnóstwo technologii ułatwiających pisanie frontendu do aplikacji webowej. Od frameworków JavaScriptowych  (Angular, React), przez parsery CSS (Sass, Less, Stylus), narzędzia do zarządzania zależnościami (npm, bower, yarm) narzędzia do automatyzacji budowania (Gulp, Grunt) po różne odmiany JavaScriptu (TypeScript, CoffeScript). Zanim zaczniemy tworzyć frontend do aplikacji, musimy wybrać z czego będziemy korzystać, oraz tak to skonfigurować, aby to działało ze sobą. Czasami mamy ograniczony czas, a czasami brakuje nam chęci, i nie chcemy się tym zajmować, wolimy zająć się pisaniem działającego kodu. Opiszę świetne narzędzie pozwalające w kilka minut wystartować, i zacząć pisanie właściwego kodu, unikając lub też minimalizując konieczność konfiguracji narzędzi jakich będziemy używać. A jest nim Yeoman.

 

Instalacja

Jak większość narzędzi, Yeoman wymaga instalacji, nie wymaga natomiast konfiguracji, ponieważ w niej właśnie on ma pomóc Uśmiech

Aby zainstalować Yeoman, należy najpierw zaopatrzyć się w NodeJS. Razem z nim, najczęściej instaluje się również npm (Node Package Manager) za pomocą którego zainstalujemy Yeoman. A więc aby to zrobić, wykonujemy:

npm install –g yo

Po wykonaniu polecenia, będziemy mieli dostęp do narzędzia “yo”, czyli do Yeomana. Jednakże, sam Yeoman jest w zasadzie bezużyteczny, warto więc dodatkowo wyposażyć go w jakikolwiek generator.

Pokażę to na przykładzie generatora FountainJS. Jest to generator, który potrafi wygenerować projekt oparty o Angular 1, Angular 2 oraz React. Aby zainstalować generator, wykonujemy:

npm install -g yo generator-fountain-webapp

Po wykonaniu tej komendy zakładamy pusty katalog na nasz projekt, i przechodzimy do niego. W tym katalogu uruchamiamy narzędzie yo. Za pierwszym razem zapyta ono o wysyłanie anonimowych danych dot. użycia, po czym wyświetli listę dostępnych generatorów. Narzędzie obsługujemy strzałkami Góra/Dół, a wyboru dokonujemy klawiszem Enter. Spacja służy do modyfikacji list wielokrotnego zaznaczania. Każdy generator działa podobnie, najpierw zadawane są pytania, a po uzyskaniu wszystkich odpowiedzi, generowany jest projekt. W przypadku FountainJS są to pytania m.in. O framework, parser CSS, rodzaj Javascriptu, narzędzie do budowania itp. Po wygenerowaniu projektu, komendą “npm run build” budujemy projekt, a za pomocą “npm run serve” uruchamiamy serwer na porcie 3000, który odświeża projekt w przeglądarce, gdy wykryje zmiany w plikach źródłowych. Świetnie się nadaje, aby przyspieszyć proces tworzenia frontendu, testując zmiany niemal natychmiast. Przykładowa strona wygenerowana przez FountainJS:

FireShot Screen Capture #001 - 'FountainJS' - localhost_3000

Na stronie z listą generatorów znaleźć można inne, mniej lub bardziej rozbudowane generatory. Wśród nich jest np. JHipster, który nie tylko generuje frontend taki jak FountainJS, ale także backend oparty na Javie i Spring Boot. Jest przy tym naprawdę bardzo zaawansowany, i zadaje bardzo dużo pytań.

 

Wady generatorów

Opisałem zalety wynikające ze stosowania generatorów, trzeba przyjrzeć się również wadom. Niestety, nie zawsze wszystko działa tak jakbyśmy tego oczekiwali, generatory są różnej jakości. Ciągle wypuszczane są ich aktualizacje, które coś naprawiają, ale czasem też coś psują. W efekcie, możemy mieć pecha, i w specyficznych przypadkach (felerna wersja generatora, niefortunne zestawienie odpowiedzi na pytania) nasz projekt się nie zbuduje, bądź nie wygeneruje. Czasem da się to szybko naprawić, poprzez np. zaktualizowanie bibliotek w package.json, ale nie zawsze jest to takie proste. No a poza tym nigdy nie wiemy, czy twórca zadbał o odpowiednie zabezpieczenie, i czy projekt który został wygenerowany jest zgodny z konwencjami, i dobrymi praktykami.

 

Co mają generatory do projektu?

Na początku napisałem, że post jest o projekcie, jednakże do tej pory pisałem o generatorach. Jest to nawiązanie do tego, że na projektowym GitHubie znajduje się katalog “frontend” którego zawartość pochodzi właśnie z generatora FountainJS, a więc jest to technologia, którą zastosowałem w swoim projekcie.

 

Co jeszcze zrobiłem w projekcie?

Oprócz wygenerowanego frontendu, jest też szkielet projektu opartego o Spring Boot z wykonaną konfiguracją połączenia z bazą danych, oraz dokonana została konfiguracja Mavena, tak aby podczas budowania całego projektu, uruchamiany był również proces budowania frontendu.

 

Dziękuję tym którzy dotrwali do końca, innym również dziękuję za chęci do przeczytania tego wpisu. Do zobaczenia w piątek.

Skąd czerpię wiedzę o IT

Witam w swoim drugim wpisie na blogu prowadzonym w ramach konkursu “Daj się poznać 2017”. Na wstępie muszę zaznaczyć, że już na samym oczątku zawaliłem sprawę, robiąc pomyłkę w linku do mojego kanału RSS w moim profilu uczestnika, o czym zdałem sobie sprawę dopiero po publikacji pierwszego wpisu. To spowodowało, że mojego wpisu zabrakło w konkursowym RSS. Teraz jest już wszystko w porządku, i ten wpis najprawdopodobniej się tam pojawi. A więc, jeśli jesteś tutaj dzięki konkursowemu RSS, i nie było Ci dane zapoznać się z moim pierwszym wpisem to gorąco zachęcam do nadrobienia.

Ponieważ konkurs wymaga dwóch wpisów tygodniowo, jednego o rozwijanym projekcie, a drugiego o tematyce związanej z IT, będę się starał, aby wpisy ukazywały się regularnie tzn. w poniedziałek wpis o projekcie (bo na weekendzie jest czas aby tyle nakodować, żeby w poniedziałek było o czym napisać Uśmiech )i w piątek na temat związany z IT (bo piątek to weekendu początek, więc najszybciej zbiera się na przemyślenia). Ponieważ dziś jest piątek, ukazuje się wpis o tematyce związanej z IT.

A więc, tutaj spróbuję przedstawić skąd czerpię wiedzę o IT, czyli napiszę o osobach oraz kanałach na Youtube, dzięki którym jestem na bieżąco z nowinkami, i dowiaduję się sporo ciekawych rzeczy na podstawie ich przemyśleń. Koniec wstępu, czas na część właściwą.

1. Maciej Aniserowicz

Oczywiście ta osoba musiała się obowiązkowo znaleźć w tym zestawieniu, jest to organizator konkursu, i gdyby nie On, nie założyłbym bloga Uśmiech. Prowadzi on bloga devstyle.pl, ma swój kanał na youtube, oraz stronę na Facebooku. Jest to osoba która pracowała pewien czas na pełny etat, teraz zajmuje się prowadzeniem szkoleń, jest prelegentem na różnych wydarzeniach w całej Polsce, i dodatkowo udziela się w internecie m.in organizując takie inicjatywy jak ten konkurs. Prowadzi podcast DevTalk w którym rozmawia na ciekawe tematy z innymi. Na jego kanale można znaleźć odcinki DevTalka, nagrania z wystąpień, a ostatnio zaczęły się pojawiać codzienne vlogi w których znajduje się wiele pomocnych odpowiedzi na pytania często zadawane przez początkujących programistów. Cechą charakterystyczną Macieja jest to, że na swoich vlogach często nagrywa na tle cmentarza, i widać, że niewątpliwie są to jego klimaty Uśmiech.

2. Mateusz Kupilas (JavaDevMatt)

Jest to osoba, która została kiedyś zaproszona przez Macieja Aniserowicza na jeden z odcinków podcasta DevTalk, w którym Maciej i Mateusz rozmawiali o Junior Developerach. Mateusz ma swój blog, oraz kanał na youtube,  pracował jako programista, wyjechał na emigrację, dlatego też jedna z serii na jego kanale, to po prostu “Programista na emigracji”. Jego filmy znaleźć można również na kanale VideoPoint, opowiada tam o wszystkich aspektach związanych z karierą programisty, począwszy od rozmowy rekrutacyjnej przez wszystkie aspekty związane z pracą na etacie jak i pracą jako freelancer. Z kolei na swoim kanale zasłynął z bardzo dobrych tutoriali o LibGDX, ma również filmy w których dobrze wyjaśnia wzorce projektowe, oraz wiele fillmów na których również odpowiada na pytania często zadawane przez początkujących, i związane z karierą programisty. Specjalnie dla takich osób wydał e-booka, w którym jak sam mówi, zebrane jest wszystko to, o czym mówi na swoich filmach. Ostatnią jego inicjatywą są “Twórcy niezależni”. Jest to seria filmów, w których Mateusz promuje ciekawe projekty nadsyłane mu przez różne osoby, i promuje je na swoim kanale.

3. Jakub Mrugalski (unknow)

Jest to osoba bardzo wszechstronna. Ma swój kanał na youtube, stronę internetową, Facebooka, i kilka innych (linki na stronie internetowej). Na swoim kanale na Youtube ma wiele ciekawej treści. M.in kurs programowania w PHP, kurs posługiwania się Linuksem, Kurs języka SQL od podstawowych aż po skomplikowane, wiele filmów na temat bezpieczeństwa np. opis ataków na aplikacje webowe, od tych najprostszych typu SQL injection aż po bardziej skomplikowane, nagrania swoich prelekcji, filmy z przemyśleniami, oraz te skierowane do początkujących programistów. Prowadzi również ciekawe inicjatywy takie jak np. UW-Shell, czyli darmowy dostęp do konta shellowego, dawniej wyłącznie w celach edukacyjnych bez możliwości stawiania jakichkolwiek usług. Projekt został ostatnio wznowiony,  przeniesiono go na inny serwer, i teraz możliwe jest posiadanie portów otwartych na świat. Należy zaznaczyć, że projekt nie przynosi mu zysków, a wręcz przeciwnie, generuje straty. Mimo to, Jakub nadal go prowadzi po to aby dać innym narzędzie do realizacji prostych pomysłów. Ma również gry z serii HackMe. Są to zadania w przeglądarce internetowej, w większości polegające na odgadnięciu hasła chroniącego dostępu do kolejnej rundy. Skala trudności rośnie od trywialnej (hasło ukryte w źródle strony) poprzez kombinacje z JavaScriptem aż do poziomów w których trzeba dobrze pogłówkować aby zdobyć hasło.

4. Warsaw JUG

Warsaw JUG jest to kanał na Youtube na którym są nagrania z prelekcji organizowanych na jednej z Warszawskich uczelni. Są one bardzo wartościowe, ponieważ często zapraszane są osoby, z długim stażem pracy w ciekawych firmach i projektach. Przedstawiają różne aspekty swojej pracy, oraz prezentują ciekawe frameworki, rozwiązania problemów, omawiają zagadnienia przydające się w pracy. Tutaj nie ma co wiele pisać, trzeba po prostu zobaczyć Uśmiech.

Jak zwykle gratuluję tym którzy dotrwali do końca.

Kim jestem, i co tu właściwie będzie?

Jestem Kuba, mam 21 lat, i pochodzę z okolic Rzeszowa. Jestem na III roku Informatyki, i studiuję na jednej z Rzeszowskich uczelni. Ten blog został założony, ponieważ postanowiłem spróbować swoich sił w konkursie „Daj Się Poznać” organizowanym przez Macieja Aniserowicza, autora jednego ze słynnych blogów programistycznych DevStyle. Zainteresowanie konkursem jest spore, więc mam nadzieję, że powstanie sporo innych ciekawych blogów. Wymagane jest publikowanie dwóch wpisów tygodniowo, co jest nie lada wyzwaniem dla kogoś, kto nigdy jeszcze nie prowadził bloga (no dobra, coś tam próbowałem Uśmiech).

 

Co spróbuję zrobić?

Długo szukałem pomysłu na to, co chciałbym zrobić w ramach konkursu, zależało mi na tym, aby nie kopiować czegoś co już istnieje, a istnieje już na prawdę dużo, a z każdą kolejną edycją takich konkursów jak ten, coraz trudniej o coś, na co jeszcze nikt inny nie wpadł. Pomysłem agregator materiałów do nauki, który może być używany przez studentów i uczniów. Do tego celu służą nam teraz grupy na Facebooku, współdzielone foldery na Google Drive, grupowe konta e-mailowe itp. Wszystkie te opcje mają swoje plusy i minusy, i w tym momencie nie ma nic dedykowanego do takich zastosowań (albo ja na to nie natrafiłem). Docelowo ma to być aplikacja webowa, w tym momencie nie planuję tworzyć aplikacji pod systemy mobilne, ale postaram się, aby wersja webowa była przyjemna w użytkowaniu nawet na małych ekranach.

 

Technologie

Część serwerowa będzie napisana w oparciu o język Java, framework Spring, natomiast do stworzenia klienta webowego, postaram się wykorzystać AngularJS 2.

 

Koncepcja

W tej sekcji postaram się opisać, jak to ma właściwie działać. W aplikacji rejestruje się grupa studentów uczęszczająca na jeden kierunek studiów, na jeden rocznik, na jednej uczelni np. cały trzeci rok informatyki Uniwersytetu Rzeszowskiego. Jedna z osób wprowadza do aplikacji cały plan zajęć, i aplikacja wiedząc do jakich specjalizacji , grup ćwiczeniowych , grup laboratoryjnych przynależą studenci, generuje każdemu osobisty plan zajęć. Każdy może modyfikować swój plan np. kiedy ktoś jest zwolniony z jakiegoś przedmiotu, może go usunąć, a kiedy musi chodzić na przedmiot z rocznika wyżej bo ma awans, może go sobie dodać. Widok osobistego planu zajęć jest głównym widokiem aplikacji dostępnym po zalogowaniu, tak jak na facebooku głównym widokiem jest nasza tablica, a na Snapchacie obraz z naszej kamery. Po kliknięciu na dowolny przedmiot jaki znajduje się w naszym planie zajęć, pojawiają się wszelkie dostępne materiały, oraz informacje np. e-maile od prowadzących. Każda osoba może dodawać materiały, informacje do przedmiotów jakie ma w swoim osobistym planie, a także wiadomości ogólne dla całych specjalizacji, grup, całego kierunku. Każdy otrzymuje dodane przez innych materiały, informacje dotyczące przedmiotów jakie ma w swoim osobistym planie zajęć. Można dodawać informacje o planowanych kolokwiach, egzaminach, i dodatkowo oznaczać dostępne materiały jako przydatne na określony egzamin/kolokwium. Dzięki temu, w okresie poprzedzającym wydarzenie, zostaną wyróżnione i przesunięte na wierzch.

 

W czym to ma być lepsze od tego co mamy?

Tak jak wyżej napisałem, to nie ma być żaden klon tego co już jest, choć mogłoby się tak wydawać. Wydaje się, że ma to dużo wspólnego z Facebookiem, bo każdy przedmiot ma mieć swoją tablicę z informacjami, materiałami, tak jak Facebook ma tablicę dla każdej grupy, fanpage, profilu. Jednakże aplikacja będzie miała wiele różnic w filozofii działania, relacja tej aplikacji z Facebookiem będzie jak relacja Facebooka ze Snapchatem. Niby można tam robić to samo, ale nie do końca, bo Snapchat do pewnych rzeczy nadaje się lepiej. Dokładnie tak samo ma być tutaj. Chciałbym aby w pewnej wąskiej grupie zastosowań, aplikacja spełniała swoją rolę lepiej, niż robi to Facebook.

 

A co jest nie tak z Facebookiem?

Sytuacja niżej opisana jest sytuacją z życia wziętą:

1. Facebook nie wymusza utrzymania porządku.

Pewien wykładowca miał co tydzień zajęcia ze swojego przedmiotu.Zapowiedział, że po każdych zajęciach będzie udostępniał materiały z wykładu wysyłając je pewnej osobie, która miała przekazać je innym. Robiła to za pomocą Facebooka. A wyglądało to tak:

screen1

Wiele postów niżej…

screen2

Znowu wiele postów niżej…

screen3

I takich postów jest tam jeszcze trochę, i odstępy między nimi są spore. Pewnego dnia zostało zapowiedziane kolokwium ze wszystkich tych materiałów. Chcąc pobrać je wszystkie, trzeba było przewijać całą grupę, i wyłapywać posty z materiałami. Tak, wiem że problemu by nie było, gdyby to było wrzucone na dysku Google w jednym folderze, no ale niestety, było tak a nie inaczej. Jasne, że możemy użyć wyszukiwarki na Facebooku, np. wpisując “cz8” elegancko znajduje mi plik z częścią ósmą, wpisując “cz7” dostaję plik z częścią siódmą, ale co z tą trzecią sytuacją? Wykładowca postanowił spakować część piątą i szóstą w pliku zip, i nie znajdę tego ani pod zapytaniem “cz5” ani “cz6”. Jak ja chciałbym to rozwiązać? Zwyczajnie wymuszając utrzymanie porządku, a dokładniej, robiąc to za pomocą #HashTagów (dlatego nazwa HashBoard). Tutaj, każdy przedmiot miałby swój HashTag, np. #MED, każda grupa np. #lab1, ogół studentów np. #wszyscy, oraz kazde kolokwium, egzamin itp. Każdy post musi zawierać co najmniej jeden z rozpoznawanych przez aplikację #HashTagów, czyli wszystkie te posty musiałyby być otagowane np. #MED aby dało się je wstawić. Ten jeden hashtag posłuży nam do dwóch celów: pierwszy z nich to identyfikacja grupy odbiorców, odbiorcami są tylko Ci, którzy mają ten przedmiot w swoim planie zajęć, oraz po drugie: te posty mają się znaleźć na tablicy dokładnie tego przedmiotu. Czyli hashtagi służą segregacji, i identyfikacji odbiorców. Oczywiście, aby dodatkowo oddzielić od siebie np. materiały od ważnych informacji np. o odwołaniu konkretnych zajęć, można wprowadzić kolejne hashtagi np. #materiały, #info. Wydaje się, że dodawanie tylu hashtagów do jednego posta jest uciążliwe, ale gdy doda się np. podpowiadanie podczas wpisywania, albo dodawanie często używanych tagów za pomocą kliknięcia, to już takie uciążliwe nie jest, staje się jednak naprawdę fajnym sposobem segregacji treści. Dodatkowo, można w ten sposób definiować priorytet definiując np. tag #uwaga albo #ważne. Dzięki temu, wystarczy że zapamiętam, że poszukiwana informacja była otagowana jako #ważne, i już można szybko do niej dotrzeć wpisując ten tag do wyszukiwarki, i otrzymując wszystko co istotne w jednym miejscu. Jest to ogólny zarys, i nie wykluczone, że zostanie dopracowany.

2. Konieczność zapisania się do kilku grup

Nie wiem czy wszędzie tak jest, ale np. ja studiuję na jednej uczelni jeden kierunek, a jestem zapisany do czterech (!) grup z nim związanych na Facebooku, a to nie są wszystkie, bo wiem że istnieje ich więcej, tyle że mnie tam nie ma. Screen który to potwierdza:

screen4

Dzięki temu, czasami nie wiadomo, gdzie czego szukać, bo nie pamiętam czy to było na grupie ogólnej, czy może na mojej grupie specjalizacyjnej.

Jak chcę to rozwiązać? Otóż przy takim podejściu sprawa rozwiązuje się sama. W momencie kiedy o grupie odbiorców decyduje otagowanie, nie ma już potrzeby tworzenia takich grup, ponieważ wiadomości same idą do osób do których powinny, wystarczy pilnować tagów, a będzie to robić aplikacja, która nie przepuści niczego, co nie będzie miało tagu oznaczającego grupę odbiorców. I wszyscy będą zapisani w jednym miejscu.

3. Wyszukiwarka

Wiadomo, że na Facebooku istnieje taka jedna, duża wyszukiwarka u samej góry. I ma ona ściśle określone przeznaczenie:  wyszukuje osoby, strony, grupy i miejsca. Istnieje jeszcze jedna, służąca do wyszukania czegoś w grupie. Można tam wpisać słowo kluczowe, takie jak np. “cz8” albo osobę która dodawała posty. Ta wyszukiwarka nie jest jakoś szczególnie wyeksponowana, i na początku jej nie zauważyłem, dowiedziałem się od wujka Google, że istnieje. No i okazało się, że nie da się wyszukiwać postów np. z konkretnego miesiąca, gdy np. szukam czegoś dodanego pół roku temu. Jeśli nie pamiętam ani żadnych słów, ani kto był autorem, to muszę przewinąć pół roku różnych postów. U mnie będzie możliwość znalezienia czegoś, o czym wiemy kiedy zostało dodane.

 

Hipotetyczne korzyści z powstania aplikacji mobilnej

Tak jak mówiłem, na razie tego nie planuję, ze względu na brak czasu, ale gdyby powstała, to mogłoby dać trochę dodatkowych korzyści, np. łatwy dostęp do materiałów skojarzonych z danym egzaminem ze smartfona kiedy właśnie jedziemy na uczelnię, i chcemy coś jeszcze powtórzyć, albo można wprowadzić Hashtag #Pilne który spowoduje, że wszyscy odbiorcy otrzymają sygnał dźwiękowy i wibrację w telefonie, aby jak najszybciej przeczytali daną informację.

 

Zakończenie

Dziękuję tym, którzy dotrwali do końca, nie mam pojęcia, czy zdążę to zrealizować do końca, i nie mam pojęcia, czy wytrwam w tym blogowaniu przez 10 tygodni. Mam nadzieję, że się uda.