<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Labs &#187; optimizacija</title>
	<atom:link href="http://labs.webdunulis.lt/tag/optimizacija/feed" rel="self" type="application/rss+xml" />
	<link>http://labs.webdunulis.lt</link>
	<description></description>
	<lastBuildDate>Fri, 04 Dec 2009 11:43:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Kaip grafinis paslaugų atvaizdavimas gali pakelti pardavimus</title>
		<link>http://labs.webdunulis.lt/kaip-grafinis-paslaugu-atvaizdavimas-gali-pakelti-pardavimus.html</link>
		<comments>http://labs.webdunulis.lt/kaip-grafinis-paslaugu-atvaizdavimas-gali-pakelti-pardavimus.html#comments</comments>
		<pubDate>Thu, 02 Jul 2009 12:16:07 +0000</pubDate>
		<dc:creator>Mindaugas</dc:creator>
				<category><![CDATA[Dizainas]]></category>
		<category><![CDATA[optimizacija]]></category>
		<category><![CDATA[pardavimai]]></category>
		<category><![CDATA[webapps]]></category>

		<guid isPermaLink="false">http://labs.webdunulis.lt/?p=162</guid>
		<description><![CDATA[Tai puikus pavyzdys, kaip paslaugų pristatymo grafinis sprendimas gali pakelti pardavimus. Internetinių projektų kūrimo lyderė 37signals nusprendė pabandyti &#8220;pažaisti&#8221; su paslaugos Basecamp planų pristatymų, su tiklsu, kad esami klientai pereitų prie brangesnių planų. Tam tikslui nusamdė web dizainerį iš šalies, kad įgautų &#8220;šviežaus oro&#8221;. Kadangi dažnai būna taip, jog ilgai dirbantis prie produkto pradeda nepastebėti [...]]]></description>
			<content:encoded><![CDATA[<p>Tai puikus pavyzdys, kaip paslaugų pristatymo grafinis sprendimas gali pakelti pardavimus. Internetinių projektų kūrimo lyderė <a href="http://www.37signals.com">37signals</a> nusprendė pabandyti &#8220;pažaisti&#8221; su paslaugos Basecamp planų pristatymų, su tiklsu, kad esami klientai pereitų prie brangesnių planų. Tam tikslui <a href="http://www.37signals.com/svn/posts/1771-design-explorations-basecamp-account-screen">nusamdė web dizainerį iš šalies</a>, kad įgautų &#8220;šviežaus oro&#8221;. Kadangi dažnai būna taip, jog ilgai dirbantis prie produkto pradeda nepastebėti tam tikrų niuansų. Kas iš tikrųjų naudinga, tai pats dizaineris gan smulkiai aprašė <a href="http://37signals.com/designexplore/Basecamp_Accounts.html">visą kelią iki naujo grafinio atvaizdavimo sukūrimo.</a></p>
<p><a href="http://labs.webdunulis.lt/wp-content/uploads/2009/07/basecamp.png"><img class="aligncenter size-medium wp-image-163" title="basecamp" src="http://labs.webdunulis.lt/wp-content/uploads/2009/07/basecamp-252x300.png" alt="basecamp" width="252" height="300" /></a></p>
<p><a href="http://www.37signals.com/svn/posts/1787-design-decisions-results-from-the-basecamp-account-screen-redesign">O rezultatai </a>tokie:</p>
<ul>
<li>13% daugiau planų keitimo į aukštesnį per dieną</li>
<li>33% daugiau planų keitimo į &#8220;Plus&#8221; per dieną</li>
<li>8% daugiau uždirbtų $</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://labs.webdunulis.lt/kaip-grafinis-paslaugu-atvaizdavimas-gali-pakelti-pardavimus.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>counterCache įrašų skaičiui saugoti</title>
		<link>http://labs.webdunulis.lt/countercache-irasu-skaiciui-saugoti.html</link>
		<comments>http://labs.webdunulis.lt/countercache-irasu-skaiciui-saugoti.html#comments</comments>
		<pubDate>Mon, 06 Apr 2009 18:24:09 +0000</pubDate>
		<dc:creator>Mindaugas</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[optimizacija]]></category>

		<guid isPermaLink="false">http://labs.webdunulis.lt/?p=121</guid>
		<description><![CDATA[Imkime kaip pavyzdį užduočių valdymo (ToDo) aplikaciją ir norime sužinoti kiek kiekvienoje kategorijoje yra nebaigtų darbų.



CREATE TABLE IF NOT EXISTS `task_categories` &#40;


&#160; `id` int&#40;10&#41; unsigned NOT NULL auto_increment,


&#160; `item_count` int&#40;10&#41; unsigned NOT NULL,


&#160; `name` varchar&#40;32&#41; NOT NULL,


&#160; `created` datetime NOT NULL,


&#160; PRIMARY KEY &#160;&#40;`id`&#41;


&#41; ENGINE=MyISAM &#160;DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


&#160;


CREATE TABLE IF NOT EXISTS `task_items` &#40;


&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Imkime kaip pavyzdį užduočių valdymo (ToDo) aplikaciją ir norime sužinoti kiek kiekvienoje kategorijoje yra nebaigtų darbų.</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">CREATE TABLE <span class="kw1">IF</span> NOT EXISTS `task_categories` <span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; `id` int<span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span> unsigned NOT <span class="kw2">NULL</span> auto_increment<span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; `item_count` int<span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span> unsigned NOT <span class="kw2">NULL</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; `name` varchar<span class="br0">&#40;</span><span class="nu0">32</span><span class="br0">&#41;</span> NOT <span class="kw2">NULL</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; `created` datetime NOT <span class="kw2">NULL</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; PRIMARY <span class="kw3">KEY</span> &nbsp;<span class="br0">&#40;</span>`id`<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span> ENGINE<span class="sy0">=</span>MyISAM &nbsp;<span class="kw2">DEFAULT</span> CHARSET<span class="sy0">=</span>utf8 AUTO_INCREMENT<span class="sy0">=</span><span class="nu0">1</span> <span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">CREATE TABLE <span class="kw1">IF</span> NOT EXISTS `task_items` <span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; `id` int<span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span> unsigned NOT <span class="kw2">NULL</span> auto_increment<span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; `task_category_id` int<span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span> unsigned NOT <span class="kw2">NULL</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; `user_id` int<span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span> unsigned <span class="kw2">default</span> <span class="kw2">NULL</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; `name` varchar<span class="br0">&#40;</span><span class="nu0">128</span><span class="br0">&#41;</span> NOT <span class="kw2">NULL</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; `description` text NOT <span class="kw2">NULL</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; `status` tinyint<span class="br0">&#40;</span><span class="nu0">3</span><span class="br0">&#41;</span> unsigned NOT <span class="kw2">NULL</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; `created` datetime NOT <span class="kw2">NULL</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; PRIMARY <span class="kw3">KEY</span> &nbsp;<span class="br0">&#40;</span>`id`<span class="br0">&#41;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw3">KEY</span> `task_category_id` <span class="br0">&#40;</span>`task_category_id`<span class="sy0">,</span>`user_id`<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span> ENGINE<span class="sy0">=</span>MyISAM &nbsp;<span class="kw2">DEFAULT</span> CHARSET<span class="sy0">=</span>utf8 AUTO_INCREMENT<span class="sy0">=</span><span class="nu0">1</span> <span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>Taigi, turime du modelius &#8211; TaskCategory ir TaskItem.:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> TaskItem <span class="kw2">extends</span> AppModel <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">var</span> <span class="re1">$name</span> <span class="sy0">=</span> <span class="st0">&#39;TaskItem&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">var</span> <span class="re1">$belongsTo</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&#39;TaskCategory&#39;</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="st0">&#39;className&#39;</span> <span class="sy0">=&gt;</span> <span class="st0">&#39;TaskCategory&#39;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="st0">&#39;foreignKey&#39;</span> <span class="sy0">=&gt;</span> <span class="st0">&#39;task_category_id&#39;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#39;counterCache&#39;</span> <span class="sy0">=&gt;</span> <span class="st0">&#39;items_count&#39;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&#39;counterScope&#39;</span> <span class="sy0">=&gt;</span> <span class="st0">&#39;status = 0&#39;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> TaskCategory <span class="kw2">extends</span> AppModel <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">var</span> <span class="re1">$name</span> <span class="sy0">=</span> <span class="st0">&#39;TaskCategory&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">var</span> <span class="re1">$hasMany</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="st0">&#39;TaskItem&#39;</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="st0">&#39;className&#39;</span> <span class="sy0">=&gt;</span> <span class="st0">&#39;TaskItem&#39;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="st0">&#39;foreignKey&#39;</span> <span class="sy0">=&gt;</span> <span class="st0">&#39;task_category_id&#39;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="st0">&#39;dependent&#39;</span> <span class="sy0">=&gt;</span> <span class="kw2">true</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Šiuo atveju žiūrim į TaskItem modelyje &#8216;counterCache&#8217; => &#8216;items_count&#8217; ir &#8216;counterScope&#8217; => &#8217;status = 0&#8242; nustatymus. Pirmasis nurodo lentelės lauką kur bus saugojamas įrašų kiekis, antrasis nurodo, jog skaičiuoti tik tuos, kada TaskItem.active lygus 0 (darbas neatliktas).<br />
Viskas, nuo šiol nereiks atskirai skaičiuoti kiekvienos kategorijos neatliktų darbų kiekio papildomomis užklausomis bei funkcijomis. Tuo pačiu gauname optimizuotą sistemą.<br />
<img src="http://labs.webdunulis.lt/wp-content/uploads/2009/04/screenshot.png" alt="ToDo kategorijos" title="ToDo kategorijos" width="294" height="266" class="alignleft size-full wp-image-127" /></p>
]]></content:encoded>
			<wfw:commentRss>http://labs.webdunulis.lt/countercache-irasu-skaiciui-saugoti.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
