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.

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.


Mosaic mit liv

Nu hvor Lars og jeg praktisk talt er kærester (intern joke), så blev jeg nødt til at kopiere hans stjålne mosaic koncept. Legen går ud på at svare på nogle spørgsmål gennem flickr, og vælge et billede på det første side, som man laver et mosaic af.

Spørgsmålene:

1. Mit navn
2. Min livret
3. Mit yndlingsdyr
4. Min yndlingsfarve
5. Min kendis-flamme
6. Min yndlings drik
7. Mit drømme ferie mål
8. Min yndlings dessert
9. Når jeg bliver ældre vil jeg være
10. Det jeg elsker mest i mit liv
11. Mig beskrevet med ét enkelt ord
12. Mit Flickr-navn

Og resultatet:

1. ANDREA, 2. Lammesteg, 3. This is your cat on drugs., 4. Blue Sky and Clouds, 5. Natalie Portman, 6. Ekspres Letmælk, 7. Rome and his churches, 8. 20070802 Rob’s Banana Split, 9. News Reel – Photo by Pilot, 10. {side-splitting laughter}, 11. i heart nerds, 12. Billede (4)

WEI 5,7!!

Jeg valgte at købe computeren, som var, med nogle få undtagelser, næsten de samme dele som jeg bloggede om sidst. Jeg har brugt hele dagen på at lave og lege med den og alt virker som det skal. Dog blev jeg en anelse bange undervejs. Jeg havde fået det hele til at køre, men da jeg målte computerens WEI tal (Windows Experience Index), så fik jeg grafik til sølle 3,7. Det er næsten det samme som min bærbar og så har Flight Simulator X en min på 4.0 og en anbefalet på 5.0. Men så heldigvis opdagede jeg, at jeg havde glemt at sætte nr. 2 størm kabel til grafikkortet, hvilken gav 5,9 på WEI, hvilke er det højeste tal man kan få. Det der trækker ned er processoren, det skulle have været en Quad Core for at få det op til 5,9. Dog hvis jeg finder en større køler til min CPU, så kunne den overclockes til 5,8.

Min WEI score. Jeg var ret glad da jeg så det tal!!
wei

 

Så måtte jeg prøve køre FSX. Her er et screenshot af en EH-101, som er det nye danske redningshelikopter, der flyver henover storebæltsbroen.

2008-7-11_0-27-56-540 

Nu er det ret sent og jeg roder som aldrig før, så blogger ikke alle detajlerne, det gør jeg først engang i næste uge.

Flight Sim PC setup

Jeg har længe kunne tænke mig en stationær computer. Specielt fordi jeg gerne vil spille Flight Simulator X, som ikke vil spille på min bærbar, selvom købte en bærbar med ordentlig (troede jeg) grafikkort, til netop det formål.

Jeg har læst lidt omkring og for at køre FSX, så kræver det en CPU med en høj clockfrekvens og ikke mere end 2 kerner. Så er det selvf. godt med en god grafikkort, men den er mindre vigtig, og derfor kan man nøjes med et der ikke koster alverden. De fleste spil skal helst have en 50 fps, men FSX kan nøjes med 30, da spillet ikke bevæger sig særlig hurtig.

Jeg har derfor valgt en 3GHz Core 2 Duo processor, en Nvidia 980GTX (som får 30fps med AA og 1680×1080 opløsning, hvilke er den opløsning jeg vil bruge), 2 gange 1GB DDR3 Ram, en hurtig DVD brænder fra Samsung, en 22 tommer også fra Samsung med responstid på 2ms, en rigtig flot og stilren kabbinet og harddisken har jeg allerede en 500GB som jeg ikke bruger.

Her er links til de forskellige dele og priserne:

Processor:
Core 2 Duo E8400 6 MB (Intel Boxed): 1.035 kr.

Bundkort:
ASRock P45R2000-WiFi: 829 kr.

Grafikkort:
Inno3D GeForce 9800GTX (512 MB): 1.363 kr.

Ram:
OCZ Gold 2 x 1 GB: 640 kr.

DVD Brænder:
Samsung Super-WriteMaster SH-S203D (Sort): 185 kr.

Fladskærm:
Samsung SyncMaster 226BW (Skinnende sort): 1.850 kr.

Kabinet:
Antec Performance One P182: 852 kr.

Strømforsyning:
NorthQ 4001: 245 kr.

Hvilke giver en samlet pris på 6999kr minus fragt, men da det hele kan købes hos GETMORE, så er det minimalt.

Så mangler jeg kun de mere specifikke Flight Simulator ting, såsom selve spillet, Yoke, pedaler osv.

Lyder det som et godt system? Eller har jeg valgt noget helt forkert?

Betting program

I går fik jeg et opkald af Bjørn Espen, hvor han spurgte om jeg kunne hjælpe ham med noget matematik. Han havde nemlig set inde på en sports betting side, at hvis man bettede på begge hold samt uafgjort, altså dækkende sit bet ind, så havde man penge tilovers at bette med. Så jeg skulle lave en ligning der kunne udregne om det var muligt, og i så fald hvor mange penge han ville tjene.

Så jeg satte mig ned, og kom hurtigt frem til en ligning som kunne bruges:

q = (x+y+z) – ((x+y+z)/x + (x+y+z)/y + (x+y+z)/z)

Hvor x, y og z er oddsene og hvis q > 0, så kunne det betale sig.

Da det ikke var nogen sag at løse, så satte jeg mig ned for at finde ud af om man kunne udregne hvor mange penge man skulle bette på hver af oddsene, sådan at gevinsten på de 3 bets var ens. Fordi hvis man better alle sine overskydende penge på den største af oddsene, så får man selvsagt størst udbytte, og ligeså omvendt for den mindste. Så derfor ville en ligning der kunne finde mellemvejen, med 3 ens gevinster være en god kompris.

Da jeg ikke er matematiker, men datalogi studerende (eller var, jeg har sådan set meldt ud), så lavede jeg problemet om til et program, som ved brute force, altså hvor man prøver alle muligheder af, fik en måde at løse det på.

Det tog nogle timer at lave, men ret fedt at programmere igen, da det er længe siden jeg har skrevet kode. Og siden jeg går ind for open source, så vil jeg dele programmet med jer, samt kildekoden (ikke være for kritisk). Så hvis man mener man har fundet nogle gode fodbold odds, som man tror man kan helgardere, så kan mit program bruges.

For at bruge programmet skal man udpakke zip filen, og derefter dobbeltklikke på program.bat. Derefter skriver man oddsene i stigende orden, vælger det beløb man vil satse og hvordan gevinstene skal fordeles. Dog virker programmet ikke ved alt for store summer, som over 10.000kr, hvilke skyldes en lidt halvdårlig algoritme.

Download: http://www.auzzie.dk/programmer/betting.zip

image

Jeg slog Bobby i Plane Crazy!!

Som man nok har bemærket, så interessere jeg mig for fly. Så da jeg fik en facebook app invitation fra Kenneth Birch, om at spille Plane Crazy, så kunne jeg ikke modstå (jeg plejer ellers at blokere folk hvis de sender invitationer til mig, så sørg for at invitationerne er fly releterede, før du måske overvejere at invitere mig til noget).

Så i et stykke tid nu har jeg forsøgt at overgå mine modstandere, som er Kenneth Birch, Daniel Birch og Bobby Bovell. Kenneth slog jeg ret tideligt, og jeg har indtil videre formået at have mindst dobbelt så mange point som han har. Det var straks sværre at skulle slå Bobby. Han har vist spillet det længe, og har endda formået at få 8 folk til at spille med (han har vist en del flere gode vennnere end jeg har, ingen af dem jeg har inviteret har installeret spillet).

Men så, for en uge siden, besluttede jeg for at undersøge hvordan spillet er opbygget. Og efter en times beregninger, fandt jeg lige præcis hvordan han skulle slås. Først skulle jeg have et bedre fly, da det har en betydning for hvor gode ens vinder chancer er. Det viste sig så, at Bobby havde den bedste flytype for sin klasse. Så undersøgte jeg alle flyene man kunne flyve, for at se hvor store deres sandsynligheder for at vinde var. Så ud fra beregningen: point * sandsynlighed * 10 kunne jeg se hvor mange point jeg kunne gennemsnitlig indsamle hver 12. time. Mine undersøgelse kom frem til en AH-64 Apache. Regnestykket gav: 55.000 point * 44,9% * 10 = 246950 point, hvilke var en hel del mere end alle de andre fly.

060224-N-5438H-058

Så nu, en uge senere, har jeg slået Bobby. Det er også lidt sjovt at bemærke at Bobby har vundet 714 missioner, mens jeg kun har vundet 280. Altså jeg har fået 32728 point i gennemsnit pr. vundet slag, mens Bobby kun har fået 12533 point. Så nu mangler jeg kun at slå Daniel, der er kun lidt over 2mio til!

plane
Tryk på billedet for at se scoren.

« Previous Entries Næste side »