Syndicate content

programiranje

Evo ga jedan esej Orsona Skot Karda, vrlo interesantan za razmišljanje u ovoj sferi u kojoj i ja orbitiram. Hvala Charalampos.
 
- - - - - - - - - - -
 
Okruženje koje hrani i stvara kreativne programere ubija menadžerske i marketinške tipove ljudi - i obrnuto. Programiranje je Velika Igra. Obuzme vas celog, i telo i dušu. Kada ste zahvaćeni njome ništa drugo nije važno. Po povratku na dnevno svetlo možete primetiti da ste se ugojili nekoliko kilograma, da vam je donji veš stariji od prosečnog osnovca, a sudeći po broju praznih pizza kutija koje leže okolo, mora da je već proleće. Ali vam to nije bitno, zato što se program izvršava i kod je brz i pametan i upeglan. Pobedili ste. Svesni ste toga da neki ljudi misle kako ste štreber. Pa šta? Oni nisu u igri. Nikada se nisu rvali s Windowsom niti su sa DOSom išli ruku pod ruku. Za njih je C++ odmah posle slova B - a ne jezik. Oni skoro da i ne postoje. Kao vojniku ili umetniku, vama nije stalo do mišljenja civila. Stvarate nešto komplikovano i prefinjeno. Oni to nikada neće shvatiti.
 
Pčelarstvo
 
Evo tajne na kojoj su bazirane sve uspešne softverske kompanije: možete pripitomiti programere na isti način na koji pčelari pripitomljavaju pčele. Ne možete baš da komunicirate s njima, ali ih možete naterati da se okupljaju na jednom mestu i onda, kada ne gledaju, možete izneti med. Da ove pčele ne bi ubadale plaćate ih novcem. Sa toliko novca da oni ne znaju šta bi sa njim radili. A to je manje nego što mislite. Vidite, svi ovi programeri ceo život slušaju glasove svojih roditelja u glavi koji pitaju "Kada ćeš odrasti i priključiti se pravom svetu?" Samo treba da im platite dovoljno novca kako bi oni mogli da odgovore (isto u svojoj glavi) "Uh, tata, zarađujem više od tebe." U proseku, to je jeftino. A zadržavate ih u košnici tako što im dajete druge kodere oko kojih mogu da se skupljaju. Jedina osoba čija hvala vredi je drugi programer. Manje talentovani programeri će ih idolizovati; oni jednako sposobni će izazivati i stimulisati jedni druge; a ako želite baš dobru skupinu, osigurajte sebi bar jednog sertifikovanog kodera genija na kojeg svi ostali mogu da se ugledaju, makar i ako on tuđi kod gleda samo toliko koliko mu je potrebno da ga omalovaži. On je Igrač, smatra programer početnik. Čitao je moj kod. To je dovoljno. Ako softverska kompanija napravi takvu košnicu, koderi će odustati od spavanja, ljubavi, zdravlja i čistog veša, dok kompanija za sebe uzima većinu novca.
 
Van kontrole
 
Evo problema koji ubija kompaniju za kompanijom. Sve uspešne softverske kompanije su imale, za svoju dominantnu osobu, vođu koji je hranio programere. Ali nijedna kompanija ne sačuva zauvek takvog lidera. On ili ode za većim novcem, ili dovede menadžerske tipove koji ga na kraju isteraju, ili se promeni i sam postane menadžerski tip. Na ovaj ili onaj način marketinško-menadžerski tipovi dobiju kontrolu. Ali... kontrolu nad čime? Umesto da nađu pogonske trake za kojima stoje produktivni radnici, oni ubzro otkrivaju kako njihov proizvod stvaraju krajnje nepredvidivi, nekooperativni, neposlušni, i što je najgore od svega, ljudi ne baš prijatne spoljašnosti koji se opiru svim pokušajima menadžerisanja. Naterajte ih na tačno radno vreme, obucite ih u odela, i oni odmah postanu džangrizavi i počnu da sabotiraju proizvod. Najgore od svega, možete osetiti da vas ismejavaju svakom rečenicom koju izgovore.
 
Isteran dimom
 
Šok je veći za kodera, ipak. Odjednom, on shvata da vazemaljske kreature kontrolišu njegov život. Sastanci, Rasporedi, Izveštaji. I sada neko zahteva da on ISPLANIRA sve što će programirati i da se onda drži tog plana, nikada ne poboljšavajući, nikada ubrzavajući i nikada, nikada ne dirajući kod nekog drugog tima. Bedni mladi programer koji ga je nekada obožavao, sad mu je šef tiranin, što je pozicija koju je osvojio igrajući golf sa nekim šupkom u odelu. Košnica je uništena. Najbolji programeri odlaze. I onda marketinški tipovi, osećajući se lagodno pošto su se okružili kravatašima i pošto sve drže pod kontrolom, počinju da se pitaju zašto svaka nova verzija njihovog softvera gubi udeo na tržištu, dok kod počinje da vonja a bagovi da se umnožavaju. Moramo napraviti lepšu ambalažu. Da, to mora da je to.

Moj trud može nekom zatrebati, stoga evo kratke funkcije koja vraća jedinstveni hash fiksne dužine 10 slova/brojeva:

function tenhash($s) {
  $rlast = dechex((int)substr(sprintf("%09d", $s), -10));
  for (; strlen($rlast) < 10; ) {
    $rlast = chr((($tx = rand(48, 90)) > 57) && $tx < 65 ? $tx+=9 : $tx ).$rlast;
  }
  return $rlast;
}

Jedna napomena, maskimalni broj za kojeg se generiše hash može imati devet cifara.

Erste banka ima prilično dobar online banking softwer. Dozvoljava mi da uradim sve što i drugi sistemi, može da se koristi iz bilo kojeg browsera (zbogom bagoviti Internet Exploreru i disku sa sertifikatom); prilično sam zadovoljan.

Ali, ima jedna osobina koja me prilično nervira: nakon otvaranje e-bankinga dobije se jedno plastificirano parče papira na kome se nalazi 8x4 tabela sa gomilom brojeva. I nakon što se ulogujete, softver od vas traži da unesete broj taj i taj, pa vam tek onda dozvoljava pristup vašem novcu.

Razumem, moralo se nekako zaštiti, ljudi moraju da osećaju pouzdanost u e-bankingu, ali svaki put kada želim nešto da uradim moram da ustanem do jakne, izvadim novčanik, aha! 3. red kolona B, tu smo, tapa-tapa, 43254532, uh. Smaranje.

Ako istu stvar uradim više od tri puta, onda ću sesti i automatizovati je, uvek se isplati na duže ili kraće staze.

I evo, izvolite Greasemonkey skriptu koja će sama da unosi brojke, a vi ćete sasvim srećno i zadovoljno da raspolažete vašim novcima uz što manje kuckanja.

Klik ovde za instaliranje skripte

Samo par napomena:

  • Pre nego što počnete da koristite skriptu, moraćete je editovati i uneti na vrhu skrpte vašu TAN tablicu. Videćete redove tan_red1 do tan_red8 i tu unutar navodnika unesite vaše brojeve. Editujete skriptu tako što uradite desni klk na tog majmuna u status baru, izaberete NotBanking pa kliknete na edit.
  • Biće vam potreban Firefox browser. Uostalom, ukoliko već ne koristite Firefox, ne znate šta propuštate.
  • Korisničko ime i lozinka se neće automatski unositi. Ukoliko želite baš toliku automatizaciju, ukombinujte ovu skriptu sa AutoFormer ili Autofill Forms ekstenzijom.

VAŽNO:

Uopšte ne preuzimam odgovornost za ovaj softver. Vaš novac je vaša odgovornost i mada ne postoji nikakva šansa da vam skripta nešto loše uradi, ukoliko vam neko ukrade ili kompromituje računar može doći u posed vaše TAN tablice, što može predstavljati problem.

Savetujem potpunu enkripciju hard diska, kao što sam ja uradio na svom laptopu za slučaj da "dobije noge".

Obavezno promenite lozinku koju dobijete od Erste banke, moja je bila šuplja kao sir (nešto tipa "nikola123"). Nažalost, korisničko ime ne može da se menja, ali je prilično dobro smišljeno tako da je to u redu.

Pamet u glavu, lovu na račun.

Ukoliko imate Git repozitoriju na kojoj radi više programera, mora se voditi računa o dozvolama fajlova. Najjednostavnije je dodati sve korisnike u posebnu grupu (recimo, developers), zatim otići do repozitorije i podesiti je da bude deljena:

cd code.git

chmod -R g+ws *
chgrp -R developers *

git repo-config core.sharedRepository true

U suprotnom će se javljati sledeća greška prilikom git push:

error: insufficient permission for adding an object to repository database ./objects
fatal: failed to write object

PHP-GTK je ekstenzija za PHP programski jezik koja implementira GTK toolkit. Ukratko, služi da u PHP-u pravimo samostalne grafičke aplikacije.

Ovde je opisana instalacije PHP-GTK 2.0.1 na Ubuntu 9.04 operativni sistem. Paket se ne nalazi u repozitoriji koja bi omogućila brzo i jednostavno instaliranje, već se mora kompajlirati iz izvornog koda.

Prvo instalirajte sve pakete potrebne za kompajliranje:

sudo apt-get install m4 gawk build-essential

PHP-GTK se može skinuti ovde, zatim raspakujte skinutu arhivu:

tar xzf php-gtk-2.0.1.tar.gz

PHP paket trenutno ima bag, te se pre kompajliranja mora napraviti ovaj trik:

cd /usr/share/aclocal
cp libtool.m4 libtool-orig.m4
cat lt~obsolete.m4 ltoptions.m4 ltsugar.m4 ltversion.m4 >> libtool.m4

Dalje ste spremni za kompajliranje po uputstvu sa PHP-GTK sajta. Ukratko:

./buildconf
./configure
make
sudo make install

I ne zaboravite da dodate sledeću liniju u /etc/php5/cli/php.ini:

extension=php_gtk2.so

To je to.

Kratki hint, ukoliko želite postaviti boju GTK widgeta direktno iz koda (a ne preko resurs fajla), ovo je način da se to uradi:

GdkColor boja;
gdk_color_parse("#F3F3F3", &boja);
gtk_widget_modify_bg (my_widget, GTK_STATE_NORMAL, &boja);

Funkcija gdk_color_parse kao prvi parametar prihvata opis boje, i kao što vidite, moguće je boju postaviti i u HTML formatu.

Ukoliko želite da postavite boju GtkLabel widgeta, na primer, najbolje je da ga stavite u GtkEventBox, pa onda njemu menjate boju.

JMBG je broj koji je dat svim građanima SFRJ, uveden je 1976. godine, a ostao je u upotrebi u svim državama koje su nastale raspadom SFRJ.

Ukoliko treba da radite sa JMBG brojem, ove informacije će vam pomoći.

Broj je napravljen od 13 cifara u formi „DD MM GGG RR BBB K“ (bez belih mesta), gde su:

DD – dan rođenja

MM – mesec rođenja

GGG – zadnje tri cifre godine rođenja

RR – politički region rođenja (za građane rođene pre 1976. godine politički region gde su trenutno živeli)

* 00-09 – stranci koji su dobili SFRJ državljanstvo
* 10-19 – Bosna i Hercegovina (10 - Banja Luka, 17 - Sarajevo)
* 20-29 – Crna Gora
* 30-39 – Hrvatska (33 - Zagreb)
* 40-49 – Makedonija (45 - Skoplje)
* 50-59 – Slovenija ( 50 - Ljubljana )
* 60-69 – (Neupotrebljeno iz nepoznatog razloga)
* 70-79 – Uža Srbija (71 - Beograd)
* 80-89 – Autonomna Pokrajina Vojvodina (80 - Novi Sad)
* 90-99 – Autonomna Pokrajina Kosovo i Metohija

BBB – jedinstveni broj

* 000-499 – muški
* 500-999 – ženski

Što se tiče K, kontrolnog broja, važi sledeće pravilo:

Ako je JMBG napisan u formatu ABCDEFGHIJKLM onda je:

M = 11 - ( 7*(A+G) + 6*(B+H) + 5*(C+I) + 4*(D+J) + 3*(E+K) + 2*(F+L) ) / 11

Tj. sabrati 1. i 7., 2. i 8., 3. i 9., 4. i 10., 5. i 11., te 6. i 12. broj matičnog broja. Dobijenih 6 suma pomnožiti sa 7, 6, 5, 4, 3 odn. 2 i sabrati dobijene umnožke. Taj broj podeliti sa 11 i ostatak tog deljenja oduzeti od 11.

Evo i jedne PHP funkcije koja radi upravo to, proverava kontrolnu cifru:

function proveri_jmbg($jmbg) {
  // jmbg je uvek broj
  if (!is_numeric($jmbg)) return false;
  // dugacak je 13 brojeva
  if (strlen($jmbg) != 13) return false;
  $b1 = (int)$jmbg[0];
  $b2 = (int)$jmbg[1];
  $b3 = (int)$jmbg[2];
  $b4 = (int)$jmbg[3];
  $b5 = (int)$jmbg[4];
  $b6 = (int)$jmbg[5];
  $b7 = (int)$jmbg[6];
  $b8 = (int)$jmbg[7];
  $b9 = (int)$jmbg[8];
  $b10 = (int)$jmbg[9];
  $b11 = (int)$jmbg[10];
  $b12 = (int)$jmbg[11];
  $b13 = (int)$jmbg[12];
  $orig = 7*($b1+$b7) + 6*($b2+$b8) + 5*($b3+$b9) + 4*($b4+$b10) + 3*($b5+$b11) + 2*($b6+$b12);
  $control = 11 - ( $orig - (11*floor($orig / 11)));
  if ($control != $b13) return false;
  return true;
}

A još na sprskom jeziku?

Rešenje nam je dala programerska firma AlefBrain u vidu kompletne dokumentacije za učenje PHP programerskog jezika. Evo šta kažu zašto i kako:

"Posle dva PHP treninga odrzana uzivo u Kragujevcu, odlucili smo da kompletan materijal sa tih dogadjaja postavimo na web kako bi smo Internet programiranje priblizili sto vecem broju ljudi. Slobodno download-ujte lekcije u PDF formatu, delite ih sa svojim prijateljima i ucite zajedno. Kada postanete Internet programeri, javite se, mozda imamo posao za vas."