fredag den 31. juli 2015

TDC Fiber - rent gedemarked


Vores grundejer forening har fået lavet fiber hos TDC, og der er ikke nogen af os der er syndeligt imponeret, tværtimod er flere ufatteligt skuffede over deres dårlige service.

Det startede med vi skulle have lagt el-kabler fra el-masterne ned i jorden. I den forbindelse ville vi have lagt nye fliser rundt på vores veje. Vi snakkede med TDC og kommunen, og det kunne de ikke bare sige ja til. Efter langt tid kom TDC på den ide at det var en god ide, så de skulle pludseligt med alt hast holde et informations møde for at fortælle os om priser, forløbet og hvad det ville indebære og betyde.

Til mødet fik vi at vide det ville koste 5000 at få lagt fiber ind til hvert hus, medmindre vi blev 20 tilmeldte. Så kunne vi få det for 1000. Hvis vi nåede over 30 ville vi kunne få det for 100.
Vi skulle give vores formodede bestilling her, så vi skulle sige hvad vi forventede at ville have af mobil abonnement, tv abonnement, og internet (fiber) abonnement.

Det endte med at vi fik at vide det ville blive til prisen på 100 og at de ville ligge fiber ned til os alle sammen, hvilket jo var en rigtigt god nyhed.

Vores formand ville så have TDC til at koordinere selv med kommunen, men det var helt umuligt. Så vi skulle være bindeled imellem de to, fordi når kommunen sagde et kunne vi fortælle det videre til TDC, og modsat tilbage igen.

Vi får et brev om at vi skal sætte et klistermærke på muren hvor vi vil have vores fiber boks siddende. Man kan så skrive sit telefonnummer på hvis man skal kontaktes når de skal påbegynde arbejdet - hvis man har spørgsmål eller andet.
Derudover havde vi fået at vide at vores første tv skulle være kablet, så nogle sagde vi skulle have boksen siddende det første sted vores første tv skulle sidde.
Her ville jeg så høre om den boks var der det skulle ind henne var der at der ville komme et stik ind i huset, og om tv'et skulle placeres her?
I den skrivelse vi havde fået stod der et nummer til TDC, men når man ringer til dem så får man fat på nogle der ikke har gang i fiber og slet ikke ved noget. De siger jeg skal snakke med min grundejer forening, og så skulle han spørge, og vende tilbage med svar, og så skulle jeg spørge tilbage igen hvis jeg havde opfølgnings spørgsmål. De mente slet ikke fiber afdelingen havde noget telefonnummer, og hvis de havde så vidste de ikke hvad det var (ikke noget med at foreslå at kunne finde ud af det og vende tilbage som normal god kundeservice ville være).
Så ergo kunne jeg ikke komme i kontakt med dem.

Jeg spørg så de arbejdere der ude på vejen og de ved heller ikke noget.
I brevet stod der at jeg skulle aftale en dato jeg skulle være hjemme for at de kunne montere den boks på væggen, men kunne jeg ikke fordi jeg havde ikke noget nummer til dem som var TDC fiber.
De ringer så op til mig, og spørg om den dato de har foreslået er god og jeg svarer nej det er ikke så godt for jeg skal på kursus fra tirsdag til fredag, så hvis det ikke kunne blive mandag kunne jeg ikke.
Damen i røret bliver undrende og siger har du ikke en kæreste der kan være hjemme, men nej hun har ikke flekstid så hun kan ikke "bare" sådan gå som hun har lyst. Kunne jeg så ikke bare tage en fridag? Nej sagde jeg og tænkte (Nej, jeg bruger ikke en hel fridag på at skulle holde jer i hånden).
Nå ja så var det jo helt forfærdeligt for det var jo planlagt med at hver vej skulle tages en efter en og hvilke huse der skulle tages og så var det jo ret besværligt fordi så kunne de ikke bare blive færdige med en vej og fortsætte.
Så spørg jeg om de havde regnet med at der nok var andre der ville sige som mig, så der skulle være ændringer, for så var det jo et fedt. Nogle skal have det ind igennem haven og fortælle hvor den skal være, så nogle tager altså lang tid - så den plan der holder nok ikke særligt godt.
Nej det vidste hun heller ikke noget om, og så måtte hun jo ændre dato'en selvom det ødelagde det FULDSTÆNDIGT for dem der skulle ud at lave det (hun kendte dem helt tydeligt personligt hver og en og havde spurgt dem om netop det lige inden hun ringede til mig).
Hun skulle sende mig bekræftelse på den nye dato.
Den kom aldrig så jeg ringer ind til dem, og hun sender den så til min mail - hvor dato'en er den forkerte. Hun retter og sender en ny til min mail. Den får jeg aldrig, så hun sender den igen - stadig forkert dato. Hun retter igen og sender og nu ser det rigtigt ud.
To dage efter får jeg 4 breve der hver har samme beskrivelse og sidste brev er så det som har den rette dato. Der kører ikke et job der rydder op og fjerner det samme brev og erstatter med et nyt, og spilder bare regnskov på at sende mig ligegyldige breve i stedet. Derudover bad jeg om det på mail, og ikke på brev så var totalt unødvendigt.

3-4 par dage efter sender de en sms til mig der siger tak for bekræftelsen med dato'en fra før (den første dato hvor jeg ikke kunne), og jeg tænker det er jo ligesom ret længe siden - jeg ringer lige og hører hvad det er for en sikkerheds skyld.
Damen fortæller at de havde GLEMT at der kommer to folk ud, og det var den anden dato jeg havde fået bekræftelse på sms for. Så indtil nu havde de kontaktet mig på telefon (opkald), sendt mig breve og mails, og nu ville de så også forsøge sig med sms - som ikke engang fortæller at det er noget nyt. Heldigt for mig jeg ringede derind.
Forklarer hende at jeg STADIG ikke kan den dato. Nå den kunne så sagtens ændres, men ville så tage længere tid fordi det var planlagt. Jeg spørger hvorfor kan manden der kommer første gang ikke bare fortsætte det samme arbejde og blive helt færdigt? Det kunne han ikke for det er en anden mand der skal gøre det. Kan de så ikke følges ad og den ene laver det ene og den anden laver det andet. Nej det var alt for besværligt, så jeg accepterer og der er nu 2 dato'er.

Dagen hvor han skal komme og sætte boksen til, hvor jeg skal høre ham om hvor højt den kommer til at sidde og høre til problemer med mine fliser og alt muligt andet. Jeg har taget en fridag og går derhjemme fra klokken 7 og venter. Det bliver frokost, men stadig ingen mand. Jeg venter og venter og stadig ingen mand.
Da klokken bliver 15 ringer jeg til dem og spørg hvad der sker - kommer han bare ikke i dag? De undersøger og siger jamen han har været der og sat det op. Selvom der stod et telefonnummer på så har han bare ignoreret det, og han har heller ikke banket på eller ringet på med noget.

Så jeg kunne så ikke spørge gutten selvom der stod et telefonnummer på sedlen han skulle ringe på.

Jeg kommer til et bestyrelsesmøde og vores formand fortæller vi har fået 6 måneders gratis hd-kanalaer og en ekstra pakke, fordi de kunne godt se de har lavet mange fodfejl. Vi var trods alt også den første installation TDC har stået for at implementere, så derfor var det lidt svært at have styr på det hele.
 Fint nok tænker man så, det er måske lidt en flad gave eller "plaster på såret" for det koster dem 0 og det er ikke engang noget jeg ville have. Så hellere få noget rabat, men det kan man jo ikke få.


Så kommer dagen hvor den næste gut skal komme og installere mit internet og tv.
Han kommer ind og begynder at montere en lille boks på væggen med det samme, og bagefter forklarer han at det er den lille kasse der sørger for at lave signalet om til noget routeren forstår.
Ikke noget med at spørge om det er fint den er placeret der, eller om jeg kunne tænke mig den et andet sted under bordet hvor det passede bedre.
Han sætter så routeren op og jeg spørger om den har nogle antenner - nej det har den ikke. Hvad så hvis den ikke rækker ordentligt rundt? Så må jeg selv ud og sørge for en anden router.
Heldigvis for mig har jeg en god router der kan række rundt over det hele, men tv-signalet sendes også trådløst så det kunne også sagtens give problemer.

Det hele bliver installeret og fungerer godt nok (-ish).
Internet hastigheden er løbende faldet siden installationen, hvilket jo ikke helt er optimalt, men der er da hul igennem.
Så efter noget tid sender de så en masse regninger - efter 3 måneder sender de 3 regninger.
Det fine i regningerne er så at de ting der takseres for er forskellig fra måned til måned.
Nogle måneder skal man betale noget copyright koda-gebyr, nogle skal man betale for hd-kanaler, nogle koster det ikke noget.
Så går der 2 dage og jeg modtager en opgørelse der skriver jeg skal have et beløb tilbage for hd-kanaler og det ekstra - der er bare ingen opgørelse så man kan se for hvad de giver dig tilbage.
Jeg betaler regningerne, men efter 2 uger sender de så en rykker til mig fordi jeg ikke har betalt.

Jeg griber telefonen og siger hvad er det for en regning jeg ikke har betalt? Den som jeg ikke havde betalt havde de 2 af i deres system, og efter lidt tid kunne de se den var dækket fordi det var noget af det som jeg fik dækket i det jeg skulle have tilbage.
Så spørger jeg så hvor de penge bliver af, for jeg har endnu ikke modtaget noget. Den var på vej ,men nu en uge efter har jeg stadig ikke modtaget noget.
Så spørger jeg til de regninger med hd-kanaler på, og de siger det er det som de giver mig tilbage for.
Hvordan kan jeg så flere uger efter få en rykker på noget som i flere uger før skulle få en dækning tilbage på så den er betalt? Det kunne hun ikke svare på så jeg fik bare fortalt det var det som der var dækket.
Spørger så om de automatisk opsiger det som jeg aldrig har bestilt, men som de vil give mig - så jeg ikke skal betale for det når det er slut? Det kunne hun ikke svare på.
Hun vender så tilbage efter noget undersøgelse og siger det kan hun ikke ændre og så går forbindelsen. Jeg ringer op igen, siger det samme og bliver stillet videre til en der kan sørge for den automatisk opsiger sig selv efter den gratis periode.

I dag har jeg stadig ikke modtaget nogle penge fra TDC, så jeg har betalt for en gratis service hos FDC, og hvis jeg ikke havde været hurtig så havde se selv fortsat med at opkræve mig efter deres "gratis periode" (som så ikke er gratis) var slut.

Ved at flere af mine naboer er blevet opkrævet for udstyr og abonnement uden at de har fået etableret deres TDC Fiber endnu. Andre er blevet opkrævet for ikke at have været hjemme aftalt tid, men de har sendt en information til en email som der ikke eksisterer længere og derfor ikke har kunne acceptere og TDC har bare antaget at de så godtog datoen.

Så ikke nogen imponeret TDC Fiber kunde herfra.

torsdag den 23. juli 2015

Arbejde er dejligt


Men ikke når det er for meget.
Skal færdiggøre en masse projekter for min nuværende arbejdsgiver inden jeg skal have sidste arbejdsdag og der er bare mange store opgaver som gør jeg får utroligt lidt søvn i øjeblikket og det kan mærkes.
Kan begynde at mærke at nu er jeg ved at komme over den "magiske grænse" med at jeg nu ikke kan holde dampen oppe så meget længere fordi den store mængde arbejde er ved at gøre mig træt over så lang en periode.

onsdag den 15. juli 2015

textbox, autocomplete og sikkerhed


Hvis man gerne vil lave sikre textboxe som der ikke er autocomplete, og input foreslag fra, så er der flere måder at sikre sig på.

Først skal man forstå hvordan det fungerer;
Browseren husker textbox'ens id og genbruger derfra autocomplete til at give dig foreslag.
Så hvis du har et felt med FirstName og LastName, så vil browseren foreslå ting du har indtastet i andre textboxe med samme navn, hvis du kommer til dem igen.

Det er meget smart og lækkert, når du gerne vil have du ikke skal skrive dit navn, adresse og andre detaljer som ikke behøver samme niveau af sikkerhed.
Derimod dine passwords, eller lign. må derfor ikke gemmes.

Man kan bruge den simple:
autocomplete="off"

Ulempen er så blot at mange password managers ignorerer dem for at hjælpe dig.
Hvordan kan man så sikre sig at det ikke giver problemer?

Du kan give din textbox et unik id (fx sessionid) i slutningen af id'et, så du er sikker på det er unikt for den enkelte bruger.

OBS: Hvis du bruger typen password-field, vil Chrome og andre browsere i nogle tilfælde selv udfylde dit password for dig.

Hvis du derudover har 2 "password"-fields, vil browseren tro at det er en valideringsform/oprettelsesform, og ikke en login-form, og vil derfor slukke for autocomplete.
For at dette virker i nogle versioner af Chrome, skal nedenstående sættes ind i starten af dit form-tag.

<input type="text" style="display:none">
<input type="password" style="display:none">
Det er også derfor du skal tænke dig om inden du benytter et password-field på dine sider.

mandag den 13. juli 2015

Appsettings i din kode (C# / VB .NET)


Det er et evigt område der skal arbejdes i, og derfor kan man lige så godt lave noget fornuftig wrapper til den slags. Det gør det nemt at arbejde i og have centraliseret.

Public Class ConfigurationSettings
        Public Shared Function AppSettings(ByVal Key As String) As String
            Return GetAppSettings.Get(Key)
        End Function

        Public Shared Function [Get](ByVal Key As String) As String
            Return GetAppSettings.Get(Key)
        End Function

        Public Shared Function [AllKeys]() As String()
            Return GetAppSettings.AllKeys
        End Function

        Public Shared ReadOnly Property GetAppSettings() As System.Collections.Specialized.NameValueCollection
            Get
                Dim reader As New System.Configuration.AppSettingsReader()
                Dim appStgs As System.Collections.Specialized.NameValueCollection = _
                System.Configuration.ConfigurationManager.AppSettings
                Return appStgs
            End Get
        End Property

        Public Shared Sub ShowAllAppSettingsConsole()
            Dim reader As New System.Configuration.AppSettingsReader()
            Dim appStgs As System.Collections.Specialized.NameValueCollection = _
                System.Configuration.ConfigurationManager.AppSettings
            Dim names As String() = _
                System.Configuration.ConfigurationManager.AppSettings.AllKeys
            Dim value As String = String.Empty
            Dim i As Integer
            For i = 0 To appStgs.Count - 1
                Dim key As String = names(i)
                value = CStr(reader.GetValue(key, value.GetType()))
                Console.WriteLine("#{0} Name: {1} Value: {2}", i, key, value)
            Next i
        End Sub 'ShowAppSettings
End Class

tirsdag den 7. juli 2015

Udviklersiden CSHARPUDVIKLER.DK til ny standard


Nu er udvikleren, Laurits West, ved at få mere og mere Umbraco (C#.NET) under neglene, og det gør at der nu er nye muligheder.

Min udvikler side www.csharpudvikler.dk er mit personlige udvikler CV, hvor jeg nu er ved at give det en ordentligt overhaling for at få det mobiltilpasset så det har responsive design så den tilpasser sig mobile devices.
Derudover bliver det en one-page -side som skal levere alle data på en side og nemmere skabe overblik for brugeren. Ved at have alt på en side, forsøger jeg at sørge for at folk læser dele som de ellers ikke ville læse.

Derudover så forsøger jeg at få en større sammenhæng ved at linke ting sammen.
Så når du ser på mine kompetencer, så er det dem der er brugt i projekter og i ansættelser, som derfra giver hvor mange års erfaring jeg har med det.
Når man så ser på fx en ansættelse vil man kunne se antallet af kompetencer brugt, og hvis man trykker på dem vil man kunne se navnene og ved tryk på dem komme til kompetencen hvor man kan se detaljer for den.

Derudover gør Umbraco (C#.NET) det også nemmere for mig at ændre indhold når jeg først har designet og flowet på plads. Så nu fokuserer jeg på at få det hele til at spille ordentligt sammen og se pænt ud.

Udviklersiden vil opleves som mere "levende" fordi der sker ting undervejs når man kommer ned igennem indholdet, som gør indholdet interessant.
Jeg leger lidt med nogle ideer om formatering og opstilling som skal bryde nogle mønstre imens man scroller ned af siden, så man får fokus på forskellige dele.
Jeg er ikke nået i mål endnu, og der er stadig en del jeg gerne vil have lavet, men det er godt på vej og udsigten er virkeligt god.

SCRUM - Vores modificerede tilgang med visuel projektledelse


Der er rigtigt mange der kører SCRUM, og rigtigt mange der ikke ved hvordan de skal gøre det.
Jeg personligt ser det som et middel til at skabe overblik, specielt hvis man bruger grafiske virkemidler så man nemt kan se hvilke ting der er i hvilken state.

Så vores SCRUM board er opdelt i forskellige faser, så kan se om en opgave er i gang, om den er tildelt en udvikler, om den afventer nogen, om den er til test.


Derfor har vi følgende bokse:

NAVN       I DAG       TEST HOS OS       TEST HOS KUNDE       AFVENTER KUNDE       AFVENTER OS

Så i NAVN står udviklerens navn, Laurits. Her sættes de kort som jeg skal løse i sprintet, og som jeg ikke er gået i gang med endnu. Så ved sprintstart flyttes der løbende opgaver ned til mig fra en boks med opgaver eller "smut-sager".
I feltet I DAG, er sat kort på med de opgaver jeg arbejder på i dag.
TEST HOS OS betyder at vi er ved at teste det. Vi har vores egne testere, eller kan være udvikleren der er ved at gennemteste det hvis vi ikke har en decideret tester til det.
TEST HOS KUNDE er at vi nu har testet og set det fungerer, så nu får kunden lov at teste.
AFVENTER KUNDE er de opgaver hvor der mangler afklaring - fx i bad om den her funktionalitet på den side her der ligner den jeg skal lave nu, men skal ikke ha denne. Er det meningen? Eller de skal afklare ting.
AFVENTER OS er hvis vi har at en anden person skal levere servere, der skal laves noget database noget, der skal ses på nogle problemer. Her kommer de opgaver som udvikleren ikke selv tager sig af, men andre i firmaet tager sig af og vi venter på.

Derudover har vi boksene:
OPGAVER       SMUT       DONE

OPGAVER er de opgaver der er indmeldt til sprintet som vi bør se på.
SMUT er opgaver der er mindre som man kan tage imellem andre opgaver hvis man lige har en halv time og mangler at lave noget.
DONE er de opgaver der er færdig testet hos kunden, og accepteret. Når de kommer i done, så aftales der med kunden hvornår de ønsker de kommer i produktion.

torsdag den 2. juli 2015

Dokumentation - One standard to rule them all

Dokumentation er altid besværligt, og kunden vil ofte gerne have noget på skrift inden vi går i gang for at vise du forstår det, og i er enige, og de kan komme bagefter og sige vi har aftalt der står dette i designdokumentet, men sådan ser det ikke ud, eller sådan virker det ikke.

Så er udfordringen så altid at man helst skal have alting med, og her kommer et forsøg på at få det hele med:

1.0 Introduktion til designrapporten

1.1 Revisionshistorik

Væsentlige ændringer i dokumentet noteres.

Version
Dato
Ansvarlig
Beskrivelse




1.1       Referencer

Referencer til andre rapporter.
Dokumentnavn
Designguide til "den nye superapp"

2.0         Beskrivelse af websiden

2.1       Formål

Kort beskrivelse af websidens formål.

2.2       Design

2.2.1        Skærmbilledet

Kort beskrivelse af skærmbilledet med billede eksempler.

2.2.2        Designstandard

Beskrivelse af elementer som ikke er beskrevet i designguiden.
Websiden er designet ifølge designguiden til d-service.

Designskabelon

Skrifttyper

Farvekoder

Afstande

Ikoner

Knapper

Elementer

Faktabokse

Andet

2.2.3        Design af print

Er der mulighed for print på siden, beskrives designet af printet med billede eksempel.

2.3       Rettigheder

Rettigheder på websiden beskrives.

2.4       Tekster

Formuleringer som hardkodes, samt elementer hvor der benyttes tekster som kunden skal kunne administrere beskrives.

2.5       Links

Oversigt over alle links samt referencer. Dette indebærer også bogmærker.

2.6       Print

Beskrivelse af print-funktionen uden billede eksempel. Hvordan skal den opføre sig.

2.7       Pop-up, tooltip og advarsel

2.7.1        Pop-up

Kort beskrivelse af hvornår pop-upper vises. Beskrivelse af tekster og knapper er beskrevet i designrapporten ”Pop-up, tooltip og advarsler”.

2.7.2        Tooltip

Kort beskrivelse af hvornår tooltips vises. Beskrivelse af tekster er beskrevet i designrapporten ”Pop-up, tooltip og advarsler”.

2.7.3        Advarsel

Kort beskrivelse af hvornår advarsler vises. Beskrivelse af tekster er beskrevet i designrapporten ”Pop-up, tooltip og advarsler”.

2.8       Funktioner, usecase og behandling på backend

2.8.1        Funktioner på websiden samt usecase

Beskrivelse af funktionerne på websiden samt usecases.

2.8.2        ”End-to-end”-usecase

Flowbeskrivelse med tilknytning til øvrige programmer.

2.8.3        Overordnet beskrivelse af behandling på backend

tirsdag den 23. juni 2015

Dynamiske properties - ikke skulle ændre din database eller objekter


Det kan være en udfordring når man definerer et system, at vide på forhånd alt det skal indeholde.
Derfor er det ikke unormalt at efter noget tid hvor systemet er blevet brugt, så finder man ud af hvad man gerne vil have ændret.
Det kan resultere i ændringer i dine objekter, og i din database struktur.
Alt efter hvilke ændringer det er kan det være rigtigt problematisk.

Der er dog en måde at opbygge en struktur på som gør du altid nemt kan ændre, slette, tilføje i din funktionalitet og krav uden at skulle lave ændringer i din database eller objekter absolut.

Objekter og properties.

Et objekt er dit samlingspunkt, og kan bruges til alt. Det kan være forskellige kontroller, det kan være en objekttype du skal gemme i databasen, eller hvad du nu end ønsker.
Så til hvert objekt har du en samling af properties, som er en tekstværdi. Du kan selv udbygge med at sætte type på og nogle automatiske konverteringer hvis du ønsker.
Hvis din database skal kunne håndtere billeder, skal du selvfølgelig have et felt til det også og gemme dem i.

Fordelen her er at fx hver kontrol du har, den svarer til et objekt, og du kan så sætte 0 - * properties til den, og nogle kan måske redigeres og andre kan ikke. Uanset hvad indput og felter, og billeder etc. af værdi den har så kan du altid ændre det fra kontrol til kontrol, og kan ændre en eller flere kontroller uden at skulle huske at køre en masse database scripts i rækkefølge for at kunne få din database op på niveau.

Hvis man bruger et CMS, så er dette ofte også tilfældet - ligesom når man bruger Umbraco (.NET CMS system), hvor man kan tilføje & fjerne properties til de objekter og strukturer du nu opbygger.

Gemme "alle" valgte så det altid fungerer - ved at gemme ingenting


Det er meget normalt man har nogle valg med at sætte begrænsninger og adgange op via nogle roller eller andre begrænsninger.
Oftest vil man så gemme dem som der er valgt, og hvis alle er valgt (alle har adgang) så gemmes alle muligheder.

Er dette nu også så smart?

Hvis man gemmer "", og ved at dette betyder "alle", så har du aldrig et problem den dag at der tilføjes flere muligheder, og skal ikke huske at sætte det op igen med de ekstra muligheder.

Hvis man ikke vælger noget, vil man få en fejl.
Hvis man vælger mindre antal end totalt antal, gemmes de værdier der er valgt.
Hvis man vælger alle, gemmes "".

Fx hvis du sætter et stort system op, og mange rettigheder mange steder, og så tilføjer en mulighed så vil du ikke skulle rette en masse steder. For de er automatisk med, ved at du ikke direkte siger hvilke den indeholder - fordi den indeholder alt der er tilgængeligt uanset hvornår det er og uanset hvad der er nu og der er i fremtiden.
Så kan man i præsentationslaget altid ændre det til at når man får "" tilbage, så vises alle muligheder som valgte - undtagen når det er nyoprettelse.

torsdag den 11. juni 2015

Ros dine medarbejdere for godt arbejde!

I går fik jeg en ret stor ros af min chef, som jeg havde fået et par dage før, men som jeg ikke vidste hvor stor den ros var. Det er virkeligt en fed følelse!

Vi havde i starten af ugen holdt et møde med vores kunde, og her var IT-direktøren med fordi hun mente vores estimat på en samlet opgave af andre små opgaver var lidt vel stor.
Derfor skulle hun med for at se hvorfor det var så stort, og hvad hendes medarbejdere bad os om at lave.

Vi gennemgår så en rapport med en masse kommentarer, og går sitet igennem de havde ønskerne til, og imens sidder jeg og noterer deres ønsker kort. Mange af dem er noteret i dokumentet, men de større noterer jeg alligevel for at have et overblik.
Da vi skal til at slutte mødet siger IT-direktøren så "Godt hvem har en liste med hvad der skal laves?", og jeg ser rundt på mine kollegaer, og min afdelingsleder uden nogen umiddelbart melder sig, så jeg siger "Jamen jeg har en liste, jeg gerne vil præsentere", og hun nikker til mig med et smil.
Jeg gennemgår slavisk

Da mødet så er slut, skal vi spise. Vi spiser og
går op og arbejder videre, hvor vi skal have SCRUM og gennemgå dagens opgaver. Her ser min chef med nærmest funklende øjne på mig og siger "Virkeligt godt gået i dag", og jeg smiler og siger tak.
Tænkte det var da fedt at han lagde mærke til jeg gjorde det godt, og tænkte over de små ting som mine kollegaer ikke havde tænkt over. Det var jo nok fordi det gav et godt professionelt indtryk af vi havde styr på det, og er jo altid det du ønsker for din kunde. Generelt var der også god afslappet dialog omkring løsninger som jo også er dejligt.

Så gik der et par dage og midt på dagen kommer min chef og siger han skal lige tale med mig og min kollega inde på det kontor jeg sidder med andre kollegaer. Han lukker døren og vi tænker alle Hvad nu fordi det virkede så seriøst, og det var så at han havde iagttaget vores nye projektleder (som også havde været på mødet), og set at hun ikke fulgte specielt meget med i mødet. Hun var ikke professionel, og virkede heller ikke interesseret i at lære mere om det område hun snart skulle bestyre.
Han kigger så over på mig og siger "Du ved hvad jeg taler om", og jeg bliver lidt forundret for jeg aner faktisk ikke hvad der er grunden. Han fortæller så de ting han har observeret, og jeg måtte jo erkende det havde jeg ikke set, og inden jeg når at fortælle det var fordi jeg faktisk ikke havde observeret vores nye projektleder fordi jeg var fokuseret på vores kunde og de medarbejdere der var med derfra, så siger han "Nej for du var fokuseret på kunden" og griner med et stort stolt smil.
Det var meget nemt at læse at det store smil fra to dage tidligere og "Du gjorde det virkeligt godt i dag" var fordi han kunne se hvordan min komplette koncentration var på kunden.
Nu fik jeg forklaringen, og samme store smil var der meget tydeligt og han var meget tilfreds med mig for jeg var faktisk så optaget af at levere en professionel oplevelse at jeg ikke opdagede at andre deltagere gjorde det dårligt.
Det kan jeg jo så kun være meget stolt af.


Men derfor er det vigtigt du fortæller dine medarbejdere når de gør det godt!
Forklar dem meget gerne indgående HVAD de gjorde godt ned i detaljer flere steder, og hvad ved det der gør dig så glad. Det er ikke sikkert de har fanget de samme ting som dig, og derfor ikke får alle detaljer med.

Det er en stor motivator for dine medarbejdere, og giver fornyet energi. Det gør de føler sig stolte og ved at din chef ser du leverer topkvalitets arbejde. Det er ikke altid til at vide at du gør det godt.
Hvis du så vælger at give dem mere i lønningsposen af den grund, så husk igen at forklar dem hvorfor og i detaljer hvad det er de gør som har givet dem denne lønstigning.


Mange af dine medarbejdere ligger måske heller ikke selv mærke til når de gør det godt, fordi sådan gør de jo altid, men fortæl dem de gør det godt. Så er du sikker på de ved det, og at de værdsætter at få det at vide, og du får nok også mere produktive medarbejdere ud af det.

Jeg er en meget stolt og ekstra produktiv medarbejder i øjeblikket, for mit energiniveau er kommet noget højere op - fordi jeg fik forklaringen på HVAD der var godt.

mandag den 1. juni 2015

Browser compability - Check din side i flere browsere


Når man udvikler en side kan man ikke altid regne med at du som udvikler kan bruge det nyeste nye.
Du bliver nødt til at tage udgangspunkt i din laveste fællesnævner, og derfor det er farligt at gå efter for mange nye teknologier som ikke er bredt understøttet af alle browsere, brugere og devices.
Fx Node.js kan være et problem hvis du får brugere ind der ikke understøtter javascript, og bør håndtere det.
Det samme gør sig gældende med dit design, og dine sider kan komme til at se meget underlige ud i forskellige browser versioner. Altid noget som kan være besværligt for udviklere at skulle gennemteste alt i flere versioner af samme browser, og flere forskellige browsere.
Der findes dog en hjælpende hånd til at teste en side i flere browser versioner, og den hedder http://netrenderer.de/.

Her har du mulighed for at teste at din side ser korrekt ud i forskellige versioner af IE (Internet Explorer), og har mulighed for at style dine elementer anderledes så de opfører sig og ser korrekt ud i alle versioner af browsere.

torsdag den 30. april 2015

ASP.NET Webforms udfører ikke load/init på child-child-kontroller


Har lige haft en sag med en kollega hvor vi i ASP.NET Webforms bruger kontroller, som så er nested under en anden kontrol, som ikke får kørt onInit eller onLoad, men kun render.

Det ser ud som om når det er en kontrol under en anden kontrol, så kører den alt på den første kontrol, men på child-child-kontrollen har den kun det renderede resultat og kører kun Render på den.
Det ser ud som om at ved Render af den første kontrol, så kører den Render på den underliggende kontrol og derefter tager det og putter ind i den første, men man kan ikke debugge og ændre noget i onLoad eller i onInit.

Det vi forsøger at lave er at tilknytte ressources til hver kontrol så CSS og JS, Javascript, bliver knyttet til hver kontrol hvad den har brug for.
Det bliver bare ikke udført korrekt når det er en kontrol under en anden kontrol.

onsdag den 22. april 2015

Mere effektiv: Dont react,respond!


Her er dagens effektive råd

"Tæl til 10 før du svarer ja eller nej til alle forespørgsler i dag. Tænk over dit svar og ikke giv din første reaktion."


Det gør du får tænkt over hvor svært det er, hvad skal du ellers, eller hvad der end kunne være. 

onsdag den 15. april 2015

Spørgsmål til jobsamtalen


Der er mange ting der er vigtige at få afklaret til en jobsamtale, for at se om du passer ind, og om det er det rigtige sted. Fx hvilken ledelsesstil og arbejdsrutine er der.
Det er ting som er vigtige at tænke over inden du siger ja til jobbet, og som kan vise om du overhovedet gider være der.

Hvis du er forberedt så går det meget bedre. Gerne øv dig og tænk forud, så du kan være forberedt.
  1. Hvad forventes af mig de første 30 dage?
  2. Hvilke mål ses som succes i slutningen af året?
  3. Hvor stor udskiftning har i af personalet i firmaet og i afdelingen?
  4. Hvordan er jeres rejsepolitik til kunder? Skal man ligge ud og tage offentlige transportmidler? Er der taxiboner? Bruge egne transportmidler og så blive kompenseret?
  5. Hvad får andre i en lignende stilling i løn her i virksomheden? (Hvis du vil være lidt fræk omkring lønforhandling)
  6. Hvilke muligheder tilbyder i for videreuddannelse?
  7. Hvordan bliver mine præstationer målt og bedømt? Få gerne noget konkret som er målbart og som kan sættes som et fast mål, så du ved helt præcist hvornår du gør det godt.
  8. Hvilke muligheder er der for avancering for en som mig, i den stilling jeg ansøger og hvad er tidshorisonten på dem? (Viser du er interesseret i stige i graderne og løn, og det er noget der er vigtigt for dig - stil selvfølgelig kun spørgsmålet hvis du gerne vil avancere)
  9. Er du i tvivl om jeg egner mig til stillingen?
  10. Hvornår kan jeg forvente at høre fra jer igen?
  11. Hvad ville jeres medarbejdere sige var grunden til dette er en arbejdsplads de forbliver på?
Forbered dig også gerne på de spørgsmål du kan få
" Hvad er det ene projekt eller opgave som du ville se som din største succesopgave/projekt i din karriere indtil nu? "
Dette er et godt spørgsmål, der kræver forklaring og ikke ja eller nej. Det kræver omtanke og formulering, og giver noget værdi. Når du ved det giver værdi for den der interviewer dig, så ved du også hvordan du kan selv afgive denne værdi til dem som en gave og vise indsigt og bruge det som salgsorgan for at sælge dig selv til jobbet.

Så lav en serie opfølgningspørgsmål til dig selv, så du kan få detaljerne med.
  • Kan du give mig et detaljeret overblik omkring det du opnåede? 
  • Fortæl mig omkring firmaet, din titel, din position, din role og teamet der var involveret.
  • Hvad var det i reelt opnåede?
  • Hvornår var det, og hvor lang tid tog projektet?
  • Hvorfor blev du valgt til opgaven?
  • Hvad var de 3-4 største udfordringer du havde undervejs, og hvordan håndterede du dem?
  • Hvilke steder gik du længere for at opnå det, eller hvor tog du initiativ?
  • Hvilke dele af projektet nød du virkeligt?
  • Hvilke dele af projektet nød du ikke så meget, og hvordan håndterede du dem?
  • Fortæl mig detaljeret om hvordan planen var, hvordan den holdt i virkeligheden og hvordan du forholdte dig til den?
  • Fortæl mig hvordan du håndterede andre, eller indspirerede dem, med masser af eksempler.
  • Hvordan voksede du som person af det?
  • Hvordan var miljøet og ressourcerne? Hvordan forholdt du dig til det?
  • Hvordan blev du værdsat for din indsats, og resultat og hvordan havde du det med det?
  • Hvilke tekniske kompetencer skulle bruges undervejs, og hvordan gjorde du brug af dem, med enkelte eksempler?
  • Hvilke er de største fejl du lavede undervejs?
  • Hvad er dine styrker?
  • Hvad er dine svagheder?
  • Hvad gør dig anderledes end andre kandidater? Hvad kan du tilbyde os som vi ikke kan få hos en anden kandidat?
  • Hvorfor er du interesseret i at arbejde for os?
  • Hvor ser du dig selv om 5 år? 10 år?
  • Hvorfor forlod du dit nuværende firma?
  • Hvorfor er der et mellemrum imellem de to ansættelser på de to datoer?
  • Hvilke tre ting var der din tidligere manager gerne ville have du forbedrede dig på?
  • Hvilke tre ting ville din tidligere manager sige du var god til?
  • Er du villig til at skifte lokation?
  • Er du villig til at rejse?
  • Hvad er dit drømmejob?
  • Hvordan hørte du om denne stilling?
  • Hvad ville du opnå indenfor de første 30/60/90 dage i jobbet her?
  • Diskuter dit CV - hvad er godt og hvad er skidt? Hvor er der for meget information, og hvor er der for lidt information?
  • Synes du din uddannelsesmæssige baggrund er passende til jobbet? Over/-underkvalificeret? Hvorfor?
  • Beskriv dig selv
  • Hvordan håndterer du svære situationer?
  • Hvorfor skulle vi ansætte dig?
  • Hvorfor leder du efter et nyt job?
  • Ville du arbejde i weekender og helligdage?
  • Hvordan ville du håndtere en vred eller besværlig eller krævende kunde?
  • Hvad er dine lønkrav?
  • Giv et eksempel hvor du gik over kravene til et projekt.
  • Hvem er vores konkurrenter?
  • Hvad er din største fejltagelse i din karriere indtil nu?
  • Hvad motiverer dig?
  • Hvem er dit idol og inspiration?
  • Fortæl om en gang hvor du var uenig med din chef. Hvad gjorde du? Hvad gjorde han? Hvad burde og han have gjort?
  • Hvordan håndterer du arbejdspres?
  • Hvad er navnet på vores CEO?
  • Hvad er dine karriere mål?
  • Hvad får dig op om morgenen?
  • Hvad ville en der har arbejdet under dig eller sammen med dig, sige om dig?
  • Hvad var din chef's styrker og svagheder?
  • Hvis jeg ringede til din chef nu og spurgte ham hvilket område du skulle forbedre dig på, hvad ville han så sige?
  • Er du en leder eller en der følger efter?
  • Hvilken bog har du sidst læst for sjov? (For at se om du slapper af med noget)
  • Hvad er en af dine kollegaers kæledyrs navn? (For at se om du engagerer dig i folk omkring dig)
  • Hvilke hobbier har du?
  • Hvad er din favorit hjemmeside?
  • Hvad gør dig dårligt tilpas? Højder? Vand?
  • Hvis du skulle fyre nogen, hvordan ville du så gøre det?
  • Hvad kan du bedst og mindst lide ved at arbejde i denne branche og industri?
  • Ville du arbejde over 40 timer om ugen?
  • Hvilke spørgsmål har jeg ikke stillet dig?
Når du har besvaret følgende spørgsmål, kan du også se på hvilke ting der er vigtige at fortælle om til din jobsamtale. Så er du klar til at stille de kritiske spørgsmål, og klar til at forklare det som sikrer dig jobbet i tilfælde af du gerne ville have det.

Derudover bør du også gøre et indtryk ved at spørge din interviewer et par spørgsmål. Det viser du har interesse i firmaet og din kommende arbejdsplads, og gør dermed et indtryk de kan huske. Dette kunne være:
  • Hvor ser du den afdeling jeg skal arbejde i om 3 til 5 år?
  • Har direktionen nogen retningslinier for hvor de vil hen med firmaet?
  • Hvordan er min nærmeste leders lederstil?
Din krog
Hver interviewer har sine noter og skal gerne gå tilbage til dem for at huske detaljer om dig.
Hvad har du som gør de kan huske dig? Manden med de skæve fortænder? Ham i de røde bukser? Den ustyrlige latter? At du gik i meget fint tøj og butterfly i en vild farve?
Næsten alle mennesker har noget som andre husker dem på, og ved at vide hvad din er, kan du udnytte det til at stå ud og blive husket. Ved at stå ud, så kan de huske dig og de vigtige ting om dig nemmere - i den forbindelse gør det ikke noget de husker dig for dine flyveører, for de er ligeglad med dem og vil ansætte dig alligevel, men det vigtige er at de husker DIG og det du sagde til dem, så du hurtigere bliver husket når de tænker på ansøgere. Chancen for at blive valgt er større når du nemt huskes, end alle de andre kandidater som er lige så dygtig som dig som er dine konkurrenter.

Samme princip gør sig gældende ved at sende din skriftlige ansøgning på farvet papir så det nemt kan ses i forskel og derfor huskes meget nemmere.

torsdag den 19. marts 2015

Fjerne blå markering i Chrome


Outline: 0;

Det er noget browseren selv viser og laver, og er ikke din border for den ændres ikke ved at sætte andre ting på. Så selv med border: 0px solid white; så vil der stadig komme den blå markering, men du kan overstyre det med outline.

"hr" skal have border og ikke baggrundsfarve til Chrome print


Hvis man bruger en <hr> og den skal vises i Chrome på print så kan du ikke nøjes med at sætte en background-color på din <hr>, men du skal sætte en border på for at den kan ses når du printer det.
Det er underligt for den kan ses på websiden, men når den skrives ud fra browseren så forsvinder den helt desværre. Hvis man så sætter en border på 1px solid black og background-color: transparent eller en farve hvis du kan det, så vil den komme ud. Det er meget underligt, men det er sådan det virker.

Ikke brug størrelse "pt" til chrome (point/punkt til ting der skal have farve)


Har netop prøvet at lave en border på 0.5pt, som helt forsvandt i Chrome browser.
Den svarer til samme størrelse som en 1px størrelse border, men af en eller anden grund så vises den ikke i Chrome.

Skulle lave en kvittering og efterfølgende et print, og kunden opgiver sine mål i pt, men desværre forsvandt denne linie under overskriften totalt i Chrome. Efter at have lavet den om til 1px så kom der ensartede resultater på alle browsere.

Så pas på med at bruge pt til ting der skal have noget farveindhold i, for det forsvinder med denne størrelsesangivelse i Chrome.

torsdag den 12. marts 2015

.replace i javascript erstatter kun første indeks


Det man skal vide med metoden .replace er at den tager kun første indeks ([0]) og laver replace på.
Derfor hvis du fx har teksten "5.000.000,00" som du gerne vil parse til float i javascript, og derefter så skal du lave det om til et format som den kan forstå korrekt og parse til float.
Dermed skal du fjerne "." som tusindtals-adskiller, fordi i float er det et komma. Hvis du ikke gør det vil dit float-tal blive 5,00.
Derfor laver du først erstat ALLE "." med ingenting, og erstat "," med "." og derefter lav en parseFloat for at give det korrekte tal.

En nem funktion der kan hjælpe dig i din replace er:

function (valueToReplaceIn, valueToFind, valueToReplaceWith) {
                while (valueToReplaceIn.indexOf(valueToFind) >= 0) {
                    valueToReplaceIn = valueToReplaceIn.replace(valueToFind, valueToReplaceWith);
                }
                return valueToReplaceIn;
            }

Så længe den kan finde det du forsøger at replace i strengen erstatter den det, og vil derfor gradvist få et nyt indeks som indeks 0 ([0]) at replace på, og derved udføre det på alle steder i strengen.

mandag den 9. marts 2015

Jeg er så glad for Umbraco (C# .NET)


Efter lidt mere oplæring i Umbraco er jeg ved at blive endnu mere vild med det.
Jeg var ved at opbygge mit eget CMS hvor jeg kunne få min egen side til at holde styr på hvor længe jeg har erfaring med forskellige kompetencer, og hvor længe jeg har erfaring generelt.
Efter at have fået det basale på plads faldt det dog hurtigt til et fornuftigt niveau, da jeg kunne se jeg skulle udvikle fortrinsvis meget for at kunne vedligeholde det og ikke bare præsentere det. Det havde jeg ikke lige tid og overskud til efter at have overtaget "nyt" hus som også tog tid.
Efter at have haft et ønske om at lære Umbraco i lang tid, har jeg endeligt fået muligheden igennem en bekendt, og jeg bliver bare endnu mere glad når jeg kan se hvor nemt det er at knytte ting sammen i min model.
Lige nu har det stort set aldrig været nemmere for mig at rette tekster, billeder, opbygning af nye features, og få alt kædet sammen på en nem intuitiv måde. Det har jeg nu en nem måde at gøre på, og jeg kan nemt ændre de informationer og udtryk jeg vil komme ud med.
Fx er det utroligt nemt at knytte mine ansættelser, projekter, uddannelser sammen med mine kompetencer og derved måle hvor mange års erfaring jeg har med noget. Derudover bliver det ligeledes nemt på en ansættelse at vise hvilke kompetencer jeg har brugt og linke til dem, på samme måde som med projekter.

Det gør jeg kan migrere hele min håndlavede side over i Umbraco på meget kort tid i et andet design.
Siden bliver nu en one-pager som vil give dig alt den information du har i et flow og ikke på undersider, og derfor skal jeg have noget javascript til at sende dig til de sektioner på one-page-siden du nu har valgt.

onsdag den 4. marts 2015

Stoppe iPad/iPhone i at markere telefonnumre


Hvis du har set hjemmesider på en iPad så har den en tendens med at markere lange tal som telefonnumre (de bliver røde), selvom det faktisk ikke er et telefonnummer og kan være et løbenummer af en slags.
Det er fortrinsvist nemt at fjerne at iPads selv markerer sådan et nummer for dig. Det hele sker via et nemt lille meta tag du tilføjer din header:

<meta name="format-detection" content="telephone=no" />

Så fortæller du iPad og apple produkter om du ikke skal detecte telephone.

fredag den 27. februar 2015

Nu flere fede (3D) billeder fra Lytro

Jeg læste omkring den første som udkom for noget tid siden, men nu er der kommet en til.
Læs her: http://newz.dk/lytro-introducerer-3d-til-sine-billeder

Det er virkeligt fedt, med så lille et kamera kan skabe sådanne muligheder.
Så  nu er det ikke svært for folk selv at få 3D billeder.

tirsdag den 24. februar 2015

CSHARUDVIKLER.DK på ny platform - ASP.NET MVC (Umbraco)



C# udvikleren omligger nu CSHARPUDVIKLER.DK til en ny platform - nemlig Umbraco.
Den kører på ASP.NET MVC (C#), og det nyder jeg i fulde drag!
Jeg har sådan savnet C# og ASP.NET MVC er altid en fornøjelse at arbejde med.

Designmæssigt får den et skridt opad og bliver lidt mere spændende.
Funktionaliteten skal lige på plads, men automatiseringen er stadig intakt, og der er planer for videre udbyggelse.
Har igennem de sidste 2-3 år jo kørt med ASP.NET MVC og været meget glad for det, men Umbraco giver bare nogle friheder og muligheder jeg før selv skulle kode, som gør det en del nemmere. Det er helt klart et sted C# udvikleren vil udvikle sig og forbedre sig, for Umbraco er sku fedt at arbejde med.

Der skal lige dokumenteres lidt af den eksisterende platform, rettes lidt tekster, ændres billeder, og have alle data fra det gamle system over i det nye (og nok tilføje lidt flere), og have en håndtering af at mine url'er nu skal gå ned på siden ud fra url'en, fordi siden er blevet til en onepager.
Indtil videre er jeg meget godt tilfreds med hvordan den præsenterer det, og synes det ser godt ud, men må tiden så vise.

mandag den 23. februar 2015

Umbraco i ASP.NET MVC er lige det jeg søgte

Jeg har igennem noget tid jo arbejdet på at lave min hjemmeside dynamisk og selv opbygge mine data til at kunne selv opdatere sig til en hvis udstrækning. Det er lykkedes ret godt, men det har ikke været helt nemt når det skulle refactoreres.
Fx har jeg gerne ville opdatere mine projekter, så jeg har kunne tilføje projekter nemt og hurtigt, og dermed opdatere mine erfaringer. Hele grundlaget i min side baserer sig på at vise min viden og hvad jeg kan, og det gøres nemmest ved at bruge den information du har tilgængeligt.

Her i weekenden fik jeg en kort introduktion til Umbraco af en ven, og det fik for alvor mine øjne op at det er det jeg skal bygge det i. Så inden længe vil www.csharpudvikler.dk få en lille opdatering så jeg kan lege med det videre og blive dygtigere.
Jeg har manglet sammenkædningen imellem Visual Studio og Umbraco delen, og så hele strukturen som jeg ikke forstod. Altså hvordan man opdeler data, hvordan man får noget igennem, og kan lave ting dynamisk.

Tidligere har jeg været på et Sitecore kursus på 3 dage og en certificerende test hvor jeg bestod, men jeg forstod bare ikke de basale dele som jeg nu gør med typer svarer til klasser med properties.
Jeg bestod faktisk min certificering så jeg er Certificeret Sitecore udvikler, men det her gav mig langt mere end "bare" kurset på trods af vi kun brugte nogle timer en enkelt dag med frokost.

Jeg kan nu se at det er denne vej jeg selv har søgt uden at vide det, og gør at jeg fx kan få min side sat op langt mere som jeg har ønsket i lang tid. Nu kommer jeg også snart på et Umbraco Developer kursus, og så skal vi se hvordan det bliver brugt på mit arbejde for at få noget mere hands on erfaring med det. Det gode er at min egen chef selv går meget op i vi skal have det sat fast oppe i hovedet på mig og det sker bedst ved at arbejde med det når jeg kommer tilbage og så laver noget med det.
Det er sådan en god leder er, og også sådan jeg faktisk kan li det - for det kan nogle gange være svært at få lov til at få tid til det, men min egen boss foreslår det selv. Så det skal nok blive godt.

Jeg glæder mig så meget til at få noget mere information omkring Umbraco og få det ind under neglene som en kompetence der er brugbar.


torsdag den 29. januar 2015

Ændre ID i ASP.NET Webforms i Repeater ødelægger ViewState


Jeg vidste det faktisk godt, men tænkte mig ikke om og nu er det for sent fordi der er lavet så meget baseret på denne model så det kan ikke ændres.

Husk for guds skyld ikke at ændre ID'er på ting fra din repeater når det kommer ud, for så smadrer du alt logik for ASP.NET Webforms når du skal klikke på en knap og få alt tilbage - for så ved den pludseligt ikke hvilke kontroller der er hvad.
Den kan ikke selv mappe det tilbage fordi ID'erne har ændret sig i forhold til hvad den ville give dem, så den mapper dem ikke ind i ASP.NET og det kan give dig en masse problemer.

Så hvis du har brug for fx at vide hvilket nummer, version, udgave, årstal noget er knyttet til, så lav en attribut på elementet som du ved hvad hedder og send det så afsted. Så sikrer du dig at du ikke laver ændringer i det som ASP.NET Webforms forsøger at lave så smart.

Hvis man bare undgår at ændre de ting som ASP.NET selv laver om så er du sikker, og blot tænker over hvordan det kan løses uden at være knyttet op på ID, så kan du lave din egen attribut med MyID="53154" og finde den på det.

Repeater vil ikke opdatere til ny værdi liste med DataBind (ASP.NET Webforms)


Jeg har en side (ASP.NET Webforms) hvor den sætter en liste med data til en repeater.
I _ItemDataBound() ændres navnene fordi de skal have specielle værdier i. Jeg burde faktisk gøre det anderledes, men mere om det i et andet indlæg.
Når man så forsøger at registrere en ydelse med pris 0 skal den returnere et script der giver en popup der spørg om du vil opdatere med 0 fordi de vil blive automatisk fjernet.

Problemet er så at fordi jeg ændrer navnene på kontrollerne så virker viewstate ikke når den kommer tilbage (den kan ikke mappe chkBox_53152, til Mine_priser_Form1_PageHeaderControl_pnlMinePriser_Checkbox53152 - det lange navn ASP.NET selv laver for alt - så den kommer ikke tilbage i repeateren).

Så i Load sættes der ALTID default listen (med det der er gemt før), fordi ellers kan den ikke finde noget i Repeateren fordi så har den ikke nogle item (Nok fordi den ikke kan mappe dem tilbage). Der laves både Datasource = liste og DataBind() for at Click kan finde forskelle i repeateren.
Efter load udføres Click hvori den finder ud af hvilke elementer der har forskelle. Disse ligges ind i listen så listen nu er med de opdaterede værdier fra repeateren og der sættes igen Datasource = liste og DataBind() på samme repeater.

Når man så kommer til _ItemDataBound() så finder den de oprindelige værdier (fordi de er binded første gang), selvom jeg senere har lavet en anden DataBind() med en anden Datasource.

Det var jo et stort problem, men viste sig at jeg kunne "cleare" det som er DataBind'et.

Ved at sige
repeater = new Repeater()
repeater.Datasource = newList
repeater.DataBind()

så kan man få den nye liste igennem.

For mig er det underligt at den ikke overskriver det som er databinded tidligere, fordi du er jo ikke kommet til render endnu og derfor kan nå at ændre tingene, men åbenbart kun hvis man "clearer" det som er DataBind'et.

Så husk at du kan sætte din repeater til at være en ny, og den vil dermed glemme alt du har binded (VB.NET) på den, og så sætte den til det nye så virker det.

tirsdag den 27. januar 2015

Få alt i dit netværk til at snakke sammen


Jeg må indrømme at jeg er ikke ret stærk i netværk.
I øjeblikket har vi fullrate som leverandør og det kan godt give lidt udfordringer for netværket, fordi de har deres egen router som skal være den første som alt går igennem. Denne router har ikke særligt god dækning, plus har ikke porte nok til alt det jeg har brug for.

Det optimale i dette scenarie er at uanset om du sidder på dit tv, eller din mobil, eller tablet, eller bærbare så kan alle få fat i det du har delt på netværket - såsom filer fra din NAS (netværksharddisk), eller printere fx. Det giver dig nogle helt unikke arbejdsmetoder fordi du kan sidde ved din stationære i kontoret, gemme et dokument på din NAS, og så gå ind på din tablet og arbejde videre i sofaen. Eller du har mulighed for at uanset om det er på din mobil, tablet eller tv eller medie afspiller så vil du kunne få vist jeres feriebilleder nemt og overskueligt.
Din musik kan afspilles af alle enheder på netværket, nemt og effektivt.

Jeg har haft problemer med at få enhederne til at enten kunne snakke sammen og dele data og tilgå hinandens delte data, eller også at få forskellige enheder på nettet. Havde oplevet at der var nogle gange hvor jeg kunne søge efter data på Google og få en liste, men kunne ikke få vist de sider og links jeg valgte. Så søgeresultatet kunne google vise, men siderne jeg ville se og klikkede på fik bare et null response som om der ikke kom noget data igennem.

Nu har jeg endeligt fået det til at virke med min ASUS AC87U router.
Første punkt ind er min Zyxel VMG8928-B10A.
 - Port 1 --> NUC (Kablet forbindelse for hastighed og stabilitet) [Hvid]
 - Port 2 --> Synology NAS [Blå]
 - Port 3 --> Zyxel switch (Metal) [Grå]
 - Port 4 (LAN/WAN) --> ASUS AC87U router (Til dens gule port1 som hedder teaming port) [Gul]

I min ASUS AC87U er der ikke forbundet andet, men den sørger så for at give ordentlig trådløs dækning og sørge for at enheder på netværket kan snakke med alle de enheder der er sat i Zyxel routeren. Fx kan jeg via min mobil se det jeg har min NAS via deres apps. Så den kan gå via det fælles netværk til NAS'en.

I min Zyxel switch (Metal) har jeg:
- Port 1 --> Zyxel router (Kablet fra Zyxel routeren) [Grå]
- Port 2 --> Forlænger kabel der ikke længere bruges til noget. [Hvid hvor tappen er knækket af så kan ikke sidde fast ved at klikke sig fast]

Dette gør at NUC'en kan gå på nettet og kan snakke sammen med NAS'en om delte filer, min bærbare kan gå på det trådløse og lave forbindelse til et netværksdrev til at vise fotos fra NAS'en. Mobilerne kan få adgang til NAS'en via de apps Synology giver, fordi de kan få adgang igennem netværket. Jeg kan endda via min mobil få adgang til Kodi (XBMC) via Yatse (En app til at vise medier fra Kodi (XBMC)), og Kodi (XBMC) er placeret på NUC'en. Så mobilen kan gå til ASUS-routeren via det trådløse, som går til Zyxel routeren, som går via kablet forbindelse til NUC'en, som kan fortælle hvilke medier vi har på der.

fredag den 23. januar 2015

Langsom router kan give langsomt internet


For godt og vel et halvt års tid siden kontaktede jeg Fullrate som er min internet udbyder, fordi den router jeg fik med fra dem ikke kunne række ordentligt i vores hus.
Her fik jeg fortalt det var den bedste router de havde, og det endte med jeg gik ud selv og købte en bedre for at forbinde den til den eksisterende, som nu giver god dækning overalt.

Desværre for mig kan jeg ikke bruge denne som den første router ind i huset, fordi så kræver det en fast ip ifølge Fullrate som koster noget ekstra hver måned - det er jeg ikke interesseret i.

Så i forrige weekend gik nettet, selvfølgelig en søndag hvor man ikke kan ringe til dem.
De kunne ikke se der var noget problem, og de ville sende en tekniker og en ny router i tilfælde af der var problemer med den gamle.
Jeg påpeger at hvis han kommer om to dage og han sender det med pestDK, så kommer den jo nok ikke inden han kommer.
Jo jo for han skal komme imellem 8 og 17, og give lyd 45 minutter inden han kommer så jeg kan nå hjem til ham fra arbejde. Det fine er jo så at han mener også jeg kan nå at tage på posthuset og hente den - hvor man ikke kan afhente den samme dag som den er forsøgt leveret.
Så den kommer til mit arbejde hvor jeg har mulighed for at få den og tage med hjem.

Dagen oprinder og manden kommer.. FRA MORGENSTUNDEN! Vi var faktisk på vej ud af døren, så var lidt af en overraskelse og faktisk ret fint og flot.
Desværre kunne han jo så konstatere min router var død fordi han kunne få forbindelse, men han kunne ikke sætte den op og teste den fordi den var ikke engang forsøgt leveret endnu.

Samme dag på mit arbejde kan jeg så hente den router han skulle ha brugt, og hjem kommer jeg med stor skuffelse. Det er en router fra Fullrate de påstår er deres bedste router - nemlig en Zyxel P-2601HN-F1, til min store skuffelse. Jeg har haft routeren i noget der ligner 2 år.
Nu brænder den af, alt for hurtigt - en router skal kunne holde mere end 2 år.
Snakker så med en kollega som siger dem har han haft 2-3 af, og han har fået en bedre med ac-dækning og det hele. DET ER MEGET BEDRE og den havde han ikke haft problemer med, plus han faktisk kunne mærke og se en forskel i båndbredden den fik igennem.
Den sidste del var jeg lidt skeptisk med fordi jeg tænkte enhver router kan klare de 10-13 mbit jeg kører med for det er så lavt.

Nu har jeg fået den bedste de har som er en Zyxel VMG8924-B10A.
Jeg er SÅ overrasket for det er som om den er 10 gange så god! Kan rent faktisk se en reel forskel i det leverede på trods af det trådløse kører igennem en anden end denne router og hele tiden har gjort det. Så selve routeren får bare mere igennem hurtigere.

Kan se hvis jeg skal se ting på netværket såsom musik, film, billeder, backups etc så går der ikke 5-6 sekunder med at finde ud af hvad der er på netværket - nej det kommer efter 1 sekundt ca.
Det samme med websider - de kommer pling med det samme som de bør med den hastighed hvor de før var lidt halvsløve.
Så hvis du kører med en hurtigere router FÅR du faktisk i nogle tilfælde mere ud af dit internet.

torsdag den 22. januar 2015

Fejlhåndtering i C#.NET (ASP.NET)


Der er rigtigt mange måder at lave fejlhåndtering på, og skrevet tons af bøger og teorier om hvornår det er godt at bruge try-catch, null-returnering som identifier, eller state koder og meget meget mere.
Nogle mener at try-catch er effektivt fordi du kan pakke exceptions ind i hinanden, og andre mener det er skidt fordi det er "dyrt" at lave det.

Jeg personligt har fundet et system jeg synes fungerer rigtigt godt, som involverer man altid har et ResponseObject til ALLE metoder. Det vil sige du har et base object med response kodes, succes-property, eller hvad du nu ønsker at have til at identificere dine kald.

Personligt bruger jeg en Succes-property, og en ErrorCode-property som kan sættes til en enumerator. Hvis man så sender denne enumerator til et fejlmodul finder den teksten for den så du kan returnere den.

Så skal man selvfølgelig lave forskellige objekter alt efter hvad man ønsker at returnere, så du får et object af den type med tilbage du ønsker. Skal det være et array, en boolean, en liste, et objekt eller hvad du nu har behov for.

Fordelen for mig er helt klart at du kan ændre dit base-response object som du ønsker - så du kan have fx i dit fejl modul have en GetSystemErrorMessage (fx en MSSQL fejl), og en GetUserErrorMessage (fx "Der skete en fejl da regninger skulle hentes. Kontakt venligst West Inc. på 87 56 43 21").
Således kan du skrive en sigende besked i din log når der sker en fejl, hvor du kan se der ikke er forbindelse til databasen, og til brugeren kan du give en passende fejlbesked de forstår som ikke er så teknisk.

Der kan jo være mange forskellige typer fejl med filen er låst, du har ikke adgang til netværksdrevet, og meget meget mere - og dermed nemmere at skelne imellem hvad skal du gøre nu - skal du forsøge igen, eller ved du at der ikke er mere at gøre? Det er også nemmere at fortælle brugeren noget mere sigende.