<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>lescinskas.lt</title>
    <description><![CDATA[Naujausi įrašai]]></description>
    <link>http://lescinskas.lt/lt</link>
    <language>lt</language>
    <item>
      <title>Mobilusis internetas - kurį pasirinkti</title>
      <description><![CDATA[<p>Neseniai turėjau progą išmėginti skirtingus mobiliojo interneto tiekėjus.</p>
<div>Iki tol namuose naudojausi <a href="http://www.vdnet.lt/" target="_blank">VDNet</a> interneto tiekėjo paslaugomis, tačiau <a href="http://www.cgates.lt/" target="_blank">CGates</a> <a href="http://www.ekonomika.lt/naujiena/vdnet-ir-c-gates-susijungimui-zalia-sviesa-4347.html" target="_blank">nupirkus VDNet</a>, sumažėjo kabelinės televizijos kanalų kiekis, o kainos pakilo, todėl nusprendžiau pamėginti naudotis mobiliuoju internetu.</div>
<div>Užbėgant įvykiams už akių - išmėginau daugelį interneto tiekėjų ir vėl grįžau prie CGates (tiesa, tik interneto, bet ne televizijos) siūlomo optinio (FTTB; Fiber to the building) interneto ryšio.&nbsp;</div>
<h2>Mezon</h2>
<div>LRTC teikiama 4G interneto paslauga &bdquo;<a href="http://www.mezon.lt/" target="_blank">Mezon</a>&ldquo; pasirodė geriausia alternatyva įprasto interneto tiekėjams namuose - neribojamas parsisiunčiamų duomenų kiekis, akcentuojamas didelis ryšio greitis, kainos taip pat yra labai padorios ir turėtų gerai konkuruoti su įprasto interneto tiekėjų siūlomomis kainomis.</div>
<div>Taip pat jie siūlo šaunų įrenginį &bdquo;<a href="http://www.mezon.lt/4g_internetas/Rysio_iranga/YZI_marsruto_parinktuvas/" target="_blank">Mezon YZI</a>&ldquo;, kuris sukuria bevielio tinklo (Wi-fi) zoną, prie kurios galima prijungti iki 8 įrenginių (kompiuterių, mobiliųjų telefonų).</div>
<div>Vis dėlto, ryšys labai priklauso nuo vietos mieste, todėl renkantis šį interneto tiekėją reiktų labai atidžiai peržiūrėti tinklo aprėpties žemėlapį. Nors gyvenu netoli Vilniaus centro, mano name internetas veikė lėtai ir nestabiliai, nors darbe ar pačiame miesto centre veikė puikiai.</div>
<div>Taip pat naudojantis &bdquo;Mezon&ldquo; nepavyko tinkamai susikonfigūruoti prisijungimo prie vidinio tinklo (VPN), todėl darbo reikalams negalėjau pilnai naudotis šiuo interneto tiekėju.</div>
<h2>Omnitel (OmniConnect)</h2>
<div>Šios kompanijos marketingas veikia puikiai, tačiau realybėje jų siūlomi interneto sprendimai yra nieko verti. Nors su brangiausiu &bdquo;<a href="http://www.omnitel.lt/internetas" target="_blank">OmniConnect</a>&ldquo; (galbūt šis prekinis ženklas nebenaudojamas?) interneto planu duodamas &bdquo;neribotas&ldquo; duomenų kieis, bet pasiekus 10 GB parsisiunčiamų duomenų kiekį per mėnesį, ryšio sparta sumažinamas iki 120kbps. Skamba kaip apgaulė, bet jie tai vadina &bdquo;<a href="http://www.omnitel.lt/taisykle" target="_blank">Sąžiningo naudojimosi taisykle</a>&ldquo;. Šiais laikais, kuomet tinklalapiai naudoja daug grafinės informacijos, naršyti tokiu greičiu yra visiškai neįmanoma, o 10GB išnaudojama atliekant tik būtiniausias užduotis, jau nekalbant apie didelį duomenų kiekio parsisiuntimą (pvz.: intensyvesnį video filmukų žiūrėjimą internetu).</div>
<div>&bdquo;Omnitel&ldquo; akcentuoja didelę jų teikiamo interneto spartą (<a href="http://www.omnitel.lt/privatiems/internetas/internetas-kompiuteryje/4g-jau-lietuvoje/51497" target="_blank">Su 4G net iki 80Mbps</a>), bet tai reiškia, kad duomenų limitą pasieksite dar greičiau, t.y. greičiau nebegalėsite naudotis internetu apskritai. Kažkoks bullshit, juo labiau, kad mano namuose &bdquo;OmniConnect&ldquo; veikė kur kas nestabiliau už &bdquo;Bitės&ldquo; siūlomą &bdquo;Vodafone Mobile Connect&ldquo;.</div>
<h2>Bitė (Vodafone Mobile Connect)</h2>
<div>Sąlygos panašios kaip ir &bdquo;Omnitel&ldquo;, tačiau su brangiausiu planu (vadinasi &bdquo;<a href="http://www.bite.lt/lt/privatiems/internetas/kompiuteryje/vmc" target="_blank">NO LIMIT</a>&ldquo;, bet limitai visgi egzistuoja) mėnesio limitas yra 15GB, o po to ryšio sparta apribojama iki 512kbps (tiesa, jų tinklalapyje tos informacijos neradau, ją rasite tik sudarę sutartį, todėl skaitykite, po kuo pasirašote).</div>
<div>&nbsp;</div>
<div>Svarbu atkreipti dėmesį į tai, kad tiek &bdquo;Omnitel&ldquo;, tiek &bdquo;Bitės&ldquo; modemai neveikia su jokia kita SIM kortele, išskyrus jų pačių. Nesu tikras, ar tai yra parašyta įsigijimo sąlygose, bet bent jau mokant pilną kainą už modemą, norėtųsi gauti &bdquo;nepririštą&ldquo; įrenginį.&nbsp;</div>
<h2>Tele2</h2>
<div>Tai vienintelis mobilaus interneto tiekėjas, kurio nebandžiau. Nežinau, kokią strategiją renkasi Tele2, bet panašu, kad interneto paslaugos jiems nėra prioritetas. Su brangiausiu planu suteikiama tik 5GB duomenų, kas šiais laikais yra absurdiškai juokingas kiekis.</div>
<div>Taip pat keistai atrodo ir jų mobiliųjų telefonų paslaugų planai - paskutiniu metu buvo atsisakyta &bdquo;Smart&ldquo; planų, kurie suteikia bent kažkokį nemokamą kiekį duomenų. Panašu, kad jų požiūris ir į išmaniuosius telefonus yra tik kaip į gražų aksesuarą.</div>
<h2>Išvados</h2>
<div>Jei reikia greito ir sąlyginai nebrangaus mobilaus interneto mieste ir nebijote, kad liksite be ryšio, jei kokia siena užstos ryšio anteną, rinkitės &bdquo;Mezon&ldquo;. Kitu atveju - &bdquo;Vodafone Mobile Connect&ldquo;.</div>
<div>Jei galvojate naudoti mobilų internetą tik namie (kalbu apie daugiabutį namą), pasidomėkite, ar nėra optinio interneto tinklo (FTTB) jūsų name. Jei yra, naudokite jį. Tiekėjų yra tikrai nemažai, o kokybės ir kainos santykis geresnis nei mobiliojo interneto tiekėjų.</div>
<div>Visgi, jei retai reikia pasinaudoti internetu mieste, paprasčiausias variantas yra pasiieškoti (tebūnie mokamų) bevielio interneto zonų, arba pasinaudojus išmaniuoju telefonu (naudojant Portable WiFi hotspot; Android turi šią galimybę nuo 2.2 versijos).</div>]]></description>
      <pubDate>Wed, 30 May 2012 13:34:48 +0300</pubDate>
      <link>http://lescinskas.lt/mobilusis-internetas-kuri-pasirinkti</link>
      <guid isPermaLink="true">http://lescinskas.lt/mobilusis-internetas-kuri-pasirinkti</guid>
    </item>
    <item>
      <title>Compiz downgrade'inimas Ubuntu 11.04 OS</title>
      <description><![CDATA[<p><img width="450" height="281" src="http://www.lescinskas.lt/uploads/editor/image/compiz-cube.png" alt="Compiz Cube" /></p>
<p>Ubuntu 11.04 versija bei jai artimos distribucijos (pvz.: Linux Mint 11) mano nuomone, yra vienas prasčiausių release'ų.</p>
<p>Apie Unity aplinkos nebrandumą rašė <a href="http://emptydot.com/ubuntu-unity-per-anksti">Vidmantas</a>, bet net ir standartinėje Gnome aplinkoje (Linux Mint 11 atveju) yra palikta nemažai defektų. Vienas jų - dar nestabilios Compiz versijos (0.9) integravimas, dėl ko neveikia ar veikia nekorektiškai daugelis vizualinių elementų (neveikia Desktop Cube bei kiti plugin'ai, dingsta lango valdymo mygtukai ir t.t.).</p>
<p>Vienas problemos sprendimo būdų, siūlomų įvairiuose <a href="http://forums.linuxmint.com/viewtopic.php?f=90&amp;t=73456">forumuose</a>, yra Compiz versijos downgrade'inimas (vietoj nestabilios 0.9 naudojimas 0.8). Tai galima atlikti įvykdžius komandas:</p>
<p><code>sudo apt-get purge compiz compiz-plugins-extra compiz-plugins-main</code><br />
<code>sudo apt-get purge compizconfig-settings-manager </code><code>sudo add-apt-repository ppa:guido-iodice/compiz-0.8.6-natty<br />
sudo apt-get update<br />
sudo apt-get upgrade<br />
sudo apt-get install compiz compiz-core compiz-fusion-plugins-main&nbsp;&nbsp; compiz-fusion-plugins-extra compiz-fusion-plugins-unsupported compiz-gnome compiz-plugins compizconfig-backend-gconf&nbsp;&nbsp; compizconfig-settings-manager libdecoration0 python-compizconfig&nbsp;&nbsp; simple-ccsm</code></p>
<p>&nbsp;</p>]]></description>
      <pubDate>Mon, 25 Jul 2011 10:39:26 +0300</pubDate>
      <link>http://lescinskas.lt/compiz-downgrade-ubuntu-11-04</link>
      <guid isPermaLink="true">http://lescinskas.lt/compiz-downgrade-ubuntu-11-04</guid>
    </item>
    <item>
      <title>MongoDB</title>
      <description><![CDATA[<p>MongoDB yra dokumentinė NoSQL tipo duomenų bazių valdymo sistema.</p>
<p>Noriu pasidalinti savo prezentacija apie MongoDB - tikiuosi bus naudinga.</p>
<div style="width:425px" id="__ss_7585083"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/plutzilla/mongodb-7585083" title="MongoDB">MongoDB</a></strong><object id="__sse7585083" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mongo-110411042650-phpapp01&stripped_title=mongodb-7585083&userName=plutzilla" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse7585083" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mongo-110411042650-phpapp01&stripped_title=mongodb-7585083&userName=plutzilla" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>]]></description>
      <pubDate>Mon, 11 Apr 2011 12:31:58 +0300</pubDate>
      <link>http://lescinskas.lt/mongo-db</link>
      <guid isPermaLink="true">http://lescinskas.lt/mongo-db</guid>
    </item>
    <item>
      <title>GNU screen</title>
      <description><![CDATA[<p>GNU screen yra virtualus terminalo multiplekseris. Naudojant jį viename konsolės lange galima paleisti kelis virtualius terminalus, persijungti tarp jų, padalinti langą ir matyti jame kelis terminalus, kuriuose galime vykdyti iškart kelias komandas (ar paleisti kelias programas). Galima paleisti ir kelias screen instancijas.</p>
<p><img alt="GNU screen" width="594" height="431" src="http://lescinskas.lt/uploads/editor/image/gnu-screen.png" /></p>
<p>Taip pat galima screen'e paleisti programą ir prisijungti prie jos iš kito kompiuterio (per tą pačią screen'o instanciją). Atsijungus nuo terminalo, programa, paleista per screen'ą, yra vykdoma toliau, tuo tarpu įprastai paleidus programą ir atsijungus nuo terminalo, ji automatiškai išjungiama. Panaudojimas gali būti labai įvairiapusiškas, pvz.: serveryje, kur didelė interneto sparta, per screen'ą paleidžiame Torrent klientą, paleidžiame siųsti failus (žinoma, legalius), ir vėliau iš kito kompiuterio prisijungę prie to paties screen'o toliau naudojamės programa.</p>
<p>Taipogi per screen'ą naudinga paleisti ilgai trunkančias komandas nutolusiame serveryje, kuomet reikia užtikrinti, kad jos baigs vykdytis net ir atsijungus nuo serverio, pvz.: dingus interneto ryšiui ar elektrai.</p>
<p>Screen'as paleidžiamas komanda:<br />
<span style="font-family: 'Courier New'; ">$ screen</span></p>
<p>Taip pat galima paleidžiant screen'ą, jam suteikti pavadinimą:<br />
<span style="font-family: 'Courier New'; ">$ screen -S &lt;pavadinimas&gt;</span></p>
<p>Visas paleistų screen instancijų sąrašas:<br />
<span style="font-family: 'Courier New'; ">$ screen -ls</span></p>
<p>Prisijungti prie screen'o:<br />
<span style="font-family: 'Courier New'; ">$screen -r</span></p>
<p>Jei paleistos kelios screen'o instancijos, gausite jų sąrašą:<br />
<span style="font-family: 'Courier New'; ">There are screens on:<br />
31296.pavadinimas	(04/05/2011 06:04:51 PM)	(Detached)<br />
30781.pts-0.paulius	(04/05/2011 05:39:06 PM)	(Attached)<br />
2 Sockets in /var/run/screen/S-paulius.</span></p>
<p>Tuomet reiks nurodyti screen'o instancijos pavadinimą, pvz.:<br />
<span style="font-family: 'Courier New'; ">$ screen -r 31296.pavadinimas</span></p>
<p>Prisijungus prie screen'o, komandos (išeiti, atsijungti, padalinti langą etc.) atliekamos paspaudus klavišų kombinaciją <strong>Ctrl+a</strong> (toliau - C-a), ją atleidus ir paspaudus kitą klavišą.<br />
Svarbu atkreipti dėmesį į tai, kad skiriasi komandų didžiosios ir mažosios raidės (pvz.: C-a x atlieka kitką nei C-a X).</p>
<h3>Komandos</h3>
<p>Išeiti (detach - neišjungiant paties screen'o): <strong>C-a d</strong><br />
Išeiti (exit - išjungiant screen'ą): <strong>C-a \</strong> (taip pat galima išeiti uždarant langus su <strong>Ctrl+d</strong>)<br />
Užrakinti screen'ą: <strong>C-a x</strong></p>
<h3>Langų valdymo komandos</h3>
<p>Sukuriamas naujas langas: <strong>C-a c</strong><br />
Uždaromas esamas langas: <strong>C-a k</strong><br />
Atidaromas kitas langas: <strong>C-a &lt;space&gt;</strong><br />
Atidaromas ankstesnis langas: <strong>C-a &lt;backspace&gt;</strong><br />
Parodomas langų sąrašas, su galimybe pasirinkti norimą: <strong>C-a &quot;</strong><br />
Keičiamas lango pavadinimas: <strong>C-a A</strong></p>
<h3>Regionų (padalintų langų) valdymo komandos</h3>
<p>Padalinamas aktyvus langas horizontaliai: <strong>C-a S</strong><br />
Padalinamas aktyvus langas vertikaliai: <strong>C-a |</strong><br />
Pereinama į kitą regioną: <strong>C-a &lt;tab&gt;</strong><br />
Uždaromas aktyvus regionas: <strong>C-a X</strong></p>
<p>Sukūrus naują regioną ir perėjus į jį, reikia arba jame sukurti naują langą (<strong>C-a S</strong>), arba atidaryti jau egzistuojantį langą (<strong>C-a &lt;space&gt;</strong> arba išsirinkti iš sukurtų langų sąrašo - <strong>C-a &quot;</strong>).</p>]]></description>
      <pubDate>Tue, 05 Apr 2011 23:22:59 +0300</pubDate>
      <link>http://lescinskas.lt/gnu-screen</link>
      <guid isPermaLink="true">http://lescinskas.lt/gnu-screen</guid>
    </item>
    <item>
      <title>Užklausos tarp skirtingų domenų</title>
      <description><![CDATA[<p><img height="300" width="400" src="http://lescinskas.lt/uploads/editor/image/ajax.jpg" alt="AJAX" /></p>
<h2>XMLHttpRequest (AJAX) užklausos</h2>
<p>Naršyklės įprastai neleidžia daryti <a href="http://en.wikipedia.org/wiki/XMLHttpRequest" target="_blank">XMLHttpRequest</a> (liaudyje labiau žinomo kaip AJAX) užklausų į kitą domeną, kadangi tai neatitinka <a href="http://en.wikipedia.org/wiki/Same_origin_policy" target="_blank">Same Origin Policy</a> saugumo koncepcijos.</p>
<p>Firefox 3.5 ir Safari 4 buvo įdiegta naujai sukurta naršyklių technologija <a href="http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing" target="_blank">CORS (cross-origin resource sharing)</a>, kuri leidžia daryti XMLHttpRequest užklausas į kitus domenus, kai šie patvirtina, jog leidžia konkretiems šaltiniams daryti užklausas.</p>
<p><strong>Kaip tai veikia?</strong></p>
<p>Vartotojo naršyklė, siųsdama XMLHttpRequest užklausą į kitą domeną, siunčia HTTP request header'į <strong>Origin</strong> su savo domeno reikšme.</p>
<p>Serveris siunčia atsakymą su HTTP response header'iu <strong>Access-Control-Allow-Origin</strong> su konkretaus domeno, kuriam leidžiama daryti užklausas, reikšme, arba <strong>*</strong> reikšme, kuri leidžia visiems šaltiniams daryti užklausas. HTTP response headerio formavimo pavyzdžiai PHP kalba:</p>
<p>header('Access-Control-Allow-Origin: http://www.domenas.tld');</p>
<p>header('Access-Control-Allow-Origin: *');</p>
<p>Šiuos header'ius taip pat gali siųsti ir pats HTTP serveris, pvz.: Apache, naudojant <a href="http://httpd.apache.org/docs/current/mod/mod_headers.html" target="_blank">mod_headers modulį</a>.</p>
<p>Daugeliu atveju to turėtų pakakti, tačiau <a href="http://www.w3.org/TR/cors/" target="_blank">CORS specifikacija</a> leidžia daryti sudėtingesnes užklausas, nurodant leidžiamą HTTP metodą, atitinkamus header'ius ir kt., pvz.:</p>
<p>HTTP request header'iai:</p>
<p>Origin: http://www.domenas.tld<br />
Access-Control-Request-Method: POST<br />
Access-Control-Request-Headers: belekoks-headeris</p>
<p>HTTP response header'iai</p>
<p>Access-Control-Allow-Origin: http://www.domenas.tld<br />
Access-Control-Allow-Methods: POST, GET, OPTIONS<br />
Access-Control-Allow-Headers: belekoks-headeris<br />
Access-Control-Max-Age: 1728000</p>
<p>Tam tikrais atvejais reikia nurodyti HTTP response header'į, leidžiantį XMLHttpRequest užklausas:</p>
<p>Access-Control-Allow-Headers: X-Requested-With</p>
<h2>JSONP</h2>
<p>Kitas būdas, norint gauti ir apdoroti duomenis yra naudoti &lt;script&gt; elementus, kadangi jiems negalioja Same Origin Policy, pvz.:</p>
<p>&lt;script type=&quot;text/javascript&quot; src=&quot;<strong>http://kitas-domenas.tld/skriptas.php?parametras=reiksme</strong>&quot;&gt;&lt;/script&gt;</p>
<p>Tačiau kadangi šis skriptas bus iškart įvykdytas, vien duomenų pasiimti nepavyks. Dėl to, skriptas turi grąžinti kvietimą į funkciją, kuri apdoros duomenis. Pvz. šiuo atveju skriptas.php turėtų grąžinti tokį rezultatą:</p>
<p>funkcija({&quot;jsonDuomenuStruktura&quot;: &quot;reiksme&quot;});</p>
<p>Čia <strong>funkcija</strong> - Javascript funkcija, kuri apdoroja gautus duomenis.</p>
<p>Šis metodas vadinamas JSONP (JSON with prefix).</p>
<p>Akivaizdu, kad šiuo metodu galima gauti ir perduoti duomenis tik GET metodu. Be to, serveris, kuris grąžina rezultatus turi būti pritaikytas JSONP duomenų perdavimui, t.y. turi būti galimybė parametrais nurodyti funkciją, kuri bus iškviečiama.</p>
<p>Taip pat, kadangi įterpiamas svetimas Javascript kodas, atsiranda galimų saugumo spragų, nes skriptas gali įrašyti bet kokį HTML kodą ir kitaip manipuliuoti turiniu, be to atsiranda galimybė perimti duomenis naudojant CSRF pažeidžiamumą.</p>
<h2>Vietinis proxy</h2>
<p>Dar vienas metodas yra naudoti skriptą tame pačiame domene, kuris serverio (ne naršyklės) lygyje padarytų HTTP užklausą į kitą domeną ir grąžintų rezultatus, pvz.: failas proxy.php, esantis tame pačiame domene:</p>
<p>&lt;?php<br />
echo file_get_contents('http://kitas-domenas.tld/skriptas.php'); // Geriau naudoti cURL</p>
<p>Tokiu atveju pakaks daryti užklausą į tame pačiame domene esantį proxy.php ir taip patenkinti Same Origin Policy saugumo koncepciją.</p>
<h2>Adobe Flash užklausos</h2>
<p>Adobe Flash elementai, darydami užklausą į kitą serverį (pvz.: norėdami pasiimti tam tikrus duomenis), kreipiasi į tame domene esantį <a href="http://www.adobe.com/devnet/articles/crossdomain_policy_file_spec.html" target="_blank">crossdomain.xml </a>failą (pvz.: http://www.domenas.tld/crossdomain.xml), kuriame aprašomos taisyklės, nurodančios, kokiems šaltiniams leidžiama skaityti duomenis iš serverio.</p>
<p>crossdomain.xml failo pavyzdys:</p>
<p>&lt;?xml version=&quot;1.0&quot;?&gt;<br />
&lt;!DOCTYPE cross-domain-policy SYSTEM &quot;http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd&quot;&gt;<br />
&lt;cross-domain-policy&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;allow-access-from domain=&quot;*&quot;/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;allow-http-request-headers-from domain=&quot;*&quot; headers=&quot;X-Requested-With&quot;/&gt;<br />
&lt;/cross-domain-policy&gt;</p>
<p>Verta pastebėti, jog darydamas užklausas, Flash neperduoda slapukų (pvz.: sesijos identifikatorių), todėl juos perduoti reikia kaip atskirus Flash parametrus.</p>
<h2>Bonus tip: HTTP headeris Content-disposition</h2>
<p>Pavyzdys: failas http://www.domenas.tld/paveikslelis.php generuoja paveikslėlį, tačiau norint jį išsaugoti, siūlomas failo vardas bus paveikslelis.php.</p>
<p>Norint jį pakeisti, galime siųsti HTTP response header'į:</p>
<p>Content-disposition: inline; filename=&quot;grazus-pavasaris.jpg&quot;</p>
<p>Jei norime iškart iškviesti failo išsaugojimo langą, galime nurodyti:</p>
<p>Content-disposition: attachment; filename=&quot;grazus-pavasaris.jpg&quot;</p>]]></description>
      <pubDate>Tue, 15 Feb 2011 13:46:54 +0200</pubDate>
      <link>http://lescinskas.lt/uzklausos-tarp-skirtingu-domenu</link>
      <guid isPermaLink="true">http://lescinskas.lt/uzklausos-tarp-skirtingu-domenu</guid>
    </item>
    <item>
      <title>Smarty 3 apžvalga</title>
      <description><![CDATA[<p><img width="249" height="74" alt="Smarty" src="http://lescinskas.lt/uploads/editor/image/smarty-logo.png" /></p>
<p>Po beveik 2 metus (2008-12-16 - 2010-11-12) trukusio programavimo, buvo išleista 3 PHP šablonų variklio &bdquo;Smarty&ldquo; versija.</p>
<p>Sistema buvo perrašyta iš pagrindų, pritaikyta PHP 5 versijai, buvo sukurtas naujas sintaksės nagrinėjimo variklis (parser), pagerėjo sistemos darbo našumas, šiek tiek pasikeitė šablonų sintaksė.</p>
<p>Nors egzistuoja kontraversiškos nuomonės, reikalingas PHP kalbos šablonų variklis ar ne, &bdquo;Smarty&ldquo; suteikia papildomas galimybes atskiriant prezentacijos logiką nuo programos logikos. Be to, techniniams dizaineriams, nemokantiems PHP kalbos, dirbti su &bdquo;Smarty&ldquo; gali būti patogiau, saugiau ir produktyviau.</p>
<p>Smarty 3 sintaksė šiek tiek pasikeitė nuo 2 versijos, todėl seni šablonai gali neveikti, ypač jei jie buvo parašyti su klaidomis. 3 versija į sintaksės klaidas žiūri griežčiau, tačiau turi papildomų galimybių.</p>
<p>Kas pasikeitė Smarty 3 versijos šablonų sintaksėje nuo 2 versijos:</p>
<h3>Atsisakyta {ldelim} ir {rdelim}</h3>
<p>2 versijoje norint naudoti { ir } simbolius šablone (pvz.: rašant Javascript funkcijas) juos reikdavo pakeisti {ldelim} ir {rdelim} simboliais arba rašyti tekstą tarp {literal} ir {/literal}. Dabar to daryti nebereikia, tačiau rašant kintamuosius ar funkcijas nebegalima palikti tarpų tarp skirtukų, pvz,: { $foo } ir išves tokį tekstą, o ne kintamojo reikšmę.</p>
<h3>Masyvų modifier'is</h3>
<p>2 versijoje norint modifier'iui perduoti visą masyvą, o ne atskirus jo elementus, reikdavo pridėti @ simbolį, pvz.: {$masyvas|@count}. Dabar visas masyvas perduodamas modifier'iui, pvz.: {$masyvas|count}.</p>
<h3>{php} žymės</h3>
<p>Standartiškai {php} žymės 3 versijoje yra uždraustos. Jas galima įjungti nurodant $smarty-&gt;allow_php_tag = true;</p>
<h3>Kabutės parametruose</h3>
<p>2 versijoje kabutės parametruose buvo nebūtinos, tačiau 3 versijoje jas naudoti būtina, pvz.: {include file=&quot;/kelias/iki/sablono.tpl&quot;}</p>
<p><a href="http://smarty-php.googlecode.com/svn/trunk/distribution/SMARTY2_BC_NOTES">Visi pakeitimai, nesuderinami su &bdquo;Smarty&ldquo; 2 versija</a>.</p>
<p>Taip pat buvo padaryti pakeitimai, palengvinantys darbą su duomenimis:</p>
<h3>Išplėstas {foreach} funkcionalumas</h3>
<p>3 versijoje galima naudoti tokią {foreach} sintaksę:</p>
<p>{foreach $masyvas as $reiksme}</p>
<p>{$reiksme}</p>
<p>{/foreach}</p>
<p>Taip pat palengvintas ciklo savybių gavimas, pvz.:</p>
<p>{$reiskme@key} - masyvo raktas</p>
<p>{$reiksme@iteration} - ciklo iteracija</p>
<p>{$reiksme@total} - visas masyvo elementų kiekis</p>
<p>{$reiksme@first}, {$reiksme@last} - grąžina true, jei elementas pirmas/paskutinis. Patogu naudoti sąlygos sakiniuose</p>
<p>2 &bdquo;Smarty&ldquo; versijoje šios savybės buvo pasiekiamos per {$smarty.foreach.&lt;ciklo vardas&gt;.&lt;savybė&gt;}</p>
<h3>{strip} blokas</h3>
<p>Naudojant {strip} ir {/strip} galima nurodyti, jog visas output'as šiame bloke bus rašomas vienoje eilutėje, pašalinant tarpus, naujas eilutes ir kt. whitespace simbolius.</p>
<p>&bdquo;Smarty&ldquo; 3 versijoje taip pat atsirado šablonų paveldėjimas, funkcijų kūrimas pačiuose šablonuose ir kt. Taip pat šis tas pasikeitė PHP pusėje, pvz.: dabar norint paveldėti Smarty klasę, reikia iškviesti tėvinį konstruktorių - parent::__construct();</p>
<p><a href="http://www.smarty.net/v3_overview">Pilna &bdquo;Smarty&ldquo; 3 versijos apžvalga smarty.net tinklalapyje</a>.</p>]]></description>
      <pubDate>Mon, 15 Nov 2010 14:44:25 +0200</pubDate>
      <link>http://lescinskas.lt/smarty-3-apzvalga</link>
      <guid isPermaLink="true">http://lescinskas.lt/smarty-3-apzvalga</guid>
    </item>
    <item>
      <title>Kaip pasakos baigiasi iš tikrųjų</title>
      <description><![CDATA[<p>Aladinas:</p>
<p><img src="http://lescinskas.lt/uploads/modules/gallery/2/5/43_fullsize.jpg" alt="Aladinas" /></p>
<p>Gražuolė ir pabaisa:</p>
<p><img src="http://lescinskas.lt/uploads/modules/gallery/2/5/44_fullsize.jpg" alt="Gražuolė ir pabaisa" /></p>
<p>Miegančioji gražuolė:</p>
<p><img src="http://lescinskas.lt/uploads/modules/gallery/2/5/45_fullsize.jpg" alt="Miegančioji gražuolė" /></p>
<p>Pelenė:</p>
<p><img src="http://lescinskas.lt/uploads/modules/gallery/2/5/46_fullsize.jpg" alt="Pelenė" /></p>
<p>Raudonkepuraitė:</p>
<p><img src="http://lescinskas.lt/uploads/modules/gallery/2/5/47_fullsize.jpg" alt="Raudonkepuraitė" /></p>
<p>Snieguolė:</p>
<p><img src="http://lescinskas.lt/uploads/modules/gallery/2/5/48_fullsize.jpg" alt="Snieguolė" /></p>
<p>Undinėlė:</p>
<p><img src="http://lescinskas.lt/uploads/modules/gallery/2/5/49_fullsize.jpg" alt="Undinėlė" /></p>]]></description>
      <pubDate>Thu, 07 Oct 2010 13:22:45 +0300</pubDate>
      <link>http://lescinskas.lt/kaip-pasakos-baigiasi-is-tikruju</link>
      <guid isPermaLink="true">http://lescinskas.lt/kaip-pasakos-baigiasi-is-tikruju</guid>
    </item>
    <item>
      <title>SQL atranka pagal kelis kriterijus</title>
      <description><![CDATA[<p>Rašinio pavadinimas gal ir neaiškus, tačiau situacija paprasta: turime straipsnių ir straipsnių žymių (tags) lenteles, sujungtas ryšiu &bdquo;1..n&ldquo;. Reikia atlikti paiešką (atrinkti straipsnius) pagal kelias žymes (kai visos nurodytos žymės priklauso straipsniui). Sprendimas žemiau.</p>
<p>Lentelių struktūra</p>
<pre>
+-------------+   +-------------+
| articles    |   | tags        |
+-------------+   +-------------+
| id          |   | id          |
|(kiti laukai)|   | articleId   |
+-------------+   | tag         |
                  +-------------+</pre>
<p>&nbsp;SQL užklausa:</p>
<pre class="brush: sql">
SELECT a.* FROM articles AS a
INNER JOIN tags AS t ON a.id=t.articleId
WHERE t.tag='Žymė 1' OR t.tag='Žymė 2'
GROUP BY a.id
HAVING COUNT(*)=2
</pre>
<p>Dinamiškai formuojant tokią užklausą HAVING dalyje reikia naudoti tokį skaičių, kiek žymių dalyvauja užklausoje.</p>]]></description>
      <pubDate>Tue, 21 Sep 2010 23:03:11 +0300</pubDate>
      <link>http://lescinskas.lt/sql-atranka-pagal-kelis-kriterijus</link>
      <guid isPermaLink="true">http://lescinskas.lt/sql-atranka-pagal-kelis-kriterijus</guid>
    </item>
    <item>
      <title>SSH raktai</title>
      <description><![CDATA[<p><img width="400" height="193" src="http://lescinskas.lt/uploads/editor/image/ssh-client-server.png" alt="SSH" /></p>
<p><a href="http://lt.wikipedia.org/wiki/SSH">SSH</a> yra protokolas, leidžiantis saugiai prisijungti prie nutolusio kompiuterio (serverio) ir vykdyti jame komandas. Prie serverio galima prisijungti įprastu būdu - nurodant vartotojo vardą bei slaptažodį, arba naudojant SSH raktus. Naudojant SSH raktus jungiantis prie serverio tereikia įvesti paties rakto slaptažodį - serverio vartotojo slaptažodžio įvesti nebereikia.</p>
<p>SSH raktą sudaro 2 failų pora - privataus ir viešojo. Privatus raktas yra saugojamas vartotojo kompiuteryje, o viešas raktas yra patalpinamas serveryje.</p>
<h3>SSH raktų nauda vartotojui</h3>
<p>Kadangi jungiantis prie serverio reikia žinoti tik savo rakto slaptažodį, patalpinus viešąjį raktą kiekviename iš vartotojo serverių, nebereikia žinoti kiekvieno jų slaptažodžio. Jei vartotojo kompiuteryje veikia raktų agentas (ssh-agent), slaptažodį reiks įvesti tik vieną kartą - jis bus įsimenamas.</p>
<p>Žinoma, privataus rakto saugumą būtina užtikrinti, nes jį gavus ir žinant jo slaptažodį, bus galima prisijungti prie kiekvieno serverio, kuriame bus viešasis raktas.</p>
<h3>SSH raktų nauda infrastruktūrai - įmonei</h3>
<p>Dažna situacija, kuomet keli įmonės darbuotojai turi galimybę prisijungti prie įmonės serverio SSH protokolu vienu vartotoju (pvz.: valdyti interneto tinklalapio failus). Įprastu atveju, visiems darbuotojams turėtų būti patikėtas prisijungimo slaptažodis, o vartotojui nebeleidžiant prisijungti prie serverio (pvz.: išėjus iš darbo), slaptažodis turėtų būti pakeičiamas ir apie tai informuojami visi susiję darbuotojai. Esant dideliam darbuotojų kiekiui, tai gali sukelti nepatogumų ir saugumo spragų.</p>
<p>Naudojant SSH raktus, kiekvienas darbuotojas turi susigeneravęs savo raktus ir prie serverio jungiasi naudodamas ne slaptažodį, o SSH raktą. Apribojus vartotojo prisijungimo galimybę, iš serverio tiesiog pašalinamas jo viešasis raktas. Taip nėra paviešinamas pats slaptažodis ir realizuojamas didesnis saugumo lygis.</p>
<h3>SSH raktų sukūrimas</h3>
<p>SSH raktų pora sugeneruojama naudojant komandą:</p>
<p><span style="font-family: Courier New;"><strong>$ ssh-keygen</strong></span></p>
<p>Vartotojo bus paprašyta įvesti ir pakartoti slaptažodį ir bus sukurti 2 failai:</p>
<p><span style="font-family: Courier New;"><strong>~/.ssh/id_rsa</strong></span> - privatus raktas</p>
<p><span style="font-family: Courier New;"><strong>~/.ssh/id_rsa.pub</strong></span> - viešas raktas</p>
<p>Windows vartotojai gali naudoti <strong>puttygen.exe</strong> programą.</p>
<h3>SSH rakto talpinimas serveryje</h3>
<p>SSH viešieji raktai nutolusiame kompiuteryje (serveryje) talpinami faile, esančiame <span style="font-family: Courier New;"><strong>~/.ssh/authorized_keys</strong></span> po vieną vienoje eilutėje - reikia įrašyti viešojo rakto failo turinį. Jį galima pamatyti įvykdžius komandą:</p>
<p><span style="font-family: Courier New;"><strong>$ cat ~/.ssh/id_rsa.pub</strong></span></p>
<p>Kadangi galima įrašyti keletą viešųjų raktų, keli vartotojai galės prisijungti, naudodamiesi viešojo rakto autentifikacijos principu.</p>
<p>Kadangi failas talpinamas vartotojo namų direktorijoje, su SSH raktu bus galima prisijungti tuo vartotoju, kurio direktorijoje bus patalpinti viešieji raktai.</p>
<p><strong>Svarbu!</strong> Direktorijos <strong>~/.ssh</strong> teisės turi būti <strong>0700</strong>, o failo <strong>~/.ssh/authorized_keys</strong> - <strong>0600</strong>.</p>
<p>Taip pat viešąjį raktą galima įdiegti naudojant komandą:</p>
<p><span style="font-family: Courier New;"><strong>$ ssh-copy-id &lt;vartotojo vardas&gt;@&lt;serverio IP arba adresas&gt;</strong></span> - įkelia viešąjį raktą į serverį ir nustato failų teises. Ačiū Vidmantui.</p>
<h3>Prisijungimas prie SSH</h3>
<p>Prie nutolusio kompiuterio (serverio), naudojant SSH protokolą, prisijungiama naudojant komandą <span style="font-family: Courier New;"><strong>ssh</strong></span> arba SSH klientą PuTTY (Windows vartotojams). Galimi variantai:</p>
<p><span style="font-family: Courier New;"><strong>$ ssh &lt;serverio IP arba adresas&gt;</strong></span> - bus jungiamasi tuo pačiu vartotojo vardu</p>
<p><span style="font-family: Courier New;"><strong>$ ssh &lt;vartotojo vardas&gt;@&lt;serverio IP arba adresas&gt;</strong></span> - bus jungiamasi nurodytu vartotojo vardu</p>
<p><span style="font-family: Courier New;"><strong>$ ssh -i /kelias/iki/privataus/rakto &lt;vartotojo vardas&gt;@&lt;serverio IP arba adresas&gt;</strong></span> - jungiamasi nurodant privataus rakto kelią (jei jis yra kitoje direktorijoje)</p>
<p><span style="font-family: Courier New;"><strong>$ ssh -o &quot;PubkeyAuthentication no&quot; &lt;vartotojo vardas&gt;@&lt;serverio IP arba adresas&gt;</strong></span> - jungiamasi nenaudojant viešojo rakto principo</p>
<p>Taip pat galima susikurti SSH konfigūracijos failą, kuriame įrašius serverio pavadinimą, jam priskyrus atitinkamą vartotoją, prievadą (port), bus jungiamasi nurodytais duomenimis. Pvz.: konfigūracijos failas: <strong>~/.ssh/config</strong></p>
<p><strong><span style="font-family: Courier New;">Host serveris<br />
&nbsp;&nbsp;&nbsp; HostName www.serverio-adresas.tld<br />
&nbsp;&nbsp;&nbsp; User admin<br />
&nbsp;&nbsp;&nbsp; </span><span style="font-family: Courier New;">PubkeyAuthentication yes</span></strong></p>
<p>Komandinėje eilutėje užteks parašyti:</p>
<p><strong><span style="font-family: Courier New;">$ ssh serveris</span></strong></p>
<p>ir automatiškai bus jungiamasi prie www.serverio-adresas.tld serverio vartotoju admin, naudojant SSH raktą. Analogiškai į konfigūracijos failą galima įrašyti kelis serverius.</p>
<p>&nbsp;</p>
<p>Apie SSH ir jo panaudojimą taip pat rašė <a href="http://sirex.lt/node/124">Sirex</a>.</p>
<p>Kitas šaltinis (taip pat ir straipsnio iliustracijos): <a href="http://sial.org/howto/openssh/publickey-auth/">OpenSSH Public Key Authentication</a></p>]]></description>
      <pubDate>Tue, 07 Sep 2010 17:51:03 +0300</pubDate>
      <link>http://lescinskas.lt/ssh-raktai</link>
      <guid isPermaLink="true">http://lescinskas.lt/ssh-raktai</guid>
    </item>
    <item>
      <title>NetBeans patarimai (Tips And Tricks)</title>
      <description><![CDATA[<p><img width="206" height="45" src="http://www.lescinskas.lt/uploads/editor/image/NB-logo-single.jpg" alt="NetBeans" /></p>
<p>Viena populiariausių (kartu su <a href="http://www.eclipse.org">Eclipse</a> ar jos pagrindu sukurtomis) programavimo aplinkų (IDE) Java, PHP, Ruby ir kitoms programavimo kalboms yra <a href="http://www.netbeans.org">NetBeans</a>. Man, kaip ir kitiems pradedantiems programuotojams, patinka šios aplinkos paprastumas, veikimas &bdquo;out of the box&ldquo;. Įskiepius diegti ir konfigūruoti aplinką čia paprasčiau nei Eclipse, nors galimybėmis šios aplinkos labai panašios.</p>
<p>Keletas patarimų iš praktikos, kad programavimas būtų efektyvesnis.</p>
<ul>
    <li><strong>Shift+ESC</strong> - Lango padidinimas per visą ekraną</li>
    <li><strong>Ctrl+Shift+Aukštyn/Žemyn</strong> - sukuria eilutės dublikatą</li>
    <li><strong>Alt+Shift+Aukštyn/Žemyn</strong> - perkelia eilutę į viršų/apačią</li>
    <li><strong>Alt+Shift+Kairė/Dešinė</strong> - padidina arba sumažina atitraukimą (indent)</li>
    <li><strong>Ctrl+E</strong> - ištrina eilutę</li>
    <li><strong>Ctrl</strong><strong>+Space</strong> - kodo autocomplete'as (jei įmanoma).</li>
    <li>6.5 ir naujesnėse versijose kintamojo aprašymui galite naudoti kodo šabloną <strong>vdoc</strong>. Jei jūsų kintamasis yra neaiškaus tipo (pvz.: kažkurios klasės objektas), virš jo rašydami <strong>vdoc</strong> ir spausdami <strong>Tab</strong> gausite strukdūrą /* @var $kintamasis Tipas */ - taip kintamajam veiks navigacija po kodą (<strong>Ctrl+pelytės paspaudimas</strong>) bei autocomplete'as. Naviguojant po kodą atgal ir pirmyn vaikščioti galima su <strong>Alt+Dešinė</strong> bei <strong>Alt+Kairė</strong>. Kintamojo aprašymai veikia ir Eclipse IDE.</li>
</ul>
<p><img width="600" height="319" src="http://www.lescinskas.lt/uploads/editor/image/NB-vardoc-basic.gif" alt="NetBeans vardoc" /></p>
<ul>
    <li><strong>Alt+Shift+O</strong> - atidaro failo paieškos langą</li>
    <li><strong>Ctrl+Alt+Shif</strong><strong>t+O</strong> - atidaro simbolio (metodo, konstantos, kintamojo) paieškos langą. Nenaudojant kintamojo aprašymo, patogu šį trumpinį spausti ant kviečiamo metodo - taip paieškos laukelyje iškart atsiranda to metodo pavadinimas.</li>
    <li><strong>Ctrl+/</strong> - užkomentuoja ar atkomentuoja eilutę ar pažymėtas eilutes</li>
    <li><strong>Ctrl+R</strong> - pervadinimo refaktoringas</li>
    <li><strong>Ctrl+Shift+F</strong> - paieška per failus. Spaudžiant prieš tai pažymėjus direktoriją projektų ar failų lange, galima pasirinkti ieškoti toje direktorijoje.</li>
    <li><strong>Ctrl+G</strong> - eina į nurodytą eilutę faile</li>
</ul>
<p>Savo nuorodų trumpinius gali susikurti ar redaguoti per <strong>Tools -&gt; Options -&gt; Keymap</strong>. Aš naudoju trumpinius kodo iš repozitorijos atnaujinimui (update) ir įkėlimui (commit).</p>
<p>Kodo šablonus galite kurti bei redaguoti per <strong>Tools -&gt; Options -&gt; Editor -&gt; Code Templates</strong>.</p>
<p>Programuoji su NetBeans? Pasidalink savo patarimais!</p>
<p>Nuorodos: <a href="http://wiki.netbeans.org/NBCDTipsAndTricks">NetBeans bendruomenės patarimai</a> bei <a href="http://stackoverflow.com/questions/628830/netbeans-tips-and-tricks">patarimai iš Stack Overflow</a>.</p>]]></description>
      <pubDate>Tue, 17 Aug 2010 11:56:00 +0300</pubDate>
      <link>http://lescinskas.lt/netbeans-patarimai-tips-and-tricks</link>
      <guid isPermaLink="true">http://lescinskas.lt/netbeans-patarimai-tips-and-tricks</guid>
    </item>
  </channel>
</rss>
