18.10.2010 | 01:02
Može to na standardnom hrvatskom jeziku, malo pojašnjeno što te točno muči i kako bi to riješio?
Muči me (OK, nije baš da ne spavam zbog toga, ali mi nerijetko komplicira posao):
a) forsiranje linearnog workflowa kod automatizacije i muči me
b) to što je sistem (OS X u ovom slučaju) pun redundantnih poluproizvoda.
Često imam potrebu obrađivati nekakvu grafiku. I te obrade uglavnom sadrže naizgled ponavljajuće zadatke. Recimo da je jedan od tih zadataka cropanje. Zapravo... pokušat ću biti što konkretniji, da problem bude kristalno jasan - pretpostavimo da moramo skenirati nekoliko stotina (ili tisuća, nebitno) fotografija iz obiteljskog albuma i sve ih "dovesti u red". Ne "dovesti u red" u onom smislu u kojem je to dovoljno prosječnom korisniku (njegov posao je uglavnom gotov kad skener obavi svoje, s uključenom autokorekcijom boja) već "dovesti u red" tako da svaka fotografija izgleda tehnički "savršeno", a sve s namjerom da ih potom snimimo na DVD za pregledavanje u relativno niskoj, televizijskoj rezoluciji.
Zadatak na prvi pogled ne zvuči posebno kompleksno. Čovjek si može rezervirati vikend ili kraći godišnji odmor (ovisi o tome koliko ima fotki) i sve to lijepo obaviti, s puno ljubavi prema fotografijama koje i tako uvijek rado gleda.
Radimo li to pješke, workflow je prilično jasan i djeluje linearno: skeniramo fotku (ili više njih istovremeno, s auto-croppingom), učitamo jednu po jednu u Photoshop, korigiramo boje "od oka" (pri čemu nam ne smeta što ne uspjevamo postići dosljednost koloriziranja jer, iako imamo dvije naizgled fotke - na jednoj smo ozbiljni, a na drugoj se beljimo - ton kože je sličan, ali nije isti), cropamo isto tako "od oka", skaliramo na ciljanu veličinu, bluramo, sharpamo... što već treba... i posao je gotov. Nije nam predstavljalo problem ni to što su neke fotke vodoravne, a neke okomite.
I tako prođe vikend. Ili kraći godišnji odmor. A rezultat je daleko od ciljanog tehničkog savršenstva jer čovjek ne može (barem ne u danim vremenskim okvirima) biti toliko "precizan".
Alternativa? Pokušajmo isti taj posao delegirati računalu i provedimo vikend pametnije!
Može li nam Photoshop u tome pomoći? Može. Nudi nam snimanje actiona - linearnog niza radnji koje smo prvo sami proveli (dok smo ih snimali), a potom će ih Photoshop aplicirati na seriju slika. Nažalost, actioni, koliko god često dobro dođu, imaju veliki minus: linearni su. Ne postoji (a vjerojatno neće ni postojati) mogućnost grananja - korak u actionu koji bi testirao neki uvjet (recimo: da li je slika vodoravna ili okomita?) i u skladu s rezultatom skočio na neki od sljedećih koraka, a druge preskočio. I tu je granica njegove korisnosti ako korisnik Photoshopa ujedno nije i programer. Ako je programer, onda problem (opet samo naizgled!) ne postoji jer se Photoshop, kao i većina Adobe aplikacije može skriptati koristeći JavaScript (u Mac i Win okruženju), VisualBasic (samo Win) i AppleScript (samo Mac). Programerski problemi počinju sa spoznajom da od 3 navedena (začetak redundancije!) načina, samo jedan (JavaScript) nudi pristup cijelom Photoshopu. Preostala dva (VB i AS) mogu "skoro sve". Zašto bi netko onda koristio preostala dva, a ne JS? Zato što je s preostala dva moguće ostvariti komunikaciju među aplikacijama. Dok god je problem sveden na "da li je slika vodoravna ili okomita", problema zapravo i nema. Ali kad analizu slike mora napraviti vanjski softver (jer, primjerice, nije racionalno, u smislu brzine procesiranja, natjerati Photoshop da napikavajući pixel po pixel analizira granicu skenirane slike, pokušavajući utvrditi gdje je rub slike, kako bi je ispravno cropao), osuđeni smo na polovično rješenje (jer odabravši AppleScript nemamo pristup dijelovima Photoshopa) u kojem se do rezultata dolazi tako da programer na to potroši cijeli vikend ili pak cijeli svoj godišnji odmor.
OK, kad je programer već "tako pametan" što će mu uopće Photoshop? Zašto svu tu silnu obradu slike ne "isprogramira"?
Zato što bi to značilo pisati dobar dio funkcionalnosti Photoshopa iznova. To ne bi stalo ni u dva godišnja odmora.
Dakle, optimalno rješenje je "nekako" povezati raspoložive alate (sa svim njihovim mogućnostima za povezivanje i, usput, skupo plaćenim licencama), a pritom potrošiti što manje vremena. Jer kad posložimo workflow za riješiti problem A, pojavit će se problem B koji traži vlastito, vjerojatno jednako komplicirano rješenje.
Sad na trenutak pretpostavimo da sam zastranio jer opisujem problem koji nije baš "svakodnevni" (iako, vjerujem da bi automatizirano rješenje za opisano skeniranje i "savršenu obradu" mnoge veselilo).
Ostaje činjenica da će Photoshopova automatizacija putem actiona (i bez dodatnog programiranja) uvijek biti linearna. A što s, recimo, Automatorom?
Nažalost, isto što i s Photoshopom - po svojoj prirodi je linearan. Može li biti nelinearan? Na sreću, može - uz malo trikova. Pojedini koraci unutar Automatorovog workflowa mogu biti izvršavanje AppleScripte, što znači da imamo način za unutar workflowa testirati bilo kakav uvjet. Taj način je prilično "bolan" jer i dalje ne možemo granati skriptu, ne možemo "skakati" po njoj - uvijek će se izvršavati od prvog koraka prema zadnjem. Potencijalni workaround je složiti logiku workflowa tako da su koraci uvijek linearni, ali rezultate uvjetuju varijable s kojima uđemo u sljedeći korak. Da ne bude apstraktno, na primjeru cropanja slike: ovisno o tome da li je vodoravna ili okomita, u AppleScripti možemo testirati uvjet i po izlasku uz skripte vratiti parametre X i Y, pri čemu će X biti veći od Y ako je slika vodoravna, a obrnuto ako je okomita. Crop će uvijek cropati X po širini i Y po visini, što je u skladu s njegovim mogućnostima.
OK, ako već samo cropamo, moramo li to baš u Photoshopu? Nismo li to radili i pješke u Previewu? Jesmo. I radimo. Preview je logičan izbor - bilo da ga upravljamo Automatorom ili kroz AppleScript.
A onda - kvaka. Preview je, u smislu skriptiranja, ograničen utoliko što možemo pozivati pojedine naredbe (od cropa nadalje), ali zato ne možemo skriptati onaj dio kojeg inače izvodi korisnik (izuzeci skriptanog upravljanja dijelovima GUIa postoje - kroz System Events, ali nisu bitni za ovaj primjer jer u njemu ne pomažu). U slučaju cropa, korisnik označava selekciju. Slijepa ulica.
Pokušamo li izaći iz slijepe ulice koristeći Image Events, uletit ćemo u drugu, još "sljepiju" slijepu ulicu. Image Events je pozadinska (nema GUI) aplikacija odnosno jedna od komponenti OS X-a (spada u Core Services) zahvaljujući kojoj AppleScript (i ne samo on) može editirati slike. Nažalost, vrlo je rudimentalan - sadrži crop, ali (suludo!) samo "apsolutni" pa tako možemo zadati jedino širinu i visinu na koju želimo srezati sliku koju obrađujemo. Ne možemo cropati "rub", cropamo uvijek iz centra.
Znali smo da nema besplatnog ručka, ali sad znamo da nema ni besplatnog cropanja - barem ne tijekom batch procesiranja (jer Photoshop, za razliku od Image Eventsa, košta).
Rješenje je, barem iz Appleove perspektive, prilično banalno: dovesti u red sistemske servise tako da budu fleskibilniji (ovaj primjer s apsolutnim cropom, nažalost, nije usamljen!) - to bi Automatoru dalo puno veću slobodu. Jedina utjeha je u tome što korisnici sami mogu pisati (programirati) actione za Automator.
Po pitanju gubljenja vremena - i nije neka utjeha.
Što nas dovodi do druge muke - redundantnih poluproizvoda. Image Events je jedan od njih. A ograničenost Previewa je samo posljedica njegovog naslanjanja na Image Evenets. :/
Image Events, srećom, nije jedini način za obraditi sliku pod OS X-om. Tu je i Quartz (grafički layer OS x-a), odnosno njegov sastavni dio Quartz Compositor (ne brkati sa aplikacijom Quartz Composer!). Pomoglo bi da Apple dumpa Image Events i "prespoji" ga (i ne samo njega!) na Quartz - što će vjerojatno u budućnosti i napraviti. Blaga digresija - problemi s grafikom postaju potpuno nezanimljivi kada se čovjek zapita na koliko je RAZLIČITIH načina i s koliko različitih APIja moguće ispustiti zvuk na iPhoneu. :-X
Nazad na Quartz.
U dobra stara vremena razvoja grafičkih aplikacija prevladavao je linearan, "destruktivni" pristup. U prijevodu, radimo korak po korak i, kad nešto napravimo, jedini način za povratak u prethodno stanje je "undo" s kojim se jednako linearno možemo vratiti unazad. Ako smo nacrtali (s pixelima, ne s vektorima!) krug, obojali njegov obris u plavo, a potom ga filali crveno, ne možemo promijeniti plavi obris u zeleni bez da pritom na undoamo i fill. To je "linearni destruktivni pristup".
Danas se pametnije aplikacije trude pamtiti korake i omogućiti nam da ih i naknadno mijenjamo (npr. sjenu u Photoshopu). "Gluplje" aplikacije i dalje njeguju destruktivan pristup (jednom kad dodamo sjenu, nema nazad, osim s undo). Dakle, riješen je problem destruktivnog, ali, čini se, ostalo je problem linearnog.
Problem linearnog rješavaju "nodovi" i, nažalost, ne pada mi na pamet niti jedan općepoznati primjer image editora koji počiva na toj paradigmi. Nodovi su se odavno uselili u programe za compositing (Appleov pokojni Shake je jedan od takvih, a živući Nuke spada među poznatije) ili u 3D programe (Maya). Naravno, Adobe je dugo odoljevao node editingu u svojim After Effectsima, ali i tu stvari idu na bolje.
Svaki node (kao komponenta) obavlja samo jedan, specijalizirani zadatak. Obično ima jedan ili više ulaza i (najčešće) jedan izlaz. To što izlazi može istovremeno ulaziti u više različitih nodova pa se po putu, nakon procesiranja, spojiti u jedan, finalni. Vrlo jednostavan koncept i daleko manje apstraktan ako ga se promatra na primjeru spajanja opipljivih studijskih komponenti za procesiranje zvuka (ili barem virtualnih, u Reasonu).
Apple upravo taj koncept primjenjuje u Quartzu, a korisnici ga mogu iskustiti "igrajući" se sa Quartz Composerom (aplikacija). Tamošnji nodovi se nazivaju "patchevi" i njihovim povezivanjem možemo čuda raditi: vizualno programiramo logiku obrade podataka. Workflow ne samo da nije linearan nego nije ni destruktivan - čim "prespojimo" nodove na neki drugi način, Quartz (kao engine) će prekalkulirati novo stanje i prikazati nam aktualni rezultat. Nigdje po putu se ništa ne gubi, a koncept undoinga postaje nepotreban.
Evo, prikačit ću snapshot Quartz Composera, da bude jasnije o čemu pričam.
Poanta cijele priče je da "bolji" (u odnosu na Image Events, kao potencijalnu zamjenu za potrebnu funkcionalnost Photoshopa) (pod)sustav već postoji u samom OS-u, ali, eto, nije još našao primjenu na svim frontovima. Apple uredno ažurira biblioteku raspoloživih patcheva i, kao što sam već jednom spomenuo, s vlastitim Motionom (aplikacija) pokazuje za što je sve OS, odnosno Quartz sposoban out-of-the-box (u smislu: kako s minimalo programiranja doći do aplikacije koja će jednog dana konkurirati After Effectsima). Nije to nikakve demonstracija sirove snage stroja (Maca) već snage "kockica" koje čine OS, a koje su još od Wirthovog Oberona (pritom mislim na OS, a ne na istoimeni programski jezik) djelovale kao SF - i tada (a očito i danas) ideja je bila ista - smanjiti broj redundantnih (softverskih) elemenate jer nema potreba da Adobe napiše jednu Blur funkciju za Photoshop, drugu za Illustrator, Apple istovremeno napravi Blur patch za Quartz, ali mali Perica svejedno ne iskoristi ništa od toga nego napiše vlastiti Blur - pri čemu sva 4 odrađuju isti posao. :/
Različiti korisnici uvijek će imati različite potrebe (netko jednostavnije, netko složenije), međutim svima nam itekako može pomoći ako se svaki od workflowa koje koristimo (bilo kroz Photoshop, Automator ili skriptiranje) bude gradio koristeći univerzalno raspoložive nodove/patcheve koji se, naravno, mogu i uvjetno granati.
Jednog dana... ne tako skoro, nažalost.