- Richard Rönnbäck
- Medlem ●
- Norrtälje
- 2012-08-23 10:14
Vi nördar som jobbar med programmering och scripting av olika slag brukar ju ofta ha en övertygelse om att kod skall vara snabb och effektiv, nästan som självändamål, men ibland kan man till och med åskådliggöra betydelsen av det, och just nu håller jag på med ett sådant projekt, där betydelsen av varje sekund kan mätas.
En kund har ett bibliotek av 3600 Mac OS utdrag/urklipp/clippings, skapade på Mac OS med äldre versioner av Illustrator. Clippings är ett format som lever på lånad tid. Apple har börjat fasa ut det, och kunden behöver också få en konvertering så det funkar på Windows.
Problemet är att det enda sättet att få in sådan clipping i Illustrator är att dra och släppa, vilket är fint för en fil, men inte för 3600.
Inledningsvis tacklade jag därför problemet med att simulera drag-and-drop, men då den rörelsen i sig själv tog nästan 3 sekunder, innebar det att enbart det moment kräver 10800 sekunder, dvs nästan 11 timmar extra körtid –.bara för det momentet!
Genom att istället scripta inläsning av resursfilerna till klippbordet kan man tvinga Illustrator att klistra in innehållet, utan något dra och släpp.
Vid inklistringen uppstår andra problem, eftersom Illustrator envisas med att visa upp icke scriptbara dialogrutor, om att det finns legacytext som måste uppdateras. Genom att på programmatisk väg sända tantenttryckningar kan man iofs komma stänga ner dem, men det gör ändå processen långsammare, eftersom man måste vänta tills man är säker på att dialogrutan dykt upp.
LIknande problem finns med fontvarningsdialoger.
Summa summarum innebar det att för de första utkasten av scriptet så tog det närapå 20 sekunder per fil, vilket motsvarar 20 timmars körtid, och i de senare är jag nere på cirka 8, vilket alltså motsvarar 8 timmars körtid, vilket fortfarande är för länge, eftersom det finns en risk att man upptäcker oförutsedda problem och måste köra om batchen. Utöver prestanda är problemet också tillförlitlighet, att GUI-scripting är så förtvivlat labilt.
Min nästa tanke är därför att sätta igång en äldre maskin, med en äldre version av Illustrators, där den äldre textmotorn används. På den burken kan då själva inklistringen ske, vilket gör att man kan undvika varningsdialogerna. Det bör minska körtiden till omkring 4 timmar. Genom att sedan göra en slavburk med nyare Illustrator, där uppdateringen till nya formatet kan ske, så kan de två burkarna köras parallellt .
Självfallet hade man kunnat minska körtiden med att helt enkelt addera fler maskiner, så batcherna blir mindre, men så många maskiner har jag inte.
Hade man gjort alltihop manuellt hade det istället tagit cirka 160 mantimmar (under förutsättning att man orkar jobba helt produktivt och hundraprocentigt felfritt alla dessa timmar)