Warning: Parameter 1 to wp_default_styles() expected to be a reference, value given in /var/www/jacobkorsgaard.com/public_html/wp/wp-includes/plugin.php on line 571

Warning: Parameter 1 to wp_default_scripts() expected to be a reference, value given in /var/www/jacobkorsgaard.com/public_html/wp/wp-includes/plugin.php on line 571
Jacob Korsgaard » News

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

Taskhost.exe of EVIL

June 28th, 2009 No comments

Jeg har anskaffet mig en HTC Magic og ville lige udvikle noget til den, fordi det er android og man KAN!

Men da jeg startede min emulator blev jeg meget skuffet over at den var DRÆBENDE langsom kunne tage op til 2 min at starte emulatoren. Var meget irriterende og mystisk, vinduerne ville hænge og lade være med at reagerer.

Det viste sig godtnok at det var et symptom på noget jeg havde oplevet tidligere med Windows 7 Betaen.

Engang imellem ville Steam gøre at Windows var så langsom at jeg ikke kunne gøre andet end at give op og logge af og på igen for at få det til at virke. Jeg har slet ikke installeret Steam på min Windows 7 RC installation så denne gang var det ikke Steams skyld.

Det endte med at jeg gjorde det eneste man kan gøre… Starte med at lukke processer i Task Manager (noget som er noget besværliggjort af at alle kommandoer man giver i UI har ca 40sek forsinkelse). Jeg nåede til den nye og mystiske Windows 7 specifikke “Taskhost.exe” og 80sek senere: PUF alt blev normalt igen.

Taskhost.exe er så vidt jeg kan regne ud en Hosting Process for Windows Tasks. Når mit Windows låser til helvede kører taskhost.exe åbentbart en task som tager lidt mere end normal tid om at håndtere sine messages.

I fremtiden vil jeg så snart jeg lugter lunten af at denne task kører trykke på Win+K som jeg har bundet til kommandoen: TASKKILL.EXE /IM taskhost.exe /T /F

DIE nasty nested task! DIE IN HELL! >:)

Win7 RC Indbygget H264 Codec

June 3rd, 2009 No comments

Mens det er rigtig fedt at Microsoft begynder at implementere codecs til gængse video formater, så har de et godt stykke vej endnu.

Det nye indbyggede codec til h264 i Win7 RC er desværre stadig forfærdelig. Det hakker og sprutter, som om jeg forsøgte at afspille det på en gammel Via processor. Heldigvis er der kloge mennesker derude der ved hvordan jeg kan få WMP og mit eget MediaPlayerWPF til at holde op med at bruge det, så jeg igen kan bruge min CoreAVC licens til noget.

corecodec’s forum fortæller Shii om hvor man skal ændre noget i registrerings databasen. Har ingen anelse om hvorfor det virker, men det gør det. Går ud fra det har noget at gøre med hvilket codec der er det foretrukne.

Har du CoreAVC og Windows 7 RC, så tag en kigger på forummet eller bare tag mit ord for det og sæt værdien af:

HKLM\SOFTWARE\Microsoft\DirectShow\Preferred\{31435641-0000-0010-8000-00AA00389B71}

fra {212690FB-83E5-4526-8FD7-74478B7939CD}

til {09571A4B-F1FE-4C60-9760-DE6D310C7C31}

For at kunne ændre værdierne skal du tage ejerskab af nøglen og give dig selv flere rettigheder.

Det kan godt være du skal ændre lidt mere for at få det til at virke i Media Center, i så fald kig på det ovenstående link.

Hvis noget af dette er volapyk for dig, så må du hellere lade være :)

Tak Shii 😀

Fejl Dialog Boks

June 2nd, 2009 7 comments

image

Ingen kommentarer 😀

MediaPlayerWPF

March 29th, 2009 No comments

image Jeg er igang med at læse op til et WPF certifikat og i det sammenhæng tænkte jeg at jeg ville lave et relevant program til at øve med.

Så jeg faldt temmelig hurtigt over WPFMediaKit af Jeremiah Morrill (Jer!). Det gik meget hurtigt op for mig hvor meget af det han havde lavet der lignede noget af det jeg har lavet til SharpMedia. Han brugte også en VMR9 Custom Allocator til at tegne video til en texture. Men han har taget et trin videre og implementeret Enhanced Video Renderer (EVR) understøttelse, som er en vildere renderer, der er Vista/Win7 only.

Han brugte også DirectShow til at decode video, ligesom SharpMedia, og det var på dette punkt at jeg havde mulighed for at give noget støtte. Jeg har nemlig allerede bakset med at få undertekster og lydspor til at virke korrekt i SharpMedia og fordi de ting vi har lavet er så ens, kunne jeg faktisk copy pasta 90% af det kode direkte ind i WPFMediaKit.

Jeg venter stadig på at få flettet den feature, min sample application, samt nogle ændringer til interfacet i WPFMediaKit ind i hans SVN, men nu er min sample application ved at være på det niveau at den kan bruges til dagligt. 😀

Derfor udgiver jeg den og min modificerede WPFMediaKit kildekode her nu!

Download

P.S: Hvis folk nu skulle skrige WAREZ, så valgte jeg Colbert specifikt fordi man altid kan se det gratis og uden reklamer på http://colbertnation.com! Do it! 😀

VisualSVN Open Source License

March 28th, 2009 No comments

Jeg har lige fået min open source licens til VisualSVN i en mail fra holdet, for det siger jeg tak, selvom de ikke kan forstå mig. 😀

Som tak vil jeg lige pitche deres produkt lidt fordi VisualSVN faktisk er super nice. Selvom teknologien måske ikke er raket videnskab, da de “blot” har koblet Visual Studio op på TortoiseSVN, så er implementationen fantastisk veludført! Desuden giver de licenser frit væk til folk som mig, der bruger det udelukkende til private og open source projekter. Hvis ellers man kan bevise at man er lidt involveret i open source udvikling.

Hvis du bruger Visual Studio og SVN meget, så kan jeg anbefale dig at hente en trial til VisualSVN. </pitch>

Powered by VisualSVN!

XNA og Xbox 360 på DIKU

March 25th, 2009 No comments

I går var jeg ovre på DIKU i København for at lave en introduktion til hvordan man laver spil med XNA. Det var skide hyggeligt og selvom DIKU er noget anderledes end Cassiopeia, synes det at være et rigtigt hyggeligt sted at studere. 😀

Var specielt facineret af deres kantine, det virker som om de bruger det som et stort grupperum for alle studerene, det er jo også den famøse selvbetjenings-buffet kantine (så vidt jeg kan forstå)

Jeg har smidt det projekt jeg lavede op på mit site, så i kan ændre så den ikke spammer teapots, tilføje en lyd når man rammer hinanden, eller noget helt tredje: DikuDikuDiku

Igår glemte jeg lige at nævne de rigtig gode XNA resourcer og hjemmesider, så det gør jeg lige her i stedet!

Der er 2 hovedkilder til XNA information:

  • XNA Creators Club: Microsoft’s egen side med massere af gode resourcer og samples
  • samt Ziggyware: Lavet af en MVP, siden har rigtig mange gode tutorials og links

Ellers skal i være meget velkomne til at kontakte mig her på bloggen eller over min email, som er “felizk @ dette domænenavn”. Ellers håber jeg at dem der var til mit foredrag kunne bruge det til noget!

Lige til sidst, hvis i har mod på det kan i downloade vores semester projekt og prøve det samt kigge på koden (hvis i tør!): ORZAM

SVN Externals

March 19th, 2009 No comments

Jeg har ofte siddet med problemet at jeg har fundet på et stykke kode, som jeg gerne vil bruge i mange forskellige projekter og samtidigt holde opdateret. Det kan for eksempel være en funktion der tager to filsystem stier og finder den relative sti fra den ene til den anden. Det kan også være hele projekter jeg vil referere til, fra forskellige SVN repositories.Import af TagLib# i mit Musizk projekt

I dag tog jeg mig så tid til at prøve at løse denne problemstilling og det jeg kom frem til var en feature jeg ikke vidste eksisterede i SVN, nemlig externals.

Ligesom ignore, som jeg ofte bruger til at undgå at committe bin og obj mapper, så er externals en egenskab på en SVN mappe. Det er temmelig simpelt at bruge og proceduren er beskrevet fantastisk for TortoiseSVN på bloggen justaddwater.dk af Jesper Rønn-Jensen.

Installer Surface SDK på Windows 7 og Vista 64bit

February 10th, 2009 2 comments

Jeg får snart mulighed for at sidde og rode med en Microsoft Surface og har i det sammenhæng fået fat i SDK’et. Problemet er bare at det ikke fungerer på andre OS end Vista SP1 32bit, hvor jeg kun har en XP og en Windows 7 :/

Men heldigvis er der nogle kloge hoveder derude som har fundet ud af at hacke MSI filen så den ikke verificerer hvilket os man har installeret.

Guiden er fra Grumpy Dev: http://www.grumpydev.com/2008/12/26/surface-sdk-on-vista-x64/