tirsdag den 12. juli 2016

Webteknologier i forbindelse med IT-Ingeniør på DTU

Jeg har for nyligt gennemført kurset Webteknologier på DTU.
Dette var et obligatorisk kursus (grundmodul) i forbindelse med jeg skal tage en IT-Diplomingeniør uddannelse på DTU, med liniebetegnelse/speciale i webudvikling. IT-Diplomuddannelsen

Kurset webteknologier er taget hver torsdag efter arbejde fra kl. 17 - 21, fra januar til juni. Kurset er afsluttet med karakteren 10.



“The greatest enemy of knowledge is not ignorance, it is the illusion of knowledge.” 
Der er stort fokus på specielt protokoller, routing, lagdeling og algoritmer for hvordan pakker/data flyder og vurderes/valideres etc.
Derudover er der lidt fokus på webudvikling (Her blev der brugt PHP som udgangspunkt), og på databaser (optimering & struktur).

Jeg valgte at lave mit eksamensprojekt som en side for nystartede og små virksomheder og iværksættere som har behov for at personalisere data i mail-udsendelser.
Forbrugerne har en klar forventning om personalisering af indhold til dem, og det er derfor vigtigt for små virksomheder at kunne understøtte og tilbyde dette til deres kunder, på en nem og effektiv måde.
Derfor lavede jeg et projekt som skulle være grundstenen i at kunne kommercialisere løsningen for brugere. Resultatet blev viurderet i rapporten, sammen med en række læringer og løsning/forbedringsforslag, sammen med en grov model for hvordan projektet skulle opbygges for at både kunne tiltrække gratis kunder til, men samtidigt også lave en model der giver indtjening.

Det hele uploades til en adresse (www.systemudvikler.dk) som kan bruges til afprøvning og demonstration til eksamen.


Det er sådan at jeg er sat til at skulle være far den 6. juli, og havde fået ind i mit hoved at jeg skulle til eksamen lige før denne dato. En måned og en dag før denne dato skriver jeg så DTU at jeg ønsker at komme til eksamen som den sidste denne dag, fordi hvis han skal komme til verden denne dag vil der ikke være nogen afbrydelser for lærerne som så kan tage ubesværet hjem.
Jeg får hurtigt svar tilbage med at det er jeg allerede sat til i morgen.
Her bliver jeg en lille smule stresset fordi jeg forventede jeg kunne bruge cirka en måned på at forberede mig, og fandt så ud af jeg havde lidt mere end 12 timer til forberedelse.
Jeg skynder mig hjem for at forberede mig, og min kollega siger endda jeg skal helt droppe og tage op og så tage næste eksamensdato og være velforberedt, men så let giver jeg ikke op.

Jeg bruger min aften på at forberede og lave testdata, og finde en god strategi for hvordan jeg vil fremlægge det og præsentere det, for at få vist alle facetter af modellens fleksibilitet, og skalerbarhed.
Næste morgen tager jeg ind og sætter mig klar en del inden jeg skal ind, for jeg kan ikke finde ro i kroppen.
Da jeg snakker med dem som har været inde kunne jeg se jeg havde ikke læst op på de dele som de ville fokusere på, til rædsel for mig.
Jeg beslutter jeg må køre det jeg har forberedt da jeg ikke kan nå at ændre kurs og komme så langt med det jeg kan.


Til eksaminationen starter jeg ud med at præsentere min web applikation, og fortæller ganske kort hvordan den er opbygget og tanken bag. Jeg fortæller om min testkunde starter ud således og viser nogle valideringer. Jeg fortsætter og viser nogle scenarier i tilpasning af data og hvordan de valideres og tilpasses dynamisk og intelligent fra serveren af til brugeren.

Her begynder sensor at stille nogle nysgerrige spørgsmål til hvordan det er opbygget, og om mulighederne i løsningen. Der er nogle kritik punkter jeg ikke har tænkt over, men som meget nemt vil kunne løses, og er meget i samme stil som den vinkel jeg har taget i min rapport.
Det slutter af med jeg gennemgår hele min præsentation hvor vi fortsætter med at snakke om muligheder og optioner i min løsning, hvor både lærer og sensor er meget imponerede over hvor nemt det er at arbejde med. De mente endda jeg bør løse de ting som de påpeger og min egen rapport påpeger og gå kommercielt med det, da der ikke findes noget som det derude.
Det var åbenbart noget som de havde siddet og talt om over frokosten lige inden at de var imponerede. Der var nogle forbedringsforslag med at man kunne lave et API man kunne kalde og dermed nemt integrere løsningen i flere systemer, og de savnede lidt noget advarsel på data hvis man uploadede 1000 mails til fletning. Denne vinkel havde jeg komplet glemt fordi det var tiltænkt små virksomheder og iværksættere, men en god vinkel for fastholdelse af brugere da jeg skal kunne skalere med virksomheden i takt med den vokser til større og større opgaver.
“No thief, however skillful, can rob one of knowledge, and that is why knowledge is the best and safest treasure to acquire.” 
At min rapport var vendt som en rigtig kundecase og have et forretningsperspektiv var noget af det jeg var mest nervøs for, fordi ingen af eksempelrapporterne havde taget denne vinkel på, og kunne derfor risikere fuldstændigt at eksplodere i hovedet på mig.
Heldigvis endte det modsat at fordi jeg forsøgte at tage det hele vejen rundt om, så var det langt mere fyldestgørende.

Sensor ville også høre om det var for en kunde det var lavet, eller om jeg selv havde fået ideen til det, hvor jeg måtte sige det var min egen ide. Igen meget imponeret fordi det var en god vinkel, og rigtig god løsning som gjorde det ekstremt fleksibelt at kommunikere fleksibelt og have en nem brevfletning til mails.

Det endte med jeg fik et flot 10-tal, og ikke et 12-tal fordi da jeg fortalte om naming-servere så fik jeg ikke fortalt eksplicit nok at den vil gå til den lokale naming server for så eventuelt at gå til en international hvis min side ligger på en amerikansk server.

Status quo er aldrig godt nok!

For godt og vel et år siden satte jeg mig selv ud på en ny rejse, en personlig og professionel rejse.

Jeg kunne føle dybt indeni mig selv at jeg havde et uopfyldt behov jeg måtte have stillet!
Der skulle ske noget mere i mit professionelle liv.

Det førte til at jeg kastede mig ud i noget nyt; et nyt job hos Bluegarden.
Her blev jeg stillet i udsigt jeg ville kunne få fokus på professionel (og personlig) udvikling og at dette område er vigtigt for Bluegarden. Det appelerede i høj grad til mig og jeg måtte kaste mig ud i det.
Selvfølgelig kræver det en masse af en at skifte job, da der er nye mennesker man skal arbejde sammen med, nye processer der skal mestres, samtidigt med man også skal lære en ny kodebase at kende sammen med en kodestil som passer til det team man sidder i. Det "ubehagelige" her er at man ikke er "hjemmevant" fordi man kan ikke så nemt lave alle mulige ting uden at kende kodebasen og stilen, man føler ikke man får opgaver løst så hurtigt som man måske burde, og kan igennem lang tid godt føle sig "bagud". Man har også svært ved hvem man kan "gå til" fordi man ikke ved hvor nøgleinformationen er gemt henne i huset og hos hvem.


Efter nu at have siddet her i godt og vel et år, er det selvfølgelig også meget bedre, og jeg er faldet godt til.
Da jeg havde siddet her i nogle måneder kom min leder til mig og spurgte om min fremtid hos Bluegarden, og jeg nævnte at jeg havde igennem en rum tid haft et ønske om at tage noget videreuddannelse som jo er en formel måde at blive dygtigere på. Her er man nogenlunde sikret et mål og en vej dertil med nogle lærinmgsmål undervejs som sikrer en vis standard af viden.
Det kan være ekstremt fedt at lære af kollegaer og projekter, men er ikke struktureret på samme måde eller sikret samme afkast i viden på samme måde.
Det skulle jeg ikke sige to gange, og jeg blev hurtigt sat igang med en uddannelsesplan.

Så jeg er nu i gang med min drømmeuddannelse ved siden af arbejdet, nemlig IT-ingeniør med speciale i Webudvikling. Den kendes også internationalt som TD Informationsteknologi /
Diploma of Technology in Information Technology. Her er jeg sikker på at ved at tage en IT-diplomingeniør uddannelse på DTU, så giver det mig helt sikkert nogle stærke kompetencer jeg får brug for.

Mit første modul var Grundlæggende Objekt-Orienteret Programmering, og efter en undervisningsaften kunne jeg se, det var simpelthen ikke mig. Det var meget grundlæggende og derfor valgte jeg at satse på en realkompetence vurdering i stedet fordi når man sidder og assisterer underviseren så er det nok unødvendigt. Ellers ville det også have været svært at lave min udvikler side www.csharpudvikler.dk hvis jeg ikke kunne den smule. Dette moduil er obligatorisk og derfor krævet.

Så hoppede jeg på modulet Webteknologier, som også er obligatorisk.
Her kom jeg til undervisning hver torsdag kl. 17 - 21, og fik lavet min eksamensopgave som gav mig et flot 10-tal. Rigtigt flot taget i betragtning af jeg faktisk fik mindre end 24 timer til forberedelse.
Fik misforstået dato'erne og da jeg skulle bekræfte dato'en til om en måned fik jeg at vide jeg var booket til i morgen, og så fik jeg travlt med at komme hjem og forberede mig! Det gik jo så heldigvis også godt nok.

På det nye job får jeg nu lov til at tage en IT-diplomingeniør uddannelse ved siden af arbejdet, og mit næste moduil bliver SCRUM i projektledelse som jeg glæder mig meget til.


Jeg er nu ved at være kommet godt ind i koden, og lært mine gode kollegaer godt at kende, og jeg lærer rigtigt tit fra mine dygtige kollegaer og det er en fryd at gå på arbejde.
Her er vi i gang med projektet CommonDB, som er et projekt hvor vi ligger to systemers database sammen til en, og laver to-vejs-integration via BG API. Det er bygget på .NET Core og det nye WebAPI 2 fra .NET. Det er lavet i C# (.NET) og er et fuldt REST-API.
Jeg står her for integrationen ind i systemet som skal bruge API'et, og det er fedt at arbejde et sted hvor der er fokuis på innovative løsninger i et nyt systemlandskab og nye teknologier der gør det nemmere og mere effektivt at udvikle løsninger.

Så der er kommet meget mere fart på, både professionelt, men også personligt.
Men status quo er aldrig godt nok, så det er ikke helt nok.

Så oveni hatten topper jeg lige af med at jeg skal være far til en dejlig lille dreng lige om lidt!

Så at omlægge min vej er en god beslutning der gør mig stærkere og dygtigere, og jeg er glad for det. Det ekstra arbejde der er, det motiverer mig mere fordi jeg ser tydelige resultater på mine anstrengelser. Et dejligt arbejde med de rette udfordringer,læringer fra kollegaer, gode søde kollegaer der gør det sjovt og spændende at gå på arbejde hver dag, og et arbejde for en organisation som tager dig lige så seriøst som medarbejder som du selv gør. Det er en ren inspiration at være et sted som holder snuden i sporet lige så meget som dig for at du skal nå de store mål der er sat derude i fremtiden.

Så stilstand er ikke tolereret, og der skal være udvikling både personligt og professionelt for at jeg kan trives.
Jeg har en brændende ild indeni der gør jeg har svært ved ikke at lade mig udvikle videre hele tiden. Viden er et stærkt drug og her er jeg hooket, og status quo er aldrig godt nok. Der skal viden til og udvikling for at jeg kan blve dygtigere.

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.