Archive

Archive for the ‘Programming’ Category

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 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.

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 :)

WPF Keyboard Focus

July 29th, 2009 No comments

imageJeg er ved at bygge et element til at liste alle mine media filer i mit MediaPlayerWPF, og en af de ting jeg rigtig gerne vil have er ordentlig keyboard controls og fokus (til hvis jeg skal bruge en Xbox Controller eller fjernbetjening til den fx.). Men keyboard fokus og fokus generelt i WPF kan være lidt irriterende!

Som vist i boksen til højre har jeg 2 listbokse, en der er bundet til kategorier, som hver har en liste af titler som den anden boks er bundet til.

Listerne bliver opdateret efter importeren er færdig med at læse mine harddiske. Det er meningen at den første liste skal få fokus så man kan bruge tastaturet til at navigere når listerne er færdig med at loade.

Der er et par problemstillinger med det jeg gerne vil opnå med denne control.

  • Det skal være naturligt at navigere mellem de 2 lister ved brug af tastaturet
  • Den venstre liste skal huske hvilket element der er selected så det er den der får fokus når man trykker venstre fra titel listen.
  • Kategori listen skal have fokus når den er loadet!

Jeg havde meget svært ved at opnå de første 2 krav. Det tog mig en evighed og alligevel var det den simpleste af alle løsninger. For Microsoft har allerede tænkt over det. På listboksene sætter man blot den Attached Property der hedder KeyboardNavigation.DirectionalNavigation til “Once". Dejligt simpelt og til at have med at gøre i forhold til alt det eventhandling jeg har været igennem for at prøve at efterligne det ;D

Det sidste problem tog mig også lidt tid at knuse. I første omgang var det ikke noget problem da jeg satte DataContext på min UserControl i constructoren, så kunne jeg blot vente på UserControl.Loaded og så sætte fokus til første element i listen med denne lille sag:

if (categoryList.Items.Count == 0)
    return;

if (categoryList.SelectedIndex < 0)
    categoryList.SelectedIndex = 0;

ListBoxItem lbi = categoryList.ItemContainerGenerator.ContainerFromIndex(categoryList.SelectedIndex) as ListBoxItem;
if (lbi != null)
{
    lbi.Focus();
    Keyboard.Focus(lbi);
}

Men! Da det godt kan tage lidt tid at importere fra diskene (specielt hvis de lige sover), så gør jeg det asynkront! Nu skal jeg jo så finde ud af hvornår jeg kan fokusere mit fine ListBoxItem. Det kan man ikke når datacontext bliver sat, når source bliver opdateret eller når min ObservableCollection der indeholder mine ViewModels bliver opdateret.

Man skal vente til UI’et er blevet genreret for alle ens elementer og det er såmænd også ItemContainerGenerator der står for det! Ved lige at lytte på hvornår den skifter Status vha. StatusChanged, kan man få lov til at fokusere det første element så snart listen har listbox items og ItemContainerGeneratoren har status GeneratorStatus.ContainersGenerated!

NSIS Installer MSBuild Target

July 24th, 2009 No comments

Jeg var ved at blive træt af at zippe versioner af mine små programmer til Mads (min bror) og andre interesserede. Der gik altid koks i versionerne og kludder i hvor de skulle installerer.

Så jeg har lavet et lille MSBuild Target, der bygger en NSIS installer udfra indstillinger i ens csproj fil. Den bruger en (meget simpel) skabelon .NSI fil.

Target’et kræver selvfølgelig at man har installeret NSIS (gerne i $(ProgramFiles)\NSIS :D).

Du kan hente kilden her: MSBUILD_NSIS.zip