Doin’ some OpenLdap research

“All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value.” – Carl Sagan

Wise saying, wise man. Go watch a movie, maybe that will be less confusing than this box you are staring at! 😀

Anyway, I have been researching Ldap lately. Of course, in my spare time, coz all obligations about faculty have started once more. Reason of research is centralizing the database of  student users at faculty. The whole idea is part of a bigger picture, which I think I’m still not aware of, but nevertheless I’m still climbing that hill :). Since there is a lot of good books about the subject I’m not going to start a lecture, and get you all bored 🙂 but I’m going to tell you about it in a few words. Again, I’m going to talk about problems I had (or the problem :)).

So, what is OpenLdap? OpenLdap is a open source solution for making active directories using Ldap protocol. In the beginning, it was only a protocol, but during the time it grew up to be the client-server aplication. So, to get it all straight, Ldap is a protocol, OpenLdap is a open source solution for building active directories using Ldap. OpenLdap consists of slapd and slurpd deamons, couple of tools for making entries in active directory, like ldapadd, ldapmodify, ldapdelete, slappasswd, and more. Now, I’m not going to get all “ldap dirty”, and that is the reason why I’m suggesting you to read the book called, “Mastering OpenLdap” from Matt Butcher. In a few words, it uses hierarchical database (hdb, bdb), to store entries if a way that schemes describe, can index fields for fast search and so on.

When you are all done with adding entries in your new Ldap directory, you will now and then have to erase some entries. I had to do that too, so don’t cry or do something silly, like punch monitor 😀 (Wait, what???  I’m not going to punch it, naaah, I don’t want to get my hands dirty, instead I’m gonna get an axe, and split it in half!! :):):)) Anyway, I had a problem when having my administrator password set, I couldn’t delete particular entry.  The error was: Invalid credentials (49). I figured out that it was not the problem in DN of the entry. So, it was something with credentials, maybe password. That was the problem, for those who can’t wait the end of this mysterious story :D. To change pass you can preform couple of steps, that can be different. One of the ways is to use slappasswd, and generate SHA password, and insert it in /etc/ldap/slapd.conf, in the next form:

rootpw {SSHA}blablabla

Then, I guess all will be settled, and you could delete your entries as much as you can 🙂 If this doesn’t fix your problem, than I have to say, you are all alone in this world of misery. Aaam just kidding… but you are 😀 Seriously, if you have any problems, feel free to comment, and I’ll try to help, if I find spare time. Bye!


PHP Symfony Editor ?

Hey hey! Fresh stuff again! 🙂 This time it is symfony again!

Lets cut the chatting and get straight to the point!

What IDE are you using? Is it fast, is it comfortable, does it have plugins for Symfony?

You are saying, yeess, NetBeans has it, though it is not very fast 😦 All that Java is eating my memory…

If you have it a lot, that that is not a prob, but what if you are short with that resource??? Lets say you have, oh I don’t know, a virtual machine, which you use for developing. You don’t want all that projects, files and junk to be in your sweet home and to look it every day in your spare time :D. So you make virtual machine and use it to do all the work, then shut it down, and the nightmare is forgotten. YEY! But in case you do not have a resource monster computer, or some kinda super computer, virtual machine will have less RAM than host on which you are running it. That is the main part, where you might have the problems with NetBeans or Eclipse. They are sooo sloow on virtual machines… Or I am not well informed, and I do not know some hints to make them faster. If you do, please inform me below 🙂


I went some googling about php editor which has support for symfony. There were NetBeans (newest version), Eclipse (with its plugins), PHPEdit (which is shareware, and being a student, I don’t have too much money to spare on software), Komodo IDE (shareware), but WAIT! Komodo Editor!?

That is free, as in speech, dynamic languages editor. Mmmm nice? PHP, Python, Shell, Perl etc. Mmm nice!!! Built in C++!? Weeell, it is based on Mozzila Framework, which among all includes C++ libraries. Faster than NetBeans or Eclipse, which are Java based… Has some plugins for symfony… WOW! You must be dying from wish to try it! 🙂

Here you go Komodo Edit

So you download it, and what? How, to use if for developing Symfony projects??? That is the right question! And, since this post took me some time, I’ll describe basic project generation in this post.

I’d be very interested in reading your comments, because I see some interest in symfony… Bye 🙂

Biblio веб апликација скоро па готова

Када сам се упустио у коштац са технологијама потребним за ову веб апликацију, одлучио сам да своје проблеме и решења постујем овде. Тако је настао овај блог. Неколико претходних постова су били на тему веб програмирања. Сада када је све готово, условно речено, могу да се похвалим и да кажем да је ово било једно супер искуство за мене као ученика. Доста интересантних и корисних ствари сам научио.

Веб апликација је настала из идеје да се студентима омогући преглед и брзо тражење књига библиотеке факултета. Као неко ко је у датом тренутку могао тако нешто да одради, почео сам и после пар месеци резултати нису изостали. Наравно, апликација није ни екстра компликована ни ултра једноставна :). Било како било, ево линка па просудите! Можда од мене и постане неки веб програмер/дизајнер!

PHP и MySQL, 2. део

Знам да је нездраво висити на блогу и нон стоп постовати :), али боље да то урадим док је “свеже”. Надам се да ћете ми опростити ;).

Вечерас говоримо о раду са југо знацима латинице у MySQL бази података. Даћу вам пар савета како да свој живот учините једноставнијим и не проживљавате бол и патњу коју сам ја проживео :). Хвала богу па је кратко трајало. Ево пар савета:

1. у раду са MySQL базом, битно је да поставите collation на utf8_unicode_ci.
$dbh->query("ALTER DATABASE $database DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci");

2. после остваривања конекције са базом, из PHP-a, постављате сет карактера којим ћете моћи да вршите упите тј. које ће и PHP и MySQL разумети. Може се одредити на пар начина:
$baza = new PDO("mysql:host=$server;dbname=$db;charset=UTF-8", $user, $password);
$baza->exec('SET CHARACTER SET utf8');
$dbh->query('SET NAMES utf8'); (више објашњења овде);

На крају, када желите резултате представити на веб страни морате јој рећи како да тумачи ваше карактере. То се једноставно каже браузеру са:
<meta http-equiv="Content-Type" content="text/html charset=UTF-8" >
тагом који се постави унутар head html тага.

PHP и MySQL, 1. део

Поздрав свима, овим почињемо серије о PHP и MySQL, у виду неких трикова и трипова :).

Као што сам навео у последњем посту о JSON-у и PHP-у, у задње време радим са базом библиотеке факултета. Ишчитане податке приказујем помоћу jQuery-јевих DataTables. Примери које сам нашао и употребио у раду са базом су користили класичне mysql драјвере. У консултацији са асистентом, одлучили смо да користимо PDO драјвере. Пошто користим објектни PHP, PDO драјвери су логичан след ствари, јер омогућују да се резултатима упита аутоматски попуњавају објекти, који ће се инстанцирати на основу класе коју сами дефинишете. То је мени било врло интересантно, и на крају крајева био изазов. У преправкама кода, морао сам да преправљам и дефинисане MySQL упите. Ту долазимо до трипа и трика, који сам хтео да вам откријем.

У раду са DataTables, при позивању PHP скрипте која се налази на серверу, шаљу се параметри, међу којима и параметри о броју приказаних објеката, које добијете из упита. Тим параметрима се попуњава део упита, који изгледа овако:

"LIMIT ".mysql_real_escape_string( $_GET['iDisplayStart'] ).", ".mysql_real_escape_string( $_GET['iDisplayLength'] );

Искључимо функцију mysql_real_escape_string која припада класичним MySQL драјверима. Треба је заменити PDO еквивалентом, што представља мој следећи изазов. Овај део упита се комбинује са делом за сортирање и главним SELECT делом, и добија се упит који се изврши и врати тачно онолико објеката у табелу, колико је речено овим LIMIT упитом. Дакле, iDislpayStart говори бази од ког реда резултата узима податке, а iDisplayLength колико ће редова узети. Истовремено, је потребно вратити и податак о броју редова који је упит вратио, без LIMIT-а, наравно. То је трип, сложићете се. У почетку ми ово није било познато, тако да сам имао проблема. За параметре који се шаљу LIMIT наредби, користи се једна спуштајућа листа, са предефинисаним бројем резултата које желите да видите у табели (10,25,50,100). Колико год да сам изабрао, резултата је увек било, али исто онолико колико сам селектовао. То ми је било чудно, јер је резултата било више.

Део упита који сам намерно изоставио је био SQL_CALC_FOUND_ROWS, који иде одмах после SELECT наредбе. Незнајући сврху овога, јавили су се већ поменути проблеми. На крају сам на тежи начин научио чему ова наредба служи :). Наиме, коришћење овакве функције је много брже него извођење неког упита са LIMIT и без LIMIT наредбе. Она ће, при првом упиту израчунати број редова које упит врати, не рачунајући ограничења LIMIT-а. То је трик ;). Овим ћете једним ударцем (упитом), завршити два посла.

Упитом који следи, ћете покупити број објеката, које сте добили упитом. На овај начин, који је бржи, добијате број враћених података и лимитиране податке за испис у табели.

Ево sql упита:
Надам се да ће неком бити од помоћи. Видимо се ускоро! 😉