Forsida

Temaer

Sjangere

Ikke partisjoner harddisken

Tema: Programvare; sjanger: Artikler
Skrevet av Andreas Nordal den 5. april 2011 kl 23:10:23; Kommentarer: 0

Hvis man likevel bare skal ha én partisjon på en harddisk, hvorfor ikke gjøre det enkelt?

Bortsett fra operativsystem-partisjonen, som faktisk være en partisjon (for at BIOS og oppstartlaster skal funke), så er det ikke nødvendig å partisjonere eventuelle andre harddisker i datamaskinen.

Eksempel

I Linux kan man:

mkfs.ext4 /dev/sdd

I stedet for:

mkfs.ext4 /dev/sdd1

Da skriver man i /etc/fstab:

/dev/sdd        /mnt/d  ext4    defaults 1 2

Framfor:

/dev/sdd1       /mnt/d  ext4    defaults 1 2

Dette funker faktisk: Denne nettsiden er lagra på to uformaterte harddisker i raid1.

Forklaring

Mens vanlig prosedyre er å formatere enkelt-partisjoner av harddisken, er det selvsagt også mulig å formatere selve harddisken. Det resulterende filsystemet vil da spenne absolutt hele harddisken, uten plass til partisjonstabell og alt det der.

Fordeler

Ulempe

Konklusjon

Skal man først ha en ekstra harddisk, typisk for å få et stort filsystem til ren datalagring, så er man ikke interessert i å partisjonere harddisken i biter. Det er heller ikke vits i å lage den ene partisjonen for BIOS eller oppstartslasterens skyld. Dessuten skaper det bare trøbbel. Teknisk sett er det veldig smart å ikke partisjonere harddisken.


goto kan være fornuftig

Tema: Programmering; sjanger: Artikler
Skrevet av Andreas Nordal den 11. april 2010 kl 21:22:18; Kommentarer: 0

For de som ikke kjenner goto: Goto forteller datamaskinen at den skal fortsette et annet sted i programmet. Slik vi kjenner det i programmeringsspråket C, er goto en videreføring av jump-instruksjonen, fra den tiden man programmerte i assembly (eller direkte maskinkode for den saks skyld), og er dermed blant de eldste programmeringskonseptene. En vanlig oppfatning er at goto er utdatert. Det var faktisk en hovedhensikt med såkalt strukturert programmering, et konsept i høynivå-programmeringsspråk, å eliminere behovet for å bruke goto.

Kritikere hevder at bruk av goto fører til «spaghettikode», det vil si kildekode som er vanskelig å følge fra start til slutt, for å ikke nevne baklengs, man ser jo ikke hvor man "kommer fra". Dette avhenger selvsagt av hva man gjør det til, så hvis man klarer å bruke goto på en ryddig og konsekvent måte, så er det kanskje tilgivelig.

Tilgivelig eller ikke, noen ganger er det veldig praktisk å bruke goto. Ja, jeg vil gå så langt som å hevde at det kan være fornuftig! Dette har jeg prøvd å vise med kodeeksempelet nedenfor, men først en hverdagslig analogi: Forestill deg at du følger en oppskrift som består av mange steg. Hvert steg kan gå galt, og hvis noe går galt, må du avblåse hele prosjektet og rydde opp. Mengden opprydding vil avhenge av hvor langt du kom før du avbrøt. Selvsagt står ikke oppryddingsprosedyrene i oppskriften for hvert steg som kan gå galt; de er irrelevante for selve algoritmen. Det er i algoritmen utfordringa ligger, mens feilhåndtering på en måte sier seg selv og har ingen ting å si for om resultatet blir riktig i det normale tilfellet. Så hvordan kan vi separere algoritme og feilhåndtering? En måte er å håndtere suksesstilfellet der og da som et slags spesialtilfelle. Suksess på suksess vil da i kildekode få en sinnssyk indentering. Det er ikke uten grunn at programmeringsspråk som C++ og Java har "exceptions", en alternativ kontrollflyt for å avbryte, som er til for å la feilhåndteringa skje et annet sted. Det mer primitive programmeringsspråket C har ikke exceptions, men så har vi jo det gamle velkjente skitne trikset.

De to hypotetiske programsnuttene nedenfor viser feilhåndtering henholdsvis med if/else og if+goto. De gjør nøyaktig det samme, nemlig å initialisere «struct karamell»:

//Denne delen hører med til begge eksemplene.
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

struct karamell{
	char * navn;
	void * buf;
//	    :
//	    ·
	FILE * fp;
};
//Eksempel 1: if/else
struct karamell * k_init(char * filnavn){
	struct karamell * k;

	k = malloc(sizeof(*k));
	if(k == NULL){
		perror("malloc");
	}else{ //OK
		k->fp = fopen(filnavn, "rb");
		if(k->fp == NULL){
			perror(filnavn);
		}else{ //OK
			k->navn = strdup(filnavn);
			if(k->navn == NULL){
				perror("strdup");
			}else{ //OK
//				.
//				.
//				.
//				.........
//					.
//					.
//					.
//					.........
//						.
						if(posix_memalign(&(k->buf), 1024, 1024) != 0){
							fputs("posix_memalign failed.", stderr);
						}else{ //OK
							/* Nothing bad happened, yet
							 * we are in deep indentation!
							 * We are treating the normal
							 * case as the special case.
							 * Here is where we do our work:
							 *	:
							 *	·
							 */
							return k;
						}
						free(k->navn); //cleanup
//					.
//					.
//				.
//				.
			}
			fclose(k->fp); //cleanup
		}
		free(k); //cleanup
	}
	return NULL;
}
//Eksempel 2: if+goto
struct karamell * k_init(char * filnavn){
	struct karamell * k;

	k = malloc(sizeof(*k));
	if(k == NULL){
		perror("malloc");
		goto die;
	} //OK
	k->fp = fopen(filnavn, "rb");
	if(k->fp == NULL){
		perror(filnavn);
		goto fopenfail;
	} //OK
	k->navn = strdup(filnavn);
	if(k->navn == NULL){
		perror("strdup");
		goto noname;
	} //OK
//	    :
//	    ·
	if(posix_memalign(&(k->buf), 1024, 1024) != 0){
		fputs("posix_memalign failed.", stderr);
		goto nobuf;
	} //OK
	/* Nothing bad happened -> no extra indentation.
	 * The normal case is no special case!
	 * Here we do our work:
	 *	:
	 *	·
	 */
	return k;

	//exceptional cleanup
nobuf:
//	    :
//	    ·
	free(k->navn);
noname:
	fclose(k->fp);
fopenfail:
	free(k);
die:
	return NULL;
}

Hva er problemet med det første kodeeksempelet?

Den observante leseren vil legge merke til at disse kodesnuttene er så like at de vil kompilere ned til de samme instruksjonene. Jeg sjekka den gcc-genererte assembly-koden, og fant to ubetydelige forskjeller (en NOP og en ubrukt etikett i goto-versjonen).

Til slutt, hvis du tror jeg er den eneste som bruker goto på denne måten, og at ingen ville finne på å bruke goto like flittig som meg, ta et googlesøk på "linux/fs/ext2/dir.h", så skal du få deg en bakoversveis!


Raskeste måte å bytte to tall

Tema: Vitenskap; sjanger: Artikler
Skrevet av Andreas Nordal den 12. oktober 2009 kl 03:47:21; Kommentarer: 8

Å bytte om verdiene på to tall er en problemstilling som man ofte kommer over når man programmerer. Det er en viktig del av mange algoritmer, særlig sorteringsalgoritmer, og selvfølgelig en masse andre som man ikke skulle tro hadde noe med bytting av tall å gjøre. Dessuten er det en typisk operasjon som dataprogrammet kanskje gjør veldig mange ganger. Dette er så enkelt og viktig at det fins liten unnskyldning for å gjøre det feil.

Testprogram

Jeg har testet de 4 metodene i C/C++ som jeg syns var mest aktuelle (i håp om å finne den raskeste), samt 3 assembly-modifikasjoner av disse. Til sammen 7 tester nummerert fra 0 til 6. Følgende kildekode i C/C++ vil, som vi straks skal se, kunne kompileres til 4 forskjellige programmer.

/* testbenk.c */

#include <stdio.h>
#include <inttypes.h>
#ifdef __cplusplus
# include <algorithm> //std::swap
#endif


int main(){
#ifdef SWAP
        int a=666, b=13;
        register int32_t i=0;
        do{//Bytt om a og b 2^32 ganger
# if SWAP==0
                a ^= b;
                b ^= a;
                a ^= b;
# elif SWAP==1
#  ifndef __cplusplus
#  error "Dette er C++"
#  endif

                std::swap(a, b);
# elif SWAP==2
                int temp = a;
                a = b;
                b = temp;
# elif SWAP==3
                register int temp = a;
                a = b;
                b = temp;
# endif
        }while(++i);
        printf("%d %d\n", a, b);
#endif //defined SWAP
        return 0;
}

Gransking av assembly

Når vi kompilerer, la oss gå veien om assembly, og titte på hva den stakkars prosessoren plages med:

gcc -S -DSWAP=0 testbenk.c -o swap0.s
g++ -S -DSWAP=1 testbenk.c -o swap1.s
gcc -S -DSWAP=2 testbenk.c -o swap2.s
gcc -S -DSWAP=3 testbenk.c -o swap3.s

Her ser vi utdrag av hva kildekoden koker ned til av instruksjoner i hvert av de 4 tilfellene. Merk at assemblykode er forskjellig fra maskin til maskin; disse utdragene er fra den første testen (se resultater). Det som har med tallbytting å gjøre er markert med feit skrift.

Utdrag fra swap0.s:

        movl    $666, -8(%rbp)
        movl    $13, -4(%rbp)
        movl    $0, -20(%rbp)
.L2:
        movl    -4(%rbp), %eax
        xorl    %eax, -8(%rbp)
        movl    -8(%rbp), %eax
        xorl    %eax, -4(%rbp)
        movl    -4(%rbp), %eax
        xorl    %eax, -8(%rbp)

        addl    $1, -20(%rbp)
        cmpl    $0, -20(%rbp)
        jne     .L2

Utdrag fra swap1.s:

_ZSt4swapIiEvRT_S1_:
        pushq   %rbp
        movq    %rsp, %rbp
        movq    %rdi, -24(%rbp)
        movq    %rsi, -32(%rbp)
        movq    -24(%rbp), %rax
        movl    (%rax), %eax
        movl    %eax, -4(%rbp)
        movq    -32(%rbp), %rax
        movl    (%rax), %edx
        movq    -24(%rbp), %rax
        movl    %edx, (%rax)
        movq    -32(%rbp), %rdx
        movl    -4(%rbp), %eax
        movl    %eax, (%rdx)

        leave
        ret
        movl    $666, -4(%rbp)
        movl    $13, -8(%rbp)
        movl    $0, -20(%rbp)
.L4:
        leaq    -8(%rbp), %rsi
        leaq    -4(%rbp), %rdi

        call    _ZSt4swapIiEvRT_S1_
        addl    $1, -20(%rbp)
        cmpl    $0, -20(%rbp)
        setne   %al
        testb   %al, %al
        jne     .L4

Utdrag fra swap2.s:

        movl    $666, -12(%rbp)
        movl    $13, -8(%rbp)
        movl    $0, -20(%rbp)
.L2:
        movl    -12(%rbp), %eax
        movl    %eax, -4(%rbp)
        movl    -8(%rbp), %eax
        movl    %eax, -12(%rbp)
        movl    -4(%rbp), %eax
        movl    %eax, -8(%rbp)

        addl    $1, -20(%rbp)
        cmpl    $0, -20(%rbp)
        jne     .L2

Utdrag fra swap3.s:

        movl    $666, -8(%rbp)
        movl    $13, -4(%rbp)
        movl    $0, -20(%rbp)
.L2:
        movl    -8(%rbp), %edx
        movl    -4(%rbp), %eax
        movl    %eax, -8(%rbp)
        movl    %edx, -4(%rbp)

        addl    $1, -20(%rbp)
        cmpl    $0, -20(%rbp)
        jne     .L2

Optimalisering av assembly

swap4.s: Når det fornuftstridig viste seg under testene at såkalt registerswap var treigere enn vanlig temp-swap, tydet det på at koden i swap3.s ikke var optimal. Like fullt, det er mulig å se at swap3.s burde ha vært raskere enn swap2.s. Et bevis for dette er at ved å gjøre om "-8(%rbp)" til "-12(%rbp)" og "-4(%rbp)" til "-8(%rbp)" i swap3.s, og å variere bruken av registere litt i swap2.s, oppnår vi at den eneste forskjellen mellom disse 2 filene er 2 linjer ekstra i swap2.s, samtidig som virkemåten til begge programmene er bevart:

; swap2.s (modifisert)
movl    -12(%rbp), %edx
movl    %edx, -4(%rbp)
movl    -8(%rbp), %eax
movl    %eax, -12(%rbp)
movl    -4(%rbp), %edx
movl    %edx, -8(%rbp)
; swap3.s (modifisert) aka swap4.s
movl    -12(%rbp), %edx

movl    -8(%rbp), %eax
movl    %eax, -12(%rbp)

movl    %edx, -8(%rbp)

Den modifiserte swap3.s ble lagret som swap4.s.


5: En skulle kanskje tro at xchg (exchange) hørtes ut som en ideell instruksjon for vårt formål. Med utgangspunkt i swap4.s lagde jeg swap5.s:

; swap5.s
movl    -12(%rbp), %eax
xchgl   -8(%rbp), %eax
movl    %eax, -12(%rbp)

6: Ved hjelp av "inc" i stedet for "add" og å bruke registeret eax som tellevariabel, ble swap4.s forbedret til swap6.s:

        movl    $666, -12(%rbp)
        movl    $13, -8(%rbp)
        movl    $0, %eax
.L2:
        movl    -12(%rbp), %edx
        movl    -8(%rbp), %ebx
        movl    %ebx, -12(%rbp)
        movl    %edx, -8(%rbp)
        incl    %eax
        cmpl    $0, %eax
        jne     .L2

Testprosedyre

gcc -s swap0.s -o swap0
g++ -s swap1.s -o swap1
gcc -s swap2.s -o swap2
gcc -s swap3.s -o swap3
gcc -s swap4.s -o swap4
gcc -s swap5.s -o swap5
gcc -s swap6.s -o swap6
gcc -s swap7.s -o swap7

Hadde det ikke vært for at vi må bruke g++ i ett tilfelle:

for i in *.s; do gcc -s $i -o ${i%.?}; done

bash$ time ./swap1
666 13 #Uinteressant: Programmet virker.

real 0m27.270s #Uinteressant: Så lang tid det faktisk tok.
user 0m27.226s #Interessant: CPU-tid i user-mode.
sys 0m0.040s #Interessant: CPU-tid i protected-mode.

Kjøretiden ble målt som i eksempelet over. Som antydet, er det summen av CPU-tid som teller, altså user + sys. Når det står flere tall i samme celle i tabellen, er det fordi jeg har testet flere ganger. Tiden er i sekunder.

Resultater

Maskin0: XOR-swap1: std::swap2: temp-swap3: register­swap (gcc)4: register­swap (fiksa)5: xchg-swap6: Så bra jeg kan i assembly
ny laptop: Intel Core 2 Duo T8100 2,1GHz (2 kjerner), GCC 4.3.2, Linux 2.6.27.29 x86_6434,226s 34,066s27,266s 27,306s11,629s 11,805s12,485s 12,565s9,737s 9,781s72,569s 72,817s9,465s 9,397s
gammel stasjonær: AMD Athlon XP 2600+ 1,9GHz, GCC 4.3.0, Linux 2.6.27.25 i68639,19s47,20s14,16s16,17s12,41s49,47s8.93s
ny server: Intel Xeon 3,2 GHz (4 prosessorer), GCC 4.2.4, Linux 2.6.24-24 i68620,48s 20,35s40,77s 40,44s10,61s 10,72s8,18s 8,26s6,92s 7,13s
gammel server: Intel Pentium III Copper­mine 936MHz (2 prosessorer), GCC 4.1.1, Linux 2.6.18 i68687,34s 87,38s111,22s 109,07s36,85s 36,83s23,39s 23,79s18,41s 18,40s
gammel laptop: Intel Pentium 4 2,0GHz, GCC 4.3.2, Linux 2.6.27 i686116,471s 116,219s105,799s 100,218s40,050s 37,802s28,274s 27,65022,333s 21,786s
server: Intel Xeon 2,83 GHz, GCC 4.2.4, Linux 2.6.2428,12s23,88s10,16s8,74s7,71s

Diskusjon

0 (XOR-swap): Så elegant, men akk så treigt. XOR-swap fører til stans i prosessorens samlebånd, fordi hver instruksjon må vente på resultatet av den forrige. Grunnen til at moderne prosessorer kan ha klokkefrekvenser over et par hundre MHz er bruken av samlebånd.

1 (std::swap): Et funksjonskall tar ekstra tid, og indirekte adressering gir lang kode. Programmet swap1 ble forresten 8 byte større enn hver av de andre. Std::swap er rett og slett dømt til å være treig.

2-4 (temp-swap vs registerswap): Jeg kan ikke kåre noen vinner mellom disse 2. Selv om all fornuft sier at det skal være raskere å bruke et register til mellomlagring framfor å bruke RAM, stemte det ikke med mitt program i C. Jeg har vist at dette skyldes GCCs ugunstige plassering av variablene på stakken, og at registerswap faktisk ble raskere enn temp-swap ved å plassere variablene som i temp-swap. Ikke vet jeg om fenomenet skyldes cache-kollisjon eller hva det er. Det ser ut til å være reproduserbart på flere maskiner, men det hele kan jo være en tilfeldighet ved akkurat mitt program.

5 (xchg): Er dette en ubrukelig instruksjon?

6 (Så bra jeg kan i assembly): Dette vil funke i alle fall på i386.


Ring gratis med mobilen

Tema: Programvare; sjanger: Artikler
Skrevet av Stig Magnus Halvorsen den 3. oktober 2009 kl 03:31:48; Kommentarer: 0

Statistikk fra etter lansering av den første iPhone viser at det har vært en liten eksplosjon i bruken av internett på mobiltelefoner. Spesielt nå som de fleste nye telefoner kommer med innebygd WiFi og flere leverandører gir mye eller ubegrenset mobilnett for pengene. Hvorfor ikke da utnytte dette fullt ut? Gjør en det, vil det å ringe og å sende SMS bli nesten eller helt gratis!

Skype er et program som brukes til IP-telefoni og direktemeldinger. Ligner på MSN, men fokuset har ligger på funksjonen om å kunne ringe hverande gratis. Programmet har eksistert for datamaskin siden 2003, men er i senere år også blitt lansert for mobiltelefoner og bærbare håndholdte enheter. Dette i tillegg til å skaffe deg en skypekonto på skype.com er mer eller mindre alt du trenger!

Skype for mobil fungerer på iPhone, telefoner med Windows Mobile, Nokia N800/N810 og PSP. Skype er også til en rekke andre telefoner, sjekk om din telefon kan ha Skype Lite

Det er noen bakdeler med dette. En må installere et ekstra program på mobilen, en må enten ha et internettvennlig abonnement eller være innenfor WiFi-sone og de du vil ringe må også ha skype og være pålogget. Men om dette hadde blitt en standard med tiden, så vil det kun være til gode for almennheten. Det betyr bedre gratis kommunikasjon til folket og at abonnementstilbudene blir betraklige bedre pga konkurranse.


Subdomene i Apace på 1-2-3

Tema: Programvare; sjanger: Artikler
Skrevet av Stig Magnus Halvorsen den 16. mai 2009 kl 19:06:44; Kommentarer: 2

På jobben satt jeg opp en lokal server for noen uker siden. Nylig ble jeg nødt til å konfigurere den for virtuelle servere (flere apachesider på en tjener), da snakka jeg med noen av linuxekspertene på jobben. Og ut i fra det kom jeg opp med denne guiden. Dette har jeg testet på CentOS (lokal jobbserver) og Mandriva (nerdvar). Ser ingen grunn til at det ikke skal virke på andre linuxdistribusjoner, dog muligens andre mappebaner.

Først må du logge inn som root, enten via et grafisk miljø eller shell. Deretter må du navigere deg til mappen /etc/httpd/conf.d. Her må vi lage en ny tekstfil. Denne kun av sikkerhetsårsaker, og siden apache lister de virtuelle tjenerene alfabetisk MÅ denne være først. Derfor lagrer vi denne som 01.conf. Den må inneholde:

# Set up empty virtual host so that original content doesn't change
NameVirtualHost *:80
<VirtualHost *:80>
</VirtualHost>

Som sagt er sikkerhet grunnen til denne filen må eksistere. Hvis ikke vil alle filene i root-mappa bli lista om en forsøker å koble til en virtuell server som ikke eksisterer på tjeneren. Navnet 01 er viktig for at den skal leses først av de virtuelle tjenerne. Apache fungerer slik at den velger den første tilgjengelige virtuelle tjeneren om man prøver å koble til en ikke-eksisterende virtuell server. Det denne filen gjør er istede å vise webroot (/var/www/html).

Så kan vi sette opp våre virtuelle servere som individuelle .conf-filer i samme mappe. Slik kan feks. example.com.conf se ut:

LogFormat "%h %v %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\""

<VirtualHost *:80>
  ServerName www.example.com
  ServerAlias example.com vvv.example.com

  DocumentRoot /home/user/html
  ErrorLog logs/examplecom-error_log
  CustomLog logs/examplecom-access_log

  <Directory /home/user/html>
    Options FollowSymLinks -Indexes
    AllowOverride None

    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

DocumentRoot og Directory må selvfølgelig være den samme mappen. Det første den gjør er å definere den virtuelle tjeneren for å så sette konfigruasjonen. Dette blir mappen det virtuelle domenet linker til (webrootmappen). Linje 1, 8 og 9 er for at feilmeldingen skal logges i en individuel fil for den virtuelle tjeneren. Disse kan tas bort om en ønsker at feilmeldingene skal logges i den vanlige errorloggen.

Etter de forskjellige .conf-filene er lagret må vi restarte apache. For å sjekke at det ikke er noen feil i conf-filene kan en kjøre /etc/init.d/httpd configtest først. Deretter er det bare å kjøpe domenet example.com og linke det til din servers ip-adresse. Det er viktig at domenet er det samme som i conf-fila. En kan også teste det fra en maskin ved å endre hosts-fila. I Windows XP finner du den her: C:/WINDOWS/system32/drivers/etc. La den se ca. slik ut:

127.0.0.1   localhost
<serverip>   example.com  www.example.com

Lagre fila, omstart nettleseren og skriv inn example.com i adressefeltet. Og that's it! Denne hostsfila kan være morsom å bruke for å feks. lure venner til å tro at sider som feks. Facebook er blitt hacka ved å sette IPen til feks. Nerdvar ;).
Lykke til!


Herschel & Planck i bane

Tema: Vitenskap; sjanger: Artikler
Skrevet av Andreas Nordal den 14. mai 2009 kl 16:06:50; Kommentarer: 0

De to romteleskopene tok av i en Ariane-5-rakett fra Fransk Guyana ved 15:30-tiden i dag og har nettopp skilt lag i rommet som planlagt. Begge vil bli plassert i bane rundt lagrangepunkt 2, som er i skyggen av jorda i en avstand på ca 1,5·109 m. De vil være framme om 2 måneder, Herschel først.

Les mer på esa.eu


Hvordan laste ned fra NRK nett-TV

Tema: Internett; sjanger: Artikler
Skrevet av Andreas Nordal den 13. januar 2009 kl 00:25:32; Kommentarer: 32

  1. Søk etter "var WM_url" i kildekoden til den aktuelle siden. OPPDATERING: Søk heller etter "mplayer2".
  2. Den etterfølgende lange URL-en leder til en XML-fil. Last ned denne.
  3. De to like URL-ene som starter på "mms://" og slutter på ".wmv" leder til filmen. Last den ned med et program som støtter mms-protokollen, for eksempel mplayer eller VLC.

Videoen under viser prosedyren. Opptaket er gjort med recordmydesktop.

Direktelink til min video (12,6 MB Ogg Theora uten lyd)

Bønn til NRK: Så enkelt kan det gjøres

Med denne videoen vil jeg samtidig vise hvordan det skal gjøres. Direktelink til videoen hever brukervennligheten til et tålelig minimum. Det enkleste er å la illustrasjonsbildet til videoen være linken. Det var den beste løsningen jeg fant da jeg skrev dette innlegget i 2009. I 2012 er det derimot HTML5 som gjelder:

<video controls src="NRKnettTVhvordan.ogv" poster="NRKnettTVhvordan.jpg">
</video>
<a href="NRKnettTVhvordan.ogv">Direktelink</a>

Heldigvis begynner NRK å merke at Windows Media Video var et dårlig valg av videoformat. Jeg håper NRK gjør som meg, følger regjeringen og legger ut video i Ogg Theora.

OPPDATERING (november 2011): Nedlastingsgildet vil dessverre ikke vare. NRK planlegger å legge om til Flash. Jeg vet ikke om noen i verden som hater Flash like mye som meg, men her har det i alle fall noe å si at det binære & proprietære filformatet er mindre leselig for hånd. Flash vil definitivt sette meg ut av spill. Det blir aldri helt umulig, for eksempel fins det skript for å lagre videoer fra Youtube, men hvor mange år vil det ta før noen i lille Norge klarer å lage det samme for NRK? Hvis NRK ikke liker at folk lagrer filmene dems, så forstår jeg himla godt at de velger Flash. Det er også den eneste unnskyldningen jeg forstår.


Minner fra krigen

Tema: Diverse; sjanger: Artikler
Skrevet av Stig Magnus Halvorsen den 14. juni 2008 kl 15:18:49; Kommentarer: 1

Hovard Magnus HalvorsenTil minne om Hovard Magnus Halvorsen (21.12.1935 - 12.08.2005)

Dette er teksten min farfar skrev da han fortsatt var i live. Teksten skildrer hvordan barndommen kunne være under Tysklands okkupasjon av Norge. Hovard var veldig ung da hendelsene skjedde, og teksten ble skrevet mange år etter hans barndom. At han husket dette så godt, viser kun hvor stor innvirkning hendelsene hadde på hans liv, og andre barn som levde på den tiden. Teksten fikk jeg utlevert for flere år siden, men det var da jeg arvet hans datamaskin at jeg fikk tak i kildefilen. Nå publiserer jeg den for å minne min dypt savnede farfar.

Jeg var knapt 4 ½ år da krigen kom til Norge. Det eneste jeg husker fra den første tiden var panikkdagen den 10. april. Det gikk rykter om at Oslo skulle bombes av engelskmennene, og nesten alle som bodde i indre Oslo flyktet over hals og hode ut av byen. Vi bodde på Korsvoll (Aker dengang) som nærmest var å betrakte som landet. Mange flyktet derfor ikke lengre enn dit. Jeg husker litt vagt at både i stua og på kjøkkenet var det fullt av fremmende mennesker som lå på flatseng på golvet. Jeg husker også at vi på sommeren en gang måtte innlevere radioapparatet (som vi aldri så noe mere til).

Det var stadig frykt for bombeangrep fra de alliertes side. Vi ble strengt passet på av politiet at blendingsgardinene var ordentlig på plass. Vi fikk innredet et tilfluktsrom i kjelleren med sandsekker foran kjellervinduene og installert vedovn da krigsvinterne var svært kalde. Rett som det var ble vi vekket opp om nettene av luftvernsirenene og måtte komme oss ned i kjelleren. Vi bodde ikke så langt fra Korsvolltoppen der tyskerne hadde et av sine største kanonbatterier. Vi barna skalv av redsel når skytingen var på sitt verste. Heldigvis var det ikke så mange bombeangrep, jeg kan selv bare huske da Victoria-terasse ble bombet og det var om dagen. Jeg kan ennå huske et fly som var truffet fløy over Korsvoll med røyk etter halen og inn over Nordmarka.

Det ble etter hvert mangel på klær, mat og brensel. I og med at vi bodde i et villastrøk med ganske stor hage ble det til at vi dyrket noe mat selv. Gressplener ble spadd opp og det ble i hovedsak dyrket poteter, kålrot og gulrøtter, da dette kunne oppbevares i kjelleren til langt ut på vinteren. Noe frukt og bær hadde vi også. Blåbærene fikk ikke stå i fred i skogen som nå og vi var ofte i «krig» med «bykjerringene» som kom og forsynte seg med de bærene som vi mente var våre. Vi dro også på tur inn i Nordmarka på telttur i helgene for å plukke bær. Sommeren 1942 ble jeg med pappa til Svendsenga ved «Stilla», Akerselva for å hente våre to første kaniner. Min søster og jeg ble svært glade i disse og var nærmest utrøstelige når disse ble slaktet. Etter hvert fikk vi mange kaniner og forstod at disse også skulle bli mat. Høner hadde vi i kjelleren og det ble bygget et lite grisehus der vi hadde en gris sammen med min onkel. Det var ille når grisene skulle slaktes, de skrek jo så fælt. Men etter den var slaktet måtte vi hjelpe til med røre rundt i blodet. Alt på grisen måtte tas vare på og brukes.

Klær var det også lite av og gamle klær ble sprettet opp, vrengt og sydd om på nytt. Helst var det oss ungene som fikk omsydd klær etter foreldrene. Nesten alle varene vi skulle kjøpe var rasjonerte og vi måtte levere merker når vi var ute og handlet. Det var den gang liten forskjell på folk i klesveien. De som hadde nok penger kunne få kjøpt noe på svartebørs, men stort sett var alle like. Ikke så mye merkeplagg dengang, alle gikk med en lapp både her og der. Men mødrene satte sin ære i at klærne skulle være hele og rene. Vi hadde ikke vaskemaskin da og alle klærne ble kokt i bryggerpanna og vasket i bryggerhuset, men det var også mangel på ved. Vinteren 1944/45 husker jeg spesielt. Russiske krigsfanger var utkommandert til å hugge i skogen utenfor der vi bodde. Faren til en kamerat av meg laget kjelker til oss begge av noen gamle ski. Vi slet hver ledige stund så lenge hogsten varte, med å sanke kvist og topper fra grantrærne som kunne brukes som brensel under bryggepanna. Det var et tungt arbeid. Snøen var dyp og kunne enkelte steder nå oss helt til livet. Selv om vi selv ikke hadde så mye mat hendte det at vi fikk smuglet noen brødskiver til russerne, spesielt godt mottatt ble en eske heimavla tobakk. Som takk fikk vi fiske- og fuglefigurer som russerne hadde skåret ut av trevirket.

Jeg begynte på Tåsen skole i 1942, men i 1944 ble skolen okkupert av tyskerne. Den første tiden hadde vi ingen skolelokaler og hadde en kortere tid omgangsskole hjemme hos hverandre. Men etter hvert fikk de tre yngste klassetrinn innredet klasserom på Bakkehaugen hovedgård (de eldre klassetrinn ble sendt til Blindern). Vår klasse holdt til i et ominnredet fjøs. Stua som engang var bebodd av Hans Nilsen Hauge, ble også tatt i bruk. Alle klasserommene var vedfyrte. Ofte var en klassekamerat og jeg tidlig ute og hjalp til med å kjøre veden på en kjelke til de enkelte skolebygninger. Der fyrte vi opp i klasserommene før de andre kom på skolen.
Etter hvert fikk vi svenskesuppe og tran på skolen. Alle hadde med seg en «håndarbeidspose» med en seikakeboks og skje.
Etter krigen flyttet vi tilbake til Tåsen.

Om sommeren ferierte vi som oftest hos pappas familie i Svelvik, men sommeren 1943 var pappa og jeg på ferie på Liggeren i Nordmarka hvor vi hadde noen uforglemmelige fisketurer (senere har det kommet fram at pappa lå i dekning for tyskerne og at jeg var med som skalkeskjul). Tidlig om morgenen den 31.08.1943 ble vi vekket av et forferdelig bråk. Det ble sparket hull i ytterdøra og flere skrek på tysk. Det var Gestapo som kom på besøk. Min onkel som bodde i 1. etasje låste opp, og noen tyskere stormet opp trappa til annen etasje med våpen i hånd. Pappa ble tvunget opp mot veggen i kjøkkenet med armene i været og en maskinpistol i ryggen. Mamma, min søster og jeg ble jaget ned til min onkel og tante. Da vi kom ned så vi at også min onkel og en bror av min tante sto opp langs veggen med armene i været, passet på av en tysker med pistol. Etter et par timer med ransaking fra loft til kjeller så vi fra vinduet at pappa ble kjørt bort i en bil. Det var siste gangen vi så ham. Ca 2 måneder senere ble vi vekket av to av pappas onkler som kunne fortelle at de hadde lest i dagens avis at pappa var dømt til døden og skutt.

I desember 1943 ble jeg operert på Wergelandsveiens klinikk ved Slottsparken. Jeg skulle vært sendt ut av sykehuset lørdag den 19, men på grunn av feber måtte jeg bli over helgen. Søndag den 20. smalt det. Mamma og noen i familien hadde vært på besøk i visittiden for å gratulere med 8 årsdagen. Ikke lenge etter visittiden under middagen kom et stort smell, det virket som om jorda hevet seg og opp kom et stort flammehav. Middagstallerkenen for ut på gulvet. Alle vinduer, og alt som var av glass ble knust. Selv om jeg hadde gips på begge beina måtte jeg på egenhånd komme meg ned i kjelleren. Der satt vi til langt på kvelden og det var stadige eksplosjoner. Ingen visste noe og alle trodde det var engelskmennene som bombet Oslo. Senere viste det seg at en ammunisjonsbåt i Filipstad hadde eksplodert. Ut på kvelden ble jeg kjørt hjem av sivilforsvaret. Selv om jeg var svært redd ble jeg litt stolt da jeg fikk låne hjelmen til en av de fra sivilforsvaret.

I 1944 kom jeg med i Tåsen guttekorps. Vi øvet i noen lokaler over Tåsen S.lag. Lang vei, over 3 km å gå for å komme på øvelse, og det var skummelt å gå på veien om kvelden vinterstid uten gatebelysning. Veien hjem gikk forbi Tåsentoppen der tyskerne holdt til, og det hendte vi ble anropt og stoppet.
Tyskerne holdt enkelte ganger øvelser i boligområdet på Korsvoll og det hendte at vi ble vekket at de lå ved hushjørnene og skjøt på hverandre. Riktignok med løsammunisjon (trepropper). Noen ganger fant vi hele patroner. De litt eldre gutta tok ut kruttet og blandet dette med svovel. Blandingen ble dyttet ned i en stabbursnøkkel, deretter en spiker festet til en hyssing og ble smelt av ved at spikeren ble slengt mot en vegg. Det gikk som oftest bra, men noen mistet en finger eller fler.
Vi hadde kanskje ikke så mange lekemuligheter som nå, men vi hadde ballspill, hinket paradis og hoppet tau. Det var populært å vippe pinne, en lek som synes å ha blitt helt glemt. Om sommeren laget vi indianerlandsbyer med barhytter, og var det fint vær var vi på «Stilla» (badeplass ved Akerselva) hvor vi badet, spilte kort (spardam). Brødskiver og saft hadde vi med oss. Ellers fulgte vi med når de store gutta kastet på stikka, eller kappet land.
Om vinteren var vi ofte på ski. Vi bygget oss mindre hoppbaker og slalomløype.

Den 7. mai 1945 skulle kameraten min og jeg på korpsøvelse. Men da vi kom på øvelsen fikk vi beskjed om at denne var avlyst; Det var fred (tyskernes kapitulasjon skjedde først dagen etter, 8. mai)! På veien hjem ble de første flaggene heist. Hjemme fant vi fram våre egne flagg, vi hadde jo gått illegale 17. mai tog hvert år under krigen, riktignok ute på en skogsvei og inne blant husene. En nabo hadde fått gjemt bort sitt radioapparat. Alle i nabolaget samlet seg der og min bestemor laget en stor bolle med eggedosis. Den første fredsfest av mange, men med et stort savn.

- Morfar


Kroppens selvforsvar; immunforsvaret

Tema: Vitenskap; sjanger: Artikler
Skrevet av Stig Magnus Halvorsen den 28. februar 2008 kl 22:34:01; Kommentarer: 1

Har du noen gang lurt på hvordan kroppen klarer å helbrede seg selv? Eller hvorfor man kun får vannkopper en gang, mens man kan få forkjølelser flere ganger i året? På barneskolen lærer man at det er de hvite blodcellene som er kroppens soldater. De dreper og spiser sykdomsbakterier, og gjør slik at man ikke får samme sykdom igjen. Sannheten er at de hvite blodcellene er litt mer kompliserte, og de kan ikke berge deg fra alt.

Immunforsvaret kan deles opp i to grupper; det ytre og det indre forsvaret. Men hvorfor skal vi ha et ytre forsvar, når problemene oppstår på innsiden? Det er fordi det ytre forsvaret stopper mange bakterier og virus fra å komme inn i kroppen. Hvis man først blir syk, så har bakterien eller viruset kommet inn igjennom en av kroppens åpne innganger. Kroppens åpne innganger er munnen, nesa, øret, kjønnsåpningen, anus, og øyne. Det viktigste ytre forsvaret som kroppen har er huden, den hindrer at bakterier trenger inn og den dreper uønskede organismer. Når man har tørr og/eller syk hud kan det bli sprekker i huden, og bakterier kan komme inn. Det kan føre til infeksjoner eller sykdom.

Men de seks inngangene har også egne forsvarsmekanismer, om de ikke hadde det ville vi ha vært mye oftere syke. I svelget, eller halsen har vi små flimmerhår som stopper bakteriene som vi puster inn igjennom munnen. Det er også disse flimmerhårene som gjør at du kan hoste, og på den måten slippe bakteriene ut igjen. Flimmerhårene er også med på å fange opp store objekter, for eksempel når man setter noe fast i halsen. De hjelper til, slik at du kan hoste opp det som sitter fast. Forskning har vist at røyking ødelegger disse verdifulle flimmerhårene, så dermed øker faren for å bli syk ved røyking. Hvis man slutter å røyke, vil hårene gradvis vokse ut igjen.

Tårer er ikke noe som nødvendigvis kommer av frykt, sorg eller andre følelser. De er en del av det ytre immunforsvaret, for å hindre uønskede organismer å komme inn i øyet. Samtidig holder tårene øyet rent. At øynene begynner å svi og renne når man skjærer løk er øynenes forvarsreaksjon mot partikler fra den sterke løken.

Om ikke det ytterste forsvaret er nok, så har vi også et siste forsvar før bakteriene blir det indre forsvarets problem. Det er slimhinnene, et cellelag som ligger mellom det indre og det ytre i nesa, munnen og tarmen (endetarmen regnes som et ytre organ). Et eksempel på dette er snørr. Det er en blanding av vann, proteiner, sukkerarter og bakteriedrepende stoffer. Snørr blir produsert i nesas slimhinne, og dets oppgave er å fange opp støv, bakterier, virus, pollen og lignende. Det hindrer da at det kommer inn i kroppen sammen med lufta vi puster. For å hindre at snørret kommer ned i lungene, er nesa full av små flimmerhår som snørret fester seg til. Om man ikke snyter, eller nyser ut snørret, vil det etter hvert tørke rundt partiklene som det har fanget, og bli til det vi kaller en «buse». Når man nyser blir snørr og luft skutt ut av nesa i en hastighet på over 100km/t. Grunnen til at snørret renner når man er forkjøla, eller har allergi, er at slimhinnene produserer ekstra mye snørr. Snørret er som oftest gjennomsiktig og tynt, men det kan også bli grønt eller gult. Da tyder det på infeksjon.

I det indre immunforsvaret spiller blodet en viktig rolle. Blodet består av en blodplasma og blodceller. Blodplasma er en fargeløs veske som blodet blir transportert gjennom. Blodcellene blir delt inn i tre grupper; røde blodceller, hvite blodceller og blodplater. De røde blodcellene er de som frakter oksygen og næring rundt i kroppen, og er de cellene som først blir angrepet når man får malaria. De hvite blodcellene er kroppens eget selvforsvar. Blodplater er det som gir blodet evnen til å størkne, og er der for å stanse blødninger. Blodplatene utgjør ca. 45% av blodets volum (innhold) og er det som danner skorper på sår når vi skader oss. Skorpen lukker det åpne såret slik at uønskede organismer ikke kan trenge inn i kroppen. I blant kommer det også verk i såret, og dette hjelper til med å drepe organismene. Verk er en gulfarget veske. Blodet får sin rødfarge fra et jernholdig protein som finnes i blodcellene, kalt «hemogloblin».

Blodet kan også brukes til å finne ut om man er syk. Hvis man tapper en liten mengde blod og lar det stå, vil de røde og de hvite blodcellene skille seg ifra hverandre. Hvis det da er mest hvite og lite røde blodceller betyr dette at personen er syk. Dette er fordi at når man er syk blir det sendt signaler til lymfekjertler som vi har på kroppen (blant annet i halsen). Det er disse som produserer de hvite blodcellene, og de produserer ekstra mye når man er syk. Da kan produksjonen øke så mye at lymfekjetlene svulmer opp, og man får kuler ett eller flere steder på kroppen.

I kroppen finnes det forskjellige typer hvite blodceller. De deles inn i hovedkategoriene: antistoffproduserende celler, huskeceller, eteceller (makrofag), og angrepsceller. Og de har alle forskjellige og viktige oppgaver. Definisjonen på et serum er proteiner, antistoffer, og mange forskjellige hvite blodceller.

Antistoffer er proteiner som kjenner igjen fremmede organismer, og sender signaler til andre celler om hva disse cellene skal gjøre med organismet. Antistoffene er formet som en Y og fester seg til organismene, de vil da si ifra om dette er en uønsket organisme.

En B-celle er en antistoffproduserende celle. Når et antistoff sender ut signal om at den oppdager en uønskede organisme, vil b-cellen motta signalet og den vil da starte å formere seg og antistoffer blir produsert. Den vil igjen sende signaler til etecellen, slik at den kommer og spiser opp den fremmede organismen. Etter at B-cellen har gitt fra seg fremmedelementet til etecellen, vil den bli omdannet til huskeceller.

Huskeceller er det som gjør kroppen immun mot sykdommer. Hvis du har hatt vannkopper som barn, vil huskecellene huske dette. Slik at neste gang dette viruset rammer kroppen din, vet huskecellene akkurat hva de skal gjøre for å bekjempe det. Da blir det bekjempet før det rekker å påvirke kroppen. Det er derfor det eksisterer sykdommer som vi kun kan ha en gang.

Sykdommer kan deles inn i to typer infeksjoner; primærinfeksjon og sekundærinfeksjon. Et godt eksempel på primærinfeksjon er forkjølelse, det er når cellene bruker all energien til å bekjempe infeksjonen. Sekundærinfeksjon er mer alvorlig. Et eksempel på dette er bihulebetennelse. Det er en infeksjon som sniker seg inn mens immunforsvaret fortsatt er opptatt med å bekjempe primærinfeksjonen. Det finnes også sykdommer som dekker seg med menneskeceller og på den måten blir skjult for immunforsvaret, som da tror at det ikke er en trussel. Eksempler på dette er tuberkulose (bakterie), spedalskhet (bakterie), og Borreliose som man kan få fra flått. Disse legger fra seg små spor som immunforsvaret legger merke til. Da blir det sendt signaler til angrepsceller. Da kommer angrepscellen og spiser opp hele cellen, og på den måten starter kroppen å spise opp seg selv.

Det finnes flere måter å forhindre sykdom på. Noe av det viktigste er å ha en god helse og å være sunn. Spis sunn mat, ha god hygiene og beveg deg (trene). En annen viktig faktor er å ikke stresse. Stress lurer kroppen til å tro at stresset er det viktigste, og da tar den fokus vekk fra immunforsvarets funksjon. Det er også noen sykdommer som kroppen selv ikke klarer å bekjempe og for disse tar vi vaksiner. Alle barn i Norge blir vaksinert på grunnskolen. Eksempler på vaksiner som blir tatt er polio, BCG (mot tuberkulose), og stivkrampe. Når man vaksinerer seg, sprøyter man inn en liten mengde av en sykdom (for eksempel en bakterie), slik at kroppen utvikler huskeceller mot sykdommen. Da blir man immun. Det blir også brukt klonede bakterier. Disse bakteriene er sykdommer som har vært igjennom en kjemisk prosess flere ganger, slik at den mister funksjonen som kan skade kroppen. Men allikevel klarer immunforsvaret å produsere huskeceller, slik at kroppen kan forsvare seg mot sykdommen.

Som nevnt tidligere, har kroppen en mulighet til å bli immun mot mange sykdommer, og det finnes sykdommer hvor kroppen krever vaksine og kjemisk hjelp (medisin) for å bli frisk. Antibiotika er en hjelper for immunforsvaret som hjelper kroppen med å utrydde en sykdom, uten at kroppen nødvendigvis blir immun. Antibiotika virker kun på celler og levende organismer. Antibiotika dreper ikke menneskeceller siden disse ikke har en cellevegg (hinne rundt cellene). Antibiotika ødelegger celleveggen til uønskede celler og bakterier, og da klarer de ikke å formere seg. Til slutt blir de da utryddet. Eksempler på antibiotika er penicilin (det første man prøver), en type antibiotika som blir produsert i sopp. En annen er Tetracyklin, som brukes mot kviser men har bivirkningen at den ødelegger tennene.

Hvordan framtiden for immunforsvaret og sykdom vil bli, er alltid usikkert. I dagens situasjon er det stadig forskning på diverse sykdommer, og utvikling av nye vaksiner er i full gang. Blant annet prøver forskere å finne en løsning på HIV og AIDS. Men selv om vi klarer å bekjempe flere sykdommer, vil det alltid dukke opp nye, som igjen vil føre til mer forskning. Det er også snakk om å innføre nanoteknologi. Det vil være små chiper som blir sprøytet inn i kroppene våre og kan gi informasjon om vår helse. De vil kunne si ifra om sykdommer som vi har og kunne fortelle oss når vi holder på å bli syke. På den måten kan sykdommer som kreft oppdages raskere, og da behandles mer effektivt. Men det er en ulike meninger om dette teknologiske gjennombruddet, da faren for at nanoteknologi kan bli misbrukt er stor. Allikevel får vi håpe på en stabil fremtid med enda færre alvorlige sykdommer uten at det går på bekostning av moral og etikk.


Kilder:


30 år igjen av unix-tiden

Tema: Programvare; sjanger: Artikler
Skrevet av Andreas Nordal den 19. januar 2008 kl 02:21:00; Kommentarer: 0

I 2038 vil mange av dagens dataprogrammer begynne å telle tiden forfra igjen, fra år 1901. Det siste sekundet definert i unix-tiden er 19. januar 2038 04:14:07 norsk vintertid. Så vil klokkene hoppe tilbake til 13. desember 1901 klokka 21:45:52. Det er allerede et problem at programmer ikke kan håndtere tidspunkter mer enn 30 år fram i tid. Dette gjelder ikke bare programmer på unix; i programmering er unix-tiden standarden over alle tidsstandarder. Heldigvis ligger det an til å omdefinere den etter hvert som 64-bits-prosessorer tar over. Med 64 bit vil den nye unix-tiden romme mer enn 292 milliarder år både forover og bakover.

Les mer: en.wikipedia.org/wiki/Year_2038_problem