miffmedia.com

  • jquery-broom

    jQuery Broom plugin

    jQuery dodatak broom, dodaje "metlicu" na svako input polje. Metlica inace služi da počisti to isto polje.

  • ako-zatreba-the-action-would-require-the-installation-of-packages-from-not-authenticated-sources

    Ako zatreba: The action would require the installation of packages from not authenticated sources

    Strogo nepotreban post većini! Mada kada si već ovde veliki izgledi su da ti baš ovo treba. Dakle Ubuntu, greska 'The action would require the installation of packages from not authenticated sources'.

  • php-i-regex-regularni-izrazi

    PHP i RegEx (regularni izrazi)

    Šta su i kako glasi definicija regularnih izraza najbolje je da potražite ovde (recimo). Pokušaću da u što manje "tupljenja" objasnim kako je najbolje naučiti i koristiti regularne izraze u PHP-u.

  • reflection-api

    Reflection API

    Brian Cantwell Smith je 1980 godine u svojoj doktorskoj disertaciji osmislio termin refleksije u kompijuterskom programiranju, te svaki programer koji radi OOP a drzi do sebe mora da zna šta je i kako se primenjuje Reflection u programskim jezicima.

  • twitpic-photo-stream

    Twitpic photo stream

    Ne znam koliko vas koristi twitpic.com ali je jako dobra stvar. Deljenje slike preko tvitera (da, mora tviter nalog). Pa ako koristite pomenute servise i zelite stream slika sa twitpic-a evo, uz minimalno PHP kodiranje :)

Zadnje pisano

jQuery Broom plugin

jQuery dodatak broom, dodaje "metlicu" na svako input polje. Metlica inace služi da počisti to isto polje.

 

Korišćenje je krajnje jednostavno:

1. Korak

src="http://dev.miffmedia.com/appspot/broom/jquery.broom.js"

Ovo postavite na početku ili tamo gde pozivate dodatke inače.

2. Korak

Recimo da vam je id input polja mojePolje, dodajte u vas JavaScript kod sledece:

$('#mojePolje').broom();

Opcije

Kako je ovo jos uvek sveže, postoje tek nešto malo podešavanja:

  • bcolor - Boja pozadine, u HEX formatu #fff naprimer
  • color - Boja fonta, u HEX formatu #000 naprimer
  • icon - URL do slike koja će predstavljati metlicu, mora biti 16x16, podrzumevana je ova ovde http://dev.miffmedia.com/appspot/broom/images/broom.png
  • width - Dužina(Širina) izražena u px, podrazumevano je 120
  • border - U jednoj liniji sve :) podrazumevana vrednost je: 1px solid #333

Slobodno pišite u komentarima da li vam se svidelo i šta bi trebalo promeniti, a git repo je ovde: jquery.broom.

Primer kako to sve može da izgleda.

Ako zatreba: The action would require the installation of packages from not authenticated sources

Strogo nepotreban post većini!
Mada kada si već ovde veliki izgledi su da ti baš ovo treba. Dakle Ubuntu, greska 'The action would require the installation of packages from not authenticated sources'.

Rešenje iz naslova ide ovako:

sudo apt-key adv --recv-key --keyserver keyserver.ubuntu.com 40976EAF437D05B5
sudo cp -arf /var/lib/dpkg /var/lib/dpkg.backup
sudo cp /var/lib/dpkg/status-old /var/lib/dpkg/status
sudo cp /var/lib/dpkg/available-old /var/lib/dpkg/available
sudo rm -rf /var/lib/dpkg/updates/*
sudo rm -rf /var/lib/apt/lists
sudo mkdir /var/lib/apt/lists
sudo mkdir /var/lib/apt/lists/partial
sudo apt-get clean
sudo apt-get update
sudo dpkg --clear-avail
sudo dpkg --configure -a
sudo apt-get install -f
sudo apt-get update
sudo apt-get dist-upgrade

 

Thanks to ActionParsnip

PHP i RegEx (regularni izrazi)

Šta su i kako glasi definicija regularnih izraza najbolje je da potražite ovde (recimo).

Pokušaću da u što manje "tupljenja" objasnim kako je najbolje naučiti i koristiti regularne izraze u PHP-u.

RegEx u PHP-u
slika je sa: http://shirtoid.com/17208/regular-expressions/

Primena

Primena je skoro u svakom projektu, dobar primer su forme tj unos podataka i provera istih. Lepo je to što može Javascript-om da se proveri unos, ispravi i opomene korisnik ali čarobno Disable JavaScript i podaci iz forme odoše takvi kavi (zlonamerni recimo...), i onda tu nastupa (server-side) kontrola.

$s = 'lisica';
echo preg_match("/ic/", $s); //echo: 1
echo preg_match("/IC/", $s); //echo: 0

U Na ovom primeru se se da zaključiti da: veličina jeste bitna (velika i mala slova prave razliku), string lisica ima u sebi ic ali nema IC, i da koristim PHP funkciju preg_match.

Meta-characters

Snaga regularnih izraza je u meta karakterima, meta karakteri su inače skup znakova sa specijalnim značenjem i to ne literalnim. Zvuči pomalo uf.. ali je ustvari baš prava definicija, cela zamisao oko izkaza je da se pomoću obrazca (pattern) pronađu podudaranja u određenom stringu. Upravo taj obrzac formiramo pomoću meta karaktera.

Caret (stepen) ^

Početak stringa

$s = 'lisica';
echo preg_match("/^li/", $s); //echo: 1
echo preg_match("/^is/", $s); //echo: 0

Inče caret ima još jednu primenu

Dollar (dolar, string) $

Kraj stringa

$s = 'lisica';
echo preg_match("/ica$/", $s); //echo: 1
echo preg_match("/isi$/", $s); //echo: 0

Character class (uglaste zagrade) []

U izrazima uglasta zagrada predstavlja klasu karaktera što bi značilo da je u pitanju set karaktera slično kao niz

$s = 'liga';
echo preg_match("/[aeiou]/", $s); //echo: 1
$s1 = 'laig';
echo preg_match("/[aoiu]/", $s1); //echo: 1
$s2 = 'lag';
echo preg_match("/l[aoiu]g/", $s2); //echo: 1
$s3 = 'leg';
echo preg_match("/l[aoiu]g/", $s3); //echo: 0
$s4 = 'laog';
echo preg_match("/l[aoiu]g/", $s4); //echo: 0

^ Caret znak se koristi za početak stringa ali ako se koristi u uglastim zagradama onda znaci NOT.

$s = 'lisica';
if(preg_match("/[^o]/",$s)) echo 'Nema znaka o.';

Da spomenem znak $ u uglastim zagradama nema nikakvog značaja, samo običan dolar znak.

U klasi karakteraa korisna stvar je range (raspon) i znak je - (minus), tako da [a-e] znači da se traže poklapanja po [abcde]

$s = 'lisica';
echo preg_match("/[a-z]/", $s); //echo: 1
$s1 = 'BraonLisicaSkace';
echo preg_match("/[a-z]/", $s1); //echo: 1
$s2 = 'LISICA';
echo preg_match("/[a-z]/", $s2); //echo: 0
$s3 = '12345';
echo preg_match("/[a-zA-Z]/", $s3); //echo: 0
$s4 = '12345';
echo preg_match("/[^0-9]/", $s4); //echo: 0

Dot (tačka) .

Jako prosto, označava sve karaktere izuzev nove linije.

$s = 'lisica';
echo preg_match("/./", $s); //echo: 1
$s1 = 'lisica';
echo preg_match("/[.]/", $s1); //echo: 0
$s2 = 'lis';
echo preg_match("/l.s/", $s2); //echo: 1
$s3 = 'lig';
echo preg_match("/l.e/", $s3); //echo: 0
$s4 = 'liis';
echo preg_match("/l.s/", $s4); //echo: 0
$s5 = "l\re";
echo preg_match("/l.e/", $s5); //echo: 1
$s6 = "l\ne";
echo preg_match("/l.e/", $s6); //echo: 0

Asterix (zvezdica) *

a* označava 0 ili više karaktera a, da bih pokazao korišćenje * napisaću malo komplikovaniji izraz:


$s = "<html>";
echo preg_match("/<[A-Za-z][A-Za-z0-9]*>/", $s); //echo: 1
$s1 = "<b>";
echo preg_match("/<[A-Za-z][A-Za-z0-9]*>/", $s1); //echo: 1
$s2 = "<h2>";
echo preg_match("/<[A-Za-z][A-Za-z0-9]*>/", $s2); //echo: 1
$s3 = "<2>";
echo preg_match("/<[A-Za-z][A-Za-z0-9]*>/", $s3); //echo: 0

Plus +

a+ označava jedno ili više karaktera a.

$s = "php";
echo preg_match("/ph+p/", $s); //echo: 1
$s1 = "phhp";
echo preg_match("/ph+p/", $s1); //echo: 1
$s2 = "pp";
echo preg_match("/ph+p/", $s2); //echo: 0
$s3 = "12345";
echo preg_match("/[a-z]+/", $s3); //echo: 0

Question mark (znak pitanja) ?

a? predstavlja 0 ili jedano poklapanje karaktera a.

$s = "123456";
echo preg_match("/123-?456/", $s); //echo: 1
$s1 = "123-456";
echo preg_match("/123-?456/", $s1); //echo: 1
$s2 = "123--456";
echo preg_match("/123-?456/", $s2); //echo: 0

Curly braces (velike zagrade) {}

a{2} tačno 2 karaktera a
a{2,} 2 ili više a
a{,2} do 2 karaktera a
a{2,5} od 2 do 5 karaktera a

$s = "google";
echo preg_match("/go{2}gle/", $s); //echo: 1
$s1 = "gooogle";
echo preg_match("/go{2}gle/", $s1); //echo: 0
$s2 = "gooogle";
echo preg_match("/go{2,}gle/", $s2); //echo: 1
$s3 = "google";
echo preg_match("/go{,2}gle/", $s3); //echo: 0
$s4 = "google";
echo preg_match("/go{2,3}gle/", $s4); //echo: 1

Subpattern (pod obrazac, zagrade) ()

$s = "Braon lisica skace.";
echo preg_match("/^(Braon)/", $s); //echo: 1
$s1 = "Crvena lisica skace.";
echo preg_match("/^(Braon)/", $s1); //echo: 0
$s2 = "Braon lisica skace.";
echo preg_match("/^([0-9])/", $s2); //echo: 0
$s3 = "13 je srecan broj.";
echo preg_match("/^([0-9])/", $s3); //echo: 1

Logical Or (pipe, uspravna crta) |

$s = "Braon lisica skace.";
echo preg_match("/^(Braon|Crvena)/", $s); //echo: 1
$s1 = "Crvena lisica skace.";
echo preg_match("/^(Braon|Crvena)/", $s1); //echo: 1

Backslash (naopaka kosa crta) \

Naopaka kosa crta se koristi u slučaju da ovih 11 meta karaktera želite da proverite kao string, moraćete da ih escape-ujete (izbegnete) sa znakom backslash.

$s = 'miffmedia.com';
if(preg_match("/\./",$s)) echo 'Postoji znak .';
$s1 = 'miffmedia+com';
if(preg_match("/\+/",$s1)) echo 'Postoji znak + .';

Upotreba

Ovo je sasvim dovoljno predznanje da napravite svoj PHP email validator koji ima iskaz:

^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$

Gde svaka email adresa ima odrđeni format korisničko_ime @ domen . ekstenzija, tako da imamo izraze za korisničko ime: ^[a-zA-Z0-9._%-]+; domen: [a-zA-Z0-9.-]+ i za ekstenziju: [a-zA-Z]{2,4}.

Ovaj post sam najviše napisao zbog sebe samog, a vi koji ste zalutali možda i naučite nešto ili se podsetite... ;)

Reference:
http://www.regular-expressions.info/
http://php.net

Reflection API

Reflection API in PHP | miff blog

Brian Cantwell Smith je 1980 godine u svojoj doktorskoj disertaciji osmislio termin refleksije u kompijuterskom programiranju, te svaki programer koji radi OOP a drzi do sebe mora da zna šta je i kako se primenjuje Reflection u programskim jezicima.

Reflection je jako opširna tema, tako da primere za većinu možete videti na wiki stranici o refleksiji, ja ću pisati o voljenom PHP-u ;). Inače refleksija u ovom "našem" smislu i okruženju znači da program moze da nadgleda(sebe) i modifikuje sopstvenu strukturu i to u trenutku kada se izvršava(runtime).

Reflection API je sastvni deo PHP(core) i ne zahteva nikakve dodatne module za instalirati i/ili konfigurisati. Dakle od 5. verzije ali se slabo upotrebljava a i mnogi ne znaju da PHP to može ;).

Slučaji najčešćeg korišćenja:

  • Provera da li su odredjene metode dostupne
  • Pozivanje klase sa više kontrole
  • Izmene stanje promenljivih i metoda
  • Izvlačenje vrednosti promenljivih koje su inače nedostupne

Navode se još neka kao dobijanje meta informacije iz komentara ali iskreno nisam probao, dosada nisam imao potrebe za tako nečim, u svakom slučaju celokupnu dokumentaciju možete pročitati na php manual stranicama.

Ako pogledate kod, videćete kako je moguće modifikovati nedostupnu promenljivu:

  class prvaKlasa {
        protected $prva = 1;
        public function izvPrvu() {
            return $this->prva;
        }
    }
    class drugaKlasa extends prvaKlasa {
        protected $druga = 2;
        public function izvDrugu() {
            return $this->druga;
        }
    }
    class trecaKlasa extends drugaKlasa {
        protected $treca = 3;
        public function izvTrecu() {
            return $this->treca;
        }
    }

 

 

Ako instanciramo klasu trcaKlasa i pozovemo metodu izvDrugu(); ispis će biti 2

    // bez refleksije
    $obj = new trecaKlasa();
    echo 'Bez Refleksije: '.$obj->izvDrugu();

 

 

Morate da primetite da ne postoji direktan, posredan način da se promenljiva $druga modifikuje, ali uz pomoć Reflection API-ja može:

    // refleksija
    $rf = new ReflectionClass('trecaKlasa');
    $ref = $rf->getProperty('druga');
    $ref->setAccessible(true);
    $ref->setValue($obj, 64);
    echo 'Sa Refleksijom: '.$obj->izvDrugu();

 

 

Ispisaće 64, moćno zar ne?

 

Ako kod nije bas najjasnije prikazan, primer ovog fajla je ovde.