Vlatkovic.NET

Web site o tehnologiji, programiranju, muzici, kuvanju, knjigama, u stvari o svemu i svačemu...
Dizajn: www.studio7designs.com opensource web templates.


Najnovije na blogu

 Thursday, 31 January 2008

Sećate li se onomad kada smo imali radikala na čelu skupštine. Tada je nastao kratak zapis na temu komaraca, horora, deja vu-a... No danas od komaraca ni traga ni glasa ali se vratio onaj mučni osećaj od pre par meseci. Tu noć sam koknuo komarca. Zato izađite na izbore ne čekajte da se gamad namnoži još više, već delajte odmah, dok ne porastu “k'o rode, jebote” i opet naprave haos.

Mnogo je skupo sada ne izaći na izbore, nema opravdanja a izbor je lak. Naravno da nije optimalan ali podsetite se i pročitajte ovo (http://www.mooshema.com/2008/01/23/drugi-krug-molitva-za-nezaborav/) pa donesite odluku.

I samo na trenutak da se osvrnem na one koji svih ovih godina ne izlaze na izbore a posle istih pričaju kako su Srbi stoka. Taj deo populacije zapravo stavlja sebe u isti rang sa onima koje naziva stokom. Ne izašavši  na izbore ta neozbiljna, fensi, kul, snobovska ekipa sama sebi (a i nama) kopa rupu i dopušta da se glas koji zagovara primitivnu, kratkovidu i zlonamernu politiku uzdiže i dobija na snazi.

Izađite na izbore da stvarno vidimo gde smo ako ništa drugo! Smrt fašizmu!

 

APDEJT - obavezno pročitati:

http://www.bebika.com/blog/politika/i-ja-malo-o-izborima/

http://www.bebika.com/blog/svakodnevnica/zna-on-koliko-je-tesko-biti-majka/

http://www.vesic.org/blog/politika/drugi-krug-svi-napolje-na-glasanje/

http://www.vesic.org/blog/politika/mali-sms-za-podsecanje/

Na izbore!

Thursday, 31 January 2008 11:44:16 (Central Europe Standard Time, UTC+01:00)
 Tuesday, 15 January 2008
I opet malo programiranja, ovog puta o proširivanju postojećih asp.net severskih kontrola na primeru GridView-a.

Cilj ovog teksta je da pokaže kako se postojeće ASP.NET serverske kontrole mogu relativno lako dograditi tako da im se poveća funkcionalnost. Kao primer sam uzeo GridView koji u osnovnoj postavi nema  multiselect ali uz malo dorade postaje vrlo sličan gridovima koje srećemo u windows programiranju. Ideja je da možemo da izaberemo više redova u GridView tako što ćemo prilikom izbora držati taster CTRL.

Realizacija je sledeća: kad god kliknemo na neki red u GridView kontroli izvrši se registracija tog klika i nakon postback-a se čitaju indeksi kliknutih redova na osnovu kojih vraćamo redove u kontroli koji su izabrani.

Prvi korak je da kreiramo novu klasu koja će predstavljati DataGrid sa multiselect opcijom. Ona će biti izvedena iz  System.Web.UI.WebControls.GridView klase i čime obezbeđujemo nasleđivanje svih osobina i metoda ove klase na koje smo navikli.

public class MultiSelectGridView : System.Web.UI.WebControls.GridView

Zatim je potrebno da na svaki red koji generiše osnovna  GridView klasa “zalepimo” onclick javascript događaj (event handler). To radimo tako što promenimo OnRowDataBound metodu iz osnovne klase.

1: protected override void OnRowDataBound(GridViewRowEventArgs e)
2:  {
3:   base.OnRowDataBound(e);
4:
5:   if (e.Row.DataItem != null)
6:   {
7:    e.Row.Attributes.Add("OnClick", "msel(event)");
8:
9:    _id = this.PageIndex + "." + e.Row.RowIndex.ToString();
10:    e.Row.Attributes.Add("index", _id);
11:   }
12:  }

Glavna stvar se nalazi u liniji 7, gde na Row element dodajemo atribut OnClick koji će izvršavati msel(event) javascript funkciju na svaki klik. Javascript funkcija msel registruje gde se izvršio click događaj i upisuje indeks kliknutog elementa u skriveno (hidden) polje čiju vrednost ćemo kasnije, u postback-u, da parsiramo. Ovu funkciju ćemo da kreiramo i registrujemo kasnije.
Sledeća stvar se nalazi na linijama 9 i 10. Naime, tu kreiramo indeks elementa koji je kliknut i vezujemo ga za sam element. Njegova konstrukcija je vrlo jednostavna, “_id = broj stranice + tačka + indeks trenutnog reda”. Dobijeni indeks se upisuje kao dodatni atribut u element koji predstavlja red u GridView-u.
Da bi na klijentskoj strani znali koji red je izabran kreiramo Javascript funkciju “msel“ koju ćemo kasije da registrujemo na strani (podvučeni delovi code-a se automatski generišu u runtime-u).

Pre nego što prokomentarišem javascript code, da kažem par reči o html code-u koji generiše standardni GridView. GridView je u stvari obična tabela tj <table><tr><td>... konstrukcija. <tr> tag predstavlja red u našoj kontroli (Row) i na njega se “lepi” OnClick event. Sam event se zapravo okida na <td> elementu ali se propagira do prvog roditeljskog (parent) elementa koji ima handler tj definisan onclick a to je <tr> element. I evo javascript-a koji se generiše.
Da prokomentarišemo javascript.

1:<script language="javascript">
2: function msel(e, o)
3: {

kreiramo referencu na skriveni (hidden) html element koji u sebi sadrži informacije koji redovi su selektovani

4:  var selected = document.getElementById(o);

Zatim kreiramo referencu prema Event-u koji je inicirao izvršenje funkcije. Ova referenca nam treba da bi saznali koji je objekat inicirao Event i da li je pri kliku bio pritisnut taster CTRL. Linija 6 daje neposredni objekat koji je inicirao event, u ovom slučaju <td> tj ćeliju koja se nalazi unutar <tr> elementa. Na liniji 7 hvatamo sam <tr> element koji nosi informaciju o tome koji je indeks kliknutog elementa.

5:  e = e ? e : ((window.event) ? event : null);
6:  var obj = e.target ? e.target : ((e.srcElement) ? e.srcElement : null);
7:  obj = obj.parentElement ? obj.parentElement : obj.parentNode;
8:  var objParent = obj.parentElement ? obj.parentElement : obj.parentNode;

Na linijama 9 i 10  kreiramo objekte String tipa koji redom nose podatke o izabranim redovima i o trenutno kliknutom objektu tj njegovom indeksu.

9:  var sel = new String(selected.value);
10:  var id = new String(obj.getAttribute("index"));
11:  var cssclass;
12:  

Linija 13 ispituje da li je prilikom klika bio pritisnut i taster CTRL. Ukoliko jeste na liniji 14 proveravamo da li je red već izabran. Ukoliko jeste, ukloni ga iz liste izabranih i promeni css klasu za tekuću liniju. U suprotnom ubaci ga na listu izabranih i promeni css klasu.

13:  if (e.ctrlKey) {
14:   if (sel.indexOf("-" + id + "-") > -1) {
15:    selected.value = sel.replace("-" + id + "-", "");
16:    obj.className = "CssClassRow";
17:   }
18:   else {
19:    selected.value = sel + "-" + id + "-";
20:    obj.className = "CssClassRowSelected";
21:   }
22:  }

Ukoliko CTRL nije pritisnut (linija 23) lista izabranih indeksa svodi se na trenutno izabran a css klase se menjaju tako da su svi objekti neselektovani. 

23:  else {
24:   if (sel.indexOf("-" + id + "-") > -1) {
25:    cssclass = "CssClassRow"; selected.value = "";
26:   }
27:   else {
28v    cssclass = "CssClassRowSelected";
29:    selected.value = "-" + id + "-";
30:   }
31:   var trs = objParent.getElementsByTagName("tr");
32:   for(i = 0; i < trs.length; i++)
33:    if (trs[i].getAttribute("index"))
34:     trs[i].className = "CssClassRow";obj.className = cssclass;
35:    }
36:  }

 Napomena: podvučeni delovi se generišu

Funkcija  disableSelection samo ne dozvoljava da se na kliknutim redovima izvrši selekcija teksta. Za detalje pogledajte http://www.dynamicdrive.com/dynamicindex9/noselect.htm.

37: function disableSelection(target) {  
38:  if (typeof target.onselectstart!="undefined")   
39:   target.onselectstart=function(){return false;};  
40:  else if (typeof target.style.MozUserSelect!="undefined")    
41:   target.style.MozUserSelect="none";   
42:  else   
43:   target.onmousedown=function(){return false;};  
44:  target.style.cursor = "default";
45: }
46:</script>


Ok, sledeća metoda koju menjamo u odnosu na originalnu GridView klasu je OnRowCreated.

1:protected override void OnRowCreated(GridViewRowEventArgs e)
2:{
3: base.OnRowCreated(e);
4:
5: _id = this.PageIndex + "." + e.Row.RowIndex.ToString();
6:
7: if (selected != null && selected.IndexOf("-" + _id + "-") > -1)
8:     e.Row.CssClass = CssClassRowSelected;
9: else
10:     e.Row.CssClass = CssClassRow;
11:}

Opet kreiramo indeks, linija 5, i ako je trenutni red u listi selektovanih onda mu menjamo css klasu.

I na kraju menjamo CreateChildcontrols metodu. Zapravo samo je proširujemo. Cilj je da između svakog postback-a očuvamo stanje selektovanih redova.

1:protected override void CreateChildControls()
2:{

Naravno pustimo da se kreiraju sve potrebne kontrole koje se kreiraju za GridView (Linija 3)

3: base.CreateChildControls();
4:
5: string[] selectedArray;
6:
7: if (!string.IsNullOrEmpty(selected))
8: {

Izdvojimo indekse redova selektovanih na client strani (linija 9.) .

9:  selectedArray = selected.Split('-');
10:

Kreiramo listu int vrednosti koja će sadržati indekse izabranih redova.

11:  SelectedIndexs = new List<int>();

Kreiramo string niz koji će u sebi sadržati tekuću stranu i tekući index na strani.

12:  string[] pageAndIndex;

Za svaki element u selectedArray a na osnovu stranice i indeksa preračunamo pravi indeks i ubacimo u  SelectedIndexs.

13:  foreach (string s in selectedArray)
14:  {
15:   if (s.Length > 0)
16:   {
17:    pageAndIndex = s.Split('.');
18:    SelectedIndexs.Add(int.Parse(pageAndIndex[0]) * this.PageSize + int.Parse(pageAndIndex[1]));
19:   }
20:  }
21: }
22:

Registrujemo skriveno html polje u koje upisujemo koji su izabrani redovi.

23: this.Page.ClientScript.RegisterHiddenField(selectedKey, selected);

Registrujemo blok sa javascript funkcijama opisanim gore.

24: this.Page.ClientScript.RegisterClientScriptBlock( ( (System.Web.UI.WebControls.GridView)this).GetType(), "MultiselectGridView_js", js);
25:

I na kraju na GridView kontrolu dodamo još jednu literal kontrolu koja u sebi sadrži poziv funkcije  disableSelection koja ne dozvoljava da se selektuje tekst na upravo kreiranoj kontroli.

26: Literal l = new Literal();
27: l.Text = "<script language=\"javacript\" type=\"text/javascript\">disableSelection(document.getElementById(\"" + this.ClientID + "\"));</script>";
28: this.Controls.Add(l);
29:}

I to je to, kompletan code možete da skinete ovde.

Tuesday, 15 January 2008 23:41:27 (Central Europe Standard Time, UTC+01:00)
 Tuesday, 08 January 2008

Ma ne bi ja ovo napisao nego me Peđa naterao. Nedavno u neke sitne sate mi kaže „... zapiši ovo i objavi, da ne zaboraviš, možda nekom i pomogneš...“. Zapisah i sada objavljujem. Tiče se problema kojeg sam imao prilikom registracije mog dragog auta i u kakvu agoniju može čovek da upadne ni kriv ni dužan. Ukratko, auto je trebao da se registruje i prebaci sa AR na BG tablice ali broj motora nije mogao da se očita. Neverovatno je da nigde i niko ne zna tačan postupak kako čovek da se ponaša kada se dese ovakvi problemi. Ni lizing kuće/banke, ni tehnički pregledi, ni policija, niko vam neće dati potpunu informaciju i jednostavan algoritam kako da postupite u situaciji a, b, c... Ako tražite usmenu informaciju od nadležnih organa najčešće udarite u tvrdi zid neznanja i neljubaznosti sa akcentom svaljivanja krivice što oni neznaju na vas („Hajde sad lepo sve priznaj a Đura će da ti oprosti što te tukao“ - Balkanski špijun). Ne daj Bože da to neko odštampa na par flajera i da podeli narodu, mnogo je skupo.  Važno je da besno proslavimo novu godinu i potrošimo teškom mukom zarađene pare ili pare koje nemamo. Dajte 'leba i igara pa posle nek pocrkamo.

I evo kako se sve dešavalo.

Četvrtak (18. oktobar 2007.)
Pred kraj oktobra mi je isticala registracija. Krenem ja u akciju. Mlad mi je auto, napunio dve godine, terali ga samo ja i žena, tip top je, mislim se, to ćemo mi za čas. ALI. Odem na prvi tehnički pregled na koji sam naleteo (Parking servis) i tu me strefi prvi šlog u nizu šlogova. Kažu da ne mogu da nađu serijski broj motora i da ne mogu da obavim tehnički pregled. Ostadoh zapanjen. Natezali smo se jedno pola sata da probaju da nađu broj ali bez uspeha.

Petak (19. oktobar 2007.)
Sutradan ujutro odem u autokuću Hit auto gde je auto kupljen da pokušam da uradim nešto pametno. Tamo mi kažu isto, ne može da se registruje jer se ne vidi broj motora. Reno označava motore samo reda radi, nekim sitnim i nikakvim slovima i ne tretiraju motor kao sastavni deo automobila već kao rezervni deo. Majstori koji su poukušali da ga pročitaju uz pomoć šmirgle samo su ga dokusurili. Nema ‘leba, mora da se ukuca novi broj. Ljudi u Renou mi otprilike objasne kakav je postupak dalje. Oni daju nalog za ekspertizu vozila u SUP-u (da sup proveri da nisam ne daj Bože prepakivao delove motora). Kada se utvrdi da je auto ok onda u Lermontovoj dobijete/platite nalog za ukucavanje novog broja motora a to se radi u firmi Kompresor u Francuskoj ulici. Elem odem ja sa nalogom u SUP u 29.Novembra (kako li se sada zove ta ulica). Tamo sedi “Gospodar duša automobila” nas ubogih vozača i odrezuje sudbinu. Da pojednostavim poesnički opis, namračen i nadrkan tip (izvinte na izrazu ali on je najbolji) sa cigarom u zubi u mračnoj, prljavoj i hladnoj garaži sedi i uz fantastično zgražavanje prema svojim sugrađanima a ujedno i ljudima koji ga plaćaju, uz ogromne količine cinizma, mržnje, zlovolje objašnjava mi sledeće: “...ti si dečko (pazi dečko!) registrovao kola u AR i to nema nikave veze sa nama, nalevo krug”. Ja opet fin, pitam šta da radim, tražim savet najuuljudnije moguće, imam par pitanja i potpitanja. “Gospodar duša automobila” sa ogromnom dozom smorenosti, cinizma i zlobe mi priča neku priču kako treba u AR da mi daju nalog za ekspertizu pa da vozim šlepom auto u Kragujevac na Mašinski fakultet gde se vrši ekspertiza dva puta nedeljno po jedan sat, utorkom i recimo sredom u 14:00. Na kraju uspevam da iskamčim sledeću korisnu informaciju. Treba da odjavim tablice iz AR pa da odem ponovo na tehnički gde bi mi ponovo izdali nalog za ekspertizu. Pa onda dođem kod njih da oni pogledaju sada neregistrovan auto i procedura ide dalje. Čujem se sa bratom Ivanom u Aranđelovcu, on se raspita i postupak je sledeći: odem na tehnički pregled, uzmem isti papir kao za tehnički, potpišem i sa tablicama i saobraćajnom pošaljem u AR. Hajd' jurim ponovo, sve to pokupim sa ljudima u Renou se dogovorim da mi sutra naprave opet nalog za ekspertizu ovog puta sa odjavljenom saobraćajnom i tablicama. Otrčim kući, skinem tablice, spakujem papire i pošaljem mom dobrom bratu Ivanu u AR. Odnese on sve u sup, kad ne lezi vraže, pošto je auto kupljen na lizing njima treba ovlašćenje od lizing kuće (u mom slučaju Rajfajzen) da mogu da odjavim tablice. Zovem Rajfajzen, natežem se minimum pola sata sa nekim ćatom da pošalje ovlašćenje SUP-a u AR a da ću ja da dođem po original. On mora da pita šefa, ne zna kako se piše to ovlašćenje, ja mu diktiram, nerviram se, kaže mi da zovem za 5 minuta pa ga posle nema a radno vreme SUP-a u AR je do 16:00. Na kraju se čovek smiluje, organizuje i pošalje faks u AR. Sve u poslednjem trenutku. Tačno u 16:00 Ivan me zove i kaže da smo zakasnili i da su službenici otišli kući. Zaćutah tri sekunde i onda se sa druge strane začuo urlik koji je govorio “naivčino” :-) sve je bilo gotovo i saobraćajna će mi stići kasnije tog dana. Laknulo mi je, još i vikend predamnom da se skupi malo snage.

Subota (20.oktobar 2007.
Po dogovoru odlazim u Reno da mi na osnovu odjavljene saobraćajne dozvole naprave nalog za ekspertizu na koju sam planirao da idem u ponedeljak ranom zorom. Odem tako kad ne radi sistem. Počnem da čupam kosu, “...kako bre ne radi sistem, gde je comp jel mogu da pogledam..”. Sve može dok se čeka “programer” da reši problem. Sednem za komp i posle par minuta čačkanja ukapiram da nema vezu sa serverom. Počnem da pratim kablove po kancelariji, naiđem na vazdušni switch (za neupućene, deo mrežne opreme zadužen za povezivanje računara u mrežu, koji visi na nekim polu iščupanim kablovima u nekom prašnjavom ćošku, česta meta zlih čistačica). Krenem da pritežem kablove, resetujem mašinu i posle par minuta sistem proradi! Aleluja, odštampasmo nalog i ja srećan krenem kući. Krenem kući lagano i kod Sava centra se na mene ustreme dva pandura sa onim bahatim “ličnu kartu, šta nosiš u torbi”. Od muke počnem da se smejem kad me jedan od njih (krupniji magarac) pita onako kabadahijski i preteće “šta je smešno” I tu mi pukne film, kažem mu ja da je ovo slobodna zemlja i da mogu da se smejem kad hoću i kome hoću i da me boli... Ovaj me je gledao tupo par sekundi i uto ovaj sitniji, valjda i malo pametniji spusti loptu i reče rmpaliji da krenu. Ja onako stojim i zurim u njih dok odlaze i pitam se da nije neko organizovao neku bolesnu skrivenu kameru, nadrealno... Dođem kući, izljubim ženu i dete i bi mi lakše.

Nedelja (21. oktobar 2007.)
Malo odmora i planiranje kojim skrovitim putem bez tablica da se domognem ozloglašene jazbine “Gospodara duša automobila” u ulici 29. novembra.

Ponedeljak (22. oktobar 2007.)
Još nije svanulo ali valja nam putovati. Preko Zvezdare, Novog groblja, Bogoslovije stižem do SUP-a. Parkiram kola i krećem u raspitivanje kada počinju da rade. Probudim policajca u kućici na ćošku, reče mi čovek da sam poranio ali nema veze, poučen i istreniram kao pravi Srbin strpljivo čekam. Uskoro počinju da se pojavljuju drugi sapatnici da zajedno drhtimo sa svojim malenim automobilima ispred jazbine znate već koga. Priče su razne, slične mojoj, ljudi kivni kako ih šetaju zezaju, vraćaju sa registracija zbog gluposti a svi radimo i nemamo vremena za gubljenje. Šta mog gazdu, tada u Švedskoj, briga što smo mi nenormalni. Oko devet se pojavljuje Onaj sa svitom, mi ponizno i u tišni predajemo papire i povlačimo se uz naklon da ne bi smo slučajno izazvali Njegov gnev i nastradali. Izvođenje rituala je najzad počinje. Naravno, he, pre nas je ušlo par debelih mercedesova i BMW-ova koje su vozile ćelave glave koje ona dva dripca iz Subote ne bi zaustavila u životu, nego bi verovatno pili kafu sa njima. Dolazim na red, On baci pogled od 0.5 ispod haube i kaže da izvezem auto napolje. Šta da kažem, čovek je ekspert. Tako je bilo sa svima. Kada su svi završili čekali smo da načelnik potpiše rešenja i da trčimo u Ljermontovu da završimo ostatak posla. Plupropisno parkiram auto bez tablica blizu SUP-a i napokon, posle sat vremena stižem u  Ljermontovu. Tamo sledi popunjavanje uplatnica i plaćanje taksi na sve i svašta. Ulazim u kancelariju gde se izdaju nalozi za čuveno prekucavanje broja i tu mi saopštavaju da mi treba ovlašćenje od lizinga da prekucam broj. Pokunjim se i sednem na bus pa na Tošin bunar u Lizing. Oni me naravno belo gledaju, neznaju kako da napišu ovlašćenje, opet cirkus ali na kraju ga dobijem pa nazad u Ljermontovu. Sačekam red i najzad dobijem nalog za kucanje broja. Sjurim se do 29. Novembra, sednem u auto i odem do Kompresora na ukucavanje. Tamo naravno red “kano klisurine”, sačekam i tu, ukucaju mi brojeve i odjurim u prvi servis sa tehničkim pregledom da završim i tu fazu. Tu uvek sedi neki polupismen duhoviti šimpanza koji sve zna i koji će sve papire da mi pripremi za registraciju “ma ne brini burazere”. Pripremi mi on, ja na taksi u sup Vračar da konačno uzmem tablice. Za divno čudo odmah dođem na red predam sav srećan papire koje mi šalterska službenica vrati nazad uz minut sa rečima “...ne može, fali ovlašćenje od Lizinga za preregistraciju vozila”. Molim, kumim, ali ne vredi. Već polulud, smejem se samom sebi kao ludak, hvatam taksi i jurim u Lizing, reči taksiste su mi slaba uteha. Sačeka me čovek, vrati nazad sa ovlašćenjem koga opet nisu umeli da napišu... Stižem u sup Vrčar kad tamo “red kano klisurina”. Popodne radi samo jedna službenica na regostracijama. Vrlo inteligentno, mislim se u sebi. Tri ih radi pre podne i za vreme našeg radnog vremena a kada mi imamo vremena da dođemo i kada je najveća gužva radi samo jedna. Eh, stanem u red, slušam kako veselo odjekuje zvuk pisaće mašine iz susedne sobe, pitam se gde su im silni računari, 21. vek itd i isključim mozak da ne bi izgoreo. Nešto pre sedam sati uzimam tablice i saobraćajnu, odem do parkinga gde sam ostavio auto i oko osam uveče stignem kući. Izljubim ženu i dete i bi mi lakše.

Epilog (23. oktobar 2007.)
Pregledam kući papire, posle natenane, vidim da su uzeli pogrešna ovlašćenja u SUP-u Vračar, mislim se, niste ni morali da me cimate da opet idem u nesrećni Lizing.
Razmišljao sam tih dana da napišem zapis na blogu ali sam se mislio da je nepotrebno da smaram narod sa nečim što je svako od nas već verovatno više puta proživeo. A i strašno me je mrzelo. No, eto, Peđa me je naterao. Da zapišem da ljudi znaju šta da rade ako im se slično desi. Hajde, mislim se ja, možda učinim dobro delo...

Tuesday, 08 January 2008 10:32:16 (Central Europe Standard Time, UTC+01:00)