<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.dt.ee/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>DT blogi</title>
	
	<link>http://www.dt.ee/blog</link>
	<description>Tarkvara. Veeb. Mobiil. Multimeedia. Tehnoloogia</description>
	<pubDate>Thu, 02 Sep 2010 10:34:18 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.dt.ee/dtblogi" /><feedburner:info uri="dtblogi" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><image><link>http://www.dt.ee/</link><url>http://www.developers-team.com/images/logo_DT_70x100.gif</url><title>Developers Team</title></image><feedburner:emailServiceId>dtblogi</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.dt.ee%2Fdtblogi" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.dt.ee%2Fdtblogi" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.dt.ee%2Fdtblogi" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.dt.ee/dtblogi" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.dt.ee%2Fdtblogi" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.dt.ee%2Fdtblogi" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.dt.ee%2Fdtblogi" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:browserFriendly>Hei! DT blogi tellimiseks: 1) vali paremalt oma lemmik-RSS-lugeja või 2) kopeeri selle lehekülje aadress oma RSS-lugejasse. E-postiga tellimiseks klikka ümbriku ikooniga linki. Voila! -- maailma parim eestikeelne IT-blogi on nüüd Sinuga.</feedburner:browserFriendly><item>
		<title>Kuidas kulgesid kaugelt maalt tellitud projektid</title>
		<link>http://feeds.dt.ee/~r/dtblogi/~3/U_ZSIYWx8rI/</link>
		<comments>http://www.dt.ee/blog/tarkvara-arendus/2010/09/kuidas-kulgesid-kaugelt-maalt-tellitud-projektid/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 10:25:13 +0000</pubDate>
		<dc:creator>Gunnar</dc:creator>
		
		<category><![CDATA[Tarkvaraarendus]]></category>

		<guid isPermaLink="false">http://www.dt.ee/blog/?p=3625</guid>
		<description><![CDATA[Raskel ajal tellisid nii mõnedki inimesed omale tarkvaraarendustöid odavatest välisriikidest ja ega nad rõõmustama just pidanud. Ei suutnud minagi neid kõiki aidata, sest pole ma vana jumal, kes sõrmega osutades kõik jubedused siin ilmas lilleliseks suudaks maalida. Annan käesolevaga ülevaate sellest, mis proovijatel valesti läks ja millised olid tulemused. 
Meist kaugel-kaugel Indias ja Pakistanis asuvate [...]]]></description>
			<content:encoded><![CDATA[<p>Raskel ajal tellisid nii mõnedki inimesed omale tarkvaraarendustöid odavatest välisriikidest ja ega nad rõõmustama just pidanud. Ei suutnud minagi neid kõiki aidata, sest pole ma vana jumal, kes sõrmega osutades kõik jubedused siin ilmas lilleliseks suudaks maalida. Annan käesolevaga ülevaate sellest, mis proovijatel valesti läks ja millised olid tulemused. </p>
<p>Meist kaugel-kaugel Indias ja Pakistanis asuvate arendajate käest tellimisel eeldas kohalik äriboss midagi sellist:</p>
<ul>
<li>hinnad on oluliselt odavamad, kuid tööde kvaliteet umbes sama, mis meil või natukene halvem, kuid siiski ei midagi hullu,</li>
<li>tööde tähtajad on umbes samad,</li>
<li>arendajaga tegeleme umbes sama palju, kui tänagi,</li>
<li>lõpeks laabub kõik hästi, nagu oleme harjunud.</li>
</ul>
<p>Mõistlikud eeldused, kui peale vaatame ja midagi liigkeerukat polegi justkui küsitud. </p>
<p>Kogemused olid aga sellised:</p>
<ul>
<li>hinnad on odavamad, kuid tööde kvaliteet ei kannata kriitikat,</li>
<li>arendajatel praktiliselt puudub iseseisev mõtlemine,</li>
<li>arusaam ja intuitsioon tellija soovide osas on pea olematu,</li>
<li>kõik asjad tuleb näpuga ette näidata ning teha puust ja punaseks nagu esimese klassi õpilasele,</li>
<li>kommunikatsioon on oluliselt tihedam, et asjad liiguksid, selgitada on vaja ka kõige elementaarsemaid asju, vigu toodetakse metsikult, neid parandatakse väga aeglaselt,</li>
<li>tööd valmivad kaootiliselt.</li>
</ul>
<p>Ja kõige lõpuks need asjad, mis minu laualt läbi käisid ja mis pidid olema kvaliteetsed ja valmis, olid sellised:</p>
<ul>
<li>80% lähtekoodist on kaootiline spagett, täis turvaauke, nigelaid lahendusi ja lausabsurdi,</li>
<li>ülejäänud 20% koodist on lahendatud nii halvasti ja tellija vajadustest mööda, et see tuleb täismahus ümber kirjutada.</li>
</ul>
<p>Tulemus selline. Tehes nüüd lihtsa liitmistehte, saame tulemuseks, et suures ulatuses parandusi ja ümbertegemist vajab 100% lähtekoodist. Olge väga ettevaatlikud enne kui antud regioonidest midagi tellima hakkate ja kui teisiti ei saa, siis valmistage ette plaan kõikideks eeltoodud tõrgeteks.</p>
<p><br /><strong>Loe lisaks</strong><ul><li><a href="http://www.dt.ee/blog/krimi/2007/07/usa-uurijad-tutvuvad-eesti-vastaste-kuberrunnakutega/" rel="bookmark" title="USA uurijad tutvuvad Eesti vastaste küberrünnakutega">USA uurijad tutvuvad Eesti vastaste küberrünnakutega</a></li><li><a href="http://www.dt.ee/blog/mobiil/2008/08/htc-android-toega-telefonid-tulevad-mki-selle-aasta-lpus/" rel="bookmark" title="HTC Android toega telefonid tulevad m&uuml;&uuml;ki selle aasta l&otilde;pus">HTC Android toega telefonid tulevad m&uuml;&uuml;ki selle aasta l&otilde;pus</a></li><li><a href="http://www.dt.ee/blog/raamatud/2008/12/death-march/" rel="bookmark" title="Death March">Death March</a></li><li><a href="http://www.dt.ee/blog/ari/2008/12/papa-johns-mobiilpizza-teenus-on-populaarne/" rel="bookmark" title="Papa John&#8217;s mobiilpizza teenus on populaarne">Papa John&#8217;s mobiilpizza teenus on populaarne</a></li><li><a href="http://www.dt.ee/blog/id-kaart/2010/01/id-kaardi-seminar-arendajatele/" rel="bookmark" title="Tasuta ID-kaardi seminar arendajatele">Tasuta ID-kaardi seminar arendajatele</a></li></ul></p><br /><div class="feedflare">
<a href="http://feeds.dt.ee/~ff/dtblogi?a=U_ZSIYWx8rI:2jHcJBdbZ14:CrAVEhbAS04"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=CrAVEhbAS04" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=U_ZSIYWx8rI:2jHcJBdbZ14:lvXyGxTQzqQ"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=lvXyGxTQzqQ" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=U_ZSIYWx8rI:2jHcJBdbZ14:jyDof3Xhdmw"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=jyDof3Xhdmw" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=U_ZSIYWx8rI:2jHcJBdbZ14:1mQ1z0kQkz4"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=1mQ1z0kQkz4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dtblogi/~4/U_ZSIYWx8rI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dt.ee/blog/tarkvara-arendus/2010/09/kuidas-kulgesid-kaugelt-maalt-tellitud-projektid/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.dt.ee/blog/tarkvara-arendus/2010/09/kuidas-kulgesid-kaugelt-maalt-tellitud-projektid/</feedburner:origLink></item>
		<item>
		<title>Eneta ettekanded septembris</title>
		<link>http://feeds.dt.ee/~r/dtblogi/~3/k0eb3a_EbVY/</link>
		<comments>http://www.dt.ee/blog/tarkvara/2010/08/eneta-ettekanded-septembris/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 11:00:56 +0000</pubDate>
		<dc:creator>Gunnar</dc:creator>
		
		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[Tarkvara]]></category>

		<category><![CDATA[Tarkvaraarendus]]></category>

		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.dt.ee/blog/?p=3622</guid>
		<description><![CDATA[Sügisekuulutajana toimus Eneta raames ära juba üks ettekanne, kus ma tutvustasin põgusalt ASP.NET MVC kolmandamat versiooni, mis veel valmimisel. Septembris tõmbame aga kogu hooaja täiel tuuril jälle käima ja sissejuhatuseks on tulemas kolm põnevat ettekannet, millest siin paari sõnaga juttu teen. 
08.09 – Teeme ise Windows … installika!
Heiki Tähis tutvustab meile kuidas teha ise Windows [...]]]></description>
			<content:encoded><![CDATA[<p>Sügisekuulutajana toimus Eneta raames ära juba üks ettekanne, kus ma <a href="http://www.eneta.ee/sundmused/Lehed/eneta-kommuuniohtu-asp-net-mvc-3-areneb-ja-uueneb.aspx">tutvustasin põgusalt ASP.NET MVC kolmandamat versiooni</a>, mis veel valmimisel. Septembris tõmbame aga kogu hooaja täiel tuuril jälle käima ja sissejuhatuseks on tulemas kolm põnevat ettekannet, millest siin paari sõnaga juttu teen. </p>
<h3>08.09 – Teeme ise Windows … installika!</h3>
<p>Heiki Tähis tutvustab meile kuidas teha ise Windows 7 installikas, mis just enda soovide järgi kohandatud. Ettekanne on suunatud inimestele, kes hoolitsevad pisemate firmade ja koduste arvutite eest. Loomulikult võivad kuulama tulla ka kõik teised, kellele see teema huvi pakub – nagu alati. <img src='http://www.dt.ee/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://www.eneta.ee/sundmused/Lehed/eneta-kommuuniohtu-teeme-ise-windowsi-installika.aspx">Ettekandele registreerumiseks kliki seda linki!</a></p>
<h3>15.09 – Rääkimata jutud Exchange Server 2010st</h3>
<p>Toomas Ruus Microsoftist paljastab meile mõningaid Exchange Server 2010 saladusi. Ettekandel on oodata rohkelt demosid. Tegemist rohkem adminide üritusega, kuid oodatud on ka kõik teised huvilised.</p>
<p><a href="http://www.eneta.ee/sundmused/Lehed/eneta-kommuuniohtu-raakimata-jutud-exchange-server-2010st.aspx">Ettekandele registreerumiseks kliki seda linki!</a></p>
<h3>29.09 – UrlScan ja ASP.NET filtreerimine</h3>
<p>Kuido Külm teeb loengul juttu lühidalt vajalikest baasteadmistest: kuidas IIS päringut töötleb, POST ja GET päringud, HttpModule ja HttpHandler. Lisaks sellest, mida kujutavad endast ISAPI Filter UrlScan ja Request Filtering ning kuidas neid olemasolevatele rakendustele seadistada ja mida võiks neist teada enne tarkvara loomist. Tegemist on ettekandega, mis võiks huvi pakkuda nii arendajatele kui ka adminidele.</p>
<p><a href="http://www.eneta.ee/sundmused/Lehed/eneta-kommuuniohtu-urlscan-ja-asp-net-filtreerimine.aspx">Ettekandele registreerumiseks kliki seda linki!</a></p>
<p>Kindlasti pakub igasugu lahedaid ettekandeid ka oktoober, kuid sellest on veel vara rääkida. Käime algul ära siintoodud ettekannetel! <img src='http://www.dt.ee/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><br /><strong>Loe lisaks</strong><ul><li><a href="http://www.dt.ee/blog/kood/net/2010/04/kutse-devdays-2010-tallinnas-ja-tartus/" rel="bookmark" title="Kutse: DevDays 2010 Tallinnas ja Tartus">Kutse: DevDays 2010 Tallinnas ja Tartus</a></li><li><a href="http://www.dt.ee/blog/microsoft/2010/02/kutse-microsofti-arianaluusi-seminarile/" rel="bookmark" title="Kutse Microsofti ärianalüüsi seminarile">Kutse Microsofti ärianalüüsi seminarile</a></li><li><a href="http://www.dt.ee/blog/kood/net/2010/03/windows-phone-7-arendusvahendid-on-saadaval/" rel="bookmark" title="Windows Phone 7: Arendusvahendid on saadaval">Windows Phone 7: Arendusvahendid on saadaval</a></li><li><a href="http://www.dt.ee/blog/kood/net/2010/02/kutse-net-joudluse-seminarile/" rel="bookmark" title="Kutse .NET jõudluse seminarile">Kutse .NET jõudluse seminarile</a></li><li><a href="http://www.dt.ee/blog/microsoft/2010/05/eneta-portaalist-leiab-erialast-kirjandust/" rel="bookmark" title="Eneta portaalist leiab erialast kirjandust">Eneta portaalist leiab erialast kirjandust</a></li></ul></p><br /><div class="feedflare">
<a href="http://feeds.dt.ee/~ff/dtblogi?a=k0eb3a_EbVY:itlt2esw95A:CrAVEhbAS04"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=CrAVEhbAS04" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=k0eb3a_EbVY:itlt2esw95A:lvXyGxTQzqQ"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=lvXyGxTQzqQ" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=k0eb3a_EbVY:itlt2esw95A:jyDof3Xhdmw"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=jyDof3Xhdmw" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=k0eb3a_EbVY:itlt2esw95A:1mQ1z0kQkz4"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=1mQ1z0kQkz4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dtblogi/~4/k0eb3a_EbVY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dt.ee/blog/tarkvara/2010/08/eneta-ettekanded-septembris/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.dt.ee/blog/tarkvara/2010/08/eneta-ettekanded-septembris/</feedburner:origLink></item>
		<item>
		<title>Andmevähi ravimine</title>
		<link>http://feeds.dt.ee/~r/dtblogi/~3/_M6rU2U0QRI/</link>
		<comments>http://www.dt.ee/blog/tarkvara-arendus/2010/08/andmevahi-ravimine/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 08:00:44 +0000</pubDate>
		<dc:creator>Gunnar</dc:creator>
		
		<category><![CDATA[Tarkvaraarendus]]></category>

		<guid isPermaLink="false">http://www.dt.ee/blog/?p=3618</guid>
		<description><![CDATA[Andmevähi ravimine pole lihtsamate killast tegemine. Mida kaugemale vähk on arenenud seda vaevalisem on ka ravi ja paljudel juhtudel on ravist oluliselt soodsam alustada alates nullist. Et ma niisama vingujate vendade ja nutunaiste kampa ei kuulu, siis pakun alati probleemidele välja ka lahendused. Selles kandes tutvustan ülevaatlikul tasemel plaani andmevähi ravimiseks. Kellel kogemusi, siis kõik [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.dt.ee/blog/tarkvara-arendus/2010/08/andmevahk/">Andmevähi</a> ravimine pole lihtsamate killast tegemine. Mida kaugemale vähk on arenenud seda vaevalisem on ka ravi ja paljudel juhtudel on ravist oluliselt soodsam alustada alates nullist. Et ma niisama vingujate vendade ja nutunaiste kampa ei kuulu, siis pakun alati probleemidele välja ka lahendused. Selles kandes tutvustan ülevaatlikul tasemel plaani andmevähi ravimiseks. Kellel kogemusi, siis kõik tagasiside – nagu ikka – on teretulnud. </p>
<p>Tihti mõtlevad arendajad nii, et kui miski on katki, siis küll me selle kuidagi siva korda saame. Enamasti see aga nii ei lähe, sest meie käsitleme juhtumit, kus probleemid on tõusnud või tõusmas juba taevani. Rakenduse silumine, testimine ja edasiarendamine on muutunud elusaks põrguks, millest väljapääsu ei paista olevat. Kas tunneli lõpus paistab valgus või on see lähenev rong, mis projekti lõplikult tapab?</p>
<h3>Plaan andmevähi ravimiseks</h3>
<p>Eelmises andmevähi kandes kirjeldasin ära probleemid lähtekoodiga. Selles kandes püüan anda tegevuskava asjade samm-sammult parandamiseks. Kes loodab leida siit hõbekuuli, siis teadku, et ainus hõbekuul on projekti alguses korralik eeltöö ja oma meeskonna järjepidev harimine. Andmevähi tootnud tiimi jaoks on see hetkel tagantjärgi tarkus.</p>
<p>Sammud andmevähi raviks on järgmised:</p>
<ol>
<li>Koonda päringud ja objektide loomine algul <em>manager-</em>klassidesse. See ei ole küll hea praktika lõplikuks lahenduseks, kuid mõtle sellele nagu põrandate pesemisele – põrandalt kõrgemale tõstetud asjad jäävad sinna ainult ajutiselt. Vähemasti hakkab kord tasapisi tekkima.</li>
<li>Vii päringud ja objektide loomine eraldi klassidesse. Sel teel muutuvad ajutised <em>manager</em>-id oluliselt õhemaks ja lihtsamini käsitletavaks. Jälgi hoolega, et igat tüüpi objektide luuakse ainult ühes kohas, mitte mitmes. Muidu paranemist pole, vähk võtab ainult teise kuju.</li>
<li>Muuda oma lähtekoodi selliselt, et ADO.NET objekte rakenduse äriloogika ja kasutusliidese kihis ei kasutata. See tähendab seda, et mainitud kihid saavad oma objektid kätte <em>manager</em>-ide käest. </li>
</ol>
<p>Ma soovitan siinkohal appi võtta ka andmebaasidega tegelevad professionaalid, sest nende käest saab kuldaväärt teavet tavaliselt ja ma ei mõista, miks hoitakse neid enamasti arendusprotsessist nii kaugel. Muide, ka see on üks andmevähi põhjuseid, et õigete meeste käest jäetakse küsimata ja püütakse ise olla sama targad, kuigi teadmised puuduvad.</p>
<p>Nüüd on suurem tuli kustutatud ning esmane kord majja loodud. Sama mustrit hoides on võimalik vähemalt osal tiimist jätkata uute arendustega, kuid midagi suuremahulist ei soovita ma enne täieliku korra saabumist käsile võtta. Ütleme nii, et olukord on juba parem, kuid masinaid me haige küljest veel eemaldada ei saa.</p>
<h3>Edasise arhitektuuri valimine</h3>
<p>Ma ütlen just nimelt edasise, sest sellist asja nagu õige arhitektuur või ideaalne arhitektuur pole olemas. Inimesed, kes sellist asja jutlustavad, meenutavad mulle alati neid pealappidega fundamentaliste, kes ühe ja ainsa idee ja jumala nimel on nõus ükskõik millisteks tegudeks. Jääme meie aga maailmaga sõbraks ja võtame teadmiseks, et arhitektuur pole kas õige või vale, vaid rohkem või vähem sobiv. Kuid igal juhul peab see arvestama sellega, kus oleme täna ja kuhu jõutakse näiteks ülehomme. Üle pole mõtet pingutada.</p>
<p>Nüüd tuleb hoolega hinnata rakenduse mahtu ja selle edasisi arenguid. Soovitan kliendiga selles osas nõu pidada, et saada selgem pilt sellest, kuhu näiteks lähema paari aasta jooksul püütakse jõuda. Sellest lähtuvalt saab valida ka strateegia andmetega tegelemiseks. <a href="http://martinfowler.com/">Martin Fowler</a> pakub oma kultusteoses <a href="http://www.amazon.com/gp/product/0321127420?ie=UTF8&amp;tag=gupesasnebl-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321127420"><strong>Patterns of Enterprise Application Architecture</strong></a> välja kolm võimalikku lähenemist:</p>
<ul>
<li><strong>Transaction Script</strong> – see on enam-vähem see, mis meil praegu olemas on, kuid korrastamist on vaja enam. See lähenemine sobib hästi rakendustele, mis on pisikesed ja lihtsad.</li>
<li><strong>Table Module</strong> – andmebaasi tabelile seatakse vastavusse klass, mis teostab kõik sellega seonduvad operatsioonid. Midagi sellist on meilgi osaliselt olemas. See lähenemine sobib pisut suurematele rakendustele, mis ei tegele millegi keerukaga. Peamiselt andmete edasi-tagasi liigutamine lihtsal kujul.</li>
<li><strong>Domain Model</strong> – täismahus objekt-orienteeritud objektmudel, mis kannab endas nii andmeid kui nendega seotud operatsioone.</li>
</ul>
<p>Ma eelistan enamasti just viimast neist, kuid lihtsaid ja primitiivsemat laadi rakendusi ma sellise monstrumiga koormama ei hakka. Sellel puudub igasugune mõte ja jutt sellest, kuidas kümmet andmebaasi käsku tundev rakendus vajab täismahus teste, on suhteliselt absurd. </p>
<h3>Koodi migreerimine uuele arhitektuurile</h3>
<p>Peale arhitektuuri valikut tuleb otsustada ära, kuidas rakendus koodi üleviimine hakkab toimuma. Hea on mõelda, et teeme korraga kõik ühe hingetõmbega ära, kuid see toimib ainult väikeste rakenduste korral. Aastaid arendatud rakendused on enamasti nii mahukad, et vaja on plaani näiteks järgmise kuu kuni kolme või miks mitte ka pikema ajalise perioodi jaoks.</p>
<p>Kui tegemist on pikema ja mahukama tööga, siis üheks keerukaks kohaks saab uue arhitektuuri kasutamine paralleelselt vanaga. Need kaks asja tuleb omavahel liidestada ja neid tuleb paralleelselt kasutada vähemasti mõnda aega. Mõned soovitused:</p>
<ul>
<li>planeeri migreerimine väga hoolikalt – see teeb protsessi oluliselt lihtsamaks, sest keerukaid üllatusi tuleb ette niigi palju,</li>
<li>kui on vähegi võimalik, siis planeeri migreerimine mõistliku suurusega tükkidena – näiteks vormi kaupa või klassi kaupa (sõltub olukorrast),</li>
<li>kohad, kus tuleb paratamatult kasutada uut ja vana korraga, tee sellised, et liidestamisel ei puudutatakse uue arhitektuuriga seonduvat – ajutiselt loodud klassid kustutad sa niigi lõpuks maha ja parem nakata halbade haigustega kaduv kood, mitte see, mis jääb.</li>
</ul>
<p>Selle tegemise lõpuks peab käes olema olukord, kus vahepeal loodud korra eesmärgilised klassid võib kõik maha kustutada.</p>
<h3>Kokkuvõtteks</h3>
<p>Kogu see tegemine tundub hoomatav ja üldse mitte suur, kui seda eemalt vaadata. Kes korra käed on külge löönud, see avastab, et tegemist on oluliselt rohkem, kui keegi seda alguses oskas ette kujutada. Hea plaan on ajalised puhvrid võtta sellise tegemise juures suure varuga ja kindlasti tuleb teha väga põhjalik eeltöö, et niigi suur ootamatuste arv viia miinimumi.</p>
<p><br /><strong>Loe lisaks</strong><ul><li><a href="http://www.dt.ee/">Tarkvaraarendus, veeb, mobiils&uuml;steemid - Developers Team</a></li></ul></p><br /><div class="feedflare">
<a href="http://feeds.dt.ee/~ff/dtblogi?a=_M6rU2U0QRI:aAxQx5gIBKc:CrAVEhbAS04"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=CrAVEhbAS04" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=_M6rU2U0QRI:aAxQx5gIBKc:lvXyGxTQzqQ"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=lvXyGxTQzqQ" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=_M6rU2U0QRI:aAxQx5gIBKc:jyDof3Xhdmw"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=jyDof3Xhdmw" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=_M6rU2U0QRI:aAxQx5gIBKc:1mQ1z0kQkz4"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=1mQ1z0kQkz4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dtblogi/~4/_M6rU2U0QRI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dt.ee/blog/tarkvara-arendus/2010/08/andmevahi-ravimine/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.dt.ee/blog/tarkvara-arendus/2010/08/andmevahi-ravimine/</feedburner:origLink></item>
		<item>
		<title>MSDN Magazine ja Dr. Dobb’s digitaalselt tasuta saadaval!</title>
		<link>http://feeds.dt.ee/~r/dtblogi/~3/E8zbLmcoyXI/</link>
		<comments>http://www.dt.ee/blog/tehnoloogia/2010/08/msdn-magazine-ja-dr-dobbs-digitaalselt-tasuta-saadaval/#comments</comments>
		<pubDate>Sun, 29 Aug 2010 20:33:23 +0000</pubDate>
		<dc:creator>Gunnar</dc:creator>
		
		<category><![CDATA[Tarkvaraarendus]]></category>

		<category><![CDATA[Tehnoloogia]]></category>

		<category><![CDATA[WWW]]></category>

		<guid isPermaLink="false">http://www.dt.ee/blog/?p=3621</guid>
		<description><![CDATA[Microsoft pakub tasuta lugemiseks MSDN Magazine ja Dr. Dobb’s ajakirjade digitaalseid versioone. Ainus, mis digitaalsete versioonide saamiseks teha tuleb, on täita oma profiil Microsofti lehel. 
Soovitan, kui vähegi võimalik kasutada Internet Explorerit profiili täitmisel, sest teiste brauseritega on seal kohati tõrkeid esinenud ja ma ei ole 100% kindel, kas need pikka aega mind seganud vead [...]]]></description>
			<content:encoded><![CDATA[<p>Microsoft pakub tasuta lugemiseks MSDN Magazine ja Dr. Dobb’s ajakirjade digitaalseid versioone. Ainus, mis digitaalsete versioonide saamiseks teha tuleb, on täita oma profiil Microsofti lehel. </p>
<p>Soovitan, kui vähegi võimalik kasutada Internet Explorerit profiili täitmisel, sest teiste brauseritega on seal kohati tõrkeid esinenud ja ma ei ole 100% kindel, kas need pikka aega mind seganud vead on seal juba parandatud või ei. Ajakirjade tellimiseks klikka järgmisel pildil.</p>
<p align="center"><a href="https://profile.microsoft.com/RegSysProfileCenter/wizard.aspx?wizid=340d4a10-8a55-4dcf-a854-e624bd6686bd&amp;lcid=16393"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title=""MSDN Magazine &#038; Dr. Dobb's digital versions for free" border="0" alt="MSDN Magazine &#038; Dr. Dobb's digital versions for free" src="http://www.dt.ee/blog/wp-content/uploads/2010/08/msdndrdobbsdigitalfree.png" width="540" height="635" /></a></p>
<p>Egas muud, et head lugemist kui esimesed nummerid kohale jõuavad!</p>
<p><br /><strong>Loe lisaks</strong><ul><li><a href="http://www.dt.ee/blog/raamatud/2007/03/tasuta-online-raamatud/" rel="bookmark" title="Tasuta online raamatud">Tasuta online raamatud</a></li><li><a href="http://www.dt.ee/blog/flash/2006/12/flash-lite-21-player-tasuta-saadaval/" rel="bookmark" title="Flash Lite 2.1 Player tasuta saadaval">Flash Lite 2.1 Player tasuta saadaval</a></li><li><a href="http://www.dt.ee/blog/tarkvara/2006/10/ie7-ametlikult-vljas/" rel="bookmark" title="IE7 ametlikult v&auml;ljas">IE7 ametlikult v&auml;ljas</a></li><li><a href="http://www.dt.ee/blog/internetiturundus/2009/02/twitter-muutub-kommertskasutajatele-tasuliseks/" rel="bookmark" title="Twitter muutub kommertskasutajatele tasuliseks">Twitter muutub kommertskasutajatele tasuliseks</a></li><li><a href="http://www.dt.ee/blog/tehnoloogia/2006/05/sertifitseeri-end-tasuta-brainbenchi-mangudel/" rel="bookmark" title="Sertifitseeri end tasuta Brainbench&#8217;i mängudel">Sertifitseeri end tasuta Brainbench&#8217;i mängudel</a></li></ul></p><br /><div class="feedflare">
<a href="http://feeds.dt.ee/~ff/dtblogi?a=E8zbLmcoyXI:eU8p1W_11nk:CrAVEhbAS04"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=CrAVEhbAS04" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=E8zbLmcoyXI:eU8p1W_11nk:lvXyGxTQzqQ"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=lvXyGxTQzqQ" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=E8zbLmcoyXI:eU8p1W_11nk:jyDof3Xhdmw"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=jyDof3Xhdmw" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=E8zbLmcoyXI:eU8p1W_11nk:1mQ1z0kQkz4"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=1mQ1z0kQkz4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dtblogi/~4/E8zbLmcoyXI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dt.ee/blog/tehnoloogia/2010/08/msdn-magazine-ja-dr-dobbs-digitaalselt-tasuta-saadaval/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.dt.ee/blog/tehnoloogia/2010/08/msdn-magazine-ja-dr-dobbs-digitaalselt-tasuta-saadaval/</feedburner:origLink></item>
		<item>
		<title>Mis juhtub kui andmekihi asemel on andmevähk?</title>
		<link>http://feeds.dt.ee/~r/dtblogi/~3/9lC4kpf4Pb4/</link>
		<comments>http://www.dt.ee/blog/tarkvara-arendus/2010/08/andmevahk/#comments</comments>
		<pubDate>Sat, 28 Aug 2010 15:19:52 +0000</pubDate>
		<dc:creator>Gunnar</dc:creator>
		
		<category><![CDATA[Tarkvaraarendus]]></category>

		<guid isPermaLink="false">http://www.dt.ee/blog/?p=3616</guid>
		<description><![CDATA[Aeg-ajalt kirjutan ma siia ka paranähtustest tarkvaraarenduses. Mõtlesin, et tänagi võiks natukese üldisemal teemal jutustada ja võtta vaatluse alla, mis juhtub, kui andmed valatakse rakendusele selga nagu oleks keegi suure õlitünni ümber ajanud. Pealtnäha pole see probleem ehk hirmsaim, mis juhtuda võib, kuid lahkamisel see arvamus ehk muutub.  
Nime “The mind is terrible thing [...]]]></description>
			<content:encoded><![CDATA[<p>Aeg-ajalt kirjutan ma siia ka paranähtustest tarkvaraarenduses. Mõtlesin, et tänagi võiks natukese üldisemal teemal jutustada ja võtta vaatluse alla, mis juhtub, kui andmed valatakse rakendusele selga nagu oleks keegi suure õlitünni ümber ajanud. Pealtnäha pole see probleem ehk hirmsaim, mis juhtuda võib, kuid lahkamisel see arvamus ehk muutub.  </p>
<p>Nime “The mind is terrible thing to taste” pani ühele oma algusaastate plaadile industriaalset metalli viljelev loominguline kollektiiv <a href="http://www.thirteenthplanet.com/ministry/">Ministry</a>. Tundub, et algne pisut väänatud fraas peab tihti paika, kui mõnelt süsteemilt kergitada kaas ja sisse piiluda. Hiljuti puutusin kokku ühe päris mahuka elajaga, millel hoolimata kõrgest east puudus nii arhitektuur, tehniline disain kui ka ühtne andmete käsitlus. Otsustasin paar väikest mõtet siiagi poetada, äkki on kellelgi sellest kasu.</p>
<h3>ADO.NET valedes kätes</h3>
<p>Tihti hakkab õnnetus pihta ohtratest artiklitest ja juhenditest, mis tutvustavad ADO.NET-i kui taevamannat ja õiget teed, mida minna. Rakenduse kasvades saab sellest väikeste sammude kaupa aga õudusunenägu, mis levib läbi rakenduse nagu ravimatu vähkkasvaja. Kujutage ette rakendust, mille äriklassid on täis koodi, mis küsib ADO.NET andmeid, kombineerib tabelitest andmeid ja moodustab uusi ADO.NET-i objekte, et need anda tagasi kasutusliidesele või teistele klassidele, mis taolise keemiaga edasi tegelevad.</p>
<p>ADO.NET-il on oma kindel koht rakendustes, kuid kindlasti ei pea ADO.NET-i objektid rändama läbi kõikide rakenduse kihtide. Keegi suurtest objekt-orienteeritud maailma isandatest nimetas taolist lähenemist tahtlikuks kuriteoks oma leivaisa vastu. Ja peale taolise salati nägemist saan aru, et ta oli oma ütlusis isegi leebe.</p>
<p>ADO.NET objekte on hea kasutada pisemates rakendustes, kuid kui meil on juba tegemist millegi sellisega, kus me jagame rakenduse erinevatesse kihtidesse, siis ADO.NET koht on andmekiht ja kaugemale see ulatuda sealt ilma hea põhjuseta ei tohiks. Või vähemasti ei tohiks see näha olla muudesse kihtidesse otse, sest alati leidub mõni vähe kogenud arendaja või muidu tuulepea, kes pikemalt mõtlemata sellest haarab.</p>
<h3>Aja jooksul tekkivad probleemid</h3>
<p>Probleeme, mis aja jooksul tasapisi väikeste sammudena tekib, ei ole just vähe. Ja oma olemuselt on need väga halvad, sest viivad vääramatult rakenduse kas surma sel teel, et selle hoolduskulud kasvavad taevasse või muutuvad uued arendused hoolimata mahust järjest utoopilisemaks oma hindadelt. Lisaks sellele kasvab ajakulu samas rütmis. Peamised probleemid, mis tekivad ja mille parandamine on jube kulukas, on järgmised.</p>
<ul>
<li><strong>Palju korduvat koodi</strong> – kuna andmed liiguvad mööda rakendust ringi nii objektide kui ka ADO.NET tabelitena, siis tekib mitmeid kohti erinevates klassides, kus mõni uus objekt nagu mullamutt oma nina maa seest välja pistab. Kui objekt saab juurde uue omaduse, siis tuleb teha vastav andmetega seotud muudatus kõikjale, kus antud objekt ADO.NET andmetest kokku pannakse.</li>
<li><strong>Korduvad andmete teisendused</strong> – mitu haru lähtekoodis, kus ADO.NET kasvaja läbi on harud ajanud, vajavad andmete teisendamist ning teisendused rakendatakse kohtades, kus neid kas kohe või peatselt vaja läheb – iga arendaja teeb seda paraku enda kõhutunde järgi, sest reegleid pole kokku lepitud. Tulemus sama, mis eelmisel juhul.</li>
<li><strong>Dubleeritud päringud</strong> – varem või hiljem leiab keegi andmebaasi liiklust optimeerides, et igati hea plaan on pärida ühe päringuga ära ka seonduvate objektide andmed. Miks mitte teha nii, kui näiteks O/R-mapperites on taoline strateegia kasutuses? Nüüd jõuame segadusega uuele tasemele – üks muudatus ühes tabelis võib põhjustada näiteks paarkümmend sarnast muudatust lähtekoodis erinevates kohtades. Inimtööd kulub sellise muudatuse tegemiseks mõnusalt. Kui on tegemist uue arendajaga projektis, siis pole imestada kui antud muudatuse tegemine koodibaasi võtab tal aega nädal või enam.</li>
<li><strong>Hüppeliselt kasvav keerukus</strong> – iga uuendusega muutub rakendus järjest keerukamaks, sest “ummistunud” kohad, kus on tegevusi juba liiga palju, jäävad puutumata ning nakkuse saavad omale külge järjest uued kohad, mis seni on olnud õhukesed ja lihtsasti käsitletavad. Selle tulemusena muutub kood väikeste sammudena veelgi raskemini hallatavaks ja kontrollitavaks.</li>
</ul>
<p>Kindlasti võib siia nimekirja lisada muidki probleeme. Näiteks tähendab taolises rakenduse korral lihtne muudatus andmebaasis seda, et üle tuleb testida kogu süsteem, mitte ainult see süsteemiosa, mida antud muudatus puudutas – mine tea, kus nurga taga veel vastavat tüüpi objekte luuakse.</p>
<h3>Probleemid äripooles</h3>
<p>Äriline pool hakkab antud problemaatika tekkimisel ja kasvamisel samuti uppuma probleemidesse, mida on järjest raskem ja raskem lahendada. Probleemid on lühidalt sellised.</p>
<ul>
<li><strong>Ebatäpsed ajahinnangud</strong> – ajaliste hinnangute andmine uutele funktsionaalsustele muutub järjest ebatäpsemaks, sest arendajad suudavad järjest vähem hinnata kohtade arvus süsteemis, mida antud uuendused mõjutavad.</li>
<li><strong>Palju tasuta tööd</strong> – eelnevalt mainitud ebatäpsused toovad endaga kaasa palju sellist tööd, mis on ootamatu ning kasvab välja äkitselt nagu tapjalaine vaiksest veest. Kliendi käest ei saa raha juurde küsida, sest tema on lähtunud uute funktsionaalsuste tellimisel oma eelarvest ning jutt näiteks viis korda kallimast hinnast võib lõppeda kliendisuhte katkemisega. Paraku on enamasti nii, et sellisel juhul teeb teostaja antud tööd ära oma taskust, oma arendajate ületundide arvega, et graafikus püsida.</li>
<li><strong>Uute tööde alustamine viibib</strong> – kui ajamahukaid “uudiseid” on kuhjunud piisavalt, siis valitseb tööde ajakavas juba parandamatu kaos. Uued tööd, millega arendajad peaksid kohe-kohe alustama, viibivad ning keegi ei oska öelda, millal nad probleemid lahendatud saavad. Samal ajal toob iga arvel olev päev välja veel uusi probleeme, mille lahendamiseks pole ei aega ega raha planeeritud.</li>
</ul>
<p>Mida kõrgemalt tasemelt vaadata, seda suuremad need probleemid on. </p>
<h3>Mis saab sellisest süsteemis edasi?</h3>
<p>Enamasti loetakse taolisesse punkti jõudnud süsteem ebaõnnestunud, läbikukkunuks ning arendus peatatakse. Tellija otsib omale uued teostajad ning leiab rahalised vahendid süsteemi uueks versiooniks, mis ehitatakse üles alates nullist. Kuid nii ei lähe see igakord. </p>
<p>Kui süsteemi on ehitatud piisavalt kaua ja see on juba aastaid olnud kasutuses, siis võidakse otsustada ka <em>perestroika</em> kasuks, mille käigus tehakse kaosest kord. See ei ole ei lihtne ega odav protsess, kuid kui lasta kaosel edasi kasvada tõuseb selle likvideerimise ajakulu päevast päeva suurte hüpetena.</p>
<p>Milline on parim variant taolise süsteemiga edasi liikumiseks sõltub juba konkreetsest olukorrast ja probleemistikust. Ühest valemit ei ole ning enamasti mängib olulist rolli ka see, milliseks on antud ajaks kujunenud tellija ja teostaja suhted.</p>
<p><br /><strong>Loe lisaks</strong><ul><li><a href="http://www.dt.ee/blog/tarkvara-arendus/2010/08/andmevahi-ravimine/" rel="bookmark" title="Andmevähi ravimine">Andmevähi ravimine</a></li></ul></p><br /><div class="feedflare">
<a href="http://feeds.dt.ee/~ff/dtblogi?a=9lC4kpf4Pb4:XLL_DRxPq2w:CrAVEhbAS04"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=CrAVEhbAS04" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=9lC4kpf4Pb4:XLL_DRxPq2w:lvXyGxTQzqQ"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=lvXyGxTQzqQ" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=9lC4kpf4Pb4:XLL_DRxPq2w:jyDof3Xhdmw"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=jyDof3Xhdmw" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=9lC4kpf4Pb4:XLL_DRxPq2w:1mQ1z0kQkz4"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=1mQ1z0kQkz4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dtblogi/~4/9lC4kpf4Pb4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dt.ee/blog/tarkvara-arendus/2010/08/andmevahk/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.dt.ee/blog/tarkvara-arendus/2010/08/andmevahk/</feedburner:origLink></item>
		<item>
		<title>Firefox Throttle - kuidas käitub veebirakendus erinevate ühendustega</title>
		<link>http://feeds.dt.ee/~r/dtblogi/~3/gexL_IYBABo/</link>
		<comments>http://www.dt.ee/blog/www/brauserid/2010/08/firefox-throttle/#comments</comments>
		<pubDate>Sat, 28 Aug 2010 13:04:12 +0000</pubDate>
		<dc:creator>Gunnar</dc:creator>
		
		<category><![CDATA[Brauserid]]></category>

		<guid isPermaLink="false">http://www.dt.ee/blog/?p=3614</guid>
		<description><![CDATA[Veebirakendusi on hea testida erineva kiirusega ühenduste otsas. Ühendusi ennast pole aga tihti kuigi lihtne organiseerida. Firefoxi jaoks on selleks otstarbeks loodud plugin nimega Firefox Throttle, mis aitab arendajatel veebirakendusi testida erineva kiirusega ühenduste võtmes.  
Firefox Throttle on seadistatav lihtsa akna abil.

Läbi saab mängida erinevad alla- ja üleslaadimise kiirused, seejuures saab mängida ka stsenaariumit, [...]]]></description>
			<content:encoded><![CDATA[<p>Veebirakendusi on hea testida erineva kiirusega ühenduste otsas. Ühendusi ennast pole aga tihti kuigi lihtne organiseerida. <a href="http://www.mozilla.com/en-US/firefox/">Firefoxi</a> jaoks on selleks otstarbeks loodud plugin nimega <a href="https://addons.mozilla.org/en-US/firefox/addon/5917/">Firefox Throttle</a>, mis aitab arendajatel veebirakendusi testida erineva kiirusega ühenduste võtmes.  </p>
<p>Firefox Throttle on seadistatav lihtsa akna abil.</p>
<p align="center"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Firefox Throttle" border="0" alt="Firefox Throttle" src="http://www.dt.ee/blog/wp-content/uploads/2010/08/firefoxthrottle.png" width="540" height="414" /></p>
<p>Läbi saab mängida erinevad alla- ja üleslaadimise kiirused, seejuures saab mängida ka stsenaariumit, kus GPRS-võrk on vahel või miks mitte üliaeglane GSM Data. </p>
<p>AJAX-i rakenduste juures on mõistlik allalaadimise kiirus äärmiselt oluline. Katsed kohalike mobiilvõrkude GPRS-iga näitasid, et päris paljud lehed ei avane korralikult, kuna ühendustel tekib <em>timeout</em>. Firefox Throttle ei pruugi küll täpselt järgi mängida GPRS-võrkude hädasid, kuid abi veebirakenduste testimisel on temast kõvasti.</p>
<p><br /><strong>Loe lisaks</strong><ul><li><a href="http://www.dt.ee/blog/tarkvara/2007/04/window-media-player-plugin-firefoxile/" rel="bookmark" title="Window Media Player plugin Firefoxile">Window Media Player plugin Firefoxile</a></li><li><a href="http://www.dt.ee/blog/www/2006/05/firefox-flicks-voiduvideo/" rel="bookmark" title="Firefox Flicks võiduvideo">Firefox Flicks võiduvideo</a></li><li><a href="http://www.dt.ee/blog/tarkvara/2006/05/firefox-client-customization-kit/" rel="bookmark" title="Firefox Client Customization Kit">Firefox Client Customization Kit</a></li><li><a href="http://www.dt.ee/blog/tarkvara/2007/11/firefox-ja-thunderbird-kaituvad-veidralt/" rel="bookmark" title="Firefox ja Thunderbird käituvad veidralt">Firefox ja Thunderbird käituvad veidralt</a></li><li><a href="http://www.dt.ee/blog/tarkvara/2007/11/firefox-3-palvib-kiidusonu/" rel="bookmark" title="Firefox 3 pälvib kiidusõnu">Firefox 3 pälvib kiidusõnu</a></li></ul></p><br /><div class="feedflare">
<a href="http://feeds.dt.ee/~ff/dtblogi?a=gexL_IYBABo:DqvBIqQDQsE:CrAVEhbAS04"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=CrAVEhbAS04" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=gexL_IYBABo:DqvBIqQDQsE:lvXyGxTQzqQ"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=lvXyGxTQzqQ" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=gexL_IYBABo:DqvBIqQDQsE:jyDof3Xhdmw"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=jyDof3Xhdmw" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=gexL_IYBABo:DqvBIqQDQsE:1mQ1z0kQkz4"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=1mQ1z0kQkz4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dtblogi/~4/gexL_IYBABo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dt.ee/blog/www/brauserid/2010/08/firefox-throttle/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.dt.ee/blog/www/brauserid/2010/08/firefox-throttle/</feedburner:origLink></item>
		<item>
		<title>ASP.NET MVC 3 seminari kokkuvõte</title>
		<link>http://feeds.dt.ee/~r/dtblogi/~3/XLuNbtNz4_Y/</link>
		<comments>http://www.dt.ee/blog/kood/net/2010/08/aspnet-mvc-3-seminari-kokkuvote/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 08:25:22 +0000</pubDate>
		<dc:creator>Gunnar</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.dt.ee/blog/?p=3611</guid>
		<description><![CDATA[Eile toimunud ASP.NET MVC 3 seminaril tutvustasin ASP.NET MVC 3 Preview 1 põhjal uuendusi, mis on tulemas. Neile, kes kohale ei saanud tulla, annan kiire ülevaate räägitust ja lisan juurde ühe seminaril tehtud näite ka. Et osalejatelgi huvitavam oleks, siis kande lõpust leiab ühe peatüki eksklusiivset sisu kah. Lähipäevil panen Eneta portaali üles ka ettekande [...]]]></description>
			<content:encoded><![CDATA[<p>Eile toimunud <a href="http://www.eneta.ee/sundmused/Lehed/eneta-kommuuniohtu-asp-net-mvc-3-areneb-ja-uueneb.aspx">ASP.NET MVC 3 seminaril</a> tutvustasin <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=cb42f741-8fb1-4f43-a5fa-812096f8d1e8">ASP.NET MVC 3 Preview 1</a> põhjal uuendusi, mis on tulemas. Neile, kes kohale ei saanud tulla, annan kiire ülevaate räägitust ja lisan juurde ühe seminaril tehtud näite ka. Et osalejatelgi huvitavam oleks, siis kande lõpust leiab ühe peatüki eksklusiivset sisu kah. Lähipäevil panen Eneta portaali üles ka ettekande slaidid ja koodinäiteid, nii et hoidke silma peal, kellel huvi on. </p>
<p>Peamised uuendused on järgmised:</p>
<li>DI konteinerite ja <em>Service Locator</em> tugi (see on küllaltki vähe dokumenteeritud teema, kuid selle leevenduseks on installeriga kaasas näiterakendus antud teemadel),</li>
<li>Razor <em>view engine</em>,</li>
<li>Globaalsed action filtrid,</li>
<li><em>Action result</em>-id<em> </em>erinevate HTTP staatuse koodide määramiseks,</li>
<li>andmevahetus kontrolleriga üle ViewModel objekti, </li>
<li>JSON pöördumiste tugi kontrollerite meetodites,</li>
<li>.NET 4.0 valideerimise raamistiku tugi,</li>
<li>Uued ümbersuunamismeetodid.</li>
<p>Et tegemist on ASP.NET MVC versiooniga, mis pole RC, siis on selge, et lõplik featuuride koosseis ei ole 100% paigas ja kindlasti lisandub juurde veel palju huvitavat.</p>
<p>Vedamaks välja tasemele 300 vastavat kannet, annan edasi ühe näite ka, mis seminaril tehtud sai. Teemaks siis uued <em>action result</em>-id ja serveri staatuse koodidega mängimine.</p>
<h3>HttpNotFoundResult ja HttpStatusCodeResult</h3>
<p>Need kaks uut <em>action result</em>-i võimaldavad tekitada olukorra, kus kontrolleri meetodi kutsumine lõpeb HTTP staatuse koodi muutmisega. Seni on tulnud seda teha pisut häkkide laadselt. Näiteks:</p>
<div class="syntax_hilite">
<div id="csharp-6">
<div class="csharp"><span style="color: #0600FF;">public</span> ActionResult Product<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> id<span style="color: #000000;">&#41;</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; var model = _productModel;<br />
&nbsp; &nbsp; var product = model.<span style="color: #000000;">GetProductById</span><span style="color: #000000;">&#40;</span>id<span style="color: #000000;">&#41;</span>;</p>
<p>&nbsp; &nbsp; <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>product == <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Response.<span style="color: #000000;">StatusCode</span> = <span style="color: #FF0000;">404</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF;">return</span> View<span style="color: #000000;">&#40;</span><span style="color: #808080;">"Error404"</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span></p>
<p>&nbsp; &nbsp; <span style="color: #0600FF;">return</span> View<span style="color: #000000;">&#40;</span>product<span style="color: #000000;">&#41;</span>;<br />
<span style="color: #000000;">&#125;</span></div>
</div>
</div>
<p></p>
<p>Nüüd saame näiteks puuduva lehe korral kasutada sellist lähenemist:</p>
<div class="syntax_hilite">
<div id="csharp-7">
<div class="csharp"><span style="color: #0600FF;">public</span> ActionResult Product<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> id<span style="color: #000000;">&#41;</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; var model = _productModel;<br />
&nbsp; &nbsp; var product = model.<span style="color: #000000;">GetProductById</span><span style="color: #000000;">&#40;</span>id<span style="color: #000000;">&#41;</span>;</p>
<p>&nbsp; &nbsp; <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>product == <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF;">return</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> HttpNotFoundResult<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//return new HttpStatusCodeResult(404);</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//return HttpNotFound();</span></p>
<p>&nbsp; &nbsp; <span style="color: #0600FF;">return</span> View<span style="color: #000000;">&#40;</span>product<span style="color: #000000;">&#41;</span>;<br />
<span style="color: #000000;">&#125;</span></div>
</div>
</div>
<p></p>
<p>Välja kommenteeritud read annavad sama tulemuse, mis return järel välja kommenteerimata rida. Pole ju erilist vahet kahe näidatud meetodi vahel, võiks öelda. Aga on. Vähemasti nende jaoks, kes teste viitsivad kirjutada ja kelle rakendused seega kvaliteedilt konkurentidele pika puuga ära panevad.</p>
<h3>HttpNotFoundResult kasutamine ühiktestides</h3>
<p>Kontrolleri meetodite testimise teeb teinekord tülikaks just see, et koos kontrolleriga tuleb mängu veebiraamistiku alumiste kihtide klasse. Selleks, et eeltoodud meetodi testida, tuli varem testides ajada kontrolleri instantsile külge ka kõik HTTP-konteksti objektid. Mulle see lähenemine väga ei meeldi, sest parem kui testid on õhukesed ja parem kui neid saab kirjutada lihtsa vaevaga – palju saab neid kokku nii või teisiti.</p>
<p>Järgnevalt üks kiire näide testist, mis kontrollib eeltoodud meetodit olukorras, kus toodet ei leitud. Tegemist on ebaviisaka all-in-one meetodiga, mis päris koodis esineda ei tohiks (kuigi Eestis ma olen näinud vist kõik näited lives ära sellest, kuidas ei tohi).</p>
<div class="syntax_hilite">
<div id="csharp-8">
<div class="csharp"><span style="color: #000000;">&#91;</span>TestMethod<span style="color: #000000;">&#93;</span><br />
<span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> ProductPageShouldReturn404IfProductNotFound<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; var productId = <span style="color: #FF0000;">1</span>;<br />
&nbsp; &nbsp; var product = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Product<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Id = <span style="color: #FF0000;">2</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Name = <span style="color: #808080;">"Heineken"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Producer = <span style="color: #808080;">"Heineken International"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Amount = <span style="color: #FF0000;">0</span>.33M,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Unit = <span style="color: #808080;">"l"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Price = <span style="color: #FF0000;">1</span>.7M<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000;">&#125;</span>;<br />
&nbsp; &nbsp; var productList = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> List&lt;product&gt; <span style="color: #000000;">&#123;</span> product <span style="color: #000000;">&#125;</span>;</p>
<p>&nbsp; &nbsp; product = <span style="color: #0600FF;">null</span>;</p>
<p>&nbsp; &nbsp; var model = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Mock&lt;productsmodel&gt;<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; model.<span style="color: #000000;">Setup</span><span style="color: #000000;">&#40;</span>c =&gt; c.<span style="color: #000000;">GetProducts</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.<span style="color: #000000;">Returns</span><span style="color: #000000;">&#40;</span>productList<span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; model.<span style="color: #000000;">Setup</span><span style="color: #000000;">&#40;</span>c =&gt; c.<span style="color: #000000;">GetProductById</span><span style="color: #000000;">&#40;</span>productId<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.<span style="color: #000000;">Returns</span><span style="color: #000000;">&#40;</span>product<span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.<span style="color: #000000;">Verifiable</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</p>
<p>&nbsp; &nbsp; var controller = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> HomeController<span style="color: #000000;">&#40;</span>model.<span style="color: #FF0000;">Object</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; var result = controller.<span style="color: #000000;">Product</span><span style="color: #000000;">&#40;</span>productId<span style="color: #000000;">&#41;</span>;</p>
<p>&nbsp; &nbsp; model.<span style="color: #000000;">Verify</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; Assert.<span style="color: #000000;">IsNotNull</span><span style="color: #000000;">&#40;</span>result<span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; Assert.<span style="color: #000000;">IsInstanceOfType</span><span style="color: #000000;">&#40;</span>result, <a href="http://www.google.com/search?q=typeof+msdn.microsoft.com"><span style="color: #008000;">typeof</span></a><span style="color: #000000;">&#40;</span>HttpNotFoundResult<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;<br />
<span style="color: #000000;">&#125;</span></div>
</div>
</div>
<p></p>
<p>Suurem osa testi koodist tegeleb sellega, et asendada mudeli meetodite kutsed ära meile sobivatega. Kontrolleri enda jooksutamine ja tulemuste kontrollimine on vaid paar tühist rida. Ei mingit jamamist HTTP-konteksti objektidega.</p>
<h3>HttpStatusCodeResult laiendamine</h3>
<p>HttpNotFoundResult ja HttpStatusCodeResult on küll head, kuid samas pisut puudulikud – hetkel ei saa me koos nendega anda kaasa sisu. Näiteks vea 404 korral oleks tore, kui saaksime anda edasi ka kasutajale arusaadava väljundi.</p>
<p>Mina lahendasin selle probleemi selliselt, et tegin uue klassi, mille baasiks on ViewResult. Klass ise on selline:</p>
<div class="syntax_hilite">
<div id="csharp-9">
<div class="csharp"><span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> HttpStatusCodeWithBodyResult: ViewResult<br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0600FF;">private</span> <span style="color: #FF0000;">int</span> _statusCode;<br />
&nbsp; &nbsp; <span style="color: #0600FF;">private</span> <span style="color: #FF0000;">string</span> _description;<br />
&nbsp;<br />
&nbsp; &nbsp; <span style="color: #0600FF;">public</span> HttpStatusCodeWithBodyResult<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> statusCode, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #FF0000;">string</span> description = <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; : <span style="color: #0600FF;">this</span><span style="color: #000000;">&#40;</span><span style="color: #0600FF;">null</span>, statusCode, description<span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #0600FF;">public</span> HttpStatusCodeWithBodyResult<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">string</span> viewName, <span style="color: #FF0000;">int</span> statusCode, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #FF0000;">string</span> description = <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; _statusCode = statusCode;<br />
&nbsp; &nbsp; &nbsp; &nbsp; _description = description;<br />
&nbsp; &nbsp; &nbsp; &nbsp; ViewName = viewName;<br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
&nbsp;<br />
&nbsp; &nbsp; <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">override</span> <span style="color: #0600FF;">void</span> ExecuteResult<span style="color: #000000;">&#40;</span>ControllerContext context<span style="color: #000000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; var httpContext = context.<span style="color: #000000;">HttpContext</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; var response = httpContext.<span style="color: #000000;">Response</span>;<br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; response.<span style="color: #000000;">StatusCode</span> = _statusCode;<br />
&nbsp; &nbsp; &nbsp; &nbsp; response.<span style="color: #000000;">StatusDescription</span> = _description;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF;">base</span>.<span style="color: #000000;">ExecuteResult</span><span style="color: #000000;">&#40;</span>context<span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #000000;">&#125;</span><br />
<span style="color: #000000;">&#125;</span></div>
</div>
</div>
<p></p>
<p>Ja koodis võiks seda kasutada selliselt:</p>
<div class="syntax_hilite">
<div id="csharp-10">
<div class="csharp"><span style="color: #0600FF;">public</span> ActionResult NotFound<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><br />
<span style="color: #000000;">&#123;</span><br />
&nbsp; &nbsp; var msg = <span style="color: #808080;">"I cannot find this resource!"</span>;<br />
&nbsp;<br />
&nbsp; &nbsp; <span style="color: #008080; font-style: italic;">// vajalik on vaade nimega NotFound.aspx või NotFound.cshtml</span><br />
&nbsp; &nbsp; var result = <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> HttpStatusCodeResultWithBody<span style="color: #000000;">&#40;</span><span style="color: #808080;">"NotFound"</span>, <span style="color: #FF0000;">404</span>, msg<span style="color: #000000;">&#41;</span>;<br />
&nbsp; &nbsp; <span style="color: #0600FF;">return</span> result;<br />
<span style="color: #000000;">&#125;</span></div>
</div>
</div>
<p></p>
<p>View nimega ProductError404.aspx on see, mis sisaldab kasutajale arusaadavat teksti tekkinud vea kohta.</p>
<h3>Kokkuvõtteks</h3>
<p>Kuigi aega oli seminaril vähe, sai siiski kõik oluline edasi antud. Tänastel ASP.NET MVC fännidel soovitan kindlasti kolmandama versiooniga hakata tutvust tegema, sest veel on aega selleks, et rääkida uue versiooni arengus kaasa. Vähemasti on minul selleks võimalus olemas ja kellel on uue versiooni osas soove, siis andku teada – head ideed pannakse ikka toime. Mis ettekanne järgmiseks minu poolt tuleb, ei ole veel selge. Käimas on jube kiire ja inimvaimu tõsiselt tappev periood, mis loodetavasti peatselt läbi saab. Arvatavasti ma millestki ahjusoojast jälle räägin, sest uut ja huvitavat on viimasel ajal juhtunud palju.</p>
</productsmodel></product>
<p><br /><strong>Loe lisaks</strong><ul><li><a href="http://www.dt.ee/blog/kood/net/2009/03/aspnet-mvc-10/" rel="bookmark" title="ASP.NET MVC 1.0 on valmis">ASP.NET MVC 1.0 on valmis</a></li><li><a href="http://www.dt.ee/blog/kood/net/2010/04/algab-aspnet-mvc-nadal-dt-blogis/" rel="bookmark" title="Algab ASP.NET MVC nädal DT blogis">Algab ASP.NET MVC nädal DT blogis</a></li><li><a href="http://www.dt.ee/blog/kood/net/2007/11/teched-2007-aspnet-mvc-raamistik/" rel="bookmark" title="TechEd 2007: ASP.NET MVC raamistik">TechEd 2007: ASP.NET MVC raamistik</a></li><li><a href="http://www.dt.ee/blog/kood/net/2010/07/webmatrix-razor-aspnet-web-pages-ja-aspnet-mvc/" rel="bookmark" title="WebMatrix, Razor, ASP.NET Web Pages ja ASP.NET MVC - mis on mis?">WebMatrix, Razor, ASP.NET Web Pages ja ASP.NET MVC - mis on mis?</a></li><li><a href="http://www.dt.ee/blog/kood/net/2007/11/kas-aspnet-mvc-lohestab-aspnet-kommuuni/" rel="bookmark" title="Kas ASP.NET MVC lõhestab ASP.NET kommuuni?">Kas ASP.NET MVC lõhestab ASP.NET kommuuni?</a></li></ul></p><br /><div class="feedflare">
<a href="http://feeds.dt.ee/~ff/dtblogi?a=XLuNbtNz4_Y:yGo8pi6jO-4:CrAVEhbAS04"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=CrAVEhbAS04" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=XLuNbtNz4_Y:yGo8pi6jO-4:lvXyGxTQzqQ"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=lvXyGxTQzqQ" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=XLuNbtNz4_Y:yGo8pi6jO-4:jyDof3Xhdmw"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=jyDof3Xhdmw" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=XLuNbtNz4_Y:yGo8pi6jO-4:1mQ1z0kQkz4"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=1mQ1z0kQkz4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dtblogi/~4/XLuNbtNz4_Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dt.ee/blog/kood/net/2010/08/aspnet-mvc-3-seminari-kokkuvote/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.dt.ee/blog/kood/net/2010/08/aspnet-mvc-3-seminari-kokkuvote/</feedburner:origLink></item>
		<item>
		<title>Kutse seminarile: ASP.NET MVC 3 areneb ja uueneb</title>
		<link>http://feeds.dt.ee/~r/dtblogi/~3/1E_K7ZmlGDk/</link>
		<comments>http://www.dt.ee/blog/kood/net/2010/08/kutse-seminarile-aspnet-mvc-3-areneb-ja-uueneb/#comments</comments>
		<pubDate>Mon, 16 Aug 2010 21:49:38 +0000</pubDate>
		<dc:creator>Gunnar</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.dt.ee/blog/?p=3609</guid>
		<description><![CDATA[Töine periood surub täiel hool peale ja aeg on otsad lahti teha ka Eneta ettekannetega. Et kuulajaid seni leidub, siis olen teie ees jälle ettekandega 25.08 kell 18:00. Sündmuspaigaks nagu ikka vana hea ITK ja ettekanne kõikidele huvilistele tasuta. Teemaks on seekord ASP.NET MVC 3. 
ASP.NET MVC 3 on nii uus, et sellest pole väljas [...]]]></description>
			<content:encoded><![CDATA[<p>Töine periood surub täiel hool peale ja aeg on otsad lahti teha ka Eneta ettekannetega. Et kuulajaid seni leidub, siis olen teie ees jälle ettekandega <strong>25.08</strong> kell <strong>18:00</strong>. Sündmuspaigaks nagu ikka vana hea <strong>ITK</strong> ja ettekanne kõikidele huvilistele <strong>tasuta</strong>. Teemaks on seekord ASP.NET MVC 3. </p>
<p>ASP.NET MVC 3 on nii uus, et sellest pole väljas veel betatki. Küll on aga laiale avalikkusele mängida antud <a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=cb42f741-8fb1-4f43-a5fa-812096f8d1e8">esimene Preview</a>, mis sisaldab mitmeid uuendusi, mida kõikide eelduste kohaselt kolmandama versiooni koosseisust välja ei jäeta. Kindlasti võivad need asjad tulevikus muutuda, kuid ära nad vaevalt kaovad. Ettekandes tutvustan uusi asju ja nagu ikka – koodinäidet teen ka. Peale ettekannet vastan küsimustele ja annan nõu, niisama mulisen kah. </p>
<p>Mõned teemad, millest juttu tuleb, on järgmised:</p>
<ul>
<li>Razor<em> view engine</em>,</li>
<li>uued <em>action result</em>’id,</li>
<li>näited <em>action results</em>’ide kasutamise kohta praktikas,</li>
<li>täiendatud andmevahetus kontrolleri ja vaate vahel,</li>
<li>JSON-formaadis <em>action argument</em>’id.</li>
</ul>
<p>Lisaks sellele on veel teemasid, mis on juba praegu teada ja kindlasti lisandub ka midagi juurde. Üks huvitav üllatusnäide, mis veebimaailma lähitulevikku osaliselt puudutab, on mul ka ettevalmistatud. Aga seda näete kõik alles kohapeal, seniks las see olla minu väike saladus.</p>
<p>Kõik, kes osaleda soovivad – ükskõik kas kohapeal või interneti vahendusel – saavad ennast kirja panna Eneta portaali lehel <a href="http://www.eneta.ee/sundmused/Lehed/eneta-kommuuniohtu-asp-net-mvc-3-areneb-ja-uueneb.aspx">Eneta kommuuniõhtu: ASP.NET MVC 3 areneb ja uueneb</a>. Aega on kuni <strong>23.08</strong>. </p>
<p>Lõpetan jutu nagu ikka – tule ise ja võta sõber ka kaasa!</p>
<p><br /><strong>Loe lisaks</strong><ul><li><a href="http://www.dt.ee/blog/kood/net/2009/03/aspnet-mvc-10/" rel="bookmark" title="ASP.NET MVC 1.0 on valmis">ASP.NET MVC 1.0 on valmis</a></li><li><a href="http://www.dt.ee/blog/microsoft/2010/04/kutse-seminarile-php-microsofti-maailmas/" rel="bookmark" title="Kutse seminarile: PHP Microsofti maailmas">Kutse seminarile: PHP Microsofti maailmas</a></li><li><a href="http://www.dt.ee/blog/microsoft/2010/02/kutse-microsofti-arianaluusi-seminarile/" rel="bookmark" title="Kutse Microsofti ärianalüüsi seminarile">Kutse Microsofti ärianalüüsi seminarile</a></li><li><a href="http://www.dt.ee/blog/kood/net/2010/04/algab-aspnet-mvc-nadal-dt-blogis/" rel="bookmark" title="Algab ASP.NET MVC nädal DT blogis">Algab ASP.NET MVC nädal DT blogis</a></li><li><a href="http://www.dt.ee/blog/kood/net/2007/11/teched-2007-aspnet-mvc-raamistik/" rel="bookmark" title="TechEd 2007: ASP.NET MVC raamistik">TechEd 2007: ASP.NET MVC raamistik</a></li></ul></p><br /><div class="feedflare">
<a href="http://feeds.dt.ee/~ff/dtblogi?a=1E_K7ZmlGDk:_G0FvbaDcFY:CrAVEhbAS04"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=CrAVEhbAS04" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=1E_K7ZmlGDk:_G0FvbaDcFY:lvXyGxTQzqQ"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=lvXyGxTQzqQ" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=1E_K7ZmlGDk:_G0FvbaDcFY:jyDof3Xhdmw"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=jyDof3Xhdmw" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=1E_K7ZmlGDk:_G0FvbaDcFY:1mQ1z0kQkz4"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=1mQ1z0kQkz4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dtblogi/~4/1E_K7ZmlGDk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dt.ee/blog/kood/net/2010/08/kutse-seminarile-aspnet-mvc-3-areneb-ja-uueneb/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.dt.ee/blog/kood/net/2010/08/kutse-seminarile-aspnet-mvc-3-areneb-ja-uueneb/</feedburner:origLink></item>
		<item>
		<title>Miks ei saa Windows Server 2008 peal SharePointi dokumendi teeke Windows Exploreris avada?</title>
		<link>http://feeds.dt.ee/~r/dtblogi/~3/N502AaAnw3c/</link>
		<comments>http://www.dt.ee/blog/microsoft/sharepoint/2010/08/windows-server-2008-sharepoint-explorer/#comments</comments>
		<pubDate>Sat, 14 Aug 2010 16:41:56 +0000</pubDate>
		<dc:creator>Gunnar</dc:creator>
		
		<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://www.dt.ee/blog/?p=3606</guid>
		<description><![CDATA[Kui arenduseks kasutatava Windows Server 2008 peal ei saa SharePointi dokumendi teeke Windows Exploreris avada, siis tuleb üks pisike restardiga lõppev lisaliigutus teha. Minu lühijuhend on selline. 
1. Lase käima Server Manager.   2. Vali Features.    3. Vali Add Feature.    4. Märgi ära Desktop Experience nimeline featuur ja [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.dt.ee/blog/category/microsoft/sharepoint/"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 5px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="SharePoint" border="0" alt="SharePoint" align="right" src="http://www.dt.ee/blog/wp-content/uploads/2010/08/sharepoint.gif" width="50" height="66" /></a>Kui arenduseks kasutatava Windows Server 2008 peal ei saa SharePointi dokumendi teeke Windows Exploreris avada, siis tuleb üks pisike restardiga lõppev lisaliigutus teha. Minu lühijuhend on selline. </p>
<p>1. Lase käima Server Manager.   <br />2. Vali Features.    <br />3. Vali Add Feature.    <br />4. Märgi ära Desktop Experience nimeline featuur ja vajuta Next.</p>
<p align="center"><a href="http://www.dt.ee/blog/wp-content/uploads/2010/08/selectfeaturesdesktopexperience.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="Select Feature: Desktop Experience" border="0" alt="Select Feature: Desktop Experience" src="http://www.dt.ee/blog/wp-content/uploads/2010/08/selectfeaturesdesktopexperience-thumb.png" width="540" height="398" /></a>    <br /><em>Kliki pildil hiirega, et seda originaalsuuruses vaadata.</em></p>
<p>5. Järgmises aknas vajuta nuppu Install.   <br />6. Kui install on valmis, tee masinale restart.</p>
<p>Peale restarti on võimalik dokumendi teeke brauseri kaudu Windows Exploreris avada. </p>
<p><br /><strong>Loe lisaks</strong><ul><li><a href="http://www.dt.ee/blog/microsoft/sharepoint/2008/09/filter-ftp-saitide-indekseerimiseks/" rel="bookmark" title="Filter FTP saitide indekseerimiseks">Filter FTP saitide indekseerimiseks</a></li><li><a href="http://www.dt.ee/blog/kood/net/2008/06/uued-versioonid-sql-server-2008-silverlight-ja-vsewss-12/" rel="bookmark" title="Uued versioonid: SQL Server 2008, Silverlight ja VSeWSS 1.2">Uued versioonid: SQL Server 2008, Silverlight ja VSeWSS 1.2</a></li><li><a href="http://www.dt.ee/blog/microsoft/2009/03/internet-explorer-8-ametlikult-vljas/" rel="bookmark" title="Internet Explorer 8 ametlikult v&auml;ljas">Internet Explorer 8 ametlikult v&auml;ljas</a></li><li><a href="http://www.dt.ee/blog/microsoft/2008/04/kutse-microsoftilt/" rel="bookmark" title="Kutse Microsoftilt">Kutse Microsoftilt</a></li><li><a href="http://www.dt.ee/blog/microsoft/2008/05/library-of-congress-kasutab-sharepoint-silverlight/" rel="bookmark" title="Library of Congress kasutab SharePoint&#8217;i ja Silverlight&#8217;i">Library of Congress kasutab SharePoint&#8217;i ja Silverlight&#8217;i</a></li></ul></p><br /><div class="feedflare">
<a href="http://feeds.dt.ee/~ff/dtblogi?a=N502AaAnw3c:nivbquL5eqI:CrAVEhbAS04"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=CrAVEhbAS04" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=N502AaAnw3c:nivbquL5eqI:lvXyGxTQzqQ"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=lvXyGxTQzqQ" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=N502AaAnw3c:nivbquL5eqI:jyDof3Xhdmw"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=jyDof3Xhdmw" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=N502AaAnw3c:nivbquL5eqI:1mQ1z0kQkz4"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=1mQ1z0kQkz4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dtblogi/~4/N502AaAnw3c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dt.ee/blog/microsoft/sharepoint/2010/08/windows-server-2008-sharepoint-explorer/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.dt.ee/blog/microsoft/sharepoint/2010/08/windows-server-2008-sharepoint-explorer/</feedburner:origLink></item>
		<item>
		<title>Visual Studio Lightswitch - ärieksperdid astuvad sammu lähemale arendusele</title>
		<link>http://feeds.dt.ee/~r/dtblogi/~3/sCTEtcIM1d4/</link>
		<comments>http://www.dt.ee/blog/tarkvara/2010/08/visual-studio-lightswitch/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 22:33:50 +0000</pubDate>
		<dc:creator>Gunnar</dc:creator>
		
		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[Tarkvara]]></category>

		<guid isPermaLink="false">http://www.dt.ee/blog/?p=3601</guid>
		<description><![CDATA[Ajal, mil ma teiste metallinimestega Saksamaal Euroopa suurimal festivalil prassisin, tegi Microsoft jälle ühe üllatuse. Visual Studio 2010 saab omale uue lisandi, millel nimeks Lightswitch. Peale vaadates leiame palju meile tuttavat Microsoft Office rakenduste maailmast ja üks mõtteid, mis mul kord suitsupausi aal peast läbi käis, oli midagi sellist, nagu Lightswitch pakub. 
Lightswitchi võtab päris [...]]]></description>
			<content:encoded><![CDATA[<p>Ajal, mil ma teiste metallinimestega Saksamaal Euroopa suurimal festivalil prassisin, tegi Microsoft jälle ühe üllatuse. Visual Studio 2010 saab omale uue lisandi, millel nimeks <a href="http://www.microsoft.com/visualstudio/en-us/lightswitch">Lightswitch</a>. Peale vaadates leiame palju meile tuttavat Microsoft Office rakenduste maailmast ja üks mõtteid, mis mul kord suitsupausi aal peast läbi käis, oli midagi sellist, nagu Lightswitch pakub. </p>
<p>Lightswitchi võtab päris hästi kokku ASP.NET MVP <a href="http://www.kencox.ca/">Ken Cox</a> oma blogi kandes <a href="http://weblogs.asp.net/kencox/archive/2010/08/03/visual-studio-lightswitch-welcome-advanced-amateurs.aspx">Visual Studio Lightswitch - Welcome Advanced Amateurs</a>: </p>
<blockquote><p><em>“There are a lot of people in business who are wizards with tools like Excel, even though their primary job isn’t software development. Sometimes their apps become essential to the business process.</em></p>
<p><em>Lightswitch, announced at VSLive!, will appeal to advanced amateurs. The nice thing is that professional developers can take the code and scale it out without starting from scratch.”</em></p>
</blockquote>
<p>Ehk siis – tegemist on vahendiga, mille abil saab lihtsa vaevaga luua andmetega seotud vorme nagu näiteks Microsoft Accessis. Kui rakendused muutuvad keerukamaks, siis saavad juba professionaalsed arendajad need üle võtta ja teha asjad selliseks nagu need olema peavad. Vähemasti selline on eesmärk. Vahele üks pilt ka enne kui minu pidustuste järgsete mõtete juurde asume.</p>
<p align="center"><a href="http://www.dt.ee/blog/wp-content/uploads/2010/08/lightswitchlargeintegratedwithmicrosoftoffice.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="Visual Studio Lightswitch" border="0" alt="Visual Studio Lightswitch" src="http://www.dt.ee/blog/wp-content/uploads/2010/08/lightswitchlargeintegratedwithmicrosoftoffice-thumb.jpg" width="540" height="410" /></a></p>
<p>Lightswitchi point on lihtne – selle abil saab luua mallide järgi päris palju igasuguseid vorme valmis paari liigutusega ja siduda need andmetega. Rakenduste loomisega saab hakkama tänane korralik Office’i gängster ja kui rakendus on kasvanud keerukamaks või kui see läheb ettevõttes laia kasutusse, siis astuvad mängu ka need liblikate keelt rääkivad progejad, kes teevad nii, et kõik toimima jääks.</p>
<p>Huvitavaks kohaks minu jaoks on hetkel see, et kas ja kuidas saavad sellise vahendiga koos töötada eriala ekspert ja professionaalne arendaja ning kui valutuks või valuliseks antud vahendi abil koostöö kujuneb eeldusel, et ekspert tunneb mingil määral Microsoft Office rakenduste loomist.</p>
<p>Lightswitch rakenduste jooksutamiseks on kaks varianti – töölaud ja veeb. See kõik pannakse paika Lightswitch rakenduse seadete abil. Klõpsa alloleval ekraanpaugul hiirega ja vaata lähemalt.</p>
<p align="center"><a href="http://www.dt.ee/blog/wp-content/uploads/2010/08/lightswitchapptype.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" class="wlDisabledImage" title="Visual Studio Lightswitch: Rakenduse tüübid" border="0" alt="Visual Studio Lightswitch: Rakenduse tüübid" src="http://www.dt.ee/blog/wp-content/uploads/2010/08/lightswitchapptype-thumb.png" width="542" height="202" /></a></p>
<p>Kes rohkem pilte ja juttu soovib, siis Jason Zanders blogist leiab huvitava kande pealkirjaga <a href="http://blogs.msdn.com/b/jasonz/archive/2010/08/03/introducing-microsoft-visual-studio-lightswitch.aspx">Introducing Microsoft® Visual Studio® LightSwitch™</a>. Sama kande kommentaaridest saame teada, et Lightswitchi esimene beta peaks kättesaadavaks muutuma meile 23.08. </p>
<p><br /><strong>Loe lisaks</strong><ul><li><a href="http://www.dt.ee/blog/kood/net/2007/11/visual-studio-2008-sdk-shell/" rel="bookmark" title="Visual Studio 2008 SDK ja Shell on ka väljas">Visual Studio 2008 SDK ja Shell on ka väljas</a></li><li><a href="http://www.dt.ee/blog/kood/net/2006/07/vs-intellisense-ja-nhibernate/" rel="bookmark" title="VS Intellisense ja NHibernate">VS Intellisense ja NHibernate</a></li><li><a href="http://www.dt.ee/blog/microsoft/2006/04/ms-visual-studio-express-nuudsest-freeware/" rel="bookmark" title="MS Visual Studio Express nüüdsest freeware!">MS Visual Studio Express nüüdsest freeware!</a></li><li><a href="http://www.dt.ee/blog/tarkvara/2009/12/visual-studio-2010-ajakava-muutus/" rel="bookmark" title="Visual Studio 2010 ajakava muutus">Visual Studio 2010 ajakava muutus</a></li><li><a href="http://www.dt.ee/blog/kood/net/2008/03/skype-visual-studios/" rel="bookmark" title="Skype Visual Studios">Skype Visual Studios</a></li></ul></p><br /><div class="feedflare">
<a href="http://feeds.dt.ee/~ff/dtblogi?a=sCTEtcIM1d4:hqvJclqlhH8:CrAVEhbAS04"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=CrAVEhbAS04" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=sCTEtcIM1d4:hqvJclqlhH8:lvXyGxTQzqQ"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=lvXyGxTQzqQ" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=sCTEtcIM1d4:hqvJclqlhH8:jyDof3Xhdmw"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=jyDof3Xhdmw" border="0"></img></a> <a href="http://feeds.dt.ee/~ff/dtblogi?a=sCTEtcIM1d4:hqvJclqlhH8:1mQ1z0kQkz4"><img src="http://feeds.feedburner.com/~ff/dtblogi?d=1mQ1z0kQkz4" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dtblogi/~4/sCTEtcIM1d4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.dt.ee/blog/tarkvara/2010/08/visual-studio-lightswitch/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.dt.ee/blog/tarkvara/2010/08/visual-studio-lightswitch/</feedburner:origLink></item>
	</channel>
</rss>
