tirsdag den 22. juli 2014

Csharpudvikler.dk som serviceprovider


Igennem noget tid har jeg tænkt på der er mange der netop har behovet for at beregne alder præcist.
Derfor vil jeg lave en apps-sektion på min udvikler side, som skal have en app til timespan calculator.
Således kan man fx beregne alder præcist, via en side.
Dog vil jeg også udvide min udvikler side og udstille den som en service.

Så hvis nogle har behov for at kalde en service som kan beregne et præcist timespan så kan de kalde min service.

Således vil der være en Apps-side på min udvikler side, hvor man kan indtaste startdato [år, måned, dato], og en slutdato kan ændres, som standard vil være sat til dags dato, med samme format som ovenstående.
Den vil så kalde selv samme service, og returnere resultatet til siden for at præsentere det.
Derudover vil det være muligt at en anden systemudvikler kan kalde min service med AJAX med JSON, og modtage et JSON svar.

mandag den 21. juli 2014

Anmelderrost vinholder Wine Cell


Jeg er ikke den store vinkender, og/eller vinelsker.
Derfor vil jeg nok stadig gerne have et par flasker liggende når der kommer gæster som kan li et glas rødvin.
Har tænkt på at man kan få de gammeldags stativer til at sætte ovenpå et skab og så klare mig med det, men jeg er jo ret så vild med ting der er anderledes og som får folk til lige at stoppe op og sige hov hvad er det.
Det gør Wine Cell, for dine flasker hænger nu vandret ud af væggen på grund af dens unikke opbygning og så kan du jo ellers selv opbygge din vinkælder over grundplan som du ønsker det i alle de mønstre og farver du kan komme i tanke om.

tirsdag den 15. juli 2014

Udvikler du skal forstå processen for at bruge den


Hvis du ikke forstår konceptet i SCRUM og hvorfor det holdes, så lad være med at holde det bare fordi i altid gør det.
Der er scenarier hvor i har snakket sammen om de ting i som udviklere skal lave, hvor i er så få på projektet (fx i sommerferie perioden) at SCRUM er unødvendig.

Et maskerade spil fordi "det plejer vi at gøre" er ulogisk, men tænk over om behovet er der og om du eller andre udviklere har behov for det. Hvis i får snakket igennem det i snakker om på SCRUM i løbet af dagen og ikke skal interagere med andre parter og udviklere der ikke er med i disse snakke, så er daglig SCRUM blandt 2-3 personer unødvendigt!

mandag den 14. juli 2014

Få en hurtigere Samsung Galaxy S3 med mere plads


Der er flere der oplever at deres Samsung Galaxy S3, Samsung Galaxy S2, eller Samsung Galaxy S4 har problemer med at bruge for meget hukommelse og derfor bliver langsom.
Det er der en nem løsning på, så jeres telefon bliver hurtigere og får mere plads.
Løsningen er simpel og gavner din Samsung Galaxy telefon for problemer med for lidt hukommelse, problemer med plads og opdatering via Kies, samt gør den bliver hurtigere.
Gå ind på jeres telefon og tast *#9900# som om i skal ringe til nummeret, så kommer der en menu bar frem, vælg nummer to på listen “Delete dumpstate/logcat” og jeres tlf bliver tømt for ubruglige log filer og har massere af plads igen
https://www.facebook.com/SamsungDanmark/posts/556157257752222

tirsdag den 8. juli 2014

Vær en mand og tag ansvar som udvikler!

Jeg arbejder nuværende som udvikler sammen med en der er så ansvars-fraskrivende (eller distræt) som nogen jeg nogensinde har mødt!
Manden er rigtigt god til at finde på hans egne små smarte løsninger som ændrer alt muligt, men som han så ikke fortæller andre i gruppen.
Desværre så laver han så meget ofte sine egne ting om fordi de enten ikke virker, ødelægger allerede fungerende funktionalitet, eller han vil lave det på en anden måde igen og opfinde den dybe tallerken.
Det resulterer ret ofte i at når man merger sammen med hans version så er der kommet noget på, og lige efter skal det slettes og ændres.


Det kan godt forvirre en ret så meget, og det betyder så at man spørger til hvad med det og det.
På trods af man kan vise ham det kommer fra et change-set som han står for, så mener han hårdnakket stadig at man måske selv har lavet noget man har glemt noget om, for han har ihvertfald ikke glemt noget eller haft noget med det der at gøre.


Vær en mand og hvis du får beviserne for det så indrøm og sig det må være dig og fiks det, i stedet for at slå ud med armene og sige det kender jeg ikke til, i håb om anden tager en beslutning om det skal med eller ej, som han så bagefter kan gå til personen med og sige hov hov du har da lige lavet en fejl og være sur og irriteret på personen.

ASP.NET MVC er en fornøjelse at arbejde med


Nu da jeg som udvikleren skal til at lave en side for vores grundejer forening begynder jeg at skulle lave nogle lidt mere vilde ting, fordi jeg ønsker at have nem administration med smarte features.
Det gør jeg kaster mig selv ud i nogle mere avancerede hjørner af ASP.NET MVC end jeg plejer at arbejde med, men det er fedt at lære mere om muligheder og begrænsninger i ASP.NET MVC. Generelt når man er systemudvikler elsker man at lære nyt, men det her er rigtigt meget en fornøjelse fordi jeg synes ting virker nemme og lige til, netop fordi du har så meget kontrol selv over det du laver.
Der kan være nogle udfordringer med routes, men det er noget jeg må lære mere om senere hen.

Mulighederne for at sætte standard ting op, som kan aktiveres fra dit enkelte view er så smart og lækkert.

Jeg har lavet en banner image slider på forsiden som faktisk er på layout, men under denne er en grå info box som er en hvor man kan skrive noget generelt information omkring selve siden man er på. Fordi denne er noget der generelt kan bruges så er den placeret på layout, og så på det enkelte view definerer du blot indholdet til den og wupti så kommer den pludseligt på. Det er sådan noget man som systemudvikler elsker for det er smart og nemt, uden at skulle lave en masse avanceret.
Det samme kommer så til at gælde for fx topmenu og sidemenu.
Så hvert view vil definere deres egen sidemenu, som kan deles på tværs af sider.

Igen her skal udvides med nogle smarte objekter der kan laves i controlleren som kastes med, så man altid får samme sidemenu, og man ikke skal lave noget specifikt på hver side men kun selve indholdet specifikt til denne side.


Jeg er en C# udvikler, og elsker at arbejde med C# (csharp), og jo mere jeg lærer omkring ASP.NET MVC jo mere glad bliver jeg for at arbejde med det. Det er jo fantastisk at man har så mange muligheder, som oftest ikke sætter mange begrænsninger eller grimme hack løsninger. Derfor er jeg så glad for ASP.NET MVC er det som udvikler kan lave vores grundejerforenings side i, for det fungerer bare så godt!

Uanset hvad jeg har skulle lave indtil videre har der været lidt indlæring, men har løst det på en pæn måde.
Imageslider var der lidt bøvl med, men blev løst og var en smuk løsning. Topmenu blev dynamisk og smuk opsat med nem administration. Info box (grå) var lavet i løbet af sekunder og det fungerede bedre end forventet. Det er jo GENIALT!

mandag den 7. juli 2014

VB.NET kan ikke finde ud af Attributes

Som systemudvikler oplever man mange sjove ting.
Da vi desværre nuværende arbejder i webforms, er json kald nødvendige at lave som webmethods.
En webmethod bliver lavet som static / shared (i vb.net) fordi du så ikke skal have en instans af siden for at kalde den.
Det betyder så også at du ikke har adgang til de data på din klasse/objekt etc. som du er vant til.
Man kan dog dele sin session med sin webmethod, men her skal man være en opmærksom udvikler, for i vb.net har man sin egen syntaks.

Desværre for C# udvikleren oplevede jeg at den ikke ville udføre det korrekt, undtagen når jeg debuggede.
Vi har et user objekt i sessionen, og den har et menu-objekt til at holde styr på en masse.
Hvis jeg bare kørte siden, kunne den ikke få fat på dette menu-objekt, men så snart jeg debuggede så virkede det og den fandt værdierne.
Så snart jeg slukkede for debugging så kunne den ikke læse værdierne igen.

Det viste sig at være forskel i attributes fordi det er vb.net der har sin egen syntaks.
Jeg startede med denne syntaks:
<System.Web.Services.WebMethod(True)> _
        <ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _
        <
        Public Shared Function GetPermissions(ByVal textID As String, ByVal rootPath As String, ByVal ParentTextID As String, ByVal DotNet_Type As String, ByVal DisplayColumn As String) As PermissionsInfo

Ovenstående fungerede ikke!

Denne syntaks endte med at fungere.
<WebMethod(Description:="Per session Hit Counter", _
       EnableSession:=True)> _
    <ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _

Ovenstående FUNGERER KORREKT!

Den fungerede og nu kunne min side pludseligt altid få fat i de data fra menu-objektet.

Forskellen er hvordan du definerer EnableSession-værdien, og det var denne der gjorde om det virkede permanent eller ej.
Derfor man nogle gange kan blive en træt systemudvikler for det fungerer ikke altid som det burde.

fredag den 4. juli 2014

Arkitektur er rigtigt vigtigt for en udvikler!


Vores projekt er baseret på at stort set alt er bygget op i kontroller, og hver af disse kontroller skal bede om data kun til sig selv.
Optimeringsmæssigt har vi som systemudvikler sørget for at alle disse kald slås sammen til et så man ikke har 100 kald per side til databasen.

DOG var vi lidt uenige om hvad strukturen skulle være. Jeg mente det skulle være en central del som hver kontrol skulle sende et request til denne enhed, som satte data og leverede dem tilbage til kontrollen.
Desværre blev vi ikke enige om det, og det endte med en anden model som ligner den men er meget mere bundet op til en side skal være en speciel type side, og en masse andet sættes op korrekt.

Udover det så er jeg nu halvvejs inde i projektet kommet til en situation hvor jeg har brug for at dele data fra en kontrol til en anden. Det kan man desværre ikke så nemt på samme måde her, for alt hardwires ind i kontrollen i stedet for at have en property med et response objekt hvor man kan sende data til andre.
Derudover ønskede jeg at vores menu blev loadet ind i en statisk klasse som skulle holde styr på en masse, og dette skulle ske en gang og man kunne så lave forespørgsler til dette objekt.
Det var der ikke enighed om var smart, så nu sidder vi med en låst struktur og der hvor jeg nu har brug for tat tilgå data fra den kontrol over mig, så skal jeg selv bede om samme data igen og lave "hacks" fordi strukturen er for fastlagt.

Det rammer mit udvikler hjerte når man bliver nødt til at lave sådan noget gris, for man er som C# udvikler trods alt stolt af sit erhverv.

VB.NET på et website arver ikke altid korrekt (Kontroller)


Hvis du som udvikler arbejder med kontroller, i VB.NET på et website, så kan man lave properties til en KontrolBase som du kan sætte på kontrollen.
Desværre betyder det så bare at den property du har sat ikke er på begge typer objekter - eller værdien er forskellig efter typen.

Hvis du har base-klassen KontrolBase, som har propertien RenderAtHover som kan sættes til en boolean værdi.
Hvis du så har en kontrol der nedarver fra den og sætter den på kontrollen Controls_ContentControls_SectionsImage (som nedarver fra KontrolBase), så hvis du har et andet sted hvor du skal finde den kontrol og typecaste den så er der to scenarier:


  1. Typecaste den til den egentlige type (Controls_ContentControls_SectionsImage)
  2. Typecaste den til base-typen (KontrolBase)
Normalt ville jeg mene at uanset hvilken du satte den til, skulle din property RenderAtHover have samme værdi. Her er VB.NET lidt underlig, for fordi du har sat den på den specialiserede type (Controls_ContentControls_SectionsImage) så skal du typecaste den til denne type for at få værdien.
Hvis du ikke gør det, så er propertien ikke sat.

Dette betyder at når du har nedarvning skal du dermed prøve at lave dit objekt om til de nedarvninger du har for at se hvilke properties der er sat fra hvilke "lag" (nedarvninger). For fx dem som der er sat standard til en default værdi i et tidligere nedarvet lag får du ikke med i det specialiserede når du typecaster med ctype.

Så hvis du på masterpage.master kalder FindControl(SectionsImageID) og får et object tilbage, og typecaster den til KontrolBase så får du ikke værdien sat på den side hvor du bruger kontrollen.

Fx:
AppCode\KontrolBase.vb
Her sætter du Name = "Default name"

Controls\ContentControls\SectionsImage.vb (nedarver fra KontrolBase)
Du sætter Name = "Another name"

Hvis du så på din master har FindControl(SectionsImageID) får du object tilbage.
Derfor må du typecaste.
Hvis du så typecaster den til base-typen mister den sin specialiserede værdi.
dim foundControlObj as object = FindControl(SectionsImageID)
dim specialisedControlBase as KontrolBase = ctype(foundControlObj, KontrolBase)
dim theName as string = specialisedControlBase.Name

theName vil være "Default name", i stedet for "Another name" som den burde være.
Hvis du derimod laver en klasse der hedder SectionsImageBase som du ligger i app_code og nedarver fra denne (som nedarver fra base), så selvom det virker som det samme så bliver det åbenbart ikke fordi du ikke sætter værdien til noget.
Dvs:
AppCode\KontrolBase.vb
Her sætter du Name = "Default name"

AppCode\SectionsImageBase.vb (nedarver fra KontrolBase)
Her sætter du ikke Name til noget default

Controls\ContentControls\SectionsImage.vb (nedarver fra SectionsImageBase)
Her sætter du Name = "Another name"

Dette gør at du kan typecaste din kontrol til en "mere" specialiseret form hvor den ikke default sætter din property til noget. Derfor bliver din property nu "Another name" som den skal.

Ved ikke hvorfor, og kan ikke forklare det. Måske det er fordi den tager scopet af KontrolBase og sætter Name til default name, og fordi "specialiseringen" SectionsImageBase ikke sætter denne property til noget så kan den nu tage den værdi fra den der arver fra den.
Burde ikke være nødvendigt, og er ret sikker på den slags ikke forekommer i C#, men igen som systemudvikler bliver man nogle gange overrasket. Det blev denne C# udvikler i hvert fald!

torsdag den 3. juli 2014

IE11 og renderings problemer (fix med meta tag)


Når man skifter til IE11 kan der være nogle stylings ting der ikke fungerer på samme måde længere, regler der ikke overholdes på samme måde, og derfor ser underlig ud i IE11, men pæn i samtlige andre browsere.
Af en eller anden underlig årsag så kan IE11 godt finde på at bruge rendering engine 7 eller 8 nogen gange, uden helt at være klar i spyttet med hvornår og hvorfor.

Heldigvis er der et meta tag der kan gøre at du beder Internet Explorer om at bruge nyeste rendering engine.
 <meta http-equiv="X-UA-Compatible" content="IE=edge" />

Du kan så selv bestemme hvilken engine den skal forsøge at rendere den med (vha. content), og kan være gavnligt i nogle scenarier.
Fx så sent som i dag har jeg haft en fejl med CuteEditor ikke blev renderet ordentligt fordi content den stod til "IE=edge".
Dette blev så løst ved at sætte den til:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9" />

Dette er på grund af IE11 har noget med noget sikkerhedszoner der giver fejlen, men ved IE9 ser siden pæn ud OG cuteeditoren virker faktisk.
Utroligt nogle gange hvad hacks der er nødvendige at foretage sig.

tirsdag den 1. juli 2014

Dygtige mennesker har det med at glemme det banale


Læste netop sætningen "dygtige mennesker har det med at glemme det banale", og det slog mig at det måske var mig.
Linien efter viste sig så at give mig ret, da man her skrev at det specielt er folk med lister - hvilket jeg personligt bruger meget af.

Citat:
"som er en undersøgelse af hvordan især flyindustrien og byggebranchen håndterer kompleksitet. Svaret er tjeklister, og hovedindsigten er den at dygtige mennesker har det med at glemme det banale."

Jeg har det med at jeg laver lister over to do's både på arbejde, men også personligt. Det er hvad skal jeg huske at købe, hvad skal der laves derhjemme, skal der ses på wifi dækning i huset, skal vi købe ind til vi får mange gæster på torsdag, forberede et foreslag til bestyrelsesmøde tirsdag klokken 19.30, male gavlen, skrive omkring rollers funktion og kombinationsmuligheder, underpunkt skal arve rettigheder, lave needed -side med hvad kræver det før du kunne tænke dig at skifte arbejde, en surprise middag for Tatiana, med biograftur og de støvler hun var vilde med, og dessert når i kommer hjem.


Baggrunde til din webside? Brug en background generator


En god baggrund med list spil kan gøre stor forskel til en hjemmeside, og det er ikke altid lige nemt at finde en til det formål og vision man vil fremvise med sin webside.

Jeg er blevet rigtigt glad for en background generator, for der er mange muligheder og det er dejligt nemt og hurtigt at prøve en masse af.

Se fx: http://bg.siteorigin.com/

Grundejerforeningen på landkortet


Så er det på tide at jeg skulle ind i bestyrelsen, og de havde i tankerne at jeg kunne stå for noget hjemmeside.
Jeg er trods alt systemudvikler, og roder med udvikling, så derfor de mente jeg kunne hjælpe, nu vi ikke har nogen hjemmeside.

Netop fordi jeg arbejder med systemudvikling til dagligt, så skulle jeg også gerne hæve niveauet lidt.
Det er netop planen den skal være pæn, overskuelig og langt højere standard end dem som de fleste grundejerforeninger har. De fleste ligner noget lavet i 1990 af en 9. klasses elev, og det er her vores skal adskille sig. Den skal være lækker og indbydende at se på, samtidigt med at der skal være mulighed for at ligge alle de informationer ind som andre skal bruge.

Har endda overvejet at indbygge så siden selv har kampagner i løbet af året, som det passer.
Fx at der til forår/sommer er information omkring klippe hæk, huske haveaffald, hvor der ligger en genbrugsstation etc.
Når vi når hen til sommerferien så give gode råd omkring at sikre sig når man tager på sommerferie, og bede naboer holde øje med sit hus.
Efteråret byder på regn, og vi fortæller man skal rense sine tagrender og ligge mærke til fugt samlinger.
Senere på året omkring vinter kan man snakke omkring sikkerhed i husene, og tæt på jul og nytår snakke omkring sikkerhed i husene og hvordan man sikrer sig når man har travlt eller er ude etc.
Ved forår lige før sommer hvor det er ved at være tørt og fri for regn, kan man snakke om vedligeholdelse af huset såsom udskiftning af vinduer, maling af træ.
Et andet punkt kan være energioptimeringer til huset med energieffektive ruder, ekstra isolering, solceller, genveks, gulvvarme etc.

Hvis vi ville kunne vi endda lave små reklamer for firmaer vi har samarbejdsaftaler med, som vi skriver kan hjælpe med haven, slå græs, klippe hæk, anlægge bede,blomster, gangstier, bygge udestuer, terrasser, rense udendørssten, rense taget etc. og de så skulle betale et årligt beløb for at komme med på vores side.
Således kunne vi få dækket driftsomkostninger, plus vi kunne måske få lidt ekstra ind den vej.

Så må vi se om C# udvikleren kan få lavet et ordentligt resultat.