OOPEG: An Object-Oriented Parser Generator based on Parsing Expression Grammars

July 30th, 2010 No comments

Jeg har lige afsluttet og afleveret mit kandidat projekt. Vores speciale var Programmings Teknologi og vi har lavet en Parser Generator til C#.

OOPEG vores parser generator er baseret på en relativ ny parsing teknologi der hedder Parsing Expression Grammars (PEG). Det er et alternativ til Context Free Grammars (CFG).

Man beskriver det sprog man gerne vil lave I PEG filer I Visual Studio 2010 og så genererer OOPEG en C# parser til dit sprog. Den parser kan man så kalde på noget input og så får man et type stærkt abstract syntax tree at arbejde videre med.

Vi har integreret denne process I Visual Studio ved brug af MSBuild og Visual Studio Project Templates så det er lige til at gå til.

Vores speciale handler om hvorvidt det at bruge PEG til at lave en parser generator er en god ide og hvilke teknikker vi kan bruge til at lave det rigtig smart at arbejde med.

Vi fandt ud af at vi med meget lidt syntax kan beskrive et sprog, hvordan sproget bliver parser og hvordan AST’er bliver bygget ud fra grammatikken.

Dette sammen med visual studio integration gør det super nemt at definere en ny parser til et sprog og bagefter bygge en compiler til den.

For mere information kig på vores projekt side: http://jacobkorsgaard.com/oopeg

Nordic Game Jam 2010: XNA Session

January 28th, 2010 2 comments

Jeg holder en session om XNA ved Nordic Game Jam 2010 og i stedet for at forsøge at få folk til at huske alle de links jeg gerne vil give dem lægger jeg dem lige her. Med lidt held kommer der mere i løbet af NGJ2010 hvis ikke vi har alt for travlt.

I er meget velkomne til at skrive spørgsmål herinde og komme med flere links.

Farseer 2D Physics Engine: http://www.codeplex.com/FarseerPhysics

 

 

Hvis du har blod på tanden med XNA eller Silverlight for den sags skyld kan det være du skal tage et kig på Imagine Cups Game Design konkurrence hvor du kan vinde kolde hårde kontanter og cred! Tag et kig på: http://imaginecup.com/

EDIT: As requested here is the project I created during the presentation: XNA @ NGJ2010

Explicit Interface Member Implementation

November 28th, 2009 No comments

Jeg opdagede noget meget sært som jeg ikke tidligere har lagt mærke til er muligt i C#. Man kan lave det de kalder en Explicit Interface Implementation.

Mit problem var at jeg ville have linje nummeret og kollonen på et XElement for at give fejl beskeder. Der er dog ikke nogen måde at gøre dette via XElement. Det er der så alligevel! Selvom elementet ikke har en property for LineNumber, så har den alligevel!

Hvis man loader et XDocument med LoadOptions.SetLineInfo så er det muligt at caste et XElement til IXmlLineInfo og få informationen derfra! Det er selvom XElement ikke har metoderne. Det viser sig at XObject implementerer interfacet IXmlLineInfo og det er gjort explicit. Explicit interface member implementations er beskrevet her, og de har et godt eksempel med en filhåndterings klasse, som de gerne vil have er IDisposable men kun exposer en Close metode, så Dispose metoden blot kalder close.

Det gør man bare sådan:

interface IDisposable
{
   void Dispose();
}
class MyFile: IDisposable
{
   void IDisposable.Dispose() {
      Close();
   }
   public void Close() {
      // Do what's necessary to close the file
      System.GC.SuppressFinalize(this);
   }
}

Man kan kalde MyFile.Close() eller man kan caste en MyFile instans til en IDisposable og kalde Dispose(). Kan godt være dette er almen viden, men jeg har ikke set det før :)

TechED’09: Teaser

November 25th, 2009 No comments

Efter at have været til Tech-Ed Europe 2009 kom jeg hjem til at have rygende travlt med projekt og derfor har jeg ikke fået skrevet om alle de fede ting der skete dernede. Jeg har stadig ikke helt tid til at koge de store forklaringer om hvad der foregik dernede sammen og vil derfor i stedet begynde med at henvise til Allan og Michael som var de to andre danske MSP’er der var med. De har begge skrevet round-up posts omkring deres oplevelse i Berlin, en post som jeg ser frem til at skrive, som en af de sidste i min egen round-up af turen.

Jeg fulgte Allan i tykt og tyndt i Berlin så hans post er et godt udgangspunkt for hvad der foregik (der er også mange fine billeder ;))

http://www.allanjp.dk/ <- Allans Blog

http://ifyoudo.net/ <- Michaels Blog

TechED’09: Nye Visual Studio 2010 WPF Features

November 10th, 2009 No comments

Windows Presentation Foundation udkommer i version 4 i Visual Studio 2010 og har selvfølgelig en masse nye features. Men den session jeg var til med Brian Randell og Ian Griffiths handlede mere om hvordan man kunne bruge Visual Studio og WPF til at lave nogle nye spiffy ting. De kørte meget rundt i Ribbon Controls da det er fremtiden for Windows applikationer ikke mindst fordi Microsoft har brugt millioner på at designe det. Der kommer nye Ribbon Controls til 2010 når det udkommer engang i 22. marts, men indtil da kan man bruge de controls man kan hente fra Codeplex, de er dog lidt restriktive da der findes et 400 sider langt dokument om hvordan man skal bruge ribbons korrekt og restriktionerne i control librariet er lagt på for at undgå at udviklere bryder mange af de regler.

Ud over Ribbons, viste de også en masse nye interessante features i Visual Studio 2010 som skal gøre det mere behageligt at kode WPF. Den store ændring er at de har lavet en ny designer som er meget hurtigere og smartere end den vi finder i VS2008. Det betyder blandt andet at man ikke længer behøver at bruge Expression Blend for at kunne lave ordentlige WPF controls. En af ændringerne i designeren jeg lagde mærke til er at du ikke længere skal ”reloade designeren” hver gang du ændrer på XAML, i stedet kan opdateres design view løbende som man kan forvente det af WYSIWYG editors.

En anden ting de viste er at property grid nu forstår mange af de ting man bruger meget i WPF som f.eks. bindings, resourcer og styles. Der findes endda en binding designer/browser som ser ud til at gøre det meget nemmere at rode med uden at skulle ned og have fingrene beskidte med XAML. At Visual Studio forstår ressourcerne i WPF gør det meget nemmere at holde styr på hvilke muligheder man har for at style ens controls fra Visual Studio, så det er lettere at flytte det arbejde over på designere for let at kunne integrere det i ens program bagefter. De nævnte endda at der findes massere af styles man kan downloade fra nettet hvis man er træt af standard udseendet af WPF programmer.

Mange af disse ændringer har nok været med Silverlight i bagtanken så det skulle ikke undre mig hvis det virker ligeså godt hvis ikke bedre der!

Tag at fyr op for et WPF projekt i Visual Studio 2010 Beta 2, og forsøg at prikke lidt til det hvis du er interesseret og har tid, så kan det være du kan fortælle mig nogle flere cool features de uden tvivl har tilføjet.

TechED’09: Windows Azure Platform

November 10th, 2009 No comments

Min første breakout session var med David Chappell omkring hvad Windows Azure egentlig er og hvorfor det er interessant.

Jeg har længe hørt om det her cloud computing og har haft en vag idé om hvad det går ud på. Det viser sig at være ca. det og det viser sig også at den undren jeg havde omkring hvad man skulle bruge det til også var berettiget.

clip_image002

Der er flere forskellige services når man snakker Windows Azure:

  • Windows Azure
  • SQL Azure
  • .NET Services

David snakkede ikke så meget om .NET Services så det vil jeg heller ikke skrive om.

Windows Azure er et operativ system i “the cloud”. Hvad det egentlig betyder, er at det program du skriver til Windows Azure kan køre på maskinerne i Microsofts kæmpe data centre. Som David siger, så har de helt garanteret flere maskiner end du har!

Når du skriver en applikation til Windows Azure, uploader den til clouden og kører den, oprettes der en instans af en Virtual Machine som dit program får lov at køre i. Du kan køre mange forskellige Windows programmer på Azure, både managed og unmanaged. Ud over bare normale processer kan du også lave web applikationer som behandles lidt specielt på Windows Azure. Du kan starte så mange VM’s du vil med instanser af dit program, men de deler ikke state på nogen måde og fungerer som havde du startet to processer på din egen maskine i realiteten.

Dette bliver rigtig spændende hvis du laver en web applikation, da det er muligt at starte flere VMs til den på clouden. Hvis du går det har Windows Azure operativ systemet en Load Balancer, som vælger hvilken VM en klient bliver forbundet til når han vil bruge din applikation. Dette er faktisk lidt problematisk da du så ikke kan gemme state for dine klienter på server side, fordi du ikke kan være sikker på at de på næste request bruger samme VM! Så skal du lave web applikationer på Azure, tænk stateless!

En anden ting at huske når man laver programmer til Windows Azure er at du ikke har administrator adgang, overhovedet. David siger dette ofte er et problem for folk, som vil porte deres eksisterende kode til Azure, fordi, uden de rigtig er klar over det, er der masser af deres programmer som kræver administrator adgang.

At køre programmer på en maskine i et datacenter er ikke så interessant hvis du ikke kan gemme eller loade data ind, så der findes selvfølgelig også Storage til Windows Azure. Der er overordnet 3 forskellige former for data til Windows Azures Storage. Storage foregår via en RESTFUL http/https service!

Queues er som navnet hentyder til, køer af data som man bruger til at sende data mellem VMs. Det skulle foregå lidt som man ville forvente det. Du kan sætte noget data i kø for at blive konsumeret af en Worker proces engang når den får tid for eksempel.

Blobs er blot binære klumper af data, det kan være billeder eller hvad man nu kan forestille sig. Der kan oprettes containers med lister af binære objekter og de tilgås selvfølgelig med RESTFUL.

Sidst har vi Tables som måske kunne lyde til at være Relationelle tabeller som vi kender dem fra databaser, men det er det ikke! Det er i stedet blot en tabel af data, det betyder at du opretter en Table og giver den et navn samt en primary key. Udover den primary key kan du gemme properties på hver ”row” i tabellen som er typed og indeholder data, disse properties kan man tænke på som kolonner, men det brister så snart man finder ud af at hver row kan have forskellige properties, der er ikke nogen begrænsning på den måde. Man kan selvfølgelig lave sine egne begrænsninger på client side. Tables er designet til at håndtere MASSIVE mængder af data, som man f.eks. kender det fra Web 2.0 applikationer som facebook.

Hvis man ikke kan nøjes med Queues, Blobs og Tables kan man også få en egentlig SQL database med SQL Azure. Den virker som man ville forvente en SQL server ville virke og hvis man har en SQL Azure database kan man endda tilgå den fra lokale applikationer. Problemet med SQL Azure er at man max kan bruge 10GB pr. database og så vidt jeg lige kunne anskue på publikum, så er det mere end almindeligt at skulle bruge mere end det. Man kan altid lave flere databaser, men det er ikke så smart igen da det både koster ekstra og er besværligt at segregere ens data.

Prisen for Windows Azure er:

· $0.12/timen for hver Virtual Machine man kører (det er ikke CPU timer men ”wallclock” timer)

· $0.15/GB Blobs, Queues og Tables om måneden.

· $0.01/10.000 operationer på Blobs, Queues og Tables

· $0.15/GB data downloadet fra Windows Azure og $0.10/GB uploadet til det.

· $9.99/Month for 1GB SQL Azure

· $99.99/Month for 10GB SQL Azure

Mange sad hen mod slutningen af sessionen og tænkte, hvorfor skulle vi ikke bare bruge hosting i stedet. David mente der at der findes nogle applikationer som er specielt egnet til Azure og mange som overhovedet ikke er. Det kommer alt an på hvad du skal bruge. Jeg vil lige nævne nogle af dem han nævnte var rigtig gode som Cloud Computing applikationer.

· Kæmpe applikationer som store Web 2.0 apps, fordi man meget let kan skalere meget stort uden at skulle have sine egne datacentre.

· Software som en service. Hvor du har en applikation andre betaler for at bruge, der vil du gerne koncentrere dig om at køre applikationen og holde den, ikke så meget IT administration.

· Applikationer som har variabel load. Et godt eksempel han havde var online billet bestilling til koncerter. Der er der ikke meget aktivitet på ens applikation indtil der kommer en koncert hvor alle vil have en billet i hvilket tilfælde det er meget simpelt at starte flere VMs og håndtere det kæmpe store load. For så at vende tilbage til få VMs og på den måde spare en masse penge under ”downtime”.

· Short Lived apps. Marketing kampanger og lignende hvor det bare skal op og køre hurtigt for at blive lukket ned let igen inden for kort tid.

· Parallel Processing, fordi man kan skalere smertefrit på Azure og andre cloud computing services er de ideelle til at lave store udregninger.

· ”Apps that fail fast or scale fast!”. Igen nævnes der Web 2.0 applikationer, hvis man finder på et nyt koncept og skal teste det, skal man enten let kunne stoppe siden igen hvis siden fejler og spare omkostninger hurtigt. Ellers hvis det bliver en succes skal man kunne opskalere hurtigt til mange brugere! I begge tilfælde er Cloud Computing perfekt, fordi du kan bare lukke dit abonnement og så lukker din app, eller du kan tilføje flere VMs og på den måde skalere smertefrit.

· Joint Ventures, samarbejde mellem flere firmaer hvor de måske ikke er så trygge ved at et af firmaerne hoster servicen.

· Sidst er det data storage, hvis du blot vil bruge storage faciliteterne til ens virksomhed.

Næste post bliver noget kortere og omkring nogle få af de nye interessante features i Visual Studio 2010 til at lave WPF applikationer.

TechED Dag 1

November 9th, 2009 1 comment

Vi ankom i går aftes her i Berlin i Tegel lufthavnen hvorfra vi tog en taxa ind til vores hotel med en chauffør, der kunne meget lidt engelsk og hårdnakket insisterede på “NO CARDS! GELD ONLY”. Den situation havde Martin dog styr på da han overtalte hotel personalet til at lade ham hæve penge selvom de bestemt ikke var glade for ideen da han ringede til dem.

Hotellet er overfor en bank, som ikke eksisterer hvor Martin kunne hæve penge mente personalet indtil han brugte sine mad skills(tm) og fik “geld”.

Martin og jeg er indlogereret på fjerde sal i et rum med 3 senge og et vindue der ikke kan lukkes. Der er selvfølgelig wireless internet på hotel Grand City Excelsior! Men prisen er 4,90EUR, pr. halve time!

Derimod har Allan fået et værelse på ottende sal som er på størrelse med et frimærke. Hvor han skal sove kind mod kind med Syska resten af ugen, nu Syska endelig er dukket op. Nej Michael Syska, den tid der står på biletten er ikke den tid du skal dukke op ude i lufthavnen.

I dag har vi fået Æg og BACON til morgenmad og fundet S-Bahn toget, der går til konferencen hvor jeg har været ved 2 sessioner og en keynote, som jeg vil skrive om når jeg lige får lidt mere hjerne. De der 5 timers søvn er ikke lige helt nok til at skrive tekniske dokumenter og beskrivelser. Skal lige have lidt mere før jeg kan decifrere de noter jeg har skrevet.

Hold udkig efter posts om Windows Azure, WPF og Visual Studio Extensibility in the very near future!

Indtil da vil jeg lige finde en kop kaffe.

HTC Magic Hax

November 5th, 2009 2 comments

Det viser sig at HTC ikke er super fede til at opdatere deres telefoner. For Android telefoner som HTC Magic er det op til operatøren og producenten at lave et nyt build og pushe den ud på folks telefoner.

HTC og 3 har tilsyneladende helt undladt at gøre noget ved dette i Danmark. Så jeg har set mig nødsaget til at tage tingene i egen hånd!

Det var egentlig ud fra et ønske om at få tethering på min telefon nu jeg får en lille ny laptop i hjemmet. Der viser det sig at for at kunne bruge bluetooth til det skal man have root access og det kan man kun hvis man flasher sin ROM.

Hvis jeg alligevel skal igang med det, så flasher vi lige en nyere version på tænkte jeg så! Da Android jo er open-source så har folk jo super meget styr på hvordan man klarer det så det er faktisk skide let.

Jeg kan referere til denne fantastiske wiki/guide: http://wiki.xda-developers.com/index.php?pagename=HTC_Sapphire_Hacking af Radix999. Følger man den er det så let som ingenting at få sin HTC Magic up to date! Husk bare det der nandroid backup step, bare hvis nu den skal sendes ind og man ikke vil have problemer med dem. Hvis man f.eks. vælger at installere CyanogenMOD så er det endda 100% lovligt.

Sidst vil jeg lige påpege at det MEGET VEL kan anbefales at opdatere. Min egen kan nu følgende ting den ikke kunne før:

  • Ikke køre skide langsomt og “hakke” ligeså meget
  • Tethering (mangler jeg lige at teste!)
  • HTC Sense UI!
  • Finde ud af at gætte sig frem til ord med danske bogstaver så som “så” og “gå” (Det  var bare RØV irriterende før)
  • Synkronisere med Facebook

Og en masse mere! Det der er bare lige dem jeg lige har fundet og skulle bruge!

ClimateConflict og Lasers!

November 2nd, 2009 1 comment

imageI de sidste 3 weekender har jeg været aktiv spiludvikler, først var det Indie9000 hvor vi udviklede ClimateConflict med Unity3D, som oprindelig hed AutonomBashing. Et spil hvor du er politiet og du skal holde autonome og hippier væk fra klimakonferencen!

I anden weekend kodede jeg sammen med mine kammerater videre på ClimateConflict, hvor jeg fik kogt noget bedre animation sammen og Jørgen fik lavet en fin bloodsplatter og tazer effekt. Alle ting mangler stadig at blive smidt i en opdateret version af spillet! Den oprindelig version kan hentes her.

lasers

I denne weekend afholdte vi Filofil’s “Game Development Aalborg: Workshop” eller GDA’W! Til det havde vi et lille foredrag om Unity3D samt om brainstorming! Bagefter lavede vi spil hele natten og det endte med dette lille finurlige Lasers! spil fra vores gruppe! Simpelt gameplay med PEW PEW! Det kan du spille på denne side (WebPlayer ftw!): http://solgame.dk/lasers/

TechEd Europe 2009 Berlin

October 22nd, 2009 No comments

Jeg skal til TechEd med Microsoft i næste måned fra d. 8 til d. 14. og det bliver super fedt. Jeg ser frem til at blive meget klogere på Microsoft teknologier i løbet af den uge.

Jeg vil specielt sigte efter at være til de sessions der omhandler C# 4.0, DLR og Visual Studio Extensibility. Men vil selvfølgelig også være ops på alle nye tiltag de har i skuffen.

I løbet af konferencen vil jeg blogge om de ting jeg bliver klogere på så der vil der være ualmindelig meget aktivitet på bloggen her :)