Meeskond "FoodWars": Difference between revisions
(22 intermediate revisions by 3 users not shown) | |||
Line 30: | Line 30: | ||
* Ilmar Telga - XML, kliendiga suhtlus, wiki, teenuskihtide progemine, lõpprakenduste menüüd, login | * Ilmar Telga - XML, kliendiga suhtlus, wiki, teenuskihtide progemine, lõpprakenduste menüüd, login | ||
* Rauno Rüga - XML, XSLT, andmebaasi loomine, wiki, mobiilirakendus, statistika | * Rauno Rüga - XML, XSLT, andmebaasi loomine, wiki, mobiilirakendus, statistika | ||
* Lauri Kermas - teenuskihtide ehitamine, wiki, login, kommenteerimise võimaluste progemine | * Lauri Kermas - teenuskihtide ehitamine, wiki, rakenduse rollid ja kasutajad, login, kommenteerimise võimaluste progemine | ||
== XML Fail == | == XML Fail == | ||
Line 362: | Line 362: | ||
*KohvikuKommentaarideArv() - Kohviku kommentaaride arv | *KohvikuKommentaarideArv() - Kohviku kommentaaride arv | ||
*AnnaKohvikuKommentaarid() - Tagastab kommentaarid lehtede kaupa | *AnnaKohvikuKommentaarid() - Tagastab kommentaarid lehtede kaupa | ||
*AnnaKohvikuKommentaar() - Tagastab üksiku kommentaari | |||
*AnnaKohvikuKommentaarideHinded() - Tagastab kommentaaride jaoks võimalikud hinded koos kirjeldustega | *AnnaKohvikuKommentaarideHinded() - Tagastab kommentaaride jaoks võimalikud hinded koos kirjeldustega | ||
*LisaKohvikuKommentaar() - Lisab kohviku kommentaari | *LisaKohvikuKommentaar() - Lisab kohviku kommentaari | ||
*MuudaKohvikuKommentaar() - Muudab kohviku kommentaari | |||
*MuudaKohvikuKommentaariOlek() - Muudab kohviku kommentaari oleku | |||
*MuudaKohvikuKommentaariPeidetus() - Muudab kohviku kommentaari peidetust | |||
====Statistikaga seotud meetodid:==== | ====Statistikaga seotud meetodid:==== | ||
Line 381: | Line 385: | ||
== Klientrakendus I : CMS == | == Klientrakendus I : CMS == | ||
Meie loodud veebirakenduses on realiseeritud järgnevad CMS seotud funktsionaalsused : | |||
*Kõikide kohvikute lehed on eraldi aadressiga, mis võimaldab eri kohvikud bookmarkida ja facebooki like anda. See on saavutatud tänu ?kohvik=1 aadressiribal, kus parameeteri kohvik number identifitseerib kohviku. | |||
*Adminni õigustega kasutajal on võimalik lisada uus kohvikuid andembaasi | |||
*Kohviku omanik saab lisada menüüd, muuta seda ja kustutada | |||
*Adminnid saavad kasutajaid hallata, määrates nendele rolle, mis omakorda tagab teatud õigused | |||
*Kohviku omanikud saavad oma kohviku kasutajaid hallata, määrates neile näiteks müüja või kliendi rolli. | |||
*Kogu menüü põhineb sitemapil, mille alus on kirjeldatud eraldi sitemap failis, lisaks sellel lisatakse sinna dünaamiselt kohvikud juurde ( mis andmebaasis olemas on ) | |||
*Kohviku omanik saab kohviku lehte isikupärastada tänu richteksti osale, näiteks lisada html osi. | |||
== Klientrakendus I : Veebirakendus == | == Klientrakendus I : Veebirakendus == | ||
Line 390: | Line 403: | ||
* Sisse loginud kohviku omanik saab ka kohviku menüüsid muuta, lisada, kustutada. | * Sisse loginud kohviku omanik saab ka kohviku menüüsid muuta, lisada, kustutada. | ||
* Kasutajate lehel saab sisse loginud kohviku omanik hallata kohviku kasutajaid. | * Kasutajate lehel saab sisse loginud kohviku omanik hallata kohviku kasutajaid. | ||
* Statistika lehel saab vaadata statistikat teenust kasutanud rakenduste ja kasutatud meetodite kohta. Näeb nii tänase päeva, viimase nädala, selle kuu ja aasta statistikat | |||
* Kohviku lisamise lehel saab aga admini õigustege kasutaja lisada uue kohviku. | |||
[[Image:KohvikuMenuEdit.JPG | [[Image:KohvikuMenuEdit.JPG|800px|Kohviku menüü muutmise leht. ITK kohviku menüüde muutmiseks tuleb logida sisse kasutajaga Ilmar parooliga "ilmar".]] | ||
Kohviku menüü muutmise leht. ITK kohviku menüüde muutmiseks tuleb logida sisse kasutajaga Ilmar parooliga "ilmar". | Kohviku menüü muutmise leht. ITK kohviku menüüde muutmiseks tuleb logida sisse kasutajaga Ilmar parooliga "ilmar". | ||
Kohviku admin osa nägemiseks võib sisse logida kasutajaga rauno, parool on ka rauno. Sellega saab ligi statistikale ja uue kohviku loomisele. | |||
Veebirakenduse koos uuendatud teenuskihiga saab siit: http://enos.itcollege.ee/~rruga/VRII/KohvikuProjekt.rar | |||
== Klientrakendus I : Kommentaaride komponent == | |||
Kommentaaride sisestamiseks ja haldamiseks on loodud iseseisev ning enam jaolt taas kasutatav kommentaaride komponent. Komponent on hetkel realiseeritud ASP'i User Control'ina ja mitte Custom Control'ina, mis vähendab veidi selle üleviidavust teistesse projektidesse. Siiski on selle muutmine ASP'i Custom Control'iks mõningate muudatustega võimalik. | |||
[[Image:comskeem.png|thumb|center|alt=Kommentaari komponendi skeem.|Kommentaari komponendi skeem.]] | |||
Kommentaaride komponent koosneb kahest osast, mis lisatakse lehele, millel vajatakse kommenteerimise funktsionaalsust: | |||
sisendkontroll - see komponent on vajalik uute kommentaaride sisestamiseks; | |||
väljundkontroll - antud komponent esitab olemasolevad kommentaarid hulga kaupa. | |||
Mõlemad kommentaari komponendi osad on kasutatavad ka iseseisvalt, kui see peaks vajalik olema. Kommentaari andmeid esitavad need komponendid läbi iseseisvate kommentaarikontrollide, mida võib ühel kontrollil olla ka mitu. Kommentaarikontrollid ei ole võimelised iseseisvalt kommentaaride andmeid hankima ning seepärast tuleb need täita väljapoolt, kas sisend- või väljundkontrollide poolt. Samuti tuleb uue kommentaari loomine läbi viia kommentaarikontrolli väliselt - seda teostabki sisendikontroll. Samas kogu ülejäänud kommentaari haldus, nagu olemasolevate kommentaaride muutmine ning uute olekute seadmine toimub üksnes läbi iseseisvate kommentaarikontrollide, mis sisaldavad täies mahus vastavat funktsionaalsust. | |||
Kommentaaride komponendi kõik kolm osa (sisendkontroll, väljundkontroll ja kommentaarikontroll) suhtlevad teenusekihiga läbi vastava ligipääsuobjekti. Ligipääsuobjekt tegeleb ühenduse ning sellega seonduvate võimalike vigade haldamisega. Kokkuvõtlikult loob see vajaduse korral uue ühenduse, sooritab päringud ning lõpuks sulgeb ühenduse, kui vastav korraldus antakse. | |||
Teenuses on vastavad protseduurid, mida teenusega suhtlemisel välja kutsutakse ning mis teostavad reaalseid muudatusi andmebaasis, seda muidugi vastavalt reeglitele. | |||
== Klientrakendus II : Mobiilirakendus == | == Klientrakendus II : Mobiilirakendus == | ||
Line 408: | Line 446: | ||
NB! Et mobiilirakendust proovida ja mõistliku tulemust saada peab teil olema kõige uuem versioon meie projekti teenuskihist ning teenuskiht peab töötama. | NB! Et mobiilirakendust proovida ja mõistliku tulemust saada peab teil olema kõige uuem versioon meie projekti teenuskihist ning teenuskiht peab töötama. | ||
== Meeskonna punktide jaotus == | |||
Kõigi grupiliikmetega sai arutatud punktide jagamise üle ja ühine arvamus oli, et punktid jaotatakse järgnevalt: | |||
*Rauno Rüga - 29 punkti | |||
*Ilmar Telga - 20 punkti | |||
*Kristjan Stolin - 17 punkti | |||
*Lauri Kermas - 14 punkti | |||
== Meeskonna kokkuvõttev aruanne == | == Meeskonna kokkuvõttev aruanne == | ||
=== Mis sai tehtud ? === | |||
Projektiks valisime ühtse kohvikute süsteemi loomise, et klientidel oleks hea mõnus kohvikute kohta infot vaadata ja samamoodi kohviku omanik saaks menüüd läbi arvuti hallata. Selle jaoks sai valmis tehtud korralik andmemudel, mille põhjal andmebaas genereeritud. Andmebaas olemas, sai hakatud teenuskihti ehitama kõigi vajalike meetoditega rakenduste jaoks. Paralleelselt sai hakatud ka lõpprakendusi tegema, sest nii oli hea arendad, kuna rakendust tehes tekkisid ideed, mis meetodeid oleks vaja, et mingit tegevust läbi viia. Valmis kaks klientrakendust, millest esimene oli põhjalikum asp.net rakendus, mis oli sunatud nii klientidele, kohvikute omanikele kui kogu süsteemi administreerijatele. Teine rakendus, mobiilirakendus, oli väiksema sisuga, rohkem suunatud klientidele, et vaadata infot kohvikute kohta ja kohvikuid kommenteerida. | |||
=== Mida oleks paremini saanud teha ? === | |||
Mõtlesime, et mis saab siis, kui kohviku kassa arvutis pole parajasti internetiühendust ja kohvikupidaja tahab muuta menüüd. Selleks tuleb ilmselt kohalikus arvutis salvestada muudetud menüü XML formaadis ning internetiühenduse taastumisel toimuks menüü muutus ka serveris. Küsisime õppejõult nõu, kuidas oleks seda kõige mõistlikum teostada. Õppejõu seisukoht on, et kuna selle probleemi lahendamine väljub aine "Võrgurakendused II" raamidest ja on ajaliselt mahukas ülesanne, siis ei ole mõtet sellega õppetöö raames tegeleda. | |||
=== Mida sai peale viimast esitlust veel täiendatud ? === | |||
*ASP.NET rakendusel sai statistika charte sipakene väiksemaks tehtud, et nad näeksid paremad välja ja korraga ekraanil oleks näha nii päeva, nädala, kuu kui ka kogu aja jaotus (loomulikult normaalse suurusega ekraani puhul) | |||
*Mobiilirakenduses menüü kuvamine korralikumaks (toit ja hind palkirjad juurde) | |||
*Mobiilirakenduses kommenteerija nimi salvestatakse mobiili mällu, niiet kommenteerima tulles on kohe nime lahtris oma nimi alati olemas | |||
(Täiendused on olemas ka juba projekti rar failidel, millele siin wikis viited on) | |||
=== Õpitud teadmised / omandatud kogemused === | |||
* XML, XSLT koostamine | |||
* Teenuskihi ehitamine ja selle ühildamine nii andmebaasi kui rakendustega | |||
* Rakenduste ehitamine teenuskihi peale | |||
* Meeskonnatöö korraldamine | |||
* Aja planeerimine | |||
=== Ligikaudne ajahinnang tehtud tööle === | |||
* XML,XSLT koostamine ja selle arutamine rühmas - 5 h | |||
* Andmemudeli arutamine grupis, selle loomine, täiendamine ja projekti ühildamine - 20 h | |||
* Teenuskihi ehitamine - 60 h | |||
* ASP.NET rakenduse tegemine - 75 h | |||
* Mobiilirakenduse tegemine - 24 h | |||
''(Arvesse võtsime nii reaalse töö projekti kallal kui ka seotud teemadega tutvumine (näidete uurimine/läbi tegemine jne))'' | |||
''(Töö tunnid on kõigi inimeste peale kokku ehk kui arutasime kolmekesi XML struktuuri 1 tunni, siis kokku 3 töötundi).'' | |||
=== Kokkuvõtva esitluse slaidid === | |||
Kokkuvõtva esitluse slaidi saab siit: http://enos.itcollege.ee/~rruga/VRII/VR_II.ppt | |||
== Logi == | == Logi == | ||
=== 2. Juuni === | |||
Wiki täiendamine ja kokkuvõtva osa loomine. | |||
=== 22. Mai === | |||
Viimased täiendused asp.net ja mobiilirakendusele. | |||
=== 18. Mai === | |||
ASP.net rakendusele lisatud CMS osa (sitemap ja html loomise osa) | |||
=== 8. Mai === | |||
Veebirakendus esitluseks valmis. Täiendatud vikilehte. | |||
=== 7. Mai === | === 7. Mai === | ||
Mobiilirakendus sai valmis ja selle kohta uuendatud vikilehte. | Mobiilirakendus sai valmis ja selle kohta uuendatud vikilehte. | ||
Line 464: | Line 560: | ||
http://weblogs.asp.net/scottgu/archive/2007/04/06/tip-trick-enabling-ssl-on-iis7-using-self-signed-certificates.aspx | http://weblogs.asp.net/scottgu/archive/2007/04/06/tip-trick-enabling-ssl-on-iis7-using-self-signed-certificates.aspx | ||
http://weblogs.asp.net/scottgu/archive/2010/06/28/introducing-iis-express.aspx | |||
http://weblogs.asp.net/scottgu/archive/2011/01/03/vs-2010-sp1-beta-and-iis-developer-express.aspx | |||
http://blogs.msdn.com/b/webdevtools/archive/2011/03/14/enabling-iis-express-support-in-vs-2010-sp1.aspx | |||
http://weblogs.asp.net/gunnarpeipman/archive/2010/12/11/visual-studio-2010-sp1-beta-supports-iis-express.aspx | |||
http://www.dotnetcurry.com/ShowArticle.aspx?ID=487 | |||
http://davidkiff.co.uk/post/2009/09/22/Setting-up-SSL-for-WCF-in-Development.aspx | |||
http://www.request-response.com/blog/CommentView,guid,e9bb929b-d0b4-4626-b302-1d2715fc344a.aspx | |||
=== Kokkuvõtvad lingid === | |||
* WCF | |||
http://msdn.microsoft.com/library/ee958158.aspx | |||
http://www.codeproject.com/KB/WCF/WCF_auto_client_proxies.aspx | |||
http://msdn.microsoft.com/en-us/library/aa702565.aspx | |||
http://www.codeproject.com/KB/WCF/WCFInstance.aspx | |||
http://www.codeproject.com/KB/WCF/WCFConcurrency.aspx | |||
http://codeidol.com/csharp/wcf/Concurrency-Management/Service-Concurrency-Mode/ | |||
* ASP | |||
http://msdn.microsoft.com/en-us/library/ms178472.aspx | |||
http://support.microsoft.com/kb/305141 | |||
http://www.west-wind.com/weblog/posts/2008/Aug/14/ASPNET-gets-no-Respect | |||
http://lostechies.com/jimmybogard/2008/05/19/asp-net-officially-unmaintainable/ | |||
http://www.lullabot.com/blog/why-not-asp-net | |||
http://reverseblade.blogspot.com/2008/06/web-development-aspnet-webforms-versus.html | |||
Latest revision as of 20:08, 5 June 2011
Idee
Meie tiimil on plaanis teha internetipõhine söökla menüü süsteem (aluseks IT Kolledži kohvik, aga suunitlus selline, et kõik kohvikud/sööklad saaksid teha endale kasutajakonto ja hakata rakendust kasutama), kust saaks jälgida menüüd, mis sööke saab süüa, mis veel järgi on, kasutajatel on ka võimalus sööke hinnata (stiilis "meeldib", "ei meeldi" nagu Facebook-is).
Kohvikupidaja Teele soovid uue elektroonse süsteemi kohta:
- elektroonilisest menüüst asju kustutada, isegi siis kui asja peaks olema teoreetiliselt alles, aga tegelikult on asi otsas.
- elektrikatkestuse korral jääb menüü püsima. Ta peab teadma hindu mistahes olukorras.
- menüül näidatakse automaatselt ka ISIC kaardi omanike soodushinnad
- süsteem toetab ka poole portsjoni müümist.
Linnar Viigi soovid/visioonid uue elektroonse süsteemi kohta:
- kõik oleks ka internetist kättesaadav, peale LCD ekraani, mis kajastab menüüd sööklas.
- aluseks facebook, kus siis söögid oleks nagu facebook-i alateemad.
- saab sööke hinnata, kommenteerida (täna oli väga maitsev praad).
- kasutajad saaks vaadata, mis menüüs on (ka järgmisel nädalal) ja mitu portsu veel alles on.
- kasutajad saaksid välja pakkuda menüüsid.
- erinevate söögikohtade kasutajad saaksid omavahel muljeid jagada.
- kuu aja aktiivsemad saavad prii lõuna.
- mingil ajal võib olla "happy hour" (enne sulgemist saab odavamalt).
- piiranguks on see, et toitu broneerida ei saa
Vaba tarkvara kasutamise võimalus
Antud projekti puhul oleks võimalik kasutada PostgreSQL andmebaasi (vt. lisaks http://en.wikipedia.org/wiki/PostgreSQL ) Microsoft SQL Server'i asemel. See võiks anda kasutajale võimaluse valida .NET ning Mono (vt. lisaks http://en.wikipedia.org/wiki/Mono_(software) ) platvormide vahel. Sel viisil oleks kliendil võimalik Microsoft'i platvormi kõrval valida tõenäoliselt soodsam vaba tarkvara platvorm. Andmebaasi lõplik valik pole hetkel veel otsustatud.
Meeskond ja tööjaotus
- Kristjan Stolin - projektijuht, suhtlus kliendiga, XML, wiki, teenuskihtide progemine, rollide halduse lehe progemine
- Ilmar Telga - XML, kliendiga suhtlus, wiki, teenuskihtide progemine, lõpprakenduste menüüd, login
- Rauno Rüga - XML, XSLT, andmebaasi loomine, wiki, mobiilirakendus, statistika
- Lauri Kermas - teenuskihtide ehitamine, wiki, rakenduse rollid ja kasutajad, login, kommenteerimise võimaluste progemine
XML Fail
XML
<?xml version="1.0" encoding="utf-8"?>
<Toidud>
<Toit>
<ToiduNimetus>Viineri kaste</ToiduNimetus>
<ToiduLiik>Praad</ToiduLiik>
<OlemasolevatYhikut>5</OlemasolevatYhikut>
<ToiduKogus>
<Portsjon>
<PortsjoniLiik>Poolportsjon</PortsjoniLiik>
<Myygiaeg>
<Aasta>2011</Aasta>
<Kuu>1</Kuu>
<Paev>9</Paev>
<Tund>15</Tund>
<Minut>07</Minut>
<Sekund>23</Sekund>
</Myygiaeg>
<ToiduHind>
<Eurohind>2.15</Eurohind>
<Soodustus>
<SoodustuseProtsent>5%</SoodustuseProtsent>
<SoodustuseLiik>ISIC kaart</SoodustuseLiik>
</Soodustus>
</ToiduHind>
</Portsjon>
<Portsjon>
<Myygiaeg>
<Aasta>0</Aasta>
<Kuu>0</Kuu>
<Paev>0</Paev>
<Tund>00</Tund>
<Minut>00</Minut>
<Sekund>00</Sekund>
</Myygiaeg>
<PortsjoniLiik>Täisportsjon</PortsjoniLiik>
<ToiduHind>
<Eurohind>2.80</Eurohind>
<Soodustus>
<SoodustuseProtsent>5%</SoodustuseProtsent>
<SoodustuseLiik>ISIC kaart</SoodustuseLiik>
</Soodustus>
</ToiduHind>
</Portsjon>
</ToiduKogus>
<Kommentaarid>
<Kommentaar>
<Saatja>
<SaatjaNimi>Kristjan</SaatjaNimi>
<SaatjaRoll>Tudeng</SaatjaRoll>
</Saatja>
<Sisu>Minu lemmik toit ! Kui algebra tund ei hakkaks, sööks veel 5 portsjonit.</Sisu>
</Kommentaar>
</Kommentaarid>
</Toit>
</Toidud>
Kommentaariks siis niipalju, et meie näide on ilma kohviku osata, selleks et näidet mitte liiga suureks ajada.
Ka on meil moment puudu ID väljad, mis on igasugu andmebaasiga suhtlemiseks hädavajalikud, samas siin näidises palju juurde ei anna.
Asja tegemisel avastasime, et põhiliseks arusaamatuse kohaks on toitude erinevad kogused (ehk siis pool portsjonit, suur / väike ja muud võrdlevad ühikud). Esimese võimalusena kaalusime teha lihtsalt täiesti eraldi toidud kõige kohta, stiilis "väike viineripraad" ja "suur viineripraad". Kahjuks see variant ei kõlbaks eriti hästi, kuna need erinevad portsjonid kasutavad ikkagi samu materjale ja kui me peaks mingi süsteemiga näitama kui palju portsjoneid alles on. Sööklast näiteks pakuti et väike portsjon kasutab materjale kuskil 0.8 suure portsjoni ulatuses, ehk see suhtarv peaks olema kasutaja poolt (kohvikupidaja, restoraniomanik) ise sätitav.
Tänu sellele sai meie süsteemi alustalaks siiski Toit, millel on oma Portsjonid siis erinevate hindade ja soodustustega. Moment pole meil ka Portsjoni XML osas toodud ära seost kogusega. (Kui palju ühe portsjoni lisamine/müümine peaks toidu üldkogust muutma).
Kommenteerida saab meil moment toitu ennast, mitte eraldi portsjonit. Isegi kui kasutajad tahavad lisada kommentaare stiilis "See väike supp oli tõesti väga väike", ei soovi nad seda ilmselt eraldi portsjoni alla panna. Tulevikus peaks kindlasti olema ka võimalus pigem kommenteerida üldisemalt (Kohvikut ennast, söögipaiku üldse), kui spetsiifilisemalt (Väikse prae kaste lisandi kohta).
XML Schema
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Toidud">
<xs:complexType>
<xs:sequence>
<xs:element name="Toit">
<xs:complexType>
<xs:sequence>
<xs:element name="ToiduNimetus" type="xs:string" />
<xs:element name="ToiduLiik" type="xs:string" />
<xs:element name="OlemasolevatYhikut" type="xs:unsignedByte" />
<xs:element name="ToiduKogus">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Portsjon">
<xs:complexType>
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:element name="PortsjoniLiik" type="xs:string" />
<xs:element name="Myygiaeg">
<xs:complexType>
<xs:sequence>
<xs:element name="Aasta" type="xs:unsignedShort" />
<xs:element name="Kuu" type="xs:unsignedByte" />
<xs:element name="Paev" type="xs:unsignedByte" />
<xs:element name="Tund" type="xs:unsignedByte" />
<xs:element name="Minut" type="xs:unsignedByte" />
<xs:element name="Sekund" type="xs:unsignedByte" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ToiduHind">
<xs:complexType>
<xs:sequence>
<xs:element name="Eurohind" type="xs:decimal" />
<xs:element name="Soodustus">
<xs:complexType>
<xs:sequence>
<xs:element name="SoodustuseProtsent" type="xs:string" />
<xs:element name="SoodustuseLiik" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Kommentaarid">
<xs:complexType>
<xs:sequence>
<xs:element name="Kommentaar">
<xs:complexType>
<xs:sequence>
<xs:element name="Saatja">
<xs:complexType>
<xs:sequence>
<xs:element name="SaatjaNimi" type="xs:string" />
<xs:element name="SaatjaRoll" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Sisu" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XSLT
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Kohvikus müüdavad toidud</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Toidu Nimetus</th>
<th>Toidu liik</th>
<th>Veel alles</th>
<th>Portsjon</th>
<th>Müügiaeg</th>
<th>Hind</th>
<th>Soodustus</th>
<th>Soodustuse liik</th>
<th>Kommentaar(id)</th>
</tr>
<xsl:for-each select="Toidud/Toit">
<tr>
<td><xsl:value-of select="ToiduNimetus"/></td>
<td><xsl:value-of select="ToiduLiik"/></td>
<td><xsl:value-of select="OlemasolevatYhikut"/></td>
<td>
<xsl:for-each select="ToiduKogus/Portsjon">
<table>
<tr>
<td>
<xsl:value-of select="PortsjoniLiik" />
</td>
</tr>
</table>
</xsl:for-each>
</td>
<td>
<xsl:for-each select="ToiduKogus/Portsjon">
<table>
<tr>
<td>
<xsl:value-of select="Myygiaeg/Paev" />/<xsl:value-of select="Myygiaeg/Kuu" />/<xsl:value-of select="Myygiaeg/Aasta" />
<xsl:value-of select="Myygiaeg/Tund" />:<xsl:value-of select="Myygiaeg/Minut" />:<xsl:value-of select="Myygiaeg/Sekund" />
</td>
</tr>
</table>
</xsl:for-each>
</td>
<td>
<xsl:for-each select="ToiduKogus/Portsjon">
<table>
<tr>
<td>
<xsl:value-of select="ToiduHind/Eurohind" />
</td>
</tr>
</table>
</xsl:for-each>
</td>
<td>
<xsl:for-each select="ToiduKogus/Portsjon">
<table>
<tr>
<td>
<xsl:value-of select="ToiduHind/Soodustus/SoodustuseProtsent" />
</td>
</tr>
</table>
</xsl:for-each>
</td>
<td>
<xsl:for-each select="ToiduKogus/Portsjon">
<table>
<tr>
<td>
<xsl:value-of select="ToiduHind/Soodustus/SoodustuseLiik" />
</td>
</tr>
</table>
</xsl:for-each>
</td>
<td>
<xsl:for-each select="Kommentaarid/Kommentaar">
<table>
<tr>
<td>
<xsl:value-of select="Sisu" /> (<xsl:value-of select="Saatja/SaatjaRoll" /> <xsl:value-of select="Saatja/SaatjaNimi" />)
</td>
</tr>
</table>
</xsl:for-each>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
XSLT poolt loodud tulemus on järgnev (lisasin veel kaks toitu XML faili, siin wiki lehel on ruumi kokkuhoiuks vaid 1 toit toitude listis):
Arhitektuur
Süsteem oli vahepeal plaanis ehitada kolmekihilise arhitektuuriga (Three-tier architecture). See peaks lihtsustama süsteemi haldamist ja laiendamist tulevikus. Aga kuna selle jaoks otsest vajadust polenud ja oleks vaid süsteemi keeruliseks ajanud, siis loobusime sellest.
Veebiteenus
Andmemudel
Enne veebiteenuse meetodite kirjeldamist koostasime andmemudeli. Loodud andmemudeli põhjal lõime andmebaasi vajalike tabelite ja atribuutidega. Andmemudeli peal on rohelisega tähistatud tabelid, mis on oseselt seotud kohviku valdajaga ja mida WPF rakenduse jaoks kindlasti vaja on. Ülejäänud helesinised tabelid on vajalikud kasutajate võimaluste jaoks. Lisaks on andmemudelil kaks tabelit, mis pole teisega seotud, need on süsteemi administraatori jaoks, et oleks ülevaade, mis rakendused teenust enim kasutavad ning mis meetodeid kõige rohkem välja kutsutakse.
Teenuskihis olevad meetodid
Kasutajatega seotud meetodid:
- SaidiKasutajaLiik() - Tagastab antud kasutaja ID järgi kasutaja liigi nimetuse
- KustutaSaidiKasutaja() - Kustutab antud kasutaja ID järgi kasutaja tabelis Kasutaja
- AnnaKoikSaidiKasutajad() - Tagastab kõik kirjed tabelist Kasutaja
- AnnaKoikKohvikuKasutajad() - Tagastab antud kohviku ID järgi kõik kohviku kasutajad massiivina
- MuudaSaidiKasutajaLiik() - Muudab antud kasutaja ID järgi kasutaja liigi tabelis Kasutaja
- KoikLubatudSaidiKasutajaTyybid() - Tagastab andmebaasi kõik võimalikud kohviku kasutaja rollid (id-d ja nimed), muud andmed jäävad tühjaks
- KoikLubatudKohvikuRollid() - Tagastab andmebaasi kõik võimalikud site kasutaja rollid (id-d ja nimed), kohviku_id jääb tühjaks
- KasutajaKohvikuRollid() - Tagastab antud kasutaja ID järgi kõik kasutaja rollid kõikides kohvikutes
- MuudaKohvikuKasutajaRoll() - Muudab antud kasutaja ID ja kohviku ID järgi kasutaja rolli kohvikus, kui rolli pole, siis tekitatakse uus
- SaidiKasutajaLiikID() - Tagastab antud kasutaja ID järgi kasutaja liigi ID
- KohvikuKasutajaLiikID() - Tagastab antud kasutaja ID ja kohviku ID järgi kohviku kasutaja rolli ID
- AnnaKasutajaMeiliAadress() - Tagastab antud kasutaja nime alusel kasutaja meiliaadressi
- AnnaKasutajaIdJargi() - Tagastab kasutajanime kasutaja ID järgi
- AuthendiKasutaja() - Autendib kasutaja, õnnestumisel tagastab kasutaja ID, ebaõnnestumisel null
- RegistreeriKasutaja() - Registreerib kasutaja andmebaasi ja tagastab true kui kasutaja loomine õnnestus
Menüüga seotud meetodid
- LisaArtikkelMenuuse() - Seob menüüartikli ja menüü
- LisaKohvikuleMenuu() - Seob menüü ja kohviku
- TagastabMenuuMuutujad() - Tagastab menüü järgi kas inimesel oleks õigust seda muuta
- KustutaMenuuJaKohvikuSeos() - Kustutab menüü ja kohviku seose
- LisaUusMenuu() - Teeb uue menüü, seob selle kohvikuga, kui kohviku ID on parameetrina kaasa antud
- MenuuKohvikuIdJargi() - Tagastab kohviku ID järgi kohviku tänaste või mitte tänaste menüüde ID-de massiivi
- LisaMenuuArtikkelMenuuse() - Sisestab antud müügiartikli menüüsse, mille ID on menyy_id
- KustutaMenuuArtikkel() - Kustutab müügiartikli ID ja menüü ID järgi müügiartikli menüüst
- TagastaMenuuArtiklid() - Tagastab menüü ID järgi menüüs olevad müügiartiklid
- VahetaMenuuArtiklit() - Muudab antud müügiartikli tabelis Myygiartikkel
- MenuuNimetus() - Tagastab menüü ID järgi menüü nimetuse
- AnnaMuugiartiklidMidaMenuusPole() - Tagastab müügiartiklid, mis pole veel menüüs, kus on juba müügiartiklid, mille IDd on antud massiivis
- AnnaMenuuNimed() - Tagastab kõigi menüüde nimetused tabelis Menyy
Kohvikutest üldiselt
- KohvikuteNimed() - Tagastab kõigi kohvikute nimed massiivina
- KohvikuNimiIdJargi() - Tagastab antud kohviku ID järgi kohviku nime
- AnnaKoikOmanikuKohvikud() - Tagastab antud omaniku ID järgi kõik omaniku kohvikute ID-d massiivina
- Kohvikud() - Tagastab kõik kohvikute kirjed tabelist Kohvik
- KohvikuteArv() - Tagastab kõigi kohvikute arvu
- AnnaKaubad() - Tagastab kõik kaubad tabelist Kaup
- LisaKaup() - Lisab kauba kaupade nimekirja
- LisaKohvik() - Uue kohviku lisamine
Kommentaaridega seotud meetodid:
- KohvikuKommentaarideArv() - Kohviku kommentaaride arv
- AnnaKohvikuKommentaarid() - Tagastab kommentaarid lehtede kaupa
- AnnaKohvikuKommentaar() - Tagastab üksiku kommentaari
- AnnaKohvikuKommentaarideHinded() - Tagastab kommentaaride jaoks võimalikud hinded koos kirjeldustega
- LisaKohvikuKommentaar() - Lisab kohviku kommentaari
- MuudaKohvikuKommentaar() - Muudab kohviku kommentaari
- MuudaKohvikuKommentaariOlek() - Muudab kohviku kommentaari oleku
- MuudaKohvikuKommentaariPeidetus() - Muudab kohviku kommentaari peidetust
Statistikaga seotud meetodid:
- StatistikaRakendusteKohtaTana() - Tagastab rakenduse nimed ja nende vastu tehtud päringud tänasel päeval
- StatistikaRakendusteKohtaViimaneNadal() - Tagastab rakenduse nimed ja nende vastu tehtud päringud viimase nädala jooksul
- StatistikaRakendusteKohtaSellelKuul() - Tagastab rakenduse nimed ja nende vastu tehtud päringud selle kuu jooksul
- StatistikaRakendusteKohtaKokku() - Tagastab rakenduse nimed ja nende vastu tehtud päringud kogu aja vältel
- StatistikaMeetoditeKohtaTana() - Meetod leiab tänase päeva jooksul kasutatud meetodid ja paringute arvu
- StatistikaMeetoditeKohtaViimaneNadal() - Meetod leiab viimase nädala jooksul kasutatud meetodid ja paringute arvu
- StatistikaMeetoditeKohtaSellelKuul() - Meetod leiab kuu jooksul kasutatud meetodid ja paringute arvu
- StatistikaMeetoditeKohtaKokku() - Meetod leiab kogu aja vältel kasutatud meetodid ja paringute arvu
Veebiteenuse projekti (WCF + andmebaas) saab siit: http://enos.itcollege.ee/~rruga/VRII/Teenusekiht.zip
Klientrakendus I : CMS
Meie loodud veebirakenduses on realiseeritud järgnevad CMS seotud funktsionaalsused :
- Kõikide kohvikute lehed on eraldi aadressiga, mis võimaldab eri kohvikud bookmarkida ja facebooki like anda. See on saavutatud tänu ?kohvik=1 aadressiribal, kus parameeteri kohvik number identifitseerib kohviku.
- Adminni õigustega kasutajal on võimalik lisada uus kohvikuid andembaasi
- Kohviku omanik saab lisada menüüd, muuta seda ja kustutada
- Adminnid saavad kasutajaid hallata, määrates nendele rolle, mis omakorda tagab teatud õigused
- Kohviku omanikud saavad oma kohviku kasutajaid hallata, määrates neile näiteks müüja või kliendi rolli.
- Kogu menüü põhineb sitemapil, mille alus on kirjeldatud eraldi sitemap failis, lisaks sellel lisatakse sinna dünaamiselt kohvikud juurde ( mis andmebaasis olemas on )
- Kohviku omanik saab kohviku lehte isikupärastada tänu richteksti osale, näiteks lisada html osi.
Klientrakendus I : Veebirakendus
Veebiteenust kasutavaks veebirakenduseks on ASP.NET rakendus.
- Esilehel saab otsida kohvikuid või minna kohe huvipakkuva kohviku menüü lehele.
- Kohviku menüü lehel on näha tänased ja teised menüüd, kohviku lahtioleku aeg. Kui panna veebirakendus internetti, siis on võimalus Facebook-i kaudu kohviku fänniks hakata. Kommenteerimise ja soodustuste osa on veel pooleli.
- Sisse loginud kohviku omanik saab ka kohviku menüüsid muuta, lisada, kustutada.
- Kasutajate lehel saab sisse loginud kohviku omanik hallata kohviku kasutajaid.
- Statistika lehel saab vaadata statistikat teenust kasutanud rakenduste ja kasutatud meetodite kohta. Näeb nii tänase päeva, viimase nädala, selle kuu ja aasta statistikat
- Kohviku lisamise lehel saab aga admini õigustege kasutaja lisada uue kohviku.
Kohviku menüü muutmise leht. ITK kohviku menüüde muutmiseks tuleb logida sisse kasutajaga Ilmar parooliga "ilmar".
Kohviku admin osa nägemiseks võib sisse logida kasutajaga rauno, parool on ka rauno. Sellega saab ligi statistikale ja uue kohviku loomisele.
Veebirakenduse koos uuendatud teenuskihiga saab siit: http://enos.itcollege.ee/~rruga/VRII/KohvikuProjekt.rar
Klientrakendus I : Kommentaaride komponent
Kommentaaride sisestamiseks ja haldamiseks on loodud iseseisev ning enam jaolt taas kasutatav kommentaaride komponent. Komponent on hetkel realiseeritud ASP'i User Control'ina ja mitte Custom Control'ina, mis vähendab veidi selle üleviidavust teistesse projektidesse. Siiski on selle muutmine ASP'i Custom Control'iks mõningate muudatustega võimalik.
Kommentaaride komponent koosneb kahest osast, mis lisatakse lehele, millel vajatakse kommenteerimise funktsionaalsust: sisendkontroll - see komponent on vajalik uute kommentaaride sisestamiseks; väljundkontroll - antud komponent esitab olemasolevad kommentaarid hulga kaupa.
Mõlemad kommentaari komponendi osad on kasutatavad ka iseseisvalt, kui see peaks vajalik olema. Kommentaari andmeid esitavad need komponendid läbi iseseisvate kommentaarikontrollide, mida võib ühel kontrollil olla ka mitu. Kommentaarikontrollid ei ole võimelised iseseisvalt kommentaaride andmeid hankima ning seepärast tuleb need täita väljapoolt, kas sisend- või väljundkontrollide poolt. Samuti tuleb uue kommentaari loomine läbi viia kommentaarikontrolli väliselt - seda teostabki sisendikontroll. Samas kogu ülejäänud kommentaari haldus, nagu olemasolevate kommentaaride muutmine ning uute olekute seadmine toimub üksnes läbi iseseisvate kommentaarikontrollide, mis sisaldavad täies mahus vastavat funktsionaalsust.
Kommentaaride komponendi kõik kolm osa (sisendkontroll, väljundkontroll ja kommentaarikontroll) suhtlevad teenusekihiga läbi vastava ligipääsuobjekti. Ligipääsuobjekt tegeleb ühenduse ning sellega seonduvate võimalike vigade haldamisega. Kokkuvõtlikult loob see vajaduse korral uue ühenduse, sooritab päringud ning lõpuks sulgeb ühenduse, kui vastav korraldus antakse.
Teenuses on vastavad protseduurid, mida teenusega suhtlemisel välja kutsutakse ning mis teostavad reaalseid muudatusi andmebaasis, seda muidugi vastavalt reeglitele.
Klientrakendus II : Mobiilirakendus
Teine rakendus, mis veebiteenuse peale ehitatud sai, oli Windows Phone 7 rakendus. Lühidalt kirjeldades saab peale rakenduse käivitamist näha listi kõikidest olemasolevatest kohvikutest. Kui vajutad mingi kohviku nime peale, avaneb täpsem kirjeldus kohviku kohta, kust näeb lisaks kohviku nimele ka lühikest kirjeldust, tänast lahtiolekuaega ja kohviku aadressit. Samuti on kohviku kirjelduse lehel viide kohviku tänasele menüüle ja kommenteerimisele. Vajutades vaata menüüd nuppu avaneb vaade täna müügis olevatest müügiartiklitest ja nende hinnast, vajutades aga kommenteeri kohvikut nupule avaneb võimalus lisada kohviku kohta kommentaar.
Kokkuvõttev pilt realiseeritud võimalustest:
Mobiilirakenduse saab alla tõmmata siit: http://enos.itcollege.ee/~rruga/VRII/Mobiilirakendus.rar
NB! Et mobiilirakendust proovida ja mõistliku tulemust saada peab teil olema kõige uuem versioon meie projekti teenuskihist ning teenuskiht peab töötama.
Meeskonna punktide jaotus
Kõigi grupiliikmetega sai arutatud punktide jagamise üle ja ühine arvamus oli, et punktid jaotatakse järgnevalt:
- Rauno Rüga - 29 punkti
- Ilmar Telga - 20 punkti
- Kristjan Stolin - 17 punkti
- Lauri Kermas - 14 punkti
Meeskonna kokkuvõttev aruanne
Mis sai tehtud ?
Projektiks valisime ühtse kohvikute süsteemi loomise, et klientidel oleks hea mõnus kohvikute kohta infot vaadata ja samamoodi kohviku omanik saaks menüüd läbi arvuti hallata. Selle jaoks sai valmis tehtud korralik andmemudel, mille põhjal andmebaas genereeritud. Andmebaas olemas, sai hakatud teenuskihti ehitama kõigi vajalike meetoditega rakenduste jaoks. Paralleelselt sai hakatud ka lõpprakendusi tegema, sest nii oli hea arendad, kuna rakendust tehes tekkisid ideed, mis meetodeid oleks vaja, et mingit tegevust läbi viia. Valmis kaks klientrakendust, millest esimene oli põhjalikum asp.net rakendus, mis oli sunatud nii klientidele, kohvikute omanikele kui kogu süsteemi administreerijatele. Teine rakendus, mobiilirakendus, oli väiksema sisuga, rohkem suunatud klientidele, et vaadata infot kohvikute kohta ja kohvikuid kommenteerida.
Mida oleks paremini saanud teha ?
Mõtlesime, et mis saab siis, kui kohviku kassa arvutis pole parajasti internetiühendust ja kohvikupidaja tahab muuta menüüd. Selleks tuleb ilmselt kohalikus arvutis salvestada muudetud menüü XML formaadis ning internetiühenduse taastumisel toimuks menüü muutus ka serveris. Küsisime õppejõult nõu, kuidas oleks seda kõige mõistlikum teostada. Õppejõu seisukoht on, et kuna selle probleemi lahendamine väljub aine "Võrgurakendused II" raamidest ja on ajaliselt mahukas ülesanne, siis ei ole mõtet sellega õppetöö raames tegeleda.
Mida sai peale viimast esitlust veel täiendatud ?
- ASP.NET rakendusel sai statistika charte sipakene väiksemaks tehtud, et nad näeksid paremad välja ja korraga ekraanil oleks näha nii päeva, nädala, kuu kui ka kogu aja jaotus (loomulikult normaalse suurusega ekraani puhul)
- Mobiilirakenduses menüü kuvamine korralikumaks (toit ja hind palkirjad juurde)
- Mobiilirakenduses kommenteerija nimi salvestatakse mobiili mällu, niiet kommenteerima tulles on kohe nime lahtris oma nimi alati olemas
(Täiendused on olemas ka juba projekti rar failidel, millele siin wikis viited on)
Õpitud teadmised / omandatud kogemused
- XML, XSLT koostamine
- Teenuskihi ehitamine ja selle ühildamine nii andmebaasi kui rakendustega
- Rakenduste ehitamine teenuskihi peale
- Meeskonnatöö korraldamine
- Aja planeerimine
Ligikaudne ajahinnang tehtud tööle
- XML,XSLT koostamine ja selle arutamine rühmas - 5 h
- Andmemudeli arutamine grupis, selle loomine, täiendamine ja projekti ühildamine - 20 h
- Teenuskihi ehitamine - 60 h
- ASP.NET rakenduse tegemine - 75 h
- Mobiilirakenduse tegemine - 24 h
(Arvesse võtsime nii reaalse töö projekti kallal kui ka seotud teemadega tutvumine (näidete uurimine/läbi tegemine jne)) (Töö tunnid on kõigi inimeste peale kokku ehk kui arutasime kolmekesi XML struktuuri 1 tunni, siis kokku 3 töötundi).
Kokkuvõtva esitluse slaidid
Kokkuvõtva esitluse slaidi saab siit: http://enos.itcollege.ee/~rruga/VRII/VR_II.ppt
Logi
2. Juuni
Wiki täiendamine ja kokkuvõtva osa loomine.
22. Mai
Viimased täiendused asp.net ja mobiilirakendusele.
18. Mai
ASP.net rakendusele lisatud CMS osa (sitemap ja html loomise osa)
8. Mai
Veebirakendus esitluseks valmis. Täiendatud vikilehte.
7. Mai
Mobiilirakendus sai valmis ja selle kohta uuendatud vikilehte.
17. aprill
Wikilehe täiendamine andmemudeli ja veebiteenuse meetodite kirjeldusega.
9. aprill
Tegime rollide halduse, münüüde muutmise vormi. Meili saatmine registreerimisel. Toimus andmebaasi andmemudeli väike muutus.
30. märts
Tehtud on kohviku menüü ja kohviku kommenteerimise leht.
26. märts
Tehtud on esimesed veebiteenuse meetodid ja veebirakendusele kasutajate registreerimine.
10. märts
Väikese häki abil õnnestus kohviku kassa arvutis saada tööle üks Forms-i proovirakendus.
8. märts
Kuna kassa-aparaadis on operatsioonisüsteemiks Windows XP ja raud on 1.99 GHz, 256 RAM siis peaks saama prototüübiks teha sinna peale rakenduse, mille ülesandeks menüüga tegelemine.
7. märts
Linnar Viik andis meile järgmist nõu: tuleb eristada kahte asja - see, mis peab valmis saama (must) ja see, mis oleks tore (nice to have). Valmis peab saama menüüga ekraan seinal (esialgu kasutajale prototüübi näitamiseks kasvõi näiteks PowerPoint-i abil tehtud). Alles siis kui on kasutajalt positiivne tagasiside saadud, võib edasi minna reaalse tarkvaralahenduse loomisega. Kui ka see on valmis ja kasutaja sellega rahul võib juurde mõelda nice to have asju (näiteks eelinfo järgmise päeva menüü kohta, üliõpilasesinduse sõnumite riba ja muid asju).
Saime teada, et kui tahame, et meie loodav süsteem suhtleks IT Kohviku kassasüsteemiga, siis tuleb selle süsteemi tootjatega ühendust võtta ja nendega konsulteerida.
19.Veebruar
- Valmis XSLT fail.
9.Veebruar
- Esmane versioon XML ja XML Schemast olemas
- Tekkis küsimus kas XSLT faili tuleb käsitsi tekitada või automaatselt.
- Küsimus oli ka kas lahendasime portsjoni asja mõistlikult või oleks mõni teine lähenemine parem olnud.
- Küsimus, kas XML fail on liiga üle pingutatud või sobiva keerukusega
7. Veebruar
- Võtsime õppejõu poolt pakutud ideest kohe kinni, sest me eelistame teha praktilist asja, mida saab kasutada ja mille kasutamist saame ka iga päev jälgida.
- Esimese asjana otsustasime välja uurida mida meie "kliendid" (süsteemi tellijad) meilt ootavad. (Soovid idee punkti all)
- Valminud on lihtne teenusest ja klientidest koosnev süsteemi testmudel.
Kasulikud lingid
http://www.codeproject.com/KB/WCF/WCF_auto_client_proxies.aspx
http://msdn.microsoft.com/en-us/library/ms178472.aspx
http://support.microsoft.com/kb/305141
http://msdn.microsoft.com/en-us/library/aa702565.aspx
http://weblogs.asp.net/scottgu/archive/2010/06/28/introducing-iis-express.aspx
http://weblogs.asp.net/scottgu/archive/2011/01/03/vs-2010-sp1-beta-and-iis-developer-express.aspx
http://www.dotnetcurry.com/ShowArticle.aspx?ID=487
http://davidkiff.co.uk/post/2009/09/22/Setting-up-SSL-for-WCF-in-Development.aspx
http://www.request-response.com/blog/CommentView,guid,e9bb929b-d0b4-4626-b302-1d2715fc344a.aspx
Kokkuvõtvad lingid
- WCF
http://msdn.microsoft.com/library/ee958158.aspx
http://www.codeproject.com/KB/WCF/WCF_auto_client_proxies.aspx
http://msdn.microsoft.com/en-us/library/aa702565.aspx
http://www.codeproject.com/KB/WCF/WCFInstance.aspx
http://www.codeproject.com/KB/WCF/WCFConcurrency.aspx
http://codeidol.com/csharp/wcf/Concurrency-Management/Service-Concurrency-Mode/
- ASP
http://msdn.microsoft.com/en-us/library/ms178472.aspx
http://support.microsoft.com/kb/305141
http://www.west-wind.com/weblog/posts/2008/Aug/14/ASPNET-gets-no-Respect
http://lostechies.com/jimmybogard/2008/05/19/asp-net-officially-unmaintainable/
http://www.lullabot.com/blog/why-not-asp-net
http://reverseblade.blogspot.com/2008/06/web-development-aspnet-webforms-versus.html