fredag den 19. september 2014

Name Analyzer - Omdøb filer til noget sigende

Først for nyligt har jeg fået lavet et rigtigt medie center, som gør at vi nyder alle vores medier langt langt mere fordi det er så tæt på og så nemt.
Det vi har gjort er at digitalisere alle vores DVD'er og musiksamlinger (CD'er), og lagt på vores NAS og fået sorteret og grupperet dem korrekt.
Problemet er med at man har film tilbage fra man gik i gymnasiet er at navngivningen er på 14 forskellige måder som man nu har syntes var smart igennem tiden. Derfor kan den første disney du havde, have et navn, og to'eren til selv samme film nu ikke ligger lige under med "2" bagefter, men et helt andet sted som du ikke kan se.

Det har resulteret i jeg har selv lavet en name analyzer, der kan analysere navne og finde dele af et navn og forsøge at finde ud af hvad det er.
Indtil nu har den virket på over 90% af min filmsamling som er blevet pæn og organiseret med ensartede navne - fx er alle disney film blevet navngivet "Disney - {filmnavn}", og de film hvor der stod årstal i kan nu finde årstallet i navnet og navngive den med (2014) efter filmnavnet.

Måden den finder filmnavnet er at finde dele som er tekst, indtil den støder på en del som ikke længere er tekst (eller splitter).


Den gennemsøger hele teksten, og opdeler den i logiske dele den har analyseret sig frem til.
Så den søger efter:

  • Tekst
  • Quality (1080p)
  • Splitter ("-", ":")
  • Årstal (1955)
  • Source (DVD)
Så hvis vi tager et eksempel
Lady and the Tramp 2 - Scamps Adventures.2001.DVD.720p

så bliver det til
[Lady, Text]
[and, Text]
[the, Text]
[Tramp, Text]
[2, Text]
[-, Splitter]
[Scamps, Text]
[Adventures, Text]
[2001, Year]
[DVD, Source]
[720p, Quality]

Så længe den finder tekst eller splitter, så forsætter den med at medtage den gamle information i det nye navn og derved kan du ofte nemmere få opbygget et mere retvisende navn der er mere ensartet.

Så det nye navn ville ende med:
Lady and the Tramp 2 - Scamps Adventures (2001)

Det har sparet mig for rigtigt mange timers retning fordi den gamle samling efterhånden er ved at være så stor.

tirsdag den 16. september 2014

Image Optimization for Visual Studio (extension)


Har du behov for at optimere dine billeder til lossless image optimization?

Det tilføjer en højrekliksmenu til at optimere alle PNG, GIF, og JPEG filer, og påvirker slet ikke kvaliteten i dine billeder fordi det er lossless image optimization.
Den bruger SmushIt og PunyPNG til at optimere dine billeder, uden at de taber kvaliteten.

Der er mange procent at spare i filstørrelse, som gør at dine billeder kan loades hurtigere, dermed loades din side hurtigere, og dermed rangerer du højere ved google med en hurtigere page speed.

mandag den 15. september 2014

TFS offline - Komme online igen


Hvis du arbejder i en solution og er forbundet til Team Foundation Server (TFS), men pludseligt er et sted uden netforbindelse spørg din solution om du vil arbejde offline.
Når man så siger ja, og arbejder videre så er det ikke sådan at næste gang du kommer online igen at den automatisk genforbinder til TFS. Den låser dine filer (write-protected/skrivebeskyttet), og lader dig ikke gemme noget før du er online igen.

Det er ikke nok at forbinde til TFS igen, for du er måske forbundet til TFS, men din solution forbinder så ikke til TFS. Du skal højreklikke på dit projekt, ikke din solution, derefter vælge Source Control > Go online.

Automatik eller et spørgsmål om den skal gøre det automatisk er der ikke indbygget i TFS, desværre - så det må du selv i gang med.


Desværre for mig, mente TFS så også at samtlige filer i min solution var ændret imens jeg var offline. Det var de ikke helt. Heldigvis kan den nu finde ud af at fjerne filer der ikke har ændringer når man checker ind, så de vil blive frasorteret der.

onsdag den 10. september 2014

Manglende film i XBMC?


Nu man har fået en XMBC maskine, og alt spiller, så kan man opdage nogle gange at de film man har lagt ind, ikke kan findes.
Så fx ældre film kan ikke findes fra en scraper, eller der er noget der ikke passer så den ikke kan finde dem. Dette gør at filen ikke vises i Movies, men skal findes manuelt i Video i listen af filer.

Det kan godt være ret irriterende, for selvom der ikke er noget information på filen vil man stadig gerne have den i Movies for så er alle film samlet i en liste, så man ikke skal i Video for at lede efter enkelte manglende filer.

Det er der en løsning på! Missing Movie Scanner (add-on):
http://wiki.xbmc.org/index.php?title=Add-on:Missing_Movie_Scanner

Jeg var selv gået i gang med at lave et lille program der kunne omdøbe mine mapper så de hed det korrekte, sammen med mediefilen indeni, men det viste sig så at være ligegyldigt.
Så mit program bliver nok bare brugt til at analysere mapper, få dem stuktureret og opstillet ensartet med samme format, så man nemmere kan se filsamlinger i filerne også fordi filformatering er ens.

Den kan analysere:
 - Tekst
 - Splitter ("-" eller ":")
 - Year (1994)
 - Source (DVDSrc)
 - Format (Xvid)
 - Quality (1080p)
 - Prefix ([LeAd]
 - Ripper (eksperimental)

Så den kan omdøbe din mappe og filer til noget mere korrekt, med et filnavn og årstal og fjerne de unødige elementer såsom "Source", "Format", "Quality", "Prefix" etc.

Det vil der komme mere om senere.

Validt HTML fra Visual Studio (Hvis det er XHTML)


Et avanceret værktøj som Visual Studio forventer man kan hjælpe dig i din færd med at skrive korrekt kode. Det er derfor den afslutter dine tags, giver dig fejl hvis du ikke har afslutninger etc. men når du så vil validere din html kan du rende ind i problemer.

Det viser sig at være fordi Visual Studio ALTID hjælper dig! Bare kun med at lave XHTML, så du skal altid have afslutning på dine tags.

Så selvom Visual Studio forsøger at gøre din HTML valid, så kan den ikke se på hvad den skal validere imod og hjælpe dig imod det mål du selv har sat. Så hvis du sætter doctype til
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
så hjælper Visual Studio dig med at arbejde væk fra det du selv har indskrevet du ønsker at ende med.

Man kan altid argumentere at hvis man ikke har styr på sine regler, kan man holde sig til Visual Studio's start forslag, og lade den hjælpe dig i mål med det, men det er et værktøj til hjælp, vel ikke diktatur?
Uanset hvad du forsøger at lave bør den hjælpe dig derhen, hvilket er pointen i en IDE som Visual Studio.

Så husk Visual Studio hjælper dig bare med at lave korrekt XHTML.

torsdag den 4. september 2014

CSS: Vælge element lige før/efter et andet


Ofte i en menu vil man gerne have en menuadskiller for hver menupunkt, men disse skal måske forsvinde når et menupunkt er valgt.
Eksempel:

Intet valgt element -situation (Situation 1)
Punkt 1 | Punkt 2 | Punkt 3 | Punkt 4 | Punkt 5

Valgt element -situation (Situation 2)
Punkt 1 (Punkt 2) Punkt 3 | Punkt 4 | Punkt 5

Ved det valgte element, forsvinder menuadskiller før og efter, men dette er ikke så nemt lige at gøre med CSS - UMIDDELBART!

Dette er fordi hvis vi opsætter kode og eksempel:
<ul>
<li>Punkt 1</li>
<li>Punkt 2</li>
<li>Punkt 3</li>
<li>Punkt 4</li>
<li>Punkt 5</li>
</ul>

Ovenstående viser (Situation 1)

Du kan få adskiller ved at sætte "background-image:url('image-splitter.png');" på hver li, og "background-repeat: none;", og når du så klikker på et element bliver det til:
<ul>
<li>Punkt 1</li>
<li class="marked">Punkt 2</li>
<li>Punkt 3</li>
<li>Punkt 4</li>
<li>Punkt 5</li>
</ul>

Ovenstående viser (Situation 2)

Problemet er at marked kan du sætte til "background-image: none", men den fjerner kun splitter på den ene side (i dette eksempel venstre).
Du har derfor brug for at kunne vælge den før/efter alt efter om din splitter vises i starten af din li, eller i slutningen.

DER ER DOG EN LØSNING!

Vælge element efter div i css:
.marked + li
Derved selecter du den li der er lige efter ".marked" -klassen og kan sætte "background-image: none", så den ikke vises.

Vælge element før div i css:
.marked ~ li
Derved selecter du den li der er lige før ".marked" -klassen og kan sætte "background-image: none", så den ikke vises.

Tags: css select element before another

Internet Explorer 11 (IE11) doesnt give round corners!


The problem exists because IE11, doesn't use the newest rendering engine, and therefor uses an engine that doesn't understand border-radius and round corners.
You can fix this with puttin a tag in head that forces it to use the latest rendering engine.

<meta http-equiv="X-UA-Compatible" content="IE=10"/>

or

<meta http-equiv="X-UA-Compatible" content="IE=edge"/>

The first forces it to use IE10 engine, where the second forces it to use the latest it can find and therefor more compatible with different IE browsers.

It is a funny fact that you can have Internet Explorer 11, and border-radius: 5px doesn't work, because the rendering engine it uses aren't from IE 11, and therefor doesn't understand the tag. The browser understands it, but just default doesn't use the latest engine that understands it.

fredag den 29. august 2014

Godt værktøj til din pizza!


Jeg har været en del pizzaskærere igennem og der er mange dårlige imellem.
Nogle har nogle "håndtag" foran ens hånd man skal kunne afsætte på så man kan presse bedre, men som enten bukker eller nemt går fra hinanden. Andrehar et hjul der kører let i 1/3 af vejen, så kører hårdt og så let igen hvilket kan blive virkeligt irriterende når man skal skære pizza.
Denne her skulle efter sigende ligge godt i hånden og  Quirky laver nogle gode produkter, så vil også gætte på Quirky Slice pizza skærer også er god at arbejde med. Design wise er den ihvertfald pæn at se på.

onsdag den 27. august 2014

Kravspecifikation med din kunde


Kravspecifikation er noget af det værste at få på plads som systemudvikler, for kunden glemmer ofte mange detaljer og dem opdager man ikke før tilbudet er afgivet, og man opdager mulige brugsmønstre som man ikke havde tænkt over til at starte med.

Her er et par ideer til hvordan du kan få det konkretiseret lidt mere.

Sæt dig ned sammen med kunden og tag fat i design oplæg, eller skitser det der skal opbygges.
Hvis det er web så skitser alle sider, med alle kontroller og gå dem derefter igennem helt slavisk:

STØRRELSE
- Fast bredde/højde? Dynamisk på en af lederne?
- Skal størrelsen være i pixels eller en relationel størrelse (procent)?

INDHOLD & FARVER
- Hvordan skal design være? Farvede kanter? Runde hjørner?
- Skal den kunne have et billede som baggrund? Skal dette være fast eller skal i kunne ændre det?
- Skal indholdet få den til at vokse i størrelse eller skal den være i fast størrelse?
-- Hvis indholdet er større end den definerede størrelse, skal det så gå ud over eller skal det overskydende skjules?

BRUG
- Skal den kun bruges dette sted/på denne side?
- Hvis den skal bruges på flere sider, skal alle sider så dele de samme data (global), eller skal den kunne have indhold per side (lokalt)?

FUNKTIONALITET
- Skal den kunne skifte farve?
- Skal den påvirke en anden kontrol, eller kun sig selv?
- Skal der ske noget når man klikker på den, eller en del af den?
- Skal den oprette noget et andet sted, vise data et andet sted/kontrol, når man indsætter noget?

VALIDERING
- Skal der kunne indtastes andre tegn and [a-å] - såsom specieltegn? (ex [.] [,] [?] )
- Skal der være mulighed for at indtaste HTML?
-- Skal HTML valideres korrekt? Eventuelt have en editor til at lave det korrekt?
- Hvilke muligheder skal der være under indtastning? Punktopstilling? Fed? Kursiv?
Dette skal sikre du ikke får et pludseligt problem som du ikke havde fået defineret.

tirsdag den 26. august 2014

Cache filer i ASP.NET MVC (HttpModul)


Hvis du udvikler en hjemmeside, vil du også gerne have den rangerer højt. Her er performance og load tid meget vigtig, og her kan caching hjælpe dig.
Den systemudvikler der laver din side ved det sandsynligvis godt, men der er flere måder at gøre det på.

Den ene er at tilføje en ActionFilterAttribut som cacher dit indhold, men denne gælder kun på dine actions (som siger lidt sig selv), men ofte vil du også cache billeder, javascript og andet fordi du genbruger dem i top og bund af siden på flere sider hvor der er samme layout indhold som kan caches.

Det er her at man som systemudvikler vender sig imod HttpModule, som kan reagere på alle requests og tilføje caching her (og dermed fange dine statiske resourcer).

Se koden herunder:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace HttpModules
{
    public class CachingModuleFiles : IHttpModule
    {
        public void Dispose() { }

        public void Init(HttpApplication context)
        {
            context.PreSendRequestHeaders += this.SetDefaultCacheHeader;
        }

        private void SetDefaultCacheHeader(object sender, EventArgs eventArgs)
        {
            HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public);
            HttpContext.Current.Response.Cache.SetMaxAge(TimeSpan.FromSeconds(3600));
            HttpContext.Current.Response.Cache.SetExpires(DateTime.UtcNow.AddSeconds(3600));
        }
    }
}

OG HUSK AT AKTIVERE DEN I WEB.CONFIG DA DET ELLERS IKKE VIRKER!
Se her hvordan du gør:

<KODE>

Du kan her se hvordan du kan se at dine data er cachede:
<BILLEDE>

Udvikleren skal ha styr på detaljerne


Jeg er en af de udviklere der går meget op i detaljer, og at gøre det korrekt så vidt muligt.
Netop i øjeblikket kan jeg se hvor meget de små detaljer kan gøre i forskel på helhedsbilledet af en aflevering.
Det kan være små ting som at det testsite kunden skal logge ind på har sat noget op for at vise princippet som ligner korrekte data/billeder/tekster som kunne være reele i produktion, fremfor de testdata man har tildens til at altid lave og bruge.

Det kan være der ikke er fjernet en lille boks eller baggrund på et element der bruges mange steder.
Det kan være baggrundsfarven på en kasse er skrigblå, fordi man ikke har fundet den rigtige farvekode.
Det kan være der er for mange redigeringsmuligheder på billedet fordi man ikke har fået dem fjernet overalt.

Alle disse ting irriterer en som udvikler, men samtidigt er det også noget af det der gør stor forskel for kunden. Netop fordi det giver et førstegangsindtryk af noget der er meget lidt færdigt, og rodet.

Ofte kan man ved at rette sådanne små detaljer få et færdigt produkt der ser langt mere færdigt og professionelt ud, og så er den lille investering rigtigt godt givet ud fordi det ser meget bedre ud fra kundens synspunkt.

fredag den 22. august 2014

CSS selectors (advanced)


CSS selectors er et uunværligt værktøj at have, men der er rigtigt mange forskellige situationer de virker på, og man skal stykke dem sammen.

Så sent som i dag lærte jeg at der var forskel på

  1. div > a
  2. div a

fordi den første (1) er direct child selector og den anden er descendant/child selector.
Forskellen er om a ikke må ligge inde i noget andet under div, eller om den må være placeret alle steder så længe den er under div.
Situation 1 der er det kun tilladt at have a i første niveau under div, hvor i situation 2 er det tilladt alle steder bare den ligger under div.
Så følgende situation:
<div>
<span>
<a></a>
</span>
</div>

Der vil situation 1 ikke blive ændret noget, fordi din selector siger a skal være inde i div og ikke i en span, men situation 2 vil virke fordi så længe du har et a inde i en div vil selectoren virke uanset hvor langt inde den er placeret.


For mere information omkring CSS selectors se her: http://learn.shayhowe.com/advanced-html-css/complex-selectors/

torsdag den 21. august 2014

CSS3 keyframes er dejligt nemt at arbejde med

Nu er det jo heldigvis blevet meget dejligt nemt som udvikler at arbejde med grafisk frontend arbejde via CSS3.
Noget af det som CSS3 gør nemmere er at arbejde med er animationer, hvor at man bruger keyframes.
Det smarte her er at man nu som udvikler nu skal definere nogle punkter i ens animation og så vil browseren selv rendere hvordan den kommer fra forrige punkt til det næste.
Så nu kan du nemt lave en overgang fra en farve til en anden ved at lave en farve i 0% eller from, og så den anden farve i 100% eller to, og det mellemliggende vil browseren selv lave, og finde ud af hvordan den får skabt en overgang dertil. Det gør det MEGET nemmere både som C# udvikler, men også som systemudvikler.

Det samme gør sig gældende når du skal udvikle en animation med bevægelse, hvor elementer flytter sig fra punkt A til B. Du kan selv definere flere punkter den skal gå imellem, eller et start og slutpunkt.
Man kan enten lave from og to, så finder den selv ud af mellemvejen. Eller man kan også lave det i flere steps via %, som man selv bestemmer hvor langt i animationen den skal gøre dette.
Der er rigtigt mange properties man kan benytte både, font-size, width, border, border-left etc. som man kan lave nogle fine effekter ud af.

Som udvikler gør det ens arbejde MEGET nemmere at lave noget lidt mere interessant!

Der kommer et eksempel senere

tirsdag den 19. august 2014

C# udvikler ønsker mere

Jeg har igennem noget tid gået med tanken om at videreuddanne mig.
Det er noget jeg har kunne mærke jeg har haft lyst til igennem længere tid.
Dengang jeg tog min uddannelse tog jeg ingen pause imellem folkeskole og gymnasiet, eller videre derfra.
Derfor var jeg meget energisk for at komme "ud" af min uddannelse og bruge min viden til noget og udrette noget. Det har jeg så opnået nu, og jeg er kommet indenfor en gren i mit felt jeg absolut ELSKER!

Derfor ønsker jeg at videreuddanne mig fordi nu efter et par år i felten ønsker jeg at blive endnu dygtigere til det jeg laver, og kunne lave mere avancerede ting.

Til glæde for mig ønsker mit firma det samme, men det skal alt sammen tilpasses til arbejdslivet og opgaverne, samtidigt med at det passer med privatlivet.
Så overvejer om jeg skal tage en professionsbachelor, eller om jeg skal tage en "IT-diplomuddannelse".


Den ene har en del jeg gerne vil lære omkring generelt, og den anden har et niche område jeg ønsker at lære mere omkring - nemlig Umbraco.
Det er ikke helt nemt for IT-Diplomuddannelsen tages på Center for Diplomingeniøruddannelse, en del af DTU, og er lige ved siden af mit arbejde stort set.
Kender en der går der, der siger det er rigtigt godt, og har været til informationsaften og det virkede også spændende.

Som udvikler så har man en naturlig trang til at udvikle sig, og lære mere.

Jeg overvejer kraftigt at tage den fra DTU fordi det er lidt et kvalitetsstempel, og så kan jeg tage et kursus senere.

Er rigtigt glad for mit firma vil tillade mig at tage uddannelsen, som gør meget for min glæde ved at arbejde her.

Bibliotek til at tælle tal op (grafisk effekt)


I forbindelse med min udvikler side, skulle jeg have funktionalitet til at tælle et tal op.
På min forside står der hvor mange kompetencer jeg har, og ville gerne have den talte op når man kom ind.

Fandt CountUp.js, på denne side: http://inorganik.github.io/countUp.js/, og prøvede det af på jsfiddle.com.
Desværre kunne jeg ikke få det til at fungere, så jeg henvendte mig til udvikleren.dk, som kan ses her:
http://www.udvikleren.dk/forum/46150/tael-tal-op/

Det kom til at virke på min forside, på c# udvikler, og er fantastisk!
Når jeg får tid, skal det finjusteres med easing og tid, samt at den gør det forfra når man peger på kassen, men det nåede udvikleren ikke helt i går.