A language is only as good as its developer is.

Free books

Kadangi paskutiniu metu netaip jau ir daug laiko turiu straipnsių rašymui (o jų tikrai nemažai dar laukia :) ) ir blog’o apleisti nesinori, taip pat ir delicious.com uždaro (ieško pirkėjų). Tad reikia iškelti visas savo sukauptas nuorodas.

Ta proga norėčiau pasidalinti nuorodomis į nemokamas knygas apie programavimą:

  • http://www.e-booksdirectory.com/programming.php
  • http://www.flazx.com

Bent jau man, kai reikia kokio eBook’o – tai visada jį randu viename iš paminėtų puslapių :) Gero naršymo ir linskmų likusių švenčių ;)

Zend Webinars

Kadangi mano turimi videocast’ai nespėja taip greitai atsinaujinti, tad susiradau (prisiminiau) dar vieną šaltinį, kur galėčiau pasižiūrėti apie PHP & Zenf Framework.

http://www.zend.com/en/resources/webinars/

Manau daugumai ši nuoroda ir taip žinoma :) Aš dažniausiai stengiuosi sudalyvauti live webinar’uose, bet ne visada pavyksta. Tad šis resursas kaip tik, kai netūrėsiu ko naujo peržiūrėti :)

P.S. jis reikalauja būti registruotu zend.com vartotoju.

wkhtmltopdf for PHP

Vienam iš projektų, su kuriuo dirbu, reikėjo PDF generavimo. Aišku, aš kaip tingus programuotojas tikrai nesu nusiteikęs generuoti lentelių ir jų stilių, tad pasiėmiau jau naudotą įrankti “Wkhtmltopdf”.

Tada atradau, kad jie turi parašę klasę integracijai su PHP. Bet man ji nelabai patiko, dėl $_GLOBALS ir statinių reikšmių, tad nusprendžiau, kad bus maloniau pasirašyti savo klasę ir ją naudoti.

Rezultatas – https://github.com/aur1mas/Wkhtmltopdf :)

Galvojau klasė bus trumpesnė, bet sumoje gavosi ~500 eilučių. Tikiuosiu dar kam be manęs ji bus naudinga ;)

Don’t freelance

Praėjo jau 2 mėn., kai oficialiai palikau nuolatinį darbą ir nusprendžiau tapti laisvai samdomu programuotoju (freelancer’iu). Džiugu, kad nė akimirkos dar nesigailėjau dėl savo sprendimo :)

Pagaliau pradėjau judinti savo projektus, o vieną iš jų šį mėn. ir paleidom:

  • pozicijos.lt – įrankis skirtas tinklapių savininkams, kuriems įdomu kaip pagal tam tikrus raktinius žodžius jie yra randami paieškos sistemose. Taip pat, koks srautas ateina pagal tuos raktinius žodžius.

Šį mėn. planuoju paleisti dar vieną projektą. Bet apie jį rašysiu kituose įrašuose :)

Ta proga, radau iliustraciją, kuri visai neblogai iliustruoja kaip atrodo freelancer’io darbas :)

don't freelance

Doctrine Profiler

Pradėjus dirbti su ZFDebug pirmas dalykas, kurio pasigedau – Doctrine’os profiler’io palaikymo. Tad nusprendžiau jį parašyti. Juolab, kad neseniai kolega irgi buvo jį parašęs, tad iš esmės dviračio išradinėti neteko :) Tad čia gausis kaip praeito straipsnio tąsa.
More »

ZF Debug

Neseniai atradau Zend Framework debuger’į. Symfony tokį debuger’į turi pagal nutylėjimą. Tad, padirbėjęs su šiuo framework’u buvau pagalvojęs, kad visai neblogai būtų kažką panašaus tūrėti ir ZF. Bet mintys ir liko mintimis, kol neseniai keli kolegos (ačiū Pauliui ir Valdui) parodė, kad toks jau yra (ir gan seniai) :) . Tad integruojam!

More »

login /registracija

Pagaliau pradėjau programuoti devnet.lt projektą :) Manau kelių sav. bėgyje paleisiu beta versiją, kurią galėsite laužyti ir kritikuoti.

Programuojant kilo tokia mintis: o kodėl yra atskiriama registracija ir prisijungimas? Pvz. jei visa aktuali info (reikalinga prisijungti) yra email ir slaptažodis. Galvoju devnet.lt projekte šias dvi funkcijas sujungti į vieną: jei vartotojas ateis pirmą kartą – suveiks kaip registracija, priešingu atveju – prisijungimas. O prisijungus / užsiregistravus bus galima suvesti papildomą info apie save.

Kokią jūsų nuomonė apie tokią idėją? Laukiu komentarų :)

P.S. prisegu foto, kaip atrodo devnet.lt (sneak-peak) karkasas :)

devnet.lt

Domain wildcard

Neseniai reikėjo visus vieno domeno subdomenus nukreipti atgalį į pagrindinį domeną. Kitais žodžiais tariant, reikėjo sukurti alias’ą :)

Kadangi mano žinios serverių konfigūravime nėra labia didelės, tad galvojau, kad sprendimas bus daug sudėtingesnis, negu, kad iš tiesų jis buvo ;)

Užteko paredaguoti apache vhost config’ą, perkrauti apache daemon’ą ir vuolia! :) Visa magija slypi ServerAlias nustatyme. Nurodžius prie *, visi subdomenai bus nukreipti atgal į domeną.

<virtualhost *>
        ServerName  pozicijos.lt
        ServerAlias *.pozicijos.lt

        DirectoryIndex index.php
        DocumentRoot /www/pozicijos.lt/public/
	....
</virtualhost>

M. Burke “The principles of successful freelancing” [I dalis]

Prieš pradėdamas dalį savo laiko skirti laisvai samdomam darbui tūrėjau nemažai dvejonių. Ir kaip tik tuo pat metu iš (ex)kolegos gavau šią knygą :) Perskaitės ją, supratau, kad buvau neapgalvojęs tikrai daug dalykų. Tad tiems, kurie užsiima freelance’u arba planuoja tai daryti siūlau pasiskaityti apžvalgą arba iš karto ieškotis knygos :)
More »

setter & getters

Pastaruoju metu dažnai apsirašinėjant objektus teko rašyti daug setter’ių ir getter’ių. Man, kaip ir manau daugumai programuotoju, pabodo vis rašyti tą patį, tad nusprendžiau panaudoti magiškas PHP funkcijas :) Tiksliau užteko vienos __call(string $name, array $arguments). Kodas atrodo taip:

/**
* dynamic set & get methods
* @param string $name
* @param string $value
* @author aur1mas
*/
public function __call($name, $value)
{
/**
* lower 4th letter (in setter & getters it's first letter of property)
* @var string
*/
$name{3} = mb_strtolower($name{3}, 'utf-8');
if (strpos($name, 'set') !== false) {
$property = '_' . str_replace('set', '', $name);
if (property_exists($this, $property)) {
$this->$property = $value[0];
return;
}
}
else if (strpos($name, 'get') !== false) {
$property = '_' . str_replace('get', '', $name);
if (property_exists($this, $property))
return $this->$property;
}
else {
  throw new Exception(
    'Dynamic setting only supports set & get methods');
}
  throw new Exception(
    'Property: ' . $property . ' not found in object ('
      . get_class($this) . ') declaration.');
}

Manau daugumai kodas yra aiškus. Atributus apsirašinėju su ‘_’ prefix’u (pagal Zend Framework standartą).
Kodo panaudojimo pavyzdys atrodytų taip:

<?php
class Human extends Base{
  protected $_eyes;
}

$human = new Human();
$human->setEyes('brown');

Jei kam kyla kokių nors klausimų ar turite pastabų (bug’ų) – rašykit :)