Introduktion till datateknik för språkvetare

Storlek: px
Starta visningen från sidan:

Download "Introduktion till datateknik för språkvetare"

Transkript

1 Introduktion till datateknik för språkvetare ht 2016 Per Starbäck

2

3 Kapitel 1 Inledning 1.1 Om kursen Schema och annat finns på lingfil.uu.se/kurs/ids/. Där kommer det även finnas länkar till de olika delarna av detta kompendium. Mål (citerat från kursplanen) Kursen skall förmedla grundläggande kunskaper om datasystem och databehandling, som en bas för databehandling av naturligt språk. Efter avslutad kurs ska studenten minst kunna: nämna och översiktligt förklara funktionen hos en modern datorhårdvaras viktigaste komponenter, inklusive externt och internt minne och andra viktiga digitala media nämna och översiktligt förklara funktionerna hos ett vanligt operativ- och filsystem skapa och använda filer i de vanligaste formaten för textdokument med elementär typografi, spela in och spela upp ljudresurser, samt visa bilder översiktligt redogöra för begreppen teckenkodning, ordbehandling, elektronisk typsättning och filöverföring samt arbeta praktiskt med dem i några elementära sammanhang använda program för elementär textbearbetning och enkel kvantitativ analys översiktligt förklara begreppen klient/serversystem, Internet, www, webserver och webläsare skapa HTMLsidor och publicera dem på nätet översiktligt beskriva hur någon viktig söktjänst på nätet fungerar och använda denna på ett avancerat sätt resonera kring digitala rättighetsfrågor i relation till konkreta objekt Examination För att få godkänt på kursen ska man göra klart inlämningsuppgifterna i samtliga moment. Bland Figur 1.1: Ett gnuhuvud som symboliserar operativsystemet GNU (= GNU S Not Unix) annat för att underlätta min kontroll ska uppgifterna göras på våra datorer här, och man ska vara närvarande vid undervisningstillfällena. Om du någon gång inte kan närvara så hör av dig i förväg om detta! Bara betygen underkänt och godkänt finns på denna kurs. 1.2 Vårt datorsystem På STP används operativsystemet GNU/Linux som är ett system som liknar operativsystemet Unix. Vid»normalt«användande är det mest på skrivbordsmiljön man märker skillnad på system, med menyer, paneler, ikoner osv. Den heter Gnome och är gjord särskilt för GNU, men går även att köra på andra Unix-liknande system. I denna kurs kommer vi inte att använda det särskilt mycket, utom denna första gång. Det ska ni till största delen kunna sätta er in i med den inbyggda hjälpen. I labbarna kommer vi istället mycket att hålla på med kommandoraden och annat som är svårare att komma in i på egen hand. 3

4 1. INLEDNING Våra datorsalar De datorer som ni använder finns i två datorsalar, tillsammans med servrar som även går att använda utifrån. Dessutom har en del anställda datorer som ingår i samma system. Våra datorer har fått namn som t. ex. preposition, futurum, dativ och numerus. Institutionen för lingvistik och filologi har domännamnet lingfil.uu.se, så datorernas fullständiga namn är i stil med numerus.lingfil.uu.se. Den datorn har även aliaset stp.lingfil.uu.se och det är dit man ska koppla sig ifall man ska arbeta på våra datorer utifrån, t. ex. hemifrån. De två datorsalarna är öppna dygnet runt, året runt, och är tillgängliga med era passerkort med vilka ni också kommer in i huset. När salarna inte är bokade för undervisning är det bara att slå sig ner vid en ledig dator där. Med rätt program på en annan dator kan man också koppla sig till våra datorer utifrån och komma åt samma filer och program som man når från datorsalarna. Att logga in När man ska använda systemet måste man först logga in. Ditt användarnamn och lösenord får du av Per. Till användarnamnet finns knutet en särskild hemkatalog där man kan lagra sina filer. Att välja lösenord På alla ställen där man ska sätta ett lösenord brukar man uppmanas att ha säkra lösenord:»undvik lättgissade lösenord! Använd inte riktiga ord, varken på engelska, svenska eller något annat språk! Använd inte samma lösenord som på något annat ställe!«och så vidare. I själva verket är förstås lösenord till olika ställen olika viktiga, och ibland kan det mycket väl duga att använda samma slasklösen på flera ställen där man behöver registrera en användare med lösenord för att kunna använda någon tjänst. Men i en del fall är det viktigare, och detta är ett sådant fall, så om du ändrar ditt lösenord så se till att du följer sådana regler. Blanda gärna stora och små bokstäver (de räknas som olika!) och stoppa gärna in nån siffra eller nåt skiljetecken. Ett skäl till att det är viktigt att alla har bra lösenord, förutom ens egen säkerhet, är systemets säkerhet. Det går att logga in på dessa datorer utifrån, varifrån som helst på Internet. På datorer som sitter på nätet pågår hela tiden försök från olika håll att ta sig in olovligen på datorerna och få administratörsrättigheter där. Sådana attacker sker ofta i två steg. Först behöver förövaren komma in på datorsystemet överhuvudtaget, sedan hitta ett öppet säkerhetshål som kan ge mer behörighet. Det andra steget är det upp till systemadministratörerna att ha stoppat, men för säkerhets skull bör det även ta stopp redan vid första steget genom att alla användare har goda lösenordsvanor. Att logga ut När du lämnar datorn ska du logga ut. Klicka fram menyn längst till höger i övre panelen och sedan på. Stäng inte av datorn! Dessa datorer står på dygnet runt, bland annat för att uppdateringar ska kunna göras utifrån. Man kan istället låsa datorn om man lämnar den en kortare stund. Andra kan också logga in på datorn då. Ljud För att inte få för mycket olika ljud i datorsalarna så använder vi hörlurar. Volymkontrollen finns i överpanelen på skärmen, men observera att en del hörlurar dessutom har en egen volymkontroll, så om det inte hörs något kan det vara kontrollen där som behöver ändras snarare än något på datorn. Tangentbord Våra tangentbord är uppsatta så att vissa tangenter med accenter är döda (se figur 1.2), dvs. inte ger något tecken av sig självt utan bara i kombination med nästa tecken. Det gäller dels en tangent med vilken man kan skriva t. ex.»ú«och»ù«. Dels en tangent med vilken man kan skriva t. ex.»ü«,»û«och»ũ«. Den sistnämnda står till höger på tangenten och får man därför fram tillsammans med AltGr. AltGr (= Alternate Graphic) kan kombineras med en mängd tangenter för att ge andra tecken. Många av dessa står till höger på den tangent det gäller (t. ex. C på AltGr + e), men det finns andra också, t. ex. þ på AltGr + t. För att skriva ^, ~ och ` som egna tecken kan man trycka ett mellanslag efter den döda tangenten. Figur 1.2: De två döda tangenterna på våra tangentbord 4

5 1.3. Filer och kataloger 1.3 Filer och kataloger Data av olika slag lagras i filer. Innehållet kan vara bl. a. texter, ljud, bilder, databaser och program, och allt ligger normalt lagrat som en sekvens av bytes, som kan ses som värden 0 255, i ett visst format, dvs. kodade enligt någon särskild konvention. Detta återkommer vi till senare. Filer med program omfattar både källkoden (textfiler skrivna av programmerare, skrivna i ett visst programspråk) och filer som inte är läsbara för människor (binärfiler), men vars innehåll kan tolkas som instruktioner som kan utföras (exekveras) direkt av datorn. (De senare genereras automatiskt från de förra med program som kallas kompilatorer.) Kataloger Filerna samlas i kataloger (directories). När man använder kommandoraden är denna beteckning ofta vanligare än mappar (folders). Det finns dels centrala kataloger till för systemet och dels har varje användare sin egen hemkatalog att lagra filer i. I en katalog kan det förutom filer ligga andra kataloger, underkataloger (subdirectories), till den första katalogen. Fil- och katalognamn I Unix-system är det skillnad på små och stora bokstäver vad gäller namn på filer och kataloger. Det går därför t. ex. att ha en fil som heter»readme«, en annan fil som heter»readme«och en tredje som heter»readme«i samma katalog. Vanligtvis låter man dock de flesta filerna ha namn med bara små bokstäver. 1 Även om det går bra att ha filnamn med mellanslag i brukar man undvika det för filer som man ska hantera med kommandoraden. Ni kommer snart att förstå varför! Filnamnsändelse I många filsystem har alla filer en ändelse till det egentliga filnamnet. Denna talar om vad det är för slags fil och brukar skrivas efter en punkt. En fil foo.c kan innehålla källkoden till ett program skrivet i programspråket C, foo.exe vara den exekverbara binärfilen med programmet, foo.pdf en text (i formatet Portable Document Format) som beskriver programmet, foo.html samma text som HTML (Hypertext Markup Language), och så vidare. Ofta finns det en begränsning på hur lång filnamnsändelsen får vara. I syn- 1 Sådana där uppfordrande filer README brukar dock faktiskt heta just så, med stora bokstäver, och är textfiler som beskriver övriga filer i samma katalog. nerhet kan gränsen vara tre tecken, vilket är förklaringen till att man ibland kan se t. ex. HTMLfiler vars namn slutar på.htm istället för.html. Även i Unix-filsystem brukar man ge många filer sådana namn, men en punkt är egentligen som vilket tecken som helst i filnamn, så ett filnamn kan innehålla ingen, en eller flera punkter, och det finns ingen särskild begränsning på hur lång delen av namnet efter punkten får vara. Genom att man ger filnamnen sådana ändelser är det lättare för såväl program som människor att förstå vad det är för slags filer utan att titta i dem. Några få av de vanligare filnamnsändelserna är: txt html xml tex java pl py wav, ogg, mp3 gif, png, jpg pdf odt Vanliga textfiler Hypertext Markup Language extensible Markup Language Typsättningssystemet TEX Programspråket Java Programspråket Perl Programspråket Python Olika ljudformat Olika bildformat Portable Document Format Open Document Text Körbara program brukar inte ha någon ändelse i Unix, så en kompilerad version av programmet foo heter troligen bara foo (och inte t. ex. foo.exe). Vanliga textfiler har ofta ändelsen.txt. Dolda filer Många program skapar själva filer och kataloger i ens hemkatalog där de sparar sina inställningar eller mellanresultat som det inte är tänkt att man normalt ska behöva titta närmre på. För att man inte ska störas av dem i ens fillistningar så brukar de filerna vara dolda. Detta går i Unix till så att filen eller katalogen har ett namn som börjar med punkt (.). Filhanterare och andra program som listar filer nämner normalt inte sådana filer och dessa filer kan oftast ignoreras. Filträdet Nästan varje katalog är underkatalog till en annan katalog. I Unix är det bara en katalog som inte är det, så man kan tänka sig alla kataloger i ett hierarkiskt träd där allt grenar ut sig från denna katalog och där filerna är löv längst ut. Den katalog som allt utgår från kallas för roten. Till skillnad från riktiga träd tänker man sig att roten sitter högst upp och att trädet förgrenar sig nedåt, så underkatalogerna ligger alltså längre bort från roten. I figur 1.3 visas en del av filträdet här. 5

6 1. INLEDNING / (roten) bin home local usr cp ls mv staff stp15 stp16 x15 x16 kurs bin starback ellen kanske din hemkatalog kanske din hemkatalog ids firefox gnome-chess Desktop uppsala konto.txt eulang.tsv verb.txt slottet.jpg Figur 1.3: I detta filträd är filer skrivna i fetstil. Allt annat är kataloger. Detta är förstås bara ett utdrag från det fullständiga filträdet. I varje katalog finns det många fler grenar som inte är utritade här. Här är t. ex. hemkataloger för STP16 underkataloger till en katalog stp16 som i sin tur är underkatalog till en katalog home som samlar allas hemkataloger. Den i sin tur är underkatalog till roten (/). De studenter som inte går på programmen får istället hemkataloger som är underkataloger till en katalog x16 för externa studentkonton skapade 2016, som även den är en underkatalog till home. Fullständiga sökvägar Man kan ange en fullständig sökväg (path) till en fil eller katalog genom att ange katalog för katalog hur man kan ta sig från roten till denna plats i filträdet. Före varje led, inklusive det första, skriver man ett snedstreck. Om en student på STP16 med användarnamnet»ellen«hade en underkatalog med namnet uppsala och i den lade filen slottet.jpg skulle alltså /home/stp16/ellen/uppsala/slottet.jpg vara den fullständiga sökvägen till denna fil och /home/stp16/ellen/uppsala vara den fullständiga sökvägen till den katalog där denna fil ligger. Bara en rot: I Unix använder man filsystem med bara en rot, oavsett hur många diskar som är anslutna till datorn. I MS Windows använder man flera, som har bokstäver som namn. En fullständig sökväg börjar med den bokstaven följt av ett kolon, så det fullständiga namnet på en katalog där kan se ut som C:\WINDOWS\. Observera att där används bakstreck (\) medan Unix använder vanligt snedstreck (/) som avgränsare mellan kataloger. En sådan fullständig sökväg börjar alltid med ett snedstreck. Den fullständiga sökvägen till rotkatalogen är bara ett tecken: /. Det finns ett särskilt förkortat skrivsätt för ens egen hemkatalog, nämligen tecknet ~ (tilde). Ellen skulle därför också kunna skriva ~/uppsala/slottet.jpg som en fullständig sökväg till samma fil. Ovan står det att fullständiga sökvägar alltid börjar med snedstreck. Det gör i princip även denna sökväg eftersom ~ här bara är ett förkortat skrivsätt för /home/stp16/ellen. Man kan även ange andras hemkataloger på ett förkortat sätt, nämligen med tilde följt av ett användarnamn. Även andra användare kan alltså använda beteckningen ~ellen/uppsala/slottet. jpg för den där filen, och ~ellen för Ellens hemkatalog. De flesta program som hanterar filnamn byter ut ~ på detta sätt. 1.4 Grafisk filhantering Det finns flera sätt att hantera filer i den grafiska miljön, där ett är att öppna kataloger från menyn Places. Därifrån kan man bland annat nå Home för ens egen hemkatalog, och några speciella underkataloger till den, som Documents och Downloads. För du muspekaren till övre vänstra hörnet dyker det upp ett antal ikoner i vänsterkant, varav Files är ett annat sätt. Man kan också dubbelklicka på ikonen för hemkatalog på skrivbordet för att öppna den. På skrivbordet visas även alla filer och kataloger som ligger i ens katalog Desktop, så lägger man saker där hamnar de egentligen i den katalogen 6

7 1.5. Klipp och klistra Desktop. Denna katalog Desktop är en underkatalog till ens hemkatalog. 1.5 Klipp och klistra Klipp-och-klistra (cut and paste) är ett vanligt sätt att föra över text från ett ställe till ett annat. Med tiden har har tangenterna X, C och V blivit en vanlig standard för detta (ursprungligen från Apple Computer på 1980-talet). Här används dessa tillsammans med Control-tangenten, dvs. Ctrl- X (cut), Ctrl-C (copy) och Ctrl-V (paste). (Att trycka ner Control-tangenten tillsammans med t. ex. X betecknas ibland Ctrl+X ibland Ctrl-X, ibland bara C-x.) Det finns även ett snabbare sätt att kopiera. Med mittknappen på musen, den som också är scrollhjul, klistrar man in primary selection, vilket är den text man senast markerat. På det sättet kan man kopiera text utan att behöva använda vare sig tangentbord eller meny. 1.6 Textfiler Med vanliga textfiler eller rena textfiler (plain text) avses enkla textfiler utan sådana finesser som varierande typsnitt eller inlagda bilder som en ordbehandlare kan klara av, utan med bara en räcka bokstäver, siffror och en del andra tecken, uppdelade i rader. Det saknas alltså dolda formatmarkeringar så som finns i ordbehandlingsfiler. När man skriver ett program är det alltid en textfil med ren text man skriver. Det går t. ex. inte att skriva en del av programmet i kursiv stil och därmed få detta att betyda någonting särskilt, utan programmet består bara av en räcka bokstäver, siffror och interpunktion, uppdelade i rader. (När man återger ett program på papper eller skärm så visar man det dock ofta med olika färger eller olika stilar ändå.) Olika ordbehandlare har oftast helt olika format för hur sådana finesser ska kodas i filerna, så ett dokument skrivet i Microsoft Office och ett dokument skrivet i WordPerfect är helt olika kodade även om dokumenten ser likadana ut på papper. Trots det går det ofta att öppna ett ordbehandlingsdokument i en helt annan ordbehandlare eftersom den har särskilda rutiner för att tolka och konvertera andra format. Textfiler med ren text är däremot inte speciella för något särskilt program utan kan hanteras av alla program som gör något med text utan sådan konvertering. Det enda som kan skilja är vilken teckenkodning som har använts, dvs. vilka numeriska värden olika tecken kodats med. Om textfilen innehåller»exotiska«tecken som grekiskt π, ryskt eller för den delen de svenska bokstäverna åäö kan detta ha olika koder i olika sammanhang, men så länge det är tecken som finns på ett vanligt (amerikanskt!) tangentbord så är det nästan alltid samma koder överlag. Då kodas t. ex. tecknet»a«som 65 och tecknet»&«som 38. Teckenkodningar återkommer vi till senare. 1.7 Editorer Sådana rena textfiler skriver man inte med ordbehandlare utan med editorer. Ibland säger man textredigerare och att redigera text, men med den drastiskt välkomnande inställning som datorvärlden oftast visar inför lån från engelskan är det vanligare att tala om editorer och att editera text med dessa. Editorer har ofta kraftfulla kommandon för att hjälpa till när man editerar olika slags textfiler, i synnerhet när man programmerar, genom att de känner till syntaxen i olika programspråk. I denna kurs kommer vi inte att använda ordbehandling, och de textfiler som du ska skriva här ska istället skrivas med en editor. Om du vill använda en ordbehandlare på våra datorer så rekommenderas annars LibreOffice.org som finns i menyerna. Emacs Den editor som vi använder här, Emacs, kan startas med Applications Accessories Emacs (men i labben kommer vi att göra på ett annat sätt). Det fungerar bäst att öppna alla filer man editerar i samma Emacs istället för att avsluta den bara för att man är klar med en viss editering. Det är ungefär så som man normalt tittar på alla webbsidor i samma webbläsare och ofta inte avslutar den förrän man är på väg att logga ut. 1.8 Filskydd De flesta av dina filer kan läsas av vem som helst, men bara ändras eller tas bort av dig själv. Du kan själv ändra filskyddet för de filer och kataloger du vill ha skyddade så att endast du själv kan läsa dem. (En del program skapar alltid sina filer skyddade. Det skulle till exempel ett chattprogram som sparar loggar över chatten göra, även om man normalt skapar filer som inte är lässkyddade.) För varje fil och katalog talas om vilka rättigheter som gäller för tre kategorier användare: filägaren (u = user) gruppen (g = group) övriga (o = other) Varje fil har alltså en ägare och en grupp. Varje användare har en egen personlig grupp som bara den användaren själv är med i, och detta är den 7

8 1. INLEDNING normala gruppen för dina filer. Det gör att gruppens rättigheter normalt inte är intressanta, utan när du ändrar filskydd så är det framförallt för att göra filer läsbara för alla eller bara för dig själv. Du kan t. ex. ha en särskild privat underkatalog som är lässkyddad för andra. Varje kategori kan ha rättighet att r = läsa (read) w = skriva (write) x = köra (execute) Den exakta betydelsen skiljer sig åt en del för filer och kataloger: r = läsa en fil; lista innehållet i en katalog w = ändra en fil; skapa och ta bort filer i katalogen x = köra ett program; komma åt filer i katalogen Om man vill att en fil ska kunna läsas av några andra användare men inte av alla så är möjligheterna rätt begränsade. Då måste de användarna höra till samma så kallade grupp och även den filen måste höra till samma grupp. Varje fil hör till exakt en grupp. Användare kan vara med i flera grupper, men det går inte att skapa nya grupper själv. 1.9 Kommandoraden Det vanliga gränssnittet innan det grafiska gränssnittet slog igenom var kommandoraden. Användaren skriver ett kommando på tangentbordet varpå datorn utför kommandot och inväntar nästa kommando. Kommandona har en enkel syntax som oftast bygger på engelska. Det kan vara i stil med PRINT FOO.TXT för att skriva ut en fil med namnet FOO.TXT. Även om grunden inte är svårare än så, så finns det luriga element i detta för den som inte är van, och vi kommer därför att ägna oss mycket åt detta i kursen. Att arbeta med datorn på detta sätt kan ofta verka bökigt och föråldrat för den som är ovan, men det är det mest användbara för en del avancerad användning. Några fördelar är: Det är ofta kraftfullare. Det är ofta effektivare (när man kan det). Det är lättare att bevara en mängd instruktioner så att man kan göra om samma sak senare, kanske med variationer, kanske automatiskt. (Dessa fördelar kommer inte alls att vara uppenbara från början. Vi kommer att lösa uppgifter på detta sätt som många förmodligen lättare hade kunnat lösa på andra sätt.) Terminalen Kommandoraden är äldre än bildskärmen. Från början skrev man in sådana här kommandon på Figur 1.4: En populär teleprinter på 1960-talet var ASR33 som tillverkades av Teletype Corporation. något som liknande en skrivmaskin eller teleprinter med en pappersremsa i. Om man gav ett kommando där man bad datorn om information så skrev den ut den på samma pappersremsa. Ofta fanns det flera sådana»skrivmaskiner«kopplade till samma dator, och dessa kallades för terminaler. 2 Senare kom terminaler med bildskärmar istället för papper. Bildskärmen kunde bara visa text och visade hela tiden de sista raderna av låtsaspapperet. Det är normalt bara det man är intresserad av ändå, för där står ju de senaste kommandona man givit och vilka svar man har fått från dessa. Idag kan man köra ett särskilt terminalprogram i sitt fönstersystem som ger en sådan låtsasterminal i ett fönster bland ens andra fönster. Det kan hjälpa att ha detta i bakhuvudet när man ska förstå hur detta terminalfönster fungerar. Tänk dig att det är (slutet av) en pappersremsa du ser. Det innebär t. ex. att den text som har skrivits där är oföränderlig. Om man ger ett kommando som får datorn att lista ens filer så ändras inte den utskriften senare om man lägger till eller tar bort en fil. För att få en aktuell lista får man ge kommandot igen. (Det som visas är en logg för ens interaktion med datorn, lite som en logg efter att man har chattat med en robot som lyder ens kommandon.) Man kan bara skriva in kommandon längst ner, efter all text som redan finns i fönstret. Skalet i Unix Det program som tolkar och utför användarens textkommandon kallas i Unix-världen för ett skal (shell). I princip är det enkelt: Skalet skriver ut en prompt, en kort text som visar att det är berett att ta emot ett kommando. 2 En terminal är ju någonting som är längst ut, och dessa var då ändpunkter medan datorn satt i mitten, kopplad till dem alla. 8

9 1.9. Kommandoraden Skalet ekar det användaren skriver, suddar när man trycker på radertangenten osv. När användaren avslutar sitt kommando (genom att trycka på returtangenten) utför skalet kommandot, oftast genom att köra igång ett visst annat program. Om detta resulterar i output så skrivs den ut. Ovanstående görs om och om igen. Kommandon Unixkommandon är ökända för att ha korta och kryptiska namn. Några exempel: cat = (con)catenate cd = change directory cp = copy ls = list mkdir = make directory mv = move pwd = print working directory rm = remove rmdir = remove directory tr = translate wc = word count Skälet till det är förstås att man inte ska behöva skriva så mycket. Några av dessa kommandon ser du i filträdet i figur 1.3 i katalogen /bin. Kommandot ls listar t. ex. filer i en viss katalog. När man använder det kan det se ut så här: $ ls bar.png foo foo.py kvack.png texts Användaren har här bara skrivit ls och tryckt på retur. I denna katalog fanns det fem filer och kataloger, och de listas i bokstavsordning. Den text som användaren har skrivit ges med ljusgrå bakgrund, så här, i dessa exempel. Användaren har t. ex. inte skrivit dollartecknet, utan det var den prompt som skalet skrivit ut. (Oftast har man en längre prompt än så. Du kommer att ha en prompt där även ditt användarnamn och namnet på datorn står, i stil med ellen@verb$, men i alla kommande exempel antar vi ändå att prompten bara är ett dollartecken.) Argument till kommandon Efter kommandonamnet kan det följa argument, åtskilda av mellanslag. Dessa talar om mer specifikt vad man vill använda ett kommando till. Ofta är det filnamn. Man kan ge kommandot ls argument som talar om vilka filer eller vilka kataloger som ska listas. $ ls kvack.png bar.png bar.png kvack.png Här har vi talat om precis vilka två filer vi vill ha listade. 3 (De önskade filerna listas i bokstavsordning som förut, trots att argumenten listades i en annan ordning.) Om ett argument till ls är namnet på en katalog så listas innehållet i den katalogen. Så om texts ovan är en katalog med ett par textfiler i skulle man kunna få detta resultat: $ ls texts etaoin.txt shrdlu.txt För ls behandlas alla argument lika denna fil eller innehållet i denna katalog ska listas. För en del kommandon tolkas däremot första, andra, (tredje osv.) argumentet olika. Kommandot cp foo.txt bar.txt betyder t. ex. att filen foo.txt ska kopieras och att kopian ska ha det nya namnet bar.txt. Det första argumentet är källan och det andra är destinationen. Om man hade satt argumenten i omvänd ordning hade det betytt något annat, och om man haft bara ett argument skulle man ha fått ett felmeddelande. Returtangenten: Returtangenten har oftast (och så är det på våra tangentbord) en vinklad pil på sig,. Den har kallats för carriage return (vagnretur) eller oftare bara return (retur). Den carriage/vagn det handlar om går tillbaka till skrivmaskiner på papperstiden. Ibland kallas tangenten även för Enter, som tangenten med det namnet på den särskilda numeriska delen av tangentbordet. Dessa två tangenter har oftast samma effekt. 3 Detta är förstås rätt poänglöst att göra. Det verkar ju som om vi redan visste att dessa två filer fanns! Senare ska vi se hur man kan få ls att lista mer information om filerna, vilket skulle göra exemplet lite mer realistiskt. 9

10 Inlupp 1: Inledning Grafisk filhantering Välj Places Home i menyerna för att ta fram ett fönster för din hemkatalog. Ni har alla fått en fil konto.txt och underkataloger som heter Desktop, nobackup och introduktion-till-datateknik. Den sistnämnda är förstås specifik för just denna kurs, och kallas i fortsättningen för kurskatalogen. Dubbelklicka på kurskatalogen för att se på den underkatalogen. Olika slags filer visas på olika sätt. Filhanteraren avgör hur genom att se på filnamnsändelsen och genom att se på filernas innehåll. För en del filer visas (delar av) deras innehåll, och för andra bara ikoner som visar vad för slags filer det är. Genom att dubbelklicka på filerna så öppnas de. Vilka program som används för att öppna dem beror på vad det är för filer. Genom att högerklicka på en fil får du upp en meny med olika saker du kan göra med filen. Höger musknapp används oftast som en menyknapp på detta sätt. Uppgift 1.1 Vad heter det program som är satt att vara det normala för att öppna bildfiler? Vad är det för versionsnummer på det att döma av vad Help About i det programmet säger? Uppgift 1.2 Ett av de andra programmen man kan öppna bildfiler med har ett namn som består av fyra ord. Det brukar oftare bara kallas för sin fyrbokstavsförkortning. Vad heter det programmet? (Förkortade namnet räcker.) (Det är ett mycket ambitiöst ritprogram som det är rätt jobbigt att komma in i, så kör det inte nu, men prova gärna senare om du är nyfiken.) Senare få du veta var du ska skriva dessa svar. Notera tillsvidare svaren på uppgiftsfrågorna för senare bruk. Uppgift 1.3 I kurskatalogen finns även en ljudfil ord.flac. Vad sägs det för ord i den? För olika sorters filer händer det som synes olika saker när du dubbelklickar dem. Filen run-me är t. ex. ett litet program. Det är en exekverbar binärfil som körs när du aktiverar den. Uppgift 1.4 Vad står det på knappen som programmet run-me skapar när man kör det? Uppgift 1.5 Ta bort filen should_not_be_here i kurskatalogen. Uppgift 1.6 Skapa en ny underkatalog alice i kurskatalogen (New Folder). Flytta filerna cheshire-cat.jpg, cheshire-cat.txt och how-doth.txt dit. (Allt detta är nämligen taget från boken Alice i Underlandet). Tänk på att det är skillnad på små och stora bokstäver. Det enklaste sättet att flytta en fil är med drag and drop. Tryck ner vänster musknapp när du pekar på filen och dra den sedan till önskad plats varpå du släpper musknappen. Öppna nu katalogen alice. Bland knappar som står till höger om katalognamnet finns några knappar och genom att hålla muspekaren över dem får du se vad de gör. En beskrivs som View items as a list. Välj den för att se fillistningen i ett textformat som ger mer information. Där visas filens namn, storlek, typ, tidsstämpel för när den senast ändrades och filskydd. Uppgift 1.7 Vilken information som visas kan ändras med Visible Columns i en meny. Nämn någon av kolumnerna som kan läggas till där. Uppgift 1.8 Filernas storlek mäts i bytes. Hur många bytes stor är filen how-doth.txt? Hur kan du ta reda på det i det andra sättet att se filerna,»view items as a grid of icons«? Uppgift 1.9 En av filerna dikt-1.txt, dikt-2. txt och dikt-3.txt i kurskatalogen är skyddad så att andra inte kan läsa den. Vilken? Uppgift 1.10 Ändra så att den inte längre är särskilt skyddad, utan får samma skydd som de övriga. Ändra också så att filen secret.txt bara kan läsas av dig, men är skrivskyddad för alla, till och med dig själv. När du gjort detta riktigt visas det särskilt i fönstret att denna fil är skrivskyddad. 10

11 Emacs Emacs I din kurskatalog ligger en textfil med namnet favourite-colour.txt. Det är en ren textfil (vilket man kan gissa av filnamnsändelsen.txt). Dubbelklicka på den i filhanteraren för att öppna den med editorn Emacs. Förutom textinnehållet i filen visar Emacs även information som du kan ta bort med»dismiss this startup screen«. I det fönster du får upp finns det plats för att skriva 80 tecken per rad vilket är vanlig bredd för textfiler. Gör gärna fönstret högre, men maximera det inte. Uppgift 1.11 Vad står det i den filen? I kurskatalogen ligger också en fil exempel.txt. Ta tag i den och släpp den i Emacs-fönstret med drag and drop. (Ändra vid behov storlekar så att du ser dessa två fönster samtidigt, sida vid sida.) Detta är ett sätt att öppna en till fil när du redan har en Emacs igång. Den förra filen finns även den fortfarande öppnad i denna Emacs även om den inte syns just nu. De olika texterna som man har aktiva i Emacs ligger i varsin buffert och i Emacs-menyn Buffers kan du välja mellan dessa. Gå på detta sätt tillbaka till favourite-colour.txt igen. Du ska editera den, så förflytta dig i textbufferten med piltangenterna och spara med knappen när du är klar. (Avsluta däremot inte denna Emacs förrän du är klar för idag!) Uppgift 1.12 Ändra i favourite-colour.txt så att den stämmer för dig! På knappraden i Emacs finns det bland annat andra knappar för att öppna nya och existerande filer. Uppgift 1.13 Öppna på detta sätt en ny fil favourite-number.txt i kurskatalogen och skriv där ditt favorittal. Glöm inte att spara filen! Det finns även en knapp för att öppna en katalog. Öppna underkatalogen alice på detta sätt. Du får då upp en fillistning i text som liknar en du fick med filhanteraren förut. Uppgift 1.14 Nu finns det flera extra menyer i Emacs mellan Tools och Help. Vad heter dessa? Öppna cheshire-cat.txt i denna listning. Det är ett utdrag ur Alice i Underlandet, fast några stavfel har smugit sig in. Uppgift 1.15 Använd kommandot Tools Spell Checking Spell-Check Buffer för att hitta och rätta stavfelen. Det blir flera förslag på rättelser och man får skriva en siffra för att ange vilket rättningsförslag man vill använda. Hur många fel hittades? Glöm inte att spara den rättade filen! Gå tillbaka till bufferten alice med fillistningen och flytta med hjälp av piltangenterna markören till raden med cheshire-cat.jpg. Välj Operate Copy to i menyerna och kopiera den filen till katalogen Desktop. Kolla att den därmed har hamnat på ditt skrivbord. Klipp-och-klistra Uppgift 1.16 Öppna filen dodo.txt i kurskatalogen i Emacs. Se slutet av avsnitt 1.5 på s. 7 om det snabbare sättet att kopiera text och använd det för att kopiera hit text på rätt ställen enligt vad som står i filen. Om du råkar göra nåt fel, t. ex. klistrar in fel text eller text på fel ställe, så kan du ångra dig med knappen i Emacs. Glöm inte att spara filen efteråt! Svarsfilen Skriv en ny fil ids1.txt i kurskatalogen (med Emacs) där du skriver in svaren på dessa uppgifter. (En del uppgifter kräver dock inga svar, utan är bara av formen»gör si och så«, i stil med uppgift 1.16.) Se noga till att den filen hamnar i rätt katalog och heter precis som den ska! Det kan underlätta att klipp-och-klistra en del svar så att du inte behöver skriva av text. Använd som vanligt menyn Buffers för att växla vad du tittar på när du kopierar från en buffert till en annan. Fler buffertar Som du kanske märkt finns det fler buffertar i Buffers -menyn, och ett kommando Buffers List All Buffers som listar alla buffertar. Alla buffertar hänger inte ihop med någon fil. Uppgift 1.17 Det finns en buffert som heter *scratch* till exempel. Vad står det i den? Uppgift 1.18 Det finns andra buffertar som har namn som börjar och slutar med stjärna. En har ett namn som börjar med *M. Vad heter den och vad verkar den användas till? 11

12 INLUPP 1: INLEDNING Terminalen och skalet Skapa ett terminalfönster genom att föra muspekaren till övre vänstra hörnet och klicka på symbolen kallad»terminal«i vänstra kanten. Även i detta fönster finns det plats för 80 tecken per rad. (Gör gärna även detta fönster högre.) Lägg terminalfönstret och Emacs sida vid sida så att båda syns samtidigt, så att du kan fortsätta skriva in svar i ids1.txt medan du även ser terminalfönstret. Uppgift 1.19 fått av skalet? Exakt hur lyder den prompt du I terminalfönstret ska du skriva in textkommandon. Som första kommando, skriv ls, som står för list, och tryck på retur. Med detta kommando får du ut en lista över vilka filer och kataloger du har i din hemkatalog. Resultatet skrivs ut i samma terminalfönster som där du skrev in kommandot. Man kan ge namnet på en katalog som argument till ls för att lista filerna i den katalogen istället. Här kan man använda komplettering med TABtangenten, när det bara finns en möjlig fortsättning. Skriv bara»ls in«och tryck sedan på TAB. Du bör få fram Uppgift 1.22 Om du utan att byta aktuell katalog nu vill lista innehållet i din hemkatalog, vad kan du ge för kommando då? (Använd en särskild beteckning för din hemkatalog i svaret.) Uppgift 1.23 Vad gav det för resultat? Uppgift 1.24 Och om du vill lista innehållet i Ellens hemkatalog hur gör du då? (Du skulle kunna skriva ls /home/stp16/ellen, men använd en kortare beteckning för hennes hemkatalog.) Uppgift 1.25 Vad gav det för resultat? I din kurskatalog finns en fil som heter stp.txt. Med kommandot $ cat stp.txt kan du skriva ut dess innehåll i terminalfönstret. (Använd TAB för komplettering, även när det inte är så långa filnamn. Då får du bekräftelse på att det verkligen finns en fil som heter så.) Den texten har ganska korta rader. Det finns ett kommando fmt med vilket man kan formattera om en text så att den får lagom långa rader. Prova $ fmt stp.txt $ ls introduktion-till-datateknik/ Tryck på retur för att utföra kommandot. Nu listar du alltså istället filerna i den katalogen. Ge sen kommandot $ cd introduktion-till-datateknik/ Uppgift 1.26 Vad blev det för output från detta? (Använd klipp-och-klistra!) Kommandot grep kan du ge två argument. Först en text och sedan ett filnamn, och kommandot visar då alla rader i filen som innehåller den texten. Prova med (Använd komplettering igen!) Detta kommando gav inget resultat. Det är inte alla kommandon som ger något resultat som skrivs ut på skärmen, utan en del bara gör något utan att säga något om det. Detta har ändrat aktuell katalog till din katalog introduktion-till-datateknik, så nu utförs normalt kommandon i den katalogen istället. Så om du nu ger kommandot ls igen så blir det filerna i denna katalog som listas. Uppgift 1.20 Vad är cd förkortning för enligt detta kompendium? Uppgift 1.21 Ge kommandot ls /home för att lista vad som finns i katalogen /home. Vad gav det för resultat? $ grep dator stp.txt Uppgift 1.27 Vad gav det för resultat? Första argumentet till grep, här»arbete«, är ett exempel på att argument till kommandon kan vara annat än fil- och katalognamn. Men det är bara fil- och katalognamn som du får komplettering på! (Skalet kunde inte ana att det var just»arbete«vi ville söka efter.) Prova härnäst de två kommandona date och date -u. Uppgift 1.28 Hur löd resultaten? 12

13 Diverse på slutet Uppgift 1.29 Det står olika förkortningar i de båda svaren. Vad betyder dessa? (Sök på nätet om du inte vet!) Uppgift 1.30 Vilken effekt verkar det där -u ha? Genom att hänga på > och ett filnamn i slutet av ett kommando så kan man spara resultatet i en fil istället för att få ut det i terminalfönstret. Uppgift 1.31 Gör $ grep dator stp.txt >arbete.txt Märk att du inte ser någon output alls. Öppna sedan den nyskapade filen arbete.txt i Emacs. Hur många rader är det i den? Uppgift 1.32 Det finns ett kommando seq som ger en sekvens med tal. Använd det kommandot med argumentet 12 och visa vad du får för resultat då. Om du istället använder argumentet (prova!) så har du knappast tid att vänta på att kommandot ska köra klart. I sådana lägen kan man avbryta med Control-C, dvs. genom att trycka in Ctrl och C samtidigt. Gör så! Ge ett skalkommando som sparar alla tal från 1 till 100 i en fil 100.txt i din kurskatalog. (Denna fil ska inte skapas innan du ger kommandot, utan du gör i stil med hur arbete.txt skapades ovan.) Uppgift 1.33 Hur löd ditt kommando? Uppgift 1.34 Ge ett kommando som talar om vilka av raderna i den filen 100.txt som innehåller (minst) en 8:a. Visa både ditt kommando och dess resultat. Öppna i Emacs en ny fil i din kurskatalog med namnet ett ord.txt. Skriv ett valfritt ord i den och spara. Diverse på slutet Uppgift 1.38 Kolla i filhanteraren vad din katalog Desktop har för skydd. Får andra användare se vad du har för filer och kataloger på ditt skrivbord eller inte? (Passa gärna på att ändra om du vill.) Uppgift 1.39 När man editerar en fil i Emacs så sparar den en backupfil med det gamla innehållet för säkerhets skull. Medan du har labbat har den därför skapat backupfiler av i alla fall favourite-colour.txt och dodo.txt åt dig. Att döma av vad du har för filer i den katalogen nu, hur skapar Emacs namnen på dessa backupfiler? (Filhanteraren visar normalt inte dessa backupfiler, så se efter med ls eller genom att öppna katalogen i Emacs istället.) (I filhanteraren räknas backuperna som dolda filer, och det finns ett menyval Show Hidden Files som styr både om dessa och filer med namn som börjar med punkt ska visas. Efteråt Låt kurskatalogen ligga kvar som den är efter labben så att jag lätt kan kontrollera att ni utfört uppgifterna! Dessutom kommer ni att behöva dessa filer i senare labbar också. Hela din kurskatalog är skyddad för läsning för andra, men just i denna katalog kommer jag att titta ändå (med mina administratörsrättigheter). Jag skickar kommentarer med mail. Läs den regelbundet, och om du får frågor som har med inlupparna att göra så svara på dem! Till nästa gång Titta igenom hela detta kapitel för att se om det var något Per missade att ta upp idag eller om något är oklart. Uppgift 1.35 Vad blir det för resultat om du ger kommandot cat ett ord.txt för att se innehållet i den filen från skalet? Uppgift 1.36 Men om man skriver cat ett och sen trycker på TAB för komplettering, vad händer då? Uppgift 1.37 På s. 5 står att man brukar undvika filnamn med mellanslag i för filer som man ska hantera med kommandoraden. Hur kommer det sig? 13

14

15 Kapitel 2 Skalet och Emacs 2.1 Skalet Argument Förra gången provade ni ls, cd, cat, date, fmt och grep, och ytterligare några kommandon nämndes i avsnitt 1.9 på s. 9. Kommandon börjar alltså med ett kommandoord som t. ex. cd, date eller grep och efter det kan det följa ett eller flera argument (även kallat operander), åtskilda av mellanslag. Skalet ger komplettering av sådana argument som är namn på filer och kataloger med TABtangenten. Så i ett kommando $ grep Explain wonderland.txt 'Explain yourself!' 'Explain all that,' said the Mock Turtle. är kommandoordet grep och det har två argument. Det första argumentet är Explain och det andra är wonderland.txt. Detta skriver ut alla rader i filen wonderland.txt som innehåller texten»explain«. Eftersom mellanslag skiljer argumenten åt behöver man göra något särskilt när mellanslag ingår i argumenten. Ett sätt är att hålla ihop sådana argument med citattecken. Bourne (Again) Shell: Skalet är ett program det också. Det ursprungliga skalet i Unix skrevs av en Steve Bourne på Bell Labs och hette sh (kort för shell). Senare skrevs en del alternativa skal, och det ursprungliga skalet kallas ibland för the Bourne shell för att skilja det från alternativen. Det skal som är skrivet särskilt för GNU och som liknar Bourne shell har därför det skämtsamma namnet Bourne Again Shell, vilket förkortas bash. $ grep 'vanished completely' wonderland.txt the little door, had vanished completely. Här är det första argumentet en fras med två ord. (Det finns visst bara en rad i wonderland.txt som innehåller texten»vanished completely«.) Man kan använda enkla ('vanished completely') eller dubbla ("vanished completely") citattecken. Samma metod kan användas för argument som är filnamn när man har filnamn med mellanslag. Ett annat sätt att hantera argument med mellanslag såg ni i uppgift Ett speciellt tecken skrivs före varje mellanslag (eller annat tecken som behöver hanteras särskilt) Aktuell katalog I skalet har man hela tiden en aktuell katalog eller arbetskatalog (working directory). Om man t. ex. ger kommandot ls (utan argument) så listar den filerna där. I exemplet ovan låg filen wonderland. txt i ens aktuella katalog (annars hade man fått ett felmeddelande). Med cd kan man byta vilken ens aktuella katalog är och med pwd kan man skriva ut vilken katalog som är den aktuella (print working directory). Om man ger cd utan något argument så går man till sin hemkatalog. Om man ger cd med det speciella argumentet.. (två punkter) så går man upp en katalog, dvs. till aktuell katalogs förälder Jokrar: *? [] När man ger filnamn som argument till kommandon behöver man inte alltid ange hela exakta filnamn, utan man kan ofta använda jokrar (wild cards) i namnet och därmed matcha ett eller flera filnamn. Med * matchas godtyckligt antal tecken och med? matchas exakt ett godtyckligt tecken. 15

16 2. SKALET OCH EMACS $ ls *.png bar.png kvack.png $ ls f?o foo $ ls foo* foo foo.py $ ls *a* bar.png kvack.png I det sista fallet listas alla filer som har ett a i sitt namn. Observera att»godtyckligt antal tecken«kan vara noll tecken, så att foo* matchar även filnamnet foo utan nånting efter. Man kan också sätta tecken inom [] för att matcha något av dessa tecken. Så foo[abcd] matchar en fil som heter fooa, foob, fooc eller food, men däremot inte en som heter fool. Det går också att skriva foo[a-d] med samma betydelse. Med [3-6] matchar man någon av siffrorna 3, 4, 5 eller 6 och [0-9] matchar en godtycklig siffra Väljare (options) Väljare (optioner, flaggor) kan ange hur ett kommando ska utföras. De ges som vanliga argument, men har namn som börjar med bindestreck (-). Kommandot grep har t. ex. en väljare -i som betyder att den inte ska skilja på små och stora bokstäver, och en annan väljare -c som betyder att den bara ska tala om hur många rader den hittade. $ grep fonetik stp.txt utgångspunkter. Delområden som fonetik, $ grep -i fonetik stp.txt utgångspunkter. Delområden som fonetik, särskilt viktiga. Fonetiken och uttryckssida. Fonetiken undersöker hur $ grep -c fonetik stp.txt 1 $ grep -c -i fonetik stp.txt 3 Att kombinera väljare När man ska ange flera väljare till samma kommando så är det bara att lista dem allihop efter varann. Oftast kan man kombinera flera korta väljare och skriva bara t. ex. -abc istället för -a -b -c. Exemplet med grep -c -i ovan skulle alltså ha kunnat skrivas grep -ci istället. Väljare med argument Många väljare är som de ovanstående i att de talar om ifall något ska vara avstängt eller påslaget det finns bara två möjligheter. Sådana väljare kallas också för flaggor. Man tänker sig att en flagga är hissad eller inte hissad. Med en blandning av metaforer talar man ändå ofta om att slå på och slå av sådana flaggor. För andra väljare finns det fler alternativ än bara två, och man ger själva väljaren ett argument direkt efter väljaren. Kommandot date har en väljare -d med vilken man talar om vilken tidpunkt som ska anges istället för den nuvarande. Man kan ange denna tidpunkt i en mängd olika format och date anger den på samma format som vanligt. $ date -d Sun Jun 23 00:00:00 CET 1912 $ date -d '11:51:31 September 21, 1976' Tue Sep 21 11:51:31 CET 1976 Observera citattecknen i det sista exemplet för att»hålla ihop«argumentet till väljaren -d. Utan dessa skulle det argumentet till väljaren bara bli»11:51:31«och date skulle få tre ytterligare argument:»september«,»21,«och»1976«som det inte skulle veta hur det skulle hantera När det blir fel Om man ger ett felaktigt kommando kan man få ett felmeddelande. Här är ett exempel: I det sista fallen används båda dessa väljare samtidigt. Olika kommandon har olika väljare, så dessa väljare är specifika för kommandot grep. I uppgift 1.30 såg du som exempel att kommandot date (som talar om vad klockan är), har en väljare -u. Den väljaren är på samma sätt specifik bara för kommandot date. Väljaren -l till ls ger en lång fillistning som tar med inte bara filnamnet, utan även bland annat filens skydd, ägare, storlek och när den senast ändrades. (Det är ett litet L och inte en siffra 1!) $ ls -y ls: invalid option -- 'y' Try 'ls --help' for more information. Först i dessa meddelanden står alltid vem (vad) det är som klagar. I detta fall är det»ls«som klagar. (Det är inte så överraskande eftersom det är kommandot ls vi har kört.) Efter ett kolon kommer så själva klaget, i detta fall att y var en ogiltig väljare. Det finns ingen väljare -y till ls. 16

17 2.1. Skalet Här är några till exempel: $ cp cp: missing file operand Try 'cp --help' for more information. $ date -d date: option requires an argument -- 'd' Try 'date --help' for more information. $ date -d christmas date: invalid date christmas $ cta exempel.txt bash: cta: command not found Observera i det sista fallet att det är bash självt (skalet) som rapporterar ett fel. (Här hade användaren antagligen tänkt skriva cat istället för cta. Det finns inget kommando som heter cta.) Märker man inte vilket program som rapporterar felet så kan det ofta bidra till att man inte förstår varför det blev fel Omdirigering (>) När ett kommando ger ifrån sig output lämnas den vidare till skalet som normalt skriver ut den i terminalfönstret. Man kan dock tala om för skalet att det ska spara denna output nån annanstans. Om man vill spara undan resultatet av ett kommando i en fil så gör man det genom att skriva > filnamn på slutet av kommandoraden, t. ex. ls Desktop >fil-lista för att spara en lista med filerna i en viss katalog i en ny fil fil-lista. Här ska man inte tänka på tecknet som större-än, utan som en pil. Ni använde detta i uppgift Det extra påhänget är alltså inte ett till argument till ls. Programmet ls vet här bara om att det ska utföra ls Desktop, och det är skalet som sedan gör något annorlunda med den output som detta ger ifrån sig. Det enskilda programmet man kör, som ls i detta fall, skriver ut sin output till en lite ospecificerad mottagare som kallas för standard output, utan att veta vart detta kommer att hamna, och med > styr man om vart standard output ska hamna. Detta kallas för omdirigering (redirection) Filhantering i skalet ls Lista filer Med ls listar man filer. Argumenten ska vara de filer och kataloger som man vill lista. Om man inte ger några argument alls så listas aktuell katalog. Ett par vanliga väljare till ls är -l (lilla L) som ger en lång listning med mer information och -a som listar alla filer, inklusive de dolda. cp Kopiera filer Kopiera filer görs med kommandot cp som måste ha minst två argument. Det kan användas på två sätt. Det första är cp SOURCE DEST för att kopiera det som har namnet SOURCE till att ha namnet DEST också, t. ex. cp foo.txt bar.txt. Här ska alltså foo.txt vara en fil som redan finns, medan bar.txt kommer att skapas av kommandot. (Om den redan fanns kommer det gamla innehållet att skrivas över!) Det andra sättet kan ha två eller fler argument där det sista argumentet är namnet på en existerande katalog. Då kommer alla de tidigare argumenten att kopieras till denna katalog (och kommer att där ha samma namn). Exempel: cp foo.txt bar.txt Desktop. Detta kopierar två filer som redan finns till ens katalog Desktop. Efteråt kommer de nya filerna Desktop/foo.txt och Desktop/bar.txt att finnas. mv Flytta filer Filer flyttas med mv. Det tar emot samma slags argument som cp, så även det kan användas på två olika sätt, och beter sig likadant som cp förutom att filerna inte ligger kvar med sina gamla namn också. I den andra användningen där det sista argumentet är en katalog så flyttar man filer från en katalog till en annan. I det första fallet så byter man snarare namn på en fil (mv foo.txt bar.txt). Observera alltså att flytta filer och att byta namn på filer görs med samma kommando! rm Ta bort filer Med rm tar man bort filer. Observera att dessa filer tas bort helt och hållet. Detta skiljer sig från det grafiska gränssnittets borttagning av filer som lägger det man tar bort i en papperskorg som man kan rädda tillbaka filer från tills papperskorgen töms. mkdir och rmdir Skapa och ta bort kataloger Med mkdir skapar man en katalog och med rmdir tar man bort en. Båda dessa kommandon tar ett argument. För att man ska kunna ta bort en katalog måste den vara tom Texthantering i skalet cat Visa filer Med cat visar man filers innehåll. Argumenten ska vara ett antal filnamn och cat skriver ut alla deras innehåll. Om man ger flera argument så visas alla filerna direkt efter varandra, ihopslagna, och det är därför kommandot heter»cat«som i»concatenate«. 17

18 2. SKALET OCH EMACS head Början Kommandot head fungerar ungefär som cat förutom att det bara tar med de tio första raderna av varje fil. Med en väljare -n kan man tala om hur många av de första raderna man vill se (istället för tio), t. ex. $ head -n 2 foo.txt för att skriva ut de två första raderna av foo.txt. tail Slutet Kommandot tail är som head förutom att det skriver ut slutet istället för början. Även till det kan man ge en väljare -n. grep Sök Kommandot grep söker efter en text (dess första argument) i ett antal filer (alla ytterligare argument) och skriver ut alla rader i de filerna som innehåller den texten. Vi kommer senare att se hur man kan göra mer avancerade textsökningar med grep. wc Räkna wc står för»word count«och kan användas till att räkna antal ord i en fil, men det kan också räkna annat. Det finns väljare som anger vad det ska räkna, som -w för ord och -l för rader. $ wc -w stp.txt 238 stp.txt $ wc -l s*.txt 1 secret.txt 56 stp.txt 57 total Så här tog vi först reda på att stp.txt innehåller 238 ord och sedan hur många rader det finns i en mängd filer, med användning av joker. fmt Formattera Kommandot fmt för att formattera om en text träffade vi på förra gången. Det finns en väljare -w som man kan ge ett argument som anger hur breda raderna får bli. 2.2 Emacs Man kan göra saker med texten på flera olika sätt i Emacs. I de förra uppgifterna fick ni dels använda knapparna under menyerna, dels menyerna. Dessutom finns det kortkommandon till många fler kommandon Namn på tangenter I Emacs används korta beteckningar på tangenttryckningar. Om man ska trycka på Ctrl och f samtidigt så betecknas detta inte Ctrl-f utan med bara C-f. Förutom C- för Control finns även bl. a. M- för Meta. Där första versionen av Emacs skrevs hade man nämligen tangentbord med särskilda Meta-tangenter. Det har inte vi, och då är det Alttangenten som fungerar som Meta-tangent. Både C- och M- betyder att man ska trycka in Ctrl- respektive Meta-tangenten (Alt) tillsammans med det tecken som följer. De kan kombineras också, så C-M-/ betyder Ctrl och Alt tillsammans med /. (Och eftersom snedstrecket i sin tur kräver skifttangenten blir det totalt fyra tangenter nedtryckta samtidigt!) En del andra tangenter har speciella trebokstavsbeteckningar som t. ex. SPC för mellanslag. Andra har (ofta längre) beteckningar inom <>. Några sådana namn visas i tabell 2.1. Observera att de inte alltid är identiska med vad som faktiskt står på våra tangentbord, i synnerhet att DEL inte är den tangent som det står»delete«på, utan vanliga tangenten för att sudda ett tecken. (Den kallas också för <backspace>.) Även dessa kan kombineras med C- och M-, så om det står att man ska trycka t. ex. C-SPC så betyder det alltså Controltillsammans-med-mellanslag och <M-left> betyder Alt-tillsammans-med-vänsterpil. Dessa namn på tangenterna används bland annat till höger i menyerna, där man kan se hur man kan ge samma kommandon från tangentbordet Tangentsekvenser Kortkommandon kan vara flera steg långa. För att öppna en fil kan man t. ex. använda C-x C-f, dvs. först C-x och sen C-f. Bara C-x ensamt gör ingenting, utan det väntar bara in en fortsättning. Det finns flera sådana prefixtangenter som inleder sekvenser av flera tryckningar, och C-x är en av de vanligaste. Emacs: Den första editorn med namnet Emacs skrevs redan på 1970-talet av Richard M. Stallman på MIT (Massachusetts Institute of Technology). Den nuvarande, GNU Emacs, är skriven särskilt för GNU, och påbörjades av samme Stallman 1984, som ett av de första GNU-programmen. Sedan dess har den kommit många versioner. Den senaste, version 24.5, släpptes i april

19 2.2. Emacs Tabell 2.1: Beteckningar på några tangenter i Emacs. Beteckning Beskrivning C- Control. Ctrl- M- Meta. Alt- (hos oss) DEL Suddtangenten ESC Esc = Escape RET Returtangenten SPC Mellanslag (SPaCe) TAB Tab-tangenten <left> vänsterpil <right> högerpil <up> uppåtpil <down> neråtpil <prior> Page Up <next> Page Down <f1> F1 (i översta raden) <f2> F2 (och så vidare) <kp-1> 1 på numeriska tangentbordet <kp-2> osv (kp = keypad) Buffertar I samma Emacs kan man editera flera olika filer. Dessa visas då i varsin buffert (buffer på engelska) och man kan växla mellan olika buffertar och även visa flera buffertar samtidigt. Alla buffertar motsvarar inte en fil, utan det kan också vara en text som bara finns inne i Emacs. Så är det med den särskilda slaskbufferten *scratch*. Använd inte den för något som du har tänkt spara, utan öppna en ny fil för sånt! Ett sätt att byta buffert är att använda menyn Buffers. Ett annat är med C-x b Fönster, ramar Vid övningen med stavningskontroll förra veckan visades ersättningsförslag i en egen ruta i Emacs. Sådana»rutor«kallas för fönster (windows) i Emacs. I figur 2.1 finns ett annat exempel på där Emacs visar två buffertar samtidigt i varsitt fönster. Med C-x 1 tar man bort alla andra fönster än det man just då är i och med C-x 2 klyver man aktuellt fönster till två. Med C-x o byter man fönster. Terminologin kan vara förvirrande eftersom allt detta tillsammans är bara ett fönster i fönstersystemet. Det går även att låta samma Emacs använda sig av flera fönster i fönstersystemet. Dessa kallas då ramar (frames) i Emacs. Som det är uppsatt här kommer ni få en ny ram varje gång ni väljer att editera en fil i filhanteraren. Figur 2.1: En Emacs med två stora fönster som visar varsin buffert samt en aktiv minibuffert Informationsrad, minibuffert, ekoarea Den mörkare raden under buffertens innehåll kallas mode line eller informationsrad. Den innehåller en mängd information om den bufferten, bland annat vad den heter och vilken mode (vilket läge, vilken arbetsmiljö) Emacs befinner sig i. Ibland får man i Emacs skriva in filnamn och annat i den särskilda minibufferten längst ner i Emacs. Den har till skillnad från andra buffertar ingen informationsrad. Om man ger C-x C-f för att öppna en fil är det till exempel där man får skriva in namnet på den fil man vill öppna. På samma ställe, längst ner, skrivs även diverse meddelanden från Emacs ut. Detta kallas då för ekoarean. Dessa meddelanden sparas även i en särskild buffert *Messages* Att förflytta sig I början är det oftast enklast att använda piltangenterna för att förflytta sig i texten. Tillsammans med Control eller Meta går de hela ord eller stycken i taget. För att förflytta en sida i taget kan man använda <prior> och <next> (Page Up och Page Down). Vana användbara brukar föredra att använda en del kommandon i tabell 2.2 eftersom de tangenterna ligger närmare till hands medan man skriver text Bryta och ångra Med ångerknappen kan man ångra inte bara det allra senaste man gjorde, utan man kan ångra sig långt tillbaks i tiden om man kommer på att man gjort hel fel. Det är bara att göra det om och 19

20 2. SKALET OCH EMACS Tabell 2.2: En del kommandon för förflyttning C-f C-b C-p C-n M-f M-b C-v M-v C-a C-e M-< M-> framåt ett tecken (forward) bakåt ett tecken (backward) upp en rad (up) ner en rad (down) framåt ett ord bakåt ett ord framåt en sida bakåt en sida till början av raden till slutet av raden till början av bufferten till slutet av bufferten om igen i en buffert tills man har tagit tillbaka allt som blev fel där. Det är ett av de kommandon som man har störst nytta av att kunna kortkommandot för så att man snabbt kan rätta till skrivfel medan man fortfarande har fingrarna kvar på tangentbordet. Kortkommandot är C-_ dvs. Ctrl tillsammans med understreck. (Eftersom understreck kräver skift så blir det totalt tre tangenter som trycks ner samtidigt.) Ett påbörjat kommando kan avbrytas med C-g. Om man t. ex. har tryckt C-x C-f för att öppna en fil men sen har ångrat sig kan man trycka på C-g istället för att ge ett filnamn. Man kan också trycka C-g efter ett halvskrivet kommando, t. ex. om man bara hann skriva C-x innan man ångrade sig. Man kan också använda det för att avbryta Emacs om den tar lång tid på sig att slutföra något komplicerat kommando. Om man har hamnat i nån konstig situation i Emacs som man inte vet hur man ska ta sig ur kan man använda ESC ESC ESC för att ta sig ur. (Tre ESC efter varann.) Exakt vad det gör beror på vad man håller på med i Emacs Klipp-och-klistra Emacs kommer från en annan tradition än program ni förmodligen är vana vid och har sina egna tangenter för sådant. (Det går dock att ställa om, och i labben ska vi se hur.) C-w cut, klippa ut M-w copy, kopiera C-y paste, klistra in (y = yank) Det finns även andra kommandon för att ta bort text, t. ex. för att ta bort rader (C-k) eller ord (M-d framåt, M-DEL bakåt). Dessa kommandon har namn som börjar med kill (t. ex. kill-region för C-w). All text som man»dödar«med sådana kommandon hamnar i urklipp så att de kan klistras in. Emacs sparar många gamla texter som man»dödat«. I en meny Edit Paste from Kill Menu finns flera såna gamla urklipp att välja från. Från tangentbordet börjar man med C-y och trycker sen omedelbart efter M-y vilket byter ut den inklistrade texten mot nåt man dödade tidigare. Om det fortfarande är fel repeterar man M-y tills man fått fram den text man ville ha Punkten och regionen Glöm inte snabbsättet att kopiera text i Unix som vi tog upp förra gången! Man bara markerar en text och klistrar sen in den med mittknappen. Den markerade texten kallas i Emacs även regionen, och det finns flera kommandon som gör saker med denna region. I ena änden av regionen finns alltid punkten (point), som i Emacs är namnet på det ställe där den blinkande markören befinner sig. I den andra änden finns ett så kallat märke. Ett sätt att markera text utan att använda musen är genom att sätta ett märke där man är med C-SPC och sen flytta sig en bit Backuper När man har ändrat i en fil så sparar Emacs den gamla versionen i en backupfil som får ett namn som slutar med tilde (~), t. ex. exempel.txt~ eller README~. (Filhanteraren visar normalt inte dessa filer.) Emacs sparar också filer som har namn som börjar och slutar med tecknet # (ofta kallat nummertecken). Detta är autosparfiler som sparas då och då medan man editerar en fil och sedan tas bort när man har sparat filen. Det ger ett sätt att få tillbaka det man gjort om t. ex. det blir strömavbrott innan man har sparat sina ändringar. 20

21 Inlupp 2: Skalet och Emacs Redovisning Skriv svaren i en textfil i Emacs och skicka den till starback@stp.lingfil.uu.se. Om det är något du inte klarar, så skicka ändå det du har! Se till att du har utfört de övriga uppgifter som står mellan frågorna när du skickar in svaren, för jag kommer att titta på det också. Skalet Skapa ett terminalfönster med ett skal. Väljaren -a till ls talar om att alla filer ska listas (även dolda). Jämför vad du får för resultat från ls och ls -a. Uppgift 2.1 Nämn någon dold fil och någon dold underkatalog som du har i din hemkatalog. Uppgift 2.2 Ge ett kommando för att få en lång listning av filerna i din kurskatalog. Ange kommandot och det svar det gav! (Använd klipp-ochklistra.) Den listningen liknar en del fillistningar från förra labben och visar bland annat filskyddet, vem som äger filen, hur stor den är och när den senast ändrades. Uppgift 2.3 Ge ett kommando för att ändra så att introduktion-till-datateknik blir din aktuella katalog. Hur lyder det kommandot? Uppgift 2.4 Lista bara alla filer här som har namn som slutar på».txt«? Ange både ditt kommando och det resultat det gav. Där finns bland annat tre filer dikt-1.txt, dikt-2.txt och dikt-3.txt som innehåller varsin strof i en dikt. Titta på innehållet i dessa med cat, som Får du ingen ny prompt som slutar med dollar?: Du kan råka skriva fel på något kommando i skalet så att du inte får en ny prompt eller får en prompt som slutar med > istället för $. Avbryt i så fall med Ctrl-C för att få en ny prompt. $ cat dikt-1.txt osv. för de andra filerna. Med $ cat dikt-1.txt dikt-2.txt dikt-3.txt får du hopslagningen av dessa tre som output, dvs. hela denna dikt. Uppgift 2.5 Hur kan man skriva något annat än cat dikt-1.txt dikt-2.txt dikt-3.txt som ger samma resultat men är kortare, med användning av joker? I katalogen finns också en fil dikt-source som talar om vad det är för dikt. Den har av någon anledning inte ett namn som slutar på».txt«trots att det är en textfil. Se till att den inte kommer med när du ger ditt kommando. Uppgift 2.6 Ange ett kommando där du med hjälp av omdirigering sparar hela denna dikt i en ny fil med namnet hela-dikten.txt. Utför även det kommandot. Gör cat hela-dikten.txt efteråt för att se att du fått önskat resultat. Med denna nya fil har du totalt fem filer som har med denna dikt att göra. Fundera ut vad du kan skriva för ett uttryck med jokrar som matchar alla fem filerna. Uppgift 2.7 Ge ett kommando med ls och ditt jokeruttryck. Resultatet ska bli en listning med alla de fem filerna och inga andra. Skapa en ny underkatalog lenngren till din kurskatalog med kommandot mkdir lenngren och flytta alla de fem diktrelaterade filerna till den nya katalogen lenngren i ett kommando (med jokrar). Att flytta filer kan man göra med kommandot mv (»move«) med ett antal filnamn som argument och där det sista argumentet är en katalog som filerna ska flyttas till. 21

22 INLUPP 2: SKALET OCH EMACS Uppgift 2.8 Hur löd detta kommando? Uppgift 2.9 Vad kan du ge för kommando (utan att byta katalog) för att få en lång listning av filerna i denna katalog? Kommandot echo är ett enkelt kommando som man kan ge godtyckligt många argument och som ekar tillbaka sina argument ett och ett. (Det kan nog verka svårt att förstå vad man ska ha det till, men det kommer att visa sig användbart så småningom.) Jämför output från följande kommandon: 1. echo Hej hopp 2. echo "Hej hopp" 3. echo Hej hopp 4. echo "Hej hopp" (I de två senare fallen har jag skrivit sjutton mellanslag i rad mellan orden, men du kan nåt annat antal i samma storleksordning när du testar.) Uppgift 2.10 Vilka av dessa kommandon ger samma output? Förklara varför, och varför det som avviker gör det! Frivillig bonusfråga: Om man verkligen vill skriva ut "Hej hopp" inklusive citattecknen med hjälp av echo, hur ska man skriva då? Emacs Starta Emacs med Applications Accessories Emacs om du inte redan har en igång. Denna gång ska du inte använda musen utan kortkommandot C-x C-f för att öppna en fil i kurskatalogen. (Eftersom Ctrl-tangenten ska användas till båda tecknen behöver du inte lyfta den tangenten emellan.) När du tryckt C-x C-f står det Find file: ~/ längst ner i Emacs och markören har hamnat där nere, i minibufferten. Den fil du ska öppna är ~/introduktion-till-datateknik/ exempel.txt, så fortsätt att skriva på det påbörjade filnamn som står där (nästa tecken i namnet är i). Använd komplettering med TABtangenten. Avsluta med returtangenten. Observera att det i den mörkare nedre raden i Emacs nu står (Text) vilket visar att Emacs är inställd på att editera vanlig text på t. ex. engelska eller svenska (och inte t. ex. HTML eller ett Javaprogram) Emacs befinner sig i text mode. Emacs befinner sig alltid i en viss sådan mode. På svenska kallas det ibland för läge (textläge), eller arbetsmiljö. Att Emacs valde textläge för denna fil är för att den har ett namn som slutar på».txt«. Den mörkare raden i Emacs där bland annat detta står kallas för mode line eller informationsraden. Snabbkommandot C-x C-f för att öppna filer använder man oavsett om man öppnar en fil som redan finns eller om man vill skapa en ny fil. Man behöver alltså inte först skapa en ny fil som man sen öppnar, utan man öppnar den direkt. Öppna med C-x C-f en ny fil saga.txt i kurskatalogen. Eftersom den fil du just tittar på ligger i den katalogen kommer den nya filen också hamna där om du inte säger till om nåt annat. När man editerar vanlig text är det oftast praktiskt om långa rader bryts automatiskt medan man skriver. Ställ om så att det blir så med Options Auto Fill in Text Modes i Emacsmenyerna. När du har det påslaget visas det med ordet Fill i informationsraden. Gör även Options Save Options vilket sparar denna inställning till nästa gång du kör Emacs! Skriv en liten saga i den filen. Den ska börja»det var en gång«för annars är det ingen riktig saga. Tryck inte på retur/enter utan skriv på för att se hur den automatiska radbrytningen fungerar. Så snart du börjar skriva dyker det upp ett par stjärnor till vänster på informationsraden. De visar att bufferten inte är sparad. Det märks även på att knappen Save blir aktiv. Glöm inte att spara efteråt och notera att stjärnorna då försvinner och Save-knappen blir inaktiv. Se efter i menyn vad kortkommandot för Save är. Uppgift 2.11 Vad är kortkommandot för Save? Skriv verkligen en liten text på minst fyra rader som inte bara lyder»bla bla bla«eller liknande, för vi kommer att använda den texten i flera senare övningar där det inte kommer att funka om det inte står en riktig text på svenska där. Uppgift 2.12 Vilka olika sätt att öppna filer i Emacs känner du till nu? Inkrementell sökning Använd C-x C-f i Emacs för att öppna /local/ kurs/ids/wonderland.txt. Eftersom denna fil inte ligger bland dina filer utan på ett helt annat ställe så får du skriva hela filnamnet från början (men du kan förstås använda komplettering med TAB på lämpliga ställen). Detta är hela texten till boken Alice i Underlandet. Nu ska du söka i den. Emacs var först med inkrementell sökning som har blivit allt vanligare även i andra sammanhang. Istället för att skriva in hela texten man söker efter innan sökningen sätter igång, så börjar sökningen direkt när man börjar skriva vad man söker efter. Gör dessa små övningar långsamt så att du ser vad som händer hela tiden. Tryck på C-s för att starta en sökning. Då dyker texten»i-search:«upp i minibufferten därnere för att visa att en sökning pågår. 22

23 Emacs Säg att du ska söka efter ordet»waistcoat«. Börja med att trycka w (inget mer, tillsvidare). Notera var markören har hamnat och vilken text som färgas. Tryck så a och se hur det förändras. Härnäst i. Nu är du framme. Avsluta då sökningen med RET (retur). Med inkrementell sökning behöver du inte skriva mer än nödvändigt för att hitta texten. Det funkar att sudda medan man skriver söktexten. Pröva härnäst att söka efter det ordet»received«, men»råka«först skriva fel och sök efter»recieved«istället. Den sökningen kommer en bit in att misslyckas. Emacs misslyckas och visar den del som inte gick att hitta med rödfärg. Sudda då i söksträngen och rätta till det till den riktiga stavningen. Den söksträng du använder står hela tiden i minibufferten. När du är framme så tryck på RET. Uppgift 2.13 Vilket ord hade Emacs hittat när sökningen inte längre gick? På vilken rad hittade du sen det rätta ordet? (Radnumret står efter»l«i informationsraden.) Sök härnäst framåt efter»sister«. Du kommer till ett ställe där det står»in the lap of her sister«. Antag att detta inte är det ställe du var ute efter. Tryck på C-s igen för att gå till nästa ställe. Fortsätt så tills du får»failing I-search«. Då är du vid den sista förekomsten av»sister«i filen. Uppgift 2.14 Vilken rad är du då på? Uppgift 2.15 Tryck nu på C-s en gång till i alla fall, fast du redan var vid sista förekomsten. Vilken rad hamnar du då på? Vad hände? Sökningar bakåt görs precis som framåt, men med C-r istället. (Man kan byta riktning under sökandet genom att trycka C-r eller C-s.) En påbörjad sökning kan avbrytas med C-g. Om man avslutar den (med RET) stannar man vid det man hittade. Om man avbryter (med C-g) går man istället tillbaks där man var när man började, som om man aldrig gjort sökningen. Flytta och kopiera Nästa fil du ska öppna i Emacs är /local/kurs/ ids/ivt2-svenska.txt. (Det är en textfil med en del gamla utdrag ur Invandrartidningen på enkel svenska.) Uppgift 2.16 Det finns ett menyalternativ File Save As... i Emacs. Vad är motsvarande kortkommando? Som för andra operationer med filer så beter sig Emacs olika om man väljer kommandot från menyn eller med ett kortkommando. Om man väljer det från menyn så får man upp en särskild filväljare men använder man ett kortkommando får man ange filnamn i minibufferten. Använd kortkommandot! Du får upp»write file:«i minibufferten och får skriva filnamn där. Du ska spara denna fil i din kurskatalog och den har du redan använt tidigare i Emacs, så då behöver du inte skriva så mycket. Tryck på <up> (dvs. uppåtpilen) för att gå tillbaka till tidigare använda filnamn. När du har hittat rätt så editera så att bara namnet på katalogen står, dvs. ~/ introduktion-till-datateknik/ och tryck på retur. Du ska få ett meddelande (i ekoarean) om att filen har sparats där. I början står <!--page--> vilket tydligen markerar var det har varit ny sida i den ursprungliga tidningen. I detta fall vill du att det istället ska stå»[ny sida]«där. Kommandot för att byta ut text finns i menyerna som Edit Replace Replace String... Uppgift 2.17 Hur kan man ge samma kommando från tangentbordet? Ge kommandot! Du får i minibufferten först ange vad du vill byta ut, och sen vad du vill byta ut det mot. Avsluta varje input med RET. Nu har du börjat byta ut. Den första texten som kanske ska bytas ut är färgmarkerad. Tryck y (= yes) för att byta ut denna förekomst och du hamnar vid nästa förekomst. Det finns annat än y och n som man kan svara här. Tryck på? för att få hjälp. Uppgift 2.18 Med vilket tecken kan man ersätta alla återstående förekomster utan ytterligare frågor? Utför det kommandot! I ekoarean får du ett meddelande om hur många utbyten som skedde. Använd M-< eller <C-home> för att gå tillbaks till början av bufferten igen. Den första notisen börjar»bättre ekonomi men fortsatt hög arbetslöshet.«antag att den av någon anledning inte ska vara med. Sätt ett märke där den börjar (med C-SPC). Flytta dig till dess slut och tryck C-w för att ta bort regionen. Avsluta med att rensa bort tomraderna i början av filen så att den börjar direkt med den nu första notisen (utan beteckningen»[ny sida]«). Sök framåt efter ordet»internet«. (När du söker framåt hittar du före det ett sammansatt ord tryck då på C-s igen för att gå till nästa förekomst av det sökta.) Hela detta stycke där ordet»internet«står med ska flyttas till slutet av filen. Prova denna gång istället kommandot M-h som direkt markerar hela stycket med punkten i början av stycket. Ta bort det med C-w. Gå till slutet av bufferten med 23

24 INLUPP 2: SKALET OCH EMACS M-> eller <C-end> och klistra in stycket med C-y (yank). Avsluta med att spara den ändrade filen. Andra tangenter Om du är van vid att använda C-x, C-c och C-v för klipp-och-klistra så kan du ändra så att Emacs också känner igen dessa. Uppgift 2.19 Det finns ett menyalternativ för att välja detta. Vad heter det? Eftersom dessa tangenter även har andra betydelser i Emacs så får dessa tangenter olika betydelse när man har markerat en region och annars. Uppgift 2.20 Ja just ja, jag känner till att minst en av dessa tangenter används till annat i Emacs. Vad? (Om man gör denna omställning får man även ångra på C-z, som man kanske också är van vid från annat håll. Om du vill spara inställningen så välj Options Save Options.) Välj själv om du vill använda detta eller prova att använda standardtangenterna i Emacs. Diverse I ekoarean kommer det då och då små meddelanden från Emacs, t. ex. om att den sparar filer osv. Uppgift 2.21 Om du ger C-x C-f för att öppna en fil igen, men ångrar dig och trycker på C-g, vad får du då för meddelande i ekoarean? Klyv fönstret med C-x 2 många gånger tills det inte går längre. Du har fått ett felmeddelande. Uppgift 2.22 Hur lyder det? (Det skrivs i ekoarean så därför finns det även sparat i bufferten *Messages* så kopiera det därifrån så att du slipper skriva av.) (Återställ sen till bara ett fönster med C-x 1.) Slutkompott Tillbaks till skalet. Gå till kurskatalogen igen om du inte redan är där. Ange kommando och kommandots resultat för att: Uppgift 2.23 saga.txt. Uppgift 2.24 Uppgift visa de två sista raderna i din... räkna orden i din saga.txt.... räkna raderna i din saga.txt. Uppgift räkna både orden och raderna samtidigt i din saga.txt, med ett kommando. Väljaren -d till date beskrevs på s. 16. Uppgift 2.27 Prova olika argument till denna väljare -d, nämligen»today«,»tomorrow«,»next year«. Visa dina kommandon och vad du får för resultat! I det sista fallet har du ett argument med mellanslag i sig, så då behöver du ta hand om det på nåt särskilt sätt. Uppgift 2.28 Om man ger date -d ett fyrsiffrigt tal som argument, hur tolkar den det? Uppgift 2.29 Ange ett skalkommando som skapar en fil saga40.txt som innehåller en version av din saga.txt där raderna är högst 40 tecken långa. Uppgift 2.30 Ange ett skalkommando som räknar hur många rader och ord det är i denna nya fil och vad det gav för resultat. Det ska bli lika många ord som för saga.txt, men troligen fler rader. Uppgift 2.31 När man räknar både ord och rader samtidigt, i vilken ordning får man då ut svaren? Spelar det roll i vilken ordning man ger väljarna? Uppgift 2.32 Ge nu ett kommando för att gå tillbaks till din hemkatalog igen. Ange minst två sätt som du kan göra detta på! Uppgift 2.33 Nämn minst tre tangentsekvenser i Emacs med en prefixtangent, och vilka kommandon som dessa utför. I Unix-världen brukar man rekommendera folk att inte ha filer vars namn börjar med bindestreck (-). Skapa trots detta en fil som heter -foo. Uppgift 2.34 Kan du komma på varför man brukar avreda från sådana namn? Visa något kommando du försöker använda med din fil -foo som leder till problem. Uppgift 2.35 Vad är det nu igen för tangent som används för att avbryta ett kommando i skalet? Uppgift 2.36 Vad är det nu igen för tangenter som används för att avbryta ett kommando i Emacs? Uppgift 2.37 Om det skulle finnas ett kommando xyzzy, hur skulle då xyzzy -x tolkas? a) Kommandot xyzzy har en väljare -x. Sen har kommandot två argument, 17 och 42. b) Kommandot xyzzy har en väljare -x med argumentet 17. Sen har kommandot självt ett argument,

25 Kapitel 3 Mer om skalet 3.1 Långa väljare Förra gången såg vi att kommandon kan få väljare. I ett kommando som grep -i prins saga.txt är t. ex. -i en väljare som påverkar beteendet för kommandot grep. Många program har även långa väljare som består av mer än ett tecken (efter bindestreck). I GNU är standarden att långa väljare inleds med två bindestreck. Ofta finns det en kort och en lång väljare med samma betydelse. Den långa är kanske lättare att förstå, men den korta går snabbare att skriva när man har lärt sig den. T. ex. kan man till grep skriva --ignore-case istället för -i och --count istället för -c. Man behöver inte alltid skriva ut hela namnet på den långa väljaren, utan början kan räcka ifall det det ändå blir unikt. Det räcker t. ex. med grep --cou, men inte med grep --co eftersom grep också har andra väljare som börjar så Argument till långa väljare När en lång väljare ska ha ett argument skriver man ofta ett likhetstecken mellan väljare och värde, så här: i ett rör vidare till nästa kommando. På svenska säger man ibland kommandorör. Med $ head stp.txt wc -w 41 får man t. ex. veta hur många ord det finns i de tio första raderna av filen stp.txt. Först utförs head stp.txt, men istället för att skriva ut resultatet av det kommandot till terminalen så skickar skalet vidare det som indata till wc -w som räknar orden i det. De båda programmen head och wc vet inte om att de kommunicerar med varandra. Det första skriver utdata till standard output och det andra läser indata från standard input utan att veta vad som finns i andra änden. Det är skalet som tar utdata från det ena och lämnar vidare som indata till det andra. Om vi inte kände till kommandorör skulle vi kunna lösa samma uppgift så här: $ date Tue Sep 8 13:23:11 CEST 2015 $ date --date=tomorrow Wed Sep 9 13:23:14 CEST 2015 $ head stp.txt >smurf $ wc -w smurf 41 smurf $ rm smurf 3.2 Kommandorör ( ) Ni har sett hur man kan spara resultatet av ett kommando i en fil med hjälp av tecknet > och ett filnamn. Istället för att spara resultatet i en fil kan man också skicka vidare resultatet som indata till ett nytt kommando med tecknet (lodstreck). Detta kallas på engelska för en pipe. Man tänker sig att utdata från det första kommandot färdas Jaha, 41 ord. Här sparar vi undan resultatet av första steget i en fil (som här fick heta smurf, men det är ju ett jättedumt namn och du skulle förstås ha kallat den nåt rimligare). När vi väl har räknat orden i den filen så behövs den inte längre, så vi tog bort den efteråt med rm. Kommandorör är bättre genom att mellanresultat inte behöver sparas i några filer utan kan skickas direkt från kommando till kommando. Observera att wc i kommandoröret inte har några argument! (Bara en väljare -w.) Alltid tidigare har vi använt det kommandot med filnamn 25

26 3. MER OM SKALET head stp.txt Språkteknologiprogrammet förenar språkvetenskapens sätt att se på språk med datateknikens mer ingenjörsmässiga perspektiv. Målet är att på ett användbart sätt åstadkomma automatisk analys och generering av naturligt språk. Exempel på tillämpningar är system för maskinöversättning och datoriserade översättningsstöd, språkgranskning, informationssökning och wc -w 41 Figur 3.1: Hur många ord finns det på de första tio raderna? Kommandoröret head stp.txt wc -w FEL! som argument, och då räknar den ord eller rader i de filerna. Om den inte får några argument räknar den istället i standard input. I figur 3.1 visas hur utdata skickas vidare som indata i detta kommandorör. Ett vanligt fel är att blanda ihop detta och skriva nåt i stil med $ head stp.txt wc -w stp.txt Här har man gett ett argument till wc (nämligen»stp.txt«), så alltså läser den från den filen och inte från standard input. Så allt det som står före lodstrecket spelar ingen roll. 3.3 En användning av echo Kommandorör är ett sådant fall där kommandot echo kan vara användbart, för att ge en viss specifik indata till ett kommando. Antag att vi vill pröva hur wc egentligen räknar ord. Skulle den räkna»och/eller«som ett eller två ord? Ett sätt skulle förstås vara att skriva texten»och/eller«i en fil först, men vi behöver inte göra det, utan kan ge en bestämd text direkt som indata. Tecknet : Tecknet kallas för lodstreck (vertical bar). Det skiljs egentligen från ett ovanligare tecken broken bar ( ), men på bland annat svenska tangentbord finns bara det ena, och det brukar då visas som på tangentbordet trots att tangenten faktiskt genererar. Tecknet behöver skrivas med AltGr. Förutom dess användning som pipe i Unix används tecknet också bland annat ofta för att ange alternativ i flera syntaxer och programspråk. 26 $ echo och/eller wc -w Omdirigering av standard input (<) Som en omvändning till > kan man använda < för att visa varifrån indata till ett kommando ska hämtas. Exempel: $ wc -w <start 41 Här hämtar skalet texten i filen start och lämnar den texten som indata till wc -w som tar fram antal ord i detta. Detta är inte alls lika vanligt att man använder som >. Det går ju nämligen lika bra att skriva bara wc -w start istället, utan <-tecknet, eftersom wc liksom de flesta kommandon som man vill ge text som indata till också accepterar filnamn som argument och då själv läser in dessa filer som indata. Precis som det normala för standard output om man inte säger något är att det skickas till terminalen så är det normala för standard input att om man inte säger något så läses det från terminalen! Så om man skriver bara head får man ingen ny prompt direkt, utan skalet börjar läsa in textrader som man skriver in på terminalen. 1 Standard output och standard input förkortas ibland till stdout respektive stdin. Flera kommandon som vi sett tidigare som tar filnamn som argument och som läser sin input från dessa läser input från standard input istället om de inte får några argument. Det gäller bl. a. head, tail, wc och grep. 1 Sådan text som man skriver in kan man avsluta med Control-d.

27 3.5. Långa rör och filter 3.5 Långa rör och filter En kommandorad kan innehålla godtyckligt många rör. I en fyrdelad kommandorad som aaa bbb ccc ddd kommer programmet aaa att lämna vidare sitt resultat till programmet bbb som lämnar vidare sitt resultat till programmet ccc som lämnar vidare sitt resultat till programmet ddd. I detta exempel är det bara output från ddd som hamnar i terminalen. Till detta kan man även lägga till omdirigering med < och >. Med en kommandorad som aaa <infil bbb ccc ddd >utfil läser det första steget aaa sin indata från filen infil och det sista steget ddd skriver slutliga utdata till filen utfil. Det är inte meningsfullt att skjuta in < eller > någonstans i mitten av en sånt här kommandorör. Symbolen visar ju redan varifrån indata ska tas och vart utdata ska skickas. 2 Ett kommando som läser in något från standard input, gör nånting med det, och sedan skriver ut det i modifierad form på standard output kallas ofta ett filter. 3.6 Relativa sökvägar I avsnitt 1.3 såg vi hur fullständiga sökvägar kan användas för att beteckna en fil eller katalog. Sådana sökvägar kan alltid skrivas som argument till kommandon som ska ha filnamn eller katalognamn som argument. De fullständiga sökvägarna börjar alltid med / och har oftast flera / i namnet. Oftast anger man istället ett kortare namn på filer och kataloger. Det enklaste fallet är när dessa filer och kataloger ligger i det som är ens aktuella katalog. Då räcker det med att bara skriva namnet, som README eller kvack.png. Men om Ellen som exempel har sin hemkatalog /home/stp16/ellen som aktuell katalog och vill referera till sin fil med ett slottsfotografi (se figur 1.3 på s. 6) vars fullständiga namn är /home/stp16/ellen/fotografier/slottet. jpg så räcker det inte med bara slottet.jpg eftersom den filen inte ligger i samma katalog. Ett sätt är förstås att först byta katalog, men ett annat är att skriva en relativ sökväg som utgår från ens aktuella katalog. Det skulle i det fallet bli fotografier/slottet.jpg. Om man istället har /home/stp16 som aktuell katalog kan man skriva ellen/fotografier/ slottet.jpg. Alla sådana namn som inte börjar med / (eller ~) utgår från aktuell katalog. Det gäller alltså även den enklaste formen helt utan /, som README och kvack.png. Vad dessa sökvägar betyder beror på vad som är aktuell katalog, så detta är exempel på relativa sökvägar. 2 Man kan även skriva <infil aaa istället för aaa <infil vilket en del tycker gör ordningen tydligare. För att röra sig uppåt i filträdet använder man den särskilda beteckningen.. som finns i varje katalog och pekar till den katalogens föräldrakatalog. Om Ellen har sin underkatalog Desktop som aktuell katalog kan hon t. ex. skriva.. för att referera till sin hemkatalog och../fotografier/ slottet.jpg för att referera till det där fotografiet. En användning av.. har du redan sett: cd.. för att gå upp ett steg. Fullständiga sökvägar börjar alltså med / och utgår från roten (som ju betecknas /). Övriga sökvägar är relativa och utgår från aktuell katalog. En tilde (~) i början av sökvägar är bara ett förkortat skrivsätt för något som börjar med /home, så sådana sökvägar är också fullständiga. Förutom.. för föräldrakatalogen finns även. i varje katalog och betecknar just den katalogen. Det betyder alltså samma sak att skriva fotografier/slottet.jpg och t. ex../ fotografier/slottet.jpg eller fotografier/./slottet.jpg. Trots att dessa. och.. finns i varje katalog så syns de normalt inte. Det är helt enkelt eftersom de börjar med punkt och därför är dolda. 3.7 TAB Det finns ett särskilt TAB-tecken som i textfiler visas som ett hopp fram till nästa tabulatorposition, och dessa ligger normalt med åtta stegs mellanrum. Det är alltså bara ett tecken i filen, även om det ser ut som mer. När man editerar text används TAB-tangenten för att göra ett»lagom långt«indrag, vilket kanske är ett TAB-tecken, men kanske längre, och kanske bara nåt enstaka mellanslag, beroende på vad det är för slags text och hur omgivningen ser ut. Det är alltså inte alls alltid så att det verkligen blir ett TAB-tecken i en fil för att man trycker på den tangenten. Den tangenten används ju dessutom även till annat. Vi har t. ex. använt den mycket till komplettering, och den används också ofta för att växla mellan olika inmatningsfält. 3.8 Skalkommandot cut Kommandot cut klipper i sin indata så att bara vissa delar av varje rad kommer med i utdata. Det är vanligt att använda detta kommando för textfiler som innehåller flera kolumner, normalt avgränsade av det speciella TAB-tecknet. Med väljaren -f med ett tal som argument kan man då klippa ut bara någon av dessa kolumner. 27

28 3. MER OM SKALET $ cat knattarna.txt Knatte Fnatte Tjatte Ole Dole Doffen Rip Rap Rup $ cut -f 1 knattarna.txt Knatte Ole Rip $ cut -f 2 knattarna.txt Fnatte Dole Rap Det går också att klippa ut flera kolumner tillsammans, som t. ex. cut -f 2-3 för kolumn 2 och 3. I figurerna 3.2, 3.3 och 3.4 visas några exempel på kommandorör där cut används tillsammans med den där filen med Knattarnas namn på svenska, norska och danska. 3.9 Att tolka hjälp om skalkommandon I felmeddelanden har du sett att många kommandon tipsar om att man kan ge kommandot med en väljare --help för att få hjälp om det kommandot. Det är en standard för GNU-program att de ska ha en sådan väljare. Hjälptexten är skriven rätt kompakt och kräver att man är van för att veta hur den ska tolkas. I figur 3.5 ges ett exempel, med hjälptexten för head. Först kommer en usage-rad som sammanfattning. Det visar att det som vanligt kan komma ett antal väljare ([OPTIONS]...) och att det sedan kan följa ett antal argument som är filnamn ([FILE]...). Hakparenteserna visar att det är en optionell del som inte behöver vara med. Punkterna visar att det får finnas flera sådana. Man kan jämföra med motsvarande rad för grep som lyder Usage: grep [OPTION]... PATTERN [FILE]... Här står det första argumentet,»pattern«, texten som man ska söka efter, inte inom hakparenteser, så det argumentet måste alltid finnas med. 3 Däremot behöver inte några filnamn finnas med. Det kan också finnas flera alternativa sätt att köra ett program. Kommandot cp som kopierar filer kan t. ex. anropas på dessa två olika sätt: 4 Usage: cp [OPTION]... SOURCE DEST or: cp [OPTION]... SOURCE... DIRECTORY 3 Att det första argumentet kallas för»pattern«är för att det inte behöver vara en fix text, utan kan vara ett mönster som man söker efter. Detta tar vi upp senare. 4 Detta är en vit lögn. Det finns faktiskt ett tredje sätt också, och det första sättet har en extra optionell väljare, men det spelar ingen roll nu. 28 Den första raden beskriver hur man använder cp med två argument, till exempel cp foo.ogg bar.ogg för att kopiera filen foo. ogg till bar.ogg. I den andra versionen kan det finnas flera»source«(eftersom det står punkter efter) och sista argument måste vara ett namn på en katalog. Det betyder att kopiera allt man räknar upp som en»source«till den katalogen. I beskrivningen som följer i figur 3.5 beskrivs närmare hur de olika argumenten tolkas. Här står bland annat att om man inte har angivit någon FILE så kommer kommandot att»read standard input«istället. Så beter sig många kommandon som man kan ge filnamn som argument. Större delen av beskrivningen är en lista med olika väljare som kommandot tar. Här listas synonyma väljare tillsammans. T. ex. betyder head -q, head --quiet och head --silent detsamma. Vilka argument som ska ha argument framgår också. Då det står --lines=[-]k så ska tydligen --lines ha ett argument, och därmed även dess synonym -n. Värdet för den väljaren skrivs här som [-]K och tydligen ska K här ska vara ett tal. Hakparenteserna betyder som på andra ställen nånting som kan vara med men inte behöver vara med. Så argumentet är antingen ett minustecken följt av ett tal eller också bara ett tal. Så man kan alltså skriva t. ex. head --lines=-17 och head --lines=17. (Detta betyder olika saker. I beskrivningen står det mer om det.) Om man använder -n i stället så blir det alltså head -n -17 eller head -n 17, där det sistnämnda är ett sådant normalt anrop i stil med sådana du har gjort. (Om du vill veta vad det betyder att använda ett minustecken där får du lov att läsa vidare i dokumentationen.) Alla detaljer i hur head kan anropas är inte viktiga, utan det viktiga är här hur olika saker betecknas eftersom ni kan behöva kunna tolka sådana här beskrivningar själv. Framförallt gäller det att kunna plocka ut just den information man själv behöver. Om t. ex. några väljare eller varianter verkar helt obegripliga så behöver inte det göra något så länge man inte behöver dem Argumentet - Observera särskilt en sak som står i hjälptexten för head:»with no FILE, or when FILE is -, read standard input«. Detta gäller för många kommandon att man kan skriva - istället för ett filnamn för att kommandot ska läsa från standard input.

29 3.10. Argumentet - cut -f 3 knattarna.txt Tjatte Doffen Rup tail -n 1 Rup Figur 3.2: Vad heter Tjatte på danska? Kommandoröret cut -f 3 knattarna.txt tail -n 1 tail -n 1 knattarna.txt Rip Rap Rup cut -f 3 Rup Figur 3.3: Vad heter Tjatte på danska med en annan metod. Kommandoröret tail -n 1 knattarna.txt cut -f 3 cut -f 2 knattarna.txt Fnatte Dole Rap grep a Fnatte Rap Figur 3.4: Vilka»Fnattar«har ett namn med a i? Kommandoröret cut -f 2 knattarna.txt grep a $ head --help Usage: head [OPTION]... [FILE]... Print the first 10 lines of each FILE to standard output. With more than one FILE, precede each with a header giving the file name. With no FILE, or when FILE is -, read standard input. Mandatory arguments to long options are mandatory for short options too. -c, --bytes=[-]k print the first K bytes of each file; with the leading '-', print all but the last K bytes of each file -n, --lines=[-]k print the first K lines instead of the first 10; with the leading '-', print all but the last K lines of each file -q, --quiet, --silent never print headers giving file names -v, --verbose always print headers giving file names --help display this help and exit --version output version information and exit K may have a multiplier suffix: b 512, kb 1000, K 1024, MB 1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y. GNU coreutils online help: < For complete documentation, run: info coreutils 'head invocation' Figur 3.5: Hjälptexten för head. 29

30 3. MER OM SKALET 3.11 Skalskript Om man vill göra om en följd av kommandon flera gånger så kan man spara undan dessa kommandon i ett skalskript (shell script). Det är helt enkelt en textfil där kommandoraderna står, rad för rad, så som man annars hade skrivit in dem till ett skal. Ofta låter man sådana filer få filnamnsändelsen.sh (som i shell). Det är brukligt att börja sådana filer med en särskild rad i stil med #! /bin/bash Detta talar om att det är just skalet bash som det är tänkt ska utföra kommandona i denna fil. (/bin/bash är nämligen en fullständig sökväg till programmet bash.) Ett sätt att utföra kommandona i en sådan fil är att använda bash som kommando. Då körs ett nytt skal igång som utför skalkommandona i filen. $ ls *.pdf dn.pdf svd.pdf unt.pdf så tänker man det sig kanske som att man bett ls att se efter vad det finns för pdf-filer, men egentligen är det skalet som expanderar *.pdf till dn.pdf svd.pdf unt.pdf och sen utför kommandot ls dn.pdf svd.pdf unt.pdf, så när ls börjar köra är den delen av jobbet redan utfört. I många fall spelar det ingen roll om man tänker fel på det sättet, men i vissa fall så har det betydelse och då blir man lätt förvirrad om man inte inser hur det i själva verket förhåller sig. När inga filer matchar jokeruttrycket så lämnas jokeruttrycket kvar som det var och skickas vidare till skalet. $ cat lista-bilder.sh #!/bin/bash echo Här är några av dina bildfiler: ls *.gif *.jpg *.png echo Ha en trevlig dag! $ bash lista-bilder.sh Här är några av dina bildfiler: ls: *.gif: No such file or directory emacs.png fooey.jpg fooey.png wave.png Ha en trevlig dag! Här användes först kommandot cat för att visa innehållet i skalskriptet lista-bilder.sh och sen kommandot bash för att utföra dessa rader i ett nytt skal Expansion i skalet Det är alltså skalet som skickar ut indata till de olika kommandona och tar hand om deras utdata. Dessutom ändrar skalet de argument man skriver på kommandoraden innan den skickar vidare det till de olika kommandona. En sådan ändring är att ~ och ~ användarnamn expanderas till något längre. Det är alltså skalet som gör detta och när man skriver cp foo.txt ~ för att kopiera en fil till sin hemkatalog så får cp i själva verket en kommandorad i stil med cp foo.txt /home/stp16/ellen att utföra. (Det är inte bara skalet som gör sådana utbyten, utan många andra program gör det också, så det är därför det går att skriva filnamn med ~ t. ex. i Emacs.) Dessutom är det skalet som ser efter vad det finns för filer så att den kan expandera jokeruttryck med *,? och []. När man ger ett kommando som $ ls *.pdff ls: *.pdff: No such file or directory Här har användaren råkat skriva fel och då *.pdff inte matchade någonting så blev det verkligen ls *.pdff som utfördes, varpå ls klagade över att det inte fanns nån fil med namnet *.pdff. Här kan man också ha användning för kommandot echo. Eftersom det bara skriver tillbaka alla argument som man gett det kan vara praktiskt för att se hur skalet har expanderat argumenten. $ echo foo *zzz* bar foo *zzz* bar $ echo hej *.txt hopp hej cheshire-cat.txt how-doth.txt hopp (Här fanns det tydligen inga filnamn som matchade *zzz*, så det förblev oförändrat.) 30

31 Inlupp 3: Mer om skalet Redovisning Skicka ett mail till Per med svar på frågorna. När du ska ge ett kommando så svara alltid också med vad det gav för resultat! Om du har fått mail angående uppgifter på förra labben så svara på det separat istället för att skriva ett mail om alltihop! Det underlättar mycket för min rättning om svar på olika inluppar ligger i olika mail. Långa väljare Uppgift 3.1 Väljaren -n till head och tail har den långa varianten --lines. Hur ser ett kommando ut som använder den långa varianten för att ta fram de 15 första raderna av stp.txt? Det var en gång... Gå till kurskatalogen. Där ska bland annat din saga.txt från s. 22 finnas. Uppgift 3.2 Ge ett kommando som tar fram de tre första raderna av din saga. Om detta visar hela din saga har du inte följt instruktionerna riktigt på sidan 22, så gör om det i så fall! Uppgift 3.3 Ge ett kommando som räknar hur många ord det finns i de tre första raderna av din saga. (Missa inte vad som står fetstilt under»redovisning«ovan!) I uppgift 2.29 skapade du en fil saga40.txt som innehåller samma text som saga.txt, men omformatterad så att radlängden är max 40. Uppgift 3.4 Ge ett kommando som räknar hur många rader det är i saga40.txt. Uppgift 3.5 Om du inte hade den där filen saga40.txt hur skulle du då (utan att skapa en sådan fil som mellanresultat) ta reda på hur många rader din saga.txt skulle få om den bröts om till att få så korta rader? Uppgift 3.6 Ge ett kommando som tar fram den näst första raden i din saga. (Den sista uppgiften är lite klurig. Fastnar du så gå vidare med andra uppgifter tillsvidare.) Från begabba till utströ Filen /local/kurs/ids/verb.txt innehåller en lista med svenska verb. I denna fil har de baklängessorterats, dvs. sorterats efter slutet på orden. (Det innebär att rimord tenderar att hamna efter varann.) Kopiera den till din kurskatalog från skalet. Ett sätt att använda kopieringskommandot är ju att ge ett sista argument som är den katalog som filer ska kopieras till. Använd det sättet, och kopiera till aktuell katalog med en kort beteckning (ett tecken!) för aktuell katalog. Uppgift 3.7 Hur löd ditt kommando? Uppgift 3.8 Ge ett kommando för att räkna rader och ord i den där filen. (Det ska ligga ett ord per rad, så det borde vara lika många ord som rader.) Uppgift 3.9 Ge ett kommando som talar om vilka verb där som innehåller»vv«(som t. ex.»avvisa«). Uppgift 3.10 Ge ett kommando som börjar som det i förra frågan och sen fortsätter med ett kommandorör så att du får fram hur många verb som innehåller»vv«. Uppgift 3.11 Ge ett kortare kommando som gör samma sak som förra uppgiften genom att använda en lämplig väljare till sökkommandot. Därmed behövs inget kommandorör. Uppgift 3.12 Ge ett kommando som listar vilka av de tio första verben i hela verb.txt som innehåller bokstaven j. Uppgift 3.13 Ge ett kommando som listar de första tio verben i verb.txt som innehåller bokstaven j. 31

32 INLUPP 3: MER OM SKALET Tycker du att de två föregående uppgifterna är likadana har du inte läst tillräckligt noga! Kommandona och deras resultat skiljer sig åt. Tabell 3.1: Språkkoder enligt standarden ISO för några språk med många talare i världen, Europa, Norden eller Sverige Uppgift 3.14 Ge ett kommando som listar de verb som innehåller båda bokstäverna j och y. (I resultatet ska bland annat»djupfrysa«och»nyttja«finnas med.) Av-stav-ning Ge kommandot avstava -l sv Detta är ett exempel som avstavar sina argument med hjälp av svenska avstavningsregler. (Detta är inte ett standardprogram utan något som Per lagt upp för dessa uppgifter.) Väljaren -l (l som i language) tar ett argument (här»sv«) som anger vilket språk texten är på. (Använder man inte den väljaren antar programmet att texten är på engelska.) Språken anges enligt en internationell standard för språkförkortningar, varav några koder nämns i tabell 3.1 (men programmet klarar inte alla dessa språk). sq ar bn nb bs bg da en fi fr el hi is it ja yi zh xy ku albanska arabiska bengali bokmål bosniska bulgariska danska engelska finska franska grekiska hindi isländska italienska japanska jiddisch kinesiska kroatiska kurdiska nl se no nn fa pl pt ro ru sr so es sv cs tr de uk hu be nederländska nordsamiska norska nynorska persiska polska portugisiska rumänska ryska serbiska somaliska spanska svenska tjeckiska turkiska tyska ukrainska ungerska vitryska Uppgift 3.15 Vad gav det för resultat? Uppgift 3.16 Ge ett kommando som avstavar ordet»weltschmerz«på tyska. Uppgift 3.17 Ta fram hjälptexten för kommandot avstava. Det står att det finns en lång version av väljare -l också. Gör om förra uppgiften men använd den långa versionen istället. Uppgift 3.18 Vad står det i hjälptexten att programmet gör om den inte får några texter som argument? Uppgift 3.19 Ge ett kommando som ger din saga.txt avstavad. Använd väljaren för att se till att rätt språk används! Uppgift 3.20 Ge ett kommando som visar avstavningar av alla verb i verb.txt som innehåller bokstaven z. Delstater I filen /local/kurs/ids/us-states.txt finns en lista över USA:s delstater tillsammans med datum då de ratifierade USA:s konstitution eller kom med i unionen. 5 Kopiera den till din kurskatalog och titta på den i Emacs. Den är sorterad efter datumet. Tryck C-s (för sökning) och sen TAB för att söka efter TAB-tecken. Gå även fram och bak tecken för tecken (med <right> och <left> eller 5 Enligt C-f och C-b) så märker du också att det bara är ett tecken mellan datumet och namnet. Uppgift 3.21 Ge ett skalkommando som bara listar raderna för de delstater som kom med i USA på 1850-talet. Uppgift 3.22 Ge ett kommando som klipper ut bara alla delstaternas namn. Uppgift 3.23 Ge ett kommando som skriver ut alla delstater (utan datum) som har»new«med i sitt namn. Uppgift 3.24 Ge ett kommando som skriver ut alla delstater (utan datum) som har ett mellanrum med i sitt namn. Kommandot sort är ett filter som sorterar de rader det får in i alfabetisk ordning och skriver ut resultatet. Uppgift 3.25 Ge ett kommando som skriver ut bara deltstaternas namn, sorterade i alfabetisk ordning. Uppgift 3.26 Ge ett kommando som skriver ut de tretton ursprungliga delstaterna (dvs. de tretton första i listan), sorterade i alfabetisk ordning. Uppgift 3.27 Ge ett kommando som skriver ut vilken delstat som kommer sist i alfabetisk ordning. 32

33 Skalskript Skalskript Öppna en ny fil saga.sh i din kurskatalog och skriv detta innehåll i den: echo Antal ord i min saga: wc -w saga.txt echo echo Sista raden i min saga: tail -n 1 saga.txt Utför sedan kommandona i den med bash saga.sh. Om det inte fungerar har du gjort nåt fel. Se över det föregående tills du får det att fungera. När du editerar denna fil i Emacs står det»shell-script«i informationsraden i Emacs. Emacs vet alltså om att det är ett sådant du editerar och det finns en del särskilda funktioner för just detta. Det finns bland annat en särskild meny»sh-script«med ett kommando Sh-Script Set shell type. Använd det. Du får svara på en uppgift i minibufferten. Tryck bara retur för att få defaultvärdet. Uppgift 3.28 Vad tror du det var som fick Emacs att veta att det var ett skalskript du höll på att skriva? Uppgift 3.29 Kommandot lade till en speciell rad i början av din text. Hur lyder den? Uppgift 3.30 Vad är den till för? Uppgift 3.31 Kortkommandona för kommandona i menyn Sh-Script börjar nästan alla med samma prefixtangent. Vilken? Den tangenten används i Emacs som prefix för sånt som är speciellt för just den slags fil man editerar just nu. Om det inte vore ett skalskript så kanske samma tangenter hade betytt något annat. Uppgift 3.32 Utöka detta skalskript så att det även skapar en fil saga-av.txt där din saga har avstavats. Eftersom avstavningen gör raderna längre så använd fmt efteråt för att få lagom långa rader igen. När ditt skalskript körs ska ingenting skrivas ut i terminfönstret. Det enda som ska hända är att den filen skapas med det angivna innehållet. Röda rummet Filen /local/kurs/ids/rummet.txt innehåller början av August Strindbergs roman Röda rummet. Filen rummet.words i samma katalog innehåller samma text, men med ett ord per rad tillsammans med ordklassangivelse. Kopiera dessa två till din kurskatalog. Titta på rummet.words i Emacs! (Interpunktion som,.;:?! räknas här som egna ord med ordklassen»punkt«kort för interpunktion.) Uppgift 3.33 Kolumnen med ordklass verkar hoppa lite och stå olika långt till höger för olika ord. Hur kommer det sig? Uppgift 3.34 Ge ett kommando för att spara en sorterad lista av rummet.words i en ny fil rummet. sorted. Uppgift 3.35 Skumma igenom filen för att se efter hur sorteringen har blivit. Är det nåt anmärkningsvärt med den? (Vi återkommer till olika slags sortering senare.) Uppgift 3.36 Ge ett kommando som bara plockar ut ordklasserna från rummet.words och sparar dessa sorterade i en fil rummet.ordklasser. (Det borde bli många rader efter varandra som är likadana där, t. ex. många rader som det bara står»subst«på.) För nästa uppgift behöver du en ny väljare till kommandot som du har räknat ord och annat med. Se på dess hjälptext! Uppgift 3.37 Ge ett kommando som talar om hur långt det längsta ordet i rummet.words är. (Bara själva ordet ska mätas, utan dess ordklassmarkör.) Uppgift 3.38 Ge ett kommando som ger de tre första raderna i rummet.txt med avstavningar. Gott och blandat Skriv cd alice för att gå ner till den underkatalog som du skapade i uppgift 1.6. Uppgift 3.39 Om du nu utan att byta katalog vill lista innehållet i din kurskatalog i skalet, (det vill säga katalogen ett steg upp,) hur skriver du då? Uppgift 3.40 Och vad ger du för kommando för att kopiera cheshire-cat.jpg där till din kurskatalog? (Gör detta!) Uppgift 3.41 Vilka av följande sökvägar är fullständiga, och vilka är relativa? a) /local/texts/jabberwocky b) bar.txt c) ~/korpus.txt d) ~starback/exempel.txt e) inte/mitt/bord f) ~ellen g)../filnamn 33

34 INLUPP 3: MER OM SKALET Uppgift 3.42 Hur många argument ges till kommandot i dessa exempel? Räkna inte med väljare och argument till väljare. a) sort korpus20.txt b) mv foo.txt bar.txt ~/Desktop c) echo I am the walrus. d) echo 'I am a donkey.' e) tail -n 3 Min fil.txt När du börjar komma in i att använda kommandorör så börjar du kanske skriva sånt som cat saga.txt head -n 1 för att ta fram första raden i din saga. Men det är ju alldeles onödigt! Här behövs inget kommandorör. Uppgift 3.48 Gör om samma kommando som i förra uppgiften. Visa ditt kommando och det resultat du fick. Uppgift 3.49 Hittade du den där raden»den Den Den«som du nyss skrev? Varför blev det som det blev? Uppgift 3.50 Varför? Vad blev det för annan skillnad? Uppgift 3.43 Hur skriver man istället som är kortare, vackrare och enklare?»gnome Calculator«är ett program som man normalt skulle köra från menyerna, men kör det istället från kommandoraden. Programmet heter gnome-calculator. Observera att du inte får någon ny prompt i terminalen förrän du avslutar programmet (genom att ta bort dess fönster). Det är det normala i skalet att endast ett program i taget utförs. Skriv sen gnome-calculator --help för att få se en hjälptext där det står om en del väljare det har. Uppgift 3.44 Vad kan du ge för kommando för att starta en räknare där det står»x = «i räknarfönstret från början? Uppgift 3.45 Vad ger det för svar i kalkylatorn när man trycker på retur? Uppgift 3.46 Hur kan du med ett skalkommando skapa en fil foo.txt i vilken det står»blahonga«? Filnamn som börjar med bindestreck Gå till katalogen lenngren som du skapat tidigare och skriv grep Den * för att visa vilka rader i filerna i denna katalog som innehåller»den«. Uppgift 3.47 Vad gav det för resultat? Skapa (med Emacs) en fil som heter -i (två tecken) i samma katalog. Skriv»Den Den Den«i den. 34

35 Kapitel 4 Teckenrepresentation Temat i detta kapitel är teckenkodningar och locales, men först kommer korta stödanteckningar om tvåpotenser. 4.1 Binärt Den minsta enheten information är en bit något som bara kan ha två värden. Av eller på, upp eller ner, svart eller vitt, 0 eller 1. För varje ny bit fördubblas antalet möjligheter. 2 1 = = 2 2 = = = = = = = = = = = = = = = = = 1024 och så fortsätter det 2 048, 4 192, 8 192, , , , osv. Så med t. ex. fyra bitar kan ett av 16 olika värden lagras. Dessa tal dyker upp i många sammanhang. Det finns t. ex. 8 bitar i en byte. Det finns 256 möjliga värden på en byte. Med kilo menas i datorsammanhang oftast inte exakt tusen, utan 1 024, liksom Mega oftast inte betyder exakt en miljon utan 2 20 som är lite mer än en miljon. Att skriva tal binärt är att skriva dem med bara två siffror, 0 och 1. T. ex. kan 256 olika tal (0-255) skrivas med åtta binära siffror. Annat som förekommer är oktalt (åtta olika siffror, 0 7) och hexadecimalt (sexton olika siffror, 0 9 och A F). (En oktal siffra innehåller lika mycket information som tre bitar. En hexadecimal siffra innehåller lika mycket information som fyra bitar.) 4.2 Teckenkoder När en vanlig text (plain text) lagras i en fil eller ska föras över mellan datorer eller program måste en viss teckenkodning användas, dvs. ett sätt att ge varje tecken en numerisk kod. Filer lagrar olika slags data som en sekvens av bytes, som kan ses som värden 0 255, så det enklaste sättet att lagra text är att varje tecken får en kod från 0 till Att ange teckenkodning Det finns många olika teckenkodningar, vilket kan ställa till problem. På samma system (i samma operativsystem; i samma program) använder man oftast samma teckenkodning genomgående och råkar inte ut för några problem. Trycker man på en tangent som det står»å«på får man naturligt nog ett tecken»å«på skärmen och sparar man det i en fil så kommer samma tecken fram nästa gång man tittar på det. Det besvärliga kommer när man ska föra över data mellan system som använder olika teckenkodningar. Då finns det risk för att den kod man skickar iväg som betyder»å«i ens egen system betyder nåt annat på det andra systemet. Det är därför viktigt a) att man använder en teckenkodning som mottagande system känner till, och b) att man talar om vilken teckenkodning man har använt. Då får mottagaren(s system) möjlighet att tolka informationen rätt. Oftast fungerar sånt automatiskt. I figur 4.1 ges ett exempel på hur det kan bli annars. Detta görs med standardiserade beteckningar för olika teckenkodningar, och det är organisationen IANA (Internet Assigned Numbers Authority) som håller i dessa beteckningar, precis som de håller i flera andra standarder som används på Internet. I flera sammanhang när text skickas över nätet, t. ex. för datorpost och över webben, så används dessa standardiserade beteckningar, så istället för att bara texten skickas över så skickas det även 35

36 4. TECKENREPRESENTATION Varf r blir det sõ hõr? s å [SPC] h ä r s Õ [SPC] h õ r Figur 4.1: Exempel på fel. En text är skriven med vissa koder, men tolkas utifrån andra koder. I detta fall är det Latin-1 som tolkats som CP850. med en etikett som talar om vad det är för slags text så att mottagaren vet hur det ska tolkas. Normalt ordnar sig sådant automatiskt, men ni kan ändå då och då stöta på tillfällen när ni måste kunna hantera detta själva. Även filnamn med åäö eller andra»konstiga«tecken kan orsaka problem när man skickar dem mellan datorer om de inte använder samma teckenkodning. 4.4 ASCII En traditionell teckenkodning med stor genomslagskraft är ASCII (American Standard Code for Information Interchange). Med beteckningar från IANA kan den bland annat kallas ASCII eller US-ASCII. (Det finns ofta flera IANA-namn på samma teckenkodning.) Den omfattar koder från 0 till 127 och visas i figur 4.2. ASCII är en amerikansk och internationell standard från 1960-talet (dagens version är i praktiken ekvivalent med den från 1968) som snabbt antogs av de flesta och som fortfarande används ofta. 4.5 Kontrolltecken och nyrad Även i en ren textfil finns det ofta mer än bara grafiska tecken med utseenden som hämtas från en visst font. De består ju ofta av flera rader, och då måste även nyrad representeras på något sätt. Sådana och andra»tecken«som inte motsvarar något grafiskt tecken som kan skrivas ut på papper eller på en skärm kallas för kontrolltecken. De har istället någon annan betydelse när en text lagras i en fil, när tecken ska skickas från en terminal till en dator eller från en dator till en terminal eller liknande. I ASCII är tecken 0 31 samt 127 kontrolltecken. Några har effekten att flytta på markören. Här är de viktigaste: 9, [HT] = Horizontal tabulation:»advances the active position to the next predetermined character position on the same line«(= TAB) 10, [LF] = Line feed:»advances the active position to the same character position of the next line«13, [CR] = Carriage return:»moves the active position to the first character position on the same line«med beskrivningarna ovan behövs två»tecken«för att en text ska fortsätta på början av nästa rad: [CR] och [LF]. [CR] (vagnretur) för att börja skriva på början av raden och [LF] (radframmatning) för att gå fram till nästa rad. De brukar ges i just den ordningen [CR] + [LF] och kombinationen kallas ibland tillsammans för CRLF. I Unix används dock bara ett tecken, [LF], för att börja på en ny rad, så man har tolkat om detta teckens betydelse. Det brukar då kallas för newline och betecknas ibland som \n. MS Windows använder däremot det traditionella [CR]+[LF] och det brukar även krävas vid kommunikation mellan datorer på nätet. 1 Dessutom är det vanligt i en del sammanhang att en sådan kod som ursprungligen används för att beteckna ny rad (oavsett vilken variant man använder) istället används för att indikera nytt stycke medan man låter rader brytas automatiskt. Dessa skillnader gör att vanliga textfiler kan skilja sig åt mellan olika system även om båda använder ASCII. Kontrolltecknet [HT] ovan kallas oftare för TAB och har en egen tangent på tangentbordet. (Se avsnitt 3.7.) Ett annat kontrolltecken som har en egen tangent är [ESC] (Escape, tecken 27) som används till många olika saker. I övrigt kan man skicka kontrolltecken från terminalen genom att använda Ctrl-tangenten. Med Ctrl-A skickar man tecken 1, Ctrl-B ger tecken 2, osv., och i en del sammanhang betecknas dessa tecken med ^A, ^B osv. Eftersom J är den tionde bokstaven är alltså ^J tecken 10, dvs. [LF] (line feed, newline). Om man vill lägga in ett kontrolltecken i en fil i Emacs räcker det inte med att bara trycka så. Om man trycker t. ex. C-a så betyder det istället att gå till början av raden, osv. Då får man lov att använda kommandot C-q (med q som i»quote«) före tecknet, så med C-q C-a lägger man in kontrolltecken nummer 1, osv. 1 I Mac-världen användes förr istället endast [CR] för denna funktion, men eftersom Mac OS X är en Unix så använder moderna Mac-datorer också [LF]. 36

37 4.6. Latin ! 34 " 35 # 36 $ 37 % 38 & 39 ' 40 ( 41 ) 42 * , / : 59 ; 60 < 61 = 62 > 63? 65 A 66 B 67 C 68 D 69 E 70 F 71 G 72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O 80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W 88 X 89 Y 90 Z 91 [ 92 & 93 ] 94 ^ 95 _ a 98 b 99 c 100 d 101 e 102 f 103 g 104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o 112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w 120 x 121 y 122 z 123 { } 126 ~ 127 DEL Figur 4.2: ASCII-tecken Kod 32 är mellanslag. Kod 127 är inte ett egentligt tecken utan»kontrolltecknet«delete. Även kod 0 till 31 är olika kontrolltecken som inte visas här ª 171 « ± µ º 187» 188 ¼ 189 ½ 190 ¾ À 193 Á 194 Â 195 Ã 196 Ä 197 Å 198 Æ 199 Ç 200 È 201 É 202 Ê 203 Ë 204 Ì 205 Í 206 Î 207 Ï 208 Ð 209 Ñ 210 Ò 211 Ó 212 Ô 213 Õ 214 Ö Ø 217 Ù 218 Ú 219 Û 220 Ü 221 Ý 222 Þ 223 ß 224 à 225 á 226 â 227 ã 228 ä 229 å 230 æ 231 ç 232 è 233 é 234 ê 235 ë 236 ì 237 í 238 î 239 ï 240 ð 241 ñ 242 ò 243 ó 244 ô 245 õ 246 ö ø 249 ù 250 ú 251 û 252 ü 253 ý 254 þ 255 ÿ Figur 4.3: Tecken i Latin-1. Tecken 160 är nbsp = non-breaking space. Tecken 173 är shy = soft hyphen en möjlig avstavningspunkt där»-«ska visas om det blir avstavning där, men som annars inte syns. Tecken är kontrolltecken, och visas inte här. 4.6 Latin-1 I ASCII finns bara ungefär de tecken som finns på en amerikansk skrivmaskin och alla tecken har koder från Eftersom det kan finnas värden i varje byte så finns det plats för dubbelt så många olika tecken när man lagrar text i en fil. Latin-1 är en utökning där man även använder koderna till mer tecken. Den är tänkt att innehålla sådana tecken som behövs för västeuropeiska språk som skrivs med latinskt alfabet. De tecken som lagts till den visas i figur 4.3 och där ingår t. ex. svenska åäö. 4.7 ISO = UCS Unicode Men det finns ju fler alfabeten, som det ryska och det arabiska. Och andra skriftsystem med stavelsetecken och ideografiska tecken. Numer har teckenkodningen Unicode tagit över allt mer, såväl under Unix som Microsoft Windows och annars. Med det är det tänkt att man ska kunna skriva alla naturliga språk (levande och döda), samt dessutom en stor mängd matematiska och andra symboler. Egentligen finns det två olika projekt: Det ena är en standard från standardiseringsorganisationen ISO: UCS = Universal Character Set, eller ISO Det andra är Unicode från ett konsortium av datorföretag. De båda standarderna har dock anpassat sig till varandra, så i de flesta bemärkelser är det numer samma sak och det är Unicode som det oftast talas om. Standarden utökas eftersom både med gamla tecken och helt nya tecken. Nuvarande versionen Unicode 9.0 släpptes t. ex. i juni i år, och innehåller nya tecken jämfört med förra versionen, med sex ytterligare skriftsystem och en del nya emojis. Unicode har nu totalt över tecken och det finns plats för drygt en miljon tecken. Kod är som för Latin-1 (så är som för ASCII). Förutom den numeriska koden innehåller Unicode även bland annat Ett namn för varje tecken (som LATIN CAPI- TAL LETTER A WITH RING ABOVE, ARABIC QUESTION MARK och HEXAGRAM FOR DIF- FICULTY AT THE BEGINNING) Information om vad för slags tecken de olika tecknen är (alfabetiska, siffror, interpunktion,... ) Information om vilka tecken som skrivs från höger till vänster och vilka som skrivs från vänster till höger Information om vilka tecken som motsvarar varandra som små och stora bokstäver Ibland betecknas tecknen med»u+«och tecknets hexadecimala kod. Tecknet, med namnet LESS-THAN OR EQUAL TO, är t. ex. tecken nummer åttatusen åttahundra fyra, men oftare betecknar man det hexadecimalt som U+2264 istället för UTF-8 Eftersom det finns långt fler än 256 tecken krävs det flera bytes per tecken. Detta är ett skäl till att 37

38 4. TECKENREPRESENTATION text: H a l l å! [SPC] namn: LATIN CAPITAL LETTER H LATIN SMALL LETTER A LATIN SMALL LETTER L LATIN SMALL LETTER L LATIN SMALL LETTER A WITH RING ABOVE EXCLA- MATION MARK SPACE WHITE SMILING FACE unicode: utf8: Figur 4.4: Den korta texten»hallå! «lagras med UTF-8. Olika tecken tar olika mycket plats att lagra. Varfà r blir det sã hã r? text: s å [SPC] h ä r unicode: utf8: latin-1: text: s à [SPC] h à r Figur 4.5: Exempel på teckenkodningsfel där en text skriven med UTF-8 tolkas som om det vore Latin-1. Unicode är besvärligare att hantera än t. ex. ASCII och Latin-1. För att spara utrymme så lagrar man ofta Unicode-text på ett sådant sätt så att olika tecken tar olika mycket plats att lagra. Det finns flera sätt att göra detta, varav ett heter UTF-8. Där tar tecken mindre plats att lagra ju lägre kod de har: Kod 0 127: 1 byte (ASCII) Kod : 2 bytes Kod : 3 bytes Kod : 4 bytes Om en fil bara innehåller ASCII-tecken (kod 0 127) så blir det alltså precis likadant med US-ASCII som med UTF-8. Kommunikation över Internet använder allt oftare UTF-8. I december 2007 blev UTF-8 det vanligaste sättet att koda texter på webben, och i början av 2010 hade det kommit upp till hälften av alla webbsidor, enligt interna data från Google. I figur 4.4 ges ett exempel på hur en kort text (åtta tecken) kan lagras där olika tecken tar upp olika många bytes. Det som tar mest plats tar upp tre bytes. Det är nästan bara väldigt ovanliga ideografiska tecken och utdöda skriftsystem som har så höga koder att de behöver fyra bytes med UTF- 8. Om man ser text som ser ut»sã hã r«istället för»så här«så är det på grund av trassel med teckenkodning. Så ser UTF-8-text ut om den tolkas som Latin-1. Se figur 4.5! Observera att bokstäverna a z ser likadana ut (de ingår ju i ASCII) medan åäö lagras i två bytes var med UTF-8 och dessa två bytes har här felaktigt tolkats som något helt annat. 4.8 Övriga teckenkodningar Innan Unicode slog igenom användes en mängd olika teckenkodningar i olika sammanhang. Det fanns vissa som bara användes för att hantera rysk text, vissa bara för japansk text, osv. Än idag används inte Unicode genomgående, så ni kommer då och då behöva hantera annat. Nästan alla bygger på ASCII, så man kan vara rätt säker på att»a«är kodat som 65,»B«som 66 osv. i nästan alla sammanhang, trots att det- 38

39 4.9. Vad är olika tecken? ta egentligen är rätt godtyckligt och hade kunnat vara på något annat sätt. Här tas bara några av de vanligare upp ISO 8859-* Latin-1 heter egentligen ISO och är bara en av en hel serie standarder från ISO som heter ISO , ISO ,... ISO Hos IANA finns dessa registrerade som ISO , ISO osv. De är alla utökningar av ASCII som använder koderna till ytterligare tecken. Så som ISO är tänkt för västeuropeiska språk har de övriga andra inriktningar. T. ex. är ISO till för sydeuropeiska språk och ISO för arabiskt alfabet. Att ISO kallas för Latin-1 är för att det är den första av dem som är till för språk med latinskt alfabet Microsoft Windows Microsoft har använt en del egna utökningar av ISO-8859-familjen. Den viktigaste av dessa är windows-1252 som bygger på Latin-1. Den innehåller alla skrivtecken som Latin-1 gör, men ersätter en del av kontrolltecknen med ytterligare skrivbara tecken, t. ex. C,,, ž och Ÿ, som inte finns med i Latin-1. Den kallas ibland även för WinLatin1, men windows-1252 är det enda namn för denna teckenkodning som Microsoft har registrerat hos IANA. I MS Windows-världen kallas denna teckenkodning märkligt nog ibland för»ansi«(såsom den amerikanska standardiseringsorganisationen American National Standards Institute), trots att det inte är någon ANSI-standard! Eftersom den liknar Latin-1 så mycket finns det risk för sammanblandning. Ibland sprids filer från MS Windows-världen med felaktiga etiketter som påstår att texterna är skrivna med Latin-1 fast det egentligen är windows-1252 vilket kan ställa till med problem. 4.9 Vad är olika tecken? Det är inte i första hand det grafiska utseendet som avgör vad som ska räknas som varianter av samma tecken eller som ska räknas som olika tecken. T. ex. är a och a samma tecken (I Unicode LATIN SMALL LETTER A, tecken 97) trots att de ser olika ut. Däremot är svenska A och grekiska A olika tecken (tecken 65: LATIN CAPITAL LETTER A respektive tecken 913: GREEK CAPITAL LETTER figur 4.6 Figur 4.6: Figur 4.6 ALPHA) trots att de (beroende på typsnitt) kan se likadana ut. (Att de är olika märks om inte annat på motsvarande gemena bokstäver a och α.) Samma tecken kan också se olika ut i olika positioner i texten. Ett f följt av ett i blir t. ex. ofta en sammanhängande ligatur fi (se uppförstoringen i figur 4.6), men det räknas ändå som två olika tecken. Många arabiska bokstäver har olika former beroende på om de kommer i början, mitten eller slutet av ett ord. Termen glyf används ibland för ett specifikt grafiskt utseende, till skillnad från den mer abstrakta termen tecken Samma tecken i ASCII Med Unicode görs minst lika mycket skillnad på olika tecken som görs när man sätter text i tryck. Men i ASCII finns inte lika många särskillnader. Där finns t. ex. bara ett tecken - trots att man i tryck skiljer på olika långa sådana streck t. ex. i abc-bok (kortare bindestreck) och kl (längre intervalltecken). Ett annat exempel är citattecken. På t. ex. engelska så används olika citattecken före och efter citat. Det kan se ut like this eller like this. Hur skillnaden ser ut skiljer sig åt i olika typsnitt. I figur 4.7 finns ett par rätt olika exempel. På skrivmaskiner nöjde man sig dock med raka neutrala citattecken som skulle gå lika bra att använda både före och efter, och så är det i ASCII och t. ex. Latin-1 också: "like this" eller 'like this'. (Citattecknen är tecken 34 och 39 i figur 4.2.) I ASCII finns det dock även grav accent (tecken nummer 96 i figuren). Ibland kan man stöta på text som använder den som citatstart så det är skrivet `like this'. Detta ser rätt skevt ut, och är inte att rekommendera, men förr fanns det en hel del fonter där tecknet ' inte var rakt, utan vinklat, så då såg det helt OK ut. quote quote Figur 4.7: Hur tecknen för startcitat och slutcitat skiljer sig åt skiljer sig i olika typsnitt. De två exemplen här är Helvetica och Palatino. 2 Utom ISO som inte finns. 39

40 4. TECKENREPRESENTATION En apostrof, som i»don t«är samma tecken som ett slutcitattecken. I Unicode beskrivs tecknet som RIGHT SINGLE QUOTATION MARK, men det används även för apostrof. På svenska kan för övrigt detta tecken användas både före och efter citat: så här. Programspråk använder sällan tecken utanför ASCII i speciella betydelser, så källkod till program innehåller vanligtvis bara ASCII utom kanske i textsträngar och kommentarer Språkinställningar En fil med vanlig text har i allmänhet ingen information i sig om vilken teckenkodning den använder. En fil med två bytes, 241 och 214, kanske är en Latin1-fil med texten»ñö«, eller kanske en ISO fil med de grekiska bokstäverna»ρϕ«eller kanske en ISO fil med de kyrilliska bokstäverna» ж«3 eller något helt annat! Program som gör något med textfiler måste ofta veta vilken teckenkodning de är lagrade med. Om sort ska kunna sortera en fil med en sådan rad så spelar det ju t. ex. roll om första tecknet där är ñ vilket antagligen ska sorteras likadant som n. Dessutom måste de ibland veta vad det är för språk för att rätt kunna behandla en text. Dessa inställningar kallas för ens locale och man har standardinställningar för detta som gäller om man inte säger till om annat. Dessa inställningar kan även ändra vilket språk program ska använda i sin output ifall programmet har översatts till flera olika språk. Programmet läser av användarens språkinställningar och ändrar beteende utifrån det Språkinställning i Gnome Om du normalt vill att datorn ska prata svenska (eller något annat språk) med dig så kan du ställa om språk från inloggningsrutan innan du loggar in. (Du får en fråga om det bara är under just denna session du vill använda detta språk eller om du vill ändra så att detta blir det normala för dig.) Hur en locale ser ut En angivelse av locale kan se ut i stil med pt_br.iso vilket betyder brasiliansk portugisiska kodat enligt Latin-1. Först kommer en beteckningen för vilket språk det är. I förra kapitlet, på sidan 32, finns en lista över några av dessa språk. Till detta fogas även vilket land det gäller. Landskoderna kan man t. ex. känna igen från toppdomänerna på Internet där 3 Vilket betyder igelkott på ryska! Tabell 4.1: Koder enligt ISO för några av världens och Europas största länder, samt de skandinaviska länderna AZ BD BE BR BG CD DK EG ET PH FI FR GR IN ID IR IS IT JP CN MX NL Azerbajdzjan Bangladesh Belgien Brasilien Bulgarien Kongo-Kinshasa Danmark Egypten Etiopien Filippinerna Finland Frankrike Grekland Indien Indonesien Iran Island Italien Japan Kina Mexiko Nederländerna NG NO PK PL PT RO RU CH RS ES GB SE TH CZ TR DE US UA HU VN BY AT Nigeria Norge Pakistan Polen Portugal Rumänien Ryssland Schweitz Serbien Spanien Storbritannien Sverige Thailand Tjeckien Turkiet Tyskland USA Ukraina Ungern Vietnam Vitryssland Österrike.se är Sverige osv. 4 I tabell 4.1 återges en del av landskoderna. Dessa standarder är reglerade av den internationella standardiseringsorganisationen ISO. Både språk och land anges alltså. Några exempel: sv_se : Svenska i Sverige sv_fi : Finlandssvenska en_gb : Brittisk engelska en_za : Sydafrikansk engelska es_es : Spanska i Spanien es_ar : Spanska i Argentina fr_ca : Franska i Kanada zh_cn : Kinesiska i Kina zh_tw : Kinesiska i Taiwan Observera att språk och land inte nödvändigtvis har samma tvåbokstavsförkortning när orden är liknande. T. ex. har danska språket koden»da«och Danmark har»dk«. Till detta lägger man en punkt och en teckenkodning, t. ex..iso eller.utf8, så en fullständig locale kan se ut som sv_se.utf8. (Det finns även locales som har andra slags namn.) I många fall spelar det ingen roll vilket land man anger. Det är nog t. ex. knappast många program som beter sig olika om man har talat om att man vill ha rikssvenskt eller finlandssvenskt beteende. Det betyder inte att man kan sätta ihop 4 I det sammanhanget används dock inte förkortningen GB för Great Britain, utan.uk för United Kingdom, och.us används inte så mycket. 40

41 4.11. Olika teckenkodningar i Emacs lands- och språkbeteckningar hur som helst i en locale. Med kommandot locale -a listas alla giltiga locales Att sätta om locale temporärt Med LANG= locale kommando kan man utföra ett kommando med en annan locale än sin normala. I exemplen i figur 4.8 kan man se hur det påverkar både vanlig output och felmeddelanden. Ändrar man sin normala locale före inloggning kommer det alltså inte bara att påverka det grafiska gränssnittet, utan även vad skalkommandon skriver ut Sortering Hur text ska sorteras är språkspecifikt. På svenska sorterar vi åäö i slutet av alfabetet, medan t. ex. tyskarna som också använder ä och ö sorterar dessa som a och o. I uppgift 3.35 sorterade du svenska ord men med engelska språkinställningar fick du en sortering där åäö sorteras som aao i stil med hur vi sorterar tecken som éèêë likadant som vanligt e. Genom att sätta om LANG ändras dock även hur sort sorterar. Här sorteras samma rader två gånger, först på svenska och sedan på engelska: $ LANG=sv_SE.utf8 sort /tmp/fil citron zebra åsna äpple $ LANG=en_US.utf8 sort /tmp/fil äpple åsna citron zebra Sorteringsreglerna för en del språk kan vara rätt komplicerade. Ibland vill man sortera bara för att föra ihop likadana rader, och då är det onödigt att använda så komplicerade sorteringsregler som naturliga språk ofta har. Då kan man använda en särskild locale»c«vilket ger enklast möjliga sortering. Raderna jämförs bara byte för byte enligt de numeriska koderna. (Det innebär t. ex. att stora och små bokstäver sorteras olika.) Om det är en stor fil kan man märka att en sådan enklare sortering kan gå mycket snabbare När använda detta? I de flesta fall kommer du inte behöva bry dig om dessa språkinställningar. Du kommer knappast ha nån nytta av att köra wc på nederländska en specifik gång så att det står»totaal«i summeringsraden istället för»total«, utan det räcker med att en gång för alla tala om vilket språk du ha. Ett viktigt undantag är sortering. Du bör tänka på hur sorteringar sker och veta hur du kan ställa om LANG för att få olika sorteringar, inklusive den rent»datoriska«med LANG=C som inte tar hänsyn till något särskilt språks sorteringsregler. Det gäller förstås också att sätta teckenkodningen rätt! Om en fil är lagrad i Latin-1 betyder det bl. a. att koden 224 där betyder à och att koden 227 betyder ã. (Se figur 4.3!) Om dessa tecken ska sorteras likadant så måste sort till att börja med veta teckenkodningen. Annars har den ingen anledning att behandla 224 och 227 likadant Hur ett skalkommando ser ut Med denna nya ingrediens i skalkommandona är vår nuvarande sanning om hur de ser ut så här: Ett helt kommandorör består av en mängd kommandon avskilda av lodstreck ( ). Det första kommandot kan följas av < filnamn och det sista kommandot kan följas av > filnamn. Varje individuellt kommando i ett sådant kommandorör kan enligt tidigare se ut som kommandord väljare argument, men dessutom kan det alltså tillkomma LANG= nånting i början. Detta hör då bara till just det kommandot och inte till ett helt kommandorör. Om man i ett längre kommandorör vill ha en sortering med t. ex. locale C blir det alltså... LANG=C sort... och det är då bara sort som körs med annan locale än den normala. Kommandon tidigare och senare i kommandoröret påverkas inte Olika teckenkodningar i Emacs Emacs kan läsa och skriva filer med flera olika teckenkodningar. Ofta kan den gissa rätt på vilken teckenkodning en viss fil är skriven med. Alla buffertar i Emacs får innehålla vilka tecken som helst som Emacs kan hantera. Det är först när man försöker spara en fil som det krävs att alla tecken i bufferten finns med i den teckenkodning som man ska spara filen med. Om det inte är så talar Emacs om detta och låter en välja en annan teckenkodning. Man kan också tala om explicit vilken teckenkodning man vill använda innan man sparar genom att använda Options Multilingual Environment Set Coding Systems For Saving This Buffer. Till vänster i informationsraden anger Emacs vilken teckenkodning som i första hand ska användas när en viss buffert sparas till fil (1 = ISO , U = Unicode,... ). 41

42 4. TECKENREPRESENTATION $ ls xx ls: cannot access xx: No such file or directory $ LANG=fr_FR.utf8 ls xx ls: impossible d'accéder à xx: Aucun fichier ou dossier de ce type $ date Thu Sep 13 12:45:04 CEST 2012 $ LANG=es_ES.utf8 date jue sep 13 12:45:13 CEST 2012 $ LANG=fi_FI.utf8 wc *.txt ivt2-svenska.txt rummet.txt wonderland.txt yhteensä Figur 4.8: Några exempel på hur olika kommandon ger olika texter ifrån sig beroende på vilken locale som gäller. (I det sista exemplet märks skillnaden bara på»yhteensä«istället för»total«.) I samma meny finns även besläktade kommandon, t. ex. för att tala om uttryckligen vilken teckenkodning en fil har ifall Emacs gissar fel Att konvertera mellan teckenkodningar Ett program som konverterar mellan teckenkodningar är iconv. Det kan användas som iconv -f latin1 -t utf-8 foo.txt för att konvertera filen foo.txt från Latin-1 till UTF8 och skriva ut resultatet till standard output. Om man utelämnar argumentet tas input istället från standard input. Man kan ange namn på teckenkodningarna på lite olika sätt. Istället för»latin1«kan man skriva t. ex.»iso «eller»iso8859-1«. Default, dvs. vad som händer om man inte säger till om något annat, är att ens normala teckenkodning (enligt ens locale) används, så om man inte använder väljaren -f omvandlar iconv från ens vanliga teckenkodning, och om man inte använder väljaren -t omvandlar iconv till ens vanliga teckenkodning. Ett annat sätt att konvertera är att öppna filen i Emacs och så spara den igen efter att man ställt om teckenkodning Att skriva tecken i Emacs C-x 8 Om du behöver skriva in tecken som du inte hittar på tangentbordet så finns det flera Emacskommandon som börjar med prefixet C-x 8 och följs av ett eller flera tecken. Med C-x 8 / O kan man t. ex. skriva Ø och med C-x 8 L kan man skriva. I synnerhet finns C-x 8 RET med vilket man kan skriva vilka tecken som helst genom att ange deras Unicode-namn. Riktigt alla tecken finns inte i fonten som Emacs använder. Okända tecken visas som rutor med hexadecimala koder i Inputmetoder Om man vill skriva en hel text med något annat skriftsystem, som t. ex. ryska eller kinesiska tecken, så kan man använda en särskild inputmetod. Inputmetoden definierar vilka tecken som genereras när man trycker på olika tangenter. Funktionen Select Input Method finns i menyn Options Multilingual environment och där finner man även ett kommando för att beskriva en viss inputmetod (C-h I). Det finns olika slags inputmetoder. T. ex.: Prefix- och postfixmetoder där man framförallt kan skriva bokstäver med accenter genom att skriva något särskilt före respektive efter bokstaven. Inputmetoden german-prefix gör t. ex. så att "A genererar Ä men även så att "s genererar ß. Tangentbordslayouter. Om man t. ex. kan layouten på ett vanligt ryskt tangentbord, kan man använda inputmetoden cyrillic-jcuken för att tangenterna ska generera det tecken som tangenten på motsvarande position ger på ett ryskt tangentbord. Translitterering. Med cyrillic-translit trycker man t. ex. på tangenterna»shostakovich«för att skriva»xostakoviq«. 5 För att skriva ideogram, t. ex. kinesiska, finns det dels inputmetoder där man först anger ordets fonetik, dels sådana där man först 5 Detta följer en engelsk translitterering. På svenska skulle man oftast skriva»sjostakovitj«, och i vetenskapliga sammanhang translittererar man»šostakovič«. 42

43 4.14. Hos oss anger några av delarna i det grafiska tecknet. I båda fallen finns det i allmänhet flera möjliga tecken som kan passa in. Man får upp en lista över sådana från vilken man får välja Hos oss På våra GNU/Linux-datorer använder vi en_us.utf-8 som normal locale, dvs. amerikansk engelska kodad med UTF-8. 43

44 Inlupp 4: Teckenkodningar Redovisning När ett skalkommando efterfrågas ska du ge eventuell output från det kommandot också. Gör först cd introduktion-till-datateknik och ha sen den katalogen som aktuell katalog vid alla skalkommandon du ger i denna labb! Skicka svar i mail till Per. som sistaargument till cp för att kopiera den till aktuell katalog.) Öppna nu din kopia av filen i Emacs. Emacs känner igen vad det är för teckenkodning och visar därför alla bokstäver rätt. Uppgift 4.4 Vad är det för teckenkodning och hur kan du se i Emacs att det är det? Tecken och bytes Hittills har du bara räknat ord och rader med wc, men det kommandot kan även räkna tecken. Väljaren -c har traditionellt använts till detta, men eftersom den funnits med sedan urminnes tider så räknar den helt enkelt antal bytes, vilket var samma sak då. Uppgift 4.1 Ge ett kommando för att räkna antal bytes i filen konto.txt som ligger i din hemkatalog. (Missa nu inte vad som står om aktuell katalog i reglerna under Redovisning ovan! Du ska inte stå i den katalog där den filen ligger, men ändå skriva en korrekt relativ sökväg.) Med nyare kodningar som UTF-8 kan antalet bytes och tecken skilja, så i operativsystemet GNU har wc fått en ny väljare som förstår sig på sånt och verkligen räknar tecken (characters). Se efter med wc --help vad den väljaren heter. Uppgift 4.2 Ge ett kommando som räknar antal tecken i den där filen konto.txt. Uppgift 4.3 Hur stor skillnad blev det i bytes och tecken? Varför just så stor? Vad är det det finns så många av? Teckenkodningar i Emacs Det finns en textfil i katalogen ~ellen/ fotografier. Gör cat på den i skalet. (Använd komplettering för att se vad filen heter.) Några tecken kommer inte att visas rätt, eftersom den filen inte är kodad enligt UTF-8. Kopiera den filen till din kurskatalog. (Använd».«Härnäst gör du Options Multilingual Environment Set Coding Systems For Saving This Buffer (eller använder motsvarande kortkommando C-x RET f) för att ange vilken teckenkodning du vill att denna fil ska ha och svarar utf-8. Spara filen. Du har nu omvandlat den filen till UTF-8. (Kolla för säkerhets skull med cat i terminalen också.) Öppna /local/kurs/ids/rysk.txt i Emacs. Som man kan gissa av namnet så innehåller den en text på ryska med kyrillisk skrift. Emacs gissar dock fel på vad det är för kodning av den filen så tecknen ser inte alls ryska ut. I ett sånt här läge finns det ett särskilt kommando för att genast öppna om samma fil men då tala om vad det är för teckenkodning i den. Sök upp det kommandot i Emacs-menyerna i samma meny som nyss. Använd det kommandot för att öppna om denna fil. Ange den teckenkodning i ISO 8859-serien som är till för kyrillisk skrift. Sök upp information på nätet om vilken teckenkodning det är. Uppgift 4.5 Vad heter den teckenkodningen och var hittade du information om den? Uppgift 4.6 Hur visas den teckenkodningen i informationsraden i Emacs? Uppgift 4.7 Sök upp första ordet i den filen i Google. Vad heter denna figur på svenska? (Du kan t. ex. använda dig av Wikipedia, där det i vänsterspalten finns länkar till motsvarande sidor på andra språk. Öppna härnäst filen /local/kurs/ids/small. txt. Här är det flera tecken som inte visas som det var tänkt. Det står nånting om latin-1 i texten. Normalt så har du sett att Emacs känner igen sånt av sig självt, men kanske inte i detta fall? Öppna om filen som en latin-1-fil istället. 44

45 Inputmetoder i Emacs Uppgift 4.8 Hur gjorde du det? Det torde bli klart läsligare, men inte helt. Uppgift 4.9 Det är ett tecken som fortfarande inte är rätt. Hur visas det i Emacs-bufferten nu? (Det blir inte bra om du kopierar tecken till ditt svar. Då får du samma tecken där också, men det kanske visas på något helt annat sätt i det program jag läser ditt mail med. Så skriva av beteckningen istället.) Det saknade tecknet var tänkt att vara ett C, som inte finns i latin-1! Tydligen är denna fil inte kodad med Latin-1 trots allt, utan med en teckenkodning som är ungefär som Latin-1. (Och det förklarar att Emacs inte kände igen det som Latin-1.) Uppgift 4.10 Nästa gissning är att filen är kodad med en vanlig teckenkodning under Microsoft Windows som liknar Latin-1. Vad heter den? Prova denna gissning genom att öppna om filen på det sättet. Detta stämde visst. Uppgift 4.11 Hur visas denna teckenkodning i informationsraden i Emacs? Inputmetoder i Emacs Öppna en ny fil uttal.txt där du ska skriva en kort fonetisk skrift med uttalsangivelser enligt IPA, nämligen»længwidz«(= language). Några av tecknen finns inte på tangentbordet. Lös detta genom att ange en särskild inputmetod i Emacs med Options Multilingual Environment Select Input Method. Välj metoden ipa. Att du har detta aktiverat visas med IPA i informationsraden. Nu tolkar Emacs det du skriver på ett lite speciellt sätt som ska underlätta att skriva IPA. T. ex. kan tecknet æ skrivas med»ae«. Med C-h I (versalt I!) får du en beskrivning av en inputmetod. Tryck på retur för att få just denna inputmetod beskriven så får du veta hur du kan skriva de övriga speciella tecknen i denna text. Märk medan du skriver att det i ekoarean framgår vad det finns för möjligheter. Mer tecken i Emacs Om man placerar markören på ett visst tecken i Emacs kan man få information om det tecknet med C-u C-x = (tre tecken). I informationen man får upp står bland annat tecknets namn. C-x C-+ C-x C-- C-x C-0 Zooma in Zooma ut Normalläge Figur 4.9: Zoomkommandon i Emacs. Den sista är med siffran 0, inte bokstaven O. Uppgift 4.12 Hur lyder den information du får upp om det där sista tecknet i förra uppgiften (Z) när du använder detta? Öppna en ny fil vinter.txt (i kurskatalogen) och skriv»snögubbe:«där. Använd C-x 8 RET för att därefter skriva Unicode-tecknet SNOW- MAN. Spara filen. Om du inte är mycket skarpsynt så har du användning för kommandon i figur 4.9 för denna uppgift: Uppgift 4.13 Hur många knappar har snögubben och hur många snöflingor är det? Kör i skalet ett kommando od -c vinter.txt som visar innehållet i filen, byte för byte. ASCIItecken visas som tecken och övrigt visas som tal (skrivna oktalt). Uppgift 4.14 Hur många bytes behövs för bokstaven ö? (Dvs. hur många bytes ligger mellan n och g som tar en byte var?) Hur många bytes behövs för snö- Uppgift 4.15 gubben? Uppgift 4.16 iconv Sist kommer \n. Vad betyder det? Uppgift 4.17 Ge ett iconv-kommando för att direkt skriva ut Ellens fil i uppgift 4.4 kodad med UTF-8 i terminalen. (Använd hennes oförändrade original inte din kopia.) Filen /local/kurs/ids/nordic-authors.txt innehåller namnen på några nordiska författare, listade en per rad med efternamn först. Uppgift 4.18 den filen? Vilken teckenkodning använder Uppgift 4.19 Ge ett skalkommando som sparar en ny fil authors.txt som innehåller /local/ kurs/ids/nordic-authors.txt omvandlad till UTF-8. (Om du har gjort rätt ska filen se rätt ut t. ex. om du tittar på dess innehåll med cat.) 45

46 INLUPP 4: TECKENKODNINGAR Olika locale Se noga upp med att du skriver locale-namnen rätt i dessa uppgifter! Skriver man fel blir det inget felmeddelande, utan bara ett felaktigt resultat! Uppgift 4.20 Uppgift 4.21 Vad är koden för landet Sverige? Vad är koden för språket svenska? Uppgift 4.22 Vad blir därmed en fullständig locale för svenska i Sverige skrivet med UTF-8? Uppgift 4.23 Med locale -a kan man lista alla giltiga locales. Hur många sådana finns det? Uppgift 4.24 Vilka giltiga locales finns det för USA här? Vilka språk använder dessa? Uppgift 4.25 Sverige här? Vilka giltiga locales finns det för Uppgift 4.26 Ge ett kommando för att visa din nya fil authors.txt sorterad med svensk locale. På svenska har traditionellt v och w sorterats som samma bokstav, men numer vacklar bruket. Senaste upplagan av Svenska Akademiens ordlista sorterar w för sig, som en egen bokstav, men ibland samsorteras fortfarade v och w, i synnerhet för namn. Uppgift 4.27 Hur beter sig svensk sortering här vad gäller v och w? Uppgift 4.28 Ge ett kommando för att sortera samma författarlista med dansk sortering! Vilka skillnader blir det då jämfört med svensk sortering? Du har sedan förra kapitlet en fil rummet.words i din kurskatalog. Uppgift 4.29 Ge ett kommando som ger en lista över de tio sista orden i en svensksorterad lista över raderna i rummet.words, samt resultatet. Några rader där är dubbletter. Det finns ett kommando uniq som man kan använda som filter för att ta bort dubblettrader som kommer efter varann i en input. Uppgift 4.30 Ge ett kommando som sorterar raderna i rummet.words (på svenska), tar med varje ord bara en gång, och listar de tio sista orden av detta. (Visa som vanligt både ditt kommando och dess resultat.) I den listan ska inga dubbletter finnas. (Däremot kan samma ordform finnas som två olika ordklasser. Då är ju raderna inte dubbletter!) Uppror! Uppror! är en science fiction-roman från 1975 av pseudonymen Ferdinand Fitzschkloff. 6 Den sprids med författarens godkännande på http: //runeberg.org/uppror/ på webben. Gå dit i en webbläsare och välj (download) (långt ner på sidan) och sen All OCR-text för att ladda ner en textfil uppror.txt med bokens innehåll. Välj»Save File«istället för att öppna den i Emacs. Dessa filer är skapade med OCR (Optical Character Recognition) från inskannade boksidor, så det kan ha blivit fel ibland. Flytta denna uppror.txt till din kurskatalog och öppna den sedan i Emacs. Precis efter det U på informationsraden som anger Unicode står här (DOS). Det visar att denna fil har nyradstecken så som DOS och MS Windows gör, dvs. med CRLF. 7 Genom att klicka med musen på detta»dos«så byter du vilken nyradskonvention du vill ha i filen. Prova det! Uppgift 4.31 Vad står det då istället för»dos«? Vad betyder det? Klicka igen. Då ska den parentesen helt försvinna och ersättas med bara ett kolon. Då har du ställt in att du vill ha normala nyrader (som i Unix) i den filen. Eftersom filen på disk inte är sån så räknas den bufferten som osparad. Spara den. Uppgift 4.32 När du sparade filen ska du ha fått det gamla innehållet sparat i en backupfil. Kontrollera att du har den. Vad heter den? Uppgift 4.33 Ge ett kommando som talar om hur många bytes det är både i din nya uppror.txt och den backupfil som skapades (som har kvar de gamla nyraderna). (Använd ett jokeruttryck.) Kan du förklara varför skillnaden blev just så stor? Uppgift 4.34 Hur lyder den första raden i uppror.txt som innehåller texten»special«? Ge kommando som tar fram detta, samt kommandots resultat. Kontrolltecken Ett exempel på kontrolltecken i ASCII är tecken nummer 27 = Escape = [ESC]. Man kan lägga in det tecknet i en buffert i Emacs genom att trycka C-q ESC. Kommandot C-q läser nämligen in ett tecken och lägger in det i bufferten, även om det är ett sådant tecken 6 = Gunnar Gällmo. 7 Om man tittar på samma fil i Emacs under MS Windows skulle det inte stå nåt särskilt, för då skulle det vara det normala. Däremot skulle Emacs skriva (Unix) där för filer som bara har [LF] för nyrad. 46

47 Kontrolltecken Figur 4.10: Ett par vikare, tagna från Wikipedia, som i sin tur har tagit bilden från The Fisheries and Fisheries Industries of the United States av George Brown Goode (1887). som normalt skulle ha en annan betydelse q i C-q står för quote. (Normalt så har ESC istället effekten att fungera som Meta- till nästa tecken i Emacs, så ESC > är som M->.) Öppna en ny fil konstig.txt i Emacs och skriv där ett ESC-tecken följt av exakt [42m (fyra tecken till efter ESC-tecknet). Uppgift 4.35 Hur visas det ESC-tecknet i Emacs? Prova att förflytta dig tecken för tecken över detta speciella tecken för att se att det verkligen är ett tecken där. Uppgift 4.36 Prova cat konstig.txt i en terminal. Vilken effekt hade den konstiga raden för terminalfönstret? Detta är ett exempel på specialfunktioner som kontrolltecken kan ha, i detta fall med på hur terminalen beter sig. * * * Kopiera /local/kurs/ids/djur.txt till din kurskatalog och öppna den i Emacs. Där står två kolumner med djurnamn med ett TAB-tecken mellan sig. I den sista raden är första ordet så långt så att andra kolumnen visas längre till höger, men där som på de övriga raderna är det bara ett TAB-tecken mellan kolumnerna. Med cut -f 2 djur.txt får du ut bara de svenska namnen. Skriv till»fox«+ TAB +»räv«. Uppgift 4.37 Hur många TAB-tecken lades in när du tryckte på TAB? Uppgift 4.38 Ge exempel på något cutkommando som nu inte ger önskat resultat. Emacs vet inte att detta var tänkt att bli en fil med TAB-kolumner, utan gör som den brukar med TAB-tangenten, dvs. går fram till»nästa ställe«(beroende på hur raden ovan ser ut) oavsett hur många tecken som den behöver lägga in i bufferten för att komma dit. För att verkligen lägga in exakt ett TAB-tecken behöver du använda C-q igen. Lägg till två till rader med djur:»ringed seal«=»vikare«och»bat«=»fladdermus«. Fixa till så att alla rader stämmer och kolla så att cut -f 2 djur.txt ger alla svenska namn (och inget annat). Uppgift 4.39 Om du använder det där Emacskommandot för att lägga in ett tecken (som t. o. m. kan vara ett kontrolltecken) i en buffert till att lägga in RET (retur), hur visas det tecknet då i bufferten? Uppgift 4.40 Varför just så? Var står det om detta i kompendiet? Uppgift 4.41 Tryck M-x i Emacs. Då hamnar du i minibufferten och får skriva namnet på ett Emacskommando där. Skriv»whitespace-mode«(du kan använda komplettering) och avsluta med RET. Vad verkar detta ha för effekt? 47

48 INLUPP 4: TECKENKODNINGAR Snart slut Uppgift 4.42 Klipp ut de svenska namnen från din djur.txt och avstava dem med avstava från förra kapitlet. Ange såväl ditt kommando som dess resultat. Uppgift 4.43 Ge ett skalkommando som lägger texten»räksmörgås«i en ny fil shrimp.txt kodad enligt Latin-1. Om du gjort rätt ska du t. ex. kunna titta på den på samma sätt som i uppgift Uppgift 4.44 Hur många tecken är det på den näst sista raden i /local/texts/jabberwocky? Ge skalkommando och dess resultat. Uppgift 4.45 Räkna för hand också för att se att din lösning till förra uppgiften stämmer. Hm, är det inte ett ifrån? Hur kommer det sig? Uppgift 4.46 Hitta på en uppgift som kan lösas genom att kombinera minst två kommandon som vi har haft med hittills i ett rör. Lös din egen uppgift. Om du vill kan du använda dig av vilka filer som helst i din kurskatalog eller i /local/kurs/ ids/ som input. (Trots att detta kapitel handlar om teckenkodningar behöver den sista uppgiften inte ha med sånt att göra.) 48

49 Kapitel 5 Dokumentation och textbearbetning i skalet 5.1 Dokumentation Även när det finns bra dokumentation till program, vilket tyvärr inte alltid är fallet, är inte alltid lätt att veta var man ska finna den. Det finns olika system för hur program som vara dokumenterade. För större interaktiva program som Firefox eller Emacs väntar man sig i första hand att finna en hjälpfunktion inne i programmet för att få hjälp eller för att få läsa dokumentationen, och man kan leta efter en hjälpmeny. För ett kommando för kommandoraden som cat eller ls har du tidigare sett att det är standard i GNU att de skriver ut en hjälptext om de får en särskild väljare --help, men den huvudsakliga dokumentationen finns istället separat Info I GNU, som vi kör, skrivs sådan dokumentation i ett format som heter Texinfo, från vilket man kan producera bland annat tryckta böcker och Info, som enklast läses i Emacs. Det är ett slags hypertext, dvs. texter med länkar till andra texter (i stil med webben) man-sidor Det traditionella Unix-sättet att dokumentera program man kör i skalet är istället med man-sidor och en del program som du använder kommer bara vara dokumenterade på det sättet. Man-sidor är linjära texter med början, mitten och slut, utan länkar. Även program som har dokumentation i Info brukar ofta ha man-sidor också, men då är oftast dokumentationen i Info både utförligare och lättare att förstå. Det finns ett uppslag (en man-sida) för varje program, systemanrop, osv., och ett kommando man med vilket man tittar på dessa. För att se man-sidan för programmet cat ger man t. ex. kommandot man cat. I figur 5.1 visas en uråldrig man-sida, nämligen den för wc i Unix version 7, från 1979! Den visar flera kännetecken för man-sidor. De är indelade i olika standardiserade avsnitt här ses name, synopsis, och description. Andra avsnitt som också ofta förekommer är bl. a. see also med hänvisningar till annan dokumentation, author för att ange programmets författare, history för att säga något om programmets historia och bugs för att ange kända hittills ofixade fel i programmet. Detta är en ovanligt kort man-sida, framförallt för att det finns så få väljare. Många kommandon har många väljare som behöver varsin längre förklaring Kommandosyntax Avsnittet synopsis behöver du kunna tolka, och där används samma konventioner som ni sett tidigare i avsnitt 3.9 på s. 28. Eftersom både -lwc och name... står inom hakparenteser i figur 5.1 behöver de inte vara med, så det kortaste anropet av kommandot är bara wc. (Att använda wc utan argument är rimligt att göra som en del i ett kommandorör, då input hämtas från standard input.) Punkterna visar att det kan förekomma flera förekomster av det som står före punkterna. Man kan alltså köra programmet som wc name eller wc name name eller ha ännu fler namn. Att dessa namn ska vara namn på filer framgår i den följande beskrivningen. Beteckningen -lwc visar i kompakt form att väljarna -l, -w och -c finns tillgängliga så att en eller flera av dessa kan användas. Ofta listas inte väljarna upp i synopsen, utan det står bara [OPTION]... där, och så listas de olika möjliga väljarna upp i beskrivningen istället. Dessutom kan tecknet användas för att visa alternativ och {} som parenteser. 49

50 5. DOKUMENTATION OCH TEXTBEARBETNING I SKALET WC(1) WC(1) NAME wc - word count SYNOPSIS wc [ -lwc ] [ name... ] DESCRIPTION Wc counts lines, words and characters in the named files, or in the standard input if no name appears. A word is a maximal string of characters delimited by spaces, tabs or newlines. If the optional argument is present, just the specified counts (lines, words or characters) are selected by the letters l, w, or c. WC(1) Figur 5.1: Man-sidan för wc i Unix v7 (1979) Istället för att t. ex. ge två synopsrader till ett kommando, som Usage: cp [OPTION]... SOURCE DEST or: cp [OPTION]... SOURCE... DIRECTORY kan man till exempel ge samma information på en rad, med uttrycket cp [OPTION]... { SOURCE DEST SOURCE... DIRECTORY } Bläddring Oftast är man-sidan flera sidor lång och man får då bläddra fram en sida i taget. Man kan bläddra framåt med mellanslag och avsluta med q. Mer hjälp om bläddringen får man med h. 5.3 cut Ibland vid textbearbetning använder man textfiler där varje rad består av flera fält. Med kommandot cut kan man plocka ut ett eller flera fält därifrån. Fälten avdelas av ett visst tecken. Normalt är det TAB-tecknet, men man kan använda ett annat tecken och ge en väljare till cut som talar om vilket tecken som används. Vilket eller vilka fält den ska skriva ut visar man med väljaren -f med argument. Fälten är numrerade från vänster till höger så att det första fältet är fält 1. (Det går också att plocka ut vissa tecken från en rad istället för vissa fält, t. ex. tecken 4 6. Se dokumentationen om du behöver detta!) Se även paste! 5.2 Skalkommandon för texthantering I avsnitt finns en genomgång av några skalkommandon som gör saker med texter. Här är en del som tillkommit sedan dess, och en del nytt. De flesta av dessa program är radorienterade, dvs. behandlar sin input en rad i taget. Det man vill sortera med sort ska t. ex. ligga uppdelat en enhet per rad. Kommandon som läser text från standard input brukar oftast tolka argument som filnamn och om de får argument så läser de input från dessa filer istället. Detta gäller t. ex. cut, head, more, sort, tail, uniq och wc. 5.4 echo Kommandot echo ger tillbaka sina argument som output: echo text... Det kan vara praktiskt när man vill ge en specifik text som input till ett kommando utan att behöva skapa en fil med den texten. Med väljaren -e tolkas vissa sekvenser som börjar med bakstreck speciellt, i synnerhet kan man då skriva nyrad med \n (som i newline). $ echo -e 'citron\npäron\nbanan' sort banan citron päron 50

51 5.5. grep 5.5 grep Kommandot grep söker efter en visst mönster som ges som första argument. Med flera argument ska övriga vara filer att leta i. Bara de rader där den sökta texten finns med kommer ut. Tidigare har vi bara sökt efter en fix text, men några tecken är speciella och kan användas för mer avancerade sökningar. Dessa söksträngar kallas för reguljära uttryck och tecknen med särskild betydelse kallas metatecken. På engelska heter det regular expression vilket ibland kortas till bara regexp eller regex. Även på svenska talar man ofta om regexpar. Flera av dessa tecken är speciella i skalet, så ofta behöver man sätta sökmönstret inom citattecken när man kör grep för att inte skalet ska tolka texten speciellt Ett godtyckligt tecken:. Punkten (.) matchar ett tecken vilket som helst. (Det fyller alltså samma funktion som frågetecken gör i jokeruttryck.) Så med b.x matchas»box«och»bmx«, samt även t. ex.»b%x«och»b x«(mellanslag är ett tecken det också) Ett speciellt tecken: [ ] och [^ ] Om man ska beteckna ett tecken som man vill ställa mer krav på använder man hakparenteser. Genom att räkna upp tecken inom [] kan man ange ett av dessa tecken, så [Dd]ator matchar»dator«och»dator«och [hmt]um[lm]a matchar»humla«,»humma«,»mumla«,»mumma«,»tumla«och»tumma«. Detta liknar hur man använder [] som jokertecken. Precis som då kan man även ange intervall, så [0-9] betyder samma som [ ]. Vill man ta med bindestrecket så får man sätta det först eller sist: [._-] matchar».«,»_«eller»-«. En skillnad är att i reguljära uttryck kan man använda ^ först för att negera en uppräkning av tecken, så [^@] matchar vilket tecken som helst [^aouå] matchar vilket tecken som helst som inte är a, o, u eller å och [^0-9] matchar vilket tecken som helst som inte är en siffra Repetition med * Med asterisken * efter något så säger man att detta får förekomma godtyckligt många gånger i det man söker efter. Godtyckligt många gånger kan vara noll, en, två, tre,..., gånger. Så om man söker efter t. ex.»ar*gh«så betyder det ett a följt av godtyckligt många r följt av gh. Detta matchar textsträngarna»agh«,»argh«,»arrgh«,»arrrgh«,»arrrrgh«, osv. Blanda inte ihop denna användning av * med jokerbetydelsen! I reguljära uttryck betyder inte * nånting för sig själv, utan det modifierar bara det som står precis innan. Med»l[aeiouyåäö]*t«matchar man därför alla strängar som börjar med l, slutar med t och däremellan innehåller godtyckligt många bokstäver i den uppräknade listan. Detta matchar t. ex.»lat«,»låt«, men även korta»lt«och långa»layout«. Genom att skriva de två tecknen.* kan man matcha vad som helst. Det betyder ju vilket tecken som helst (punkten), hur många gånger som helst (asterisken). Därmed matchar t. ex. uttrycket a.*ö vad som helst som börjar med a och slutar med ö, t. ex.»adjö«,»atollö«eller»a4! ö«. Observera att det även matchar bara»aö«det»godtyckliga«kan vara ingenting alls Ankring med ^ och $ Metatecknen ^ och $ betyder början av raden respektive slutet av raden. Så med t. ex. ^xyz hittar man rader som börjar med xyz (radbörjan följt av»xyz«) och med xyz$ hittar man rader som slutar med xyz (»xyz«följt av radslut). Dessa båda tecken matchar alltså inget tecken alls på egen hand, utan ställer bara krav på var det övriga i uttrycket ska befinna sig. Man säger att dessa ankrar ett reguljärt uttryck Några väljare till grep Tidigare har ni sett exempel på väljarna -c och -i till grep. En annan användbar väljare till grep är -v som vänder på betydelsen av kommandot och istället tar fram alla rader som inte innehåller ett visst sökmönster. Kommandot grep visar ju hela de rader som innehåller det man sökt efter. Med väljaren --color markeras den del av raden som matchade ens sökmönster i en särskild färg. 5.6 more Kommandot more visar upp sin output i terminalen sida för sida så att användaren kan bläddra i texten, som i man-sidor med man. Det är ofta användbart som sista delen i ett kommandorör som producerar text, så det är inte ovanligt med kommandon som slutar med» more«. Det finns däremot ingen vits med att stoppa in more före eller > eftersom dess output då inte kommer att hamna i terminalen. En typisk användning ser ut som 51

52 5. DOKUMENTATION OCH TEXTBEARBETNING I SKALET $ sort birds.txt more 5.7 paste Kommandot paste gör det omvända från cut, genom att det sätter ihop fält från olika filer till en fil. 5.8 sort Kommandot sort läser in rader från sin input och skriver ut samma rader som output, men i en sorterad ordning. Kommandot tar hänsyn till vilka språkinställningar man har för att göra sortering enligt något visst språks konventioner. Ifall ens syfte bara är att föra samman likadana rader så kan man göra LANG=C sort som gör den enklaste sortens sortering, i storleksordning efter tecknens numeriska koder. (Då sorteras till exempel lilla a och stora A olika.) Med väljaren -n sorterar den istället numeriskt, efter hur stora tal skrivna i siffror är. Då hamnar t. ex.»9«före»10«vilket det inte gör när man jämför tecken för tecken. 5.9 tr Kommandot tr byter ut tecken i input. Första argumentet räknar upp tecken som ska bytas ut och andra argumentet räknar upp vad dessa ska bytas mot. $ echo 'Sju sjuka sjuksköterskor' tr s z Sju zjuka zjukzköterzkor $ echo 'uppercase vowels' tr aeiou AEIOU UppErcAsE vowels En del kontrolltecken kan skrivas som sekvenser som börjar med bakstreck i argument till tr, däribland nyrad med \n och TAB med \t. $ cat tripp tripp trapp trull $ tr '\n' / <tripp tripp/trapp/trull/ (Bakstrecket har specialbetydelse i skalet, så det argumentet måste sättas inom citattecken.) Man kan inte byta ut ett tecken mot flera, t. ex. byta ut alla»x«mot»ks«. I själva verket så är det enstaka bytes som byts ut, så tr fungerar inte bra med tecken som lagras i flera bytes, så som t. ex. åäö i UTF-8, vilket begränsar dess användbarhet! (Vi kommer se ett annat sätt att göra utbyten i text senare.) 5.10 uniq Raderna i input till uniq kommer ut igen utom de rader som är likadana som raden innan. Det är vanligt att kombinera detta med sortering som... sort uniq... Genom att sortera det som kommer in till uniq så kommer alla likadana rader att ha hamnat direkt efter varandra så att uniq kan ta bort så mycket som möjligt. Ofta använder man detta när det egentligen inte spelar någon roll vad det är för ordning, bara det är någon ordning så att likadana rader har förts samman. Med -c räknar uniq hur många rader det var också. Med väljaren -u skriver uniq bara ut de rader som var unika. Dvs. istället för att behålla en av flera likadana rader så behåller det inga rader alls i sådana fall. Väljaren -d är motsatsen till -u. Nu skrivs bara de rader ut som var duplicerade. $ cat gumma.txt en liten liten liten gumma med en liten liten katt $ uniq gumma.txt en liten gumma med en liten katt $ uniq -c gumma.txt 1 en 3 liten 1 gumma 1 med 1 en 2 liten 1 katt 52

53 5.10. uniq $ uniq -u gumma.txt en gumma med en katt $ uniq -d gumma.txt liten liten I exemplen ovan används uniq på rader som inte är sorterade. Det är ganska sällan man har användning för det. Vanligare är att man vill göra en lista över vilka ord som förekommer i den där filen, och då får man lov att sortera raderna först: $ sort gumma.txt uniq en gumma katt liten med $ sort gumma.txt uniq -c 2 en 1 gumma 1 katt 5 liten 1 med $ sort gumma.txt uniq -u gumma katt med $ sort gumma.txt uniq -d en liten 53

54 Inlupp 5: Textbearbetning i skalet Redovisning Skicka mail till Per med svaren. När det inte står annat ska svaret fås fram genom ett eller flera skalkommandon. Ange både det resultat du fick och de kommandon du gav för att få fram det. Försök att bara använda ett kommando(rör) när det går. Tänk på att använda citattecken runt argument som innehåller tecken som $[]*?\ och mellanslag så att de inte tolkas särskilt av skalet! Info Välj Help Read the Emacs Manual i Emacs. Du hamnar i ett system som heter Info där dokumentationen till många program finns, däribland Emacs. Nu ser du Info-dokumentet om Emacs. Observera att det står»info«i parentesen i informationsraden. Till vänster om det står»(emacs) Top«. Det visar att Info-dokumentet du läser heter»emacs«och du befinner dig överst i det. Efter förtugget kommer en lång meny. Cirka 60 rader ner (gå ner en sida med PageDown eller C-v vid behov), under rubriken»fundamental Editing Commands«, så ser du bland annat menyalternativet Basic. I beskrivningen till höger beskrivs detta som»the most basic editing commands.«välj Basic och sen Erasing från den meny du då får upp. Då har du fått fram lite samlad information om hur man kan ta bort text i Emacs. De olika noderna i ett Info-dokument hänger ihop i ett träd. Överst ser du nu en särskild rad där det bland annat står»up: Basic«, dvs. uppåt i trädet ligger den sida du var i senast, från vilken du gick»ner«till denna sida. På samma rad som»up«står finns även»next«och»prev«(= previous) i en tänkt läsordning för avsnitten. Du kan följa dessa länkar genom att klicka på dem eller på symbolerna,,. Gå till föregående, dvs.»moving Point«. Förutom att man kan röra sig framåt och bakåt i den tänkta läsordningen kan man även backa till varifrån man kom (»last«), oavsett hur man kom därifrån. Det gör man med vänsterpilen på samma rad. Tryck på den nu så kommer du Figur 5.2: Från xkcd av Randall Munroe. xkcd.com/912/ tillbaka till»erasing Text«, eftersom det var där du var senast. En del Info-dokument har register (index) som man når med. Säg att du undrar vad det står om stavningskontroll i Emacsdokumentationen. Välj»spelling«i registret. Du kommer till ett avsnitt med rubriken»checking and Correcting Spelling«. Uppgift 5.1 Ett kommando som nämns där beskrivs som»check and correct spelling of the the word at point«. Vad ska man trycka i Emacs för att utföra detta? Prova! Byt buffert till slaskbufferten *scratch* och skriv ordet speling där (felstavat på detta 54

55 man sätt!) följt av kommandot för att kontrollera stavningen. Du får upp ett antal rättelseförslag att välja mellan. Förslag 0 är»spelling«. Tryck på 0 för att rätta din felstavning till detta. Uppgift 5.2 Vad var förslag 4? Uppgift 5.3 Enligt den fortsatta beskrivningen av kommandot så gör det ibland något annat än att kontrollera ett ord. Vad och när? Gå tillbaks till Info igen. Ett sätt är att byta till den särskilda bufferten med namnet *info* på något av de vanliga sätten för att byta buffert. Ett annat är att använda C-h i som alltid tar en till Info. I informationsraden står det»(emacs) Spelling«. Det heter den nod i Info som du tittar på just nu. Den första delen inom parentes visar vilket Infodokument det ingår i. Tryck på d för att komma till huvudkatalogen (directory) över Info-dokument. Här finns det en lång meny där de kommandon som är dokumenterade i Info finns med. (Om man inte har startat Info tidigare så är det hit man kommer om man trycker C-h i. Annars kommer man tillbaka till där man var senast.) Uppgift 5.4 Vad heter den Info-nod du nu tittar på? (Svaret står i informationsraden, med en förstadel (dokumentetets namn) inom parentes.) Slå upp sort här. Istället för att leta efter det i den långa långa menyn så använd kortkommandot m för att välja nåt från menyn och svara sort. Uppgift 5.5 på? Vad heter den Info-nod du nu tittar Notera att med»upp«nu kommer du inte tillbaka till huvudkatalogen. Du följde en genväg som gick en bit ner i trädet, och går du uppåt nu kommer du till andra kommandon som också har med sorterade filer att göra. Uppgift 5.6 Ett av de andra kommandona heter shuf. Vilka övriga kommandon tas upp i samma kapitel om sorterade filer? Bokstäver som kommandon: Normalt i Emacs så läggs skrivbara tecken som a, b, c, d in i bufferten när man trycker på dem. Men i speciella Emacslägen som Info där man ändå inte skriver in text så är kortkommandona ofta bara en bokstav. Genom att trycka h i Info får du veta mer om hur man manövrerar i Info helt från tangentbordet. Titta på dokumentationen för shuf. Uppgift 5.7 Ge ett kommando för att skriva ut raderna i din saga.txt i slumpvis ordning. Uppgift 5.8 Ge ett kommando för att skriva ut talen 1 5 i en slumpvis ordning. Uppgift 5.9 Ge ett kommando för att skriva ut en slumpvis frukt från /local/kurs/ids/frukt. Lös dessa tre uppgifter med bara ett kommando, utan kommandorör. Du får lov att använda olika väljare till shuf. När man söker framåt med C-s beter sig Emacs lite speciellt i Info. När den inte hittar någon mer förekomst på den sida man är på kan den söka vidare i nästa sida i samma Info-dokument. Uppgift 5.10 Hur hittar du i Info information du behöver för att lösa nästa två uppgifter? Uppgift 5.11 Använd ls för att ge en listning av filerna i din kurskatalog i storleksordning, med den största filen först. Uppgift 5.12 Använd ls för att ge en listning av filerna i din kurskatalog i storleksordning med den minsta filen först. (Omvändningen av förra uppgiften.) man Kommandot cal ger en liten kalender. Detta kommando är inte så intressant i sig, men används här som exempel för att ni ska slå upp och tolka en man-sida. (Det är det enda sätt som programmet finns dokumenterat.) Hur lyder synopsraden i man- Uppgift 5.13 sidan till cal? Uppgift 5.14 Det finns ett antal väljare man kan ge till kommandot cal. Efter dessa kan det följa argument. Om man ger tre argument, vad betecknar då det första, andra respektive sista argumentet? Ge ett exempel på ett anrop med tre argument och vad du får för svar då. Uppgift 5.15 Om man ger två argument, vad betecknar då det första respektive det andra argumentet? Ge ett exempel på ett anrop med två argument och vad du får för svar då. I denna man-sida kallas argumenten för parameters och det står om hur»a single parameter«tolkas. Uppgift 5.16 Hur tolkas alltså argumentet om man bara ger ett argument till cal? Detta framgår även av synopsraden. Hur? 55

56 INLUPP 5: TEXTBEARBETNING I SKALET Uppgift 5.17 Ge en kalender för föregående, nuvarande och nästa månad, med måndag som förstadag i veckorna. Uppgift 5.18 Kommandot seq kan få ett till tre argument. Kolla dokumentationen för att se hur detta beskrivs. Där finns det tre synopsrader, en för varje antal argument. Hur lyder dessa tre rader? Uppgift 5.19 Detta hade kunnat skrivas med bara en synopsrad istället med hakparenteser ungefär (men inte riktigt) så som det var för cal. Hur skulle beskrivningen av seq se ut i så fall? (Ledning: Ett av de möjliga argumenten måste alltid vara med, så det ska inte så inom några [].) Uppgift 5.20 Ge ett kommando för att lista åttans tabell: 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, ett tal per rad. Uppgift 5.21 Ge en lista över alla tal som är delbara med 7 och som innehåller»765«när man skriver ut det. I resultatet ska bland annat 7651 (= ) ingå. Verb Dessa frågor gäller den fil verb.txt som du använt i tidigare uppgifter. Uppgift 5.22»stp«i sig? Vilket eller vilka verb innehåller Uppgift 5.23 Vilka verb innehåller fa följt av ett godtyckligt tecken följt av a? Uppgift 5.24 Hur många verb innehåller inte a alls? (Använd väljaren -v till grep!) Uppgift 5.25 Hur många verb innehåller åtminstone någon av bokstäverna j eller y? Uppgift 5.26 Vilka verb innehåller y följt av godtyckligt många s följt av e? (I ett par av orden är det inga s alls, dvs. y följs direkt av e.) Uppgift 5.27 Vilka verb innehåller både j och y, i den ordningen (men kanske med andra tecken däremellan)? Uppgift 5.28 y? Uppgift 5.29 inte y? Vilka verb innehåller både j och Hur många verb innehåller j men Uppgift 5.30 Vilka verb slutar på bokstaven y? Uppgift 5.31 Vilka verb slutar på y och börjar på g? Ge ett svar där du utökar förra uppgiften med ett led till i ett kommandorör. Ge också ett alternativt svar där båda kraven finns i samma reguljära uttryck. Uppgift 5.32 annat än a? Hur många verb slutar på något Uppgift 5.33 Samma som uppgift 5.24, men lös den med grep utan att använda väljaren -v denna gång! Uppgift 5.34 Vilka verb har x som sjätte bokstav (som t. ex. förhäxa)? Uppgift 5.35 med iera? Uppror! Vilka verb börjar med k och slutar På sidan 46 sparade du en version av uppror.txt med normal Unix-markering för nyrad. Den ska du använda nu. Alla uppgifter i detta avsnitt använder sig av den filen. Prova gärna kommandona i detta avsnitt med väljaren --color till grep också. Uppgift 5.36 Vilka rader innehåller två j med exakt två tecken mellan sig? Uppgift 5.37 siffror i rad? Uppgift 5.38 siffror? Vilka rader innehåller minst tre Vilka rader innehåller minst två Uppgift 5.39 Vad finns det för rad som innehåller ett komma som följs av något annat tecken än mellanslag? Uppgift 5.40 Vad finns det för rader som innehåller minst två frågetecken? Uppgift 5.41 Vad finns det för rader som inte innehåller något mellanslag men ändå är minst 15 tecken långa? * * * Slå upp grep i Info. Sök upp information om ordsökning där. (Det finns en särskild väljare för sånt.) Uppgift 5.42 Vad hette Info-noden du hittade denna väljare på? Uppgift 5.43 Hur bar du dig åt för att hitta till den Info-noden? Uppgift 5.44 Vilka rader i uppror.txt innehåller ordet»dröm«? Uppgift 5.45 Vilka rader innehåller de fyra bokstäverna»dröm«i rad men ändå inte ordet»dröm«? (Det kan vara rader på vilka det står»mardröm«eller»drömmar«t. ex..) 56

57 »Det var en afton i början av maj«i fält Här görs en antal uppgifter med /local/kurs/ ids/rummet.words som du antas ha gjort en kopia av tidigare. Det är alltså filen där det ligger ett ord per rad, tillsammans med ordklassbeteckning. Uppgift 5.53 Ge ett kommando som sorterar raderna i rummet.words så att lika rader hamnar i följd och sedan räknar hur många det är av varje slags rad. (Du behöver inte ange resultatet av detta kommando.) Uppgift 5.54 Utöka föregående kommandorör så att du därefter sorterar detta resultat i nummerordning och ger en tio-i-topp-lista med de vanligaste orden först. I fält I filen /local/kurs/ids/eulang.tsv finns lite data om de officiella EU-språken i en fil med TAB-separerade fält. (Filnamnsändelsen tsv används ibland för»tab separated values«.) Det första fältet ger en kod för språket, det andra ger ungefärligt antal modersmålstalande (inte bara i EU), 1 det tredje ger språkets namn på svenska, det fjärde ger språkets namn på engelska och det femte och sista fältet ger vilket år språket blev ett officiellt EU-språk. Uppgift 5.46 Ta fram en sorterad lista över språkens engelska namn. Uppgift 5.47 Ta fram alla fält utom språkkoden, sorterade efter antal talare. Uppgift 5.48 Vilket språk har lägst antal talare? Ta bara fram dess namn på engelska. Uppgift 5.49 Ange språkkoderna för alla språk som var officiella EU-språk redan Uppgift 5.50 Vilka år har något språk blivit officiellt EU-språk? (Ge ett svar som listar dessa år i tidsordning, utan dubbletter.) Uppgift 5.51 Vilka år har fler än ett språk blivit nya officiella EU-språk? Uppgift 5.52 Vilka år har exakt ett språk blivit nytt officiellt EU-språk? 1 Uppgifterna är ihopsamlade på en höft och ska tas med några nypor salt. Numerisk sortering ger normalt de lägsta talen först, men sök upp en väljare till sort som gör att man får omvänd sorteringsordning än den annars ger! (Använd den korta versionen av denna väljare.) Här räknades även skiljetecken som egna ord, så flera av de vanligaste»orden«kommer att vara sådana. Uppgift 5.55 Vilka prepositioner förekommer bara en gång i rummet.words? Du kan anta att det räcker med att söka upp rader som innehåller»prep«för att hitta prepositioner. (Som tur är finns inte ord som»preparat«eller»upprepa«i texten, vilket skulle ge falska träffar.) Uppgift 5.56 Modifiera uppgift 5.54 så att resultatet skrivs ut med ett snedstreck (/) istället för TAB mellan ord och ordklass. I rummet.words finns olika rader som de de art pron så grafordet»de«kan både vara artikel och pronomen. Det finns flera sådana ord. Uppgift 5.57 Vilka ord i rummet.words förekommer där med minst två olika ordklasser? Räkna m med skript Du ska skriva ett skalskript countm.sh som räknar m och M i en fil. Låt skalskriptet börja så här: #!/bin/bash echo Antal m: grep -c m $1 57

58 INLUPP 5: TEXTBEARBETNING I SKALET Där det brukar stå ett filnamn står här istället $1. Det är nytt och betyder något man gett som argument till skriptet. Då kan man skriva t. ex. $ bash countm.sh rummet.txt Antal m: 28 Antal M: 3 Antal rader utan m eller M: 4 Och för att räkna i en annan fil är det bara att ge ett annat filnamn när man kör skriptet. Uppgift 5.58 I exemplet ovan skrivs några fler rader ut än vad den givna början av skriptet gör. Utöka skriptet så att det ger alla dessa uppgifter. Hur lyder din countm.sh nu? Uppgift 5.59 Vad får du för output om du kör ditt skript med /local/kurs/ids/wonderland. txt som argument? Uppgift 5.64 Vilka delstater kom med i USA i mars något år enligt us-states.txt? Uppgift 5.65 Gör en lista för hur ofta de olika månaderna förekommer i datumen i us-states. txt. Resultatet skulle kunna börja med med som visar att det finns sju fall av»01«(= januari) och tre fall av»02«(= februari). Uppgift 5.66 Skapa en fil us-states-rev. txt som innehåller samma två kolumner som us-states.txt, men i omvänd ordning. Ordsegmentering Uppgift 5.60 Ett (för) enkelt sätt att dela upp en textfil i ord är att byta ut alla mellanslag mot nyradstecken. Använd det för att i en fil GNU-w1 lägga en sorterad ordlista med alla ord som förekommer i filen GNU i din kurskatalog. (Ta bort dubbletter.) Uppgift 5.61 Titta igenom resultatet i Emacs och nämn vilka problem du kommer på med detta enkla sätt att dela upp en text i ord. Ditt och datt Uppgift 5.62 Ge en lista över alla årtal som förekommer i us-states.txt. (Ge varje årtal bara en gång oavsett hur många gånger det förekommer i filen.) Uppgift 5.63 Om man skulle göra en stavningsreform så att man ersatte alla z med s, vad skulle det bli för verb som nu stavas olika som då skulle stavas likadant i verb.txt? $2, $3,... : Är det kanske så att om man ger fler argument till skriptet så kan man komma åt dem med $2, $3, osv.? Javisst är det så. Prova gärna! 58

59 Kapitel 6 Versionskontroll och Emacs Det blir två olika ämnen idag. 6.1 Versionskontroll Versionskontrollsystem är system som kan hantera flera olika versioner av dokument. Flera personer kan ändra i dokumenten och det går att få fram vilka tidigare versioner som helst och se vilka ändringar som gjorts när. Det finns flera olika versionskontrollsystem som har olika för- och nackdelar. Ett mycket vanligt är CVS. En fördel med det är just att det används så mycket. I labben ska ni få använda Subversion (SVN) som är ett senare system som är likt CVS men har en del viktiga förbättringar. Några exempel på modernare versionskontrollsystem är Bazaar, Git och Mercurial. Databasen där alla versioner av filerna i ett projekt ligger kallas ett repositorium (repository). Att ta fram filer därifrån kallas att checka ut dessa filer. Då får man en arbetskatalog (working directory) där man kan göra de ändringar man vill. Efter att man gjort en ändring som ska in i projektet så checkar man in den filen igen så hamnar den versionen i repositoriet. Alla versioner som checkats in kan tas fram i efterhand, så man kan be om t. ex. hur en viss version såg ut den 1 april förra året. Ofta går det att nå ett repositorium över nätet så att personer som ska medverka i ett projekt inte behöver ha konto på samma dator. Även om versionskontrollsystem framförallt används för programmering så kan det med fördel användas även i andra sammanhang där flera personer skriver något tillsammans. Även för sådant man skriver själv är det användbart, bland annat för att kunna gå tillbaka till tidigare versioner Om flera ändrar samtidigt Om flera personer har skrivrättigheter i samma katalog där de tillsammans sköter några filer blir det lätt olyckor, som i figur 6.1. Att undvika och Figur 6.1: Såna här missöden händer lätt om flera personer kan ändra i samma filer. lösa sådana problem är en av huvudfunktionerna för versionskontrollsystem. I en del versionskontrollsystem så låser man normalt en fil man ska göra ändringar i så att andra inte får göra ändringar samtidigt. I de flesta system nu är det dock oftast inget större problem med samtidiga ändringar. Om en användare gör en ändring i början av en fil samtidigt som en annan ändrar i slutet av samma fil så kan systemet slå ihop dessa ändringar av sig självt. Systemet vet nämligen vilken version av dokumentet som de olika användarna har utgått ifrån. Bara om ändringarna sker på samma ställe behövs hjälp med att reda ut det. Då visar systemet båda versionerna och en människa får reda ut läget Kommandon Oftast är det ett enda skalkommando med vilket man kan göra allt som ett versionskontrollsystem kan göra, genom att ge det olika argument. För CVS heter kommandot cvs och för Subver- 59

60 6. VERSIONSKONTROLL OCH EMACS sion heter det svn, och liknande för andra system. Första argumentet till svn är ett underkommando till det. Med svn help får man hjälp. Men Emacs känner igen vilka filer som tas om hand av något versionskontrollsystem och vilket system det är och gör mycket av det där automatiskt åt en, eller med kommandon i en meny Tools Version Control. Man kan använda samma kommandon i Emacs oavsett vilket versionskontrollsystem man använder. Emacs känner igen vilket system som har hand om just dina filer. Ibland används förkortningen VC för Version Control, och det ingår i en hel del namn på Emacskommandon. 6.2 Emacs Det står en hel del om emacs i avsnitt 2.2 på s. 18. Här är några ytterligare delar. På s följer sedan den refcard.pdf som följer med Emacs 1 med tips om kortkommandon och annat. (Men en hel del av dessa är sådana som ni antagligen inte kommer att behöva.) Kommandon I Emacs finns en stor mängd kommandon som gör olika saker med texten. När man trycker på en tangent i Emacs eller väljer något från en meny så utförs något av dessa kommandon. När man trycker på <home> eller C-a utförs t. ex. ett kommando move-beginning-of-line som går till början av raden och när man väljer Tools Spell Checking Spell-Check Buffer i menyerna utförs ett kommando ispell-buffer. 2 Normalt behöver man inte veta vad dessa namn på kommandona är. När man lär sig att man kan gå till början av raden med C-a så behöver man därför inte lära sig vad det kommando som utförs heter. Men när man vill använda ett kommando som inte finns i menyerna och som det inte finns ett kortkommando för så kan man ändå utföra kommandot genom att använda M-x och sedan ge kommandots namn (följt av RET). I sådana lägen kan man använda TAB för att få komplettering. En del kommandon finns det inget snabbkommando för Att få hjälp Man kan få hjälp av olika slag i Emacs med olika kommandon som börjar med C-h (där h står för help). 1 Med fullständig sökväg /local/share/emacs/24.3/ etc/refcards/refcard.pdf 2 Flera gånger i denna text kallas tangenttryckningen för ett kommando det också, så det kan stå»använd kommandot C-a«. Förhoppningsvis ska det inte leda till sammanblandning. I tabell 6.1 visas några av de kommandon som börjar med C-h. För flera av dessa ska man efter kommandot tala om vad man vill ha hjälp med. Efter C-h c eller C-h k får man t. ex. trycka på en tangent för att få fram hjälp om just den. Om man t. ex. undrar vad som händer om man trycker på C-l kan man fråga med C-h k C-l och om man undrar vad kommandot som utförs med C-x C-b heter kan man använda C-h c C-x C-b. Många av dessa kommandon finns förstås i menyn Help också. Hur fortsätter kommandot? Dessutom kan man använda C-h i ett flerteckenskommando för att se hur det kan fortsätta. Med C-x C-h får man t. ex. veta vad det finns för kommandon som börjar med C-x (så som t. ex. C-x C-f och C-x C-s) och med C-c C-h kan man se vad som börjar med C-c osv. Ofta så visas den hjälp man får fram i en särskild buffert *Help*. Många speciella buffertar i Emacs har sådana namn som börjar och slutar med asterisk. Istället för C-h kan man även använda <f1> som hjälptangent, dvs. funktionstangenten F Manualen Som ni har sett förut finns den huvudsakliga dokumentationen till Emacs i Info, och med Help Read the Emacs Manual kan man gå till den dokumentationen. (Ofta finns dessa manualer även på nätet i flera olika format. På software/emacs/ finns t. ex. länkar till Emacsdokumentationen.) Musen De tre knapparna kallas i Emacs Mouse-1, Mouse-2 och Mouse-3 från vänster till höger, så mouse-2 är mittknappen (på scrollhjulet). Även dessa kan kombineras med Ctrl och liknande. T. ex. är ytterligare ett sätt att välja buffert i Emacs C-Mouse-1. (Prova!) Lägen Det som här kallas lägen i Emacs kallas också moder som mer direkt översättning av modes. Emacs använder olika slags lägen för olika slags filer. Det är alltid en major mode och kan även vara flera minor modes som ändrar beteendet på olika sätt. Olika lägen kan ha olika kortkommandon, olika menyer, olika färgläggning av bufferten, osv. Prefixtangenten C-c inleder ofta kommandon som är speciella för olika lägen. Ni har t. ex. sett exempel 60

61 6.2. Emacs Tabell 6.1: Några C-h-kommandon. Tangent Kommando Beskrivning C-h c describe-key-briefly Talar om vilket kommando en viss tangent utför C-h k describe-key Talar även om vad detta kommando gör C-h a apropos-command Hittar ett kommando som innehåller något visst i sitt namn C-h i info Går in i Info C-h f describe-function Beskriv ett namngivet kommando C-h w where-is Hitta snabbkommando för ett visst kommando. C-h m describe-mode Beskriver aktuellt Emacs-läge. C-h t help-with-tutorial Lär dig en del Emacs-kommandon. på att när ni editerade ett skalskript så hamnade Emacs i ett annat läge. Med C-Mouse-3 får man fram en meny för aktuellt läge. Man kan också hålla klicka på lägets namn i informationsraden för att få upp den meny som är speciellt för ett visst läge Prefix-argument Vissa kommandon i Emacs kräver ett argument som läses in i minibufferten efteråt. Efter C-x C-f får man t. ex. ange vilken fil det är man vill öppna. Det går dessutom alltid ge ett numeriskt prefixargument direkt före ett kommando. Olika kommandon behandlar detta argument på olika sätt. Med M-f går man t. ex. framåt ett ord. Genom att ge ett argument så går man istället fram så många ord. Ett sätt att ge prefix-argument är att trycka på siffror medan man håller Ctrl eller Meta intryckt. Så med M-1 M-2 M-f går man därmed framåt 12 ord. Eftersom själva kommandot innehåller Meta är det mesta praktiskt att använda Meta med siffrorna också denna gång, så behöver man aldrig lyfta på Alt-tangenten. Om man istället skulle gå fram tolv tecken med C-f använder man lämpligen C-1 C-2 C-f istället, så slipper man lyfta på Control-tangenten. I Emacslägen där man inte skriver in text, t. ex. Dired som är läget man får när man öppnar en katalog i Emacs, räcker det med att trycka på siffertangenter utan Ctrl eller Meta. Ett annat sätt är att använda C-u och sen skriva vanliga siffror: C-u 1 2 M-f. Om man ger bara C-u utan några siffror räknas det som 4, och två C-u som 16. Det ger ett enkelt sätt att t. ex.»gå ner några rader«(c-u <down>) eller»gå upp rätt många rader«( C-u C-u <up>). Vissa kommandon bryr sig bara om ifall de får ett argument eller inte, men inte vad argumentet är. Ett exempel är kommandot M-q (fill-paragraph) som bryter om det stycke man står i. Om man ger det ett prefixargument så lägger det dessutom in dubbla mellanslag här och där så att det ska bli en rak högermarginal. När man bara ska ge ett prefixargument vilket som helst och det inte spelar roll vad det är brukar man använda C-u, så t. ex. C-u M-q. Ett annat exempel på det som ni sett var på sidan 45 när ni fick använda C-u C-x =. Själva kommandot där var alltså bara C-x =, men det användes med ett argument för att det skulle bete sig lite annorlunda Sökningar Inkrementella sökningar med C-s (framåt) och C-r (bakåt) har ni redan gjort. Om man tar med minst en versal i söksträngen så görs det skillnad på versaler och gemener, men inte annars, så med foo hittar man såväl»foo«som»foo«som»foo«, men med söksträngen Foo hittar man bara»foo«och inte t. ex.»foo«eller»foo«. Man kan söka efter reguljära uttryck genom att lägga till Meta också, dvs. med C-M-s och C-M-r Regionen På sidan 20 stod det om regionen i Emacs. Ett till sätt att markera en region från tangentbordet är att hålla ner skifttangenten medan man förflyttar sig med piltangenterna. Många kommandon beter sig lite annorlunda ifall man har en aktiv markerad region. Kommandot M-$ som du använt för att stavningskontrollera ett ord kontrollerar t. ex. hela regionen om man har en aktiv sådan. 61

62 Inlupp 6: Versionskontroll och Emacs Versionskontroll Ge i din kurskatalog skalkommandot svn co svn://stp/ids16/username där username är ditt användarnamn. Du blir tillfrågad om ett lösenord. (Inget kommer att ekas när du skriver in lösenordet.) Det är inte ditt vanliga inloggningslösenord utan ett annat som står i filen /local/svn/ passwords/username som bara är läsbar för dig. I denna nya katalog som heter som ditt användarnamn finns en fil som heter foo.txt. Öppna den i Emacs. I informationsraden står det»svn«för att visa att denna fil sköts av Subversion. Använd C-x 5 f i Emacs för att öppna en ny fil ids6.txt i samma katalog för att skriva svaren på följande frågor i. Vad gjorde detta kommando (tyd- Uppgift 6.1 ligen)? Tillbaks till foo.txt. Byt ut ordet»gamla«mot»nya«där och spara. Nu skiljer sig den version du har i din katalog från den incheckade. Använd Tools Version Control Compare with Base Version för att i kompakt form få se skillnaderna. Det viktigaste Emacs-kommandot för versionskontroll är C-x v v för att checka in en fil, så det är det värt att lära sig kortkommandot för. Använd det nu! Innan själva incheckningen sker får du skriva ett loggmeddelande om vad det är för en ändring du gjort. Gör så. Uppgift 6.2 Vad är kortkommandot för att avsluta detta loggmeddelande? Uppgift 6.3 Hur fick du reda på vad kortkommandot var? Kommer du på nåt annat sätt du kunde ha fått reda på det?... is not in a version controlled directory.: Varning! Om du får denna varning tillsammans med en fråga om»vc backend«så avbryt med C-g! Då har du försökt checka in en fil någonannanstans än i din Subversion-katalog. Bland relaterade kommandon finns bland annat sådana för att lista en fils historia (logg), ta fram tidigare versioner, med mera. Din fil ids6.txt är inte inlagd i Subversion bara för att den ligger i samma katalog. Lägg in den filen också (trots att du än så länge bara svarat på några få frågor. För detta behöver du göra C-x v v två gånger. Första gången registrerar du filen och andra gången checkas den verkligen in. Gör så! (Loggmeddelandet kan vara tomt om du vill.) När du är klar ska det stå»svn:«med siffror efter i informationsraden. Flytta även dina svar från de två förra kapitlen till denna katalog under namnen ids4.txt och ids5.txt (oavsett om du är klar med dem eller inte) och checka in de filerna. Eventuella kompletteringar till dessa labbar ska du senare lägga in i dessa filer och checka in istället för att maila. Tillbaks till foo.txt: Uppgift 6.4 Använd Tools Version Control Show History för att få se loggen för foo.txt. Hur lyder den? För varje version står det»r«följt av siffror för att visa vilken revidering den versionen hör till. Uppgift 6.5 Vad är det för siffror för den tidigaste versionen av den filen? Hitta ett kommando i Tools Version Control för att visa en annan version och välj den där allra första versionen. Uppgift 6.6 Så vad stod det i denna första version av denna fil? Checka in din ids6.txt innan du går vidare! Nu kan du antingen gå vidare med resten av detta kapitel, eller komplettera tidigare labbar du inte är klar med. Följ avsnittet»klar för idag?«på slutet innan du slutar för idag hursomhelst! Referenskort till Emacs på de två följande sidorna 62

63 GNU Emacs Reference Card (for version 24) Starting Emacs To enter GNU Emacs 24, just type its name: emacs Leaving Emacs suspend Emacs (or iconify it under X) exit Emacs permanently Files read a file into Emacs save a file back to disk save all files insert contents of another file into this buffer replace this file with the file you really want write buffer to a specified file toggle read-only status of buffer Getting Help C-z C-x C-c C-x C-f C-x C-s C-x s C-x i C-x C-v C-x C-w C-x C-q The help system is simple. Type C-h (or F1) and follow the directions. If you are a first-time user, type C-h t for a tutorial. remove help window C-x 1 scroll help window C-M-v apropos: show commands matching a string describe the function a key runs describe a function get mode-specific information Error Recovery C-h a C-h k C-h f C-h m abort partially typed or executing command C-g recover files lost by a system crash M-x recover-session undo an unwanted change C-x u, C-_ or C-/ restore a buffer to its original contents M-x revert-buffer redraw garbaged screen C-l Incremental Search search forward search backward regular expression search reverse regular expression search select previous search string select next later search string exit incremental search undo effect of last character abort current search C-s C-r C-M-s C-M-r M-p M-n RET DEL C-g Use C-s or C-r again to repeat the search in either direction. If Emacs is still searching, C-g cancels only the part not matched. c 2015 Free Software Foundation, Inc. Permissions on back. Motion entity to move over backward forward character C-b C-f word M-b M-f line C-p C-n go to line beginning (or end) C-a C-e sentence M-a M-e paragraph M-{ M-} page C-x [ C-x ] sexp C-M-b C-M-f function C-M-a C-M-e go to buffer beginning (or end) M-< M-> scroll to next screen C-v scroll to previous screen M-v scroll left C-x < scroll right C-x > scroll current line to center, top, bottom C-l goto line goto char back to indentation Killing and Deleting M-g g M-g c M-m entity to kill backward forward character (delete, not kill) DEL C-d word M-DEL M-d line (to end of) M-0 C-k C-k sentence C-x DEL M-k sexp M-- C-M-k C-M-k kill region copy region to kill ring kill through next occurrence of char yank back last thing killed replace last yank with previous kill Marking set mark here exchange point and mark set mark arg words away mark paragraph mark page mark sexp mark function mark entire buffer Query Replace interactively replace a text string using regular expressions Valid responses in query-replace mode are C-w M-w M-z char C-y M-y C-@ or C-SPC C-x C-x M-@ M-h C-x C-p C-M-@ C-M-h C-x h M-% M-x query-replace-regexp replace this one, go on to next SPC or y replace this one, don t move, skip to next without replacing DEL or n replace all remaining matches! back up to the previous match ^ exit query-replace RET enter recursive edit (C-M-c to exit) C-r Multiple Windows When two commands are shown, the second is a similar command for a frame instead of a window. delete all other windows C-x 1 C-x 5 1 split window, above and below C-x 2 C-x 5 2 delete this window C-x 0 C-x 5 0 split window, side by side C-x 3 scroll other window C-M-v switch cursor to another window C-x o C-x 5 o select buffer in other window C-x 4 b C-x 5 b display buffer in other window C-x 4 C-o C-x 5 C-o find file in other window C-x 4 f C-x 5 f find file read-only in other window C-x 4 r C-x 5 r run Dired in other window C-x 4 d C-x 5 d find tag in other window C-x 4. C-x 5. grow window taller C-x ^ shrink window narrower C-x { grow window wider C-x } Formatting indent current line (mode-dependent) indent region (mode-dependent) indent sexp (mode-dependent) indent region rigidly arg columns indent for comment insert newline after point move rest of line vertically down delete blank lines around point join line with previous (with arg, next) delete all white space around point put exactly one space at point fill paragraph set fill column to arg TAB C-M-\ C-M-q C-x TAB M-; C-o C-M-o C-x C-o M-^ M-\ M-SPC M-q C-x f set prefix each line starts with C-x. set face M-o Case Change uppercase word lowercase word capitalize word uppercase region lowercase region The Minibuffer M-u M-l M-c C-x C-u C-x C-l The following keys are defined in the minibuffer. complete as much as possible TAB complete up to one word SPC complete and execute RET show possible completions? fetch previous minibuffer input M-p fetch later minibuffer input or default M-n regexp search backward through history M-r regexp search forward through history M-s abort command C-g Type C-x ESC ESC to edit and repeat the last command that used the minibuffer. Type F10 to activate menu bar items on text terminals.

64 GNU Emacs Reference Card Buffers select another buffer C-x b list all buffers C-x C-b kill a buffer C-x k Transposing transpose characters C-t transpose words M-t transpose lines C-x C-t transpose sexps C-M-t Spelling Check check spelling of current word M-$ check spelling of all words in region M-x ispell-region check spelling of entire buffer M-x ispell-buffer toggle on-the-fly spell checking M-x flyspell-mode Tags find a tag (a definition) M-. find next occurrence of tag C-u M-. specify a new tags file M-x visit-tags-table regexp search on all files in tags table M-x tags-search run query-replace on all the files M-x tags-query-replace continue last tags search or query-replace M-, Shells execute a shell command M-! execute a shell command asynchronously M-& run a shell command on the region M- filter region through a shell command C-u M- start a shell in window *shell* M-x shell Rectangles copy rectangle to register C-x r r kill rectangle C-x r k yank rectangle C-x r y open rectangle, shifting text right C-x r o blank out rectangle C-x r c prefix each line with a string C-x r t Abbrevs add global abbrev C-x a g add mode-local abbrev C-x a l add global expansion for this abbrev C-x a i g add mode-local expansion for this abbrev C-x a i l explicitly expand abbrev C-x a e expand previous word dynamically M-/ Miscellaneous numeric argument C-u num negative argument M-- quoted insert C-q char Regular Expressions any single character except a newline. (dot) zero or more repeats * one or more repeats + zero or one repeat? quote special characters \ quote regular expression special character c \c alternative ( or ) \ grouping \(... \) shy grouping \(:?... \) explicit numbered grouping \(:NUM... \) same text as nth group \n at word break \b not at word break \B entity match start match end line ^ $ word \< \> symbol \_< \_> buffer \ \ class of characters match these match others explicit set [... ] [^... ] word-syntax character \w \W character with syntax c \sc \Sc character with category c \cc \Cc International Character Sets specify principal language C-x RET l show all input methods M-x list-input-methods enable or disable input method C-\ set coding system for next command C-x RET c show all coding systems M-x list-coding-systems choose preferred coding system M-x prefer-coding-system Info enter the Info documentation reader find specified function or variable in Info Moving within a node: scroll forward scroll reverse beginning of node Moving between nodes: next node previous node move up select menu item by name select nth menu item by number (1 9) follow cross reference (return with l) return to last node you saw return to directory node go to top node of Info file go to any node by name Other: run Info tutorial look up a subject in the indices search nodes for regexp quit Info C-h i C-h S SPC DEL b n p u m n f l d t g h i s q Registers save region in register insert register contents into buffer save value of point in register jump to point saved in register Keyboard Macros C-x r s C-x r i C-x r SPC C-x r j start defining a keyboard macro C-x ( end keyboard macro definition C-x ) execute last-defined keyboard macro C-x e append to last keyboard macro C-u C-x ( name last keyboard macro M-x name-last-kbd-macro insert Lisp definition in buffer M-x insert-kbd-macro Commands Dealing with Emacs Lisp eval sexp before point eval current defun eval region read and eval minibuffer load a Lisp library from load-path Simple Customization customize variables and faces C-x C-e C-M-x M-x eval-region M-: M-x load-library M-x customize Making global key bindings in Emacs Lisp (example): (global-set-key (kbd "C-c g") search-forward) (global-set-key (kbd "M-#") query-replace-regexp) Writing Commands (defun command-name (args) "documentation" (interactive "template") body) An example: (defun this-line-to-top-of-window (line) "Reposition current line to top of window. With prefix argument LINE, put point on LINE." (interactive "P") (recenter (if (null line) 0 (prefix-numeric-value line)))) The interactive spec says how to read arguments interactively. Type C-h f interactive RET for more details. Copyright c 2015 Free Software Foundation, Inc. For GNU Emacs version 24 Designed by Stephen Gildea Permission is granted to make and distribute modified or unmodified copies of this card provided the copyright notice and this permission notice are preserved on all copies. For copies of the GNU Emacs manual, see:

65 Emacs Emacs Ta fram hjälp Uppgift 6.7 I detta kapitel stod det att kommandot C-x = beter sig lite annorlunda när det får ett prefixargument. Hur beskrivs den skillnaden i kommandots hjälptext? (Citera!) Ta fram en förteckning med Emacskommandon som innehåller»paragraph«i sitt namn för att hitta kommandon som gör saker med hela stycken av texten. Det står vad kommandona heter och hur man kan utföra dem. (Om det inte går på annat sätt så med M-x.) Ibland finns det flera sätt att utföra samma kommando. Uppgift 6.8 I den förteckning du fått fram nämns forward-paragraph för att gå fram ett stycke. Vad finns det för olika kortkommandon för det i Emacs? När man tar fram kommandon som innehåller något i sitt namn kan man också ge ett regexp. Gör det för att ta fram kommandon vars namn slutar på»regexp«. Alltså ska du inte få med t. ex. kommandot regexp-builder, för det slutar ju inte så. Uppgift 6.9 Uppgift 6.10 detta? Hur gjorde du det? Vad visade Emacs för resultat från De flesta av dessa kommandon finns det inte snabbkommandon för, utan det är M-x som nämns för att köra dem, men det finns några undantag som har snabbkommandon. Uppgift 6.11 Ett av dessa undantag är ett kommando för att visa sådant som matchar ett visst reguljärt uttryck på ett visst sätt (med en viss face). Vad heter det kommandot? Uppgift 6.12 Snabbkommandot för det kommandot består av tre delar. Ge de två första delarna och tryck sen på hjälptangenten för att få veta vad det finns för möjliga kommandon som börjar likadant. Hur såg hjälpen du fick då ut? (Alltså innehållet i bufferten *Help* då.) Emacs-kommandot shell finns det inget snabbkommando för, så det får man lov att ge med M-x. Gör så! Detta kör ett skal inne i Emacs. Uppgift 6.13 Man rör sig runt i bufferten med vanliga förflyttningskommandon som t. ex. <up> och <down>, så dessa fungerar inte som i terminalen så att de tar fram tidigare kommandon. Vad kan man istället ge för kommandon för att få detta? Hur såg du det? Ramar Kommandon som gör saker med ramar (frames) börjar med C-x 5. Ta reda på vad det finns för olika kommandon som börjar med C-x 5 och har ett tecken till. Uppgift 6.14 Vad heter kommandot med vilket man kan öppna en fil i en annan ram som du använde i uppgift 6.1? Jämföra filer med Ediff /local/kurs/ids/verb.txt har ändrats en del jämfört med motsvarande fil för flera år sen, /local/kurs/old/ids09/verb.txt. Nu ska du använda ett Emacskommando för att jämföra dessa. Öppna båda dessa filer i Emacs. Uppgift 6.15 Namnet på en buffert i Emacs brukar ju vara som filnamnet. Hur tycks Emacs sätta namn på buffertar när man öppnar flera filer med samma namn? I menyn Tools Compare (Ediff) hittar du ett Emacskommando för att jämföra två buffertar. Använd det! (Välj bufferten med den äldsta filen först (A) och sen den nya (B).) Du får en egen liten ram som heter Ediff. De viktigaste kommandona här är SPC (mellanslag alltså) för att gå till nästa skillnad och DEL för att gå till förra skillnaden. Prova att gå fram några steg! Det finns annat att trycka än SPC och DEL och det står hur du kan få hjälp. Uppgift 6.16 Hur många skillnader räknar Ediff med mellan dessa filer? Uppgift 6.17 Vilken tangent kan man använda här för att hoppa till en viss skillnad genom att ange dess nummer som prefixargument? Uppgift 6.18 Vad består skillnad nummer 313 av? Uppgift 6.19 Vad består skillnad nummer 145 av? Uppgift 6.20 Hur avslutar man Ediff? Det finns flera andra Ediff-kommandon som du såg i menyn. Ett ytterligare som av någon anledning inte fanns i menyn är ediff-backup. 65

66 INLUPP 6: VERSIONSKONTROLL OCH EMACS Ta fram beskrivningen av detta kommando nu när du vet dess namn. Uppgift 6.21 Hur lyder den beskrivningen? Prova detta kommando med dodo.txt. Uppgift 6.22 kommando? Lägen Hur skrev du för att köra detta I uppgift 4.41 använde du ett kommando som aktiverar en minor mode. Ge det kommandot igen! Uppgift 6.23 Att denna minor mode är aktiv visas i informationsraden. Hur? Uppgift 6.24 Om du håller muspekaren över detta, vad står det då att vänster musknapp gör där? Uppgift 6.25 mode? Tangentbordsmakron Hur kan du slå av denna minor Med makron kan man»spela in«tangenttryckningar för att sedan upprepa dem flera gånger. Gå till Emacs-dokumentationen i Info (t. ex. med Help Read the Emacs Manual ) och välj menyalternativet»keyboard Macros«där. Uppgift 6.26 Så vilken tangent kan du använda för att börja spela in? Uppgift 6.27 Och vilken tangent för att sluta spela in (avsluta definitionen)? Uppgift 6.28 Det finns andra sätt att ta reda på detta, men slå ändå upp i Info för att se att du kan det också. Kontrollfråga: Vad är det för nummer på detta avsnitt i Info? (De övriga kommandona som har med makron att göra kan du strunta i denna gång.) Kopiera us-states.txt till us-states-6.txt i den katalog som sköts av Subversion. Öppna kopian i Emacs och checka in den. Placera dig sen först på första raden. Använd nu enbart kortkommandon från tangentbordet för att ändra den raden från Delaware till Delaware (1787) genom att»döda«årtalet och sen klistra in det igen på rätt ställe tillsammans med övriga ändringar. (I resultatet är det bara ett mellanslag mellan delstatsnamn och parentes.) När detta går bra så spela in medan du gör det. Stå i början av den första raden som ska ändras och tryck på tangenten för att spela in. Ändra raden som du ska och avsluta genom att placera dig i början av nästa rad och avsluta inspelningen. Nu kan du trycka på den senaste tangenten igen för att utföra samma sak för den raden, osv. för alla rader, så att alla rader kommer att bestå av ett delstatsnamn, ett mellanrum och dess årtal inom parentes. När det är klart så spara och checka in resultatet! Uppgift 6.29 Hur skrev du ditt makro? När ditt makro fungerar bra, så gör M-x insert-kbd-macro i svarsfilen för att få fram svar på denna fråga. När du får fråga om name så tryck bara retur. Detta lägger in kod som visar ditt makro. Klar för idag? När du slutar för dagen, så checka in det du har gjort hittills i ids6.txt innan du går! Om du har ändrat saker i tidigare labbar så checka in dem också innan du går. Gå i skalet till Subversionkatalogen och ge kommandot svn status där. Om du får ett tomt resultat är allt som det ska. Om du får rader som börjar med»m«är det filer som är modifierade men inte incheckade. Om du får rader som börjar med»?«är det filer som inte är registrerade. Se till att inga av dina labbfiler listas där. Checka in ändringar och kolla med svn status igen. Kommer jag åt filerna hemifrån?: Ja, om du har svn på din dator kan du skapa en arbetskatalog med samma filer där också. När du ger det första kommandot för att checka ut katalogen måste du skriva svn://stp.lingfil.uu.se/ids16/username istället för bara svn://stp/ids16/username för att den ska hitta servern. Om du har gjort ändringar på ena stället så ge kommandot svn update på andra stället för att få in ändringarna där också. 66

67 Kapitel 7 LaTeX LaTeX är ett typsättningsprogram. Det är ett sätt att göra texter färdiga för tryck som skiljer sig från ordbehandlare och mer liknar att lämna in ett manus till ett sätteri. Input är en vanlig textfil skriven i en editor i vilken texten blandas med kommandon för typsättning. Dessa filer brukar ha namn som slutar med».tex«. LaTeX används mycket för akademiska artiklar. Det finns bra stöd för sådant som bibliografier och källhänvisningar. Matematisk sats är dess specialitet, men även inom t. ex. lingvistik används det mycket. Tidskriftsartiklar inom datorlingvistik skrivs oftast med LaTeX, och STPare skriver sina exjobb och ibland kursrapporter i LaTeX. LaTeX bygger på ett tidigare system TEX. I denna text talas hädanefter om LaTeX även när det som sägs inte är specifikt för LaTeX, utan gäller för TEX överhuvudtaget. Traditionellt producerar LaTeX output på ett särskilt format som heter DVI (Device Indepen- TEX LATEX Figur 7.1: När logotypen TEX med det nersänkta E:et inte kan användas brukar man skriva»tex«. För LaTeX finns det också en logotyp, LATEX, men den använder jag inte i detta kompendium. dent), men det går även att producera PDF, och det är vad denna text utgår från. PDF (Portable Document Format) är ett populärt filformat utvecklat av Adobe Systems. 7.1 Stycken och rader I själva texten spelar det ingen roll var man bryter raderna i input. LaTeX kommer att bryta raderna i den satta texten där den finner det bäst att göra det sen ändå. Man markerar nytt stycke med tomrad, så som nytt stycke ofta visas t. ex. i text på bildskärm. Vanligen visas nytt stycke (paragraph på engelska) istället med indrag i satt text på papper, så som i denna text. Nu kommer ett nytt stycke: Men hur det visas beror som mycket annat på vad är för slags dokument man skriver. När man behöver göra något särskilt i texten använder man vissa speciella tecken och olika kommandon för det. 7.2 Allmän struktur Ett litet LaTeX-dokument kan se ut som i figur 7.2, som både visar LaTeX-koden och dess resultat. Själva texten står mellan \begin{document} och \end{document}. Före det, i dokumentets huvud, kan en del funktionalitet ändras, bland annat genom att extra paket laddas in, som här, där ett paket»url«laddas in. En sak man kan se direkt är att klamrar {} används som parenteser för att hålla ihop text i LaTeX. Exemplet har två avsnitt (section) med rubrik. Det finns två exempel på matematik. Dels en numrerad ekvation mellan \begin{equation} och \end{equation} och dels en kort text mellan \( och \). I den matematiska texten finns en del extra kommandon, och vanliga bokstäver skrivs kursivt som variabler. 67

68 7. LATEX \documentclass[a5paper]{article} \usepackage{url} \begin{document} \author{albert Einstein} \title{special Relativity} \date{june 30, 1905} \maketitle \section{some text} Bla bla bla bla bla bla bla bla bla. Bla bla bla bla bla bla bla bla bla. Bla bla bla bla bla bla bla bla bla. Read more at \url{ \section{conclusions} I have shown that \( e = mc^2 \), and further that \begin{equation} m = { m_0 \over \sqrt{1 - { v^2/c^2 }}} \end{equation} \end{document} 1 Some text Special Relativity Albert Einstein June 30, 1905 Bla bla bla bla bla bla bla bla bla. Bla bla bla bla bla bla bla bla bla. Bla bla bla bla bla bla bla bla bla. Read more at 2 Conclusions I have shown that e = mc 2, and further that m = m 0 1 v2 /c 2 (1) Figur 7.2: Einsteins speciella relativitetsteori (i starkt förkortad version). Till vänster LaTeX-kod och till höger dess resultat Kommandon med \ (bakstreck) Kommandon i LaTeX inleds normalt med bakstreck. Sedan följer antingen ett tecken som inte är en bokstav, eller ett ord med en eller flera bokstäver. Ett exempel på ett kommando av den första sorten ses i 42\,000\,000 som ger» «(42 miljoner). Där används \, som lägger in ett smalt mellanrum som inte kan brytas. Så markerar man vanligen tusental för stora tal i tryckt text. 1 I Einstein-exemplet finns det två andra exempel, \( och \), som påbörjar respektive avslutar matematisk text. Den andra sorten, med en eller flera bokstäver, finns det flera exempel på i figur 7.2, t. ex. \author och \maketitle, och \sqrt för square root (= kvadratrot) i den matematiska texten. Alla tecken går att skriva med hjälp av bara ASCII. Om man t. ex. inte hittar» «på sitt tangentbord kan man skriva \copyright istället. 1 På bland annat svenska. På t. ex. engelska används istället oftast komma som tusenavskiljare: 42,000, Argument till kommandon En del kommandon tar argument. Då blir det som kommer direkt efter kommandot argument till kommandot. Ett exempel är kommandot \= som lägger en makron (övre streck) över sitt argument, så Liep\=aja ger»liepāja«(en stad i Lettland). Ett annat exempel är \author i figur 7.2. Där är argumentet (»Albert Einstein«) längre än ett tecken och står därför inom klamrar. 7.4 Klamrar för grupper Med {} avdelar man nämligen en grupp. Detta är ett sätt att behandla en del av texten som en enhet, och används framför allt för att ge denna del som argument till ett kommando, t. ex. kommandot \emph som betonar en text (emphasize) genom att kursivera den: LaTeX är skapat av \emph{leslie Lamport} ger»latex är skapat av Leslie Lamport«. Exemplet Liepāja ovan hade kunnat skrivas Liep\={a}ja, men här behövs inget ihopgrupperande, utan det räcker med Liep\=aja eftersom argumentet bara är ett tecken. 68

69 7.5. Speciella tecken 7.5 Speciella tecken Tabell 7.1: Kommandon för att välja typsnitt i LaTeX Bakstreck och klamrar är inte de enda tecken som har särskilda betydelser i LaTeX. Här är en längre lista: # $ % & ~ _ ^ \ { } Om man vill skriva dessa tecken får man därför använda särskilda kommandon. Kommandona \# \$ \% \& \_ \{ \} finns för att verkligen skriva motsvarande tecken. 7.6 Titel och rubriker Kommando \emph{text} \textrm{text} \textsf{text} \texttt{text} \textmd{text} \textbf{text} \textup{text} \textit{text} \textsl{text} \textsc{text} Effekt Betonad Vanlig text Sans serif Skrivmaskin Medium (vanlig) Fetstil upprätt Kursiv lutande KAPITÄLER Titeln i början av dokumentet skapas av \maketitle. Den text som det blir beror på vad man har skrivit innan dess för argument till kommandon som \title, \author och \date, som själva inte skriver någon text i dokumentet. Rubriker gör man med kommandon som \section{förord}. Lägre rubriknivåer ges med \subsection och \subsubsection. Vilken stil sådana rubriker skrivs med beror på ens dokumentklass och inställningar. Dokumentklassen avgör också vilka nivåer som finns tillgängliga. I bland annat dokumentklasserna book och report finns även \chapter som en högre nivå. 7.7 Omgivningar med begin end I många fall kan man avgränsa en speciell del av texten som en omgivning (environment). En sådan omgivning börjar med ett kommando \begin med något argument och slutar med ett \end med samma argument. Detta exempel visar koden över och resultatet under den streckade linjen. \begin{itemize} \item surprise \item fear \item ruthless efficiency \end{itemize} surprise fear ruthless efficiency Omgivningen itemize avgränsar alltså en punktlista, och i den finns det ett särskilt kommando \item som anger att en ny punkt börjar. Med omgivningen enumerate får man istället en numrerad lista som börjar med 1 och går uppåt. Vi har redan sett omgivningen document som omger hela texten. 7.8 Typsnitt I tabell 7.1 visas olika kommandon för att byta typsnitt i LaTeX. Varje typsnitt tillhör en familj, en serie och en form. Med»skrivmaskin«menas här en icke-proportionell font, dvs. en där alla tecken är lika breda. Det mest använda av dessa kommandon är \emph{...} för att betona en del av texten. I de flesta sammanhang visas detta med kursiv stil. Det går att kombinera olika familjer, serier och former med varandra. För att skriva text i andra storlekar finns kommandon som \tiny, \scriptsize, \footnotesize, \small, \large, \Large, \LARGE, \huge och \Huge. Dessa tar inga argument utan ändrar storleken på allt som följer inom den grupp de står. Grupper avgränsas av {} och av omgivningar. Med {\huge hej} får man hej, till exempel, och med {\tiny hej} får man hej. Utan klamrarna runt skulle ändringen fortsätta att gälla för resten av texten! 7.9 Hårt mellanslag (~) Med tildetecknet (~) skriver man ett hårt (fast) mellanslag, det vill säga ett där det inte bör bli radbrott. Man bör till exempel helst skriva John~F. Kennedy istället för John F. Kennedy eftersom man annars kan råka få ett radbrott som anses vara osnyggt, som i denna mening. Förutom förnamn och initialer anses det även bäst att hålla ihop många fall av ord plus kort sifferuttryck som»figur 1«och»kapitel 2«, samt numrerade kungar som»kristian II« Bindestreck och tankstreck Det finns olika långa vågrätta streck vilket skrivs med ett till tre tecken i rad: - (-) Bindestreck, divis 69

70 7. LATEX -- ( ) en-dash --- ( ) em-dash. Den mellanlånga används till intervall: juni ger juni. På svenska används den också som talstreck och tankstreck då med mellanrum runt sig. (I engelsk och amerikansk typografi används istället oftast det allra längsta strecket som tankstreck då utan några mellanrum runtom.) 7.11 Citattecken På s. 39 stod det om hur man i en del sammanhang använder ASCII-tecknen ` och ' för att beteckna de olika citattecknen före respektive efter ett citat (på t. ex. engelska). Så gör man i LaTeX. Så för att få quote skriver man `quote' och för att få quote skriver man ``quote''. På svenska används däremot samma tecken före och efter: ''citat'' (som ger citat ). Observera att man skriver två citattecken efter varann för att få dubbelcitat. Det raka dubbelcitattecknet " i ASCII används aldrig som citattecken i LaTeX, eftersom det skulle vara oklart åt vilket håll det skulle vara riktat Dokumenthuvudet Det som blir själva texten står som tidigare sagt i en omgivning document, dvs. mellan \begin{document} och \end{document}. Före detta finns det så kallade dokumenthuvudet. Den första raden anger dokumentklass kan som enklast se ut som \documentclass{article}. Några standarddokumentklasser som följer med LaTeX är article, report och book, men det finns även ett stort antal andra dokumentklasser skrivna på olika håll. En del är specialiserade för en visst slags text, t. ex. affärsbrev, doktorsavhandlingar eller mötesprotokoll. I inluppen får ni använda en lokal klass stupp (språkteknologi uppsala) som bygger på en som heter scrartcl. När man anger dokumentklass kan man också ge ett optionellt argument inom [] där man listar ett antal väljare som ändrar hur den klassen fungerar på olika sätt. Vilka väljare som kan ges beror på vilken klass man använder, men några som standardklasserna använder är: a4paper Gör layout för att passa A4-papper. Det är default för stupp. 10pt, 11pt, 12pt Någon av dessa kan användas för att ange hur stor texten ska vara i»punkter«. Det görs annorlunda i stupp. twocolumn Skriv texten i två kolumner per sida Hela raden kan se ut t. ex. så här: \documentclass[a4paper]{report} Om man har flera väljare så listas de med komma mellan sig. Det här kompendiet är skrivet med LaTeX och börjar \documentclass[a4paper,twocolumn]{memoir} usepackage Förutom att man på ovanstående sätt kan anpassa dokumentklassen i viss mån kan man även ladda in paket i LaTeX som kan göra allt möjligt, t. ex. definiera fler kommandon eller ändra betydelsen på det man redan har. Detta görs med \usepackage. I figur 7.2 används ett paket»url«. Det gör att ett kommando \url definieras och kan användas senare i dokumentet. Vitsen med detta är framförallt att få raddelning på ett annat sätt än normalt för sådana. Kommandot ser till att det inte blir avstavning med bindestreck i delarna eftersom det kan göra det oklart om bindestrecken ingår i urlen/ sökvägen eller inte. Dessutom kommer ~ att bli en tilde och inte tolkas som hårt mellanslag så som är det normala, och hela texten skrivs ut med en särskild stil, normalt skrivmaskinsstil. I samma paket definieras också ett liknande kommando \path för att skriva sökvägar, som t. ex. \path{~/desktop/foo.txt}. Ett vanligt paket för att kunna inkludera bilder är graphicx. (Observera stavningen!) (Både url och graphicx är med från början i stupp.) Även till \usepackage kan man ge extra information inom []. Paketet babel hanterar t. ex. sånt som är speciellt för olika språk, och då ger man språket inom [] så här: \usepackage[swedish]{babel} Det gör t. ex. att kommandot för att lägga in innehållsförteckning (se avsnitt 7.15) använder»innehåll«som rubrik istället för»contents«och liknande för andra kommandon med annars fixa texter. Det gör också att svenska avstavningsregler används. Med stupp görs följande två automatiskt, men annars är det något som du oftast bör ha med, t. ex. i standarddokumentklasserna book, report och article: \usepackage[utf8]{inputenc} \usepackage[t1]{fontenc} Den första raden talar om vilken teckenkodning LaTeX-filen är skriven med. Utan den fungerar inte tecken som åäö i filen. Den andra raden talar om vilken fontkodning LaTeX ska använda. (Detta behövs för att åäö ska räknas som egna bokstäver och inte bara som ett a eller o med accent. Utan detta kommer klippoch-klistra från den resulterande PDF-filen ge fel 70

71 7.13. Figurer Se till exempel figur~\ref{fig:knuth} Figur 7.3: Donald E. Knuth har skrivit TEX som LaTeX bygger på. resultat, och dessutom kommer avstavningsmönster som innehåller åäö inte att fungera.) 7.13 Figurer Figurer är floats. De har inte en fix exakt placering i texten, utan kan flyta runt och passas in där de får rum i den ordning som de kommer i texten. Se till exempel figur 7.3 som på ett sätt kan sägas ha hamnat mitt i en mening. Den figuren har skapats med ungefär följande: \begin{figure} \centering \includegraphics{donknuth} \caption{donald E. Knuth har skrivit \TeX\ som LaTeX bygger på.} \label{fig:knuth} \end{figure} vilket gav texten Se till exempel figur 7.3 men kan ändras om jag lägger till eller tar bort figurer. Märk även: Kommandot \centering anger att text och annat ska centreras. Eftersom det står inne i en begin-end-omgivning gäller det bara innanför den. Det är inget som nödvändigtvis ingår i figure att det ska vara en bildfil som inkluderas. Det hade kunnat stå godtycklig LaTeX-text istället. Ibland kan man t. ex. vilja lägga ut ett lite programkod i en figur med en verbatim-omgivning. Se avsnitt Man skriver in figuren ungefär på det ställe i texten där man vill ha den (normalt där man första gången refererar till den med \ref), så dyker den upp ungefär där, beroende på var den passar in. (Mer detaljer om hur man kan styra placeringen tas inte upp här.) Ofta behöver man anpassa en bildfil för att den ska passa som illustration. I synnerhet kanske bilden inte har rätt storlek för att passa in. Ett sätt att lösa sådant är att ange hur hög bilden får vara, så här: \includegraphics[height=5cm]{dragon} Bilden kommer att förminskas (eller förstoras) så att den får den önskade höjden. Man kan istället ange bildens bredd, med t. ex. width=10cm istället. Ibland kan det vara praktiskt att ange width=\linewidth som ger samma bredd som texten har. Själva bildfilen togs in med kommandot \includegraphics. För att det ska fungera måste ett extra paket graphicx användas, så därför har jag skrivit \usepackage{graphicx} i dokumentets huvud. Det följer med automatiskt med stupp, så i inluppen behöver ni inte göra det. Filen heter egentligen donknuth.png, men filnamnsändelsen behöver inte anges. Med \caption ger man en bildtext som argument. En viktig del är kommandot \label som ger denna figur en etikett i exemplet»fig:knuth«. Figurer brukar man referera till i texten, och då vill jag inte behöva tänka på figuren som figur»7.3«, för det numret kan ju ändras allteftersom jag tar bort och lägger till figurer medan jag skriver, utan istället tänker jag på den som»figuren Knuth«och kallar den»fig:knuth«i LaTeX-koden. När man vill referera till en sådan etikett i sin text använder man kommandot \ref med etiketten som argument. Jag har därför ovan skrivit 7.14 Kommentarer med % I LaTeX fungerar procenttecknet som kommentarstecken. LaTeX ignorerar allt som följer efter ett procenttecken fram till slutet av raden. Med användning av detta kan man kommentera bort delar av texten så att de inte syns i det man producerar, men ändå finns kvar där i texten man arbetar med ifall man ångrar sig senare. Det är också vanligt att man använder det för kommentarer till sig själv innan texten är färdigskriven. Här är som exempel ett litet utdrag ur min LaTeX-kod till teckenrepresentationskapitlet, närmare bestämt en del från s. 40 med en lista med exempel på locales: \item \texttt{fr\_ca} : Franska i Kanada \item \texttt{zh\_cn} : Kinesiska i Kina \item \texttt{zh\_tw} : Kinesiska i Taiwan % \item \texttt{nb\_no} : Bokmål % \item \texttt{nn\_no} : Nynorska 71

72 7. LATEX Här kan man se hur jag i något skede av skrivandet hade med två exempel till, som jag sen kommenterade bort så att de inte kom med i kompendiet. Genom att göra det till en kommentar istället för att ta bort raderna helt skulle jag enkelt kunna ta tillbaks dessa exempel om jag ångrat mig igen Att referera inom texten För att kunna referera till en annan del av texten använder man alltså kommandona \label och \ref som båda tar ett argument. Det gäller inte bara figurer och tabeller, utan andra delar också, t. ex. numrerade kapitel och andra avsnitt. Även då vore det dumt att skriva»kapitel 7«i texten, för innan man har skrivit klart så har man kanske flyttat det kapitlet eller delat upp ett tidigare kapitel i två så det har ett annat nummer. Istället kan man använda kommandot \label direkt efter kommandon som \chapter och \section och sen hänvisa tillbaka till dessa etiketter med \ref som vanligt. Exempel: På sidan 70 står denna parentes, här visad med LATEX-kod och med dess resultat: (se avsnitt~\ref{sec:referera}) (se avsnitt 7.15) Med en etikett kallade jag avsnitted om att referera för sec:referera så att jag kunde hänvisa till det med \ref och få rätt siffror. Att det står ~ istället för vanligt mellanslag mellan»avsnitt«och siffrorna är bara för att undvika nyrad just där. Med \pageref refererar man istället till den sida där motsvarande etikett finns: se avsnitt~\ref{sec:referera} på sidan~\pageref{sec:referera} Det finns annat som också kan kräva flera pass genom filen. Med kommandot \tableofcontents kan man t. ex. lägga in en innehållsförteckning till ett dokument, men vilka kapitel som finns var vet inte LaTeX förrän vid andra körningen, så efter första körningen är innehållsförteckningen ännu tom Övriga tecken Vill man skriva tecken som man inte hittar på tangentbordet kan man använda LaTeX-kommandon för det. I tabell 7.2 visas några kommandon för att sätta accenter över och under bokstäver, inklusive en del lite ovanligare accenter. Alla kommandon hade kunnat använda klamrar runt sina argument, men i tabellen används detta inte för de kommandon vars namn består av en icke-bokstav verbatim och \verb När man vill inkludera skalkommandon eller programkod i en rapport är det besvärligt om en mängd tecken tolkas speciellt av LaTeX. Då kan man använda en speciell omgivning verbatim. Efter \begin{verbatim} återges allt utan några särskilda tolkningar fram till nästa \end{verbatim}. Så genom att skriva \begin{verbatim} Här kan jag skriva \ och % osv. \end{verbatim} får man Här kan jag skriva \ och % osv. Skrivmaskinsstil används, så som man ofta gör när man återger programkod. se avsnitt 7.15 på sidan 72 Man brukar ge figurer etiketter som börjar med»fig:«, kapitel etiketter som börjar med»chap:«, avsnitt etiketter som börjar med»sec:«osv. för att lätt skilja dem åt. När man kör LaTeX på en fil lär den sig sånt som att fig:knuth ska bli 7.3 så att den vet det till nästa gång man TeXar filen. Det gör att när en hänvisning sker framåt i texten så behöver man TeXa filen en gång till innan alla detaljer stämmer. (Det talar LaTeX om vid körningen i så fall, i stil med LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right. Tabell 7.2: Några accentkommandon i LaTeX \'o ó akut accent \`o ò grav accent \^o ô cirkumflex \"o ö diaeresis/umlaut \~o õ tilde \=o ō makron \.o ȯ \u{o} ŏ \v{o} ǒ \H{o} ő långt ungerskt umlaut \c{o} o cedilj \d{o} ọ d = dot \b{o} ō b = bar 72

73 7.18. LaTeX i Emacs AUCTeX För kortare text inne i ett stycke kan man använda kommandot \verb. Här är ett till exempel med först kod och sen resultat som visar hur man kan använda det: Med det reguljära uttrycket \verb![^0-9]$! fungerade det. Med det reguljära uttrycket [^0-9]$ fungerade det. Ett annat problem med UTF-8 i LaTeX är att av tekniska skäl måste det godtyckliga tecknet som används med \verb vara ett ASCII-tecken, så det går inte att använda t. ex. \verb foo eftersom inte finns med i ASCII. Ofta används något av tecknen! +=_ som brukar avdela texten rätt tydligt. (Det finns varianter (X LATEX, LuaLATEX) där sådant fungerar bättre och som gradvis blir allt vanligare.) E Man slipper att ^ och $ tolkas särskilt av LaTeX. För att man ska kunna ha med vilka tecken som helst i argumentet till \verb så beter den sig speciellt. Istället för {} runt argumentet sätter man ett godtyckligt tecken som inte är en bokstav före och efter. Det betyder alltså samma sak att skriva \verb!foo! som \verb=foo= som \verb{foo{. Inom verbatim så bryter LaTeX raderna precis där man själv har brutit raderna, så se upp med att ha för långa rader som inte syns helt för att de sticker utanför papperet! Det kan leda till att texten spiller ut där den inte hör hemma. Dessutom blir det svårt att se va Det finns paket som är till för snitsigare kodlistningar också, men den enkla omgivningen verbatim duger bra ibland LaTeX i Emacs AUCTeX Vi använder ett särskilt paket AUCTeX för att använda LaTeX i Emacs. (Det är annars ännu inte det normala i Emacs, så om du editerar LaTeXfiler i Emacs på en annan dator kan det bete sig annorlunda.) Det kommer att användas i labben och ger exempel på hur ett editeringsläge i Emacs kan ge särskilt stöd för en viss sorts text. Det sker bland annat genom att Emacs förstår sig på syntaxen i LaTeX-filer och därmed visar kommandon, text och kommentarer i olika färg, och ger»lagom«långt indrag med TAB-tangenten, beroende på vad det är man skriver. Det märks också på att det finns särskilda kommandon för att lägga in vanliga saker i filen, t. ex. figurer och tabeller; samt att man kan köra LaTeX på filen med kommandon direkt från Emacs och att den då även tolkar eventuella felmeddelanden och direkt tar en till rätt rad i den fil man skrivit. Detta liknar motsvarande stöd för olika programspråk när man programmerar Mer information Det finns gott om introduktioner till LaTeX. På finns en del användbara länkar, bland annat till sånt som handlar specifikt om användning av TEX för lingvistik. Det finns mycket i LaTeX som passar för språkvetenskap, som funktionalitet för att rita träd, skriva fonetisk skrift och grammatiska strukturer enligt flera formalismer med mera UTF-8 och LaTeX Allt fungerar inte perfekt med Unicode i LaTeX. Långt ifrån alla tecken fungerar rakt av att bara stoppa in i filen. För att skriva på ryska (porusski) är det inte bara att stoppa in sådana tecken i filen, t. ex. 73

74 Inlupp 7: LaTeX Innan något annat Gå till kurskatalogen och ge kommandot svn co svn://stp/ids16/alla Det skapas en ny Subversion-katalog alla som du ska använda senare i labben, men inte nu direkt. Första LaTeX-dokumentet Dessa labbinstruktioner är pratiga med detaljerade instruktioner som du får följa steg för steg. Början I denna labb ska du skapa en LaTeX-fil med diverse innehåll i Emacs. Börja med att i Emacs öppna en ny fil latex1.tex i katalogen från förra gången som heter som ditt användarnamn och som Subversion sköter. Emacs känner igen ändelsen.tex så du hamnar i en särskild Emacs-mode för att editera LaTeX. I informationsraden står det LaTeX/P inom parentesen och du har särskilda menyer, bl. a. en som heter just LaTeX. Det bör också stå Fill i parentesen i informationsraden, eftersom du har slagit på Options Auto Fill in Text Modes i menyerna tidigare. I samma katalog ska du också skapa och checka in ids7.txt med svar på frågor. Omgivningen document Varje dokument ska ha en document-omgivning. Med C-c C-e kan man lägga in en omgivning i texten, så tryck C-c C-e. I minibufferten får du en anmodan om att ange environment type och default-värdet är document, dvs. det är vad det blir om du bara trycker på RET. Gör så! Huvuduppgiften för C-c C-e är att lägga in \begin{nånting} och \end{nånting}, men beroende vad det är för omgivning det gäller så kan den ordna lite annat åt en också. I detta fall passar den på att lägga in deklarationen om vad det är för dokumentklass. Du har fått en fråga om dokumentklass och defaultvärdet är article, men svara istället stupp. Sen frågas efter Options. Svara ingenting, dvs. tryck bara på RET. Att C-c C-e började på C-c var väl inte någon överraskning? Det är den normala prefixtangenten i Emacs för kommandon som är speciella för ett visst läge, i detta fall för LaTeX-läget. Ett första avsnitt Skriv in \section{röda rummet}, ny rad, och lägg sedan in filen /local/kurs/ids/rummet2. txt med Emacs-kommandot File Insert File (eller C-x i) som lägger in en fil i din buffert. (Observera att själva texten visas med normal svart text, medan en del kommandon, deras argument och annat speciellt visas i olika färger. Eftersom detta är en ren textfil så är det inte så att olika delar i filen verkligen har olika färg, utan det är bara Emacs som visar det så eftersom den förstår sig på syntaxen och känner till en del viktiga LaTeX-kommandon.) Att tillverka och titta på en PDF-fil Spara filen. Nu när du har en liten text, så tillverka en PDF-fil från detta genom att köra LaTeX på filen. Tryck på C-c C-c för att ge ett kommando för texten. Det står default LaTeX. Det blir bra, så tryck på RET. Ganska snart står det LaTeX: successfully formatted {1} page. Ge nu kommandot C-c C-c igen. Eftersom du redan har lyckats generera en PDF-fil så är defaultkommandot nu stället»view«. Det passar bra, så tryck på RET. Du får upp ett kommando för att titta på PDF-filen. Detta är så att du ska kunna ändra i detta om du vill, men det duger bra som det är, så tryck på RET igen. Du får upp en annat fönster som visar innehållet i din PDF med hjälp av programmet evince. Se till att flytta runt dina fönster så att du ser Emacs och evince samtidigt, sida vid sida. Huvudet I första stycket har ordet»stickorna«fått en dålig avstavning. Uppgift 7.1 Var har det avstavats? 74

75 Första LaTeX-dokumentet Det är för att du inte har talat om för LaTeX att texten är på svenska. Gå därför till dokumentets huvud, dvs. i delen mellan \documentclass{...} och \begin{document} och lägg till en rad som talar om språk och TEXa om filen med C-c C-c igen och se hur den visade texten uppdateras. Uppgift 7.2 Hur avstavas»stickorna«efter att du fixat detta? Den här textfilen använde inte sådana tecken som är speciella i LaTeX, som t. ex. $ eller %, så den gick att stoppa in rakt av. Det finns bara en detalj som inte är helt rätt, och det är att textfilen använder tecknet - i två olika betydelser. Sök upp alla - i filen med C-s i Emacs. I ett fall är det ett bindestreck i ett sammansatt ord och är bra som det är. I ett annat fall är det ett tankstreck. Byt ut det senare mot -- för att få ett längre streck. (Skillnaden är inte så stor, men en del märker såna detaljer.) Lägg in rader med \author{ditt namn}, \title{labb 7 -- LaTeX} och \maketitle direkt efter \begin{document}, i stil med hur Einstein gjorde i figur 7.2. (Använd ditt namn och inte Strindbergs du kommer snart lägga in mer text i dokumentet.) I den figuren anges även datum, men ta inte med nån sån rad alls. Kör C-c C-c och LaTeX igen och kontrollera att du fått med titeln. Uppgift 7.3 Du angav inget datum. Hur gör \maketitle med datum då? Nu är dokumentet längre än en sida. I skiftnyckelmenyn i evince kan du välja om dokumentet ska visas Continuous eller inte. Prova och se vad det innebär! Att göra fel Ibland råkar man skriva fel så att det man har skrivit inte är en korrekt LaTeX-fil. Har du inte redan gjort det så kommer du att göra det så småningom, så gör det med flit nu för att se hur man får hjälp med att se var det blev fel. I texten nämns barège-lappar på ett ställe. Du tänker att det är ett svårt ord som kräver en förklaring, så du tänker skriva en förklarande fotnot till det ordet. Du har (felaktigt) fått för dig att man kan skriva sådana med ett kommando \foot, så lägg till \foot{barège är ett slags tunt, glest tyg} direkt efter det svåra ordet. TEXa sedan om filen med C-c C-c. Du får ett meddelande i ekoarean om att det har blivit fel. I ikonraden direkt under menyerna i Emacs har en varningstriangel dykt upp. Tryck på den för att komma till felet. Du får se två Emacsfönster samtidigt. Ett med din LaTeX-fil där du hamnar där det är fel. Ett med en beskrivning av felet. Först står där»er- ROR:«och ett kort felmeddelande. Sen återges precis den del där det blev fel och på slutet står en hjälptext om just detta fel. Uppgift 7.4 Hur lyder det där korta felmeddelandet efter»error:«? Felmeddelandet bör vara rätt begripligt. Så \foot var visst fel. Du kommer plötsligt på att visstja, det heter \footnote istället! Ändra till detta men råka göra ett nytt fel. Råka byta ut det { som står direkt efter \footnote mot ett mellanslag och TEXa. Du får då ett nytt fel. Gå till det felet. Hur lyder detta nya felmeddelan- Uppgift 7.5 de? Rätta detta, TEXa din fil och se på resultatet. Du kommer antagligen att göra flera oavsiktliga fel på egen hand efter detta, men nu vet du hur du då kan få hjälp om var det är fel. Ibland kommer felmeddelandet att vara hjälpsamt. Ibland kommer du antagligen inte att förstå vad felmeddelandet handlar om, men du får i alla fall en vink om ungefär var i filen det blivit fel. Det formella felet blir inte alltid exakt där du har gjort fel. I det senaste exemplet blev t. ex. felmarkeringen vid slutparentesen } när felet egentligen var att du glömt den inledande parentesen en bit tidigare. När det har blivit flera fel så kan du använda feltriangeln för att gå vidare till nästa fel efter att du tittat på (och förhoppningsvis rättat) ett. Men har du fått många fel som du inte förstår så koncentrera dig på att fixa det första och kör sedan om. Kanske är de andra följdfel av det första. Listan Gör ett nytt avsnitt (section) med titeln»topplistan«. Där ska du härma texten i figur 7.4. Använd kommandot \emph för att betona ett par ord Use C-c to display: I meddelandet i ekoarean när det blir fel står det om C-c `. Det gör samma sak som den där feltriangeln ger så du kan använda det istället om du vill hålla kvar händerna på tangentbordet. Men observera i så fall att efter C-c är det en grav accent som är besvärlig att skriva. Den ligger på en död tangent med akut och grav accent så den tangenten måste skiftas (så att det blir rätt accent) och sen får man lov att följa efter med mellanslagstangenten för att få ` utan något under. 75

76 INLUPP 7: LATEX De Unix-kommandon som är mest inne just nu är 1. grep 2. pwd 3. ls 4. sort 5. iconv Figur 7.4: En del av det dokument ni ska skriva. Utseendet kommer inte att bli helt identiskt, för det här kompendiet är inte skrivet med samma fonter eller inställningar. i texten som det är gjort där, och använd omgivningen enumerate för att få själva uppräkningen. Använd C-c C-e för att lägga in omgivningen. Vilken omgivning föreslås som de- Uppgift 7.6 fault då? Använd alltså enumerate istället för det som står som default. Du kan använda komplettering. (Vad gäller själva listan kan du skriva andra kommandon eller i en annan ordning om du vill.) Uppgift 7.7 När man skriver sådana här listor finns det ett kortkommando för att skriva ett nytt item. Hur lyder det? (Det finns med i LaTeXmenyn.) Sagan Gör ett nytt avsnitt (section) med en rubrik som passar din saga, och lägg in texten i din saga där. Se till att hantera eventuella»konstiga«tecken som LaTeX tolkar speciellt ifall du råkar ha sådana i din text. Använd LaTeX-kommandot \emph för att betona något ord eller fras i texten. Hänvisningar Hittills har du skrivit in \section själv för hand. Man kan också använda ett kommando för det, vilket även gör det extra lätt att lägga in en etiketter för denna rubrik. Ställ dig på rätt plats för nästa avsnitt om du inte redan är där och tryck C-c C-s. Detta lägger in en rubrik. Du får först välja hur hög nivå det ska vara på den. Defaultvärdet section blir bra, så tryck på RET. Därnäst får du skriva titeln på detta avsnitt. Det ska vara»mosebacke«så skriv så och tryck RET. Nu får du en ny fråga: (Optional) What label: sec: på vilken du svarar mosebacke och trycker RET. Om du gjort rätt så har du därmed lagt in \section{mosebacke} \label{sec:mosebacke} i bufferten. Skriv ett par inspirerade rader om Mosebacke i detta avsnitt eller bara bla bla bla om du inte orkar hitta på nåt bättre. Nu ska du använda denna etikett för att kunna hänvisa till detta avsnitt från en annan plats i texten. Gå till slutet av första avsnittet (»Röda rummet«) och lägg till följande där: Läs mer om Mosebacke i avsnitt \ref{sec:mosebacke}. TEXa filen och se vad du får för nytt meddelande i ekoarean när du gör detta. LaTeX vet inte exakt vad det ska stå i första avsnittet förrän den redan tittat igenom hela texten, så du behöver TEXa den igen. Tryck därför C-c C-c igen. Emacs vet att du behöver TEXa om filen, så defaultkommadot är LaTeX. Nu ska du få»successfully formatted«igen. Uppgift 7.8 Vilken mycket kort text resulterade \ref{sec:mosebacke} i till slut? Urlar Sök upp någon sida på nätet (t. ex. på Wikipedia) med information om Mosebacke. Ändra meningen»läs mer om Mosebacke... «så att den förutom till dit avsnitt sec:mosebacke även hänvisar till webbadressen (urlen) för denna webbsida. Använd samma sätt att hänvisa till en url som i figur 7.2. Kommandot C-c C-c Du har använt kommandot C-c C-c både för att TEXa en fil (LaTeX) och för att titta på resultatet (View). Du har även sett att Emacs ofta vet vilket kommando du nog vill göra och föreslår LaTeX igen när det behövs. Men det går att ge andra kommandon där också. Tryck C-c C-c och välj kommandot Clean. Det rensar upp en del filer som LaTeX skapar medan det kör med mellanresultat. Då får en fråga om du verkligen vill ta bort dessa filer. Uppgift 7.9 ta bort? Vilka filer undrar Emacs om du vill (Du kan svara vilket som på frågan nu.) 76

77 Första LaTeX-dokumentet Figurer Allt som saknas nu är en figur. Välj ut nånting vad som helst i texten att ge en figur till. Det skulle t. ex. kunna vara en bild på en groda om du har en groda med i din saga. Sök upp en lämplig bild på nätet, t. ex. med bildsökning på En bra källa till bilder som det står det fritt att återanvända är annars illustrationer till artiklar i uppslagsverket Wikipedia på Välj en bild på något av formaten png, pdf eller jpg. Lägg bilden i samma katalog som latex1.tex. Innan du lägger in själva figuren, så lägg in en hänvisning till den på lämpligt ställe. Om du t. ex. har valt en bild på August Strindberg så skulle du kunna skriva så här i början av avsnittet»röda rummet«: Här är den kända inledningen till romanen \textit{röda rummet}. I figur \ref{fig:strindberg} finns en bild på författaren, August Strindberg. Använd en etikett som börjar med fig: och som visar vad det är för figur. (Det behöver inte likna filnamnet.) Om du försöker TEXa nu (prova!) kommer du att få ett varning om att det blir»unresolved references«. Den etikett som du refererar till definieras aldrig. Uppgift 7.10 Vad syns i texten på det ställe där denna okända referens används? Dags att lägga in själva figuren! Ställ dig antingen före eller efter det stycke där du har med referensen, och tryck C-c C-e för att lägga in en omgivning denna gång omgivningen figure. Den första frågan du får är (Optional) Float position: Detta behöver du inte svara på (optional) så tryck bara på RET för att strunta i detta. Nästa fråga är viktigare: Caption: Att skriva citattecken: Eftersom man inte använder det raka ASCII-tecknet " som citattecken i LaTeX så läggs istället två tecken in där man trycker på den tangenten i LaTeX-moden i Emacs. Om man verkligen vill skriva ett ", så ska man trycka på tangenten " en gång till direkt efter. Men som sagt, det tecknet används aldrig som citattecken i LaTeX. Ge en bildtext till denna figur. Avsluta med RET. Center? (y or n) Svara y. (Optional) What label: fig: Denna uppgift sägs också vara frivillig, men man vill nästan alltid ha en etikett på figurer så att man kan referera till dem. Skriv det namn som du refererat till med \ref förut. Nu är all formalia överstökad och du har hamnat på rätt ställe för att skriva in det som ska hamna inne i figuren. Lägg in ett kommando för detta som i avsnitt TEXa med C-c C-c tills texten är»successfully formatted«igen. Anpassa bildens storlek ifall det behövs, t. ex. om den är så stor att den hamnar på en egen sida eller inte får rum på sidan. Se sidan 71 i så fall! Använda paket Det finns en mängd paket gjorda för LaTeX som lägger till ytterligare kommandon som är till för särskilda användningar. Ett som detta kompendium använder är menukeys som används för skriva menyval, som System Preferences Keyboard på ett snyggt och behändigt sätt. Nämn sist i avsnittet»topplistan«något program som går att köra från Applications -menyn där du talar om var det finns i menyn och visar det på ett sånt sätt. Använd \usepackage{menukeys} i dokumentets huvud för att kunna använda kommandona i detta paket. För att veta hur du ska skriva in menyn så gör texdoc menukeys för att ta fram dokumentationen för detta TEX-paket. (Ja, det är ännu ett sätt att hitta dokumentationen för något, denna gång specifikt för TEX.) Det är bara avsnitt 1 (Introduction) i dokumentationen du får fram som du behöver, för där finns exempel på hur man gör sånt. Slut på denna del När du är klar med latex1.tex så checka in den. (Kolla en extra gång att det funkar att TEXa den först.) Skriv att du är färdig med den i incheckningsmeddelandet. Checka även in den bild du använde in din figur. Annars skulle det ju inte fungera för mig att TEXa din fil efter att jag checkat ut innehållet i denna katalog. (Du kan öppna den i Emacs och checka in den som andra filer där, fast det är en bild. Emacs kommer att växla mellan att visa innehållet som bild och inte, men det funkar ändå.) 77

78 INLUPP 7: LATEX Om du kollar med svn status så ser du att svn anmärker på att det ligger filer i katalogen som den inte vet något om, som latex1.pdf och andra filer som skapades av LaTeX. Det är helt i sin ordning. En gemensam sagobok Den där katalogen alla som du skapade först i labben är en arbetskatalog för ett repositorium som ni alla kan ändra i. Gå till den katalogen och ge kommandot svn update. Ifall någon annan redan har gjort någon ändring så kommer du nu att få filerna där ändrade enligt detta. Uppgift 7.11 Vad gav svn update för output? Öppna med Emacs filen sagobok.tex i den katalogen. Den innehåller början till en sagobok skriven med LaTeX. Prova att TeXa den och se på resultatet med hjälp av C-c C-c ett par gånger. (Om det blir något TEX-fel så är det någon som råkat lägga in något fel. Det fixar nog den personen snart. Då gör du svn update igen för att få den nya versionen.) Det finns en rubrik i filen som heter som ditt användarnamn. Ersätt det som står under rubriken med din saga. Inte min saga! Om du inte vill ta med din egen saga så får du istället kopiera första stycket från någon av dem av Selma Lagerlöf på Välj någon som inte redan är tagen. Prova att det går bra att TEXa utan felmeddelanden efter ditt inlägg och checka sedan in din ändring. Uppgift 7.12 Vad har det för effekt? Nu ska du sätta lite individuell prägel på din fil genom att göra minst tre av följande i dokumentets huvud: Använd en väljare som fontsize=12 för att ändra textens storlek (mätt i punkter). Prova dig fram till ett värde du trivs med (eller behåll det som det är) Använd väljaren twocolumn för att få tvåspaltig text. Använd väljaren twoside för att få texten anpassad för dubbelsidig layout (som skiljer på vänster- och högersidor) Använd andra typsnitt genom att använda till exempel fonts=palatino som väljare. Andra möjliga värden är fourier, lm, times och uu. (Det sistnämnda använder de typsnitt som ingår i Uppsala universitets grafiska profil.) Om du föredrar tomrad för nytt stycke istället för indrag, så använd väljaren parskip. Sätt färg på rubrikerna med \addtokomafont{disposition}{\color{red}} eller med någon annan färg. Eller istället för disposition kanske du hellre vill ändra på captionlabel och/eller caption för bildtexter. Använd kommandot \urlstyle med ett argument rm, sf eller same för att tala om att urlar ska skrivas med»vanlig stil«, sans-serif eller samma som omgivande text. TEXa om och prova dig fram tills du blir nöjd. Se över en extra gång att allt fortfarande ser bra ut innan du checkar in. Skriv i incheckningsmeddelandet att det är piffandet det gäller. Nu är du klar på riktigt, så snart du har checkat in ids7.txt med svar på frågorna också. Undvik versionskonflikter! Gör svn update innan du gör dina ändringar och checka in ganska snart efter att du gjort dina ändringar för att undvika att ni kommer i osynk med varandra. Piffa till latex1.tex Du var»färdig«med latex1.tex förut, men nu ska du ändra lite i den ändå. Där du har kommandon \author och \title, så lägg även till ett kommando \course med denna kurs namn som argument. Det är ett kommando som inte finns i de flesta LaTeX-klasser, men det finns i stupp. Revert file: När du i Emacs försöker ändra igen i en fil som har ändrats på något annat sätt så varnar Emacs att filen är»changed on disk; really edit the buffer?«det händer t. ex. om filen har ändrats av svn update för att nån annan har ändrat den. Ofta är bäst svar varken ja eller nej utan r (för revert) som hämtar in den senaste texten in i Emacs-bufferten. 78

79 Kapitel 8 Internet & World Wide Web 8.1 ssh Ett program för att logga in på andra datorer över nätet är ssh. Gör ssh stp för att logga in på datorn stp. (Du får lov att ange lösenord, och det kommer inte att ekas.) Uppgift 8.1 När du nu är inloggad på den datorn istället, vad får du för prompt från skalet då? Kör igång Emacs på den datorn genom att skriva emacs. Du får upp Emacs inne i terminalfönstret. Du kan avbryta Emacs med C-x C-z och komma tillbaka till den med skalkommandot fg. Uppgift 8.2 På datorn stp finns en fil i /opt/ ids som heter som ditt användarnamn. Vad står det för fyrsiffrigt tal i den filen? Avsluta det skal du kör på stp med hjälp av kommandot exit. Får du ett meddelande om»stopped jobs«kan du ge exit igen för att avsluta ändå. Uppgift 8.3 Det finns en väljare till ssh som på dess man-sida beskrivs som»enables trusted X11 forwarding«. Hur lyder den? Ge ett nytt ssh-kommando där du använder väljaren från förra frågan för att koppla dig till stp igen. Uppgift 8.4 Prova att köra emacs på stp igen. Vad blir annorlunda nu? På detta sätt kan du logga in här hemifrån, men då får du skriva det fullständiga domännamnet stp.lingfil.uu.se istället för bara stp. 8.2 Domännamn Nätverket Internet används för en mängd olika system, bland annat för webben. Datorer på Internet kan ha ett domännamn i stil med futurum.lingfil.uu.se med punkter mellan olika delar. Här är se en toppdomän (= Sverige), uu (Uppsala Universitet) en underdomän till se och lingfil en underdomän till uu.se, och slutligen är futurum namnet på just denna dator. Uppgift 8.5 Titta på man-sidan till ssh. Där syns att bland en massa frivilliga saker så är»hostname«det enda som måste finnas med när man kör ssh. Se hur man skriver man för att även tala om användarnamn. Hur ser ett kommando ut som ssh-ar för att logga in som dig på datorerna här? 8.3 Toppdomäner Några av de äldsta toppdomänerna på Internet är gov för»us government«, edu för skolor och universitet, org för organisationer och com för företag. (Ofta så följs dock inte denna indelning.) Vid internationaliseringen av Internet tillkom tvåbokstaviga toppdomäner för länder med samma landskoder från ISO 3166 som i tabellen på s. 40. (Dock används här inte gb för Great Britain utan istället uk för United Kingdom.) Senare har fler allmänna toppdomäner tillkommit, som info och biz. I många fall används landskoder flitigt även i helt andra länder. Domänen tv för den polynesiska önationen Tuvalu används t. ex. för flera webbplatser med televisionsanknytning. Domänen nu som är populär bland annat i Sverige hör egentligen till ön Niue med drygt invånare. 8.4 World Wide Web World Wide Web (WWW), webben, skapades av engelsmannen Tim Berners-Lee på CERN. (Den första webbservern fanns på ch och gjordes tillgänglig den 6 augusti 1991.) Det var en kombination av hypertext och det globala datornätet Internet, så att länkar i texten 79

80 8. INTERNET & WORLD WIDE WEB kunde gå till dokument på en helt annan plats på nätet. Varje dokument på webben har ett beteckning som talar om var en webbläsare kan hitta den en URL (Uniform Resource Locator). Den kan i ett enkelt fall se ut i stil med Första delen http anger schemat den metod webbläsaren ska använda för att få tag på dokumentet. Där står http för»hypertext transfer protocol«det normala sättet att kommunicera på mellan webbservrar och webbläsare, utvecklat särskilt för WWW. Delen stp.lingfil.uu.se anger domännamnet för den dator som ska kontaktas. Delen /lila/www/ slutligen är det som skickas till webbservern på stp.lingfil.uu.se i detta fall och som anger just vilket dokument på den webbservern som vi önskar. Ibland börjar den delen med tilde när en viss användares webbsidor ska nås, inspirerat av hur man betecknar hemkataloger i Unix. Början utelämnas ofta när webbadresser ges. Snabbt blir https, som använder kryptering, allt vanligare. 8.5 Redovisning Checka in en fil ids8.txt på det vanliga stället med svar på frågorna. Använd exakt de filnamn som står här för att underlätta rättandet. Bli klar senast onsdag 7/ Att publicera på WWW Skapa en underkatalog public_html till din hemkatalog, kopiera dit /local/kurs/ids/peppar. html och öppna kopian i Emacs. Observera att till skillnad från nästan alla filer som du gör i denna kurs så ska det inte ligga under din kurskatalog. Det måste ligga i denna särskilda katalog för att webbservern ska se filen. Eftersom detta är en HTML-fil får du nu som kan vänta sig ett särskilt Emacsläge med menyer Internet-historia: Det amerikanska militärprojektet ARPANET från 1969 och framåt är en direkt föregångare till Internet. Samma teknik användes sen i universitetsnätverk och 1983 skapades ett gemensamt nätverk mellan universitet i hela USA. (Först senare kom även företag in på nätet.) I Sverige kopplades det svenska universitetsnätet SUNET samman med detta amerikanska universitetsnätverk i slutet av 80-talet. Alltmer blev det så att olika datornätverk gick över till samma teknik och förenade sig med andra nätverk så att det blev ett enda stort Internet. och särskilda kommandon för att underlätta skrivandet av HTML. Det är bland annat en speciell meny HTML och en SGML. I en av dem finns ett kommando View Buffer Contents. Utför det! Uppgift 8.6 Vad är kortkommandot för det kommandot? Uppgift 8.7 När du utför det öppnas filen i webbläsaren. Vilken URL hamnar du på där? Klipp-och-klistra från fältet där adressen visas i webbläsaren. Uppgift 8.8 En del av det värde som du klippoch-klistrade syns inte där det står i webbläsarens adressfält, men det syns när du kopierar texten. Exakt hur lyder den delen? Så genom att lägga filer i public_html görs de åtkomliga på webben. Om du får en URL som börjar med»file:///«så har du inte lagt filen i en katalog som heter som den ska och ligger där den ska. Se över det igen i så fall! 8.7 HTML Hypertext Markup Language (HTML) är det vanligaste formatet för information på webben och skapades också av Tim Berners-Lee. Sedan länge sker arbetet med HTML inom det av Berners-Lee grundade World Wide Web Consortium (W3C). Det finns flera versioner av HTML samtidigt på webben. Trots att HTML4 standardiserades redan 1997 pågår fortfarande arbetet med HTML5. * * * Jämför innehållet i peppar.html med hur den visas i webbläsaren! Uppgift 8.9 Första raden i filen är en dokumentdeklaration som talar om vad för slags dokument det är. Hur lyder den? Resten av filen består av element där ett element börjar med en starttagg och slutar med en sluttagg och har ett innehåll mellan dessa. Starttaggarna börjar med < och sluttaggarna börjar med </, och båda slutar med >. Elementen kan ha andra element inom sig. Ett exempel på ett element är <li>2 ägg</li> med starttaggen <li>, innehållet 2 ägg och sluttaggen </li>. Uppgift 8.10 Vad är det för element som sträcker sig över hela dokumentet? (Det vill säga börjar direkt efter deklarationen och slutar på slutet.) 80

81 8.8. CSS Uppgift 8.11 Dess innehåll är uppdelat i två element som täcker upp allt inom den. Vad är de för slags element? Uppgift 8.12 Vad är det för element som verkar användas för rubriker? (Jämför med hur dokumentet visas.) Uppgift 8.13 Elementet li används inom två olika andra element. Vilka då? Uppgift 8.14 Vad är li förkortning för? (Sök på nätet!) Och namnen på de två elementen i förra frågan? Uppgift 8.15 För stycken används elementet p. Vad är det stycke heter på engelska som detta är förkortning för? Starttaggarna kan ha attribut med värden. T. ex. används elementet a för att visa vilka delar av sidan som ska vara länkar till andra webbsidor. Men det räcker inte med bara På <a>uu</a>! för att visa att ordet»uu«ska vara en länk. På något sätt måste man också tala om till vilken URL den länken ska gå. Det gör man med ett värde till attributet href, så här: På <a href=" Uppgift 8.16 Det finns flera sådana a-element i peppar.html. En av dem ger en länk till texten»blanka av Namur«. Till vilken URL går den länken? 8.8 CSS CSS är ett språk för att definiera vilken stil olika delar ska visas med. I peppar.html finns en rad <link rel="stylesheet" href="ful.css"> som visar att information om detta ska finnas i ful.css. Kopiera därför /local/kurs/ids/ful. css till samma katalog som du kopierat peppar. html till och ladda om sidan i webbläsaren (antingen med en knapp för det, eller med Ctrl-R). Om du inte får en markant skillnad i utseendet så har något blivit fel. Kontrollera tidigare steg eller fråga i så fall! Öppna ful.css i Emacs för att se hur detta har gått till. Där finns en regel som säger flera saker om hur a-element ska visas, och sen en regel om»footer a«vilket betyder bara sådana a-element som ligger inom ett footer-element. Uppgift 8.17 Ge exempel på en av raderna om a och berätta vad den verkar betyda. Just de här reglerna för li är tämligen vansinniga. Nu ska du skriva bättre regler i en annan fil för olika slags element. (Om du vill kolla lite vad som händer så kan först du ändra några värden i ful.css och se vilken effekt det har. Du får ladda om webbsidan för att det ska märkas.) fin.css Skapa med Emacs en ny fil fin.css i din katalog public_html och ändra i peppar.html så att den använder sig av denna istället för av ful.css. När du skriver en rad i CSS-filen så använd TAB i Emacs för att få lagom stort indrag för olika rader. Lägg först till detta för att ge regler för elementet footer och ladda sen om webbsidan för att se effekten. footer { clear: both; border-top: 1px solid brown; padding: 5px; text-align: center; } Uppgift 8.18 Vad allt detta gör är inte uppenbart, men nämn nån effekt som du direkt märker på den del av dokumentet som ligger inom footer-elementet? (px är en liten längdenhet. Du kan söka efter»css units«på nätet för att läsa om andra enheter som kan användas i CSS-regler.) Lägg till en rad där om att texten i footer ska vara mindre än huvudtexten. (Jämför med hur storleken ändrades i ful.css. Välj själv hur mycket mindre texten ska vara.) Nästa förändring blir större. Själva receptet står inom ett element section. Skriv en regel section { float: left; width: 40%; } och en likadan regel för det element som avsnittet»historia«står i, förut att den ska ha right istället för left. Om du gjort rätt så har du fått effekten att dessa båda delar visas sida vid sida på 40 % av bredden var. (Resten blir en glipa mellan dem.) Historietexten är tänkt som extrainformation i marginalen. Ändra de båda bredderna och minska storleken på historietexten, så att den tar mindre plats och inte blir så framträdande. 81

82 8. INTERNET & WORLD WIDE WEB Färger Skriv en regel body { color: lime; background-color: pink; } för att ändra färg och bakgrundsfärg i dokumentet och se effekten. Men även om detta blev väldigt vackert ska du välja andra färger! Gör en webbsökning på»css color«för att se hur man kan skriva och välj ut andra färger att använda. Eftersom den regeln gäller body så gäller den allt som det inte finns mer specifika regler för. Lägg nu till andra färger för historietexten i marginalen, så att den skiljer sig tydligare från huvudtexten Översta rubriken Nu ska vi sätta en bakgrundsbild till översta rubriken»pepparkakor«. Lägg till denna regel: h1 { background-image: url("..."); background-position: center; text-align: center; background-repeat: no-repeat; } men där... är en webbadress till en bild. Välj antingen gingerbread.jpg eller sök upp en annan bild du vill ha. Se efter att du får en bakgrundsbild till rubriken nu! Uppgift 8.19 Vad händer om inte background-repeat är satt? Ändra så att rubriktexten blir större, och lägg till lite utfyllnad (padding) som det är för footer, så att mer av bilden syns. Välj själv hur mycket. Beroende på vad du har för färg på rubriktexten kanske den inte syns så bra mot bilden. Lägg till regler för h1 som gör att texten syns ordentligt! Validering Gå till och knappa in adressen till din CSS-fil för att få den kollad. Om du får en gratulation för att det inte är några fel så grattis! Fixa annars till vad den nu klagar på Mer? Detta räcker för pepparkakorna, men om du vill lägga till mer regler som du lär dig själv om, så gör gärna det. Men se till att validera igen efteråt! 8.9 ids8.html Skriv en egen webbsida ids8.html som handlar om vadsomhelst utom pepparkakor. Denna nya HTML-sida ska ha med åtminstone några rubriker, några stycken och några länkar till andra sidor, men du får gärna ha mer. Använd TAB när du skriver för att få så mycket indrag på raderna som HTML-läget i Emacs tycker är lagom. Låt en av länkarna gå till din peppar.html. Då räcker det med att skriva peppar.html som adress till den eftersom den ligger i samma katalog. Ta dessutom med ett par bilder. Det fanns det inte i peppar.html (utan bara som bakgrundsbild i CSS-filen). Sök på nätet efter hur man gör sånt! (Du kan lägga bildfiler i samma katalog eller länka till bilder på andra ställen med en längre adress.) Skriv CSS för flera olika element i ids8.html, så att den får ett klart annorlunda utseende än vad den skulle ha utan, men utan att helt planka pepparkakorna för det. Här är några möjliga idéer: Andra storlekar och/eller färger på rubriker Sök upp CSS som inte tagits upp här, till exempel på css/beginner/. Lägg till en bakgrundsbild på något annat än h1 Sök på nätet efter»css hover«för att lära dig hur man kan skriva CSS-regler som bara gäller när man håller muspekaren över något, och använd detta i någon regel. Det är vanligast att man använder sådant för a-element, så att man tydligt märker att det finns något att klicka på där Validering Använd valideraren på org för att validera din nya HTML-fil och din nya CSS-fil. Fixa till vad den eventuellt klagar på! HTML har regler om vilka slags element som finns och vilka element som får finnas inom vilka. Om du får fel som har med sådant att göra så läs noga vad det står där! Uppgift 8.20 Har du gjort klart ovanstående webbsidor än och sett att valideraren inte klagar på dem? (ja/nej) (Denna fråga är till för att jag ska veta om det är dags för mig att titta på din webbsida än.) Uppgift 8.21 I elementet head i peppar.html finns det två element som inte har sluttaggar. Vilka då? Uppgift 8.22 Bland de särskilda kommandona i HTML-läget i Emacs finns bland annat några för att lägga in rubriker på olika nivåer. Vad är kortkommandona för dem? Uppgift 8.23 Nämn några motsvarigheter eller nästan-motsvarigheter mellan hur olika slags text läggs in i LaTeX och HTML. 82

83 Kapitel 9 Reguljära uttryck I kapitel 5 togs reguljära uttryck upp som argument till grep. I detta kapitel lär vi oss mer om sådana och om några andra sammanhang där de används. 9.1 Ett tecken:. [ ] [^ ]. = ett godtyckligt tecken [abc] = något av tecknen a, b eller c [^abc] = ett tecken som inte är a, b eller c Inom hakparenteser kan - användas mellan två tecken för intervall. Så [0-9] betyder 0, 1, 2, 3, 4, 5, 6, 7, 8 eller 9, och [0-9,.] betyder 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, komma eller punkt. De flesta tecken som är speciella annars i regexpar är inte speciella inom []. T. ex. matchar [9.*] en nia eller en punkt eller en asterisk. (Utanför hakparenteserna hade båda punkten och asterisken haft en särskild betydelse.) Dessutom kan man inom [] stoppa in en beteckning för en hel klass tecken, som betyder t. ex.»en bokstav«eller»ett skiljetecken«. Dessa teckenklasser har namn som börjar med [: och slutar med :], t. ex. [:lower:] för en gemen bokstav. Tabell 9.1 visar några av dessa. Tabell 9.1: Några namngivna teckenklasser. Betydelserna är inte helt strikta här, utan kan variera med olika locale. Namn [:alnum:] [:alpha:] [:blank:] [:cntrl:] [:digit:] [:graph:] [:lower:] [:print:] [:punct:] [:upper:] Betydelse [:alpha:] + [:digit:] [:lower:] + [:upper:] Blanka tecken (SPC, TAB) Kontrolltecken Siffror Grafiska: [:alnum:] + [:punct:] Gemena (små) bokstäver Skrivbara: [:graph:] + SPC Interpunktion Versala (STORA) bokstäver Traditionellt har man skrivit t. ex. [A-Z] för att få en versal, och detta (och [a-z] och [A-Za-z]) kan man se på många håll i exempel på reguljära uttryck. Det är dock säkrare att använda namngivna klasser. Då ska man få man med alla bokstäver, även t. ex. åäö, oavsett språkinställningar. 1 Observera att hakparenteserna ingår i namnen på dessa teckenklasser! Det gör att det blir dubbla hakparenteser i de reguljära uttrycken. Om man byter ut A-Z mot [:upper:] så betyder det att ett reguljärt uttryck som [A-Z] istället blir [[:upper:]], medan [^A-Z] blir [^[:upper:]], och uttrycket [z[:punct:] ] betyder ett z eller ett interpunktionstecken eller ett mellanslag. 9.2 Ankring: ^ $ \< \> Metatecknen ^ och $ för början av raden respektive slutet av raden har vi redan sett. Så med t. ex. ^xyz hittar man rader som börjar med xyz (radbörjan följt av»xyz«) och med [[:blank:]]$ hittar man rader som slutar med något blankt tecken. Dessa båda tecken matchar alltså inget tecken alls på egen hand, utan ställer bara krav på var det övriga i uttrycket ska befinna sig. Man säger att dessa ankrar ett reguljärt uttryck. Med \< respektive \> matchar man en ordbörjan respektive ett ordslut. Så med \<anti hittar man»anti«som står i början av ett ord (t. ex.»anti«i»antites«eller»antilop«men inte i»fantisera«). 9.3 Bakstreck: \ Bakstrecket betyder nånting tillsammans med det tecken som följer direkt efter det. I synnerhet kan man sätta ett metatecken efter bakstreck när man verkligen vill söka efter det tecknet. 1 Skriv inte [a-ö] när du menar en bokstav! Dels skulle det vara beroende av en viss sorteringsordning, och dessutom funkar det ändå inte som man skulle kunna tro. 83

84 9. REGULJÄRA UTTRYCK Så för att söka efter t. ex. en siffra mellan asterisker, som t. ex.»*3*«kan man använda det reguljära uttrycket \*[0-9]\* med bakstreck för att visa att det verkligen ska vara med asterisker i texten. I övrigt används bakstreck följt av annat tecken för lite olika funktioner. Under ankring ovan nämndes två. En annan användbar är \w där»w«står för»word«. Det betyder liksom [[:alnum:]] ett alfanumeriskt tecken, men är kortare att skriva. Så a\wa matchar t. ex.»axa«och»a7a«, men inte»a!a«eller»a a«. 9.4 Utökade reguljära uttryck Det finns olika varianter av reguljära uttryck med lite olika uppsättningar metatecken. Hittills har vi sett enkla reguljära uttryck (basic regular expressions) där de speciella tecknen är. * ^ $ [ ] \ Alla andra tecken matchar bara sig själva. Med så kallade utökade reguljära uttryck (extended regular expressions) tillkommer dessa speciella tecken: +? ( ) { } Kommandot grep använder normalt de enkla (basic) regexparna, men med en väljare -E (som i Extended) använder den de utökade. 9.5 Repetitioner: * +? {} Asterisken har vi sett förut. Nytt i de utökade regexparna är + efter något för att säga att detta något ska förekomma en eller flera gånger. Det utökade reguljära uttrycket bä+ matchar därmed strängarna»bä«,»bää«,»bäää«,»bääää«, osv., hur långt som helst. (Observera att det bara är ä som repeteras. Detta reguljära uttryck matchar t. ex. inte»bäbäbä«.) Skillnaden med asterisken * är att den även tilllåter att den repeterade delen inte är med någon gång alls. Så bä* matchar samma texter som bä+, men dessutom även»b«. Med? efter något anger man ett det är frivilligt, dvs. det kan vara med en gång eller inte alls. Så bä? matchar»b«och»bä«och inget annat. Med {n} efter något kan man säga att detta något ska förekomma n gånger. Så [sz]{3} matchar samma som [sz][sz][sz], dvs.»sss«,»ssz«,»szs«,»szz«,»zss«,»zsz«,»zzs«och»zzz«. Med {n,m} ska det vara minst n och högst m förekomster, så br{2,5} matchar»brr«,»brrr«,»brrrr«och»brrrrr«, och inget annat. Maxantalet m kan utelämnas, och 8{3,} betyder minst tre åttor, dvs.»888«eller»8888«eller»88888«eller... (Hur många som helst.) Om inte det som står före det som visar repetition är något inom [] eller () (som vi kommer till snart!) så är det ett ensamt tecken som repeteras. Så hej?hopp matchar»hejhopp«eller»hej hopp«. 9.6 Alternativ: Med lodstreck ( ) visar man alternativ. Så vit svart grå matchar»vit«eller»svart«eller»grå«och foo b[aä]r matchar»foo«eller»bar«eller»bär«(eftersom alternativet efter lodstrecket hade två varianter). Glöm inte att hakparenteser kan användas om alla alternativ består av ett tecken, så istället för a e i o u är det enklare att skriva [aeiou] Parenteser: ( ) Med parenteser kan man föra samman ett större uttryck. Så med en (grå liten stor) katt matchar man»en grå liten katt«eller»en stor katt«. Utan parenteser skulle det bli allt före eller efter lodstrecket. Parenteser är också användbara för att hålla ihop något som ska repeteras. Det gör t. ex. att (bar){2,5} matchar»barbar«,»barbarbar«,»barbarbarbar«och»barbarbarbarbar«. Fler exempel: en (grön blå)+ kavaj matchar t. ex.»en grön kavaj«eller»en blågrön kavaj«eller»en gröngrön kavaj«eller»en blåblågrönblågrön kavaj«. en grön blå+ kavaj vore däremot något helt annat! Det skulle matcha antingen»en grön«eller också något som matchas av blå+ kavaj, dvs.»blå kavaj«eller»blåå kavaj«eller»blååå kavaj«osv. mo(no)+ton matchar»monoton«,»mononoton«,»monononoton«, osv. 9.7 Exempel Här är några ytterligare exempel på (utökade) reguljära uttryck. [a-h][1-8] en ruta på ett schackbräde, som»e2«eller»b4«. [0-9]*[13579] en sekvens med siffror som slutar med en udda siffra, som t. ex.»4711«eller»007«. (fjor fem sex sjut ar nit)ton tjugo något av orden fr. o. m.»fjorton«t. o. m.»tjugo«(..)* ett jämnt antal tecken, vilka som helst \<pre\w*ing\> ett ord som börjar med»pre«och slutar med»ing«. 84

85 9.8. Olika sorters reguljära uttryck 9.8 Olika sorters reguljära uttryck Reguljära uttryck används inte bara av grep utan dyker upp i flera sammanhang. Av historiska skäl används dock tyvärr flera olika varianter av reguljära uttryck. Ibland används de utökade (som grep -E använder), ibland de enkla (som grep använder normalt) där tecknen +? ( ) { } inte har någon särskild betydelse, utan betyder sig själva. (En del program som använder reguljära uttryck har dessutom sina egna utökningar av dem. Det har t. ex. Emacs och programspråket Perl. Flera utökningar som har gjorts för Perl har plockats över till andra sammanhang också, t. ex. programspråken Java och Python.) I grep så kan man komma åt all funktionalitet som man kan få med +? ( ) { } utan att gå över till utökade reguljära uttryck genom att skriva \+ \? \( \) \{ \} \ istället. Så dessa två kommandon gör samma sak: 9.10 grep -o Kommandot grep arbetar som många andra kommandon normalt med rader. Den fungerar som ett filter som bara släpper igenom de rader som innehåller ett visst sökuttryck. (Eller med väljaren -v de rader som inte innehåller ett visst sökuttryck.) Med väljaren -o ändras detta och man får istället ut just de delar som matchade sökuttrycket istället för hela rader. $ grep l.ll verb.txt lalla lulla parallellställa parallellisera $ grep -o l.ll verb.txt lall lull lell lell $ grep -E '^(tre fyr fem)' verb.txt trefaldiga femfaldiga fyrfaldiga tredubbla fyrdubbla tremulera trepanera fyra treva $ grep '^\(tre\ fyr\ fem\)' verb.txt [ samma svar ] nämligen hittar de rader i den filen som börjar med»tre«,»fyr«eller»fem«. 9.9 Reguljära uttryck i Emacs Det finns flera kommandon i Emacs som använder reguljära uttryck. Vid sidan av C-s och C-r som söker framåt respektive bakåt efter en textsträng så finns även C-M-s och C-M-r som söker framåt respektive bakåt efter ett reguljärt uttryck. (Här ska alltså både Control och Meta användas tillsammans.) Under en inkrementell sökning kan man också använda M-r för att slå om huruvida sökningen ska gälla reguljära uttryck eller inte. Det finns även andra kommandon som ni kommer att möta i inluppen. De reguljära uttrycken i Emacs är ungefär som enkla reguljära uttryck, men även plustecknet och frågetecknet är metatecken. Se sökningarna i figur 9.1 där vi söker efter ord som börjar på»f«. Utan -o spelar det ingen roll om vi söker efter \<f\w* eller bara \<f. Det är samma rader (i detta fall bara en rad) som hittas. Men med \w* på slutet hittas hela ordet, vilket gör skillnad när vi använder -o för att få se vilken del av texten som matchade sökuttrycket. Det kan (som här) bli flera matchningar per rad Girighet och hunger Ett sådant uttryck som [1-9]0* matchar ju en siffra 1 9 eventuellt följt av nollor, t. ex.»5«,»10«eller»30000«. $ echo 'Timmy 2000' grep -o '[1-9]0*' 2000 I exemplet ovan ser vi hur uttrycket matchade»2000«. Men det skulle ju också kunna ha matchat bara»200«eller»20«eller»2«. Ändå är det just matchningen»2000«som vi fick fram. Vid matchningen väljs nämligen den längsta av flera möjligheter som börjar på samma plats. Man säger att operatorn * här är girig eller hungrig (greedy på engelska) vilket innebär att den»vill«matcha så mycket som möjligt. Samma gäller de andra repetitionsoperatorerna vi har tagit upp. Detta behöver man tänka på ibland, i synnerhet med.* eller.+ som lätt kan matcha mer än man egentligen hade tänkt sig. Om man t. ex. vill söka efter citat inom»«kan det ligga nära till hands att använda ett reguljärt uttryck».*«för att visa att 85

86 9. REGULJÄRA UTTRYCK $ grep '\<f' saga.txt ingenting, för han var försäkrad. Några dagar senare flyttade $ grep -o '\<f' saga.txt f f f $ grep '\<f\w*' saga.txt ingenting, för han var försäkrad. Några dagar senare flyttade $ grep -o '\<f\w*' saga.txt för försäkrad flyttade Figur 9.1: Greppande med och utan -o i en saga. \<f betyder ett f i början av ett ord, och \w* betyder godtyckligt många ytterligare»ordtecken«efter det, så tillsammans betyder det ett ord som börjar på f. det ska börja med», sluta med «och däremellan får innehålla vad som helst. Men»vad som helst«kan bli mer än man tänkt sig: $ cat testfil Hej hopp! Ska det stå»i dag«eller»idag«? $ grep -o '».*«' testfil»i dag«eller»idag«detta svar börjar ju och slutar med de efterfrågade tecknen, men är längre än bara»i dag«som man kanske snarare var ute efter. I detta fall är ett sätt att lösa problemet att kräva att tecknen mellan de båda citattecknen inte själva får vara slutcitattecken, dvs. att använda [^«] istället för. för varje tecken mellan citattecknen. $ grep -o '»[^«]*«' testfil»i dagidag«bland annat sådant som ni har använt andra kommandon till, som head, tail och tr. Här kommer vi dock att bara använda detta kraftfulla verktyg till en specifik sak, nämligen att byta ut text Att ersätta text med sed Tidigare har vi använt tr för att byta ut text, men det är begränsat genom att det bara är enstaka tecken som hanteras. Det duger inte om vi t. ex. vill byta ut alla förekomster av»foo«mot»bar«. Dessutom har det begränsningar vid hantering av flerbytestecken. Eftersom ni nu bara kommer att använda sed till en sak så kommer alla era anrop av sed att likna varandra. De kommer alla att se ut ungefär som sed 's/regexp/replacement/g' Här är det bara ett argument till sed, och det talar om vilken editering som ska utföras. Det s som argumentet börjar med här är ett kommando i sed för substitute. Det söker upp förekomster av text som matchar det reguljära uttrycket regexp och byter ut dessa mot texten replacement. Så t. ex. kan man skriva 9.12 sed Med kommandot sed kan man göra en mängd olika omvandlingar av text. Namnet står för stream editor. Det kan göra mycket som en editor kan göra, men gör det inte interaktivt utan genom att bearbeta text som kommer in i en inputström. Detta kan läggas in som ett avancerat filter som läser text från standard input och skriver ut en editerad version av texten på standard output. Kommandot sed är lite som en schweizisk armékniv som kan utföra en mängd olika saker, ed och sed: Den ursprungliga editorn på Unix, som användes redan i forntiden före bildskärmarnas tid, hette ed och var skriven av Ken Thompson. Det var Thompson som först introducerade reguljära uttryck i editorer. När kommandot sed kom några år senare som en variant att använda för icke-interaktiv editering av en inputström så byggde därför dess kommandon på motsvarande kommandon i ed. Det enda sed-kommando vi tar upp här, s, finns t. ex. även i ed. 86

87 9.12. sed sed 's/color/colour/g' för att byta ut alla»color«mot»colour«. 2 eller sed 's/s\>/z/g' för att byta ut varje s som står i slutet av ett ord mot z. Man brukar normalt använda snedstreck (/) som här för att avdela argumentet, men det kan vara något annat tecken istället, bara det är samma tecken på alla tre ställen. Så om man behöver snedstreck i sitt reguljära uttryck eller i ersättningen får man lov att välja nåt annat, t. ex. sed 's!1/2!½!g' för att byta alla förekomster av de tre tecknen»1/2«mot det enda tecknet»½«. Efter det sista snedstrecket står väljare till s- kommandot. I exemplen ovan är det g som gör att alla förekomster byts ut (global). Annars byts bara den första förekomsten på varje rad ut. En annan väljare är i som ignorerar skillnader mellan versaler och gemener. Jämför följande fyra exempel som bara skiljer sig i vilka av dessa väljare som har använts. Om man ger ett andra argument till sed så är det vilken fil den ska hämta input från. $ cat jaha.txt Procent procent procent PROCENT $ sed 's/procent/%/' jaha.txt Procent % procent PROCENT $ sed 's/procent/%/g' jaha.txt Procent % % PROCENT $ sed 's/procent/%/i' jaha.txt % procent procent PROCENT $ sed 's/procent/%/gi' jaha.txt % % % % Kommandot sed använder normalt enkla reguljära uttryck, men har en väljare -r som gör att den istället använder utökade reguljära uttryck. (Ja, grep och sed har olika väljare som betyder»använd utökade reguljära uttryck«. Dumt, va?) Att återanvända originaltexten I sed 's/regexp/replacement/g' är det bara regexp som är ett reguljärt uttryck. I ersättningsdelen har inte asterisker, parenteser osv. någon särskild betydelse, utan blir sig själva. $ echo 'byt allt' sed 's/././g'... $ echo 'foo bar' sed 's/[aou]/[äöü]/g' f[äöü][äöü] b[äöü]r $ echo 'hej hopp' sed 's/e.*o/***/g' h***pp Ett tecken som ändå är speciellt i ersättningstexten är & (ampersand) som betyder hela den text som matchade det reguljära uttrycket. Om man vill bryta raden efter varje interpunktionstecken kan man därför göra sed 's/[[:punct:]]/&\n/g' där ersättningsdelen betyder det som [[:punct:]] matchade följt av ett nyradstecken (vilket skrivs \n här precis som t. ex. i tr). Följande exempel dubblerar vokaler genom att använda ampersand två gånger. sed 's/[aeiouyåäö]/&&/gi' Varför heter det grep?: I editorn ed användes reguljära uttryck inte bara med kommandot s, utan även med bl. a. ett kommando g med vilket man sökte upp rader som matchade ett visst reguljärt uttryck och gjorde nåt med dessa rader. För att ta bort alla rader som innehåller»foo«kunde man t. ex. göra g/foo/d där d är ett kommando som tar bort en rad. För att skriva ut alla rader som matchade ett reguljärt uttryck använde man istället p (= print). Ibland förkortas regular expression med re, så en sådan operation kunde beskrivas g/re/p vilket är skälet till att det senare skrivna program som utförde just den operationen fick namnet grep. 2 I detta fall behövdes inte några citattecken runt argumentet till sed, eftersom inga tecken där är speciella i skalet, men oftast behövs det, så det kan vara säkrast att alltid ha med det. 87

88 Inlupp 9: Reguljära uttryck Redovisning Checka in en fil ids9.txt med svar på frågorna. Frågorna är samlade i olika teman snarare än att vara sorterade från lätta till svåra, så hoppa gärna runt bland uppgifterna medan du löser dem istället för att fastna på någon klurig uppgift som du kan behöva tänka mer på. När frågan är i stil med»vilka ord finns det som...?«så ge dels svar på frågan och tala dels om hur du fick fram svaret, t. ex. vilket kommando eller vilka kommandon du använt för att få fram svaret. Svenska ord I /local/dict/dsso-list.txt finns en stor samling svenska ordformer tagna från Den stora svenska ordlistan. Använd den för frågorna i detta avsnitt. Eftersom filen bara innehåller rader med ett ord per rad kan du använda ^ och $ för ankring till ordbörjan och ordslut och. för ett godtyckligt tecken inne i ordet. Uppgift 9.1 Hur många ord finns det som slutar på bokstaven v? Uppgift 9.2 Vad finns det för ord som innehåller minst tre ä, som t. ex.»självbestämmanderätt«? Uppgift 9.3 Vilka ord med minst nio bokstäver går att skriva enbart med tecknen på översta bokstavsraden på tangentbordet? (qwertyuiopå) Uppgift 9.4 Vad finns det för ord som är minst 12 tecken långa vars enda vokal är o? Uppgift 9.5 Du håller på med korsordet i figur 9.2. Hur många ord passar in som det översta vågrätta ordet, med nyckeln»har vi svenskar rest i över 400 år«? Uppgift 9.6»Ödeskvinna«i det korsordet kanske är»norna«, men det skulle också kunna vara»moira«. Vilka ord passar in på översta vågrätta ordet om man tar hänsyn till detta också? Uppgift 9.7 Vilka ord med minst fem tecken har inte med någon av bokstäverna eantrsildogm? (De vanligaste tecknen på svenska enligt någon källa.) Uppgift 9.8 En del ord i den filen innehåller tecken som inte räknas som ingående i teckenklassen [:alpha:]. Hur många ord? Väljaren -o I dessa uppgifter ska du använda väljaren -o för att bara få ut det som matchar ett uttryck från en fil. Uppgift 9.9 Vilka tecken var det som fanns med i ordlistan trots att de inte ingår i teckenklassen [:alpha:] i förra uppgiften? Uppgift 9.10 Vilka ord i /local/kurs/ids/ wonderland.txt börjar med»cal«? (Rensa bort dubbletter från ditt svar.) Uppgift 9.11 Vad finns det för ord som börjar med versal och slutar med k i samma fil? Använd \w för att beteckna ett tecken inne i ett ord, och rensa bort dubbletter från ditt svar. Uppgift 9.12 Vad finns det för ord som innehåller q i samma fil? (Rensa bort dubbletter från ditt svar.) Uppgift 9.13 Använd det utökade reguljära uttrycket [0-9]+ för att ta fram vilka sifferuttryck som finns i filen /local/kurs/ids/ THE-GNU-PROJECT och sortera dem i nummerordning. (Rensa bort dubbletter från ditt svar.) Uppgift 9.14 Skapa en fil GNU-w2 som listar alla ord i filen GNU. Använd denna gång grep -o med lämpliga argument för att plocka ut orden och rensa bort dubbletter. På vilka sätt blev denna ordlista bättre än den GNU-w1 som du skapade i uppgift 5.60 (s. 58)? En sluttagg i HTML börjar ju med»</«och slutar med»>«. Prova därför med grep -o '</.*>' ~ellen/public_html/saga.html för att ta fram sluttaggar från denna HTML-fil. 88

89 Ta sed dit man kommer Figur 9.2: Utdrag ur ett korsord som författaren har löst. Uppgift 9.15 En del rader i svaret blev verkligen sådana, t. ex.»</head>«, men andra rader kom att innehålla mer. Vad är problemet? Hur kan du fixa det? Ge ett sorterad lista (utan dubbletter) med alla sluttaggar som förekommer i den filen. Ta sed dit man kommer Uppgift 9.16 Stavningsreform! Skriv ett sedkommando som byter ut alla»ck«mot»kk«. Du kan prova ditt kommando med t. ex. ditt kommando ck-test.txt där ck-test.txt är en fil som du gjort med lite testord, eller typ echo sicksack ditt kommando. Uppgift 9.17 Hur lyder din saga på i-sprikit (även kallat i-språket), dvs. med alla vokaler utbytta mot i. Svaret ska börja»dit vir in ging«. Uppgift 9.18 Hur lyder din saga om alla mellanslag byts ut mot dubbla mellanslag? Svaret ska alltså börja Det var en gång. Uppgift 9.19 Om Strindberg hade behövt skriva Roeda rummet på en engelsk skrivmaskin och fått lov att skriva aa ae oe istället för å ä ö, hur hade då början av den lydit? Uppgift 9.20 Skriv ett kommando som byter ut alla ord»ej«mot»icke«i en text. Se till att du bara byter ut hela ord så att du inte råkar byta t. ex.»mejl«mot»mickel«. Uppgift 9.21 Skapa en fil GNU2 i din ids-katalog som är som GNU, men där du bytt ut varje ord som är minst två bokstäver långt och som bara består av versaler mot samma ord men med»<abbr>«före och»</abbr>«efter. Så t. ex. ska varje förekomst av ordet»mit«ha bytts mot»<abbr>mit</abbr>«. Uppror! (igen) Dessa uppgifter använder sig av den uppror.txt som du har sedan tidigare. Använd teckenklasser när det är lämpligt. Uppgift 9.22 Vilka rader innehåller en liten bokstav som följs direkt av en stor? Uppgift 9.23 Hur många rader innehåller minst tre interpunktionstecken i rad? Vilka rader har minst sex konso- Uppgift 9.24 nanter i rad? Vilka rader börjar med boksta- Uppgift 9.25 ven c? Vilka rader börjar med ordet upp- Uppgift 9.26 drag? Uppgift 9.27 Vilka rader både börjar och slutar med bokstaven r? Uppgift 9.28 Vilka rader både börjar och slutar med bokstaven r, men har inga ytterligare r i sig? Uppgift 9.29 Vilka rader innehåller exakt ett w? 89

90 INLUPP 9: REGULJÄRA UTTRYCK Vilka rader har med ord som bör- Uppgift 9.30 jar med»flä«? Uppgift 9.31 tecken långa? Hur många rader är minst femtio Uppgift 9.32 Gör en frekvenslista över vilka interpunktionstecken som förekommer, sorterade i frekvensordning. Uppgift 9.33 Vad finns det för parentesuttryck i uppror.txt? På en rad står det t. ex. försvar (och anfall) för att bevara den bästa av Alltså ska (och anfall) ingå i ditt svar. En del parenteser börjar på en rad och slutar på en annan. Dem kan du för enkelhets skull strunta i. (Men har du några idéer om hur du skulle kunna ta hand om det också, så berätta gärna!) I Emacs Öppna filen /local/kurs/ids/wonderland.txt i Emacs. Det finns ett Emacs-kommando som heter occur som listar de rader som innehåller text som matchar ett visst reguljärt uttryck. Detta kommando finns dock inte i menyerna, så använd M-x för att köra det kommandot. Du får sen skriva ett ett reguljärt uttryck. Skriv uet\> för att lista rader som innehåller ord som slutar på»uet«. Uppgift 9.34 Hur många matchingar blev det och hur visas dessa? Sökträffarna visas i en buffert som är i ett särskilt Emacsläge där man kan gå direkt till en träff genom att klicka på den, eller genom att trycka på RET. Uppgift 9.35 När man ger ett kommando med M-x i Emacs får man ett tips i ekoarean om hur man också hade kunnat ge kommandot om det finns ett kortkommando för det. Med vilka tangenttryckningar kan man också ge kommandot occur? Uppgift 9.36 I detta särskilda Emacsläge finns det en meny Occur. Vad är det understa kommandot i den menyn, som står ensamt under en linje, och vad gör det? (Prova det!) Använd nu Tools Search Files (Grep) i samma Emacs. I minibufferten får du ett påbörjat grepkommando. Lägg till gren *.txt till det för att leta efter»gren«i alla filer *.txt i den katalogen (/local/kurs/ids). Här kan du på ett liknande sätt använda musklick eller RET för att gå till sökträffarna. Uppgift 9.37 En av de väljare som användes till grep-kommandot här var -n. Den har vi inte använt i kursen. Vad betyder den? Uppgift 9.38 En av träffarna är från filen nordic-authors.txt. Vilken författare var det som hittades där? Upproriska ord Låt oss se vad det finns för ord i romanen Uppror!. Denna gång vill vi inte ha sifferuttryck och egennamn som»fitzschkloff«och»knöckl«. Vi nöjer oss med ord som bara består av små bokstäver. Uppgift 9.39 Skapa en fil uppror-ord.txt med en svensksorterad ordlista (utan dubbletter) över ord med bara små bokstäver i uppror.txt. Många av dessa ord är säkert helt vanliga ord som finns med till exempel i ordlistan /local/ dict/dsso-list.txt, men andra ord är kanske speciella för just denna bok. Uppgift 9.40 Hitta vilka ord som finns med både i uppror-ord.txt och /local/dict/ dsso-list.txt. Ett sätt att göra det är att sortera ihop de båda filerna och se vad det blir för dubbletter då. Spara dessa i filen uppror-ord-ok. txt. De övriga orden är kanske intressantare, så låt oss jämföra uppror-ord-ok.txt med hela uppror-ord.txt! Kommandot diff visar skillnader mellan två filer. Använd diff uppror-ord.txt uppror-ord-ok.txt för att i kompakt form få se alla skillnader mellan filerna. Det blir rader som börjar med»<«som visar det som bara finns i den första filen. (Raderna med siffror är för att visa var i filen det är.) Uppgift 9.41 Vad finns det för ord som slutar på p med bland dessa ord? Mer( mer)+ Uppgift 9.42 Hur lyder din saga.txt om man tar bort alla vokaler? (Svaret ska alltså börja»dt vr n gng«.) Uppgift 9.43 Hur lyder din saga.txt om alla bokstäver dubbleras? (Svaret ska alltså börja»ddeett vvaarr eenn ggåånngg«. Bara bokstäverna är dubblerade, men inte mellanslag eller interpunktion.) 90

91 Mer( mer)+ Figur 9.3: Från xkcd av Randall Munroe. Programspråket Perl är känt för att använda regexpar mycket. Uppgift 9.44 Hur lyder din saga.txt om sista bokstaven i varje ord tas bort? (Svaret ska alltså börja»de va e gån«.) Uppgift 9.45 Hur lyder din saga.txt om alla versaler sätts inom hakparenteser? (Svaret ska alltså börja»[d]et var en gång«.) Uppgift 9.46 Hur lyder din saga.txt översatt till rövarspråket som blivit känt från Astrid Lindgrens böcker om Kalle Blomkvist där varje konsonant byts ut mot konsonanten + o + konsonanten. (Svaret ska alltså börja»dodetot vovaror enon gogånongog«.) (Ännu bättre vore det egentligen med»dodetot«där bara det första d-et är versalt. Att hitta hur man gör det är frivillig överkurs.) Uppgift 9.47 Ge ett kort utökat reguljärt uttryck som matchar både»arton«och»aderton«(men inget annat). En möjlighet är helt enkelt arton aderton, men gör något kortare! Uppgift 9.48 Ge ett utökat reguljärt uttryck som matchar»mormor«,»morfar«,»farmor«och»farfar«(men inget annat). Här är mormor morfar farmor farfar förstås en möjlighet, men försök att skriva något kortare! 91

92 INLUPP 9: REGULJÄRA UTTRYCK Uppgift 9.49 Ta med grep -Eo och lämpliga argument fram telefonnummer med riktnummer från tidningstexterna i /local/kurs/ids/ ivt2-svenska.txt. Din lösning kan vara mer eller mindre bra. Ju fler korrekta nummer du får ut desto bättre, men undvik att få falska träffar med sånt som inte är telefonnummer. 92

93 Kapitel 10 Dokumentrepresentation Vi har tidigare sett hur rena textfiler (plain text) representeras för datorn. En teckenkodning ger varje tecken ett visst numeriskt värde, inklusive sådana kontrolltecken som nyrad. Vid teckenkodningar med högst 256 olika värden lagras dessa en i varje byte (som var och en kan ha 256 olika värden). För Unicode som har många fler värden lagras tecknen på något sätt där en del eller alla tecken tar upp flera bytes. När mer komplicerad information, som ordbehandlingstext, ljud, bild, film, databaser, program m. m. ska lagras kan det också ske i form av text på något sätt eller som binärfiler där de olika koderna inte har tecken som motsvarigheter. När texter lagras i filer eller sänds i kommunikation mellan datorer gäller det att avsändare och mottagare är överens om vilken kodning som används så att informationen tolkas som det var tänkt Uppmärkt text I många sammanhang är det vanligt att textfiler är uppmärkta med taggar som anger att en viss del av texten ska tolkas eller behandlas på ett visst sätt. Ett exempel vi har sett på det är HTML där uppmärkningen sker med starttaggar som <h1> och sluttaggar som </h1>. Ett helt uttryck som <h1>hej</h1> kallas för ett element, där elementets innehåll är»hej«. I andra sammanhang skulle man kunna tänka sig att andra egenskaper hos texten märktes upp, med helt andra taggar. I en del fall har man kanske anledning att märka upp varje ord med ordklass. I ett annat fall kanske man vill märka upp bara kapitel och stycken. I ett tredje fall kanske man vill visa exakt hur en viss utgåva av en tryckt skrift såg ut och märka upp sidor och rader. En uppmärkning av Röda rummet skulle kunna börja <rubrik>stockholm i fågelperspektiv</rubrik> <mening>det var en afton i början av maj.</mening> <mening>den lilla trädgården på... och blommor.</mening> Här är kapitelrubriken uppmärkt och dessutom meningar. Det finns taggar som visar var de uppmärkta delarna börjar och var de slutar. En uppmärkning som anger ordklass för alla ord skulle kunna innehålla t. ex. något som <pron>det</pron> <verb>var</verb> <art>en</art> <subst>afton</subst> <prep>i</prep> <subst>början</subst> <prep>av</prep> <subst>maj</subst><punkt>.</punkt> 10.2 HTML kommer från SGML Den här syntaxen med taggar med <> och / var inget nytt påhitt för HTML, utan använde sig av SGML (Standard Generalized Markup Language). Till SGML hör bland annat syntaxen med </> samt sätt att definiera olika märkspråk genom att tala om vilka element som kan förekomma och i vilka kombinationer. Till HTML-standarderna hör information om t. ex. att ett ul-element kan innehålla li-element men inte tvärtom, osv., och valideraren klagade om du bröt mot några sådana regler. I praktiken är webbläsare förlåtande och gör det bästa den kan även när sidor inte är korrekt HTML, och många sådana fel ger det utseende man väntade sig i alla fall. Det går bra att låta bli att skriva ut sluttaggarna i en del fall. Istället för <ul > < l i >snipp </ l i > < l i >snapp </ l i > < l i >snut </ l i > </ ul > kan man skriva bara <ul > < l i >snipp < l i >snapp < l i >snut </ ul > 93

94 10. DOKUMENTREPRESENTATION Det är eftersom ett li-element inte får finnas inom ett annat li-element som sluttaggarna kan utelämnas SGML och XML SGML är en gammal standard med rötter från 1960-talet, och 1998 kom en variant, XML (Extensible Markup Language) inspirerad av den. XML är gjord för att vara enklare att tolka för program. T. ex. måste alla element alltid avslutas explicit. XML har blivit mycket populärt i en mängd sammanhang där man har strukturerad text. När nya märkspråk ska konstrueras så väljer man i allmänhet att använda XML. Då får man enhetlighet och kan använda sig av en mängd verktyg som analyserar och konverterar XML-filer på olika sätt. Det har även gjorts varianter av HTML som varit XML istället för SGML: XHTML. Men modern HTML, HTML 5 (officiell rekommendation sen 2014), är inte XML, och är till skillnad från tidigare HTML-versioner inte strikt SGML heller, även om det tydligt syns att dess historiska ursprung är SGML Element, taggar och innehåll Ett elements innehåll kan i sin tur innehålla nya element. Ett litet exempel på texten»melker Melkersson«uppmärkt är <name><firstname>melker</firstname> <lastname>melkersson</lastname></name> I exemplet finns det ett name-element som i sig innehåller ett firstname-element och ett lastname-element. Element måste ligga helt inom andra element. Det går inte att låta dem korsa varandras gränser i stil med <kursiv>herr <name>melker</kursiv> Melkersson</name>. Här är det fel vid </kursiv> eftersom nametaggen inte har avslutats än. I XML är det skillnad på versaler och gemener i taggar Element med tomt innehåll I HTML finns det några element som man aldrig skriver sluttaggar för, eftersom innehållet alltid är tomt. Man använder t. ex. <br> för ett radbrott och <img...> för en bild, men avslutar aldrig dessa med </br> eller </img>. Det ingår i definitionen av HTML vilka element det är som alltid tar slut direkt så att man inte behöver skriva deras sluttagg. I XML måste alla element avslutas uttryckligen, så i XHTML måste även dessa element avslutas, men istället för <br></br> använder man då kortformen <br/> som är starttagg och sluttagg i ett Attribut Ett element kan även innehålla attribut med värden. Exempel: <name type="person">melker Melkersson</name> Här har elementet ett attribut type med värdet person. Man använder dubbla eller enkla citattecken runt värdena. (I XML måste citattecken alltid vara med. Annars är det inte obligatoriskt om det bara är snälla tecken innanför. Detta är ännu ett fall där XML har gjorts så att det ska vara extra lätt för program att tolka.) Ett annat sätt än det tidigare att märka upp en mening med ordklasser skulle kunna vara <w wc="pron">det</w> <w wc="verb">var</w> <w wc="art">en</w> <w wc="subst">afton</w> <w wc="prep">i</w> <w wc="subst">början</w> <w wc="prep">av</w> <w wc="subst">maj</w><punct>.</punct> Här användes en tagg w för ord (word) med ett attribut wc (= word category = ordklass) Toppnivå Ett XML-dokument har bara ett element på toppnivån. Alla övriga element måste finnas i detta elements innehåll. Förutom element kan XML-dokument även innehålla en del annat som talar om hur dokumentet ska behandlas i vissa fall, så detta kan stå före elementet på toppnivån. Sådant står också inom <> men börjar med frågetecken eller utropstecken. I synnerhet ska en deklaration i stil med <?xml version="1.0" encoding="utf-8"?> komma allra först i dokumentet. Detta visar vilken version av XML som används och vilken teckenkodning detta dokument använder. (Om inget sägs om detta så är det UTF-8.) Teckenreferenser och entiteter Man kan lägga in vilka tecken som helst genom att skriva deras Unicode-kod mellan &# och ;. Ett promilletecken ( ) kan man t. ex. vid behov beteckna med. Ofta använder man hexadecimala beteckningar istället som börjar med x. Då blir t. ex. promille istället. Du förväntas inte kunna räkna med sådana. Det räcker med att känna igen att referenserna kan se ut på den formen också. Entiteter använder också &; men däremellan skriver man istället ett namn, t. ex. för. Vilka entitetsnamn som finns är olika för olika slags XML-dokument, men alltid finns i alla fall & (&) < (<) > (>) &apos; (') 94

95 10.4. MIME " (") eftersom dessa tecken ingår i XML-syntaxen och därför kan vara besvärliga att få in annars i vissa fall. Observera att de numeriska teckenreferenserna alltid sker till Unicode-koder oavsett vilken teckenkodning som XML-filen använder. Även om man har t. ex. en Latin1-fil med <?xml version="1.0" encoding="iso "?> så går det ändå att på detta sätt referera till vilka tecken som helst Olika XML-språk XML är liksom SGML inte ett märkspråk, utan ett sätt att definiera en mängd olika märkspråk som använder samma grundsyntax men helt olika uppmärkning. En definition av ett sådant språk anger inte bara vilka element som ska finnas, utan även hur de förhåller sig till varandra, t. ex. att en li kan finnas inne i en ul men inte tvärtom för att ta ett exempel från XHTML. Ett exempel som < l i > <ul >Funkar i n t e! </ ul > </ l i > är ogiltig XHTML. Men det är fortfarande välformad XML. Med välformad (well-formed) menas bara att man följer de allmänna syntaxreglerna för XML, som t. ex. att alla sluttaggar är avslutade. Med giltig (valid) menas att man följer de specifika reglerna för ett visst märkspråk. (Så för att vara giltig måste den till att börja med vara välformad.) 10.4 MIME Program som kommunicerar med varann behöver vara överens om hur data som de skickar mellan varann ska tolkas. När data skickas så följer det därför ofta med en etikett på vilken det står vad det är för slags data så att mottagaren ska få veta det. På sådana etiketter använder man ofta ett standardiserat format MIME för att beskriva olika format. Denna standard utvecklades först för datorpost, och förkortningen står för Multipurpose Internet Mail Extensions, men den används i andra sammanhang också. MIME-etiketterna har två delar med snedstreck emellan, t. ex. image/jpeg för en bild i JPEGformat, image/png för en bild i PNG-format osv. Den första delen anger vad det är för typ av format (som image för bilder) och den andra vilket specifikt format det är. Andra möjliga förled är bl. a. audio för ljud, video för video och application för diverse information som måste behandlas av något särskilt program, t. ex. application/pdf eller application/msword. Det är IANA som håller rätt på vilka beteckningar som är de officiella så att alla använder samma. Textfiler använder förleden text och i synnerhet kallas vanlig text text/plain. För text-typer kan man lägga till en specifikation av vilken teckenkodning som används på detta sätt: text/html; charset=iso Detta används till exempel i post då det i brevhuvudet kan finnas en rad i stil med Content-Type: text/plain; charset=utf-8 som talar om att brevet innehåller ren text kodad med UTF-8. (Denna rad ser man vanligen inte, för program för att läsa post brukar dölja sådana tekniska detaljer, men ha ett särskilt kommando som»visa hela huvudet«eller»visa original«som visar även detta.) Brev med bilagor har ett särskilt format där varje bilaga får en egen etikett om vad den har för format. (Mailprogrammet väljer ofta vad den skriver där utifrån filnamnet, så om filen heter foo.txt så får den en etikett text/plain, osv. MIME-typerna används även på webben, där MIME-typen för HTML är text/html. Varje gång en webbserver skickar ut ett dokument till en webbläsare så skickar den först ut en innehållsdeklaration med en rad i stil med Content-Type: text/html; charset=utf-8 som talar om vad det är för slags data som den skickar ut Utan MIME då? Det finns ingen information i sig i filsystemet om vad de olika filerna är för slags dokument, så om man öppnar en fil från t. ex. filhanteraren så får den göra en mer eller mindre lyckad gissning om vad det är för slags dokument. Dels kan sådana program gå efter filnamnsändelsen och t. ex. utgå från att en fil foo.png är en bild i bildformatet PNG. Men den kan också titta inne i filen, i synnerhet på hur den börjar. I många format börjar filer alltid på samma sätt vilket gör dem lätta att känna igen. Ett skalprogram som känner igen filer på ett sådant sätt och beskriver innehållet är file. $ file rummet.txt latex1.pdf stp.txt rummet.txt: UTF-8 Unicode text latex1.pdf: PDF document, version 1.5 stp.txt: Pascal source, UTF-8 Unicode text Här kan man notera att för den ena textfilen här gissade file fel och tyckte av någon anledning att stp.txt såg ut att vara ett program i programspråket Pascal! 95

96 10. DOKUMENTREPRESENTATION 10.5 Komprimering av filer Om innehållet i en fil är repetitivt eller på andra sätt delvis redundant så går det att lagra samma information på mindre plats. I en vanlig textfil t. ex. så är en del ord och andra teckenföljder mycket vanligare än andra, och då kan man på olika smarta sätt se till att dessa vanliga teckenföljder lagras på mindre plats än en byte per tecken. Detta kallas att komprimera en fil. I GNU finns programmet gzip (GNU zip) för att komprimera. Filer som är komprimerade med gzip brukar ha filnamnsändelsen.gz och det normala sättet att köra gzip är med ett eller flera filnamn som argument varpå dessa filer ersätts med komprimerade versioner av samma filer. Med gunzip går man åt andra hållet, dvs.»dekomprimerar«eller packar upp den komprimerade filen. $ ls bar foo $ gzip foo $ ls bar foo.gz $ gunzip foo.gz $ ls bar foo Eftersom filnamn kan ha flera punkter är det bara att hänga på.gz på filnamnet även om det redan finns en punkt. Så den komprimerade versionen av ett Javaprogram space.java blir space.java.gz osv. I en komprimerad fil används alla möjliga värden och innehållet är en binärfil som inte kan läsas direkt av något program som inte känner till just detta komprimeringsformat. När man ska använda sig av innehållet i den komprimerade filen är det dock inte nödvändigt att återskapa originalfilen på disken igen, utan man kan ta fram innehållet med zcat. Kommandot zcat foo.gz tar fram det ursprungliga innehållet i filen foo och skickar vidare det till standard output. Textfiler innehåller mycket redundans och blir oftast ungefär hälften så stora av att komprimeras. Många format på binärfiler, som PDF och olika bild- och ljudfiler, är redan komprimerade på ett eller annat sätt, och blir därför knappast mindre av en ytterligare komprimering. En del program dekomprimerar filer vid behov, det gör t. ex. Emacs om man öppnar en komprimerad fil. Den komprimering det handlar om här är sådan som går att vända tillbaka. Ingen information går alltså förlorad; den tar bara mindre plats att lagra. Man talar också om komprimerade video-, bildoch ljudformat där information går förlorad (destruktiv komprimering, lossy compression). De tar mindre plats än originalfilerna, men på bekostnad av att ha sämre kvalitet. Det finns andra komprimeringsprogram med andra format som också används ibland, t. ex. xz (med filnamn.xz) och bzip2 (med filnam.bz2) Filarkiv I många fall är det praktiskt att skapa ett filarkiv, dvs. en fil som i sig innehåller en mängd andra filer. Det kan t. ex. användas för att enklare skicka en hel mängd filer till någon annan i ett svep. Man kan packa upp filarkivet och därmed få fram de ingående filerna igen. I förra avsnittet talades det också om att packa upp, men då gällde det att packa upp en komprimerad fil för att få fram originalet igen, vilket inte är samma sak. I flera format av filarkiv ingår komprimering, men det normala filarkivformatet i Unix, tar, är inte komprimerat, utan ett arkiv är ungefär lika stort som de ingående filerna tillsammans. En sådan tar-fil har filnamnsändelsen.tar och ofta komprimerar man den i sin tur och får då en filnamn som slutar med.tar.gz. För att hantera sådana filarkiv använder man kommandot tar. 1 compress och gzip: gzip är ett fall där GNU inte helt efterliknar Unix. Det normala komprimeringsprogrammet i Unix var nämligen ett program compress som komprimerar med en annan metod. För GNU kunde man dock inte lagligen skriva en ersättning av det programmet eftersom den komprimeringsalgoritm som användes var skyddad av ett patent sedan Istället fick man lov att använda en annan metod. År 2003 gick det patentet ut, så sedan länge finns det fria program som implementerar den gamla algoritmen, men gzip fortsätter att vara det vanligaste sättet att komprimera filer i GNU. $ tar -c -f texter.tar *.txt $ rm *.txt $ tar -x -f texter.tar Första väljaren är -c för att skapa ett arkiv (Create), väljaren -f ska ha ett argument som är arkivfilen (i detta fall texter.tar) och som argument ger man vilka filer och kataloger som ska läggas i 1 Om man ska dela med sig av ett filarkiv till någon i MS Windows-världen kan det vara bättre att använda zip och unzip som använder ett annat format istället. Se deras mansidor! 96

97 10.6. Filarkiv arkivet (här *.txt). De ursprungliga filerna ligger kvar. I det andra fallet är förstaväljaren -x för att packa upp ett arkiv (extract). Filerna som togs bort med rm återställs. Med en väljare -v blir tar mer pratig (verbose) och talar om namnet på varje inblandad fil. Eftersom det är så vanligt att man komprimerar tar-arkiv med gzip så kan tar med -x ta hand om det steget själv, och det räcker med $ tar -xvf foo.tar.gz för att packa upp ett komprimerat tar-arkiv. I detta exempel fördes väljarna -x, -v och -f ihop. Då får man lov att sätta -f sist så att man kan ge ett argument till den väljaren. Den vanliga kombinerade ändelsen.tar.gz ersätts ibland med bara.tgz, speciellt i andra filsystem som inte klarar flera punkter i filnamnen. tar = tape archive: Den ursprungliga användningen av tar var att lagra en mängd filer på ett magnetband och därav kommer kommandots namn. 97

98 Inlupp 10: Dokumentrepresentation Redovisning Denna gång ska du skicka svar på frågorna i mail till Per igen, senast måndagen den 10/10. Med detta mail ska du också skicka en bilaga med ett komprimerat tar-arkiv som innehåller de filer som du ändrat i enligt instruktionerna. Texten med själva svaren kan ligga i huvuddelen av mailet, eller vara en bilaga den också, men är det en bilaga så se till att den skickas med en etikett som talar om att det är en text. (Så ska det bli automatiskt om du ger filen ett namn som passar en textfil.) Packa upp filerna De filer du ska använda i denna labb ligger i filarkivet /local/kurs/ids/xml.tar.gz. Packa upp det i din kurskatalog. Alla filer i filarkivet ligger i en katalog xml så du får en ny underkatalog med detta namn med filer som du ska använda i denna labb. (Gör ingen kopia av arkivfilen först.) Uppgift 10.1 Vad gav du för kommando för att packa upp filarkivet? XML i Emacs Öppna filen svt2.xml där i Emacs. Innehållet är tydligen en tevetablå i nåt XML-format. De olika raderna i filen börjar med indrag med olika många mellanslag för att det ska bli lättare att läsa så att man ser hur strukturen är. Ett program som förstår sig på XML och som ska göra något med denna fil kommer inte att bry sig om hur indragen är, men det är bra om filen är någorlunda läsbar för människor också! Detta kan Emacs ordna åt dig. Teveprogrammet Rapport saknar starttid. Gå till den tomma rad där det borde stå och tryck TAB så får du ett lagom indrag. TAB fungerar så i de flesta Emacslägen, att istället för att alltid gå fram lika långt så går det fram»lagom«långt för det som man just editerar. (Det kan användas både för en ny rad som här, eller för att ändra indraget på en rad som redan finns.) Skriv nu in <starts>18:55 (precis så, utan sluttagg). Nu blir det Invalid i informationsraden igen. En finess i detta Emacsläge är att det hela tiden kollar av ifall du har en korrekt XML-fil eller inte. Med rött visas var det finns fel. Uppgift 10.3 där? Var visas det vara fel? Varför just Ta fram hjälpen för denna Emacs-mode. (Se tabellen på s. 61 eller Help Describe i menyerna om du har glömt hur man gör det.) I den hjälp du får upp nämns ett kommando som avslutar det aktuella elementet genom att lägga in en sluttagg. Uppgift 10.2 Vad har elementet på toppnivån i detta dokument för starttagg? Uppgift 10.4 (Gör så!) Hur utför man det kommandot? Notera härnäst att det står (nxml Invalid) i informationsraden. Det första inom parentesen är som vanligt namnet på det editeringsläge som Emacs befinner sig i. Tillägget Invalid betyder i detta fall att det är en ogiltig XML-fil. Detta Emacsläge använder sin kunskap om XML-syntax för att markera när syntaxen inte stämmer. Emacs vet inte vad det är för slags XML i denna fil, men eftersom innehållet inte ens är välformad XML så kan den ändå vara säker på att den är felaktig. Ett sätt att direkt flytta sig till felet är att klicka på detta ord Invalid. Rätta felet! Snart ändras Invalid till Valid. Nu bör bufferten ha blivit Valid igen. Med detta menas än så länge bara att det är välformad XML eftersom Emacs bara vet att detta är XML men inte vet vilket särskilt XML-märkspråk det är. Detta speciella märkspråk för tevetablåer beskrivs i filen schedule.rnc i samma katalog. Tala om det med XML Set Schema File... och ange den filen. Du får en förfrågan»save schema location to... «Svara y! Nu minns Emacs vilket schema som gäller för denna fil. Där beskrivs en ganska petig syntax för hur de olika delarna av en sån här tevetablå måste se ut 98

99 schedule.rnc och denna fil stämmer inte riktigt med denna syntax. Så nu hittas flera fel. Tryck på Invalid i informationsraden för att gå till det första felet. Med C-c C-n kan du gå till nästa fel. Varje gång du går till ett fel så kommer det ett litet meddelande om vad felet är i ekoarean. För att gå till det första felet utan att behöva använda musen kan du använda M-< eller <C-home> för att gå till början av bufferten innan du går till nästa fel. Rätta alla felen! Exakt hur syntaxen måste vara här bör framgå av de exempel som inte ger fel. Lägg till ett par program i slutet av tablån. (Hitta på nåt.) Använd TAB för indrag så att delarna i ditt programinslag får samma indrag som de övriga. Se till att din slutliga fil är»valid«. schedule.rnc Titta i den där filen schedule.rnc som beskrev formatet. Det finns olika sätt att beskriva syntaxen för ett viss slags XML-dokument. Detta kallas för RELAX NG. Detta format är inget du behöver lära dig, men många delar av det bör ändå framgå tydligt med tanke på hur filen såg ut. Se i synnerhet på det pattern som definieras där för att beskriva vad elementet starts får ha för värden. Detta är ett (utökat) reguljärt uttryck och det godkänner inte bara tider som»17:15«utan också t. ex.»12:75«och»55:15«som inte är riktiga tider. Förbättra detta reguljära uttryck så att det inte godkänner sådana felaktiga tider! När du har ändrat i schedule.rnc måste du sätta filschemat för svt2.xml på nytt för att den ska använda den nya filen ifall du vill prova att ditt reguljära uttryck fungerar som avsett. (Prova gärna med lite felaktiga tider, men glöm inte att återställa till korrekta tider efteråt, så att det du lämnar inte innehåller några fel!) CSS för XML Öppna din svt2.xml i Firefox (med File Open File i Firefox, eller från filhanteraren). Dokumentträdet visas utan någon särskild formattering eftersom webbläsaren inte vet något om hur dessa element ska formatteras. Den vet bara att detta är XML (på grund av filnamnet). Uppgift 10.5 Firefox skriver något just om att den inte vet vad det är för slags XML. Vad står det? Lägg in följande på en rad som andra rad i filen: <?xml-stylesheet type="text/css" href="tv.css"?> (Det står på två rader här i kompendiet bara för att spalten är så smal.) Detta talar om att filen tv.css i samma katalog ska ge information om hur olika element ska visas med samma språk CSS som du såg i kapitel 8. Se efter att filen nu visas annorlunda i Firefox! Uppgift 10.6 Vilket attribut har satts till vilket värde i tv.css? Uppgift 10.7 Vad betyder det om hur ett sådant element ska visas? (Sök på nätet.) Uppgift 10.8 Vilket värde är default för det attributet? (Sök på nätet.) Lägg till saker i tv.css så att det blir en fin spalt med en tevetablå. Sätt en ganska smal width för hela schedule så att det påminner om en spalt i en tidning. Ändra så att tid och titel för programmen markeras med annan slags text, kanske med font, font-weight eller font-size. Se till att beskrivningen börjar på ny rad. Sätt färger och padding och/eller margin som du vill ha dem. Som överkurs kan du läsa på om CSS (t. ex. på och komma på ett sätt att använda något av den information som står som attributvärden i filen, t. ex. skriva»(på finska.)«i slutet av program som har lang="fi". Bildfiler /usr/share/shotwell/icons/ innehåller en del bildfiler som används av fotohanteraren Shotwell. Uppgift 10.9 Filerna har fyra olika filnamnsextensioner. Vilka då? (Två av dem finns det bara en var av.) Om man öppnar en bildfil i Emacs så visas den som en bild, men man kan ändra så att den visas»som text«, tecken för tecken istället. Uppgift Vad kan man trycka i Emacs för att slå om (toggle) mellan att visa som bild och visa som text? Uppgift Vilka av de olika bildformaten som används i den katalogen är binärfiler och vilka är textfiler? Det finns minns en av varje slag. Vad säger file om filerna i den- Uppgift na katalog? Uppgift För ett av de fyra formaten säger file hur stor bilden är också. Vilket? Uppgift Det finns en väljare till file som gör att den skriver ut en MIME-beteckning istället. Hur lyder den väljaren? Uppgift Vilka är de fyra olika MIMEbeteckningarna för filerna i denna katalog enligt detta? 99

100 INLUPP 10: DOKUMENTREPRESENTATION Välj ut en av bildfilerna som är en textfil. Om du arbetar tillsammans med någon så välj olika filer. Uppgift Vilken fil har du valt? Uppgift Detta format använder XML. Hur lyder starttaggen till elementet på toppnivån? (Det är förmodligen ett långt svar med en massa attribut.) Uppgift Vad kommer det för slags element närmast efter denna starttagg? Uppgift Vad är det sista elementet inom toppelementet för slags element? Lite ljud som omväxling Uppgift Vad säger file om ord.flac i din kurskatalog? Detta är ett binärt format, men trots det så finns det några koder som direkt motsvarar tecken i början av filen. Öppna den i Emacs! Uppgift flac-filen? Vilka är de fyra första tecknen i Större delen av filens innehåll motsvarar kontrolltecken sedda i textformat som visas med koder i Emacs. I synnerhet är ^@ en beteckning på kontrolltecknet NUL som har koden 0. Man kan se att rätt många bytes har värdet 0. Ett komprimerat ljudformat som fyller ungefär samma nisch som MP3 men inte är lika vanligt heter Ogg Vorbis. Det finns ett program oggenc som skapar sådana Ogg-filer som brukar ha filnamnsändelsen.ogg. Skapa en fil ord.ogg utifrån ord.flac. (Du får själv hitta lämplig dokumentation om hur detta görs.) Uppgift Hur skrev du för att göra detta? Det finns en väljare som sägs sätta kvaliteten för kodningen av oggarna. Skapa en ny fil ord-good. ogg som kodar ord.wav till en ogg enligt den bästa kvaliteten man kan ställa in med den väljaren enligt dokumentationen. Du behöver även en väljare som talar om vad output-filen ska heta. Uppgift att göra det? Vad gav du för kommando för Uppgift Hur beskriver kommandot file de båda ogg-filerna du har nu? (Använd joker.) (Om det inte är som nånting med»ogg«så har du gjort fel.) Uppgift Visa storleken i bytes för alla dessa tre dessa ljudfiler med ett kommando. ord-good.ogg borde ha blivit större än ord. ogg, så är det inte så har du gjort något fel. (Om du vill lyssna på de olika filerna (ogg och flac) för att se om du hör någon skillnad är ett sätt att göra det med kommandot play.) Referenser i LaTeX Och nu något helt annat, nämligen hur man i La- TeX hanterar källhänvisningar och referenser, vilket är en viktig del av vetenskapligt skrivande. Kopiera /local/kurs/ids/dep.* (två filer) till din svn-katalog och checka in kopiorna. Den ena filen är en LaTeX-fil dep.tex med ett utdrag ur en artikel skriven av Joakim Nivre här på institutionen. TeXa den och titta på resultatet. Uppgift Den använder ett paket som är till för att rita så kallade dependensgrafer med. Vad heter tydligen det paketet? Uppgift Vilka etiketter används med \label och \ref i denna LaTeX-fil? I dep.tex görs hänvisningar till tidigare artiklar och annat med författarnamn och årtal. Den första är till»marcus, 1980«, tydligen något publicerat 1980 av någon som heter Marcus. Mer är det tänkt att man ska kunna se i en referensförteckning, men någon sådan är inte med i detta utdrag. Det finns en kort sida om källhänvisningar för LaTeX på de lila sidorna. Slå upp den! Uppgift på? Vilken url där står det om detta Där finns länkar till ett exempel. Läs detta, både som PDF och de båda textfilerna som det är gjort med. Gör om dep.tex så att den använder det sätt att hantera referenser som det står om där. Du har en färdig bib-fil dep.bib, så sök upp vilken post där de olika referenserna handlar om och använd den nyckel som står där. Uppgift Vilket tecken kan du söka efter i dep.tex för att se att du inte har missat några referenser? När du bytt ut alla referenser och bekräftat att du det går att TeXa utan felmeddelanden och med bra resultat så checka in din ändrade dep.tex med en ändringskommentar om att du nu löst uppgift Nu ska du lägga till en bok som inte står med i bib-filen, så öppna den i Emacs. Du hamnar (förstås!) i ett särskilt bib-läge. I informationen du hittade i står en del om hur du kan editera bib-filer. Resten kan du ta reda på själv. 100

101 Diverse Du ska lägga in ett uppslag av typen»book«. Författaren är»hudson, Richard A.«, titeln»english Word Grammar«. Boken gavs ut av Blackwell i Oxford år Få med all den informationen i posten och hitta på en lämplig nyckel. Denna bok ska det finnas en parentesreferens till i dep.tex direkt efter texten»word Grammar«, så lägg till det! Uppgift När du kör om LaTeX nu bör den ge ett varningsmeddelande»there were unresolved citations«. Vad står det i din PDF nu där denna referens ska vara? Uppgift Kör om Biber. Om det inte gav något felmeddelande eller varning har du nog skrivit uppslaget rätt. Vad skrev du om denna bok i bib-filen? Uppgift TeXa om filen tills den inte säger något om att det behöver göras igen. Checka in nya dep.tex och dep.bib med ändringskommentar om att du nu har löst uppgift Hur skrivs denna nya referens nu ut i resultatet? För den nyfikne Frivilliga förslag på saker att undersöka. (Du behöver ofta köra om hela cykeln LaTeX, Biber, La- TeX för att testa saker.) Vad händer om två böcker (eller annat) är skrivna av samma författare samma år? Vad händer om år inte står angivet? Allt detta gjordes med en särskild»style«för Biblatex. Hur blir det om man inte anger stil? Vad finns det för andra stilar? Vad bestämmer hur många namn som listas när det är många författare? Diverse Uppgift Vilket ord i filen /local/texts/ jabberwocky innehåller bokstaven x? (Lös uppgiften med bara ett grep-kommando med väljaren -o.) Uppgift Hur kan man skriva q{0,1} enklare i ett utökat reguljärt uttryck? Uppgift I sagobok.tex gjorde Per (dvs. användaren starback) en ändring den 30 september. Hur beskrev han den ändringen i filens logg? Uppgift Kommandona för versionskontroll i Emacs börjar med C-x v. Ett av dem är till för update. Vad heter det i menyerna och vad har det för kortkommando? än att skriva svn update eftersom innehållet i Emacs uppdateras på samma gång. Uppgift Din saga har ju ditt användarnamn som rubrik. Ändra den rubriken till nåt som passar innehållet i just den sagan istället. TEXa filen tills din titel syns även i innehållsförteckningen och checka sedan in din ändring. Filen /local/kurs/ids/japansk.txt är inte kodad med UTF-8. Gör man cat japansk.txt får man därför ut en konstig ojapansk sörja i terminalen. Den filen har en rad i början som talar om för Emacs vad det är för teckenkodning: -*- coding: euc-jp -*- Uppgift Använd samma beteckning»eucjp«för att med iconv omvandla från denna teckenkodning. Svara med ett kommando som skriver ut texten rätt i terminalen. Svara också med den text som det blev då. Skapa komprimerat arkiv När du mailar svaren på dessa uppgifter ska du även skicka med ett komprimerat tar-arkiv med de filer som du har ändrat. Filerna som ska vara med i arkivet är svt2.xml, schedule.rnc, tv.css, ord.ogg och ord-good. ogg. Ett sätt skulle vara att först skapa ett tar-arkiv med tar och sen komprimera det med gzip, men det finns en väljare till tar som direkt fixar komprimering också. Ta reda på den och använd den. Uppgift Vad använde du då för kommando för att skapa det komprimerade tar-arkiv som du skickar med som bilaga? Du behöver både välja ett lämpligt filnamn för ett sådant komprimerat filarkiv, och använda en väljare som gör att det blir ett sådant som skapas! Använd det när du är i sagobok.tex eftersom du ska ändra något där. Detta kan vara mer praktiskt 101

102

103 Kapitel 11 Program Ett datorprogram är en samling instruktioner som beskriver något som en dator ska utföra Skript På s. 33 fick du skapa skalskript textfiler med flera skalkommandon efter varann och köra dem genom att skriva bash filnamn. Genom att ge ett filnamn som argument till skalet (bash) talar man om att det ska hämta kommandon från den filen. På s. 58 fick du sedan se hur man kan ge argument till ett sådant skript. Detta är ett slags enkla program. På samma sätt kan man köra t. ex. ett program i programspråket Python (brukar ha namn som slutar på.py) med python filnamn Interpreterande och kompilerande programspråk De flesta program man kör är dock inte textfiler utan binärfiler. De innehåller då instruktioner i en maskinnära form (maskinkod) som kan utföras (exekveras, köras) direkt av datorn. Med datorprogram kan man avse både en sådan binärfil, och även källkoden, så som programmet skrivits i något programspråk i en eller flera textfiler. I de flesta programspråk skriver man instruktioner som ligger långt ifrån den typen av instruktioner som datorn kan utföra direkt. Det finns olika sätt att då få datorn att utföra instruktionerna i källkoden: kompilering och interpretering. Kompilering är att översätta källkoden till maskinkod. Översättningen sker med en kompilator ett särskilt program. Sen kör man den resulterande koden. (Källkoden behövs inte längre för att kunna köra programmet. Men om man behöver göra ändringar i programmet behöver man källkoden igen och får lov att kompilera om den efteråt.) Interpretering är att tolka källkoden bit för bit istället, så som skalet tolkar kommandon i ett skalskript. Ett särskilt program, en interpretator, läser och utför dessa instruktioner. (Det finns även mellanlägen mellan kompilering och interpretering.) 11.3 Att köra program Programmen är filer de också. Om man t. ex. kör bildbearbetningsprogrammet Gimp så är det filen /usr/bin/gimp man kör. Det skulle gå att skriva den fullständiga sökvägen /usr/bin/gimp för att köra det programmet, men det räcker med bara gimp. Om man skriver bara ett namn utan katalog så letar nämligen skalet efter en sådan fil i vissa kataloger (däribland bland annat /bin och /usr/bin). Där ligger de flesta av de program du använt hittills, som t. ex. cat, grep, ls, sed osv. Om programfilen inte ligger i en av dessa kataloger måste man skriva ett längre filnamn där man tar med katalogen, med en fullständig eller relativ sökväg. Observera att skalet inte söker efter filen i aktuell katalog i sådana fall, som annars när man skriver ett filnamn utan katalog Att kompilera program För att kompilera ett program så kör man i de enklaste fallen en kompilator med källkodsfilen som argument. Kompilatorn skapar en ny fil som går att köra. Ett större program består normalt en mängd filer som använder sig av varandra på komplicerade sätt, och för att kompilera detta kan det krävas flera steg. I Unix-världen används oftast ett program make för att göra detta. Det utför alla dessa steg i rätt ordning för att tillverka vissa filer. I en fil Makefile har man skrivit regler som talar om för den vad den ska göra. Man kan ge argument till make som talar om vad det är man vill»tillverka«med det, men bara make utan argument duger ofta. 103

104 11. PROGRAM 11.5 Att installera program På en GNU-dator som man själv administrerar är det i allmänhet enklast att inte kompilera program man ska använda, utan istället installera färdigkompilerade program som färdiga paket med filer som läggs ut på rätt ställen på disken. Program som sköter sådant kallas pakethanterare. Detta förutsätter att någon har gjort ett sådant paket som passar till ens system, men är det ett välanvänt program så är det antagligen så. Ett par vanliga paketsystem är APT och RPM. Vårt system använder det sistnämnda av dessa. Men som vanlig användare utan administratörsrättigheter så kan du oftast inte använda dig av sådant eftersom du inte har rätt att lägga filerna på de centrala ställen där de då är tänkta att hamna. Då får du ofta lov att installera program någonstans under din hemkatalog genom att kompilera dem själv. (Så kan det också vara för att ingen har gjort nåt behändigt paket av just det programmet.) Programmen distribueras då i allmänhet i form av ett (komprimerat) filarkiv som källkoden finns i. Du börjar med att packa upp detta filarkiv och sen se efter om det bland filerna finns någon fil README med allmänna instruktioner eller kanske en fil INSTALL med instruktioner om hur du ska installera programmet. (Dessa filer heter ofta just så, med versaler.) Ofta säger instruktionerna att du ska använda make på något sätt Att installera med make I GNU har det utarbetats en standard för hur installation går till. Med distributionen av programmet följer det med ett skalskript configure som man börjar med att köra. Det skapar en fil Makefile som är särskilt anpassad för det system man kör på. Efter det kan man kompilera programmet med make och sedan installera det med make install. I det sista steget kopieras filerna ut till olika ställen i filsystemet. De tre kommandona kan vara $./configure --prefix ~ $ make $ make install Normalt läggs program i /usr/local/bin/, man-sidor i /usr/local/man/ och diverse andra filer i några andra underkataloger till /usr/ local. Men där har vanliga användare inte rätt att lägga filer, så det kommer inte att funka om man inte är administratör! Med --prefix ovan till configure talar man om var programmet och alla dess filer ska installeras, så med t. ex. --prefix ~/foo installeras själva programmen i ~/foo/bin/ osv. Istället för en katalog under ens hemkatalog kan man förstås använda hemkatalogen själv: Med --prefix ~ hamnar själva programmen i ~/bin osv. 1 Det kan även finnas andra saker man ställer om vid konfigureringen med olika väljare till configure Upphovsrätt och licenser Upphovsrätt gäller för program, både för källkod och maskinkod, precis som för litterära och konstnärliga verk. Inga som har skrivit program för moderna datorer har dock varit döda i sjuttio år så att upphovsrätten har gått ut för deras verk, så som skett för t. ex. Strindberg och Lenngren. 2 Trots det finns det en mängd program som det står en fritt att använda, kopiera och sprida, eftersom programmens författare uttryckligen givit en tillstånd till detta. Sådant sker i form av en licens där upphovsrättsinnehavarna talar om vad de tillåter. I synnerhet är hela operativsystemet GNU sådan»fri programvara«, men för att komma till GNU går vi via Unix Unix Operativsystemet Unix skapades i slutet av talet på Bell Labs i USA. I mitten av 1970-talet började det spridas utanför Bell Labs. Det såldes rätt billigt (speciellt till universitet) och gick att köra på relativt billiga datorer (vid en tid när datorer var stora och dyra), vilket bidrog till dess popularitet. Dessutom följde källkoden med så att man kunde se precis hur det fungerade och även införa egna ändringar i systemet. Det ökade populariteten ännu mer i den akademiska världen, där en mängd universitet använde Unix i undervisningen i datorvetenskap. Möjligheten att göra ändringar i koden ledde till att det uppstod en stor mängd varianter av Unix. En viktig variant var BSD (Berkeley Software Distribution) från University of California, Berkeley. Berkeley spred sina tillägg och förändringar fritt, och många använde dessa. På 1980-talet tillverkade flera företag olika enanvändardatorer med Unix arbetsstationer. De var mycket kraftfullare och dyrare än den tidens vanliga persondatorer, och använde olika versioner av Unix. De olika tillverkarna skickade med olika tillägg från BSD och andra håll, och skrev också mycket egna tillägg (som inte spreds fritt), 1 Tidigare har jag skrivit att det normala sättet att ge argument till långa väljare är med ett likamedtecken, som --prefix=~/foo, men just i detta fall ställer det till problem eftersom skalet bara ersätter ~ med ens hemkatalog när det står först i ett argument. 2 Detta är förstås skälet till att texter av dessa figurerat i flera övningar. 104

105 11.6. Upphovsrätt och licenser så de olika Unix-systemen skilde sig åt. En viktig del var fönstersystemet X som spreds fritt från Massachusetts Institute of Technology (MIT) där det var skrivet. Även till detta lade de olika tillverkarna till olika nya finesser, så på olika datorer körde man lite olika versioner av X. Fönstersystemet X kallas också ofta för X11, eftersom det är version 11 av det som man använder, och det har ingenting med det mycket senare OS X att göra GNU och fri programvara När Unix var nytt hade de flesta av dess användare möjlighet att läsa koden för att lära sig hur den fungerade och även möjlighet att införa egna ändringar för att få delar av systemet att bete sig annorlunda. Med tiden hade det blivit allt ovanligare. De flesta Unix-användare kom att sitta vid arbetsstationer som till stora delar var som svarta lådor som man inte hade insyn i. Det uppfattades av många som frustrerande vid en tid när en stor del av datoranvändarna var programmerare själva utannonserade Richard M. Stallman på MIT planer på att skriva ett fritt operativsystem som skulle få namnet GNU. Eftersom Unix redan då hade en så stark ställning så valde han att det skulle vara Unix-kompatibelt, dvs. bete sig som Unix trots att det inte var Unix. GNU stod för»gnu s Not Unix«. Snart startades en särskild stiftelse, Free Software Foundation (FSF), för att hålla i projektet och även i övrigt verka för fria program. En del program som redan fanns och som var fria kunde användas. T. ex. bestämde Stallman tidigt att man inte behövde skriva ett nytt fönstersystem eftersom fönstersystemet X var fritt. En del tillägg till Unix som skrivits på Berkeley och andra ställen var också möjliga att återanvända. Men den största delen av koden fick man skriva själva Linux Många delar av GNU kom snabbt till, och användes som separata delar på andra Unix-system, men en viktig del som kom på efterkälken var den mest centrala delen av operativsystemet, kärnan. Utan den var det inte möjligt att sätta ihop ett helt GNU-system offentliggjordes Linux av den finlandssvenske studenten Linus Torvalds. Det var ett litet Unixliknande system, framförallt inspirerat av Minix, ett tidigare minimalt Unixliknande system, gjort särskilt för undervisning i operativsystem av Andrew S. Tanenbaum i Nederländerna. Inom kort sattes hela GNU/Linux-system samman som använde Linux som operativsystemskärna istället för HURD som var den fortfarande bara halvfärdiga kärna som skulle användas i GNU. Oftast kallas sådana system bara för Linuxsystem, efter den kärna som används. Detta gick att köra på vanliga persondatorer, som annars oftast körde MS-DOS från Microsoft. Persondatorerna hade med tiden blivit så pass kraftfulla att de kunde klara ett mer krävande system Unix och Unix-liknande system idag En stor del av Unix-liknande system idag är fri programvara. Det finns nu en mängd olika distributioner av GNU/Linux som publiceras av olika företag och organisationer. Dessa skiljer sig åt mer eller mindre mycket beroende på vilka val distributörerna har gjort angående vilka program som ska vara med och inte vara med. Några av de populärare distributionerna är Debian GNU/Linux, Ubuntu, Red Hat Enterprise Linux, Fedora, Centos, Linux Mint, opensuse och Gentoo. Dessa är Unix-kompatibla, men de är inte Unix, dvs. de är inte licensierade att använda varumärket Unix, som ägs av The Open Group. Det är däremot kommersiella Unix-versioner som AIX, HP-UX, IRIX, Solaris, Tru64, A/UX och OS X. Alla dessa olika system skiljer sig åt på en mängd små sätt. Det har gjorts flera försök att få dem att närma sig varandra för att underlätta flyttandet av program från ett system till ett annat, och bland annat genom standarderna POSIX och Single Unix Specification (och genom att en del kommersiella system slagits ut på marknaden) är dagens Unix-system mycket mer lika varandra än hur det var för ett par decennier sedan GNU GPL och»copyleft«många fria program finns det ofria varianter av. Så är det t. ex. med fönstersystemet X från MIT och med de Unix-tillägg som gjordes för BSD. Företag Figur 11.1: Copyleft-tecknet har bildats genom att spegelvända copyright-tecknet. 105

106 11. PROGRAM har vidareutvecklat dessa fria program men inte gjort sina nya versioner till fri programvara. Den som har använt dessa versioner har inte t. ex. kunnat läsa eller ändra i programmet de kört, trots att den ursprungliga versionen var fri programvara. De som skrivit dessa program hade inget emot detta, men för GNU ville man inte ha det så. Man ville att alla som använde de program man skrev skulle använda fria versioner av programmen. För att de program som skrevs för GNU skulle fortsätta att vara fria för alla som använde dessa program skrev man en ny licens, GNU GPL (General Public License), där en av de viktigaste nyheterna var något som man kallade för copyleft. Det innebär att man inte tillåter att någon sprider modifierade versioner av programmet om inte dessa ändringar också sprids med samma villkor. Den som delar med sig av program enligt GPL till en grupp människor ser alltså till inte bara att programmet är fritt för den gruppen, utan även för dem som den gruppen i sin tur sprider vidare programmet till. Ibland använder man ett spegelvänt copyright-tecken (figur 11.1) för detta. Med tiden har det skapats fler licenser för fri programvara med lite olika egenskaper, men GPL är den klart vanligaste inte bara för sådant som skrivits direkt för GNU, utan även för t. ex. kärnan Linux och webbläsaren Firefox. Istället för att formulera dessa villkor själv brukar man i allmänhet använda någon av de licenser som redan har formulerats. Ett skäl är att det underlättar mycket för den som vill använda programmet om en välkänd licens som man redan känner till har använts. Ett annat är att det underlättar återanvändning av delar av programmet tillsammans med delar av andra program som använder samma licens. Licenser för icke-fria program är i allmänhet utformade som avtal eller överenskommelser mellan två parter. För att få komma åt programmet så förbinder man sig till att uppfylla vissa villkor. En licens som GNU GPL fungerar inte så, utan är helt enkelriktad. Det finns ingenting som man behöver gå med på för att använda ett GPL:at program. Allt den licensen gör är att öka vilka rättigheter användare har, genom att uttryckligen göra vissa saker tillåtna som annars inte hade varit det på grund av upphovsrätten Öppen källkod = Open source Termen öppen källkod (open source) kom till senare, och brukar användas av dem som snarare betonar de tekniska fördelarna som att ökad tillgänglighet av källkoden kan leda till förbättrade program genom att fler har möjlighet att hitta fel eller bidra med fixar. Då ses det som ett medel till att nå bättre resultat snarare än som ett mål i sig, även om vilka program som är fri programvara och vilka som är öppen källkod i praktiken oftast räknas likadant. Figur 11.2: Byggblock i Creative Commons-licenser Annat än program Programförfattares fria spridande av sina program har varit en inspiration även för fritt spridande av andra upphovsrättsligt skyddade verk, som texter, bilder och musik. Ett exempel är ett stort samarbetsprojekt som encyklopedin Wikipedia. Licenser som GNU GPL som är gjorda för program passar inte alltid så bra in på annat material. Organisationen Creative Commons har gjort en mängd olika licenser som är till för att upphovsrättsinnehavare ska kunna ge en del av sina rättigheter till allmänheten utan att släppa all kontroll. Dessa används rätt ofta vid spridande av texter, musik, bilder osv. och en del av dessa licenser är»fria«i den betydelse som används inom fri programvara. En del har även en copyleft-klausul, som där kallas för Sharealike. I figur 11.2 ses ikoner som ofta används vid beskrivning av de olika CC-licenserna. Creative Commons. BY = Attribution: man måste ange upphovsmakare. NC = Noncommercial: bara icke-kommersiell spridning är tillåten. ND = No Derivate Works: man får inte sprida härledda verk, utan bara exakta kopior SA = share alike: man får bara sprida det med samma villkor. Här har share alike fått en symbol som liknar den för det liknande copyleft. En CC-licens använder någon kombination av dessa element, t. ex. Attribution + NoDerivates = by-nd = för något som andra får sprida vidare i oförändrat skick, om de anger ursprung, oavsett om det görs kommersiellt eller inte. Det är inte alla dessa licenser som räknas som fria enligt den betydelse som friprogramvarurörelsen använder. 106

107 Inlupp 11: Program Redovisning Checka in svar på frågorna i en fil ids11.txt i den versionskontrollerade katalog som heter som ditt användarnamn och som du har sedan tidigare. Gör en incheckning redan första dan du hållit på med detta, och en ny efter nästa gång du arbetat med det, osv. Versionskontroll igen Gå i skalet till katalogen alla som du skapat tidigare som kontrolleras av Subversion. Kolla läget här med kommandot svn status som säger något om hur din arbetskatalog skiljer sig från vad som finns i repositoriet. Du borde bland annat få rader som? sagobok.aux? sagobok.pdf och några till eftersom LaTeX skapade de filerna när du TeXade sagobok.tex, men Subversion inte vet något om dessa filer. Det är helt i sin ordning. Dessa filer bör inte checkas in, eftersom de skapas automatiskt från andra. Ett M står för modified, så om du har en rad som M sagobok.tex betyder det att du har gjort ändringar i den filen som du inte har checkat in. (Gör det i så fall om det är riktiga ändringar!) Ett A står för added, så om du haft en rad som A groda.png skulle det betytt att du har registrerat den filen i Subversion, men sen inte checkat in den ännu. Öppna sagobok.tex och använd samma kommando som i uppgift för att se till att den är uppdaterad. Ändra sedan i den genom att byta ut Det var en gång i början av din saga mot \lettrine{d}{et var en gång}. TEXa filen, och om allt gick bra så checka in din ändring. Där används ett LaTeX-kommando för stor initial med två argument. Uppgift 11.1 Efter att du har checkat in den, så ta bort filen sagobok.tex och ge svn status igen. Att en fil som borde finnas saknas i din arbetskatalog vill Subversion verkligen uppmärksamma dig på. Vad använder den för tecken för att markera sådana filer? Eftersom filen var versionskontrollerad kan du hämta tillbaka den från repositoriet igen. Gör svn update så får du den senaste versionen. Uppgift 11.2 Vad svarade svn då? * * * På står om hur man kan starta egna projekt under Subversion här. Vissa av De lila sidorna kan bara läsas om man är inloggad på dem, för att inte säga onödigt mycket om hur våra datorer är uppsatta till allmänheten. Detta är en sådan sida. Skapa en sådan webbinloggning för att kunna läsa den. (Detta är ett exempel på ett lösenord som inte är så himla viktigt. Återanvänd inget viktigt lösenord här, t. ex. absolut inte ditt vanliga inloggningslösen!) Uppgift 11.3 Vad står det för exempel på en svn import-rad för att starta ett projekt där? Att köra program Gå till svn-katalogen som heter som ditt användarnamn. I föräldrakatalogen, alltså din kurskatalog ligger ett program som du körde från den grafiska miljön i uppgift 1.4 (s. 10). Om du istället ska köra samma program från skalet kan du använda en relativ sökväg för föräldrakatalogen (ett snäpp upp). Prova! Uppgift 11.4 Hur skrev du då? Gå upp till föräldrakatalogen så att du står i samma katalog som programmet. För att köra programmet härifrån är det enklaste att använda en relativ sökväg som betyder»samma katalog«. Prova! 107

108 INLUPP 11: PROGRAM Uppgift 11.5 Att kompilera Hur skrev du då? Gör svn update i svn-katalogen som heter som ditt användarnamn. Det visar sig att en ny fil dyker upp trappa.c. Det är ett litet program i programspråket C. Kompilera programmet med cc trappa.c. (cc är C-kompilatorn.) Det skapas då en ny fil med det körbara programmet. Uppgift 11.6 Vad heter den fil som då skapas? Uppgift 11.7 Vad säger kommandot file att den filen är för något slags fil? Den skapade filen är ett körbart program. Kör den med /local/texts/jabberwocky som input. (Programmet accepterar inga argument, så du får lov att använda omdirigering.) Uppgift 11.8 Hur skrev du kommandot för att göra detta och hur löd resultatet? Normalt skulle man vilja att detta program vars källkod ligger i trappa.c skulle heta trappa istället. Det finns väljare till cc för att göra så istället, men tillverka istället en sådan fil trappa med hjälp av kommandot make. Kör alltså make trappa. Det skriver ut vilket kommando det i sin tur utför. Uppgift 11.9 Vilken väljare till cc använde make för att tala om vad det kompilerade programmet skulle heta? Uppgift Om du gör make trappa igen vad får du för meddelande från make? Såg du vad programmet gjorde med textfilen? Antagligen kan du inte C, men öppna ändå källkoden med Emacs och se om du kan gissa en del av hur programmet fungerar. Indent betyder indrag. Uppgift Vissa delar av programmet är kommentarer de har ingen effekt på vad programmet gör, utan finns där för att underlätta läsningen och förståelsen av programmet. Vad skriver man tydligen före respektive efter kommentarer i C? Ändra i trappa.c så att den gör indrag med mellanrum istället för med understreck. Skriv make trappa för att kompilera om programmet och provkör det för att se att det stämmer, och checka sedan in den ändring du har gjort, med ett loggmeddelande som talar om vad du har ändrat. NR-grep Du har fått nys om ett program NR-grep som är ett grep-liknande program, men som bland annat skiljer sig genom en väljare -k med vilken man kan hitta ungefärliga träffar, som kan skilja sig lite från det man letar efter. I exemplet nedan söker jag efter felstavningen»aprksimativ«i en ordlista. Först tillåter jag två skillnader, men hittar ändå inget. När jag tillåter tre skillnader hittar jag ordet. Om jag tillåter hela fyra skillnader finns det flera möjligheter. $ nrgrep -x -k2 'aprksimativ' dsso-list.txt $ nrgrep -x -k3 'aprksimativ' dsso-list.txt approximativ $ nrgrep -x -k4 'aprksimativ' dsso-list.txt approximativ approximativa approximativt predikativ presumtiv primitiv Sök upp detta program på nätet och hämta källkoden (till den senaste versionen). Flytta den till din kurskatalog och packa upp den där. Uppgift Vad heter filen du hämtade? Uppgift Vad gav du för kommando för att packa upp den? I katalogen du får då hittar du information om hur programmet kan installeras. Gå till den nyskapade underkatalogen och gör så. (Det kommer upp en drös varningar när programmet kompileras, men det är inget du behöver bry dig om. Ifall du vore programmets författare borde du bry dig om dem.) Här finns inget sista installationssteg som lägger in programmet i nån särskild katalog, utan det ligger bara kvar i denna katalog. Uppgift Ge ett kommando som plockar ut alla rader i /usr/share/dict/words som ligger högst två steg ifrån»starback«, samt det resultat du får av detta. Uppgift I FSF och friprogramvaruvärlden talar man om fyra friheter som ska vara uppfyllda för att program ska räknas som fri programvara. Vilka är dessa fyra? (Sök på nätet.) När man kör nrgrep -H säger den att det är free software och att man ska se»the GNU General Public License for details«, men här finns motstridig information, för det följer med en fil 108

109 Bugg i grep med programmet som innehåller upphovsrättsinformation som inte är GNU GPL utan en egen text. Uppgift Vad heter den filen? Uppgift Enligt vad som står om rättigheterna där finns det minst en av de fyra friheterna i uppgift som man inte har som användare av detta program. Nämn en sådan, och förklara på vilket sätt den inte är uppfylld! Bugg i grep För att hitta verb som börjar med x eller slutar med x borde detta funka: $ grep -E '^x x$' verb.txt Uppgift för output? Testa kommandot. Vad ger det I svaren finns det rader med som inte borde ha varit med. Vi har hittat en bugg i grep! Hämta den senast publicerade på nätet och kompilera och installera den för att se om den har samma fel. Använd hela det normala GNUsättet för att installera program, och använd --prefix ~ vid konfigureringen för att få din hemkatalog som prefix. Uppgift du då? Exakt vilka kommandon skrev Uppgift I vilken katalog hamnade nu det nyinstallerade programmet grep? Hur kan du enklast skriva för att köra det? Uppgift Finns buggen kvar? Vad använde du för kommando för att testa det? När du kompilerade programmet så skapades en massa filer som inte längre behövs. En del var bara mellanresultat, och de som var det resultat som du var ute efter har kopierats till en annan katalog när du installerade. Läs i INSTALL för att se vad du kan ge för make-kommando för att rensa bort de filer där som inte längre behövs och ge det kommandot. Uppgift Hur löd det kommandot? Det skulle kunna vara bra att rapportera buggen till programutvecklarna. Uppgift Formulera en buggrapport om den buggen. Ge ett kort kommando utan onödiga detaljer som ger ett oönskat resultat. Tala om både vad det ger för resultat och vad du väntade dig för resultat istället. Du ska förstås inte använda dig av någon fil verb.txt, för den har inte den som ska ta emot rapporten. Så använd istället echo för att ge en kort input som visar problemet. Ett mål är att den som tar emot rapporten lätt ska kunna prova själv och se buggen. (Om det vore på riktigt skulle du skriva på engelska, men du kan skriva på svenska istället nu.) * * * Fast när man ska rapportera buggar är det ännu bättre om man först ser efter om de redan är fixade genom att jämföra med den senaste versionen. Uppgift Vilken version av grep kör vi här? Hur tog du reda på det? Uppgift Vilken är den senaste publicerade versionen av GNU grep? Var på webben hittade du det? (Den är från i år, så är inte den du hittade från i år har du hittat fel.) 109

110

111 Kapitel 12 Avslut I tidigare uppgifter har ni använt Den stora svenska ordlistan. Denna fria svenska ordlista fanns under flera år inte tillgänglig i sin källform på nätet. Förra året dök den upp igen på i ett nytt format, men uppgifterna nedan bygger på hur den såg ut tidigare, så istället för att hämta den på nätet själva får ni använda den senaste versionen jag hämtade där för ett par år sen, /local/kurs/ids/dsso-1.52.txt. Den filen innehåller ordlistans information på ett särskilt textformat. Du får se efter själva hur innehållet i filen är upplagt. Från detta format skapades flera filer i andra format, till exempel rättstavningsfiler till ordbehandlare. I figur 12.1 finns ett par utdrag ur filen. En sak att märka är att det bara är rader med < och > som innehåller ordformer. Lägg filen i svn-arbetskatalogen och skapa en fil dsso.sh i samma katalog. Checka in den, fast den är tom, så att jag ser att du har kommit igång med denna uppgift. Här ska du skriva ett skalskript så att om du ger kommandot bash dsso.sh skapas en fil ordformer.txt som innehåller en UTF8-fil med en ordform per rad. Hoppa över flerordsuttryck från filen som»au pair«och»science fiction«. Resultatet ska vara sorterat (på svenska) och utan dubbletter. Det är alltså i stil med den dsso-list.txt som ni har använt förut, förutom att den är gjord från en ännu tidigare version av DSSO. Använd flera skalkommandon i rad och lagra mellanresultat i filer som du tar bort i slutet av skalskriptet. Det första skulle t. ex. kunna vara ett kommando som skapar en fil dsso-u8.txt som är likadan som originalet, men omvandlad till UTF8. Senare i skalskriptet skulle du i så fall göra rm dsso-u8.txt för att rensa upp efter dig. * * * Tips: Fokusera inte på att det ska bli ett skalskript till att börja med, utan försök bara hitta kommandon för att lösa uppgiften. Sen kan du stoppa in dina kommandon i skriptet och köra alltihop samlat. I skalskript kan man skriva kommentarrader som börjar med»#«. Använd det för att förklara vad som händer, t. ex. med en kommentarsrad # Omvandla till UTF8 före första kommandot Rapport Efter att du är klar med detta så använd kommandot diff -u /local/dict/dsso-list.txt ordformer.txt för att se vilka skillnader det har blivit jämfört med den gamla listan. Skriv en kort rapport dsso.tex i LaTeX om din lösning av DSSO-uppgiften. Checka in den filen på samma ställe som det övriga. (Du ska inte lämna in den PDF du gör särskilt, utan den genererar jag själv när jag ska titta på den.) Använd dokumentklassen stupp, och \course för att ange kursnamn. Sätt lämplig titel. (Du kan ha en undertitel med \subtitle också.) Beskriv i några avsnitt uppgiften, din lösning och hur resultatet blev. Lista även hela skalskriptet i rapporten. Använd det sätt som nämns på Lila sidorna under TEX, Kodlistingar. Ändra gärna stilen för hur kodlistningar visas. Avsluta med ett avsnitt där du berättar något om det resultat du fick. Berätta hur många ordformer du hittade, och tala om några tillägg och borttagningar jämfört med dsso-list.txt Skaluppgifter Dessa uppgifter ska lösas med ett eller flera kommandon i skalet. Ange både vilket eller vilka kommandon du gav, samt vad resultatet blev. 111

112 12. AVSLUT # Copyright (c) 2011 Göran Andersson # This work is licensed under the Creative Commons Attribution-Share Alike License r5<verb>näta:näta:nätade:nätat:nätar:näta:nätas:nätades:nätats:nätas:nätad:nätat:nätats:nätande: DEFINITION 1: Göra mål, dvs bollen hamnar i målets nät r5<adjektiv>rätt:rätt:rätt:rätta, rättan:rätta:rättare:::rätte:::::::: Figur 12.1: Utdrag ur dsso-1.52.txt. Uppgift 12.1 Hur många olika ordklasser finns det i texten rummet.word? Uppgift 12.2 Det är 34 rader i /local/texts/ jabberwocky. En del rader upprepar andra rader. Hur många olika rader finns det? Uppgift 12.3 Vilka verb med minst sju bokstäver finns i verb.txt som svensk avstavning med avstava inte hittar någon avstavning för? Uppgift 12.4 Hur långt är det längsta svenska språknamnet i /local/kurs/ids/eulang.tsv? Uppgift 12.5 Vad finns det för ord som börjar på stor bokstav i den ryskspråkiga textfilen /local/kurs/ids/rysk.txt. Glöm inte att den filen är kodad med ISO ! Svaret ska vara i vårt vanliga UTF-8 och innehålla en lista över bara de orden, ett per rad, utan dubbletter Att rensa upp efter sig Snart har du förhoppningsvis blivit godkänd på denna kurs, och då kan det vara läge att rensa upp i din kurskatalog. Du borde inte ha skapat så mycket stora filer i denna kurs, men i en annan kurs kan det bli rejält med data som du antagligen inte behöver ha kvar efteråt, så det är en bra vana att efteråt se över vad som kan komprimeras eller kanske till och med tas bort. Se för en del tips som har med diskanvändning att göra. Uppgift 12.6 Vad kan du enligt detta ge för skalkommando för att se hur mycket plats din hemkatalog tar upp? Hur mycket var det? Ett par väljare används till kommandot. Vad betyder de? Uppgift 12.7 Använd samma skalkommando (med andra väljare/argument) för att lista storleken på alla filer och kataloger i din hemkatalog och sortera dessa rader i storleksordning. Med ls -l eller wc -c får man filers storlek, men det duger inte till denna uppgift eftersom det inte säger nåt om katalogers storlek. Uppgift 12.8 Se även vad det står på de lila sidorna om att man kan lagra filer på andra ställen. Du kanske har noterat att det finns ett nobackup i din hemkatalog. Vad sägs om detta nobackup här? Uppgift 12.9 Se även tipsen där om hur man hittar stora filer som man inte använt på länge. Använd kommandot som nämns där för att lista vilka filer under din kurskatalog som är minst någon viss storlek. Välj en gräns så att det blir flera men inte jättemånga filer som nämns. (Visa som vanligt kommando och resultat.) I exemplet på sidan används»m«för Megabyte. Se dokumentationen för det kommandot om du vill använda något mindre eller större prefix Leta filer Läs i dokumentationen om kommandot find för att ta reda på hur man kan sätta krav på filnamnet för de filer som den ska hitta. Uppgift Lista filer hos användaren ellen som har namn som slutar på.jpg. Ellen har flera kataloger som du inte får leta i, så därför får du en mängd varningar. Häng på 2>/dev/null på slutet för att slippa se varningarna. Varningar och felmeddelanden skrivs ut»för sig«och kan omdirigeras med 2> istället för >. Allt som skrivs till den speciella»filen«/dev/null i Unix försvinner i ett svart hål och kommer aldrig tillbaks. Uppgift Det finns en särskild sökmöjlighet i find för sånt som är tomt också. Vad finns det för tomma filer som heter README under /usr/share? 112

113 underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller... (fnord) Leta filer Med»under«menar jag i den katalogen, eller i en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till den katalogen, eller i en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en underkatalog till en 113

Introduktion till datateknik för språkvetare

Introduktion till datateknik för språkvetare Introduktion till datateknik för språkvetare ht 2015 Per Starbäck Kapitel 1 Inledning 1.1 Om kursen Schema och annat finns på http://stp. lingfil.uu.se/kurs/ids/. Där kommer det även finnas länkar till

Läs mer

Introduktion till datateknik för språkvetare

Introduktion till datateknik för språkvetare Introduktion till datateknik för språkvetare ht 2009 Per Starbäck Kapitel 1 Inledning 1.1 Om kursen Schema och annat finns på http://stp.lingfil. uu.se/kurs/ids/. Där kommer det även finnas länkar till

Läs mer

Introduktion till datateknik för språkvetare

Introduktion till datateknik för språkvetare Introduktion till datateknik för språkvetare ht 2013 Per Starbäck Kapitel 1 Inledning 1.1 Om kursen Schema och annat finns på http://stp. lingfil.uu.se/kurs/ids/. Där kommer det även finnas länkar till

Läs mer

Introduktion till datateknik för språkvetare

Introduktion till datateknik för språkvetare Introduktion till datateknik för språkvetare ht 2010 Per Starbäck Kapitel 1 Inledning 1.1 Om kursen Schema och annat finns på http://stp.lingfil. uu.se/kurs/ids/. Där kommer det även finnas länkar till

Läs mer

Introduktion till datateknik för språkvetare

Introduktion till datateknik för språkvetare Introduktion till datateknik för språkvetare ht 2013 Per Starbäck Kapitel 1 Inledning 1.1 Om kursen Schema och annat finns på http://stp. lingfil.uu.se/kurs/ids/. Där kommer det även finnas länkar till

Läs mer

Introduktion till datateknik för språkvetare

Introduktion till datateknik för språkvetare Introduktion till datateknik för språkvetare ht 2009 Per Starbäck Kapitel 1 Inledning 1.1 Om kursen Schema och annat finns på http://stp.lingfil. uu.se/kurs/ids/. Där kommer det även finnas länkar till

Läs mer

Introduktion till datateknik för språkvetare

Introduktion till datateknik för språkvetare Introduktion till datateknik för språkvetare ht 2011 Per Starbäck Kapitel 1 Inledning 1.1 Om kursen Schema och annat finns på http://stp.lingfil. uu.se/kurs/ids/. Där kommer det även finnas länkar till

Läs mer

Introduktion till datateknik för språkvetare

Introduktion till datateknik för språkvetare Introduktion till datateknik för språkvetare ht 2008 Per Starbäck Kapitel 1 Inledning En dator är, enligt Nationalencyklopedin, en automatisk maskin för beräkning och symbolbehandling. Benämningen avser

Läs mer

Filers innehåll. Grundläggande databehandling. Representation av text. pffb = påhittat filformat för bilder

Filers innehåll. Grundläggande databehandling. Representation av text. pffb = påhittat filformat för bilder Filers innehåll Data av olika slag lagras i filer. file = pärm, mapp, arkiv, akt,... Grundläggande databehandling Filer och skal Per Starbäck 2005-09-12 / Föreläsning 2 texter ljud bilder databaser program...

Läs mer

Lab 7, 48 steg till ett bättre liv i Unix-labbet

Lab 7, 48 steg till ett bättre liv i Unix-labbet Lab 7, 48 steg till ett bättre liv i Unix-labbet Urban Liljedahl 13 december 2002 Instruktioner Mål Krav Utveckla förmågan att söka kunskap med hjälp litteratur och andra källor. Utveckla förmågan att

Läs mer

Föreläsning 1 Unix. Datorer och datoranvändning Föreläsningar 2018/19. Operativsystem. Unix

Föreläsning 1 Unix. Datorer och datoranvändning Föreläsningar 2018/19. Operativsystem. Unix Datorer och datoranvändning Föreläsningar 2018/19 Per Holm Roger Henriksson roger.henriksson@cs.lth.se Förberedelse inför laboration 1. Operativsystem, Unix historik Filer och kataloger Kommandon Filskydd

Läs mer

Omkoppling av in- och utmatning. In- och utmatning i Unix. Kommando exempel, ls, pipe forts. Kommando exempel, ls, pipe

Omkoppling av in- och utmatning. In- och utmatning i Unix. Kommando exempel, ls, pipe forts. Kommando exempel, ls, pipe In- och utmatning i Unix Program i Unix skriver och läser till och från filer. En fil betyder här en vanlig fil med text eller binära data, ett tangentbord, en skärm, ett annat program etc. Innan ett program

Läs mer

Kort-kort om utdelade användarkonton och datormiljön på NADA

Kort-kort om utdelade användarkonton och datormiljön på NADA Kort-kort om utdelade användarkonton och datormiljön på NADA UNIX-konto, användaridentitet Namn Du har fått ett konto med ett användarnamn bestående av prefixet ip99_ och ytterligare tre bokstäver. Dessa

Läs mer

Program. Kapitel make Program Interpreterande och kompilerande program

Program. Kapitel make Program Interpreterande och kompilerande program Kapitel 11 Program Detta kapitel är som synes mycket kort och nämner inte allt från föreläsningen. 11.1 Program Ett datorprogram är en samling instruktioner som beskriver något som en dator ska utföra.

Läs mer

Introduktion till datormiljön och Python

Introduktion till datormiljön och Python Introduktion till datormiljön och Python Nyckelord: katalog, katalogträd, rot, fil, källkod, program, exekvering, tilldelning, inmatning, utmatning. Mål: Att du efter laborationen ska klara dig på egen

Läs mer

Datorer och datoranvändning Föreläsningar 2014/15. Föreläsning 1 Unix. Operativsystem. Unix

Datorer och datoranvändning Föreläsningar 2014/15. Föreläsning 1 Unix. Operativsystem. Unix Datorer och datoranvändning Föreläsningar 2014/15 Per Holm Per.Holm@cs.lth.se Unix 2 (lab 1) Lågnivåprogrammering 23 (lab 2) Datorns hårdvara 45 L A TEX 69 (lab 3) Internet 98 (lab 4) Operativsystem 117

Läs mer

Lab1 inginfo07. Detta dokument innehåller övningar för introduktion till Media-programmets datorsystem (Mac OS X).

Lab1 inginfo07. Detta dokument innehåller övningar för introduktion till Media-programmets datorsystem (Mac OS X). Lab1 inginfo07 Detta dokument innehåller övningar för introduktion till Media-programmets datorsystem (Mac OS X). Inloggning Du borde ha fått ett personligt användarnamn och ett lösenord från Delfi, om

Läs mer

Introduktion till datorer och nätverk vid institutionen för naturgeografi och ekosystemvetenskap

Introduktion till datorer och nätverk vid institutionen för naturgeografi och ekosystemvetenskap Introduktion till datorer och nätverk vid institutionen för naturgeografi och ekosystemvetenskap Syfte Syftet med detta dokument är att ge en introduktion till användning av datorerna i datorsalarna med

Läs mer

kommando -fl argument

kommando -fl argument Grundläggande kommandostruktur kommando -fl argument Kommandot kommando är ett litet linuxprogram som gör något. Flaggorna fl modifierar kommandot Argumentet argument kan vara inget, ett eller flera (beroende

Läs mer

DD1310 Programmering för OPEN1 LAB1: Laborationer i Python läsåret 2011/2012

DD1310 Programmering för OPEN1 LAB1: Laborationer i Python läsåret 2011/2012 DD1310 Programmering för OPEN1 LAB1: Laborationer i Python läsåret 2011/2012 Räkna med att varje laboration kan ta upp till 10 timmar att göra. Du behöver alltså tillbringa en hel del tid i datorsalarna.

Läs mer

SF1672, Linjär Algebra med Matlab för F1 Lab0

SF1672, Linjär Algebra med Matlab för F1 Lab0 SF1672, Linjär Algebra med Matlab för F1 Lab0 Denna labb är tänkt att öva datorhantering och öva inledande Matlab. Eftersom förkunskaperna varierar finns en hel del uppgifter så att alla kan få något att

Läs mer

UNIX. 2D1339 Programkonstruktion Hösten 2001 Datorintroduktion Laboration 1. Mål. Vad laborationen går ut på. Redovisning

UNIX. 2D1339 Programkonstruktion Hösten 2001 Datorintroduktion Laboration 1. Mål. Vad laborationen går ut på. Redovisning Numerisk analys och datalogi KTH 100 44 Stockholm Ann Bengtsson, Kerstin Frenckner 2D1339 Programkonstruktion Hösten 2001 Datorintroduktion Laboration 1 UNIX Mål Syftet med denna laboration är att ni ska

Läs mer

Laboration 0. Enhetsbokstaven anges med ett kolon efter och man läser ofta ut detta, exempelvis C:(sekolon).

Laboration 0. Enhetsbokstaven anges med ett kolon efter och man läser ofta ut detta, exempelvis C:(sekolon). Laboration 0 Laborationen är till för dig som inte är familjär med att navigera i filträd på en dator. Om du är van vid detta (vilket är det vanliga nu för tiden) så kan du bara snabbt titta igenom laborationen.

Läs mer

DD1310 Programmeringsteknik för Open1 och Med2 Laborationer läsåret 2014/2015

DD1310 Programmeringsteknik för Open1 och Med2 Laborationer läsåret 2014/2015 DD1310 Programmeringsteknik för Open1 och Med2 Laborationer läsåret 2014/2015 Fyll i ditt namn och personnummer med bläck eller motsvarande. OBS: Om inte denna kvittenssida tas med vid redovisningen får

Läs mer

Konsolfönster i Windows Momentet ingår i kursen PDA DTR1206 Lab 1 DOS http://www.cwdata.se Konsolfönstret

Konsolfönster i Windows Momentet ingår i kursen PDA DTR1206 Lab 1 DOS http://www.cwdata.se Konsolfönstret Konsolfönster i Windows Momentet ingår i kursen PDA DTR1206 Lab 1 DOS http://www.cwdata.se Konsolfönstret Med ett kommandobaserat gränssnitt menas ett helt textbaserat gränssnitt. Istället för att klicka

Läs mer

UNIX. Laborations-PM Anders Egneus, Henrik Lindgren, 2004, 2006. Raphael Corsoski, 2005. Erik Eliasson, 2007. Christian von Schultz, 2008.

UNIX. Laborations-PM Anders Egneus, Henrik Lindgren, 2004, 2006. Raphael Corsoski, 2005. Erik Eliasson, 2007. Christian von Schultz, 2008. 1 Introduktion UNIX Laborations-PM Anders Egneus, Henrik Lindgren, 2004, 2006. Raphael Corsoski, 2005. Erik Eliasson, 2007. Christian von Schultz, 2008. Det övergripande syftet med dessa laborationer är

Läs mer

SF1546, Numeriska Metoder för O1 Lab0 - frivillig. (dvs uppgifterna behöver inte redovisas!)

SF1546, Numeriska Metoder för O1 Lab0 - frivillig. (dvs uppgifterna behöver inte redovisas!) SF1546, Numeriska Metoder för O1 Lab0 - frivillig. (dvs uppgifterna behöver inte redovisas!) Denna labb är tänkt att öva datorhantering och öva inledande Matlab. Eftersom förkunskaperna varierar finns

Läs mer

Datorsystem och programmering

Datorsystem och programmering Datorsystem och programmering Peter Dalenius petda@ida.liu.se Institutionen för datavetenskap Linköpings universitet 2010-08-23 Målsättning Kursens syfte är dels att studenterna ska skaffa sig erfarenheter

Läs mer

Kom igång med. Windows 8. www.datautb.se DATAUTB MORIN AB

Kom igång med. Windows 8. www.datautb.se DATAUTB MORIN AB Kom igång med Windows 8 www.datautb.se DATAUTB MORIN AB Innehållsförteckning Grunderna i Windows.... 1 Miljön i Windows 8... 2 Startskärmen... 2 Zooma... 2 Snabbknappar... 3 Sök... 4 Dela... 4 Start...

Läs mer

Kort-kort om utdelade användarkonton och datormiljön på NADA

Kort-kort om utdelade användarkonton och datormiljön på NADA Kort-kort om utdelade användarkonton och datormiljön på NADA UNIX-konto, användaridentitet Namn Du har fått ett konto med ett användarnamn bestående av prefixet ip98- och ytterligare tre bokstäver. Dessa

Läs mer

Allmänt om programvaror och filer i Windows.

Allmänt om programvaror och filer i Windows. Allmänt om programvaror och filer i Windows. Vart sparade du dokumentet? I Word. Jag har fått detta svar mer än en gång när jag försökt hjälpa någon att hitta ett dokument som de tappat bort i sin dator.

Läs mer

Programutveckling med Java Development Kit. (JDK 1.1.x) och Programmers File Editor (PFE 7.02)

Programutveckling med Java Development Kit. (JDK 1.1.x) och Programmers File Editor (PFE 7.02) UMEÅ UNIVERSITET Institutionen för datavetenskap Thomas Johansson Oktober 1998 Programutveckling med Java Development Kit (JDK 1.1.x) och Programmers File Editor (PFE 7.02) Umeå universitet 901 87 Umeå.

Läs mer

A. Datorn från grunden

A. Datorn från grunden A-1 A. Vad är en dator? En dator är en apparat som du kan utföra en mängd olika uppgifter med t.ex: Skriva och läsa e-post, lyssna på musik, titta på film, spela spel. De olika uppgifterna utförs av program

Läs mer

Användarhantering Windows 7 I denna laboration kommer vi att skapa nya användare och grupper och titta på hur man hantera dessa.

Användarhantering Windows 7 I denna laboration kommer vi att skapa nya användare och grupper och titta på hur man hantera dessa. Användarhantering Windows 7 I denna laboration kommer vi att skapa nya användare och grupper och titta på hur man hantera dessa. Antal: Enskilt Material: En dator med Windows 7 (Vista, Windows 8 eller

Läs mer

FrontPage Express. Ämne: Datorkunskap (Internet) Handledare: Thomas Granhäll

FrontPage Express. Ämne: Datorkunskap (Internet) Handledare: Thomas Granhäll FrontPage Express I programpaketet Internet Explorer 4.0 och 5.0 ingår också FrontPage Express som installeras vid en fullständig installation. Det är ett program som man kan använda för att skapa egna

Läs mer

Windows 10 Utforskaren

Windows 10 Utforskaren Windows 10 Svenskspråkigt material, svenskspråkiga dialogrutor Windows 10 2 Innehållsförteckning Filnamn... 3 Filnamnstillägget... 4... 5 Sortera filer i förteckningen... 5 Val av visningssätt... 5 Sökväg...

Läs mer

Komma igång med 3L Pro 2014. Komma igång med 3L. Copyright VITEC FASTIGHETSSYSTEM AB

Komma igång med 3L Pro 2014. Komma igång med 3L. Copyright VITEC FASTIGHETSSYSTEM AB Komma igång med 3L Innehåll LOGGA IN I 3L... 3 Verktyg och kortkommandon... 6 Övriga tangenter... 9 RAPPORTUTSKRIFT I 3L... 10 Instruktioner för att skriva till fil:... 11 Logga in i 3L Ikonen för 3L Pro

Läs mer

1284_omslag.qxd 2005-10-11 11:13 Sida 1 ECDL START OFFICE 2003 Allmän IT Windows XP Word 2003 Outlook 2003

1284_omslag.qxd 2005-10-11 11:13 Sida 1 ECDL START OFFICE 2003 Allmän IT Windows XP Word 2003 Outlook 2003 ECDL START OFFICE 2003 Allmän IT Windows XP Word 2003 Outlook 2003 5 Arbeta med mappar och filer I Windows finns det två sätt att arbeta med de olika enheterna i systemet. Vilket du väljer beror på personligt

Läs mer

Kapitel 12. Mer om program. 12.1 Att rapportera buggar och problem. 12.2 make

Kapitel 12. Mer om program. 12.1 Att rapportera buggar och problem. 12.2 make Kapitel 12 Mer om program 12.1 Att rapportera buggar och problem När man rapporterar buggar eller andra problem i program så är det några saker att tänka på för att ens rapport ska vara användbar för den

Läs mer

Laboration 2 i datorintro för E1 Detta dokument innehåller instruktioner och övningar för introduktion till E-programmets datorsystem och web-mail.

Laboration 2 i datorintro för E1 Detta dokument innehåller instruktioner och övningar för introduktion till E-programmets datorsystem och web-mail. Laboration 2 i datorintro för E1 Detta dokument innehåller instruktioner och övningar för introduktion till E-programmets datorsystem och web-mail. E-programmets datorsalar är utrustade med datorer som

Läs mer

Textbearbetning i skalet och man-sidor

Textbearbetning i skalet och man-sidor Kapitel 5 Textbearbetning i skalet och man-sidor Vi har redan använt skalkommandon för att göra saker textfiler. Här kommer gomgång av sådana kommandon som vi redan använt, några nya varianter, samt ett

Läs mer

DN1240, Numeriska metoder. Laboration 0 (frivilliga delar) (dvs uppgifterna behöver inte redovisas) Introduktion till UNIX och MATLAB

DN1240, Numeriska metoder. Laboration 0 (frivilliga delar) (dvs uppgifterna behöver inte redovisas) Introduktion till UNIX och MATLAB DN1240, Numeriska metoder för O1. Laboration 0 (frivilliga delar) (dvs uppgifterna behöver inte redovisas) Introduktion till UNIX och MATLAB Del 1: UNIX och kontoadministration Uppgift 1.1 Ni bör jobba

Läs mer

Att skriva på datorn

Att skriva på datorn Att skriva på datorn Innehåll: Inledning 1 Tangentbordet 2 Att skriva i Word 4 Att skriva på Internet 7 Övningar 8 2 Inledning Välkommen till steg 2 av Internetkursen för nybörjare! Vid detta kurstillfälle

Läs mer

UNIX Introduktion UNIX. Datorerfarenhet. Vad menar man med operativsystem

UNIX Introduktion UNIX. Datorerfarenhet. Vad menar man med operativsystem UNIX Introduktion UNIX Inge Frick inge@nada.kth.se De datorer ni kommer att använda här är huvudsakligen SUN-maskiner som kör Solaris. Solaris är ett Unix operativsystem. Unix intro 2005 / Copyright Inge

Läs mer

KURSMÅL WINDOWS STARTA KURSEN

KURSMÅL WINDOWS STARTA KURSEN KURSMÅL WINDOWS Detta är en introduktionskurs för dig som är nybörjare. Du kommer att få bekanta dig med datorns viktigaste delar och lära dig grunderna i operativsystemet Windows, vilket är en förutsättning

Läs mer

Windows 8.1, hur gör jag?

Windows 8.1, hur gör jag? 2014 Windows 8.1, hur gör jag? Tor Stenberg Piteå Kommun 2014-03-28 1 av 13 Innehåll Hur jobbar jag med Windows 8.1... 2 Logga in... 2 Skrivbordet och programportal... 2 Logga ut och stänga datorn... 3

Läs mer

Introduktion till datateknik för språkvetare ht 2007

Introduktion till datateknik för språkvetare ht 2007 Introduktion till datateknik för språkvetare ht 2007 Per Starbäck 9 oktober 2007 Kapitel 1 Datorer, operativsystem och filer En dator är, enligt Nationalencyklopedin, en automatisk maskin för beräkning

Läs mer

DN1212, Numeriska metoder & grundläggande programmering. Laboration 1 del 1-3 (frivilliga delar) Del 1-3 (dvs upg 1.1-1.17) behöver inte redovisas

DN1212, Numeriska metoder & grundläggande programmering. Laboration 1 del 1-3 (frivilliga delar) Del 1-3 (dvs upg 1.1-1.17) behöver inte redovisas DN1212, Numeriska metoder & grundläggande programmering för P1. Laboration 1 del 1-3 (frivilliga delar) Del 1-3 (dvs upg 1.1-1.17) behöver inte redovisas Introduktion till UNIX och MATLAB Del 1: UNIX och

Läs mer

Om e-post. Introduktion till Emacs. Att skicka e-post. ÅÄÖåäö i pine. Varför Emacs? Vad är Emacs? Emacs en editor/textbehandlare

Om e-post. Introduktion till Emacs. Att skicka e-post. ÅÄÖåäö i pine. Varför Emacs? Vad är Emacs? Emacs en editor/textbehandlare Att skicka e-post Om e-post To, CC, BCC, FCC (File Carbon Copy, eller markera på annat sätt att skickade brev ska sparas) Subject: Ska tala om innehållet, problem med åäö, Skicka inte epost med HTML kod

Läs mer

För att använda Windows på enklaste sätt använder du musen. Musen syns Som en pil på skärmen.

För att använda Windows på enklaste sätt använder du musen. Musen syns Som en pil på skärmen. Från Datakörkortet Light Innehåll Mjukvara De delar som går att ta på kallas för hårdvara, men den information som finns inne i datorn kallas för mjukvara. Denna mjukvara kan vi dela upp i tre kategorier;

Läs mer

Introduktion till programmering, hösten 2011

Introduktion till programmering, hösten 2011 Föreläsning 1 Programmering är ett hantverk. Det betyder att man inte kan läsa sig till den förmågan, man måste träna och man tränar genom att skriva mer och mer avancerade program. Programmering förutsätter

Läs mer

OBS! Snabbinsatt Matlab-intro vissa fönsterhanteringsdetaljer kan vara fel men gör gärna Matlab-uppgifterna. DN1240, Numeriska metoder för OPEN1.

OBS! Snabbinsatt Matlab-intro vissa fönsterhanteringsdetaljer kan vara fel men gör gärna Matlab-uppgifterna. DN1240, Numeriska metoder för OPEN1. OBS! Snabbinsatt Matlab-intro vissa fönsterhanteringsdetaljer kan vara fel men gör gärna Matlab-uppgifterna. DN1240, Numeriska metoder för OPEN1. Laboration 0 del 1-3 (frivilliga delar) Del 1-3 (dvs upg

Läs mer

FIRSTCLASS. Innehåll:

FIRSTCLASS. Innehåll: FIRSTCLASS Innehåll: Hämta klient...2 Installera klient...2 Konfigurera klient...2 Koppla upp...3 Skrivbordet...3 Mailbox...3 Presentation...3 Skapa ett nytt meddelande...4 Söka mottagare för nytt meddelande...4

Läs mer

Välkommen som användare av medietekniks och informatiks publika studentserver

Välkommen som användare av medietekniks och informatiks publika studentserver Välkommen som användare av medietekniks och informatiks publika studentserver student.ktd.sh.se Syfte Vår server är en kombinerad ftp- och webbserver med två grundläggande syften: 1) Spara dokument som

Läs mer

Xemacs, första hjälpen!

Xemacs, första hjälpen! Högskolan Dalarna Objektorienterad programmering, 5p 1 (5) Datateknik 19981018 HansEdy Mårtensson Xemacs, första hjälpen! Xemacs startas enklast på följande sätt: xemacs filnamn filnamn är benämningen

Läs mer

Programkonstruktion med datorintroduktion, 2D1339

Programkonstruktion med datorintroduktion, 2D1339 Programkonstruktion med datorintroduktion, 2D1339 Välkomna Kursen Datorintroduktionsdelen Unix Historik och bakgrund Logga in och ut Regler för datoranvändning Lösenord, byte Filer och kataloger Emacs

Läs mer

Labora&on 1 Introduk&on &ll utvecklingsmiljön övningar/uppgi<er

Labora&on 1 Introduk&on &ll utvecklingsmiljön övningar/uppgi<er Labora&on 1 Introduk&on &ll utvecklingsmiljön övningar/uppgi

Läs mer

DATORINTRODUKTION 2010 LABORATION 1

DATORINTRODUKTION 2010 LABORATION 1 DATORINTRODUKTION 2010 LABORATION 1 Instruktioner Genomför uppgifterna i tur och ordning. Text i typsnittet Courier indikerar något som skall utföras på datorn, t.ex. ett kommando i kommandotolken eller

Läs mer

Grundkurs 1 IKT Filhantering

Grundkurs 1 IKT Filhantering Filhantering Dan Haldin Ålands lyceum I N N E H Å L L S F Ö R T E C K N I N G Innehållsförteckning... 2 Filhantering med Windows... 3 Skapa Mappar... 4 Spara rätt... 5 Öppna sparade filer... 7 Flytta och

Läs mer

Inloggning till Treserva via extern dator

Inloggning till Treserva via extern dator Inloggning till Treserva via extern dator Innehåll 1 Inloggningsalternativ... 2 1.1 Inloggning via SMS... 2 1.2 Inloggning via E-legitimation... 4 2 Utloggning... 5 3 Helskärmsläge... 6 4 Bläddra mellan

Läs mer

Övningar till UNIX/Linux Grundkurs och förslag till LÖSNING

Övningar till UNIX/Linux Grundkurs och förslag till LÖSNING Övningar till UNIX/Linux Grundkurs och förslag till LÖSNING 1. Träna på att logga in och ut. 2. Mata in sleep 60. Mata in kommandot date direkt. Tryck på avbrottstangenten, (CTRL-C). Prova kommandot date

Läs mer

komplex av nödvändiga, understödjande program som kallas Utanpå OS existerar ett - eller flera olika - slags skal som

komplex av nödvändiga, understödjande program som kallas Utanpå OS existerar ett - eller flera olika - slags skal som - 1 - - 2 - Datorkörning/datoranvändning handlar i princip bara om att exekvera program för olika ändamål, explicit eller implicit - explicit: starta uttryckligen ett program med ett visst namn si eller

Läs mer

Dok nr OSF/AV-15:003, ver E Inloggning till Treserva via extern dator

Dok nr OSF/AV-15:003, ver E Inloggning till Treserva via extern dator Inloggning till Treserva via extern dator Innehåll 1 Inloggningsalternativ... 2 1.1 Inloggning via SMS... 2 1.2 Inloggning via E-legitimation... 4 2 Utloggning... 5 3 Helskärmsläge... 6 4 Bläddra mellan

Läs mer

Emacs. Eric Elfving Institutionen för datavetenskap (IDA) 22 augusti 2016

Emacs. Eric Elfving Institutionen för datavetenskap (IDA) 22 augusti 2016 Emacs Eric Elfving Institutionen för datavetenskap (IDA) 22 augusti 2016 Historia 2/21 Utvecklas konstant, från 70-talet Är en generellt texteditor (INTE ordbehandlare) som fokuserar på texten, inte utseendet

Läs mer

Datorintroduktion 2010 Föreläsning 1. Dieter Modig

Datorintroduktion 2010 Föreläsning 1. Dieter Modig Datorintroduktion 2010 Föreläsning 1 Inloggning - Linux - CID -> Enter -> Lösenord (skrapkort, rad #1) -> Enter Detta är obekant? - Windows - Logga in med CID+lösenord (skrapkort, rad #1) Detta kan ni?

Läs mer

Elias Castegren. (Version 1, 2012)

Elias Castegren. (Version 1, 2012) Liten Emacs-referens Elias Castegren (Version 1, 2012) Det här är en kort genomgång av några väldigt grundläggande kommandon i Emacs. Dokumentet är inte utförligt eller ens särskilt pedagogiskt, utan jag

Läs mer

Internet. En enkel introduktion. Innehåll:

Internet. En enkel introduktion. Innehåll: Internet En enkel introduktion Innehåll: Datorns olika delar Starta datorn Så gör du om du kan webbadressen Så gör du om du inte kan webbadressen Kortfattad repetition Alingsås bibliotek, 2012 2 3 4 6

Läs mer

Praktiska saker... Om Laboration 1. Studietips. Praktiska saker. Att studera hemifrån på PC. Seminarier & Lektioner & Handledning & Hemsida

Praktiska saker... Om Laboration 1. Studietips. Praktiska saker. Att studera hemifrån på PC. Seminarier & Lektioner & Handledning & Hemsida Seminarier & Lektioner & Handledning & Hemsida Praktiska saker... 4 obligatoriska seminarier (se hemsidan) Lektioner Emacs Operativsystem Handledning Rum 1219 E-post Kolla in kurshemsidan ofta Labbresultat,

Läs mer

Övningar till UNIX/Linux Grundkurs och förslag till LÖSNING

Övningar till UNIX/Linux Grundkurs och förslag till LÖSNING Övningar till UNIX/Linux Grundkurs och förslag till LÖSNING 1. Träna på att logga in och ut. 2. Mata ln sleep 60. Mata in kommandot date direkt. Tryck på avbrottstangenten, (CTRL-C). Prova kommandot date

Läs mer

Guide till att använda Audacity för uttalsövningar

Guide till att använda Audacity för uttalsövningar Guide till att använda Audacity för uttalsövningar Victoria Johansson Humlabbet, SOL-center, Lund IT-pedagog@sol.lu.se 28 mars 2006 1 Inledning Audacity är ett program som kan användas för att spela in

Läs mer

SF1520, Numeriska Metoder och Grundläggande Programmering för K2 Lab1.

SF1520, Numeriska Metoder och Grundläggande Programmering för K2 Lab1. SF1520, Numeriska Metoder och Grundläggande Programmering för K2 Lab1. Denna labb är tänkt att öva datorhantering och öva inledande Matlab. Eftersom förkunskaperna varierar finns en del frivilliga uppgifter

Läs mer

Operativsystem - Windows 7

Operativsystem - Windows 7 Uppgift 5 B Operativsystem - Windows 7 Skapa mappar och undermappar Det finns olika sätt att skapa nya mappar på. Alternativ. Högerklicka på en tom yta. Håll muspekaren över Nytt. Klicka på Mapp Alternativ.

Läs mer

Lathund Claro Read Plus

Lathund Claro Read Plus Lathund Claro Read Plus Innehållsförteckning LathundWord Read Plus V 5...1 Innehållsförteckning...1 Starta... 2 Knappbeskrivning... 2 Börja läsa... 2 Börja skriva... 2 Knapp 8 Inställningar... 3 Knapp

Läs mer

Gran Canaria - Arbetsbeskrivning knapplänkar (Mediator 8)

Gran Canaria - Arbetsbeskrivning knapplänkar (Mediator 8) Gran Canaria - Arbetsbeskrivning knapplänkar (Mediator 8) I detta exempel kommer du att lära dig Att skapa en ny presentation från början Att skapa en enkel knapp Att använda händelseinställningar, events

Läs mer

Datorintroduktion 2009 Föreläsning 1. Dieter Larsen (IT-chef Matematiska vetenskaper)

Datorintroduktion 2009 Föreläsning 1. Dieter Larsen (IT-chef Matematiska vetenskaper) Datorintroduktion 2009 Föreläsning 1 (IT-chef Matematiska vetenskaper) Inloggning - Linux - CID -> Enter -> Lösenord (skrapkort, rad #1) -> Enter Detta är obekant? - Windows - Logga in med CID+lösenord

Läs mer

DD1315 Programmeringsteknik och Matlab för I1 Laborationer läsåret 2013/2014

DD1315 Programmeringsteknik och Matlab för I1 Laborationer läsåret 2013/2014 DD1315 Programmeringsteknik och Matlab för I1 Laborationer läsåret 2013/2014 Fyll i ditt namn och personnummer med bläck eller motsvarande. OBS: Om inte denna kvittenssida tas med vid redovisningen får

Läs mer

Introduktion till Unix och Linux

Introduktion till Unix och Linux Introduktion till Unix och Linux TDDC66 Datorsystem och programmering Föreläsning (i) Peter Dalenius Institutionen för datavetenskap 2014-08-22 2 3 Vem riktar sig kursen till? Hjälp! Jag fattar noll! Rädda

Läs mer

Instruktion för användande av Citrix MetaFrame

Instruktion för användande av Citrix MetaFrame Instruktion för användande av Citrix MetaFrame Öppna valfri browser, helst Google Chrome eller annan modern browser. Firefox, Safari, MS Edge, IE osv fungerar också men Internet Explorer är dock inget

Läs mer

SF1520, Numeriska Metoder och Grundläggande Programmering för K2 Lab1.

SF1520, Numeriska Metoder och Grundläggande Programmering för K2 Lab1. SF1520, Numeriska Metoder och Grundläggande Programmering för K2 Lab1. Denna labb är tänkt att öva datorhantering och öva inledande Matlab. Eftersom förkunskaperna varierar finns en del frivilliga uppgifter

Läs mer

6. Nu skall vi ställa in vad som skall hända när man klickar på knappen samt att markören skall ändra sig till en hand när markören är på knappen.

6. Nu skall vi ställa in vad som skall hända när man klickar på knappen samt att markören skall ändra sig till en hand när markören är på knappen. Fiskar Arbetsbeskrivning knappmeny (Mediator 8) I detta exempel kommer du att lära dig Att göra en mastersida med knappar Att använda en mastersida på andra sidor Att använd funktionen Alignment Arbetsgång

Läs mer

DD1316 Programmeringsteknik och C för E1 Laborationer läsåret 2015/2016

DD1316 Programmeringsteknik och C för E1 Laborationer läsåret 2015/2016 DD1316 Programmeringsteknik och C för E1 Laborationer läsåret 2015/2016 Fyll i ditt namn och personnummer med bläck eller motsvarande. OBS: Om inte denna kvittenssida tas med vid redovisningen får du ingen

Läs mer

Datorn från grunden. En enkel introduktion. Innehåll: Inledning 1 Vad är en dator? 2 Datorns olika delar 3 Starta datorn 5 Stänga av datorn 7

Datorn från grunden. En enkel introduktion. Innehåll: Inledning 1 Vad är en dator? 2 Datorns olika delar 3 Starta datorn 5 Stänga av datorn 7 Datorn från grunden En enkel introduktion Innehåll: Inledning 1 Vad är en dator? 2 Datorns olika delar 3 Starta datorn 5 Stänga av datorn 7 2 Inledning Välkommen till Söderköpings bibliotek! Vid detta

Läs mer

Flytt av. Vitec Mäklarsystem

Flytt av. Vitec Mäklarsystem Flytt av Vitec Mäklarsystem Augusti 2014 Innehållsförteckning 1. Inledning... 2 Förutsättningar... 2 Läs noga igenom manualen... 2 Systemkrav... 2 Kundservice/Teknisk support... 2 2. Skapa säkerhetskopia...

Läs mer

Introduktion till Linux. TDDC66 Datorsystem och programmering Föreläsning (i) Peter Dalenius Institutionen för datavetenskap

Introduktion till Linux. TDDC66 Datorsystem och programmering Föreläsning (i) Peter Dalenius Institutionen för datavetenskap Introduktion till Linux TDDC66 Datorsystem och programmering Föreläsning (i) Peter Dalenius Institutionen för datavetenskap 3 Vem riktar sig kursen till? Hjälp! Jag fattar noll! Rädda mig! Ska man trycka

Läs mer

Skapa mapp. * Gör så här: Det finns många sätt att skapa mappar, men det enklaste sättet brukar vara följande.

Skapa mapp. * Gör så här: Det finns många sätt att skapa mappar, men det enklaste sättet brukar vara följande. Ideell IT-förening där äldre lär äldre Skapa mapp Det finns många sätt att skapa mappar, men det enklaste sättet brukar vara följande. * Gör så här: 1. Se till att du befinner dig på den plats i datorn

Läs mer

Användarmanual WebNailer. 19 januari 2004

Användarmanual WebNailer. 19 januari 2004 Användarmanual WebNailer Tobias Holgers Mattias Castegren 19 januari 2004 1 Innehåll 1 Inledning 3 1.1 Definitionerochförkortningar... 3 2 WebNailer 4 2.1 Knapprad... 4 2.1.1 Gemensamma... 4 2.1.1.1 Webbläsare...

Läs mer

Handbok Spectacle. Boudhayan Gupta Boudhayan Gupta Översättare: Stefan Asserhäll

Handbok Spectacle. Boudhayan Gupta Boudhayan Gupta Översättare: Stefan Asserhäll Boudhayan Gupta Boudhayan Gupta Översättare: Stefan Asserhäll 2 Innehåll 1 Inledning 5 2 Starta Spectacle 6 3 Använda Spectacle 7 3.1 Ta en skärmbild....................................... 8 3.1.1 Lagringsinställning.................................

Läs mer

Snabbguide till First Class

Snabbguide till First Class Snabbguide till First Class Guide till First Class Grundläggande funktioner Logga in i First Class För att logga in i First Class dubbelklickar du på skrivbordsikonen First Class, eller väljer First Class

Läs mer

Skapa mappar, spara och hämta dokument

Skapa mappar, spara och hämta dokument Skapa mappar, spara och hämta dokument Övningen görs på hårddisken i mappen Mina dokument 1a Starta programmet utforskaren 1 b Huvudgrupper i utforskaren 1c Expandera huvudgrupper, enheter och mappar Skapa

Läs mer

Laboration 10: LaTeX. Redovisning. Omgivningen document. Början. Instruktionerna nedan. Repetitionsuppgifter

Laboration 10: LaTeX. Redovisning. Omgivningen document. Början. Instruktionerna nedan. Repetitionsuppgifter Laboration 10: LaTeX Redovisning Instruktionerna nedan Dessa labbinstruktioner är av den pratiga sorten. Du får ganska detaljerade instruktioner som du får följa steg för steg och där de fåtaliga frågorna

Läs mer

Introduktion till Linux. TDDC66 Datorsystem och programmering Föreläsning 1 Peter Dalenius Institutionen för datavetenskap

Introduktion till Linux. TDDC66 Datorsystem och programmering Föreläsning 1 Peter Dalenius Institutionen för datavetenskap Introduktion till Linux TDDC66 Datorsystem och programmering Föreläsning 1 Peter Dalenius Institutionen för datavetenskap 3 Vem riktar sig kursen till? Hjälp! Jag fattar noll! Rädda mig! Ska man trycka

Läs mer

Övning 1. Datateknik A, Java I, 5 poäng. Att ladda hem och installera Java Att skriva ditt första Javaprogram Att kompilera och exekvera ditt program

Övning 1. Datateknik A, Java I, 5 poäng. Att ladda hem och installera Java Att skriva ditt första Javaprogram Att kompilera och exekvera ditt program Datateknik A, Syfte: Att ladda hem och installera Java Att skriva ditt första Javaprogram Att kompilera och exekvera ditt program Att läsa: Lektion 1 Antal uppgifter: 3 Inlämning: Sker via inlämningsuppgifter

Läs mer

Steg 1 Minnen, mappar, filer Windows 10

Steg 1 Minnen, mappar, filer Windows 10 Steg 1 Minnen, mappar, filer Windows 10 Sep -18 Liljedalsdata.se Liljedalsdata Steg 1 Sida 1 Inledning Välkommen till denna kurs. Operativsystem, Program/Appar, webbsidor och instruktioner inom IT-branchen

Läs mer

Introduktion till datoranvändning. Välkomna till NADA. (Numerisk Analys och DAtalogi) och kursen. Datalogi, grundkurs 1, 15hp

Introduktion till datoranvändning. Välkomna till NADA. (Numerisk Analys och DAtalogi) och kursen. Datalogi, grundkurs 1, 15hp Välkomna Introduktion till datoranvändning Välkomna till NADA (Numerisk Analys och DAtalogi) och kursen Datalogi, grundkurs 1, 15hp DA2001 (Föreläsning 1) Datalogi 1 Hösten 2010 1 / 27 Kursansvarig Välkomna

Läs mer

Magnus Palm. Lättläst IT

Magnus Palm. Lättläst IT Magnus Palm Lättläst IT Del 1 LÄRA KÄNNA DIN DATOR 1. Persondatorn... 6. Bekanta dig med Windows XP... 7 3. Filer... 10. Hitta i datorn... 1 5. Gör det enkelt att hitta i datorn... 16 6. Övningsuppgifter...

Läs mer

Steg 1 Minnen, mappar, filer Windows 7

Steg 1 Minnen, mappar, filer Windows 7 Steg 1 Minnen, mappar, filer Windows 7 Maj -13 Liljedalsdata.se Liljedalsdata Steg 1 Sida 1 Inledning Välkommen till denna kurs. Att jobba med datorer är ofta som att jobba med matematik. Det nya bygger

Läs mer

Innehåll instruktion Sharefile för Trafikverkets applikationer

Innehåll instruktion Sharefile för Trafikverkets applikationer Innehåll instruktion Sharefile för Trafikverkets applikationer Introduktion till Sharefile... 1 Skicka filer till din Sharefile-folder... 2 Ladda upp filer och foldrar via webbläsare... 2 Skapa foldrar

Läs mer

2009-08-20. Manual för Typo3 version 4.2

2009-08-20. Manual för Typo3 version 4.2 2009-08-20 Manual för Typo3 version 4.2 1 2 Innehåll: 1. Allmänt 4 2. Grunderna i Typo3 5 2.1 Knappar 5 2.2 Inloggning 5 2.3 Den inledande vyn 6 2.4 Sidträdet 7 3. Sidor 8 3.1 Skapa en ny sida 8 3.1.1

Läs mer

Laborationer i kursmomentet Datoranvändning E1. Laboration nr 5: Mer om FrameMaker

Laborationer i kursmomentet Datoranvändning E1. Laboration nr 5: Mer om FrameMaker Sid 1 Laborationer i kursmomentet Datoranvändning E1 http://www.etek.chalmers.se/~hallgren/eda/ : Mer om FrameMaker 1996, 1997 Magnus Bondesson 1998 och 99-09-22 Thomas Hallgren 1 Introduktion I Laboration

Läs mer