onsdag 7 juli 2010

PP3

(kopierat från siderespector)

Ibland måste man programmera. Nu är det en av veckans programmeringsräder: jag håller på med ett projekt att försöka ersätta användningen av PP3 på Wikipedia med ett annat program – som inte finns än. PP3 är ett stiligt program med vilken man har genererat stjärnkartor för Wikipedia, exempelvis Cygnus se till höger! Dock har programmet ett större antal brister: det genererar inte det filformat man vill ha, vilket är PDF, SVG, PNG eller JPG. Jovisst den genererar PDF, och den kan även generera PS, vilket alltid är något – men SVG är det primära som man vill ha på Wikipedia, eftersom SVG-filerna är lätta att ändra, medan PDF och PS är ändringsbart bara av experter, alltså av mig – idén är förresten dålig, då PDF genereras av något annat format – om jag patchar PDF, och sedan någon går in och ändrar originalformatet till filen, så måste jag göra om min patch en gång till – manuellt!

Andra brister med PP3 är:
  • Den kräver LaTeX, då det är ett C++-program som genererar LaTeX, kod för stjärnbilderna! Denna LaTeX genererar sedan DVI som genererar PostScript, som genererar PDF om Ghostscript finns installerat. "Inga problem" på Linux, om man kan stå ut med att installera så mycket irrelevantia för att få ett stjärnprogram, men på Windows är det omåttligt svårt.
  • Den är skriven i CWEB vilket kräver en version av CWEB för att programmet skall kompilera till C++!! CWEB är ett verktyg för Literate Programming enligt vilken man skall skriva ett dokument varmed man genererar programkod och programkodsdokumentation samtidigt. Idén är bara så förbannat galen eftersom CWEB-koden inte blir sekvensiell, och eftersom man i stället för att göra en snygg programkodsstruktur gör en slags löst odisciplinerat dokument med text i stället för kod och kommentarer, och det leder till allsköns programmeringsskändligheter och kodkopieringar. Själv läser jag hellre kommentarlös rak programkod i stället för detaljerad koddokumentation: en C-programmerare förväntas förstå C, såväl som att tala det.
  • PP3 serverar allt på ett silverfat som det inte är speciellt lätt att rota i: man kan konfigurera utseendet på sina kartor jättefint, med färger och allting, men man har ingen öppning att direkt generera någonting annat än en obskyr LaTeX-kod som lika få behärskar som de som behärskar PostScript: man skulle vilja få den att generera en SVG som Inkscape direkt kan redigera, men det gör man alltså inte med någon lätthet i en fruktansvärt förvirrad CWEB-kod.
Jag har efter litet extraordinärt fulhackande gjort en funktion som ovillkorligt läser in UTF-8 i C: ett stort problem med C är bundenheten vid ASCII, och standard clib tillhandahåller en omgivningsberoende locale-baserad UTF-8-inläsning, vilket är ett djävla otyg och står i total strid med all sund programmeringspraxis. Om man hypotetiskt inte har sv_SE.UTF-8 installerat på sitt operativ så kan man inte använda programmet om det kompilerats i sv_SE.UTF-8. Att det sedan endast är UTF-8 per se man är ute efter spelar ingen cykel. De som gjorde Unicode-stödet i C måste varit några djäkla marknadsnissar som aldrig programmerat.

Den litet naiva frågan inställer sig: måste man verkligen ha UTF-8? Njaä, det måste man väl egentligen inte, men det är en fördel: stjärnor heter sådant som β Geminorum (Pollux) och α² Capricorni (Secunda Giedi). Dessutom blir det numera krångel med texteditorerna om man skall försöka spara filer på "8-bitars ASCII" som exempelvis ISO 8859-7 som innehåller grekiska. Om man lyckades med att använda ISO 8859-7, så skulle man ändå inte kunna göra sina stjärnkartor med ryska eller arabiska stjärnbildsnamn, vilket är en högst tänkbar kombination.

Inga kommentarer: