Command-Lines Command / del 1

Bruger du Mac eller Linux, er du helt sikkert stødt på terminalen hvad man også kalder bash. Især hvis du bruger Linux. Den kan synes temmelig uoverskuelig, men faktisk er det ikke helt så slemt, som man først tror. Er du i tvivl om, hvorvidt du skal kalde din terminal for bash, shell eller simpelthen terminal, så har jeg fundet en fin artikel omkring emnet her. Personligt har jeg altid haft det sådan, at der findes 10 forskellige begreber for den samme ting inden for it, men at det i sidste ende handler om, hvad du får udrettet med dem.

Jeg vil i del 1 komme ind på de allermest basale kommandoer i din terminal. For nemheds skyld kalder jeg det ikke bash, men terminal, idet jeg ser det som en emulator for en terminal. Så må du selv finde ud af, hvad du vil kalde den.

Allerførst vil jeg åbne min terminal. En short-cut for dette er ctrl + alt + t

Dette er standardvinduet, vi får frem når vi åbner vores terminal. I mit tilfælde er mit brugernavn atle og min maskine hedder alte-Nitro-AN515-51 (jep, jeg har en Nitro som jeg kører Linux på).

pwd står for “print working directory” og viser dig i hvilket directory, du befinder dig i. Lad os taste det ind. Vi får nedenstående.

Vi kan se at vi er i directory /home/atle/

ls står for list. Kommandoen laver en liste til os, som viser os vores mapper of filer i det pågælgende directory.

Her ser vi nogle af mine filer. For overskuelighedens skyld, idet jeg skulle oploade mine screenshot til nettet, har jeg minimeret min terminal en del, hvorfor ikke alt kan se. I praksis kan jeg blot scrolle ned.

ls -a viser alle de skjulte filer, som terminalen ikke viser dig med ls. De skjulte filer består af “.” foran navnet på mappen eller filen. Du kommer sjældent til at skulle se på dine skulte filer, så det er dejigt, at man skal skrive en anden kommando før de kommer frem. Hvad kommer du nogensinde til at bruge din .bashhistory til for eksempel?

clear er en kommando, som er god at skrive, hvis du fx har en terminal fuld af lister. clear renser kort og godt terminalen.

cd betyder command go to directory, og rykker altså din nuværende position til en anden. Vi kan at vores filer indeholder et Desktop directory. Lad os gå til det vha cd. Vi skriver altså cd Desktop. For overskuelighedens skyld har jeg benyttet pwd for at vise, hvilke directory vi er gået til og fra. Terminalen er casesentivt, så husk at skrive mapper som Desktop med D som versal.

mkdir er make directory. Ved kommandoen kan vi altså lave et nyt directory. I mit eksempel er jeg inde i min Desktop, og mkdir my_dir. I nedenstående screenshot kan vi nu se, at vi har skabt et directory som hedder my_dir

touch laver en fil for os. Inden vi går ind og ser i my_dir vil vi lave en fil i vores desktop. Det skal bare være en .txt med lidt indhold. Vi skriver touch my_text.txt og vi kan nu se at Desktop indeholder en ny fil med dette navn.

Inde i terminalen åbner jeg skriver jeg gedit my_text.txt hvilket åbner min teksteditor og tillader mig at skriver i den fil, jeg netop har lavet vha touch-kommandoen. Husk at gemme den.

cat åbner filen for os inde i terminalen. Nogle synes det er forkert at benytte cat mens jeg selv er ligeglad. Det handler som sagt om, hvad der er mest effektivt, og her er det concatenate-kommandoen cat. Og som vi kan se, henter kommanoen filen og læser den for os. cat kan gøre dette med langt de fleste filer. Du kan også læse dine java-filer osv.

cd ~ går tilbage til home-directory. Lad os prøve dette. For god ordens skyld har jeg også bedt terminalen om at printe directory ud vha pwd.

Vi er nu inde i vores home directory. Skriv eventuelt ls for at se, hvad denne indeholder. Faktisk er det med et helt andet mål for øje, at jeg har valgt at gå tilbage hertil. Du husker cd kommandoen, der fik os frem ikk’? cd kommandoen kan dog også få os længere frem end blot et enkelt directory. Vi vil nu gå ind i det directory vi lavede vha. mkdir. Det vi kaldte my_dir. Dette gør vi ved at skrive cd Desktop/my_dir og som vi kan se indeholder det intet.

Lad os lave en ny fil som vi kalder my_new_text.txt. Skriv touch my_new_text.txt og som vi kan se indeholder my_dir nu filen my_new_text.txt – selve filen indeholder dog ingen tekst, og det skal den heller ikke gøre, da det ikke er nødvendigt for eksemplet.

rm står for remove. I stedet for at skrive en tekst i vores nye .txt-fil ønsker vi at slette filen. Det gør vi ved at skrive rm my_new_text.txt og som vi ser er filen fjernet når vi efterfølgende søger på ls.

cd .. Lad os i stedet gå tilbage. Det gør vi ved at skrive cd .. Vi er nu tilbage i Desktop.

mv er vores move kommando. Lad os flytte my_text.txt op til vores directory my_dir. Dette gør vi ved at skrive mv my_text.txt my_dir og som vi kan se forsvinder my_text.txt fra Desktop og er i stedet flyttet hen i my_dir

Men mv er ikke kun at flytte en fil til en mappe. Du kan også opdatere den. Først laver vi en ny fil i my_dir som vi kalder touch my_updated_text.txt. Herefter skriver vi nogle linjer(det er lige meget hvad, så længe det ikke er det samme som fra filen my_text.txt da det blot vil forvirre). Gem i my_dir, skriv cat my_updated_text.txt og læs linjerne, skriv derefter cat my_text.txt og læs denne fils linjer.

Hvis du ville opdatere den gamle fil my_text.txt til den nye my_updated_text.txt kan du vha mv my_text.txt my_updated_text.txt slette den gamle og opdatere den til den nye.

rm Men lad os i det hele taget fjerne den tossede tekst vi lige skrev i my_updated_text.txt. Dette gøres vha rm my_updated_text.txt og vi fjerner den helt fra my_dir

Lad os gå tilbage til Desktop cd ..

rm -r når du skal fjerne et directory kan du ikke nøjes med rm directory. I stedet skal du skrive rm -r directory. Lad os se hvordan vi fjerne my_dir og for eksemplets skyld se på om rm fjerne eller om vi rent faktisk skal bruge rm -r.

Når vi skriver rm my_dir skriver terminalen at my_dir: is a directory hvilket altså er en lille hjælp til os. Så lad os i stedet få skrevet rm -r my_dir og som vi kan se er my_dir direcotory nu fjernet fra Desktop.

cd / Husker du cd ~ der fik os til home? Vi kan også komme længere ned, helt til vores root. Det gør vi ved at skrive cd / Jeg viser forskellen i nedstående skærmbilleder. Det ene repræsentere vores home mens det andet er i vores root.

I ovenstående eksempel har jeg skrevet cd ~ og som det ses er vores working directory /home/atle/ Yderligere ser vi at listen indeholder alle vores foldere i home.

I ovenstående eksempel har jeg benyttet kommandoen cd / og er kommet ind til vores root directory. Du skal virkelig passe på med at lave forsøg her, da du kan smadre styresystemet helt katastrofalt. Så tilbage i home. cd ~ får dig tilbage.

cp står for copy. Lad os gå ind i vores Desktop directory og lave et nyt directory mkdir my_new_dir. Lad os efterfølgende lave en ny .txt-fil som vi kalder touch text_to_copy.txt

Vi vil nu kopiere teksten – altså ikke flytte den som vi gjorde med mv – til my_new_dir. Dette gør vi ved at indtaste flg kommando: cp text_to_copy.txt my_new_dir – læg mærke til at text_to_copy.txt stadig er i Desktop, mens den samtidig er kopieret til my_new_dir

Det samme kan vi gøre med directory’s. Ligesom i mv bruger vi bare kommandoen mv -r i stedet.

whoami er kommandoen som viser hvem du er, altså dit username

exit Det var alt for del 1 og husk at exit afslutter din terminal 🙂

Function Calls

Noget af det som volder mange problemer i Python er function calls. Altså hvor funktioner kalder på andre funktioner. Det kan synes komplekst, og undervisningsmaterialet er ofte baseret på nogle ulogiske indsættelser af funktionerne kombineret med, at disse undervisningsmaterialer, ofte, indeholder komplekst spilindhold, som man samtidig skal forholde sig til. Det er også hvad man kalder bottom up i fagsprog. Altså hvor man må forholde sig til de små detaljer, før man kan opnår forståelsen for det hele program.

Altsammen fuldkommen unødvendigt, når man egentlig bare vil forstå konceptet bag function calls. Derfra kan man så altid bygge op, når det basale er på plads. Derfor har jeg lavet et lille program, som alene tager konceptet, helt basalt, fra at kalde på funktioner.

Det er nødvendigt, at du allerede har en basal forståelse for Python, og at du kender funktioner og ved hvordan de laves. Ellers får du intet ud af mit program.

Kort og godt kender vi jo en funktion på, at den deffineres således:

def min_funktion():

print(“Hey you!”)

Vi kalder på funktionen ved at skrive min_funktioner() i vores shell, og derefter vil ovenstående funktion printe “Hey you!” ud i vores shell.

Men en funktion kan også kalde på en anden funktion, deraf function calls. Her er et eksempel på dette:

def start():

print(“Vi starter vores funktion”)

min_funktion()

Kan du huske funktionen oven for, som hed min_funktion() og som printede “Hey you!” ud. Det er den vi med start funktionen kalder på. Vi ville således få dette printet ud i shell:

>>> Vi starter vores funktion

>>> Hey you!

Her er altså tale om to funktioner, hvor start() kalder på min_funktion() og sådan kan man altså blive ved i Python og skabe kæder af function calls.

Vi kan også gå lidt længere og skrive et argument, hvilket dog kræver at vi har en funktion, der tillader os at skrive argumenter, som den kan benytte i en variabel. Vi laver en sådan funktion her:

def funktion_med_variabel(argument):

print(“Hej”, argument, “tak for dit argument!”)

def ny_start():

mit_argument = input(“Dit navn: “)

funktion_med_variabel(mit_argument)

I vores shell kalder vi først på ny_start() som siden kalder på funktion_med_variabel() som indhenter argumentet:

>>> ny_start()

>>> Dit navn: Atle

>>> Hej Atle tak for dit argument!

Jeg håber at ovenstående har givet dig et bedre indtryk af function calls og at mit program på github kan bruges. Brug det så meget du lyster, byg det op og bryd det ned og byg det op så meget du vil. Det er helt gratis undervisningsmateriale. Dog bliver jeg altid glad for, hvis folk sender mig deres projekter, hvis de har brugt mine programmer – det er nemlig fedt at se når det bliver brugt 🙂

Koden til GitHub

PyDoc

PyDoc er et fantatastisk middel til at generere hjælp til informationer af modulerne i Python.

Et af de mest benyttede værktøjer i Python, som jeg bruger, er PyDoc-modulet. Kort og godt indhenter PyDoc informationer til dig om alle de moduler, som du har kørerende på din computer. I mit tilfælde er det en del, idet jeg arbejder med en flere forskellige typer opgaver. Bl.a. fylder Pygame modulet en del for tiden, hvorfor jeg af og til må indhente oplysninger om specifikke funktioner. Turtle modulet fylder, fordi jeg skal tilbage til undervisningen lige om lidt, og har brug for lidt brush up på det. Og jeg arbejder også lidt med data, hvilket sætter store krav til at jeg kan benytte funktionerne ordentligt i matplotlib, scipy, numpy og pandas mv.

Nu kunne jeg selvfølgelig bare importere et modul til min IDE. Men det kommer på den anden side til at fylde temmelig godt op i min IDE. PyDoc derimod benytter min terminal til at dokumentere modulerne, hvilket gør det en hel del nemmere for mig. Dels undgår jeg at importere modulerne ind i IDE’en og skrive help(<modul.funktion>), dels kan jeg kører pydoc lokalt på computeren imens jeg arbejder i et Python miljø. Smart.

Og så er Pydoc ikke mindst super overskueligt. Lad mig eksemplificere det i nedenstående.

Allerførst går jeg ind i min terminal og henter pydoc ved at skrive: python -m pydoc

Som det ses på ovenstående screenshot indeholder pydoc modulet en række forskellige muligheder. En hurtig og nem mulighed er, hvis du allerede kender det modul, som du ønsker at gå på opdagelse i. Du skriver kort og godt bare python -m pydoc <modul>. Fx python -m pydoc turtle

Efter vi har hentet turtle-modulet ved at skrive python -m pydoc turtle får vi nu al den docstring, som beskriver turtle-modulet.

Smart ikk’?

En anden rigtig smart ting med Pydoc er, at du kan benytte din lokale server til at sætte Pydoc op, og få en enorm overskuelig browser-menu over alle dine moduler. Det gør du nemmest ved at skrive:

python -m pydoc -b

Den lokale server starter og vi får nedenstående i vores browser

Søg og gå på opdagelse. Her finder du alle dine moduler i de respektive mapper, de ligger i.

I ovenstående finder jeg informationer om sys-modulet.

En anden ting, som jeg af og til benytter mig af i PyDoc er, hvis jeg har lavet mit eget modul og ønsker at dele det med andre. Jeg kan altid lægge mit modul op på min GitHub, mens jeg kan dog også skrive en HTML fil, som beskriver mit modul. Det er faktisk meget nemt.

Inde i terminalen skriver du: python -m pydoc -w <modul>. Prøv fx at skrive python -m pydoc -w cmath. Her er hvad du får.

Husk at lav en folder, du vil have din fil liggende i og åben PyDoc derfra. I ovenstående screenshot har jeg kaldt min folder ex1. Når jeg har skrevet filen, får jeg denne HTML.

Om bloggen

Velkommen til bloggen. Dette er mit første blogindlæg, og jeg vil her komme ind på, hvorfor jeg har lavet den.

Der var to forskellige parametrer i spil, da jeg gik med overvejelserne omkring det at have en blog. For det første synes jeg det kunne være fedt, hvis andre kunne få gavn af de råd og fif, jeg kommer med ifbm programmering og undervisning. Det kan både være forældre, andre undervisere og ikke mindst min målgruppe, som jeg først og fremmest henvender mig til: alle med interesse i at lære – i særdeleshed – Python. Men jeg vil sandsynligvis også komme ind på Scratch og JavaScripts.

Det er min ambition, at jeg vil lægge en artikel ud hver uge om et emne. Det kan være små og det kan være store tekster.

Det andet parameter, som jeg havde med i mine overvejelser omkring bloggen var, at jeg også selv kan få en masse fagligt ud af den. Jeg bliver, forhåbentlig, bedre til at kommunikere skriftligt, og så tror jeg også at det altid hjælper at skrive om emner, da man kan have tendens til at glemme detaljerne, hvis man fx ikke bruger en metode over en længere periode. Vi kender det jo alle sammen: man tænker, at knolden husker det for os, men den smider det væk, hvis den ikke tror, det skal bruges igen.

Jeg håber du vil finde bloggen brugbar.

Atle,