Implementing Zend Framework 2 twitter service

Posted by komita1981 | Posted in Zend Framework 2 | Posted on 14-07-2014

0

Zend framework 2

Recently I got task to implement Twitter feed into application built on Zend Framework 2. I found that Zend Framework 2 is having ZendService\Twitter\Twitter library which provides a client for the Twitter API so I wanted to give it advantage over other libraries available on Packagist. Using this service it’s possible to get and update your status, reply to friends, direct message friends, block and ublock users, follow/unfollow people, mark tweets as favorites, and much more. I thought It would be easy and it actually was except one tiny quirk in official documentation of package.

First of all we have to add dependency into composer.json file

and update only this package

Our application can now use this package to use Twitter API. You have to get four keys from twitter to use it’s API :

  1. Access token – (array key value – ‘twitter-access-token-here’)
  2. Access token secret – (array key value – ‘twitter-access-secret-here’)
  3. API key – (array key value – ‘twitter-consumer-key-here’)
  4. API secret – (array key value – ‘twitter-consumer-secret-here’)

You will get this key after creating new app on this link. When you finish with this you can use this API in you Zend 2 application.

Vagrant and local tmp folder write permissions

Posted by komita1981 | Posted in Vagrant | Posted on 04-07-2014

0

Recently I started using vagrant. That was the best decision I made recently and I can’t imagine to work on some project without it. For all my projects I created vagrant configuration. From the beginning something was strange to me – Vagrant created many temp files and folders inside directory where Vagrantfile was located. I asked all my fellows who have had experience with Vagrant and no one faced the same problem – no additional files – only Vagrantfile. I tried to ignore this problem since I coulnd’t find a solution – even I asked Google :-D . Then I bumped on problem – on some project I even couldn’t execute command VAGRANT UP. I found what was wrong with my OS (Ubuntu 12.04) because I got clear message from vagrant.

Upravljačke i strukture podataka u Python-u

Posted by komita1981 | Posted in Python | Posted on 08-01-2013

0

Python strukture podatakaZa novu godinu sam od kolege dobio najbolji mogući poklon za programera – knjigu o programiranju. Konkretno – Python – uvod u programiranje. Ovo je veliki vetar u leđa za moje učenje. Zbog mnogobrojnih obaveza i interesovanja nisam u stanju da posvetim baš puno vremena svemu ali za Python se uvek mora naći vremena. Uskoro će doći vreme kada ću i ja programirati na jeziku u kome se, kažu, kodira brzinom razmišljanja. Danas ću nastaviti da vas upoznajem sa osnovnim komandama u Python-u. Kroz primere ću vas naučiti da koristite grananje, petlje, n-torke, liste i rečnike i uputiti vas u osnovne komande nad stringovima.

Ko se boji Git-a još

Posted by komita1981 | Posted in Git | Posted on 21-12-2012

2

Git logoGit je sistem za praćenje i kontrolu revizija fajlova. Cilj ovog članka je da korisnika uputi u osnove ovog alata, da pokaže koliko je jednostavan kao i da ga motiviše da počne da ga koristi. Ja već nekoliko godina koristim SVN ali me rastuća popularnost Git-a podstiče da ga što bolje proučim i primenim. Nije mi ovo prvi put da se susrećem sa Git-om. Koristio sam ga po sistemu problem/rešenje tj. naučio sam osnovne stvari ali kada je dolazilo do problema bilo kakve vrste pribegavao sam najgorim mogućim rešenjima. Nadam se da će mnogi koji su ovaj alat koristili na sličan način naći u ovom postu izvor motivacije da svoje znanje iz ove oblasti podignu na viši nivo. Siguran sam da će im u predstojećem periodu zatrebati. Danas se gotovo svi open source projekti oslanjaju na ovaj alat a podatak da ga u 2011. godini koristilo 11% a u 2012. godini čak 27% developera jasan je pokazatelj njegove vrednosti.

Kako je sve počelo

Nastao je iz praktične potrebe zajednice koja je bila okupljena oko razvoja kernela Linux-a. Najpre je u ovu svrhu korišćen softver BeetKeeper. Vremenom je došlo do pogoršanja odnosa između Linux zajednice i firme koja je stajala iza Bitkeeper-a te je Linus Torvalds, nezadovoljan ostalim alatima koji su tada bili dostupni, odlučio da napravi novi sistem za verzionisanje gde će primeniti dobru praksu i iskustva koja su stekli koristeći BeetKeeper. Sam naziv potiče od engleske reči “git” što u prevodu znači glup, neprijatan čovek. Linus u šali kaže “I’m an egotistical bastard, and I name all my projects after myself. First Linux, now git”. Ciljevi koje su postavljeni pred novi sistem su:

  • Da bude brz
  • Da bude jednostavnog dizajna i jednostavan za učenje
  • Da podržava veliki broj branch-eva
  • Da bude potpuno distribuiran
  • Da bude siguran i otporan na greške
  • Da bude sposoban da podrži velike projekte

Možemo slobodno reći da je ovaj alat ispunio zacrtano u svim kategorijama.

WebCampZg – konferencija dobrih vibracija

Posted by komita1981 | Posted in Webcampzg | Posted on 27-11-2012

0

U prethodnom postu sam pisao o pripremama za odlazak na prvu konferenciju WebCampZg. Sada, kada su prošla tri dana od njenog završetka i kada su se svi utisci sumirali, mogu reći da su moja očekivanja u potpunosti ispunjena. Konferencija je bila besplatna i u njenoj organizaciji je učestvovalo više programerskih zajednica iz Zagreba. U razgovoru sa nekima od njih može se primetiti njihova posvećenost i želja za napretkom cele zajednice. Iz toga je i proistekao ovaj događaj čija je organizacija bila na najvišem mogućem nivou. Predavanja su počinjala i završavala se tačno u minut tako da ste sa lakoćom mogli ispratiti ono što ste planirali. Svi predavači su bili dovoljno glasni, jasni i odlično pripremljeni. Pitanja su se mogla postaviti kako na samom predavanju tako i na pauzama.

U susret konferenciji WebCampZg

Posted by komita1981 | Posted in Webcampzg | Posted on 23-11-2012

2

Negde početkom oktobra na twitter-u sam došao do informacije da će se u Zagrebu krajem novembru održati konferencija na temu web razvoja. U tom trenutku sam znao samo jedno – da se obavezno moram naći tamo. Nikada ranije nisam imao priliku, iz raznoraznih razloga, da se nađem na nekoj konferenciji te ovako nešto nipošto nisam hteo da propustim. Ubrzo je određen tačan datum konferencije, 24.11. i pušten je prvi kontigent karata. Posebno bih naglasio da su karte besplatne – dovoljno je bilo prijaviti se. Bio sam dovoljno brz pa sam uzeo jednu od prvih 100 early bird karata koje su planule nekoliko sati od puštanja. Nakon toga organizatori su objavili spisak izabranih predavanja i pustili drugi deo karata koje su se takođe razgrabile. Ma koliko bio oduševljen izborom predavanja moram priznati da sam se ubrzo našao u velikoj muci shvativši da moram odlučiti koja predavanja neću pratiti.

Upoznavanje sa Python-om i prvi kodovi

Posted by komita1981 | Posted in Python | Posted on 19-11-2012

2

Pytho zoomKao što sam napisao u prethodnom postu moje predznanje o Python-u ravno je nuli. Put od hiljadu milja počinje se prvim korakom. Ja sam uspešno zakoračio tj. instalirao sam Python ali šta dalje? Odlučio sam da se najpre upoznam sa osnovnim informacijama o samom jeziku,  zatim da se upoznam sa sintaksom i na kraju da napišem jednostavan primer kao dokaz da sam naučio nešto novo. Ostajem pri svojoj odluci da sve što naučim podelim na ovom blogu jer smatram da znanje treba širiti a stečeno iskustvo podeliti sa ljudima sličnih interesovanja. Ako barem jednom čoveku pomognem, ili mu se ovo učini interesantnim, smatraću da moj trud nije bio uzaludan. Od literature najviše koristim zvaničnu dokumentaciju i besplatnu, javno dostupno, knjigu Dive into Python 3.

Python i ja – beginning of a beautiful friendship

Posted by komita1981 | Posted in Python | Posted on 07-11-2012

0

Php PythonNapravio sam prvi, najvažniji korak u odluci da naučim novi programski jezik. To ne znači da ću da zanemarim moj primarni izbor – PHP – naprotiv nastaviću i dalje da ga učim. Glavni krivac zašto sam krenuo u ovom pravcu jeste kolega Ivan Đurđevac jer me je ubedio da svaki programer u toku jedne godine mora da ovlada bar jednom novom tehnologijom.. Na njegov nagovor krećem u ove vode i nadam se da ću jednoga dana moći da se zovem Python programerom. U ovom trenutku o njemu ne znam apsolutno ništa te će mi svaki savet, preporuka a naročito kritika dobro doći. Opisivaću svoj put u učenju kako bih drugima preneo iskustvo i ohrabrio sve one koji ovo čitaju da krenu mojim stopama.

Analiza performansi Redisa u radu sa PHP bibliotekama

Posted by komita1981 | Posted in NOSQL, PHP | Posted on 30-07-2012

3

Php Redis

Opšte je poznato da je PHP malo sporiji jezik za komunikaciju sa Redisom ukoliko ga uporedimo sa jezicima kao što je Rubby ili Java. Cilj ovog posta je da pokažemo kako se ponašaju različite PHP biblioteke u radu sa Redisom, kakva je brzina izvršenja i kolika je potrošnja memorije. PHP Redis klijenti koji će biti analizirani su

  1. PHPRedis – Napisan je u C jeziku i instalira se kao ekstenzija u PHP. Najbolje uputsvo za instalaciju možete pronaći ovde. Pre testiranja bio sam ubedjen da će se pokazati kao najbolji u svim testovima. Ima odličnu dokumentaciju (za svaku funkciju)  i ukoliko znate komande Redis servera znaćete da koristite i funkcije PHPRedisa.

  2. Predis  – Najkompletniji i najbolje napisan klijent gledajući ga iz programerskog ugla. U potpunosti je napisan u skladu sa OOP principom. Zahteva minimum PHP 5.3.2 . Kod je u skladu sa PSR-0 standardom te se može koristiti autoloading a može se instalirati preko Composer-a. Što se tiče dokumentacije mogli bise ugledati na PHPRedis budući da im je ovo slabija strana. Aktivno se razvija. U testovima nisam uspeo da pustim više od 86000 ključeva u transakcionom (pipeline) režimu.

  3. Rediska –  Pregledajući postojeće testove imao sam određene predrasude prema ovom klijentu. Ispostavilo se da testovi koji su navodili da ovaj klijent ne završava transakcije nisu primetili da Rediska ne može da podržava u transakcijama više od 18000 ključeva kod hasheva i više od 22000 ključeva ( na računaru na kom sam testirao što ne znači da će na nekom drugom biti ista ograničenja) kod ostalih struktura što jeste nekavrsta ograničenja ukoliko vam to u praksi zaista i treba. Sveopšti utisak je da je Rediška solidan PHP Redis klijent. Rediska, kao i Predis, predstavlja grupu klasa. Ima dobru dokumenaciju (uključujući detaljna uputstva kako ga integrisati sa Zend i Symphony frejmvorcima ali bi mogli da je dorade u određenim segmentima (pipeline). Poslednja verzija Rediske, u trenutku pisanja ovog posta, datira od 02.04.2011. godine te se ne može reći da se aktivno razvija.

  4. Redisent – Jednostavan Redis klijent koji se sastoji od samo jednog fajla. Jednostavan je za korišćenje i može se naći kao default klijent u PHP framework-cima kao što su FuelPHP i Laravel. Intuitivan je za korišćenje tj metode su iste kao na samom Redisu.

  5. RedisServer – Takođe jednostavan klijent i dosta sličan Redisentu. Izuzetno je lagan za korišćenje.

Redis – moć brzine i jednostavnosti

Posted by komita1981 | Posted in NOSQL | Posted on 24-05-2012

3

Šta je REDIS?

Za Redis (REmote DIctionary Server) se uopšteno može reći da je napredna key value baza koja se u poslednje vreme sve više koristi. Budući da kod nas nema  tekstova na ovu temu želja mi je da kolegama programerima predstavim ovaj zaista moćan alat. O njegovoj rastućoj popularnosti dovoljno govori to da se Redis gotovo uvek koristi kao jedno od rešenja kada se radi reinženjering sajtova sa velikom posetama. Danas ga srećemo u aplikacijama kao što je Instagram, Pinterest, Youporn, Tumblr, StackOverflow, Disqus, Guardian, Github, Blizzard i mnogi mnogi drugi. Potpuno je besplatan,  napisan u jeziku ANSI C u svega dvadesetak hiljada redova. Napisao ga je italijan Salvatore Sanfilippo (@antirez). Od 2010 godine Redis sponzoriše ga VMVare alli je i dalje ostao besplatan. Podržava master-slave replikaciju a ono čemu je autor posvetio punu pažnju u novoj verziji je clustering i podrška izvršenju Lua skripti nad Redis serverom.

Glavne prednosti Redisa:

  • Brzina izvršenja (najbrži key value store),
  • Izutno je lagan za učenje (jednostavna konfiguracija i pokretanje)
  • Aktivan razvoj (svakodnevno se razvija i nadogradjuje)
  • Omogućava master-slave replikaciju što doprinosi skalabilnosti
  • Atomske operacije

REDIS – server struktura podataka

Redis ne treba shvatiti kao običan key value skladište podataka kao što je Memcache. Redis jeste to ali je i mnogo, mnogo više – to je zapravo server struktura podataka. Struktura podataka je način na koji se podatak zapisuje u računar. Razumevajući strukture u Redisu, kako rade, koje komande su nad njima moguće i koje podatke možemo čuvati u njima ključno je za razumevanje samog Redisa. Redis je server sledećih struktura podataka:

  1. Stringovi (Strings ) – predstavljaju osnovnu strukturu key value pristupa. Ključevi mogu sadržati bilo šta (budući da su binary safe) od podataka veličine do 512 MB. Dakle ključ ili vrednost može može da bude npr. sadržaj nekog JPG fajla, json, običan tekst itd…
  2. Skupovi (Sets) – predstavljaju neuredjenu kolekciju jedinstvenih elemenata. Dakle Redis ne dozvoljava ponavljanje elemenata u skupovima što znači da programeri ne moraju da vode računa o tome da li neki element već postoji u skupu ili ne – Redis to odradjuje umesto njih. Programeri pozivaju osnovne komande za dodavanje, izbacivanje, presek, uniju i razliku elemenata u skupovima. Maksimalan broj elemenata je 232 -1 tj. ukupno 4294967295 elemenata po skupu. Skupovi predstavljaju idealnu strukturu za društvene mreže upravo zbog osnovnih komandi nad elementima.
  3. Sortirani skupovi (Sorted sets) – predstavljaju uredjenu kolekciju jedinstvenih elemenata. Da bi postigla uređenost koristi se rezultat (score) tj. svakom elementu se priključuje kao podatak rezultat na osnovu kojeg se rangiraju elementi. Budući da su elementi jedinstveni svaki element će imati jedan i samo jedan rezultat. Maksimalan broj elemenata je 232 -1 tj. ukupno 4294967295 elemenata po skupu. Podržane su komande nad skupovima kao i kod običnih skupova i uz to, omogućene su komande pomoću kojih lako dolazimo do podataka kao što su prvih deset elemenata po rezultatu, rang elementa na osnovu rezultata, elementi koji imaju rezultat između određenih vrednosti itd.
  4. Heševi (Hashes) – predstavljaju zapravo asocijativni niz. Ruby programerima je dobro poznat ovaj termin budući da su već sreli sa pojmom heševa u svom jeziku. Dakle heševi barataju sa nizovima stringova tj postoji više parova ključ-vrednost u okviru heša. Heš se koristi kada nam je potrebna struktura slična tabelama u bazama podataka. Potrebno je naglasiti da heševi ne zauzimaju puno mesta tako da se milioni objekata mogu sačuvati na relativno malom prostoru.
  5. Liste (Lists) – predstavljaju listu stringova. Elementi su sortirani po redosledu ubacivanja u listu. U suštini liste se mogu posmatrati kao nizovi. Elementi se mogu dodavati na početak (glavu) i na kraj (rep) liste. Maksimalan broj elemenata je 232 -1 tj. ukupno 4294967295 elemenata po listi. Elementi se ubacuju u listu u konstantnom vremenu tj isto je vremena potrebno kada ubacujemo element u listu od 10 i u listu od 10 miliona elemenata. Liste vrlo brzo vraćaju rezultate kao što su prvih n elemenata sa glave, tj sa početka dok su malo sporije kada tražimo elemente u sredini liste.