<?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.feedburner.com/~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:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Saiku Kaizen</title>
	
	<link>http://www.saiku.ee/kaizen</link>
	<description>Kaizen on Saiku tarkvaraarendusealane blogi, kus kirjutame erinevatest lähenemistest meisterlikule tarkvaraarendusele.</description>
	<lastBuildDate>Tue, 22 Jun 2010 18:26:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/saikufeed" /><feedburner:info uri="saikufeed" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>saikufeed</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsaikufeed" 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.feedburner.com%2Fsaikufeed" 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.feedburner.com%2Fsaikufeed" 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.feedburner.com/saikufeed" 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.feedburner.com%2Fsaikufeed" 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.feedburner.com%2Fsaikufeed" 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.feedburner.com%2Fsaikufeed" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsaikufeed" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2Fsaikufeed" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2Fsaikufeed" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2Fsaikufeed" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fsaikufeed" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fsaikufeed" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.yourminis.com/subscribe.aspx?u=http%3A%2F%2Ffeeds.feedburner.com%2Fsaikufeed" src="http://www.yourminis.com/images/addtoyourminisbadge.gif">Subscribe with Yourminis.com</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fsaikufeed" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsaikufeed" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://hub.netomat.net/account/account.autoSubscribe.jspa?urls=http%3A%2F%2Ffeeds.feedburner.com%2Fsaikufeed" src="http://www.netomat.net/blogger/images/icon_netomat_feedbutton.gif">Subscribe with netomat Hub</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsaikufeed" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fsaikufeed" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsaikufeed" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2Fsaikufeed" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
		<title>Kasvame vaikselt, et rohkem jõuda</title>
		<link>http://feedproxy.google.com/~r/saikufeed/~3/w5TwDnnWgmQ/</link>
		<comments>http://www.saiku.ee/kaizen/2010/06/kasvame-vaikselt-et-rohkem-jouda/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 16:41:47 +0000</pubDate>
		<dc:creator>Priidik Vaikla</dc:creator>
				<category><![CDATA[Varia]]></category>
		<category><![CDATA[koolitused]]></category>

		<guid isPermaLink="false">http://www.saiku.ee/kaizen/?p=1210</guid>
		<description><![CDATA[Peame vabandama, tööd on nii palju ja seetõttu pole siia blogisse artikleid jõudnud juurde kirjutada. Kavatseme suve jooksul välja mõelda kuidas blogi reformida nii, et see rohkem pakuks. Tahame tuua siia lisaks tarkvara arendajatele suunatud artiklite ka analüütikutele, projektijuhtidele ja tellijatele põnevat lugemist. Nagu Saiku kodulehelt näha, siis kuu alguses lisandus meie väikese meeskonnaga Marti. [...]


Loe veel sarnasel teemal:<ol><li><a href='http://www.saiku.ee/kaizen/2009/01/i-m-wrights-hard-code/' rel='bookmark' title='Permanent Link: I. M. Wright&#8217;s &#8220;Hard Code&#8221;'>I. M. Wright&#8217;s &#8220;Hard Code&#8221;</a> <small>Mõni aeg tagasi andis Andres Sirel mulle Eric Brechneri raamatu...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2009/08/geekdinner-september-tallinnas/' rel='bookmark' title='Permanent Link: GeekDinner September'>GeekDinner September</a> <small>Eelmisest GeekDinnerist on terve suvi möödas ning võiks jälle kokku...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2008/11/mida-tdd-tahendab/' rel='bookmark' title='Permanent Link: Mida TDD tähendab?'>Mida TDD tähendab?</a> <small>TechEd 2008 sai külastatud ka Roy Osherove&#8216;i ettekannet teemal &#8220;Understanding...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Peame vabandama, tööd on nii palju ja seetõttu pole siia blogisse artikleid jõudnud juurde kirjutada. Kavatseme suve jooksul välja mõelda kuidas blogi reformida nii, et see rohkem pakuks. Tahame tuua siia lisaks tarkvara arendajatele suunatud artiklite ka analüütikutele, projektijuhtidele ja tellijatele põnevat lugemist.</p>
<p>Nagu <a href="http://www.saiku.ee" target="_blank">Saiku kodulehelt</a> näha, siis kuu alguses lisandus meie väikese meeskonnaga Marti. Marti on andekas arendaja ja tema abiga suudame palju suuremaid projekte ette võtta. Sügiseks ongi plaanis juba mõnda aega arendatud projektid valmis saada. Anname nendest kindlasti blogi vahendusel teada.<span id="more-1210"></span></p>
<p>Kõigele lisaks osalesin 14.-15. juunil Euroopa Sotsiaalfondi abiga Peep Vainu koolitusel &#8220;Võiduka meeskonna juhtimine&#8221; selleks, et osata luua motiveerivat tulemustele suunatud meeskonda. Kuigi koolitus on praeguseks läbi, suurem töö ja meeskonna arendamine alles algab. Projekt sai tuge EASi Teadmiste ja oskuste arendamise toetamise meetmest. Projekti abikõlblikkuse perioodi alguskuupäev oli 21.05.2010. a ja lõppkuupäev oli 13.05.2011. a.</p>
<p><a href="http://www.saiku.ee/kaizen/wp-content/uploads/2010/06/EL_Sotsiaalfond_horisontaal.jpg"><img class="aligncenter size-medium wp-image-1213" title="EL_Sotsiaalfond_horisontaal" src="http://www.saiku.ee/kaizen/wp-content/uploads/2010/06/EL_Sotsiaalfond_horisontaal-300x167.jpg" alt="" width="300" height="167" /></a></p>


<p>Loe veel sarnasel teemal:<ol><li><a href='http://www.saiku.ee/kaizen/2009/01/i-m-wrights-hard-code/' rel='bookmark' title='Permanent Link: I. M. Wright&#8217;s &#8220;Hard Code&#8221;'>I. M. Wright&#8217;s &#8220;Hard Code&#8221;</a> <small>Mõni aeg tagasi andis Andres Sirel mulle Eric Brechneri raamatu...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2009/08/geekdinner-september-tallinnas/' rel='bookmark' title='Permanent Link: GeekDinner September'>GeekDinner September</a> <small>Eelmisest GeekDinnerist on terve suvi möödas ning võiks jälle kokku...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2008/11/mida-tdd-tahendab/' rel='bookmark' title='Permanent Link: Mida TDD tähendab?'>Mida TDD tähendab?</a> <small>TechEd 2008 sai külastatud ka Roy Osherove&#8216;i ettekannet teemal &#8220;Understanding...</small></li>
</ol></p><img src="http://feeds.feedburner.com/~r/saikufeed/~4/w5TwDnnWgmQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.saiku.ee/kaizen/2010/06/kasvame-vaikselt-et-rohkem-jouda/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.saiku.ee/kaizen/2010/06/kasvame-vaikselt-et-rohkem-jouda/</feedburner:origLink></item>
		<item>
		<title>Iluvõtted testidele</title>
		<link>http://feedproxy.google.com/~r/saikufeed/~3/387OEe1keT0/</link>
		<comments>http://www.saiku.ee/kaizen/2010/05/iluvotted-testidele/#comments</comments>
		<pubDate>Mon, 17 May 2010 06:05:43 +0000</pubDate>
		<dc:creator>Marek Tihkan</dc:creator>
				<category><![CDATA[Arendus]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[ilus kood]]></category>
		<category><![CDATA[Testimine]]></category>

		<guid isPermaLink="false">http://www.saiku.ee/kaizen/?p=1172</guid>
		<description><![CDATA[Halloo&#8230; testid on ka kood! Mingil põhjusel arvatakse, et testid on samaväärsed write-only koodiga ning ei kanta erilist hoolt selle üle, et neid tulevikus hallata saaks. Küllaltki kurb on tõdeda pärast ümberstruktureerimist katkiseid teste, millest pole võimalik väga aru saada. Pakun välja mõned võimalused testide paremaks struktureerimiseks. Esimest varianti on võimalik kasutada küllaltki lihtsalt olemasolevate [...]


Loe veel sarnasel teemal:<ol><li><a href='http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-iii/' rel='bookmark' title='Permanent Link: Iluvõtted koodile III'>Iluvõtted koodile III</a> <small>Toidupoodides tihti võib leida väga huvitavaid teid. Mõned noorendavad, teised...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2010/05/iluvotted-koodile-iv/' rel='bookmark' title='Permanent Link: Iluvõtted koodile IV'>Iluvõtted koodile IV</a> <small>Ilusaks on võimalik ka saada igasuguste maskidega, näiteks näo- või...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-ii/' rel='bookmark' title='Permanent Link: Iluvõtted koodile II'>Iluvõtted koodile II</a> <small>Loodetavasti on kõht nüüd brokkoli parajasti täis ja kood ilustatud...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><strong>Halloo&#8230; testid on ka kood!</strong></p>
<p>Mingil põhjusel arvatakse, et testid on samaväärsed <em>write-only</em> koodiga ning ei kanta erilist hoolt selle üle, et neid tulevikus hallata saaks. Küllaltki kurb on tõdeda pärast ümberstruktureerimist katkiseid teste, millest pole võimalik väga aru saada.</p>
<p>Pakun välja mõned võimalused testide paremaks struktureerimiseks.</p>
<p>Esimest varianti on võimalik kasutada küllaltki lihtsalt olemasolevate testide peal. Kuna testid koosnevad kolemast osast (<em>Arrange, Act, Assert; Given, When, Then</em>), siis võib testi ka selliselt tükkideks jagada. <a href="http://cukes.info/" target="_blank">Cucumberi</a> kasutajatele peaks see olema küllaltki tuttav: samalaadselt tuleb kirjeldada ära sammud. Selle pahupooleks võibki sammude haldamine olla, sest test on tükeldatud, kuid ülevaate saab palju kiiremini ning on korduvkasutatav.</p>
<p><span id="more-1172"></span></p>
<pre class="brush: csharp;">
[TestFixture]
public class SalesOrderTests
{
  [Test]
  public void Should_accept_regular_sales_order()
  {
    given_regular_sales_order();
    when_accepting_sales_order();
    expect_sales_order_state_to_be_accepted();
  }

  private void given_regular_sales_order()
  {
    Target = SalesOrderBuilder.Regular();
  }

  private void when_accepting_sales_order()
  {
    Target.Accept();
  }

  private void expect_sales_order_state_to_be_accepted()
  {
    Target.State.Current().Is(SalesOrderState.Accepted)
      .Should().Be.True();
  }

  private SalesOrder Target { get; set; }
}
</pre>
<p>Järgmine struktuur viib eelnevalt edasi, kuid nüüd on iga stsenaarium eraldi klassis. Sellest tulenevalt on testide klasside hulk küllaltki suur ning soovitatav on hoida hea projekti struktuur, et otsimine keeruliseks ei läheks (R#-i otsing pole enam nii kerge).</p>
<p>Sellist struktuuri on väga hea kasutada ärimudeli testimiseks, sest nii saab tihtipeale otse kasutusloost (<em>use case</em>) selle ümber kirjutada. Hiljem on ka võimalik tekitada ilus raport, mis on testitud ning see on ka loetav äripoolele.</p>
<pre class="brush: csharp;">
[Specification]
public class When_accepting_new_sales_order :
  ScenarioFor&lt;SalesOrder&gt;
{
  public override void Given()
  {
    Target = SalesOrderBuilder.Regular();
  }

  public override void When()
  {
    Target.Accept();
  }

  [Then]
  public void It_should_have_accepted_state()
  {
    Target.State.Current().Is(SalesOrderState.Accepted)
      .Should().Be.True();
  }

  [Then]
  public void It_should_raise_accepted_sales_order_event()
  {
    DomainEvents.Published
      .Should().Contain&lt;SalesOrderAcceptedEvent&gt;();
  }
}
</pre>
<p>Viimane variant, mille tutvustamise praegu käsile võtan, on mõeldud sündmustele orienteeritud arhitektuuri puhul. Tulemuseks võiksime saada midagi sarnast alljärgnevaga. Selleks, et baasklassis argumenttüüpidest (<em>generic</em>) oleks paremini aru saada võime kasutada sisemisi klasse (<em>nested type</em>). Algseisu saame tekitada paari sündmuse loomisega, stsenaariumi käivitamiseks tuleb anda ette käsk ning kontrollimiseks vaadata juhtuva sündmuse andmeid.</p>
<pre class="brush: csharp;">
[Specification]
public class When_accepting_new_sales_order :
  Scenario.For&lt;SalesOrder&gt;.When&lt;AcceptSalesOrderCommand&gt;
{
  public override IEnumerable&lt;IDomainEvent&gt; Given()
  {
    var identity = Guid.NewGuid();
    yield return new SalesOrderCreatedEvent(identity, &quot;SO001&quot;, &quot;ABC Company&quot;);
    yield return new ItemAddedToSalesOrderEvent(identity, &quot;Mobile&quot;, 10.99m, 5);
  }

  public override AcceptSalesOrderCommand When()
  {
    return new AcceptSalesOrderCommand(Target.Id);
  }

  [Then]
  public void It_should_raise_accepted_sales_order_event()
  {
    DomainEvents.Published.Last()
      .Should().Be.TypeOf&lt;SalesOrderAcceptedEvent&gt;();
  }
}
</pre>
<p>Minu poolt praeguseks struktuurid otsas, kuid võite otsida ka <em>Behavior Driven Development</em> (<em>BDD</em>) stiilis raamistikke, kus lähenemisnurgad on sarnased või isegi väiksem kirjavaevaga. Kui teate mõnda mugavat struktureerimise viisi, siis oleksin vägagi huvitatud sellega tutvumisest.</p>
<p>Head testide struktureerimist!</p>


<p>Loe veel sarnasel teemal:<ol><li><a href='http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-iii/' rel='bookmark' title='Permanent Link: Iluvõtted koodile III'>Iluvõtted koodile III</a> <small>Toidupoodides tihti võib leida väga huvitavaid teid. Mõned noorendavad, teised...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2010/05/iluvotted-koodile-iv/' rel='bookmark' title='Permanent Link: Iluvõtted koodile IV'>Iluvõtted koodile IV</a> <small>Ilusaks on võimalik ka saada igasuguste maskidega, näiteks näo- või...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-ii/' rel='bookmark' title='Permanent Link: Iluvõtted koodile II'>Iluvõtted koodile II</a> <small>Loodetavasti on kõht nüüd brokkoli parajasti täis ja kood ilustatud...</small></li>
</ol></p><img src="http://feeds.feedburner.com/~r/saikufeed/~4/387OEe1keT0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.saiku.ee/kaizen/2010/05/iluvotted-testidele/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.saiku.ee/kaizen/2010/05/iluvotted-testidele/</feedburner:origLink></item>
		<item>
		<title>Iluvõtted koodile IV</title>
		<link>http://feedproxy.google.com/~r/saikufeed/~3/Ina2TzjdIfM/</link>
		<comments>http://www.saiku.ee/kaizen/2010/05/iluvotted-koodile-iv/#comments</comments>
		<pubDate>Wed, 12 May 2010 06:43:52 +0000</pubDate>
		<dc:creator>Marek Tihkan</dc:creator>
				<category><![CDATA[Arendus]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[ilus kood]]></category>

		<guid isPermaLink="false">http://www.saiku.ee/kaizen/?p=1173</guid>
		<description><![CDATA[Ilusaks on võimalik ka saada igasuguste maskidega, näiteks näo- või juustemaskiga. Staatiliselt tüübitud keeltes on ka tavaliselt seda silmas peetud ning loodud liidesed. Nende kasutamine teeb ilusamaks ja paindlikumaks ka arhitektuuri. Liideste abiga saame objektide omavahelist siduvust vähendada. Teavad täpselt nii palju kui vaja. Mida väiksemaks nendega läheme, seda rohkem anname teada kavatusest ning ei [...]


Loe veel sarnasel teemal:<ol><li><a href='http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-i/' rel='bookmark' title='Permanent Link: Iluvõtted koodile I'>Iluvõtted koodile I</a> <small>Ilusa koodi saamiseks ei ole vaja toita teda brokkoliga, osta...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-iii/' rel='bookmark' title='Permanent Link: Iluvõtted koodile III'>Iluvõtted koodile III</a> <small>Toidupoodides tihti võib leida väga huvitavaid teid. Mõned noorendavad, teised...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-ii/' rel='bookmark' title='Permanent Link: Iluvõtted koodile II'>Iluvõtted koodile II</a> <small>Loodetavasti on kõht nüüd brokkoli parajasti täis ja kood ilustatud...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Ilusaks on võimalik ka saada igasuguste maskidega, näiteks näo- või juustemaskiga. Staatiliselt tüübitud keeltes on ka tavaliselt seda silmas peetud ning loodud liidesed. Nende kasutamine teeb ilusamaks ja paindlikumaks ka arhitektuuri.</p>
<p>Liideste abiga saame objektide omavahelist siduvust vähendada. Teavad täpselt nii palju kui vaja. Mida väiksemaks nendega läheme, seda rohkem anname teada kavatusest ning ei pea kartma <em>NotSupportedException</em>it.</p>
<pre class="brush: csharp;">
public interface IConsume&lt;TMessage&gt;
{
  void Consume(TMessage message);
}

public interface ICanMakeCustomerPreferred
{
  void MakePreferred(Cutomer customer);
}
</pre>
<p><span id="more-1173"></span></p>
<p>Need liidesed on küllaltki väiksed, kuid leidub ka veel väiksemaid. Neid nimetatakse tähistajateks.</p>
<pre class="brush: csharp;">
public interface IAggregateRoot {}
</pre>
<p>Tihti on vajadus ka liideste järgi, mis on mitme parameetriga (<em>generic</em>) ning nende lugemine osutub raskemaks. Õnneks saab teha C#-s sisemisi klasse (<em>nested types</em>) ja selle abiga maskeerida raskesti loetavat koodi.</p>
<pre class="brush: csharp;">
public interface IMessageHandler&lt;TMessage, TResponse&gt;
{
  TResponse Handle(TMessage message);
}

public class RespondsTo&lt;TMessage&gt;
{
  public interface With&lt;TResponse&gt; :
    IMessageHandler&lt;TMessage, TResponse&gt;
  {}

  public interface WithListOf&lt;TResponse&gt; :
    IMessageHandler&lt;TMessage, IList&lt;TResponse&gt;&gt;
  {}
}

public class AcceptedSalesOrdersMessageHandler :
  RespondsTo&lt;AcceptedSalesOrdersMessage&gt;.WithListOf&lt;SalesOrder&gt;
{
  public IList&lt;SalesOrder&gt; Handle(AcceptedSalesOrdersMessage message)
  {
     //...
  }
}
</pre>
<p>Kui olete ise liideste osas kasutanud võtteid, mida jagada soovite, siis kommentaarid on oodatud.</p>
<p>Meeldivat maskide kandmist!</p>


<p>Loe veel sarnasel teemal:<ol><li><a href='http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-i/' rel='bookmark' title='Permanent Link: Iluvõtted koodile I'>Iluvõtted koodile I</a> <small>Ilusa koodi saamiseks ei ole vaja toita teda brokkoliga, osta...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-iii/' rel='bookmark' title='Permanent Link: Iluvõtted koodile III'>Iluvõtted koodile III</a> <small>Toidupoodides tihti võib leida väga huvitavaid teid. Mõned noorendavad, teised...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-ii/' rel='bookmark' title='Permanent Link: Iluvõtted koodile II'>Iluvõtted koodile II</a> <small>Loodetavasti on kõht nüüd brokkoli parajasti täis ja kood ilustatud...</small></li>
</ol></p><img src="http://feeds.feedburner.com/~r/saikufeed/~4/Ina2TzjdIfM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.saiku.ee/kaizen/2010/05/iluvotted-koodile-iv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.saiku.ee/kaizen/2010/05/iluvotted-koodile-iv/</feedburner:origLink></item>
		<item>
		<title>Iluvõtted koodile III</title>
		<link>http://feedproxy.google.com/~r/saikufeed/~3/sRkXoz77p5A/</link>
		<comments>http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-iii/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 07:10:31 +0000</pubDate>
		<dc:creator>Marek Tihkan</dc:creator>
				<category><![CDATA[Arendus]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[ilus kood]]></category>

		<guid isPermaLink="false">http://www.saiku.ee/kaizen/?p=1163</guid>
		<description><![CDATA[Toidupoodides tihti võib leida väga huvitavaid teid. Mõned noorendavad, teised salendavad, osa isegi annavad energiat juurde. Üldiselt selliste turundussiltide tõttu tekkib mul tung need järjest prügikasti visata (soovitan pigem minna korralikku tee poodi ja sealt mõned sobilikud teed endale välja valida). Kui prügikast oleks samalaadne nagu tarkvaraarenduse käigus loodud lisamismeetodid kollektsiooni, siis mul läheks ühe [...]


Loe veel sarnasel teemal:<ol><li><a href='http://www.saiku.ee/kaizen/2010/05/iluvotted-koodile-iv/' rel='bookmark' title='Permanent Link: Iluvõtted koodile IV'>Iluvõtted koodile IV</a> <small>Ilusaks on võimalik ka saada igasuguste maskidega, näiteks näo- või...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-i/' rel='bookmark' title='Permanent Link: Iluvõtted koodile I'>Iluvõtted koodile I</a> <small>Ilusa koodi saamiseks ei ole vaja toita teda brokkoliga, osta...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-ii/' rel='bookmark' title='Permanent Link: Iluvõtted koodile II'>Iluvõtted koodile II</a> <small>Loodetavasti on kõht nüüd brokkoli parajasti täis ja kood ilustatud...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Toidupoodides tihti võib leida väga huvitavaid teid. Mõned noorendavad, teised salendavad, osa isegi annavad energiat juurde. Üldiselt selliste turundussiltide tõttu tekkib mul tung need järjest prügikasti visata (soovitan pigem minna korralikku tee poodi ja sealt mõned sobilikud teed endale välja valida). Kui prügikast oleks samalaadne nagu tarkvaraarenduse käigus loodud lisamismeetodid kollektsiooni, siis mul läheks ühe paki äraviskamiseks liigselt aega.</p>
<pre class="brush: csharp;">
public class Teabag
{
  //..
}

public class Trashbin&lt;TTrash&gt;
{
  public void Add(TTrash trash)
  {
    //..
  }
}

var trashbin = new Trashbin&lt;Teabag&gt;();
trashbin.Add(new Teabag());
trashbin.Add(new Teabag());
trashbin.Add(new Teabag());
</pre>
<p><span id="more-1163"></span></p>
<p>Selle probleemi saab lahendada küllaltki lihtsalt kasutades <em>params</em> võtmesõna:</p>
<pre class="brush: csharp;">
public class Trashbin&lt;TTrash&gt;
{
  public void Add(params TTrash[] trash)
  {
    //..
  }
}

var trashbin = new Trashbin&lt;Teabag&gt;();
trashbin.Add(
  new Teabag(),
  new Teabag(),
  new Teabag()
);
</pre>
<p>Alati ei pruugi seda vaja minna ärimudeli puhul, kuid küllaltki kasulik on seda kasutada registreerimistel, seadistustes:</p>
<pre class="brush: csharp;">
ServiceLocator.Register(
  Requested.Service&lt;ITrashbin&gt;()
    .IsImplementedBy&lt;Trashbin&gt;(),
  Requested.Service&lt;IShop&gt;
    .IsConstructedBy(() =&gt; ShopFactory.Create())
);
</pre>
<p>Vahel tasub seda võtet kaaluda. Mida huvitavat olete ise selle küllaltki nurka jäetud võtmesõnaga korda saatnud?</p>
<p>Head teejoomist!</p>


<p>Loe veel sarnasel teemal:<ol><li><a href='http://www.saiku.ee/kaizen/2010/05/iluvotted-koodile-iv/' rel='bookmark' title='Permanent Link: Iluvõtted koodile IV'>Iluvõtted koodile IV</a> <small>Ilusaks on võimalik ka saada igasuguste maskidega, näiteks näo- või...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-i/' rel='bookmark' title='Permanent Link: Iluvõtted koodile I'>Iluvõtted koodile I</a> <small>Ilusa koodi saamiseks ei ole vaja toita teda brokkoliga, osta...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-ii/' rel='bookmark' title='Permanent Link: Iluvõtted koodile II'>Iluvõtted koodile II</a> <small>Loodetavasti on kõht nüüd brokkoli parajasti täis ja kood ilustatud...</small></li>
</ol></p><img src="http://feeds.feedburner.com/~r/saikufeed/~4/sRkXoz77p5A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-iii/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-iii/</feedburner:origLink></item>
		<item>
		<title>Iluvõtted koodile II</title>
		<link>http://feedproxy.google.com/~r/saikufeed/~3/VqlbVd3O554/</link>
		<comments>http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-ii/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 09:17:52 +0000</pubDate>
		<dc:creator>Marek Tihkan</dc:creator>
				<category><![CDATA[Arendus]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ilus kood]]></category>

		<guid isPermaLink="false">http://www.saiku.ee/kaizen/?p=1145</guid>
		<description><![CDATA[Loodetavasti on kõht nüüd brokkoli parajasti täis ja kood ilustatud laiendusmeetoditega, mida käsitlesin eelmise artiklis. Teiseks lihtsaks võtteks on tagastada kogu objekt meetoditel. See ei ole midagi keerulisemat kui kirjutada kaks sõna: return this; Võib kerkida küsimus, et kus neid kasutada, kui on klassides defineeritud ainult atribuudid (property) ja paar üksikut meetodit. Nii ei ole [...]


Loe veel sarnasel teemal:<ol><li><a href='http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-i/' rel='bookmark' title='Permanent Link: Iluvõtted koodile I'>Iluvõtted koodile I</a> <small>Ilusa koodi saamiseks ei ole vaja toita teda brokkoliga, osta...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2010/05/iluvotted-koodile-iv/' rel='bookmark' title='Permanent Link: Iluvõtted koodile IV'>Iluvõtted koodile IV</a> <small>Ilusaks on võimalik ka saada igasuguste maskidega, näiteks näo- või...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-iii/' rel='bookmark' title='Permanent Link: Iluvõtted koodile III'>Iluvõtted koodile III</a> <small>Toidupoodides tihti võib leida väga huvitavaid teid. Mõned noorendavad, teised...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Loodetavasti on kõht nüüd brokkoli parajasti täis ja kood ilustatud laiendusmeetoditega, mida käsitlesin <a href="http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-i/">eelmise artiklis</a>. Teiseks lihtsaks võtteks on tagastada kogu objekt meetoditel. See ei ole midagi keerulisemat kui kirjutada kaks sõna: </p>
<pre class="brush: csharp;">
return this;
</pre>
<p>Võib kerkida küsimus, et kus neid kasutada, kui on klassides defineeritud ainult atribuudid (<em>property</em>) ja paar üksikut meetodit. Nii ei ole võimalik seda väga lihtsalt rakendada.</p>
<pre class="brush: csharp;">
public class Product
{
  public StockKeepingUnit SKU { get; set; }
  public ProductName Name { get; set; }
  public Money Price { get; set; }
  public Party Vendor { get; set; }
}

var product = new Product
{
  SKU = new StockKeepingUnit(“PRO-2345”),
  ProductName = new ProductName(“Goldstein Elite Blue Pen”),
  Price = new Money(10m, Currency.EEK),
  Vendor = new Organization(“ABC Company”)
};
</pre>
<p><span id="more-1145"></span></p>
<p>Defineerides paar meetodit võiksime selle klassi saada järgmiseks:</p>
<pre class="brush: csharp;">
public class Product
{
  public StockKeepingUnit SKU { get; protected set; }
  public ProductName Name { get; protected set; }
  public Money Price { get; protected set; }
  public Party Vendor { get; protected set; }

  public Product Named(string name)
  {
    Name = new ProductName(name);
    return this;
  }

  public Product SerializedAs(string serial)
  {
    SKU = new StockKeepingUnit(serial);
    return this;
  }

  public Product Priced(decimal amount, Currency currency)
  {
    Price = new Money(amount, currency);
    return this;
  }

  public Product ProducedBy(string name)
  {
    Vendor = new Organization(name);
    return this;
  }
}

var product = new Product()
  .Named(“Goldstein Elite Blue Pen”)
  .SerializedAs(“PRO-2345”)
  .Priced(10m, Currency.EEK)
  .ProducedBy(“ABC Company”);
</pre>
<p>Ilmselt panite tähele, et  uues koodis on rohkem koodi. Samas see tundub loetavam ja peamiselt tegeleme primitiivtüüpidega.</p>
<p>Esmapilgul võib tunduda, et <em>Object-Relational Mapper</em>tite (<em>ORM</em>) osas võib tekkida probleeme, kuid <em>NHibernate</em> tingimused tunduvad täidetud olevat (<em>protected setter</em>id on olemas). Seevastu teisendamine objektist objektiks võib veidi probleemsem olla. Olemist (entity) transpordiobjektist (<em>Data Transfer Object</em>, <em>DTO</em>) ei tohiks probleemne olla, kuid vastupidine on juba keerulisem. Mulle tundub, et see ongi hea &#8211; see sunnib meid mõtlema veidi teisiti, muudatused olemis peaksid olema ärilise üksusena, mitte nagu tänapäeva tabelipõhised haldamised.</p>
<p>Liideste abiga on meil veel võimalik kitsendada valikuid ja sundida kindla jada läbima.</p>
<pre class="brush: csharp;">
public IProductNamingExpression Named(string name)
{
  //...
  return this;
}

public interface IProductNamingExpression
{
  Product SerializedAs(string sku);
}

product.Named(&quot;Goldstein Elite Pen&quot;).SerializedAs(&quot;GEP-0001&quot;);
</pre>
<p>Kui leiate, et ei soovi enda ärimudelit nii keerukaks teha, siis on see vägagi sobilik <em>Builder</em> mustri jaoks, kus pika konstruktori argumentide asemele tuleb loetav jutt. See meetod sobib ka väga hästi seadistuste ja registreerimiste jaoks.</p>
<p>Ilusat koodi kirjutamist</p>


<p>Loe veel sarnasel teemal:<ol><li><a href='http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-i/' rel='bookmark' title='Permanent Link: Iluvõtted koodile I'>Iluvõtted koodile I</a> <small>Ilusa koodi saamiseks ei ole vaja toita teda brokkoliga, osta...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2010/05/iluvotted-koodile-iv/' rel='bookmark' title='Permanent Link: Iluvõtted koodile IV'>Iluvõtted koodile IV</a> <small>Ilusaks on võimalik ka saada igasuguste maskidega, näiteks näo- või...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-iii/' rel='bookmark' title='Permanent Link: Iluvõtted koodile III'>Iluvõtted koodile III</a> <small>Toidupoodides tihti võib leida väga huvitavaid teid. Mõned noorendavad, teised...</small></li>
</ol></p><img src="http://feeds.feedburner.com/~r/saikufeed/~4/VqlbVd3O554" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-ii/</feedburner:origLink></item>
		<item>
		<title>Iluvõtted koodile I</title>
		<link>http://feedproxy.google.com/~r/saikufeed/~3/aKsX5nF2V54/</link>
		<comments>http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-i/#comments</comments>
		<pubDate>Wed, 07 Apr 2010 05:11:35 +0000</pubDate>
		<dc:creator>Marek Tihkan</dc:creator>
				<category><![CDATA[Arendus]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ilus kood]]></category>

		<guid isPermaLink="false">http://www.saiku.ee/kaizen/?p=1114</guid>
		<description><![CDATA[Ilusa koodi saamiseks ei ole vaja toita teda brokkoliga, osta kalleid kreeme ega noorenevaid tablette. Tegelikult on olemas küllaltki lihtsaid võtteid selle saamiseks. Peamiselt on need tulnud sisemiste Domain Specific Language (DSL) loomise võtetest, õigemini sinna poole pürgimegi ehk kood näeks välja nagu DSL. Esimeseks võtteks, mida käsitlen, on laiendusmeetodite (Extension Methods) kasutamine. Nende abiga [...]


Loe veel sarnasel teemal:<ol><li><a href='http://www.saiku.ee/kaizen/2010/05/iluvotted-koodile-iv/' rel='bookmark' title='Permanent Link: Iluvõtted koodile IV'>Iluvõtted koodile IV</a> <small>Ilusaks on võimalik ka saada igasuguste maskidega, näiteks näo- või...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-ii/' rel='bookmark' title='Permanent Link: Iluvõtted koodile II'>Iluvõtted koodile II</a> <small>Loodetavasti on kõht nüüd brokkoli parajasti täis ja kood ilustatud...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-iii/' rel='bookmark' title='Permanent Link: Iluvõtted koodile III'>Iluvõtted koodile III</a> <small>Toidupoodides tihti võib leida väga huvitavaid teid. Mõned noorendavad, teised...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img style="margin: 10px; display: inline" title="brokkoli" alt="brokkoli" align="left" src="http://www.saiku.ee/kaizen/wp-content/uploads/2010/04/brokkoli.png" width="150" height="113" />Ilusa koodi saamiseks ei ole vaja toita teda brokkoliga, osta kalleid kreeme ega noorenevaid tablette. Tegelikult on olemas küllaltki lihtsaid võtteid selle saamiseks. Peamiselt on need tulnud sisemiste <em>Domain Specific Language</em> (<em>DSL</em>) loomise võtetest, õigemini sinna poole pürgimegi ehk kood näeks välja nagu DSL.</p>
<p>Esimeseks võtteks, mida käsitlen, on laiendusmeetodite (<em>Extension Methods</em>) kasutamine. Nende abiga saame kergesti olemasolevatele klassidele lisada meetodeid juurde, eriti kui meil pole võimalik klassi ennast muuta. </p>
<p><span id="more-1114"></span></p>
<p>Esimene näitena toon keeleliste struktuuride ilustamisest. Suhteliselt harva kasutan <em>for</em> tsüklit, mistõttu pole see konstruktsioon väga selgelt enam mu peas (ajan pidevalt segamini, kas on &#8220;,&#8221; või &#8220;;&#8221; osade vahel). Lisaks tuleb alati seda pikalt lugeda, et aru saada, mis seal tehakse. Palju selgemini väljendub laiendusmeetodite abiga tehtud funktsioon:</p>
<pre class="brush: csharp;">
for (var index = 0; index &lt; 5; index++)
{
  //...
}

// vs

5.Times(index =&gt;
{
   //…
});
</pre>
<p>Realiseerimiseks läheb vaja mõnerealist koodi:</p>
<pre class="brush: csharp;">
public static void Times(this int count, Action&lt;int&gt; action)
{
  if (count &lt; 0)
    throw new ArgumentException(&quot;Count should be positive&quot;);
  for (var index = 0; index &lt; count; index++)
    action(index);
}
</pre>
<p>Laiendusmeetodid on osutunud kasulikuks ka arvutuste sõnastamisel. Näiteks:</p>
<pre class="brush: csharp;">
Time.AddDays(1);
new DateTime(Time.Year, Time.Month, DateTime.DaysInMonth(Time.Year, Time.Month))

Time.Tommorrow();
Time.EndOfMonth();
</pre>
<p>Viimased read on palju selgemini väljendatud ning ei vaja mõttetööd koodi lugemisel.</p>
<p>Abiks on olnud laiendusmeetodid ka teisendamistel. Eriti kui üle süsteemi kasutan ühte väärtust mõnel argumendil.</p>
<pre class="brush: csharp;">
new Money(90.5m, Currency.EEK)

90.5m.AsMoney();
</pre>
<p>Vahel aitavad need lisada juurde ka konteksti:</p>
<pre class="brush: csharp;">
5.Percent();
</pre>
<p>Laiendusmeetodid võivad arhitektuurilist piltiki veidi muuta – paljud kasutavad <em>Active Record</em> mustrit ning tüüpiliselt on see realiseeritud nii, et peame mõne raamistiku baasklassist pärinema. See on tihti ebameeldiv ja õnneks on see lahendatav:</p>
<pre class="brush: csharp;">
public interface IEntity&lt;TIdentity&gt;
{
  TIdentity Id { get; }
}
public interface ISavable {}
public interface IDeletable {}
public interface IActiveRecord
  : IEntity&lt;int&gt;, ISavable, IDeletable {}

public static void Save(this ISavable entity)
{
  ServiceLocator.Resolve&lt;IRepository&gt;().Save(entity);
}

public static void Delete(this IDeletable entity)
{
  ServiceLocator.Resolve&lt;IRepository&gt;().Delete(entity);
}
</pre>
<p>Nende laiendusmeetodite abiga saame kenasti enda äriobjektid võõrastest raamistikest eemale hoida:</p>
<pre class="brush: csharp;">
public class Person : IActiveRecord
{
  public int Id { get; set; }
  public string Name { get; set; }
}

var person = new Person();
person.Name = &quot;Aabel&quot;;
person.Save();
person.Delete();
</pre>
<p>Kokkuvõtvalt võib öeda, et laiendusmeetodite abiga saab koodi loetavamaks muuta ning ärimudelit ja arhitektuuri parandada. Lisaks võite uurida laiendusmeetodeid <a href="http://www.extensionmethod.net/" target="_blank">Extentsion Method.NET</a>-ist. Ja kui sul on rääkida oma lugu laiendusmeetoditest, siis ootame seda kommentaarides.</p>
<p>Head brokkoli söömist!</p>
<p>* foto: <a href="http://www.sxc.hu/profile/pontuse" target="_blank">pontuse</a></p>


<p>Loe veel sarnasel teemal:<ol><li><a href='http://www.saiku.ee/kaizen/2010/05/iluvotted-koodile-iv/' rel='bookmark' title='Permanent Link: Iluvõtted koodile IV'>Iluvõtted koodile IV</a> <small>Ilusaks on võimalik ka saada igasuguste maskidega, näiteks näo- või...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-ii/' rel='bookmark' title='Permanent Link: Iluvõtted koodile II'>Iluvõtted koodile II</a> <small>Loodetavasti on kõht nüüd brokkoli parajasti täis ja kood ilustatud...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-iii/' rel='bookmark' title='Permanent Link: Iluvõtted koodile III'>Iluvõtted koodile III</a> <small>Toidupoodides tihti võib leida väga huvitavaid teid. Mõned noorendavad, teised...</small></li>
</ol></p><img src="http://feeds.feedburner.com/~r/saikufeed/~4/aKsX5nF2V54" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-i/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.saiku.ee/kaizen/2010/04/iluvotted-koodile-i/</feedburner:origLink></item>
		<item>
		<title>See ei ole aprill! Oleme tõsised</title>
		<link>http://feedproxy.google.com/~r/saikufeed/~3/5W998oY8qak/</link>
		<comments>http://www.saiku.ee/kaizen/2010/04/see-ei-ole-aprill-oleme-tosised/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 06:00:09 +0000</pubDate>
		<dc:creator>Priidik Vaikla</dc:creator>
				<category><![CDATA[Varia]]></category>
		<category><![CDATA[raamatukogu]]></category>

		<guid isPermaLink="false">http://www.saiku.ee/kaizen/?p=1104</guid>
		<description><![CDATA[Tõime Saiku Kaizen raamatukogu sulle lähemale, nüüdsest asub see aadressil Tartu mnt 18, Tallinn.  Stockmanni vastas üle Tartu maantee. Raamatukogu peab muuseas leppima sellega, et ka Saiku arendusmeeskond töötab samas ruumis. Täpsemalt on mõlemad 5. korrusel &#8220;Saiku Consulting OÜ&#8221; tiivas. Tule külla! Samas kui soovid midagi laenutada Saiku Kaizen raamatukogust &#8211; http://www.saiku.ee/kaizen/raamatukogu/ &#8211; või tahad [...]


Loe veel sarnasel teemal:<ol><li><a href='http://www.saiku.ee/kaizen/2009/08/kaizen-raamatukogu-on-avatud/' rel='bookmark' title='Permanent Link: Kaizen raamatukogu on avatud'>Kaizen raamatukogu on avatud</a> <small>Valisime välja hunniku põnevat tarkvaraarenduse alast kirjandust ning koondasime selle...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2008/02/koopiakoopiakoopia-ei-ole-ilus/' rel='bookmark' title='Permanent Link: KoopiaKoopiaKoopia ei ole ilus'>KoopiaKoopiaKoopia ei ole ilus</a> <small>Kui anekdooti rääkida esimest korda, siis arvatavasti on see naljakas,...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2009/04/koike-mida-sa-omad-ei-ole-sul-vaja/' rel='bookmark' title='Permanent Link: Kõike, mida sa omad, ei ole sul vaja'>Kõike, mida sa omad, ei ole sul vaja</a> <small>Inimestele meeldib teha pigem seda, mida pole vaja. Seda illustreerib...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Tõime Saiku Kaizen raamatukogu sulle lähemale, nüüdsest asub see aadressil Tartu mnt 18, Tallinn.  Stockmanni vastas üle Tartu maantee. Raamatukogu peab muuseas leppima sellega, et ka Saiku arendusmeeskond töötab samas ruumis. Täpsemalt on mõlemad 5. korrusel &#8220;Saiku Consulting OÜ&#8221; tiivas. Tule külla!</p>
<p>Samas kui soovid midagi laenutada Saiku Kaizen raamatukogust &#8211; <a href="http://www.saiku.ee/kaizen/raamatukogu/">http://www.saiku.ee/kaizen/raamatukogu/</a> &#8211; või tahad Saiku arendusmeeskonda palgata oma veebirakendust või tarkvara meisterdama, siis helista 6 825 809 või kirjuta <a href="mailto:info@saiku.ee">info@saiku.ee</a> ja uuri täpsemalt.</p>


<p>Loe veel sarnasel teemal:<ol><li><a href='http://www.saiku.ee/kaizen/2009/08/kaizen-raamatukogu-on-avatud/' rel='bookmark' title='Permanent Link: Kaizen raamatukogu on avatud'>Kaizen raamatukogu on avatud</a> <small>Valisime välja hunniku põnevat tarkvaraarenduse alast kirjandust ning koondasime selle...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2008/02/koopiakoopiakoopia-ei-ole-ilus/' rel='bookmark' title='Permanent Link: KoopiaKoopiaKoopia ei ole ilus'>KoopiaKoopiaKoopia ei ole ilus</a> <small>Kui anekdooti rääkida esimest korda, siis arvatavasti on see naljakas,...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2009/04/koike-mida-sa-omad-ei-ole-sul-vaja/' rel='bookmark' title='Permanent Link: Kõike, mida sa omad, ei ole sul vaja'>Kõike, mida sa omad, ei ole sul vaja</a> <small>Inimestele meeldib teha pigem seda, mida pole vaja. Seda illustreerib...</small></li>
</ol></p><img src="http://feeds.feedburner.com/~r/saikufeed/~4/5W998oY8qak" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.saiku.ee/kaizen/2010/04/see-ei-ole-aprill-oleme-tosised/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.saiku.ee/kaizen/2010/04/see-ei-ole-aprill-oleme-tosised/</feedburner:origLink></item>
		<item>
		<title>Founders at Work</title>
		<link>http://feedproxy.google.com/~r/saikufeed/~3/prDOOQHLWvA/</link>
		<comments>http://www.saiku.ee/kaizen/2010/03/founders-at-work/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 05:48:59 +0000</pubDate>
		<dc:creator>Marek Tihkan</dc:creator>
				<category><![CDATA[Ettevalmistus]]></category>
		<category><![CDATA[Juhtimine]]></category>
		<category><![CDATA[raamat]]></category>

		<guid isPermaLink="false">http://www.saiku.ee/kaizen/?p=1098</guid>
		<description><![CDATA[Hiljaaegu võtsin käsile Jessica Livingstoni raamatu “Founders at Work: Stories of Startups’ Early Days”, mis koosneb intervjuudest erinevate firmade asutajatega. Igati väärt lugemine neile, kes plaanivad mõne startup-iga liituda. Meeldejäävaid ideed oli raamatus küllaga: Oluline on meeskond, küll väärt ideed tulevad millalgi. Tihtipeale polnud asutajatel täpset arusaama, mida nad tegema hakkavad ning ajapikku leiti õige [...]


Loe veel sarnasel teemal:<ol><li><a href='http://www.saiku.ee/kaizen/2009/11/motivatsioon-ja-moodikud/' rel='bookmark' title='Permanent Link: Motivatsioon ja m&otilde;&otilde;dikud'>Motivatsioon ja m&otilde;&otilde;dikud</a> <small>Üks tüüpilisi töövestluse küsimusi on: kas sa oled motiveeritud tööd...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2008/02/huvitavat-vaatamist-maailmast/' rel='bookmark' title='Permanent Link: Huvitavat vaatamist maailmast'>Huvitavat vaatamist maailmast</a> <small>Hiljuti oli mul aega vaadata nädalas kogunenud huvitavamad ajaveebide kanded...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2009/10/maailmad-on-erinevad-model-view-controller/' rel='bookmark' title='Permanent Link: Maailmad on erinevad: Model-View-Controller'>Maailmad on erinevad: Model-View-Controller</a> <small>Üks populaarsemaid kasutajaliides loomise mustreid veebirakenduste juures on Model-View-Controller ehk...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img style="margin: 10px; display: inline;" title="foundersatwork" src="http://www.saiku.ee/kaizen/wp-content/uploads/2010/03/foundersatwork.png" alt="foundersatwork" width="185" height="278" align="left" /> Hiljaaegu võtsin käsile <a href="http://www.amazon.com/exec/obidos/ASIN/1430210788" target="_blank">Jessica Livingstoni raamatu “Founders at Work: Stories of Startups’ Early Days”</a>, mis koosneb intervjuudest erinevate firmade asutajatega. Igati väärt lugemine neile, kes plaanivad mõne <em>startup</em>-iga liituda.</p>
<p>Meeldejäävaid ideed oli raamatus küllaga:</p>
<p><strong>Oluline on meeskond, küll väärt ideed tulevad millalgi.</strong> Tihtipeale polnud asutajatel täpset arusaama, mida nad tegema hakkavad ning ajapikku leiti õige suund. Seega tasub hoolega valida kellega koos asutatakse. Fog Greek Software ja Excite alustasid ilma konkreetse toote plaanita, kuid enda saatuse üle nad viriseda ei saa.</p>
<p>Kes plaanib üksi <em>startup</em>-i tegema hakata peaks kõvasti järgi mõtlema. <strong>Üksi lahingusse ei minda.</strong> Paljudki investorid ei pruugi nii ettevõtmist tõsiselt võtta. Raamatustki selgus, et tüüpiliselt asutajaid on 2-4 inimest.</p>
<p><span id="more-1098"></span></p>
<p><strong>Paljud tooted arenevad välja kõrvaltegemistest</strong> ning populaarsuse tõusul vormistatakse see ettevõtteks. Luua iga enda idee jaoks eraldi ettevõte on kulukas ja võtab enamiku auru. See tundub olevat naha jagamine enne jahile minekut. Mõistlikum on teha midagi valmis ja vaadata, kas teistel on ka sellest kasu ning alles siis moodustada vajalik meeskond. Nii said alguse Craiglist ja Yahoo!</p>
<p><strong>Selleks, edukas enda tootega olla, peab lahendama reaalse probleemi.</strong> See on ka üks põhjustest, miks kõrvaltegemisest väljaarenenud tooted edukad on. Inimesed ei viitsi vaevata ennast väga kasutute asjadega. Eranditeks on ilmselt MafiaWars ja Farmville Facebookis.</p>
<p>Enne teele asumist tuleks endal selgeks teha, et <strong>miski ei tule ise kätte ning tööd tuleb kõvasti rabada</strong>. 4 tundi päevas magada ja sedagi kontoris, pereprobleemid – kas need kõik on üldse väärt seda ja kas sellist elu üldse soovid elada? Tagasi vaadates tundus kõigile see lõbus aeg olevat, kuid selle keskmes olles see nii ei ole.</p>
<p><strong>Tegevdirektor (CEO) on tore ametinimi, kuid alati ei pea see mõni asutajatest olema.</strong> Eelkõige kui asutajad on tehnilised inimesed. Vahel tasub selliseid inimesi ka palgata, sest nende töö on ilmselt tunduvalt viljakam. Huvitav, kas Eestis võiks selline asi juhtuda? See on siiski veidi ego kraapiv. Bloglinesis vahetati CEO välja investorite soovil. Six Apart võttis ise juurde endale CEO, kuna asutajad mõistsid, et nad ei suuda kõike ise teha.</p>
<p><strong>Investoreid on igat sorti ning alati nad ei ole abistav käsi.</strong> ArsDigital läks vägagi kehvasti investoritega (see oli lausa koomiline) ning Six Apart suhtus vägagi ettevaatlikult neisse.</p>
<p>Väga meeldiv oli lugeda ka seda, kuidas Herman Milleri toole võib saada (lk 63), kuidas espresso masin võib ettevõtte päästa (lk 157) ja milline on Indiast saadav arendusteenus (lk 320).</p>
<p>Kui leidsid veel mõne põneva episoodi või tähelepaneku, siis jaga seda meiegagi. Lõbusat lugemist!</p>


<p>Loe veel sarnasel teemal:<ol><li><a href='http://www.saiku.ee/kaizen/2009/11/motivatsioon-ja-moodikud/' rel='bookmark' title='Permanent Link: Motivatsioon ja m&otilde;&otilde;dikud'>Motivatsioon ja m&otilde;&otilde;dikud</a> <small>Üks tüüpilisi töövestluse küsimusi on: kas sa oled motiveeritud tööd...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2008/02/huvitavat-vaatamist-maailmast/' rel='bookmark' title='Permanent Link: Huvitavat vaatamist maailmast'>Huvitavat vaatamist maailmast</a> <small>Hiljuti oli mul aega vaadata nädalas kogunenud huvitavamad ajaveebide kanded...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2009/10/maailmad-on-erinevad-model-view-controller/' rel='bookmark' title='Permanent Link: Maailmad on erinevad: Model-View-Controller'>Maailmad on erinevad: Model-View-Controller</a> <small>Üks populaarsemaid kasutajaliides loomise mustreid veebirakenduste juures on Model-View-Controller ehk...</small></li>
</ol></p><img src="http://feeds.feedburner.com/~r/saikufeed/~4/prDOOQHLWvA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.saiku.ee/kaizen/2010/03/founders-at-work/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.saiku.ee/kaizen/2010/03/founders-at-work/</feedburner:origLink></item>
		<item>
		<title>Kevad saabus – siutsud ja säutsud</title>
		<link>http://feedproxy.google.com/~r/saikufeed/~3/8dVyaTqw8lk/</link>
		<comments>http://www.saiku.ee/kaizen/2010/03/kevad-saabus-siutsud-ja-sutsud/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 17:14:24 +0000</pubDate>
		<dc:creator>Marek Tihkan</dc:creator>
				<category><![CDATA[Varia]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.saiku.ee/kaizen/?p=1096</guid>
		<description><![CDATA[Vahepeal jäi ajaveebi kannete kirjutamiseks vähe aega ning eriti midagi ei ilmunud pikka aega. Kuna uute teemade uurimine ja teiste ajaveebide lugemine ei jäänud tahaplaanile, siis sai jagatud hulgaliselt viiteid huvitavast lugemisest ja üritustest Facebooki ja Twitteri kaudu. Kes soovib, siis saab liituda meie Facebooki lehega ja Twitteri siutsudega. Kui ise leiate mingeid väärtuslikke viiteid [...]


Loe veel sarnasel teemal:<ol><li><a href='http://www.saiku.ee/kaizen/2009/11/oppida-oppida/' rel='bookmark' title='Permanent Link: Õppida, õppida…'>Õppida, õppida…</a> <small>Sattusin ühel õhtupoolikul huvitavate videoseeriate otsa. Esimene neist oli jQuery’st...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2009/11/modernne-tarkvara-loomine-v-mitu-kasutajakontot-sul-on/' rel='bookmark' title='Permanent Link: Modernne tarkvara loomine V: Mitu kasutajakontot sul on?'>Modernne tarkvara loomine V: Mitu kasutajakontot sul on?</a> <small>Väga lihtne küsimus teile: mitu kasutajakontot sul kokku on? Ma...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2009/04/tarkvara-meistrite-manifest/' rel='bookmark' title='Permanent Link: Tarkvara meistrite manifest'>Tarkvara meistrite manifest</a> <small>Juba mõnda aega on käimas liikumine &#8220;Software Craftsmanship&#8221;, mille algatajaks...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Vahepeal jäi ajaveebi kannete kirjutamiseks vähe aega ning eriti midagi ei ilmunud pikka aega. Kuna uute teemade uurimine ja teiste ajaveebide lugemine ei jäänud tahaplaanile, siis sai jagatud hulgaliselt viiteid huvitavast lugemisest ja üritustest <a href="http://www.facebook.com/SaikuKaizen" target="_blank">Facebooki</a> ja <a href="http://twitter.com/SaikuKaizen" target="_blank">Twitteri</a> kaudu. Kes soovib, siis saab liituda meie <a href="http://www.facebook.com/SaikuKaizen" target="_blank">Facebooki lehega</a> ja <a href="http://twitter.com/SaikuKaizen" target="_blank">Twitteri siutsudega</a>. Kui ise leiate mingeid väärtuslikke viiteid tarkvaraarenduse kohta, siis võite need kenasti meie seinale lisada.</p>
<p>Meeldivat lugemist!</p>


<p>Loe veel sarnasel teemal:<ol><li><a href='http://www.saiku.ee/kaizen/2009/11/oppida-oppida/' rel='bookmark' title='Permanent Link: Õppida, õppida…'>Õppida, õppida…</a> <small>Sattusin ühel õhtupoolikul huvitavate videoseeriate otsa. Esimene neist oli jQuery’st...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2009/11/modernne-tarkvara-loomine-v-mitu-kasutajakontot-sul-on/' rel='bookmark' title='Permanent Link: Modernne tarkvara loomine V: Mitu kasutajakontot sul on?'>Modernne tarkvara loomine V: Mitu kasutajakontot sul on?</a> <small>Väga lihtne küsimus teile: mitu kasutajakontot sul kokku on? Ma...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2009/04/tarkvara-meistrite-manifest/' rel='bookmark' title='Permanent Link: Tarkvara meistrite manifest'>Tarkvara meistrite manifest</a> <small>Juba mõnda aega on käimas liikumine &#8220;Software Craftsmanship&#8221;, mille algatajaks...</small></li>
</ol></p><img src="http://feeds.feedburner.com/~r/saikufeed/~4/8dVyaTqw8lk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.saiku.ee/kaizen/2010/03/kevad-saabus-siutsud-ja-sutsud/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.saiku.ee/kaizen/2010/03/kevad-saabus-siutsud-ja-sutsud/</feedburner:origLink></item>
		<item>
		<title>Aastapäev</title>
		<link>http://feedproxy.google.com/~r/saikufeed/~3/URqaOrRQYng/</link>
		<comments>http://www.saiku.ee/kaizen/2010/03/aastapaev/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 07:00:57 +0000</pubDate>
		<dc:creator>Marek Tihkan</dc:creator>
				<category><![CDATA[Varia]]></category>
		<category><![CDATA[aastapäev]]></category>

		<guid isPermaLink="false">http://www.saiku.ee/kaizen/?p=1092</guid>
		<description><![CDATA[Täna on äärmiselt hea päev, sest Kaizeni ajaveeb on saanud aasta võrra vanemaks. Sama juhtusus ka Priidiku ja endaga – õnnitlused neile kõigile. Tagasi vaadates polnud see aasta üldse paha: avaldatud sai umbes 60 postitust, lugejaid kõigub 90-110 vahel ning avasime ka raamatukogu, et raamatud lihtsalt tolmu ei koguks. Siiski pean endale veidi tuhka pähe [...]


Loe veel sarnasel teemal:<ol><li><a href='http://www.saiku.ee/kaizen/2009/09/otsuste-langetamise-kunst/' rel='bookmark' title='Permanent Link: Otsuste langetamise kunst'>Otsuste langetamise kunst</a> <small>Süsteemide loomisel tuleb igal meeskonnas oleval inimesel viia läbi hulgalisi...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2008/07/pidev-oppimine/' rel='bookmark' title='Permanent Link: Pidev õppimine'>Pidev õppimine</a> <small>Tarkvara arenduses ellujäämiseks on vaja küllaltki palju juurde õppida pärast...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2009/03/it-pole-oluline/' rel='bookmark' title='Permanent Link: IT pole oluline'>IT pole oluline</a> <small>Eelmise aasta sügisel TechEdil kuulates Miha Kralj ettekannet teemal &#8220;How...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Täna on äärmiselt hea päev, sest Kaizeni ajaveeb on saanud aasta võrra vanemaks. Sama juhtusus ka Priidiku ja endaga – õnnitlused neile kõigile.</p>
<p>Tagasi vaadates polnud see aasta üldse paha: avaldatud sai umbes 60 postitust, lugejaid kõigub 90-110 vahel ning avasime ka raamatukogu, et raamatud lihtsalt tolmu ei koguks. Siiski pean endale veidi tuhka pähe raputama, et pole jõudnud kirjutada midagi sel aastal, kuid võtan ennast järjekordselt käsile. Siinkohal võiksitegi anda soovitusi, mis teemadel soovite kirjatükke näha.</p>
<p>Meeldivat edaspidist lugemist!</p>


<p>Loe veel sarnasel teemal:<ol><li><a href='http://www.saiku.ee/kaizen/2009/09/otsuste-langetamise-kunst/' rel='bookmark' title='Permanent Link: Otsuste langetamise kunst'>Otsuste langetamise kunst</a> <small>Süsteemide loomisel tuleb igal meeskonnas oleval inimesel viia läbi hulgalisi...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2008/07/pidev-oppimine/' rel='bookmark' title='Permanent Link: Pidev õppimine'>Pidev õppimine</a> <small>Tarkvara arenduses ellujäämiseks on vaja küllaltki palju juurde õppida pärast...</small></li>
<li><a href='http://www.saiku.ee/kaizen/2009/03/it-pole-oluline/' rel='bookmark' title='Permanent Link: IT pole oluline'>IT pole oluline</a> <small>Eelmise aasta sügisel TechEdil kuulates Miha Kralj ettekannet teemal &#8220;How...</small></li>
</ol></p><img src="http://feeds.feedburner.com/~r/saikufeed/~4/URqaOrRQYng" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.saiku.ee/kaizen/2010/03/aastapaev/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.saiku.ee/kaizen/2010/03/aastapaev/</feedburner:origLink></item>
	</channel>
</rss><!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
