<?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>kreatx blog</title>
	<atom:link href="http://blog.kreatx.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.kreatx.com</link>
	<description>Software company albania</description>
	<lastBuildDate>Fri, 10 May 2013 07:12:00 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>RADE &#8211; Platform e pasur per zhvillimin e shpejt te aplikacioneve ne web</title>
		<link>http://blog.kreatx.com/2013/04/25/rade-platform-e-pasur-per-zhvillimin-e-shpejt-te-aplikacioneve-ne-web/</link>
		<comments>http://blog.kreatx.com/2013/04/25/rade-platform-e-pasur-per-zhvillimin-e-shpejt-te-aplikacioneve-ne-web/#comments</comments>
		<pubDate>Thu, 25 Apr 2013 13:59:46 +0000</pubDate>
		<dc:creator>Avenir Ace Cokaj</dc:creator>
				<category><![CDATA[Application Security]]></category>
		<category><![CDATA[RIA - RADE]]></category>
		<category><![CDATA[Shqip]]></category>
		<category><![CDATA[rade]]></category>

		<guid isPermaLink="false">http://blog.kreatx.com/?p=372</guid>
		<description><![CDATA[RADE Zhvillimet e shpejta ne rritjen e parametrave te teknologjise hardware dhe ne internet duke filluar nga njesite desktop deri tek pajisjet mobile kane sjelle nje kerkese te larte per aplikacione te pasura ne web. Ndryshimi i shpejt i kalimit nga aplikacionet tradicionale te perdorura ne desktop, ne nevojat e perdorimit te tyre ne web &#8230;<br/><a href="http://blog.kreatx.com/2013/04/25/rade-platform-e-pasur-per-zhvillimin-e-shpejt-te-aplikacioneve-ne-web/">Read more <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<h1 style="text-align: center;">RADE</h1>
<p>Zhvillimet e shpejta ne rritjen e parametrave te teknologjise hardware dhe ne internet duke filluar nga njesite desktop deri tek pajisjet mobile kane sjelle nje kerkese te larte per aplikacione te pasura ne web. Ndryshimi i shpejt i kalimit nga aplikacionet tradicionale te perdorura ne desktop, ne nevojat e perdorimit te tyre ne web ka krijuar nje boshllek te madh. Mungesa e infrastruktures se teknologjive per realizimin e aplikacioneve per web ka sjelle nevojen e nderhyrjes duke nxitur shume aktore ne krijimin e framework-eve dhe shtesave-pershtatese per anashkalimin e te metave te mbartura nga HTML dhe JavaScript. Ne keto kushte, lindi nevoja per dicka te re e moderne qe sjell eksperience te njejte me programet ne desktop. RIA (Rich Internet Applications &#8211; Aplikacione te Pasura ne Web) ka sjelle nje risi ne kete aspekt dhe ploteson ate boshllek te krijuar. Mbetet akoma problemi i ndarjes se dy boteve. Nga njera ane jane HTML dhe JavaScript qe interpretohen ne kohe reale dhe jane lehtesisht te integrueshme me gjuhet sever-side, ndersa nga ana tjeter metoda e re RIA e cila eshte komplet bote me vete dhe ka menyre tjeter pune. Ne menyre qe te kemi te mirat e te dyja boteve ne nje ambjent te vetem ne kemi krijuar nje framework qe mundeson pikerisht kete. Zgjidhja qe ne ofrojme perpiqet te lehtesoje dhe pershpejtoje menyren e punes, duke mundesuar njekohesisht fuqine dhe avantazhet e RIAs. Framework-u qe ne kemi ndertuar, pervec infrastructures dhe praktikave te gatshme qe ofron, eshte i konceptuar edhe si nje gjuhe programimi e cila ka nderfaqen, librarite dhe sintaksen e vete specifike te kodimit.</p>
<p>&nbsp;</p>
<p>Teknologjia per programimin e aplikacioneve si ne desktop ashtu edhe per web ka evoluar dhe eshte permiresuar gjithnje. Teknologjia per desktop eshte e qendrueshme dhe me rritjen e kapaciteteve hardware-ike, kriteret e detyrueshme te sistemit jane bere te paperfillshme. Nga ana tjeter teknologjia per web edhe pse ka patur zvillimet e veta vazhdon te trashegoje problemet e vjetra dhe ka ngelur prapa. Kerkesa per aplikacione ne web eshte gjithnje ne rritje te vazhdueshme. Aq me shume eshte ne rritje zevendesimi i programeve desktop dhe kalimi i tyre ne aplikacione per web.</p>
<p>Gjuhet e programimit masivisht te perdorura per web akoma edhe sot mbeten HTML dhe JavaScript te cilat qe nga fillimet e veta e deri me sot vazhdojne te mbartin te njejtat dobesi si:</p>
<ul>
<li>Interpretimi i ndryshem ne shfletues te ndryshem</li>
<li>Mungesa e struktures ne gjuhe dhe veshtiresia per tu zgjeruar</li>
<li>Mirembajtja e vazhdueshme per cdo version te shfletuesve</li>
<li>etj.</li>
</ul>
<p>Me bumin e perdorimit te internetit nga sektori i biznesit dhe kerkesat gjithnje ne rritje per aplikacione qe lehtesojne proceset e perditshme, ka lindur nevoja per te krijuar shume framework per HTML dhe JavaScript per te tejkaluar veshtiresite e permenduara me siper. Keto framework jane perpjekur gjithnje te minimizojne keto te meta qe ta bejne procesin e programimit ne web te ngjashem me ate per dekstop. Gjithashtu ato mundohen ti bejne keto gjuhe te ngjasojne nga perparesite me gjuhet e tjera te programimit, te mirestrukturuara, qe perdoren per aplikacionet ne desktop. Pas shume perpjekjesh me framework te ndryshem akoma nuk kishim dicka te mire per te arritur uniformitetin dhe lehtesine qe te ofrojne gjuhet e mirefillta te programimit qe perdoren per te realizuar sisteme te medha.</p>
<p>Si pasoje pati nje levizje te fuqishme ne zhvillimin e tekonologjive RIA (Rich Internet Applications – Aplikacione te Pasura ne Web) te cilat mundesojne, ne web, pothuajse te gjitha avantazhet, fuqine dhe lehtesite qe ofrojne teknologjite e perdorura per desktop. Ne krye te RIAs vazhdon te udheheqe Apache Flex me gjuhe programimi ActionScript e percjelle ne cdo browser nga makina virtuale Flash Player. ActionScript eshte nje gjuhe e maturuar qe zbaton standartet me moderne te vendosura nga ECMA Script (nga e cila derivon edhe JavaScript) dhe ofron nje menyre pune te mirestrukturuar ashtu si gjuhet e tjera per desktop. Nga ana tjeter fuqia e vertet e gjuhes shpaloset nepermejet Flash Player i cili ofron nje ambjent shume te qendrueshem cross-platform dhe cross-browser. Outputi perfundimtar qe nxjerr Apache Flex eshte i jashtezakonshem por krahasuar me HTML dhe JavaScript ka disavantazhet e veta. Nje nga dobesite e Apache Flex eshte fakti qe per cdo ndryshim, sado te vogel, duhet te kompilohet i gjithe aplikacioni dhe kjo konsumon kohe dhe nuk eshte praktike e mire pune. Gjithashtu aplikacionet e ndertuar me Apache Flex jane te pa-integruara me gjuhe programimi per server, nderkohe qe ne HTML dhe JavaScript kjo mundesi ekziston. Pervec avantazheve qe ka secila metode mbi tjetren, te dyja teknologjite jane te varfera ne komponentet e avancuar qe ofrojne. Fakti qe aplikacionet e biznesit kerkojne shume nderfaqe per hyrjen e te dhenave apo shfaqjen e informacionit, kerkon qe te kodohen komponente shume te ngjashem here pas here te cilat po ashtu konsumojne shume kohe dhe kjo e forcon akoma me shume nevojen per dicka me te mire.</p>
<p>Duke bere nje permbledhje te asaj cfare u tha me lart, ne perballemi me dy bote, ne prapaskene shume te ndryshme, qe mundohen te arrijne nje rezultat te ngjashem, por me menyra krejt te ndryshme. Si zgjidhje e afrimit te ketyre dy boteve ne prezantojme RADE (Rapid Application Development Evolved – Platforme e Permiresuar Per Zhvillimin e Shpejt te Aplikacioneve), platforma qe ne kemi krijuar. Zgjidhja jone perpiqet te unifikoje avantazhet e te dyja boteve ne nje platforme te vetme duke u bazuar ne mundesite dhe nderfaqet mahnitese qe ofron tekonologjia Flash. Perparesite dhe kerkesat qe platforma jone ploteson jane:</p>
<p>1-      Nderfaqe web e njejte ne cdo shfletues interneti</p>
<p>2-      Shmangia e procesit te kompilimit paraprak</p>
<p>3-      Gjuhe programimi me sintax te thjesht te ngjashme me javascript</p>
<p>4-      Shpejtesi me e madhe ne ndertimin e aplikacioneve te biznesit</p>
<p>5-      Ofron komponente te gatshme per te ndihmuar programimin e shpejt</p>
<p>6-      Nevoja minimale stilimi grafik per aplikacione biznesi</p>
<p>7-      E zgjerueshme dhe e pershtatshme per nderfaqe intuitive dhe mahnitese</p>
<p>8-      Lidhja me gjuhe programimi ne pjesen server si PHP, ASP, JSP etj&#8230;</p>
<p>9-      E vogel ne madhesi per te konsumuar sa me pak bandwidth interneti</p>
<p>10-   Perdorimi i kapaciteteve te shfletuesve te internetit ne nje nivel me te larte se gjuhet standarte</p>
<p>11-    Mundeson aktivitete si “videoconference”, “screensharing”, lidhje “peer-to-peer” te cilat rritin bashkepunimin ne kolektiv</p>
<p>12-   Vete-gjenerim i kodit duke u bazuar nga tabelat qe ndodhen ne bazen e te dhenave dhe anasjellatas</p>
<p>13-   E thjesht qe te mesohet nga te gjithe ata qe kane njohuri minimale te programimit ne web</p>
<p>14-   E shkurton kohen e programimit me 30% &#8211; 50%</p>
<p>&nbsp;</p>
<p>Eksperienca shumevjecare e secilit pjesetar me teknologji te ndryshme solli nje liste deshirash dhe sugjerimesh per te na lehtesuar zhvillimin e aplikacioneve. Pike se pari nevojitej nje teknologji e avancuar qe i perballon kerkesat dhe fleksibilitetin e tregut. Se dyti kjo platforme duhet te jete e lehte per programuesit ne menyre qe te kurseje kohen e zhvillimit, duke ulur kostot. Se fundmi duhet ti rezistoje kohes dhe te jete lehtesisht e zgjerueshme. Pra duke patur pikesynime te qarta vendosem te ndertonim kete platforme qe zgjidh problemet tona te perditshme duke revolucionalizuar menyren e zhvillimit te programeve per web.</p>
<p>Platforma RADE eshte bazuar ne teknologjine FLASH dhe percakton nje sere komponentesh per te krijuar nderfaqe perdorimi moderne dhe sa me interaktive por gjithashtu edhe nje gjuhe programimi “Tag based” e cila mundeson aksesimin e komponenteve dhe modifikimin e pamjes se tyre ne varesi te nderveprimit te perdoruesve.</p>
<p>Komponentet GUI mund te ndertohen dhe stilohen me ane te “Tag”-eve XML te percaktuara por gjithashtu edhe ne menyre dinamike me ane te pjeseve te kodit te cilat nderfuten ne “Tag”-et &lt;script&gt; njesoj si ne HTML. Keto pjese kodi i permbahen sintakses te ECMA Script 4 – e thene me thjesht: Javascript me klasa te mirefillta dhe hapesira emerimi (namespaces). Ky skript interpretohet dhe kompilohet ne moment sipas teknikes JIT (just-in-time) e cila kryen optimizime te kodit para se ai te ekzekutohet. Intepretimi ne kohe reale mundeson integrimin me gjuhe programimi server-side sipas deshires se programuesit psh: PHP, ASP.NET, JSP.</p>
<p>Pra RADE eshte me teper se nje gjuhe programimi pasi pervecse ofron komponente te avancuara dhe sintakse intuitive, inkurajon dhe mbeshtet programuesit te perdorin teknikat me te fundit ne fushen e programimit ne web, duke i bere me efektiv dhe eficient ne punen e tyre dhe duke i lejuar ata te perqendrohen ne llogjiken e biznesit.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kreatx.com/2013/04/25/rade-platform-e-pasur-per-zhvillimin-e-shpejt-te-aplikacioneve-ne-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kursoret ne MYSQL</title>
		<link>http://blog.kreatx.com/2012/12/04/kursoret-ne-mysql/</link>
		<comments>http://blog.kreatx.com/2012/12/04/kursoret-ne-mysql/#comments</comments>
		<pubDate>Tue, 04 Dec 2012 12:23:01 +0000</pubDate>
		<dc:creator>eprifti</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://blog.kreatx.com/?p=360</guid>
		<description><![CDATA[Problemi : Perpunimi i te dhenave te vijne nga shume tabela te ndryshme. Ne rastin kur duam qe keto te dhena ti perpunojme rresht per rresht, ose duam te veprojme vetem mbi nje apo disa rreshta specifike, mund te na vije ne ndihme nje query e tejzgjatur  ose nje loop (p.sh.  while) me nje forme &#8230;<br/><a href="http://blog.kreatx.com/2012/12/04/kursoret-ne-mysql/">Read more <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><strong>Problemi : Perpunimi i te dhenave te vijne nga shume tabela te ndryshme.</strong></p>
<p>Ne rastin kur duam qe keto te dhena ti perpunojme rresht per rresht, ose duam te veprojme vetem mbi nje apo disa rreshta specifike, mund te na vije ne ndihme nje query e tejzgjatur  ose nje loop (p.sh.  while) me nje forme specifike inkrementimi. Performanca e ulet.</p>
<p><strong>Zgjidhja: Kursoret</strong></p>
<p><strong>Cfare jane kursoret</strong></p>
<p>Kursoret jane nje strukture kontrolli qe mundesojne shetitjen neper elementet e bazes se te dhenave.  Kursoret perdoren nga programuesit e bazave te te dhenave per te perpunuar te dhenat qe vijne si rezultat i query-ve, qe dergojme  ne bazen e te dhenave. Njesoj sikur ti perpunoje te dhenat me ane te nje loop-i. Kursoret mund te perdoren brenda stored procedures, stored functions.</p>
<p>Karakteristikat e kursoreve jane:</p>
<p>Jo te ndjeshem (asensitive): Nuk mund te krijojne kopje te tabeles.</p>
<p>Vetem te lexueshem (read only): Kursori nuk mund te behet update.</p>
<p>Jo e shkallezueshme (non scalable): Kursori shetit vetem ne nje drejtim dhe nuk mund te kaperceje ndonje rresht.</p>
<p><strong>Perdorimi i tyre (sintaksa dhe shembull)</strong></p>
<p>Me poshte jepet shembulli i procedures se <strong>usp_GetStudenti</strong>, versioni me kursore.</p>
<p>Per te testuar shembullin duhet krijuar paraprakisht edhe tabela liste_emrash.</p>
<p>CREATE TABLE liste_emrash (emri VARCHAR(20), mbiemri VARCHAR(20))</p>
<p>Ne shembull jepen 5 elementet qe perbejne kursorin.</p>
<p>&nbsp;</p>
<p><a href="http://blog.kreatx.com/wp-content/uploads/2012/12/kodi.png"><img class="alignnone size-medium wp-image-364" title="kodi" src="http://blog.kreatx.com/wp-content/uploads/2012/12/kodi-300x115.png" alt="" width="300" height="115" /></a></p>
<p>&nbsp;</p>
<p>Ne shembullin me siper eshte perzgjedhur CONTINUE HANDLER i cili percakton sjelljen ne rastin kur mberrijme ne fund te te dhenave te query-t. Ne nje rast te tille, dilet nga loop-i dhe ekzekutimi vazhdon me tej.</p>
<p>Handler te tjere jane:</p>
<p>EXIT HANDLER i cili kur plotesohet kushti ben nderprejen e ekzekutimit te bllokut</p>
<p>BEGIN</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>END</p>
<p>UNDO HANDELR nuk suportohet ende.</p>
<p>Ekzekutojme proceduren:</p>
<p>CALL universiteti.ups_GetStudentetEmri</p>
<p>Rezultati i ekzekutimit te procedures eshte tabela universiteti.liste-emrash</p>
<p>&nbsp;</p>
<p><a href="http://blog.kreatx.com/wp-content/uploads/2012/12/rezultati.png"><img class="alignnone size-full wp-image-365" title="rezultati" src="http://blog.kreatx.com/wp-content/uploads/2012/12/rezultati.png" alt="" width="161" height="109" /></a></p>
<p>&nbsp;</p>
<p><strong>Avantazhe</strong></p>
<p>Kursoret, kane perdorim kryesor kur duam te kapim nje rresht te caktuar ose disa rreshte nje nga nje.</p>
<p>Jane efikase pasi me kursoret mund te kryesh veprime pa pasur nevojen e querive komplekse me shume INNER JOIN.</p>
<p><strong>Disavantazhe</strong></p>
<p>Kursori eshte me i shpejte se loop-i while por krijon me teper overhead ne bazen e te dhenave.</p>
<p>Kursori i kap rreshtat nga baza e te dhenave nje e nga nje, ndaj nese kemi shume te dhena edhe koha e ekzekutimit do te me e madhe.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kreatx.com/2012/12/04/kursoret-ne-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mobile Development &#8211; Cfare duhet te dini</title>
		<link>http://blog.kreatx.com/2012/11/19/mobile-development/</link>
		<comments>http://blog.kreatx.com/2012/11/19/mobile-development/#comments</comments>
		<pubDate>Mon, 19 Nov 2012 16:28:00 +0000</pubDate>
		<dc:creator>Eriketa Sinanaj</dc:creator>
				<category><![CDATA[Analysis and Opinions]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.kreatx.com/?p=350</guid>
		<description><![CDATA[Ne vargun e epokave te ndryshme qe ka njohur zhvillimi i njerezimit, kjo qe po jetojme eshte pa dyshim Epoka e Komunikimit. Sot, bota eshte me e vogel se kurre pikerisht fale mrekullise Internet. Cdo dite, pavaresisht ku shkojme apo cfare bejme, nuk jemi asnjehere vetem sepse nepermjet teknologjise ne mund te jemi ne kontakt &#8230;<br/><a href="http://blog.kreatx.com/2012/11/19/mobile-development/">Read more <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Ne vargun e epokave te ndryshme qe ka njohur zhvillimi i njerezimit, kjo qe po jetojme eshte pa dyshim Epoka e Komunikimit. Sot, bota eshte me e vogel se kurre pikerisht fale mrekullise Internet. Cdo dite, pavaresisht ku shkojme apo cfare bejme, nuk jemi asnjehere vetem sepse nepermjet teknologjise ne mund te jemi ne kontakt te vazhdueshem me kedo, kudo qofte. Eshte tashme nje fakt qe perdorimi i smartphone-ve dhe tabletave eshte gjithmone ne rritje dhe parashikohet te vazhdoje me keto ritme per nje kohe te gjate. Tanime telefonat “inteligjente” po behen nje alternative konkurruese e kompjuterave personale dhe po fitojne terren bindshem.</p>
<p>Por a keni qene ndonjehere te detyruar te vizitoni versionin desktop te nje faqeje interneti vetem sepse telefoni juaj nuk “arrin” ta aksesoje kete faqe? Ky ne fakt jo gjithmone eshte nje limit i pajisjes suaj mobile, por shpesh nje mungese e site-it qe po perpiqeni te vizitoni i cili nuk ofron versionin perkates mobile. Kjo eshte edhe nje nga sfidat dhe njekohesisht nje nga qellimet kryesore te zhvilluesve Web te gjendur perballe nje ndryshimi radikal ne menyren sesi njerezit sot aksesojne Internetin duke reduktuar deri braktisur teresisht metodat dhe mjetet tradicionale (si PC).  Perdoruesit e ketyre pajisjeve inteligjente, presin me te drejte qe te mund te kryejne po te njejtat veprime si me nje PC normal. Kjo ka bere qe nje nga fushat kryesore te botes se zhvillimeve Web te behet pikerisht zhvillimi Web per Mobile duke komplikuar punen e programuesve te cilet jane te detyruar  te programojne versione ne miniature, shume te reduktuar ne permasa por sa me pak te reduktuar ne funksionalitete per t’i ofruar perdoruesve nje sherbim sa me te plote.</p>
<p>Nje website mund te jete:</p>
<ol>
<li>I shikueshem ne mobile: ne kete rast perdoruesi viziton ne fakt versionin desktop te faqes nga nje pajisje mobile dhe gjithcka funksionon po njesoj por kete here nga nje ekran i vogel.</li>
<li>I pershtatshem per mobile: ne kete rast krijohet nje site i cili eshte i afte t’i pershtatet pajisjeve me cdo lloj permasash nga ana vizuale por jo plotesisht nga ajo funksionale.</li>
<li>I dedikuar per mobile: ketu per te njejtin site krijohen dy apo me shume versione totalisht te pavarur nga njeri tjetri.</li>
</ol>
<p>Version i fundit, ndonese me i komplikuari,  ne fakt eshte ai me i preferuari pasi pavaresia midis versioneve i jep mundesi programuesve qe te zgjerojne gamen e funksionaliteteve qe do t’i ofrohen perdoruesve te pajisjeve mobile.</p>
<p>Perpara se te krijojne nje nderfaqe per mobile, programuesit duhet te marrin parasysh nje sere faktoresh nder te cilet faktin qe pedoruesit potenciale do te kene ne dispozicion nje pajisje me nje keyboard (tastiere) shume me te vogel, ekrane touchscreen si dhe nje memorie dhe burim energjie shume me te limituar te cilet i kushtezojne ata ne krijimin e nje nderfaqeje sa me te “lehte”, pra me sa me pak elemente mbingarkues (si imazhet, animimet etj.).</p>
<p>Eksperienca e akumuluar vitet e fundit nga perdorimi i pajisjeve mobile, ka evidentuar nje seri pikash ne forme keshillash qe prodhuesit e ketyre pajisjeve u ofrojne sot programuesve Mobile:</p>
<ol>
<li>Fokusohuni ne eksperiencen e perdoruesit: Eshte thelbesore t’i jepet rendesia e duhur mendimit te perdoruesve te cilet jane dhe konsumatoret finale te ketij lloj produkti. Duhet treguar kujdes qe perdoruesi te mos “bombardohet” me informacion te zgjeruar me shume sec duhet dhe me shume se sa kerkohet por nepermjet nje nderfaqeje sa me te thjeshte t’i ofrohet atij informacioni i kerkuar ne nje kohe sa me te shkurter. Gjithashtu sugjerohet qe te perdoret gjeresisht nje aplikacion qe identifikon veprimet e kryera dhe informacionet e aksesuara se fundmi nga cdo perdorues duke ua ofruar atyre ne formen e Bookmarks ne te ardhmen. Kjo metode shkurton kohen dhe i vjen ne ndihme perdoruesit duke i krijuar mjaft lehtesira gjate lundrimit ne Web.</li>
<li>Pershtasni nderfaqen me kapacitetin e memories se pajisjes: Te mesuar te programojne per kompjutera me memorie te rangut 8GB, shpesh programuesit nuk i kushtojne vemendjen e duhur perdorimit te tepruar te imazheve. Ne rastin e telefonave, te detyruar te programojne per keto pajisje memoria e te cilave mund te jete edhe 128MB, programuesit duhet te reduktojne sa me shume perdorimin e imazheve dhe per imazhet e nevojshme, te reduktojne rezolucionin e tyre. Nuk eshte e keshillueshme perdorimi i elementeve te tille vizuale madhesia e te cileve shpesh rrezikon te tejkaloje kufijte e kapacitetit te pajisjes duke i ofruar nje eksperience te papelqyeshme perdoruesve.</li>
<li>Zgjidhni nese eshte me mire te perdoret nje aplikacion i shkarkueshem apo i perdorshem nga Web: Kjo eshte nje nga zgjedhjet kryesore per rastet e zhvillimeve te aplikacioneve mobile. Ne pergjithesi, nje aplikacion i ndertuar per t’u aksesuar nga web browser-at e pajisjeve mobile eshte me pak i kushtueshem dhe me pak kompleks por nga ana tjeter eshte me e veshtire ta pershtasesh ate plotesisht me vecorine e ekraneve te ketyre pajisjeve, ajo touchscreen.</li>
<li>Sinkronizoni te dhenat ne server-side: Kjo eshte nje keshille shume e rendesishme e cila parandalon moskorrektesine e te dhenave. Nje sinkronizim i te dhenave nga ana mobile do te ulte sigurine duke rritur rrezikun e gjenerimit te te dhenva te gabuara.</li>
<li>Dizenjoni nje nderfaqe “te prekshme”: Pershtatjuni sa me shume eksperiences qe telefonat inteligjente i kane ofruar perdoruesve nepermjet nje nderfaqeje shume te qarte dhe te pershtatshme per touchscreen.</li>
<li>Parashikoni gabimet: “Te gabosh eshte njerezore” prandaj jo rralle do te ndodhe qe eshte perdoruesit e aplikacionit apo faqes suaj mobile te gabojne ne shtypjen e nje butoni apo vendosjen e gabuar te nje informaconi. Produkti juaj duhet te jete i pergatitur per kete duke ofruar nje shkalle te tille tolerance qe i lejon perdoruesit te zhbej nje veprim pa kthyer mbrapsht nje pjese te madhe te informacionit te derguar deri ne ate moment.</li>
</ol>
<p>&nbsp;</p>
<p>Kurse eksperienca e programuesve Mobile, ofron nje liste te platformave me te pershtatshme per te programuar nje aplikacion mobile:</p>
<ol>
<li>MoSync: Bazuar ne Eclipse IDE, suporton JavaScript, Ruby, Python, PHP etj</li>
<li>PhoneGap: Perdor JavaScript dhe HTML</li>
<li>WidgetPad: CSS3, HTML5, JavaScript</li>
<li>Appcelerator: JavaScript, PHP, Python, Ruby, HTML</li>
<li>RhoMobile: Ofron Rhodes, nje framework open source te bazuar ne gjuhen Ruby dhe qe pershtatet per nje game te  gjere pajisjesh mobile. Sistemet e Operimit qe suporton jane: iOS, Android, Wondows Mobile, RIM dhe Symbian. Ky framework ju lejon te shkruani kodin tuaj dhe pastaj nderton aplikacionet perkatese te pershtatshme per sistemet me te medha dhe me te perdorshme si ato te permendura me siper.</li>
<li>JQuery Mobile – Ndoshta framework-u me i perdorshem dhe me i perhapur. Bazohet ne parimin “Write less, do more” per t&#8217;i dhene programuesve lehtesira te medha duke bere qe nje aplikacion i vetem te jete i pershtatshme per gjithe pajisjet mobile me te njohura.</li>
</ol>
<p>&nbsp;</p>
<p>Ne kete liste perfshihen edhe framework te tjere jo me pak te rendesishem dhe optimale si: Sencha Touch Framework, jQTouch, The M Project etj.</p>
<p>Rendesia qe po merr ky aspekt i programimit po rritet cdo dite prandaj edhe ju duhet te parashikoni ne cdo aplikacion apo web page edhe versionin perkates te pershtatshem per miqte e rinj me te mire te njeriut: telefonat.</p>
<p>E ardhmja eshte Mobile!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kreatx.com/2012/11/19/mobile-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stored Procedure</title>
		<link>http://blog.kreatx.com/2012/11/19/stored-procedure/</link>
		<comments>http://blog.kreatx.com/2012/11/19/stored-procedure/#comments</comments>
		<pubDate>Mon, 19 Nov 2012 15:21:32 +0000</pubDate>
		<dc:creator>eprifti</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://blog.kreatx.com/?p=339</guid>
		<description><![CDATA[Problemi : Marrja e disa zerave (fushave) nga baza e te dhenave. Ne shume raste per kete mjafton nje query te cilen e ekzekuton dhe ja tek ke rezultatin e kerkuar. Ne raste te tjera nje zgjidhje e tille do te ishte primitive (numri i fushave te kerkuara eshte i konsiderueshem, per te kapur fushat &#8230;<br/><a href="http://blog.kreatx.com/2012/11/19/stored-procedure/">Read more <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><strong>Problemi : Marrja e disa zerave (fushave) nga baza e te dhenave.</strong></p>
<p>Ne shume raste per kete mjafton nje <em>query</em> te cilen e ekzekuton dhe ja tek ke rezultatin e kerkuar. Ne raste te tjera nje zgjidhje e tille do te ishte primitive (numri i fushave te kerkuara eshte i konsiderueshem, per te kapur fushat e duhura kerkohen disa INNER JOIN, kjo query perseritet shpesh), pasi per sasi te konsiderueshme te dhenash  do te kishim nje pergjigje + te vonuar.</p>
<p><strong>Zgjidhja: Stored Procedure</strong></p>
<p>&nbsp;</p>
<p><strong>Stored Procedure</strong></p>
<p><strong>Cfare eshte nje <em>Stored Procedure</em>?</strong></p>
<p>Nga vete emri: nje procedure (nje pjese kodi qe ndervepron me bazen e te dhenave SELECT, INSERT, DELETE, UPDATE) ne SQL qe ruhet ne bazen e te dhenave. <em>Stored Procedure</em> mund te ktheje nje set te dhenash (si rezultat i nderveprimit me bazen e te dhenave), mund te kete disa variabla te deklaruar per procesimin e te dhenave si edhe mund te marre disa parametra (variabla) dhe te ktheje nje rezultat apo variablat e perpunuar.</p>
<p><strong>Organizimi</strong></p>
<p>Perpara se te fillohet ndertimi i <em>Stored Procedure </em>eshte mire te percaktohet nje strukture organizimi. Kjo do te lehtesonte aksesimin e procedurave dhe do e bente me te lehte riperdrimin e tyre.</p>
<p>Perdor nje parashtese qe te identifikoje se file eshte nje stored procedure. Vendos nje emer qe percakton veprimin qe do te kryej procedura bashkengjitur me bazen e te dhenave me te cilen do bashkeveproje.</p>
<p>&nbsp;</p>
<pre>mysp_GetEmriPerdoruesi.sql</pre>
<p>&nbsp;</p>
<p>E njejta logjike eshte mire te ndiqet edhe ne krijimin e variablave, parametrave dhe funksioneve te tjera qe perdoren ne brendesi te procedures.</p>
<p>Te jene letesisht te kuptueshme!</p>
<p><strong>Sintaksa &amp; Shembull</strong></p>
<p>Le te vrasim dy zogj me nje gur apo per ata qe jane fan te PETA ne facebook me nje rruge te bejme dy pune. Le te shpjegojme elementet e sintakses se nje <em>Stored Procedure</em> me ane te nje shembulli konkret funksional.</p>
<p>Per te testuar kete shembull do ju duhet te krijoni me pare:</p>
<p>Bazen e te dhenave :</p>
<pre>CREATE DATABASE universiteti</pre>
<p>&nbsp;</p>
<p>Tabelen:     me fushat  dhe te dhenat si me poshte.</p>
<pre>CREATE TABLE studenti

(ID int (50) auto_increment primary key,

klasa_id int (10),

emri varchar(20),

mbiemri varchar(20))</pre>
<p>&nbsp;</p>
<p>Popullojme tabelen me disa te dhena.</p>
<pre>INSERT INTO studenti (klasa_id,emri,mbiemri)

VALUES(1,"emri1","mbiemri1"),(1,"emri2","mbiemri2"),

(2,"emri3","mbiemri3"),(2,"emri4","mbiemri4"),(1,"emri5","mbiemri5")</pre>
<p>&nbsp;</p>
<p><a href="http://blog.kreatx.com/wp-content/uploads/2012/11/shembullstored-procedure.png"><img class="alignnone size-medium wp-image-340" title="shembull(stored-procedure)" src="http://blog.kreatx.com/wp-content/uploads/2012/11/shembullstored-procedure-300x122.png" alt="" width="300" height="122" /></a></p>
<p>(kliko per te pare shembullin ne permasa te plota)</p>
<p>DELIMITER $$ à nuk eshte pjese e stored procedure. Kjo komande ndryshon delimiterin nga ; ne $$ ne menyre qe brenda stored procedure te mund te perdorim disa query te ndara me ; .</p>
<p>INà me ane te ketij parametri i jep vlera <em>stored procedure</em> (eshte tipi <em>default</em>).</p>
<p>OUTà me ane te ketij lloj parametri vetem marrim te dhena nga procedura.</p>
<p>INOUTà dergon dhe merr vlera nga <em>stored procedure</em>.</p>
<p><strong>Perdorimi </strong></p>
<p>Mbasi kemi ruajtur <em>Stored Procedure-n</em> ne bazen e te dhenave kemi mundesi ta perdorim ate, ne menyre te drejtperdrejte ose nepermjet nje <em>statement-i</em>, <em>Stored Procedure</em>, apo funksioni tjeter, ne varesi te rezultatit final qe kerkojme.</p>
<pre>CALL  emri _i_procedures();</pre>
<pre></pre>
<p>Per proceduren e shembullit:</p>
<pre>CALL  ups_GetStudentet(1);</pre>
<p><strong>Perfudime (Avantazhe te tjera)</strong></p>
<p>Eshte nje forme e shpejte per aksesimin dhe perpunimin e informacionit te bazes se te dhenave.</p>
<p>Paraprakisht (perpara se ta therrasesh) duhet ruajtur ne bazen e te dhenave.</p>
<p><em>Stored Procedure</em> na krijojne mundesine e riperdorimit te kodit. Per te optimizuar kete riperdorim krijo dhe ndiq nje strukture organizative tenden.</p>
<p>Rritet performanca pasi kompilimi realizohet vetem nje here dhe me pas riperdoret pa patur nevoje per kompilim.</p>
<p>Rrit sigurine e bazes se te dhenave. Pasi ju jep perdoruesve te drejte per perdorimin e nje procedure pa ndryshuar te drejtat e aksesimit te tabelave.</p>
<p>Ul trafikun client-server ne bazen e te dhenave.</p>
<p>&nbsp;</p>
<p>Si duhet te vendosesh nese duhet ta perdoresh apo jo. Nese te duhet te realizosh nje transaksion te thjeshte qe do te ekzekutohet vetem nje here, atehere <em>Stored Procedure</em> jo vetem eshte e panevojshme por dhe nje kohe e humbur pasi nuk do te ndikonte ne rritjen e performances. Ne te kundert <em>Stored Procedure</em> eshte zgjidhja e duhur.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kreatx.com/2012/11/19/stored-procedure/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Social Business oriented Rich Internet Applications</title>
		<link>http://blog.kreatx.com/2012/11/15/social-business-oriented-rich-internet-applications/</link>
		<comments>http://blog.kreatx.com/2012/11/15/social-business-oriented-rich-internet-applications/#comments</comments>
		<pubDate>Thu, 15 Nov 2012 09:28:43 +0000</pubDate>
		<dc:creator>Avenir Ace Cokaj</dc:creator>
				<category><![CDATA[Analysis and Opinions]]></category>
		<category><![CDATA[Conference]]></category>
		<category><![CDATA[Presentations]]></category>
		<category><![CDATA[Seminars]]></category>
		<category><![CDATA[Social Business]]></category>
		<category><![CDATA[cross departament collaboration]]></category>
		<category><![CDATA[decision making customers]]></category>
		<category><![CDATA[horizontal collaboration]]></category>
		<category><![CDATA[online security]]></category>
		<category><![CDATA[Ria]]></category>
		<category><![CDATA[stimulim i punonjesve]]></category>
		<category><![CDATA[suksesi dhe deshtimi i kompanive]]></category>
		<category><![CDATA[vetical collaboration]]></category>

		<guid isPermaLink="false">http://blog.kreatx.com/?p=325</guid>
		<description><![CDATA[Social Business is a recent term and a new-quite-promising-trend improving the way companies function and generate value for all the components (stakeholders, employees, customers, partners, and suppliers). Social software, as the name implies, is the interaction of people in friendlier environment that has ease of use, rich functionality that facilitates navigation, quick information that is &#8230;<br/><a href="http://blog.kreatx.com/2012/11/15/social-business-oriented-rich-internet-applications/">Read more <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://blog.kreatx.com/wp-content/uploads/2012/11/Slide12-1.png"><img class="alignleft  wp-image-332" style="margin-right: 10px; margin-bottom: 10px;" title="Slide12-1" src="http://blog.kreatx.com/wp-content/uploads/2012/11/Slide12-1.png" alt="" width="349" height="262" /></a>Social Business is a recent term and a new-quite-promising-trend improving the way companies function and generate value for all the components (stakeholders, employees, customers, partners, and suppliers). Social software, as the name implies, is the interaction of people in friendlier environment that has ease of use, rich functionality that facilitates navigation, quick information that is simply digested and most importantly a place where people want to come back. While the social media evolved, technologies that accessed that media evolved as well. Now we have entirely new way people access information, but also a new way people want to digest that information.</p>
<p>Many companies have begun exploring and quickly absorbing this new perspective of doing software that is more suitable for common user and also much more attractive for any user in general. A common philosophy that is leading most successful organizations today is “&#8230;technology that businesses need and people love”( Steve Ballmer . 2012).</p>
<p>Social Business are those organizations that have setup the strategies, technologies and procedures to involve regularly and in a systematic order everyone in its ecosystem of employees, customers, partners, suppliers and all other constituents to maximize the co-created value.</p>
<p>Historically organizations have had a separation between the inside and outside environments of a company, which is losing importance. In addition, traditionally the ideas came from inside of the organization pushed out to the markets. This new trend is shifting things around where people (customers and employees) are interacting more-and-more with social enhanced and social integrated technologies such as:</p>
<p>&nbsp;</p>
<p>-          Social software communication</p>
<ul>
<li>Rich Internet Applications</li>
<li>Social posts and comments</li>
<li>Blog articles and reactions</li>
<li>Chatting systems</li>
<li>E-mails communication</li>
<li>Social Contacts</li>
</ul>
<p>-          Easy access on portable Cross-platform devices</p>
<ul>
<li>Mobile Phones</li>
<li>Tablets</li>
<li>And other Portable PCs</li>
</ul>
<p>&nbsp;</p>
<p>Tools and technologies that started as means of entertainment for teenagers are now seen as great ways to reach customers and keep them close. This friendly way of communication and interaction has bound the customers with organization where they now not only follow up closely the companies updates but also they feel like they have a voice, a voice which is taken in consideration. Therefore the flow of ideas and indications is now reversed from the market reach into the company (outside-in) where decisions are no more the privilege of businesses alone but of customers as well.</p>
<p>“The flow is now effectively two-way and becoming real-time. The decision making and change management responsibilities are no longer restricted to managers (traditional organization) or to customers (as prescribed by Social CRM). Other than managers, organizational change can be driven equally by customers, employees, partners and suppliers. All these categories are moving from supporting actors to partners and protagonists.”<a title="" href="#_ftn1">[1]</a></p>
<p>From the interaction through social platforms it is being established not only communication but an engagement of all parties to collaborate and making possible the in-out flow. In order to get individuals engaged organizations have to accept a variety of needs and using those needs to inform the organizational growth and evolution. Benefits from this collaboration are:</p>
<p>-          Reduced customer care costs</p>
<p>-          Improved client satisfaction and loyalty</p>
<p>-          Shorter sell cycles</p>
<p>-          Lower marketing costs</p>
<p>-          Amplify qualified brand reputation and visibility through advocates</p>
<p>-          Increased customer lifetime value</p>
<p>-          Improved customer cross-channels</p>
<p>&nbsp;</p>
<p>Businesses are engaged more than ever before in social platforms, eager not only to reach to new customers but also to establish “friendship” with individuals that could be existing customers or potential buyers. To take a concrete example: most companies today have social accounts on Facebook, Twitter, Linked, or even YouTube. Additionally, most company websites have a social tool box on their pages, positioned in key locations and seem like they are almost begging people to “Like” their page on Facebook or “Follow” them on Twitter. Initially this new trend has engaged all organizations in getting more and more “Fans” and “Followers” as a new approach to enhance their public profile and increase their credibility. Now those individuals that are following business updates through social platforms are giving feedback. That feedback combined with the subscriber`s activities, interests, likes, dislikes and life in general is turning into great added value for businesses in many study-statistical-fronts.</p>
<p>Innovative socially-oriented applications are focused increasingly on getting people engaged in speaking their voice through comments, tags, rating, “Likes” and much more. Consequently, today, the Social Business is a structured organization build aiming to the organization more effective efficient under mutated market dynamics and consumer behaviors.</p>
<p>&nbsp;</p>
<p>Such philosophy brings closer not only businesses to customers, but also helps businesses in having a better environment and collaboration with their employees. Traditionally the decisions not only came from inside-out but also followed a vertical path, from upper level (managers) to lower level (employees). Employees rarely where engaged in the decision making or even improvement of horizontal collaboration across departments. Organizations of any size are facing many problems related to:</p>
<p>-          overloaded information</p>
<p>-          delay of information processing</p>
<p>-          operational overload</p>
<p>-          unreadable analitical data</p>
<p>-          rigid software enviroments</p>
<p>-          lock of cross-departmental communication</p>
<p>-          travel expenses in absence of easy communication tools</p>
<p>-          duplication of effort across teams</p>
<p>-          lock of employee engagement and motivation</p>
<p>Large organizations are confronted with those issues more than other smaller companies, but most of those problems are persistent more or less on all businesses. Traditional software environments are typically very technical and use analytical data which is hard to read and unpleasant for the human eye to work with. On the other hand the large amounts of data can overload the work of employees in particular the job of managers who need quick and summarized information.</p>
<p>Organizations that have embraced social platforms and methodologies of their clients are now looking into implementing the same approach those technologies and practices inside the organization. Many organizations are implementing software that is graphically and functionality rich that facilitates navigation, access, feedback, collaboration, and much more. Lately, many collaboration-software are being offered as SAAS (software as a service) which means they are online and cross-platform and often cross-device. This makes it easy to access for anyone and anywhere. Additionally, business collaboration software is providing friendlier collaboration techniques which are inspired by social platforms that make the working process much more engaging and motivation.</p>
<p>Project management software is an inevitable tool for organizations at any size to manage their everyday work. In a project management application are the functionalities to plan and distribute work, furthermore there is the possibility to leave notes and report a great deal of information, but, as we mentioned above, the large amounts of data flowing can get out of hand and overwhelm the managers work into seeing a clear picture of the situation. From a common employee’s perspective nice graphically with easy to read updates and less technical environment makes the user feel comfortable using the application and most importantly engages the user to leave qualitative updates and report issues instantly. In an open environment where individuals at any level in the organization communicate they generate value to the company exchanging ideas, giving updates for quick information across departments and across management levels.</p>
<p>Pursuing social business techniques, as many organizations are benefiting from today, results in a more collaborative ecosystem where all actors are engaged in a mutual benefit. Costumers get a voice to request their needs by exchanging ideas and values in a closer communication with businesses. For businesses being socially open to customers and third party actors’ results in improving their image and enforcing their vision in public. Being social is helping organizations in the inside in better collaboration in all levels horizontally and vertically. To conclude, being a social business is profitable to all.</p>
<div><br clear="all" /></p>
<hr align="left" size="1" width="33%" />
<div>
<p><a title="" href="#_ftnref1">[1]</a> What is Social Business? (http://www.socialbusinessforum.com/what-is-social-business/)</p>
<p>Techcrunch. With $1.2 Billion Yammer Buy, Microsoft’s Social Enterprise Strategy Takes Shape. http://techcrunch.com/2012/06/25/its-official-microsoft-confirms-it-has-acquired-yammer-for-1-2-billion-in-cash/. Published June 25, 2012. Accessed August 21, 2012.</p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.kreatx.com/2012/11/15/social-business-oriented-rich-internet-applications/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>2nd International Conference in Accounting, Auditing and Financial Reporting</title>
		<link>http://blog.kreatx.com/2012/10/02/2nd-international-conference-in-accounting-auditing-and-financial-reporting/</link>
		<comments>http://blog.kreatx.com/2012/10/02/2nd-international-conference-in-accounting-auditing-and-financial-reporting/#comments</comments>
		<pubDate>Tue, 02 Oct 2012 09:39:01 +0000</pubDate>
		<dc:creator>Avenir Ace Cokaj</dc:creator>
				<category><![CDATA[Application Security]]></category>
		<category><![CDATA[hacking & online security]]></category>
		<category><![CDATA[Local File Inclusion]]></category>
		<category><![CDATA[Remote File Inclusion]]></category>
		<category><![CDATA[RIA - RADE]]></category>
		<category><![CDATA[Scalable]]></category>
		<category><![CDATA[Social Business]]></category>
		<category><![CDATA[SQL injection]]></category>
		<category><![CDATA[attacker]]></category>
		<category><![CDATA[hacker]]></category>
		<category><![CDATA[local file inclusion]]></category>
		<category><![CDATA[online identity protection]]></category>
		<category><![CDATA[online security]]></category>
		<category><![CDATA[phishing]]></category>
		<category><![CDATA[remote file inclusion]]></category>
		<category><![CDATA[Ria]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[sniffing]]></category>
		<category><![CDATA[sql injection]]></category>
		<category><![CDATA[Synchronizable]]></category>

		<guid isPermaLink="false">http://blog.kreatx.com/?p=311</guid>
		<description><![CDATA[Kreatx Presantation on Secure, Scalable, Synchronizable, and Social Business oriented Rich Internet Applications to reduce costs and add value to clients The paper presentation consisted on guiding the business in choosing the appropriate software application technology and apply the right methodologies. Modern technology must have certain criteria to fulfill business needs. Kreatx proposes RIA (rich &#8230;<br/><a href="http://blog.kreatx.com/2012/10/02/2nd-international-conference-in-accounting-auditing-and-financial-reporting/">Read more <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><strong>Kreatx Presantation on</strong></p>
<h2>Secure, Scalable, Synchronizable, and Social Business oriented Rich Internet Applications to reduce costs and add value to clients</h2>
<p><a title="Kreatx SSSS Business RIA" href="http://blog.kreatx.com/wp-content/uploads/2012/09/aveniri-konferenca-2.jpg" target="_blank"><img class="alignnone size-full wp-image-312" title="Avenir Cokaj" src="http://blog.kreatx.com/wp-content/uploads/2012/09/aveniri-konferenca-2.jpg" alt="Avenir Cokaj presenting Kreatx SSSS Business RIA" width="820" height="457" /></a></p>
<p>The paper presentation consisted on guiding the business in choosing the appropriate software application technology and apply the right methodologies. Modern technology must have certain criteria to fulfill business needs. Kreatx proposes RIA (rich internet applications) as Secure, Scalable with cloud technology, having the ability to be synchronized in central web location, and last but not least RIA must be user friendly implementing Social Technology.</p>
<p>Check out our <a title="Kreatx SSSS Business RIA" href="http://blog.kreatx.com/wp-content/uploads/2012/09/final-ssss-business-presantation.ppt" target="_blank">power-point presentation</a> to learn more.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kreatx.com/2012/10/02/2nd-international-conference-in-accounting-auditing-and-financial-reporting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Extending Flex 3.6 TextArea class to get the coordinates of the current cursor position.</title>
		<link>http://blog.kreatx.com/2012/08/22/extending-flex-3-6-textarea-class-to-get-the-coordinates-of-the-current-cursor-position/</link>
		<comments>http://blog.kreatx.com/2012/08/22/extending-flex-3-6-textarea-class-to-get-the-coordinates-of-the-current-cursor-position/#comments</comments>
		<pubDate>Wed, 22 Aug 2012 16:14:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Flex AS3]]></category>
		<category><![CDATA[tricks]]></category>
		<category><![CDATA[actionscript3]]></category>
		<category><![CDATA[cursor coordinates]]></category>
		<category><![CDATA[Flex TextArea]]></category>

		<guid isPermaLink="false">http://blog.kreatx.com/?p=292</guid>
		<description><![CDATA[While working on our embedded commenting system I thought about adding the ability to mention users in your comments just like Facebook or Twitter allow you to do.  The idea is simple: Display a list of users when the user presses @ or another desired key combination( I chose  CTRL + Space ) and then &#8230;<br/><a href="http://blog.kreatx.com/2012/08/22/extending-flex-3-6-textarea-class-to-get-the-coordinates-of-the-current-cursor-position/">Read more <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>While working on our embedded commenting system I thought about adding the ability to mention users in your comments just like Facebook or Twitter allow you to do.  The idea is simple: Display a list of users when the user presses @ or another desired key combination( I chose  CTRL + Space ) and then Insert the name in the TextArea when the users clicks it.</p>
<p>The problem is that Flex does not give you the current coordinates of the  cursor position so you have to find them by your own. I searched for solutions and I found two, both had some fallbacks:</p>
<p title="thekuroko">The simpler one: <a title="thekuroko" href="http://www.thekuroko.com/cursor-postion-in-a-flex-textarea-control-using-the-textlinemetrics-class/" target="_blank">thekuroko</a>  uses TextLineMetrics to get the number of lines, lineHeight, and the width of the last line to get the x coordinate.</p>
<p title="thekuroko"><strong>Fallback</strong>: Cannot get cursor position if you set the cursor position in some position other than the end of the text.</p>
<p title="thekuroko"><a title="Polygeek" href="http://polygeek.com/1826_flex_monitoring-the-position-of-the-cursor-in-a-textarea" target="_blank">Polygeek</a>   on the other side user <em>getColorBoundsRect</em> method on the BitmapData to find the x/y coordinates of the last character.</p>
<p><strong>Fallback</strong>:The same as above!</p>
<p>I wanted my solution to have no fallbacks. I chose the first solution and when the user puts the cursor somewhere in the middle of the text in the TextArea I assign the text from the start to the cursor position to another hidden TextArea and get the coordinates by using the same logic.</p>
<p><a title="TextArea on polygeek" href="http://polygeek.com/1734_flex_textarea-explorer" target="_blank">TextArea on Polygeek</a> helped me a lot. Code follows:</p>
<pre>

package com.controls
{

import flash.events.KeyboardEvent;
import flash.text.TextLineMetrics;
import flash.ui.Keyboard;

import mx.controls.TextArea;
import mx.controls.textClasses.TextRange;
import mx.core.EventPriority;
import mx.core.ScrollPolicy;
import mx.core.UIComponent;
import mx.core.mx_internal;

public class textarea extends TextArea
{
private var _monitorCursorCoordinates:Boolean = false;

private var _cursorX:Number = -1;
private var _cursorY:Number = -1;

private var shadowTA:textarea;

use namespace mx_internal;
public function textarea(required:Boolean)
{
super();
addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown,false,EventPriority.DEFAULT_HANDLER);
}

public function get cursorY():Number
{
return _cursorY;
}

public function get cursorX():Number
{
return _cursorX;
}

public function get numLines():int
{
this.validateNow();
var numLines:uint = this.mx_internal::getTextField().numLines;
return numLines;
}

public function get lineHeight():int
{
this.validateNow();
var textLineMetrics:TextLineMetrics = this.getLineMetrics(0);
return textLineMetrics.height;
}

public function get leading():int
{
var match:Array = this.htmlText.match(/&lt;TEXTFORMAT[^&gt;&lt;]+LEADING="(\d+)"[^&gt;&lt;]*&gt;/i);
return match[1];
}
//when text is entered recalculate the coordinates. It would be better to put this code in a texchange default event handler
private function onKeyDown(event:KeyboardEvent):void
{
if(shadowTA !=null)
{
shadowTA.text = this.text.substring(0, this.selectionBeginIndex);
shadowTA.width = width;
shadowTA.height = height;

var currentLineMet:TextLineMetrics = shadowTA.getLineMetrics(shadowTA.numLines-1);
_cursorX = currentLineMet.width;
_cursorY = (lineHeight * (shadowTA.numLines - this.verticalScrollPosition));
}
}
public function hasVerticalScrollBar():Boolean
{
if (super.verticalScrollBar == null || super.verticalScrollBar.visible == false)
return false;
return true;
}

public function hasHorizontalScrollBar():Boolean
{
if (super.horizontalScrollBar == null || super.horizontalScrollBar.visible == false)
return false;
return true;
}

public function get monitorCursorCoordinates():Boolean
{
return _monitorCursorCoordinates;
}

public function set monitorCursorCoordinates(value:Boolean):void
{
_monitorCursorCoordinates = value;
if(value)
{
shadowTA = new textarea(false);
shadowTA.includeInLayout = false;
shadowTA.visible = false;
this.addChild(shadowTA);
}
}

//insert text at the given position in the TextArea
public function insertTextAt(i:int,text:String):void
{
var b:String = this.text.substring(0,i);
var e:String = this.text.substr(i,this.text.length-1);
this.text = b+text+e;
}
}

}</pre>
<p>The MXML code</p>
<pre>

&lt;textarea id="note" keyDown="monitorCRLSPACE"  monitorCursorCoordinates="true"/&gt;

&lt;mx:Script&gt;
&lt;![CDATA[

function monitorCRLSPACE(evt)
{
if(evt.ctrlKey &amp;&amp; evt.keyCode == 32)
{

//testPopup is a popup component instance
testPopup.open(note,null,false,"bottomCenter", note.cursorX-note.width/2, note.cursorY - note.height);
}
}

]]&gt;
&lt;/mx:Script&gt;

</pre>
<p>Well that should be enough to give you starting point the other things depend on your situation. Please feel free to suggest a better solution <img src='http://blog.kreatx.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>happy coding.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kreatx.com/2012/08/22/extending-flex-3-6-textarea-class-to-get-the-coordinates-of-the-current-cursor-position/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Object Oriented PHP</title>
		<link>http://blog.kreatx.com/2012/07/21/object-oriented-php-2/</link>
		<comments>http://blog.kreatx.com/2012/07/21/object-oriented-php-2/#comments</comments>
		<pubDate>Sat, 21 Jul 2012 16:28:37 +0000</pubDate>
		<dc:creator>bora.demi</dc:creator>
				<category><![CDATA[Object Oriented Programming]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Shqip]]></category>
		<category><![CDATA[klasat abstrakte]]></category>
		<category><![CDATA[nderfaqet ne php]]></category>
		<category><![CDATA[object oriented php]]></category>
		<category><![CDATA[polimorfizmi php]]></category>
		<category><![CDATA[trashegimia php]]></category>
		<category><![CDATA[tutorial shqip]]></category>

		<guid isPermaLink="false">http://blog.kreatx.com/?p=279</guid>
		<description><![CDATA[OOP është dizenjimii i softwareve ku implementimi i të dhënave abstrakte është i strukturuar. Shumë programues pasi janë mësuar me mënyrën proçeduriale të të programuarit kane veshtiresi kur përballen me OOP dhe kjo sepse OOP kërkon një mënyrë ndryshe të të parit të gjërave. Por çfarë është OOP? Është një stil programimi që e bazon &#8230;<br/><a href="http://blog.kreatx.com/2012/07/21/object-oriented-php-2/">Read more <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>OOP është dizenjimii i softwareve ku implementimi i të dhënave abstrakte është i strukturuar.</p>
<p>Shumë programues pasi janë mësuar me mënyrën proçeduriale të të programuarit kane veshtiresi kur përballen me OOP dhe kjo sepse OOP kërkon një mënyrë ndryshe të të parit të gjërave. Por çfarë është OOP? Është një stil programimi që e bazon të menduarit në objektet e botës reale. Zakonisht kur mendojmë për programe, mendojmë në funksionalitetin e tyre për shembull themi nëse një program llogarit sipërfaqen e një rrethi, llogarit shumën e numrave nga 1-n etj. Këto programe bëhen funksionale duke përdorur funksione të cilat veprojnë mbi variablat dhe në fund na sjellin një rezultat. Ndërkohë që në OOP është mirë të mendojmë fillimisht për qëllimin e programit tonë(pa e ngatërruar me funksionalitetin) dhe më pas mund të fillojmë ta ndajmë programin duke i menduar pjesët e programit si objekte, dhe duke analizuar çfarë karakteristikash kanë këto objekte, a kanë ngjashmëri dhe a mund të krijojnë një lidhje me njëra tjetrën. Ka ardhur koha që jo vetëm të prezantohemi me OO por edhe ta zotrojmë atë duke qënë se thuajse të gjitha gjuhët moderne të programimit janë ose janë kthyer ne OO, për shembull PHP ka qenë fillimisht një gjuhë proçeduriale, por tashmë është zgjeruar duke përdorur tipare të OOP që prej PHP4 dhe u avancua me tej në versionin e PHP5, i cili është i dizenjuar për OOP. Megjithë atë edhe në këtë version mund të programohet &#8220;si zakonisht&#8221;. Për të patur një pamje më të qartë të programimit në OO duhet të njihemi fillimisht me disa koncepte kryesore ku ky lloj programimi mbështetet. Disa prej koncepteve janë mjaft të ngjashme me njëra-tjetrën dhe është e rëndësishme të njohim dallimet ndërmjet tyre për ti përdorur ato në mënyrën dhe vendin e duhur.</p>
<p><em> • Konceptet fondamentale</em></p>
<p>1. <strong> Objekt vs Klasë</strong>- Klasa është prezantimi i një tip objekti. Ose thënë ndryshe një plan që përshkruan detajet, formën dhe mënyrën se si funksionon një objekt. Një analogji e mirë për të kuptuar ndryshimin ndërmjet një klase dhe një objekti është të krahasosh planin në letër të një shtëpie dhe vete shtëpinë e prezantuar në planë. Klasa është plani i shtëpisë me të gjitha detajet e saj(formën, hapsirën etj) ndërsa objekti është vetë shtëpia(objekti konkret) e cila është e ndërtuar sipas planit fillestar. Një klasë përbëhet nga tre komponent kryesor: emri,atributet dhe metodat.</p>
<p>Në &#8216;përcaktimin e klasës’ bëjnë pjesë të ashtëquajturat ‘veçori të klasës’ që nuk janë gjë tjetër veç se variabla që shprehin atribute të klasës për shembull për një student të dhëna të nevojshme do të ishin emri, mbiemri,vendlindja,etj..dhe kjo do të shprehej kështu:</p>
<pre>class student {
private $emri;
private $mbiemri;
private $vendlindja;
}</pre>
<p>Një objekt mund të krijohet duke përdorur fjalën kyçe “new” për shembull:</p>
<p>$obj = new student;</p>
<p>Dhe për të liruar memorjen e perdorur nga një objekt përdoret: unset($obj);</p>
<p><strong>2. __construct(),__destruct()</strong> Të gjithë objektet kanë një metodë të quajtur &#8216;konstruktorë&#8217;. Konstruktorët lejojnë inicializimin e veçorive të objektit kur ky i fundit krijohet. Edhe në qoftë se ju nuk e krijoni konstruktorin PHP do të thërrasë konstruktorin automatikisht me krijimin e objektit. Konstruktorët e klasës bazë nuk thërriten në mënyrë implicite në qoftë se klasa e derivuar ka një konstruktorë. Për të përdorur konstruktorin e klasës bazë sintaksa është parent::__construct(). Metoda destructor thërritet kur nuk ka më referenca për një objekt të caktuar automatikisht nga sistemi por destructor-i mund te therritet edhe duke perdorur:
<pre>unset($objRef);</pre>
<p> Njësoj si me konstruktorin edhe destruktori i klasës bazë nuk thërritet në mënyrë implicite nga klasa e derivuar. Sintaksa për destruktorin është parent::__destruct(). Destruktori thërritet edhe kur ekzekutimi i skriptit ndalohet nga funksioni exit(). Kur exit() thërritet ne trupin e destruktorit ndalohet ekzekutimi i rutinës së mbetur për mbylljen.</p>
<pre>class klasaBaze
{

function __construct()
{
print "Konstruktori i klases baze!";
}

function __destruct()
{
print "Destruktori i klases baze!";
}

}

class klasaDerivuar extends klasaBaze
{

function __construct()
{
parent::__construct(); // Do te shfaq perseri msg: "Konstruktori i klases baze!"
print "Konstruktori i klases se derivuar!";
}

function __destruct()
{
print "Destruktori i klases se derivuar!";
}

}

$obj1=new klasaBaze();
$obj2=new klasaDerivuar();
?&gt;</pre>
<p>Siç mund të shikohet edhe në shembullin e mësipërm fillimisht thërritet konstruktori i klasës bazë pastaj ai i klasës së derivuar, me qënë se në këtë të fundit thërritet edhe konstruktori i klasës bazë në ekran do të shfaqet përsëri mesazhi i përcaktuar në këtë konstruktor. Diçka për tu vën re është edhe rendi i thërritjes së destruktorëve. Fillimisht bëhet mbyllja e klasës së derivuar dhe më pas thërritet destruktori i klasës bazë. Outputi i këtij kodi do të ishte si mëposhtë:</p>
<p>Konstruktori i klases baze!<br />
Konstruktori i klases baze!<br />
Konstruktori i klases se derivuar!<br />
Destruktori i klases se derivuar!<br />
Destruktori i klases baze!</p>
<p><strong>3. Enkapsulimi</strong> &#8211; Është grupimi i ‘public methods’ dhe i variablave së bashku në një struktur koherente të dhënash(klasë), të cilat më pas do të perdoren nga objekti në menyrë që të funksionojë. Klasa është si një kapsulë që fsheh brendësin e metodës, atributet dhe veçoritë me anë të të cilave kryen funksionalitetin e saj mbi klasat e tjera. Ideja e enkapsulimit është që të fsheh se si një klas punon por njëkohësisht të lejoj marrjen e kërkesave për atë që duhet të bëjë.</p>
<p><strong>4. Inheritance</strong> &#8211; lejon një klasë të specifikojë/zgjeronë (extend) një tjetër klasë dhe të trashëgojë të gjithë metodat, veçoritë dhe sjelljet e klasës bazë. Kjo ndihmon shumë në implementimin e funksioneve të njëjta në objekte të ngjashëm duke reduktuar kështu rishkrimin e të njëjtave rrjeshta programi. Koncepti i të kaluarit nga e përgjithshmja në specifiken ështe mjaft i rëndësishëm në OOP dhe kjo arrihet duke përdorur inheritance.</p>
<pre>class person
{
public $emri ="Une";
public function metoda()
{
return $this-&gt;emri;
}
}

class student extends person
{
public $dega="Informatike";
public function metodaTjeter()
{
return $this-&gt;dega;
}
}
$obj = new person;
echo $obj-&gt;metoda();
echo " dua te aplikoje ne degen ";
echo $obj-&gt;metodaTjeter();
?&gt;</pre>
<p><strong> 5. Metodat</strong> janë esencialisht funksionet e një klase, ato përmbajnë të dhëna dhe veprime logjike.</p>
<p>a) “Method Overriding” &#8211; ndodh kur kemi implementimin e të njëjtës metodë në klasën e derivuar. Këto dy metoda kanë të njëjtat parametra por implementime të ndryshme. Njëra prej këtyre metodava eksizston në klasën bazë dhe tjetra në klasën e derivuar. Por ato nuk mund të ekzistojnë kurrsesi në të njëjtën klasë. Arsyeja pse përdoret “Method Overriding” është që klasa e derivuar të modifikojë funksionalitetet e klasës bazë. Për të përdorur edhe metodat e specifikuara në klasën bazë përdoret ‘invokimi’ i metodës bazë, për të cilën sintaksa është si më poshte parent::function_name();</p>
<pre>class dega
{
public $dega1 ="Informatik ekonomike";
public function metoda()
{
echo "StudentiX do te aplikoje ne degen";
return $this-&gt;dega1;
}
}
class fakulteti extends dega
{
public $fakulteti1 ="Ekonomik";

public function metoda()
{
parent::metoda();
echo " ne fakultetin ";
return $this-&gt;fakulteti1;
}
}
$obj = new fakulteti;
echo $obj-&gt;metoda();
?&gt; </pre>
<p>b) “Method Overloading” &#8211; nododh kur kemi dy ose më shumë metoda me të njëjtin emër por me parametra të ndryshëm për të kryer njëjtin qëllim. Këto dy metoda mund të ekzistojnë në të njëjtën klasë ose njëra në klasën bazë dhe tjetra në klasën e derivuar. Method overloading përdoret kur ju kërkoni që të bëni dy gjëra konceptualisht të njëjta por me parametra të ndryshëm. Kjo mënyrë nuk mund të aplikohet në PHP por ekzistojnë disa funksione që numërojnë parametrat si për shembull: func_num_args, të cilat bëjnë të mundur që të kryhet i njëjti funksionalitet siç do të bëhej me &#8216;Method Overloading&#8217;</p>
<pre>class mbledhje
{
public $var1,$var2,$var3,$var4;

public function sigma()
{
$arg = func_get_args();
switch(func_num_args())
{
default:
case 2:
self::sigma2( $arg[0], $arg[1]);
break;
case 4:
self::sigma1($arg[0], $arg[1], $arg[2], $arg[3]);
break;
}
}

public function sigma1($var1, $var2, $var3, $var4)
{
$this-&gt;var1=$var1;
$this-&gt;var2=$var2;
$this-&gt;var3=$var3;
$this-&gt;var4=$var4;
return $var1+$var2+$var3+$var4;
}

public function sigma2($var1, $var2)
{
$this-&gt;var1=$var1;
$this-&gt;var2=$var2;
return $var1+$var2;
}

$obj = new mbledhje;

echo "Shuma e kater argumenteve eshte: ";
echo $obj-&gt;sigma1('1', '2', '3', '4');
echo"\r\n";
echo "Shuma e dy argumenteve eshte: ";
echo $obj-&gt;sigma2('1', '2');
?&gt;</pre>
<p><em>Rregulli I Faustit: Një metod nuk duhet të jetë më e gjatë se madhësia e ekranit. Në qoftë se ajo është më e gjatë atëherë duhet të ndahet në nën-metoda!</em></p>
<p><strong>6. Polymorphism</strong> &#8211; Fjala polymorphism vjen nga greqishtja ku poly do të thotë shumë dhe morph do të thotë formë. Përshkruan nje model në OOP në të cilin klasat kanë funksionalitete të ndryshme por të njëjtin interface. Analogjia më e mirë për polimorfizmin është me klikimin e një butoni. Se çfarë mund të sjell klikimi i një butoni kjo varet se me çfarë është lidhur ky buton dhe konteksti ku përdoret, por rezultati nuk ndryshon mënyrën e përdorimt, pavarësisht butonit që ai të sjell një rezultat duhet klikuar. Zakonisht përdoren dy mënyra për polimorfizmin: në compile time(ku kemi methods dhe operators overloading) ose në run time(nëpërmjet inheritance dhe method overriding). Në php për polimorfizmin është e mundur vetëm mënyra e dytë me run time.</p>
<p><strong>7. Interface</strong> &#8211; Një interface është i ngjashëm me një klasë përveç faktit që nuk mund të përmbaj kode. Ai mund të përcaktoj emrat e metodave dhe argumenteve por jo përmbajtjen e tyre. Çdo klasë që implementon një interface duhet të implementoj të gjitha metodat e përcaktuara nga interface-i. Një klasë mund të implementoj disa interface-e.</p>
<pre>interface myInterface
{
public function metoda();
public function metodaTjeter($dega);
}

class student implements myInterface
{
public $emri ="Une";
public $dega="Informatike";
public function metoda()
{
return $this-&gt;emri;
}
public function metodaTjeter($dega)
{
return $this-&gt;dega;
}
}
$obj = new student;
echo $obj-&gt;metoda();
echo " do te aplikoje ne degen ";
echo $obj-&gt;metodaTjeter($dega);
?&gt; </pre>
<p><strong>8. Abstract class</strong> &#8211; është një &#8220;përzierje&#8221; e një klase dhe një interface-i. Këto klasa mund të përcaktojnë metoda njësoj si në një interface(në formën e abstract method), ato nuk mund të inicializohen po vetëm të derivohen. Klasat që specifikohen nga abstract classes duhet të implementojnë të gjita abstract methods të përcaktuara në abstract class.</p>
<pre>abstract class AbsClass
{
//duhet specifikuar ne klasen e derivuar
abstract public function metoda();

//funksion normal
public function metodaTjeter($dega)
{
return $dega;
}
}

class student extends AbsClass
{
public function metoda()
{
return "Une do te aplikoj ne degen ";
}
}

$obj = new student;
echo $obj-&gt;metoda();
echo $obj-&gt;metodaTjeter('Informatike');
?&gt; </pre>
<p><strong>9. Abstract class vs Interface</strong></p>
<p>Abstract Class</p>
<p>a) Një abstract class ka disa funksionalitete dhe pjesa tjetër përcaktohet nga klasa e derivuar.<br />
b) Klasa e derivuar mund të ‘override’ funksionet e përcaktuara në klasën bazë ose jo.<br />
c) Një klasë bazë e derivuar nga një abstract class duhet të lidhet logjikisht me të.</p>
<p>Interface</p>
<p>a) Interface nuk mund të përmbajë funksionalitete. Ai përmban vetëm emrat dhe tipet e metodave.<br />
b) Klasa e derivuar nga një interface duhet të caktojë funksionalitetin e çdo metode të permendur në interface.<br />
c) Klasa shumë të ndryshme dhe pa asnjë lidhje ndërmjet tyre mund të bashkohen duke përdorur një interface.</p>
<p>10. Data Hiding &#8211; “shikueshmëria”/aksesi i variablave ose metodave mund të përcaktohet duke vendosur gjatë deklarimit fjalët kyçe: public,protected ose private.</p>
<p>• Public- çdokush ka akses.<br />
• Protected- ka akses vetëm brenda klasës dhe nga klasat pasardhëse ose prind.<br />
• Private- mund të aksesohet vetëm nga klasa ku është krijuar variabla ose metoda.</p>
<p>Në qoftë se variablat ose metodat nuk janë përcaktuar, atëherë ato bëhen automatikisht public. Objektet e të njëjtit tip kanë akses për variablat apo metodat private ose protected edhe në qoftë se nuk i përkasin të njëjtës instance, kjo sepse detaje specifike të implementimit janë të njohura brenda objekteve.</p>
<p><strong>11. Serializimi i Objekteve</strong> &#8211; Kur një objekt dërgohet në network ose kur ai duhet te ruhet për tu përdorur më vonë, është e nevojshme që të bëhet serializimi i objektit. Serializimi i një objekti është proçesi i shkrimit te gjëndjes së tij në sekuenca të dhënash për cdo element të objektit. Në qoftë se serializimi nuk bëhet gjëndja e objektit do të jetë e panjohur kur të dergohet dhe dërgimi nuk do të kryhet. Pasi një objekt është serializuar ai mund të dërgohet në network, të shkruhet në database, file etj.. Dhe më vone mund të deserializohet duke e përftuar me të njëjtën gjëndje. Serializimi bëhet me funksionin serialize() dhe deserializimi me funksionin unserialize()</p>
<pre>class student
{
private $idStudent;
private $emer;

public function __construct($idStudent,$emer)
{
$this-&gt;idStud = $idStudent;
$this-&gt;emer = $emer;
}

public function setID($idStudent)
{
$this-&gt;idStud = $idStudent;
}

public function setEmer($emer)
{
$this-&gt;emer = $emer;
}

public function getID()
{
return $this-&gt;idStud;
}

public function getEmer()
{
return $this-&gt;emer;
}
}

$obj = new student('12345','Emer Mbiemr');
$ser = serialize($obj);
echo "Objekti i serializuar:";
echo $ser;
$newObj = unserialize ($ser);
echo "Objekti i deserializuar:";
print_r ($newObj);
?&gt; </pre>
<p><strong>12. “Metodat Magjike”</strong> &#8211; Metodat janë funksione, metodat magjike janë funksione speciale të rezervuara në PHP. Ato duhet të fillojnë me dy viza: __. Disa prej tyre janë __construct(), __call(), __get(), __set() __sleep(), __wakeup() etj.. Kur thërritet funksioni serialize() ai shikon në qoftë se në objektin me të cilin po punon ka funksion __sleep(). Në qoftë se po ky funksion ekzekutohet para serializimit. E njëjta gjë vlen edhe për __userialize(), fillimisht shikon në qoftë se ka funksion __wakeup(), i cili mund të rikonstruktoj të gjitha resorset që një objekt mund të ketë. Funksionet sleep() dhe wakeup() bëjnë të mundur funksionimin korrekt gjatë periudhës hibernate. Për shembull kurr thërritet __sleep() objekti që transportohet duhet të ruhet dhe të mbyllet file-i ku po shkruhej, gjithashtu kur ka objekte që nuk duhet të ruhen komplet vjen në ndihmë ky funksion. Kur __wakeup() thërritet duhet të rihapet file-i dhe të vazhdohet të shkruhet. __wakeup përdoret edhe për të rivendosur çdo lidhje me databazën që mund të jetë ndërprerë gjatë proçesit të serializimit. __wakeup() nuk duhet të kthejë vlera por __sleep() duhet të kthejë një array të vlerave që ju doni të ruani.</p>
<pre>class student
{
public $emer;
public $nota;
public $id;

public function __construct()
{
$this-&gt;emer=$emer;
$this-&gt;nota=$nota;
$this-&gt;id=$id;
}

public function __sleep()
{
return array ('emer','nota','id');
}

public function __wakeup()
{
$this-&gt;show();
}

public function show()
{
echo "\n".$this-&gt;emer.' '.$this-&gt;nota.' '.$this-&gt;id."\n";
}
}

$obj = new student();
$objSer = serialize ($obj);
echo "\n Te dhenat e serializuara ".$objSer."\n";
$objUnser = unserialize($objSer);
echo "Te dhenat e deserializuara";
print_r ($objUnser);
?&gt; </pre>
<p>Të programosh do të thotë të kalosh nga një gjëndje e qëndrueshm në një tjetër gjëndje të qëndrueshme, të një niveli më të lart.</p>
<p>to the next time!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kreatx.com/2012/07/21/object-oriented-php-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial i shpejte per MySQL</title>
		<link>http://blog.kreatx.com/2012/07/02/tutorial-i-shpejte-per-mysql/</link>
		<comments>http://blog.kreatx.com/2012/07/02/tutorial-i-shpejte-per-mysql/#comments</comments>
		<pubDate>Mon, 02 Jul 2012 09:22:11 +0000</pubDate>
		<dc:creator>ktola</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Shqip]]></category>
		<category><![CDATA[databaza]]></category>
		<category><![CDATA[denormalizimi i db]]></category>
		<category><![CDATA[entitetet]]></category>
		<category><![CDATA[Kursoret ne MySQL]]></category>
		<category><![CDATA[normalizimi i db]]></category>
		<category><![CDATA[Procedurat dhe funksionet MySQL]]></category>
		<category><![CDATA[relacionet]]></category>
		<category><![CDATA[shkallet e normalizimit]]></category>
		<category><![CDATA[sistemet RDBMS]]></category>
		<category><![CDATA[skemat relacionare te dabazave]]></category>
		<category><![CDATA[tutorial shqip MySQL]]></category>
		<category><![CDATA[View-te ne MySQL]]></category>

		<guid isPermaLink="false">http://blog.kreatx.com/?p=255</guid>
		<description><![CDATA[C&#8217;eshte databaza, sistemet RDBMS. Databaza eshte nje sistem i organizuar i te dhenave dixhitale. Te dhenat zakonisht organizohen ne modele te ndryshme gjithmone sipas nevojave, ne menyre qe te suportoje kerkesat qe behen per keto te dhena. Termi database lidhet ngushte me te dhenat dhe strukturen e tyre dhe jo me database management system (DBMS). &#8230;<br/><a href="http://blog.kreatx.com/2012/07/02/tutorial-i-shpejte-per-mysql/">Read more <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<h1>C&#8217;eshte databaza, sistemet RDBMS.</h1>
<p>Databaza eshte nje sistem i organizuar i te dhenave dixhitale. Te dhenat zakonisht organizohen ne modele te ndryshme gjithmone sipas nevojave, ne menyre qe te suportoje kerkesat qe behen per keto te dhena. Termi database lidhet ngushte me te dhenat dhe strukturen e tyre dhe jo me database management system (DBMS).</p>
<p>Ne nje term te pergjithshem sistemet DBMS, jane sisteme softwerike komplekse te cilat plotesojne shume kerkesa, dhe databazat qe ato mbajne jane te medha dhe komplekse.</p>
<p>Databaza relacionare eshte nje set tabelash te mire organizuara nga te cilat mund te terhiqen me lehtesi te dhenat.</p>
<p>&nbsp;</p>
<h1>Motoret e ruajtjes  MyIsam dhe InnoDB.</h1>
<p><strong> </strong></p>
<h2>MyISAM</h2>
<p>&nbsp;</p>
<p>MyISAM eshte bazuar ne motorin me te vjeter te ruajtjes, ISAM, I cili nuk eshte me I perdorshem por qe ka disa shtesa shume te vlefshme.</p>
<table summary="MyISAM Storage Engine&lt;br /&gt;&lt;br /&gt;     Features" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td></td>
</tr>
<tr>
<td valign="bottom"><strong><em>Storage limits</em></strong></td>
<td valign="bottom">256TB</td>
<td valign="bottom"><strong><em>Transactions</em></strong></td>
<td valign="bottom">No</td>
<td valign="bottom"><strong><em>Locking granularity</em></strong></td>
<td valign="bottom">Table</td>
</tr>
<tr>
<td valign="bottom"><strong><em>MVCC</em></strong></td>
<td valign="bottom">No</td>
<td valign="bottom"><strong><em>Geospatial data type support</em></strong></td>
<td valign="bottom">Yes</td>
<td valign="bottom"><strong><em>Geospatial indexing support</em></strong></td>
<td valign="bottom">Yes</td>
</tr>
<tr>
<td valign="bottom"><strong><em>B-tree indexes</em></strong></td>
<td valign="bottom">Yes</td>
<td valign="bottom"><strong><em>Hash indexes</em></strong></td>
<td valign="bottom">No</td>
<td valign="bottom"><strong><em>Full-text search indexes</em></strong></td>
<td valign="bottom">Yes</td>
</tr>
<tr>
<td valign="bottom"><strong><em>Clustered indexes</em></strong></td>
<td valign="bottom">No</td>
<td valign="bottom"><strong><em>Data caches</em></strong></td>
<td valign="bottom">No</td>
<td valign="bottom"><strong><em>Index caches</em></strong></td>
<td valign="bottom">Yes</td>
</tr>
<tr>
<td valign="bottom"><strong><em>Compressed data</em></strong></td>
<td valign="bottom">Yes<sup>[<a href="http://dev.mysql.com/doc/refman/5.1/en/myisam-storage-engine.html#ftn.id1060593">a</a>]</sup></td>
<td valign="bottom"><strong><em>Encrypted data</em></strong><strong><em><sup>[</sup></em></strong><a href="http://dev.mysql.com/doc/refman/5.1/en/myisam-storage-engine.html#ftn.id1060604"><em>b</em></a><strong><em><sup>]</sup></em></strong></td>
<td valign="bottom">Yes</td>
<td valign="bottom"><strong><em>Cluster database support</em></strong></td>
<td valign="bottom">No</td>
</tr>
<tr>
<td valign="bottom"><strong><em>Replication support</em></strong><strong><em><sup>[</sup></em></strong><a href="http://dev.mysql.com/doc/refman/5.1/en/myisam-storage-engine.html#ftn.id1060629"><em>c</em></a><strong><em><sup>]</sup></em></strong></td>
<td valign="bottom">Yes</td>
<td valign="bottom"><strong><em>Foreign key support</em></strong></td>
<td valign="bottom">No</td>
<td valign="bottom"><strong><em>Backup / point-in-time recovery</em></strong><strong><em><sup>[</sup></em></strong><a href="http://dev.mysql.com/doc/refman/5.1/en/myisam-storage-engine.html#ftn.id1060653"><em>d</em></a><strong><em><sup>]</sup></em></strong></td>
<td valign="bottom">Yes</td>
</tr>
<tr>
<td valign="bottom"><strong><em>Query cache support</em></strong></td>
<td valign="bottom">Yes</td>
<td valign="bottom"><strong><em>Update statistics for data dictionary</em></strong></td>
<td valign="bottom">Yes</td>
<td valign="bottom"></td>
<td valign="top"></td>
</tr>
</tbody>
</table>
<p align="center"><strong>Tab.1 Karakteristikat e motorit te ruajtjes MyIsam</strong></p>
<p align="center"><strong> </strong></p>
<p>Cdo tabele MyISAM ruhet ne disk e ndare ne tre file. Emrat e fileve fillojne me emrin e tabeles dhe kane nje prapashtese qe tregon tipin e file. Nje file .frm ruan formatin e tabeles. File I te dhenave “Data File” ka nje prapashtese .MYD (MyData). Filet e indexit kane nje prapashtese .MYI (MyIndex).</p>
<p>Ne mund ta percaktojme nqs duam te krijojme nje tabele per MyISAM me ane te komandes sql :</p>
<pre>CREATE TABLE t (i INT) ENGINE = MYISAM;</pre>
<p>Ne mund ti kontrollojme ose ti riparojme tabelat MyISAM duke perdorur komandat mysqlcheck ose myisamchk. Ne gjithashtu mund ti kompresojme keto tabela duke perdorur myisampack, gje e cila do te lironte shume vend ne databaze.</p>
<p><strong> </strong></p>
<h2>InnoDB</h2>
<p>InnoDB eshte motori default I ruajtjes. Ai konsiderohet sin je safe store engine (kompilator ACID)  I cili eshte I afte te  mbaj commit, rollback dhe crash-recovery per ti ofruar perdoruesit ruajtjen e te dhenave. Innodb ofron nje nivel row-locking sipas stilit oracle, duke rritur keshtu konkurencen dhe  performancen e multiuserave.</p>
<p>InnoDb I ruan te dhenat e perdoruesve ne indekse te grupuara ne menyre qe te uli numrin e input – outputeve  per queryt e bazuara ne celesin primar. Per te ruajtur integritetin e te dhenav, InnoDB gjithashtu suporton dhe forign key. Ju mund mixoni tabelat e InnoDB me tabela nga motore kerkimi te tjere, madje dhe me te njejtin statement. Per te pare nese nje tabele perdor InnoDB ose jo perdoret komanda SHOW ENGINES.</p>
<p>&nbsp;</p>
<h4>Disa nga karakteristikat e InnoDB</h4>
<p>&nbsp;</p>
<table summary="InnoDB Storage Engine&lt;br /&gt;&lt;br /&gt;     Features" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="bottom"><strong><em>Storage limits</em></strong></td>
<td valign="bottom">64TB</td>
<td valign="bottom"><strong><em>Transactions</em></strong></td>
<td valign="bottom">Yes</td>
<td valign="bottom"><strong><em>Locking granularity</em></strong></td>
<td valign="bottom">Row</td>
</tr>
<tr>
<td valign="bottom"><strong><em>MVCC</em></strong></td>
<td valign="bottom">Yes</td>
<td valign="bottom"><strong><em>Geospatial data type support</em></strong></td>
<td valign="bottom">Yes</td>
<td valign="bottom"><strong><em>Geospatial indexing support</em></strong></td>
<td valign="bottom">No</td>
</tr>
<tr>
<td valign="bottom"><strong><em>B-tree indexes</em></strong></td>
<td valign="bottom">Yes</td>
<td valign="bottom"><strong><em>Hash indexes</em></strong></td>
<td valign="bottom">No<sup>[<a href="http://dev.mysql.com/doc/refman/5.1/en/innodb-storage-engine.html#ftn.id1064048">a</a>]</sup></td>
<td valign="bottom"><strong><em>Full-text search indexes</em></strong></td>
<td valign="bottom">No</td>
</tr>
<tr>
<td valign="bottom"><strong><em>Clustered indexes</em></strong></td>
<td valign="bottom">Yes</td>
<td valign="bottom"><strong><em>Data caches</em></strong></td>
<td valign="bottom">Yes</td>
<td valign="bottom"><strong><em>Index caches</em></strong></td>
<td valign="bottom">Yes</td>
</tr>
<tr>
<td valign="bottom"><strong><em>Compressed data</em></strong></td>
<td valign="bottom">Yes<sup>[<a href="http://dev.mysql.com/doc/refman/5.1/en/innodb-storage-engine.html#ftn.id1064104">b</a>]</sup></td>
<td valign="bottom"><strong><em>Encrypted data</em></strong><strong><em><sup>[</sup></em></strong><a href="http://dev.mysql.com/doc/refman/5.1/en/innodb-storage-engine.html#ftn.id1064115"><em>c</em></a><strong><em><sup>]</sup></em></strong></td>
<td valign="bottom">Yes</td>
<td valign="bottom"><strong><em>Cluster database support</em></strong></td>
<td valign="bottom">No</td>
</tr>
<tr>
<td valign="bottom"><strong><em>Replication support</em></strong><strong><em><sup>[</sup></em></strong><a href="http://dev.mysql.com/doc/refman/5.1/en/innodb-storage-engine.html#ftn.id1064140"><em>d</em></a><strong><em><sup>]</sup></em></strong></td>
<td valign="bottom">Yes</td>
<td valign="bottom"><strong><em>Foreign key support</em></strong></td>
<td valign="bottom">Yes</td>
<td valign="bottom"><strong><em>Backup / point-in-time recovery</em></strong><strong><em><sup>[</sup></em></strong><a href="http://dev.mysql.com/doc/refman/5.1/en/innodb-storage-engine.html#ftn.id1064164"><em>e</em></a><strong><em><sup>]</sup></em></strong></td>
<td valign="bottom">Yes</td>
</tr>
<tr>
<td valign="bottom"><strong><em>Query cache support</em></strong></td>
<td valign="bottom">Yes</td>
<td valign="bottom"><strong><em>Update statistics for data dictionary</em></strong></td>
<td valign="bottom">Yes</td>
<td valign="bottom"></td>
<td valign="top"></td>
</tr>
</tbody>
</table>
<p><strong> </strong></p>
<p>&nbsp;</p>
<h2>MyISAM vs InnoDB</h2>
<p>Ndryshimi themelor ndermjet te dyjave eshte se InnoDB suporton transaksionet ndersa MyISAM jo.</p>
<p>Gjithsesi ka shume ndryshime te tjera, kryesoret e te cilave po I rendis me poshte :</p>
<ol>
<li>MyISAM eshte konsideruar me e shpejte ne kerkim, por gjithsesi me ndryshimet e fundit tek InnoDB dhe ky gap po zvogelohet dhe konkurenca po rritet.</li>
<li>Sic e thame dhe me larte,InnoDB suporton transaksionet.</li>
<li>InnoDB I menaxhon ndryshe indexet, duke ruajtur celesin primar sin je pjese te cdo indeksi, duke bere qe indexet te okupojne me teper memorje ne disk.</li>
<li>MyISAM ben lockim ne nivel tabele ndersa InnoDB arrin te beje dhe Lockim ne nivel rrjeshti.</li>
<li>Thuhet se InnoDB  rekuperohet me mire pas nje crash.</li>
<li>Te dhenat ruhen ndryshe ne disk.<strong></strong></li>
</ol>
<p><strong> </strong></p>
<p><strong> </strong></p>
<h1>Skemat relacionare te dabazave, relacionet, entitetet.</h1>
<p>&nbsp;</p>
<p>Relacioni, mund te konsiderohet si nje fushe e perbashket identifikuese ndermjet dy ose me shume tabelave, e cila sherben per te nderlidhur keto tabela me njera tjetren.</p>
<p>Entitetet mund te konsiderohen si tabela qe kane vecori te perbashketa me tabelat e tjera por qe dhe mund te ekzistojne te vetme, prandaj  shikojme zakonisht lidhje nje me nje ndermjet entiteteve.</p>
<p>Ne skemat klasike relacionare, zakonisht entitetet paraqiten drejtkendesha ndersa relacionet me rombe.</p>
<p>&nbsp;</p>
<h1></h1>
<h1>Tipet e te dhenave.</h1>
<p>&nbsp;</p>
<p>Kur krijojme nje tabele ne databaze fillimisht duhet te shkruajm emrin e fushavfe te saj dhe me pas ti percaktojme nga nje tip seciles fushe. Percaktimi I tipit eshte shume I rendesishem pasi ajo percakton se cfar funksioni ka nje fushe ne tabele.</p>
<p>Kemi disa tipe te te dhenave ne nje tabele:</p>
<ul>
<li>Tipet numerike</li>
<li>Tipet e string</li>
<li>Tipet Date and Time</li>
</ul>
<h3>Disa nga tipet numerike kryesore jane:</h3>
<p>Small Int – Nje integer I vogel shtrirja e te cilit varion nga -32768 deri ne 32767</p>
<p>MediumInt – I cili eshte nje integer me madhesi te mesme. Shtrirja e tij varion nga              &#8211; 8388608 ne 8388608.</p>
<p>Int<strong> –</strong> Nje integer I madhesise normale shtrirja e te cilit varion nga &#8211; 2147483648 deri ne 2147483647</p>
<p>BigInt &#8211; I cili perdoret kur kemi per te ruajtur vlera te medha numerike. Shtrirja e tij  varion nga <strong>-</strong>9223372036854775808 ne  9223372036854775807.</p>
<p>Boolean <strong>–</strong> Perdoren nqs deshirojme te ruajm vetem nje vlere 1 ose 0. Nqs vlera eshte 0 atehere parametric I lidhur me kete vlere konsiderohet false ndersa ne qofte se eshte 1 parametri I lidhur me kete vlere konsiderohet true. Eshte sinonim i TinyInt</p>
<p>Decimal <strong>–</strong> Perdoret atehere kur kemi nje numer me presje fikse.</p>
<p>Float <strong>–</strong> Pak a shume e njejte me decimalin vetem se kemi nje presje te levizeshme.</p>
<h3>Disa nga tipet kryesore te stringjeve jane:</h3>
<p>Char – Perdoret atehere kur duam te ruajm nje string me gjatesi fikse.</p>
<p>Varchar – Perdoret atehere kur duam te ruajm nje string te cilit nuk ia dijme gjatesine.</p>
<p>Ndryshimi ndermjet Char dhe Varchar eshte se tek tipi char, ne momentin qe ne I percaktojme madhesine per nje string te caktuar, edhe nqs Stringu mund te kete madhesi me te vogel, ai do te zej po aq vend ne databaze sa I eshte percaktuar. Ndersa per tipin varchar ndodh e kunderta, pra pavarsisht se cfare madhesie I percaktojme ne ne fillim, vendi qe ai do te zere ne databaze do te jete I njejte me madhesine e tij.</p>
<p>Blob dhe Tekst<strong> – </strong>Blob eshte nje objekt I madh binary I cili mund te mbaje sasi te ndryshme te dhenash. Ai ndahet ne akter tipe te cilat jane : TINYBLOB, BLOB,MEDIUMBLOB, dhe LONGBLOB. Ato ndryshojne vetem nga gjatesia maksimale e vlerave qe mbajne. Ndersa kater llojet e tipit tekst jane TINYTEXT, TEXT, MEDIUMTEKST            dhe LONGTEKST. Ato korespondojne me kater tipet e BLOB dhe kane te njejten gjatesi maksimale si dhe te njejtat kersa ruajtjeje.</p>
<h3>Ndryshimet ndermjet blob dhe tekst :</h3>
<p align="left"><strong> </strong></p>
<p>Vlerat e BLOB trajtohen si vargje binare (Vargje bitesh). Ato nuk permbajne karaktere, dhe renditja dhe krahasimet behen ne baze te  vlerave numerike qe permbajne kolonat e tyre. Ndersa persa I perket vlerave te tipit Tekst, ato trajtohen nuk trajtohen si vargje binare por si vargje karakteresh. Ato permbajne nje set karakteresh , renditen ne baze te krahasimit ndermjet karaktereve.</p>
<p>Ne qofte se strict sql mode nuk eshte aktivizuar dhe ne I japim nje vlere tipit blob ose tekst e cila kalon madhesine e kolones, vlera copetohet dhe nje paralajmerim paraqitet.</p>
<p><strong> </strong></p>
<h3>Tipet  kryesore tek Date and Time :</h3>
<p><strong> </strong></p>
<p>DATETIME<strong> –  </strong>Perdoret atehere kur duam te ruajm velrat per oren dhe daten. Eshte ne formatin “YYYY-MM-DD HH:MM:SS”. Shtrirja e saj eshte nga 1000-01-01 00:00:00 deri ne           9999-12-31 23:59:59.</p>
<p>TIMESTAMP<strong> </strong><strong>–  </strong>Ka nje shtrirje nga ’1970-01-01 00:00:01′ UTC deri ne ’2038-01-09 03:14:07′ UTC.</p>
<h3>Ndryshimet ndermjet TIMESTAMP DHE DATETIME</h3>
<p>1. TIMESTAMP eshte 4 bytes perkundrejt  8 byteve te DATETIME.</p>
<p>2. TIMESTAMPzen me pak memorje ne databaze dhe si rrjedhim indexohet me shpejte.</p>
<p>3. DATETIME eshte konstante ndersa TIMESTAMP varet nga ora lokale.</p>
<p><strong> </strong></p>
<h1>Normalizimi i db, shkallet e normalizimit.</h1>
<p>&nbsp;</p>
<p>Normalizimi i databazave eshte procesi i organizimit te fushave dhe tabelave ne menyre qe te rritet eficenca, te rritet shpejtesia, te ulen perseritjet e te dhenave si dhe te ulen vartesite. Zakonisht normalizimi konsiston ne copezimin e tabelave te medha ne tabela me te vogla dhe te organizuara.</p>
<p>Procesi I normalizimit kalon ne disa hapa:</p>
<ol>
<li><strong>1.    </strong><strong>Normalizimi i shkalles  1</strong></li>
</ol>
<p>Qe nje tabele te quhet e normalizuar e shkalles se pare duhet qe te plotesohen keto kushte:</p>
<ol>
<li>Te mos kete rrjeshta te perseritura</li>
<li>Cdo qelize te kete nje vlere te vetme</li>
<li>Vlerat e nje kolone te jene te te njejtit tip</li>
<li><strong>2.    </strong><strong>Normalizimi i shkalles 2</strong></li>
</ol>
<p>Nje tabele quhet e normalizuar e shkalles 2 ne momentin qe :</p>
<ol>
<li>Eshte e normalizuar e shkalles 1</li>
<li>Te gjithe elementet jo celes te nje tabele te jene te varura vetem nga elementi celes i tabeles perkatese</li>
<li><strong>3.    </strong><strong>Normalizimi i shkalles 3</strong></li>
</ol>
<p>Nje tabele quhet e normalizuar e shkalles 3 kur :</p>
<ol>
<li>Eshte e normalizuar e shkalles 2</li>
<li>Nuk ekzistojne varesi transistive ne nje tabele</li>
</ol>
<p><em>Me varesi transistive kuptojme : A zoteron B, B zoteron C keshtu qe dhe A zoteron C.</em></p>
<ol>
<li><strong>4.    </strong><strong>Normalizimi Boyce-Codd (BCNF)</strong></li>
</ol>
<p>Normalizimi Boyce-Codd konsiston ne faktin se cdo determinante duhet te jete nje candidate per celes. Pra qe nje tabele te jete e normalizuar sipas formes Boyce-Codd duhet te jete e normalizuar e shkalles 3 dhe cdo determinante e saj duhet te jete kandidat per celes.</p>
<ol>
<li><strong>5.    </strong><strong>Normalizimi i formes se 4</strong></li>
</ol>
<p>Qe nje tabele te quhet e normalizuar e formes se 4 duhet qe te jete e normalizuar e formes Boyce-Cood dhe mos te kete varesi shume vlereshe.</p>
<ol>
<li><strong>6.    </strong><strong>Normalizimi i formes se 5</strong></li>
</ol>
<p>Qe nje tabele te jete e normalizuar e formes se 5, gjithashtu e quajtur “forma normale e lidhjes se projektuar” duhet qe te jete e normalizuar e formes se 4 si dhe qe cdo vartesi e lidhjeve te vije si shkak I celesave kandidat.<strong></strong></p>
<p>&nbsp;</p>
<h1>Denormalizimi i db</h1>
<p>&nbsp;</p>
<p>Procesi I denormalizimit eshte pak a shume  kunderta e normalizimit. Duke normalizuar tabelat ne I ndajme ato ne tabela me te vogla duke rritur performacen dhe shpejtesine ne updatimin e te dhenave. Shtrohet pyetja: Po nqs kemi nje kerkese me te madhe per lexueshmeri tabelash dhe jo per updatim. Nqs do te perdornim tabelat e normalizuara ne kete rast do na duhej qe te preknim shum tabela per nje kerkim te thjeshte duke e bere queryn shume komplekse dhe si rrjedhoje te ngadalte. Per kete na sherben procesi I denormalizimit. Pra me pak fjale procesi I denormalizimit sherben per te optimizuar performancen dhe shpejtesine e kerkimit te te dhenave ne momentin qe kemi nje mbingarkese lexueshmerie nga ana e perdorueseve.</p>
<h1>Normalizimi VS Denormalizimi</h1>
<p>&nbsp;</p>
<h3> Normalizimi Pro</h3>
<ol>
<li>Shpejtesi me e larte per shkak se ka tabela te vogla</li>
<li>Updatimi I tabelave behet me shpejte</li>
<li>Vendosja e te dhenave tek tabelat behet me shpejte</li>
<li>Selektimi i te dhenave nqs kemi kerkese per te dhena brenda nje tabele</li>
<li>Nuk ka duplikim te te dhenave</li>
</ol>
<p><strong>Normalizimi Kunder</strong></p>
<ol>
<li>Lidhja e tabelave nuk shkon mire me strategjite e indeximit</li>
<li>Vonon nese kerkohen te dhena te cilat gjenden ne tabela te ndryshme</li>
<li>Query shume komplekse</li>
</ol>
<p><strong>Denormalizimi Pro</strong></p>
<ol>
<li>Te dhenat ndodhen ne nje tabele dhe si rrjedhoje kerkimi shume me i shpejte</li>
<li>Lejon strategjite e indeksimit</li>
<li>Query shume te thjeshta</li>
</ol>
<p><strong>Denormalizimi Kundra</strong></p>
<ol>
<li>Duplikimi I te dhenave</li>
<li>Updatimi dhe Vendosja e te dhenave ne tabele e ngadalte dhe komplekse</li>
</ol>
<p><strong>Shtrohet pyetja : Si do ta zgjidhim problemin e bashkjeteses se Normalizimit dhe Denormalizimit ne nje database ?</strong></p>
<p>Marim rastin e dy tabelave : Products dhe Orders. Ne kete rast kemi fushen product_name e cila gjendet dhe tek tabela Product dhe tek tabela Orders. Ne moment qe hyn nje product I ri na duhet te updatojm tabelen Products por ne kete rast duhet te updatohet gjithashtu dhe tabela Orders. Zgjidhja eshte perdorimi i <strong>Triggers</strong>.</p>
<ol>
<li>Vendosim nje trigger ne tabelen Products e cila do te updatoje product_name sa here updatohet tabela Products.</li>
<li>Ekzekutojme queryn e update ne tabelen Product. Do te shohim se eshte updatuar automatikisht dhe fusha product_name qe ndodhet ne tabelen Order</li>
</ol>
<p>&nbsp;</p>
<h1 align="left">Aspekti praktik (MySQL)</h1>
<p>Nje query e thjeshte per krijimin e tabelave</p>
<pre>Create Table users(

Uid int not null auto_increment,

Emer varchar(30),

Mbiemer varchar(30),

Mosha int ,

Aid int,

Primary Key (uid),

Foreign key (Aid) references Address (Aid)

);

Create table Address (

Aid int not null auto_increment,

Shteti varchar (30) ,

Qyteti  varchar (30),

Kodi_Zip int not null,

Primary key (Aid)

);</pre>
<p>Ne shembullin e mesiperm gjenden dy kode Sql te cilat perdoren per te kriuar tabelat ne database. Queryt e mesiperme bejne pjese tek kategoria e DDL (Data definition language) e cila perdoret per krijimin e tabelave, per ti bere drop atyre ose per ti modifikuar(Alter).</p>
<p>Verejme perdorimin e primary key, foreign key dhe auto_increment. Dy te parat jane komanda kyce ne krijimin e modeleve relacionare te databazave pasi sherbejne per te bere lidhjen e tyre. Primary key perdoret per te identifikuar nje fushe te tabeles si nje celes primar, fushat e te cilit duhet te jene unik dhe sherbejne per te identifikuar ne menyre te vecante cdo element te tabeles. Gjithashtu fushat qe jane celes primar te tabeles mund te perdoren dhe si foreign key tek tabelat e tjetra duke sherbyer keshtu per nderlidhjen ndermjet tabelave. Ne queryn e mesiperme kemi dy celesa primar Uid dhe Aid si dhe foreign key Aid qe sherben per te bere lidhjen ndermjet dy tabelave.</p>
<p>Ne kete query kemi gjithashtu dhe komanden Auto_increment e cila sherben per te inkrementar me nje fushen ne te cilen eshte implementuar sa here qe shtohet nje element I ri ne tabele.</p>
<pre>INSERT INTO `address` (`Aid`, `Shteti`, `Qyteti`, `Kodi_Zip`) VALUES ('Shqiperi', 'Durres', '2001');
INSERT INTO `users` ( `Emer`, `Mbiemer`, `Mosha`, `Aid`) VALUES ( 'Krisel', 'Tola', '22', '2');</pre>
<p>&nbsp;</p>
<p>Dy queryt e mesiperme sherbejne per te shtuar te dhena ne tabele. Ato hyjne tek kategoria DML (Data Manipulation Language). DML perfshin komandat Insert, Update dhe Delete.</p>
<pre>Select * from Users where mosha = 22 ;</pre>
<p>Query e mesiperme do ten a selektoje te gjithe ato persona ne tabelen users te cilet kane moshen 22 vjec. Kjo eshte nje tjeter query e thjeshte dhe hyn ke kategoria e DQL (Data Query Language) e cila perfshin  komandat Select, Show dhe Help por me kryesorja nga keto eshte komanda Select pasi ajo perdoret me shpesh nga te gjitha.</p>
<h1>Querite me komplekse</h1>
<p>&nbsp;</p>
<p>Disa query me funksione Agregate</p>
<p>Pasi kemi shtuar dis ate dhena te tjera ne tabelat e mesiperme duam te gjejme moshen mesatare te<br />
perdorueseve tane.</p>
<pre>Select Avg(mosha) as mosha_mesatare from users</pre>
<p>Kjo query do ten a nxjerre moshen mesatare te te gjithe perdoruesve tane.</p>
<p>Per tabelat e mesiperme bejme nje query kerkimi pak me te komplikuar.</p>
<p>Na duhet te selektojme te gjith perdoruesit qe jane nga Tirana</p>
<pre>Select * from users where Aid in (select Aid from address where qyteti = 'Tirane');</pre>
<p>Krijojme nje tabele te re per blerjet qe kan bere keto tre perdorues</p>
<pre>

Create table Orders(

Order_Id int  NOT NULL  Primary Key Auto_Increment,

Order_Date Date,

Order_Price int,

Uid int,

Foreign Key (Uid) references users(Uid)

)</pre>
<p>E mbushim kete tabele me te dhena. Kerkesa eshte qe te shfaqim totalin e blerjeve per secilin klient.</p>
<pre>

SELECT users.Emer, users.Mbiemer, SUM( Order_Price ) as Shuma_Totale

FROM orders

INNER JOIN users ON orders.uId = users.uId

GROUP BY orders.uid ;</pre>
<p>Ndryshimi ndermjet Join , Left Join dhe Outer Join eshte tek menyra se si I shfaqin te dhenat. Join shfaq ato te dhena nga dy ose me shume tabela, qe kane te pakten nje lidhje me njera tjetren.  Left Join shfaq te gjitha te dhenat nga tabela e pare pa pasur nevoj te kete se sben nje lidhje. Right join shfaq te gjitha te dhenat nga tabela e dyte pa pasur nevoj te kete lidhje me tabelen e pare. Ndersa outter join I shfaq te gjitha te dhenat nga te dyja tabelat pa pasur nevoj te kene lidhje me njera tjetren.</p>
<p>Persa I perket query me Union perdoret per te bashkuar te dhenat e dy tabelave ne nje tabele te vetme. Me kete komand duhet pasur kujdes pasi nqs k ate dhena te njejta ne te dyja tabelat e liston vetem nje here ate. Per te bashkuar dhe shfaqur te gjitha te dhenat duhet query Union All.</p>
<h1>Procedurat dhe funksionet</h1>
<p><strong> </strong></p>
<h2>Perkufizimi i Stored Procedure</h2>
<p>&nbsp;</p>
<p>Nje proçedure e ruajtur quhet nje segment kodi Sql, I cili ruhet ne database. Kjo procedure mund te thirret nga programuesi, nga nje trigger ose nga nje procedure tjeter. Nje procedure e cila therret vetveten quhet nje procedure rekursive. Gati te gjitha RDBMS e suportojne mjaft mire procedure recursive pervec MYSQL.</p>
<h3>Avantazhet</h3>
<ul>
<li>Procedurat e ruajtura rrisin performance e aplikacioneve. Pasi krijohet, procedura ruhet ne katalogun e databazes. Ajo ekzekutohet me shpejte se queryt e thjeshta qe I dergohen databazes nga aplikacioni.</li>
<li>Procedurat ulin ndjeshem trafikun ndermjet Databazes dhe Aplikacionit sepse ne vend qe te dergoj rrjeshta kodi te gjate dhe te pa kompiluar, Aplikacionit I duhet vetem qe te dergoj emrin e procedures dhe te marre mbrapsht te dhenat.</li>
<li>Procedurat mund te perdoren ne me shume se nje aplikacion. Ato jane transparente dhe shfaqin nderfaqen e databazes, keshtu qe programuesit nuk do i duhet te rishkruaj funksione qe jane te gateshme.</li>
<li>Procedurat jane te sigurta. Kjo ndodh pasi administrator mund ti jap akses te drejtperdrejte nje aplikacioni vetem ne procedure dhe ne asnje tabele tjeter te asaj database.</li>
</ul>
<p>Pas ketyre avantazheve kemi dhe disa disavantazhe:</p>
<p><strong>Disavant</strong>a<strong>zhet</strong></p>
<ul>
<li>Procedurat e ngarkojne shume si memorjen ashtu dhe procesoret e databazes/</li>
<li>Procedurat e ruajtura permbajne vetem sql deklarative keshtu qe eshte shume e veshtire per te shkruajtur procedura me komplekse sic mund te shkruhen ne Java ose C#.</li>
<li>Eshte shume e veshtire ti besh Debug procedurave dhe ky funksion nuk ofrohet ne te gjithe RDBMS.</li>
<li>Nuk eshte e lehte ti shkruash dhe ti mirembash.</li>
</ul>
<p>Si cdo gje tjeter dhe procedurat kane Avantazhet dhe Disavantazhet. Pra perpara se te fillohet me zhvillimin e nje aplikacioni duhet bere nje balancim per te vendosur nese te perdoren ose jo procedurat.</p>
<p><strong> </strong></p>
<h2>Tipet e te dhenave ne stored procedure:</h2>
<p>&nbsp;</p>
<table width="100%" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="20%">Tipi I te dhenave</td>
<td width="79%">Pershkrimi</td>
</tr>
<tr>
<td valign="top" width="20%">BigInt</td>
<td valign="top" width="79%">Nje Integer 64 bit –sh I pa shenjuar. Ky tip te dhene ka nje shtrirje nga<em>-9,223,372,036,854,775,808</em> deri ne <em>9,223,372,036,854,775,807</em>.</td>
</tr>
<tr>
<td valign="top" width="20%">Boolean</td>
<td valign="top" width="79%">Nje vlere booleane, <em>true</em> ose <em>false</em></td>
</tr>
<tr>
<td valign="top" width="20%">Char</td>
<td valign="top" width="79%">Nje tip te dhene qe permban nje varg me stringje.</td>
</tr>
<tr>
<td valign="top" width="20%">Currency</td>
<td valign="top" width="79%">Nje vlere kembimi qe varion nga <em>-922,337,203,685,477.5808</em> deri ne <em>922,337,203,685,477.5807 </em>me nje saktesi deri ne 10 mije monedha.</td>
</tr>
<tr>
<td valign="top" width="20%">Date</td>
<td valign="top" width="79%">Perdoret per te treguar datren. Ruhet sin je vlere Double.</td>
</tr>
<tr>
<td valign="top" width="20%">DBDate</td>
<td valign="top" width="79%">Shfaq daten ne formatin  <em>yyyymmdd</em>.</td>
</tr>
<tr>
<td valign="top" width="20%">DBTime</td>
<td valign="top" width="79%">Shfaq oren ne formatin <em>hhmmss</em>.</td>
</tr>
<tr>
<td valign="top" width="20%">DBTimeStamp</td>
<td valign="top" width="79%">Shfaq oren dhe daten ne formatin <em>yyyymmddhhmmss</em>.</td>
</tr>
<tr>
<td valign="top" width="20%">Decimal</td>
<td valign="top" width="79%">Nje vlere me precision fiks dhe shkalle numerike ndermjet <em>-10^38 -1</em> dhe <em>10^38 -1</em>.</td>
</tr>
<tr>
<td valign="top" width="20%">Empty</td>
<td valign="top" width="79%">Pa vlere.</td>
</tr>
<tr>
<td valign="top" width="20%">FileTime</td>
<td valign="top" width="79%">Nje integer 64 bit I cili prezanton nje numer me interval 100 nano sekonda qe nga 1 Janar 1601.</td>
</tr>
<tr>
<td valign="top" width="20%">GUID</td>
<td valign="top" width="79%">Nje Identifikues unik global ose &#8220;GUID&#8221;, nje Integer 128-bit (16 bytes) , I cili mund te perdoret ndermjet te gjithe kompjuterave dhe rrjetave kudo qe nje identifikues unik kerkuhet. Nje identifikues I tille ka shume pak mundesi te dyfishohet.</td>
</tr>
<tr>
<td valign="top" width="20%">Integer</td>
<td valign="top" width="79%">Nje Integer 32 bit,I cili ka nje shtrirje nga<em>-2,147,483,648</em> deri ne  <em>2,147,483,647.</em></td>
</tr>
<tr>
<td valign="top" width="20%">LongVarBinary</td>
<td valign="top" width="79%">Nje vlere e gjate binare,e cila mban nje vector te gjate integerash me nje shtrirje nga <em>0</em> deri ne <em>255.</em></td>
</tr>
<tr>
<td valign="top" width="20%">LongVarChar</td>
<td valign="top" width="79%">Nje vlere e gjate stringu qe nuk mbaron.</td>
</tr>
<tr>
<td valign="top" width="20%">LongVarWChar</td>
<td valign="top" width="79%">Nje vlere e gjate stringu UNICODE qe nuk mbaron.</td>
</tr>
<tr>
<td valign="top" width="20%">Numeric</td>
<td valign="top" width="79%">Nje vlere ekzakte numerike me shkalle shtrirje ndermjet <em>-10^38 -1</em> dhe <em>10^38 -1</em>.</td>
</tr>
<tr>
<td valign="top" width="20%">Single</td>
<td valign="top" width="79%">Nje numer nme presje me nje shtrirje  nga <em>-3.40E +38</em> deri ne  <em>3.40E +38.</em></td>
</tr>
<tr>
<td valign="top" width="20%">SmallInt</td>
<td valign="top" width="79%">Nje Integer 16 bit I nenshkruar I cili permban vlera duke filluar nga -32768 deri tek 32767.</td>
</tr>
<tr>
<td valign="top" width="20%">TinyInt</td>
<td valign="top" width="79%">Nje integer 8 bit I nenshkruar I cili ka nje shtrirje vlerash nga – 128 deri ne 127.</td>
</tr>
<tr>
<td valign="top" width="20%">UnsignedBigInt</td>
<td valign="top" width="79%">Nje Integer 64 bit I pa nenshkruar I cili ka nje shtrirje vlerash nga 0 deri ne <em>18,446,744,073,709,551,615.</em></td>
</tr>
<tr>
<td valign="top" width="20%">UnsignedInt</td>
<td valign="top" width="79%">Nje Integer 32 bit I pa nenshkruar I cili ka nje shtrirje vlerash nga 0 deri ne <em>4,294,967,295.</em></td>
</tr>
<tr>
<td valign="top" width="20%">UnsignedSmallInt</td>
<td valign="top" width="79%">Nje Integer 16 bit I pa nenshkruar I cili ka nje shtrirje vlerash nga 0 deri ne <em>65535.</em></td>
</tr>
<tr>
<td valign="top" width="20%">UnsignedTinyInt</td>
<td valign="top" width="79%">Nje Integer 8 bit I pa nenshkruar I cili ka nje shtrirje vlerash nga 0 deri ne <em>255.</em></td>
</tr>
<tr>
<td valign="top" width="20%">UserDefined</td>
<td valign="top" width="79%">Lejon perdoruesin te shtoj tipin scalar te serverit te databazes. UDT –te mund te mbajne shume element te cilet mund te kene sjellje te ndryshme, duke I diferencuar ato nga aliaset e te dhenave tradicionale te cilet mund te kishin vetem nje tip te sistemit. Jane te perdoreshme per krijimin e dative, kohes, currency, tippet numerike te shtuara ose per te punuar me te dhene te enkriptuarar.</td>
</tr>
<tr>
<td valign="top" width="20%">VarBinary</td>
<td valign="top" width="79%">Perdoret per te krijuar nje array bitesh.</td>
</tr>
<tr>
<td valign="top" width="20%">VarChar</td>
<td valign="top" width="79%">Variabel qe permban nje numer te pa fundem karakteresh jo Unicode</td>
</tr>
<tr>
<td valign="top" width="20%">Variant</td>
<td valign="top" width="79%">Nje tip special te shenash qe mund te permbaj vlera numerike, string, binare ose daten si dhe disa vlera special si Empty ose Null</td>
</tr>
<tr>
<td valign="top" width="20%">VarNumeric</td>
<td valign="top" width="79%">Nje variabel e gjate e cila permban vlera numerike qe shtrihen nga <em>-10^38 -1 dhe 10^ 38 -1</em>.</td>
</tr>
<tr>
<td valign="top" width="20%">VarWChar</td>
<td valign="top" width="79%">Nje variabel e gjate, e pa fundme vlerash karakteresh unikode.</td>
</tr>
<tr>
<td valign="top" width="20%">WChar</td>
<td valign="top" width="79%">Nje varg karakteresh Unicode</td>
</tr>
</tbody>
</table>
<p><strong> </strong></p>
<h2>Krijimi i nje stored procedure</h2>
<pre>DELIMITER //

CREATE PROCEDURE ShowAllUsers()

BEGIN

SELECT *  FROM users;

END //

DELIMITER ;</pre>
<p><strong> </strong></p>
<p>Fillimisht shohim komanden Delimiter, e cila na sherben per te ndryshuar ndaresin standart. Pre delimiter nga ; qe eshte kalon ne //.</p>
<p>Fillimi I nje procedure behet me ane te komandes Create Procedure emir_procedures(). I gjithe kodi ndermjet Begin dhe End do jete ajo cfare ne te vertete procedura do kryej. Ne rastin e mesiperm, procedura e krijuiar do na shfaq te gjithe elementet ne tabelen users qe kemi krijuar me pare.</p>
<p>Thirrja e stored procedure do te behet ne kete menyre:</p>
<pre>Call ShowAllUsers();</pre>
<h2>Deklarimi i variablave</h2>
<p>Variablat perdoren ne Stored Procedures per te ruajtur rezultatin e nxjerre nga procedura. Deklarimi I tyre behet keshtu :</p>
<pre>DECLARE emri_variables tipi(madhesia) DEFAULT vlera_default;

DECLARE numri_perdorueseve int(11) DEFAULT 0;</pre>
<p>&nbsp;</p>
<p>Variables mund ti vendosim nje vlere duke perdorur komanden SET</p>
<pre>DECLARE numri_userave int(11) DEFAULT 0;
SET numri_userave = 3;</pre>
<p>Ose mund tja japim asaj me ante te nje procedure</p>
<pre>DELIMITER //

CREATE PROCEDURE CountAllUsers()

BEGIN

SELECT COUNT(*) INTO numri_userave FROM users;

END //

DELIMITER ;</pre>
<p>&nbsp;</p>
<p>Cdo variable ka qellimin e saj. Nqs nje variable e deklarojme Brenda nje procedure puna e saj mbaron bashke me endin e procedures.</p>
<p>Variablat qe fillojne me @ perpara quhen variabla sesioni.</p>
<h2>Kursoret</h2>
<p><strong> </strong></p>
<p>Kursoret perdoren per te kaluar mes rrjeshtave, te cilet kthehen nga nje kerkese (query), dhe te procesoje nje rrjesht individual. Krusoret kane vecorite e meposhteme:</p>
<ul>
<li>Read Only – Kjo do te thote qe nuk mund  ta updatojme nje krusor.</li>
<li>Mund te ece vetem ne nje drejtim, nuk mund te anashkaloje ose te shkoje mbrapsht.</li>
<li>Asensitiv – Ju duhet te evitoni updatimin e tabelave nderkohe qe kemi nje krusor te hapur pasi mund te nxjerre rezultate te papritura.</li>
</ul>
<p>&nbsp;</p>
<p>Deklarimi I krusoreve behet ne kete menyre :</p>
<pre>DECLARE emir_krusorit FOR kerkesa_select ;</pre>
<p>&nbsp;</p>
<p>Perpara se te filloje kapja e rrjeshtave duhet hapur krusori :</p>
<pre>OPEN emri_krusorit ;</pre>
<p>&nbsp;</p>
<p>Me pas  themi krusorit te kap nje rrjesht dhe te kaloj tek rrjeshti tjeter I kapur.</p>
<pre>FETCH emri_krusorit            INTO    lista_variablave ;</pre>
<p>&nbsp;</p>
<p>Dhe me ne fund e mbyllim krusorin me ane te komandes Close</p>
<pre>

CLOSE emri_krusorit;</pre>
<p>Nje pike tjeter e rendesioshme eshte perdorimi i NOT FOUND HANDLER per te shmangur nje gjendje fatale”no data to fetch”</p>
<p>&nbsp;</p>
<p>Me posht kemi nje shembul mbi perdorimin e krusorit :</p>
<pre>

DELIMITER $$

DROP PROCEDURE IF EXISTS CursorProc$$

CREATE PROCEDURE CursorProc()

BEGIN

DECLARE  no_more_products, quantity_in_stock INT DEFAULT 0;

DECLARE  prd_code VARCHAR(255);

DECLARE  cur_product CURSOR FOR

SELECT  productCode FROM products;

DECLARE  CONTINUE HANDLER FOR NOT FOUND

SET  no_more_products = 1;

&nbsp;

/* for  loggging information */

CREATE  TABLE infologs (

Id int(11) NOT NULL AUTO_INCREMENT,

Msg varchar(255) NOT NULL,

PRIMARY KEY (Id)

);

OPEN  cur_product;

&nbsp;

FETCH  cur_product INTO prd_code;

REPEAT

SELECT  quantityInStock INTO quantity_in_stock

FROM  products

WHERE  productCode = prd_code;

&nbsp;

IF  quantity_in_stock &lt; 100 THEN

INSERT  INTO infologs(msg)

VALUES  (prd_code);

END  IF;

FETCH  cur_product INTO prd_code;

UNTIL  no_more_products = 1

END REPEAT;

CLOSE  cur_product;

SELECT *  FROM infologs;

DROP TABLE  infologs;

END$$

DELIMITER;</pre>
<p>&nbsp;</p>
<h2>Strukturat e kontrollit ne Stored Procedures ne Mysql</h2>
<p>&nbsp;</p>
<p>While Loop</p>
<pre>

DELIMITER $$

DROP PROCEDURE IF EXISTS WhileLoopProc$$

CREATE PROCEDURE WhileLoopProc()

BEGIN

DECLARE x  INT;

DECLARE str  VARCHAR(255);

SET x = 1;

SET str =  '';

WHILE x  &lt;= 5 DO

SET  str = CONCAT(str,x,',');

SET  x = x + 1;

END WHILE;

SELECT str;

END$$

DELIMITER ;</pre>
<p>&nbsp;</p>
<p>Sic e shikojme loop while ben pjese tek strukturat e kontrollit per stored procedures. Po ta verejme me kujdes gjeja e pare qe ben ky cikel eshte kontrolli I kushtit. Per sa kohe qe kushti eshte true ai vazhdon e ekzekutohet. Ne rastin e mesiperm kushti eshte true deri ne momentin qe x shkon me e madhe se 5. Ne ate moment kushti shendrohet ne false dhe cikli mbaron. Problemi me I zakonshem qe haset ne keto raste eshte rasti kur nuk inicializohet x. Ne kete rast vlera e x qendron gjithmone null dhe cikli perseritet ne pafundesi deri kur te ndodh nje stack overflow dhe serveri te bej crash.</p>
<p>&nbsp;</p>
<h2>Repeat loop</h2>
<p>&nbsp;</p>
<p>Ne ndryshim nga Loop –I While ketu fillimisht ekzekutohet kerkesa dhe me pas shihet kushti.</p>
<p>&nbsp;</p>
<pre>

DELIMITER $$

DROP PROCEDURE IF EXISTS RepeatLoopProc$$

CREATE PROCEDURE RepeatLoopProc()

BEGIN

DECLARE x  INT;

DECLARE str  VARCHAR(255);

SET x = 1;

SET str =  '';

REPEAT

SET  str = CONCAT(str,x,',');

SET  x = x + 1;

UNTIL x  &gt; 5

END REPEAT;

SELECT str;

END$$

DELIMITER ;

&nbsp;

&nbsp;

LOOP loop

&nbsp;

DELIMITER $$

DROP PROCEDURE IF EXISTS LOOPLoopProc$$

CREATE PROCEDURE LOOPLoopProc()

BEGIN

DECLARE x  INT;

DECLARE str  VARCHAR(255);

SET x = 1;

SET str =  '';

loop_label:  LOOP

IF  x &gt; 10 THEN

LEAVE  loop_label;

END  IF;

SET  x = x + 1;

IF  (x mod 2) THEN

ITERATE  loop_label;

ELSE

SET  str = CONCAT(str,x,',');

END  IF;

END LOOP;

SELECT str;

END$$

DELIMITER ;</pre>
<p>Ne kete cikel shikojme komanden Loop dhe Leave. Nqs kushti I vendosur plotesohet atehere hyn ne pune komanda leave e cila ben nxjerrjen nga cikli. Verejme qe kemi dhe komanden Iterate. Ne kete rast kushti ne te cilen perdoret Iterate thote qe nqs numri eshte cift atehere injoroje dhe kthehu larte, ne te kundert numri cikli vazhdon pas pjeses else.</p>
<p>&nbsp;</p>
<h2>Prepared Statements</h2>
<p><strong> </strong></p>
<p>Prepared statements bazohet ne 3 statement kryesore :</p>
<p>&nbsp;</p>
<ul>
<li>Prepare</li>
<li>Execute</li>
<li>Deallocate Prepare</li>
</ul>
<p>&nbsp;</p>
<p>E para pergatit statementin per exekutim. E dyta e ekzekuton ndersa e treat e fshin statementin e krijuar me pare.</p>
<pre>

PREPARE pstatus from “select * from users where uid = ?” ;

SET @a := “4”;

EXECUTE pstatus Using @a;</pre>
<p>&nbsp;</p>
<p>Pra te shpjegojme kodin e mesiperm.</p>
<p>Fillimisht pergatitet statement pstatus. Ne te vendoset nje query e cila kerkon te selektoje te gjitha te dhenat nga tabela users ku uid e ka vleren te shenuar me ?. Pikpyetja  eshte nje variable te ciles ne ja japim vleren me poshte. Set @a := “4” I jep pra vleren varialbles @a.</p>
<p>Me poshte ekzekutohet statement i krijuar duke perdorur  komanden Execute e cila therret variablen e mesiperme @a.</p>
<p><strong>Tabelat e perkohshme</strong></p>
<p><strong> </strong></p>
<p>Tabelat e perkoheshme mund te na vijne shpoesh ne ndihme. Gjeja me kryesore qe duhet mbajtur mend ne lidhje me to eshte se kto tabela jane te perkoheshme, pra do te thote qe ne momentin qe mbyllet sesioni I klientit te lidhur me databazen dhe keto tabela fshihen. Psh nqs keto tabela I krijojme me ane ten je kodi php, tabelat fshihen ne momentin qe kodi mbaron ekzekutimin.</p>
<p>&nbsp;</p>
<p>Shembull :</p>
<pre>

mysql&gt; CREATE TEMPORARY TABLE SalesSummary (

-&gt; product_name VARCHAR(50) NOT NULL

-&gt; , total_sales DECIMAL(12,2) NOT NULL DEFAULT 0.00

-&gt; , avg_unit_price DECIMAL(7,2) NOT NULL DEFAULT 0.00

-&gt; , total_units_sold INT UNSIGNED NOT NULL DEFAULT 0

);

Query OK, 0 rows affected (0.00 sec)

&nbsp;

mysql&gt; INSERT INTO SalesSummary

-&gt; (product_name, total_sales, avg_unit_price, total_units_sold)

-&gt; VALUES

-&gt; ('cucumber', 100.25, 90, 2);

&nbsp;

mysql&gt; SELECT * FROM SalesSummary;

</pre>
<p>&nbsp;</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="160"><strong>product_name</strong></td>
<td valign="top" width="160"><strong>total_sales</strong></td>
<td valign="top" width="160"><strong>avg_unit_price</strong></td>
<td valign="top" width="160">total_units_sold</td>
</tr>
<tr>
<td valign="top" width="160">cucumber</td>
<td valign="top" width="160">100.25</td>
<td valign="top" width="160">90.00</td>
<td valign="top" width="160">2</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>1 row in set (0.00 sec)</p>
<p>Ne momentin qe ne shkruajm komanden sql Show tables kjo tabele e sapo krijuar nuk shfaqet ne liste. Ndersa persa I perket fshirjes, pavarsisht e mysql I fshin vet tabelat kur mbaron lidhja, ato mund ti fshijme dhe me komanden Drop Table.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>Krijimi i view-ve</h2>
<p>Views perdoren per disa arsye :</p>
<ol>
<li>Kufizojne psh puntoret te shohin te dhenat qe indexojne punen  e tyre</li>
<li>Krijimin e join per kolona te shume tabelave.</li>
</ol>
<p>Krijimi I nje view</p>
<pre>CREATE VIEW nameview

AS

SELECT Emer from users</pre>
<p>Shikojme ate qe kemi krijuar</p>
<pre>Select * from nameview</pre>
<h2>-Materialized Views</h2>
<p>Nje Materialized View eshte nje rezultat i parallogaritur i nje query –je. Ne ndryshim nga View e thjeshte, rezultati i MV ruhet diku, zakonisht ne nje tabele. MV perdoren zakonisht kur duhet nje pergjigje e menjehereshme dhe kur kerkesa (query) ku Materialized View bazohet do shume kohe qe te nxjerr nje rezultat. MV duhet te rifreskohen here pas here. Rifreskimi varet nga kerkesat, pra sa I aktualizuar duhet te jete kodi i tij. Teorikisht nje MV mund te rifreskohet menjehere ose pas nje kohe te caktuar. MySql nuk e ofron vete kete funksion per eshte e thjeshte te implementojme nje te tille vete.</p>
<h2>-Implementimi I MV</h2>
<p>&nbsp;</p>
<p>Po paraqesim nje shembull se si mund te implementohet nje Materialized View.</p>
<pre>

SELECT COUNT(*)

FROM MyISAM_table;</pre>
<p>&nbsp;</p>
<p>Query e mesiperme na kthen nje rezultat te menjehershem pasi numeruesi ndodhet ne tabelen kryesore. Por kerkesa e mesiperme kerkon disa sekonda deri ne minuta per tu ekzekutuar.<strong></strong></p>
<p>&nbsp;</p>
<p>Nje zgjidhje per kete do te ishte te krijonim nje tabele InnoDB ku te gjithe numerimet e rrjeshtave te ruhenin aty.</p>
<pre>CREATE TABLE innodb_row_count (

id          INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY

, schema_name VARCHAR(64)  NOT NULL

, table_name  VARCHAR(64)  NOT NULL

, row_count   INT UNSIGNED NOT NULL

);</pre>
<p>Ne varesi te kerkesave per aktualitet tabela e mesiperme mund te rifresohej nje here ne dite (nxjerr shume errore ne perfundim), nje here ne ore ose pas cdo ndryshimi (shume e avashte).</p>
<h2>-Rifreskimi i MV</h2>
<p>Materialized views mund te rifreskohen ne menyra te ndryshme :</p>
<ul>
<li>Asnjehere (Vetem ne fillim, kur te dhenat duhen statike)</li>
<li>Sipas kerkeses (si pershembull nje here ne dite, pas mesnate)</li>
<li>Menjehere (pas cdo ndryshimi)</li>
</ul>
<p>Nje rifreskim mund te behet sipas menyrave te meposhteme :</p>
<ul>
<li>I gjithi (shume i ngadalte, nga fillimi)</li>
<li>Nje pjese e percaktuar (E shpejte, nga nje tabele log)</li>
</ul>
<p><strong> </strong></p>
<h2>-Krijimi I nje MV I cili e rifreskon kodin pas çdo ndryshimi</h2>
<p>Per ta kuptuar me mire nje Materialized View duhet te “bejme duart pis”. Pra te fillojme te kodojme.</p>
<p>Krijojme nje tabele te quajtur sales, I vendosim te dhena asaj dhe me pas I shfaqim ato</p>
<pre>CREATE TABLE sales (

sales_id       INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY

, product_name   VARCHAR(128) NOT NULL

, product_price  DECIMAL(8,2) NOT NULL

, product_amount SMALLINT     NOT NULL

);</pre>
<p>&nbsp;</p>
<pre>INSERT INTO sales VALUES

(NULL, 'Apple', 1.25, 1), (NULL, 'Apple', 2.40, 2)

, (NULL, 'Apple', 4.05, 3), (NULL, 'Pear', 6.30, 2)

, (NULL, 'Pear', 12.20, 4), (NULL, 'Plum', 4.85, 3)

;

SELECT * FROM sales;</pre>
<p>&nbsp;</p>
<p>Me pas fillojme me krijimin e MV tone.</p>
<pre>DROP TABLE sales_mv;

CREATE TABLE sales_mv (product_name VARCHAR(128)  NOT NULL, price_sum    DECIMAL(10,2) NOT NULL, amount_sum   INT  NOT NULL, price_avg    FLOAT         NOT NULL, amount_avg   FLOAT   NOT NULL, sales_cnt INT          NOT NULL

,UNIQUE INDEX product (product_name)

);

INSERT INTO sales_mv

SELECT product_name, SUM(product_price), SUM(product_amount), AVG(product_price), AVG(product_amount), COUNT(*) FROM sales

GROUP BY product_name;</pre>
<p>&nbsp;</p>
<p>Tani do te krijojme proçedurat te cilat do ten a mundesojne rifreskimin e MV sipas deshires.</p>
<p>Rifreskimi pas cdo ndryshimi :</p>
<pre>DELIMITER $$

CREATE PROCEDURE refresh_mv_now (

OUT rc INT

)

BEGIN

TRUNCATE TABLE sales_mv;

INSERT INTO sales_mv

SELECT product_name , SUM(product_price), SUM(product_amount),         AVG(product_price), AVG(product_amount), COUNT(*)  FROM sales GROUP BY product_name;

&nbsp;

SET rc = 0;

END;

$$

&nbsp;

DELIMITER ;</pre>
<p>Vendosim te dhenat te tabelen sales dhe shohim nese do ten a updatohet tabela sales_mv me ane te thirrjes se procedures se mesiperme.</p>
<pre>INSERT INTO sales VALUES

(NULL, 'Apple', 2.25, 3), (NULL, 'Plum', 3.35, 1)

, (NULL, 'Pear', 1.80, 2);

CALL refresh_mv_now(@rc);

SELECT * FROM sales_mv;</pre>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="106">product_name</td>
<td valign="top" width="106">price_sum</td>
<td valign="top" width="106">amount_sum</td>
<td valign="top" width="106">price_avg</td>
<td valign="top" width="106">amount_avg</td>
<td valign="top" width="106">sales_cnt</td>
</tr>
<tr>
<td valign="top" width="106">Apple</td>
<td valign="top" width="106">9.95</td>
<td valign="top" width="106">9</td>
<td valign="top" width="106">2.4875</td>
<td valign="top" width="106">2.25</td>
<td valign="top" width="106">4</td>
</tr>
<tr>
<td valign="top" width="106">Pear</td>
<td valign="top" width="106">20.30</td>
<td valign="top" width="106">8</td>
<td valign="top" width="106">6.76667</td>
<td valign="top" width="106">2.66667</td>
<td valign="top" width="106">3</td>
</tr>
<tr>
<td valign="top" width="106">Plum</td>
<td valign="top" width="106">8.20</td>
<td valign="top" width="106">4</td>
<td valign="top" width="106">4.1</td>
<td valign="top" width="106">2</td>
<td valign="top" width="106">3</td>
</tr>
</tbody>
</table>
<p><strong> </strong></p>
<h1>Perfundime</h1>
<p>&nbsp;</p>
<ul>
<li>Trigers ne MySql nuk jane shume te shpejte</li>
<li>MV ndihmojne ne pershpejtimin e disa kerkesave te cilat mund te ngarkojne databazat mbi te cilat ekzekutohen.</li>
<li>Nqs shpejtesia e vendosjes se te dhenave te reja ne database nuk eshte ceshtje primare, perdorimi i MV ul ndjeshem kohen e thirrjes se te dhenave per lexim.</li>
<li>Do pak pune per tu implementuar.</li>
<li>MV duhet te perdoret vetem atehere kur databazat kane shume te dhena.<strong></strong></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.kreatx.com/2012/07/02/tutorial-i-shpejte-per-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Indexing</title>
		<link>http://blog.kreatx.com/2012/05/21/mysql-indexing/</link>
		<comments>http://blog.kreatx.com/2012/05/21/mysql-indexing/#comments</comments>
		<pubDate>Mon, 21 May 2012 09:17:57 +0000</pubDate>
		<dc:creator>Eriketa Sinanaj</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[index]]></category>
		<category><![CDATA[MySql]]></category>

		<guid isPermaLink="false">http://blog.kreatx.com/?p=224</guid>
		<description><![CDATA[Ju ka ndodhur ndonjëherë të vini re një vonesë në kryerjen e veprimeve gjatë përdorimit të aplikimit tuaj me bazë të dhënash MySQL? Me siguri keni menduar se kjo vonesë mund të vijë nga fakti se baza e të dhënave të aplikimit tuaj është tashmë mjaft e madhe. Por çdo të ndodhë në të ardhmen, &#8230;<br/><a href="http://blog.kreatx.com/2012/05/21/mysql-indexing/">Read more <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Ju ka ndodhur ndonjëherë të vini re një vonesë në kryerjen e veprimeve gjatë përdorimit të aplikimit tuaj me bazë të dhënash MySQL? Me siguri keni menduar se kjo vonesë mund të vijë nga fakti se baza e të dhënave të aplikimit tuaj është tashmë mjaft e madhe. Por çdo të ndodhë në të ardhmen, kur dihet se kjo bazë të dhënash do të rritet çdo ditë? Për të rritur performancën e aplikimit tuaj, përdorni në bazen tuaj të të dhënave <strong>Indekset</strong>.</p>
<p>Indeksi i një baze të dhënash është një strukturë të dhënash që rrit shpejtësinë e veprimeve në një tabelë. Indekset mund të krjohen duke përdorur një ose më shumë kolona, duke mundësuar si kërkimin e shpejtë të të dhënave ashtu edhe renditjen efiçente të tyre. Gjatë krijimit të indekseve duhet të përcaktohen qartë kolonat që do të përdoren për krijimin dhe ekzekutimin e SQL Query-ve të ndryshme për t’i krijuar indekset pikërisht mbi këto kolona.</p>
<p>Praktikisht, Indekset janë gjithashtu lloje tabelash që mbajnë çelësin primar (primary key) apo fushën Indeks dhe një shenjues (pointer) në çdo të dhënë të tabelës.</p>
<p>Përdoruesit nuk mund t’i shohin Indekset, ato shërbejnë vetëm për të përshpejtuar procesin e kërkimit dhe filtrimit të të dhënave dhe përdoren nga Database Search Engine për të gjetur të dhënat sa më shpejtë. Megjithatë, duhet patur kujdes në krijimin e Indekseve pasi efikasiteti I tyre nuk varet nga numri por nga rëndësia që kanë në tabelat ku krijohen.</p>
<p>Ja disa këshilla që duhen patur parasysh për të krijuar indekse sa më të vlefshme në bazën tuaj të të dhënave:</p>
<p>- Deklaroni një kolonë të indeksuar Not Null nëse është e mundur.</p>
<p>Megjithëse vlerat Null mund të indeksohen, Null mbetet një vlerë e veçantë që kërkon vendime shtesë gjatë  procesit të krahasimit sipas vlerave çelës (key values). Një Indeks pa vlera Null mund të procesohet më thjeshtë dhe më shpejtë.</p>
<p><strong>-</strong> Shmangni numrin e madh të indekseve</p>
<p>Mos indeksoni një kolonë vetëm sepse mund ta bëni. Nëse ju nuk i referoheni asnjëherë një kolone gjatë krahasimeve (si Where, Order By apo Group By), atëherë nuk është e nevojshme që kjo kolonë të indeksohet.</p>
<p>- Një indeks në një kolonë që ka shumellojshmëri vlerash të ndryshme nuk është shumë efikas.</p>
<p>- Optimizoni tabelat për të kompaktësuar dhe renditur Indekset.</p>
<p>- Indeksoni prefiksin e një kolone në vend të të gjithë kolonës.</p>
<p>P.sh.: Në një bazë të dhënash &#8216;kinematografi&#8217;, në kolonën &#8216;title&#8217; të tabelës &#8216;film&#8217; krijojmë një indeks &#8216;idx_film_title&#8217;. Sipas sintaksës klasike krijimi i këtij indeksi do të bëhej në këtë mënyrë:</p>
<pre>CREATE INDEX idx_film_title ON kinematografi.film(title);</pre>
<p>Ky indeks i referohet të gjithë kolonës &#8216;title&#8217;. Ju, duke njohur mirë llojin e të dhënave që mund të vendosen në këtë kolonë, edhe pse cilesitë e saj lejojnë edhe string-e deri në 255 karaktere(CHAR), mund të parashikoni që nuk mund të ketë ndonje titull filmi të gjatë 255 karaktere. Prandaj, MySQL lejon vendosjen e prefikseve për të bërë të mundur kapjen dhe indeksimin vetëm të një pjese të të dhënave të kolonës &#8216;title&#8217;. Kjo kursen mjaft hapësirë në memorie ashtu edhe në kohën e ekzekutimit të query-së. Në këtë rast mund të përdorim një prefix që e limiton kolonën &#8216;title&#8217; vetëm në 30 karakteret e para:</p>
<pre>CREATE INDEX idx_film_title_short ON kinematografi.film(title(30));</pre>
<p>- Nëse është e mundur përdorni Index Merge në vend të Composite Index</p>
<p>Index Merge është një metodë që përdoret për të kapur të dhëna në kolona të ndryshme dhe për t&#8217;i bashkuar rezultatet e tyre në një. Kjo metodë bashkon rezultatet e të njëjtës tabelë dhe jo të tabelave të ndryshme.</p>
<pre>CREATE TABLE `t_idxmerge` (
  `i` int(11) NOT NULL,
  `j` int(11) NOT NULL,
  `val` char(10) NOT NULL,
  KEY `i` (`i`),
  KEY `j` (`j`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1</pre>
<p>Composite Index është një Indeks i cili në fakt shërben si disa indekse pikërisht për faktin që ai është i përbërë. Kur duam që me anë të nje query t&#8217;i referohemi dy ose më shumë kolonave, atëherë Composite Index do të ishte instrumenti i duhur:</p>
<pre>CREATE TABLE `t_idxcomposite` (
  `i` int(11) NOT NULL,
  `j` int(11) NOT NULL,
  `val` char(10) NOT NULL,
  KEY `i` (`i`,`j`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1</pre>
<p>Të dy metodat kanë avantazhet dhe disavantazhet e tyre. Ndërsa Composite Index lehtëson punën duke iu referuar më shumë kolonave njëkohësisht, Index Merge na siguron një performancë më të lartë dhe është e përdorshme në query-të me kusht OR gjë që nuk mundësohet nga Composite Index.</p>
<p>&nbsp;</p>
<p>Mos harroni të përdorni Indeksimin e tabelave dhe t&#8217;i përmbaheni këshillave të dhëna më sipër për të ndihmuar dhe perfeksionuar performancën e aplikimeve tuaja me bazë të dhënash MySQL.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kreatx.com/2012/05/21/mysql-indexing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
