H.VHS 0.3.1, Handshake 9 och Qt-knöggel

Även om jag skrivit program som gör fler och mer avancerade saker än H.VHS, så har inget av dem någonsin blivit så omfattande. Förmodligen beror det inte minst på att jag brukat använda Scheme, medan detta är skrivet i C++, och givetvis att jag än så länge kodar hellre än smart i Qt/C++/Windows-miljön.

Men det ska inlägget inte handla om. När jag hade rivit ut och ersatt mer eller mindre allt som sker bakom kulisserna i programmet, lyckats knyppla ihop hämtningsmetoder för TV3, TV4, TV6 och TV8, och därför trodde mig vara färdig att släppa nästa version, så dök två problem upp.

  1. TV4 Play vägrade plötsligt komma överens med rtmpdump (och därför även librtmp, som H.VHS använder).
  2. På en helt färsk dator syntes inga SVG-ikoner i verktygsfälten.

Lösningen på det första problemet var enklare än jag tänkt mig: De senaste, inofficiella versionerna av librtmp har inga problem att hantera "Handshake 9"-problemet, som det visst kallas, så lösningen fick bli att rulla en egen librtmp-dll. Lätt värt besväret, eftersom programmet dessutom blir av med den statiska länkningen till PolarSSL, som är GPL-licensierat, till förmån för OpenSSL, som passar bättre in i licensblandningen.

Det krångligare problemet var att lista ut hur man egentligen får Qt att snällt ladda SVG-grafik. Frågan har ställts massor av gånger på nätet, men inga svar verkar ha hjälpt de stackarna som försökt. Det hela försvåras dessutom av att på datorer där hela Qt finns installerat så fungerar allting som det ska – det är först på användarsidan som felen uppstår.

Så steg ett är att se till att själv drabbas av samma problem redan i produktionsmiljön.

  1. Infoga följande kod i main().

Det är de tre raderna i krullklasen som gör arbetet. Eftersom det blir stökigt att lagra alla stödfiler direkt i bygg-katalogen (där även alla objektfiler hamnar) så vill jag inte ha det här bekymret annat än när jag bygger en release, som jag sedan kopierar till en katalog ("dist") där QtGui4.dll och alla de andra ligger och väntar.

Med detta uppstår problemet även på min knädator. Nästa steg är förstås att också lösa det.

  1. SVG-grafik kräver QtSvg4.dll, som i sin tur vill ha QtXml4.dll, så de ska ligga direkt i dist-katalogen, tillsammans med binären.

    dist\HuggpunktVHS.exe
    dist\QtGui4.dll

    dist\QtSvg4.dll
    dist\QtXml4.dll

Man kunde tro att det skulle räcka – minns jag inte fel så gjorde det faktiskt det någon gång tidigare – men icke!

  1. Till sist måste ett plugin distribueras tillsammans med binären, och de måste placeras riktigt i förhållande till den. Så här:

    dist\imageformats\qsvg4.dll

Det ska räcka. Men beroende på vad man vill göra kan även de följande filerna vara bra att skicka med, inte minst därför att de behövs för att komponenter som QWebView ska kunna använda diverse bildformat:

dist\imageformats\qtiff4.dll
dist\imageformats\qmng4.dll
dist\imageformats\qgif4.dll
dist\imageformats\qico4.dll
dist\imageformats\qjpeg4.dll
dist\iconengines\qsvgicon4.dll

Så principen tycks vara, att när man som i steg 1 sagt åt Qt att enbart leta efter stödfiler i den katalog som binären ligger i, så begränsar sig Qt lydigt till att leta efter sina moduler där. Men när det kommer till plugins, så måste de ändå ligga i korrekta underkataloger till dist-katalogen.

Och vilka de korrekta underkatalogerna är, det ser man för övrigt här:

C:\QtSDK\Desktop\Qt\4.7.3\mingw\plugins

Så här är det inte utan att man börjar fundera på att bygga allting statiskt i stället.

Uppdatering 2 juli. Så pass tveksam kände jag mig efter att faktiskt ha tänkt över det här Qt-knögglet, att jag tänkte om. Någonstans kring version 0.4–0.5 kommer en stor del av programmet (den jag kallar Hugg.Play) att skrivas om i Scheme. C++ är helt enkelt inte tillräckligt roligt. Eventuellt kommer Qt-beroendet försvinna helt och hållet vid något senare tillfälle.

Det finns dock en del buggar i version 0.3.1 som vore bra att få ordning på så snart som möjligt, så 0.3.2 kommer släppas som planerat.

Byta plats på Esc och Caps lock

Uppdatering 24 augusti 2012
En förbättrad version av det här inlägget finns att läsa här.

* * *

cPS LOCK ÄR EN FÖRBnnat störig tangent innan man lär sig låta bli den. Lyckligtvis går den att flytta på, utan att man för den sakens skull ska behöva pilla med själva tangentbordet.

Eftersom jag dessutom helst använder vi till texteditor (eller mera precist nvi), så vill jag ha Esc nära till hands. I kombination med att jag använder styrknopp istället för touchpad eller mus, så behöver jag nästan bara flytta på händerna när det kliar.

För att byta plats på Esc och Caps lock i X11 kör du följande kommandon i skalet:

$ touch ~/.Xmodmap
$ echo "remove Lock = Caps_Lock\nkeysym Escape = Caps_Lock\nkeysym Caps_Lock = Escape\nadd Lock = Caps_Lock">>~/.Xmodmap

Ovanstående skapar eller utökar i själva verket filen .Xmodmap med följande innehåll:

remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock

Inställningarna börjar gälla när du startat om X11, eller kört följande kommando:

$ xmodmap ~/.Xmodmap

I Windows 2000 eller senare kan du flytta tangenter med programmet SharpKeys.

IPv6, .SE och en brödrost

IPv4-adresserna är äntligen slut, läser jag i Dagens Nyheter. De har talat med Jörgen Eriksson på Stiftelsen .SE om saken. Men vad sjutton är det han säger?

– Just nu påverkas vi inte alls. I förlängningen kommer de flesta att tvingas byta ut sina internetmodem eller routrar. Och de som har riktigt gamla datorer kommer inte att kunna använda dem.

Jörgen Eriksson gissar att datorer som nu har sju till tio år på nacken kommer att tvingas till skroten. Å andra sidan kommer övergången inte att ske över en natt.

Att den alldeles för försenade övergången till IPv6 kommer skapa en fullständigt makaber skrothög av modem, routrar, nätverksskrivare och andra grunkor med inbäddade operativsystem är ingen nyhet. Antingen sitter nätverksstacken på ROM eller så har företagen för länge sedan slutat göra uppdateringar, eftersom de tjänar pengar på att sälja nya apparater i stället.

Å andra sidan kan tillräckligt dumma switchar och dylikt klara övergången utan bekymmer, eftersom de helt enkelt inte tittar närmare på vad det är för något de skickar omkring. (Ett lysande exempel på vad jag menar med »enkelhet« i bloggens tagline.)

Men att man ska behöva skrota sju år gamla datorer låter besynnerligt. Varför då? För att hitta hårdkodade operativsystem måste man ju nästan söka sig ända tillbaka till TI-99/4A, och den första 386-datorn kom redan 1985. Övergången borde alltså inte kunna bli besvärligare än ett operativsystembyte.

Fast det är väl det som är kruxet. Äldre datorer klarar ju inte av att köra dessa moderna monster till OS som Microsoft spottat ur sig de senaste åren, även om XP SP1 – som klarar IPv6 – ska kunna hanka sig fram klart brukligt på flera maskiner som redan kommit upp i tonåren.

Om Apple har skapat samma problem för sina användare, eller om det kanske är deras huvudsakliga affärsidé som skulle vara problemet – alltså inlåsningen – det vet jag inte. Fast saken låter suspekt: OS X har ju IPv6-stöd via KAME (via FreeBSD), och KAME blev färdigt innan Apple började fasa ut PowerPC-stödet ur OSX.

Oavsett vilket, så är det inte hårdvaran det är fel på. Jag har kört IPv6 på 386:or från 1990, här och var i världen står servrar från 1980-talet och väntar på övergången, och…

Den här brödrosten är redo

Den här brödrosten är redo.

…just det. Om en sex år gammal brödrost kan köra IPv6, så ska det väl ändå gå på en dator som är bara något år äldre? Den som tvingas skrota sin dator har blivit blåst av vilka det nu är som försökt göra operativsystemet i fråga. Sannolikt inte för första gången.

Ändra och skriva ut skyddade PDF-dokument

I det här inlägget beskriver jag några olika sätt att kringgå utskrifts- och ändringsskydden i PDF-dokument. Om du struntar i varför det går, så kan du klicka här för att hoppa över inledningen, som förklarar varför detta är och alltid kommer vara möjligt.

Miniteori

En fördel för oss som inte gillar slentrianmässigt bruk av kopierings- eller redigeringsskydd, är att sådana skydd egentligen är teoretiskt omöjliga. Varför det är på det viset, kan förklaras rätt enkelt med ett Alice and Bob-exempel.

Alice kallar vi avsändaren av ett stycke information, till exempel ett dokument eller en film. Den mottagare som Alice tänker sig kallar vi för Bertil. Alice vill dela med sig av sin information till Bertil utan att Eva får tag på den, eftersom Eva kopierar eller redigerar allt hon kommer över. (Och häng med här: Om Eva inte gjorde detta, så skulle hon inte längre vara Eva, utan ännu en Bertil.)

När det gäller hemlig kommunikation mellan Alice och Bertil, så är det möjligt att hålla Eva utom hörhåll, till exempel genom att viska eller lämna över ett USB-minne. Men problemet för Alice, när hon publicerar ett skyddat PDF-dokument, är att Eva därmed får tillgång till dokumentet, och kan titta på det precis som Bertil.

En enkel tumregel, som aldrig slår fel, är att om man har tillgång till ett stycke information så kan man kopiera den. Och det man kan kopiera kan man också redigera.

Utskriftsskyddet är enkelt att besegra, eftersom det är korkat. Skyddet går nämligen enbart ut på att PDF-dokumentet berättar vad man får och inte, och när PDF-läsare sedan öppnar dokumentet, så stänger de i regel lydigt av alla otillåtna funktioner. Lösningen på problemet är alltså inte svårare än att man helt enkelt struntar i vad dokumentet säger att man får göra och inte.

Vad som däremot inte är lika lätt, är att komma åt åtkomstskyddade dokument som man inte har rätt nyckel, certifikat eller lösenord till. Det är visserligen genomförbart, men ofta inte särskilt praktiskt eller snabbt. Inte heller är det särskilt intressant att förfalska signerade dokument.

När du gör en oskyddad kopia enligt metoden nedan, så tas de enkla skydden bort, alltså de där som går ut på att dokumentet berättar vad man får göra eller inte, och hoppas att man är duktig och lyder. Resultatet blir ett rent PDF-dokument utan sådana förmaningar eller andra tillbehör.

Avlägsna utskrifts- och redigeringsskydd

Man kan skapa oskyddade kopior av skyddade PDF-dokument på flera intressanta sätt. Den som googlar kan till exempel hitta patchar för både ghostscript, xpdf och pdftools.

Men den metod jag beskriver här är den som är enklast att återge och genomföra, om än inte den mest praktiska att använda i längden. Det enda du egentligen behöver är qpdf.

Windows-användare får det enklast om de hämtar arkivet qpdf_vc6_exe.zip, och packar upp .exe-filen i en mapp som är enkel att hitta tillbaka till. Vill du inte använda kommandoprompten, så rekommenderar jag att du även hämtar det här zip-arkivet, och packar upp .bat-filen i samma mapp som du lade qpdf_vc6.exe.

Sedan är installationen färdig. För att ta bort alla skydd från ett PDF-dokument, så tar du tag i dokumentet, och släpper det på ikonen som heter Släpp skyddade PDF-dokument på mig. I samma mapp som PDF-dokumentet ligger dyker strax en oskyddad kopia av det upp.

Om du inte vill behöva trycka på en knapp varje gång du konverterat ett dokument, så sätter du ett dubbelkolon (alltså ::) framför raden pause i .bat-filen. (Men då kommer du inte hinna se vad som gick snett, om något gick snett.)

På andra operativsystem än Windows använder du qpdf så här:

$ ./qpdf --decrypt "Skyddat original.pdf" "Oskyddad kopia.pdf"

Och om du vill köra qpdf i Windows själv, utan .bat-fil:

C:\...>.\qpdf_vc6.exe --decrypt "Skyddat original.pdf" "Oskyddad kopia.pdf"

Kommandot innebär att qpdf ska göra en oskyddad kopia av dokumentet Skyddat original.pdf och spara den som Oskyddad kopia.pdf.

Ett annat sätt: doPDF

Ett alternativt sätt att skapa oskyddade PDF-dokument i Windows är att installera doPDF. Därigenom dyker det upp en ny skrivare på datorn, som heter doPDF. När du skriver ut ett dokument till den skrivaren, så blir du ombedd spara ett PDF-dokument någonstans. Du kan alltså göra PDF-dokument av vad som helst som går att skriva ut.

Om du till exempel skapat ett Word-dokument med typsnitt som inte får bäddas in i en PDF, så kan du göra det ändå, genom att skriva ut till den här skrivaren.

Om man vill använda den här alternativa metoden för att skapa oskyddade kopior av PDF-dokument, så fungerar den givetvis bara om PDF-originalen tillåter utskrift.

(Ett liknande program är PDFCreator. Fördelen är att det är öppen källkod, vilket doPDF inte är. Nackdelen är att installationsprogrammet på ett riktigt envist sätt försöker få dig att installera en reklamsnyltare också. Installerar du på slentrian, utan att granska varenda förbaskad kryssruta, så blir dina webbläsare kapade och fyllda med reklam, och varje steg du tar på nätet kartläggs fortsättningsvis av vad det nu är för reklamföretag.)

Åtkomstskyddade PDF-dokument

Det finns flera variationer på den här typen av skydd, och alla är lika irriterande. Vissa dokument kräver bara att man matar in rätt lösenord för att man ska få se dem, medan det är värre med andra. Vid något tillfälle köpte jag till exempel Språknämndens Svenska Skrivregler som PDF.

Det dokumentet går inte att öppna i Adobe Reader, som klagar över saknade "skyddsinsticksprogram". Efterhand som Adobe uppdaterat sin programvara har de funktioner som krävs för att öppna boken försvunnit, och nu är det alldeles för opraktiskt att komma åt innehållet.

Hade jag ansträngt mig litet medan jag fortfarande kunde öppna boken, så hade jag kunnat göra en kopia utan åtkomstskydd, men det var jag visst för bekväm för.

Så nu är jag inte någon Bertil längre, skulle man kunna säga. Adobes kunder för den här typen av dokumentskydd är förstås inte heller sådana som jag, alltså folk som vill läsa sina böcker, utan bokhandlarna. Och de lär inte protestera särskilt högljutt, för jag hade ju inget annat val än att köpa boken en gång till. Fast den gången blev det den mycket dyrare pappersvarianten.

Avinstallation – Lenovo style

I kväll en berättelse om tur i oturen. Jag är en på flera sätt paranoid stackare, och vistelsen i Windows har inte gjort saken bättre. När något program inte verkar bete sig som det borde drar jag i regel i gång top, pftop och greppar fstat. En pkill -9 senare kör jag programmet under systrace. I Windows får jag visst nöja mig med den här "resurshanteraren".

I kväll fick jag för mig att byta upp programvaran för Bluetooth.

Steg 1: Hämta och kör den nya versionen från Lenovo.

Men någon befängd anledning vägrar installationen bli färdig. I sista sekund kommer en trotsruta, och så rullas allting tillbaka: Först tas den nya programvaran bort igen, och sedan återställs den tidigare.

Jag kunde låtit saken vara med detta, men återställningen är trasig. Övningen omintetgjorde all Bluetooth-funktionalitet på datorn.

Så vad ska jag göra? Harhjärtad och med suckarna flygande genom rummet bestämmer jag mig för att inte trixa med några filer hit eller dit, utan helt enkelt avinstallera den gamla programvaran på det gamla vanliga viset, och sedan försöka med den nya igen. Det värsta som kan hända är ju att jag får klara mig med Microsofts programvara, tänker jag (och har förfärligt fel).

Steg 2: Prova inte detta hemma. Upp med kontrollpanelen, fram med skämtet till pakethanterare, och tröck på avinstallera för Bluetooth with Enhanced Data Rate Software eller vad skräpet nu hette.

En progress-ruta meddelar omedelbart att Bluetooth konfigureras. Rutan har ingen kryssknapp, ingen avbryt-knapp, och faktiskt inga knappar alls. Efter några sekunder får jag veta att konfigurationen är färdig om nio sekunder. Efter ytterligare ett par sekunder är det tretton sekunder kvar, och under ungefär dubbelt så lång tid fortsätter det vara just tretton sekunder kvar. En förfärligt långsam konfiguration.

Hårddisklampan är på ovanligt bra humör.

Det är nu jag ballar ur. Resursövervakaren meddelar ingen diskaktivitet jag förstår mig på, och det kan väl knappast skada, så jag tvångsavslutar Microsoft Installer-processen.

Sedan är det kört. Med internet är det lätt att vara efterklok. Just den här avinstalleraren är inte riktigt som andra. I stället för att ta bort sitt program, som avinstallerare brukar, så tar den bort allt på C:\.

ALLT.

Men jag stoppade den innan den hann äta upp mer än 20GB. Som tur är verkar den ha följt något slags kronologisk ordning. Det första jag gjorde med datorn var att föra över dokument från min förra, och det sista jag gjorde var att installera program. Alltså försvann program och en del uppdaterade Windows-komponenter, men inga dokument.

Lenovo känner till problemet, men "kan inte reproducera" och låtsas inte om något. Samma different-tänk som Apple.

Efter omstart och inloggning väljer Windows att omedelbart, men lugnt och kontrollerat, stänga av datorn. Efter nästa start är Windows inte längre "äkta".

Steg 3: Leta fram System Recovery-skivorna jag brände när jag fick datorn, var de nu tagit vägen.

Jag återkommer. Paranoidare än någonsin. (Kommer inte de där radeon-drivisarna för X11 snart?)