Kategoriarkiv: Gode råd

All your base

… are belong to us!
(Nej, vi er ikke blevet hackede!)

I går aftes tumlede jeg blot kortvarigt (igen) med et af de mest fejl-skabende områder inden for programmeringsverdenen; encoding.

Base64 encoding og decoding er smart til overførsel og delvist til lagring af binære data over ikke binære forbindelser / lagerdestinationer. Eksempelvis som HTTP POST data eller svar data på et HTTP GET request, og ligeledes til lagring i en cookie, eller en flash variabel og så videre.

Problemet opstår når et led i data-kæden misforstår base64 og urlencoder det “bare for at være sikker” og fordi “det plejer man da at gøre”. Urlencoding anvendes ofte på streng data for at sikre at disse data kan overleve at indgå som en parameter i en URL adresse. Her vil man typisk omforme mellemrum, specialtegn med videre, til gyldige URL adresse tegn (se kapitel 2 i RFC3986).

Problemet var nemt løst, men som altid med encoding-problemer, handler fejlsøgningen mest af alt om at forstå/gennemskue hele vejen dataene rejser fra start til slut og tilbage igen.

All your base64 YXJlIGJlbG9uZyB0byB1cw==

CSS3 og Intellisense til CSS3

Dette indlæg vil fokusere på CSS3 og efterfølgende hvordan du får Visual Studio til at genkende CSS3 attributter.
De CSS3 attributer vi vil fokusere på er: border-radius og box-shadow.
CSS3 er ikke finalized endnu, så det er altid en god idé at bruge browser specifikke tags, som “-o-box-shadow, -moz-box-shadow, -webkit-box-shadow”.
Disse bliver brugt i resten af dette indlæg, men vil ikke være del af kodeeksemplerne.
Note: Per dags dato understøtter Internet Explorer overhovedet ikke CSS3 endnu.

Lad os begynde med en simpel ustylet knap:

Lad os starte med at give knappen runde hjørner vha. attributten border-radius:

.button1
{
   border-radius: 6px / 4px;
   /* alternativ: border-radius: 6px 6px 6px 6px / 4px 4px 4px 4px */
}

Syntaksen for “border-radius” minder om de andre “border”-attributter. Kanten i hvert hjørne “trækkes” rundt om en usynlig cirkel med den radius som er defineret. Hvis man, som jeg har valgt her, bruger “/” får cirklen 2 radier, og bliver derved oval.
Den komplette syntaks kan ses her.

Lad os tage hul på “box-shadow”:

.button2
{
   background-color:#606EA6;
   border:1px solid #3B4466;
   color:#FFFFFF;
   box-shadow:0 3px 3px #8CA0F2 inset, 0 -5px 2px #3B4466 inset, 2px 2px 3px black;
}

“box-shadow” attributten tillader et ubegrænset antal skygger, blot de er komma-separerede.
På ovenstående knap tilføjes der derfor 3 skygger. De første 2 parametre i attributten definerer horisontal/vertikal forskydning af skyggen; tredje param angiver hvor meget blur-effekt skyggen skal have, hvor 0 er “ingen blur”. Efterfølgende defineres en farve, og “inset” (kan undlades) definerer at skyggen skal være inde i elementet, fremfor udenpå.
Den komplette syntaks for box-shadow kan ses her.

Så hvordan får vi Visual Studio til at genkende disse nye attributter?
(Hvis du ikke er komfortabel med at rode i Windows registreringsdatabase, skal du nok springe over dette trin)
Visual Studio gemmer de eksisterende templates i din Visual Studio installationsmappe, i mappen: \Common7\Packages\1033\schemas\CSS
Tag en kopi af css21.xml og kald den nye fil css3draft.xml. Åben filen og find den sektion der hedder “Edges Properties”.
Indsæt 2 nye noder med følgende:

<cssmd:property-def _locID="box-shadow" _locAttrData="description,syntax" type="composite"
            description="Attaches one or more drop-shadows to the box"
            syntax="inset? && [ length{2,4} && color? ] [ , inset? && [ length{2,4} && color? ]*" />

<cssmd:property-def _locID="border-radius" _locAttrData="description,syntax" type="composite"
            description="Defines the radii of a quarter ellipse that defines the shape of the corners of the outer border edge of an element"
            syntax="[ length | percentage ]{1,4} [ / [ length | percentage ]{1,4} ]?" />

Disse definerer vores 2 nye CSS3 attributter.

Kør regedit.exe og søg igennem HKEY_LOCAL_MACHINE efter en key (og kun keys!) med GUID: {A764E895-518D-11d2-9A89-00C04F79EFC3}
Du har fundet den rigtige GUID hvis den har en underfolder ved navn “Schemas” (og stadig er under HKEY_LOCAL_MACHINE).
Denne underfolder inderholder formegentligt “Schema 1” til “Schema 4”.
Lav en ny key ved navn Schema 5 og to strings med navnene “File” og “Friendly Name”.
Sæt file til css3draft.xml og “Friendly Name” til hvad end du nu har lyst til, f.eks “CSS 3 Draft”.

Menulinjen “Style” (i VS) vil nu have en ekstra værdi i dropdownlisten over CSS schemas.
Visual Studio Style Menu Bar

Brug ikke hverken Gmail eller Hotmail

De sidste 14 dage har de to haft mindst een defekt mailserver i deres DNS rotation, hvilket effektivt fører til at det er umuligt at udtale sig om hvorvidt en modtager på domænerne kan/vil modtage mails man sender til dem.

Kombineret med det faktum, at det kan konstateres at have været tilfældet temmelig mange gange over de seneste par år, samt at det (selvsagt) er 100% umuligt at komme igennem med en fejlmelding til de to giganter, kan jeg vanskeligt konkludere andet end at det er en usædvanlig dårlig idé at benytte deres services, med mindre man er indstillet på at acceptere at mails periodisk og uden meldinger eller advarsler vil gå tabt.

Dog vil gælde, at afsenderen af mails der ikke afleveres må forventes at modtage en tilbagemelding om, at den/de pågældende mails ikke kunne afleveres – men hvis ikke afsender derefter finder en anden måde at kontakte modtager på, og orienterer om problemet, vil man aldrig blive opmærksom på at der er noget galt.

Supplerende ovenstående, for at give det lidt mere tekniske indblik, er mailserver-administrationen for systemer så store som de to, naturligvis ikke en enkel og simpel sag. Jævnfør det her indsatte øjebliksbillede af et opslag med nslookup, fordeler Hotmail sine mailservere over 5 indgange, hver med cirka 10 IP numre. Hvorvidt det i praksis bliver til 50 servere er vanskeligt at udtale sig om udefra – men det er indlysende at kompleksiteten af en sådan opsætning ikke er ubetydelig.

Opdatering 2014-01-27, af Tobias Hinnerup

Så har uheldet være ude igen – endnu engang var det hundredevis af mennesker og virksomheder, der havde valg at stole på Eniro, der brændte sig: Eniro: Utilgivelig fejl.

Opdatering 2013-04-05, af Tobias Hinnerup

Eniro lavede en smutter –hundredevis af mennesker mister alle deres emails uigenkaldeligt.

Opdatering 2010-06-25, af Michael Schøler

Vi er ikke de eneste der har opdaget problemer med Gmail, og man kan i dag på Computerworld læse en artikel om lange modtage- og leveringstider, ligesom at der i April i Secure Computing magazine blev udgivet en artikel om at der var opstået panik blandt alle Hotmail’s brugere da de ved forsøg på login fik af vide at de ikke havde en konto.

Opdatering 2010-09-05, af Michael Schøler

Til mængden af overvejelser man bør drøne igennem inden valget faldet på gmail, kan der tilføjes at vi har erfaret at gmail konti tilsyneladende i øjeblikket systematisk overtages fjendtligt og herefter eksempelvis anvendes til udsendelse af spam i email kontohaverens navn. Endvidere opsættes en blog i dit navn, hvorfra alverdens interessante blog posteringer om dig sikkert kan være at finde. Slutteligt kan der indsættes gadgets på din iGoogle side når din konto er overtaget, ligesom dine mails lagret i din indbakke med videre vil kunne læses af den uvenlige sjæl du er ramlet ind i.

Opdatering 2010-10-28, af Tobias Hinnerup

Som endnu et bræt til kisten, er der desværre også eksempler på at Google ikke kan håndtere den del af deres services som de tager penge for – Computerword har for nyligt fortalt om en uheldig virksomhed, der valgte at placere forretningskritiske services hos Google, med mildest talt uheldige konsekvenser.