30 juni 2012

Jag börjar lära mig att programmera

Jag är jättedålig på att skriva här regelbundet. Tanken var att jag skulle dela med mig med min kunskap inom PHP och mina projekt som webbutvecklare. Anledningen till att jag inte skrivit något är helt enkelt för att det inte har hänt någon och jag har inte lärt mig speciellt mycket.

Jag hade helt enkelt tappat lusten. Jag träffade en ny kompis i september, han presenterade mig för en man med eget företag som behövde hjälp med sin webbsida. Jag sa att jag fixar det snart, men tiden dröjde. Det kändes som att jag hade mycket annat som kändes mer angeläget och som jag prioriterades. När jag väl började titta på det hittade jag inte rätt filer på FTP:n och hade ingen klar syn på vad jag skulle göra (snygga till designen). Jag har fortfarande inte tagit tag i det, fast det gått mer än ett halvår... För att det jag ska ha motivation till att börja med ett projekt måste det vara något jag själv brinner för. Jag behöver lära mig att säga nej direkt istället för att säga ja och sen inte hålla vad jag lovar.

Jag hade också ett eget projekt igång i vintras där jag gjorde ett spel på Facebook. Det blev klart så långt att jag har spelat och haft roligt med de flera gånger med kompisar, men jag har inte orkat snygga till det så att det är något som kan publiceras, göra reklam för på Facebook eller säljas. Jag väntar egentligen på att en kompis från Uppsala som varit med och kommit med idéer kan träffas så att jag får respons och vi kan fortsätta utveckla applikationen tillsammans.

Den allra mesta programmering jag har gjort senaste året har varit på jobbet. Jag har försökt skriva om alla mina applikationer så att de blir objektorienterade, men det känns som det mest blir mer rörigt och komplext än innan i koden. Ibland är det bra, som att jag har en inställningsfil där all styrning för den har jag gjort i en PHP-klass. För att lägga till en ny inställning lägger jag nu bara till en ny rad i PHP-klassen. Men jag har inte haft någon klar syn på hur koden bör se ut eller vilket paradigm (tankesätt) jag ska använda.

En stor utmaning jag har för alla mina webbprojekt är att anpassa sidorna för en mobiltelefon. Jag blir ofta tillfrågad om att göra appar av applikationerna. Jag är mer inne på att göra en webbanpassad version av applikationerna. På så sätt behöver inte användarna ladda hem en app för att det ska fungera, det blir lättare att komma åt den och få det att fungera likadant för olika mobiltelefoner. Sen tror jag att jag kan återanvända mer kod jämfört med om jag ska börja utveckla appar. För att få ett snyggt säkert gränssnitt till mobilanpassade webbsidor började jag titta på några ramverk. Sencha var det första jag testade. Jag fastnade ganska snart och fick tips av en kompis på Facebook att testa KendoUI. Det var lite bättre, men jag hade fortfarande problem eftersom jag inte jobbat med MVC-paradigmet tidigare. MVC står för Model, View och Controller och tanken är att tankesättet underlättar att hålla isär design och kod.

Under sommaren har jag fått massor programmeringsprojekt i jobbet jag ska:
  • Göra en mobilanpassad version av min webbapplikation för vikarier
  • Utveckla vidare ett system där man kan skriva ner personalanteckningar
  • Skapa ett nytt webbaserat ärendehanteringssystem som vi är i stort behov av på jobbet nu
  • Vi ska vidareutveckla min webbapplikation där chefer har ett fönster mot LAS-informationen från webbben av anledningenen att det delvis är nya LAS-regler som börjar gälla i höst.
  • Dessutom sa chefen här om dagen att vi ska börja kolla på koden för resten av systemet så att jag kan hjälpa honom med det.
Vanligtvis på företag behövs det ett helt utvecklingsteam för att bara ta hand om de tre första punkterna. Nu är jag ensam på företaget som heltidsanställd utvecklare med programmeringskompetens. Chefen utvecklar också, men han är ju chef så har inte så mycket tid att programmera och utveckla, även om han hinner med förvånansvärt mycket utveckling, buggfixar etc på helger.

Nu har jag en kollega till min hjälp, trots att han inte programmerar själv har han många synpunkter. Han brukar sitta bredvid mig ibland och först gäspa kraftigt när jag börjar gå igenom koden. Sen babblar han massa synpunkter på saker jag ska göra om och böra bättre. Och jag tänker nej nej, mitt sätt är bättre det där går inte att göra. Fast sen efter att han har babblat en stund till inser jag ofta att, jo han har nog en poäng det kan nog bli bra som han föreslår ändå. Bara att få direkt feedback i mitt arbete är väldigt viktigt. Man blir lätt hemmablind som programmerare och då är det bra att ha någon med en ny synvinkel.

Efter att ha tillfälligt fastnad på två av projekten ovan satt jag mig och började med ett helt nytt ärendehanteringssystem. Vi har ett ärendehanteringssystem på jobbet, men Camilla som utvecklat det har slutat och därför kan det inte utvecklas vidare. Bara en så enkel sak som att tilldela ärenden till en anställd som började efter Camilla slutade är inte möjligt utan att jag sätter mig in i den koden. Och då är frågan om det nästan inte går snabbare att börja med ett helt nytt system, möjligtvis med en del inspiration från Camillas system. Fördelen med att göra ett nytt webbaserat system är också att vi kan få nya funktioner som mina kollegor frågat efter. T.ex. att kunderna själva skickar in ärenden direkt i systemet samt att de online kan följa upp status på ärende istället för att vara tvungna att ringa oss.

Vi har en konsult som ibland rycker in och jobbar hos oss och då sitter hela dagen och hjälper mig vidareutveckla systemen. De dagarna brukar bli väldigt effektiva och jag får viktiga tips för att programmera vidare. Senast jag kallade in honom fixade vi min SMS-tjänst som har krånglat en längre tid. Han tipsade mig också om ett PHP-ramverk som heter Codeigniter som bistår med mycket hjälp för programmering. Han sa att det skulle bli snygg kod och gå väldigt snabbt att programmera med hjälp av CodeIgniter.

Så när jag skulle börja med det nya projektet Ärendehantering så bestämde jag mig att från grunden göra det med CodeIgniter. Jag är van vid att programmera helt från grunden. Nån gång har jag använde en färdig kalenderfunktion som är ett färdigt script, men annars skriver jag mestadels proceduell PHP-programmering blandad med HTML och JavaScript där jag skriver mina egna datorbasfrågor direkt i samma fil. Först när jag satt med CodeIgniter svor jag för att det inte alls gick speciellt snabbt. Men efter att ha suttit med det en vecka koncentrerad arbetstid nu börjar jag tycka om det. Koden blir snyggare, det blir mycket säkrare, funktionerna blir mer standardmässiga och lättare att anpassa och jag får hjälp med många nya funktioner som jag inte ens vet hur man gör i PHP från grunden.

Koden delas upp i tre delar enligt nämnda MVC-modell. Model, View och Controller (fråga mig inte vad det heter på svenska, det har jag inte lärt mig än).
  • View är det användaren ser. De andra klasserna ger en färdig array med all data, alltså alla variabler, som sidan behöver visa på sidan. Därför ska den inte behöva innehålla någon intelligens, script eller databasanrop utan bara hur HTML-sidan ska se ut.
  • Controller är själva motorn i applikationen. Här finns alla beräkningar och anrop till funktioner om när något behöver göras på sidan.
  • Model är en databasmodell som innehåller alla anrop till databasen. Snyggt hämtar ut resultat till en array som sedan kan hanteras av controllern.
Jag börjar få ett grepp om paradigmet men är inte helt säker på att jag ens har rätt i min beskrivning ovan eller vilket som är det bästa sättet att lägga upp funktionerna i controllern. Men det kommer. Jag har lärt mig mycket bara de senaste dagarna och tycker att det är roligt att programmera just nu.

Ett problem jag har haft med flera av mina hemsidor är att de blir bombaderade med spam, att inloggningen inte är tillräckligt säker och smidig och en sida har t o m blivit hackad. CodeIgniter innehåller färdiga funktioner för att göra hemsidan säkert. Det finns automatiska funktioner som städar alla inparamterar som annars kan användas för att komma åt databasen eller mata skräp till sidan. Det finns en klass som håller reda på sessioner, något jag tycker är lite krångligt på de hemsidor jag skapat som nu innehåller inloggningsfunktioner. Just inloggningen var den första stora funktionen där jag verkligen såg styrkan i codeIgniter. Jag lärde mig genom att se en utbildningsfilm på en blogg här: http://net.tutsplus.com/sessions/codeigniter-from-scratch/ Det tog cirka en vecka, men efter flertalet steg-för-steg-guider, googlande och just den videon började jag få koll lite på det och mixtra med controllern själv istället för att helt kopiera guiderna.Ytterligare ett bevis till mig själv att om jag bara har tålamod och orkar sätta mig in i något så klarar jag av det ganska bra.

En sak som jag fortfarande inte vet hur man gör i PHP är att skriva om URLs så att de blir snyggare. T.ex. länken till det här blogginlägget. Förut skrev jag blogspot.se/blogid=24263616. Men Blogger gör det mycket snyggare genom att använda min egen rubrik så att URL:en blir fredrikolsson.blogspot.se/2012/06/jag-borjar-lara-mig-att-programmera.html. Codeigniter gör det automatiskt för mig så jag behöver inte tänka på hur man egentligen gör i PHP.

Förutom CodeIgniter har jag de senaste månaderna börjat jobba med jQuery och JSON. Det första är ett massivt JavaScript-bibliotek som underlättar bl.a. AJAX-anrop. JSON är en standard för att skicka data mellan script/webbsidor/servrar/moduler på ett snyggt sätt, nämligen i en kompakt standardiserad sträng. JSON är som XML fast mer kortfattat. Kanske att min kommunikation med de andra modulerna inom Winlas också kunde skickas med JSON framöver, istället som semikolon-separerade strängar, men vi får se. Teknikerna har funnits gratis tillgängliga för programmerare i flera år, men jag har varit ganska inskränkt i mitt och inte upptäckt dem förrän nu. Därför känns det bra att jag nu tar steget och börjar lära mig att programmera lite mer som andra professionella webbutvecklare nu vanligtvis gör.

21 juni 2012

EM 2012

Spelledig dag från fotbolls-EM idag. Då tänkte jag passa på att blogga lite om mästerskapet. Jag har sett alla matcher hittills, några två gånger då min bror ville ha dem inspelade och jag såg dem igen med honom. Det här är nog fel forum för att blogga fotboll, men då slipper jag att få någon kritik från de som inte håller med mig...

Jag är nöjd med mästerskapet så här långt, även fast Sverige är utslagna. Sverige spelade sin sista match igår och gick ur turneringen med flaggan i topp. Alla grupper har bjudit på dramatik, mål i samtliga matcher och spänning in till slutet. Bara Irland visade att de inte riktigt höll måttet, de blev utspelade egentligen alla matcher.

Sedan VM 98 brukar skriva ner världslag, med de spelare som utmärkt sig mest hittills. Då jag inte längre använder penna och papper skriver jag ner dem här. Jag tänkte dessutom ge plats åt motiveringar för var och en av spelarna. Jag brukar ta ut tre lag; ett med de allra största stjärnorna, ett med nya stjärnskott och spelare som överraskat och ett med de 11 som varit den största besvikelsen/sämst.

EM:s bästa spelare
Målvakt: Gianluigi Buffon, Italien. Hela Italien imponerade i gruppsspelet. Buffon står som vanligt som en säker sista utpost.
Högerback: Mathieu Debuchy, Frankrike. Ingen högerback har imponerat jättemycket men Debuchy är en klasspelare som gjorde bra insatser mot England och Ukraina.
Mittback: Olof Mellberg, Sverige. Kung Olof avslutar landslagskarriären med två riktigt riktigt bra matcher. 3 mål, snygga brytningar. Hur ska vi klara oss utan honom framöver? 
Mittback Mats Hummels, Tyskland. Liten överraskning i tyska startelvan, men har gjort en jättesäsong i Dortmund. Bryt- och passningssäker och var t o m nära att göra mål mot Holland.
Vänsterback: Fabio Coentrao, Portugal. Modern ytterback (som man sa för 15 år sedan) som följer med upp i anfallen men även klarar försvarsspelet på sin kant.
Defensiv mittfältare: Andrea Pirlo, Italien. I bra form efter ligaguld med Italien. Slår gudomliga passningar och för det Italienska spelet som har sett bättre ut än på länge.
Defensiv mittfältare: Luka Modric, Kroatien. Höll nästan på egen hand på att slå ut Spanien i sista omgången. Kvalitet i passningar och bollkontroll varje gång han får bollen.
Vänsterytter: Memut Özil, Tyskland. Tysklands spelregissör. Blir kanske för många spelare som vill föra spelet i den här uppställningen. Men Özil har varit för bra för att jag ska vilja lämna honom utanför. 
Offensiv mittfältare: Xavi, Hernandez, Spanien.
 Många säger att Cristiano Ronaldo är världens näst bästa spelare efter Messi de senaste åren. Men med tanke på Barcelonas framgårngar och Xavis centrala roll i laget så hävdar jag att Xavi nog varit snäppet bättre totalt sett. I EM har han varit på samma höga nivå som de senaste 15 åren.
Högerytter: Andres Iniesta, Spanien. Världsmästarnas allra bästa spelare hittills i EM. Dribblar ofta flera spelare när han har bollen, svår att ta bollen från. 
Anfallare: Zlatan Ibrahimovic, Sverige. Stark och dominant. Gör drömmål i varje match. Vad mer kan man begära?

EM:s Största överraskningar
Målvakt: Przemyslaw Tyton, Polen. Kommer in mot Grekland efter en utvisning på ordinarie målvakten Szczesny från Arsenal och börjar med att rädda straff. Gör det så bra mot Ryssland att han får fortsatt förtroende i sista matchen.
Högerback: Gebre Sellassi, Tjeckien. Offensiv, spännande ytterback. Första färgade spelaren i Tjeckiens landslag!
Mittback 1: Gordon Schildenfield, Kroatien. Petade rutinerade namn som Simonic och gör det bra. Höll kvar Kroaterna i matchen mot Spanien.  
Mittback 2: Kyrigakos Papadopoulos, Grekland. Ett stort löfte. Kom in i första matchen pga skada och har varit Greklands bästa spelare hittills
Vänsterback: Simon Poulsen, Danmark. Var en besvikelse i VM för två år sedan efter bl.a. ett självmål. Mycket bättre i år då hela Danmark har överraskat positivt. Säger mycket om deras spel att vänsterbacken är med i anfallen mot lag som Holland och Portugal. 
Defensiv mittfältare: Petr Jiracek, Tjeckien. Hårfagre högeryttern kan även spela defensiv mittfältare. Gjorde ett klassmål mot Polen som blev avgörande för Tjeckiens avancemang.
Defensiv mittfältare: WIlliam Kvist, Danmark. Höll tillsammans med Zimling koll på alla Hollands stjärnor. Gjorde också en jättematch mot Portugal.
Högerytter: Michael Krohn-Dehli, Danmark. När alla pratade om Bendter och Eriksen offensivt var Krohn-Dehli Danmarks bästa spelare. Avgör mot Holland hotar tillsammans med Bendtner både Portugal och Tyskland. Danmark ska vara väldigt nöjda med sitt mästerskap.
Offensiv mittfältare: Vaclav Pilar,Tjeckien. Blev bättre och bättre för varje match. I slutet mot Polen såg Pilar ut att vara en spelare i världsklass. Kul att Tjeckien har en ny lovande generation på gång efter att den gyllene generationen med Nedved, Poborsky och Ujfalusi.
Vänsterytter: Alan Dzagoev, Ryssland. En av de allra mest spännande spelarna i hela EM. Var grymt bra mot Tjeckien och även bästa ryska spelare mot Polen och Grekland även när inte resten av laget spelade så bra. Synd att vi inte får se mer av Dzagoev i EM.
Anfallare: Mario Mandzukic, Kroatien. Sylvass mot både Irland och Italien. På vippen att hans mål ledde till att Kroatien till en skräll och slå ut någon av de förra världsmästarna.

EM:s Sämsta spelare
Målvakt: 
Shay Given, Irland. Har lite otur mot Kroatien och är egentligen en världsmålvakt. Men Given kan inte vara nöjd med den här turneringen. Släppte in överlägset flest mål.
Högerback: 
Gregory Van Der Wiel, Holland. Inför VM för två år sedan ett stort löfte och sas att bli en av världens bästa högerbackar. Gör ingen bra match mot varken Danmark, Portugal eller Tyskland  och har för mycket att göra med skickligare offensiva motståndare för att kunna följa med upp i anfallen. 
Mittback 1: Sergei Ignashevich, Ryssland. Laget spelade drömfotboll i två matcher men ett gigantiskt misstag av Ignashevich kostar dem slutspelsplatsen.
Mittback 2: Ron Vlaar, Holland. Holland har gott om bra offensiva spelare. Men försvaret höll inte i EMs bästa grupp. När Matijsen blev skadad var man tvungen att spela Vlaar i första matchen. Såg även osäker ut mot Portugal.
Vänsterback: Stephen Ward. Gjorde bort sig rejält mot Kroatien i en omdiskuterad offiside-situation då det visade sig att få av Irländarna har tekniken som krävs på den här nivån. Gick ännu sämre mot Spanien.
Defensiv mittfältare: Keith Andrews, Irland. Spelar på toppen av sin förmåga men räcker ändå inte till. Syns tydlig klasskillnad när han ställs mot Modric. Hela laget blir förudmjukade mot Spanien då t o m domaren tacklar ner Andrews. Rött kort mot Italien. Andrews räckte helt enkelt inte till i det här mästerskapet.
Defensiv mittfältare. Rasmus Elm, Sverige. Gör alldeles för många dåliga felpass mot Ukraina och det visas en klar skillnad när Anders Svensson ersätter. Gör sedan en bra match som vänsterytter mot England, men som defensiv mittfältare har inte Elm rutinen än för att axla rollen än.
Högerytter: Arjen Robben, Holland. En av spelarna i toppfotbollen jag tycker minst om. Har spelat i Chelsea, gnäller ständigt på domaren och filmar hela tiden. Dessutom gör hans frisyr att han ser 20 år äldre ut än vad han egentligen är. Robben försöker skapa anfall, men det hjälper inte att han aldrig passar utan alltid skär in i banan och skjuter över. Blev utbytt i slutet mot Portugal, ingen kul avslutning för Hollands största stjärna.
Offensiv mittfältare: Christian Eriksen, Danmark. Haussad inför EM, helt osynlig trots att resten av Danmark gör en jättebra insats i samtliga matcher.
Vänsterytter: Ola Toivonen, Sverige. Klarade inte den rollen som vänstermittfältare alls mot Ukraina. Missar i hemjobbet vid Ukrainas första mål men lyckas inte heller vara med i offensiven över huvud taget. Bättre som anfallare i sista matchen, men bränner klara chanser.
Anfallare: Aleksandr Kershakov, Ryssland. En av flera anfallare som är viktiga för lagets spel med sin targetförmåga att hålla i bollen. Men som anfallare måste man kunna göra mål också.