SonyEricsson Xperia Mini Pro anmeldelse

xperia mini pro

 

Nu har jeg haft min Xperia Mini Pro I ca. 4 måneder og tænkte det var på tide med en kort anmeldelse. Jeg købte telefonen til at erstatte min gamle Iphone 3GS og det er denne der er sammenlignings punktet.

Mine primære anvendelser af den er følgende:

- Skrivning af massere af beskeder (sms, email, windows live).

- Bruge den som wireless hotspot til min ipad.

- Lidt browsing og hurtige foto’s.

Den hurtige konklusion er at jeg rigtigt godt kan lide telefonen, men den er en ikke helt problem fri løsning. Jeg somsagt kan godt lide telefonen, den passer godt i hånden og ligger godt i lommen. Tastaturet er klart dens største fordel, det fungere utroligt godt og jeg kunne hurtigt skrive meget hurtigere og mere fejlfrit end på min iphone. Det er også mere behageligt for mine fingre at skrive lange beskeder.

I forhold til iphonen er de widgets man kan placere på forsiden rigtigt gode, så man hurtigt kan tjekke sin kalender/opgaver osv. Wifi hotpot fungere rigtigt godt og stabilt.

Batterilevetiden er dog meget ringe, den kan ikke presses til mere end en dag hvor min iphone med samme brugsmønster godt kunne holde 1,5-2 dage.

Kameraet levere udemærkede billeder uden de er noget særligt (se eksempler i bunden af denne artikel) men kameraknappen er meget ringe udført. Den er svær at trykke nok ind og man skal holde den inde i et stykke tid før den starter kameraet.

Skærmen på 3 tommer er for mig, fin, men havde telefonen ikke haft det fysiske tastatur havde jeg nok synes den var for lille.

Med hensyn til android market synes jeg der er mange spændende programmer som der ikke er tilgængelige til iphonen (fx dropsync og airdroid) men desværre er den generelle kvalitet og finish af programmerne i market meget lavere end i apples app store. Et andet software problem er at der er alt for meget præinstalleret crapware, min Xperia Mini Pro kom fra Telenor der var mange forskellige programmer installeret (fra link til deres hjemmeside til forskellige foldbold ting) og der var endnu mere af slagsen fra SonyEricsson og noget af det startede op automatisk og optog den fri RAM. Heldigvis kunne man afinstallere skidtet fra telenor men ikke alle SonyEricsson programmerne kan nemt afinstalleres, her skal man roote telefonen først. Dette leder mig frem til at før jeg afinstallerede programmerne var performancen i telefonen meget svingende, hvor nogle gange var hurtig og andre gange meget langsom. Efter afinstallationen af programmerne har den en helt tilfredsstillende hastighed men jeg synes det er utrolig dårlig ”service” fra telenor og SonyEricsson at de levere den sådan.

Så alt i alt er jeg lidt splittet i om jeg vil anbefale telefonen, så jeg tror jeg vil ende med at sige at hvis man gerne vil have det fysiske tastatur er den et rigtigt godt bud til en lav pris, men er man ikke specielt interesseret i tastaturet skal man kigge på en telefon med en større skærm.

MTP i Windows på android

Et lille tip, hvis man oplever at ens android telefon (fx min sony ericsson xperia mini pro) ikke vil forbinde til Windows i MTP (Medieoverførsels tilstand) så kan man med fordel vælge at “afmontere” ens SD kort inden man forbinder telefonen til computeren. Så fungere det uden problemer, og vil man overføre ting til det kan man montere det igen når telefonen er tilsluttet.

 

Man afmontere det nemmest ved at vælge Indstillinger -> Lager -> Demonter SD-kort

 

Custom URL handler til Windows

Hvis du gerne vil kunne starte et program fra et link i Internet Explorer (eller anden browser på Windows) kan det gøres ret nemt. Man skal bare lave en tilføjelse til registreringsdatabasen og selve håndteringen af linket er bare et kald til til et program med det der står i linket som parameter.

For eksempel ville et link der hed <a href=”test:dette er en test”> vil den kalde programmet test.exe med parameteren dette er en test (test.exe dette er en test).

Man skal lave følgende registrerings database nøgler:

[HKEY_CLASSES_ROOT\TestUrlHandler]
@=”URL:TestUrlHandler Protocol Handler”
“URL Protocol”=”"

[HKEY_CLASSES_ROOT\TestUrlHandler\shell]

[HKEY_CLASSES_ROOT\TestUrlHandler\shell\open]

[HKEY_CLASSES_ROOT\TestUrlHandler\shell\open\command]
@=”c:\\sti\\til\\programfil.exe \”%1\”"

Jeg har også lavet det til en .reg file der kan hentes her (Højreklik og vælg gem som). Jeg anbefaler man bruger filen frem for at taste det ind manuelt da det kan være lidt tricky at få lavet korrekt hvis man gør det manuelt.

I denne skal man bare tilpasse navnet på linket (alle de steder hvor der står TestUrlHandler for sig selv) og stien til programmet og dobbeltklikke på filen.

Når dette er gjort kan du lave et HTML dokument med et link der peger på TestUrlHandler:DinParameter og når man trykker på det i en webside vil det åbne ens program med parameteren DinParameter.

En komplet eksempel HTML kode vil være:

<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ />
<title>test</title>
</head>

<body>
<a href=”TestUrlHandler:TestData”>TestData</a>
</body>
</html>

 

Unit testing – en hurtig introduktion

Hvad er unit testing

Unittesting er en er en metode til at teste et program ved at dele et program op i små dele (units) lave automatiserede tests af disse imens programmet bliver udviklet. Denne guide er en hutig introduktion til at lave unit tests i C# under Visual Studio.

Hvorfor unittesting

Formålet er at man tester programmet kontinuerligt under udviklingen således at man hurtigt bliver opmærksom på problemer og nemt kan løse dem uden de store omkostninger.

Derudover gør unittests det nemmere at ændre i koden senere da man ved at genkøre testene kan føle sig rimeligt sikker på at man ikke at ødelagt den eksisterende funktionalitet.

Hvad er en unit

Hvad en unit er afhænger naturligvis af projektet og dets indhold men følgende er generelt udtryk for hvad man bør anse for en unit og teste:

  • Klasser
  • Funktioner
  • Stored procedures
  • Web services

Nogle vil mene at ”skærmbilleder” og andre ting også falder ind under hvad der skal testes som en unit men det er langt henad vejen op til en selv.

Hvordan gør man

Til .NET er der to måder at lave unittests på, nUnit (open source) der er det ældste værktøj til formålet samt Visual Studio Team Test der er microsofts bud og er indbygget i Visual Studio (desværre ikke i den gratis express udgave, kun i betalingsversionerne).  I dette artikel vil jeg bruge Team Test men forskellen på de to er ikke så stor rent kodemæssigt, men i hvordan man køre testene. I Team Test kan man køre dem direkte i Visual Studio, mens nUnit kræver at de køres fra et eksternt program.

For at lave en unit test skal man blot højreklikke på den funktion man vil teste og vælge ”Create Unit Tests…”

Create Unit Tests

Første gang man gør det vil man blive guided igennem skabelsen af et test projekt. Det viste eksempel er en simpel rekursiv funktion der vender en tekst streng om.

Når man har fulgt guiden til test projektet vil man skulle skrive selve test koden, der bare er nrmalt C# kode med enkelte ”nye” muligheder. Min test til reverse ser sådanne ud:

Unit test code

Når man så kører testen vil resultatet blive vist i testvinduet.

Unit test run

Og i dette tilfælde kan man se det gik godt. Muligheden for at køre testen får man ved at vælge Test i Visual Studios top menu, derefter Windows og Test View. Gik det ikke godt stod det i Result kolonnen og fejlen stod i Error Message kolonnen.

Den del der bestemmer om hvorvidt testen er en success er den linie med Assert. Der er flere forskellige muligheder for at teste resultatet med Assert, i dette tilfælde har jeg brugt AreEqual hvor den sammenligner to strings og siger ok hvis de er ens. Man kunne også have valgt at teste på de ikke er ens, at de ikke er null og et utal af andre muligheder.

Hvor mange tests bør man lave?

Der snakkes meget om code coverage og der findes værktøjer til at måle hvor stor del af koden der testes men umiddelbart falder det tilbage på sund fornuft. Man bør teste nok til at man har ro i maven om at det vigtige i ens program testes automatisk. Generelt vil jeg sig at man bør koncentrere sig om to dele, det vigtige og det svære/uigennemskuelige.

Best Practice

-       Alle unittests bør være selvstændige og komplette, de bør ikke referere eksterne ”units” som for eksempel databaser. Her bør man i stedet bruge stubs og interfaces.

-       Unitstests må ikke være afhængige af andre unittests, dvs de må ikke skulle køres i bestemte række følger.

-       Unittests skal være automatiske, de må ikke kræve nogen form for brugerinput eller holden i hånden.

Referencer

-       Test Driven Development: By Example af Kent Beck

-       Guide fra Microsoft: http://msdn.microsoft.com/en-us/library/ms379625(v=vs.80).aspx

Server nedbrud og defekt backup

Jeg har desværre haft et server nedbrud, og hvad endnu værre var at den nyeste backup var defekt. Så derfor mangler de nyeste indlæg og nogle af billederne, men jeg vil få dem lagt op igen hurtigst muligt.

3 grunde til denne Windows udvikler ikke skal have en Windows Phone

Da microsoft annoncerede Windows Phone 7 var jeg meget imponeret, og efter at have prøvet en telefon (HTC Mozart) med Windows Phone 7 var jeg endnu mere imponeret, men som jeg ser det er der tre showstoppers der fraholder mig fra at købe en windows phone.

1: Ingen dansk ordbog
2: Ingen Copy/Paste
3: Og den slemmeste, ingen adgang til noget somhelst som dansker. Man kan ikke bruge den som andet en telefon medmindre man opretter en falsk live profil hvor man oplyser man bor i USA (Læs mere her).

Jeg kan ikke se hvordan HTC/Microsoft kan tillade sig at sælge de telefoner i danmark uden nogle meget tydelige advarsler. Det er ellers ærgeligt, da det virker som et godt produkt med en fantastisk brugergrænseflade (tænk at det skulle leveres af microsoft!) der er nemmere at udvikle til end IOS/Android.

Afsending af email direkte på en SMTP server

Hvis du vil afsende en email ved at forbinde direkte til SMTP serveren med telnet er her en guide til hvodan man gør.

Det kan blandt andet være nyttigt i forbindelse med fejlfinding. Alt med rødt i nedenstående tekst skal du ændre. Først skal du telnettet til mail serveren på port 25.

Det gør du ved at skrive: telnet min-mail-server.dk 25 i en kommando prompt. Så svare den fx med: 220 min-mail-server.dk ESMTP Postfix

Derefter skal du så skrive: Helo min-mail-server.dk

Så skal du skrive afsenderen af emailen. Mail from: min-email@domæne

Og modtageren Rcpt to: modtager@domæne

Også kommer selve indholdet i emailen. Før skal du skrive Data og trykke enter. Så er den klar til at du kan skrive din besked. Når du så skal afslutte beskeden skal du skrive et punktum (.) på en linie for sig selv. Så bliver den sendt.

MonoMac

Nu har mono folkene udgivet MonoMac, der er ObjectiveC bindinger til .NET så du kan lave native mac programmer med .NET.

Mit første MonoMac program (et program til at downloade youtube video’er) kan ses her.

Extension metoder i C#

Extension metoder er en måde at udvide de indbyggede (og andre) klasser i .NET frameworket (Fra 3.0) med dine egne funktioner, således at det for eksempel bliver muligt at kalde string.indeholderMartin() eller måske endda noget mere brugbart.

Til det første eksempel bruger vi string.indeholderMartin(), det vil man skrive på følgende måde:

     public static bool indholderMartin(this string expression) 

            {

                   if (expression == null)

               {

                    throw new ArgumentNullException("expression");

               }

                        if(expression.Contains("Martin"))

                                                return true;

                        return false;

            }
Denne funktion kan man så kalde på alle strings. Fx med følgende:

string s = ”test af en martin funktion”;
bool test = s.indeholderMartin();

Det der gør det til en extension metode er tilfældet af this som den første parameter til funktionen, anden parameter fortæller hvilken type objekter den operere på og den sidste (expression i mit tilfælde) er det data der skal opereres på. Altså den funktion man kalder metoden på.

I tilfældet med test funktionen indeholderMartin() er parameterne this, string og expression. This er påkrævet, string fortæller den at man kan kalde funktionen på string (skifter man det ud til object vil den være tilgængelig på alt der arver fra object) og expression er indholdet af den string man kalder funktionen på.

Der er følgende krav til extension metoder:

- Metoder skal tilføjes som statiske klasser.

- Extensions er ikke rigtigt en del af klassen, så du kan kun tilgå offentligt metoder og properties.

- Extension metoden skal være i det namespace den skal bruges i, eller inkluderes (med using).

- Extensions har kan ikke overwrite metoder, dvs hvis der allerede var en funktion i string der hedder indholderMartin() vil den blive brug frem for extension metoden.

Man behøver ikke udvide en specifik klasse, den følger med ved nedarvning så man kan også udvide Object som i følgende eksempel (brug med omtanke)! For give et lidt mere brugbart eksempel er der her en toInt() funktion på object, således at alle klasser får en toInt funktion lige som de har en toString().

public static int toInt(this Object expression) 

            {

                   if (expression == null)

               {

                    throw new ArgumentNullException("expression");

               }

                                int i = int.MinValue;

                                int.TryParse(expression.ToString(), out i);

                                return i;

            }

Så kan man på et hvert objekt skrive .ToInt(),  uden at frygte exceptions.

En anden brugbar funktion er et null check:

public static bool isNotNull(this Object expression) 

            {

                   if (expression == null)

               {

                  return false;

               }

                                return true;

            }

Denne funktionalitet kan man også bruge til at give default værdier til funktionen i tilfælde af at det objekt man kalder den på er null.

public static bool indeholderMartin(this string expression) 

            {

                   if (expression == null)

               {

                  return false;

               }

                                if(expression.Contains("Martin"))

                                                return true;

                        return false;

            }

Så er min første lille iphone applikation blevet udgivet!

Så er min første lille iphone applikation blevet udgivet. For at tage beskrivelsen fra itunes (link):

IPView is a small application which displays the current IP address on all your iphone and ipod’s network interfaces.

Media_httpiphonemarti_abksv

IPView