<?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>Code.ge Blog</title>
	<atom:link href="http://www.code.ge/feed" rel="self" type="application/rss+xml" />
	<link>http://www.code.ge</link>
	<description>ბლოგი ვებ პროგრამირებისა და ტექნოლოგიების შესახებ</description>
	<lastBuildDate>Wed, 02 Dec 2009 08:45:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>STL: Simple Template Language Preview</title>
		<link>http://www.code.ge/posts/stl-simple-template-language-preview</link>
		<comments>http://www.code.ge/posts/stl-simple-template-language-preview#comments</comments>
		<pubDate>Wed, 02 Dec 2009 08:41:15 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[RegExp]]></category>
		<category><![CDATA[stl]]></category>
		<category><![CDATA[template language]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=428</guid>
		<description><![CDATA[დიდი ხნის პაუზის შემდეგ მინდა წარმოგიდგინოთ ერთი ახალი პროექტი რომელზეც გარკვეული პერიოდია ვმუშაობ. ჯერჯერობით ეს არის პრივიუ რელიზი რომელიც მალე საბოლოო ფაზაში შევა და სრულ დოკუმენტაციასა და მაგალითებს შესაბამისად წარმოგიდგენთ. მანამდე კი მისი ნახვა და გადმოწერა შეგიძლიათ შემდეგი მისამართიდან: STL Library.
რა არის STL? როგორც სათაურმა მიგანიშნათ ეს არის PHP &#8211; ზე დაწერილი მარტივი და მოქნილი [...]]]></description>
			<content:encoded><![CDATA[<p>დიდი ხნის პაუზის შემდეგ მინდა წარმოგიდგინოთ ერთი ახალი პროექტი რომელზეც გარკვეული პერიოდია ვმუშაობ. ჯერჯერობით ეს არის პრივიუ რელიზი რომელიც მალე საბოლოო ფაზაში შევა და სრულ დოკუმენტაციასა და მაგალითებს შესაბამისად წარმოგიდგენთ. მანამდე კი მისი ნახვა და გადმოწერა შეგიძლიათ შემდეგი მისამართიდან: <a href="http://github.com/ioseb/STL/blob/master/stl.lib.php">STL Library</a>.</p>
<p>რა არის STL? როგორც სათაურმა მიგანიშნათ ეს არის PHP &#8211; ზე დაწერილი მარტივი და მოქნილი შაბლონების ენა და ამ ენის პროცესორი. STL არის მარტივად გამოყენებადი შაბლონების ენა რომელიც არის საკმაოდ მარტივად ასათვისებელი თუ თქვენ გაგაჩნიათ ნებისმიერ მსგავს შაბლონების ენასთან  სულ მცირედი მუშაობის გამოცდილებაც კი. მისი სინტაქსი წააგავს Django, Jinja2, Smarty და სხვა მსგავსი შაბნოლენბის ენებს.</p>
<p>ბიბლიოთეკას არ აქვს არანაირი დამოკიდებულება სხვა გარე ბიბლიოთეკებზე და PHP &#8211; ს სპეციფიურ მოდულებზე. კი არის სრულად ე.წ. standalone და მისი გამოყენება შეგიძლიათ ნებისმიერ PHP პროექტში. <span id="more-428"></span></p>
<p>რა არის საჭირო მისი გამოყენებისთვის? სულ მცირედი: 1) თქვენს პროექტში უნდა ჩატვირთოთ <strong>stl.lib.php</strong> რომლის გადაწერაც შეგიძლიათ ზემოთ მითითებული მისამართიდან; 2) შექმნათ შაბლონი ნებისმიერ ტექსტურ ფორმატში(html, txt, xml და ა.შ); 3) შექმნათ STL_template კლასის ობიექტი, გადასცეთ მას საჭირო ტექსტური შაბლონი და კონტესტური ცვლადები და შეასრულოთ. სულ ეს არის და ეს. როგორ? მაგალითი იხილეთ ქვემოთ:</p>
<p><strong>HTML შაბლონი &#8211; test.html</strong></p>
<div class="codecolorer-container html4strict blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">{if students}<br />
&nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/h1.html"><span style="color: #000000; font-weight: bold;">h1</span></a>&gt;</span>This is students list<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/h1.html"><span style="color: #000000; font-weight: bold;">h1</span></a>&gt;</span><br />
&nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/ul.html"><span style="color: #000000; font-weight: bold;">ul</span></a>&gt;</span><br />
&nbsp; {for student in students}<br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/li.html"><span style="color: #000000; font-weight: bold;">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/h2.html"><span style="color: #000000; font-weight: bold;">h2</span></a>&gt;</span>{fn:ucfirst(strtolower(%student.name%))}<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/h2.html"><span style="color: #000000; font-weight: bold;">h2</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/ul.html"><span style="color: #000000; font-weight: bold;">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; {for friend in student.friends}<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/li.html"><span style="color: #000000; font-weight: bold;">li</span></a>&gt;</span>%friend.name%<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/li.html"><span style="color: #000000; font-weight: bold;">li</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; {/for}<br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/ul.html"><span style="color: #000000; font-weight: bold;">ul</span></a>&gt;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/li.html"><span style="color: #000000; font-weight: bold;">li</span></a>&gt;</span><br />
&nbsp; {/for}<br />
&nbsp; <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/ul.html"><span style="color: #000000; font-weight: bold;">ul</span></a>&gt;</span><br />
{else}<br />
&nbsp; <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/h1.html"><span style="color: #000000; font-weight: bold;">h1</span></a>&gt;</span>The students list is empty :(<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/h1.html"><span style="color: #000000; font-weight: bold;">h1</span></a>&gt;</span><br />
{/if}</div></td></tr></tbody></table></div>
<p>ნაჩვენები შაბლონის მეშვეობით ხდება სტუდენტებისა და შესაბამისად ცალკეული სტუდენტის მეგობრების სიის გამობეჭდვა. ქვემოთ ნაჩვენებია შაბლონის ინიციალიზაციის კოდი:</p>
<div class="codecolorer-container php blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">//შაბლონის ობიექტის შექმნა</span><br />
<span style="color: #000088;">$tpl</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> STL_template<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'test.html'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//შაბლონში მონაცემების დამატება</span><br />
<span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">put</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'students'</span><span style="color: #339933;">,</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
&nbsp; <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'name'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'John'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'friends'</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'name'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Ann'</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'name'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Suzan'</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'name'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Tom'</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#41;</span><br />
&nbsp; <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'name'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Tom'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">'friends'</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'name'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'David'</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">'name'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Mary'</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#41;</span><br />
&nbsp; <span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//შაბლონის პროცესინგი, შესრულება და გამობეჭდვა</span><br />
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">process</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>ნაჩვენები კოდის შესრულების შედეგად მიიღებთ სურათზე ნაჩვენებ შედეგს:</p>
<p><a href="http://www.code.ge/wp-content/uploads/Picture-28.png"><img src="http://www.code.ge/wp-content/uploads/Picture-28.png" alt="Picture 28" title="Picture 28" width="454" height="466" class="aligncenter size-full wp-image-431" /></a></p>
<p>რაც შეეხება თავად ენის სინტაქსს როგორც მაგალითიდან ჩანს იგი საკმაოდ მარტივია, თუმცა ყურადღებას შეფაჩერებ რამდენიმე დეტალზე.</p>
<p><strong>if/elseif/else ოპერატორი</strong><br />
ეს არის ერთერთი ყველაზე ხშირად გამოყენებადი ოპერატორი და შესაბამისად მაქსიმუმი გავაკეთე იმისთვის რომ მისი გამოყენება მაქსიმალურად ეფექტურად იყოს შესაძლებელი. მაგალითში ნაჩვენები კოდის ფრაგმენტი &#8220;{if students}&#8221; უბრალოდ ამოწმებს არის თუ არა აღწერილი ცვლადი სახელით &#8220;students&#8221; და აქვს თუ არა მას მინიჭებული საწყისი მნიშვნელობა. თუმცა პირობა შესაძლებელია იყოს გაცილებით უფრო კომპლექსური. ქვემოთ ნაჩვენებია ამ ოპერატორის გამოყენების ნიმუშები:</p>
<div class="codecolorer-container html4strict blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">{if students <span style="color: #ddbb00;">&amp;&amp; someOtherVariable==&quot;some test value&quot; || testValue in someCollection}</span><br />
<span style="color: #ddbb00;">Do something</span><br />
<span style="color: #ddbb00;">{elseif !students &amp;&amp; !someOtherVariable}</span><br />
<span style="color: #ddbb00;">Do something else</span><br />
<span style="color: #ddbb00;">{else}</span><br />
<span style="color: #ddbb00;">UPS :D </span><br />
<span style="color: #ddbb00;">{/if}</span></div></td></tr></tbody></table></div>
<p>გარდა if/elseif/else ოპერატორისა ასევე შეგიძლიათ პოპულარული და უმნიშვნელოვანი foreach ოპერატორის გამოყენება, მაგ:</p>
<div class="codecolorer-container html4strict blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">{for student in students}<br />
%student.name%<br />
{/for}</div></td></tr></tbody></table></div>
<p>ნაჩვენებ მაგალითში მოხდება &#8220;students&#8221; კოლექციის იტერაცია ხოლო ყოველი მომდევნო ელემენტის ახალ &#8220;student&#8221; ცვლადზე მინიჭება. მოგვიანებით კი შეგიძლიათ ახალი &#8220;student&#8221; ობიექტისა და მისი თვისებების გამოყენება.</p>
<p>ცვლადების გამობეჭდვა ხდება სპეციალური ფორმატის მეშვეობით, კერძოდ კი ცვლადი უნდა განათავსოთ პროცენტის(%) სიმბოლოებში.</p>
<p>ამ მომენტისათვის ასევე უკვე არსებობს ფუნქციების გამოძახების საშუალება, მაგალითში ნჩვენები ფრაგმენტი:</p>
<div class="codecolorer-container html4strict blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">{fn:ucfirst(strtolower(%student.name%))}</div></td></tr></tbody></table></div>
<p>ფრაგმენტიდან ჩანს რომ ხდება ორი ფუნქციის გამოძახება: 1) strtolower() PHP ფუნქცია რომელიც მნიშვნელობას გადაიყვანს ქვედა რეგისტრის სიმბოლოებში; 2) ucfirst PHP ფუნქცია რომელიც სტრიქონის პირველ სიმბოლოს გადაიყვანს ზედა რეგისტრის სიმბოლოში.</p>
<p>ასევე STL &#8211; ს აქვს მოდულების მხარდაჭერა თუმცა ამაზე ოდნავ მოგვიანებით შეგატყობინებთ პროექტის დარელიზების შემდეგ.</p>
<p>ამ მომენტისათვის სულ ეს არის, დოკუმენტაციასა და უფრო ვრცელ მაგალითებს შემოგთავაზებთ სულ მალე <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/stl-simple-template-language-preview/feed</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</item>
		<item>
		<title>Google Code Jam 2009 და ქართველი ფინალისტი!</title>
		<link>http://www.code.ge/posts/google-code-jam-2009-%e1%83%93%e1%83%90-%e1%83%a5%e1%83%90%e1%83%a0%e1%83%97%e1%83%95%e1%83%94%e1%83%9a%e1%83%98-%e1%83%a4%e1%83%98%e1%83%9c%e1%83%90%e1%83%9a%e1%83%98%e1%83%a1%e1%83%a2%e1%83%98</link>
		<comments>http://www.code.ge/posts/google-code-jam-2009-%e1%83%93%e1%83%90-%e1%83%a5%e1%83%90%e1%83%a0%e1%83%97%e1%83%95%e1%83%94%e1%83%9a%e1%83%98-%e1%83%a4%e1%83%98%e1%83%9c%e1%83%90%e1%83%9a%e1%83%98%e1%83%a1%e1%83%a2%e1%83%98#comments</comments>
		<pubDate>Sat, 14 Nov 2009 11:03:04 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[პროგრამირება]]></category>
		<category><![CDATA[Google Code Jam]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=421</guid>
		<description><![CDATA[მაშ ასე დასრულდა Google Code Jam 2009. წლევანდელი წელი იმით იყო აღსანიშნავი, რომ, 25 ფინალისტს შორის მოხვდა ქართველი პროგრამისტი ნიკა ჯიმშელეიშვილი. 
პირველ რიგში თავად ეს ფაქტი იმსახურებს დიდი ყურადღებას და უდავოდ დიდი წარმატებაა, თუმცა, კიდევ ერთი სასიამოვნო ფაქტი არის ის რომ გუშინ შედგა ეს ფინალი და ნიკა მეექვსე ადგილზე გავიდა! ეს ჩემის აზრით ძალიან ძალიან [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.code.ge/wp-content/uploads/codejam.png" alt="codejam" title="codejam" width="279" height="87" class="alignleft size-full wp-image-422" />მაშ ასე დასრულდა Google Code Jam 2009. წლევანდელი წელი იმით იყო აღსანიშნავი, რომ, <a href="http://www.giolekva.com/gcj-2009"><em>25 ფინალისტს შორის მოხვდა ქართველი პროგრამისტი ნიკა ჯიმშელეიშვილი</em></a>. </p>
<p>პირველ რიგში თავად ეს ფაქტი იმსახურებს დიდი ყურადღებას და უდავოდ დიდი წარმატებაა, თუმცა, კიდევ ერთი სასიამოვნო ფაქტი არის ის რომ გუშინ შედგა ეს ფინალი და ნიკა მეექვსე ადგილზე გავიდა! ეს ჩემის აზრით ძალიან ძალიან ძალიან მნიშვნელოვანი ფაქტი იმსახურებს სათანადო ყურადღებასა და დაფასებას. ვულოცავ ამ უზარმაზარ წარმატებას ნიკას და ვუსურვებ სხვა უფრო ბრწყინვალე გამარჯვებებს ამ სფეროში და არა მარტო!</p>
<p><strong>კიდევ ერთხელ ვულოცავ ნიკას!</strong></p>
<p>იხ: <a href="http://code.google.com/codejam/contest/scoreboard?c=311101">წლევანდელი ფინალის რეზულტატები</a></p>
<p><a href="http://www.code.ge/wp-content/uploads/codejamscores.png"><img src="http://www.code.ge/wp-content/uploads/codejamscores.png" alt="codejamscores" title="codejamscores" width="591" height="411" class="aligncenter size-full wp-image-425" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/google-code-jam-2009-%e1%83%93%e1%83%90-%e1%83%a5%e1%83%90%e1%83%a0%e1%83%97%e1%83%95%e1%83%94%e1%83%9a%e1%83%98-%e1%83%a4%e1%83%98%e1%83%9c%e1%83%90%e1%83%9a%e1%83%98%e1%83%a1%e1%83%a2%e1%83%98/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>WebKit Patch: ჩემი მცირე წვლილი ბრაუზერების განვითარების ისტორიაში</title>
		<link>http://www.code.ge/posts/webkit-javascript-string-trim-patch</link>
		<comments>http://www.code.ge/posts/webkit-javascript-string-trim-patch#comments</comments>
		<pubDate>Tue, 13 Oct 2009 09:55:11 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=414</guid>
		<description><![CDATA[ რამდენიმე თვის წინ აღმოვაჩინე რომ FireFox &#8211; ის მორიგ განახლებაში დაუმატებიათ ახალი ფუნქციონალობა. კერძოდ კი JavaScript &#8211; ის String ობიექტს დაამატეს trim(), trimLeft() და trimRight() მეთოდები. ნებისმიერი პროგრამისტისთვის ცნობილია ამ მეთოდების დანიშნულება და მათი აუცილებლობა სტრიქონული ტიპის მონაცემებთან სამუშაოდ, შესაბამისად არც მე შეგაწყენთ მათი დეტალური განხილვით თავს  
ECMAScript 5 სპეციფიკაციში განსაზღვრულია ახალი trim() [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.code.ge/wp-content/uploads/webkit-logo.png" alt="webkit-logo" title="webkit-logo" width="215" height="174" class="alignleft size-full wp-image-415" /> რამდენიმე თვის წინ აღმოვაჩინე რომ FireFox &#8211; ის მორიგ განახლებაში დაუმატებიათ ახალი ფუნქციონალობა. კერძოდ კი JavaScript &#8211; ის String ობიექტს დაამატეს trim(), trimLeft() და trimRight() მეთოდები. ნებისმიერი პროგრამისტისთვის ცნობილია ამ მეთოდების დანიშნულება და მათი აუცილებლობა სტრიქონული ტიპის მონაცემებთან სამუშაოდ, შესაბამისად არც მე შეგაწყენთ მათი დეტალური განხილვით თავს <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>ECMAScript 5 <a href="http://wiki.ecmascript.org/doku.php?id=es3.1:targeted_additions_to_array_string_object_date">სპეციფიკაციში</a> განსაზღვრულია ახალი <a href="https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Objects/String/Trim">trim()</a> მეთოდი, თუმცა Mozilla &#8211; ს გუნდი უფრო შორს წავიდა და დაამატა ორი ახალი, არასტანდარტული მეთოდი: <a href="https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Objects/String/TrimLeft">trimLeft()</a> და <a href="https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Objects/String/TrimRight">trimRight()</a>.</p>
<p>ამ მეთოდების აღმოჩენისა და გარჩევის შემდეგ შევეცადე მეპოვნა იგივე მეთოდები სხვა ბრაუზერებში და აღმოვაჩინე, რომ, იმ მომენტისათვის სხვა არცერთ ბრაუზერში მსგავსი რამ არ არსებობდა მათ შორის არც WebKit &#8211; ზე დაფუძნებულ ბრაუზერებში(Safari, Chrome). გამომდინარე იქედან რომ WebKit მიმაჩნია საუკეთესო ბირთვად დავინტერესდი შევძლებდი თუ არა ჩემით მსგავსი ფუნქციონალობის რეალიზებას. რამდენიმე საათიანი წვალების შემდეგ მივაღწიე იმას რომ უკვე ხელთ მქონდა WebKit &#8211; ის ე.წ. custom build რომელიც აღჭურვილი იყო მოზილას მსგავსი ფუნქციონალობით. </p>
<p>ამ ფაქტით გამხნევებულმა გავარჩიე დოკუმენტაცია მოვამზადე პატჩი და გავუგზავნე WebKit &#8211; ის გუნდს. რა თქმა უნდა ამ ფაქტს მოყვა შესაბამისი განხილვა და კოდის უამრავი მოდიფიკაცია, საბოლოო ჯამში მივიღეთ სრულებით სახეცვლილი კოდი რომელიც რამდენიმე თვის დაგვიანების შემდეგ როგორც იქნა ჩადეს WebKit &#8211; ის ძირითად კოდში. მართალია ჩემი უყურადღებობისა თუ სხვა მიზეზების გამო კოდის ამ განახლებაში ჩემი სახელი და გვარი არ ფიგურირებს თუმცა ცვლილებას თნ აქვს დართული მთელი დისკუსია შესაბამისი კოდებით რაც მაძლევს იმის თქმის უფლებას რომ WebKit &#8211; ში ამ ფუნქციონალობის დამატება ჩემი დამსახურებაა და ნამდვილად არ მეთაკილება ამის თქმა <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>ამ ფაქტმა ძალიან გამახარა იმიტომ, რომ, აქედან მოყოლებული ნებისმიერი ბრაუზერი რომელიც იყენებს აღნიშნულ ბირთვს(Safari, Chrome, iPhone Safari, Android Browser და სხვა) ყველა აღჭურვილი იქნება იმ ფუნქციონალობით რომელშიც წვლილი მიმიძღვის, ჩემთვის როგორც დეველოპერისთვის ეს ფაქტი ძალიან  მნიშვნელოვანია და იმედია არ დამზრახავთ ამ სიხარულისთვის! <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>კოდში შეტანილი ცვლილებები:</strong> <a href="http://trac.webkit.org/changeset/49423">http://trac.webkit.org/changeset/49423</a><br />
<strong>დისკუსია პატჩის გარშემო:</strong> <a href="https://bugs.webkit.org/show_bug.cgi?id=26590">https://bugs.webkit.org/show_bug.cgi?id=26590</a><br />
<strong>WebKit &#8211; ის ბილდი აღწერილი ფუნქციონალობით:</strong> <a href="http://nightly.webkit.org/">http://nightly.webkit.org/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/webkit-javascript-string-trim-patch/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Code.ge Presents: Internet Explorer 6 Must Die!</title>
		<link>http://www.code.ge/posts/code-ge-presents-internet-explorer-6-must-die</link>
		<comments>http://www.code.ge/posts/code-ge-presents-internet-explorer-6-must-die#comments</comments>
		<pubDate>Sun, 27 Sep 2009 10:17:57 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=398</guid>
		<description><![CDATA[კიდევ ერთხელ მოგესალმებით ყველას. ამჯერად წარმოგიდგენთ ერთ მინი პროექტს რომლის განცხორციელებაც დაგეგმილი მქონდა გასული წლის დეკემბერში მაგრამ გარკვეულ თუ გაურკვეველ მიზეზთა გამო ვერ გამოვნახო სულ რამდენიმე საათი რათა ამ იდეისთვის ხორცი შემესხა  . თუმცა რამდენიმე დღის წინ არსაიდან აღმოცენებულმა Google &#8211; ს პროექტმა Chrome Frame კვლავ გამიღვიძა ამის სურვილი.
პროექტი Internet Explorer 6 Must Die! [...]]]></description>
			<content:encoded><![CDATA[<p>კიდევ ერთხელ მოგესალმებით ყველას. ამჯერად წარმოგიდგენთ ერთ მინი პროექტს რომლის განცხორციელებაც დაგეგმილი მქონდა გასული წლის დეკემბერში მაგრამ გარკვეულ თუ გაურკვეველ მიზეზთა გამო ვერ გამოვნახო სულ რამდენიმე საათი რათა ამ იდეისთვის ხორცი შემესხა <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> . თუმცა რამდენიმე დღის წინ არსაიდან აღმოცენებულმა Google &#8211; ს პროექტმა <strong>Chrome Frame</strong> კვლავ გამიღვიძა ამის სურვილი.</p>
<p>პროექტი <strong>Internet Explorer 6 Must Die!</strong> მიმართულია ინტერნეტის მომხმარებელთა შორის Internet Explorer 6.0 &#8211; ის შემცირებისა და ამ ბრაუზერის სიკვდილის( <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  ) დასაჩქარებლად. მიუხედავად ყველაფაფრისა ამ ბრაუზერს ინტერნეტ ბაზრის 25% უკავია რაც ყოვლად დაუშვებელი და მიუღებელია, მითუფრო რომ Microsoft &#8211; მა ბოლო წლების მანძილზე გამოუშვა ორი, გაცილებით უკეთესი ბრაუზერი Internet Explorer 7 და Internet Explorer 8.</p>
<p><strong>Internet Explorer 6 Must Die!</strong> არის მცირე ზომის სკრიპტი, რომელიც უნდა ჩასვათ თქვენს ვებ გვერდში. ხოლო თუ მომხმარებელი თქვენს გვერდს გახსნის Internet Explorer 6 &#8211; ის მეშვეობით დაინახავს მსგავს შეტყობინებას:</p>
<p><a href="http://www.code.ge/wp-content/uploads/Picture-16.png"><img src="http://www.code.ge/wp-content/uploads/Picture-16-300x169.png" alt="Picture 16" title="Picture 16" width="300" height="169" class="aligncenter size-medium wp-image-399" /></a></p>
<p>ნაჩვენები შეტყობინება მთლიანად დაფარავს გვერდს ისე რომ მომხმარეელი მხოლოდ გამჭვირვალე ფონის მიღმა შეძლებს გვერდის კონტენტის დანახავს. მომხმარებელს შეუძლია არჩევანი გააკეთოს და ძირითადი 6 ბრაუზერიდან აირჩიოს ერთერთი.</p>
<p>ჩემის აზრით თითოეული ჩვენგანის აქტიურობა და მცდელობა იმისა რომ თუნდაც რამდენიმე ერთეულით შევამციროთ Internet Explorer 6 გარკვეული დროის შემდეგ მნიშნველოვან შედეგს გამოიღებს. ეს კი პირველ რიგში იმ ადამიანებისთვის არის მნიშნვნელოვანი რომლებიც ქმნიან ვებ საიტებს/აპლიკაციებს და რომლებიც უამრავ დროს ხარჯავენ Internet Explorer 6 &#8211; თან გაუთავებელ ბრძოლაში.</p>
<p>პროექტის საწყისი კოდი განთავსებულია <a href="http://github.com/ioseb/ie6mustdie">GitHUB</a> &#8211; ზე. მისი გამოყენებისათვის საკმარისია გადმოწეროთ სკრიპტის ბოლო ვერსიის zip არქივი შემდეგი მისამართიდან: <a href="http://github.com/ioseb/ie6mustdie/downloads">http://github.com/ioseb/ie6mustdie/downloads</a>.<br />
გახსნათ არქივი თქვენთვის სასურველ დირექტორიაში ხოლო თქვენს ვებ გვერდში BODY ტეგის დახურვამდე მიუთითოთ შემდეგი JavaScript კოდი:</p>
<div class="codecolorer-container html4strict blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">script</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;path/to/ie6mustdiefolder/ie6mustdie.js&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">script</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>დანარჩენს კი სკრიპტი თავად გააკეთებს! </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/code-ge-presents-internet-explorer-6-must-die/feed</wfw:commentRss>
		<slash:comments>40</slash:comments>
		</item>
		<item>
		<title>LinGEO &#8211; Now on iTunes!</title>
		<link>http://www.code.ge/posts/lingeo-now-on-itunes</link>
		<comments>http://www.code.ge/posts/lingeo-now-on-itunes#comments</comments>
		<pubDate>Sat, 26 Sep 2009 09:33:31 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[LinGEO]]></category>
		<category><![CDATA[Objective-C/Cocoa]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=390</guid>
		<description><![CDATA[ აღესრულა! დღეს დილიდან ლაშამ ძალიან კარგი ამბავი შემატყობინა, ჩვენმა აპლიკაციამ Apple &#8211; ს კაბალური შემოწმების პროცესი წარმატებით გაიარა და დღეიდან უკვე LinGEO ოფიციალურად არის დამატებული Apple AppStore &#8211; ში, შესაბამისად ვისაც გაქვთ iTunes ანგარიში თამამად შეგიძლიათ გადმოწეროთ აპლიკაცია და დააინსტალიროთ თქვენს iPhone &#8211; ზე. კიდევ ერთხელ განასკუთრებული მადლობა ლაშას აპლიკაციის დასრულებისა და მისი გაუმჯობესებისათვის, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.code.ge/wp-content/uploads/Picture-14.png"><img src="http://www.code.ge/wp-content/uploads/Picture-14-300x164.png" alt="Picture 14" title="Picture 14" width="300" height="164" class="alignleft size-medium wp-image-391" /></a> აღესრულა! დღეს დილიდან ლაშამ ძალიან კარგი ამბავი შემატყობინა, ჩვენმა აპლიკაციამ Apple &#8211; ს კაბალური შემოწმების პროცესი წარმატებით გაიარა და დღეიდან უკვე <a href="http://www.code.ge/lingeo">LinGEO</a> ოფიციალურად არის დამატებული Apple AppStore &#8211; ში, შესაბამისად ვისაც გაქვთ iTunes ანგარიში თამამად შეგიძლიათ გადმოწეროთ აპლიკაცია და დააინსტალიროთ თქვენს iPhone &#8211; ზე. კიდევ ერთხელ განასკუთრებული მადლობა ლაშას აპლიკაციის დასრულებისა და მისი გაუმჯობესებისათვის, ასევე იმ რთული პროცესის წარმატებით გავლისათვის რასაც აპლიკაციის AppStore &#8211; ში განთავსებას ახლავს თან! ასევე დიდი მადლობა Toto &#8211; ს შესანიშნავი რჩევებისა და გაუმჯობესებებისათვის და გიორგი(Flyer) კვიჟინაძეს ლოგოს შექმნისათვის!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/lingeo-now-on-itunes/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Google Chrome Frame</title>
		<link>http://www.code.ge/posts/google-chrome-frame</link>
		<comments>http://www.code.ge/posts/google-chrome-frame#comments</comments>
		<pubDate>Fri, 25 Sep 2009 09:41:03 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[browsers]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[IE Sucks]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=374</guid>
		<description><![CDATA[რამდენიმე დღის წინ Google &#8211; მ გაახმაურა თავისი ახალი პროექტი სახელად Google Chrome Frame. ეს არის პლაგინი InternetExplorer &#8211; ისთვის რომელის ინსტალაციის შემდეგაც საიტები თუ მათ გააჩნიათ შესაბამისი META ტეგი, ჩაიტვირთებიან არა IE &#8211; ს ძრავის არამედ Google Chrome &#8211; ს ძრავის მეშვეობით. ეს ნიშნავს იმას რომ ყოველგვარი არათავსებადობის პრობლემა(რომელსაც 99% შემთხვევებში იწვევს IE) საერთოდ [...]]]></description>
			<content:encoded><![CDATA[<p>რამდენიმე დღის წინ Google &#8211; მ გაახმაურა თავისი ახალი პროექტი სახელად <a href="http://code.google.com/intl/ka-GE/chrome/chromeframe/">Google Chrome Frame</a>. ეს არის პლაგინი InternetExplorer &#8211; ისთვის რომელის ინსტალაციის შემდეგაც საიტები თუ მათ გააჩნიათ შესაბამისი META ტეგი, ჩაიტვირთებიან არა IE &#8211; ს ძრავის არამედ Google Chrome &#8211; ს ძრავის მეშვეობით. ეს ნიშნავს იმას რომ ყოველგვარი არათავსებადობის პრობლემა(რომელსაც 99% შემთხვევებში იწვევს IE) საერთოდ აღარ შეაწუხებს მომხმარებელს. როგორც აღმოჩნდა გუგლის ეს ნაბიჯი განპირობებული იყო მისი ახალი პროდუქტის &#8211; Google Wave გამო რომელიც ხელმისაწვდომი მომავალი კვირიდან გახდება. საინტერესო არის ის, რომ, გუგლმა IE &#8211; ს ყველა ვერსიის მხარდაჭერაზე განაცხადა უარი რადგანც ამ ბრაუზერებს არ აქვთ JavaScript &#8211; ისა და HTML5 &#8211; ის ახალი შესაძლებლობების მხარდაჭერა.</p>
<p><a href="http://www.code.ge/wp-content/uploads/cf-in-ie.png"><img src="http://www.code.ge/wp-content/uploads/cf-in-ie-300x234.png" alt="cf-in-ie" title="cf-in-ie" width="300" height="234" class="aligncenter size-medium wp-image-373" /></a></p>
<p>მაგრამ Wave &#8211; ს გამო შექმნილი პლაგინის გაოყენებაში არანაირად არ ვართ შეზღუდული და იგი შეგვიძლია გამოვიყენოთ ნებისმიერი ვებ საიტისთვის, რისი მაგალითიც არის ჩემი ბლოგი <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  თუ ამ გვერდს გახსნით IE6 &#8211; ის მეშვეობით მაშინათვე დაინახავთ Google Chrome Frame &#8211; ს ინსტალაციის შემოთავაზებას და იმ შემთხვევაში თუ დააინსტალირებთ პლაგინს თქვენს კომპზე არსებული IE6, IE7 და IE8 ავტომატურად იმუშავებს Chrome Frame რეჟიმში <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>ტექნიკურად ეს საკითხე გვარდება ძალიან მარტივად. პირველ რიგში საიტის HEAD სექციაში უნდა დავამატოთ შემდეგი META ტეგი:</p>
<div class="codecolorer-container html4strict blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/meta.html"><span style="color: #000000; font-weight: bold;">meta</span></a> <span style="color: #000066;">http-equiv</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;X-UA-Compatible&quot;</span> <span style="color: #000066;">content</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;chrome=1&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span></div></td></tr></tbody></table></div>
<p>თუ Google Chrome პლაგინი უკვე დაინსტალირებული აქვს მომხმარებელს ყველა ვერსიის IE იმუშავებს Google Chrome &#8211; ს ძრავით ისე რომ ამის შესახებ მომხმარებელს არაფერი ეცოდინება.<span id="more-374"></span></p>
<p>იმისათვის რომ მომხმარებელს შევთავაზოთ პლაგინის ინსტალაცია, ასევე საჭიროა ვებ გვერდში შემდეგი კოდის ჩასმა(გაუგებრობების თავიდან ასარიდებლად BODY ტეგის დახურვამდე):</p>
<div class="codecolorer-container html4strict blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">script</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span> </span><br />
<span style="color: #009900;"><span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://ajax.googleapis.com/ajax/libs/chrome-frame/1/CFInstall.min.js&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">script</span></a>&gt;</span><br />
&nbsp;<br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;placeholder&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a>&gt;</span><br />
<br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">script</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/javascript&quot;</span>&gt;</span><br />
&nbsp;CFInstall.check({<br />
&nbsp; &nbsp; node: &quot;placeholder&quot;,<br />
&nbsp; &nbsp; destination: &quot;http://www.waikiki.com&quot;<br />
&nbsp; });<br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/script.html"><span style="color: #000000; font-weight: bold;">script</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>ეს სკრიპტი შეამოწმებს აქვს თუ არა მომხმარებელს დაინსტალირებული ნახსენები პლაგინი, და თუ არა მაშინ შესაბამისი შეტყობინება შესთავაზებს მომხმარებელს მის ინსტალაციას. </p>
<p>შედეგი? შედეგი კი ძალიან საინტერესოა. რა თქმა უნდა ვერ შევიკავე თავი და გავტესტე პლაგინი ჩემს ბლოგზე და შედეგიც სახეზეა:</p>
<p><a href="http://www.code.ge/wp-content/uploads/Picture-6.png"><img src="http://www.code.ge/wp-content/uploads/Picture-6-300x240.png" alt="Picture 6" title="Picture 6" width="300" height="240" class="aligncenter size-medium wp-image-370" /></a><br />
<a href="http://www.code.ge/wp-content/uploads/Picture-7.png"><img src="http://www.code.ge/wp-content/uploads/Picture-7-300x240.png" alt="Picture 7" title="Picture 7" width="300" height="240" class="aligncenter size-medium wp-image-371" /></a><br />
<a href="http://www.code.ge/wp-content/uploads/Picture-8.png"><img src="http://www.code.ge/wp-content/uploads/Picture-8-300x240.png" alt="Picture 8" title="Picture 8" width="300" height="240" class="aligncenter size-medium wp-image-372" /></a><br />
<a href="http://www.code.ge/wp-content/uploads/Picture-9.png"><img src="http://www.code.ge/wp-content/uploads/Picture-9-300x240.png" alt="Picture 9" title="Picture 9" width="300" height="240" class="aligncenter size-medium wp-image-368" /></a></p>
<p>თუ გახსნით ბოლო სურათს, დაინახავთ რომ ბლოგის მარჯვენა სვეტში განთავსებულ პროექტების ბანერებს მომრგვალებული კუთხეები აქვთ, ეს მომრგვალება გაკეთებულია CSS &#8211; ის <strong>border-radius</strong> თვისების მეშვეობით რომლის მსგავსიც არცერთ IE &#8211; ს არ გააჩნია <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Enjoy <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/google-chrome-frame/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>LinGEO ინგლისურ/ქართული ლექსიკონი iPhone &#8211; სთვის</title>
		<link>http://www.code.ge/posts/lingeo-english-georgian-dictionary-for-iphone</link>
		<comments>http://www.code.ge/posts/lingeo-english-georgian-dictionary-for-iphone#comments</comments>
		<pubDate>Tue, 22 Sep 2009 15:49:27 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[LinGEO]]></category>
		<category><![CDATA[LinGO]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Objective-C/Cocoa]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=361</guid>
		<description><![CDATA[როგორც იქნა ერთ წლიანი პაუზის შემდეგ ჩემს მიერ დაწყებულმა და შემდგომ მიტოვებულმა პროექტმა &#8211; LinGEO შეიძინა პროდუქტის სახე და ახლა უკვე მომხმარებლებს შეუძლიათ მისით სარგებლობა.
პირველად ეს პროექტი გავახმაური ერთი წლის წინ როდესაც მას ჯერ კიდევ ერქვა LinGO, მას შემდეგ ვეღარ გამოვნახე შესაბამისი რესურსი რომ მიმეყვანა ეს პროექტი ბოლომდე. სულ ახლახანს როდესაც კვლავ გადავწყვიტე აქტიური ბლოგერობა [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.code.ge/wp-content/uploads/Screen-shot-2009-09-22-at-7.01.54-PM.png"><img src="http://www.code.ge/wp-content/uploads/Screen-shot-2009-09-22-at-7.01.54-PM-163x300.png" alt="Screen shot 2009-09-22 at 7.01.54 PM" title="Screen shot 2009-09-22 at 7.01.54 PM" width="163" height="300" class="alignleft size-medium wp-image-349" /></a>როგორც იქნა ერთ წლიანი პაუზის შემდეგ ჩემს მიერ დაწყებულმა და შემდგომ მიტოვებულმა პროექტმა &#8211; <a href="http://www.code.ge/lingeo">LinGEO</a> შეიძინა პროდუქტის სახე და ახლა უკვე მომხმარებლებს შეუძლიათ მისით სარგებლობა.</p>
<p>პირველად ეს პროექტი გავახმაური ერთი წლის წინ როდესაც მას ჯერ კიდევ ერქვა <a href="http://www.code.ge/posts/lingo-eng-geo-dictionary-for-iphone">LinGO</a>, მას შემდეგ ვეღარ გამოვნახე შესაბამისი რესურსი რომ მიმეყვანა ეს პროექტი ბოლომდე. სულ ახლახანს როდესაც კვლავ გადავწყვიტე აქტიური ბლოგერობა და ზოგადად ოპენ სორს პროექტებზე მუშაობის გაგრძელება, გავხსენი <a href="http://www.code.ge/posts/code-ge-redesign">ამ პროექტის საწყისი კოდიც</a>(იხ. <a href="http://github.com/ioseb/LinGEO">LinGEO on GitHUB</a>). ამის მიზეზი ერთის მხრივ იყო ჩემი სურვლი რომ დამესრულებინა პროექტი, ხოლო მეორეს მხრივ ჩემი კოლეგისა და მეგობრის <strong>ლაშა დოლიძის</strong> დაინტერესება.</p>
<p>კოდის გახსნიდან სულ რაღაც სამი კვირის შემდეგ სახეზე გვაქვს უკვე დასრულებული პროექტი. ამისათვის განსაკუთრებულ მადლობას ვუხდი ლაშას რომლის უშუალო დამსახურებაც არის ამ პროექტის საბოლოო პროდუქტად ქცევა. გარდა უმნიშვნელოვანესი პროგრამული დეტალების დახვეწისა მან განათავსა პროდქუტი Apple &#8211; ს App Store &#8211; ში(პროგრამა ამჯერად მოლოდინის რეჟიმშია და ველით დასტურს), ასევე შექმნა <a href="http://code.ge/cydia">Cydia &#8211; ს რეპოზიტორი</a> არაოფიციალური iPhone &#8211; ს მომხმარებელთათვის.</p>
<p>ასევე მინდა მადლობა გადავუხადო <a href="http://totocaster.com/">Toto</a> &#8211; ს შესანიშნავი <a href="http://www.code.ge/posts/code-ge-redesign/comment-page-1#comment-1314">კომენტარებისა და შენიშნვებისათვის</a> რომელიც გააკეთა ამ პროდუქტთან დაკავშირებით.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/lingeo-english-georgian-dictionary-for-iphone/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Java: variables, stack and heap</title>
		<link>http://www.code.ge/posts/java-variables-stack-and-heap</link>
		<comments>http://www.code.ge/posts/java-variables-stack-and-heap#comments</comments>
		<pubDate>Tue, 22 Sep 2009 07:03:59 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[heap]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[stack]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=337</guid>
		<description><![CDATA[პრეზენტაცია Java &#8211; ს ცვლადების და მათთან დაკავშირებული საკითხების შესახებ.
]]></description>
			<content:encoded><![CDATA[<p>პრეზენტაცია Java &#8211; ს ცვლადების და მათთან დაკავშირებული საკითხების შესახებ.</p>
<object width="416" height="341"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=cst-presentation2-090921020408-phpapp01"/><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=cst-presentation2-090921020408-phpapp01"  type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="416" height="341"></embed></object><!-- ysttest:Array
(
    [id] => 2029002&#038;doc=cst-presentation2-090921020408-phpapp01
)
-->
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/java-variables-stack-and-heap/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript: String.replace()</title>
		<link>http://www.code.ge/posts/javascript-string-replace</link>
		<comments>http://www.code.ge/posts/javascript-string-replace#comments</comments>
		<pubDate>Wed, 16 Sep 2009 20:27:52 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[RegExp]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=332</guid>
		<description><![CDATA[რამდენიმე წლის წინ დავწერე პოსტი JavaScript &#8211; ით DOM ელემენტის სტილებთან მუშაობის შესახებ. ბრაუზერებს შორის სხვაობიდან გამომდინარე(კერძოდ კი IE &#8211; ს განსხვავებული მიდგომის გამო) პრობლემის გვერდის ასავლელად დავწერე ქვემოთ ნაჩვენები კოდი:
12345678910function getCamelCase&#40;string&#41; &#123;
&#160; &#160; var tokens = string.split&#40;'-'&#41;;
&#160; &#160; if &#40;tokens.length &#62; 1&#41; &#123;
&#160; &#160; &#160; &#160; for &#40;var i = 1; i &#60; tokens.length; [...]]]></description>
			<content:encoded><![CDATA[<p>რამდენიმე წლის წინ დავწერე <a href="http://www.code.ge/posts/working-with-element-styles-part-two">პოსტი</a> JavaScript &#8211; ით DOM ელემენტის სტილებთან მუშაობის შესახებ. ბრაუზერებს შორის სხვაობიდან გამომდინარე(კერძოდ კი IE &#8211; ს განსხვავებული მიდგომის გამო) პრობლემის გვერდის ასავლელად დავწერე ქვემოთ ნაჩვენები კოდი:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">function</span> getCamelCase<span style="color: #009900;">&#40;</span>string<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> tokens <span style="color: #339933;">=</span> string.<span style="color: #660066;">split</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'-'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>tokens.<span style="color: #660066;">length</span> <span style="color: #339933;">&gt;</span> 1<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> tokens.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tokens<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> tokens<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span>0<span style="color: #339933;">,</span> 1<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toUpperCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> tokens<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span>1<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toLowerCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; string <span style="color: #339933;">=</span> tokens.<span style="color: #660066;">join</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> string<span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>კოდის ერთადერთი დანიშნულებაა ტირეებიანი CSS ატრიბუტების მაგ. border-left-color, background-color გადაყვანა ე.წ. Camel Case ფორმატში ანუ borderLeftColor, backgroundColor და ა.შ.</p>
<p>დღეს კოდის წერისას იგივე პრობლემა მექანიკურად გადავჭერი სხვა უფრო მოხდენილი და რაც მთავარია გაცილებით მცირე ზომის კოდის მეშვეობით:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> str <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;some-test-string&quot;</span><span style="color: #339933;">;</span><br />
str.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/-([\w])/gi</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>a1<span style="color: #339933;">,</span> a2<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> a2.<span style="color: #660066;">toUpperCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #006600; font-style: italic;">//კოდის შესრულების შემდეგ </span><br />
<span style="color: #006600; font-style: italic;">//სტრიქონი &quot;some-test-string&quot;</span><br />
<span style="color: #006600; font-style: italic;">//გარდაიქმნება შემდეგნაირად: &quot;someTestString&quot;</span></div></td></tr></tbody></table></div>
<p>დამეთანხმებით რომ თვალსაჩინო სხვაობაა <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  როგორ მუშაობს ეს კოდი? პირველ რიგში შეგახსენებთ თავად String ობიექტის replace() მეთოდის სიგნატურას:</p>
<blockquote><p>str.replace(regexp|substr, newSubStr|function[, Non-standard flags]);</p></blockquote>
<p>ანუ replace() მეთოდს მეორე პარამეტრად ახალი, ჩასანაცვლებელი სტრიქონის ნაცვლად შეგვიძლია გადავცეთ ქოლბექ ფუნქცია რომელიც დააბრუნებს დამუშავებულ სტრიქონს, ხოლო ეს დაბრუნებული სტრიქონი თავის მხრივ გამოყენებული იქნება რეგულარული გამოსახულების მიერ ნაპოვნი შესატყვისის ჩასანაცვლებლად.</p>
<p>საინტერესოა ასევე თუ რა პარამეტრებს გადასცემს replace() მეთოდი ქოლბექ ფუნქციას. გადასაცემი პარამეტრების რაოდენობა ცვალებადია და დამოკიდებულია მთელ რიგ ფაქტორებზე. მაგალითად ჩემს მიერ ნაჩვენებ მაგალითში ფუნქციას გადაეცემა ოთხი პარამეტრი, კერძოდ კი ფუნქცია გამოიძახება ორჯერ შემდეგი პარამეტრებით:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #006600; font-style: italic;">//პიველი დამთხვევისათვის ანუ &quot;-t&quot;</span><br />
<span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><br />
&nbsp; <span style="color: #3366CC;">&quot;-t&quot;</span><span style="color: #339933;">,</span> &nbsp;<span style="color: #006600; font-style: italic;">//რეგულარული გამოსახულების მიერ ნაპოვნი სტრიქონი სრულად</span><br />
&nbsp; <span style="color: #3366CC;">&quot;t&quot;</span><span style="color: #339933;">,</span> &nbsp; &nbsp;<span style="color: #006600; font-style: italic;">//დამაჯგუფებელ ფრჩხილებში მოთავსებული შედეგი</span><br />
&nbsp; <span style="color: #CC0000;">4</span><span style="color: #339933;">,</span> &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//პოზიცია რომელზეც მოხდა პირველი დამთხვევა</span><br />
&nbsp; <span style="color: #3366CC;">&quot;some-test-string&quot;</span> <span style="color: #006600; font-style: italic;">//სრული სტრიქონი</span><br />
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #006600; font-style: italic;">//მეორე დამთხვევისათვის ანუ &quot;-s&quot;</span><br />
<span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><br />
&nbsp; <span style="color: #3366CC;">&quot;-s&quot;</span><span style="color: #339933;">,</span> &nbsp;<span style="color: #006600; font-style: italic;">//რეგულარული გამოსახულების მიერ ნაპოვნი სტრიქონი სრულად</span><br />
&nbsp; <span style="color: #3366CC;">&quot;s&quot;</span><span style="color: #339933;">,</span> &nbsp; &nbsp;<span style="color: #006600; font-style: italic;">//დამაჯგუფებელ ფრჩხილებში მოთავსებული შედეგი</span><br />
&nbsp; <span style="color: #CC0000;">9</span><span style="color: #339933;">,</span> &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//პოზიცია რომელზეც მოხდა პირველი დამთხვევა</span><br />
&nbsp; <span style="color: #3366CC;">&quot;some-test-string&quot;</span> <span style="color: #006600; font-style: italic;">//სრული სტრიქონი</span><br />
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>ნაჩვენები კოდიდან თვალსაჩინოა სავარაუდო პარამეტრების რაოდენობა, თუმცა მნიშვნელოვანია შემდეგი დეტალების გათვალისწინება, ქოლბექ ფუნქციას:</p>
<ul>
<li>პირველ პარამეტრად ყოველთვის გადაეცემა რეგულარული გამოსახულების მიერ ნაპოვნი სრული შესატყვისი;</li>
<li>ბოლო პარამეტრად ყოველთვის გადაეცემა სრული სტრიქონი რომლშიც განხორციელდა გარკვეული შესატყვისის ძიება;</li>
<li>ბოლოდან მეორე(ბოლოს წინა) პარამეტრად ყოველთვის გადაეცემა ნაპოვნი შესატყვისის პოზიცია. </li>
<li>თუ რამდენი პარამეტრის გადაცემა მოხდება პირველსა და ბოლო ორ პარამეტრს შორის დამოკიდებულია რეგულარულ გამოსახულებაში გამოყენებული დამაჯგუფებელი ფრჩხილების რაოდენობაზე(ჩემს მიერ ნაჩვენებ მაგალითში ასეთი პარამეტრი ერთია რადგან მხოლოდ ერთი დამაჯგუფება მაქვს გამოყენებული);</li>
<li>replace() მეთოდი გამოიძახებს ერთხელ თუ რეგულარული გამოსახულების ბოლოს არ გვაქვს მითითებული &#8220;<strong>g</strong>&#8221; ანუ გლობალური მოდიფიკატორი, ან გამოიძახებს იმდენჯერ რამდენი დამთხვევაც მოხდება კონკრეტული შესატყვისისათვის(ნაჩვენებ მაგალითში გამოძახება მოხდება ორჯერ).</li>
</ul>
<p>enjoy B-) </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/javascript-string-replace/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>jQuery საკუთარი ხელით &#8211; ნაწილი 2</title>
		<link>http://www.code.ge/posts/jquery-%e1%83%a1%e1%83%90%e1%83%99%e1%83%a3%e1%83%97%e1%83%90%e1%83%a0%e1%83%98-%e1%83%ae%e1%83%94%e1%83%9a%e1%83%98%e1%83%97-%e1%83%9c%e1%83%90%e1%83%ac%e1%83%98%e1%83%9a%e1%83%98-2</link>
		<comments>http://www.code.ge/posts/jquery-%e1%83%a1%e1%83%90%e1%83%99%e1%83%a3%e1%83%97%e1%83%90%e1%83%a0%e1%83%98-%e1%83%ae%e1%83%94%e1%83%9a%e1%83%98%e1%83%97-%e1%83%9c%e1%83%90%e1%83%ac%e1%83%98%e1%83%9a%e1%83%98-2#comments</comments>
		<pubDate>Fri, 11 Sep 2009 20:38:01 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[chaining]]></category>
		<category><![CDATA[css selector]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[myquery]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=316</guid>
		<description><![CDATA[მაშ ასე, განვაგრძობ პოსტების სერიას &#8220;jQuery საკუთარი ხელით&#8221; და გთავაზობთ მეორე ნაწილს. პირველ ნაწილში ლაპარაკი გვქონდა ამ ბიბლიოთეკის ძირითად შემადგენელ ნაწილებსა და მისი მუშაობის ზოგად პრინციპებზე. ასევე პირველ ნაწილში შევქმენით ბიბლიოთეკის კარკასი კოდური სახელწოდებით myQuery და სადემონსტრაციოდ დავამატეთ ერთი მეთოდი. 
დასაწყისისთვის უკვე გაგვაჩნია საკმარისი ინფორმაცია და მოდულის მკაფიო მონახაზი რომელზე დაყრდონბითაც შეგვიძლია გადავიდეთ რეალიზაციის შემდეგ [...]]]></description>
			<content:encoded><![CDATA[<p>მაშ ასე, განვაგრძობ პოსტების სერიას &#8220;<strong>jQuery საკუთარი ხელით</strong>&#8221; და გთავაზობთ მეორე ნაწილს. <a href="http://www.code.ge/posts/jquery-საკუთარი-ხელით-ნაწილი-1">პირველ ნაწილში</a> ლაპარაკი გვქონდა ამ ბიბლიოთეკის ძირითად შემადგენელ ნაწილებსა და მისი მუშაობის ზოგად პრინციპებზე. ასევე პირველ ნაწილში შევქმენით ბიბლიოთეკის კარკასი კოდური სახელწოდებით <strong>myQuery</strong> და სადემონსტრაციოდ დავამატეთ ერთი მეთოდი. </p>
<p>დასაწყისისთვის უკვე გაგვაჩნია საკმარისი ინფორმაცია და მოდულის მკაფიო მონახაზი რომელზე დაყრდონბითაც შეგვიძლია გადავიდეთ რეალიზაციის შემდეგ ნაწილზე. ამ ნაწილში ლაპარაკი მექნება DOM ელემენტის <strong>class</strong> ატრიბუტსა და მასთან სამუშაო მეთოდებზე. <span id="more-316"></span></p>
<p>DOM ელემენტის <strong>class</strong> ატრიბუტს საკმაოზე უფრო მეტად მნიშვნელოვანი როლი აკისრია და ეს ატრიბუტი განსაკუთრებულ ყურადღებას იმსახურებს. ძირითადად ეს ატრიბუტი DOM ელემენტისათვის <strong>CSS კლასების</strong> მისანიჭებლად გამოიყენება, თუმცა მინდა აღვნიშნო, რომ,  &#8220;<strong>class</strong>&#8221; ატრიბუტი არის ზოგადი დანიშნულების ატრიბუტი და არ არის განსაზღვრული მხოლოდ CSS კლასების მისანიჭებლად. ასევე აღსანიშნავია რომ შესაძლებელია DOM ელემენტის ამ ატრიბუტს შესაძლებელია ერთდროულად მივანიჭოთ არის[space] სიმბოლოთი გამოყოფილი ერთზე მეტი კლასი.</p>
<p>ელემენტის აღნიშნული ატრიბუტისათვის მნიშვნელობის მინიჭება და ამ მნიშვნელობის წაკითხვა ხორცილდება DOM ელემენტის <strong>className</strong> თვისების მეშვეობით. მაგ:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> el <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'element-identifier'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
el.<span style="color: #660066;">className</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'some-css-class'</span><span style="color: #339933;">;</span><br />
<span style="color: #006600; font-style: italic;">//ან</span><br />
el.<span style="color: #660066;">className</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'some-css-class some-other-class just-class'</span><span style="color: #339933;">;</span><br />
<span style="color: #006600; font-style: italic;">//მნიშვნელობის წაკითხვა</span><br />
<span style="color: #003366; font-weight: bold;">var</span> className <span style="color: #339933;">=</span> el.<span style="color: #660066;">className</span><span style="color: #339933;">;</span><br />
<span style="color: #006600; font-style: italic;">//კლასის განადგურება</span><br />
el.<span style="color: #660066;">className</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">''</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>მიუხედავად იმისა რომ ელემენტის <strong>className</strong> თვისება შესანიშნავად ართმევს თავს დაკისრებულ მოვალეობას იგი მოუხერხებელია მთელ რიგ შემთხვევებში. კერძოდ კი:</p>
<ul>
<li>თუ ატრიბუტი შეიცავს კლასების ჩამონათვალს შეუძლებელია მარტივი გზით დავადგინოთ გააჩნია თუ არა ელემენტს ეს თუ ის <strong>კონკრეტული</strong> კლასი რადგან ამ შემთხვევაში შედარების &#8220;==&#8221; ოპერატორი უსარგებლოა;</li>
<li>თუ ატრიბუტი შეიცავს კლასების ჩამონათვალს არ არსებობს მარტივი გზა კონკრეტული კლასის მოსაშორებლად;</li>
<li>თუ ატრიბუტი შეიცავს ერთდროულად რამდენიმე კლასს შეუძლებელია რომელიმე კონკრეტულ კლასს შევუცვალოთ პრიორიტეტი(პრიორიტეტი ამ შემთხვევაში ენიჭება უკიდურეს მარჯვენა კლასს);</li>
</ul>
<p>ასეთი შემთხვევებისათვის jQuery აღჭურვილია რამდენიმე შესანიშნავი მეთოდით რომელიც გამოიყენება ექსკლუზიურად class ატრიბუტთან სამუშაოდ. კერძოდ კი:</p>
<ul>
<li><strong>addClass</strong> &#8211; ელემენტისათვის ახალი კლასის დასამატებლად;
</li>
<li><strong>hasClass</strong> &#8211; შესამოწმებლად, გააჩნია თუ არა ელემენტს ესა თუ ის კონკრეტული კლასი;</li>
<li><strong>removeClass</strong> &#8211; ელემენტისათვის კონკრეტული კლასის მოსაშორებლად;</li>
<li><strong>toggleClass</strong> &#8211; კლასის &#8220;გადასართავად&#8221;. იგულისხმება რომ თუ ელემენტს გააჩნია მეთოდისათვის პარამეტრად გადაცემული კლასი მაშინ იგი უნდა მოშორდეს, წინააღმდეგ შემთხვევაში კი დაემატოს ელემენტს.</li>
</ul>
<p>ჩამოთვლილი მეთოდების რეალიზაცია ძალიან მარტივია. ამისათვის სულ რამდენიმე სტრიქონი კოდია საჭირო:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> className <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; add<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; className.<span style="color: #660066;">remove</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> classNames <span style="color: #339933;">=</span> el.<span style="color: #660066;">className</span>.<span style="color: #660066;">split</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/\s+/</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; classNames.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>value<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; el.<span style="color: #660066;">className</span> <span style="color: #339933;">=</span> classNames.<span style="color: #660066;">join</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">' '</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
<br />
&nbsp; remove<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> regex <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RegExp<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'(^|<span style="color: #000099; font-weight: bold;">\\</span>s)'</span> <span style="color: #339933;">+</span> value <span style="color: #339933;">+</span> <span style="color: #3366CC;">'(<span style="color: #000099; font-weight: bold;">\\</span>s|$)'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'g'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; el.<span style="color: #660066;">className</span> <span style="color: #339933;">=</span> el.<span style="color: #660066;">className</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span>regex<span style="color: #339933;">,</span> <span style="color: #3366CC;">'$1$2'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
<br />
&nbsp; has<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> regex <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RegExp<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'(^|<span style="color: #000099; font-weight: bold;">\\</span>s)'</span> <span style="color: #339933;">+</span> value <span style="color: #339933;">+</span> <span style="color: #3366CC;">'(<span style="color: #000099; font-weight: bold;">\\</span>s|$)'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> regex.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>el.<span style="color: #660066;">className</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
<br />
&nbsp; toggle<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>className.<span style="color: #660066;">has</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; className.<span style="color: #660066;">remove</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; className.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>&#8220;<strong>className</strong>&#8221; ობიექტი შედგება ოთხი <strong>add</strong>, <strong>has</strong>, <strong>remove</strong> და <strong>toggle</strong> ზოგადი დანიშნულების მეთოდებისგან და ყოველი მათგანი ღებულობს ორ პარამეტრს &#8211; DOM ელემენტი და სასურველი კლასის სახელი. მეთოდები საკმაოდ მარტივია რადგან მუშობა ხდება ჩვეულებრივ სტრიქონთან. თუმცა &#8220;<strong>add</strong>&#8221; მეთოდის შემთხვევაში უნდა აღინიშნოს რომ კლასის სახელის დამატება აუცილებლად ხდება ჩამონათვალის ბოლოში რათა გარანტირებული იყოს ახლად დამატებული კლასის პრიორიტეტულობა.</p>
<p>ნაჩვენები <strong>className</strong> თამამად შეგვიძლია დავამატოთ ჩვენს &#8220;<strong>myQuery</strong> მოდულში ნებისმიერ ადგილას. თუმცა ამ ობიექტის მეთოდები ჯერჯერობით უხილავი იქნება გარე სამყაროსთვის, ამისათვის საჭიროა თავად myQuery მოდულის prototype სექციაში დავამატოთ შესაბამისი API მეთოდები რომლის მეშვეობითაც მოხდება ახლად რეალიზებული მეთოდების გამოძახება. რეალიზაცია:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">myQuery.<span style="color: #660066;">prototype</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp;<span style="color: #006600; font-style: italic;">//other methds</span><br />
<br />
&nbsp; addClass<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">name</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; className.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> <span style="color: #000066;">name</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
<br />
&nbsp; hasClass<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">name</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#91;</span>0<span style="color: #009900;">&#93;</span> <span style="color: #339933;">?</span> className<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#91;</span>0<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000066;">name</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
<br />
&nbsp; removeClass<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">name</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; className.<span style="color: #660066;">remove</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> <span style="color: #000066;">name</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
<br />
&nbsp; toggleClass<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">name</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; className.<span style="color: #660066;">toggle</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> <span style="color: #000066;">name</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>როგორც ხედავთ რეალიზაცია ძალიან მარტივია, თუმცა რამდენიმე დეტალს უფრო ვრცლას შევეხები. პირველ რიგში ყუარდღება მიაქციეთ რომ <strong>hacClass</strong> მეთოდის გარდა ყველა მეთოდი თავის შესაბამის ოპერაციას ახორციელებს მიმდინარე myQuery ობიექტის მიერ ნაპოვნ ყველა DOM ელემენტზე. მეორე რიგში ყურადღებას იმსახურებს თავად <strong>each()</strong> მეთოდის გამოყენება რომლის რეალიზაციაც გავაკეთეთ პოსტის პირველ ნაწილში. საინტერესოა ის რომ ელემენტების იტერაციისათვის გამოვიყენეთ თავად მოდულის ჩვენს მიერ რეალიზებული API მეთოდი და არა ტრადიციულად ციკლის ოპერატორი. და ასევე ყურადღება მიაქციეთ რომ ყველა მეთოდი(კვლავ hasClass მეთოდის გარდა) აბრუნებს მიმდინარე myQuery ობიექტს, ცხადია ეს აუცილებელია ჯაჭვურობის შესანარჩუნებლად.</p>
<p>ახლად დამატებული მეთოდების მეშვეობით უკვე შესაძლებელია საკმაოდ საინტერესო შედეგების მიღება. მაგალითისათვის გადახედეთ შემდეგ კოდს:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'div p a'</span><span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">//find all &quot;A&quot; tags within &quot;P&quot; tags</span><br />
&nbsp; .<span style="color: #660066;">removeClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'unnecessary-class'</span><span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">//remove class &quot;unnecessary-class&quot;</span><br />
&nbsp; .<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'some-new-class'</span><span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">//add class &quot;some-new-class&quot;</span><br />
&nbsp; .<span style="color: #660066;">toggleClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'some-other-class'</span><span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">//toggle class &quot;some-other-class&quot;</span><br />
&nbsp; .<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #006600; font-style: italic;">//iterate through all &quot;A&quot; tags</span><br />
&nbsp; &nbsp; &nbsp;console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">className</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//print class name to the console output</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #003366; font-weight: bold;">var</span> value <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#element-identifier'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hasClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'some-class-of-intereset'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>ჩემის აზრით საკმოად შთამბეჭდავი შედეგია არც თუ ისე რთული და მოცულობითი კოდის კვალობაზე <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>დროა გავაერთიანოთ პოსტის პირველი და მიმდინარე ნაწილის შედეგები:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #006600; font-style: italic;">/**<br />
&nbsp; &nbsp;* @class myQuery class<br />
&nbsp; &nbsp;* @param query String|DOM Element<br />
&nbsp; &nbsp;* @param context DOM Element|DOM Element Collection<br />
&nbsp; &nbsp;*/</span><br />
&nbsp; <span style="color: #003366; font-weight: bold;">var</span> myQuery <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>query<span style="color: #339933;">,</span> context<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//if no context provided use &quot;document&quot; as default</span><br />
&nbsp; &nbsp; context <span style="color: #339933;">=</span> context <span style="color: #339933;">||</span> document<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//if context is DOM document or Node put it in array</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span>context <span style="color: #000066; font-weight: bold;">instanceof</span> Array<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; context <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>context<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//resulting array of found DOM elements</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> result <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//loop through each context and find elements</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> 0<span style="color: #339933;">,</span> length <span style="color: #339933;">=</span> context.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> length<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//find elements within context</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> nodes <span style="color: #339933;">=</span> context<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">querySelectorAll</span><span style="color: #009900;">&#40;</span>query<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//build array from DOM List object</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> j <span style="color: #339933;">=</span> 0<span style="color: #339933;">,</span> len <span style="color: #339933;">=</span> nodes.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&lt;</span> len<span style="color: #339933;">;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>nodes<span style="color: #009900;">&#91;</span>j<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span>ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; result <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//count of found DOM elements</span><br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//will be updated with Array's push() method</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">length</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//add all found elements to &quot;myQuery&quot; instance</span><br />
&nbsp; &nbsp; Array.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">push</span>.<span style="color: #660066;">apply</span><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> <span style="color: #006600; font-style: italic;">//current instance of myClass object</span><br />
&nbsp; &nbsp; &nbsp; result <span style="color: #006600; font-style: italic;">//array of found DOM elements</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #006600; font-style: italic;">//utility methods for working with &quot;class&quot; attribute</span><br />
&nbsp; <span style="color: #003366; font-weight: bold;">var</span> className <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; add<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; className.<span style="color: #660066;">remove</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> classNames <span style="color: #339933;">=</span> el.<span style="color: #660066;">className</span>.<span style="color: #660066;">split</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/\s+/</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; classNames.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>value<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; el.<span style="color: #660066;">className</span> <span style="color: #339933;">=</span> classNames.<span style="color: #660066;">join</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">' '</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
&nbsp; <br />
&nbsp; &nbsp; remove<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> regex <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RegExp<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'(^|<span style="color: #000099; font-weight: bold;">\\</span>s)'</span> <span style="color: #339933;">+</span> value <span style="color: #339933;">+</span> <span style="color: #3366CC;">'(<span style="color: #000099; font-weight: bold;">\\</span>s|$)'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'g'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; el.<span style="color: #660066;">className</span> <span style="color: #339933;">=</span> el.<span style="color: #660066;">className</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span>regex<span style="color: #339933;">,</span> <span style="color: #3366CC;">'$1$2'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
&nbsp; <br />
&nbsp; &nbsp; has<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> regex <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> RegExp<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'(^|<span style="color: #000099; font-weight: bold;">\\</span>s)'</span> <span style="color: #339933;">+</span> value <span style="color: #339933;">+</span> <span style="color: #3366CC;">'(<span style="color: #000099; font-weight: bold;">\\</span>s|$)'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> regex.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>el.<span style="color: #660066;">className</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
&nbsp; <br />
&nbsp; &nbsp; toggle<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>className.<span style="color: #660066;">has</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; className.<span style="color: #660066;">remove</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; className.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; <span style="color: #006600; font-style: italic;">//myQuery class methods</span><br />
&nbsp; myQuery.<span style="color: #660066;">prototype</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <br />
&nbsp; &nbsp; each<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>callback<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> 0<span style="color: #339933;">,</span> el<span style="color: #339933;">;</span> <span style="color: #009900;">&#40;</span>el <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#91;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;callback.<span style="color: #660066;">call</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; addClass<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">name</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; className.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> <span style="color: #000066;">name</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
&nbsp; <br />
&nbsp; &nbsp; hasClass<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">name</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#91;</span>0<span style="color: #009900;">&#93;</span> <span style="color: #339933;">?</span> className<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#91;</span>0<span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000066;">name</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
&nbsp; <br />
&nbsp; &nbsp; removeClass<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">name</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; className.<span style="color: #660066;">remove</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> <span style="color: #000066;">name</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span><br />
&nbsp; <br />
&nbsp; &nbsp; toggleClass<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">name</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; className.<span style="color: #660066;">toggle</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> <span style="color: #000066;">name</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #006600; font-style: italic;">/**<br />
&nbsp; &nbsp;* Add &quot;$&quot; function to global context<br />
&nbsp; &nbsp;* function accepts same arguments as myQuery class<br />
&nbsp; &nbsp;*<br />
&nbsp; &nbsp;* @param query String|DOM Element<br />
&nbsp; &nbsp;* @param context DOM Element|DOM Element Collection<br />
&nbsp; &nbsp;*/</span><br />
&nbsp; window.$ <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>query<span style="color: #339933;">,</span> context<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//return new &quot;myQuery&quot; instance</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">new</span> myQuery<span style="color: #009900;">&#40;</span>query<span style="color: #339933;">,</span> context<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/jquery-%e1%83%a1%e1%83%90%e1%83%99%e1%83%a3%e1%83%97%e1%83%90%e1%83%a0%e1%83%98-%e1%83%ae%e1%83%94%e1%83%9a%e1%83%98%e1%83%97-%e1%83%9c%e1%83%90%e1%83%ac%e1%83%98%e1%83%9a%e1%83%98-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery საკუთარი ხელით &#8211; ნაწილი 1</title>
		<link>http://www.code.ge/posts/jquery-%e1%83%a1%e1%83%90%e1%83%99%e1%83%a3%e1%83%97%e1%83%90%e1%83%a0%e1%83%98-%e1%83%ae%e1%83%94%e1%83%9a%e1%83%98%e1%83%97-%e1%83%9c%e1%83%90%e1%83%ac%e1%83%98%e1%83%9a%e1%83%98-1</link>
		<comments>http://www.code.ge/posts/jquery-%e1%83%a1%e1%83%90%e1%83%99%e1%83%a3%e1%83%97%e1%83%90%e1%83%a0%e1%83%98-%e1%83%ae%e1%83%94%e1%83%9a%e1%83%98%e1%83%97-%e1%83%9c%e1%83%90%e1%83%ac%e1%83%98%e1%83%9a%e1%83%98-1#comments</comments>
		<pubDate>Thu, 10 Sep 2009 11:00:30 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[chaining]]></category>
		<category><![CDATA[css selector]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[myquery]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=285</guid>
		<description><![CDATA[jQuery განეკუთვნება იმ ბიბლიოთეკათა ნაწილს რომელმაც მოახერხა და გულგრილად არ დატოვა მთელი მსოფლიოს ვებ დეველოპერები. ძალიან ბევრი ამ სფეროში მომუშავე პროფესიონალი თუ მოყვარული დამეთანხმება რომ ამ ბიბლიოთეკის ავტორმა ჭეშმარიტად ეფექტურ და უნიკალურ მიდგომას მიაგნო რამაც უთვალავ ვებ პროგრამისტს არათუ უბრალოდ გაუადვილა არამედ მეტი ხალისი და აზარტი შესძინა მათ ყოველდღიურ საქმიანობას. 
ამ პოსტით მინდა გავხსნა დაგეგმილი [...]]]></description>
			<content:encoded><![CDATA[<p>jQuery განეკუთვნება იმ ბიბლიოთეკათა ნაწილს რომელმაც მოახერხა და გულგრილად არ დატოვა მთელი მსოფლიოს ვებ დეველოპერები. ძალიან ბევრი ამ სფეროში მომუშავე პროფესიონალი თუ მოყვარული დამეთანხმება რომ ამ ბიბლიოთეკის ავტორმა ჭეშმარიტად ეფექტურ და უნიკალურ მიდგომას მიაგნო რამაც უთვალავ ვებ პროგრამისტს არათუ უბრალოდ გაუადვილა არამედ მეტი ხალისი და აზარტი შესძინა მათ ყოველდღიურ საქმიანობას. </p>
<p>ამ პოსტით მინდა გავხსნა დაგეგმილი სერია პოსტებისა რომლის მეშვეობითაც შევეცდები გაგაცნოთ jQuery &#8211; ს შიდა სამზარეულო და გადმოგცეთ მასში გამოყენებული ძირითადი მიდგომები რომლებიც დაგეხმარებად მსგავსი ტიპის საკუთარი ბიბლიოთეკების შექმნაში.</p>
<p><strong><em>პოსტის დანარჩენი ნაწილის წაკითხვამდე მინდა გაგაფრთხილოთ რომ ეს არ არის ტუტორიალი jQuery &#8211; ს შესწავლის მსურველთათვის, და იგულისხმება რომ თქვენ უკვე გაქვთ ამ ბიბლიოთეკასთან მუშაობის გარკვეული გამოცდილება.</em></strong><br />
<span id="more-285"></span><br />
მაშ ასე შევუდგეთ საქმეს!</p>
<p>პირველ რიგში ვიდრე შევუდგებით კოდის წერასა და ქვედა დონის დეტალების განხილვას, მნიშვნელოვანია გამოვყოთ jQuery &#8211; ს ის ძირითადი შემადგენელი კომპონენტები. </p>
<ul>
<li><strong>CSS სელექტორ ენჯინი</strong> &#8211; ეს არის jQuery &#8211; ს უმთავრესი შემადგენელი ნაწილი, რომელსაც მექანიკურად ვეხებით ბიბლიოთეკის პირველივე გამოყენებისთანავე. კერძოდ კი ეს არის ძრავი რომელიც DOM დოკუმენტში CSS 3 &#8211; თან თავსებადი სელექტორების მეშვეობით ელემენტების მოძებნის საშუალებას გვაძლევს;</li>
<li><strong>ატრიბუტები</strong> &#8211; სპეციალური მეთოდები ელემენტების ატრიბუტებთან სამუშაოდ;</li>
<li><strong>ტრავერსინგი</strong> &#8211; სპეციალური მეთოდები უკვე ნაპოვნი DOM ელემენტების დამატებითი ფილტრაციისა და ნავიგაციისთვის;</li>
<li><strong>ელემენტებით მანიპულაცია</strong> &#8211; სპეციალური მეთოდები ელემენტებზე სხვადასხვა DOM ოპერაციების ჩასატარებლად(მაგ. წაშლა, ჩამატება, გადატანა, კლონირება);</li>
<li><strong>CSS მანიპულაცია</strong> &#8211; DOM ელემენტების CSS სტილებთან მუშაობა;</li>
<li><strong>ივენთები</strong> &#8211; DOM ელემენტების ივენთების მენეჯმენტი;</li>
<li><strong>Ajax</strong> &#8211; XMLHttpRequest ობიექტის გარშემო აგებული სპეციალური მეთოდები სერვერთან ასინქრონულ რეჟიმში მუშაობისათვის;</li>
</ul>
<p>ეს არის ნაწილი იმ ძირითადი კომპონტენტებისა რომლისგანაც შედგება jQuery. აღსანიშნავია რომ ყოველი კომპონენტი საკმაოდ კომპლექსურია და ყველა მათგანს გააჩნია მათთვის დამახასიათებელი სირთულეები რაც ძირითადად ბრაუზერებს შორის თავსებადობაში გამოიხატება.</p>
<p>ამ მცირედი შესავლის შემდეგ შეგვიძლია გადავიდეთ საქმეზე და შევუდგედ კოდირებას, თუმცა, მანამდე სანამ დავწერთ კოდს უნდა განვიხილოთ jQuery &#8211; ს ორ მაგიურ დეტალს რომელიც თავის თავში აერთიანებს ყველა ზემოთ ჩამოთვლილ კომპონენტს და განსაკუთრებულ ხიბლსა და ელეგანტურობას სძენს მიმდინარე პოსტის გმირს. პირველია ფუნქცია რომლის სახელიც არის დოლარის აღმნიშნველი სიმბოლო:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #006600; font-style: italic;">//ცნობილი დოლარის ნიშანი რომელიც რეალურად </span><br />
<span style="color: #006600; font-style: italic;">//არის მიმთითებელი გლობალურ jQuery ობიექტზე</span><br />
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#dom-element-id'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>ხოლო მეორე ე.წ. <strong>chaining</strong> რომლის მეშვეობითაც ჯაჭვურად შეგვიძლია გამოვიძახოთ სხვადასხვა ტიპის მეთოდები და განვახორციელოთ სხვადასხვა მაინპულაციები CSS მოთხოვნის მიხედვით ნაპოვნ DOM ელემენტების კოლექციაზე:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#dom-element-id'</span><span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">//ვიპოვნოთ ელემენტი იდენტიფიკატორით</span><br />
&nbsp; .<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'li'</span><span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">//ნაპოვნ ელემენტში ვიპოვნოთ ყველა LI ელემენტი</span><br />
&nbsp; .<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'found'</span><span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">//ნაპოვნ LI ელემენტებს მივანიჭოთ CSS კლასი</span><br />
&nbsp; .<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'span'</span><span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">//LI ელემენტებში ვიპოვოთ ყველა SPAN ელემენტი</span><br />
&nbsp; .<span style="color: #660066;">remove</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//გავანადგუროთ ნაპოვნი SPAN ელემენტები</span></div></td></tr></tbody></table></div>
<p>კოდის ეს ორი მცირე ფრაგმენტი ძალიან მარტივი და ელეგანტურია მითუფრო თუ გავითვალისწინებთ მთელს იმ სირუთელეებს რაც ამ რამდენიმე მეთოდის გამოძახების უკან დგას! მეთოდების ასე ჯაჭვურად გამოძახების შესაძლებლობა </p>
<p>კიდევ ერთი საინტერესო და jQuery &#8211; სთვის დამახასიათებელია დეტალი </p>
<p>გიფიქრიათ ოდესმე მსგავსი რამის საკუთარი ხელით შექმნაზე? არა? ან გიფიქრიათ და დაგზარებიათ?  თუ მსგავსი რამ ჯერ არ გაგიკეთებიათ ესე იგი უკვე დროა დავიკაპიწოთ ხელები და შევუდგეთ საკუთარი jQuery &#8211; ს მსგავსი ბიბლიოთეკის შექმნას. ამ პოსტში და მის შემდგომ ნაწილებში ამ ბიბლიოთეკას პირობითად დავარქვათ <strong>myQuery</strong> და შევუდგეთ იმპლემენტაციას.</p>
<p>პირველ რიგში გვესაჭიროება <strong>&#8220;$&#8221;</strong> ფუნქცია რომელიც წვდომას მოგვცემს <strong>myQuery</strong> კლასის ობიექტზე. ფუნქცია ძალიან მარტივია, მას გადაეცემა ორი პარამეტრი &#8211; CSS სელექტორი და კონტექსტი(არააუცილებელი პარამეტრი). აღწერილი მიზნის მისაღწევად სრულებით საკმარისია ქვემოთ ნაჩვენები კოდი:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #006600; font-style: italic;">/**<br />
&nbsp; &nbsp;* @class myQuery class<br />
&nbsp; &nbsp;*<br />
&nbsp; &nbsp;* @param query String|DOM Element<br />
&nbsp; &nbsp;* @param context DOM Element|DOM Element Array<br />
&nbsp; &nbsp;*/</span><br />
&nbsp; <span style="color: #003366; font-weight: bold;">var</span> myQuery <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>query<span style="color: #339933;">,</span> context<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; <span style="color: #006600; font-style: italic;">/**<br />
&nbsp; &nbsp;* myQuery prototype<br />
&nbsp; &nbsp;*/</span><br />
&nbsp; myQuery.<span style="color: #660066;">prototype</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; <span style="color: #006600; font-style: italic;">/**<br />
&nbsp; &nbsp;* Add &quot;$&quot; function to global context<br />
&nbsp; &nbsp;* function accepts same arguments as myQuery class<br />
&nbsp; &nbsp;*<br />
&nbsp; &nbsp;* @param query String<br />
&nbsp; &nbsp;* @param context DOM Element|DOM Element Array<br />
&nbsp; &nbsp;*/</span><br />
&nbsp; window.$ <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>query<span style="color: #339933;">,</span> context<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//return new &quot;myQuery&quot; instance</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">new</span> myQuery<span style="color: #009900;">&#40;</span>query<span style="color: #339933;">,</span> context<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>პირველ რიგში ყურადღებას შევაჩერებ კოდის რამდენიმე დეტალზე. კერძოდ კი ყუარდღებას იმსახურებს შემდეგი კონსტრუქცია:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>ეს ერთი შეხედვით უცნაური კოდი ექვივალენტურია შემდეგი კოდისა:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #006600; font-style: italic;">//ფუნქციის აღწერა</span><br />
<span style="color: #003366; font-weight: bold;">function</span> myFunction<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #006600; font-style: italic;">//some initialization code here</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #006600; font-style: italic;">//ფუნქციის გამოძახება</span><br />
myFunction<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>თუმცა ჩვენს შემთხვევაში ტრადიციული გზა მთლიანად ავიცილეთ თავიდან რადგან აბსოლუტურად არაფერში არ გვესაჭიროება დამოუკიდებელი ფუნქციის აღწერა ინიციალიზაციისათვის რადგან ეს ფუნქცია უნდა შესრულდეს მხოლოდ ერთხელ კოდის ჩატვირთვისთანავე და კოდის სხვა ნაწილიდან მისი გამოძახების არანაირი აუცილებლობა არ არსებობს. გარდა ამისა ფუნქციის ავტომატურ გამოძახებასთან ერთად ჩვენი კოდის დანარჩენი ნაწილი მოქცეულია ერთ კონკრეტულ კონტექსტში(კონტექსტი შემოიფარგლება ანონიმური ფუნქციის შიდა კონტექსტით) და არ ხდება გლობალური(window) კონტექსტის დაბინძურება. კოდის დანარჩენი ნაწილი ჩვეულებრივი ფუნქციის აღწერებია და განსაკუთრებულ ახსნა განმარტებას არ იმსახურებს, თუმცა ყოველი შემთხვევისთვის აღვნიშნავ რომ შემდეგი კოდის მეშვეობით:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">window.$ <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>query<span style="color: #339933;">,</span> context<span style="color: #009900;">&#41;</span></div></td></tr></tbody></table></div>
<p>გარდა იმისა რომ &#8220;$&#8221; ფუნქციას ხელმისაწვდომს ვხდით გლობალურ(window) კონტექსტში, ამ ფუნქციას უნარჩუნდება წვდომა ზემოთ ნახსენები ანონიმური ფუნქციის კონტექსტზე ისე რომ ამ კონტექსტს მიღმა არსებულ სხვა კოდს მასთან არანაირი შეხება არ გააჩნია.</p>
<p>მოცემული კოდის მეშვეობით უკვე შეგვიძლია შევასრულოთ შემდეგი ტიპის გამოძახებები:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'div.my-div-class-name a.selected'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'div.my-div-class-name'</span><span style="color: #339933;">,</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'any-element-id'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>თუმცა ცხადია ნაჩვენები კოდი არანაირ რეზულტატს არ მოგვცემს რადგან myQuery ჯერჯერობით არანაირი ფუნქციონალობით არ არის აღჭურვილი. იმისათვის რომ ჩვენმა რეალიზაციამ გააკეთოს რაიმე სასარგებლო პირველ რიგში საჭიროა იგი აღვჭურვოთ ნახსენები CSS სელექტორების ძრავით. საწყის ეტაპზე ამ მიზნის მისაღწევად საკმარისი იქნება თუ ვისარგებლებთ ბოლო ვერსიების(Safari, Chrome, Firefox 3.5, Opera 10, InternetExplorer 8 ) ბრაუზერებში ჩადებული &#8220;<strong>querySelectorAll</strong>&#8221; მეთოდით რომლის მეშვეობითაც შესაძლებელი იქნება დოკუმენტისა ან ნებისმიერი DOM ელემენტის კონეტქსტში მოვძებნოთ სხვა DOM ელემენტები CSS სელექტორის გამოყენებით. ამ მეთოდის გამოსაყენებლად საჭიროა myQuery შევცვალოთ შემდეგნაირად:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> myQuery <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>query<span style="color: #339933;">,</span> context<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #006600; font-style: italic;">//if no context provided use &quot;document&quot; as default</span><br />
&nbsp; context <span style="color: #339933;">=</span> context <span style="color: #339933;">||</span> document<span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #006600; font-style: italic;">//if context is DOM document or Node put it in array</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span>context <span style="color: #000066; font-weight: bold;">instanceof</span> Array<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; context <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>context<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #006600; font-style: italic;">//resulting array of found DOM elements</span><br />
&nbsp; <span style="color: #003366; font-weight: bold;">var</span> result <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #000066; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//loop through each context and find elements</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> 0<span style="color: #339933;">,</span> length <span style="color: #339933;">=</span> context.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> length<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//find elements within context</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> nodes <span style="color: #339933;">=</span> context<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">querySelectorAll</span><span style="color: #009900;">&#40;</span>query<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//build array from DOM List object</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> j <span style="color: #339933;">=</span> 0<span style="color: #339933;">,</span> len <span style="color: #339933;">=</span> nodes.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&lt;</span> len<span style="color: #339933;">;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; result.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>nodes<span style="color: #009900;">&#91;</span>j<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span>ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; result <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #006600; font-style: italic;">//count of found DOM elements</span><br />
&nbsp; <span style="color: #006600; font-style: italic;">//will be updated with Array's push() method</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">length</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #006600; font-style: italic;">//add all found elements to &quot;myQuery&quot; instance</span><br />
&nbsp; Array.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">push</span>.<span style="color: #660066;">apply</span><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> <span style="color: #006600; font-style: italic;">//current instance of myClass object</span><br />
&nbsp; &nbsp; result <span style="color: #006600; font-style: italic;">//array of found DOM elements</span><br />
&nbsp; <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>მოდიფიცირებული ფუნქცია საკმაოდ მარტივია. პირველ რიგში იგი querySelectorAll მეთოდისა და ფუქციისათვის პირველ პარამეტრად გადაცემული CSS სელექტორის მეშვეობით კონკრეტულ კონტექსტში ეძებს დომ ელემენტებს. როგორ მუშაობს ეს ფუნქცია?</p>
<ul>
<li><strong>მე &#8211; 4 სტრიქონი</strong> &#8211; თუ გამოძახება მოხდა კონტექსტის პარამეტრის გარეშე ნაგულისხმევ კონტექსტად გამოიყენება &#8220;document&#8221; ობიექტი;</li>
<li><strong>7/9 სტრიქონები</strong> &#8211; ამ შემთხვევაში საჭიროა შევამოწმოთ არის თუ არა კონტექსტი მასივის ტიპის რადგან მსგავსი რამ დასაშვებია. თუ კონტექსტი არ არის მასივი და DOM დოკუმენტი ან DOM ობიექტი ჩავდოთ იგი მასივში და ხელახლა მივანიჭოთ იგი &#8220;context&#8221; ცვლადს;</li>
<li><strong>17/27 სტრიქონები</strong> &#8211; ციკლში ყოველი კონტექსტისათვის შევასრულოთ &#8220;querySelectorAll&#8221; მეთოდი.</li>
<li><strong> 35 &#8211; ე სტრიქონი</strong> &#8211; აღვწეროთ ობიექტის &#8220;length&#8221; თვისება ;</li>
</ul>
<p><strong>38/40 სტრიქონები</strong> &#8211; ნაპოვნი DOM ელემენტების დამატება ხდება თავად &#8220;myQuery&#8221; ობიექტში რაც ნიშნავს იმას რომ მაგ მომენტიდან myQuery ობიექტი შეგვიძლია გამოვიყენოთ როგორც მასივი. მაგალითად ქვემოთ ნაჩვენები ყველა მაგალითი აბსოლუტურად ვალიდურია:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'div'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span>0<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #006600; font-style: italic;">//ან</span><br />
<span style="color: #003366; font-weight: bold;">var</span> result <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'div'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>result<span style="color: #009900;">&#91;</span>0<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #006600; font-style: italic;">//ან</span><br />
<span style="color: #003366; font-weight: bold;">var</span> result <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'div'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> result.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>result<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">nodeName</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ობიექტის აღჭურვა მასივის მსგავსი ქმედებებით ამ კონკრეტულ შემთხვევაში მიიღწევა Array ობიექტის  push მეთოდისა და myQuery ობიექტის &#8220;length&#8221; თვისების მეშვეობით. ამონარიდი JavaScript &#8211; ის დოკუმენტაციიდან:</p>
<blockquote><p><strong>push</strong> is intentionally generic. <strong>This method can be called or applied to objects resembling arrays</strong>. The <strong>push method relies on a length property</strong> to determine where to start inserting the given values. If the length property cannot be converted into a number, the index used is 0. This includes the possibility of length being nonexistent, in which case length will also be created</p></blockquote>
<p>თუ კოდის ეს ნაწილი მაინც გაუგებარია თქვენთვის გირჩევთ გადაიკითხოთ ფუნქციის call და apply მეთოდების შესახებ ჩემს მიერ რამდენიმე წლის წინ დაწერილი <a href="http://www.code.ge/posts/javascript-wtf-vol-1">პოსტი</a>.</p>
<p>იმედია ამ მომენტამდე ყველაფერი გასაგებია <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  დროა გადავიდეთ შემდეგ ეტაპზე და ჩვენი myClass ბიბლიოთეკა აღვჭურვოთ რამდენიმე სასარგებლო მეთოდით. პირველი ეტაპისათვის საკმარისი იქნება შემდეგი რამდენიმე მეთოდის იმპლემენტაცია:</p>
<ul>
<li><strong>each</strong> &#8211; მეთოდი ნაპოვნი ელემენტების იტერაციისათვის, ქოლბექ ფუნქციის პარამეტრად გადაცემის შესაძლებლობით</li>
</ul>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">myQuery.<span style="color: #660066;">prototype</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <br />
&nbsp; each<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>callback<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp;<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> 0<span style="color: #339933;">,</span> el<span style="color: #339933;">;</span> <span style="color: #009900;">&#40;</span>el <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#91;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;callback.<span style="color: #660066;">call</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp;<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'div p'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>index<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;&lt;b&gt;This is &quot;</span> <span style="color: #339933;">+</span> index <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;th paragraph&lt;/p&gt;&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p><strong>each</strong> ფუნქციის რეალიზაცია ძალიან მარტივია, &#8220;$&#8221; შესრულების შემდეგ &#8220;myQuery&#8221; ობიექტი უკვე შეიცავს ყველა ნაპოვნ DOM ელემენტს. გამომდინარე აქედან ელემენტებს შეგვილია მივმართოთ ინდექსით მაგ. &#8220;<strong>this[0]</strong>&#8220;, ხოლო რადგან <strong>myQuery</strong>  ობიექტს გააჩნია <strong>length</strong> თვისება მისი იტერაცია და სათითაო ელემენტის ამოღება შესაძლებელია ჩვეულებრივი ციკლის ოპერატორით. ციკლის შიგნით უბრალოდ ხდება <strong>each</strong> მეთოდისათვის პარამეტრად გადაცემული ქოლბექ ფუნქციის გამოძახება <strong>call</strong> მეთოდის მეშვეობით მსგავსი გამოძახება გარანტიას გვაძლევს რომ ქოლბექ ფუნქცია შესრულებული იქნება პირველ პარამეტრად(კონტექსტი) გადაცემული DOM ელემენტის კონტექსტში. ხოლო ქოლბექფუნქციის შიგნით მიმდინარე DOM ელემენტს პირდაპირ შეგვიძლია მივმართოთ <strong>this</strong> &#8211; ის მეშვეობით.</p>
<p>ასევე <strong>each</strong> ფუნქციის რეალიზაცია განსაკუთრებულ ყურადღებას იმსახურებს ფუნქციის ბოლო სტრიქონი:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>რეალურად myQuery ობიექტის <strong>each</strong> მეთოდი აბრუნებას ისევ myQuery ობიექტს ხოლო ეს ნიშნავს რომ ე.წ. Chaining უკვე უზრუნველყოფილია და წინა მაგალითის მოდიფიცირებით უკვე შეგვიძლია დავწეროთ შემდეგი კოდი:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'div p'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>index<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">innerHTML</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;&lt;b&gt;This is &quot;</span> <span style="color: #339933;">+</span> index <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;th paragraph&lt;/p&gt;&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>index<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">id</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'paragraph'</span> <span style="color: #339933;">+</span> index<span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>ყურადღება მიაქციეთ <strong>each</strong> &#8211; ის ჯაჭვისებურად გამოძახებას.</p>
<p>კოდის დასრულებული ვერსია:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #006600; font-style: italic;">/**<br />
&nbsp; &nbsp;* @class myQuery class<br />
&nbsp; &nbsp;* @param query String|DOM Element<br />
&nbsp; &nbsp;* @param context DOM Element|DOM Element Collection<br />
&nbsp; &nbsp;*/</span><br />
&nbsp; <span style="color: #003366; font-weight: bold;">var</span> myQuery <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>query<span style="color: #339933;">,</span> context<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//if no context provided use &quot;document&quot; as default</span><br />
&nbsp; &nbsp; context <span style="color: #339933;">=</span> context <span style="color: #339933;">||</span> document<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//if context is DOM document or Node put it in array</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span>context <span style="color: #000066; font-weight: bold;">instanceof</span> Array<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; context <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span>context<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//resulting array of found DOM elements</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> result <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//loop through each context and find elements</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> 0<span style="color: #339933;">,</span> length <span style="color: #339933;">=</span> context.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> length<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//find elements within context</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> nodes <span style="color: #339933;">=</span> context<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">querySelectorAll</span><span style="color: #009900;">&#40;</span>query<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//build array from DOM List object</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> j <span style="color: #339933;">=</span> 0<span style="color: #339933;">,</span> len <span style="color: #339933;">=</span> nodes.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&lt;</span> len<span style="color: #339933;">;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; result.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>nodes<span style="color: #009900;">&#91;</span>j<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span>ex<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; result <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//count of found DOM elements</span><br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//will be updated with Array's push() method</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">length</span> <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//add all found elements to &quot;myQuery&quot; instance</span><br />
&nbsp; &nbsp; Array.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">push</span>.<span style="color: #660066;">apply</span><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> <span style="color: #006600; font-style: italic;">//current instance of myClass object</span><br />
&nbsp; &nbsp; &nbsp; result <span style="color: #006600; font-style: italic;">//array of found DOM elements</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; <span style="color: #006600; font-style: italic;">//myQuery class methods</span><br />
&nbsp; myQuery.<span style="color: #660066;">prototype</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; <br />
&nbsp; &nbsp; each<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>callback<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> 0<span style="color: #339933;">,</span> el<span style="color: #339933;">;</span> <span style="color: #009900;">&#40;</span>el <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#91;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;callback.<span style="color: #660066;">call</span><span style="color: #009900;">&#40;</span>el<span style="color: #339933;">,</span> i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #006600; font-style: italic;">/**<br />
&nbsp; &nbsp;* Add &quot;$&quot; function to global context<br />
&nbsp; &nbsp;* function accepts same arguments as myQuery class<br />
&nbsp; &nbsp;*<br />
&nbsp; &nbsp;* @param query String|DOM Element<br />
&nbsp; &nbsp;* @param context DOM Element|DOM Element Collection<br />
&nbsp; &nbsp;*/</span><br />
&nbsp; window.$ <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>query<span style="color: #339933;">,</span> context<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//return new &quot;myQuery&quot; instance</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">new</span> myQuery<span style="color: #009900;">&#40;</span>query<span style="color: #339933;">,</span> context<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/jquery-%e1%83%a1%e1%83%90%e1%83%99%e1%83%a3%e1%83%97%e1%83%90%e1%83%a0%e1%83%98-%e1%83%ae%e1%83%94%e1%83%9a%e1%83%98%e1%83%97-%e1%83%9c%e1%83%90%e1%83%ac%e1%83%98%e1%83%9a%e1%83%98-1/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Code.ge redesign&#8230; And I&#8217;m back B-)</title>
		<link>http://www.code.ge/posts/code-ge-redesign</link>
		<comments>http://www.code.ge/posts/code-ge-redesign#comments</comments>
		<pubDate>Tue, 08 Sep 2009 19:46:40 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[code-ge]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[LinGEO]]></category>
		<category><![CDATA[LinGO]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=281</guid>
		<description><![CDATA[მოკლედ მოგესალმებით ყველას! ძალიან დიდი ხანია მინდოდა ამ პოსტის დაწერა თუმცა გარკვეულ მიზეზთა გამო შინაგანმა წინააღმდეგობის გრძნობამ ეს სურვილი ჩაკლა. 
ჯერ კიდევ ორიოდე კვირის წინ ბლოგის დახურვასა და მის გაუქმებას ვაპირებდი, თუმცა ეს უაზრო სურვილი დავძლიე და შევეცდები განახლებული ენერგიით განვაგრძო წერა! ამისათვის განსაკუთრებული მადლობა მინდა გადავუხადო რამდენიმე ადამიანს(არ ჩამოვთვლი მათ სახელებს თვითონ მიხვდებით ვისაც [...]]]></description>
			<content:encoded><![CDATA[<p>მოკლედ მოგესალმებით ყველას! ძალიან დიდი ხანია მინდოდა ამ პოსტის დაწერა თუმცა გარკვეულ მიზეზთა გამო შინაგანმა წინააღმდეგობის გრძნობამ ეს სურვილი ჩაკლა. </p>
<p>ჯერ კიდევ ორიოდე კვირის წინ ბლოგის დახურვასა და მის გაუქმებას ვაპირებდი, თუმცა ეს უაზრო სურვილი დავძლიე და შევეცდები განახლებული ენერგიით განვაგრძო წერა! ამისათვის განსაკუთრებული მადლობა მინდა გადავუხადო რამდენიმე ადამიანს(არ ჩამოვთვლი მათ სახელებს თვითონ მიხვდებით ვისაც გგულისხმობთ). ასევე დიდი მადლობა მინდა გადავუხადო იმ ადამიანებს რომლებიც ამ ბლოგით ჯერ კიდევ სარგებლობენ და აქ თავმოყრილი ინფორმაციითა და ჩემი პატარა ნამუშევრებით სარგებლობენ. ასევე დიდი ბოდიში მინდა მოვუხადო ყველა ჩემი მხირდან უპასუხოდ დატოვებული კომენტარის ავტორს.</p>
<p>პირველი ეტაპისთვის გამოვნახე დრო და გავაკეთე ბლოგის გარეგანი იერსახის სრული ცვლილება რომელიც ალბათ უკვე თვალში მოგხვდათ <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>გარდა ამისა მომზადებული მაქვს მთელი რიგი განახლებები ქართული კლავიატურის სკრიპტისთვის და სხვა თაროზე შემოდებული პროექტებისთვის რომლებსაც მალე გამოვფენ.</p>
<p>პირველ რიგში დღეს გავაოფენსორსე(როგორი ქართულია? <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  ) <a href="http://www.code.ge/posts/tag/iphone">LinGO</a> ინგლისურ ქართული ლექსიკონი iPhone &#8211; სთვის რომელიც ხელმისაწვდომია <a href="http://github.com/ioseb/LinGO/tree/master">GitHUB</a> &#8211; ზე. ეს მინი პროექტი აუცილებლად მიიღებს დასრულებულ სახეს რადგან დღეიდან მასში მონაწილეობას მიიღებს ორი გამოცდილი Mac (და არა მარტო) დეველოპერი &#8211; ლაშა დოლიძე და ირაკლი ნადარეიშვილი! დიდი მადლობა ორივეს მხარდაჭერისა და ამ პროექტში მონაწილეობის სურვილისათვის.</p>
<p>სხვა სიახლეებსა და შეძლებისდაგვარად სასარგებლო ნამუშევრების შესახებ სულ მალე შეიტყობთ ამ ბლოგის მეშვეობით.</p>
<p>მაშ ასე I&#8217;m Back B-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/code-ge-redesign/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>ქართული ტერმინოლოგია &#8211; დილემა</title>
		<link>http://www.code.ge/posts/%e1%83%a5%e1%83%90%e1%83%a0%e1%83%97%e1%83%a3%e1%83%9a%e1%83%98-%e1%83%a2%e1%83%94%e1%83%a0%e1%83%9b%e1%83%98%e1%83%9c%e1%83%9d%e1%83%9a%e1%83%9d%e1%83%92%e1%83%98%e1%83%90-%e1%83%93%e1%83%98</link>
		<comments>http://www.code.ge/posts/%e1%83%a5%e1%83%90%e1%83%a0%e1%83%97%e1%83%a3%e1%83%9a%e1%83%98-%e1%83%a2%e1%83%94%e1%83%a0%e1%83%9b%e1%83%98%e1%83%9c%e1%83%9d%e1%83%9a%e1%83%9d%e1%83%92%e1%83%98%e1%83%90-%e1%83%93%e1%83%98#comments</comments>
		<pubDate>Mon, 08 Jun 2009 06:56:21 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=268</guid>
		<description><![CDATA[მინდა გაგიზიაროთ ჩემი გულისტკივიული ინფორმაციული ტექნოლოგიების სფეროში არსებული ქართული ტექნიკური ტერმინოლოგიის შესახებ რომელმაც ბოლო კვირების მანძილზე არცთუ ცოტა დრო წამართვა და შეიძლება ითქვას ჩემი მცდელობები მთელი რიგი ტერმინებისა თუ ფრაზების ქართულად თარგმნასთან დაკავშირებით სრული კრახით დასრულდა.
პრობლემა თავისთავად რთულია და ერთის მხრივ შესაძლებელია რომ ამ პრობლემას ჩემი მხრიდან ქართულის არასათანადო ცოდნაც ამძაფრებს&#8230; მაგრამ&#8230; ეგება ვინმემ მიმითითოს [...]]]></description>
			<content:encoded><![CDATA[<p>მინდა გაგიზიაროთ ჩემი გულისტკივიული ინფორმაციული ტექნოლოგიების სფეროში არსებული ქართული ტექნიკური ტერმინოლოგიის შესახებ რომელმაც ბოლო კვირების მანძილზე არცთუ ცოტა დრო წამართვა და შეიძლება ითქვას ჩემი მცდელობები მთელი რიგი ტერმინებისა თუ ფრაზების ქართულად თარგმნასთან დაკავშირებით სრული კრახით დასრულდა.</p>
<p>პრობლემა თავისთავად რთულია და ერთის მხრივ შესაძლებელია რომ ამ პრობლემას ჩემი მხრიდან ქართულის არასათანადო ცოდნაც ამძაფრებს&#8230; მაგრამ&#8230; ეგება ვინმემ მიმითითოს ავტორიტეტულ წყაროზე ან ჯგუფზე ვინც ამ ტერმინების თარგმნით არის დაკავებული? კი ვიცი რომ ითარგმნება მთელი რიგი პროგრამული პაკეტები არსებობს გაქართულების ჯგუფები და ა.შ. მაგრამ მოდით რეალურად შევხედოთ პრობლემას. ერთია როდესაც თარგმნი &#8220;<strong>checkbox</strong>&#8221; &#8211; ს და მას არქმევ <strong>თოლიას</strong>(ჩემთვის სრულიად წარმოუდგენელი თარგმანია და ალბათ შინაგანად ვერასოდეს დავძლევ ბარიერს და ვერ გამოვიყენებ ამ ტერმინს), მაგრამ, მეორეა როდესაც უნდა თარგმნო ამ სფეროში დამკვიდრებული ისეთი სიტყვები და ფრაზები რომლებსაც განსაკუთრებული მნიშნველობა აქვთ შეძენილი კონტექსტიდან გამომდინარე. </p>
<p>ქვემოთ ჩამოვწერ ჩემის აზრით პრობლემურ სიტყებსა და ფრაზებს და ძალიან მოხარული ვიქნები თუ მცირედიც მაინც დამეხმარებით მათ თარგმნაში.</p>
<p>ჩემს შემთხვევაში პირველი და ყველაზე მნიშნველოვანი ფრაზა რის თარგმნასაც რამდენიმე წელია ვცდილობ და ვერაფრით ვერ მოვახერხე არის <strong>Content Management System(CMS)</strong>. CMS &#8211; ის თარგმნა რამდენჯერმე ვთხოვე ქართულის ჩემზე გაცილებით უკეთ მცოდნე პიროვნებებს&#8230; თუმცა რა შედეგი მივიღე? არაფერი! და რატომ? პირველ რიგში <strong>Content</strong> &#8211; ის თარგმანის სავარაუდო ვარიანტებია &#8220;<strong>შინაარსი, შიგთავსი, არსი და ა.შ.</strong>&#8221; როგორც არ უნდა ვუტრიალოთ ამ სიტყვის ასეთი თარგმანი აბსოლუტურად არაფერს არ გვაძლევს, და რატომ? იმიტომ რომ კონკრეტულად <strong>&#8220;Content Management System&#8221;</strong> &#8211; ის კონტექსტში ეს სიტყვა მოიცავს გაცილებით მეტს ვიდრე უბრალოდ <strong>შინაარსს</strong>, კერძოდ კი <strong>კონტენტი ეს არის კომპლექსური მონაცემის ტიპი რომელსაც გააჩნია აზრი(meaning) და კონტექსტი</strong>. პირობით მაგალითად რომ განვიხილოთ ამ ბლოგის პოსტები, აღმოვაჩენთ რომ თითეულ ბლოგ პოსტს გარდა თავად პოსტისა გააჩნია სხვადასხვა ატრიბუტები(სათაური, გამოქვეყნების დრო, კატეგორა/კატეგორიები(შეიძლება განვიხილოთ როგორც კონტექსტი), ავტორი და ა.შ. გამომდინარე აქედან ბლოგ პოსტი ზოგადად არის სპეციფიური <strong>კონტენტის ტიპი</strong>. ახლა ისმის კითხვა შესაძლებელია რომ ცალკეულ ბლოგ პოსტს ვუწოდოთ მარტივად <strong>შინაარსი</strong> ან <strong>შიგთავსი</strong>? არ ვიცი მე პირადად ვერანაირ ასოცირებას ვერ ვახერხებ კონტენტთან&#8230; თუ ვცდები შემისწორედ ამით ძალიან გამახარებთ&#8230; </p>
<p>და რა მოხდება თუ წერისას ან საუბრისას უბრალოდ გამოვიყენებთ ფრაზას <strong>&#8220;კონტენტის მენეჯმენტის სისტემა&#8221;</strong>? რა დაშავდება ამითი? ხომ არ ჯობია თარგმნის ნაცვლად თამამად გამოვიყენოთ ასეთი პრობლემური სიტყვები/ფრაზები რომლებმაც ინდუსტრიაში გარკვეული გავრცელება ჰპოვა და სპეციფიური დატვირთავა შეიძინა? თუ ამ საკითხთან დაკავშირებით გაგიჩნდებათ პროტესტის გრძნობა, აბა მითხარით როგორ გადათარგმნით <strong>&#8220;Enterprise Java Beans(EJB)&#8221;</strong>? არა მითხრას ვინმემ? ვთარგმნოთ პირდაპირ? და იცით რას მივიღებთ? </p>
<p><strong>Enterprise Java Beans(EJB) &#8211; საწარმოო ყავის მარცვლები</strong> აი ვინმემ მითხრას ახლა რა შუაშია <strong>საწარმოო ყავის მარცვლები</strong>?</p>
<p>თუ წინა ორი მაგალითი არ არის საკმარისი აბა სცადეთ თარგმნოთ &#8220;<strong>widget</strong>&#8220;, ძალიან მაინტერესებს როგორ უნდა ითარგმნოს ეს სიტყვა რომელიც ვების კონტექსტში შეიძლება განვმარტოთ როგორც &#8211; <strong>Interactive mini application that delivers content and functionality to the user</strong>. თუმცა კონტექსტიდან გამომდინარე ვიჯეტს სხვა განმარტებებიც გააჩნია&#8230;</p>
<p>მოკლედ ეს არის ის მცირედი რაც დღეს შემიძლია ვთქვა, თუმცა შეძლებისდაგვარად შევეცდები უფრო მეტი დავწერო ამ საკითხის ირგვლივ. იმედი მაქვს ამ ტკივილს გარკვეული რჩევებით გამიქარწყლებთ <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/%e1%83%a5%e1%83%90%e1%83%a0%e1%83%97%e1%83%a3%e1%83%9a%e1%83%98-%e1%83%a2%e1%83%94%e1%83%a0%e1%83%9b%e1%83%98%e1%83%9c%e1%83%9d%e1%83%9a%e1%83%9d%e1%83%92%e1%83%98%e1%83%90-%e1%83%93%e1%83%98/feed</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Jetpak &#8211; დამატებების ახალი სისტემა Mozilla &#8211; სგან</title>
		<link>http://www.code.ge/posts/jetpak</link>
		<comments>http://www.code.ge/posts/jetpak#comments</comments>
		<pubDate>Thu, 21 May 2009 11:27:59 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Google Chrome]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=260</guid>
		<description><![CDATA[ საერთოდ ცნობილია რომ კონკურენცია ძალიან კარგი რამ არის. ამ მტკიცებულების სისწორის კიდევ ერთი ძალიან კარგი მაგალითი გვაქვს სახეზე კერძოდ კი Google Chrome &#8211; სა და Mofilla Firefox &#8211; ის ე.წ. extension &#8211; ების სისტემების სახით.
მოგეხსენებათ რომ Google Chrome ძალიან ახალი ბრაუზერია რომელიც გასული წლის სექტემბრის დასაწყისში მოევლინა სამყაროს. მიუხედავად მისი ინოვაციურობისა მისი კრიტიკის ერთერთ [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.code.ge/javascript/jetpak/attachment/jetpack_logo" rel="attachment wp-att-261"><img src="http://www.code.ge/wp-content/uploads/jetpack_logo.png" alt="jetpack_logo" title="jetpack_logo" width="486" height="233" class="alignleft size-full wp-image-261" style="float: left; margin: 0 4px 4px 0;"/></a> საერთოდ ცნობილია რომ კონკურენცია ძალიან კარგი რამ არის. ამ მტკიცებულების სისწორის კიდევ ერთი ძალიან კარგი მაგალითი გვაქვს სახეზე კერძოდ კი Google Chrome &#8211; სა და Mofilla Firefox &#8211; ის ე.წ. extension &#8211; ების სისტემების სახით.</p>
<p>მოგეხსენებათ რომ Google Chrome ძალიან ახალი ბრაუზერია რომელიც გასული წლის სექტემბრის დასაწყისში მოევლინა სამყაროს. მიუხედავად მისი ინოვაციურობისა მისი კრიტიკის ერთერთ მთავარ მიზეზად იქცა FF &#8211; ის მსგავსი დამატებების სისტემის არ ქონის გამო. </p>
<p>ცხადია ასე პირველივე დღიდან ყველაფერის ჩადებას ვერ მოახერხებდა Google თავის ახალ ბრაუზერში, თუმცა, როგორც მალე გაირკვა შეჩერებასაც არ აპირებდა. სულ რამდენიმე თვეში გამოჩნდა პირველი პროპოზალი რომელიც <a href="http://dev.chromium.org/developers/design-documents/extensions">Chrome &#8211; ს დამატებების პლატფორმას შეეხებოდა</a>. თუმცა ამ პროპოზალში ერთმა მეტად საგულისხმო დეტალმა გაიჟღერა &#8211; განსხვავებით FF &#8211; ის ანალოგიური სისტემისგან Chrome &#8211; ს დამატებების შესაქმნელად საკმარისია მხოლოდ HTML/CSS და JavaScript. არავითარი XUL, არავითარი რთული XML კონფიგურაციის ფაილები დამატების ინსტალაციისათვის და ა.შ.</p>
<p>Google &#8211; ს ეს გდაწყვეტილება ჩემთვის პირადად გაცილებით მისაღები იყო რადგან XUL &#8211; ის ვერანაირ აუცილებლობას ვერც FF &#8211; ში ვხედავდი მანამდე და სიმართლე ითქვას ვერც დღეს ვერ ვხედავ&#8230; თუმცა არც Mozilla &#8211; მ დააყოფნა და დღეს უკვე შემოგვთავაზა FF &#8211; ის დამატებების შექმნის ახალი მექანიზმი. კერძოდ კი <a href="http://labs.mozilla.com/2009/05/introducing-jetpack-call-for-participation/">Jetpak</a>!</p>
<p>ციტატა პროექტის საიტიდან:</p>
<blockquote><p>
In short, Jetpack is an API for allowing you to <strong>write Firefox add-ons using the web technologies you already know</strong>.
</p></blockquote>
<p>რითია საინტერესო Jetpak? პირველ რიგში ისევე როგორც Crhome &#8211; ს შემთხვევაში, Jetpak &#8211; ის შემთხვევაშიც დამატების შესაქმნელად საკმარისია მხოლოდ HTML/CSS და JavaScript. ამ შემთხვევაშიც არავითარი XUL და რთული XML კონფიგურაციის ფაილები. ასევე არავიტარი ბრაუზერის გადატვირთვა დამატების ინსტალაციის შემდგომ და რაც ყველაზე ყველაზე ყველაზე მნიშვნელოვანია დეველოპმენტის პროცესში შეგვიძლია გამოვიყენოთ ნებისმიერი არსებული ინსტრუმენტული საშუალებები და Firebug დებაგირებისათვის რაც არსებულ მოდელში პრაქტიკულად შეუძლებელია. ასევე jQuery &#8211; ს მოყვარულთათვის ძალიან მნიშვნელოვანი ფაქტია რომ ეს ბიბლიოთეკა ნაგულისხმევად არის ჩადებული Jetpak &#8211; ში, რაც კიდევ უფრო გაამარტივებს დამატებების პროგრამირებას.</p>
<p>მართალია დასრულებამდე და საყოველთაო გავრცელებამდე კიდევ დიდი გზა აქვს გასავლელი Jetpak &#8211; ს, თუმცა მისი გამოყენება უკვე შესაძლებელია. ასე რომ თუ არ გეზარებათ შეგიძლიათ დააინსტალიროთ და დამატებების წერასაც შეუდგეთ <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/jetpak/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Handling &#8220;onchange&#8221; event revisited</title>
		<link>http://www.code.ge/posts/handling-onchange-event-revisited</link>
		<comments>http://www.code.ge/posts/handling-onchange-event-revisited#comments</comments>
		<pubDate>Sat, 16 May 2009 18:10:17 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[IE Sucks]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JavaScript DOM]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=241</guid>
		<description><![CDATA[რამდენიმე თვის წინ დავწერე პოსტი, HTML ფორმის ელემენტის onchange ივენთისა და  მისი დელეგირების შესახებ.
ნახსენებ პოსტში ნაჩვენებია onchange ივენთის დელეგირების მაგალითი სადაც ფორმის ყველა ელემენტის აღნიშნული ივენთის ცენტრალიზებული კონტროლი ხორციელდება მშობელი ელემენტის onchange ივენთის მეშვეობით.
მსგავსი შედეგის მიღწევა შესაძლებელი ე.წ. Event Bubbling  &#8211; ის წყალობით რაც ივენთის, საწყისი ელემენტიდან მშობელი ელემენტისკენ გავრცელებას ეწოდება. მეტი თვალსაჩინოებისთვის [...]]]></description>
			<content:encoded><![CDATA[<p>რამდენიმე თვის წინ დავწერე <a href="http://www.code.ge/posts/javascript-wtf-vol-5-magic-of-onchange-event">პოსტი</a>, HTML ფორმის ელემენტის <strong>onchange</strong> ივენთისა და  მისი დელეგირების შესახებ.</p>
<p>ნახსენებ პოსტში ნაჩვენებია <strong>onchange</strong> ივენთის დელეგირების მაგალითი სადაც ფორმის ყველა ელემენტის აღნიშნული ივენთის ცენტრალიზებული კონტროლი ხორციელდება მშობელი ელემენტის <strong>onchange</strong> ივენთის მეშვეობით.</p>
<p>მსგავსი შედეგის მიღწევა შესაძლებელი ე.წ. Event Bubbling  &#8211; ის წყალობით რაც ივენთის, საწყისი ელემენტიდან მშობელი ელემენტისკენ გავრცელებას ეწოდება. მეტი თვალსაჩინოებისთვის იხ. სურათი(<strong>სურათისათვის განსაკუთრებული მადლობა <a href="http://www.freshblurbs.com">ირაკლის</a></strong>): </p>
<p><a href="http://www.code.ge/posts/handling-onchange-event-revisited/picture-17" rel="attachment wp-att-250"><img src="http://www.code.ge/wp-content/uploads/picture-17.png" alt="picture-17" title="picture-17" width="387" height="267" class="aligncenter size-full wp-image-250" /></a></p>
<p>ივენთის გავცელების(შვილიდან მშობლის მიმართულებით) ასეთი მეთოდი ყველა ბრაუზერში ერთნაირად მუშაობს. და წესით ეს უნდა ეხებოდეს ყველა ტიპის ივენთს. თუმცა როგორც მოსალოდნელი იყო IE &#8211; ში მისი მერვე ვერსიის ჩათვლით სწორედ ამ ივენთზე აღმოჩნდა შეზღუდვა და იგი საწყისი ელემენტს(ელემენტი რომელზეც უშუალოდ წარმოიშვა ეს ივენთი) იქეთ არ ვრცელდება.</p>
<p>ერთი შეხედვით, ამ ჩიხიდან რამდენიმე გამოსავალი შეიძლება მოიძებნოს:</p>
<ol>
<li>ფორმის ყველა ელემენტის ჩამოვლა და მათთვის <strong>onchange</strong> ივენთ ჰენდლერის მინიჭება. თუმცა აქ მთელ რიგ პრობლემებს წავაწყდებით:<br />
</p>
<ul>
<li>
     ელემენტებზე ასეთი გზით ივენთ ჰენდლერების მინიჭება IE &#8211; ში იწვევს მეხსიერებასთან დაკავშირებულ პრობლემებს, ე.წ. memory leaks. ეს გარემოება განსაკუთრებით მნიშვნელოვანია თუ ფორმაში ბევრი ელემენტები გვაქვს.
</li>
<li>
 თუ ფორმის ელემენტები იტვირთება დინამიურად Ajax &#8211; ის მეშვეობით, ყოველი ასეთი ჩატვირთვის შემდეგ საჭიროა: ა) ყველა ფორმის ელემენტისა და მათი ივენთ ჰენდლერების განადგურება რათა თავიდან ავირიდოთ მეხსიერებასთან დაკავშირებული პრობლემები; ბ) ახლად ჩატვირთული ელემენტების იტერაცია და მათთვის შესაბამისი ივენთ ჰენდლერების განსაზღვრა.
</li>
</ul>
<p>დამეთანხმებით რომ აღწერილი ორი მეთოდი დიდი მოქნილებით არ გამოირჩევა.</p>
</li>
<li>
ნაცვლად <strong>onchange</strong> ივენთისა გამოვიყენოთ <strong>onfocus</strong> და <strong>onblur</strong> ივენთები. თუმცა აღმოჩნდა რომ არც ამ ივენთების გავრცელება არ ხდება ტრადიციული(შვილიდან მშობლის მიმართულებით) მეთოდით.
</li>
</ol>
<p>გარკვეული კვლევა ძიების შემდეგ მივაგენი ისეთ ივენთებს(დიდი მადლობა <a href="http://www.quirksmode.org/dom/events/index.html">PPK</a> &#8211; ს) რომელთა ბაბლინგი IE &#8211; ში ისე მუშაობს როგორც საჭიროა. ეს  ივენთებია <strong>onfocusin</strong> და <strong>onfocusout</strong>.</p>
<p>როგორ შეიძლება აღნიშნული ივენთების გამოყენება პრობლემის გადასაჭრელად? სანამ უშუალოდ კოდის წერას დავიწყებთ საჭიროა კარგად გავერკვეთ თუ როგორ მუშაობს <strong>onchange</strong> ივენთი HTML ფორმის ცალკეული ელემენტებისათვის და ასევე თუ რა გვერდის ავლის მექანიზმების გამოყენებაა შესაძლებელი IE &#8211; ში.</p>
<p><strong>SELECT ელემენტი</strong></p>
<p>ამ ელემენტის შემთხვევაში <strong>onchange</strong> ივენთი წარმოიშვება მხოლოდ იმ ჩამოსაშლელი სიიდან კონკრეტული ელემენტის ამორჩევის დროს. IE &#8211; ში იგივე ხდომილების ემულაციისათვის შესაძლებელია <strong>onclick</strong> ივენთის გამოყენება, თუმცა, ასეთ შემთხვევაში ივენთი ორჯერ წარმოიშვება ერთხელ ელემენტის გააქტიურებისას ხოლო მეორედ ჩამოსაშლელი სიიდან მნიშვნელობის არჩევისას. თუმცა ამ პრობლემის არიდება მარტივად არის შესაძლებელი სწორედ <strong>onfocusin</strong> და <strong>onfocusout</strong> ივენთების მეშვეობით რადგან ეს ორივე ივენთი წარმოიშვება <strong>onclick</strong> ივენთამდე, გამომდინარე აქედან შესაძლებელია წინა ივენთის ტიპის დამახსოვრება და შემდგომ უკვე დადგენა ეს იყო პირველი კლიკი თუ ჩამოსაშლელი მენიუდან ელემენტის არჩევა მოხდა?</p>
<p><strong>INPUT text და TEXTAREA ელემენტები</strong><br />
ამ ელემენტების შემთხვევაში <strong>onchange</strong> ივენთი წარმოიშვება როდესაც ელემენტი კარგავს ფოკუსს. IE &#8211; ში იგივეს მიღწევა შესაძლებელია <strong>onfocusout</strong> ივენთის მეშვეობით.</p>
<p><strong>INPUT checkbox და radio ელმენტები</strong><br />
ამ ელემენტების შემთხვევაში <strong>onchange</strong> ივენთი წარმოიშვება მათი მნიშვნელობის ცვლილების თანავე. IE &#8211; ში იგივე შედეგის მისაღებად მარტივად არის შესაძლებელი <strong>onclick</strong> ივენთის გამოყენება.</p>
<p>მაშ ასე წინა სამი პარაგრაფში გამოიკვეთა სამი ისეთი ივენთი რომელთა გამოყენებაც შესაძლებელია <strong>onchange</strong> ბაბლინგის ემულაციისათვის. ეს ივენთებია: <strong>onclick</strong>, <strong>onfocusin</strong>, <strong>onfocusout</strong>.</p>
<p>ამ ინფორმაციაზე დაყრდნობით მარტივად არის შესაძლებელი სულ რამდენიმე სტრიქონი კოდით გადავწყვიტოთ პრობლემა:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp;<br />
&nbsp; &nbsp;<span style="color: #003366; font-weight: bold;">var</span> div <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'testonchange'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp;<br />
&nbsp; &nbsp;<span style="color: #006600; font-style: italic;">//ყველა ბრაუზერი IE - ს გარდა</span><br />
&nbsp; &nbsp;<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>document.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; &nbsp; div.<span style="color: #660066;">onchange</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #006600; font-style: italic;">//აქ შეგვიძლია გამოვიძახოთ ივენთის უშუალო ჰენდლერი</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp;<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span> <span style="color: #006600; font-style: italic;">//IE - ს სპეციფიური რეალიზაცია</span><br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> previousEvent <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; div.<span style="color: #660066;">onfocusin</span> <span style="color: #339933;">=</span> div.<span style="color: #660066;">onfocusout</span> <span style="color: #339933;">=</span> div.<span style="color: #660066;">onclick</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #003366; font-weight: bold;">var</span> e &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=</span> window.<span style="color: #660066;">event</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; target &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> e.<span style="color: #660066;">srcElement</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isSelect &nbsp; &nbsp; <span style="color: #339933;">=</span> target.<span style="color: #660066;">nodeName</span> &nbsp;<span style="color: #339933;">==</span> <span style="color: #3366CC;">'SELECT'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; notTextInput <span style="color: #339933;">=</span> target.<span style="color: #660066;">nodeName</span> &nbsp;<span style="color: #339933;">==</span> <span style="color: #3366CC;">'INPUT'</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009966; font-style: italic;">/^radio|checkbox$/i</span>.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>target.<span style="color: #660066;">type</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isTextInput &nbsp;<span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>target.<span style="color: #660066;">nodeName</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">'INPUT'</span> <span style="color: #339933;">&amp;&amp;</span> target.<span style="color: #660066;">type</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">'text'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> target.<span style="color: #660066;">nodeName</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">'TEXTAREA'</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; validElement <span style="color: #339933;">=</span> notTextInput <span style="color: #339933;">||</span> isSelect<span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>isSelect <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span>target.<span style="color: #660066;">size</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009966; font-style: italic;">/^focus(in|out)$/</span>.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>previousEvent<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; validElement <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;previousEvent <span style="color: #339933;">=</span> e.<span style="color: #660066;">type</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>e.<span style="color: #660066;">type</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">'click'</span> <span style="color: #339933;">&amp;&amp;</span> validElement<span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #660066;">type</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">'focusout'</span> <span style="color: #339933;">&amp;&amp;</span> isTextInput<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//აქ შეგვიძლია გამოვიძახოთ ივენთის უშუალო ჰენდლერი</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp;<br />
&nbsp; &nbsp;div <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp;<br />
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>ეს არის და ეს <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  კოდის დეტალური გარჩევით თავს აღარ შეგაწყენთ, ხოლო რეალური დემონსტრაცია შეგიძლიათ იხილოთ <a href="http://www.code.ge/samples/onchange.html">აქ</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/handling-onchange-event-revisited/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>JavaScript: Regex and Multi-line Mode</title>
		<link>http://www.code.ge/posts/javascript-regex-and-multi-line-mode</link>
		<comments>http://www.code.ge/posts/javascript-regex-and-multi-line-mode#comments</comments>
		<pubDate>Tue, 21 Apr 2009 09:43:27 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[RegExp]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=233</guid>
		<description><![CDATA[დღეს აღმოვაჩინე რომ JavaScript &#8211; ის Regex იმპლემენტაციას გარდა სხვა ნაკლოვანებებისა ასევე არ გააჩნია ე.წ. &#8220;multi-line match mode&#8221;. ამ შემთხვევაში ლაპარაკი არ მაქვს რეგულარული გამოსახულების &#8220;m&#8221; მოდიფიკატორის მხარდაჭერაზე, ლაპარაკი მაქვს &#8220;s&#8221; მოდიფიკატორზე რომელიც &#8220;.&#8220;(წერტილი) სიმბოლოს აიძულებს გარდა სხვა სიმბოლოებისა(ნაგულისხმევად &#8220;.&#8221; ნიშნავს &#8220;ნებისმიერი სიმბოლო გარდა ახალი სტრიქონის სიმბოლოსი&#8221;) ასევე მოძებნოს  ახალი სტრიქონის სიმბოლო.
ჩემი მარტივი ამოცანის [...]]]></description>
			<content:encoded><![CDATA[<p>დღეს აღმოვაჩინე რომ JavaScript &#8211; ის Regex იმპლემენტაციას გარდა სხვა ნაკლოვანებებისა ასევე არ გააჩნია ე.წ. &#8220;multi-line match mode&#8221;. ამ შემთხვევაში ლაპარაკი არ მაქვს რეგულარული გამოსახულების &#8220;<strong>m</strong>&#8221; მოდიფიკატორის მხარდაჭერაზე, ლაპარაკი მაქვს &#8220;<strong>s</strong>&#8221; მოდიფიკატორზე რომელიც &#8220;<strong>.</strong>&#8220;(წერტილი) სიმბოლოს აიძულებს გარდა სხვა სიმბოლოებისა(ნაგულისხმევად &#8220;<strong>.</strong>&#8221; ნიშნავს &#8220;ნებისმიერი სიმბოლო გარდა ახალი სტრიქონის სიმბოლოსი&#8221;) ასევე მოძებნოს  ახალი სტრიქონის სიმბოლო.</p>
<p>ჩემი მარტივი ამოცანის გადასაჭრელად საჭირო იყო მოცემულ ტექსტში მეპოვა შემდეგი ტიპის მონაკვეთი:</p>
<div class="codecolorer-container php blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">function</span> myFunction<span style="color: #009900;">&#40;</span><span style="color: #000088;">$param1</span><span style="color: #339933;">,</span> <span style="color: #000088;">$param2</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$param1</span><span style="color: #339933;">,</span> <span style="color: #000088;">$param2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ხოლო ნაპოვნი მონაკვეთიდან ამომეღო {code}{/code} ტაგებს შორის მოქცეული ტექსტი. თუმცა ეს გასაგები მიზეზების გამო არ გამომივიდა.</p>
<p>ნებისმიერ PCRE &#8211; სთან თავსებად იმპლემენტაციას გააჩნია &#8220;<strong>s</strong>&#8221; მოდიფიკატორი რომლის მეშვეობითაც მსგავსი ამოცანა წყდება ძალიან მარტივად. მაგალითად PHP  &#8211; ში რეგულარულ გამოსახულებას ჩავწერდით შემდეგნაირად:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #006600; font-style: italic;">//ყურადღება მიაქციეთ გამოსახულების ბოლოში </span><br />
<span style="color: #006600; font-style: italic;">//მიწერილ &quot;s&quot; სიმბოლოს</span><br />
$regex <span style="color: #339933;">=</span> <span style="color: #3366CC;">'/{code lang=&quot;(<span style="color: #000099; font-weight: bold;">\w</span>+)&quot;}(.*?){<span style="color: #000099; font-weight: bold;">\/</span>code}/s'</span></div></td></tr></tbody></table></div>
<p>სამწუხაროდ ასეთ გამოსახულებას JavaScript  &#8211; ში ვერ დავწერთ. თუმცა, ცოტაოდენი <a href="http://www.regular-expressions.info/dot.html#nodotall">კვლევაძიებისა</a> და ექსპერიმენტების შემდგომ მივაგენი გამოსავალს რაც გამოიხატება სპეციფიური ე.წ. character class &#8211; ის გამოყენებაში. ამისათვის საჭიროა &#8220;<strong>\s</strong>&#8221; და &#8220;<strong>\S</strong>&#8221; მეტა სიმბოლოების დაჯგუფება character class &#8211; ში. შედეგად მივიღებთ შემდეგ გამოსახულებას:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&#91;</span>\s\S<span style="color: #009900;">&#93;</span></div></td></tr></tbody></table></div>
<p>სადაც &#8220;<strong>\s</strong>&#8221; შეესაბამება ნებისმიერ უხილავ სიმბოლოს, ხოლო &#8220;<strong>\S</strong>&#8221; შეესაბამება ნებისმიერ არა უხილავ სიმბოლოს.</p>
<p>შედეგად მივიღე ასეთი JavaScript &#8211; ის რეგულარული გამოსახულება:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">/</span><span style="color: #009900;">&#123;</span>code\s<span style="color: #339933;">+</span>lang<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;(<span style="color: #000099; font-weight: bold;">\w</span>+)&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span>\s\S<span style="color: #009900;">&#93;</span><span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>\<span style="color: #339933;">/</span>code<span style="color: #009900;">&#125;</span><span style="color: #339933;">/</span></div></td></tr></tbody></table></div>
<p>ეს გამოსახულება მუშაობს ანალოგიურად PCRE &#8211; სთან თავსებადი გამოსახულებისა რომელიც იყენებს &#8220;<strong>s</strong>&#8221; მოდიფიკატორს.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/javascript-regex-and-multi-line-mode/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>bmu.li</title>
		<link>http://www.code.ge/posts/bmuli</link>
		<comments>http://www.code.ge/posts/bmuli#comments</comments>
		<pubDate>Mon, 13 Apr 2009 09:15:02 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=223</guid>
		<description><![CDATA[ესე იგი, იშვიათად თუ მახარებს რაიმე ქართულ ვებში, თუმცა გუშინ ირაკლი შემომეხმიანა და თავისი ახალი პროექტის შესახებ შემატყობინა ეს არის სოციალური სერვისი სახელად ბმუ.ლი. რა საჭიროა ასეთი სერვისი? იხ. ციტირება სერვისის ვებ საიტიდან:

წარმოიდგინეთ, რომ Amazon.com-ზე იპოვეთ საინტერესო ფოტო-კამერა, და გნებავთ მეგობარს გაუგზავნოთ მასზე ლინკი SMS-ით. Amazon-ის მისამართები საკმაოდ გრძელია და დაახლოებით ასე გამოიყურება:
http://www.amazon.com/Canon-Digital-Camera-18-55mm-3-5-5-6/dp/B0012YA85A/ref=sr_1_1? ie=UTF8&#038;s=photo&#038;qid=1239587390&#038;sr=1-1
ცხადია ამხელა [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.code.ge/news/bmuli/attachment/bmuli_logo" rel="attachment wp-att-225"><img src="http://www.code.ge/wp-content/uploads/bmuli_logo.png" alt="bmuli_logo" title="bmuli_logo" width="226" height="84" class="alignleft size-full wp-image-225" style="float: left; margin: 0 4px 4px 0;"/></a>ესე იგი, იშვიათად თუ მახარებს რაიმე ქართულ ვებში, თუმცა გუშინ <a href="http://www.freshblurbs.com">ირაკლი</a> შემომეხმიანა და თავისი ახალი პროექტის შესახებ შემატყობინა ეს არის სოციალური სერვისი სახელად <a href="http://bmu.li">ბმუ.ლი</a>. რა საჭიროა ასეთი სერვისი? იხ. ციტირება სერვისის ვებ საიტიდან:<br />
<br/><br/><br/></p>
<blockquote><p>წარმოიდგინეთ, რომ Amazon.com-ზე იპოვეთ საინტერესო ფოტო-კამერა, და გნებავთ მეგობარს გაუგზავნოთ მასზე ლინკი SMS-ით. Amazon-ის მისამართები საკმაოდ გრძელია და დაახლოებით ასე გამოიყურება:</p>
<p>http://www.amazon.com/Canon-Digital-Camera-18-55mm-3-5-5-6/dp/B0012YA85A/ref=sr_1_1? ie=UTF8&#038;s=photo&#038;qid=1239587390&#038;sr=1-1</p>
<p>ცხადია ამხელა მისამართს SMS-ში არავინ აკრეფს. ამიტომ, თქვენ შეგიძლიათ შეამოკლოთ ის bmu.li-ს საშუალებით, რის შედეგადაც მიიღებთ მოკლე მისამართს, მაგალითად: http://bmu.li/ss4 რომლის SMS-ით გაგზავნაც არანაირ პრობლემას აღარ წარმოადგენს.<br />
<strong>bmu.li მხოლოდ SMS-ისთვის არ არის სასარგებლო. იგი შეგიძლიათ გამოიყენოთ ყველგან სადაც გრძელი მისამართების გაცვლა მოუხერხებელია: ფორუმებზე, ბლოგებზე, სოციალურ ქსელებში (ფეისბუკი, ოდნოკლასნიკი და სხვ.), ტვიტერში, იმეილში, გაზეთებში, რადიოს და სატელევიზიო რეკლამებში და გამოშვებებში ან თუნდაც მეგობრისთჳის ფურცლის ნაგლეჯზე მისამართის უცებ დასაწერად.</strong></p></blockquote>
<p>ყველაფერი ძალიან მარტივია. ამ სერვისის მეშვეობით შეგვიძლია წარმატებით დავამოკლოდ უსაშველოდ გრძელი და გაუგებარი URL &#8211; ები სულ რაღაც 10 სიმბოლომდე(http:// პრეფიქსის გამოკლებით) და გამოვიყენოთ უამრავ შემთხვევაში.</p>
<p>მოკლედ ძალიან, ძალიან სასარგებლო სერვისია რომელიც აუცილებლად გამოგადგებათ და იმედია სათანადოდ დავაფასებთ სულ ცოტა ხანში <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>ასევე მინდა ცოტათი გავთქვა ინსაიდერული ინფორმაცია და გითხრათ, რომ, სულ ცოტა ხანში კიდევ რამდენიმე საინტერესო სირპრიზი დაემატება სერვისს რაც კიდევ უფრო კომფორტულს გახდის მის მოხმარებას.</p>
<p>ასე რომ Hold on B-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/bmuli/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>HTML Form &#8220;elements&#8221; Property</title>
		<link>http://www.code.ge/posts/html-form-elements-property</link>
		<comments>http://www.code.ge/posts/html-form-elements-property#comments</comments>
		<pubDate>Sun, 05 Apr 2009 23:16:04 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[IE Sucks]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JavaScript DOM]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=219</guid>
		<description><![CDATA[ამ პოსტის დაწერამდე რამდენიმე წუთით ადრე წავაწყდი HTML form ელემენტის elements თვისებასთან დაკავშირებულ ერთ პრობლემას(შეცდომას) რომლის შესახებაც აქამდე არაფერი მსმენია და ცოტა არ იყოს უაზროდ დამახარჯინა დრო. 
ცნობილია, რომ form ელემენტის აღნიშნული თვისება არის HTMLCollection ტიპის კოლექცია და იგი შეიცავს კონკრეტული HTML ფორმის შიგნით გამოყენებულ ყველა(input, select, button) ელემენტს. სწორედ ეს კოლექცია წარმოადგენს საჭირო ფორმის [...]]]></description>
			<content:encoded><![CDATA[<p>ამ პოსტის დაწერამდე რამდენიმე წუთით ადრე წავაწყდი HTML <strong>form</strong> ელემენტის <strong>elements</strong> თვისებასთან დაკავშირებულ ერთ პრობლემას(შეცდომას) რომლის შესახებაც აქამდე არაფერი მსმენია და ცოტა არ იყოს უაზროდ დამახარჯინა დრო. </p>
<p>ცნობილია, რომ <strong>form</strong> ელემენტის აღნიშნული თვისება არის <strong>HTMLCollection</strong> ტიპის კოლექცია და იგი შეიცავს კონკრეტული HTML ფორმის შიგნით გამოყენებულ ყველა(input, select, button) ელემენტს. სწორედ ეს კოლექცია წარმოადგენს საჭირო ფორმის ელემენტებთან წვდომის ყველაზე უსაფრთხო(თურმე პირობითად) გზას. </p>
<p>როგორც აღმოჩნდა თუ ფორმის ელემენტებს მოვათავსებთ <strong>fieldset</strong> ტეგში(და წესით ეს ასეც უნდა გავაკეთოთ) <strong>elements</strong> კოლექცია მოულოდნელ რეზულტატს დაგვიბრუნებს. კერძოდ კი <strong>fieldset</strong> ელემენტიც(ან ელემენტები) ამ კოლექციაში აღმოჩნდება.</p>
<p>ჩემი ამოცანა მდგომარეობდა შემდეგში, რომ ფორმის ყველა ელემენტებისაგან მიმეღო მათი სახელებისა და მნიშნვნელობების ე.წ. key/value ობიექტი:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> map <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> els <span style="color: #339933;">=</span> target.<span style="color: #660066;">form</span>.<span style="color: #660066;">elements</span><span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> 0<span style="color: #339933;">,</span> el<span style="color: #339933;">;</span> <span style="color: #009900;">&#40;</span>el <span style="color: #339933;">=</span> els<span style="color: #009900;">&#91;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp;map<span style="color: #009900;">&#91;</span>el.<span style="color: #000066;">name</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> el.<span style="color: #660066;">value</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span> <br />
console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span>map<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>თუმცა ძალიან უცნაური შედეგი მივიღე რადგან <strong>fieldset</strong> ელემენტს არც <strong>name</strong> და არც <strong>value</strong> თვისებები არ გააჩნია.</p>
<p>პრობლემის იდენტიფიცირების შემდგომ ინტერნეტში მოვიძიე მცირეოდენი ინფორმაცია:</p>
<blockquote><p>The HTML 4 standard adds new &lt;fieldset&gt; and &lt;label&gt; tags to the set of elements that can appear within a form.<strong> In IE 5 and later, placing a &lt;fieldset&gt; in a form causes a corresponding object to be added to the form&#8217;s elements[] array</strong>. Fieldset elements are not scriptable in interesting ways like other form elements are, and their objects do not have a type property like other form elements do. Therefore, the presence of Fieldset objects in the elements[] array seems like a mistaken design decision. This is particularly true since &lt;label&gt; tags do not cause corresponding objects to be added to the elements[] array. <strong>The Mozilla and Netscape 6 browsers have chosen to follow Microsoft&#8217;s lead on this in order to be compatible with IE.</strong></p>
<p>What this means is that if you define a form that contains fieldsets, the contents of the elements[] array differ in recent, HTML 4-capable browsers and in older, pre-HTML 4 browsers. In this situation, using position-based numeric indexes in the elements[] array is not portable, and you should define name attributes for all your form elements and refer to them by name.</p></blockquote>
<p>მოკლედ კვლავ IE <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  ნუ რას ვიზამთ რეალობა ასეთია <img src='http://www.code.ge/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/html-form-elements-property/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>YouTube EDU და ბევრი საინტერესო მასალა პროგრამისტებისათვის</title>
		<link>http://www.code.ge/posts/youtube-edu-%e1%83%93%e1%83%90-%e1%83%91%e1%83%94%e1%83%95%e1%83%a0%e1%83%98-%e1%83%a1%e1%83%90%e1%83%98%e1%83%9c%e1%83%a2%e1%83%94%e1%83%a0%e1%83%94%e1%83%a1%e1%83%9d-%e1%83%9b%e1%83%90%e1%83%a1</link>
		<comments>http://www.code.ge/posts/youtube-edu-%e1%83%93%e1%83%90-%e1%83%91%e1%83%94%e1%83%95%e1%83%a0%e1%83%98-%e1%83%a1%e1%83%90%e1%83%98%e1%83%9c%e1%83%a2%e1%83%94%e1%83%a0%e1%83%94%e1%83%a1%e1%83%9d-%e1%83%9b%e1%83%90%e1%83%a1#comments</comments>
		<pubDate>Fri, 27 Mar 2009 17:28:07 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=213</guid>
		<description><![CDATA[ დღეს YouTube &#8211; მ დასტარტა ახალი სევერისი YouTube EDU. ეს არის შესანიშნავი საგანმანათლებლო რესურსი რომელზეც უკვე შესაძლებელია არაერთი შესანიშნავი ლექციისა თუ ლექციების კურსის ნახვა.
ძალიან გამეხარდა და მომეწონა რომ აღნიშნულ რესურსზე წარმოდგენილია ისეთი მოწინავე ტექნოლოგიური უნივერსიტეტების სასწავლო მასალა როგორიც არის მაგ. MIT.
ძალიან დიდი დრო არ დამიხარჯავს, თუმცა მოვასწარი MIT &#8211; ის გვერდზე განთავსებული კურსის MIT [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.code.ge/wp-content/uploads/youtubeedu-215x53.jpg"><img src="http://www.code.ge/wp-content/uploads/youtubeedu-215x53.jpg" alt="youtubeedu-215x53" title="youtubeedu-215x53" width="215" height="53" class="alignleft size-full wp-image-214" style="float: left; margin: 8px 8px 8px 0;"/></a> დღეს YouTube &#8211; მ დასტარტა ახალი სევერისი <a href="http://www.youtube.com/edu">YouTube EDU</a>. ეს არის შესანიშნავი საგანმანათლებლო რესურსი რომელზეც უკვე შესაძლებელია არაერთი შესანიშნავი ლექციისა თუ ლექციების კურსის ნახვა.</p>
<p>ძალიან გამეხარდა და მომეწონა რომ აღნიშნულ რესურსზე წარმოდგენილია ისეთი მოწინავე ტექნოლოგიური უნივერსიტეტების სასწავლო მასალა როგორიც არის მაგ. <a href="http://www.youtube.com/user/MIT">MIT</a>.</p>
<p>ძალიან დიდი დრო არ დამიხარჯავს, თუმცა მოვასწარი MIT &#8211; ის გვერდზე განთავსებული კურსის <a href="http://www.youtube.com/view_play_list?p=8B24C31197EC371C">MIT 6.046J / 18.410J Introduction to Algorithms (SMA 5503)</a> პირველი ლექციის მოსმენა და მინდა გითხრათ რომ უსაზღვროდ მომეწონა. საოცარი ლექტორია საოცარი გადმოცემის უნარითა და ლექციის წაყვანის მანერით.</p>
<p>გარდა მაგ კურსისა თუ დაძებნით სხვა უამრავ საინტერესო მასალასაც მიაგნებთ.</p>
<p>enjoy <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/youtube-edu-%e1%83%93%e1%83%90-%e1%83%91%e1%83%94%e1%83%95%e1%83%a0%e1%83%98-%e1%83%a1%e1%83%90%e1%83%98%e1%83%9c%e1%83%a2%e1%83%94%e1%83%a0%e1%83%94%e1%83%a1%e1%83%9d-%e1%83%9b%e1%83%90%e1%83%a1/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>საინტერესო ვაკანსია jobs.ge &#8211; ზე :D</title>
		<link>http://www.code.ge/posts/interesting-job-offer</link>
		<comments>http://www.code.ge/posts/interesting-job-offer#comments</comments>
		<pubDate>Sun, 22 Mar 2009 10:18:59 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=209</guid>
		<description><![CDATA[მიუხედავად იმისა რომ სამსახურს არ ვეძებ მაინც საკმაოდ ხშირად ვსტუმრობ jobs.ge &#8211; ს. ამას მარტივი მიზეზი აქვს, მაინტერესებს თუ რა ტიპისა და რანგის ვაკანსიებია ინფორმაციული ტექნოლოგიების სფეროში. თუმცა ზოგჯერ მართლა გასაოცარ მარგალიტს შეიძლება წააწყდე  
მოკლედ ერთ ასეთ ვაკანსიას წავაწყდი დღეს:
IBS (Integrated Business Solutions) is a Georgian official business partner of 1C and business partner [...]]]></description>
			<content:encoded><![CDATA[<p>მიუხედავად იმისა რომ სამსახურს არ ვეძებ მაინც საკმაოდ ხშირად ვსტუმრობ jobs.ge &#8211; ს. ამას მარტივი მიზეზი აქვს, მაინტერესებს თუ რა ტიპისა და რანგის ვაკანსიებია ინფორმაციული ტექნოლოგიების სფეროში. თუმცა ზოგჯერ მართლა გასაოცარ მარგალიტს შეიძლება წააწყდე <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>მოკლედ ერთ ასეთ ვაკანსიას წავაწყდი დღეს:</p>
<blockquote><p>IBS (Integrated Business Solutions) is a Georgian official business partner of 1C and business partner of 1C-bitrix, the software business firm offering automated business systems. IBS is pleased to announce a vacancy for for the full-time position of Web Programmer/Designer.</p>
<p>Responsibilities:</p>
<p>** Learn 1C-bitrix software solutions<br />
** Prepare the sites in compliance with 1C-bitrix and according to the client demand<br />
** Carry out all duties defined by the Manager on time.</p>
<p>Requirements:</p>
<p>** Relevant higher education (preferably in web design field)<br />
** At least 6 months work experience as a Web Programmer/Designer<br />
** Knowledge of the following program languages: HTML, GSS, JavaScript, PHP, Ajax, Asp.Net<br />
** Excellent knowledge of Russian language (ability to analyze Russian texts and strong knowledge of spoken Russian)<br />
** English language knowledge is desirable<br />
** Strong sense of responsibility, organized person<br />
** Programming skills<br />
** Ability to work in a team<br />
** Time management skills.</p></blockquote>
<p>მისამართი: <a href="http://www.jobs.ge/17376/">http://www.jobs.ge/17376/</a></p>
<p>რითი მიიქცია ამ ვაკანსიამ ყურადღება? <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  ჩამოთვლილი პუნქტებიდან ორმა ფრიად მომხიბლა:</p>
<blockquote><p>** Relevant higher education (preferably in web design field)</p></blockquote>
<p>ისა რომელ უმაღლესში ასწავლიან ამას? <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  შეიძლება ასწავლიან და არ ვიცი თუ მეტყვით კარგი იქნება <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<blockquote><p>** Knowledge of the following program languages: HTML, GSS, JavaScript, PHP, Ajax, Asp.Net</p></blockquote>
<p>ესე იგი <strong>Knowledge of the following program languages</strong> როგორ უნდა გავიგოთ? <strong>პროგრამის</strong> ენები? ეგება <strong>პროგრამირების</strong> ენები უნდა იყოს? <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>კიდევ საინტერესოა <strong>GSS</strong> რომელი &#8220;პროგრამის&#8221; ენაა? <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>ასევე საინტერესოა <strong>Ajax</strong> პროგრამისა თუ პროგრამირების ენაა?  ან ენაა საერთოდ? <img src='http://www.code.ge/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/interesting-job-offer/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>IE8 &#8211; ფინალური ვერსია გამოვიდა</title>
		<link>http://www.code.ge/posts/ie8-%e1%83%a4%e1%83%98%e1%83%9c%e1%83%90%e1%83%9a%e1%83%a3%e1%83%a0%e1%83%98-%e1%83%95%e1%83%94%e1%83%a0%e1%83%a1%e1%83%98%e1%83%90-%e1%83%92%e1%83%90%e1%83%9b%e1%83%9d%e1%83%95%e1%83%98%e1%83%93</link>
		<comments>http://www.code.ge/posts/ie8-%e1%83%a4%e1%83%98%e1%83%9c%e1%83%90%e1%83%9a%e1%83%a3%e1%83%a0%e1%83%98-%e1%83%95%e1%83%94%e1%83%a0%e1%83%a1%e1%83%98%e1%83%90-%e1%83%92%e1%83%90%e1%83%9b%e1%83%9d%e1%83%95%e1%83%98%e1%83%93#comments</comments>
		<pubDate>Thu, 19 Mar 2009 18:14:12 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[IE Sucks]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=207</guid>
		<description><![CDATA[ როგორც იქნა გვეღირსა და გამოვიდა IE8 &#8211; ს ფინალური ვერსია.
მიუხედავად იმისა რომ ბრაუზერების ვენდორებმა ძალიან გაგვანებივრეს ბოლო თვეების მანძილზე, ეს ინფორმაცია გაცილებით სასიხარულო და მნიშნველოვანი იყო ჩემთვის. რატომ? იმიტომ რომ დღესდღეობით IE6 და IE7 ორი გამორჩეულად ჩამორჩენილი ბრაუზერია რომლებსაც ბაზრის 67% უკავიათ ჯამში. იმედი მაქვს რომ IE8 რომელიც გაცილებით განვითარებულია მის ორ წინამორბედზე თუნდაც [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.microsoft.com/library/media/1033/windows/images/internet-explorer/default/ie8_logo.gif" alt="IE8" style="float: left; margin: 0 8px 8px 0;"/> როგორც იქნა გვეღირსა და გამოვიდა IE8 &#8211; ს ფინალური ვერსია.</p>
<p>მიუხედავად იმისა რომ ბრაუზერების ვენდორებმა ძალიან გაგვანებივრეს ბოლო თვეების მანძილზე, ეს ინფორმაცია გაცილებით სასიხარულო და მნიშნველოვანი იყო ჩემთვის. რატომ? იმიტომ რომ დღესდღეობით IE6 და IE7 ორი გამორჩეულად ჩამორჩენილი ბრაუზერია რომლებსაც ბაზრის 67% უკავიათ ჯამში. იმედი მაქვს რომ IE8 რომელიც გაცილებით განვითარებულია მის ორ წინამორბედზე თუნდაც IE6 &#8211; ის სიკვდილს შეუწყობს ხელს. საბოლოო მომხმარებლისთვის შესაძლებელია ამას არსებითი მნიშნველობა არ აქვს, მაგრამ ჩემთვის(და არა მარტო) როგორც პროფესიონალისთვის ეს ძალიან ძალიან ძალიან მნიშვნელოვანია <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>მაშ ასე <a href="http://www.microsoft.com/windows/internet-explorer/default.aspx">გადმოწერეთ</a> და გაავრცელეთ რაც შეიძლება ჩქარა აიძულეთ ყველა IE &#8211; ს მომხმარებელს რომ ეს განახლება რაც შეიძლება სწრაფად გააკეთოს, ამითი ყველა დავაჩქარებთ IE6 &#8211; ის საბოლოო გარდაცვალების პროცესს <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/ie8-%e1%83%a4%e1%83%98%e1%83%9c%e1%83%90%e1%83%9a%e1%83%a3%e1%83%a0%e1%83%98-%e1%83%95%e1%83%94%e1%83%a0%e1%83%a1%e1%83%98%e1%83%90-%e1%83%92%e1%83%90%e1%83%9b%e1%83%9d%e1%83%95%e1%83%98%e1%83%93/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>JavaScript: arrayChunk</title>
		<link>http://www.code.ge/posts/javascript-arraychunk</link>
		<comments>http://www.code.ge/posts/javascript-arraychunk#comments</comments>
		<pubDate>Fri, 20 Feb 2009 19:01:46 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=200</guid>
		<description><![CDATA[დღეს კოდის წერისას დამჭირდა მასივის რამდენიმე თანაბარ ნაწილად დაყოფა, PHP &#8211; ს ამ ამოცანის გადასაჭრელად გააჩნია შესაბამისი array_chunk() ფუნქცია, მაგრამ, JavaScript &#8211; ს მსგავსი არაფერი გააჩნია.
ეს არის ე.წ. quick solution ამ ამოცანის გადასაჭრელად:
1234567function arrayChunk&#40;array, size&#41; &#123;
&#160; &#160; var start = 0, result = &#91;&#93;, chunk = &#91;&#93;;
&#160; &#160; while&#40;&#40;chunk = array.slice&#40;start, start += size&#41;&#41;.length&#41; &#123;
&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>დღეს კოდის წერისას დამჭირდა მასივის რამდენიმე თანაბარ ნაწილად დაყოფა, PHP &#8211; ს ამ ამოცანის გადასაჭრელად გააჩნია შესაბამისი <a href="http://www.php.net/manual/en/function.array-chunk.php">array_chunk()</a> ფუნქცია, მაგრამ, JavaScript &#8211; ს მსგავსი არაფერი გააჩნია.</p>
<p>ეს არის ე.წ. quick solution ამ ამოცანის გადასაჭრელად:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">function</span> arrayChunk<span style="color: #009900;">&#40;</span>array<span style="color: #339933;">,</span> size<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> start <span style="color: #339933;">=</span> 0<span style="color: #339933;">,</span> result <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> chunk <span style="color: #339933;">=</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">while</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>chunk <span style="color: #339933;">=</span> array.<span style="color: #660066;">slice</span><span style="color: #009900;">&#40;</span>start<span style="color: #339933;">,</span> start <span style="color: #339933;">+=</span> size<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">length</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; result.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>chunk<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> result<span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ფუნქცია ღებულობს ორ პარამეტრს 1) მასივი რომელიც გვინდა დავყოთ; 2) თითოეული დანაყოფის ზომა;</p>
<p>თუ ამ ფუნქციას შეასრულებთ FireBug &#8211; ის კონსოლში:</p>
<pre>
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log(arrayChunk(a, 2));
</pre>
<p>მიიღებთ შემდეგ შედეგს:</p>
<pre>
 [[1, 2], [3, 4], [5, 6], [7, 8], [9]]
</pre>
<p>შედეგიდან გამომდინარე ფუნქციის საბოლოო რეზულტატი თვალსაჩინოა, იგი აბრუნებს სასურველი(ამ შემთხვევაში 2) ზომის მასივების მასივს. </p>
<p>დამატებითი დეტალების ახსნისგან თავს შევიკავებ რადგან ფუნქცია უმარტივესია, თუმცა ძალიან სასარგებლო <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/javascript-arraychunk/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jCSS &#8211; რელიზის კანდიდატი</title>
		<link>http://www.code.ge/posts/jcss-%e1%83%a0%e1%83%94%e1%83%9a%e1%83%98%e1%83%96%e1%83%98%e1%83%a1-%e1%83%99%e1%83%90%e1%83%9c%e1%83%93%e1%83%98%e1%83%93%e1%83%90%e1%83%a2%e1%83%98</link>
		<comments>http://www.code.ge/posts/jcss-%e1%83%a0%e1%83%94%e1%83%9a%e1%83%98%e1%83%96%e1%83%98%e1%83%a1-%e1%83%99%e1%83%90%e1%83%9c%e1%83%93%e1%83%98%e1%83%93%e1%83%90%e1%83%a2%e1%83%98#comments</comments>
		<pubDate>Wed, 18 Feb 2009 10:19:27 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jcss]]></category>
		<category><![CDATA[Selector Engine]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=194</guid>
		<description><![CDATA[დაუღალავი და საკმაოდ მძიმე შრომის შემდეგ დღეს ყველა ჩემს ხელთ არსებულ ვებ ბრაუზერში უნიტ ტესტებმა მწვანე აანთო   რაც ნიშნავს იმას რომ jCSS &#8211; მა ყველა მითითებული ტესტი გაიარა წარმატებით(იხ. jCSS Test Suite).

ამ ეტაპისთვის ცოტას შევისვენებ და შემდეგ მოვუვლი კოდში არსებულ ინდუიზმს რომლისაც ცოტა არ იყოს და მრცხვენია. იმედი მაქვს რომ კვირის ბოლოს 1.0 [...]]]></description>
			<content:encoded><![CDATA[<p>დაუღალავი და საკმაოდ მძიმე შრომის შემდეგ დღეს ყველა ჩემს ხელთ არსებულ ვებ ბრაუზერში უნიტ ტესტებმა მწვანე აანთო <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  რაც ნიშნავს იმას რომ jCSS &#8211; მა ყველა მითითებული ტესტი გაიარა წარმატებით(იხ. <a href="http://www.code.ge/jcss-test/slickspeed/frameworks/test/">jCSS Test Suite</a>).</p>
<p><a href="http://www.code.ge/wp-content/uploads/picture-31.png"><img src="http://www.code.ge/wp-content/uploads/picture-31-300x187.png" alt="picture-31" title="picture-31" width="300" height="187" class="alignnone size-medium wp-image-195" /></a></p>
<p>ამ ეტაპისთვის ცოტას შევისვენებ და შემდეგ მოვუვლი კოდში არსებულ ინდუიზმს რომლისაც ცოტა არ იყოს და მრცხვენია. იმედი მაქვს რომ კვირის ბოლოს 1.0 ვერსიის რელიზს მოვასწრებ.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/jcss-%e1%83%a0%e1%83%94%e1%83%9a%e1%83%98%e1%83%96%e1%83%98%e1%83%a1-%e1%83%99%e1%83%90%e1%83%9c%e1%83%93%e1%83%98%e1%83%93%e1%83%90%e1%83%a2%e1%83%98/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>jCSS &#8211; CSS Selector Engine</title>
		<link>http://www.code.ge/posts/jcss-css-selector-engine</link>
		<comments>http://www.code.ge/posts/jcss-css-selector-engine#comments</comments>
		<pubDate>Thu, 12 Feb 2009 10:18:01 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JavaScript DOM]]></category>
		<category><![CDATA[jcss]]></category>
		<category><![CDATA[Selector Engine]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=182</guid>
		<description><![CDATA[Hi all, ესე იგი მინდა წარმოგიდგინოთ ჩემი ერთერთი პატარა პროექტი სახელად jCSS. იგი წარმოადგენს JavaScript  &#8211; ზე დაწერილ ე.წ. CSS Selector Engine &#8211; ს რომლის მეშვეობითაც მარტივად შეძლებთ HTML დოკუმენტის DOM ელემენტების ძებნას და რეზულტატის მიღებას ტიპიური CSS სელექტორების გამოყენებით.
მინდა აღვნიშნო რომ არავისთვის კონკურენციის გაწევას არ ვაპირებ ანუ jQuery, Mootools, Seezle და ა.შ.  [...]]]></description>
			<content:encoded><![CDATA[<p>Hi all, ესე იგი მინდა წარმოგიდგინოთ ჩემი ერთერთი პატარა პროექტი სახელად jCSS. იგი წარმოადგენს JavaScript  &#8211; ზე დაწერილ ე.წ. CSS Selector Engine &#8211; ს რომლის მეშვეობითაც მარტივად შეძლებთ HTML დოკუმენტის DOM ელემენტების ძებნას და რეზულტატის მიღებას ტიპიური CSS სელექტორების გამოყენებით.</p>
<p>მინდა აღვნიშნო რომ არავისთვის კონკურენციის გაწევას არ ვაპირებ ანუ jQuery, Mootools, Seezle და ა.შ. <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  ეს არის ჩემი პირადი ექსპერიმენტი რომელსაც გარდა პრაქტიკული დანიშნულებისა გააჩნია წმინდა შემეცნებითი დატვირთვა და ამ მინი პროექტზე მუშაობისას ჩემს ძირითად ამოცანას წარმოადგენდა DOM ელემენტებში ნავიგაციისა და ციკლების წარმადობის კვლევა. ნებისმიერ შემთხვევაში სკრიპტი სრულად ფუნქციონალურია და შეგიძლიათ გამოიყენოთ.</p>
<p>წარმადობისა და რეალიზებული CSS სელექტორების ტესტი შეგიძლიათ ნახოთ <a href="http://www.code.ge/jcss-test/slickspeed/">აქვე</a>. ტესტირებისათვის ვიყენებ Mootools &#8211; ის ავტორის მიერ შექმნილ ტესტირების სისტემას სახელად SlickSpeed ასე რომ შედეგებში ტენდენციურობა გამორიცხული <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  შედარებისათვის გარდა jCSS &#8211; ისა ტესტში გამოვიყენე jQuery &#8211; ისა და Mootools &#8211; ის ბოლო სტაბილური ვერსიები.</p>
<p><a href="http://www.code.ge/jcss-test/slickspeed/frameworks/jcss.js">გადაწერეთ jCSS!</a></p>
<p>გამოყენების მაგალითები:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">var</span> els <span style="color: #339933;">=</span> jCSS<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#my-element-id div.my-class-name ul a'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> els.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp;<span style="color: #006600; font-style: italic;">//do something wit elements</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>სულ ეს არის და ეს, ამ ეტაპზე მეტის დაწერას აზრი არ აქვს. თუ თქვენს მოსაზრებებსაც გამიზიარებთ ძალიან ძალიან გამახარებთ.</p>
<p>enjoy <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Update:</strong><br />
განვაახლე jCSS აწი უფრო სწრაფია FF, Opera და IE &#8211; ში.</p>
<p>SlickSpeed Benchmark: <a href="http://www.code.ge/jcss-test/slickspeed/">http://www.code.ge/jcss-test/slickspeed/</a></p>
<p>დავამატე Unit Test Suite ბრაუზერებს შორის და სხვადასხვა ტიპის სელექტორების იმპლემენტაციის სისწორის კონტროლისათვის:<br />
Unit Test Suite: <a href="http://www.code.ge/jcss-test/slickspeed/frameworks/test/">http://www.code.ge/jcss-test/slickspeed/frameworks/test/</a></p>
<p><strong>Update:</strong></p>
<ul>
<li>დაიფიქსა ყველა ძირითადი ბაგი;</li>
<li>დაიხვეწა და განვითარდა Query Parser;</li>
<li>დაემატა ყველა ე.წ. ფსევდო კლასების მხარდაჭერა გარდა nth-child და nth-last-child ფსევდო კლასებისა;</li>
<li>კომპლექსური ფსევდო კლასების მხარდაჭერა;</li>
<li>დავამატე DOM ელემენტების სორტირება ნეითივ სელექტორების მიერ დაბრუნებულ რეზულტატებთან თავსებადობის გამო. თუმცა ამან წარმადობა შედარებით დაწია IE &#8211; სა და Opera &#8211; ში. </li>
<li>დაიხვეწა კონტექსტური პარამეტრების მხარდაჭერა, გარდა DOM ელემენტისა კონტექსტურ პარამეტრად შესაძლებელია გამოვიყენოთ როგორც სელექტორი ასევე DOM ელემენტების მასივი. მაგ:<br />
</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; <span style="color: #003366; font-weight: bold;">var</span> nodes <span style="color: #339933;">=</span> jCSS<span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp;<span style="color: #3366CC;">'div &gt; p.paragraph-class-name'</span><span style="color: #339933;">,</span> <br />
&nbsp; &nbsp;document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'my-element-id'</span><span style="color: #009900;">&#41;</span><br />
&nbsp;<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp;<span style="color: #003366; font-weight: bold;">var</span> nodes <span style="color: #339933;">=</span> jCSS<span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp;<span style="color: #3366CC;">'div &gt; p.paragraph-class-name'</span><span style="color: #339933;">,</span> <br />
&nbsp; &nbsp;<span style="color: #3366CC;">'#my-element-id:visible'</span><br />
&nbsp;<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp;<span style="color: #003366; font-weight: bold;">var</span> nodes <span style="color: #339933;">=</span> jCSS<span style="color: #009900;">&#40;</span><br />
&nbsp; <span style="color: #3366CC;">'a em'</span><span style="color: #339933;">,</span> <br />
&nbsp; document.<span style="color: #660066;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'h1'</span><span style="color: #009900;">&#41;</span><br />
&nbsp;<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
</li>
<li>განვაახლე SlicckSpeed ანუ დავამატე YUI!, Prototype და Peppy სელექტორ ენჯინები;
<p>SlickSpeed Benchmark: <a href="http://www.code.ge/jcss-test/slickspeed/">http://www.code.ge/jcss-test/slickspeed/</a></li>
<li>განვაახლე და გავამდიდრე UnitTest ფრეიმვორკი:
<p>Unit Test Suite: <a href="http://www.code.ge/jcss-test/slickspeed/frameworks/test/">http://www.code.ge/jcss-test/slickspeed/frameworks/test/</a></li>
</ul>
<p>კომპლექსური სელექტორების იმპლემენტაცია საშუალებას იძლევა ელემენტები მოვძებნოთ დაახლოვებით მსგავსი სელექტორების გამოყენებით:</p>
<div class="codecolorer-container css blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="css codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #cc00cc;">#form</span> option<span style="color: #00AA00;">:</span>not<span style="color: #00AA00;">&#40;</span><span style="color: #00AA00;">:</span>contains<span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">'Nothing'</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">,</span><span style="color: #cc00cc;">#option1b</span><span style="color: #00AA00;">,:</span>selected<span style="color: #00AA00;">&#41;</span><br />
<br />
<span style="color: #cc00cc;">#form</span> option<span style="color: #00AA00;">:</span>not<span style="color: #00AA00;">&#40;</span><span style="color: #00AA00;">:</span>not<span style="color: #00AA00;">&#40;</span><span style="color: #00AA00;">:</span>selected<span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#91;</span>id<span style="color: #00AA00;">^=</span><span style="color: #ff0000;">'option3'</span><span style="color: #00AA00;">&#93;</span><br />
<br />
<span style="color: #3333ff;">:input</span><span style="color: #00AA00;">:</span>not<span style="color: #00AA00;">&#40;</span><span style="color: #3333ff;">:image</span><span style="color: #00AA00;">,</span><span style="color: #3333ff;">:input</span><span style="color: #00AA00;">,:</span>submit<span style="color: #00AA00;">&#41;</span></div></td></tr></tbody></table></div>
<p>ამ ეტაპზე ნეითივ სელექტორები გათიშული მაქვს Safari, Chrome, IE8 და FF3.1 &#8211; სთვის უკუთავსებადობის სრული ტესტირებისათვის. გარდა მაგისა არც ნეიტივ სელექტორები არ არის სრულყოფილად რეალიზებული და ნებისმიერ შემთხვევაში საჭიროა ე.წ. Custom Implmentation(განსაკუთრებით ეს ეხება IE8 &#8211; ს).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/jcss-css-selector-engine/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>PHP: Array Tricks Part 1</title>
		<link>http://www.code.ge/posts/php-array-tricks</link>
		<comments>http://www.code.ge/posts/php-array-tricks#comments</comments>
		<pubDate>Sat, 07 Feb 2009 09:42:40 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=174</guid>
		<description><![CDATA[ამ პოსტს ჩემი ერთი მეგობრის თხოვნით ვწერ რომელთანაც გუშინ საუბარი მქონდა PHP &#8211; ს მასივებსა და for/foreach კონსტრუქციებთან მუშაობის შესახებ.
მასივები PHP &#8211; ს ერთერთი ყველაზე ძლიერი და განვითარებული მხარეა და შესაბამისად შეიცავს უამრავ ნიუანსს. ხშირ შემთხვევაში ასეთი ნიუანსები გამოუცდელი თუ გამოცდილი პროგრამისტების მიერ იგნორირებული რჩება და ამის შედეგად ვღებულობთ საკმაოდ დაუხვეწავ და სრულიად ზედმეტ კოდს.
ამ [...]]]></description>
			<content:encoded><![CDATA[<p>ამ პოსტს ჩემი ერთი მეგობრის თხოვნით ვწერ რომელთანაც გუშინ საუბარი მქონდა PHP &#8211; ს მასივებსა და for/foreach კონსტრუქციებთან მუშაობის შესახებ.</p>
<p>მასივები PHP &#8211; ს ერთერთი ყველაზე ძლიერი და განვითარებული მხარეა და შესაბამისად შეიცავს უამრავ ნიუანსს. ხშირ შემთხვევაში ასეთი ნიუანსები გამოუცდელი თუ გამოცდილი პროგრამისტების მიერ იგნორირებული რჩება და ამის შედეგად ვღებულობთ საკმაოდ დაუხვეწავ და სრულიად ზედმეტ კოდს.</p>
<p>ამ პოსტში მაქსიმალურად შევეცდები გადმოვცე ის დეტალები რაც PHP &#8211; სთან წლების მანძილზე მუშაობით შევიძინე და იმედი მაქვს რომ ეს ინფორმაცია თქვენთვისაც სასარგებლო იქნება.<span id="more-174"></span> მაშ ასე შევუდგეთ საქმეს <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>ფუნქციიდან მასივის დაბრუნება</h2>
<p>ხშირად მინახავს ასეთი ფუნქციები რომლებიც გარკვეული პირობის შესაბამისად აბრუნებენ ან მასივს ან null მნიშვნელობას(ასეთი შეცდომა მეც არაერთხელ მომსვლია და ამაში ტრაგიკული არაფერია). რეალურად ეს აბსოლუტურად ზედმეტი და არასაჭირო ქმედებაა რადგან შემდგომ დამატებითი კოდის წერის საჭიროებას იწვევს. ასეთ შემთხვევაში უმჯობესია ფუნქციამ დააბრუნოს უბრალოდ ცარიელი მასივი და არა null. მაგალითისათვის განვიხილოთ შემდეგი კოდი:</p>
<div class="codecolorer-container php blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">function</span> getArray<span style="color: #009900;">&#40;</span><span style="color: #000088;">$flag</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>&nbsp; <br />
&nbsp; &nbsp;<span style="color: #b1b100;">return</span> <span style="color: #000088;">$flag</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">true</span> ? <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span>1<span style="color: #339933;">,</span> 2<span style="color: #339933;">,</span> 3<span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ეს ფუნქცია პარამეტრის მნიშვნელობიდან გამომდინარე დააბრუნებს ან მასივს ან null მნიშვნელობას. ახლა შევეცადოთ მისი გამოყენება:</p>
<div class="codecolorer-container php blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">//თუ ფუნქციამ დააბრუნებს მასივს გამოვბეჭდოთ მისი მნიშვნელობები </span><br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span> <span style="color: #339933;">=</span> getArray<span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp;<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <a href="http://www.php.net/printf"><span style="color: #990000;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'key = %s and value = %s&lt;br /&gt;'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ნჩვენებ კოდში ვიძახებთ <strong>getArray(true)</strong> ფუნქციას და ვანიჭებთ მას $array ცვლადს, რადგან ეს ხდება IF პირობის ოპერატორში მნიშვნელობის შემოწმებაც მომენტალურად ხდება და მისი არსებობის შემთხვევაში მასივის ელემენტები გამოიბეჭდება ეკრანზე.</p>
<p>დამეთანხმებით რომ ძალიან ჩვეულებრივი და ტიპიური შემთხვევაა. მაგრამ ისეთ შემთხვევაში თუ უბრალოდ მასივის ელემენტების გამობეჭდვა გვესაჭიროება და მეტი არაფერი ეს დაწერილი კოდი სავსებით ზედმეტია. ნაჩვენები მაგალითI შეგვიძლია გადავაკეთოთ შემდეგნაირად:</p>
<div class="codecolorer-container php blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">//ეს ფუნქცია ნებისმიერ შემთხვევაში აბრუნებს მასივს</span><br />
<span style="color: #000000; font-weight: bold;">function</span> getArray<span style="color: #009900;">&#40;</span><span style="color: #000088;">$flag</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>&nbsp; <br />
&nbsp; &nbsp;<span style="color: #b1b100;">return</span> <span style="color: #000088;">$flag</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">true</span> ? <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span>1<span style="color: #339933;">,</span> 2<span style="color: #339933;">,</span> 3<span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000088;">$array</span> <span style="color: #339933;">=</span> getArray<span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp;<a href="http://www.php.net/printf"><span style="color: #990000;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'key = %s and value = %s&lt;br /&gt;'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ამ კოდის შესრულების შემდეგ აბსოლუტურად იდენტურ შედეგს მივიღებთ, თუმცა ერთი ძალიან მნიშნველოვანი განსხვავებით, რომ, IF პირობის გამოყენება სრულიად აცილებულია თავიდან რადგან ფუნქცია ნებისმიერ შემთხვევაში აბრუნებს მასივს, ხოლო ასეთ შემოწმებას თავად foreach ახდენს ავტომატურად. </p>
<p>ახლა ბუნებრივად უნდა დაიბადოს შეკითხვა თუ რა მოვიგეთ განსაკუთრებული? აქ კიდევ ერთ ნიუანსზე შევაჩერებ თქვენს ყურადღებას და getArray ფუნქციის გამოყენების რამდენიმე სასარგებლო დეტალს შევეხები. ამისათვის საჭიროა კოდში შევიტანოთ პატარა ცვლილება:</p>
<div class="codecolorer-container php blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">//ეს ფუნქცია ნებისმიერ შემთხვევაში აბრუნებს მასივს</span><br />
<span style="color: #000000; font-weight: bold;">function</span> getArray<span style="color: #009900;">&#40;</span><span style="color: #000088;">$flag</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp;<span style="color: #666666; font-style: italic;">//ფუნქციის გამოძახების ინდიკატორი</span><br />
&nbsp; &nbsp;<span style="color: #b1b100;">echo</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'invoked&lt;br /&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>&nbsp; <br />
&nbsp; &nbsp;<span style="color: #b1b100;">return</span> <span style="color: #000088;">$flag</span> <span style="color: #339933;">==</span> <span style="color: #009900; font-weight: bold;">true</span> ? <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span>1<span style="color: #339933;">,</span> 2<span style="color: #339933;">,</span> 3<span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//getArray() ფუნქციის გამოძახება foreach კონსტრუქციაში</span><br />
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span>getArray<span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp;<a href="http://www.php.net/printf"><span style="color: #990000;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'key = %s and value = %s&lt;br /&gt;'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ამ კოდის შესრულების შემდეგ მივიღებთ ანალოგიურ შედეგს, თუმცა უნდა აღინიშნოს, რომ, ამჯერად getArray() ფუნქცია გამოიძახება პირდაპირ foreach() კონსტრუქციაში და არა მის გარეთ. ეს ძალიან მნიშნელოვანი დეტალია რადგან ბევრ პროგრამისტს რატომღაც შეცდომად მიაჩნია ფუნქციის ამგვარი გამოძახება. რატომ? რადგან ფუნქცია გამოიძახება foreach &#8211; ში მიიჩნევა რომ მისი გამოძახება მოხდება იმდენჯერ რამდენი იტერაციაც იქნება ციკლში. თუმცა ეს ბუნებრივია ასე არ არის რასაც ზემოთ ნაჩვენები მაგალითიც ამტკიცებს. </p>
<p>ამ მაგალითიდან გამომდინარე უნდა გაგიჩნდეთ კიდევ ერთი შეკითხვა: და თუ მაინც მინდა მივანიჭო ცვლადს ფუნქციის მიერ დაბრუნებული მნიშნველობა? არც ეს არისპრობლემა:</p>
<div class="codecolorer-container php blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">//getArray() ფუნქციის დაბრუნებული მნიშვნელობის მინიჭება</span><br />
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$array</span> <span style="color: #339933;">=</span> getArray<span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp;<a href="http://www.php.net/printf"><span style="color: #990000;">printf</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'key = %s and value = %s&lt;br /&gt;'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>რატომღაც ცვლადზე ფუნქციის მიერ დაბრუნებული მნიშვნელობის ეს მეთოდიც ხშირად არის იგნორირებული, თუმცა ასეთი მინიჭება სრულებით დასაშვებია და ყოველგვარი პრობლემების გარეშე მუშაობს.</p>
<p>და ასევე ბონუსის სახით გეტყვით რომ თუ მაინც გვესაჭიროება IF პირობის შესრულება ისე როგორც ეს ნაჩვენები იყო პირველ მაგალითში არც ამაზეა არანაირი პრობლემა <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>პირველ მაგალითში ნაჩვენები პირობა, ანუ:</p>
<pre>
if ($array = getArray(false)) {
   //rest of code here
}
</pre>
<p>იმუშავებს ერთნაირად მიუხედავად იმისა ფუნქცია დააბრუნებს ცარიელ მასივსა თუ null მნიშვნელობას რადგან PHP fale, null, array() და 0 მნიშვნელობის ასეთი შემოწმების შემთხვევაში ყოველთვის დააბრუნებს false &#8211; ს.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/php-array-tricks/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>JavaScript WTF Vol. 5 &#8211; magic of onchange event</title>
		<link>http://www.code.ge/posts/javascript-wtf-vol-5-magic-of-onchange-event</link>
		<comments>http://www.code.ge/posts/javascript-wtf-vol-5-magic-of-onchange-event#comments</comments>
		<pubDate>Sat, 31 Jan 2009 11:06:59 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JavaScript DOM]]></category>
		<category><![CDATA[JavaScript WTF]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=168</guid>
		<description><![CDATA[ხშირად იყენებთ HTML ფორმის ელემენტების ამ ივენთს?   და რა შემთხვევაში? ალბათ უფრო SELECT ელემენტთან მუშაობისას ხომ? თქვენი არ ვიცი მაგრამ ჩემს პირად პრაქტიკაში განსაკუთრებული გამოყენება ამ ივენთს არ ჰქონია&#8230; თუმცა ორიოდე დღის წინ ყველაფერი შეიცვალა და ჩემთვის ერთი ფრიად საინტერესო აღმოჩენა გავაკეთე.
ასეთი რამ გინახავათ?

&#60;div onchange="handleEvent()"&#62;
//some other markup
&#60;/div&#62;

დამეთანხმებით რომ ერთი შეხედვით ამ ივენთის DIV [...]]]></description>
			<content:encoded><![CDATA[<p>ხშირად იყენებთ HTML ფორმის ელემენტების ამ ივენთს? <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  და რა შემთხვევაში? ალბათ უფრო SELECT ელემენტთან მუშაობისას ხომ? თქვენი არ ვიცი მაგრამ ჩემს პირად პრაქტიკაში განსაკუთრებული გამოყენება ამ ივენთს არ ჰქონია&#8230; თუმცა ორიოდე დღის წინ ყველაფერი შეიცვალა და ჩემთვის ერთი ფრიად საინტერესო აღმოჩენა გავაკეთე.</p>
<p>ასეთი რამ გინახავათ?</p>
<pre>
&lt;div onchange="handleEvent()"&gt;
//some other markup
&lt;/div&gt;
</pre>
<p>დამეთანხმებით რომ ერთი შეხედვით ამ ივენთის <strong>DIV </strong> ელემენტთან გამოყენება ცოტა არ იყოს უცნაურია ხომ? რა ცვლილება უნდა მოხდეს ისეთი <strong>DIV </strong> ელემენტში რომ მისი დამუშავება მოვახდინოთ ამგვარი გზით? ან დავუშვათ და მოხდა ასეთი ცვლილება მაგრამ რანაირად? </p>
<p>მინდა გაგახაროთ და გითხრათ, რომ, პასუხი მარტივია. <strong>DIV </strong> ელემენტში არანაირი ასეთი ცვლილება არ მოხდება, მაგრამ, თუ მის შიგნით გვაქვს რადმენიმე SELECT და INPUT ელემენტი რომელთა ცვლილების კონტროლი გვესაჭიროება ეს კოდი მომენტალურად იდეალურ გადაწყვეტად იქცევა!</p>
<p>კლასიკურად უფრო სწორად ძველი სკოლის მიდგომით ასეთი ამოცანის გადაჭრის დროს ყველა, SELECT და INPUT ელემენტის <strong>onchange</strong> ივენთს მივანიჭებდით ჰენდლერს. თუმცა თუ გავიხსენებთ ფაქტს რომ DOM დოკუმენტში ხდომილება ვრცელდება საწყისი ელემენტისგან(ელემენტი რომელზეც უშუალოდ მოხდა ესა თუ ის მოვლენა) ანუ ელემენტების იერარქიაში ქვევიდან ზევით, ჩემს მიერ ნაჩვენები კოდიც მომენტალურად პრაქტიკულ დანიშნულებას შეიძენს.  ამ ინფორმაციაზე დაყრდნობით შესაძლებელია ასეთი კოდის დაწერა:</p>
<div class="codecolorer-container html4strict blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;container&quot;</span>&gt;</span><br />
&nbsp; &nbsp;<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;f1&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
&nbsp; &nbsp;<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/br.html"><span style="color: #000000; font-weight: bold;">br</span></a> <span style="color: #66cc66;">/</span>&gt;</span><br />
&nbsp; &nbsp;<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;f2&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span><br />
&nbsp; &nbsp;<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/br.html"><span style="color: #000000; font-weight: bold;">br</span></a> <span style="color: #66cc66;">/</span>&gt;</span><br />
&nbsp; &nbsp;<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/select.html"><span style="color: #000000; font-weight: bold;">select</span></a> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;s1&quot;</span>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/option.html"><span style="color: #000000; font-weight: bold;">option</span></a> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;v1&quot;</span>&gt;</span>Value 1<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/option.html"><span style="color: #000000; font-weight: bold;">option</span></a>&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/option.html"><span style="color: #000000; font-weight: bold;">option</span></a> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;v2&quot;</span>&gt;</span>Value 2<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/option.html"><span style="color: #000000; font-weight: bold;">option</span></a>&gt;</span><br />
&nbsp; &nbsp;<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/select.html"><span style="color: #000000; font-weight: bold;">select</span></a>&gt;</span><br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/div.html"><span style="color: #000000; font-weight: bold;">div</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>ნაჩვენები კოდის შესაბამისი ამოცანა მდგომარეობს ყველა INPUT და SELECT ელემენტის <strong>onchange</strong> ივენთის დაჭერასა და შესაბამის დამუშავებაში. ნაცვლად იმისა რომ გამოვიყენოთ სათითაოდ ყველა ელემენტს onchange ივენთი, მარტივად შეგვიძლია გავაკეთოთ შემდეგი რამ:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'container'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">onchage</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp;<br />
&nbsp; &nbsp;<span style="color: #006600; font-style: italic;">//მოვიპოვოთ Event ობიექტი</span><br />
&nbsp; &nbsp;e <span style="color: #339933;">=</span> e <span style="color: #339933;">||</span> window.<span style="color: #660066;">event</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp;<br />
&nbsp; &nbsp;<span style="color: #006600; font-style: italic;">//მოვიპოვოთ საწყისი ელემენტი რომელზეც უშუალოდ დაფიქსირდა ივენთი</span><br />
&nbsp; &nbsp;<span style="color: #003366; font-weight: bold;">var</span> targetElement <span style="color: #339933;">=</span> e.<span style="color: #660066;">target</span> <span style="color: #339933;">||</span> e.<span style="color: #660066;">srcElement</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp;<span style="color: #006600; font-style: italic;">//თუ ელემენტი არის SELECT ან INPUT ტიპის შევასრულოთ დანარჩენი სამუშაო</span><br />
&nbsp; &nbsp;<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/^input|select$/i</span>.<span style="color: #660066;">test</span><span style="color: #009900;">&#40;</span>target.<span style="color: #660066;">nodeName</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #006600; font-style: italic;">//do something here</span><br />
&nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>დამეთანხმებით რომ ძალიან მარტივია ყველა ელემენტის ცვლილების ამდაგვარი ცენტრალიზებული კონტროლი. ეს არის ზუსტად ე.წ. Event Delegation მოდელი რომელიც ძალიან პოპულარულია დღესდღეობით. რატომ არ ვიცი მაგრამ ჩემთვის onchange ივენთი იმდენად ცალსახად იყო ასოცირებული ფორმის SELECT ელემენტთან რომ მისი ამდაგვარი გზით გამოყენების შესახებ არასოდეს მიფიქრია, თუმცა საბოლოო შედეგმა ყოველგვარ მოლოდინს გადააჭარბა.</p>
<p>იმედია ეს პირადად ჩემთვის ჭკუის სასწავლებელი შემთხვევა თქვენთვისაც სასარგებლო იქნება.</p>
<p>enjoy <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/javascript-wtf-vol-5-magic-of-onchange-event/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>ქართული Tech(ნოლოგიური) ბლოგები</title>
		<link>http://www.code.ge/posts/%e1%83%a5%e1%83%90%e1%83%a0%e1%83%97%e1%83%a3%e1%83%9a%e1%83%98-tech%e1%83%9c%e1%83%9d%e1%83%9a%e1%83%9d%e1%83%92%e1%83%98%e1%83%a3%e1%83%a0%e1%83%98-%e1%83%91%e1%83%9a%e1%83%9d%e1%83%92%e1%83%94</link>
		<comments>http://www.code.ge/posts/%e1%83%a5%e1%83%90%e1%83%a0%e1%83%97%e1%83%a3%e1%83%9a%e1%83%98-tech%e1%83%9c%e1%83%9d%e1%83%9a%e1%83%9d%e1%83%92%e1%83%98%e1%83%a3%e1%83%a0%e1%83%98-%e1%83%91%e1%83%9a%e1%83%9d%e1%83%92%e1%83%94#comments</comments>
		<pubDate>Sat, 31 Jan 2009 08:04:32 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=163</guid>
		<description><![CDATA[თითქმის წელიწად ნახევარი გავიდა მას შემდეგ რაც ქართული ტექნოლოგიური ბლოგების სიმცირის შესახებ დავწერე. რა შეიცვალა მას შემდეგ? სამწუხაროდ მინდა ვაღიარო რომ განსაკუთრებული არაფერი არ შეცვლილა. ამ დროის მანძილზე გამოჩნდა რამდენიმე ასეთი ბლოგი მაგრამ მხოლოდ რამდენიმე  
რა გვჭირს? რატომ ვართ ასეთი ჩაკეტილები და რატომ არ ვწერთ? მესმის, ძალიან კარგად მესმის დროის სიმცირის ფაქტორი, მაგრამ, როგორ [...]]]></description>
			<content:encoded><![CDATA[<p>თითქმის წელიწად ნახევარი გავიდა მას შემდეგ რაც ქართული <a href="http://www.code.ge/uncategorized/ბლოგერების-სიმცირე">ტექნოლოგიური ბლოგების სიმცირის შესახებ</a> დავწერე. რა შეიცვალა მას შემდეგ? სამწუხაროდ მინდა ვაღიარო რომ განსაკუთრებული არაფერი არ შეცვლილა. ამ დროის მანძილზე გამოჩნდა რამდენიმე ასეთი ბლოგი მაგრამ მხოლოდ რამდენიმე <img src='http://www.code.ge/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>რა გვჭირს? რატომ ვართ ასეთი ჩაკეტილები და რატომ არ ვწერთ? მესმის, ძალიან კარგად მესმის დროის სიმცირის ფაქტორი, მაგრამ, როგორ ახერხებენ ამ სფეროში ცნობილი დასავლელი კოლეგები თავიანთი ძირითადი საქმეების, კონფერენციებისა და სხვა აქტივობის პარალელურად ბლოგერობას? რატომ ვერ ვღებულობთ ჩვენ ამ შესანიშნავ საშუალებას ისე როგორც ეს ხდება სხვაგან? არა, არ იფიქროთ რომ ვინმეს ჭკუას ვარიგებ და ა.შ. სპეციალურად ვწერ მრავლობით რიცხვში და ჩემს თავსაც მოვიაზრებ როდესაც ვწერ &#8220;ჩვენ&#8221;. მინდა გითხრათ რომ ძალიან დიდ სიამოვნებას მანიჭებს ბლოგზე თუნდაც იშვიათად წერა, მცირე მაგრამ შეძლებისდაგვარად სასარგებლო საქმის კეთება GeoKBD &#8211; ს სახით და ა.შ. მაგრამ არც ეს მგონია საკმარისი.</p>
<p>დაახლოვებით 2005 წლიდან გავხდი ბლოგების აქტიური მკითხველი, შედარებით მოგვიანებით მე თვითონ დავიწყე წერა და რა მივიღე ამ წლების მანძილზე? რამდენიმე ძალიან მნიშვნელოვანი რამ: 1) მივიღე უზარმაზარი ცოდნა ისეთი ადამიანებისგან რომლებსაც არ ეზარებათ საკუთარი გამოცდილების გაზიარება; 2) ვისწავლე უკეთ წერა(არასოდეს არ გამოვირჩევოდი კარგი წერით და ძალიან ბევრი ხარვეზი მაქვს ამ მხრივ დღესაც) და აზრის უკეთ გადმოცემა; 3) დავინახე რომ თუნდაც ის მცირედი რასაც ამ ბლოგის მეშვეობით ვაკეთებ თურმე სასარგებლოც კი ყოფილა სხვა ადამიანებისთვის.</p>
<p>რა ვქნათ ახლა? კიდევ ერთხელ გავაკეთო მოწოდება? <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  მოგიწოდებთ! კატეგორიულად მოგიწოდებთ! ჩვენ თავად თუ არ გავაუმჯობესეთ და არ შევცვალეთ ატმოსფერო ამ სფეროში, თუ არ გავხდით უფრო გახსნილები და ვიქნებით ასეთი კარჩაკეტილები ყოველთვის 10 წლით უკან ვიქნებით რაც დამეთანხმებით რომ ძალიან არასასიამოვნოა <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>P.S.<br />
რამდენიმე ბლოგი რომელიც ამ პერიოდის მანძილზე შეიქმნა:</p>
<p><a href="http://www.geogamedev.net/wordpress/">Georgian Game developers unite!</a><br />
<a href="http://blog.actionscript.ge/">ActionScript.GE</a><br />
<a href="http://www.gode.ge/">გოდეს ინტერნეტ დავთარი</a><br />
<a href="http://koko.ge/wordpress/">Blog for web developers</a><br />
<a href="http://ledtechdesign.com/">LedTechDesign</a></p>
<p>მეტი ახალი ბლოგები არ ვიცი და თუ მომაწოდებთ დიდად დამავალებთ <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/%e1%83%a5%e1%83%90%e1%83%a0%e1%83%97%e1%83%a3%e1%83%9a%e1%83%98-tech%e1%83%9c%e1%83%9d%e1%83%9a%e1%83%9d%e1%83%92%e1%83%98%e1%83%a3%e1%83%a0%e1%83%98-%e1%83%91%e1%83%9a%e1%83%9d%e1%83%92%e1%83%94/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>PHP: Document Root for FTP Client?</title>
		<link>http://www.code.ge/posts/php-document-root-for-ftp-client</link>
		<comments>http://www.code.ge/posts/php-document-root-for-ftp-client#comments</comments>
		<pubDate>Sat, 17 Jan 2009 13:52:29 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=157</guid>
		<description><![CDATA[ვებ სერვერზე PHP &#8211; თი ფაილებთან მუშაობა არაერთ სიურპრიზს გვთავაზობს, რაც ზოგჯერ საინტერესოა ზოგჯერ კი მართლა მოსაბეზრებელი   თუმცა არის ერთი საკითხი რაზეც ამჯერად შევაჩერებ თქვენს ყურადღებას.
სერვერზე ფაილებთან მუშაობა PHP &#8211; ს შესაბამისი ფუნქციებით(fopen, fwrite, touch და ა.შ) საკმაოზე უფრო მოუხერხებელია უსაფრთხოების დეტალების გამო. არავისთვის არ წარმოადგენს საიდუმლოს რომ ვებ სერვერზე განთავსებულ ფაილებს უნდა [...]]]></description>
			<content:encoded><![CDATA[<p>ვებ სერვერზე PHP &#8211; თი ფაილებთან მუშაობა არაერთ სიურპრიზს გვთავაზობს, რაც ზოგჯერ საინტერესოა ზოგჯერ კი მართლა მოსაბეზრებელი <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  თუმცა არის ერთი საკითხი რაზეც ამჯერად შევაჩერებ თქვენს ყურადღებას.</p>
<p>სერვერზე ფაილებთან მუშაობა PHP &#8211; ს შესაბამისი ფუნქციებით(fopen, fwrite, touch და ა.შ) საკმაოზე უფრო მოუხერხებელია უსაფრთხოების დეტალების გამო. არავისთვის არ წარმოადგენს საიდუმლოს რომ ვებ სერვერზე განთავსებულ ფაილებს უნდა გააჩნდეთ შექმნის, ჩაწერის, წაკითხვისა და წაშლის შეზღუდვები. </p>
<p>ასეთ შემთხვევაში ფაილებთან მუშაობის ერთადერთ სწორ და ეფექტურ გზად რჩება PHP FTP მოდულის გამოყენება, ან soeket &#8211; ებზე დაყრდნობით შექმნილი შესაბამისი რეალიზაციის გამოყენება, რაც ფაქტიურად ერთი და იგივეა.<span id="more-157"></span></p>
<p>რატომ FTP? იმიტომ, რომ სწორედ FTP მომხმარებელს გააჩნია ფაილებთან წვდომის შესაბამისი პერმიშენები, განსხვავებით იმ მომხმარებლისგან რომელიც ტრადიცულად აქვს PHP &#8211; ს.</p>
<p><strong>პრობლემა</strong><br />
რამდენადაც ყველასათვის ცონბილია ვებ აპლიკაცია მუშაობს ე.წ. DOCUMENT_ROOT &#8211; ის შიგნით. მაგ:</p>
<pre>
/home/code.ge/public_html
</pre>
<p>სწორედ ამ მისამართის ქვეშ არის განლაგებული ვებ აპლიკაციის ყველა ფაილი, თუმცა იგივეს ვერ ვიტყვით სერვერთან FTP კლიენტით დაკავშირების შემთხვევაში. როდესაც სერვერს ვუკავშირდებით FTP კლიენტით მისამართი განსხვავდება და ხელთ გვაქვს მსგავსი ტიპის მისამართი:</p>
<pre>
/
</pre>
<p>ასეთ შემთხვევაში ერთსა და იმავე ფაილთან აღნისნული მეთოდებით მუშაობისას მივიღებთ ორ განსხვავებულ მისამართს:</p>
<pre>
//ტრადიციული შემთხვევა
/home/code.ge/public_html/dir/some-file.gif
//FTP - ს კლიენტის გამოყენების შემთხვევაში
/public_html/dir/some-file.gif
</pre>
<p>განსხვავება თვალსაჩიანოა? <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>ცხადია ფაილებთან მუშაობისას საჭიროა რაიმე კონსისტენტური გზის გამონახვა რომელიც ერთნაირად ეფექტურად იმუშავებს როგორც ზემოთხსენებული ჩვეულებრივი ფაილებთან სამუშაო ფუნქციების გამოყენებით, ასევე PHP &#8211; ს FTP გაფართოვების ფუნქციების გამოყენების მეშვეობით. </p>
<p>მარტივ შემთხვევაში ამ პრობლემის გადასაჭრელად უბრალოდ საკმარისია მსგავსი PHP კოდის დაწერა:</p>
<div class="codecolorer-container php blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$ftp_mode</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$ftp_mode</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/define"><span style="color: #990000;">define</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'_DOC_ROOT'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'/public_html'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/define"><span style="color: #990000;">define</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'_DOC_ROOT'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'DOCUMENT_ROOT'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ამ შემთხვევაში ფაილებთან მუშაობისას გაუგებრობების თავიდან ასარიდებლად ყოველი ფაილის მისამართის წინ უბრალოდ შეგვიძლია &#8220;_DOC_ROOT&#8221; კონსტანტის გამოყენება, მაგ:</p>
<div class="codecolorer-container php blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">//FTP მოდულის გამოყენებით</span><br />
<a href="http://www.php.net/ftp_mkdir"><span style="color: #990000;">ftp_mkdir</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$conn</span><span style="color: #339933;">,</span> _DOC_ROOT <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/foldername'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">//ან უბრალოდ</span><br />
<a href="http://www.php.net/mkdir"><span style="color: #990000;">mkdir</span></a><span style="color: #009900;">&#40;</span>_DOC_ROOT <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/foldername'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>მაგრამ დამეთანხმებით ეს მიდგომა ყოველად მიუღებელია ისეთ შემთხვევაში როდესაც პროგრამა სხვადასხვა სერვერებზე გამოიყენება და ყოველ ჯერზე კონფიგურაციის ხელით კეთება ნამდვილად არასასიამოვნოა <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><strong>გამოსავალი</strong><br />
სიზარმაციდან და პრაქტიკული მოსაზრებებიდან გამომდინარე საჭიროა პატარა კოდის დაწერა რომელიც ამ პრობლემას მოგვიგვარებს და ავტომატურად გამოთვლის მისამართებს ორივე შემთხვევისათვის:</p>
<div class="codecolorer-container php blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">//მიმდინარე დირექტორია FTP კლიენტისათვის</span><br />
<span style="color: #000088;">$pwd</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/ftp_pwd"><span style="color: #990000;">ftp_pwd</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$conn</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//ვინდოუსის შემთხვევაში დავიზღვიოთ თავი და შევცვალოთ მარცხენა სლეში მარჯვენათი</span><br />
<span style="color: #000088;">$pwd</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/str_replace"><span style="color: #990000;">str_replace</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'\', '</span><span style="color: #339933;">/</span><span style="color: #0000ff;">', $pwd);<br />
<br />
//თუ მიმდინარე დირექტორია არ არის უბრალოდ &quot;/&quot;, მოვაშალოთ თავსა და ბოლოში სლეშები<br />
if ($pwd !== '</span><span style="color: #339933;">/</span><span style="color: #0000ff;">') {<br />
&nbsp; &nbsp;$pwd = trim($pwd, '</span>\<span style="color: #339933;">/</span><span style="color: #0000ff;">');<br />
}<br />
<br />
//აპლიკაციის ინსტალაციის დირექტორია, იგულისხმება რომ იგი ავტომატურად გამოთვლილია სკრიპტის მიერ<br />
define('</span>_APP_PATH<span style="color: #0000ff;">', '</span><span style="color: #339933;">/</span>my<span style="color: #339933;">-</span>app<span style="color: #339933;">-</span>path<span style="color: #0000ff;">');<br />
<br />
//დავამუშავოთ ვებ სერვერის DOCUMENT_ROOT და მივამატოთ მას აპლიკაციის ინსტალაციის დირექტორია<br />
$docroot = preg_replace(<br />
&nbsp; &nbsp;array('</span>~\\\~<span style="color: #0000ff;">', '</span>~^<span style="color: #009900;">&#91;</span>a<span style="color: #339933;">-</span>z<span style="color: #009900;">&#93;</span><span style="color: #339933;">:</span>~i<span style="color: #0000ff;">', '</span>~^<span style="color: #339933;">/|/</span>$~<span style="color: #0000ff;">'), <br />
&nbsp; &nbsp;array('</span><span style="color: #339933;">/</span><span style="color: #0000ff;">', '</span><span style="color: #0000ff;">', '</span><span style="color: #0000ff;">'), <br />
&nbsp; &nbsp;$_SERVER['</span>DOCUMENT_ROOT<span style="color: #0000ff;">']<br />
) . _APP_PATH;<br />
<br />
//დამხმარე ფუნქცია დროებითი მისამართის გენერაციისათვის<br />
function path($pwd, $path) {<br />
&nbsp; &nbsp;$tokens = array();<br />
&nbsp; &nbsp;if ($pwd = trim($pwd, '</span>\<span style="color: #339933;">/</span><span style="color: #0000ff;">')) {<br />
&nbsp; &nbsp; &nbsp; $tokens[] = $pwd;<br />
&nbsp; &nbsp;}<br />
&nbsp; &nbsp;$tokens[] = $path;<br />
&nbsp; &nbsp;return '</span><span style="color: #339933;">/</span><span style="color: #0000ff;">' . implode('</span><span style="color: #339933;">/</span><span style="color: #0000ff;">', $tokens);<br />
}<br />
<br />
//DOCUMENT_ROOT დავყოთ ნაწილებად<br />
$tokens &nbsp;= explode('</span><span style="color: #339933;">/</span><span style="color: #0000ff;">', $docroot);<br />
$apppath = null;<br />
<br />
//შევასრულოთ ftp_chdir ფუნქცია იქამდე სანამ იგი არ დაგვიბრუნებს &quot;true&quot; - ს<br />
while(ftp_chdir($conn, $apppath = path($pwd, implode('</span><span style="color: #339933;">/</span><span style="color: #0000ff;">', $tokens))) !== true) {<br />
&nbsp; &nbsp;//DOCUMENT_ROOT მასივიდან ყოველ იტერაციაზე ამოვაგდოთ მასივის დასაწყისში მყოფი ელემენტი<br />
&nbsp; &nbsp;array_shift($tokens);<br />
&nbsp; &nbsp;$apppath = null;<br />
}<br />
<br />
//გამოვბეჭდოთ გამოთვლილი დირექტორია<br />
echo $apppath;</span></div></td></tr></tbody></table></div>
<p>სულ ეს არის <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/php-document-root-for-ftp-client/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>გილოცავთ ახალ წელს! :)</title>
		<link>http://www.code.ge/posts/%e1%83%92%e1%83%98%e1%83%9a%e1%83%9d%e1%83%aa%e1%83%90%e1%83%95%e1%83%97-%e1%83%90%e1%83%ae%e1%83%90%e1%83%9a-%e1%83%ac%e1%83%94%e1%83%9a%e1%83%a1</link>
		<comments>http://www.code.ge/posts/%e1%83%92%e1%83%98%e1%83%9a%e1%83%9d%e1%83%aa%e1%83%90%e1%83%95%e1%83%97-%e1%83%90%e1%83%ae%e1%83%90%e1%83%9a-%e1%83%ac%e1%83%94%e1%83%9a%e1%83%a1#comments</comments>
		<pubDate>Thu, 01 Jan 2009 12:09:35 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=156</guid>
		<description><![CDATA[ყველას გილოცავთ ახალ 2009 წელს! გისურვებთ ბედნიერებას, სიხარულს და წარმატებას ნებისმიერ ასპარეზზე!
ვისურვებდი რომ 2009 წელი ყოფილიყოს 2008 &#8211; ზე გაცილებით უკეთესი. ჩემთვის პირადად გასული წელი ძალიან ცუდიც იყო და ძალიან კარგიც, არც კი ვიცი რომელი ჭარბობს მაგრამ ვისურვებდი რომ ის ცუდი რაც 2008 წელს ვიხილე აღარასოდეს აღარ მეხილა და იგივეს ვუსურვებ ყველას ვინც კი ამ [...]]]></description>
			<content:encoded><![CDATA[<p>ყველას გილოცავთ ახალ 2009 წელს! გისურვებთ ბედნიერებას, სიხარულს და წარმატებას ნებისმიერ ასპარეზზე!</p>
<p>ვისურვებდი რომ 2009 წელი ყოფილიყოს 2008 &#8211; ზე გაცილებით უკეთესი. ჩემთვის პირადად გასული წელი ძალიან ცუდიც იყო და ძალიან კარგიც, არც კი ვიცი რომელი ჭარბობს მაგრამ ვისურვებდი რომ ის ცუდი რაც 2008 წელს ვიხილე აღარასოდეს აღარ მეხილა და იგივეს ვუსურვებ ყველას ვინც კი ამ ბლოგს კითხულობს/წაიკითხავს/არ წაკითხავს და ა.შ. მოკლედ ყველას ყველას ყველას <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>აბა კიდევ ერთხელ ყველას გილოცავთ ახალ წელს <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/%e1%83%92%e1%83%98%e1%83%9a%e1%83%9d%e1%83%aa%e1%83%90%e1%83%95%e1%83%97-%e1%83%90%e1%83%ae%e1%83%90%e1%83%9a-%e1%83%ac%e1%83%94%e1%83%9a%e1%83%a1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ant, Rhino, YUICompressor &amp; JS Packer</title>
		<link>http://www.code.ge/posts/ant-rhino-yuicompressor-js-packer</link>
		<comments>http://www.code.ge/posts/ant-rhino-yuicompressor-js-packer#comments</comments>
		<pubDate>Mon, 22 Dec 2008 07:06:33 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Ant]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=155</guid>
		<description><![CDATA[დაახლოვებით ერთი წლის წინ ზედაპირულად შევეხე JavaScript ფაილების კომპრესიას. ძველი პოსტის მიხედვით თუ ვიმსჯელებთ არცთუ ისე ცუდი შედეგია. თუმცა რამდენიმე დეტალი მაინც საჭიროებს გადახედვას, კერძოდ კი:

JavaScript ფაილების კომპრესიის პროცესი არ არის ავტომატიზებული;
ფაილების კომპრესია მთლიანად ეყრდნობა დენ ედვარდსის ე.წ Packer &#8211; ს რომელიც გარკვეულ მიზეზთა გამო საკმაოდ მოუხერხებელია;

პირველ რიგში სანამ გადავალთ უშუალოდ ფაილების კომპრესიის ავტომატიზაციის პროცედურაზე [...]]]></description>
			<content:encoded><![CDATA[<p>დაახლოვებით ერთი წლის წინ ზედაპირულად შევეხე JavaScript ფაილების კომპრესიას. <a href="http://www.code.ge/apache/mod_deflate-js-css-file-compression">ძველი პოსტის</a> მიხედვით თუ ვიმსჯელებთ არცთუ ისე ცუდი შედეგია. თუმცა რამდენიმე დეტალი მაინც საჭიროებს გადახედვას, კერძოდ კი:</p>
<ul>
<li>JavaScript ფაილების კომპრესიის პროცესი არ არის ავტომატიზებული;</li>
<li>ფაილების კომპრესია მთლიანად ეყრდნობა დენ ედვარდსის ე.წ Packer &#8211; ს რომელიც გარკვეულ მიზეზთა გამო საკმაოდ მოუხერხებელია;</li>
</ul>
<p>პირველ რიგში სანამ გადავალთ უშუალოდ ფაილების კომპრესიის ავტომატიზაციის პროცედურაზე საჭიროა საბოლოო ამოცანის სრულად ჩამოყალიბება.</p>
<p><strong>მიზანი</strong></p>
<ul>
<li>JavaScript ფაილების გაერთიანება და ერთი საბოლოო ფაილის მიღება;</li>
<li>გაერთიანების შედეგად მიღებული ფაილის მინიფიკაცია და ობფუსკაცია;</li>
<li>მინიფიცირებული ფაილის ზომაში კიდევ უფრო მეტად შემცირება base62 კოდირებით;</li>
<li>საბოლოო ფაილის gzip კომპრესია;</li>
</ul>
<p><span id="more-155"></span><br />
პირველ რიგში მანამდე სანამ შევუდგებით JavaScript ფაილების კომპრესიის პროცესს მოვამზადოთ შესაბამისი გარემო, პირველ რიგში თქვენთვის მოსახერხებელ მისამართზე შექმენით კატალოგების შემდეგი სტრუქტურა:</p>
<pre>
project
    tools
    src
    build
</pre>
<p>ჩამოთვლილი პუნქტების რეალიზაციისათვის პოსტის სათაურში ნახსენები უტილიტებს გამოვიყენებთ.</p>
<p>უფრო კონკრეტულად კი მიზნის მისაღწევად დაგვჭირდება:</p>
<ul>
<li><a href="http://ant.apache.org/">Apache Ant</a> &#8211; თუ გიყენიათ JDK მას დამატებითი ინსტალაცია არ ესაჭიროება;</li>
<li>მოზილას <a href="http://www.mozilla.org/rhino/">Rhino &#8211; JavaScript for Java</a>, JavaScript კოდის შესასრულებლად. გადმოწერეთ ბოლო ვერსია გახსენით არქივი და დააკოპირეთ js.jar ფაილი /project/tools კატალოგში;</li>
<li>ჟულიენ ლეკომტეს მიერ შექმნილი <a href="http://www.julienlecomte.net/yuicompressor/">YUICompressor</a> რომელსაც გამოვიყენებთ JavaScript ფაილების მინიფიკაციისა და ობფუსკაციისათვის. გადმოწერეთ ბოლო ვერსია გახსენით არქივი დააკოპირეთ build კატალოგში არსებული yuicompressor-2.x.x.ჯარ ფაილი /project/tools კატალოგში, შეუცვალეთ მას სახელი და დაარქვით yuicompressor.jar;</li>
<li>დენ ედვარდსის <a href="http://dean.edwards.name/packer/">Packer</a> რომლის მეშვეობითაც შევამცირებთ უკვე მინიფიცირებულ ფაილის მოცულობას</li>
<li>ჩემს მიერ დაწერილ პატარა სკრიპტი რომელიც საშულებას მოგვცემს Ant სკრიპტიდან გამოვიძახოთ Packer &#8211; ის pack მეთოდი მინიფიცირებული კოდის base62 კოდირებისათვის. ფაილი აერთიანებს როგორც ჩემს მიერ დაწერილ კოდს, ასევე დენ ედვარდსის Packer &#8211; ს. გადმოწერეთ ფაილი და დააკოპირეთ იგი /project/tools კატალოგში</li>
</ul>
<p>სამუშაო გარემოს დასასრულებლად /project კატალოგში შექმენით ცარიელი build.xml ფაილი.<br />
საბოლოო ჯამში მივიღებთ კატალოგებისა და ფაილების ასეთ სტრუქტურას:</p>
<pre>
project
    tools
        js.jar
        yuicompressor.jar
        pack.js
    src
    build
    build.xml
</pre>
<p>მანამდე სანამ შევუდგებით ფაილების უშუალო კომპრესიას /project/src კატალოგში დააკოპირეთ თქვენთვის სასურველი/საჭირო JavaScript ფაილები. ამ პოსტის წერისას, ტესტირებისათვის გამოვიყენე ორი ფაილი, jquery-1.2.6.js და jQuery &#8211; ს პლაგინი jquery.form.js .</p>
<p>დროა შევუდგეთ Ant სკრიპტის წერას რომლის მეშვეობითაც გავაერთიანებთ ფაილებს, გამოვიძახებთ შესაბამის უტილიტებს საჭირო პარამეტრებით და მივიღებთ საბოლოო შედეგს.</p>
<pre>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project name="MyProject" default="build" basedir="."&gt;

    &lt;!-- Source Directory --&gt;
    &lt;property name="src" value="src" /&gt;
    &lt;!-- Build Directory --&gt;
    &lt;property name="build" value="build" /&gt;
    &lt;!-- Tools Directory --&gt;
    &lt;property name="tools" value="tools" /&gt;

    &lt;target name="init"&gt;
        &lt;!-- Cleanup build folder --&gt;
        &lt;delete&gt;
            &lt;fileset dir="${build}" includes="**/*.*"/&gt;
        &lt;/delete&gt;
    &lt;/target&gt;

    &lt;target name="build" depends="init"&gt;
        &lt;!-- Concatenate source files --&gt;
        &lt;concat destfile="${build}/library.js"&gt;
            &lt;filelist dir="${src}" files="jquery-1.2.6.js,jquery.form.js"/&gt;
        &lt;/concat&gt;
        &lt;!-- Minify concatenated file with YUICompressor --&gt;
        &lt;java fork="true" jar="${tools}/yuicompressor.jar"&gt;
            &lt;arg line="-o ${build}/library.min.js ${build}/library.js" /&gt;
        &lt;/java&gt;
        &lt;!-- Pack minified file with Dean Edwards' Packer --&gt;
        &lt;java fork="true" jar="${tools}/js.jar"&gt;
            &lt;arg line="${tools}/pack.js ${build}/library.min.js ${build}/library.pack.js" /&gt;
        &lt;/java&gt;
    &lt;/target&gt;

&lt;/project&gt;
</pre>
<p>ნაჩვენები Ant სკრიპტის დეტალების განხილვა სცილდება ამ პოსტის მიზანს, თუმცა ყველა მნიშნველოვან დირექტივას თანდართული აქვს კომენტარები ზოგადი წარმოდგენის შესაქმნელად. </p>
<p>სკრიპტის შექმნის შემდეგ ტერმინალიდან შედით თქვენი პროექტის კატალოგში და აკრიფეთ შემდეგი ბრძანება:</p>
<pre>
ant
</pre>
<p>პროცესის დასრულების შემდეგ ტერმინალში დაინახავთ დაახლოვებით მსგავს შედეგს:</p>
<pre>
Buildfile: /Users/iosebdzmanashvili/Sites/test/pack/build.xml
init:
build:
     [java] completed...
BUILD SUCCESSFUL
Total time: 17 seconds
</pre>
<p>მაშ ასე ფაილების გაერთიანების, მინიფიკაციის, ობფუსკაციისა და კოდის base62 კოდირებაში გადაყვანის პროცესი დასრულებულია. თუ შეხვალთ /project/build კატალოგში, დაგხვდებათ სამი ფაილი:</p>
<ul>
<li><strong>library.js</strong> &#8211; რომელშიც გაერთიანებულია ზემოთ ნახსენები ორი JS ფაილი. ამ ფაილის ზომა დაახლოვებით 124KB &#8211; ს შეადგენს;</li>
<li><strong>library.min.js</strong> &#8211; YUICompressor &#8211; ის მეშვეობით მინიფიცირებული ფაილი რომლის ზომაც დაახლოვებით 64KB &#8211; ა;</li>
<li><strong>library.pack.js</strong> &#8211; Packer &#8211; ის მეშვეობით base62 კოდირებაში გადაყვანილი ფაილი რომლის ზომაც დაახლოვებით 36KB &#8211; ა;</li>
</ul>
<p>დამერწმუნებით რომ შედეგი თვალსაჩიანოა და დამატებით კომენტარებს არ საჭიროებს, 124KB &#8211; დან საბოლოო ფაილი დავიყვანეთ 36KB &#8211; მდე რაც უდავოდ მნიშვნელოვანი სხვაობაა. თუ ამ ფაილს დამატებით პოსტის დასაწყიში ნახსენები მეთოდით დავამუშავებთ მისი ზომა დაახლოვებით 20KB &#8211; მდე დავა რაც თავისთავად ასევე მნიშვნელოვანია.</p>
<p>რეზიუმეს სახით ასევე მნიშვნელოვანია რამდენიმე დეტალი. თუ ფაილის მინიფიკაციის პროცესს შევასრულებდით მხოლოდ Packer &#8211; ის გამოყენებით, მივიღებდით დაახლოვებით იგივე შედეგს. თუმცა არსებობს ერთი საჩოთირო დეტალი რამაც YUICompressor &#8211; ის ჩართვისაკენ მიბიძგა.</p>
<p>როდესაც ვიყენებთ Packer &#8211; ს, მნიშნველოვანია გავითვალისწინოთ რომ ნებისმიერი ფუნქცია რომელსაც აღვწერთ სხვა ფუნქციისა ან მეთოდის შიგნით უნდა მთავრდებოდეს წერტილ მძიმით &#8220;;&#8221;. თუ ეს პირობა არ არის დაცული Packer &#8211; ის მიერ დაპატარავებული ფაილი უსარგებლო იქნება. ამ პროლემას აგვარებს YUICompressor, რადგან იგი ასეთ ფუნქციებს ავტომატურად ასრულებს წერტილ მძიმით ხოლო შედეგად ვღებულობთ სუფთა, Packer &#8211; ისათვის გამოსადეგ კოდს. მაგალითში ნაჩვენებია ასეთი შემთხვევა:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">function</span> myFunction<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> myPrivateFunction <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #006600; font-style: italic;">//rest of code here</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #006600; font-style: italic;">//აქ აუცილებელია წერტილ მძიმე</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>სამწუხაროდ Packer &#8211; ს არ აქვს იმის უნარი რომ ასეთი მცირე პრობლემები მოაგვაროს თავისით, თუმცა როგორც უკვე აღვნიშნე ამ პრობლემის თავიდან არიდება შესაძლებელია YUICompressor &#8211; ის მეშვეობით.</p>
<p>ასევე ყურადღებას შევაჩერებ ჩემს მიერ დაწერილ პატარა სკრიპტზე რომლის მეშვეობითაც ხდება მინიფიცირებული კოდის base62 კოდირებაში გადაყვანა. სკრიპტი არის Rhino &#8211; ს რამდენიმე სტრიქონი კლიენტი რომლის შესრულებაც შესაძლებელია ტერმინალიდან. მას ესაჭიროება ორი პარამეტრი: 1) საწყისი ფაილი რომლის კოდირებაც გვესაჭიროება; 2) საბოლოო ფაილის სახელი; </p>
<p>Rhino &#8211; ს კლიენტი კითხულობს პირველ პარამეტრად გადაცემული ფაილიდან JavaScript კოდს, იძახებს Packer &#8211; ის pack მეთოდს შესაბამისი პარამეტრებით, და მიღებულ შედეგს ინახავს შესაბამის ფაილში:</p>
<div class="codecolorer-container javascript blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">output <span style="color: #339933;">=</span> java.<span style="color: #660066;">io</span>.<span style="color: #660066;">FileWriter</span><span style="color: #009900;">&#40;</span>arguments<span style="color: #009900;">&#91;</span>1<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> &nbsp;<span style="color: #006600; font-style: italic;">//obtain FileWriter object</span><br />
output.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span><br />
&nbsp; &nbsp; pack<span style="color: #009900;">&#40;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//invoke Dean Edward's packer function</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; readFile<span style="color: #009900;">&#40;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//read input file: http://www.mozilla.org/rhino/shell.html</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; arguments<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #006600; font-style: italic;">//input file path</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #CC0000;">62</span><span style="color: #339933;">,</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//base62 encode</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #CC0000;">0</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #006600; font-style: italic;">//shrink variable names?</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
output.<span style="color: #000066;">close</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000066;">print</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'completed...'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #006600; font-style: italic;">//Dean Edwrads' Packer code here</span></div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/ant-rhino-yuicompressor-js-packer/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mac Os X XAMPP: Tidy &#8211; ს ინსტალაცია PHP-5.2.6 &#8211; სთვის</title>
		<link>http://www.code.ge/posts/mac-os-x-xampp-tidy-installation-for-php-5-2-6</link>
		<comments>http://www.code.ge/posts/mac-os-x-xampp-tidy-installation-for-php-5-2-6#comments</comments>
		<pubDate>Thu, 18 Dec 2008 08:35:50 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=154</guid>
		<description><![CDATA[ამ პოსტში მინდა მოგითხროთ პატარა ისტორია Mac OS X &#8211; ზე PHP &#8211; ს რეკომპილაციით მიღებულ &#8220;სიამოვნებასა&#8221; და უსაზღვრო &#8220;კომფორტზე&#8221; რომელიც ბოლო ორი დღის განმავლობაში მივიღე.
მაშ ასე, თუ თქვენ იყენებთ XAMPP &#8211; ს და გესაჭიროებათ PHP &#8211; სთვის tidy გაფართოვების დამატება რომელიც სამწუხაროთ XAMPP &#8211; ს არ მოყვება, გაგახარებთ და გეტყვით რომ საკმაოდ სერიოზული პრობლემის [...]]]></description>
			<content:encoded><![CDATA[<p>ამ პოსტში მინდა მოგითხროთ პატარა ისტორია Mac OS X &#8211; ზე PHP &#8211; ს რეკომპილაციით მიღებულ &#8220;სიამოვნებასა&#8221; და უსაზღვრო &#8220;კომფორტზე&#8221; რომელიც ბოლო ორი დღის განმავლობაში მივიღე.</p>
<p>მაშ ასე, თუ თქვენ იყენებთ XAMPP &#8211; ს და გესაჭიროებათ PHP &#8211; სთვის <strong>tidy</strong> გაფართოვების დამატება რომელიც სამწუხაროთ XAMPP &#8211; ს არ მოყვება, გაგახარებთ და გეტყვით რომ საკმაოდ სერიოზული პრობლემის წინაშე დგახართ <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> <span id="more-154"></span></p>
<p>რა არის საჭირო ამ მიზნის მისაღწევად? მივყვეთ ნაბიჯ ნაბიჯ:</p>
<ol>
<li>შეინახეთ ყველა არსებული პროექტი უსაფრთხო ადგილას;</li>
<li>გაანადგუროთ ყველა არსებული PHP ინსტალაცია, ამისათვის ტერმინალში აკრიფეთ შემდეგი ბრძანებები:
<p></p>
<pre>
sudo rm -rf /Applications/xampp
sudo rm -rf /usr/include/php
sudo rm -rf /usr/lib/php
</pre>
</li>
<li>გადმოწეროთ <a href="http://www.apachefriends.org/download.php?xampp-macosx-0.7.4.dmg">XAMPP ის ბოლო ვერსია</a> და დააინსტალირეთ;</li>
<li>გადმოწერეთ <a href="http://www.apachefriends.org/download.php?xampp-macosx-0.7.4-dev.tar.gz">XAMPP &#8211; ის დეველოპერ პაკეტი</a> ნებისმიერ ადგილას, შედით შესაბამის კატალოგში და დააინსტალირეთ შემდეგი ბრძანებით:<br />
</p>
<pre>
sudo tar xvfpz xampp-macosx-0.7.4-dev.tar.gz -C /Applications/xampp
</pre>
</li>
<li>გადმოწერეთ <a href="http://www.php.net/releases/">PHP 5.2.6 &#8211; ის დისტრიბუტივი</a> და გახსენით არქივი ნებისმიერ მისამართზე, მაგ:<br />
</p>
<pre>
/Users/iosebdzmanashvili/Documents/PHP/php-5.2.6
</pre>
</li>
<li>გაუშვით XAMPP, შექმენით ნებისმიერი PHP ფაილი და გამობეჭდეთ phpinfo.
<p>მიღებული რეზულტატიდან დააკოპირეთ და შეინახეთ კონფიგურაციის პარამეტრები, ეს ნაბიჯი აუცილებელია არსებული კონფიგურაციის შესანარჩუნებლად. ორიგინალი დაახლოვებით გამოიყურება ასე:</p>
<p></p>
<pre style="overflow: auto;">
./configure --prefix=/Applications/xampp/xamppfiles --program-suffix=-5.2.6 --libdir=/Applications/xampp/xamppfiles/lib/php/php5 --includedir=/Applications/xampp/xamppfiles/include/php/php5 --with-apxs2=/Applications/xampp/xamppfiles/bin/apxs --with-config-file-path=/Applications/xampp/etc --with-mysql=/Applications/xampp/xamppfiles --disable-debug --enable-bcmath --enable-calendar --enable-ctype --enable-dbase --enable-discard-path --enable-exif --enable-filepro --enable-force-cgi-redirect --enable-ftp --enable-gd-imgstrttf --enable-gd-native-ttf --with-ttf --enable-magic-quotes --enable-memory-limit --enable-safe-mode --enable-shmop --enable-sigchild --enable-sysvsem --enable-sysvshm --enable-track-vars --enable-trans-sid --enable-wddx --enable-yp --with-ftp --with-ncurses=/Applications/xampp/xamppfiles --with-gdbm=/Applications/xampp/xamppfiles --with-jpeg-dir=/Applications/xampp/xamppfiles --with-png-dir=/Applications/xampp/xamppfiles --with-freetype-dir=/Applications/xampp/xamppfiles --without-xpm --with-zlib=yes --with-zlib-dir=/Applications/xampp/xamppfiles --with-openssl=/Applications/xampp/xamppfiles --with-expat-dir=/Applications/xampp/xamppfiles --enable-xslt=/Applications/xampp/xamppfiles --with-xsl=/Applications/xampp/xamppfiles --with-dom=/Applications/xampp/xamppfiles --with-ldap=/Applications/xampp/xamppfiles --with-gd=/Applications/xampp/xamppfiles --with-mysql-sock=/Applications/xampp/xamppfiles/var/mysql/mysql.sock --with-mcrypt=/Applications/xampp/xamppfiles --with-mhash=/Applications/xampp/xamppfiles --enable-sockets --with-curl=/Applications/xampp/xamppfiles --enable-mbregex --enable-zend-multibyte --with-zip=/Applications/xampp/xamppfiles --enable-exif --with-sqlite --with-libxml-dir=/Applications/xampp/xamppfiles --enable-soap --enable-pcntl --enable-dbx --with-mysqli=/Applications/xampp/xamppfiles/bin/mysql_config --with-bz2=/Applications/xampp/xamppfiles --with-ming=shared,/Applications/xampp/xamppfiles --with-pear=/Applications/xampp/xamppfiles/lib/php/pear --with-mssql=/Applications/xampp/xamppfiles --with-imap-dir=/Applications/xampp/xamppfiles --with-imap=/Applications/xampp/xamppfiles --enable-mbstring=all,/usr --with-gettext=/Applications/xampp/xamppfiles --with-pdo-mysql=/Applications/xampp/xamppfiles
</pre>
</li>
</ol>
<p>ახლა იწყება ყველაზე საინტერესო და არასასიამოვნო პროცესი რომლის გარკვევაზეც არცთუ ცოტა დრო დამეხარჯა:</p>
<ol>
<li>გახსენით ფაილი:<br />
</p>
<pre>
/Users/iosebdzmanashvili/Documents/PHP/php-5.2.6/ext/tidy/tidy.c
</pre>
<p>მოძებნეთ გახსნილ ფაილში <strong>#include &#8220;tidy.h&#8221;</strong> და გადაიტანეთ იგი ფაილის დასაწყისში.</p>
</li>
<li>
<strong>tidy</strong> &#8211; ს <strong>xampp</strong> &#8211; ში დასაკოპირებლად ტერმინალში აკრიფეთ შემდეგი ბრძანება:<br />
</p>
<pre style="overflow: auto;">
sudo ditto /usr/include/tidy /Applications/xampp/xamppfiles/include
</pre>
<p>ეს პროცედურა მნიშნველოვანია რადგან PHP &#8211; სთან არსებული კონფლიქტის გამო საჭიროა tidy &#8211; ს ფაილებში ცვლილების შეტანა, ხოლო XAMPP &#8211; ში tidy არ დევს.
</li>
<li>
ახლად დაკოპირებული კატალოგიდან გახსენით ფაილი:<br />
</p>
<pre style="overflow: auto;">
/Applications/xampp/xamppfiles/include/tidy/platform.h
</pre>
<p>და 526 &#8211; ე ხაზიდან 531 ხაზის ჩათვლით არსებული კოდი:<br />
</p>
<pre style="overflow: auto;">
#if !defined(HPUX_OS) &#038;&#038; !defined(CYGWIN_OS) &#038;&#038; !defined(MAC_OS_X) &#038;&#038; !defined(BE_OS) &#038;&#038; !defined(SOLARIS_OS) &#038;&#038; !defined(BSD_BASED_OS) &#038;&#038; !defined(OSF_OS) &#038;&#038; !defined(IRIX_OS) &#038;&#038; !defined(AIX_OS) &#038;&#038; !defined(LINUX_OS)
typedef unsigned int uint;
#endif
#if defined(HPUX_OS) || defined(CYGWIN_OS) || defined(MAC_OS) || defined(BSD_BASED_OS) || defined(_WIN32)
typedef unsigned long ulong;
#endif
</pre>
<p>ჩაანაცვლეთ შემდეგი კოდით რათა თავიდან ავირიდოთ PHP &#8211; სთან არათავსებადობის პრობლემა:<br />
</p>
<pre style="overflow: auto;">
#if !defined(HPUX_OS) &#038;&#038; !defined(CYGWIN_OS) &#038;&#038; !defined(MAC_OS_X) &#038;&#038; !defined(BE_OS) &#038;&#038; !defined(SOLARIS_OS) &#038;&#038; !defined(BSD_BASED_OS) &#038;&#038; !defined(OSF_OS) &#038;&#038; !defined(IRIX_OS) &#038;&#038; !defined(AIX_OS) &#038;&#038; !defined(LINUX_OS)
#undef uint; /* avoid conflict with PHP */
typedef unsigned int uint;
#endif
#if defined(HPUX_OS) || defined(CYGWIN_OS) || defined(MAC_OS) || defined(BSD_BASED_OS) || defined(_WIN32)
#undef ulong; /* avoid conflict with PHP */
typedef unsigned long ulong;
#endif
</pre>
</li>
<li>
შენახულ PHP &#8211; ს კონფიგურაციას დაამატეთ შემდეგი ორი პარამეტრი.</p>
<p>იმ შემთხვევაში <strong>iconv</strong> არ არის თქვენს კონფიგურაციაში, საჭიროა მისი ცხადად მითითება, წინააღმდეგ შემთხვევაში კომპილაცია წარუმატებელი იქნება:<br />
</p>
<pre>
--with-iconv=/Applications/xampp/xamppfiles
</pre>
<p>ასევე მიუთითეთ <strong>tidy</strong> &#8211; ს გასააქტიურებლად საჭირო პარამეტრი:<br />
</p>
<pre>
--with-tidy=/Applications/xampp/xamppfiles
</pre>
</li>
<li>
კონფიგურაციის პარამეტრების მომზადების შემდეგ ტერმინალიდან გადადით PHP &#8211; ს დისტრიბუტივის კატალოგში:<br />
</p>
<pre>
cd /Users/iosebdzmanashvili/Documents/PHP/php-5.2.6
</pre>
<p>და ტერმინალში შეასრულეთ შემდეგი ბრძანება:<br />
</p>
<pre style="overflow: auto;">
./configure --prefix=/Applications/xampp/xamppfiles --program-suffix=-5.2.6 --libdir=/Applications/xampp/xamppfiles/lib/php/php5 --includedir=/Applications/xampp/xamppfiles/include/php/php5 --with-apxs2=/Applications/xampp/xamppfiles/bin/apxs --with-config-file-path=/Applications/xampp/etc --with-mysql=/Applications/xampp/xamppfiles --disable-debug --enable-bcmath --enable-calendar --enable-ctype --enable-dbase --enable-discard-path --enable-exif --enable-filepro --enable-force-cgi-redirect --enable-ftp --enable-gd-imgstrttf --enable-gd-native-ttf --with-ttf --enable-magic-quotes --enable-memory-limit --enable-safe-mode --enable-shmop --enable-sigchild --enable-sysvsem --enable-sysvshm --enable-track-vars --enable-trans-sid --enable-wddx --enable-yp --with-ftp --with-ncurses=/Applications/xampp/xamppfiles --with-gdbm=/Applications/xampp/xamppfiles --with-jpeg-dir=/Applications/xampp/xamppfiles --with-png-dir=/Applications/xampp/xamppfiles --with-freetype-dir=/Applications/xampp/xamppfiles --without-xpm --with-zlib=yes --with-zlib-dir=/Applications/xampp/xamppfiles --with-openssl=/Applications/xampp/xamppfiles --with-expat-dir=/Applications/xampp/xamppfiles --enable-xslt=/Applications/xampp/xamppfiles --with-xsl=/Applications/xampp/xamppfiles --with-dom=/Applications/xampp/xamppfiles --with-ldap=/Applications/xampp/xamppfiles --with-gd=/Applications/xampp/xamppfiles --with-mysql-sock=/Applications/xampp/xamppfiles/var/mysql/mysql.sock --with-mcrypt=/Applications/xampp/xamppfiles --with-mhash=/Applications/xampp/xamppfiles --enable-sockets --with-curl=/Applications/xampp/xamppfiles --enable-mbregex --enable-zend-multibyte --with-zip=/Applications/xampp/xamppfiles --enable-exif --with-sqlite --with-libxml-dir=/Applications/xampp/xamppfiles --enable-soap --enable-pcntl --enable-dbx --with-mysqli=/Applications/xampp/xamppfiles/bin/mysql_config --with-bz2=/Applications/xampp/xamppfiles --with-ming=shared,/Applications/xampp/xamppfiles --with-pear=/Applications/xampp/xamppfiles/lib/php/pear --with-mssql=/Applications/xampp/xamppfiles --with-imap-dir=/Applications/xampp/xamppfiles --with-imap=/Applications/xampp/xamppfiles --enable-mbstring=all,/usr --with-gettext=/Applications/xampp/xamppfiles --with-pdo-mysql=/Applications/xampp/xamppfiles --with-iconv=/Applications/xampp/xamppfiles --with-tidy=/Applications/xampp/xamppfiles
</pre>
</li>
<li>
./configure ოპერაციის დასრულების შემდეგ ტერმინალში აკრიფეთ შემდეგი სამი ბრძანება:<br />
<br />
პროცესის დასრულების შემდეგ:</p>
<pre style="overflow: hidden;">
make clean //გაუგებრობების თავიდან ასაცილებლად
make //აქ შეგიძლიათ ყავა მოიმზადოთ, სიგარეტი მოწიოთ და კურიერს უყუროთ <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />
sudo make install
</pre>
</li>
</ol>
<p>გილოცავთ! ინსტალაცია დასრულებულია <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  გადატვირთეთ Apache და განაგრძეთ მუშაობა <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>P.S.<br />
ფაილების მისამართებში გამოყენებული მომხმარებელის სახელი &#8220;iosebdzmanashvili&#8221; უნდა შეცვალოთ თქვენი მომხმარებლის სახელით <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/mac-os-x-xampp-tidy-installation-for-php-5-2-6/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>ქართველი პროგრამისტები მსოფლიო ჩემიპიონატის ფინალში!</title>
		<link>http://www.code.ge/posts/%e1%83%a5%e1%83%90%e1%83%a0%e1%83%97%e1%83%95%e1%83%94%e1%83%9a%e1%83%98-%e1%83%9e%e1%83%a0%e1%83%9d%e1%83%92%e1%83%a0%e1%83%90%e1%83%9b%e1%83%98%e1%83%a1%e1%83%a2%e1%83%94%e1%83%91%e1%83%98</link>
		<comments>http://www.code.ge/posts/%e1%83%a5%e1%83%90%e1%83%a0%e1%83%97%e1%83%95%e1%83%94%e1%83%9a%e1%83%98-%e1%83%9e%e1%83%a0%e1%83%9d%e1%83%92%e1%83%a0%e1%83%90%e1%83%9b%e1%83%98%e1%83%a1%e1%83%a2%e1%83%94%e1%83%91%e1%83%98#comments</comments>
		<pubDate>Tue, 02 Dec 2008 08:00:29 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=152</guid>
		<description><![CDATA[ტექნოლოგიების სფეროსა და საქართველოს შორის იმდენად სპეციფიური კავშირია რომ ძნელია რაიმემ გაგახაროს ან ინტერესი გაგიღვიძოს   მაგრამ ახალგაზრდა თაობა აშკარად მუხლჩაუხრელად შრომობს და უკვე მნიშნველოვან წარმატებებსაც აღწევენ. მაშ ასე, ქართველი პროგრამისტები კერძოდ კი:
Tbilisi SU 1 (Bogdanov, Jimsheleishvili, Lekveishvili)
მსოფლიო ჩემპიონატის ფინალში არიან რომელიც 2009 წლის აპრილში ჩატარდება შვედეთის ქალაქ სტოკჰოლმში.
ვულოცავ გუნდის ყველა წევრს და მთელი [...]]]></description>
			<content:encoded><![CDATA[<p>ტექნოლოგიების სფეროსა და საქართველოს შორის იმდენად სპეციფიური კავშირია რომ ძნელია რაიმემ გაგახაროს ან ინტერესი გაგიღვიძოს <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  მაგრამ ახალგაზრდა თაობა აშკარად მუხლჩაუხრელად შრომობს და უკვე მნიშნველოვან წარმატებებსაც აღწევენ. მაშ ასე, ქართველი პროგრამისტები კერძოდ კი:</p>
<blockquote><p>Tbilisi SU 1 (Bogdanov, Jimsheleishvili, Lekveishvili)</p></blockquote>
<p>მსოფლიო ჩემპიონატის ფინალში არიან რომელიც 2009 წლის აპრილში ჩატარდება შვედეთის ქალაქ სტოკჰოლმში.</p>
<p>ვულოცავ გუნდის ყველა წევრს და მთელი გულით ვგულშემატკივრობ <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Update:</strong><br />
დეტალები შეგიძლიათ იხილოთ <a href="http://www.giolekva.com/2008/12/acm-icpc-0809-semifinal.html">გიორგი ლეკვეიშვილის ბლოგზე</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/%e1%83%a5%e1%83%90%e1%83%a0%e1%83%97%e1%83%95%e1%83%94%e1%83%9a%e1%83%98-%e1%83%9e%e1%83%a0%e1%83%9d%e1%83%92%e1%83%a0%e1%83%90%e1%83%9b%e1%83%98%e1%83%a1%e1%83%a2%e1%83%94%e1%83%91%e1%83%98/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Google Trip</title>
		<link>http://www.code.ge/posts/google-trip</link>
		<comments>http://www.code.ge/posts/google-trip#comments</comments>
		<pubDate>Sat, 25 Oct 2008 11:27:46 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=149</guid>
		<description><![CDATA[მოკლედ დღეს გამთენიისას დავბრუნდი კრაკოვიდან, სადაც გუგლს ვსტუმრობდი. სტუმრობის მიზეზი ზედმეტად საქმიანი და მოკლე ვადებში გაწერილი იყო ასე რომ ბევრი რამ რასაც ვგეგმავდი ვერ მოვასწარი. 
ვინც არ იცის მათთვის: სექტემბრის დასაწყისში CV გავუგზავნე გუგლს რაზეც გამომეხმაურნენ, სატელეფონო ინტერვიუ დამინიშნეს და დაახლოვებით 10 დღეში დამიკავშირდნენ. სატელეფონო ინტერვიუ ძალიან საინტერესო იყო, დეივი, ინჟინერი ნიუ იუორკიდან ძალიან გახსნილი, [...]]]></description>
			<content:encoded><![CDATA[<p>მოკლედ დღეს გამთენიისას დავბრუნდი კრაკოვიდან, სადაც გუგლს ვსტუმრობდი. სტუმრობის მიზეზი ზედმეტად საქმიანი და მოკლე ვადებში გაწერილი იყო ასე რომ ბევრი რამ რასაც ვგეგმავდი ვერ მოვასწარი. </p>
<p>ვინც არ იცის მათთვის: სექტემბრის დასაწყისში CV გავუგზავნე გუგლს რაზეც გამომეხმაურნენ, სატელეფონო ინტერვიუ დამინიშნეს და დაახლოვებით 10 დღეში დამიკავშირდნენ. სატელეფონო ინტერვიუ ძალიან საინტერესო იყო, დეივი, ინჟინერი ნიუ იუორკიდან ძალიან გახსნილი, მხიარული და ენაწყლიანი პიროვნება აღმოჩნდა <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  დაახლოვებით 50 წუთიანი ტექნიკური ინტერვიუს შემდეგ მითხრა რომ მეც შემეძლო შეკითხვების დასმა. ჩემს შეკითხვებს ამომწურავად და ხალისით უპასუხა <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ბოლოს დავემშვიდობეთ ერთმანეთს და მითხრა, რომ, ამ ინტერვიუს შესახებ დაწერდა ანგარიშს და ერთი კვირის განმავლობაში პასუხს შემატყობინებდნენ&#8230; მეორე საღამოს დამირეკეს&#8230; უშუალოდ პოლონეთის, კრაკოვის ოფისიდან და გამესაუბრნენ. საბოლოო ჯამში შემომთავაზეს ე.წ. face to face ინტერვიუზე ჩასვლა გუგლის ოფიში. რა თქმა უნდა ხარჯები მთლიანად გუგლმა აიღო თავის თავზე. <span id="more-149"></span></p>
<p>მოკლედ აღარ დავწვრილმანდები მოსაწვევების, ბილეთების და ვიზის აღების გაწელილი პროცედურების აღწერით და პირდაპირ გადავალ საქმეზე <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>გუშინწინ ჩავედი ულამაზეს ქალაქ <a href="http://www.facebook.com/album.php?aid=39665&#038;l=ae84f&#038;id=635896389">კრაკოვში</a> სადაც მდებარეობს გუგლის ოფისი. დავბინავდი სასტუმროში რომელიც გუგლის ოფისიდან სულ რაღაც სამი წუთის სავალზე იყო ფეხით. დავისვენე და მოვემზადე მეორე დღისთვის. დილით ადრე ავდექი და გევეშურე გუგლის ოფისისკენ. მოკლედ როგორც იქნა შევაბიჯე მისტიური გუგლის ოფისში სადაც ძალიან გულღიად დამხვდნენ და მიმიღეს <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  გარკვეული აუცილებელი პროცედურების გავლის შემდეგ მითხრეს რომ ნახევარი საათი უნდა მომეცადა და მეც განვთავსდი ერთერთ სავარძელში. </p>
<p>პირველი რაც მეცა თვალში ეს იყოს ფეხშიშველი თანამშრომლები <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  მართლა, ყოველგვარი გადაჭარბების გარეშე&#8230; ზოგი ჩვეულებრივ სახლის ფლოსტებშიც დადიოდა(მოგვიანებით ერთერთი ინტერვიუერი ზუსტად მსგავს ფორმაში წარსდგა ჩემს წინაშე). ასევე სანამ ვიცდიდი ჩემმა კოორდინატორმა, ვიოლეტამ, ვიღაცას დაუძახა და გასართობ დარბაზში ერთი ხელი მაგიდის ჩოგბურთის თამაშიც მოასწრეს&#8230; </p>
<p>მოკლედ ზუსტად ნახევარ საათში დამიძახა აქოშინებულმა ვიოლეტამ და დაიწყო ექვს საათიანი მარათონი, რომელიც საღამომდე გაგრძელდებოდა <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  რა შემიძლია გითხრათ ამ ინტერვიუებზე? პირველ რიგში ჩემდა გასაოცრად ყველა ინტერვიუ ძალიან რეალური იყო, არავითარი უცნაური ან სულელური შეკითხვები.. ყველა შეკითხვა აბსოლუტურად ჩამოყალიბებული და კონკრეტული იყო.</p>
<p>მაშ ასე, ინტერვიუ პირველი:</p>
<p>ინტერვიუერი 40 წლამდე პიროვნებამ(როგორც აღმოჩნდა უზარმაზარი გამოცდილებისა და ცოდნის მქონე) ღიმილით წარმიდგინა თავისი თავი და მთხოვა ჩემს შესახებ მომეყოლა რაიმე <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  მეც მოვუყევი&#8230; შემდგომ გადავიდა საქმეზე და დამისვა ამოცანა და მთხოვა მეპოვა გამოსავალი და ამეღწერა ალგორითმი&#8230; მომიწია დაფასთან დგომა და ჩემი მოსაზრებების გადმოცემა <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  საერთო ჯამში როგორც ჩანს კმაყოფილი დარჩა და თავადაც განავრცო თემა ჩემს მიერ ჩამოყალიბებული გადაწყვეტის საფუძველზე.</p>
<p>შემდეგ მაგიდაზე დადო ანდროიდი იგივე G1 და მკითხა თუ ვიცოდი მის შესახებ რაიმე? ცოტა რამ ვიცოდი და ვუთხარი ამის შესახებ&#8230; შემდეგ მკითხა iphone უფრო მომწონს თუ ანდროიდი? ვუთხარი ჩემი მოსაზრებები აიფონის სასარგებლოდ <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  და ჩაეცინა და უეცრად აიფონის sdk &#8211; ზე დამისვა შეკითხვა(სივიში მეწერა ამის შესახებ და ლოგიკური შეკითხვა იყო). მაქსიმალურად ამომწურავად ვუპასუხე. როგოც შევატყვე ამ პასუხითაც კმაყოფილი დარჩა. შემდგომ სიტყვა ჩამომიგდო ვებ სერვისებზე და შედარებით ვრცლად მოგვიწია კამათმა ამ თემაზე&#8230; დაახლოვებით 20 წუთი. საბოლოო ჯამში პირველი ინტერვიუს დრო ამოიწურა, ხელი ჩამოვართვით ერთმანეთს და დავემშვიდობეთ <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>ინტერვიუ მეორე:</p>
<p>მეორე ინტერვიუზე ორი ინტერვიუერი მყავდა, დაახლოვებით ჩემი ასაკის ბიჭი და შედარებით ახალგაზრდა პუტკუნა გოგონა <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>ამ ინტერვიუზეც მომიწია ვებ სერვისებზე საუბარმა განსაკუთრებით აქცენტირებული იყო REST რასაც ყოველგვარი გადაჭარბების გარეშე ეფექტურად გავართვი თავი. ბრაუზერებს შორის არათავსებადობაზე გარკვეული მასტერ კლასი ჩავუტარე, რატომ მკითხეს ამის შესახებ არ ვიცი მაგრამ აშკარად დავადუმე&#8230;  შემდგომ უეცრად თითქოს შური იძიაო მომიბრუნდა ერთერთი და რაღაცა დამიხატა დაფაზე და აბა გრაფების თეორიაო <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  ნუ გამომდინარე იქედან რომ გრაფების თეორია არ ვიცი წავბორძიკდი თუმცა გარკვეული მსჯელობის შემდეგ ლოგიკური პასუხი მოვძებნე და მთლად უპასუხოდ არ დამიტოვებია შეკითხვა. </p>
<p>შემდეგ ვისაუბრეთ ვებ აპლიკაციებში გამოყენებად პატერნებზე, ფრონტ კონტროლერი, პეიჯ კონტროლერი და ა.შ ესეც საკმაოდ მარტივად გადავატარე. და ინტერვიუს დრო კვლავ ამოიწურა. დამემშვიდობნენ ღიმილით და დაიწყო შემდეგი ჩემის აზრით ყველაზე დინამიური და რთული ინეტერვიუ&#8230; </p>
<p>ინტერვიუ მესამე:</p>
<p>შემოვიდა დაახლოვებით 35 წლამდე მხიარული და ენაწყლიანი ინჟინერი. გაცნობისა და მოკლე შესავლის შემდეგ პირდაპირ გადავიდა საქმეზე. დამისვა კონკრეტული ამოცანა, და მკითხა როგორ გადავწყვეტდი? დაახლოვებით 5 წუთში დავასრულე ჩემს მიერ არჩეული აპლიკაციის დიზაინის ახსნა, შეაქო არჩევანი და ლოგიკურად გააგრძელა იგივე თემა სხვა დამატებით დეტალებზე ჩაძიებით. მინდა ვთქვა წარმატებით გავიარეთ ეს ნაწილიც. </p>
<p>შემდეგ გადავიდა კონკრეტულ ტექნოლოგიებზე, კერძოდ კი იჯეიბი2 &#8211; სა და ჰიბერნეიტს შორის შედარება გამაკეთებინა. მალევე მოვრჩით ამ თემას და უეცად გადავიდა ჯ2ეე &#8211; სა ჯედიბისის ლანძღვაზე. გაასწორა მიწასთან რეალციური მონაცემთა ბაზები და ა.შ. ამის მიზეზად მოიყვანა ამ ტექნოლოგიური კომპონენტების ცუდად მასშტაბირების უნარი. და შემდეგ მკითხა მე რას ვფიქრობდი იგივე თემაზე? შეძლებისდაგვარად ვუთხარი ჩემი პასუხი და ისიც მაქსიმალურად ჩამეძია <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  მოკლედ ეს საკითხიც გავიარეთ და უცბად მომიჯდა გვერდზე ფურცელი და პასტა მომცა რასაც მოაყოლა განცხადება რომ უნდა დამეწერა კოდი ფურცელზე და მას უნდა ეყურებინა <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  დამისვა რაღაც უსაძაგლესი ამოცნა მრავალნაკადური პროგრამირების შესახებ, სიმართლე ითქვას ამოცანა ვერც თავიდან გავიგე, ვერც შუაში და ვერც პოსტ ფაქტუმ როდესაც უბრალოდ ინტერესის გამო ვთხოვე ახსნა <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  ანუ სერიოზულად გამახოხა მაგ ამოცანით <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  მაგრამ ეგ არაფერიო უბრალოდ მაინტერესებდა ეგეთ რამეები საერთოდ გიკეთებია თუ არა როდესმეო&#8230; ეს ინტერვიუც დასრულდა&#8230; </p>
<p>ინტერვიუ მეოთხე:</p>
<p>წინა ინტერვიუს დასრულებამდე, ოთახში შემოვიდა ახალგაზრდა ბიჭი რომელიც მანამდე დილით გავიცანი, სასწრაფოდ შეგვაწყვეტინა ინტერვიუ. მომკიდა ხელი და სადღაც გამაქანა თან რუსულად ქაქანებდა გაუჩერებლად <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  სანამ გონს მოვედი თავი ამოვყავით კრაკოვის ცენტრალურ მოედანზე ერთ ერთ &#8220;ზავედენიაში&#8221; დაახლოვებით ერთი საათი გავატარეთ იქ სადაც ჩემმა თანმხლებმა შინაურულად მომიგვარა და უპრობლემოდ დამტყუა დამატებითი ინფორმაცია ჩემს შესახებ, ჩემი ცოდნისა და გამოცდილების შესახებ და ჩემი გუგლისადმი დამოკიდებულების შესახებ&#8230; ასევე გაარკვია ჩემი ოჯახური მდგომარეობა. მოკლედ თავიდან ვერ მივხვდი მაგრამ ვიეჭვე რომ ესეც ინტერვიუ იყო, რაც მოგვიანებით დადასტურდა <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>ინტერვიუ მეხუთე:</p>
<p>ამჯერად ბელორუსიელი მათემატიკოსის მსხვერპლი გავხდი. მიუხედავად იმისა რომ მათემატიკა არ ვიცი მაგ ერთ საათსაც წარმატებით გავუძელი და ჩემის აზრით ერთერთი ყველაზე საინტერესო ინტერვიუ იყო. საბოლოოდ ყველაფერი დამთავრდა იმით რომ რაღაც უცნაური პლოტერი გამოვიგონეთ დავაპროგრამეთ და ავამუშავეთ(რა თქმა უნდა თეორიულად) <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  ეს ახალგაზრდაც ღიმილით დამემშვიდობა და წავიდა.. </p>
<p>ინტერვიუ მეექვსე:</p>
<p>ეს ინტერვიუ ყოვლად არასაინტერესო იყო ჩემთვის&#8230; ორი გოგონა რომლებიც ე.წ. ფრონტ ენდ ინჟინრებად წარმომიდნენ საკმაოდ სუსტები აღმოჩნდნენ.. ამ ბოლო ინტერვიუზე სრულად ვაკონტროლებდი ორივეს და ყოველგვარი გადაჭარბების გარეშე მე თვითონ მიმყავდა ინტერვიუ იმ მიმართულებით რაც უფრო საინტერესოდ მიმაჩნდა&#8230; ბევრ საკითხზე საკმაოდ დეტალური განმარტებების გაკეთება მომიწია იმიტომ რომ უაზროდ მეკამათებოდა ერთერთი(შესაძლებელია სპეციალურადაც, თუმცა არ ვიცი). ბოლოს კი ძალიან უცნაური რამ გააკეთეს, ჯავა &#8211; ზე კლასის დაწერა მომთხოვეს რომელიც გარკვეული გამოსახულებების მანიპულაციის საშუალებას მისცემდა მათ და ექნებოდა ორნაირი ქცევის უნარი: 1) შეასრულებდა გამოსახულებას და დააბრუნებდა შედეგს; 2) ამ გამოსახულებას ეკრანზე გამოსაბეჭდ სახეს მისცემდა; ეს ამოცანა დაახლოვებით ხუთ წუთში გადავჭერი და ამით დასრულდა ინტერვიუ..</p>
<p>ამ ინტერვიუების შემდეგ, მითხრეს რომ რვავე ინტერვიუერმა უნდა დაწეროს თავისი ანგარიში ხოლო შემდგომ უკვე სხვებმა გადაწყვიტონ ჩემთან გასაუბრების შედეგი. მოკლედ პასუხი უახლოვეს ორ კვირაში მეცოდინება.</p>
<p>შემდეგ, გუგლის ოფისიდან პირდაპირ აეროპორტში გავიქეცი რადგან უკვე მაგვიანდებოდა და დავბრუნდი სამშობლოში <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>ასე დასრულდა ჩემი ხანმოკლე მაგრამ ძალიან საინტერესო ვიზიტი გუგლთან <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  იმედია ამ მონათხრობიდან თქვენთვის საინტერესოს იპოვით <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>P.S.<br />
სურათების გადაღების ნება არ დამრთეს <img src='http://www.code.ge/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  სამწუხაროდ ასეთი უცნაური წესი აქვთ&#8230; მაინც მოვახერხე რამდენიმეს გადაღება მაგრამ მთხოვეს რომ არ გავავრცელო ინტერნეტის მეშვეობით&#8230; ამიტომ იძულებული ვარ თავი შევიკავო მათი აგ დადებისგან&#8230; </p>
<p><strong>Update:</strong> <a href="http://www.facebook.com/album.php?aid=39665&#038;l=ae84f&#038;id=635896389">კრაკოვის სურათები</a></p>
<p><strong>Update:</strong></p>
<div style="background-color: rgb(255, 254, 235); border: 1px solid #999; margin: 8px; padding: 4px;">
დამირეკეს გუგლიდან და სამწუხაროდ უარი მითხრეს&#8230; მიზეზი? low level ინჟინერი გვჭირდება ამ ეტაპზე უფროო <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>მოკლედ ამჯერად ვერ გავუძელი სათანადოდ გამოცდას, თუმცა გული არ მწყდება&#8230; ნებისმიერ შემთხვევაში უზარმაზარი გამოცდილება იყო ჩემთვის. რაზეც არცერთი წამით არ ვნანობ და ჩემს კარიერაში ერთერთ უმნიშნველოვანეს მოგონებად დარჩება ყოველთვის <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>რიგი თქვენზეა B-)
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/google-trip/feed</wfw:commentRss>
		<slash:comments>53</slash:comments>
		</item>
		<item>
		<title>jQuery &#8211; მორიგი დიდი აღიარება 2</title>
		<link>http://www.code.ge/posts/jquery-%e1%83%9b%e1%83%9d%e1%83%a0%e1%83%98%e1%83%92%e1%83%98-%e1%83%93%e1%83%98%e1%83%93%e1%83%98-%e1%83%90%e1%83%a6%e1%83%98%e1%83%90%e1%83%a0%e1%83%94%e1%83%91%e1%83%90-2</link>
		<comments>http://www.code.ge/posts/jquery-%e1%83%9b%e1%83%9d%e1%83%a0%e1%83%98%e1%83%92%e1%83%98-%e1%83%93%e1%83%98%e1%83%93%e1%83%98-%e1%83%90%e1%83%a6%e1%83%98%e1%83%90%e1%83%a0%e1%83%94%e1%83%91%e1%83%90-2#comments</comments>
		<pubDate>Mon, 29 Sep 2008 05:59:23 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=148</guid>
		<description><![CDATA[თითქმის ერთი წელი გავიდა მას შემდეგ რაც jQuery &#8211; ს დიდ აღიარებაზე დავპოსტე. ამ JavaScript ბიბლიოთეკას ჩემი ადვოკატობა ნამდვილად არ ესაჭიროება, მაგრამ, ამჯერად მისი აღიარების ძალიან მნიშვნელოვან ფაქტს აქვს ადგილი და არ შემიძლია არ დავწერო   
jQuery &#8211; ს ოფიციალურ ბლოგზე ბოლო პოსტი ამ ღირსშესანიშნავ მოვლენას ეძღვნება: jQuery, Microsoft, and Nokia
Microsoft თავის ცნობილ ASP.NET [...]]]></description>
			<content:encoded><![CDATA[<p>თითქმის ერთი წელი გავიდა მას შემდეგ რაც <a href="http://www.code.ge/javascript/jquery-მორიგი-დიდი-აღიარება">jQuery &#8211; ს დიდ აღიარებაზე დავპოსტე</a>. ამ JavaScript ბიბლიოთეკას ჩემი ადვოკატობა ნამდვილად არ ესაჭიროება, მაგრამ, ამჯერად მისი აღიარების ძალიან მნიშვნელოვან ფაქტს აქვს ადგილი და არ შემიძლია არ დავწერო <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<p>jQuery &#8211; ს ოფიციალურ ბლოგზე ბოლო პოსტი ამ ღირსშესანიშნავ მოვლენას ეძღვნება: <a href="http://jquery.com/blog/2008/09/28/jquery-microsoft-nokia/">jQuery, Microsoft, and Nokia</a></p>
<p>Microsoft თავის ცნობილ <a href="http://www.asp.net/ajax/">ASP.NET Ajax</a> ფრეიმვორკს სწორედ jQuery &#8211; თი გააფართოვებს და იგი გავრცელდება ვიჟუალ სტუდიოსთან ერთად. Nokia კი თავის <a href="http://www.s60.com/life/thisiss60/s60indetail/technologiesandfeatures/webruntime">Web Run-Time</a> &#8211; ს გაამდიდრებს ამ ბიბლიოთეკით.</p>
<p>ასევე ამ თემას ეხება და ძალიან საინტერესოა GWTQuery(jQuery &#8211; ის მსგავსი იმპლემენტაცია) რომელიც GWT &#8211; ს ბოლო რელიზის პრეზენტაციის დროს აშკარად აქცენტირებული იყო <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>მანამდე რომ YUI &#8211; შიც დაამატეს ე.წ &#8220;query selector&#8221; &#8211; ის იმპლემენტაცია მაგაზე აღარაფერს ვამბობ&#8230; მთავარი ერთია, რომ ის მიდგომა რომელიც შეიმუშავა ჯონ რეზიგმა, დომინანტი აღმოჩნდა დღევანდელ JavaScript ბიბლიოთეკების გადატვირთულ ბაზარზე. არადა როგორ მწარედ მახსოვს რამდენჯერ მიკამათია მწარედ როგორც .Net &#8211; ის, ასევე GWT &#8211; სა და YUI &#8211; ს თაყვანისმცემლებთან jQuery &#8211; ის უპირატესობაზე&#8230; მაგრამ უშედეგოდ <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  თუმცა როგორც იტყვიან აღდგომა და ხვალეო, დრომ ყველაფერი დაამტკიცა და თავის ადგილზე დააყენა&#8230; </p>
<p>Long Live jQuery <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/jquery-%e1%83%9b%e1%83%9d%e1%83%a0%e1%83%98%e1%83%92%e1%83%98-%e1%83%93%e1%83%98%e1%83%93%e1%83%98-%e1%83%90%e1%83%a6%e1%83%98%e1%83%90%e1%83%a0%e1%83%94%e1%83%91%e1%83%90-2/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>PHP 5.3 alpha1 &#8211; ცვლილებები ენაში</title>
		<link>http://www.code.ge/posts/php-53-alpha1-%e1%83%aa%e1%83%95%e1%83%9a%e1%83%98%e1%83%9a%e1%83%94%e1%83%91%e1%83%94%e1%83%91%e1%83%98-%e1%83%94%e1%83%9c%e1%83%90%e1%83%a8%e1%83%98</link>
		<comments>http://www.code.ge/posts/php-53-alpha1-%e1%83%aa%e1%83%95%e1%83%9a%e1%83%98%e1%83%9a%e1%83%94%e1%83%91%e1%83%94%e1%83%91%e1%83%98-%e1%83%94%e1%83%9c%e1%83%90%e1%83%a8%e1%83%98#comments</comments>
		<pubDate>Thu, 28 Aug 2008 13:14:14 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=147</guid>
		<description><![CDATA[მაშ ასე, ცხოვრება წინ მიიწევს და რა თქმა უნდა ტექნოლოგიებიც ვითარდება&#8230; აგვისტოს დასაწყისსში გამოჩნდა PHP &#8211; ს ახალი 5.3 ალფა ვერსია რომელშიც ენის უმნიშვნელოვანესი გაუმჯობესებებია შეტანილი. თუმცა ამ ფაქტის შესახებ დაწერა ვერ მოვასწარი&#8230; ჯერ ქალაქში არ ვიყავი, შემდეგ კი ყველასათვის ის ავადსახსენებელი მოვლენები დაიწყო&#8230; 
თუმცა, მიუხედავად ყველაფრისა ცხოვრება გრძელდება და მეც ვცდილობ დავუბრუნდე ჩვეულ რითმს, [...]]]></description>
			<content:encoded><![CDATA[<p>მაშ ასე, ცხოვრება წინ მიიწევს და რა თქმა უნდა ტექნოლოგიებიც ვითარდება&#8230; აგვისტოს დასაწყისსში გამოჩნდა <a href="http://www.php.net/archive/2008.php#id2008-08-01-1">PHP &#8211; ს ახალი 5.3 ალფა ვერსია</a> რომელშიც ენის უმნიშვნელოვანესი გაუმჯობესებებია შეტანილი. თუმცა ამ ფაქტის შესახებ დაწერა ვერ მოვასწარი&#8230; ჯერ ქალაქში არ ვიყავი, შემდეგ კი ყველასათვის ის ავადსახსენებელი მოვლენები დაიწყო&#8230; </p>
<p>თუმცა, მიუხედავად ყველაფრისა ცხოვრება გრძელდება და მეც ვცდილობ დავუბრუნდე ჩვეულ რითმს, რასაც ამ მცირე მიმოხილვით დავიწყებ <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>მიმდინარე წლის დასაწყისში ენდი გუტმანსმა <a href="http://andigutmans.blogspot.com/2008/01/predictions-for-2008.html">გააკეთა გარკვეული პროგნოზები თუ როგორი იქნებოდა ტექნოლოგიუირი 2008 წელი</a> </p>
<p>გარკვეული პერიოდის შემდეგ Google &#8211; ს თანამშროლმელმა და ajaxian.com &#8211; ის რედაქტორმა, Dion Almaer &#8211; მა, დაწერა საპასუხო პოსტი &#8211; <a href="http://almaer.com/blog/andi-gutmans-predicts">Andi Gutmans Predicts</a> &#8211;  ენდის პროგნოზების შესახებ&#8230; რომლის ბოლო აბზაციც თავად PHP &#8211; განვითარებასა და მომავალს ეხება:</p>
<blockquote><p>I wonder what 2008 will be like for PHP, Andi. I have no doubt that it will continue to power a huge number of websites. But, what is PHP doing in 2008 to increase its share in the non-hacker-kiddie crowd? Is the Zend Framework going to compete with Rails and the like? How is PHP going to evolve? I want to be able to do richer DSLs with full open classes and meta-support.</p></blockquote>
<p><span id="more-147"></span></p>
<p>გადაიდგა თუ არა რაიმე ნაბიჯები PHP &#8211; ს განვითარებისთვის? დიახ გადაიდგა, და ჩემის აზრით საკმაოდ მნიშვნელოვანი ნაბიჯები&#8230; ყველა PHP &#8211; ს მომხმარებელმა კარგად იცის თუ რამდენი სასარგებლო ფუნქცია და ბიბლიოთეკა გააჩნია ამ ენას. სწორედ ეს მზამზარეული დეტალები ქმნის პროგრამირების კომფორტს, თუმცა ამ დადებითი დეტალების მიღმა PHP როგორც ენა საკმაოდ შეზღუდულია. მეხუთე ვერსიაში განხორციელებული ნახტომი რომელიც მოიცავდა OOP &#8211; ს საგრძნობ გაუმჯობესებას მაინც არ არის საკმარისი იმისათვის რომ PHP &#8211; სგან უფრო მეტი არ მოვითხოვთ&#8230; </p>
<p>მაშ ასე რა ცვლილებებთან გვაქვს საქმე?</p>
<p><strong>Namespace</strong></p>
<p>ნეიმსპეისები, რომელიც პირველი PHP 5 &#8211; ის ალფა რელიზში იყო და შემდეგ უკვე გაუგებარი მიზეზების გამო რამდენიმე წლით გაქრა&#8230; ეს არის ძალიან, ძალიან სასარგებლო თვისება ენისა კოდის უკეთესი ორგანიზებისათვის. იგივე შესაძლებლობა გვხდება C# &#8211; ში, ანალოგიური სახელით და ასევე Java &#8211; ში პაკეტების სახელით.</p>
<p><strong>Late Static Bindings და __callStatic()</strong></p>
<p>სტატიკური გვიანი დაკავშირება. OOP &#8211; ს მცოდნეთათვის არ არის უცხო გვიანი დაკავშირების(Late Binding) კონცეფცია, და დამეთანხმებით რომ იგი მიეკუთვნება ობიექტზე ორიენტირებული პრინციპების ერთერთ უმნიშვნელოვანეს შესაძლებლობათა რიცხვს. PHP &#8211; ში გვიანი დაკავშირება აქამდე ვრცელდებოდა მხოლოდ ობიექტების იერარქიის კონტექსტში. ამიერიდან ეს უკვე შესაძლებელია სტატიკური მემკვიდრეობის კონტექსტშიც. ჩემის აზრით ენის ეს ახალი შესაძლებლობა ძალიან მნიშვნელოვანია.</p>
<p>ასევე ამ განახლების რიგს მიეუკთვნება ე.წ. ჯადოსნური(magic) <strong>__callStatic</strong> მეთოდის გამოჩენა&#8230; PHP 5 &#8211; ის მცოდნეთათვის არ არის უცხო <strong>__call</strong> ჯადოსნური მეთოდი რომელიც გამოიძახება არ არსებულ მეთოდზე მიმართვის შემთხვევაში, და იგი ძალიან მოქნილი მექანიზმია მსგავსი სიტუაციების კონტროლისათვის. <strong>__call</strong> მეთოდი მასიურად არის გამოყენებული PHP &#8211; ს SOAP გაფართოვებაში. ვისაც გიმუშავიათ ამ გაფართოვებასთან გამოცდილი გექნებათ აღნიშნული მეთოდის სიმძლავრე&#8230; თუმცა აქამდე ეს მეთოდი მხოლოდ ობიექტის კონტექსტში მუშაობდა და სტატიკურ კონტექსტში მისი გამოყენების არანაირი შანსი არ არსებობდა&#8230; ახალი ჯადოსნური <strong>__callStatic</strong> მეთოდით, რომელიც გამოჩნდა ამ განახლებაში უკვე კლასის სტატიკურ კონტექსტსაც გაცილებით უფრო მოქნილსა და სასარგებლოს გახდის.</p>
<p><strong>Lambda functions and closures</strong></p>
<p>ანონიმური ფუნქციები(closures) ეს არის ჩემის აზრით ერთერთი უმნიშვნელოვანესი დამატება ენისათვის, რაც ბევრად უფრო მეტ მოქნილობას შესძენს PHP &#8211; ს. არანაირად არ მეპარება ეჭვი რომ ენის ეს შესაძლებლობა ნებისმიერი გამოცდილი სკრიპტული ენის პროგრამისტის ხელში უმნიშვნელოვანესი ინსტრუმენტი იქნება. განსაკუთრებით სასიხარული ეს შესაძლებლობა იქნება ისეთი პროგრამისტებისათვის ვისაც აქვს JavaScript &#8211; თან ან Python &#8211; თან მუშაობის გამოცდილება.</p>
<p>თუმცა იგივე JavaScript &#8211; ისგან განსხვავებით, არსებობს რამდენიმე ისეთი დეტალი რაც ყურადღებას იმსახურებს&#8230; ეს გამოწვეულია ამ ენებს შორის არსებული სკოუპების იმპლემენტაციის განსხვავების გამო. ანუ PHP &#8211; ს ანონიმური ფუნქციის გარკვეულ სკოუპში აღწერისას ავტომატურად არ უზრუნველყოფს მის მშობელ სკოუპში აღწერილი ცვლადების ხილვადობას. ამისათვის გამოიყენება სპეციალური <strong>use</strong> კონსტრუქცია რომელშიც უნდა მოხდეს საჭირო ცვლადების მითითება:</p>
<pre>
   function replace_in_array ($search, $replacement, $array) {
     $map = function ($text) use ($search, $replacement) {
       if (strpos ($text, $search) > 50) {
         return str_replace ($search, $replacement, $text);
       } else {
         return $text;
       }
     };
     return array_map ($map, $array);
   }
</pre>
<p>ასევე საგულისხმოა კლასებში <strong>_ _invoke</strong> ჯადოსნური მეთოდის გამოჩენა. ეს მეთოდი ე.წ. callable object კონცეფციის ნაწილია. ქვემოთ მოყვანილ კოდში ნაჩვენებია ამ მეთოდის გამოყენების მაგალითი:</p>
<pre>
class Example {
  public function __invoke () {
    echo "Hello World!\n";
  }
}
$foo = new Example;
$foo ();
</pre>
<p>enjoy <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/php-53-alpha1-%e1%83%aa%e1%83%95%e1%83%9a%e1%83%98%e1%83%9a%e1%83%94%e1%83%91%e1%83%94%e1%83%91%e1%83%98-%e1%83%94%e1%83%9c%e1%83%90%e1%83%a8%e1%83%98/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>LinGO &#8211; ინგლისურ/ქართული ლექსიკონი iPhone &#8211; სთვის</title>
		<link>http://www.code.ge/posts/lingo-eng-geo-dictionary-for-iphone</link>
		<comments>http://www.code.ge/posts/lingo-eng-geo-dictionary-for-iphone#comments</comments>
		<pubDate>Tue, 05 Aug 2008 12:15:54 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[LinGEO]]></category>
		<category><![CDATA[LinGO]]></category>
		<category><![CDATA[Objective-C/Cocoa]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=138</guid>
		<description><![CDATA[რამდენიმე დღით ქალაქიდან ვიყავი გასული,  და როგორც იქნა მოვიცალე iPhone SDK  &#8211; სთვის. რამდენიმე დღიანი ექსპერიმენტების შემდეგ პირველი რეალური აპლიკაცია შევქმენი  
ძალიან აზარტული პროცესი აღმოჩნდა iPhone &#8211; სთვის წერა. მართალია iPhone SDK არ იძლევა აპლიკაციების წერის ისეთ კომფორტს როგორც ეს ჩვეულებრივი Mac OS X &#8211; ისთვის წერის დროს გვაქვს, მაგრამ თუ დამიჯერებთ [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://www.code.ge/wp-content/uploads/picture-8.png'><img src="http://www.code.ge/wp-content/uploads/picture-8-158x300.png" alt="" title="LinGO - Search" width="158" height="300" style="float: left; margin: 8px;" /></a>რამდენიმე დღით ქალაქიდან ვიყავი გასული,  და როგორც იქნა მოვიცალე iPhone SDK  &#8211; სთვის. რამდენიმე დღიანი ექსპერიმენტების შემდეგ პირველი რეალური აპლიკაცია შევქმენი <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>ძალიან აზარტული პროცესი აღმოჩნდა iPhone &#8211; სთვის წერა. მართალია iPhone SDK არ იძლევა აპლიკაციების წერის ისეთ კომფორტს როგორც ეს ჩვეულებრივი Mac OS X &#8211; ისთვის წერის დროს გვაქვს, მაგრამ თუ დამიჯერებთ მაინც  საკმაოდ სასიამოვნო პროცესი აღმოჩნდა <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>ამჯერად არ შეგაწყენთ თავს Objective-C &#8211; ს და Cocoa Touch &#8211; ის დეტალებზე საუბრით. თუმცა ეს ძალიან საინტერესო თემაა და იმედია გამოვნახავ დროს და ამ თემის ირგვლივ შეძლებისდაგვარად საინტერესო პოსტებს შემოგთავაზებთ.</p>
<p>რაც შეეხება პროდუქტს იგი ფუნქციონალურად აბსოლუტურად გამართულია, არ აღენიშნება ბაგები და მუშაობს სტაბილურად. უახლოვეს დღეებში, როდესაც ისევ მოვიცლი, აუცილებლად დავდებ მისი ინსტალაციის ინსტრუქციას. </p>
<p>ჯერჯერობით მხოლოდ iPhone &#8211; ს სიმულატორშია გატესტილი, მე კი სამწუახაროდ iPhone &#8211; ზე ოპერაციული სისტემის 1.3 ვერსია მიყენია. iPhone SDK კი მხოლოდ ოპერაციული სისტემის 2.0 ვერსიას ითვალისწინებს <img src='http://www.code.ge/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>ამიტომ როგორც კი შევძლებ ტელეფონზე რეალური ტესტირების ჩატარებას, მაშინათვე ხელმისაწვდომს გავხდი ამ პროდუქტს.</p>
<p>მანამდე კი შეგიძლიათ ეს სურათები დაათვალიეროთ და გამიზიაროთ თქვენი მოსაზრებები <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<a href='http://www.code.ge/posts/lingo-eng-geo-dictionary-for-iphone/picture-1' title='LinGO - Search View'><img width="150" height="150" src="http://www.code.ge/wp-content/uploads/picture-1-150x150.png" class="attachment-thumbnail" alt="" title="LinGO - Search View" /></a>
<a href='http://www.code.ge/posts/lingo-eng-geo-dictionary-for-iphone/picture-2' title='LinGO - Search Result'><img width="150" height="150" src="http://www.code.ge/wp-content/uploads/picture-2-150x150.png" class="attachment-thumbnail" alt="" title="LinGO - Search Result" /></a>
<a href='http://www.code.ge/posts/lingo-eng-geo-dictionary-for-iphone/picture-3' title='LinGO - Detail View'><img width="150" height="150" src="http://www.code.ge/wp-content/uploads/picture-3-150x150.png" class="attachment-thumbnail" alt="" title="LinGO - Detail View" /></a>
<a href='http://www.code.ge/posts/lingo-eng-geo-dictionary-for-iphone/picture-4' title='LinGO - Bookmarks View'><img width="150" height="150" src="http://www.code.ge/wp-content/uploads/picture-4-150x150.png" class="attachment-thumbnail" alt="" title="LinGO - Bookmarks View" /></a>
<a href='http://www.code.ge/posts/lingo-eng-geo-dictionary-for-iphone/picture-5' title='LinGO - Bookmarks Editing View'><img width="150" height="150" src="http://www.code.ge/wp-content/uploads/picture-5-150x150.png" class="attachment-thumbnail" alt="" title="LinGO - Bookmarks Editing View" /></a>
<a href='http://www.code.ge/posts/lingo-eng-geo-dictionary-for-iphone/picture-6' title='LinGO - Bookmark Detail View'><img width="150" height="150" src="http://www.code.ge/wp-content/uploads/picture-6-150x150.png" class="attachment-thumbnail" alt="" title="LinGO - Bookmark Detail View" /></a>
<a href='http://www.code.ge/posts/lingo-eng-geo-dictionary-for-iphone/picture-7' title='LinGO - Bookmark Delete View'><img width="150" height="150" src="http://www.code.ge/wp-content/uploads/picture-7-150x150.png" class="attachment-thumbnail" alt="" title="LinGO - Bookmark Delete View" /></a>
<a href='http://www.code.ge/posts/lingo-eng-geo-dictionary-for-iphone/picture-8' title='LinGO - Search'><img width="150" height="150" src="http://www.code.ge/wp-content/uploads/picture-8-150x150.png" class="attachment-thumbnail" alt="" title="LinGO - Search" /></a>

]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/lingo-eng-geo-dictionary-for-iphone/feed</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>Cuil(a.k.a cool) vs Google Competition</title>
		<link>http://www.code.ge/posts/cuilaka-cool-vs-google-competition</link>
		<comments>http://www.code.ge/posts/cuilaka-cool-vs-google-competition#comments</comments>
		<pubDate>Mon, 28 Jul 2008 12:03:21 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=136</guid>
		<description><![CDATA[ დღეს Techcrunch &#8211; ზე გაჟღერდა ამ უცნაური სახელის მქონე ახალი საძიებო სისტემის შესახებ სახელად Cuil!
ვითომ მართლა გამოუჩნდა კონკურენტი Google &#8211; ს? ჯერჯერობით მართლა ადრეა ამ საკითხზე ლაპარაკი. რადგან შეუძლებელია სულ რაღაც რამდენიმე თვის შექმნილმა, და რამდენიმე საათის გაშვებულმა სისტემამ ასე უეცრად აჯობოს Google &#8211; ს ნაირ მონსტრს.
მაგრამ, როგორც დავად Cuil &#8211; ის (  [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://www.code.ge/wp-content/uploads/picture-10.png'><img src="http://www.code.ge/wp-content/uploads/picture-10.png" alt="" title="picture-10" width="391" height="225" class="alignnone size-full wp-image-137" align="left" style="margin: 12px;"/></a> დღეს <a href="http://www.techcrunch.com/2008/07/27/cuill-launches-a-massive-search-engine/">Techcrunch</a> &#8211; ზე გაჟღერდა ამ უცნაური სახელის მქონე ახალი საძიებო სისტემის შესახებ სახელად <a href="http://www.cuil.com/">Cuil</a>!</p>
<p>ვითომ მართლა გამოუჩნდა კონკურენტი Google &#8211; ს? ჯერჯერობით მართლა ადრეა ამ საკითხზე ლაპარაკი. რადგან შეუძლებელია სულ რაღაც რამდენიმე თვის შექმნილმა, და რამდენიმე საათის გაშვებულმა სისტემამ ასე უეცრად აჯობოს Google &#8211; ს ნაირ მონსტრს.</p>
<p>მაგრამ, როგორც დავად Cuil &#8211; ის ( <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  ) საიტზე წერია:</p>
<blockquote><p>Welcome to Cuil—<strong>the world’s biggest search engine</strong>. The Internet has grown. We think it’s time search did too.</p></blockquote>
<p>ეს არის მსოფლიოს უდიდესი საძიებელი სისტემა&#8230; თუ ცოტა ხანი გაეთამაშებით მას, მიუხედავად სიმპატიურად დალაგებული რეზულტატებისა მას საკმაოდ ბევრი რამ აკლია <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  თუმცა, ზოგადად, რამდენად მნიშვნელოვანია ეს მომენტი?</p>
<p>ჩემი პირადი აზრით და ღრმა რწმენით საჭიროა ისეთ მაღალხარისხიან მონსტრსაც ჰყავდეს კონკურენტი როგორიც არის ყველასათვის კარგად ცნობილი და &#8220;საყვარელი&#8221; Google. ალბათ კონკურენციის შანსები რეალურია რადგან ეს სისტემა სწორედ ექს გუგლერების მიერ არის შექმნილი!</p>
<p><a href="http://www.cuil.com/">Enjoy Cuil</a> B-)</p>
<p><strong>Updated</strong>: <a href="http://www.crunchbase.com/person/anna-patterson">Cuil &#8211; ის ავტორი</a></p>
<p><strong>Updated</strong>: ერთი საინტერესო დეტალი, ეხლა აღმოვაჩინე რომ, თუ რაიმე სიტყვას ან ფრაზას ვერ პოულობს სისტემა, მაქსიმუმ ნახევარ საათში იგივე სიტყვისთვის/ფრაზისთვის უკვე რეზულტატი გვხვდება&#8230; რა პრინციპით და რატომ ხდება ასე უცნობია <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/cuilaka-cool-vs-google-competition/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Beyond REST? Building data services with XMPP</title>
		<link>http://www.code.ge/posts/beyond-rest-building-data-services-with-xmpp</link>
		<comments>http://www.code.ge/posts/beyond-rest-building-data-services-with-xmpp#comments</comments>
		<pubDate>Sun, 27 Jul 2008 15:03:08 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[ReST]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=135</guid>
		<description><![CDATA[ძალიან საინტერესო და დამაინტრიგებელი პრეზენტაცია XMPP &#8211; სა და ReST &#8211; ის შესახებ. 
არ ვიცი რამდენად ხართ დაინტერესებული ვებ სერვისებით და კონკრეტულად ReST &#8211; ით(SOAP Definitely SUCKS), მაგრამ დიდი ენთუზიაზმით განვიხილავდი ამ თემას თქვენთან ერთად   
მერწმუნეთ არ წააგებთ თუ დახარჯავთ დროს და ამ პრეზენტაციას გულდასმით გაეცნობით. შესაძლოა ყველა არ დაეთანხმოს პრეზენტაციის ავტორების დასკვნებს [...]]]></description>
			<content:encoded><![CDATA[<p>ძალიან საინტერესო და დამაინტრიგებელი პრეზენტაცია XMPP &#8211; სა და ReST &#8211; ის შესახებ. </p>
<p>არ ვიცი რამდენად ხართ დაინტერესებული ვებ სერვისებით და კონკრეტულად ReST &#8211; ით(SOAP Definitely SUCKS), მაგრამ დიდი ენთუზიაზმით განვიხილავდი ამ თემას თქვენთან ერთად <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<p><strong>მერწმუნეთ არ წააგებთ თუ დახარჯავთ დროს და ამ პრეზენტაციას გულდასმით გაეცნობით. შესაძლოა ყველა არ დაეთანხმოს პრეზენტაციის ავტორების დასკვნებს და მოსაზრებებს, მაგრამ, ნებისმიერ შემთხვევაში ძალიან საინტერესო ინფორმაციას მიიღებთ.</strong></p>
<p>ასევე გადახედეთ del.icio.us &#8211; ის ავტორის მოსაზრებებს ამ თემაზე: <a href="http://joshua.schachter.org/2008/07/beyond-rest.html">Beyond rest</a></p>
<div>
<div style="width:425px;text-align:left; margin: 0 auto;" id="__ss_525837"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/kellan/beyond-rest?src=embed" title="Beyond REST? Building data services with XMPP">Beyond REST? Building data services with XMPP</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=beyond-rest-1216850203903502-9"/><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=beyond-rest-1216850203903502-9" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">view <a href="http://www.slideshare.net/kellan/beyond-rest?src=embed" title="View Beyond REST? Building data services with XMPP on SlideShare">presentation</a> (tags: <a style="text-decoration:underline;" href="http://slideshare.net/tag/oscon">oscon</a> <a style="text-decoration:underline;" href="http://slideshare.net/tag/jabber">jabber</a> <a style="text-decoration:underline;" href="http://slideshare.net/tag/rest">rest</a> <a style="text-decoration:underline;" href="http://slideshare.net/tag/xmpp">xmpp</a>)</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/beyond-rest-building-data-services-with-xmpp/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>საინტერესო JavaScript ტესტი meebo.com &#8211; ზე</title>
		<link>http://www.code.ge/posts/interesting-javascript-test-at-meeb</link>
		<comments>http://www.code.ge/posts/interesting-javascript-test-at-meeb#comments</comments>
		<pubDate>Wed, 23 Jul 2008 23:28:48 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[IE Sucks]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=134</guid>
		<description><![CDATA[ეხლახანს meebo.com &#8211; ზე შევიარე, და რატომღაც ვაკანსიების განყოფილებას გადავხედე, დამაინტერესა რა პოზიციებზე აქვს ვაკანსიები ამ კომპანიას&#8230; ერთერთი აღმოჩნდა javascript engineer (javascript ninja) და რატომღაც გადავხედე  
პოსტში, ვაკანსიის აღწერის გარდა მითითებულია რამდენიმე JavaScript &#8211; თან დაკავშირებული შეკითხვა, და შევეცადე პასუხები გამეცა, ჩემის აზრით ეს დაგაინტერესებთ:
1. When does div.setAttribute(&#8220;###&#8221;) not equal div.###?
საკმაოდ მარტივი შეკითხვაა რადგან [...]]]></description>
			<content:encoded><![CDATA[<p>ეხლახანს meebo.com &#8211; ზე შევიარე, და რატომღაც ვაკანსიების განყოფილებას გადავხედე, დამაინტერესა რა პოზიციებზე აქვს ვაკანსიები ამ კომპანიას&#8230; ერთერთი აღმოჩნდა <a href="http://www.meebo.com/jobs/javascript/">javascript engineer (javascript ninja)</a> და რატომღაც გადავხედე <img src='http://www.code.ge/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p>პოსტში, ვაკანსიის აღწერის გარდა მითითებულია რამდენიმე JavaScript &#8211; თან დაკავშირებული შეკითხვა, და შევეცადე პასუხები გამეცა, ჩემის აზრით ეს დაგაინტერესებთ<span id="more-134"></span>:</p>
<blockquote><p><strong>1. When does div.setAttribute(&#8220;###&#8221;) not equal div.###?</strong></p></blockquote>
<p>საკმაოდ მარტივი შეკითხვაა რადგან MDC &#8211; ს დოკუმენტაციაში პირდაპირ წერია, რომ, DOM ელემენტს ატრიბუტის შექმნის და მისთვის საწყისი მნიშნველობის მინიჭების აუცილებლობის შემთხვევაში უნდა გამოვიყენოთ el.setAttribute(attName, attValue); მეთოდი. ხოლო ამ ატრიბუტის მნიშვნელობის შემდეგი ცვლილებისათვის უნდა გამოვიყენოთ ელემენტის თვისება, ანუ: el.attName = attValue და არა setAttribute მეთოდი;</p>
<p>ციტატა დოკუმენტაციის გვერდიდან:</p>
<blockquote><p>Using setAttribute() to modify certain attributes, most notably value in XUL and HTML and selected in HTML, works inconsistently, as the attribute specifies the default value. To access or modify the current values, you should use the properties. For example, use elt.value instead of elt.setAttribute(&#8216;value&#8217;, val).</p></blockquote>
<blockquote><p><strong>2. What&#8217;s the difference between these two statements:</strong></p>
<pre>a. var x = 3;
b. x = 3;</pre>
</blockquote>
<p>ეს შეკითხვაც არ მიეკუთვნება რთულ კატეგორიას. var ქივორდის გამოყენება ცვლადის აღწერის წინ მისი სკოუპის(გლობალური, ფუნქციის, კლასის) ფიქსაციისათვის გამოიყენება. ხოლო თუ არარსებულ ცვლადს მივანიჭებთ მნიშვნელობას var &#8211; ის გამოყენების გარეშე, მაშინ ეს ცვლადი გლობალურ კონტექსტში მოხვდება.</p>
<blockquote><p><strong>3. What&#8217;s the difference between:</strong></p>
<pre>a. !!(obj1 &#038;&#038; obj2)
b. (obj1 &#038;&#038; obj2)</pre>
</blockquote>
<p>ამ შემთხვევაში ნაჩვენებ ორ გამოსახულებას შორის <strong>მგონი</strong> არანაირი განსხვავება არ უნდა იყოს. <strong>a</strong> ვარიანტში, გამოსახულების წინ მითითებული ორი ძახილის ნიშანი(!!) ნიშნავს შემდეგს: მარჯვენა ძახილის  ნიშანი (obj1 &#038;&#038; obj2) გამოსახულების დაიყვანს boolean ტიპზე და შეცვლის მას საპირისპირო მნიშვნელობით(ანუ თუ გამოსახულების შედეგია false საპირისპირო მნიშვნელობა იქნება true და პირიქით), ხოლო მარცხენა ძახილის ნიშანი კვლავ შეცვლის ამ საპირისპირო მნიშვნელობას შესაბამისად.</p>
<p><strong>a</strong> შემთხვევაში (obj1 &#038;&#038; obj2) გამოსახულება ნებისმიერ შემთხვევაში დააბრუნების boolean ტიპის მნიშნველობას &#038;&#038; &#8211; ის გამო, ხოლო ზემოთ აღწერილი ძახილის ნიშნების გამოყენება საბოლოო ჯამში მაინც იგივე შედეგს მოგვცემს.</p>
<p>რადან b შემთხვევაშიც a &#8211; ს მსგავსად, გამოსახულება აუცილებლად აბრუნებს boolean ტიპის მნიშვნელობას, ეს ნიშნავს იმას რომ ამ ორ გამოსახულებას შორის არანაირი განსხვავება არ არსებობს.</p>
<blockquote><p><strong>4. Write a one-line piece of JavaScript code that concatenates all strings passed into a function:</strong></p>
<pre>function concatenate(/*any number of strings*/) {
    var string = /*your one line here*/
    return string;
}</pre>
</blockquote>
<p>ეს შეკითხვა ძალიან საინტერესოა. პირობა მოითხოვს რომ, concatenate() ფუნქციისათვის გადაცემული ნებისმიერი რაოდენობის სტრიქონული ტიპის პარამეტრის კონკატენაცია მოხდეს ერთი სტრიქონი კოდით. JavaScript &#8211; ში ფუნქციის გამოძახების დროს, მას შეგვიძლია გადავცეთ ნებისმიერი რაოდენობის პარამეტრი. ფუნქციისათვის გადაცემული ყველა პარამეტრი ინახება <strong>arguments</strong> ობიექტში ჩამონათვალის სახით. ერთი შეხედვით arguments ობიექტი მასივს წააგავს, მაგრამ სინამდვილეში იგი ნამდვილი მასივი არ არის. გამომდინარე აქედან,  არგუმენტების გაერთიანებას Array ობიექტის join() მეთოდის გამოყენებით ვერ შევძლებთ&#8230; რადგან arguments ობიექტს Array ობიექტის მეთოდები არ გააჩნია.</p>
<p>ამისათვის მოგვიწევს მსგავსი კოდის დაწერა:</p>
<pre>function concatenate() {
    var string = Array.prototype.join.call(arguments);
    return string;
}

alert(concatenate('s1', 's2', 's3', 's4'));</pre>
<p>გამოსავალი მდგომარეობს ფუნქციის <strong>call</strong> მეთოდის გამოყენებაში(იხ. <a href="http://www.code.ge/javascript/javascript-wtf-vol-1">პოსტი call და apply მეთოდების შესახებ</a>). </p>
<p>პირველ რიგში Array ობიექტის join მეთოდს მივმართავთ prototype თვისების მეშვეობით. ხოლო შემდეგ ვიძახებთ ფუნქციის call მეთოდს, რომელსაც პირველ პარამეტრად გადაეცემა კონტექსტი. ამიტომ join() მეთოდის შესრულება მოხდება უშუალოდ arguments ობიექტის კონტექსტში, რაც თავის მხრივ join() მეთოდს წვდომას მისცემს arguments ობიექტის ყველა თვისებაზე. გამომდინარე იქედან რომ, arguments ობიექტი არის იტერირებადი, და მას გააჩნია length თვისება(რომელიც ასევე გააჩნია Array ობიექტს), join() მეთოდს ეძლევა იმის საშუალება რომ arguments ობიექტის ელემენტები დააჯგუფოს. შედეგად მივიღებთ ასეთ &#8220;s1,s2,s3,s4&#8243; კონკატენირებულ სტრიქონს.</p>
<blockquote><p><strong>5. What do these two examples have in common?</strong></p>
<p><strong>Example 1:</strong></p>
<pre>var obj = document.getElementById('adiv');
document.getElementById('adiv').ptr = obj;</pre>
<p><strong>Example 2:</strong></p>
<pre>function assignClick() {
    var el = document.createElement('div');
    function handleClick() {
        el.innerHTML = 'clicked!';
    }
    el.attachEvent("onclick", handleClick);
}</pre>
</blockquote>
<p>ხო, ამ შეკითხვამ ცოტა არ იყოს დამაბნია, და არ ვიცი რამდენად სწორად მივხვდი. თუ თქვენს მოსაზრებებს მომაშველებთ ძალიან გამახარებთ <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>რამდენადაც მე ვვარაუდობ, პირველ მაგალითში DOM ელემენტის .ptr თვისებას უბრალოდ ვანიჭებთ obj ობიექტს.</p>
<p><del datetime="2008-07-27T19:56:55+00:00">მეორე მაგალითშიც იგივესთან უნდა გვქონდეს საქმე, რადგან attachEvent არის ივენთებთან მუშაობის IE &#8211; ს მოდელი რომელიც არცერთ სხვა ბრაუზერში არ გვხვდება. ნაჩვენებ კოდსა el.attachEvent(&#8220;onclick&#8221;, handleClick) და el.onclick =  handleClick ამ კოდს შორის კი არანაირი განსხვავება არ არსებობს. W3C მოდელისგან განსხვავებით IE &#8211; ს attachEvent ზუსტად იგივეს აკეთებს რაც ელემენტის თვისებაზე ობიექტის მინიჭებაა(იხ. <a href="http://www.code.ge/javascript/ie-vs-w3c-event-handling">განსხვავება IE და W3C მოდელებს შორის</a>). ამ განსხვავების საფუძველზე ვივარაუდე ეს პასუხი, თუმცა დარწმუნებული ნამდვილად არ ვარ.</del></p>
<p><strong>Update:</strong> სწორი პასუხი იხილეთ კომენტარებში, მთელი წინა(წაშლილი) აბზაცი წარმოადგენს სრულ სისულელეს <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/interesting-javascript-test-at-meeb/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PHP: nl2p(aragraph) vs nl2br</title>
		<link>http://www.code.ge/posts/php-nl2paragraph-vs-nl2br</link>
		<comments>http://www.code.ge/posts/php-nl2paragraph-vs-nl2br#comments</comments>
		<pubDate>Fri, 18 Jul 2008 15:51:49 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[RegExp]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=131</guid>
		<description><![CDATA[როგორ იქცევით ისეთ შემთხვევაში, როდესაც საჭიროა HTML textarea ელემენტიდან მიღებული ტექსტის, HTML დოკუმენტში უცვლელად გამობეჭვდაა საჭირო ანუ ტექსტის ფორმატირების გათვალისწინებით?
ამ შემთხვევაში, ტექსტის აბზაცებად ფორმატირებას ვგულისხმობ, სადაც აბზაცების გამოყოფად იგულისხმება ახალი სტრიქონის სიმბოლო.
მაგალითად ასეთი ტექსტი:

ეს არის ჩვეულებრივი აბზაცი.

ეს არის შემდეგი აბზაცი...

და კიდევ ერთი აბზაცი..

ამ შემთხვევაში ტექსტის გამოსაბეჭდად გამოვიყენე &#60;pre&#62; ტეგი, რომელიც ტექსტს ახალი სტრიქონის სიმბოლოების გათვალისწინებით [...]]]></description>
			<content:encoded><![CDATA[<p>როგორ იქცევით ისეთ შემთხვევაში, როდესაც საჭიროა HTML textarea ელემენტიდან მიღებული ტექსტის, HTML დოკუმენტში უცვლელად გამობეჭვდაა საჭირო ანუ ტექსტის ფორმატირების გათვალისწინებით?</p>
<p>ამ შემთხვევაში, ტექსტის აბზაცებად ფორმატირებას ვგულისხმობ, სადაც აბზაცების გამოყოფად იგულისხმება ახალი სტრიქონის სიმბოლო.</p>
<p>მაგალითად ასეთი ტექსტი:</p>
<pre>
ეს არის ჩვეულებრივი აბზაცი.

ეს არის შემდეგი აბზაცი...

და კიდევ ერთი აბზაცი..
</pre>
<p>ამ შემთხვევაში ტექსტის გამოსაბეჭდად გამოვიყენე &lt;pre&gt; ტეგი, რომელიც ტექსტს ახალი სტრიქონის სიმბოლოების გათვალისწინებით ბეჭდავს და არ უკარგავს მას ფორმატირებას. თუმცა, &lt;pre&gt; სრულიად გამოუსადეგარია ბლოგ პოსტის ან ამ ბლოგის მომხმარებლების მიერ დაპოსტილი კომენტარების გამოსატანად.</p>
<p>PHP &#8211; ს გააჩნია ფუნქცია სახელად <strong>nl2br</strong> რომელსაც ყოველი ახალი სტრიქონის სიმბოლო გადაჰყავს &lt;br /&gt; ტეგში, თუმცა არც ეს არის დიდი ხეირი რადგან,<br />
როგორც HTML სპეციფიკაცია გვეუბნება, აბზაცების ფორმატირებისათვის უნდა გამოვიყენოთ &lt;p&gt; ტეგი, თუმცა PHP &#8211; ს ასეთი ფუნქცია არ გააჩნია.</p>
<p>მარტივი რეგულარული გამოსახულების დახმარებით მივიღე ასეთი ფუნქცია, რომელიც აღწერილ პრობლემას მარტივად და სწრაფად აგვარებს:</p>
<div class="codecolorer-container php blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">function</span> nl2p<span style="color: #009900;">&#40;</span><span style="color: #000088;">$input</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <a href="http://www.php.net/preg_replace"><span style="color: #990000;">preg_replace</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'~^\s*(.*?)\s*$~smx'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'&lt;p&gt;$1&lt;/p&gt;'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$input</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>თუ ამ ფუნქციას გამოვიყენებთ ზემოთ მოყვანილი ტექსტის დასამუშავებლად, მივიღებთ ასეთ შედეგს:</p>
<pre>
&lt;p&gt;ეს არის ჩვეულებრივი აბზაცი.&lt;/p&gt;
&lt;p&gt;ეს არის შემდეგი აბზაცი...&lt;/p&gt;
&lt;p&gt;და კიდევ ერთი აბზაცი..&lt;/p&gt;
</pre>
<p>აღსანიშნავია რომ, ეს ფუნქცია იგნორირებას უკეთებს ერთმანეთის მიყოლებით აკრეფილ ახალი სტრიქონის სიმბოლოებს.</p>
<p>როგორ მუშაობს თავად რეგულარული გამოსახულება:</p>
<pre>
$regex = '~
    ^            # 1) შევამოწმოთ სტრიქონის დასაწყისი
    \s*          # 2) ნებისმიერი რაოდენობის უხილავი სიმბოლო
    (.*?)        # 3) ნებისმიერი რაოდენობის ნებისმიერი სიმბოლო
    \s*          # 4) ნებისმიერი რაოდენობის უხილავი სიმბოლო
    $            # 5) შევამოწმოთ სტრიქონის დასასრული
~smx'            # 6) smx - გამოსახულების მოდიფიკატორები
</pre>
<p>ბრჩხილებში მოქცეული გამოსახულების მესამე პუნქტის მეშვეობით ვინახავთ ჩვენთვის საჭირო ტექსტს, იმისათვის რომ მოგვიანებით შევძლოთ მისი გამოყენება, გამოსახულების დანარჩენი ნაწილი კი უბრალოდ ტექსტის შემოწმებისათვის არის საჭირო.</p>
<p>თავად გამოსახულებაზე უფრო საინტერესო მოცემულ შემთხვევაში არის, გამოყენებული რეგულარული გამოსახულების მოდიფიკატორები <strong>s</strong> და <strong>m</strong>.</p>
<p><strong>.</strong> &#8211; წერტილი, რეგულარულ გამოსახულებაში ნიშნავს ნებისმიერ სიმბოლოს ახალი სტრიქონის სიმბოლოს გარდა. ხოლო <strong>s</strong> მოდიფიკატორი გამოსახულების ბოლოს წერტილს უცვლის მნიშვნელობას და იგი უკვე სხვა ნებისმიერ სიმბოლოსთან ერთად ახალი სტრიქონის სიმბოლოებსაც მოიცავს. </p>
<p><strong>m</strong> მოდიფიკატორი თავის მხრივ ცვლის ტექსტის დასაწყისისა(^) და ტექსტის დასასრულის($) სიმბოლოების ქცევას. რაც ნიშნავს იმას, რომ, ეს სიმბოლოები მიუთითებენ არა მთლიანი ტექსტის დასაწყისსა და დასასრულს არამედ ახალი ხაზის სიმბოლოთი გამოყოფილ სტრიქონის დასაწყისსა და დასასრულს.</p>
<p>გამოსახულებაში ასევე მნიშვნელოვანია მეორე და მეოთხე პუნქტები. გამოსახულება უბრალოდ აღნიშნავს ნებისმიერი რაოდენობის უხილავ სიმბოლოს(უხილავ სიმბოლოებს განეკუთვნება ახალი სტრიქონის სიმბოლოც). გამოსახულების ეს ნაწილია საჭიროა იმისათვის რომ ტექსტში არსებულ ერთზე მეტ ახალი სტრიქონის სიმბოლოებს გავუკეთოთ იგნორეირება რათა არ მივიღოთ ცარიელი &lt;p&gt;p&lt;/p&gt; ტეგების კომბინაცია. </p>
<p>სულ ეს არის და ეს <img src='http://www.code.ge/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/php-nl2paragraph-vs-nl2br/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>RoR &#8211; ის მამა PHP &#8211; აქებს?</title>
		<link>http://www.code.ge/posts/the-immediacy-of-php</link>
		<comments>http://www.code.ge/posts/the-immediacy-of-php#comments</comments>
		<pubDate>Tue, 15 Jul 2008 00:35:56 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=130</guid>
		<description><![CDATA[ძალიან უცნაური, მოულოდნელი და საინტერესო ბლოგ პოსტი(მადლობა გიორგის) წავიკითხე&#8230; 
ბევრი წერით არ შეგაწყენთ თავს. უბრალოდ ვიტყვი რომ ეს პოსტი ეკუთვნის თავად David Heinemeier Hansson ცნობილი ფრეიმვორკის Ruby on Rails &#8211; ის ავტორს!
The immediacy of PHP
I&#8217;ve been writing a little bit of PHP again today. That platform has really received an unfair reputation. For the small [...]]]></description>
			<content:encoded><![CDATA[<p>ძალიან უცნაური, მოულოდნელი და საინტერესო ბლოგ პოსტი(მადლობა გიორგის) წავიკითხე&#8230; </p>
<p>ბევრი წერით არ შეგაწყენთ თავს. უბრალოდ ვიტყვი რომ ეს პოსტი ეკუთვნის თავად <strong>David Heinemeier Hansson</strong> ცნობილი ფრეიმვორკის <strong>Ruby on Rails</strong> &#8211; ის ავტორს!</p>
<p><a href="http://www.loudthinking.com/posts/23-the-immediacy-of-php">The immediacy of PHP</a></p>
<blockquote><p>I&#8217;ve been writing a little bit of PHP again today. That platform has really received an 