Archive

Archive for the ‘Programming’ Category

Nei nei nei!

oktober 4, 2006 2 kommentarer

Dette er ikke måten å gjøre det på!

cc numbers.c -o numbers.c -Wall

Kategorier:Programming

LanMan & DES

Det skulle være et lite programmeringsprosjekt, men det ble ikke det. Langt i fra. Jeg hadde planlagt å lage en liten LanMan hashgenerator i C++, og tenkte at det nok kom til å bli «litt vanskelig» å generere selve hashen. Det viste seg riktignok at det ikke fantes, jeg har i hvert fall ikke funnet noen, kode tilgjengelig for å generere hashen, og jeg begynte å grave litt i algoritmen. Dermed forsvant «litt vanskelig», og ble til «komplisert» i stedet. Så nå sitter jeg her og prøver å forstå hvordan DES-algoritmen som ble laget i 1972 fungerere. Forhåpenligvis blir det noe konkret til slutt, og at LanMan hashgenereatoren faktisk blir ferdig. Gøy er det uansett. :-)

Kategorier:Programming

Tolket vs. kompilert

En datamaskin er egentlig ganske dum. Det eneste den forstår er 0 eller 1. 1/0 kan også tenkes på som på/av eller som strøm/ikke-strøm (spenning/ikke-spenning). Riktignok er ikke 0 eller 1 markert ved hjelp av strøm/ikke-strøm, men et gitt spenningsintervall. Grunnen til at det må være et intervall, og ikke en fast verdi, er fordi ingen elektroniske komponenter er helt like, og spenningen over de vil variere. Spenningsverdien som definerer en logisk status, kalles logisk level (logic level).

Altså:0: FALSE, Logic LOW
1: TRUE, Logic HIGH

Fordi en datamaskin ikke kan skjønne noe annet enn null og en kan vi omgjøre det vi skriver til kjørbarkode, dvs. enere og nullere, også kalt bytekode eller maskinkode. Det å forandre kode til maskinkode kalles kompilering, og gjøres ved hjelp av et program kalt en kompilator (compiler). Den totale prosessen fra kildekode til kjørbar fil kan sees på slik:

kildekode --> preprosessing --> kompilering (objektfil) --> linking (en eller flere objektfiler) --> kjørbar fil

  • kildekode: en fil med kode skrevet i et visst programmeringsspråk
  • preprosessing: pre-prosessordirektiver blir satt opp, include-filer blir hentet til kildekoden
  • kompilering: kildekoden blir til enere og nullere
  • linking: include-filer og objektfilen(e) blir linket sammen
  • kjørbar fil: en ferdig kjørbar fil

Algoritmen over kunne vært brukt på følgende program (skrevet i C, kalt minfil.c):

/*
* minfil.c
* ~kristy 040606
* dette er en kommentar, blir ignorert av kompileren
*/
/* pre-prosessordirektiv, inkluderer en header-fil */
#include <stdio.h>
/* selve programmet, blir en objektfil, så linket sammen med header-filen */
int main() {
printf("Et C-program!\n");
return 0;
}

Et kompilert program kjører «rett på hardwaren», dvs. det er laget for en bestemt prosessor (eller system). Dette er kompilatorens jobb; den omsetter kildekoden til en kjørbar arkitektur- eller prosessorspesifikkfil (eller begge deler). Prosessorene er laget etter forskjellige grunnprinsipper (arkitekturer) og de er derfor fysisk forskjellige. På grunn av det av arbeidet kompilatoren gjør, er kompilerte språk generelt sett mye raskere enn tolkede språk.

Eksempler på språk som må kompileres: C, C++, D, C#, Obj-C (Cocoa) Pascal, Delphi

Et tolket språk et et språk som ikke blir kjørt gjennom en kompilator, men som direkte blir tolket/kjørt av en tolker (interpreter). Tolkede språk blir enten tolket som de er, eller de gjøres om til bytekode før de blir tolket av tolkeren. Et program som blir tolket tar det lenger tid å kjøre fordi tolkeren må analysere koden og valgene hver gang det kjøres. Å aksessere variabler tar også lengre tid, ettersom mappingen til lagerområdene også må gjøres under kjøring, og ikke under kompilering. Det er likevel viktig å forstå at den totale tiden det tar å kjøre et tolket program kan være mindre enn den totale tiden det tar å kompilere og kjøre et program.

Eksempler på tolkede språk: HTML, XML, XHTML, Java, PHP, Perl, Python, BASIC, shellscript

Viktig å vite er at mange språk først blir gjort om til binærkode, for å bli tolket av en tolker. Et eksempel på dette er Java.

Kategorier:Programming

shell issues

Jeg var mildt sagt veldig frustrert etter å ha forsøkt å programmere et shellscript – uten annet resultat enn å bare få feilmeldinger. Jeg gjorde filen kjørbar på vanlige måte:

chmod a+x filnavn.sh
Og prøvde å kjøre det som vanlig:
./filnavn.sh
Dette gav meg ingen ting annet enn:
tcsh: filnavn.sh: Command not found

Selv noen av mine gamle script gav meg det samme, og jeg skjønte absolutt ingen ting. Etter en lang stund demret det for meg.. Jeg hadde for ikke lenge siden programmert noe C++ som senere skulle over på PCen min. Jeg hadde derfor satt linjeendingene i XCode til å være CR/LF (Windows), noe Mac OS X ikke akkuratt likte. De andre scriptene jeg hadde prøvd med hadde jeg også åpnet, sånn at det hadde blitt noe tull med linjeendingene også i de filene. Så folkens, husk å sett linjeendingene i shellscript til å være LF!

Eksempel på shellscript:

#!/bin/sh

# testscript.sh
# prints out some info about the current user
# ~kristy 280506

# username
echo "You are logged in a $USER"

# home directory
echo "Home directory is $HOME"

# number of processes (this needs to be on one line)
num=`ps aux | grep $USER | cut -c 11-15 | wc -l | cut -c 7-`
echo "$USER is running $num processes"

Gjør scriptet kjørtbart og kjør det som vist over. Output kan for eksempel være:
You are logged in a kristy
Home directory is /Volumes/home
kristy is running 23 processes

Kategorier:Programming

C eller D? Eller C++?

Jeg har oppdaget noe morsomt. Det finnes nå et programmeringsspråk som heter D. Språket er ment som C++ sin etterkommer/arvtager, som C++ var ment som C sin etterkommer. (Personlig syns jeg C og C++ er to språk som passer til to forskjellige ting, men det er nå en annen sak.)

Utviklingen av D kan sees slik: BCPL -> B -> C -> C++ -> D

Her finnes en sammenlikning mellom C, C++ og D.
Det finnes også en egen D compiler for Mac OS X: gdcmac (GNU D Compiler for Mac OS X).
Og historien om C finnes her.

Enjoy! ;-)

Kategorier:Programming

QT

februar 25, 2006 Legg igjen en kommentar

Klokken er halv to nå, og det er ca tolv timer siden jeg satte i gang med å laste ned og kompilere QT. Innimellom var det selvsagt mye annet jeg måtte gjøre, og programmering er jo uansett best på nattestid. ;-) Jeg har aldri programmert noen ting i QT, så jeg brukte en stund på å finne det frem, laste det ned, kompilete det (det tok fem timer på min stakkars gamle G4!) og finne ut hvordan man skulle kompilere programmer med det. Det enkleste er ofte det vanskeligste å skjønne, og det å klare og kompilere programmer er jo veldig banalt – men vanskelig når man ikke har peiling på finurlige programmer og syntaks. Om noen andre lurer på hvordan det gjøres, er dette en måte:

qmake -project
qmake
make

Deretter kan man enten, under Mac OS X, kjøre det ved: open MyProgram.app eller bla seg ned til MyProgram.app/Contents/MacOS/ og kjøre den eksekverbare filen som ligger i den mappen, da ved: ./MyProgram

Her er mitt første QT-program. ;-D

Kategorier:Programming