pondělí 19. prosince 2011

středa 14. prosince 2011

Tak jsme opět o kus vpředu

Už máme komplet implementovaný tyto častí:

1) registrace
2) přihlašováni
3) odhlašování
4) úpravu profilu a zobrazení informací o profilu.

Ke stažení na naší dev stránce v sekci Downloadů.

pátek 9. prosince 2011

Jízdy!!!!

Dotestovány a doimplementovány základní funkce pro jízdy:
V následujících dnech bude dotestováno přidávání a potvrzování uživatelů v jízdě. A samozřejmě základní systém pro hodnocení jízd a posažérů.

středa 7. prosince 2011

Beta pro jízdy

Vydána beta verze servisní aplikace, která již podporuje hledání a vytváření jízd:
Do testovací konzole byly přidány další tlačítka pro otestování těchto metod. Vyhledávání zatím funguje pouze na odjezdové a cílové místo, a zobrazují se pouze nadcházející jízdy. Ostatní filtry zatím nejsou implementovány, protože například pro zjištění počtu aktuálně volných sedaček je zapotřebí zvášť pro každou jízdu vytáhnout z datastore další informace, a tak stojí za zamyšlení zda-li rovnou nepoužít nějakou z cachovacích metod.

Android přihlášení

Tak už jsem zas o krok napřed, už se naše android aplikace umí přihlašovat. :)

Androidí klient

Přikládám několik screen shotů uživatelského rozhraní pro mobilního klienta:



Na posledním obrázku je vidět část seznamu vyhledaných jízd, na kterém v současné době usilovně pracuju :-)

sobota 3. prosince 2011

Základní kameny jízd

Do sdílených tříd byly přidány DTO třídy pro vytváření a vyhledávání jízd:
  • NewTrip - entita pro vytvoření nové jízdy, vychází ze TripRow, navíc ale obsahuje seznam jednotlivých zastávek. Možná sloužit i pro zobrazení detailu jízdy (ještě není úplně jisté),
  • PassengerList - jedná se o seznam UserDetail, který posílán ze serveru pro zobrazení seznamu pasažérů pro zobrazenou jízdu.
  • TripFilter - entita pro filtrování jízd v systému.
  • TripRow - reprezentuje jeden řádek vyfiltrovaných jízd, obsahuje inromace o konktrítní jízdě.
  • TripStop - entita pro jednu zastávku jízdy.
  • UserDetail - entita User rozšířená o souhrn hodnocení.
V následujícím plánu serverového programování implementace zadávání a vyhledávání jízd. V první fázi bude ochuzeno s zadávání a zobrazování hodnocení, které bude implementováno v další iteraci. Též bude zatím chybět napojedí na systém zpráv.

středa 9. listopadu 2011

Layouty

V projektu, jsem vytvořil několik layoutu, pro přihlašováni a kostru pro filtrovaní.
při vytvářeni layoutu jsem zavrhl klikací prostředí z důvodu nedokonalého zpracování, bohužel ani textový editor netrpí neduhy, občas se stává že se sám od sebe přepisuje obsah řádku, v tomto případě je potřeba soubor uložit, zavřít a opět otevřít, aby se mohlo normálně v práci pokračovat.

Instalace vyvojového prostředí

Při instalaci vývojového prostředí Eclipse + SDK + Plugin, jsem narazil na jeden problém. Při vytvoření projektu se mi čisty projekt vůbec nezkompiloval, docela dlouho jsem tento problém řešil bez zdárného výsledku. Nakonec jsem se rozhodl celé vývojové prostředí přeinstalovat. Po přeinstalaci se mi teprve podařilo zdárně zkompilovat projekt.

úterý 8. listopadu 2011

Notifikace a posílání zpáv

Od dnešního dne již umí carshare-service pracovat se zprávami mezi uživateli a systémem. Toto rozhraní umožňuje posílat zprávy mezi uživateli, případně mezi uživatelem a systémem (v takovém případě jednoduše nebude vyplněné pole "od").

Zároveň již lze jednoduše tyto zprávy filtrovat. Lze filtrovat množství zobrazených zpráv a od jakého uživatele se mají zprávy zobrazovat.

V budoucnu pak budou pravděpodobně tyto zprávy přihlášenému uživateli zobrazovány automaticky pomocí metody PUSH. Ale to je zatím ještě relativně daleko.
Praktická ukázka viz http://car-share.appspot.com/test-service.html.

sobota 5. listopadu 2011

Deserializace přijatých dat ...

Tento post je o tom jak využít anotaci @Deserializable (com.neptuo.service.io.annotation) ke zpracování dat získaných ze vstupního streamu a vytvoření instance požadovaného objektu. Pro tento příklad mějme následující třídu:


@Deserializable(name="app-info")
public class AppInfo {
    ...
    @Deserializable(name="app-name")
    public void setAppName(String appName) {
        ...
    }
    @Deserializable(name="hello")
    public void setHello(String hello) {
        ...
    }
    @Deserializable(name="version")
    public void setVersion(String version) {
        ...
    }
}

Malá poznámka, načítaná třída musí bez parametrický konstruktor. Ze vstupního streamu získáme následující XML soubor:

<carshare generated="1320506363699">
<app-info>
<hello>Hello there, from car-share service!</hello>
<app-name>car-share</app-name>
<version>alfa</version>
</app-info>
</carshare>

Pro vytvoření instance AppInfo nejprve musíme definovat AutoDeserializerItem, což je jednoduchá třída, která doplňuje informace získané příme ze třídy AppInfo

AutoDeserializerItem appInfoItem = new AutoDeserializerItem(
    "app-info", 
    null,    
    AppInfo.class
);

První parametr kořenový element, od kterého se má deserializer snažit načítat daný tip (pro složitější vstupní data je pak možné načítat různé objekty z různých částí vstupu). Druhý parametr je pak třída pro načítání kolencí (v tomto případě se nevyužívá), poslední je pak třída, která se má načítat (AppInfo.class).

AutoDeserializer
    .factory(new XmlDeserializer(), input, appInfoItem)
    .deserialize();

Tento řádek pak zpracuje vstupní stream (parametr input) za pooužití XmlDeserializeru (první parametr). Načtenou instanci pak lze získat pomocí

appInfoItem.getItem();

Která vrací načtený objekt (nutno přetypovat na požadovaný objekt). Pokud by jsme chtěli načátat kolekci objektů, pak nám načtenou kolekci vrátí:

appInfoItem.getCollection();

Tolik ke zpracování vstupu.

pátek 4. listopadu 2011

O sdílených třídách a IO operacích

V projektu carshare-domain, package com.carshare.domain.dto jsou tři třídy

  • User - veškeré informace o uživateli
  • UserLogin - jednoduchá třída pro přihlášení uživatele
  • UserUpdate - rozšiření User o heslo (protože standartně nechceme posílat heslo společně s info o uživateli, nicméně (např. pro registraci uživatele, změnu údajů) heslo zadat potřebujeme
Jsou to třídy se kterými pracuje carshare-service, třídy které očekává a které vrací v odpovědích. Settry a gettry jsou oanotovány anotacemi @Deserializable a @Serializable. Ty slouží serializerům a deserializerům, aby věděli co a jak kam zapisovat a číst při serializaci/deserializaci objektů.

Pro serializaci jedné instance z těchto tříd do XML pak stačí:

XmlSerializer serializer = new XmlSerializer();
AutoSerializer.factory(entity, serializer).serialize();
String output = serializer.getResult();

kde entity, je instance kterou chceme serializovat. Pro serializaci kolekce objektů pak:

XmlSerializer serializer = new XmlSerializer();
AutoSerializer.factory(rootName, recordName, entities, serializer).serialize();
String output = serializer.getResult();

kde rootName je název XML elementu, který bude celou kolekci obalovat, recordName je název XML elementu, který bude obalovat jednu instanci (pokud zůstane nevyplněny-nebo null-pak se použije název elementu definovaný nad třídy pomocí @Serializable) a entities je kolekce entit k serializaci.

Všechny výše zmíněné třídy pro IO práci jsou v knihovně neptuo-service, která je v svn v references/lib. Stačí ji tedy nalinkovat do projektu. Nemá zrovna moc valnou dokumentaci, na to prostě čas nebyl, nicméně tohle by mělo fungovat bez problémů a když ne, tak se ptejte.

Webový klient

Tak mám nastavené prostředí - eclipse (mimochodem instalace pluginu nešla tak snadno, jak jsem čekala). Pak jsem si vyzkoušela ukázkový projekt pro práci s gwt (http://code.google.com/intl/cs-CZ/webtoolkit/doc/latest/tutorial/gettingstarted.html) a je založený zatím prázdný projekt pro CarShare (už je i v svn).

čtvrtek 3. listopadu 2011

carshare-service - První featurky :)

Náš projekt carshare-service se opět o kousek posunul. Nyní již umí registrovat nové uživatele, přihlašovat a odhlašovat je. Záveň si také udržuje historii přihlášení. 

Více informací jsem vložil do videa, které jsem k této přiležitosti nahrál ... bohužel se trochu peru s tím, kam ho nahrát, aby na mě nevyskakovali jakési hlášky, o tom že to nejde! ... Tak ho zatím přiložím alespoň jako přílohu a snad na to časem přijdu.

středa 2. listopadu 2011

úterý 1. listopadu 2011

carshare-service

Na adrese http://car-share.appspot.com/ je k již vystavena alfa verze servisní části aplikace. Tato webová aplikace bude poskytovat data jak webovému klientovi, tak androidímu. Aplikace je hostována na GAE, pro persistentní vrstvu bude použito JDO.

Aplikační vrstvu realizuje framework neptuo-service (ukázka na adrese http://car-share.appspot.com/service/info). Tato služba umí generovat, jak xml, tak json, dle hlaviček předaných z požadavku. Ukázka třídy, který implementuje tuto ukázkovou službičku je zde:


@ServiceClass(url="/info")
public class InfoService {


    @ServiceMethod(transactional=false, httpMethod=HttpMethodType.GET)
    public EntityResult<AppInfo> test() {
        return new EntityResult<AppInfo>(new AppInfo("alfa", "car-share", "Hello there, from car-share service!"));
    }
}


Jak je vidět, implementace je velice jednoduchá. Implementace této části aplikace bude pokračovat transformací   konceptuálního modelu do JDO-kompatibilního doménového modelu.

čtvrtek 27. října 2011

Pár řádek k VIA

Dnes jsme se dohodli na jednotlivých obrazovkách k klientské aplikaci, bude potřeba totéž provést pro webovýho klienta. Ládík dostal za úkol to do příštího týdne (zhruba) zpracovat a pušnout na blog, na čem jsme se dohodli.
Výsledky anktery se dnes z jakého si důvodu neprezentovali, takže dej prosím Armene dej na web tu prezentaci.Tím se dostávám k tomu, že jsem ze svn odmazal goustovy modely a dal jsem vše do "Downloads", tak dej tu prezentaci k tomu (Armene) a na blog jen odkaz.
A na závěr jsem počeštil Armenův příspěvek na blogu :)


Studijnímu víkendu zdar :D

Prezentace ankety

Vytvořena prezentace výsledků ankety. Přiložený soubor shrnuje výsledky veřejné ankety zaměřené na použitelnost naší aplikace.

car-share-survey.pdf

neděle 23. října 2011

Veřejný dotazník pro ověření možnosti úspěchu aplikace

Dotazník je v oběhu od 19.10.2011. Byl vytvořen pomocí Google Docs, doposud byl vyplněn 33 lidmi a výsledky jsou zatím slibné, takže je velká pravděpodobnost, že aplikace bude mít úspěch. Dotazník je možné vyplnit na následující adrese:

https://docs.google.com/spreadsheet/viewform?formkey=dEdLbThjaHFRdmpuU2hPME1vYjNyMkE6MQ

středa 19. října 2011

Interně k předmětu VIA

Nainstalováni android SDK tools + stažení adroid NDK verze r6b, prozatím se mi nepodařilo rozchodit vývojové prostředí. Pracují na tom.

Edit: Už se mi podařilo rozchodit vývojové prostředí v NetBeans. :)

neděle 16. října 2011

Rozdělení projektů

Celá aplikace se bude skládat ze čtyř projektů. Každý ze členů se bude věnovat téměř výhradně jedné z částí.


carshare-domain (All)
  • doménový model (Mára) a další společné třídy napříč všemi projekty
carshare-service (Mára)
  • webová služba vystavená na GAE
  • REST-like formát služby, podpora json/xml
  • implementace pomocí neptuo-service
  • persistence JDO
carshare-android (Ládík,Armen)
  • mobilní klient pro android platformu
carshare-webclient (Aduš)
  • webová alternativa k mobilnímu klientovi
  • hostovaný na GAE
  • implementace pomocí GWT
  • komunikace s carshare-service

Interně k předmětu VIA

- odstavec do seznamu projektu již doplněn
- žádost o přidání Armena odeslána (2011-10-16 14:42)

středa 12. října 2011

Konceptuální model

Na stránku projektu byl umístěn konceptuální model databáze. Tento model bude ještě upraven tak, aby vyhovoval požadavkům aplikace a bude převeden do fyzického modelu. Konceptuální model by měl posloužit k lepšímu pochopení problému, hlavně ujasnit entity, které budou využity v aplikaci a jejich provázanost. Ve fyzickém modelu možná přibudou i další entity převedením některých vztahů nebo rozdělením již existujících entit.

úterý 11. října 2011

Souhrn toho, na čem jsme se zatím dohodli, že bude aplikace umět

Business Flow:
  • řidič zadá jízdu
  • cestující potvrdí, že pojede
  • řidič potvrdí, že cestujícího vezme
  • oba zadají hodnocení cesty
Funkce:
* Profil:
  • ?certifikace podle občanky
  • povinné je jméno a telefonní číslo => přihlašování bude pomocí telefonního čísla.
  • čím víc informací o sobě vyplní, tím věrohodnějším se stává
  • + informace o autě (také volitelné, ale řidiči se pak předvyplní u každé cesty, kterou bude zadávat)
  • vidí ho pouze potvrzení účastníci cesty (jak řidič, tak cestující), jinak je viditelné pouze jméno a hodnocení (progresbar, žížalka, ...)
* Skupiny:
  • skupinu může založit každý, kdo má nějaké procento důvěryhodnosti a vyšší
  • zakladatel je administrátorem skupiny
  • pozvánky do skupiny může posílat pouze administrátor skupiny
  • v rámci skupiny se posílají notifikace na cesty členů
* Hodnocení
  • viz aukro => oboustranné
* Registrace cesty
  • zadává jí jak řidič, tak pasažér
  • zadávají se zastávky a u každé z nich je čas odjezdu ze zastávky a poznámka
  • start cesty je první zadaná zastávka a cíl je poslední zadaná zastávka => nutno upozornit na tuto skutečnost uživatele (př animace)
  • u času se dá zaškrtnout, zda je čas garantovaný => pokud je, řidič se bude opravdu snažit stihnou to (nutno vysvětlit)
  • řidič ještě zadává:
    • typ auta, kterým pojede (předvyplňuje se z profilu, možno upravovat)
    • cena - celková cena cesty (u informacích o cestě se pak bude zobrazovat i předpokládaná cena na osobu při plném autě)
    • počet míst - celkový počet míst i s řidičem a počet volných míst (může ještě někoho vést)
  • pasažér zadává pouze:
    • odkud
    • kam
    • maximální cenu
    • kolik míst chce (může chtít jet s někým)
* Cesta
  • je u ní vidět, kolik je přihlášených lidí a je jich potvrzených

čtvrtek 6. října 2011

Zhodnocení první prezentance, návrh rozdělení členů týmu k jednotlivým úlohám

Prezentace:
...nedá se říct že byla úplně kladně hodnocená, dokonce možná i kritika převládala, jen bych vypíchnul:
komunita - to je určitě problém, jak sehnat lidi, který to budou k nám zadávat... padl tam nápad, že by jsme mohli sosat data od ostatních (který se mě osobně docela líbí)
konkurence údajně funguje na mobilech - sice asi neexistuje přímo nativní aplikace, ale prý se ty weby zobrazují na mobilech a jsou použitelné
sociální bezpečí - otázka kdo bude chtít jet s někým cizím?? Možná by nebylo špatný to řešit nějakýma profila (z různých služeb), aby si lidi mohli ověřit toho řidiče + samozřejmě hodnocení.

Projekt:
- Server - serverové služby poběží na GAE (http://code.google.com/appengine/). To sebou přínáší některá omezení, například zde není klasická relační databáze, ale Datastore (http://code.google.com/appengine/docs/java/datastore/), nicméně v java aplikách se nad tím používá JDO (http://code.google.com/appengine/docs/java/datastore/jdo/overview.html), takže není potřeba nějaká hluboká znalost. Ale i tak to má nějaká svá specifika (třeba že je to non-join). Nad touhle storage vrstvou bude nějaká servisní vrstva, tedy vrstva, která posílat data do mobilní aplikace  - v bakuli jsem udělal miniknihovnu, která se stará o posílání javovských ojektů po sítí pomocí json/xml a servisních tříd (nebo může použít nějakou knihovnu z internetu - to se ještě dohodne).
- Klient (Mobilní) - Androjdí, v javě. Nic moc o tom víc nevím :-). Viděl bych to tak, že klienta bude dělat jeden (možná dva) člověk (mám i svého favorita).
- Klient (Web) - Možná by jsme mohli pomocí GWT (http://code.google.com/webtoolkit/overview.html) spíchnout jednoduchýho webovýho klienta (Toť otázka???)

Rozdělení členů týmu:
Já osobně se hlásím na serverou část, a speciálně ukládání/načítání dat, mám s tím google-řešením nějaké zkušenosti, případně na servisní vrstvu+tahání dat z ostatních poskytovatelů (ještě s jedním člověkem).
Dál si myslím, že by si Ládík mohl vzít, jestě s někým, na starost klienta (přeci jen má jako jediný ten údajně chytrý telefon).

neděle 2. října 2011

vize projektu

Na stránku projektu byla vložena prvotní vize projektu popisující základní vlastnosti, funkce, výhody projektu a cílovou skupinu pro kterou je tento projekt určen.