Tema: Programvare; sjanger: Meninger
Skrevet av Andreas Nordal den 22. november 2009 kl 00:00:48; Kommentarer: 6

Ryktene skal ha det til at det i praksis er vanskelig å høre kvalitetsforringelsen som oppstår når man lagrer lyd i mp3-formatet. De som mener dette har tydeligvis ikke tatt i betraktning mp3-formatets akilleshæl. Hvis du tester dette selv, tror jeg du vil være enig med meg i at man skal være 100% døv for å ikke høre forskjellen. Jeg forutsetter da at mp3-dekoderen ikke prøver å maskere problemet ved å mikse overgangene sammen.
lame -b 128 -f 8.wav -o 8.mp3 lame -b 128 -f 9.wav -o 9.mp3 oggenc -q -1 8.wav -o 8.ogg oggenc -q -1 9.wav -o 9.ogg
Bildene er skjermskudd fra lydredigeringsprogrammet Audacity, og viser skjøten mellom 2 sanger i forskjellige lydformater. All lyd i denne testen er i stereo, det vil si at hvert par av det som kanskje likner på separate lydspor, egentlig henger sammen som ett stereospor, der øverste spor styrer venstre høyttaler. At de henger sammen er synlig i det høye bildet til høyre (som er snudd på høykant for å få plass). Stereosporet som her var øverst er originalen, mens mp3 var under (nå: venstre).
Som bildet nedenfor viser, passer lydbølgene fra slutten av den første sangen sammen med lydbølgene til den neste. Jeg kan forsikre at det også hørtes slik ut, dvs. overgangen var umerkelig. Det gjelder både wav- og ogg-filene. Nå lurer du kanskje på hvorfor jeg omtaler wav som flac, men wav-filene er bare ekstrakter av flac-filene som jeg rippa. Siden det er kvaliteten vi snakker om, er disse formatene ekvivalente (Wav er ukomprimert og FLAC er en tapsfri kodek). Siden alt stammer fra flac-filene, kan jeg konkludere med at overganger mellom sanger blir perfekt bevart når man ripper en CD til FLAC.

Den store overraskelsen var Ogg Vorbis' overlegenhet over mp3. Mens mp3-filene ble kodet med 128 kb/s, noe som er ganske typisk, ble ogg-filene kodet med laveste kvalitetsnivå (-1), noe som resulterte i henholdsvis 54,4 og 56,2 kb/s. Ingen ville finne på å kode mp3 med så lav bitrate (bortsett fra youtube tenker jeg), og jeg skal innrømme at kvaliteten ble hørbart dårligere, men like fullt: Ikke en plancktid glipp i overgangen mellom sangene med Ogg Vorbis. Med tanke på at både Vorbis og mp3 bygger på diskret kosinustransformasjon, ble jeg litt overrasket, selv om alle vet at Ogg Vorbis er bedre enn mp3. Uansett er det viktigste for meg å unngå glipp i overgangen mellom sangene. Det er, i motsetning til all annen snikksnakk om lydkvalitet, så påfallende at man skvetter til selv om man ikke hører godt etter eller er i støyende omgivelser.
Resultatet er at hele lydfila blir lenger enn den skulle vært, og at det er umulig å gjette presist hvor den egentlig skulle ha starta og slutta. Noen dekodere er bedre til å gjette enn andre; det som høres bra ut på musikkspilleprogrammet ditt, er kanskje noe annet for CD-brenneprogrammet for eksempel. Heldigvis for meg, gjettet Audacitys dekoder dårlig nok til at jeg fikk demonstrert fenomenet med disse bildene.
OPPDATERING 13. desember 2009 05:20
Fenomenet har (tydeligvis) ikke noe med bitrate å gjøre: Jeg ville undersøke hvordan mp3 med grisehøy bitrate takler overganger mellom sanger. Bitraten ble dessverre maksimalt 320 kb/s med lame (selv om jeg ba om 1000 kb/s). Den største filstørrelsen lame ville gi meg, fikk jeg med "lame --preset insane". Resultatet ble at med 320 kb/s mp3, fikk pre- og post-ekkoene stort sett så lave amplituder at de ikke syns på bildet (lavere enn et piksel), men like fordømt: Glippen i overgangen har akkurat like lang varighet.
Trykk på bildene nedenfor for å kikke nærmere på saken:
FLAC er tapsfritt, så ripper du en CD til FLAC, kan du trygt knekke den etterpå. FLAC tar vare på metadata, i motsetning til wav. Hvis tapsfri kompresjon ikke er tingen for deg, husk at alt (unntatt mp2) er bedre enn mp3. Som eksempel har jeg vist at Ogg Vorbis fungerer fortreffelig i overgangen mellom to sanger, mens mp3 er totalt udugelig på dette. Hvis du skulle finne på å brenne en lyd-CD, sørg for å bruke "disc at once"-modus (DAO), og ikke "track at once" (TAO). Det siste fører til 2 sekunders pause mellom hvert spor.
Tema: Vitenskap; sjanger: Artikler
Skrevet av Andreas Nordal den 12. oktober 2009 kl 01: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.
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;
}
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
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)
|
; swap3.s (modifisert) aka swap4.s
|
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
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.
| Maskin | 0: XOR-swap | 1: std::swap | 2: temp-swap | 3: registerswap (gcc) | 4: registerswap (fiksa) | 5: xchg-swap | 6: 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_64 | 34,226s 34,066s | 27,266s 27,306s | 11,629s 11,805s | 12,485s 12,565s | 9,737s 9,781s | 72,569s 72,817s | 9,465s 9,397s |
| gammel stasjonær: AMD Athlon XP 2600+ 1,9GHz, GCC 4.3.0, Linux 2.6.27.25 i686 | 39,19s | 47,20s | 14,16s | 16,17s | 12,41s | 49,47s | 8.93s |
| ny server: Intel Xeon 3,2 GHz (4 prosessorer), GCC 4.2.4, Linux 2.6.24-24 i686 | 20,48s 20,35s | 40,77s 40,44s | 10,61s 10,72s | 8,18s 8,26s | 6,92s 7,13s | ||
| gammel server: Intel Pentium III Coppermine 936MHz (2 prosessorer), GCC 4.1.1, Linux 2.6.18 i686 | 87,34s 87,38s | 111,22s 109,07s | 36,85s 36,83s | 23,39s 23,79s | 18,41s 18,40s | ||
| gammel laptop: Intel Pentium 4 2,0GHz, GCC 4.3.2, Linux 2.6.27 i686 | 116,471s 116,219s | 105,799s 100,218s | 40,050s 37,802s | 28,274s 27,650 | 22,333s 21,786s | ||
| server: Intel Xeon 2,83 GHz, GCC 4.2.4, Linux 2.6.24 | 28,12s | 23,88s | 10,16s | 8,74s | 7,71s |
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.
Tema: Programvare; sjanger: Artikler
Skrevet av Stig Magnus Halvorsen den 3. oktober 2009 kl 01: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.
Tema: Internett; sjanger: Tullprat
Skrevet av Stig Magnus Halvorsen den 20. juli 2009 kl 09:39:50; Kommentarer: 0
Eternal Moonwalk er en nettside som viser hvordan kreativitet kan brukes til å gi en skikkelig hyllest. Det er noe personlig som får en til å ønske å delta selv. Siden går ut på at hvem som helst kan laste opp en Moonwalk der man går fra høyre til venstre over skjermen. Siden som starter med Michael Jackson som går over skjermen, laster hele tiden inn nye filmklipp og dansen fortsetter inn i evigheten.
Michael Jackson er en av de største (om ikke den største) artistene som har hvert. Hans nylige død har som hendelsene i slutten av hans karriere, skapt et stort mediakaos! Siden hans død har han så og si vært i nyhetene hver eneste dag. Det blir heller ikke noe bedre av at det lanseres teorier om legedrap og om at han iscenesatte sin egen død (som noen fans håper på) for å slippe unna. Det har også dukket opp to mistenkelige videoer som har skapt stor oppsikt. Den ene videoen inneholder noe som kan være Michael Jacksons spøkelse i Neverland og den andre om at likposen setter seg opp i luftambulansen.
Personlig mener jeg ikke noen av videoen er spesielt aktuelle og jeg synes vi skal gi mannen fred. Han er død, og jeg synes virkelig at hans familie og venner burde slippe å få se stadige nye "skandalenyheter" og "nye funn" rundt hans død. Dermed ser jeg på denne siden som en motsetning til resten av medieoppstyret, faktisk noe positivt:
Tema: Diverse; sjanger: Prosjekter
Skrevet av Stig Magnus Halvorsen den 18. juni 2009 kl 13:21:52; Kommentarer: 3
nerdMail v1.0.2 - mailclass with attachments
Ettersom jeg ved gjentatte ganger har måtte sende epost med mine PHP-skripts, så bestemte jeg meg til slutt for å skrive en klasse for å gjøre hverdagen enklere. Jeg skrev den i hovedsak for å selv spare tid, men jeg tenkte også på andre da jeg skrev klassen; at den er brukervennlig. Klassen er ikke kun for å sende vanlige tekstepost, du kan også sende eposten som html, eller sende både en tekst- og htmlversjon. Den har også støtte for alle typer vedlegg, flere mottakere (også cc og bcc), en kraftig emailverifisering, anti-injectionfunksjon og det er enkelt å legge til/modifisere headere i eposten.
Etter å ha blitt fornøyd med førsteutkastet, så spurte jeg om tilbakemelding på Norsk Webforum. Der fikk jeg god konstruktiv kritikk og etter flere endringer virket det som koden er stabil og brukerne fornøyde. Så da lanserte jeg den som versjon 1.0.
Trykk her for å se kildekoden
Trykk her for å laste ned kildekoden (zip)
Alle har lov til å bruke den til hva dere vil uten å gi meg creds, men dere har ikke lov til å oppgi koden som egen. Det betyr at den er OpenSource, at dere kan bruke den i alle slags prosjekter og hva en nå dere måtte ønske å benytte den til. Unntaket er at dere ikke har lov til å si at dere skrev den originale klassen (blir litt drøyt å kalle det kjernen) og dere har ikke lov til å selge koden individuelt. Altså dere kan selge systemer som benytter klassen, men å selge selve klassen som et eget produkt er forbudt.
Ved å bruke koden godtar du at jeg ikke tar noe ansvar for og gir ingen garanti for andres eller egen bruk av koden. Jeg tar ikke på meg noe ansvar og skal ikke bli beskyldt om koden på et mystisk vis skal skape noen form for skade, feilmeldinger eller om den simpelthen ikke virker. Dette sier jeg ikke fordi koden er farlig, men kun for å fraskrive meg alt ansvar.
Hent inn klassen og sett standard variabler
require_once("mail_class.php");
$mail = new nerdMail;
$mail->subject = "The New PHP Mail"; // Meldingens emne, ikke obligatorisk
$mail->sender = "Nerdvar <no-reply@nerdvar.com>"; // Avsender, kan også kun være en epostadresse
$mail->returnPath = "bounce@nerdvar.com"; // Ikke obligatorisk, lurt for å ikke bli kategorisert som spam
Legg til mottakere
$mail->addMail("to", "enfyr@domene.com"); // Vanlig mottaker
$mail->addMail("to", "enannenfyr@domene.com", true); // Enda en mottaker med epostverifisering, returnerer false om ugyldig
$mail->addMail("cc", "kopi@domene.com"); // Legg til en kopimottaker
$mail->addMail("bcc", "blindkopi@domene.com", true); // Verifiser epost og legg til en blindkopimottaker, returnerer false om ugyldig
Definer epost body (meldingen), html eller text må defineres (kan også være begge).
$mail->text = "Hei\n\nAt du ser dette betyr at din epostklient ikke støtter eller har deaktivert html. Det var synd!\n\nJaja, du får ihvertfall eposten i klartekst og kanskje en link til online-versjon\n\nHils!";
$mail->html = "Din klient støtter HTML! Her kan du legge inn alle mulige HTML-koder...";
Legg ved noen vedlegg (attachments) og endre noen headere:
$mail->attach("mockup.jpg", "image/jpeg");
$mail->attach("http://no.php.net/images/php.gif", "image/gif");
$mail->attach("myapp/readme.txt"); // Om du ikke definerer metatype (filtype) blir den satt til application/octet-stream
$mail->attach("myapp/readmetoo.txt", "text/plain", BIT7); // Om du ønsker BIT7-enkoding på attachment istede for base64, unormalt
/* Har valgt å bruke url istede for noe annet, da fungerer den på både å legge til nyopplasta filer og eksisterene filer */
//Modifiser noen headere
$mail->addHeader("Message-Id", "kodenr@mittdomene.com");
$mail->addHeader("List-Unsubscribe: <http://dittdomene.com/unsubscribe.php>");
/* Denne funskjonen vil også overskrive de standard headerne som blir satt av klassen om du definerer de med addHeader
Standard definerte headere er: mime-version, content-type, from, reply-to, cc, bcc, to (De fem siste blir satt av tidligere nevnte funskjoner) */
Send eposten:
$mail->send(); // Returnerer true / false
Tilleggsfunksjoner
$mail->parseMail($email);
/* Kan også brukes slik nerdMail::parseMail($email) (om du ikke har satt $mail)
Den tar både "dittnavn@domene.no" og "Ditt Navn <dittnavn@domene.no>"
Den sjekker eposten med regExp og sjekker om mailserveren "domene.no" eksisterer
Fin til å bruke feks i et kontaksskjema hvor avsender skriver inn sin epostadresse */
$mail->antiInjection($field);
/* De som har erfaring med å sende mail fra PHP vet at det er en fare ved iputfelter som
inkluderes i mailen. Om man ikke sjekker dette kan andre bruke ditt simple epostskjema til
å spamme andre. Denne funskjonen sjekker om noen prøver dette. Burde settes på
input subject, input eposter og evt. input headerinformasjon. Kan også brukes
slik: nerdMail::antiInjection($email) (om du ikke har satt $mail)
Gir true hvis injectionforsøk blir oppdaget */
Tema: Programvare; sjanger: Artikler
Skrevet av Stig Magnus Halvorsen den 16. mai 2009 kl 17: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!
Tema: Vitenskap; sjanger: Artikler
Skrevet av Andreas Nordal den 14. mai 2009 kl 14: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
Tema: Internett; sjanger: Tullprat
Skrevet av Andreas Nordal den 23. februar 2009 kl 16:32:06; Kommentarer: 0
Gikk du glipp av talen til Richard Stallman 23/2 2009 i Oslo? Jeg gjorde et opptak av NUUGs videostrøm og lagret det her:
media/Stallman_Oslo_23feb2009.ogv (740 MB, Ogg Theora+Vorbis, ca 3 timer).
Her er noen utvalgte og glimt fra videoen, klikk for større bilde:

Tema: Internett; sjanger: Artikler
Skrevet av Andreas Nordal den 12. januar 2009 kl 23:25:32; Kommentarer: 41
Denne artikkelen ble oppdatert og delvis omskrevet 6. april 2012.
Videoen under viser hele prosedyren på 80 sekunder, slik jeg gjør det. Fra besøk av nrk.no, til NRKs video strømmer inn på harddisken og samtidig spilles av. Jeg brukte mpldl til å laste ned.
Direktelink (8,4 MiB Ogg Theora uten lyd)
Her er også den gamle videoen, som viser hvordan jeg gjorde det i 2008. Den er utdatert, fordi det ikke lenger funker å søke etter "var WM_url" i kildekoden til NRK, og msdl funker ikke lenger som nedlastingsprogram. Metoden jeg brukte var også en smule mer omstendelig.
Direktelink (13 MiB Ogg Theora uten lyd)
Direktelink til videoen er etter min mening det viktigste av alt, fordi det hever brukervennligheten til et minimum som ingen kan klage på. Dernest gjelder det å velge en hovedløsning som er så brukervennlig som mulig uten å tråkke på brukernes programvarefrihet. I 2012 vil det si HTML5. Slik har jeg gjort det:
<video controls src="NRKnettTVhvordan.ogv" poster="NRKnettTVhvordan.jpg"> </video> <a href="NRKnettTVhvordan.ogv">Direktelink</a>
En side som har vært pionér på HTML5 er vgtv. All ros til dem. Jeg har ennå ikke hatt behov for å lagre noen av videoene derfra. Det er fordi HTML5 bare funker, på tross av at de har valgt H.264 som videoformat. Jepp, H.264 funker i Konqueror hos meg, ikke spør meg hvorfor.
I januar 2009 skrev jeg: «Jeg håper NRK gjør som meg, følger regjeringen og legger ut video i Ogg Theora.» Da var jeg positiv til en mulig utskiftning av dagens Microsoft-baserte løsning. Nå ser det derimot enda mørkere ut: NRK planlegger å legge om til Flash. Jeg vet ikke om noen som hater Flash like mye som meg, men jeg setter pris på å få utøve min programvarefrihet, om jeg så må hacke litt. Å hacke et binærformat som Flash er en helt annen vanskelighetsgrad enn dagens tekstfiler, og vil i praksis sette en effektiv stopper for nedlastingsgildet for min del. Hvis jeg skal prøve å overbevise NRK, tror jeg det er nytteløst å henvise til en viktig sak som at Flash er den største forbrytelsen mot det frie internett noen sinne. Derimot tror jeg et praktisk-orientert argument veier tyngre, som at Flash for Linux er erklært så godt som død av Adobe selv, fra nylig lanserte versjon 11.2.
Til slutt en godbit for linuxbrukere. Ett skript som både laster ned fra youtube og NRK, og spiller filmen mens den lagres. Se video.
Når jeg laster ned en video, så er det faktisk for å SE den (helst med en gang), ikke primært for å lagre den (det tar jeg som en bonus). Skal man leve uten Flash og Windows Media Player, er man ennå nødt til å gå veien om harddisken for å benytte noen tjenester. Jeg var lei av rutinen med å laste ned i den ene terminalen, åpne ny terminal, lete etter den nye fila, for så å spille den av i den andre terminalen. Dette skriptet starter den respektive nedlastingsprosessen i bakgrunnen, venter på at fila dukker opp, og bufrer noen sekunder før det starter avspilling.
#!/bin/bash case "$1" in 'http://'*) stub=(youtube-dl -q --no-part -o) base="${1##*v=}" base="${base%%&*}".mp4 buffertime=1 ;; *) stub=(mplayer -dumpstream -dumpfile) base="${1##*/}" buffertime=5 ;; esac if [ $# -eq 2 ]; then f="$2_(${base%.*}).${base##*.}"; elif [ $# -eq 1 ]; then f="$base" else exit 1; fi if [ ! -e "$f" ]; then echo -e "Lagrer fil «\e[1;35m$f\e[0m»"; "${stub[@]}" "$f" "$1" & echo -n 'Kobler til' until [ -e "$f" ]; do sleep 1; echo -n .; done echo 'ok' echo "Bufrer i $buffertime sek," echo 'vent til filmen starter selv…' sleep $buffertime fi mplayer "$f"
Tema: Diverse; sjanger: Tullprat
Skrevet av Andreas Nordal den 6. januar 2009 kl 17:22:26; Kommentarer: 0

Fredsbygging handler om å rive murer, bygge broer og grave tuneller. Dette ble ettertrykkelig demonstrert 9. november 1989 med rivingen av Berlinmuren. Rivingen var nødvendig for avslutningen av den kalde krigen. Ulikt Øst-Tyskland, som murte seg selv inne, er palestinerne på Gaza-stripen murt inne av Israel. Situasjonen minner kanskje mer om sør-afrikansk apartheid.
I takt med at israelske bosetninger beslaglegger stadig mer palestinsk territiorium og forsvares med overlegen militærmakt, blir det klart for palestinerne at israels apartheid ikke er noen langsiktig god løsning for dem. Og er det noe Israel bør forvente av et okkupert folk, så er det terroraksjoner. Bare tenk hva norske krigshelter gjorde for Norge da Norge var okkupert, og hvordan de nå blir hedret i filmen «Max Manus». La meg sitere Inga Marte Thorkildsen og Jens Stoltenberg fritt etter hukommelsen: "En okkupert nasjon kan ikke likestilles med okkupasjonsmakten." og "Israel har ansvaret for å stoppe krigen som pågår i disse dager."
Midtøsten ligger i et kulturelt og geografisk veiskille. I områdene omkring oppsto de første sivilisasjonene vi kjenner til. Da de møttes i midten, kriget de. Jeg nevner i fleng: egypterne, sumererne, babylonerne, assyrerne, hetittene, fønikerne, semittene, grekerne, perserne. I disse sivilisasjonene ble vår skrift, historie og kultur i sine tildligste former skapt. Fra de 3 monoteistiske religionene kjenner vi uttrykket "øye for øye, tann for tann". Alle 3 har tilknytning til Jerusalem i Israel, stridens kjerne, eller midten av midtøsten om du vil.
Til Israels forsvar nevnes det at "Terrorgruppen Hamas bruker sivilbefolkningen som skjold" og "Israel har rett til å forsvare seg". Men så er det vel slik at terrorister, geriljakrigere o.l. ofte ER mer eller mindre sivile helter som gjør sitt beste for folket. Kan de beskyldes for det? Begge parter kan i alle fall beskyldes for unødvendig bruk av makt og å provosere motparten som om det var for krigens egen skyld. At det har vært krig i Israel siden homo sapiens vandret ut av Afrika og inn i midtøsten for kanskje noe sånt som 100 000 år siden er en sannhet med få modifikasjoner. Hvis ikke partene kan slutte å unngjelde, vil de måtte holde på til det ikke er flere øyne og tenner igjen.