Sjov mail fra Keepit

Keepit er en backup tjeneste på nettet som jeg var tilmeldt engang, dengang jeg havde en PC. Men da der var en masse fejl med programmet dengang, så fik jeg aldrig rigtig brugt det, selvom jeg havde betalt for det. Jeg havde så imidlertid glemt alt om keepit, indtil i går hvor jeg fik en mail fra dem:

Kære Andreas Joensen

Husk at forny dit abonnement

Keepit har allerede taget backup af 0 filer fra din computer. Lyder det ikke omfattende? Vi vil gerne fortsætte med at sikre dine e-mails, billeder og dokumenter langt ud i fremtiden. Du skal bare give os lov!

Dit abonnement på online backup hos Keepit udløber om -33 dage, så det er tid til at forny det. Det koster kun 468,00 kr at bringe dine filer i sikkerhed helt frem til 28.06.2010. Gør det allerede i dag og slip bekymringerne

Klik her for at forlænge dit abonnement eller Se din faktura

ML vs Java

For at se om jeg kunne finde ud af at programmere i et funktionelt sprog, installerede jeg Standard ML New Jersy version 110. Efter at have kikket på det lidt, er jeg kommet frem til at det er mega genialt. Bare noget som matematisk fakultet, som kan løses rekursivt er smart.

Factorial i smlnj:
- fun fac 0 = 1 | fac n = n * fac(n - 1);

Kørsel og resultat af programmet:
- fac 10;
val it 3628800 : int

Factorial i java:

public class Fac {
    public static int fac(n) {
        if (n == 0) return 1;
        return n * fac(n - 1);
    }
    public static void main(String[] args) {
        System.out.println(fac(args[0]));
    }
}

Kørsel og resultat af programmet:
andreas$ javac Fac.java
andreas$ java Fac 10
andreas$ 3628800

SML både fylder mindre og er mere overskuelig. Den behøver heller ikke compile som Java, hvilke gør en så simpel programmerings opgave som denne alt for besværlig. Jeg glæder mig til at lære endnu mere.

Poker algoritmen færdig

Alle lærerene på skolen er taget til USA i denne uge til noget konference halløj. Hvilke betyder at hele denne uge skal vi ikke i skole (vi får også en hel uge om 2 uger, pga påskeferien :) )

Jeg har indtil videre brugt tiden på at lave en algoritme til at udregne vinderen at et omgang Poker. Jeg har flere gange forsøgt mig med at lave det, men nu føler jeg at jeg ved nok om programmering til at lave den slags og det lykkedes også at lave noget fornuftigt.

Grunden til det blev en Poker “udregner”, er at reglerne er forholdsvist komplicerede og dermed en lidt større udfordring end de simple opgaver der stilles i skolen. Samt at jeg efterhånden er expert i Poker, af al den viden jeg har indsamlet mig fra Stian gennem de seneste år.

Jeg sprang let henover design og analysefasen og sprang direkte til at kode. Det er ikke altid det mest spændende at skulle lave klassediagrammer og den slags, når man bare vil igang med at kode selve algoritmen. Det betød også at når GUIen kom på, så blev koden hurtig ret uoverskuelig.

Algoritmen er udformet så der er en metode til hver type af hænder i Poker som returnere en boolean, hvor sand hvis hånden er af den type. Hvis den er det, så gemmes værdierne af kortene i en array, i stigende orden efter hvor vigtige de er. Dette bruges hvis 2 eller flere hænder er af samme type, så vil en sammenligning af disse arrays til hver hånd kunne afgøre den bedste hånd. Fx hvis der er 2 hånder med tre ens:
Bord: d9, s9, c6, h5, d3
1: h9, h12
2: c9, h11
Så vil hånd 1 vinde da, han har højere kort ud end hånd 2.
De 2 arrays vil således se sådan ud:
1: [6, 12, 9]
2: [6, 11, 9]
Så når man gennemgår dem bagfra, så er vinderen den hvor den er højst første gang.

Det var måske en temmelig rodet forklaring, men ellers kan man selv afprøve programmet:

www.auzzie.dk/poker.jar (kræver Java 1.6)

Garfield multithreaded

Som et brugbart eksempel på multithreading, så besluttede jeg at lave et Java program der henter samtlige afsnit af Garfield fra 1978 frem til i dag (ideen er inspireret af Niels Christian).

Multithreading er ret smart til denne opgave. Uden multithreading, så skal hvert download først oprette en connection til en URL, så skal en InputStream, en FileOutputStream og en BufferedOutputStream oprettes, før billedet kan hentes, hvorefter de skal lukkes igen. Med multithreading kan fx 20 connections oprettes samtidig, og 20 indlæsninger og skrivinger forgå samtidig.

Dette kunne også tydeligt ses i download hastighederne. Hvor ved kun én tråd, så hentede den ved en 40KB/s (Et billede fylder ca. 40KB), mens ved 20 tråde, så var den oppe på 600KB/s (ud af en mulig 1MB/s).

Hvis man ser på hvornår billederne blev oprettet, så tog det en 22 min med multithreading at hente alle billederne. Uden, så tog det ca. 7 min at hente bare en enkel mappe. Det ville have taget 7 min * 31 mapper = 3,5 timer. Da jeg hentede, så gjorde jeg det over 2 omgange, da jeg ikke ville belaste siden alt for meget, så det kunne måske kunne hentes på under 10min (512MB / 1MBps = 8,5min).

Koden kan ses her: http://paste2.org/p/161995
(Jeg har fjernet url adressen, og lavet nogle små fejl, for ikke gøre det for nemt).

Første stribe fra 1978:

Seneste stribe fra i dag 2009:

Der er en ret stor forskel på tegnestilen :)

Zip fil med alle billederne: Garfield.zip (512MB)


Java multithreading

Java kan godt multithreade, men desværre skal man selv designe sit program til at Java udnytter de kerner de fleste moderne CPUer har i dag.

Hvis man vil udnytte det, skal man til at oprette tråde. Her er noget kode der opretter 10 tråde og udskriver et nummer jeg har givet det enkelte tråd. Det interessante er at de ikke udføres lige hurtige og det er ikke til at vide i hvilke rækkefølge trådene køres. Derfor skal det man deler ud i trådene ikke være afhængige af rækkefølgende de udføres i.

Derfor er det heller ikke nemt at lav programmer der udnytter alle ens kerner, fordi det skal være noget der kan køres uafhængig af de andre tråde og hvis tendensen fortsætter med flere og flere kerner, så bliver det svært at finde opgaver til disse kerner. Det kunne være så dejligt, hvis det på en eller anden måde kunne håndteres af Windows eller Java JVM, så man slipper for at skulle holde styr på alle disse tråde.

Herunder har jeg nogle skærmbilleder af en MergeSort algoritme jeg lavede i skolen. Den første er med 1 tråd, hvor man kan se at den kun udnytter halvdelen af CPUens processor kraft. Den anden er så med 2 tråde og udnytter derfor begge kerner.

Én kerne

To kerner

image


Ram sjov

Her er en sjov leg:

1. Lav et java program med følgende kode:


public class RamEater {
     public static void main(String[] args) {
          List list = new ArrayList();
          while (true) {
               list.add((int)(Math.random() * 1000));
          }
     }
}

2. Compile og kør programmer med følgende JVM argumenter:

javac RamEater.java
java -Xmx4096m RamEater

3. Åben Joblisten (hvis du kører Windows) og se hvordan java.exe bare æder og æder ramene.

4. Når al din ram er brugt op, så afslut processen java.exe og prøv at bruge computeren normalt igen. Så begynder computeren at køre rigtig langsomt, indtil dine andre programmer får deres hukommelse lagt ind i rammene fra harddisken.

Her er et skærmbillede fra joblisten på min stationær. Selvom den har 4GB ram og bruger 64bit Windows, så får jeg ikke så meget højere end de 3.000 MB. Enten er det grafikkortet der bruger den sidste ca 800MB, eller så mangler jeg at indstille noget så Windows kan bruge mere end de 3,2GB.


Endelig fået kørekort!

Den 30. april i år gik jeg endelig i gang med at tage mit kørekort. Det er efterhånden en 4 år siden jeg lovligt måtte gå til køreskole og man må sige det var på tide. Så Niels Christian og jeg fandt en køreskole, Tip Top Trafik, og gik igang med teori timer og tage kørelektioner.

Teori timerne var ret kedelige, men jeg fik da lært teorien, og ville nok ikke kunne have kørt i praksis uden, i hvert fald ikke her i Århus midtby. Køretimerne var en del sjovere, selvom jeg var meget nervøs de første par gange og måtte få en del hjælp fra kørelærens bremser.

Så midt i juni måned havde jeg så taget de sidste køretimer, var færidg med teori og havde været på køreteknisk anlæg. Så jeg fik jeg en tid til teoriprøven sidst i juni. Der fik jeg så 6 fejl! Så jeg dumpede og var nok lidt for nervøs, hvilke er min uvindelig problem når det handler om eksamner. Jeg fik så en ny tid i slutningen af juli, da ventetiden er ret lang her i sommerferien. Den bestod jeg heldigvis, med 5 fejl, så jeg var ret glad.

Køreprøven fik jeg ret hurtig, der var lige pludselig en masse nye tider der var dukket op, og den 6. august skulle jeg op. Der var ellers en 5 ugers ventetid, så jeg føler mig heldig, men føler på NCs vegne, da han ikke var så heldig. Selve prøve gik fint, den var utrolig kort, kun 16 min. Jeg skulle slet ikke parkere, jeg kørte bare rundt i byen. De eneste svære steder var nogle højre vigepligter og nogle fodgænger der stod ved en fodgængerovergang.

For at øve lidt kørsel, så skulle far hente en printer jeg havde, og så kunne jeg køre bilen hele vejen fra Århus til Præstø. På vejen kørte vi forbi min Fætter og hans børn. Lige før jeg skulle afsted, så tjekkede jeg min post, og sjovt nok så var min kørekort kommet. På turen fik jeg ret ondt i ryggen, så enten skal jeg træne min ryg for at kunne køre bil, eller så holder jeg mig til min cykel. Det er også langt billigere.


Samlermani

Jeg elsker at samle og har nok en vis form for samlermani. Dog er det ikke fordi jeg ikke kan give slip på det jeg samler, hvilke egentlig er derfor jeg skriver, for at få eviggjort min samling, før det bliver smidt ud. Det lidt svært at forklare den dejlig fornemmelse det er at se på en komplett samling af noget, eller mange af en slags ting.

Denne stak aviser har været en fast del af mit inventar. Den første avis er fra den 2. august 2006 og indtil juni 2008 (med en ½ års pause). En af grundene til jeg vil af med den er, at den lugter meget dårlig, den giver værelset et surt lugt. Den udgør vel egentlig også en vis brandfare, så det er nok bedst jeg skal af med den.
DSC_0662

Min samling af sodavandsflakser. Dog er det ikke mine allesammen, de er drukket i fællesskab med Stian. Alle Faxe Kondierne er dog mine. Det ser ikke helt af så meget når de er placeret så pænt på gulvet, men inden da, så lå de i skabet, og fyldte næsten alle mine hylder, samt noget af Kevins og Niels Christians. Det var også ret sjovt at samle på, men den manglede hyldeplads blev lidt irriterende, og så er der en del pantepenge der.
DSC_0665

Min samling af Guiness World Records og Hvem Hvad Hvor begyndte i julen 1994 da jeg modtog The Guiness Book of Records 1995. Siden da har jeg fået dem i julegave (dog ikke de gange hvor nogen glemte at give mig dem), og de fylder efterhånden temmelig meget. Det lidt sjove ved Hvem Hvad Hvor er at jeg begyndte på at samle dem da jeg kom til DK i 1998, så det er efterhånden en del år jeg har boet i Danmark.
DSC_0711

Læsere af min blog vil nok kunne genkende den skuespillerinde disse DVD er med, nemlig min idol Natalie Portman. Jeg har samlet på alle hendes DVDer, og hver gang en ny udkommer, så modtager jeg den med posten. DVDerne på billedet er sorteret efter udgivelse af filmen, hvor den første, Léon, øverste til venstre er den første og Mr Magoriums Wonder Emporium er den sidste jeg har fået. Jeg venter dog på at Amazon sender “The Other Boleyn Girl”. Det er nok den samling jeg er mest stolt af!
DSC_0704

Mine Drømme

I nat, da jeg prøvede at falde i søvn, surftede jeg lidt rundt på nettet. Der stødte jeg ind i et link på google.coms forside. Egentlig ville jeg tjekke om der stod et tal for hvor mange links google har indekset; jeg hørte at google har indekset 1 billion links, hvilke er ret så mange.

I stedet var der et link til et foredrag af den lige afdøde Rand Pausch, der hed: Achieving Your Childhood Dreams. Foredraget handlede om de drømme han havde som barn og nu hvor han var på sit dødsleje (han havde dødelig kræft), så kunne han fortælle hvordan det gik med at opfylde dem. Det ledte ham også til en snak om drømme og at selvom man støder ind i nogle mure undervejs, så skal man presse på for at få disse opfyldt.

Da jeg jo ikke kunne sove, så lå jeg og tænkte på hvad mine egne drømme var. Det var lidt sjovt, men fordi jeg er lidt perfektionistisk, så var en del af dem nærmere mål end drømme. Altså mål som, at jeg skal få læst alle de bøger jeg har på min reol eller ikke dumpe et eneste eksamen fremover.

Men her er mine 5 drømme:

1. Være pilot ombord et challenger jet fly.

Denne drøm bunder i min store lyst til at flyve. Det ville være fedt at være pilot og så i en lyn hurtig og top moderne jetfly. Det kunne være fedt at cruise verden rundt med folk, med et dejlig hurtig og manøvre dygtig fly. Man kunne så spørge om det ikke var nok med at blive pilot, men min fascination har været i learjets og challenger fly og er også den jeg fortrækker at flyve i Flight Simulator X (ud over militær jet flyvet). Mit køb af ny computer til at spille FSX er en måde at komme tættere på denne drøm.

image

2. Møde Natalie Portman.

Dette håber jeg ikke overrasker nogen. Der er egentlig forskellige trin i denne drøm, opdelt efter hvor svære de er at opnå. Det første er at se hende i virkeligheden, altså på gaden eller lign. Det andet trin er at overvære en forlæsning eller teaterstykke med hende. Det trejde er at få et autograf af hende samt et billede med hende og mig og muligvis også snakke lidt sammen. Hvis bare et af disse trin bliver opfyldt, så vil jeg anse min drøm som opfyldt, men 2. og 3. trin er at foretrække.

image

3. Overvære et OL åbningsceremoni.

Det var noget jeg har drømt om lige siden OL i Atlanta i 1996. Det der var det meste spændende ved hver OL var åbningsceremonien. Det er så enormt storslået og at overvære så et stor ting er noget jeg drømmer om. Det tætteste jeg har været på at få den opfyldt, var da jeg rejste rundt i Australien, der var jeg tilfældigvis i Melbourne samtidig med Commenwealth legene. Der var også et kæmpe show uden for selve stadionet, med fyrværkeri og alle mulige både der sejlede op ad floden. Selv det var en stor oplevelse. Nu er OL næste gang i London, så egentlig er min drøm ikke helt umulig, vil bare kræve at jeg har råd til det når den tid kommer.

image
(billede taget fra floden i Melbourne til åbningsceremonien)

4. Køre Europa rundt i tog.

Jeg var tæt på (delvist) at udleve denne drøm sidste år. Jeg havde helt spontant planlagt et rejse, på nogle dage, til Rom i tog. Dog er denne type spontane rejse ret dyre og i det sidste ende havde jeg heller ikke tid. Men min drøm er at rejse interrail fra Danmark, ned gennem vesteuropa med et smut forbi London (kan være jeg kan slå to drømme sammen), ned til Spanien, tilbage til frankrig, over til Italien, sejle til grækenland, op gennem østeuropa forbi budapest, prag og warszawa til Estland, sejle over til Sverige og så tilbage til Danmark. Måske ret dyr, men der er generelt en grund til drømme er så svære at opnå, og så er det endda min drøm at rejse 1. klasse.

Unavngivet

5. Flyve til Australien i en A380 i Første klasse.

Det fører mig til det sidste, at flyve i en Airbus 380, London til Australien i første klasse. Eller rettere, flyve i en suite. En suite på en A380 er en lukket kabine på flyvet, hvor man har en stor lænestol som sæde, samt en seng der kan tages frem, så man ligger helt fladt. Der er også fladskærm, hvor man kan vælge mellem 100vis af film og alle de afsnit af TV-serier man lyster. Desuden er maden lavet af en kok og man bliver opvaret af en stewardesse. Denne meget dyre drøm skyldes både min fascination af den nye kæmpe airbus, men også at jeg elsker luksus (i modsætning til Maria, der lige nu er i Combodia, hvor der næsten ikke kan blive mere primitiv, og så kan hun lide det!). De gange hvor jeg har taget turen til Australien, der har jeg følet enorm ubehag og har drømt om at komme foran i flyet og kunne falde i søvn i de dejlige stole. Så det er min 5. drøm.

image

Valget i USA

Jeg har sådan set ikke noget specielt klogt at sige vedr. det amerikanske præsidentvalg, bare at McCain virker lidt uheldig, og jeg kan konstatere det går godt for Obama. Jeg hører også kun om valget på satire programmer som The Colbert Report, så nogen saglig vurderingsgrundlag har jeg ikke.

Men jeg fandt lige denne sjove video af valget, som på satrisk vis rammer plet mht hvordan valg i USA forgår:

Send a JibJab Sendables® eCard Today!

« Previous Entries Næste side »