<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>lescinskas.lt</title>
    <description><![CDATA[Naujausi įrašai]]></description>
    <link>http://www.lescinskas.lt/lt</link>
    <language>lt</language>
    <item>
      <title>Sprendimas: Eclipse ar Netbeans lūžta vykdant SVN operacijas</title>
      <description><![CDATA[<p>Jei programuojant Linux aplinkoje su Eclipse ar Netbeans ir, vykdant SVN operacijas, IDE pakimba ar lūžta, problema gali būti Gnome Keyring palaikyme SVN 1.6 versijoje. Kol šis defektas nėra pašalintas, reiktų naudotis problemos apėjimu. Tam reikia <strong>~/.subversion/config</strong> faile įrašyti (pakeisti) šias eilutes:</p>
<pre>
[auth]
### Set password stores used by Subversion. They should be
### delimited by spaces or commas. The order of values determines
### the order in which password stores are used.
### Valid password stores:
###   gnome-keyring        (Unix-like systems)
###   kwallet              (Unix-like systems)
###   keychain             (Mac OS X)
###   windows-cryptoapi    (Windows)
password-stores = </pre>
<p><br />
Tuščia <strong>password-stores</strong> reikšmė išjungs Gnome Keyring palaikymą ir slaptažodžiai bus saugomi paprastu tekstu, kaip ir ankstesnėse SVN versijose.</p>
<p>Šaltinis: <a href="http://subclipse.tigris.org/wiki/JavaHL#head-3a1d2d3c54791d2d751794e5d6645f1d77d95b32">subclipse.tigris.org</a></p>]]></description>
      <pubDate>Mon, 01 Mar 2010 14:59:32 +0200</pubDate>
      <link>http://www.lescinskas.lt/sprendimas-eclipse-ar-netbeans-luzta-vykdant-svn-operacijas</link>
      <guid isPermaLink="true">http://www.lescinskas.lt/sprendimas-eclipse-ar-netbeans-luzta-vykdant-svn-operacijas</guid>
    </item>
    <item>
      <title>Google Buzz - pasiklydęs socialinis tinklas?</title>
      <description><![CDATA[<p><img width="286" height="68" alt="Google Buzz" src="http://www.lescinskas.lt/uploads/editor/image/google-buzz.png" /></p>
<p>Šiandien Google pristatė savo naują paslaugą - <a href="http://buzz.google.com">Google Buzz</a>.</p>
<p>Tai - Twitter bei Facebook sėkmės įkvėpta dalinimosi žinutėmis sistema. Kiekvienas Google paskyrą turintis vartotojas nurodo, kurių vartotojų įrašus (Buzz'us) jis nori matyti. Gautus įrašus vartotojai gali komentuoti, pažymėti, kad pastarieji jam patinka, persiųsti el. paštu.</p>
<p>Visas veiksmas vyksta GMail aplinkoje, o vartotojo žinutės matomos ir vartotojo <a href="http://www.google.com/profiles/paulius.lescinskas#buzz">profilyje</a>, Google Reader aplinkoje matysite sekamų žmonių dalijamus (shared) įrašus.</p>
<p>Taip pat galima automatiškai įtraukti įrašų atnaujinimus iš kitų tinklalapių (Google Reader, FlickR, Twitter, Picasa, Blogger, Youtube, jūsų tinklalapio RSS...).</p>
<p>Tiek teorijos, o ką praktiškai mums duoda Buzz? Kaip jis įsipaišo Google produktų ir kitų Interneto servisų kontekste?</p>
<h3>Kuo Buzz skiriasi nuo Twitter?</h3>
<p>Buzz leidžia rašyti ne tik trumpas tekstines žinutes, bet ir prisegti nuotrauką ar įkelti nuorodą. Čia nereikia naudotis jokiais idiotiškais URL trumpinimo sevisais. Taip pat galima komentuoti įrašus, taip sukuriant hirarchinį ryšį turintį dialogą, kuo negali pasigirti Twitter. Atrodytų, viskas į vienus vartus, tačiau Buzz neturi jokio API (o gal aš tiesiog nemačiau?), leidžiančio išorinėms aplikacijoms komunikuoti su Buzz. Taip, yra RSS, yra importas iš kitų šaltinių, bet tai ne tas pats. O juk beveik visas Twitter aktyvumas vyksta būtent per išorines aplikacijas, naudojančias API...</p>
<h3>Kuo Buzz skiriasi nuo Facebook?</h3>
<p>Facebook - pilnavertis socialinis tinklas, su vartotojų profiliais, draugų ryšiais, socialinėmis grupėmis ir t.t. Buzz išpildo tik vieną &bdquo;Facebook&ldquo; dalį - naujienas (News feed), kas šiame socialiniame tinkle yra ir taip gerai realizuota. Matau vienintelį Buzz privalumą - kitų šaltinių importą, kas rodo, jog Buzz yra kur kas atviresnis produktas (Facebook leidžia tik pats įkelti savo žinutes į Twitter, arba reikia naudotis atitinkamomis aplikacijomis).</p>
<h3>Kodėl integracija į GMail?</h3>
<p>Pastaraisiais metais didiesiems socialiniams tinklams skaičiuojant milijardus lankytojų, Google riekė šiame kepale yra labai plonytė. Ir negalima teigti, jog jie neturi tam įrankių - yra socialinis tinklas <a href="http://www.orkut.com">&bdquo;Orkut&ldquo;</a>, tačiau jis populiarus berods tik Brazilijoje, yra Facebook Connect analogas <a href="http://www.google.com/friendconnect">&bdquo;Google friend connect&ldquo;</a>, tačiau jis taip pat nėra pakankamai populiarus, nors naudoja atvirus standartus... Google Wave, kaip atskiras produktas, iš pradžių sukėlęs šurmulį, atrodo, taip pat nesulaukė tokio populiarumo, kokio buvo tikėtasi.</p>
<p>Atrodo, jog vieninteliai pasiteisinę Google produktai - jų paieškos sistema ir GMail. Pakišti &bdquo;Buzz&ldquo; visiems GMail vartotojams po akimis yra teigiamas sprendimas, tačiau aš vadovaučiausi &bdquo;Friendfeed&ldquo; kūrėjo Paul Bucheit išsakyta fraze: <a href="http://paulbuchheit.blogspot.com/2010/02/if-your-product-is-great-it-doesnt-need.html">&bdquo;If your product is great it doesn't have to be good&ldquo;</a>, todėl manau, kad Buzz, kaip (tariamai) pasiteisinusio produkto, vieta - ne kaip GMail vienos iš funkcijų, bet kaip atskiro produkto.</p>
<h3>O gal ne viskas taip blogai?</h3>
<p>Buzz iš esmės yra geras produkas. Produktas, kokio Google trūko, ir kurio bandoma suklijuoti atskirus Google produktus į vieną visumą.</p>
<p>Vis dėlto, manau, jog Google turi (per) daug atskirų produktų, kurie tiesiog neturi centrinio taško, apie kurį suktųsi visas veiksmas. Liūdna, bet neretai paslaugos viena kitą dubliuoja, užgoždamos viena kitą... Kas tai? Konkurencija viduje, ar nesugebėjimas suvaldyti projektų aukščiausiame lygyje?</p>
<p>Ir atrodo, jog tinkami sprendimai kažkada lyg ir buvo padaryti (turiu omenyje <a href="http://www.google.com/ig">iGoogle</a>, kuris gal ir galėtų būti tuo centriniu tašku), bet dabar juos pamiršus yra bandoma iš naujo išrasti dviratį.</p>]]></description>
      <pubDate>Wed, 10 Feb 2010 22:46:06 +0200</pubDate>
      <link>http://www.lescinskas.lt/google-buzz-pasiklydes-socialinis-tinklas</link>
      <guid isPermaLink="true">http://www.lescinskas.lt/google-buzz-pasiklydes-socialinis-tinklas</guid>
    </item>
    <item>
      <title>Populiariausios 2009 m. programavimo kalbos</title>
      <description><![CDATA[<p>Kompanija &bdquo;Tiobe&ldquo; <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html">paskelbė</a> populiariausių 2009 metų  programavimo kalbų sąrašą. Šis sąrašas sudaromas pagal <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/tpci_definition.htm">Tiobe indeksą</a>, kuris remiasi paieškos sistemų (Google, Google Blogs, MSN, Yahoo!, Wikipedia ir YouTube) rezultatais.</p>
<p><img width="640" height="480" src="http://www.lescinskas.lt/uploads/editor/image/tiobe-indeksas-2002-2010.png" alt="Tiobe indeksas" /></p>
<p>Labiausiai (1,25%) į viršų pakilo &bdquo;Google&ldquo; programavimo kalba <a href="http://www.golang.org"><strong>&bdquo;Go&ldquo;</strong></a>, kuri, nors buvo pristatyta tik metų gale, Tiobe indekse užėmė 13 vietą. Visgi, kadangi ši programavimo kalba labai nauja, neaišku, ar šis populiarumas yra pelnytas, ar tai buvo vienkartinis susidomėjimas.</p>
<p>12 vietoje atsirado<strong> &bdquo;Objective-C&ldquo;</strong> programavimo kalba, kuria kuriamos programos iPhone. Natūralu, jog iPhone populiarumas atsispindėjo ir šiame indekse. Ši kalba pagal populiarumą pakilo 1,24%.</p>
<p>Tendencingesnių programavimo kalbų sąraše verta paminėti ir <strong>PHP</strong>, kuri pakilo 1,19% ir, aplenkusi C++ ir (Visual) Basic, atsidūrė 3 sąrašo vietoje bei <strong>Ruby</strong>, kuri pagaliau įkopė į dešimtuką, išstūmusi iš jo &bdquo;Delphi&ldquo;.</p>
<p>Lyderio pozicijas toliau išlaiko <strong>Java</strong>, nors jos populiarumas nukrito 1,54%.</p>]]></description>
      <pubDate>Tue, 12 Jan 2010 15:13:43 +0200</pubDate>
      <link>http://www.lescinskas.lt/populiariausios-2009m-programavimo-kalbos</link>
      <guid isPermaLink="true">http://www.lescinskas.lt/populiariausios-2009m-programavimo-kalbos</guid>
    </item>
    <item>
      <title>Sveikinimai ir gimtadienių priminimai - patogiau</title>
      <description><![CDATA[<p><a href="http://www.cards.lt"><img alt="CARDS.LT" src="http://www.cards.lt/img/cards_logo_small.jpg" /></a></p>
<p>Prieš didžiąsias metų šventes <a title="Kalėdiniai sveikinimai" href="http://www.cards.lt">CARDS.LT</a> padariau keletą patobulinimų, kad sveikinti draugus ir artimuosius būtų kur kas paprasčiau nei anksčiau.</p>
<p>Į kontaktų sąrašą įtraukę sau artimus žmones, visus kontaktus turėsite vienoje vietoje, o CARDS.LT pasirūpins, kad nepamirštumėte artimųjų gimtadienių.</p>
<p>Tam, kad galėtume kurti kontaktus, tereikia prisijungti su savo OpenID paskyra. Tam tiks ir Jūsų Google (GMail) ar Yahoo paskyra.</p>
<p>Prisijungę kairėje pusėje esančiame meniu &quot;Vartotojo zona&quot; matysime 2 naujus punktus:</p>
<ul>
    <li>Kontaktai - kontaktų kūrimas, redagavimas:</li>
</ul>
<p><img width="547" height="356" alt="Kontaktų sąrašas" src="http://www.cards.lt/uploads/editor/image/kontaktu-sarasas.png" /></p>
<ul>
    <li>Gimtadieniai - kalendorius su Jūsų artimųjų gimtadieniais:</li>
</ul>
<p><img width="520" height="238" alt="Gimtadieniai" src="http://www.cards.lt/uploads/editor/image/gimtadieniai.png" /></p>
<p>Jei esate patvirtinęs savo el. pašto adresą (tai galima padaryti pasirenkant punktą &quot;Gauti atvirukai&quot;), el. paštu gausite priminimus apie kitos dienos solinezantus:</p>
<p><img width="330" height="225" alt="Priminimas apie gimtadienį" src="http://www.cards.lt/uploads/editor/image/priminimas-apie-gimtadieni.png" /></p>
<p>&nbsp;</p>
<p>Atvirukų kūrimas draugams dar niekada nebuvo toks paprastas. Jums nebereikės galvoti, koks draugo el. pašto adresas - CARDS.LT tuo pasirūpins už Jus, o draugų, turinčių <a target="_blank" href="http://www.gravatar.com">Gravatar'us</a>, bus rodomos ir nuotraukos.</p>
<p><img width="429" height="111" src="http://www.cards.lt/uploads/editor/image/kontaktu-autocomplete.png" alt="Kontaktų automatizavimas" /></p>
<p>Gerų švenčių! :)</p>]]></description>
      <pubDate>Wed, 23 Dec 2009 15:38:01 +0200</pubDate>
      <link>http://www.lescinskas.lt/sveikinimai-ir-gimtadieniu-priminimai-patogiau</link>
      <guid isPermaLink="true">http://www.lescinskas.lt/sveikinimai-ir-gimtadieniu-priminimai-patogiau</guid>
    </item>
    <item>
      <title>Komunikacija su Iframe per Javascript bei JQuery</title>
      <description><![CDATA[<p>Iframe - HTML elementas, leidžiantis tam tikroje tinklalapio vietoje įkelti kito tinklalapio turinį.</p>
<p>Nors HTML5 buvo atsisakyta tradicinių rėmelių (frameset), tačiau Iframe yra plačiai naudojamas ir, panašu, kad ateityje šio elemento naudojimas bus dar intensyvesnis, žinant, jog tiek socialinių tinklų aplikacijų platformų (pvz.: OpenSocial), tiek ir įvairūs Interneto servisai (pvz.: Google Maps) veikimas pagrįstas Iframe pagrindu.</p>
<p>Komunikacija tarp pagrindinio tinklalapio ir Iframe'o Javascript pagalba galima tik tuo atveju, jei abu puslapiai yra užkraunami iš to paties domeno (pvz.: http://www.foo.com ir http://www.bar.com bus negalima). Netgi norint realizuoti komunikaciją tarp skirtingų 3 lygio domenų (pvz.: http://foo.example.com ir http://bar.example.com), būtina abiejuose puslapiuose nurodyti, kad šie abu tinklalapiai priklauso tam pačiam domenui. Tai galima padaryti Javascript komanda:</p>
<pre class="brush:javascript">
document.domain = 'example.com';
</pre>
<p>Norint realizuoti komunikaciją tarp skirtingų domenų, reiktų naudoti Iframe proxy. T.y. skriptas, esantis tame pačiame domene, turėtų tiesiog atvaizduoti kitame domene esančio puslapio HTML turinį.</p>
<p>Komunikaciją tarp pagrindinio puslapio ir į jį įterpto Iframe'o atspindi šie pavyzdžiai.</p>
<p>Pagrindinis puslapis (pvz.: index.html)</p>
<pre class="brush:xml">
&lt;html&gt;
&lt;head&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://www.google.com/jsapi&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
&nbsp;&nbsp;&nbsp; google.load(&quot;jquery&quot;, &quot;1.3.2&quot;);
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;iframe id=&quot;myIframe&quot; src=&quot;iframe.html&quot; width=&quot;100&quot; height=&quot;100&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot;&gt;&lt;/iframe&gt;
&lt;div id=&quot;foo&quot;&gt;FOO&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
&nbsp;&nbsp;&nbsp; // Naudojant skirtingus subdomenus, nurodome bendrą domeną:
&nbsp;&nbsp;&nbsp; document.domain = 'example.com';
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; $('#myIframe').load(function()
&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // jQuery pavyzdys:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var frame = $('#myIframe').contents();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; console.log('jQuery: ',frame.find('#bar').html());
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Javascript pavyzdys:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; frame = document.getElementById('myIframe').contentDocument;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Jei neveikia contentDocument, galima naudoti contentWindow.document
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; console.log('JS: ', frame.getElementById('bar').innerHTML);
&nbsp;&nbsp;&nbsp; });
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Iframe puslapis (iframe.html)</p>
<pre class="brush:xml">
&lt;html&gt;
&lt;head&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://www.google.com/jsapi&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
&nbsp;&nbsp;&nbsp; google.load(&quot;jquery&quot;, &quot;1.3.2&quot;);
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id=&quot;bar&quot;&gt;BAR&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
&nbsp;&nbsp;&nbsp; // Naudojant skirtingus subdomenus, nurodome bendrą domeną:
&nbsp;&nbsp;&nbsp; document.domain = 'example.com';
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; // jQuery pavyzdys - ieškome #foo elemento window.parent.document kontekste
&nbsp;&nbsp;&nbsp; console.log('jQuery: ', $('#foo', window.parent.document).html());
&nbsp;&nbsp;&nbsp; // Javascript pavyzdys:
&nbsp;&nbsp;&nbsp; console.log('JS: ', window.parent.document.getElementById('foo').innerHTML);
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Šie pavyzdžiai <a href="http://www.getfirebug.com">Firebug </a>konsolėje parodys atitnkamų elementų turinius.</p>]]></description>
      <pubDate>Thu, 22 Oct 2009 17:01:34 +0300</pubDate>
      <link>http://www.lescinskas.lt/komunikacija-su-iframe-per-javascript-ir-jquery</link>
      <guid isPermaLink="true">http://www.lescinskas.lt/komunikacija-su-iframe-per-javascript-ir-jquery</guid>
    </item>
    <item>
      <title>PHP loginiai operatoriai ir operatorių eiliškumas</title>
      <description><![CDATA[<p>Atliekant veiksmus su loginiais operatoriais ir naudojant juos sąlygos sakiniuose, dažnai tikimasi tokios sąlygos schemos:</p>
<p>if ( &lt;sąlyga&gt; [ == &lt;rezultatas&gt; ] ) &lt;atliekami veiksmai&gt;;</p>
<p>Tačiau naudojant sąlygose loginius operatorius, ši schema negalioja, kadangi operatorių eiliškume palyginimo operatoriai yra aukštesnio prioriteto nei loginiai. Dėl to gauname ne visada tikėtą rezultatą. Pvz.:</p>
<pre class="brush: php">
$a = 5;
$b = 2;
echo ($a &amp; $b == 0)?'nulis':'ne nulis'; // ne nulis
echo (($a &amp; $b) == 0)?'nulis':'ne nulis'; // nulis

$a = 1;
$b = 2;
echo ($a &amp; $b == 2)?'du':'ne du'; // du
echo (($a &amp; $b) == 2)?'du':'ne du'; // ne du
</pre>
<p>&nbsp;</p>
<p>Operatorių eiliškumas iš <a href="http://www.php.net/manual/en/language.operators.precedence.php">PHP manual'o</a>.</p>
<table class="doctable table" style="border: 1px solid #c0c0c0; border-collapse: collapse" border=1>
    <thead valign="middle">
        <tr valign="middle">
            <th>Associativity</th>
            <th>Operators</th>
            <th>Additional Information</th>
        </tr>
    </thead>
    <tbody valign="middle" class="tbody">
        <tr valign="middle">
            <td align="left">non-associative</td>
            <td align="left">clone new</td>
            <td align="left"><a href="http://www.php.net/manual/en/language.oop5.cloning.php" class="link">clone</a> and <a href="http://www.php.net/manual/en/language.oop5.basic.php#language.oop5.basic.new" class="link">new</a></td>
        </tr>
        <tr valign="middle">
            <td align="left">left</td>
            <td align="left">[</td>
            <td align="left"><a href="http://www.php.net/manual/en/function.array.php" class="function">array()</a></td>
        </tr>
        <tr valign="middle">
            <td align="left">non-associative</td>
            <td align="left">++ --</td>
            <td align="left"><a href="http://www.php.net/manual/en/language.operators.increment.php" class="link">increment/decrement</a></td>
        </tr>
        <tr valign="middle">
            <td align="left">non-associative</td>
            <td align="left">~ - (int) (float) (string) (array) (object) (bool) @</td>
            <td align="left"><a href="http://www.php.net/manual/en/language.types.php" class="link">types</a></td>
        </tr>
        <tr valign="middle">
            <td align="left">non-associative</td>
            <td align="left">instanceof</td>
            <td align="left"><a href="http://www.php.net/manual/en/language.types.php" class="link">types</a></td>
        </tr>
        <tr valign="middle">
            <td align="left">right</td>
            <td align="left">!</td>
            <td align="left"><a href="http://www.php.net/manual/en/language.operators.logical.php" class="link">logical</a></td>
        </tr>
        <tr valign="middle">
            <td align="left">left</td>
            <td align="left">* / %</td>
            <td align="left"><a href="http://www.php.net/manual/en/language.operators.arithmetic.php" class="link">arithmetic</a></td>
        </tr>
        <tr valign="middle">
            <td align="left">left</td>
            <td align="left">+ - .</td>
            <td align="left"><a href="http://www.php.net/manual/en/language.operators.arithmetic.php" class="link">arithmetic</a> and          <a href="http://www.php.net/manual/en/language.operators.string.php" class="link">string</a></td>
        </tr>
        <tr valign="middle">
            <td align="left">left</td>
            <td align="left">&lt;&lt; &gt;&gt;</td>
            <td align="left"><a href="http://www.php.net/manual/en/language.operators.bitwise.php" class="link">bitwise</a></td>
        </tr>
        <tr valign="middle">
            <td align="left">non-associative</td>
            <td align="left">&lt; &lt;= &gt; &gt;= &lt;&gt;</td>
            <td align="left"><a href="http://www.php.net/manual/en/language.operators.comparison.php" class="link">comparison</a></td>
        </tr>
        <tr valign="middle">
            <td align="left">non-associative</td>
            <td align="left">== != === !==</td>
            <td align="left"><a href="http://www.php.net/manual/en/language.operators.comparison.php" class="link">comparison</a></td>
        </tr>
        <tr valign="middle">
            <td align="left">left</td>
            <td align="left">&amp;</td>
            <td align="left"><a href="http://www.php.net/manual/en/language.operators.bitwise.php" class="link">bitwise</a> and          <a href="http://www.php.net/manual/en/language.references.php" class="link">references</a></td>
        </tr>
        <tr valign="middle">
            <td align="left">left</td>
            <td align="left">^</td>
            <td align="left"><a href="http://www.php.net/manual/en/language.operators.bitwise.php" class="link">bitwise</a></td>
        </tr>
        <tr valign="middle">
            <td align="left">left</td>
            <td align="left">|</td>
            <td align="left"><a href="http://www.php.net/manual/en/language.operators.bitwise.php" class="link">bitwise</a></td>
        </tr>
        <tr valign="middle">
            <td align="left">left</td>
            <td align="left">&amp;&amp;</td>
            <td align="left"><a href="http://www.php.net/manual/en/language.operators.logical.php" class="link">logical</a></td>
        </tr>
        <tr valign="middle">
            <td align="left">left</td>
            <td align="left">||</td>
            <td align="left"><a href="http://www.php.net/manual/en/language.operators.logical.php" class="link">logical</a></td>
        </tr>
        <tr valign="middle">
            <td align="left">left</td>
            <td align="left">? :</td>
            <td align="left"><a href="http://www.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary" class="link">ternary</a></td>
        </tr>
        <tr valign="middle">
            <td align="left">right</td>
            <td align="left">= += -= *= /= .= %= &amp;= |= ^= &lt;&lt;= &gt;&gt;=</td>
            <td align="left"><a href="http://www.php.net/manual/en/language.operators.assignment.php" class="link">assignment</a></td>
        </tr>
        <tr valign="middle">
            <td align="left">left</td>
            <td align="left">and</td>
            <td align="left"><a href="http://www.php.net/manual/en/language.operators.logical.php" class="link">logical</a></td>
        </tr>
        <tr valign="middle">
            <td align="left">left</td>
            <td align="left">xor</td>
            <td align="left"><a href="http://www.php.net/manual/en/language.operators.logical.php" class="link">logical</a></td>
        </tr>
        <tr valign="middle">
            <td align="left">left</td>
            <td align="left">or</td>
            <td align="left"><a href="http://www.php.net/manual/en/language.operators.logical.php" class="link">logical</a></td>
        </tr>
        <tr valign="middle">
            <td align="left">left</td>
            <td align="left">,</td>
            <td align="left">many uses</td>
        </tr>
    </tbody>
</table>
<p>&nbsp;</p>]]></description>
      <pubDate>Tue, 20 Oct 2009 14:52:32 +0300</pubDate>
      <link>http://www.lescinskas.lt/php-loginiai-operatoriai-ir-operatoriu-eiliskumas</link>
      <guid isPermaLink="true">http://www.lescinskas.lt/php-loginiai-operatoriai-ir-operatoriu-eiliskumas</guid>
    </item>
    <item>
      <title>Neversijuotų SVN failų trynimas</title>
      <description><![CDATA[<p>Dirbant su versijų kontrolės sistema Subversion (SVN) pasitaiko atvejų, kai tenka ištrinti failus, neįtrauktus į versijų kontrolę.</p>
<p>Pavyzdžiui, perjungiant (switch) į kitą šaką (branch), ar turint nereikalingų failų, juos ištrinti galima komanda (veikia Unix sistemose):</p>
<pre class="brush:bash">
svn status --no-ignore | grep '^\?' | sed 's/^\? //' | xargs rm -rf</pre>
<p>Ši komanda ištrins net ir tuos failus, kurie buvo direktorijoje su svn:ignore savybe (property), atitnkančia tuos failus.</p>]]></description>
      <pubDate>Thu, 15 Oct 2009 14:44:16 +0300</pubDate>
      <link>http://www.lescinskas.lt/neversijuotu-svn-failu-trynimas</link>
      <guid isPermaLink="true">http://www.lescinskas.lt/neversijuotu-svn-failu-trynimas</guid>
    </item>
    <item>
      <title>Su tinklaraščių diena!</title>
      <description><![CDATA[<p><img height="130" width="455" src="http://www.blogday.org/images/badge_blue.gif" alt="Blog Day 2009" /></p>
<p>Šiandien (2009 m. rugpjūčio 31 d.) - 5-oji tinklaraščių diena. Tradiciškai šią dieną skatinama parašyti įrašą su 5 naujai atrastų tinklaraščių rekomendacijomis.</p>
<p>Mano naujausi atradimai:</p>
<ul>
    <li><a href="http://www.arvydas.net">Arvydas.net</a> <a href="http://feeds.feedburner.com/arvydas"><img src="http://www.lescinskas.lt/img/feed.png" alt="RSS" /></a></li>
    <li><a href="http://www.zuper.lt">Zuper.lt</a> <a href="http://feeds.feedburner.com/sKblogas"><img src="http://www.lescinskas.lt/img/feed.png" alt="RSS" /></a></li>
    <li><a href="http://www.apleistosvietos.lt">ApleistosVietos.lt</a> <a href="http://www.apleistosvietos.lt/?feed=rss2"><img src="http://www.lescinskas.lt/img/feed.png" alt="RSS" /></a></li>
    <li><a href="http://zinokite.kapirkti.lt">ŽinokITe, ką pirkti</a> <a href="http://feeds.feedburner.com/zinokite-ka-pirkti"><img src="http://www.lescinskas.lt/img/feed.png" alt="RSS" /></a></li>
    <li><a href="http://www.zuokas.lt">Zuokas.lt</a> <a href="http://www.zuokas.lt/feed"><img src="http://www.lescinskas.lt/img/feed.png" alt="RSS" /></a> (kadangi pasikeitė RSS adresas, šįvakar peržiūrėdamas savo RSS prenumeratas, atradau iš naujo)</li>
</ul>
<p>O ką naujo radai TU? :)</p>
<p>Plačiau apie tinklaraščių dieną <a href="http://day.lt/sventes/straipsniai/blogu_diena">day.lt</a> ir <a href="http://www.blogday.org/">blogday.org</a>.</p>]]></description>
      <pubDate>Mon, 31 Aug 2009 23:04:25 +0300</pubDate>
      <link>http://www.lescinskas.lt/su-tinklarasciu-diena</link>
      <guid isPermaLink="true">http://www.lescinskas.lt/su-tinklarasciu-diena</guid>
    </item>
    <item>
      <title>PHP atnaujinimas CentOS sistemose</title>
      <description><![CDATA[<p>Prieš kurį laiką persikėliau į <a href="http://www.hostex.lt">Hostex </a>- įsigijau ten VDS su įdiegta CentOS.</p>
<p>Tačiau CentOS distribucijoje programų paketai yra atnaujinami itin retai, dėl to iškyla tiek suderinamumo, tiek saugumo problemų. Naudojant VDS tinklalapių, sukurtų su PHP programavimo kalba, talpinimui, labai pravartu atnaujinti PHP paketą, kadangi įdiegtoje 5.1.6 versijoje trūksta nemažai funkcionalumo. Nieko nuostabaus, juk ši versija buvo išleista prieš 3 metus (2006-08-24).</p>
<p>Tam, kad atnaujinti paketus, mums reikės:</p>
<ul>
    <li>Įdiegti <strong>yum</strong> programą (paketų tvarkymui)</li>
    <li>Įtraukti repozitoriją, kurioje yra atnaujinti paketai (naudosime <a href="http://www.jasonlitka.com/yum-repository/">http://www.jasonlitka.com/yum-repository</a>)</li>
    <li>Atnaujinti reikiamus paketus</li>
    <li>Perkrauti HTTP serverį</li>
</ul>
<p>Yum galime įdiegti iš RPM paketo, arba per grafinę serverio paketų valdymo aplinką (Hostex atveju - Parallel Plesk).</p>
<p>Repozitoriją įtrauksime, sukurdami failą /etc/yum.repos.d/utterramblings.repo (galime naudoti vi, vim arba nano) ir įrašydami ten tokią informaciją:</p>
<pre>
[utterramblings]
name=Jason's Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
</pre>
<p>Paketus atnaujiname iškviesdami komandą:</p>
<pre>
yum -y update php</pre>
<p>Serverį perkrauname iškviesdami komandą:</p>
<p>&nbsp;</p>
<pre>
service httpd restart</pre>
<p>&nbsp;</p>
<p>Daugiau informacijos <a href="http://jazzymarketing.com/main/0811/upgrade-php-51-php-52-centos">ČIA</a> ir <a href="http://www.jasonlitka.com/yum-repository/">ČIA</a>.</p>]]></description>
      <pubDate>Thu, 27 Aug 2009 18:14:48 +0300</pubDate>
      <link>http://www.lescinskas.lt/php-atnaujinimas-centos-sistemose</link>
      <guid isPermaLink="true">http://www.lescinskas.lt/php-atnaujinimas-centos-sistemose</guid>
    </item>
    <item>
      <title>Mokėjimai.lt saugumo spragos ir dviprasmiška specifikacija</title>
      <description><![CDATA[<p><img width="151" height="24" alt="Mokėjimai.lt" src="http://www.lescinskas.lt/uploads/editor/image/mokejimai.gif" style="margin: 5px;" /></p>
<p>Norint Internete vystyti verslą, kuomet reikia realizuoti mokėjimus Internete, yra 2 galimybės: sudaryti su keliais bankais sutartis, arba rinktis tarpininką. Pirmasis variantas yra gana komplikuotas ir brangus: sutartys su bankais ir mėnesiniai mokesčiai yra dideli, be to, techninė realizacija reikalauja specifinių technių žinių, kai kurie bankai reikalauja ir SSL sertifikato. Kitas, daugeliu atveju paprastesnis variantas yra rinktis tarpininką, kuris turi vieningą interfeisą visiems mokėjimų tipams, o kainą, ypač smulkesniam projektui, gali pasiūlyti itin konkurencingą. Vienas populiariausių tokių servisų Lietuvoje - mokėjimai.lt.</p>
<p>EVP, sukūrę mokėjimai.lt, eparasas.lt, manoid.lt ir kitus projektus, eina teisinga kryptimi, tačiau kai kurie požymiai rodo, jog gražiame įpakavime galima rasti neaišku ką... Vien jų OpenID implementacija, kuomet priimami tik manoid.lt vartotojai, rodo, jog jie nesupranta ir nepalaiko šios sistemos. Kai kurių sistemų siunčiama &quot;User Agent&quot; reikšmė yra &quot;IDAMAS XML Sender&quot;, kas irgi rodo, jog kai kurių produktų kūrimu užsiima ne jie. Tiesiog outsource'ingas ar per mažas žinių ir patirties bagažas?</p>
<p>Grįžtant prie mokėjimai.lt, Diegiant ją į savo sistemą, vadovautis jų pateikta specifikacija nepavyks, kadangi ji... neteisinga! Funkcija, kuri turėtų patikrinti, ar mokėjimas teisingas, lietuviškoje ir angliškoje specifikacijos versijoje aprašytos skirtingai.</p>
<p>Lietuviškasis variantas:</p>
<p>&nbsp;</p>
<pre class="brush: php;">
//DĖMESIO: Nepamirškite funkcijoje įrašyti savo www.mokejimai.lt slaptažodį.
$your_pass = 'slaptazodis'; //irasome slaptazodi is jusu mokejimai.lt sistemos
$test_mode = 1; //1- kuomet testuojate. 0 - kuomet jau veikia sistema tikru rezimu.
if( mk_check ( $your_pass, $_REQUEST['orderid'],$_REQUEST['merchantid'] ) != $_REQUEST['_ss1'] || $_REQUEST['test'] &lt;&gt; $test_mode){
&nbsp;&nbsp;&nbsp; die (&quot;šaltinis netikras&quot;); 
} 

function mk_check ( $password, $id, $mechant_id ) {
&nbsp;&nbsp;&nbsp; return md5(&quot;{$password}|{$id}|{$_SERVER['REMOTE_ADDR']}|{$mechant_id}&quot;);
}
</pre>
<p>&nbsp;</p>
<p>Tuo tarpu angliškas (webtopay.com) variantas:</p>
<p>&nbsp;</p>
<pre class="brush: php;">
&nbsp;&nbsp;&nbsp; $your_webtopay_pass = md5(&quot;mypassword&quot;); // please, enter your webtopay.com password
&nbsp;&nbsp;&nbsp; if ( TestTransaction( $_GET['_ss1'], $your_webtopay_pass, $_GET['orderid'] ) ){ //verification of information source.
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //Everything is OK
&nbsp;&nbsp;&nbsp; }else{
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //Something is wrong
&nbsp;&nbsp;&nbsp; }

&nbsp;&nbsp;&nbsp; function TestTransaction( $transaction, $userPassword, $ordeID, $test = 0, $status = 1 ){
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return ( $transaction == md5(&quot;{$userPassword}|{$ordeID}|{$test}|{$status}&quot;) );
&nbsp;&nbsp;&nbsp; }
</pre>
<p>&nbsp;</p>
<p>Kodai akivaizdžiai skiriasi, tačiau, nors angliškasis variantas arčiausiai tiesos, testiniame režime kintamasis $test vistiek bus lygus 0, ir md5 hash'ai nesutaps.</p>
<p>Tiesa, jie visus duomenis pasirašo viešojo rakto principu naudodami SSL sertifikatą, todėl yra ir kitas būdas patikrinti duomenų validumą.</p>
<p>Žiūrint į šią funkciją galima pastebėti vieną dalyką: žinant GET perduodamus duomenis (orderid ir _ss1) galime ir sužinoti prisijungimo prie mokėjimai.lt sistemos slaptažodį. Tai tik teorinė prielaida, tačiau ji turėtų suveikti. Kas nors galbūt ją ir patiktins ;)</p>
<p>Mokėjimo sistemos veikimo schema yra tokia:</p>
<p>1. Vartotojas formos duomenis (čia turime Order ID) perduoda mokėjimai.lt sistemai</p>
<p>2. Vartotojas nukreipiamas į banką ir ten sumoka pinigėlius. Grįžta į mokėjimai.lt</p>
<p>3. Siunčiama užklausa (su _ss1) kliento sistemai. Klientas pasižymi, kad už jo paslaugas ar prekes buvo apmokėta.</p>
<p>4. Vartotojas grąžinamas pas klientą</p>
<p>Viskas, ką reikia padaryti, kad gauti _ss1 reikšmę, yra pakeisti callback URL (duomenys juk nepasirašomi) kliento puslapyje (tam gali pasitarnauti ir Firebug). Tada 3 punkto užklausa bus siunčiama ne klientui, o ten, kur jūs pageidausite. Štai čia ir sužinosime _ss1 reikšmę.</p>
<p>O toliau elementarus brute-force, arba paieška iš rainbow table (juk jokia druskelė neįmaišoma į MD5 algoritmą).</p>
<p>Ir štai - turime vartotojo slaptažodį, kuriuo prisijungsime prie mokėjimai.lt sistemos.</p>
<p>Apie mokėjimai.lt saugumą taip pat rašė <a href="http://zuper.lt/2009/05/web-mokejimu-saugumas-ka-reiktu-zinoti-programuotojui/">Steponas Kazakevičius</a>.</p>]]></description>
      <pubDate>Wed, 26 Aug 2009 00:41:04 +0300</pubDate>
      <link>http://www.lescinskas.lt/mokejimai.lt-saugumo-spragos-ir-dviprasmiska-specifikacija</link>
      <guid isPermaLink="true">http://www.lescinskas.lt/mokejimai.lt-saugumo-spragos-ir-dviprasmiska-specifikacija</guid>
    </item>
  </channel>
</rss>
