Archive

Archive for the ‘Tips’ Category

HTC Magic Hax

November 5th, 2009

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!

felizk Personal, Tips, Tutorial

SVN Externals

March 19th, 2009

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.

felizk Programming, Tips

XboxControl: Mus med Controller

January 18th, 2009

Jeg blev tilstrækkelig træt af SetPoint til at jeg har anskaffet mig en Razer mus og skrottet min fjernbetjening. Det efterlod mig uden en fjernbetjening, så jeg kogte dette program sammen til at styre min PC med Xbox 360 controller når jeg glor ting fra min seng.

XboxControl ligger i System Tray og siger intet, den er faktisk kun dernede for at man kan lukke den. Jeg har ikke lige fået lavet så den henter bindings fra XML filer. Men det er temmelig tydeligt i kildekoden hvordan man ændrer bindings :)

Programmet bruger selvfølgelig XNA Framework. Problemet med det er at XInput er baseret på polling, så jeg skal have et loop til at spørge controlleren hele tiden. For ikke at sidde og polle konstant checker programmet om der er en controller forbundet, hvis den ikke er venter den 2 sekunder mellem hver loop. Hvis man ikke har rørt ved controlleren i 15 sekunder falder polling til hvert halve sekund.

Forresten, jeg er lidt skuffet over Microsoft mht. det chat-pad man kan få til xbox controlleren. Den virker ikke under windows overhovedet. Hvilket er en skam :(

Standard bindings er:

  • A = Mouse Click
  • B = Right Mouse Click
  • X = Backspace
  • Y = Play/Pause
  • Left Stick = Mouse
  • Right Stick Y-axis = Scroll
  • Right Stick Click = Middle Mouse Click
  • Right Trigger = Mouse Brake (slows down mouse control for precision work)
  • DPad = Arrow Keys
  • Start = Enter
  • Back = Escape
  • Bumpers = Previous Track / Next Track

Download XboxControl

felizk Programming, Tips, XNA

Windows Live Writer 2009 og Wordpress 2.7

January 18th, 2009

Efter at have opgraderet til WLW2009 og Wordpress 2.7 kunne jeg ikke længere uploade særlig mange billeder, efter noget søgning fandt jeg ud af at en masse folk havde lignende problemer. De fleste havde problemer med libxml, men mit problem viste sig ikke at ligge der, men istedet i thumbnail generation.

Når man uploader posts med Windows Live Writer, så bliver billeder uploadet med et thumbnail, men udover det bliver der også genereret et thumbnail af Wordpress.

Der ligger problemet, fordi i Wordpress 2.7, går de ud fra at PHP må bruge 256MB hukommelse på serveren! Hvilket ikke ligefrem er tilfældet hos One.com (16MB). Så når Wordpress prøver at loade mine 1920×1200 billeder ind i hukommelsen ukomprimeret, så sprænger skidtet i luften!

imageMEN! Der er håb! For i Live Writer kan man gå helt uden om Wordpress xmlrpc til billede upload. Under Blog indstillinger kan man sætte WLW op til at uploade billeder vha. FTP. På denne måde skal PHP ikke til at loade billeder ind i hukommelse og så kan du uploade alle de billeder du lyster! :D

Tak til Amit Agarwal for hans tips der lige mindede mig om dette faktum.

image Et andet godt tip er at man kan i WLW2009 gemme standard indstillinger for hvordan billeder skal vises. Det sker i bunden af panelet til højre når man har et billede markeret.

Til sidst vil jeg lige spamme billeder fordi jeg kan :D

1211880192901 1213112453556 1228071581010 [animepaper]wallpapers_omnibus_kuman_6174d1b9ef405fc13cc0d62f37d56e68eeee 1203786198365

felizk Live writer, Personal, Tips

Picasa 3

January 18th, 2009

UntitledPicasa har længe været mit favorit program til at kigge billeder igennem. Det er hurtigt, meget rart at se på og kan alt det jeg skal bruge det til.

Det var det jeg troede indtil de sprang en ny feature efter mig i Picasa 3, et simpelt billedeviser program i stil af ACDSee32. Det er bare vildere og super lækkert. Mit største problem med andre programmer, som IrfranView, er at de er sløve og ikke reagerer mens de loader billeder. Det problem havde ACDSee ikke, fordi den var meget hurtig (ikke mindst fordi den ikke bruger nogen interpolation). Picasa’s billedeviser har både ordentlig interpolation og er meget hurtig!

Det er et rigtigt lækkert program og du bør bruge det hvis du har ligeså mange billeder som mig ;)

Picasa 3

felizk OS, Personal, Tips

Win7 Hotkey og Taskbar Cheat Sheet

January 12th, 2009

Brandon Paddock har på hans blog smidt et cheat sheet til hotkeys og taskbaren i Windows 7. Den kan lidt mere end jeg lige troede! :D

felizk OS, Tips, Windows 7

Vista: Enable Enhanced Performance S-ATA (Updated)

July 1st, 2008

imageUPDATE: Jeg har fået 2 blå skærme (de eneste jeg har fået på Vista ever), som resultat af at sætte computeren i standby, siden jeg ændrede dette, så jeg har ændret det tilbage igen :(

I Windows XP kunne det ske at pga. en fejl blev IDE controlleren i Device Manager slået ned på PIO mode istedet for DMA mode. Dette gjorde at man tydeligt kunne mærke på computere lige så snart harddisken blev tilgået.

Jeg troede der var noget i den stil galt med min Vista installation fordi jeg tydeligt kunne mærke i SharpMedia når billeder blev loadet fra disken, hvilket ikke er tilfældet i XP.

Så jeg væltede ind under Device Management for at finde ud af om DMA var slået til, det var det selvfølgelig :(

Nysgerrig, som jeg er, begyndte jeg at kigge rundt på andre ting, der kunne være årsag til problemet. Under egenskaber for min laptops harddisk finder jeg så et fluemærke “Enable Enhanced Performance”, som ikke var krydset af.

Det viser sig at Vista som standard har en ekstra “cache” for disken, som den bruger til at recover ordentlig hvis strømmen bliver taget uventet. Advarslen på fluemærket siger “Kun anbefalet for diske med backup strømforsyning”, som f.eks. det batteri der sidder i min laptop.

Så jeg afkrydsede fluemærket og sværger at jeg kan mærke forskel i SharpMedia! Det kan være mindtricks men tror det ikke. Så hvis du har laptop med S-ATA harddisk i så prøv det da lige og fortæl mig om jeg er skør! :D

English:

Update: Since I made this change, I’ve had my first 2 BSOD ever on Vista, so I changed it back. :(

In Windows XP, if my computer inexplicaply starts churning alot on the harddrive and using alot of CPU in the process, I usually check if my IDE Controller was set to PIO mode because of some fault, and return it to DMA mode.

When my Vista started acting the same I checked for the same thing without luck. Afterwards I felt adventurous and snooped around a little in Device Manager in an attempt to find some option to speed things up. Lo’ and behold there it is, in the Policies tab of my Laptops built-in S-ATA harddisk properties. “Enable Enhanced Performance” which apparently disables and intermediate cache designed to allow Vista to recover gracefully after a crash. The warning says the disk should be connected to a backup power supply when using this option, like the battery in my laptop.

So I enable the option and swear it helped. If you have a Laptop or an UPS try enabling this option and tell me if I’m just imagining things! :D

felizk OS, Tips

Windows Speech Recognition

May 15th, 2008

Jeg sad lige og kunne ikke hjerne projekt igår eftermiddags. Så kom jeg i tanke om at min kammerat Søren havde nævnt at Vista Speech Recognition faktisk ikke var så ringe endda.

Så jeg brugte en times tid på at sidde og lære hvordan man bruger sådan noget og det er RET smart. Dog ikke helt smart nok!

For eksempel virker det ikke korrekt i MSN Messenger uden at man slår noget der hedder Dictate Everywhere til. Så jeg tænkte: “Hmm, hvad nu hvis man kunne kode til det her, så kunne jeg lave en Star Trek Konsol kontroller til Media Center“!

Og det kan man, og det er hamrende nemt! Jeg har lavet et lille program der reagerer på “COMPUTER!” med et bip og så kan man sige red, green eller blue til den, eller stop for at få den til at holde op med at lytte.

Planen er at lave så jeg kan sige computer pause video mens man sidder og ser sager. Eller computer next song!

Kig den her, og prøv selv at smide en mikrofon på og gå i Vista Speech Recognition hvis du har en times tid :D

Download: SpeechRecognition

felizk OS, Personal, Programming, Tips

Vista Media Center SDK Guide 2

April 21st, 2008

Dette er anden del af min Vista Media Center SDK Guide. Første del omhandler at sætte Visual Studio op med et projekt så det kan debugges direkte i Vista Media Center.

Into the belly of the beast: MCML Part One!

Hvis du har fulgt første del af min guide korrekt (og jeg har skrevet den korrekt) så skulle du nu have et projekt der kan compiles og køres i vista media center. Når du gør det får du forhåbentlig denne skærm:

image

Folkene bag SDK’et har været så flinke at give os nogle sample filer at lege med.

Dem vil vi så gerne lægge til siden så vi kan tage tingene fra bunden af :)

Første trin er hvordan vi bruger vores egne MCML filer. MCML kan loades direkte fra en url/uri eller gemmes i projektets resources. Vi vil gøre som de fine herrer hos Microsoft og lægge vores MCML filer i Resources.

Lav en nyt mcml dokument under Markup med Add->New Item…->Mcml File, kald det Forside.mcml. Nu skal filen tilføjes til Resources. Det kan gøres ved at åbne projektets properties og vælge Resources eller dobbelt klikke Resources.resx. Med resources åben, træk Forside.mcml fra Solution Exploreren over i resources vinduet. Vinduet vælger nu at vise dig hvilke Files der er tilføjet til resources incl. Forside.mcml.

Nu sætter vi lige vores add-in til at starte med vores forside istedet for Menu.mcml. Det gøres i Application.cs under GoToMenu():

public void GoToMenu()
{
    Dictionary<string, object> properties = new Dictionary<string, object>();
    properties["Application"] = this;
 
    if (session != null)
    {
        ///////////////////////////////////////////////////Menu    //stod der før
        session.GoToPage("resx://MCTest2/MCTest2.Resources/Forside", properties);
    }
    else
    {
        Debug.WriteLine("GoToMenu");
    }
}

 

Med den ændring kan projektet compiles og køres:

image

Resources i MCML

Der er flere forskellige måder at referere til resources i MCML. (Med Content menes billeder, strenge, mcml filer mm.) Man kan som vi lige har gjort gemme resources i Resources.resx, det er smart for MCML filer og billeder, som addin’et skal bruge. Man kan derud over bruge:

  • .res filer, som jeg ikke ved så meget om
  • http, ved at bruge en ganske normal url
  • file, file://DriveLetter:\FolderName\IdentifierName, for eksempel

    file://E:\MyButton.mcml

Når man bruger .resx, som her er adressen man bruger resx://AssemblyName/ResourceContainerName/IdentifierName. Den lille finurlighed man skal holde øje med er ResourceContainerName, som inkluderer namespace som prefix (det rodede jeg en del med).

Du kan læse mere om dette i Windows Media Center SDK under Using Resources in MCML.

MCML

Åben nu Forside.mcml igen. Som du kan se er MCML blot et XML dokument. Den nemmeste måde at se på et mcml dokument er at se det, som et projekt for sig selv. Komplet med assembly referencer, klasser, objekter, lokale variabler, events og metoder. Metaforet passer selvfølgelig ikke 100% på men som du vil se er der mange paralleler.

<Mcml>

Top elementet indeholder referencer til andre Mcml dokumenter og .NET assemblies (Yep, man kan direkte fra MCML instanciere objekter og kalde metoder fra .NET). Den første attribut xmlns=”http://schemas.microsoft.com/2006/mcml” definerer blot at dette er et mcml dokument og at der findes et xml skema, der skal overholdes. Det er rigtig nice fordi så kan Visual Studio bruge Intellisense :)

Efter det har vi en reference til System: xmlns:cor=”assembly://MSCorLib/System” dette definerer cor som et synonym for namespacet System i assemblien MSCorLib. Hvilket vil sige at hvis vi skal bruge en streng vil vi skulle skrive cor:String som type.

Lad os på dette tidspunkt tilføje en reference til vores projekt, så vi kan tilgå det kode vi laver senere. tilføj en ny attribut

<Mcml xmlns="http://schemas.microsoft.com/2006/mcml"
      xmlns:cor="assembly://MSCorLib/System"
      xmlns:a="assembly://MCTest/MCTest" >

Hvor MCTest skal være navnet på dit projekt.

<UI>

UI svarer til at lave en klasse i C#. Faktisk svarer det lidt til at lave en User Control, som kendt fra Windows Forms. Name attributten er påkrævet, ligesom det er påkrævet at navngive sine klasser. Som med klasser kan man nedarve UI elementer med BaseUI attributten, men det går jeg ikke lige ind i her.

<Properties>

Properties er ligesom public properties i C#. Det er variabler der er mulige at sætte fra andre UI elementer. I det her eksempel har vi MyColor som en property. Dvs. at hvis jeg ville instanciere Forside fra en anden UI med en anden farve i MyColor ville jeg gøre sådan:

<f:Forside MyColor="Black" />

Givet at jeg har lavet en reference til Forside.mcml i <Mcml>

<Mcml xmlns="http://schemas.microsoft.com/2006/mcml"
      xmlns:cor="assembly://MSCorLib/System"
      xmlns:a="assembly://MCTest/MCTest"
      xmlns:f="resx://MCTest/MCTest.Resources/Forside">

Hvis jeg ville have at man skulle selv definere MyColor istedet for at den har en default værdi, så ville jeg skrive:

<Color Name="MyColor" Color="$Required"/>

$Required er et keyword i Properties.

Application.cs sender i GoToMenu() en reference til sig selv i en property kaldet Application, hvis vi vil have adgang til den fra Forside skal vi have defineret den property:

<a:Application Name="Application" Application="$Required"/>

Linjen definerer en property af typen Application fra namespacet a giver propertien et navn, som den kan refereres via i dette UI element, og at værdien af den nye property skal gives som input til UI elementet når det bliver brugt.

<Locals>

Locals er som det lyder, lokale variable, dette kan være alle former for objekter og de er kun tilgængelige i dette <UI>. Locals er som instans variable så hver instans af en UI har sin egne Locals.

<Rules>

Rules er hvor ting bliver sjovere og hvor klasse metaforet falder lidt fra hinanden. Her kan man lave regler for hvad der skal ske når events bliver affyret. Man kan definere hvad der skal ske når objekter’s properties bliver ændret, dog kun hvis man har lavet de properties korrekt ;)

Rules er lidt mere avanceret og kun sjovt hvis vi har nogle meningsfyldte rules at lave, så indtil videre springer vi lige dette over. Jeg vil dog lige hurtigt forklare <Default>. Default reglen sætter værdien af Target til værdien i Value hvis ingen andre regler definerer hvad Target skal være. I eksemplet:

<Default Target="[MyText.Content]" Value="[MyString]"/>

Her bliver Mytext.Content sat til strengen MyString som er defineret i Locals. Hvis der ikke er andre regler der sætter MyText.Content til noget andet. Med det menes at vi kunne have lavet en Condition rule der hvis et bestemt krav er overholdt sætter MyText.Content til noget andet. Hvis det krav på et tidspunkt ikke længere er opfyldt vil MyText.Content få værdien MyString igen, pga Default reglen.

Når man bruger variable som parametre i attributter skal der klammer rundt om.

<Content>

Content er hvor selve interfacet skal defineres. Her bruges predefinerede og egne UI elementer til at beskrive hvordan dette UI element skal se ud. Der kan kun være et element under <Content> men heldigvis kan det element være et sammensat element som <Panel>, <ColorFill> eller <Clip>. I Forside.mcml er der kun et <Text> element i Content, Text er indbygget og er stortset en label, sæt den et sted med en font og farve så skriver den noget tekst.

En knap

Vi vil starte med at lave en simpel knap, så når vi trykker på den vises en dialog boks. Vi tager selvfølgelig udgangspunkt i Forside.mcml.

Knappen vi laver skal have et fint lille ikon og noget tilhørerende tekst, og så må den egentlig gerne være centreret på skærmen.

Først skal vi have et <Panel>, <ColorFill> eller <Clip> ind fordi vi skal bruge mere end det ene <Text>. Så det første vi gør er at putte <Text> ind i en <ColorFill>. Vi bruger en color fill for så er det åbentlyst hvor stor knappen er :)

<ColorFill Content="Gray">
  <Layout>
    <FlowLayout ItemAlignment="Center" Orientation="Horizontal"/>
  </Layout>
  <Children>
    <Text Name="MyText" Color="[MyColor]" Font="Calibri, 24"/>
  </Children>
</ColorFill>

Alle container elementerne som colorfill har 2 vigtige under elementer, det er layout og children. Layout bestemmer hvordan containerens children skal positioneres ifht hinanden, hvis man ikke bruger noget layout vil alle bare blive tegnet ovenpå hinanden. Den jeg har valgt her er FlowLayout, som tegner alle elementer i en række enten horizontalt eller vertikalt. I dette tilfælde horizontalt og ItemAlignment siger hvordan elementerne skal positioneres på det andet led, her er center valgt for så er elementer centreret ifht det største element.

Nu vil vi gerne have et ikon på vores knap, dette gøres ved at lægge et billede i projektets resources, det er under Project-> Properties-> Resources -> Vælg Images (Ctrl+2). Her kan man trækket et billede over i eller bruge Add Resource -> Existing File. Du kan evt bruge dette billede(*hint til fremtidige guides*):

harddisk

Med billedet i resouces kan vi tilføje det til vores color panel. Lige før Text elementet skriv:

<Graphic Content="resx://MCTest/MCTest.Resources/harddisk" />

Hvis du starter debugging nu vil der være en “knap” i øverste venstre hjørne. Men vi vil egentlig gerne have den centreret, så vi lægger ColorFill ind i et Panel:

<Content>
  <Panel Layout="Center">
    <Children>
      <ColorFill Content="Gray" Name="Baggrund">
        ...
      </ColorFill>
    </Children>
  </Panel>
</Content>

Dette panel bruger en Inline Layout parameter, som jeg ikke vil komme ind på nu, blot at dette Center layout lægger alle underelementer direkte i midten af Panelet (oven på hinanden) så den er bedst at bruge hvis man kun har et element under <Children>. Hvis du har gjort sådan som jeg har forestillet mig du ville vil du nu have denne skærm hvis du starter debugging:

image

Nu har vi en dødkedelig knap man faktisk ikke kan noget med. For at få lidt gang i denne knap skal vi til at lave nogle rules.

Først og fremmest vil vi gerne have knappen til at kunne få fokus. Under <Rules> tilføjer vi:

<Default Target="[Input.KeyInteractive]" Value="true" />

Som betyder sæt denne UI til at være interaktiv! Input er en indbygget variabel. Når knappen kan få focus kan vi gøre så den kan klikkes på, til det skal vi bruge en Input handler, nemlig ClickHandler. Sådan en oprettes under <Locals>:

<ClickHandler Name="Clicker"/>

Desuden skal der oprettes en Command, som blot er et objekt der forstår konceptet af at blive Invoked. (Til tider bruges interfacet ICommand istedet så man kan sende en command som parameter under Properties, men det kommer vi tilbage til). Nu skal vi bare bruge en Command under <Locals>:

<Command Name="Kommando" />

Nå man klikker med vores Clicker skal Kommando Invokes. Det beskriver man ved at binde Kommando til Clicker.Command under <Rules>:

<Binding Target="[Clicker.Command]" Source="[Kommando]" />

Dette er stortset synonym for Clicker.Command = Kommando;. Nu kan vi faktisk klikke på vores knap. Men da Kommando stadig ikke gør noget sker der heller ikke noget. For at gøre det lidt sjovere vil vi kalde en funktion fra vores C# kode i Application.cs, der er der allerede en funktion:

public void DialogTest(string strClickedText)

Som vi vil kalde. Det gør man også med en Rule:

<Changed Source="[Kommando.Invoked]">
  <Actions>
    <Invoke Target="[Application.DialogTest]"
            strClickedText="Uhh, gør det igen!" />
  </Actions>
</Changed>

Denne siger: Hvis Kommand.Invoke ændrer sig (eller i dette tilfælde, da Invoked faktisk er et event, bliver affyret) så udfør alle opgaver under <Actions>. <Invoke> kalder en funktion på et eller andet objekt. Da Application er defineret i vores Properties kan vi kalde DialogTest på den direkte ved navn. De parametre DialogTest tager skal tilføjes som attributter til <Invoke> disse er case-sensitive!, i dette tilfælde er det strClickedText. som selvfølgelig er den tekst der skal stå i dialogboksen.

Nu skulle det være muligt at klikke knappen og få følgende fine besked:

image

Till next time

Det var det for denne del af guiden. I del 3 vil jeg begynde at lave en Filbrowser, hvor der skal laves lister og disse skal bindes til filbrowser C# kode.

Sidst får du lige her min kilde kode for Forside.mcml.

felizk Programming, Tips, Tutorial, Vista Media Center

Image.FromFile låser filen selv efter Dispose

April 16th, 2008

Jeg havde lige et problem med mit slideshow program at Image.FromFile låser en fil så jeg ikke kunne slette det. Selvom man disposer den…

Jeg søgte lidt på det og det er vist med vilje pga. noget med nogle tiff filer… :/

Den måde jeg slap omkring det var at køre garbage collectoren (Det må man ellers ikke :( )

English: Image.FromFile locks file even after Dispose

I had trouble deleting a file I had loaded using Image.FromFile. Even after disposing the Image. It seems this is intended behaviour because of some Tiff files are represented as several images (or something) :(

In any case, the only way I found to avoid this was to run the garbage collector after disposing the image:

string path = @"C:\users\bastard\Pictures\w00t.jpg";
Image i = Image.FromFile(path);
i.Dispose();
i = null;
// File.Delete(path);  This will fail :( 
GC.Collect();
File.Delete(path); // Yay! If you have the right and nothing else goes wrong

felizk OS, Programming, Tips