fredag den 30. maj 2014

Multioplader til hele familien!


De fleste familier har behov for opladning af en masse mobiler, og/eller tablets.
Her hjælper Sanctuary 4 oplader fra Bluelounge dig rigtigt godt, for den giver mulighed for flere kan lade deres mobil imens tabletten står og lader og eventuelt viser noget i synes er relevant i pause mode (såsom udvalgte billeder).
Jeg synes personligt den ville være helt perfekt at have stående ude i køkkenet, så kunne man lige sætte den til lader imens man spiser morgenmad og eventuelt lade tabletten streame radio til din afspiller i køkkenet.
Ville nok gå efter den i hvid, men uanset hvad synes jeg virkelig den virker lækker!

torsdag den 29. maj 2014

Styr på kablerne? Cabledrop!


Har du ligesom mig brug for at have en masse kabler mange steder i huset?
Så har du løsningen her!
Cabledrop!

Ser godt ud, er lille og nem at arbejde med og placere, samt du kan placere dine kabler som du vil uden de falder af dit sofa-, senge-, og arbejdsbord.
Jeg har altid en masse ladere rundt om i huset til en mobil eller tablet, men problemet er så pludseligt bare at det er irriterende at have kabler hængende og ser ikke specielt lækkert ud! Her hjælper cable drop som nu kan fås for den nette sum af 59 kroner.

Jeg skal selv have en på hver af vores natborde til hver vores mobillader kabler, en på mit computer bord, et på tv border, og så et par på et par dørkarme hvor jeg har ladere sat i stikkontakterne ved siden af.

onsdag den 14. maj 2014

Udvikleren vil lave det korrekt


Det er så dejligt at have en kunde der er enig i at tingene kan ændres hvis behov og ønsker ændres, og at der tages hensyn til ens estimater.
Ofte bliver man presset på tid og pris, men ikke her, og det er virkeligt forfriskende!
At man faktisk kan estimere og at det tages seriøst, og hvis det ikke holder tidsrammen så vil man se på flere ressourcer. Ikke ensbetydende med at man ikke skal arbejde hårdt og meget for stadig at nå det, men er dejligt at der faktisk høres efter hvad man har at sige til det de ønsker og vil have lavet.
Estimater kan rykkes fordi der er tidsplaner med det projekt der skal overholdes, men ofte betyder det vi får flere folk på, og så tages der igen hensyn til at vi ikke skal tænke på om vi kan nå det ud fra et korrekt estimat og skal overestimere fordi man ved at de tager 20% af tiden så man skal estimere 20% over tiden man mener man skal bruge.


Det gør ret meget at man kan have et godt og korrekt forhold med sin kunde, de respekterer os og vores viden og udsagn, samtidigt med vi respekterer deres ønsker og design, og samtidigt kan man have en god dialog omkring hvordan ting skal se ud og virke - om det er passende og om det er noget de virkeligt vil have. Nogle gange har en umiddelbar lille rettelse stor betydning for at du skal rette meget kode for at få den til at opføre sig sådan, og det er der god debat om det virkeligt er nødvendigt.
Når man er udvikler i ASP.NET så er man glad for at man kan have en korrekt dialog med sin kunde omkring formål, og hvor vigtig den funktionalitet er, samt rækkefølge.
Fx kan vi snakke om hvad man behøver først, fordi det skal laves først, og her kan man godt snakke med dem hvor de kan forstå at der skal laves noget forarbejde, og at det vil tage noget tid før vi kan leverer noget. Sådan nogle ting der virkeligt vigtige for en systemudvikler, fordi ofte så sætter kunden nogle krav ud fra deres ønsker i troen om det "kan man bare lige", og ud fra nogle budgetter og tidsplaner, som måske ikke helt passer med virkeligheden.
Den slags ting får vi ikke, og det gør arbejdet bedre i dagligdagen når man er udvikler.

tirsdag den 13. maj 2014

JSON har 'd' property?


Hvis du opgraderer fra .NET 2.0 til fx .NET 3.5, så vil du opdage at nogle af dine metoder måske returnerer noget andet tilbage til dit javascript.

Det er fordi at der er kommet en sikkerhedsopdatering til .NET 3.5 som gør at returnerer du ting der ikke er objekter, så pakkes de ind i et objekt med en property kaldet 'd'. Dette er på grund af cross site scripting attacks.
Dette er fordi at hvis du returnerer en string kan dette være et array, og så snart du får det tilbage kan kode indeni i det faktisk afvikles, selvom du ikke har tilgået det endnu.
Så hvis fx du returnerer et array med strings som har <script>alert('hello world')</script>, så vil koden blive afviklet og det gør det usikkert.
Fx kunne man indsætte et script som kalder en json server på et andet domæne (er supporteret i script tags), som returnerer eksekverbar kode, som fx overloader objektet og derigennem får adgang til data'ene fra det andet domæne.
Faktisk er det også en af grundene til at GET ikke er enabled fx når du starter med at lave json actions i ASP.NET MVC.
Udover det så er det bedre praksis at returnere et objekt, for fx. hvis du ønsker at tilføje noget mere data så er dit array ikke stort nok, og validering er meget besværligt at indbygge i dit array.
Ved at det er et objekt så har du mulighed for at lave en data annotation som validerer dine data når de kommer tilbage til serveren.

Så dette vil sige at alle de webmethods du før har haft (fx i webforms) vil nu ikke længere returnere din string direkte tilbage til dit javascript eller jQuery, men returnere et objekt med d property som har det du sender tilbage.

En måde at gøre din kode kompatibel med begge dele er ved at sætte dine data til at håndtere begge scenarier.

var returnValue = {returned json data from ajax call}
var realValue = null;
if (returnValue.hasOwnProperty('d'))
{
      realValue = returnValue.d;
}
else
{
      realValue = returnValue;
}

Således vil din webmethod med string, int, etc. stadig virke som den altid har, uanset hvilken version af .NET du kører, også uanset om det er objekter eller ej.

fredag den 9. maj 2014

Vigtigt ved køb af tablets


Efter at have købt en Samsung Note 10.1 2014 Edition -tablet har jeg så småt fundet ud af hvad der er vigtigt ved en tablet.
Indmaden er vigtig, absolut! Den skal være hurtig og kunne trække det du vil bruge den til, inklusiv spil og apps du ønsker.
DOG er det mindst lige så vigtigt med brugeroplevelsen af softwaren, og her halter Samsung Note 10.1 2014 Edition sku noget efter.

Seperate brugere (hvis du skal dele den med nogen)
For det første kan vi ikke få hver vores bruger på tabletten, på trods af det er tilladt og udviklet i den standard version af Android som den skulle bygge på. Det er vildt irriterende at skulle dele apps, sider og alt på den. Fx hvis jeg tager screenshot af en gave som jeg måske vil købe til min kæreste på den så vil hun kunne gå ind i galleri og se det, hvilket jo er lidt ufedt og ødelægger hendes overraskelse.
Når hun går på facebook og ikke logger af app'en så blipper den hele tiden fordi der er statusopdateringer, plus jeg skal logge hende af og mig på, frem for bare at åbne appen som er til mig.

God stabil og enkel software
Endnu et problem som Samsung Note 10.1 2014 Edition har er at den ikke er stabil nok.
Der skulle være udkommet en opdatering, men som kun er begyndt at blive rullet ud andre steder i verden end danmark så vi har ikke adgang til den.
Problemet er fx at Internet app'en går ned flere gange, og så er der en Media Process der går ned flere gange i træk. Det er et problem fordi du kan så pludseligt ikke downloade filer eller gemme et billede etc. og det er rimeligt basalt for android ville jeg mene.
Derudover så fryser den og føles til tider langsom, og det er bare ikke i orden for Samsung Note 10.1 2014 Edition der alligevel koster så meget mere end konkurrenterne.

Placering af knapper og brugsmønstre
Fx hvis du vender den på højkant som et A4 papir, så bliver tabletten irriterende på grund af knappernes placering. Du rammer ufatteligt tit tilbage eller home knappen når du er midt i noget hvor du skal vende Samsung Note 10.1 2014 Edition tabletten.

Indbyggede features
Hvis du bruger den til interaktive ting så er den indbyggede s-pen rigtigt fin.
Den er også god med du kan hover over ting og få information om dem.
Godt hvis du tager billeder/screenshots af ting du vil lave noget med eller have og kan klippe det ud nemt det du ønsker.
Hvis du ikke bruger den er det ligemeget, men er en fordel den er indeni tabletten i sig selv hvis man bruger den.

Skærmen
Den har vildt god opløsning og skarphed! Farverne står rigtigt flot og lækkert, men den er ikke vildt god i solskin. Så tænk over om du skal bruge den udenfor eller ej.

tirsdag den 6. maj 2014

C# udvikler og car pc projektet

Har jo et car pc projekt for en kammerat (der også er udvikler) jeg skal hjælpe med.
Det er efterhånden ved at være kommet så langt så der skal noget rigtigt indhold til før vi kan rigtigt komme af sted og i gang.

Der bruges ASP.NET MVC 4, og indtil videre laves det som singlepage, men skal nok udvides til flere med priser, features, download etc. så man kan se de forskellige detaljer som man ønsker.

Der mangler stadig meget, men nu begynder der rigtigt at ske noget, samtidigt med softwaren får flere features med fejludlæsning og selvtest af enheder og diverse forskelligt.
Planen er at han skal udvikle mere på car pc softwaren, og jeg skal være systemudvikler på websitet og få det op med den nødvendige information og styling.

Har fået lavet noget relativt lækkert design synes jeg selv der er lidt anderledes og lidt nytænkende som man jo er glad for som udvikler. Så må vi se om det er noget der kan holde vand.

mandag den 5. maj 2014

Windows 8 og 8.1 - en blandet lagkage


Der er gode og dårlige oplevelser ved Windows 8.
Man skal helt klart vænne sig til at arbejde på en anden måde, og tænke over hvordan du gør ting.

Der er mange gode ting i Windows 8, såsom søgning.
Det er dejligt nemt at søge efter ting og man gør det hele tiden.
Menu'erne er blevet anderledes så fx det med man har menupunkter i venstreside under hinanden virker rigtigt godt, men samtidigt er nogle ting blevet ændret og flyttet rundt således det nu er noget andet og derfor ikke så fedt når man ikke kan finde det.
Når først man er kommet i gang med oplevelsen, er den god fordi den er ens og allround. Det kan så være lidt irriterende når man har gamle IE og nye IE for nogle gange må man bruge den gamle fordi den nye simpelthen ikke kan finde ud af det endnu.

Når det så er sagt, så halter nogle dele altså stadig.
På trods af det var Windows 8.1 (fix) vi fik på arbejdet, så er det stadig ikke helt godt nok.
Jeg skulle opsætte noget, og nu er der så tilføjet hjælpelinks på opsætningsbilleder så du kan få hjælp til det du er i gang med.
Det skulle jeg, men det dårlige var så at da trykkede på linket så kom jeg til en side hvor der stod Denne side eksisterer ikke længere.
Rimeligt dårligt, når man tænker på hvilken dårlig start Windows 8 og Windows 8.1 har fået. Netop derfor var det nok lidt vigtigt at du fik hjælpefunktionaliteten på plads, fordi det er så meget anderledes og så mange har problemer.

For mig er det bare dårlig stil at man har noget der er så ufærdigt, og ikke fixer netop det område når det kunne hjælpe på at nogle kunne finde ud af det.

torsdag den 1. maj 2014

ASP.NET åben eller download fil (C#)


Der er forskellige måde du kan få browseren til at håndtere de filer du sender til den.
Fx på min udvikler side, har jeg et fysisk pdf cv som jeg gerne vil dele med folk.

Her er der mulighed for både at åbne den i browseren eller få den til at downloade filen.

I ASP.NET (C#) skal der ikke ret meget forskel i koden til for at give de forskellige responses og typer opførsel med filer.


1. Du skal sætte en ContentType, så browseren ved hvad det er du sender til den

          Response.ContentType = "application/pdf";   

2. HVIS du vil have den skal poppe up og spørge brugeren om du vil downloade/åbne filen uden at åbne den direkte i browseren, skal du tilføje en Header til dit response.

          Response.AppendHeader("content-disposition", "attachment;filename=\"CV - Laurits West - Udvikler.pdf\"");   






Filename er faktisk et du selv bestemmer hvad skal hedde, og kan hedde alt andet end selve filen, men er det der bestemmer hvad der vil poppe ud og sige at denne fil kaldet (xXx) skal åbnes/gemmes.

3. Nu skal du sende din fil og response afsted tilbage.


           string cvpath = HttpContext.Current.Server.MapPath("~/Resources/PDF/CV - Laurits West - 
           string transmitFilePath = cvpath;
           Response.TransmitFile(transmitFilePath);
           Response.Flush();
           Response.End();


Så nu har du styr på at sende filer til klienten på forskellige måder.

onsdag den 23. april 2014

HTTP ERROR - Få sigende fejlbesked fra internet explorer (også i IFrame)




Vi sidder med et projekt hvor vi har behov for at vise nogle eksisterende sider indeni et nyt design, indtil vi endeligt kan udvikle hele siden som ny i en hel ny side.

Problemet er så når fx vores indeholdende side giver fx en http 500 tilbage. Den er generel og man ved ikke helt hvad fejlen er.
Derfor kan man som udvikler få ordnet så internet explorer viser fejl detaljer og man kan se hvad de drejer sig om.

Klik på:
Tools > Internet Options > Advanced
Scroll ned til sektionen "Browsing"
Nederste punkt er "Show friendly HTTP error messages"
Denne krydser du af så den ikke er markeret, og nu kan du få detaljer på dine http error 500.

Det er noget som er meget brugbart som udvikler når man sidder og forsøger at få ens site til at virke ordentligt eller debugge fejl.

Response.Redirect - effekt af slutte dit request


Ofte har man behov for at komme til en anden side, og her bruges Response.Redirect (asp.net) i meget stor udstrækning!
Det man så skal være opmærksom på er at den vil redirecte dig til siden, men som om du er på den originale side.

Fx. Default.aspx skal sørge for du ender på loginsiden.
Hvis du laver Response.Redirect("~/Login/Login.aspx"), så vil din url stadig skrive Default.aspx.
Derimod hvis du laver Response.Redirect("~/Login/Login.aspx", true), så vil din url skrive Login.aspx, fordi "true" til sidst afslutter dit response så din Default.aspx response afsluttes og dermed kommer over til Login.aspx.

Der kan være andre fordele/ulemper ved at bruge en anden metode - nemlig Server.Transfer, men vil jeg beskrive i et andet blogindlæg.

fredag den 11. april 2014

SQL Server og tal-id'er kan godt blive uvenner

Min (4) must be less than or equal to max (-1) in a Range object.

Har i dag stødt på en meget underlig fejl!
Ovenstående fejl fik jeg pludseligt efter at have lavet en rettelse i en tabel, og nu ville den pludseligt ikke tillade mig at lave select på en tabel med select("ObjectID = 20").

Sad længe og undersøgte at der var en tabel, der var rækker, der var kolonner, ObjectID-kolonnen fandtes også. Alt var faktisk lige som det skulle være, men alligevel fik jeg denne fejl.
Det mest underlige var at søgning på
id = 1
id = 4
id = 11
virkede fint, men da den kom til 20 så fik jeg overstående fejl.

Løsningen blev at jeg måtte lave den om så SQL'en blev select(" ObjectID = '20' "), altså med plinger udenom min talværdi som skal søge ned i en række med tal. Dette løste problemet, men efterlod mig stadig forundret over at det var nødvendigt. Jeg forsøger at forsikre mig selv om at det er SQL serveren der har fået noget galt i halsen så det var nødvendigt.


Hvis man arbejder i VB.NET, og man er vant til at arbejde i C# .NET skal man lige være opmærksom på en ting. Hvis du i VB.NET vil kontatinere en sql select string selv, så skal du bruge & til at sammenstykke dem, og huske at lave .ToString() på dine tal værdier, fordi VB.NET kan ikke ligesom C#.NET kan, finde ud af at hvis du sammensætter en string med et tal, skal tallet laves til en string.
Så hvis du bruger '+' imellem din string og tal, så vil den forsøge at lave det til et regnestykke og kan give meget underlig opførsel.

"ObjectID = '" + e.Item("ID") + "'" er forkert!
Det skal være "ObjectID = '" & e.Item("ID").ToString() & "'" er korrekt!

Så brug &-tegn i stedet for +-tegn når du arbejder med strenge og tal, i VB.NET, plus husk at lave dine tal til bogstaver med .ToString() så du er sikker på at VB.NET ikke laver et regnestykke i stedet.

Hjemmet til en udvikler


Som udvikler så har man en tendens til at blive gadget freak, og elske intelligente løsninger i hjemmet.
Det gør jeg også, så nu da vi har fået et hus, skal der også være et sted der har samlet plads til hele familien, uanset om det er billeder, film, musik, eller hvad vi nu end har.
Det har vi fået med vores nye NAS, så alle i familien vil kunne tilgå vores fælles filer.

Det skal opbygges så vi kan dele filer fælles alle steder, så hvis vores barn ligger billeder op fra deres tur til en skatepark så kan vi alle se det alle steder, og de kan vise billeder og video på tv'et når deres venner kommer forbi.

Vi har fået vores musik og film lagt derover, men skal have lidt struktur, for vi skal også have den til at den automatisk henter fx troldspejlets podcasts. Der vil jo være andre podcasts etc. som børnene de vil ligge ned i det fælles område også (når der kommer børn til).

Indtil videre kan PS3'eren så præsentere det, men på sigt skal det udvides til noget mere intelligent.
Fx i køkkenet har vi en netradio som kan afspille webradio (fx en græsk kanal) fordi den er på trådløst, og faktisk også vores musik, men er ikke så nemt eller intuitivt. Den skal på sigt udskiftes med en Sonos Play:3, og så skal vi have en Sonos Play:1 ude på badeværelset til når vi går i bad. Så skal der en Sonos Play:3 til stuen også til når vi vil høre musik, og måske en 1'er eller 3'er til udestuen.

Udover dette skal vi have en XBMC medie afspiller, som også kan afvikle gamle spil. Planen indtil videre er at få en Intel NUC som kan afspille XMBC fra standard, og man så kan skifte over så vi kan spille gamle spil på den når man får gæster.



Vil også gerne på et tidspunkt have sat op på vores router at vi har et gæstenetværk som er åbent for vores gæster med en simpel kode så alle gæster kan tilgå det, hvor der er en begrænsning på til forbrug af hele båndbredden. Så når vi holder fødselsdag, indflytningsfest og alt muligt andet står den simple kode under glassene og så skal vi ikke dele vores eget rigtige netværk og kode med alle vores gæster.

onsdag den 9. april 2014

Fordelen ved at arbejde med damer og piger (som udvikler)


Der er mange arbejdspladser hvor man slet ikke kommer til at arbejde med andet end mænd, og endnu mere min branche blandt udviklere.
De har en helt anden tilgang som udvikler, deres tanker og ideer er på en anden måde, og måden de løser opgaver og problemstillinger er også helt anderledes. Vi mænd er ofte meget hurtige til at finde en løsning og så skal vi bare af sted, hvor kvinder lige skal filosofere over om løsningen er god nok, og nogle gange så er det en fordel fordi man har glemt en lille detalje.
Oftest er det dog mere stemningen de skaber som er dejlig.  I det daglige er der sjov på en anden måde, til afdelingsmøder letter de stemningen lidt, og i det hele taget er der lidt mere smil fordi de hjælper til.
De er bedre til lige at drage omsorg og spørge til ting de ved er omkring dig i øjeblikket. Hvis du får børn, hus, hund, eller du har nogle problemer med noget familie og sygdom så selvom de ikke kender dig og personen er de bedre til lige at huske på at spørge til det.
Selv sådan noget som hvis du er blevet klippet noterer de på en anden måde, og det giver altså stemning og liv på en anden måde fordi de lige kommenterer dit nye hår, hvor mændene mere undlader at kommenterer de selvom de nok ligger mærke til det.

Kvinder er nogle gange også bedre til detektivarbejdet. Det irriterer dem ikke at bruge enormt lang tid på at finde ud af hvorfor noget skete og finde ud af fordi at det var månedsafslutning så blev en backup forsinket af nogle andre, som påvirkede vores kørsel, som så fik slukket ned for hurtigt, derfor lavede fejl i et andet batch program som så fik skrevet nogle forkerte data og derfor blev en kunde rørt med en meget mystisk fejl. Sådanne opgaver hader jeg, og det gør damerne absolut også, MEN de er bare meget bedre til at bibeholde modet og fortsætte detektivarbejdet hvor jeg bliver mere utålmodig med sådanne ting.
Sådan er begge køn meget forskellige som udvikler, men gør os begge stærkere til forskellige ting hver især.


mandag den 7. april 2014

IE Blank spaces after IMG tag - How to fix it


The problem with IE (Internet Explorer) is that if you out an image inside some other element it gives you a blank space after an image.

For instance:
<div style="border: 1px solid black;>
    <Img src="developer.jpg" alt="Developer" />
<div>

This will give you a space on the right side of the picture to the border. Very annoying!
If you place another item next to it, it will still add the blank space, and disturb two images that are meant to be together.

IE (Internet Explorer) creates a linebox for whitespace that follows the IMG tag, and this leaves space for the descenders of p's and y's. "p" and "y" is not placed the same vertical place as "a" and "c" which is the problem that causes this. The base of the image is aligned by default with the base of normal letters, a's and c's.


FIX 1:
Add "vertical-align: bottom" to the IMG style or css class.
This will sit it flush with the bottom of the descenders, and there will be no gap underneath.

FIX 2 (DIRTY):
If you remove any trailing whitespace in your code it removes the error as well.

For instance:
<div style="border: 1px solid black;>
    <Img src="developer.jpg" alt="Developer" />
<div>
ends up being
<div style="border: 1px solid black;><Img src="developer.jpg" alt="Developer" /><div>
 so there is no whitespaces in your code following the image and the next element.


tirsdag den 1. april 2014

Keep it simple, når du udvikler


Både i design og funktionalitet er det vigtigt at have en simpel struktur.
Samme princip jeg har baseret www.csharpudvikler.dk på, som skal være en simpel side der viser lidt mere omkring mine udvikler kompetencer, og mig som udvikler (ASP.NET udvikler).
Designet er opbygget simpelt og let forståeligt. Funktionaliteten er det samme, så vedligeholdelse er minimal og simpel. Ting bliver pakket pænt ind, så jeg ikke skal så meget udover at lade den gøre arbejdet.

Nuværende arbejder jeg sammen med en som har samme mantra, men svært ved at overholde det for sin egen kode. Kommentarer er der intet af, strukturen er en der er selvopfunden og smart (som kun han kan finde ud af, da der er ingen kommentarer, eller logik bag - udover hans egen), hans metoder er hurtige, men ikke gennemtænkte. Hvis ikke alt er lavet som det var i hans hoved fungerer det ikke, og der er ikke opsat noget der kan håndtere andet.
Fx at kalde et objekt, og en property på dette objekt, og trimme værdien - alt i et kald.
Så hvis objektet ikke er initialiseret som var logisk i hans hoved (ikke for andre), så virker det ikke og brager ned i stedet for at håndtere det ordentligt.
En lille smule fejlhåndtering bygget ind i sin kode gør ikke noget. Man forventer aldrig ens kode fejler, men hvis den gør så lav graceful degredation. Oplever selv jeg kalder funktioner og metoder fra andre udvikler som opfører sig anderledes end jeg forventede, og derfor forsøger jeg selv at oparbejde min kode omkring at andre udviklere der skal have min kode nok ikke vil synes det er intuitivt selvom jeg synes og derfor håndterer mange fejlscenarier fra start af.

Det synes jeg selv er en af mine forcer som udvikler. At jeg forbereder min kode for fejl, og er noget jeg har lært lige fra start af i min karriere. Der er ikke noget værre end når man skal lige fixe noget, og så er der et eller andet der brager ned i noget kode der er enormt rodet, laver mange redundante ting der ikke er logiske, i metoder der ikke har sigende variabler i, metode navn der minder om russisk og ingen kommentarer om hvad de forskellige dele gør og er der for. Så tænker man bare det kan en kodeabe også lave, men ikke en rigtig udvikler der tænker længere end sin egen næsetip.