<?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>Ramūns Usovs &#187; Kods</title>
	<atom:link href="http://ramuuns.id.lv/blog/category/kods/feed/" rel="self" type="application/rss+xml" />
	<link>http://ramuuns.id.lv/blog</link>
	<description>Matemātika, Viņa, Voiska, Aura, programmēšana un viss cits spams, kas garāks par 140 zīmēm</description>
	<lastBuildDate>Fri, 14 May 2010 10:57:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>xls faili iekš php</title>
		<link>http://ramuuns.id.lv/blog/2010/04/20/xls-faili-ieks-php/</link>
		<comments>http://ramuuns.id.lv/blog/2010/04/20/xls-faili-ieks-php/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 14:35:02 +0000</pubDate>
		<dc:creator>Ramūns</dc:creator>
				<category><![CDATA[Kods]]></category>

		<guid isPermaLink="false">http://ramuuns.id.lv/blog/?p=130</guid>
		<description><![CDATA[Kodē php? Profesionāli? Tad šitais, visticamāk, priekš tevis. Pārējie turpina lasīt delfus/fizmatus/nombri/whatever.
Tādad esi takš saskāries iekš specnēm ar prasībām no sērijas &#8220;eksportēt uz MS Excel izveidoto sarakstu ar informāciju&#8230;&#8221;? Neesi &#8211; aha &#8211; jauniņais, nekas, gan jau saskarsies. Nu vo, es arī biju savā pieredzē saskāries reizes daudz. Katru reizi mani mocīja tāda nepatika pret [...]]]></description>
			<content:encoded><![CDATA[<p>Kodē php? Profesionāli? Tad šitais, visticamāk, priekš tevis. Pārējie turpina lasīt <a href="http://delfi.lv">delfus</a>/<a href="http://fizmati.lv">fizmatus</a>/<a href="http://nombre.lv">nombri</a>/whatever.</p>
<p>Tādad esi takš saskāries iekš specnēm ar prasībām no sērijas &#8220;eksportēt uz MS Excel izveidoto sarakstu ar informāciju&#8230;&#8221;? Neesi &#8211; aha &#8211; jauniņais, nekas, gan jau saskarsies. Nu vo, es arī biju savā pieredzē saskāries reizes daudz. Katru reizi mani mocīja tāda nepatika pret pārējo kolēģu piedāvātajiem variantiem, taču internets neko labāku nepiedāvāja, tad nu tika veidoti dažādi tur xml:i ar .xls extensionu, kuru tad tjipa excelis saprot, vai arī .csv faili, vai arī tika izmēģināts tas <a href="http://pear.php.net/Spreadsheet_Excel_Writer">PEARa brīnums</a></p>
<p>Bet tagad pavisam nesen atkal vienā projektiņā uzpeldēja vajadzība ģenerēt xls failus (nu tur tā ar vairākiem šītiem un visām pārējām izvirtībām), un gribējās vēlreiz uzmest aci internetiem vai nav kaut kas pa šo laiku mainījies dzīvē. Un kā izrādās &#8211; ir.</p>
<p>Eksistē tāds viens brīnumjauks projektiņš ar nosaukumu <a href="http://phpexcel.codeplex.com/">PHPExcel</a>, kurš kā izrādās, ne tikai prot ģenerēt korektus .xls failus, bet suportē vēl visādus brīnumus no sērijas .xlsx (office 2007), rūtiņu mērdžošanu, formatēšanu, formulas, pat attēlu embedēšanu.</p>
<p>I mean, just look at this:</p>
<p><img class="alignnone" src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=PHPExcel&amp;DownloadId=14753" alt="" width="498" height="494" /></p>
<p>Protams, šis nav quick and dirty almost excel failu ģenerators, bet jebkurā gadījumā dārgo php developeri: es tev šo brīnumu rekomendēju, tici man, tavs klients/projvads/whatever būs tev pateicīgs.</p>
]]></content:encoded>
			<wfw:commentRss>http://ramuuns.id.lv/blog/2010/04/20/xls-faili-ieks-php/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Nošārē vienādojumu</title>
		<link>http://ramuuns.id.lv/blog/2009/09/24/nosare-vienadojumu/</link>
		<comments>http://ramuuns.id.lv/blog/2009/09/24/nosare-vienadojumu/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 21:15:27 +0000</pubDate>
		<dc:creator>Ramūns</dc:creator>
				<category><![CDATA[Kods]]></category>
		<category><![CDATA[Matemātika]]></category>

		<guid isPermaLink="false">http://ramuuns.id.lv/blog/?p=49</guid>
		<description><![CDATA[Sveiks manu mīļo matemātiķi, es zinu, ka tu vienmēr esi ar skaudību raudzījies uz s &#8211; galu galā viņiem ir iespējas ar saviem sacerējumiem dalīties daudzos un dažādos veidos &#8211; viņiem ir tur visādi servisi aļa paste.php.lv, nemaz nerunājot par tādiem koda šārēšanas pasākumiem kā tur teiksim github, kuros ar savu kodu var pazīmēties jau [...]]]></description>
			<content:encoded><![CDATA[<p>Sveiks manu mīļo matemātiķi, es zinu, ka tu vienmēr esi ar skaudību raudzījies uz s &#8211; galu galā viņiem ir iespējas ar saviem sacerējumiem dalīties daudzos un dažādos veidos &#8211; viņiem ir tur visādi servisi aļa <a href="http://paste.php.lv/">paste.php.lv</a>, nemaz nerunājot par tādiem koda šārēšanas pasākumiem kā tur teiksim <a href="http://github.com/">github</a>, kuros ar savu kodu var pazīmēties jau dziļākos ūdeņos.</p>
<p>Bet tev? Vot uzrakstīji tu ūberkrutu un skaistu vienādojumu (nu, nejau obligāti vienādojumu, tur teiksim formulu, vai vienkārši kaut ko skaistu ar matemātiskiem simboliem) un? Sēž viņš tavā kladē, nu varbūt, ja paveicas, vari uzrakstīt to uz tāfeles, vai (šis ir parasti rezervēts pasniedzējiem un matemātisku darbu aizstāvētājiem) ierakstīt to prezentācijā.</p>
<p>Protams, ja esi ūbermatemātiķis, tad jau tu noteikti publicējies visādos tur  zinātniskos žurnālos, bet tos jau lasa tāds šaurs cilvēku loks, un teiksim, savai mammai tu kopiju diezin vai aizsūtīsi.</p>
<p>Bet tas viss mainās šodien. Tev tagad arī savs webserviss, ar kura palīdzību vari zīmēties starp saviem draugiem, radiem un paziņām, nemaz nerunājot par nejaušiem svešiniekiem. Tev tagad tiek piedāvāts <a href="http://mathtex.im">vienādojumu šārēšanas serviss</a>, kurš <span style="text-decoration: line-through;">gan (pagaidām) atrodas pavisam sarežģīti uzminamā adresē &#8211; http://ramuuns.id.lv/tex.html</span> nu jau atrodas pavisam svaigi skaistā adresē: http://mathtex.im</p>
<p>Ko tad tu tur vari darīt &#8211; lūk ko &#8211; vari ierakstīt savu matemātisko veidojumu iekš <a href="http://en.wikipedia.org/wiki/TeX">T</a><sub><a href="http://en.wikipedia.org/wiki/TeX">E</a></sub><a href="http://en.wikipedia.org/wiki/TeX">X</a>a, ierakstīt tam kādu nosaukumu, kuru tu pats atcerēsies (lai varētu pēc tam sameklēt), un nospiest podziņu saglabāt. Pretī tu iegūsi unikālu adresi savam vienādojumam, kuru tu vari likt iekšā savā blodziņā, vai arī gluži vienkārši saiti uz pašu bildīti, kuru arī vari likt turpat.</p>
<p>Tāpat vari apskatīties, ko tad pārējie ir saveidojuši, kā arī mēģināt sameklēt to, kas tevi interesē (meklētājs NAV pārlieku inteliģents un meklē tikai vienādojuma nosaukumā).</p>
<p>Paldies par uzmanību un lai labi rakstās vienādojumi.</p>
]]></content:encoded>
			<wfw:commentRss>http://ramuuns.id.lv/blog/2009/09/24/nosare-vienadojumu/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>JS code assist in JS</title>
		<link>http://ramuuns.id.lv/blog/2009/09/17/js-code-assist-in-js/</link>
		<comments>http://ramuuns.id.lv/blog/2009/09/17/js-code-assist-in-js/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 18:50:42 +0000</pubDate>
		<dc:creator>Ramūns</dc:creator>
				<category><![CDATA[Kods]]></category>

		<guid isPermaLink="false">http://ramuuns.id.lv/blog/?p=44</guid>
		<description><![CDATA[Gribēju tev manu dārgo lasītāj izstāstīt par savu šīsnedēļas naktsprojektu. Nē, nē, nejau to, kur līdz turpat trijiem naktī tiek nostāvēts Ļeņingradā, jo sarunas ar Uldi, Andri un Aneti ir foršas &#8211; par to lai Andris uzraksta Luckānismā.
Es te par citu savu izklaidi &#8211; Math.js un tā testēšanas un izmantošanas konsoli.
Viss sākās ar to, ka pirmdien [...]]]></description>
			<content:encoded><![CDATA[<p>Gribēju tev manu dārgo lasītāj izstāstīt par savu šīsnedēļas naktsprojektu. Nē, nē, nejau to, kur līdz turpat trijiem naktī tiek nostāvēts Ļeņingradā, jo sarunas ar Uldi, Andri un Aneti ir foršas &#8211; par to lai Andris uzraksta <a href="http://luckanisms.com">Luckānismā</a>.</p>
<p>Es te par citu savu izklaidi &#8211; <a href="http://ramuuns.id.lv/blog/math-js/">Math.js</a> un tā testēšanas un izmantošanas <a href="http://ramuuns.id.lv/math.js.html">konsoli</a>.</p>
<p>Viss sākās ar to, ka pirmdien (laikam, kaut gan iespējams arī otrdien) izdomāju, ka jāpieliek konsolei megafīča &#8211; grafiku zīmēšana &#8211; domāts darīts &#8211; samedīju internetos vienu koda gabalu, kur ar <a href="http://experiments.mennovanslooten.nl/2007/plotter/">canvas tiek zīmēti funkciju grafiki</a>. Godīgi nospēru šo kodu, pielāgoju to savām vajadzībām un sāku gūgletõlkā zīmēties.</p>
<p>A tur man pretī &#8211; a tu, bļe scuko, helpu uztaisi &#8211; a to fig var saprast, ko vispār iekš tās tavas konsoles var un ko nevar. Es, protams, kā jau parasti normāli koderi atbild uz jūzeru rekvestiem &#8211; šāvu pretī &#8211; da nah &#8211; un vispār visa šitā figņa ir tīri manām vajadzībām un es tjipa atceros visu, ko var un ko nevar.</p>
<p>Bet, tomēr savā būtībā jusdamies koderis sajutu sevī čallendžu &#8211; a moš tomēr kaut kādu code assist rīku var uzmeistarot, nu tur tjipa no sērijas funkcijām autocomplete. Un tad atcerējos par vienu lielisku JS īpašību &#8211; for property in object ciklus &#8211; takš var uztaisīt, ka atpazīstam kaut kādu sarakstīto teksta gabaliņu un tad nočekojam vai rakstītais teksts ir kaut kāda propertija sākums. Domāts darīts.</p>
<p>Eku interesantais kods:</p>
<p><code><br />
//tekstārejai ar idu #js_execute, pieliekam eventu pie pogu nospiešanas<br />
//saprotams, ka izmantojam jQuery<br />
$('#js_execute').keydown(function(e){<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( e.shiftKey &#038;&#038; e.keyCode == 32) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.preventDefault();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.getJsExecSelection(this.selectionStart);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
});</p>
<p>window.getJsExecSelection = function(ro){<br />
&nbsp;&nbsp;&nbsp;&nbsp;var el =$('#js_execute')[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;var text = $('#js_execute').val().substr(0,ro);<br />
&nbsp;&nbsp;&nbsp;&nbsp;var GlobalObjs = ['Math','window','document','navigator','isFinite',<br />
&nbsp;&nbsp;&nbsp;&nbsp;'isNaN','Number','parseFloat','parseInt','Infinity','NaN','undefined'];<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;function getSuggestion(objs,i,parentObj) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( objs.length - 1 == i ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//suggestion here<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( i == 0 ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for ( var k = 0; k<GlobalObjs.length; k++ ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( GlobalObjs[k].match('^'+objs[i]) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var htext = GlobalObjs[k].substr(objs[i].length);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$('#js_execute').val(text+htext+textAfter);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.selectionStart = ro;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.selectionEnd = ro+htext.length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for ( var item in parentObj ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( item.match('^'+objs[i]) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var htext = item.substr(objs[i].length);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$('#js_execute').val(text+htext+textAfter);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.selectionStart = ro;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.selectionEnd = ro+htext.length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( i == 1 &#038;&#038; parentObj == Math ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var MathProps = ['E','LN2','LN10','LOG2E','LOG10E','PI','SQRT1_2','SQRT2',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'abs','acos','asin','atan','atan2','ceil','cos','exp','floor',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'log','max','min','pow','random','round','sin','sqrt','tan'];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for ( var k = 0; k< MathProps.length; k++ ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( MathProps[k].match('^'+objs[i]) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var htext = MathProps[k].substr(objs[i].length);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$('#js_execute').val(text+htext+textAfter);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.selectionStart = ro;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.selectionEnd = ro+htext.length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//get the  current obj<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( i == 0 ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for ( var k = 0; k<GlobalObjs.length; k++ ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( objs[i] == GlobalObjs[k] ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return getSuggestion(objs,i+1,eval(GlobalObjs[k]));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for ( var k in parentObj ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( k == objs[i] ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return getSuggestion(objs,i+1,parentObj[k]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;var textAfter = $('#js_execute').val().substr(ro);<br />
&nbsp;&nbsp;&nbsp;&nbsp;var lastToken = text.match(/[a-zA-Z][a-zA-Z0-9\.]*$/);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( lastToken != null ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var objs = lastToken.toString().split('.');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getSuggestion(objs,0,null);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
}<br />
</code></p>
<p>Dažas piezīmes šī te koda sakarā:</p>
<ul>
<li>Kā redzams, tad autocomplete tiek izsaukts nospiežot Shift + space (pirmajā variantā bija, ka tas notiek automātiski ar taimerīti, bet praksē lietojot šādu variantu nākas saskarties ar dažādām problēmām.)</li>
<li>Šis kods, ne sūda nestrādās uz IE (kas gan ir kinda pohuj - kanvasi arī nestrādā, turklāt vispār ir takš arī normāli pārlūki mūsdienās atrodami)</li>
<li>Nav nekādas iespējas normāli tikt klāt pie globālajiem objektiem/funkcijām, līdz ar to tie ir jādefinē, kā arī jāapstrādā atsevišķi.</li>
<li>Tāpat, kā izrādās, tad oriģinālās metodes/propertijus nevar dabūt arī valodas objektiem - (aļa tur Math/Array/String, etc.) līdz ar to, ja tādus gribās - tad tie arī ir jādefinē atsevišķi. Savukārt DOM objektu propertijus šis autocomplete māk atrast pavisam lieliski.</li>
<li>Vēl, kas ir kruta - ja tiek piedefinēts jauns propertijs, kādam no esošajiem objektiem, nu tur teiksim window objektam uztaisam propertiju blahblahblah (window.blahblahblah = 5), tad arī šo propertiju varēs dabūt iekš autocomplete.</li>
<li>Protams, ir visādas, lietas, kā šo pasākumu varētu sarežģīt un uztaisīt vēl lietojamāku - nu tur parādās kautkāds popups ar visiem objekta propertijiem, kuri atbilst dotā stringa sākumam, kurus tad attiecīgi var izvēlēties 'n shit.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ramuuns.id.lv/blog/2009/09/17/js-code-assist-in-js/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pretspama rīki</title>
		<link>http://ramuuns.id.lv/blog/2009/08/27/pretspama-riki/</link>
		<comments>http://ramuuns.id.lv/blog/2009/08/27/pretspama-riki/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 21:36:31 +0000</pubDate>
		<dc:creator>Ramūns</dc:creator>
				<category><![CDATA[Kods]]></category>

		<guid isPermaLink="false">http://ramuuns.id.lv/blog/?p=37</guid>
		<description><![CDATA[Sēžu te tagad un rakstu specifikāciju vienam projektiņam un izdomāju papētīt kādi tad eksistē komentāru pretspama rīki.
Pirmkārt jau eksistē CAPTCHAs, bet tās ir tik lietotājam nedraudzīgas, turklāt praksē nestrādājošas, ka nav īpaši jēgas tās apskatīt, galu galā, kuram tad patīk zīlēt tos burtiņus iekš tām bildītēm, nemaz nerunājot par tiem nenozīmīgajiem interneta lietotāju procentiem, kuri [...]]]></description>
			<content:encoded><![CDATA[<p>Sēžu te tagad un rakstu specifikāciju vienam projektiņam un izdomāju papētīt kādi tad eksistē komentāru pretspama rīki.</p>
<p>Pirmkārt jau eksistē CAPTCHAs, bet tās ir tik lietotājam nedraudzīgas, turklāt praksē nestrādājošas, ka nav īpaši jēgas tās apskatīt, galu galā, kuram tad patīk zīlēt tos burtiņus iekš tām bildītēm, nemaz nerunājot par tiem nenozīmīgajiem interneta lietotāju procentiem, kuri tās nespēj saskatīt.</p>
<p>Līdz ar to pievērsos filtriem.</p>
<p>Protams, vienmēr pastāv iespēja rakstīt savu filtru, bet &#8211; kuram gan tādām lietam ir laiks. Ok, paņemam jau gatavu <a href="http://www.google.lv/search?hl=lv&amp;client=opera&amp;rls=en&amp;hs=1HQ&amp;q=php+bayesian+comments+spam+filter&amp;btnG=Mekl%C4%93t&amp;meta=">filtru risinājumu</a>, bet tur atkal sastopamies ar to problēmu, ka spama/labo komentāru datu bāze ir principā jābūvē pašam un filtrs arī jāapmāca pašam.</p>
<p>Neder.</p>
<p>Tātad daram ko &#8211; atceramies, ka iekš WP ir tāds brīnumjauks plugins ar nosaukumu <a href="http://akismet.com">Akismet</a>. Attiecīgā brīnuma wikipēdijas lapā apskatam konkurentus. Un tā izveidojas neliels sarakstiņš.</p>
<ol>
<li>Akismet<br />
Pats laikam vispopulārākais spamfiltrs blogu pasaulē. Strādā. Piedāvā API, kas to ļauj viegli integrēt ar jebko. Vienīgais mīnuss tāds, ka nav par velti komerciāliem mērķiem</li>
<li><a href="http://mollom.com/">Mollom</a><br />
Piedāvā pašu velnu, tai skaitā kaptčas un vēlsazinko, arī par bezmaksu, vienīgi bezmaksai ir tāda nelaime, ka ir limits &#8211; 100 pieprasījumi dienā. (plus vēl tas, ka tie bezmaksas pieprasījumi stāv rindā aiz maksas pieprasījumiem)</li>
<li><a href="http://defensio.com/">Defensio</a><br />
Šis variants jau ir komerciāliem mērķiem draudzīgāks &#8211; proti, ja tu taisi pats savus API pieprasījumus, tad pirmie 15K mēnesī ir par bezmaksu, tālāk nākamie 35K ir par 20$ (kas nav īpaši daudz) pēc tam ik pa 15K + 15$</li>
<li><a href="http://antispam.typepad.com/">TypePad Antispam</a><br />
Savukārt šis ir mans favorīts &#8211; pirmkārt izmanto Akismeta API (kas nozīmē to, ka gatavu kodu principā atrast ir līdz bezgalībai vienkārši) otrkārt ir pilnīgi bezmaksas un bez visādiemtur ierobežojumiem.<br />
Vienīgais mīnuss šim brīnumam ir tāds, ka projekts ir samērā jauns, kas nozimē, ka filtrs varētu būt vēl tāds diezgan apmācāms, bet šo problēmu var labot tikai laiks.</li>
</ol>
<p>A jūs jaunieši &#8211; ko izmantojat? Ko iesakāt?</p>
]]></content:encoded>
			<wfw:commentRss>http://ramuuns.id.lv/blog/2009/08/27/pretspama-riki/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
