BizBuzz 2009

BizBuzz ponovo. Prošle godine sećanja su bila previše jaka, ove godine ipak nisam dozvolio sebi da mi duhovi prošlosti pokvare zabavu i uskrate zadovoljstvo da ponovo vidim neke drage ljude.

BizBuzz je verovatno jedina konferencija koja ima kafanski vodič, a ja sam se juče spremao da budem verni izveštač sa tog segmenta konferencije. Obzirom da sam odluku o putu za Niš doneo praktično u poslednjem trenutku, “conference pass” nisam ni imao tako da je sve bilo podređeno druženju (da ne upotrebljavam neke buzz reči tipa networking i sl.).

Iako nisam video ni jedno jedino predavanje, u razgovoru sa sagovornicima stekao sam utisak da je ovo prva konferencija u Srbiji u kojoj su predavači bili bolji od organizatora. Kažu da je Gaga Đermanović bila sjajna kao i Eniac, za Bizija kažu da je održao kontroverno predavanje a ostali … ne tako snažni utisci da bi se o njima preterano pričalo (da ne kažem twitovalo). :)

S druge strane Hotel u kome je bio bizbuzz delovao je poprilično “trashy”, u slučaju da dočekate da vas usluže kafa je bila očajna, wifi je većim delom bio potpuno mrtav a u momentima kada bi oživeo vukao se kao crv … a izbor kafane 12km od Niša za večeru … bez komentara. Da spomenem i to da devprotalk.com forum na kome sam ponosni mod nije ni spomenut na sajtu bizbuzz-a uprkos velikoj podršci članova foruma.

Naravno, moj prvi cilj dolaska bio je da provedem još koji sat sa mojim omiljenim blogerima i twiter ovisnicima i u tom smislu moj dolazak u Niš bio je pun pogodak!

Moje slike na FB-u
Ostali Blogeri o BizBuzz-u

Windows 7 Editions

Juče sam šetajući standardnom geekovskom rutom po Ušću (iliti obilazak prodavnica Comtrade, Big Bang, Sony, Gigatron, iStyle) bio u prilici da se sretnem sa nadasve originalno obučenim promoterkama koje su u Gigatronu i Comtrade-u promovisale najnoviju verziju Windowsa.

Iako poslednjih godinu dana 95% vremena provodim na OS X-u, bilo mi je interesantno da bacim pogled na novu i veoma hvaljenu verziju Windowsa 7. Interface mi je na prvi pogled poprilično ličio na neki Linux (GNOME) sa kojim sam se par minuta pre toga igrao na nekom netbooku – čitaj ružan kao sam đavo. Uz to oba su bila na srpskom tako da sam imao problem sa pronađem reči na koje sam navikao nakon dugogodišnjeg korišćenja raznih verzija Windowsa. Nakon par klika mišem odlučih da ipak pitam promoterku o tome šta je tu zapravo novo. Razgovor je tekao otprilike ovako:

Ja: “Dakle možete li mi ukratko reći šta ima novo u Windowsu 7 u odnosu na XP?
P: “Pa mnogo toga, recimo u Aero interface-u imate transparentne prozore, bla bla ...”
Ja: (prekidam je) “OK, kako mogu to da vidim?
P: “Nažalost ne možete, ova verzija Windowsa je tzv. starter edition. Windows 7 starter edition nažalost nema aero interface tako da to ne mozete videti
Ja: “Hmm ok … dobro šta mogu videti?
P: “Pa možete videti kako Windows 7 elegantno rešava rasporedjivanje prozora …” (pokazuje kako windows 7 moze relativno lako dva prozora da raspodeli na pola ekrana)
Ja: (ne preterano impresioniram ovim revolucionarnim “feature-om”) Ok i šta još?
P: Jao šteta je jer ova verzija uopšte nema Aero, plus ima ograničenje da možete startovati samo 3 aplikacije istovremeno …
Ja: (u šoku) “Samo 3 aplikacije????
P: Pa da, ali zato možete startovati neograničen broj prozora unutar te tri aplikacije.
Ja: (ne znam da li da se smejem ili da plačem) Ok ok … a koje još verzije postoje? Nadam se da postoji neka upotrebljivija od ove?
P: Naravno, pored Windows 7 Started Edition imate Windows 7 Home Basic edition, zatim Windows 7 Home Premium u kome imate pominjani Aero interface sa transparentnim prozorima, zatim imate Windows 7 Home Professional u kome pored toga imate podršku za domene, enkripciju fajlova, remote dekstop itd. zatim imate Windows 7 Enterprise u kome imate …
Ja: (prekidam promoterku pre nego mi glava eksplodira od raznih verzija) “Ok ok … pretpostavljam da imate i neki papir na kome sve to lepo pise?”
P: “Naravno, izvolite” (daje mi propagandni materijal sa tabelom šta koja verzija Windowsa ima ili nema).

Nakon što sam se zahvalio ljubaznoj devojci, nisam mogao a da se ne prisetim ovog gega Steva Jobsa na svojevremenom predstavljanju novog Leoparda.

Sve u svemu nisam stekao utisak da je Microsoft izvukao pouke iz neuspeha sa Vistom. Možda su popravili sam OS (to za 2 minuta igranja nažalost nisam bio u prilici da vidim) ali pravljenje toliko različitih verzija Windowsa komplikovanost kupovine novog OS-a stavlja u rang sa kupovinom novog automobila.

2 out of 5

Once the stone, You’re crawling under
Is lifted off your shoulders
Once the cloud that’s raining
over your head
disappears
The noise that you’ll hear
Is the crashing down of hollow years

Dream Theater, Hollow Years, 1997

MySQL – NULL polja i sortiranje

Vrlo često imamo situaciju da želimo sortiranje po nekom određenom polju u tebeli ali tako da se NULL polja nikada ne pojavljuju na početku. Tipičan primer je recimo frontend koji prikazuje podatke iz neke tabele, gde se klikom na header kolone obavlja sortiranje po rastućem (asc) ili opadajućem (desc) poretku.

Obzirom da se ja u poslednje vreme dosta bavim domenima, kreirao sam jednu tabelu sa par svojih domena, čisto kao demonstraciju koncepta.

mysql> select * from domains;
+----+-------------------+-------------+
| id | domain            | expire_date |
+----+-------------------+-------------+
|  1 | dinke.net         | 2010-01-17  |
|  2 | lampix.net        | 2009-12-26  |
|  3 | blogodak.com      | 2010-09-08  |
|  4 | maestrodesert.com | 2009-09-11  |
|  5 | nepostojeci.com   | NULL        |
+----+-------------------+-------------+
5 rows in set (0.00 sec)

Dakle problem, želim sortiranje po expire_date polju ali tako da se NULL polje (recimo domen koji još nije regovan ili je istekao) uvek pojavljuje na kraju. Po defaultu NULL se javlja na početku ako sortiramo u rastućem (ASC) orderu odnosno na kraju ako sortiramo po opadajućem (desc) orderu.

mysql> select * from domains
order by expire_date asc;
+----+-------------------+-------------+
| id | domain            | expire_date |
+----+-------------------+-------------+
|  5 | nepostojeci.com   | NULL        |
|  4 | maestrodesert.com | 2009-09-11  |
|  2 | lampix.net        | 2009-12-26  |
|  1 | dinke.net         | 2010-01-17  |
|  3 | blogodak.com      | 2010-09-08  |
+----+-------------------+-------------+
5 rows in set (0.00 sec)

mysql> select * from domains
order by expire_date desc;
+----+-------------------+-------------+
| id | domain            | expire_date |
+----+-------------------+-------------+
|  3 | blogodak.com      | 2010-09-08  |
|  1 | dinke.net         | 2010-01-17  |
|  2 | lampix.net        | 2009-12-26  |
|  4 | maestrodesert.com | 2009-09-11  |
|  5 | nepostojeci.com   | NULL        |
+----+-------------------+-------------+
5 rows in set (0.00 sec)

Problem sortiranja ćemo rešiti korišćenjem MySQL-ove IF f-je, a rešenje je:

mysql> select * from domains
order by if(expire_date is null, 1, 0), expire_date asc;
+----+-------------------+-------------+
| id | domain            | expire_date |
+----+-------------------+-------------+
|  4 | maestrodesert.com | 2009-09-11  |
|  2 | lampix.net        | 2009-12-26  |
|  1 | dinke.net         | 2010-01-17  |
|  3 | blogodak.com      | 2010-09-08  |
|  5 | nepostojeci.com   | NULL        |
+----+-------------------+-------------+
5 rows in set (0.00 sec)

MySQL-ova IF f-ja slična je ternarnom operatoru, tj. vraća prvi argument ako je iskaz tačan odnosno drugi u slučaju da nije, dakle u ovom slučaju vraća 1 za null vrednosti odnosno 0 za ostale, čime dobijamo upravo prikaz koji želimo tj. NULL polje na kraju liste.

Znam da ovo može delovati pomalo konfuzno pa ću otići još jedan korak dalje i dodati još jedno polje u našoj tabeli čisto radi razjašnjenja šta se ovde tačno događa:

mysql> alter table domains
add column nullorder tinyint not null;
Query OK, 5 rows affected (0.01 sec)
Records: 5  Duplicates: 0  Warnings: 0

a zatim i update-ovati vrednosti nullorder polja tako da sadrže vrednost IF iskaza odozgo:

mysql> update domains
set nullorder = if(expire_date is null, 1, 0);
Query OK, 1 row affected (0.00 sec)
Rows matched: 5  Changed: 1  Warnings: 0

mysql> select * from domains;
+----+-------------------+-------------+-----------+
| id | domain            | expire_date | nullorder |
+----+-------------------+-------------+-----------+
|  1 | dinke.net         | 2010-01-17  |         0 |
|  2 | lampix.net        | 2009-12-26  |         0 |
|  3 | blogodak.com      | 2010-09-08  |         0 |
|  4 | maestrodesert.com | 2009-09-11  |         0 |
|  5 | nepostojeci.com   | NULL        |         1 |
+----+-------------------+-------------+-----------+
5 rows in set (0.00 sec)

Sve u svemu naš gornji query iz rešenja problema:

select * from domains
order by if(expire_date is null, 1, 0), expire_date asc;

Potpuno je isto što i ovaj query:

mysql> select * from domains
order by nullorder, expire_date;
+----+-------------------+-------------+-----------+
| id | domain            | expire_date | nullorder |
+----+-------------------+-------------+-----------+
|  4 | maestrodesert.com | 2009-09-11  |         0 |
|  2 | lampix.net        | 2009-12-26  |         0 |
|  1 | dinke.net         | 2010-01-17  |         0 |
|  3 | blogodak.com      | 2010-09-08  |         0 |
|  5 | nepostojeci.com   | NULL        |         1 |
+----+-------------------+-------------+-----------+
5 rows in set (0.00 sec)

osim što naravno nullorder polje nismo morali da kreiramo.

Naravno na sličan način možemo dobiti NULL polja na početku u desc prikazu (za slučaj da je to ikome potrebno).