PC #52

Posao posut bagovima

Programerski život je povezan sa bagovima - nema posla u kome ste svakodnevno izloženi tolikom broju sitnih problema koje morate neprekidno rešavati da biste zaradili svoj hleb. Ovim rečima počinje jedna od najpoznatijih knjiga koje se bave tehnikama za testiranje programa. Rečenici nemam šta da dodam, osim konstatacije da se autor očigledno nije bavio pripremom privrednih publikacija - tamo bagovi nisu fatalni, ali ih ima toliko da ćete uz hleb zaraditi i konstantnu glavobolju. A ako još pripremate privredne publikacije koristeći računar... e, onda ćete znati šta su bagovi.

Dejan Ristanović

Svakako ste listali telefonski imenik ili neki drugi adresar u potrazi za brojem telefona, adresom, brojem žiro-računa, imenom ubice u vašem sledećem romanu (kažu da je Agata Kristi danima "kopala" po imenicima ne bi li našla zgodno ime)... Pritom verovatno niste razmišljali o problemima koji se postavljaju pred onoga ko taj imenik priprema. Treba prikupiti nekoliko desetina ili stotina hiljada imena praćenih ostalim podacima, sortirati ih, prelomiti kolone, uklopiti stranice... Uz današnji računar neki od tih problema deluju jednostavno, ali računari su od juče, a imenici... pa, barem od prekjuče. Nisam nikada uspeo da saznam kako je pripreman telefonski imenik pre nego što su se pojavili računari, ali znam kako se to radilo šezdesetih i sedamdesetih godina, pre pojave PC-ja.

Priprema i štampa telefonskog imenika bila je ogroman posao - malo koja štamparija je uopšte mogla da proizvede dvanaest tomova imenika u potrebnom tiražu, gomilu papira za čiji su transport korišćene čitave železničke kompozicije. Još veći problem je bila priprema, koja je uglavnom poveravana računskom centru zagrebačkog "Vjesnika". "Jugomarka" je slala raspis PTT centrima u republikama i pokrajinama, oni su slali raspise sreskim PTT centrima, pa su se u nekom razumnom roku u centralu slivale magnetne trake sa podacima o korisnicima telefona. Računari nikada nisu bili naročito dobro standardizovane sprave, a sklonost ka dogovorima nikada nije bila naša nacionalna karakteristika: ako se u tri opštine odlučuje o nabavci računarske opreme, možete biti sigurni da će se opredeliti za četiri različita proizvođača. Prvi veliki računari su nabavljani u doba OOUR-a i SOUR-a, svako je odlučivao za sebe, pa možete misliti koliko su pristigle trake bile raznolike; o slogu baze podataka i kodnom rasporedu YU slova da i ne govorim.

Kolege iz "Vjesnika" su zbilja imale zanimljiv posao: trebalo je ujednačiti podatke iz preko 400 izvora. Bilo je tu svakojakih neočekivanih događaja, ali su se neke stvari ponavljale. Recimo, sa Kosova i Metohije su, ma koliko im tražili mašinski čitljive medijume, uvek slali podatke na papiru... Ako sačekamo još stotinak godina da se OCR usavrši, videće se da su kolege sa Kosova išle ispred svog vremena, smatrajući papir mašinski čitljivim medijumom, ali to saznanje nije bilo od pomoći onima koji su listinge prekucavali. Bosna i Hercegovina je bila priča za sebe: u bazama podataka je, osim (često i nepopunjenog) imena i prezimena postojalo i (obavezno) polje za nadimak, a ni adrese nisu bile baš oficijelne. Recimo, u slogu pretplatnika iz Tuzle adresa je glasila "stanuje kod Hasima". Operater zadužen za tu zonu satima je tražio nekoga ko će ispraviti adresu i najzad nekako dobio korektan podatak, uz komentar "stavi ti u zagradi 'kod Hasima', jer ti ovde ni poštar ne zna za ulicu Žrtava fašizma, a Hasima svako zna".

"Vjesnik" je, kao ogromna firma, mogao da uposli više stotina daktilografkinja koje su ispravljale bagove u podacima, a uz to su imali moćnu računarsku opremu, pa je rezultat bio kvalitetan. Manje firme su ubrzo shvatile da izdavanje imenika može da bude unosan posao, ali nisu mogle da angažuju tolike resurse. Nije bilo svrhe biti konkurent PTT-u i izdavati telefonski imenik, ali su se mogli praviti poslovni vodiči tj. adresari firmi sa dodatnim podacima, kao što su brojevi žiro-računa, šifre delatnosti, najvažniji proizvodi... Knjige su uglavnom prodavane akviziterski: zadužite po jednog komercijalistu za svaki grad, pa on krene od firme do firme, pokazuje prethodno izdanje i pokušava da proda novo. Ako uspe, dobija svoj procenat. Vešti komercijalisti uspevali su da prodaju i oglasni prostor, tj. objavljivanje logotipa firme uz njeno ime, reklamnu šlajfnu u dnu strane, kockicu na naslovnoj strani poslovnog vodiča... Firme su tada imale para i samo je trebalo prilagoditi pristup situaciji; recimo, u Crnoj Gori je odlično prošao poslovni vodič u kome je, pored podataka o firmi, uz odgovarajuću nadoknadu štampano ime i fotografija direktora.

Sledeći korak u procesu prodaje poslovnih vodiča današnjim jezikom bi se mogao nazvati "automatizacija poslovanja". Jedan od izdavača se dosetio kako da izbegne plaćanje provizije akviziterima, pa je počeo da šalje pisma firmama i nudi svoju knjigu. U početku je ta (kako su je zvali) "papirna akvizicija" davala dobre rezultate, a kada se ideja iscrpela, moralo je da se smišlja nešto novo. Tako je jedan izdavač iz manjeg mesta dao svojoj firmi nebulozno ime čija skraćenica podseća na veliko javno preduzeće, pa slao račune koji, doduše, nude knjigu, ali su tako vešto formulisani da pri nepažljivom čitanju zvuče kao nekakav dug tom javnom preduzeću koji se mora hitno platiti. Pošto su računi na manje iznose uglavnom stizali nezainteresovanim računovođama u velikim društvenim firmama, solidan broj je bivao plaćen bez mnogo razmišljanja, pa ste na ovaj način mogli prodati možda i 10,000 knjiga godišnje. Što je najlepše, posle ste mogli da štampate 20% manje knjiga, pošto niz pretplatnika odbije prijem paketa, nemajući pojma da su knjigu već platili; vraćene pošiljke šaljete dalje, pa vam na kraju ostane sasvim dovoljno primeraka za arhivu.

I ovu ideju je trebalo prilagoditi uslovima, odnosno pisati pisma koja odgovaraju raznim krajevima bivše domovine i dobro izabrati "žrtve" - u Sloveniji i Vojvodini "akcije" su imale velikog uspeha, dok ste u Crnu Goru, Pirot i Leskovac mogli slati koliko god hoćete pisama, pa ne dobiti ni dinar. Ideju je do savršenstva razradio pomenuti izdavač iz malog mesta koji je, kada je "papirna akvizicija" dobro prošla, shvatio da se njegova firma nalazi na uglu dve ulice, pa odmah registrovao drugu firmu u istim prostorijama, ali sa adresom iz susedne ulice i napravio još jednu akviziciju, ovoga puta samo među firmama koje su "nasele" na prvi račun.

Knjige su se, dakle, ovako ili onako mogle prodati, ali ih je posle toga trebalo i napraviti, što nije jednostavan posao - da bi imenik imao smisla, podatke o onima koji su ga naručili treba dopuniti podacima o svim ostalim firmama. Nije bilo druge nego obratiti se statističkim zavodima, ali je to bio "hleb sa sedam kora". Neki zavodi nisu imali pravo da daju podatke pa je trebalo pisati duga i slatkorečiva pisma o društvenoj opravdanosti izdavanja takve publikacije, drugi su ih naplaćivali, treći ih nisu ni imali u pogodnom obliku... Kada jednom dobijete podatke, uglavnom se ispostavljalo da su oni nepotpuni - na jednom mestu postoje dobra imena i adrese, ali su brojevi žiro-računa neažurni, na drugom mestu su žiro-računi dobri ali u imenima nema YU slova... Ukrštanjem informacija iz više izvora dobijali su se koliko-toliko korektni podaci koji su prekucavani na kartončiće, sortirani angažovanjem nekoliko desetina članova studentske zadruge, prekucavani na papir, pa onda prekucavani u foto-slog. Sve u svemu, kao stvoreno za primenu računara.

Sa poslovnim vodičima sam se prvi put susreo u leto 1988. godine, kada mi je Nenad Veljković, koji je tada radio u sektoru za privredne publikacije "Narodne knjige", sugerisao da bi priprema imenika mogla biti dobar posao. Prvi rezultati su bili ohrabrujući: odmah smo uspeli da dobijemo dva posla za izdavače imenika, tako da smo kupili laserski štampač i počeli da radimo. Naravno, na probleme nije trebalo dugo čekati - izdavač nam je dao podatke na trakama za Hanivel; trebalo je potegnuti silne veze da se to prebaci na PC diskete. Onda se pokazalo da podataka realno ima previše za tadašnje personalne računare - 10 MB danas ne zvuči kao neka posebna cifra, ali sam tada morao da obrišem praktično sve sa diska svog AT-a da bih nekako sortirao toliki fajl. Tom prilikom sam uvideo veliku prednost organizacije bivše nam domovine - sve je bilo podeljeno po republikama i pokrajinama, a mnogo je lakše sortirati osam fajlova od po 8 MB, nego jedan fajl od 64 MB.

Softver nije bio mnogo ispred hardvera: nije bilo editora kojim bi se "za života programera" učitao fajl dug 3-4 MB, nije bilo dobrog programa koji bi te podatke sortirao uzimajući u obzir YU slova i činjenicu da firmu "14. decembar" treba staviti pod "Č" a ne na početak liste, a naročito nije bilo programa za prelom takvog teksta. Mada slog imenika deluje jednostavno i jednolično, on je "smrt" za DTP programe: sitna slova, ogroman broj pasusa, stalna aktiviranja i deaktiviranja bold ispisa, kockice sa imenima mesta koja ne smeju da se nađu u dnu strane, uravnanje, kolumn cifre... u tadašnjoj Venturi mogli ste u znoju miša svoga prelomiti možda desetak strana imenika, pa je onda trebalo otvarati novi chapter.

Da bismo bili efikasniji od konkurenata koji su se već javljali, trebalo je razviti kompletno okruženje za pripremu i prelom privrednih publikacija. Najpre sam napisao program za sortiranje, zasnovan na quick sort algoritmu - "peglao" sam ga danima, dok nisam ustanovio da je tri puta brži od dBASE-a i uz to korektno sortira YU slova. Avaj - čim sam ga završio, stigao je program OptTech Sort koji se mogao konfigurisati tako da sortira i YU slova, pa čak i ugraditi u sopstveni program. Na većim bazama podataka je bio nekoliko puta brži od mog remek-dela, pa ga i danas sa zadovoljstvom koristim. Za editovanje velikih datoteka sa tekstom koristio sam Program Editor koji je stizao uz WordPerfect, dok mi taj program nije preseo: u noći finalne štampe jedne publikacije ispostavilo se da program ima bag zbog koga "pobrlja" nekoliko redova na sredini ogromnog fajla. Iste noći mi je "crkao" prvi toner, ispisavši svega 2000 strana umesto deklarisanog kapaciteta od 5000 u koji sam naivno verovao... ne želim ni da se setim tih trenutaka.

Glavninu vremena sam uložio u program za prelom teksta koji sam veoma ambiciozno koncipirao: na "donjem nivou" je engine koji obrađuje naredbe za tu priliku smišljenog "jezika" i uklapa redove i stupce, dok je "odozgo" program koji čita podatke iz datoteke, formira redove i šalje komande. Program je napisan na Turbo Pascal-u, relativno brzo očišćen od grešaka i intenzivno korišćen već 11 godina. Za to vreme je "gornji sloj" modifikovan za svaku publikaciju, ali engine nisam ni pipnuo. Ne dao Bog da se u njemu nađe neka greška, pošto bi danas bilo lakše prelomiti čitav imenik u QuarkXPress-u nego shvatiti kako taj program radi i ispraviti nešto u njemu. Komentari u programu? Da, ima i njih, ali su uglavnom tipa "ovde fali deo programa koji balansira samo leve dve kolone; napisati ga kad bude potreban". Do sada srećom nije bio potreban.

Programi su rešavali tek deo problema; mnogo je teže bilo sa podacima. Prvi pogled na datoteku sa podacima obično izazove osmehe kada, recimo, vidite adresu "Mala kuća kraj Nišave", ali se ubrzo uhvatite za glavu - YU slova po raznim kodnim rasporedima iz raznih bivših srezova, imena firmi na početku pa na kraju reda, neujednačene skraćenice, užas! Kada malo uđete u formu, možete za jedno veče ispraviti bagove u imenima možda 200-250 firmi... a u bazi ih ima 60,000. Trebalo je angažovati ljude koji će ispravljati podatke, instalirati na njihove računare YU slova i potreban softver (Neša i ja to radimo veoma uspešno, pročitajte priču "386 u ulici brestova"), posećivati ih radi koordiniranja posla (tada nije bilo modema)... i na kraju opet dobiti nekvalitetan tekst.

Višegodišnje iskustvo me je naučilo da se podaci o imenima firmi ne mogu dovesti u red kojim biste bili potpuno zadovoljni - ima ih previše i neverovatno su raznoliki. Jednostavan primer: u podacima iz jednog izvora stiže ime firme "PC Press", izdavačko preduzeće, a iz druge Izdavačko preduzeće "PC Press". Koje je ime pravo? Iskreno rečeno, ne znam ni ja, a još manje će znati onaj ko danas treba da uredi 200 ili 250 imena firmi. U raznim privrednim publikacijama sam viđao različite pristupe ovom problemu - od zadržavanja originalnih imena, preko izdvajanja bitnog dela imena na početak po svaku cenu ("šampion" ovakvog pristupa je imenik u kome je Javno preduzeće "Telekom Srbija" pretvoreno u "Srbija", javno preduzeće Telekom i sortirano pod S), do uvođenja specijalnih znakova koji određuju po čemu se zapravo sortira. Ovo poslednje rešenje zvuči privlačno, ali je imenik nepregledan - dok tražite neku firmu, ne odgovara vam da prva reč bude nesortirana, dok je uređenje uvedeno po drugoj ili trećoj reči, kako gde. Naročiti problem predstavlja usaglašavanje ljudi koji rade na sređivanju imena: ma kako precizna uputstva dali, uvek će biti izuzetaka koje će razni operateri razrešiti na različite načine. Zato nije bilo lako napraviti balans između onoga što je realno i onoga što autor knjige traži.

Izdavači su veoma cenili naše napore, jer su brže dobijali pripremljeni materijal, ali je sa autorima bilo povuci-potegni. Neki od njih su publikacije godinama pripremali na klasičan način i nije im bilo do novotarija; omiljene konstatacije su bile da "računar nema dušu" i da se "na računaru gubi preciznost". To o duši je bilo teško osporiti, a što se tiče preciznosti... nije bilo nepreciznijeg posla od kartončića i trostrukog prekucavanja, ali kako nekoga ubediti u to? Sećam se autora koji su bili neobično ponosni na preciznost svoje publikacije, ali ih je najzad izdavač "pritisnuo" da podatke predaju na disketama, pa su me molili da im preporučim neke ljude koji se bave unosom. Nisam bio zainteresovan za organizaciju posla jer je sa ljudima bilo teško sarađivati, ali sam im preporučio nekoliko daktilografa. Knjiga je izašla na vreme i već sam bio zaboravio na nju, kada me je, godinu dana kasnije, panično pozvao jedan od autora da mi kaže da su "oni moji" izgleda izgubili karticu jedne firme - ona postoji u knjizi, ali kartica im nije vraćena. Bilo mi je potpuno jasno da bi bilo mnogo veće čudo da se na 80,000 kartica nijedna nije izgubila, ali sam "za javnost" odbacio samu pomisao da bi daktilografi bili toliko nemarni - najzad, od tog posla žive... I tu epizodu sam zaboravio kada sam, mnogo kasnije, otišao kod jednog od daktilografa da bih mu odneo drugi posao i bio suočen sa pitanjem: "Kada će oni tvoji da dođu po kartice, dve godine mi ovde zauzimaju mesto?". Na svoj užas, video sam kutiju sa brat-bratu 2000 kartica koje su autori zaboravili da preuzmu... a primetili su da fali jedna. Mogu da zamislim šta se desilo kada im je daktilograf odneo te kartice. To jest, ako ih nije bacio u prvi kontejner.

Zbog svih pomenutih problema brzo sam odustao od preuzimanja poslova koji traže sređivanje podataka i koncentrisao se na pripremu softvera koji će omogućiti autoru publikacije da organizuje obradu; ja sam kasnije radio samo prelom. Bila je to dobra odluka - vremenom su na tržištu opstale samo publikacije čiji su se autori aktivno uključili u pripremu podataka.

Pošto su prva dva ili tri imenika uspešno napravljena, odvažio sam se na sledeći korak - automatsko uklapanje memoranduma i reklamnih šlajfni u tekst (u početku sam u prelomu ostavljao prostor za sličice, pa su one u montaži lepljene). To je zahtevalo dosta novog razvoja: trebalo je "dekodirati" PCX i TIF formate koje generiše skener, obezbediti skaliranje sličice na potrebnu širinu, višestruko kontrolisati da li memorandum zaista pripada firmi uz koju ga stavljam... Na to su se nadovezali zahtevi autora da reklamna šlajfna treba da bude na strani gde je odgovarajuća firma, a ako ne može da stane onda na sledećoj, a ako ni tu ne stane onda bilo gde, osim ako... čitav sistem prioriteta.

Sećam se jednog od prvih poslova "sa slikama" - Nenad je uzeo na sebe da potrebnih 2000 reklamnih šlajfni pripremi u programu Ventura Publisher (proces koji smo popularno nazvali "šlajfovanje"), a ja da smislim kako da ih konvertujem i ugradim u tekst. Pošto Ventura nije mogla da snima prelomljene stranice kao TIF ili PCX, smislio sam da se štampa u fajl u LaserJet II formatu, pa da taj izlaz, programom HP2PCX (sjajni mali uslužni program... ako naučite da živite sa njegovim bagovima) konvertujemo u PCX, sa kojim je dalje lako. Posle dvadesetak dana, Nenad se pojavio sa kutijom disketa punih PRT fajlova. Konverzija je dala katastrofalne rezultate - ispostavilo se da je Nenadu ponestalo prostora na disku od 40 MB, pa je ZIP-ovao direktorijum sa fontovima, jer "ionako ništa ne štampa". To je značilo da Ventura nije imala fontove koje bi ugradila u PRT fajlove, pa su oni bili neupotrebljivi... ostalo je samo da se "šlajfovanje" nastavi i tokom narednih nedelja. Kasnije sam unapredio softver tako da je reklamne šlajfne potpuno automatski prelamao, na osnovu podataka iz baze i zadatog template-a; samo su najvažnije šlajfne pripremane ručno.

Kroz godine usavršavanja, sistem za prelom imenika je postao izuzetno efikasan. Sećam se autora privredne publikacije koji je došao kod mene očajan, jer mu je neki ne baš spretni "prelamač" prethodno skoro tri meseca pripremao imenik, probio sve rokove i najzad mu priznao da to uopšte ne može da završi. Rokovi su bili takvi da je akontacija štampariji propadala ako se materijal ne preda u ponedeljak. Pogađate, to se dešavalo u petak, pa je moja samouverena izjava da se 1800 strana može prelomiti i odštampati tokom vikenda (srećom, logotipi su već bili skenirani) zvučala kao hvalisanje. Kada se u ponedeljak 1800 listova pausa našlo na njegovom stolu, autor je bio pun hvale, gotovo šokiran. A u stvari nije bio u pitanju nikakav poseban podvig - nekoliko sati da se program prilagodi željenom obliku stranice i dva dana dosadnog "hranjenja" laserskog štampača pausom.

Nije, naravno, sve uvek išlo tako glatko - bilo je bagova i bagova... Najveći gaf sam napravio one godine kada su žiro-računi dobili i kontrolnu cifru - dodao sam potprogram za njeno računanje, ali sam zaboravio da u nekom od modula produžim odgovarajuće polje, pa je paskal "odsecao" zadnju cifru kod dužih žiro-računa. Pošto je većina računa "kraća", greška nije primećena sve do kraja posla, pa je trebalo pisati program koji određuje strane na kojima postoje pogrešni brojevi i onda te strane ponovo štampa. Sećam se i baga kod uparivanja podataka o aktivnim firmama, posle koga su za imenik izdvojene neke firme koje nikada nisu ni počele da rade (u Jugoslaviji sada imate nekih 200,000 firmi, a od toga je možda pedesetak hiljada aktivnih), a "ispao" kompletan metalski kompleks. Srećom, to sam primetio na vreme, čim se pokazalo da većina skeniranih memoranduma nema gde da se "prikači".

Jednom je čak od mene traženo da pravim bagove u telefonskom imeniku bivše federalne jedinice. Autor je doneo korektne podatke, sa tehničkim urednikom je dogovoren dizajn strane, sve sam podesio i zaključio da će knjiga imati 1400 strana. Na to je autor "vrisnuo" da knjiga ne sme da pređe 750-800 strana. Nastavio sam sa podešavanjima, ali se uz maksimalno "nabijanje" i smanjivanje slova do granica čitljivosti nije moglo sići ispod 1250 strana. "Pa dobro", reče autor, "izbaci svakog trećeg pretplatnika." Ništa nije pomoglo ubeđivanje da će tako knjiga postati beskorisna - "Sve je to unapred prodato, a sa štamparijom imam ugovoreno 800 strana". Ostalo mi je da se prisetim poslovice "veži konja gde ti gazda kaže". Pokazalo se da pisanje programa MURDAR nije baš trivijalno. Linearno izbacivanje svakog trećeg pretplatnika dalo bi loše rezultate, jer se često dešava da postoje tačno dva pretplatnika sa nekim prezimenom, pa se nakon brisanja jednog od njih mora menjati format ispisa onog drugog. Naročito je bilo nezgodno kada se neko malo mesto na ovaj način "desetkuje", pa ispadnu ljudi koji očito žive na istim adresama kao pretplatnici koji ostaju. Ipak, "osakaćeni" imenik sam nekako ugurao u 800 strana, uz posebno obraćanje pažnje na stranu sa impresumom, na kojoj nikako nisam želeo da se pojavim.

Poslednjih godina posla ove vrste ima sve manje - tržište se smanjilo, a firme imaju sve manje para za kupovinu poslovnih vodiča i reklamiranje u njima. Ipak, najbolja izdanja su opstala, a nailaze i "srodne" publikacije kao što su katalozi mašinskih i drugih elemenata, koje se veoma zgodno prelamaju korišćenjem istog softvera. Glavni problem je u tome što je program za prelom, posle čitave decenije "dorađivanja", porastao toliko da jedva staje u 640 kilobajta memorije - da bih ga koristio, moram da podignem računar pod čistim MS DOS-om, pa i tada se balansira na 500 ili 600 slobodnih bajtova. Čak sam u nekom trenutku očajanja skratio sve poruke koje program ispisuje, kako bih uštedeo pola kilobajta. Trebalo bi da ga već jednom portiram u Windows okruženje i prilagodim PostScript štampačima, čime bih povećao fleksibilnost i konačno rešio problem memorije. Nažalost, nikako da smognem snage i vremena za to - bagovi u knjigama i programima nekako se i prevaziđu, ali Windows bagovi su svet za sebe...