Naujausi įrašai

Turinys

« 1 2 ... 5 6 »

Kovas01

Sprendimas: Eclipse ar Netbeans lūžta vykdant SVN operacijas

Žymės: svn,subversion,linux,eclipse,netbeans,gnome

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 ~/.subversion/config faile įrašyti (pakeisti) šias eilutes:

[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 = 


Tuščia password-stores reikšmė išjungs Gnome Keyring palaikymą ir slaptažodžiai bus saugomi paprastu tekstu, kaip ir ankstesnėse SVN versijose.

Šaltinis: subclipse.tigris.org

Vasaris10

Google Buzz - pasiklydęs socialinis tinklas? (Komentarai 8)

Žymės: google,facebook,twitter,buzz

Google Buzz

Šiandien Google pristatė savo naują paslaugą - Google Buzz.

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.

Visas veiksmas vyksta GMail aplinkoje, o vartotojo žinutės matomos ir vartotojo profilyje, Google Reader aplinkoje matysite sekamų žmonių dalijamus (shared) įrašus.

Taip pat galima automatiškai įtraukti įrašų atnaujinimus iš kitų tinklalapių (Google Reader, FlickR, Twitter, Picasa, Blogger, Youtube, jūsų tinklalapio RSS...).

Tiek teorijos, o ką praktiškai mums duoda Buzz? Kaip jis įsipaišo Google produktų ir kitų Interneto servisų kontekste?

Kuo Buzz skiriasi nuo Twitter?

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...

Kuo Buzz skiriasi nuo Facebook?

Facebook - pilnavertis socialinis tinklas, su vartotojų profiliais, draugų ryšiais, socialinėmis grupėmis ir t.t. Buzz išpildo tik vieną „Facebook“ 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).

Kodėl integracija į GMail?

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 „Orkut“, tačiau jis populiarus berods tik Brazilijoje, yra Facebook Connect analogas „Google friend connect“, 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.

Atrodo, jog vieninteliai pasiteisinę Google produktai - jų paieškos sistema ir GMail. Pakišti „Buzz“ visiems GMail vartotojams po akimis yra teigiamas sprendimas, tačiau aš vadovaučiausi „Friendfeed“ kūrėjo Paul Bucheit išsakyta fraze: „If your product is great it doesn't have to be good“, todėl manau, kad Buzz, kaip (tariamai) pasiteisinusio produkto, vieta - ne kaip GMail vienos iš funkcijų, bet kaip atskiro produkto.

O gal ne viskas taip blogai?

Buzz iš esmės yra geras produkas. Produktas, kokio Google trūko, ir kurio bandoma suklijuoti atskirus Google produktus į vieną visumą.

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?

Ir atrodo, jog tinkami sprendimai kažkada lyg ir buvo padaryti (turiu omenyje iGoogle, kuris gal ir galėtų būti tuo centriniu tašku), bet dabar juos pamiršus yra bandoma iš naujo išrasti dviratį.

Sausis12

Populiariausios 2009 m. programavimo kalbos (Komentarai 6)

Žymės: php,ruby,java,go,objective-c,tiobe

Kompanija „Tiobe“ paskelbė populiariausių 2009 metų programavimo kalbų sąrašą. Šis sąrašas sudaromas pagal Tiobe indeksą, kuris remiasi paieškos sistemų (Google, Google Blogs, MSN, Yahoo!, Wikipedia ir YouTube) rezultatais.

Tiobe indeksas

Labiausiai (1,25%) į viršų pakilo „Google“ programavimo kalba „Go“, 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.

12 vietoje atsirado „Objective-C“ programavimo kalba, kuria kuriamos programos iPhone. Natūralu, jog iPhone populiarumas atsispindėjo ir šiame indekse. Ši kalba pagal populiarumą pakilo 1,24%.

Tendencingesnių programavimo kalbų sąraše verta paminėti ir PHP, kuri pakilo 1,19% ir, aplenkusi C++ ir (Visual) Basic, atsidūrė 3 sąrašo vietoje bei Ruby, kuri pagaliau įkopė į dešimtuką, išstūmusi iš jo „Delphi“.

Lyderio pozicijas toliau išlaiko Java, nors jos populiarumas nukrito 1,54%.

Gruodis23

Sveikinimai ir gimtadienių priminimai - patogiau

Žymės: sveikinimai,šventės,kalėdiniai sveikinimai,Kalėdos

CARDS.LT

Prieš didžiąsias metų šventes CARDS.LT padariau keletą patobulinimų, kad sveikinti draugus ir artimuosius būtų kur kas paprasčiau nei anksčiau.

Į 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ų.

Tam, kad galėtume kurti kontaktus, tereikia prisijungti su savo OpenID paskyra. Tam tiks ir Jūsų Google (GMail) ar Yahoo paskyra.

Prisijungę kairėje pusėje esančiame meniu "Vartotojo zona" matysime 2 naujus punktus:

  • Kontaktai - kontaktų kūrimas, redagavimas:

Kontaktų sąrašas

  • Gimtadieniai - kalendorius su Jūsų artimųjų gimtadieniais:

Gimtadieniai

Jei esate patvirtinęs savo el. pašto adresą (tai galima padaryti pasirenkant punktą "Gauti atvirukai"), el. paštu gausite priminimus apie kitos dienos solinezantus:

Priminimas apie gimtadienį

 

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ų Gravatar'us, bus rodomos ir nuotraukos.

Kontaktų automatizavimas

Gerų švenčių! :)

Spalis22

Komunikacija su Iframe per Javascript bei JQuery

Žymės: html,javascript,jquery

Iframe - HTML elementas, leidžiantis tam tikroje tinklalapio vietoje įkelti kito tinklalapio turinį.

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.

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:

document.domain = 'example.com';

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į.

Komunikaciją tarp pagrindinio puslapio ir į jį įterpto Iframe'o atspindi šie pavyzdžiai.

Pagrindinis puslapis (pvz.: index.html)

<html>
<head>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
    google.load("jquery", "1.3.2");
</script>
</head>
<body>
<iframe id="myIframe" src="iframe.html" width="100" height="100" scrolling="no" frameborder="0" marginwidth="0" marginheight="0"></iframe>
<div id="foo">FOO</div>
<script type="text/javascript">
    // Naudojant skirtingus subdomenus, nurodome bendrą domeną:
    document.domain = 'example.com';
   
    $('#myIframe').load(function()
    {
        // jQuery pavyzdys:
        var frame = $('#myIframe').contents();
        console.log('jQuery: ',frame.find('#bar').html());
       
        // Javascript pavyzdys:
        frame = document.getElementById('myIframe').contentDocument;
        // Jei neveikia contentDocument, galima naudoti contentWindow.document
        console.log('JS: ', frame.getElementById('bar').innerHTML);
    });
</script>
</body>
</html>

Iframe puslapis (iframe.html)

<html>
<head>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
    google.load("jquery", "1.3.2");
</script>
</head>
<body>
<div id="bar">BAR</div>
<script type="text/javascript">
    // Naudojant skirtingus subdomenus, nurodome bendrą domeną:
    document.domain = 'example.com';
   
    // jQuery pavyzdys - ieškome #foo elemento window.parent.document kontekste
    console.log('jQuery: ', $('#foo', window.parent.document).html());
    // Javascript pavyzdys:
    console.log('JS: ', window.parent.document.getElementById('foo').innerHTML);
</script>
</body>
</html>

Šie pavyzdžiai Firebug konsolėje parodys atitnkamų elementų turinius.

Spalis20

PHP loginiai operatoriai ir operatorių eiliškumas

Žymės: php

Atliekant veiksmus su loginiais operatoriais ir naudojant juos sąlygos sakiniuose, dažnai tikimasi tokios sąlygos schemos:

if ( <sąlyga> [ == <rezultatas> ] ) <atliekami veiksmai>;

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.:

$a = 5;
$b = 2;
echo ($a & $b == 0)?'nulis':'ne nulis'; // ne nulis
echo (($a & $b) == 0)?'nulis':'ne nulis'; // nulis

$a = 1;
$b = 2;
echo ($a & $b == 2)?'du':'ne du'; // du
echo (($a & $b) == 2)?'du':'ne du'; // ne du

 

Operatorių eiliškumas iš PHP manual'o.

Associativity Operators Additional Information
non-associative clone new clone and new
left [ array()
non-associative ++ -- increment/decrement
non-associative ~ - (int) (float) (string) (array) (object) (bool) @ types
non-associative instanceof types
right ! logical
left * / % arithmetic
left + - . arithmetic and string
left << >> bitwise
non-associative < <= > >= <> comparison
non-associative == != === !== comparison
left & bitwise and references
left ^ bitwise
left | bitwise
left && logical
left || logical
left ? : ternary
right = += -= *= /= .= %= &= |= ^= <<= >>= assignment
left and logical
left xor logical
left or logical
left , many uses

 

Spalis15

Neversijuotų SVN failų trynimas (Komentarai 3)

Žymės: svn,subversion,linux

Dirbant su versijų kontrolės sistema Subversion (SVN) pasitaiko atvejų, kai tenka ištrinti failus, neįtrauktus į versijų kontrolę.

Pavyzdžiui, perjungiant (switch) į kitą šaką (branch), ar turint nereikalingų failų, juos ištrinti galima komanda (veikia Unix sistemose):

svn status --no-ignore | grep '^\?' | sed 's/^\? //' | xargs rm -rf

Ši komanda ištrins net ir tuos failus, kurie buvo direktorijoje su svn:ignore savybe (property), atitnkančia tuos failus.

Rugpjūtis31

Su tinklaraščių diena!

Žymės: blog day

Blog Day 2009

Š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.

Mano naujausi atradimai:

O ką naujo radai TU? :)

Plačiau apie tinklaraščių dieną day.lt ir blogday.org.

Rugpjūtis27

PHP atnaujinimas CentOS sistemose (Komentarai 5)

Žymės: php,centos,vds,hostex

Prieš kurį laiką persikėliau į Hostex - įsigijau ten VDS su įdiegta CentOS.

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).

Tam, kad atnaujinti paketus, mums reikės:

  • Įdiegti yum programą (paketų tvarkymui)
  • Įtraukti repozitoriją, kurioje yra atnaujinti paketai (naudosime http://www.jasonlitka.com/yum-repository)
  • Atnaujinti reikiamus paketus
  • Perkrauti HTTP serverį

Yum galime įdiegti iš RPM paketo, arba per grafinę serverio paketų valdymo aplinką (Hostex atveju - Parallel Plesk).

Repozitoriją įtrauksime, sukurdami failą /etc/yum.repos.d/utterramblings.repo (galime naudoti vi, vim arba nano) ir įrašydami ten tokią informaciją:

[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

Paketus atnaujiname iškviesdami komandą:

yum -y update php

Serverį perkrauname iškviesdami komandą:

 

service httpd restart

 

Daugiau informacijos ČIA ir ČIA.

Rugpjūtis26

Mokėjimai.lt saugumo spragos ir dviprasmiška specifikacija (Komentarai 11)

Žymės: php,saugumas,mokėjimai

Mokėjimai.lt

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.

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 "User Agent" reikšmė yra "IDAMAS XML Sender", 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?

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.

Lietuviškasis variantas:

 

//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'] <> $test_mode){
    die ("šaltinis netikras"); 
} 

function mk_check ( $password, $id, $mechant_id ) {
    return md5("{$password}|{$id}|{$_SERVER['REMOTE_ADDR']}|{$mechant_id}");
}

 

Tuo tarpu angliškas (webtopay.com) variantas:

 

    $your_webtopay_pass = md5("mypassword"); // please, enter your webtopay.com password
    if ( TestTransaction( $_GET['_ss1'], $your_webtopay_pass, $_GET['orderid'] ) ){ //verification of information source.
        //Everything is OK
    }else{
        //Something is wrong
    }

    function TestTransaction( $transaction, $userPassword, $ordeID, $test = 0, $status = 1 ){
        return ( $transaction == md5("{$userPassword}|{$ordeID}|{$test}|{$status}") );
    }

 

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.

Tiesa, jie visus duomenis pasirašo viešojo rakto principu naudodami SSL sertifikatą, todėl yra ir kitas būdas patikrinti duomenų validumą.

Ž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 ;)

Mokėjimo sistemos veikimo schema yra tokia:

1. Vartotojas formos duomenis (čia turime Order ID) perduoda mokėjimai.lt sistemai

2. Vartotojas nukreipiamas į banką ir ten sumoka pinigėlius. Grįžta į mokėjimai.lt

3. Siunčiama užklausa (su _ss1) kliento sistemai. Klientas pasižymi, kad už jo paslaugas ar prekes buvo apmokėta.

4. Vartotojas grąžinamas pas klientą

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ę.

O toliau elementarus brute-force, arba paieška iš rainbow table (juk jokia druskelė neįmaišoma į MD5 algoritmą).

Ir štai - turime vartotojo slaptažodį, kuriuo prisijungsime prie mokėjimai.lt sistemos.

Apie mokėjimai.lt saugumą taip pat rašė Steponas Kazakevičius.

« 1 2 ... 5 6 »

Įrašų RSS Įrašų RSS