<?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>Eimantas Vaičiūnas &#187; it</title>
	<atom:link href="http://vaiciunas.info/category/it/feed" rel="self" type="application/rss+xml" />
	<link>http://vaiciunas.info</link>
	<description>diskretus gyvenimas</description>
	<lastBuildDate>Sat, 20 Nov 2010 17:44:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>The ABC of Driven Development &#8211; I</title>
		<link>http://vaiciunas.info/294-the-abc-of-driven-development-part-1</link>
		<comments>http://vaiciunas.info/294-the-abc-of-driven-development-part-1#comments</comments>
		<pubDate>Thu, 27 May 2010 06:09:46 +0000</pubDate>
		<dc:creator>eimantas</dc:creator>
				<category><![CDATA[it]]></category>
		<category><![CDATA[driven-development]]></category>
		<category><![CDATA[humor]]></category>

		<guid isPermaLink="false">http://vaiciunas.info/?p=294</guid>
		<description><![CDATA[Benaršydamas stackoverflow užtaikiau ant programavimo humoro klausimo, kuriame buvo keletas &#8220;ramstytų programavimo&#8221; (#{foo} driven development) metodologijų. Paladžiojęs po internetą surinkai visą abėcėlę. Iš karto visko neduosiu. Vienok tai vis dar WIP. ADD &#8211; (Asshole Driven Development) metodologija naudojama komandose kuriose pats nekompetetiškiausias programuotojas turi paskutinio sprendimo privilegiją. Iš gyvenimo nuogirdų taip būną dažnai, kai vyr.programuotojais [...]]]></description>
			<content:encoded><![CDATA[<p>Benaršydamas <a href="http://stackoverflow.com/" title="Stack Overflow">stackoverflow</a> užtaikiau ant programavimo humoro klausimo, kuriame buvo keletas &#8220;ramstytų programavimo&#8221; (#{foo} driven development) metodologijų. Paladžiojęs po internetą surinkai visą abėcėlę. Iš karto visko neduosiu. Vienok tai vis dar <abbr title="Work In Progress">WIP</abbr>.</p>
<ul>
<li>ADD &#8211; (Asshole Driven Development) metodologija naudojama komandose kuriose pats nekompetetiškiausias programuotojas turi paskutinio sprendimo privilegiją. Iš gyvenimo nuogirdų taip būną dažnai, kai vyr.programuotojais arba team-lead:ais tampa šviežūs IT specialybės bakalaurai.</li>
<li>BDD &#8211; (Bug Driven Development) Tinka cinikams. Vet kuris &#8220;feature&#8221; yra traktuojamas kaip &#8220;bug&#8221;.</li>
<li>CDD &#8211; (Comment Driven Development) pristatytas MSDN tinkle. Procesas, kurio metu iš pradžių yra ieškoma sprendimo tam tikrai problemai internete. Suradus kodo gabalą jis yra įterpiamas į kuriamą programą, kurią iš karto yra bandoma paleisti. Kodui nesusikompiliavus jis visas yra užkomentuojamas ir programa vėl paleidžiama. Po sėkmingo paleidimo kodas yra atkomentuojamas eilutė po eilutės. Ši metodologija yra paremta copy-and-waste bei lazy-debugging technikomis.</li>
<li>CDD &#8211; (Configuration Driven Development). Pasitaiko tarp &#8220;wannabe&#8221; programuotojų. Ypač Java Enterprise aplikacijose, kurio kinfigūraciniai XML failai yra tokie dideli ir sudėtingi, kad paprastas mirtingasis jų redagavimą gali laisvai supainioti su programavimu.</li>
<li>DDD &#8211; (Documentation Driven Development) prieš pradedant programavimą viskas yra dokumentuojama. Naudojama jaunų programuotojų, kurie optimistiškai tiki, kad dokumentacija yra visada galutinė.</li>
<li>EDD &#8211; (Embarassment Driven Development) kai jums riekia pristatinėti produktą, tačiau ne visos esminės funkcijos veikia &#8211; tu (ar tavo komanda, ar komanda, kuriai tu priklausai) naudojate šią techinką tam, kad įmonė neatsidurtu durniaus vietoje per demonstraciją iki kurios liko labai mažai.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://vaiciunas.info/294-the-abc-of-driven-development-part-1/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oh Shit! Ar žinai ant ko sukasi Web2.0?</title>
		<link>http://vaiciunas.info/293-oh-shit-ar-zinai-ant-ko-sukasi-web2-0</link>
		<comments>http://vaiciunas.info/293-oh-shit-ar-zinai-ant-ko-sukasi-web2-0#comments</comments>
		<pubDate>Thu, 20 May 2010 05:58:55 +0000</pubDate>
		<dc:creator>eimantas</dc:creator>
				<category><![CDATA[it]]></category>
		<category><![CDATA[bullshit-bingo]]></category>
		<category><![CDATA[buzz]]></category>
		<category><![CDATA[web2.0]]></category>

		<guid isPermaLink="false">http://vaiciunas.info/?p=293</guid>
		<description><![CDATA[Neperseniausiai suvokiau ant ko sukasi visų web2.0 projektų idėjos. Viskas yra labai paprasta. Praktiškai kaip omleto receptas: paimk mėgstamą ištiktuką padaryk iš jo būdvardį (jis taps domenu) padaryk iš jo veiksmažodį (jis taps esminiu puslapio feature) suprogramuok socialinį tinklą ??? PROFIT Duodu paprastą pavyzdį: Ištiktukas: oh shit! Būdvardis ohshitty (serveriai.lt duomenimis, tik ohshitty.lt yra užimtas) [...]]]></description>
			<content:encoded><![CDATA[<p>Neperseniausiai suvokiau ant ko sukasi visų web2.0 projektų idėjos. Viskas yra labai paprasta. Praktiškai kaip omleto receptas:</p>
<ol>
<li>paimk mėgstamą ištiktuką
</li>
<li>padaryk iš jo būdvardį (jis taps domenu)
</li>
<li>padaryk iš jo veiksmažodį (jis taps esminiu puslapio feature)</li>
<li>suprogramuok socialinį tinklą
</li>
<li>???</li>
<li>PROFIT</li>
</ol>
<p>Duodu paprastą pavyzdį:</p>
<ol>
<li>Ištiktukas: oh shit!</li>
<li>Būdvardis ohshitty (serveriai.lt duomenimis, tik ohshitty.lt yra užimtas)</li>
<li>Veiksmažodis shit-on!</li>
<li>Užtektų paimti ką nors iš github.com</li>
</ol>
<p>5 ir 6 punktų nebeaiškinsiu, nes čia jau turėtum turėti marketingo skyrių. Būtų belenkaip smagu stebėti kiek žmonių norėtų vienas kitą apšikti .) įdomu ar tai skaitytųsi kaip nesantaikos ar neapykantos kurstymas.</p>
<p>Jeigu netiki, pasižiūrėk iki ko daėjo facebook &#8220;poukinimas&#8221; (poke).</p>
]]></content:encoded>
			<wfw:commentRss>http://vaiciunas.info/293-oh-shit-ar-zinai-ant-ko-sukasi-web2-0/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>your command prompt</title>
		<link>http://vaiciunas.info/290-your-command-prompt</link>
		<comments>http://vaiciunas.info/290-your-command-prompt#comments</comments>
		<pubDate>Wed, 05 May 2010 10:06:40 +0000</pubDate>
		<dc:creator>eimantas</dc:creator>
				<category><![CDATA[it]]></category>
		<category><![CDATA[humor]]></category>
		<category><![CDATA[prompt]]></category>
		<category><![CDATA[zsh]]></category>

		<guid isPermaLink="false">http://vaiciunas.info/?p=290</guid>
		<description><![CDATA[Kadangi dabar sėdžiu po zsh (kas yra geriausias dalykas nutikęs nuo atsitiktinai-rastų-perlo-kodo-eilučių-paleidinėjimo-po-root-account:u) nusprendžiau susitinkinti (customize) promptą. Googlinau ir /. radau labai gražų komentarą ta tema:   If your command promt looks like:   C:\&#62; &#8211; You are conservative person. It takes you some time to accept new techology. # &#8211; You are respected by colleagues [...]]]></description>
			<content:encoded><![CDATA[<p>Kadangi dabar sėdžiu po zsh (kas yra geriausias dalykas nutikęs nuo atsitiktinai-rastų-perlo-kodo-eilučių-paleidinėjimo-po-root-account:u) nusprendžiau susitinkinti (customize) promptą. Googlinau ir /. radau labai gražų komentarą ta tema:<br />
 </p>
<blockquote><p>If your command promt looks like:</p>
<ol> </p>
<li><code>C:\&gt;</code> &#8211; You are conservative person. It takes you some time to accept new techology.</li>
<li><code>#</code> &#8211; You are respected by colleagues and feared by enemies.</li>
<li><code>joe@cube.some.com:~/joe[12:35 - Fri Jul 6]&gt;</code> You really like techology, like to learn new things, do not afraid to experiment. You going to move out of parents place soon.</li>
<li><code>cube:/usr/src/kernel&gt;</code> &#8211; With your 20 years of Unix experience you should have no problem finding new job.</li>
<li><code>(Press ^D when you done with fsck)#</code> &#8211;<br />
Difficult times are ahead of you. Do not lose your courage and patience.</li>
</blockquote>
<p>Vat taip vat. O štai ir mano promptas: </p>
<p><code>%n@%m:%2~ %#</code></p>
<p>Kadangi kasdien naudojuosi git, teks išnaudoti zsh dešinio prompto fyčerą naudingai brancho/repos informacijai patalpinti.</p>
]]></content:encoded>
			<wfw:commentRss>http://vaiciunas.info/290-your-command-prompt/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>html5 ir pragaro virtuvės antraštės</title>
		<link>http://vaiciunas.info/289-html5-ir-pragaro-virtuves-antrastes</link>
		<comments>http://vaiciunas.info/289-html5-ir-pragaro-virtuves-antrastes#comments</comments>
		<pubDate>Sun, 21 Mar 2010 13:17:28 +0000</pubDate>
		<dc:creator>eimantas</dc:creator>
				<category><![CDATA[it]]></category>

		<guid isPermaLink="false">http://vaiciunas.info/?p=289</guid>
		<description><![CDATA[Šiek tiek anksčiau suradau tokį džiaugsmą kaip Cufon. Long story short &#8211; pasiimi otf formato šriftą, perleidi per cufon mašinėlę ir gauni js failą, kuris sugeba nupaišyti [beveik] kiekvieną raidę ar simbolį. Rezultatas &#8211; perpiešti teksto fragmentai ten kur nori ir kur reikia (aišku, naudojant unobtrusive js su css selektoriais). Tačiau esant dial-up ryšiui (japp, [...]]]></description>
			<content:encoded><![CDATA[<p>Šiek tiek anksčiau suradau tokį džiaugsmą kaip <a href="http://cufon.shoqolate.com/" title="Cufon - Fonts For The People">Cufon</a>. Long story short  &#8211; pasiimi otf formato šriftą, perleidi per cufon mašinėlę ir gauni js failą, kuris sugeba nupaišyti [beveik] kiekvieną raidę ar simbolį. Rezultatas &#8211; perpiešti teksto fragmentai ten kur nori ir kur reikia (aišku, naudojant unobtrusive js su css selektoriais). Tačiau esant dial-up ryšiui (japp, kaikas jį vis dar naudoja), šitas reikalas užtrunka ir matosi visas perpiešimo procesas. &#8220;Primečiau&#8221; &#8211; Not Cool.</p>
<p>Peržiūrėjau vieną iš WWDC sesijų apie html5 ir WebKit. Sužavėjo. Visiškai. Nutariau paeksperimentuoti pas <a href="http://pragarovirtuve.lt/" title="Pragaro Virtuvės Receptai">pragaro virtuvę</a> (kadangi anksčiau pas ją sukosi cufon kastominio šrifto technika).</p>
<p>Taigi &#8211; <code>@font-face</code>. Rimtas reikalas. Ir įdomus. <a href="http://paulirish.com/2009/bulletproof-font-face-implementation-syntax/" title="Bulletproof @font-face syntax">Čia</a> yra parašyta kaip reikia   viską padaryti tvarkingai (kaip visada &#8211; IE turi gliukų).</p>
<p>Kadangi esu geras &#8482; vebdeveloperis nusprendžiau palaikyti ir senesnes naršykles (kokias gi daugiau gali turėti namų šeimininkės?). Šiaip html5 apskritai yra agreguotas dalykas ir palaiko belenkokių gudžių (goodies), tad atsirado problema &#8220;kaip man sužinoti ar naršyklė palaiko <code>@font-face</code> ar priklauso namų šeimininkei&#8221;. Ilgai neteko gūglinti. Dar vienas įrankis į html5 įrankių paletę &#8211; <a href="http://www.modernizr.com/" title="modernizr">modernizr</a>. Taip pat siūlyčiau paskaityti apie tai, kaip ten veikia visas font-face palaikymas naudojant asinchroniškas užklausas. Aha, ir tu turi turėti teisę turėti teisę platinti bei naudoti proprietarinį šriftą.</p>
<p>Anyways&#8230;</p>
<p>Užsibaigiau su tokiu kodo gabalu, kuris daro ouldskūlinį perpaišymą namų šeimininkių naršyklėms ir naudoja <code>@font-face</code> stilius bleeding-edge fanatikams:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
Modernizr._fontfaceready<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>bool<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>bool<span style="color: #009900;">&#41;</span> 
    getScript<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'cufonizuotas-šriftas.js'</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>
      Cufon.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'čia-eina-visi-css-selektoriai'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      Cufon.<span style="color: #660066;">now</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;">// šitas reikalingas patenkinti IE or smth</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Aišku nepamirškite, kad tai reikia daryti po to, kai visas puslapis užsikrovė. Kadangi esu bleeding-edge fanas &#8211; taip ir nesužinosiu ar šitas dalykas veikia namų šeimininkėms su neįgaliomis naršyklėmis.</p>
<p>Referencui:</p>
<ul>
<li><a href="http://pragarovirtuve.lt/" title="Pragaro Virtuvės Receptai">pragaro virtuvė</a> &#8211; bandomasis triušis</li>
<li><a href="http://cufon.shoqolate.com/generate/" title="fonts for the people">cufon</a> &#8211; fonts for the people</li>
<li><a href="http://www.modernizr.com/" title="modernizr">modernizr</a> &#8211; biblioteka html5 triukams.</li>
<li><a href="http://paulirish.com/2009/bulletproof-font-face-implementation-syntax/" title="bullet proof @font-face implementation">bullet proof @font-face</a> &#8211; kaip TAI reikia daryti teisingai</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://vaiciunas.info/289-html5-ir-pragaro-virtuves-antrastes/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>What&#8217;s still buzzering me</title>
		<link>http://vaiciunas.info/288-whats-still-buzzering-me</link>
		<comments>http://vaiciunas.info/288-whats-still-buzzering-me#comments</comments>
		<pubDate>Wed, 10 Feb 2010 18:45:51 +0000</pubDate>
		<dc:creator>eimantas</dc:creator>
				<category><![CDATA[it]]></category>

		<guid isPermaLink="false">http://vaiciunas.info/288-whats-still-buzzering-me</guid>
		<description><![CDATA[Po dienos naudojimo google buzz, nugaros smegenyse nusisėdėjo keletas minčių. Pirmas dalykas yra tai, kad niekur nerandu jokių google buzz settingų. Taip pat dar neveikia nei nuorodos, nei nuotraukos pridėjimas (bandžiau, bet ko gero man nesigavo). Vienas pažįstamas leido suprasti, kad veikia @foobar stiliaus žinutės, kurios sukuria nuorodą į vartotojo profilį. Dar ramybės neduoda vienas [...]]]></description>
			<content:encoded><![CDATA[<p>Po dienos naudojimo google buzz, nugaros smegenyse nusisėdėjo keletas minčių. Pirmas dalykas yra tai, kad niekur nerandu jokių google buzz settingų. Taip pat dar neveikia nei nuorodos, nei nuotraukos pridėjimas (bandžiau, bet ko gero man nesigavo).</p>
<p>Vienas pažįstamas leido suprasti, kad veikia @foobar stiliaus žinutės, kurios sukuria nuorodą į vartotojo profilį.</p>
<p>Dar ramybės neduoda vienas reikalas &#8211; Google pradeda kurti socialinį tinklą. Buzz. Google taip pat turi savo app engine. Tai dabar ko gero tėra laiko klausimas, kurie iš mano kontaktų pradės auginti morkas, burtis sėkmę ar vakaro sekso pozą. </p>
<p>Tenka pripažinti &#8211; soc tinklai su 3rd party aplikacijomis ir priedais yra praeitų ir, galbūt, šių metų &#8220;web2.0&#8243;. Ir be abejo jeigu google sukels didelį buzz:ą apie savo buzz:ą, tai, ko gero, internete pasirodys belenkiek &#8220;how to create an app to buzz the shit out of your friends&#8221;. Ir stackoverflow persipildys debiliškų klausimų apie python.</p>
<p>Truputį liūdną, kai pagalvoji. Bet nenoriu čia taip neigiamai pri:buzz:inti. Pirmyn į šviesų rytojų!</p>
<p>P.S. Mane jau užvilko derivatyvių žodžių daryba&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://vaiciunas.info/288-whats-still-buzzering-me/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Google Buzz</title>
		<link>http://vaiciunas.info/287-google-buzz</link>
		<comments>http://vaiciunas.info/287-google-buzz#comments</comments>
		<pubDate>Wed, 10 Feb 2010 07:24:08 +0000</pubDate>
		<dc:creator>eimantas</dc:creator>
				<category><![CDATA[it]]></category>

		<guid isPermaLink="false">http://vaiciunas.info/287-google-buzz</guid>
		<description><![CDATA[Vienu sakiniu &#8211; tai yra geriausia, kas galėjo nutikti socialiniame internete per paskutinį dešimtmetį. Google Wave man asmeniškai buvo nesuprastas projektas (nežinau ar tai įtakojo haipo dydis). Tačiau Google Buzz yra kažkas nerealaus! Tai praktiškai ta pati veidaknygė tik be jokių spamų, quizų, akvariumų, fermerių, seksualiai frustruotų paauglių ir dar bala žino ko! Pros: Tik [...]]]></description>
			<content:encoded><![CDATA[<p>Vienu sakiniu &#8211; tai yra geriausia, kas galėjo nutikti socialiniame internete per paskutinį dešimtmetį. Google Wave man asmeniškai buvo nesuprastas projektas (nežinau ar tai įtakojo haipo dydis). Tačiau Google Buzz yra kažkas nerealaus! Tai praktiškai ta pati veidaknygė tik be jokių spamų, quizų, akvariumų, fermerių, seksualiai frustruotų paauglių ir dar bala žino ko!</p>
<p>Pros:</p>
<ul>
<li>Tik man gerai žinomi žmonės yra matomi;</li>
<li>Tik man gerai žinomi žmonės mato mane;</li>
<li>Galima komentuoti įrašus;</li>
<li>Galima įrašus mėgti;</li>
<li>Nėra pakvietimų į &#8220;ląžinamės, kad išsiimsiu  šonkaulius ir užsiiminėsiu auto-onanizmu&#8221; tipo grupes; (F.U. Facebook);</li>
<li>Manęs nepradės sekioti panos su webcam:ais (F.U. Twitter);</li>
<li>Nereikės eiti į jokį kitą puslapį &#8211; viskas yra kartu su paštu;</li>
</ul>
<p>Cons:
<ul>
<li>Neatneša pusryčių į lovą;</li>
</ul>
<p>Sugalvojau ir pravardę: Google /b/. Tam tikros personos žinos, ką aš turiu omenyje ,) Dabar beliko laukti tik google/b/ apps:ams ir dev:api. Nors reiktų pažiūrėti, kad galbūt toks jau kaip ir yra. Aš mat iš karto puoliau rašyti apie savo meilę google/b/, kad net užmiršau pažiūrėti dažniausiai atsakomus klausimus.</p>
<p>So, kaip kažkas jau sakė/rašė: bye bye twitter, bye bye facebook!</p>
]]></content:encoded>
			<wfw:commentRss>http://vaiciunas.info/287-google-buzz/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Python ir NLTK</title>
		<link>http://vaiciunas.info/282-python-ir-nltk</link>
		<comments>http://vaiciunas.info/282-python-ir-nltk#comments</comments>
		<pubDate>Sat, 05 Dec 2009 15:03:41 +0000</pubDate>
		<dc:creator>eimantas</dc:creator>
				<category><![CDATA[it]]></category>
		<category><![CDATA[bigrams]]></category>
		<category><![CDATA[collocations]]></category>
		<category><![CDATA[concordance]]></category>
		<category><![CDATA[corpora]]></category>
		<category><![CDATA[corpus]]></category>
		<category><![CDATA[lexical diversity]]></category>
		<category><![CDATA[nltk]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[vocabulary]]></category>

		<guid isPermaLink="false">http://vaiciunas.info/?p=282</guid>
		<description><![CDATA[Pabuvojau Londone. Labai ++ miestas. Nusipirkau vat šitą knygą. Belenkoks gėris. Tai vat dabar bukmarkinsiuos įdomesnes vietas kaip reference:ą, kadangi pačios knygos tutorialo stilius atrodo idiot-proof and not so challenging. Prie to pačio bus belenkaip smagu pramokti python. Aio, ir dar vienas iš nedaugelio ištikimų skaitytojų/komentuotojų yra python fanas, tad tikiuosi gousous fydbeko iš jo. [...]]]></description>
			<content:encoded><![CDATA[<p>Pabuvojau Londone. Labai ++ miestas. Nusipirkau vat <a title="Natural Language Processing with Python" href="http://www.amazon.com/Natural-Language-Processing-Python-Steve/dp/0596516495">šitą knygą</a>. Belenkoks gėris. Tai vat dabar bukmarkinsiuos įdomesnes vietas kaip reference:ą, kadangi pačios knygos tutorialo stilius atrodo <em>idiot-proof and not so challenging</em>. Prie to pačio bus belenkaip smagu pramokti python. Aio, ir dar <a href="http://www.sandbox.lt/" title="Dalius Dobravolskas">vienas</a> iš nedaugelio ištikimų skaitytojų/komentuotojų yra python fanas, tad tikiuosi <em>gousous fydbeko</em> iš jo.<br />
<span id="more-282"></span></p>
<h3>Terminai</h3>
<dl>
<dt>nltk</dt>
<dd> &#8211; <em>Natural Language ToolKit</em> &#8211; biblioteka su krūva tekstų bei naudingų modulių teksto analizei. Siurbits galima iš <a href="http://www.nltk.org/" title="Natural Language ToolKit">http://www.nltk.org/</a></dd>
<dt>nltk.corpus / corpora</dt>
<dd> &#8211; kategorizuotų tekstų rinkinys įvairiomis temomis (nuo paauglių irc/im pokalbių iki inauguracijos kalbų nuo 18.a pabaigos).</dd>
<dt>nltk.concordance</dt>
<dd> &#8211; žodžių sąrašas kartu su naudojamu kontekstu.</dd>
<dt>vocabulary</dt>
<dd> &#8211; žodynas. Bet ne tas, kurį slėpdavau po pagalve prieš miegą (TŽŽ) ir ne tas, kuriuo naudojasi mokyklose ir kitur. O tas, kurį sudaro vieno iš <em>corpora</em> tekstų nepasikartojančių žodžių rinkinys. <strong>Note:</strong> Švyturys (treidmarkas) == švyturys (pastatas). I.e. skirtingos kapitalizacijos žodžiai yra traktuojami kaip vienas ir tas pats</dd>
<dt>collocations</dt>
<dd> &#8211; žodžių pora, kuri tekste pasikartoja ypatingai dažnai. T.y. dažniau negu žodžių poros elementai atskirai. Svarbi savybė: atsparumas pakeitimui sinonimais: <em>red wine</em> yra collocation, kadangi šio žodžių junginio pakeitimas fraze <em>maroon wine</em> skambėtų be galo keistai.</dd>
<dt>bigrams</dt>
<dd> &#8211; žodžių poros, kurios naudojamos tekste rasti collocations.</dd>
</dl>
<h3>Paprasčiausia teksto analizė</h3>
<p>Tekstas dažniausiai analizuojamas (ne humanitarine prasme) pasitelkiant paprastus statistinius metodus. Pvz dažninį teksto vienetų pasiskirstymą (užmiršau tikslų statistinį terminą, bet angliškai tai skamba kaip &#8220;frequency distribution&#8221;), sąlyginį dažninį teksto vienetų pasiskirstymą (i.e. conditional frequency distribution), įvairiausių teksto vienetų vidurkius bei sumas.</p>
<p>Praktinis pavyzdys iš knygos &#8211; Gutenbergo tekstų analizė. NLTK yra bundlinama kartu su mažu kiekių tekstų iš Gutenbergo projekto (kuriame yra virš 25k nemokamų e-knygų):</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #ff7700;font-weight:bold;">import</span> nltk
<span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #ff7700;font-weight:bold;">from</span> nltk.<span style="color: black;">corpus</span> <span style="color: #ff7700;font-weight:bold;">import</span> gutenberg
<span style="color: #66cc66;">&gt;&gt;&gt;</span> gutenberg.<span style="color: black;">fildids</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: black;">&#91;</span><span style="color: #483d8b;">'austen-emma.txt'</span>, <span style="color: #483d8b;">'austen-persuasion.txt'</span>, <span style="color: #483d8b;">'austen-sense.txt'</span>, ...<span style="color: black;">&#93;</span></pre></div></div>

<p>Pasitelkus paprasčiausius skaičiavimo vidurkius bei sumas galima be didesnio vargo pasakyti tam tikrų tekstų ar jų autorių rašybos ypatybes. Pavyzdys žemiau:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">__future__</span> <span style="color: #ff7700;font-weight:bold;">import</span> division <span style="color: #808080; font-style: italic;"># šito reikia, bear with me</span>
<span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #ff7700;font-weight:bold;">for</span> fileid <span style="color: #ff7700;font-weight:bold;">in</span> gutenberg.<span style="color: black;">fileids</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
...    <span style="color: black;">num_chars</span> = <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>gutenberg.<span style="color: black;">raw</span><span style="color: black;">&#40;</span>fileid<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
...    <span style="color: black;">num_words</span> = <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>gutenberg.<span style="color: black;">words</span><span style="color: black;">&#40;</span>fileid<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
...    <span style="color: black;">num_sents</span> = <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>gutenberg.<span style="color: black;">sents</span><span style="color: black;">&#40;</span>fileid<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
...    <span style="color: black;">num_vocab</span> = <span style="color: #008000;">len</span><span style="color: black;">&#40;</span><span style="color: #008000;">set</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span>w.<span style="color: black;">lower</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">for</span> w <span style="color: #ff7700;font-weight:bold;">in</span> gutenberg.<span style="color: black;">words</span><span style="color: black;">&#40;</span>fileid<span style="color: black;">&#41;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
...    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>num_chars/num_words<span style="color: black;">&#41;</span>, <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>num_words/num_sents<span style="color: black;">&#41;</span>, <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>num_words/num_vocab<span style="color: black;">&#41;</span>, fileid
... 
<span style="color: #ff4500;">4</span> <span style="color: #ff4500;">21</span> <span style="color: #ff4500;">26</span> austen-emma.<span style="color: black;">txt</span>
<span style="color: #ff4500;">4</span> <span style="color: #ff4500;">23</span> <span style="color: #ff4500;">16</span> austen-persuasion.<span style="color: black;">txt</span>
<span style="color: #ff4500;">4</span> <span style="color: #ff4500;">23</span> <span style="color: #ff4500;">22</span> austen-sense.<span style="color: black;">txt</span>
<span style="color: #ff4500;">4</span> <span style="color: #ff4500;">33</span> <span style="color: #ff4500;">79</span> bible-kjv.<span style="color: black;">txt</span>
<span style="color: #ff4500;">4</span> <span style="color: #ff4500;">18</span> <span style="color: #ff4500;">5</span> blake-poems.<span style="color: black;">txt</span>
<span style="color: #ff4500;">4</span> <span style="color: #ff4500;">17</span> <span style="color: #ff4500;">14</span> bryant-stories.<span style="color: black;">txt</span>
<span style="color: #ff4500;">4</span> <span style="color: #ff4500;">17</span> <span style="color: #ff4500;">12</span> burgess-busterbrown.<span style="color: black;">txt</span>
<span style="color: #ff4500;">4</span> <span style="color: #ff4500;">16</span> <span style="color: #ff4500;">12</span> carroll-alice.<span style="color: black;">txt</span>
<span style="color: #ff4500;">4</span> <span style="color: #ff4500;">17</span> <span style="color: #ff4500;">11</span> chesterton-ball.<span style="color: black;">txt</span>
<span style="color: #ff4500;">4</span> <span style="color: #ff4500;">19</span> <span style="color: #ff4500;">11</span> chesterton-brown.<span style="color: black;">txt</span>
<span style="color: #ff4500;">4</span> <span style="color: #ff4500;">16</span> <span style="color: #ff4500;">10</span> chesterton-thursday.<span style="color: black;">txt</span>
<span style="color: #ff4500;">4</span> <span style="color: #ff4500;">17</span> <span style="color: #ff4500;">24</span> edgeworth-parents.<span style="color: black;">txt</span>
<span style="color: #ff4500;">4</span> <span style="color: #ff4500;">24</span> <span style="color: #ff4500;">15</span> melville-moby_dick.<span style="color: black;">txt</span>
<span style="color: #ff4500;">4</span> <span style="color: #ff4500;">52</span> <span style="color: #ff4500;">10</span> milton-paradise.<span style="color: black;">txt</span>
<span style="color: #ff4500;">4</span> <span style="color: #ff4500;">11</span> <span style="color: #ff4500;">8</span> shakespeare-caesar.<span style="color: black;">txt</span>
<span style="color: #ff4500;">4</span> <span style="color: #ff4500;">12</span> <span style="color: #ff4500;">7</span> shakespeare-hamlet.<span style="color: black;">txt</span>
<span style="color: #ff4500;">4</span> <span style="color: #ff4500;">12</span> <span style="color: #ff4500;">6</span> shakespeare-macbeth.<span style="color: black;">txt</span>
<span style="color: #ff4500;">4</span> <span style="color: #ff4500;">35</span> <span style="color: #ff4500;">12</span> whitman-leaves.<span style="color: black;">txt</span></pre></div></div>

<p>Šis kodo gabalas pateikia statistinę informaciją apie gutenbergo tekstus įtrauktus į NLTK biblioteką. Pirmas stulpelis rodo vidutinį žodžio ilgį, antras &#8211; sakinio, o trečias leksikologinį įvairumą (lexical diversity &#8211; kiek kartų vidutiniškai vienas žodis pasikartoja visame tekste). Esminis dalykas į kurį reikėtų atkreipti dėmesį šiame <em>outpute</em> yra tai, kad vidutinis 4 raidžių žodžio ilgis yra anglų kalbos savybė, tuo tarpu vidutinis sakinio ilgis žodžiais yra tam tikro autoriaus atributas (Austen: 21-23, Chesterton: 16-19, Shakespeare: 11-12). Kaip tokiai paprastai matematikai &#8211; pakankamai informatyvu. IMHO.</p>
<h3>Viso teksto analizė</h3>
<p>Viena iš teksto charakteristikų, kurias galime sužinoti be didelių sunkumų &#8211; teksto žodynas (vocabulary). Praktinis pavyzdys &#8211; NLTK biblioteka turi inaugiracinių kalbų rinkinį suskirstytą pagal metus. Galime lengvai pasakyti koks yra visų kalbų žodyno ilgis:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #ff7700;font-weight:bold;">import</span> nltk
<span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #ff7700;font-weight:bold;">from</span> nltk.<span style="color: black;">book</span> <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #66cc66;">*</span>
<span style="color: #66cc66;">&lt;</span>...<span style="color: #66cc66;">&gt;</span>
<span style="color: #66cc66;">&gt;&gt;&gt;</span> vocabulary = <span style="color: #008000;">sorted</span><span style="color: black;">&#40;</span><span style="color: #008000;">set</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span>w <span style="color: #ff7700;font-weight:bold;">for</span> w <span style="color: #ff7700;font-weight:bold;">in</span> text4<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
<span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>vocabulary<span style="color: black;">&#41;</span>
<span style="color: #ff4500;">9754</span></pre></div></div>

<p>Gan neblogai &#8211; beveik 10k žodžių per 200 metų. Bet lengvai galima pasakyti, kad tai nėra tikslus žodynas, kadangi žodis &#8220;american&#8221; ir &#8220;American&#8221; kode aukščiau yra skaičiuojami kaip du skirtingi žodžiai. Pabandom pakoreguoti algoritmą:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #66cc66;">&gt;&gt;&gt;</span> vocabulary = <span style="color: #008000;">sorted</span><span style="color: black;">&#40;</span><span style="color: #008000;">set</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span>w.<span style="color: black;">lower</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">for</span> w <span style="color: #ff7700;font-weight:bold;">in</span> text4<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
<span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>vocabulary<span style="color: black;">&#41;</span>
<span style="color: #ff4500;">9070</span></pre></div></div>

<p>Žodynas sumažėjo beveik 700 žodžių. Gan neblogai. Bet iš esmės galime jį sutrumpinti dar! Kadangi anglų kalboje yra belenkiek žodžių kurie neturi didelės semantinės reikšmės, mes galime juos pramesti naudodami NLTK stopwords sąrašą. Kadangi sąrašų yra keletas (po vieną [beveik] kiekvienai kalbai), teks pasitelkti tik anglų kalbos žodžius:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #ff7700;font-weight:bold;">from</span> nltk.<span style="color: black;">corpus</span> <span style="color: #ff7700;font-weight:bold;">import</span> stopwords
<span style="color: #66cc66;">&gt;&gt;&gt;</span> stopwords = stopwords.<span style="color: black;">words</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'english'</span><span style="color: black;">&#41;</span>
<span style="color: #66cc66;">&gt;&gt;&gt;</span> vocabulary = <span style="color: #008000;">set</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span>w.<span style="color: black;">lower</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">for</span> w <span style="color: #ff7700;font-weight:bold;">in</span> text4 <span style="color: #ff7700;font-weight:bold;">if</span> w.<span style="color: black;">lower</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #ff7700;font-weight:bold;">in</span> stopwords<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
<span style="color: #66cc66;">&gt;&gt;&gt;</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>vocabulary<span style="color: black;">&#41;</span>
<span style="color: #ff4500;">8944</span></pre></div></div>

<p>Kokią išvadą galima padaryti iš tokio teksto analizavimo? Nuo pradinio žodyno kiekio nuėjome pakankamai trumpą kelią ir žiūrint į skaičius galima teigti, kad JAV prezidentai netuščiažodžiavo net per inauguracines kalbas. Esminių žodžių buvo pasakyta per virš 90% visos kalbos. Jeigu pastebėjai, nagrinėdamas inauguracinių kalbų tekstą naudojau <code>text4</code> kintamąjį. Tai vienas iš kintamųjų, kuriuos gauni importuodamas viską iš <code>nltk.book</code> knygos. Beje, dar nepaminėjau nei bigramų (bigrams), nei kolokacijų (collocations). Vienas iš įdomesnių dalykų, tai sužinoti apie ką per 200 metų prišnekėjo JAV prezidentai:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #66cc66;">&gt;&gt;&gt;</span> text4.<span style="color: black;">collocations</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
Building collocations <span style="color: #008000;">list</span>
United States<span style="color: #66cc66;">;</span> fellow citizens<span style="color: #66cc66;">;</span> four years<span style="color: #66cc66;">;</span> years ago<span style="color: #66cc66;">;</span> Federal
Government<span style="color: #66cc66;">;</span> General Government<span style="color: #66cc66;">;</span> American people<span style="color: #66cc66;">;</span> Vice President<span style="color: #66cc66;">;</span> Old
World<span style="color: #66cc66;">;</span> Almighty God<span style="color: #66cc66;">;</span> Fellow citizens<span style="color: #66cc66;">;</span> Chief Magistrate<span style="color: #66cc66;">;</span> Chief Justice<span style="color: #66cc66;">;</span>
God bless<span style="color: #66cc66;">;</span> every citizen<span style="color: #66cc66;">;</span> Indian tribes<span style="color: #66cc66;">;</span> public debt<span style="color: #66cc66;">;</span> one another<span style="color: #66cc66;">;</span>
foreign nations<span style="color: #66cc66;">;</span> political parties</pre></div></div>

<p>Šiam kartui turbūt užteks. Kitą kartą bandysiu bukmarkinti keletą grafikų apie žodžių dažninį pasiskirstymą, kas iš to išeina bei pradėsiu konstruoti repavimo mašiną.</p>
]]></content:encoded>
			<wfw:commentRss>http://vaiciunas.info/282-python-ir-nltk/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Great Hackers</title>
		<link>http://vaiciunas.info/281-great-hackers</link>
		<comments>http://vaiciunas.info/281-great-hackers#comments</comments>
		<pubDate>Wed, 25 Nov 2009 18:42:00 +0000</pubDate>
		<dc:creator>eimantas</dc:creator>
				<category><![CDATA[gyvenimas]]></category>
		<category><![CDATA[it]]></category>
		<category><![CDATA[hackers]]></category>

		<guid isPermaLink="false">http://vaiciunas.info/?p=281</guid>
		<description><![CDATA[Belenkaip afigienas skaitalas: Great Hackers by Paul Graham. Kelios ištraukos tinginiams: Variation in wealth can be a sign of variation in productivity. (In a society of one, they&#8217;re identical.) And that is almost certainly a good thing: if your society has no variation in productivity, it&#8217;s probably not because everyone is Thomas Edison. It&#8217;s probably because [...]]]></description>
			<content:encoded><![CDATA[<p>Belenkaip afigienas skaitalas: <a title="Great Hackers" href="http://www.paulgraham.com/gh.html" target="_blank">Great Hackers by Paul Graham</a>. Kelios ištraukos tinginiams:</p>
<blockquote><p>Variation in wealth can be a sign of variation in productivity. (In a society of one, they&#8217;re identical.) And <em>that</em> is almost certainly a good thing: if your society has no variation in productivity, it&#8217;s probably not because everyone is Thomas Edison. It&#8217;s probably because you have no Thomas Edisons.</p></blockquote>
<p>Arba:</p>
<blockquote><p>I&#8217;ve read that Java has just overtaken Cobol as the most popular language. As a standard, you couldn&#8217;t wish for more. But as a medium of expression, you could do a lot better. Of all the great programmers I can think of, I know of only one who would voluntarily program in Java. And of all the great programmers I can think of who don&#8217;t work for Sun, on Java, I know of zero.</p></blockquote>
<p>Ir ten yra žymiai daugiau tokių perliukų. Praktiškai visas skaitalas toks. Taip pat dugne yra nuoroda į <a href="http://itc.conversationsnetwork.org/shows/detail188.html" target="_blank">audio versija</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://vaiciunas.info/281-great-hackers/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Chrome OS</title>
		<link>http://vaiciunas.info/276-google-chrome-os</link>
		<comments>http://vaiciunas.info/276-google-chrome-os#comments</comments>
		<pubDate>Tue, 24 Nov 2009 05:44:47 +0000</pubDate>
		<dc:creator>eimantas</dc:creator>
				<category><![CDATA[it]]></category>
		<category><![CDATA[chrome os]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://vaiciunas.info/?p=276</guid>
		<description><![CDATA[Peržiūrėjau aš pristatymą. Gražus pristatymas. Tik gaila, kad os gaidiška. Ir gaila, kad tiek daug žmonių ja susižavėjo. Ir tikrai jau, jeigu pradėsi ją naudoti, tai ramia sąžine galėsiu pasakyti: &#8220;all your base are belong to google&#8221;. Niekaip nesuprantu, kam gali atrodyti, kad idėja, statyti os ant 20 metų senumo stateless protokolo, yra gera. Ar šiaip [...]]]></description>
			<content:encoded><![CDATA[<p>Peržiūrėjau aš pristatymą. Gražus pristatymas. Tik gaila, kad os gaidiška. Ir gaila, kad tiek daug žmonių ja susižavėjo. Ir tikrai jau, jeigu pradėsi ją naudoti, tai ramia sąžine galėsiu pasakyti: &#8220;all your base are belong to google&#8221;. Niekaip nesuprantu, kam gali atrodyti, kad idėja, statyti os ant 20 metų senumo <em>stateless</em> protokolo, yra gera. Ar šiaip įvertinama belenkokiu teigiamu žodžiu.</p>
<p>Per paskutinius metus nuo 80:to porto nukėliau vieną iš savo dažniausiai naudojamų paslaugų &#8211; rss. Nesigailiu. Taip pat pamažu pradedu migruoti iš wp-admin į MarsEdit. Taip pat atrodo, kad tikrai nesigailėsiu. Nevisi žmonės suvokia, kad toks yra google verslo modelis. Ir aš tau pasakysiu jų galutinį tikslą &#8211; paslauga, kuri, įkišus tinklo kabelį į gerą vietą, išmatuos tavo kūno temperatūrą, o moterims net gi parodys kelintas mėnuo jos yra nėščios. Awesome, ne? Ir tu vėl galvosi, kad google saves the day!</p>
<p>Nors <a title="nežinau.lt" href="http://www.nezinau.lt/">nežinau.lt</a> ir rašė, kad <a title="orų prognozės" href="http://www.nezinau.lt/apie-prognoziu-pavojus">prognozės yra pavojingas dalykas</a> &#8211; aš vis viena drąsiai prognozuosiu &#8211; nenaudosiu google chrome os! Einu daryti 125&#215;125.</p>
]]></content:encoded>
			<wfw:commentRss>http://vaiciunas.info/276-google-chrome-os/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Web Formų apsauga be CAPTCHA</title>
		<link>http://vaiciunas.info/265-web-formu-apsauga-be-captcha</link>
		<comments>http://vaiciunas.info/265-web-formu-apsauga-be-captcha#comments</comments>
		<pubDate>Fri, 10 Apr 2009 05:48:17 +0000</pubDate>
		<dc:creator>eimantas</dc:creator>
				<category><![CDATA[it]]></category>
		<category><![CDATA[captcha]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://vaiciunas.info/?p=265</guid>
		<description><![CDATA[Spam-botai yra protingos būtybės. Pakankamai protingos, kad galėtų panaudoti OCR bet kokiam captcha atpažinimui. Yep, phpnuke bei phpbb forumuose jau senokai atsiranda spamo įrašų. Taip pat kaip ir blogas.lt. Bet dalykas tas, kad aš čia nerašysiu apie paruoštų sistemų formų apsaugas (tuos pačius phpnuke, phpbb, wordpress, etc.). Tuom turėtų pasirūpinti sistemų programuotojai. Aišku, jeigu jie [...]]]></description>
			<content:encoded><![CDATA[<p>Spam-botai yra <span style="text-decoration: line-through;">protingos</span> būtybės. Pakankamai protingos, kad galėtų panaudoti OCR bet kokiam captcha atpažinimui. Yep, phpnuke bei phpbb forumuose jau senokai atsiranda spamo įrašų. Taip pat kaip ir blogas.lt. Bet dalykas tas, kad aš čia nerašysiu apie paruoštų sistemų formų apsaugas (tuos pačius phpnuke, phpbb, wordpress, etc.). Tuom turėtų pasirūpinti sistemų programuotojai. Aišku, jeigu jie yra kompetetingi. Aš norėčiau pakalbėti apie savų kuriamų projektų apsaugą nuo spamo. Anksčiau ar vėliau tikrai ateis tas laikas, kai į tavo kurtą puslapį atropos spam botas, ras formą jame ir pradės tau siūlyti belenkokį nereikalingą šlamštą. Nelabai apkrauna serverį, labai eikvoja laika ir dar labiau erzina. Sprendimas, iš tiesų, yra be galo paprastas.</p>
<p>Aš taip <em>primečiau</em>, kad norint apsisaugoti nuo spamo ir belenkokio pikto internetinio briedo, kuris siunčiamas per formas, užtektų patikrinti ar &#8220;lankytojas&#8221; naršo per pilnavertę naršyklę ir net nereikėtų tikrinti ar vartotojas yra iš tiesų žmogus. Kaip jau minėjau &#8211; captcha yra lengvai apeinamas, o spręsti matematines lygtis ir atsakinėti į klausimus &#8211; užknisa. Ir aš tikrai nekalbu apie <code>User-Agent</code> http antraštę. Ją juokingai lengva sufabrikuoti.</p>
<p>Spam-botai yra kvailos būtybės. Pakankamai kvailos, kad jas būtų galima apgauti gabaliuku gudraus JavaScript kodo. Aišku, čia prabyla mano kompetencijos trūkumas: nežinau ant kiek spam-botai yra kvaili ir nesupranta JS kodo. Manau, kad visi spam:botai yra parašyti Windows operacinei sistemai (nes Linux ir Mac OS X vartotojų segmentas yra per siauras), tad jeigu programos ir naudoja naršyklę, tai tai yra IE. Dabar keletas scenarijų apsaugoms (warning: programmer slang ahead), kurie yra įgyvendinami naudojant paprastus JS event-handlerius (tingėjau ieškoti lietuviško atitikmens):</p>
<ol>
<li>Raktas &#8211; <code>onsubmit</code> (arba <code>onload</code>) event-handleriui pakišama funkcija, kuri sugeneruoja paslėptą formos elementą (tarkim not_spam_bot=yes). Serverio pusėje užtenka patikrinti ar forma atėjo kartu su šiuo elementu. Jeigu ne &#8211; nepilnavertė naršyklė arba spam-botas!</li>
<li>Siuntimo adresas &#8211; event-handleriams priskiriama funkcija, kuri pakeičia formos siuntimo adresą į teisingą (tuo tarpu pirmąjį galima būtų sukurti tokį, kuris 4fun ™ registruotų spamintus formų siuntimus)</li>
<li>Elementų vardai &#8211; vėl gi &#8211; tiems patiems event-handleriams pakišama funkcija, kuri sutvarko formos elementų vardus.</li>
</ol>
<p>Aišku, įmanomos įvairios šių (ir ne tik) scenarijų kombinacijos. Ir kad dar šiek tiek apsunkinti visą reikalą spam-botams (kurie, galbūt, tiesiog durnai interpretuoja JS kodą) visą JS ant formų reiktų užkabinti nemaišant struktūros ir logikos.</p>
<p>Neišradau rato, bet gal atsiras penas tavo mintims, kuriomis pasidalinsi komentaruose.</p>
]]></content:encoded>
			<wfw:commentRss>http://vaiciunas.info/265-web-formu-apsauga-be-captcha/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

