Om mitt PHP-ramverk ”Up MVC”

UpMVCNi som har följt min blogg vet att jag håller på att programmera ihop ett litet ramverk för PHP, och för någon månad sen döpte jag det till Up MVC. Även om syftet har varit att dela med mig av lite kunskaper jag sitter inne på till de som vill lära sig lite mer om PHP-programmering i allmänhet och MVC-ramverk i synnerhet, så har projektet blivit lite mer än så. Det har visat sig att det faktiskt har varit riktigt roligt att arbeta med helt enkelt!

Varför uppfinna hjulet igen säger många och jag kan väl hålla med om det, men jag arbetar ju inte med detta. Jag har inga krav på att vara produktiv, inga krav på att fixa buggar så fort de upptäcks. Jag gör allt detta för att jag tycker det är roligt och givande.

Just nu arbetar jag på formulärhantering, validering och ett rollbaserat rättighetssystem. Felhanteringen har jag också lagt ner en del energi på, nu fångas alla (nästan) felmeddelanden som ramverket genererar upp i en detaljerad HTML-formaterad sida som visar lite debug-information. Modulhanteringen har också blivit mer komplett. Dessutom har manualen/dokumentationen (likaså kommentarer i filerna) blivit mycket mer omfattande och beskrivande.

Ledord genom utvecklingen har varit enkelhet och lätthet  Lätt att förstå, lätt vikt (storlek på disk) och enkelt att arbeta med. Jag hoppas att det kommer att fortsätta att vara så även i fortsättningen, även om antalet filer i kärnan ökar för varje version. Kärnan ligger idag på ca 33 kB fördelat på 38 filer (de flesta av dem mallar och andra filer tillhörande formulär-hanteraren och valideringen) och det är inklusive en ganska ”verbose” fil-dokumentation (vad heter det på svenska? Ordrik?). Det får väl anses vara ganska bra?

Funktioner/funktionalitet som erbjuds är bl.a.:

  • MVC-baserat (Model, View, Controller)
  • Objektorienterat (OO) i PHP5
  • Autoload av klasser genom __autoload
  • Frontcontroller som fångar upp samtliga anrop till applikationen
  • Routing som tolkar aktuell URL utan behov av konfigurering
  • Tydlig separation mellan logik och utseende genom vy-lagret
  • PHP-baserat mallsystem (templates) som de flesta förstår sig på att använda
  • Enkel och säker databashantering via modell-lagret som använder sig av PDO
  • ”Lazy loading” av nästan alla objekt – Ingen kod körs i onödan
  • Tydliga felmeddelanden som visar vad som gått fel
  • Inga komplicerade relationer mellan objekt som försvårar för den som vill lära sig mer om systemet
  • Den medföljande dokumentationen fungerar som demo
  • Ett pågående webbshop-projekt finns som en mer avancerad demo
  • ALL dokumentation (även kommentarer i kärnan) är skriven på svenska och följer reglerna uppsatta av phpDocumentor
  • En grafisk profil! 😉

Under utveckling är:

  • HTML-formulärhantering
  • Validering av data/formulärdata
  • Roll-baserade rättigheter (RBAC – Role Based Access Control)
  • Implementering av Gettext internationalisering (i18n) genom tredjeparts-skript

Det vill säga mycket av den funktionalitet man förväntar sig av ett större ramverk, men så litet att det går fort att förstå och börja använda! Jag hoppas att ni som kan vara intresserade att lära mer om PHP-programmering och ramverk ger det en seriös titt.

NYTT: Up MVC finns nu för nerladdning på GitHub på denna länken:

https://github.com/saurid/UpMvc2

Nedladdning av kod (med medföljande manual) och möjlighet till diskussion finns på php-portalen där jag också är moderator:

http://www.phpportalen.net/viewtopic.php?t=116968

Läs och lär!

Minimerat WordPress-plugins, validerat och sökmotoroptimerat (SEO)

Jag håller fortfarande på att lära mig mer om WordPress som CMS (Content Management System) och som bloggverktyg. Jag är dock väl bevandrad i PHP, så det har inte varit något större problem att sätta mig in i systemet. Men efter att ett antal praktiska plugins installerats, så var sidan inte riktigt som jag förväntat och hoppats på.

WordPress-plugins och prestanda

Det är ingen hemlighet att många plugins kan göra att en WordPress-installation blir långsam och slö. Det är ganska naturligt med tanke på att de flesta använder många hooks för att utöka funktionaliteten i standardsystemet. Vill man dessutom använda widgets från installerade plugins, så tar det ännu lite mer kräm från webservern.

waljefors.se ligger dessutom på ett webbhotell med en delad servermiljö, så det var uppenbart att det gällde att optimera prestandan ordentligt. Även med diverse testade cache-plugins (ett i taget givetvis) så förblev sidan långsam att ladda.

Av ren lathet (nåja) så använder jag plugins som jag lätt skulle kunna implementera direkt i mitt tema istället. Ett exempel är Google translate. Pluginet jag använde var konstigt nog ganska tungt på sidan trots sin enkelhet, troligtvis beroende av att koden inte validerade vilket gjorde att sidan rendrerades långsammare.

Kategori och Arkiv slog jag samman till en widget, vilket faktiskt gav en liten prestandavinst.

Jag har för tillfället också tagit bort Facebook-gilla-knapparna. De är gör helt enkelt sidan för långsam. Förhoppningsvis hittar jag snart en bättre lösning.

Jag använde tidigare ett statistik-plugin för att följa min besöksstatistik. Det var riktigt snyggt och gav mycket vettig information. Men Google kan ge nästan lika bra statistik och jag slipper hosta det på min egen server. Det var dags att byta bort.

Av de fem plugins jag har kvar aktiva nu, så är det bara tre som används för sidvisningen, de sista två används bara i admin. Jag använder inte längre något cache-plugin.

Validering av HTML och CSS

Pluginet för Google translate hade ingen validerad HTML. Det stack ordentligt i mina ögon. Dessutom gjorde det, som tidigare nämnt sidan mer långsam. Jag designade istället om och lade samma widget-funktionalitet direkt i temat för sidan. Det validerar, rendrerar snabbare och ser bättre ut!

Jag har också fixat en hel del andra små valideringsbuggar, så de flesta sidorna borde validera alldeles utmärkt när det gäller HTML. Tyvärr kommer min CSS inte validera eftersom min bild- och kodvisning använder javascript-bibliotek med CSS som jag inte kan påverka.

Enkelhet ledordet i de många små designändringarna

Sidan har tidigare varit blogglös och det visade sig att den designen helt enkelt inte passade riktigt bra med den mängden data som behövs på en liten plats i en blogg. Jag har förenklat och skapat lite mer luft runt överskrifter som den vänstra spalten. Jag upplever designen som mer luftig och lättläst nu. Mindre avgränsande streck och överskrifter.

Jag har också lagt till en bättre möjlighet att gå mellan sida till sida eller från inlägg till inlägg genom länkar i topp och botten av sidan. Bättre användarvänlighet och förhoppningsvis utan för mycket extra klutter i designen.

Sökmotoroptimering (SEO)

Jag har gått igenom överskrifter och beskrivningar så att innehållet kan indexeras lättare nu. Många sidor är ganska grafiktunga och har inte så väldigt mycket text och det gillar inte alltid sökmotorerna, så där är det extra viktigt hur man lägger upp den lilla informationen som Google och andra sökmotorer kan använda.

Jag är inget proffs på SEO ännu, men jag lär mig mer och mer och börjar närma mig mina mål sakta men säkert.

Ingen ordning i leden hos W3C som sätter standarden för nya HTML5

Vi som har varit med ett tag minns ”kriget” mellan Netscape Navigator och Internet Explorer. Vi hade två stora webbläsare som tolkade HTML-uppmärkningen på våra hemsidor väldigt olika. Trots att World Wide Web Consortium (eller W3C) hade funnits sedan 1994 och försökte styra upp i standarden, så verkade det inte fungera något vidare.

De senaste åren har det sett mycket bättre ut. De senaste versionerna av de stora webbläsarna, Internet Explorer, Mozilla Firefox, Google Chrome, Opera och Safari tolkar nu HTML-kod relativt lika. Men det är fortfarande många som använder Internet Explorer 6, trots att den är nästan 10 år gammal.

Det här är ett stort problem för utvecklare som har varit tvungna att antingen undvika viss funktionalitet, eller att gå omvägar genom ful-hack eller villkor som bara vissa läsare tolkar.

World Wide Web Consortium (W3C), HTML5 och XHTML2

HTML5Utvecklingen av HTML5 påbörjades egentligen av Web Hypertext Application Technology Working Group (WHATWG), men sedan släppte de över ansvaret till W3C.

Även om det ett tag sett ganska bra ut, så har jag länge haft känslan av att W3C mest består av ett stort smörgårdsbord av kaloriladdad byråkrati. De har flera standarder under utveckling samtidigt, det tar en väldig tid och ingen av dem verkar liksom bli klara. De gamla verkar inte heller riktigt avslutade.

Frågan är om någon fortfarande lyssnar på dem? Det är inte de som utvecklar standarderna, och webbläsarna följer – Det är webbläsarna som utvecklar funktionalitet som sedan W3C (om man skriker högt) tar med i standarderna. Tidigare fanns ett behov att styra upp de två stora läsarna och få dem att följa samma regler. Efter ett tags ordning sjönk förtroendet för W3C och det ser återigen annorlunda ut.

Club Ajax om turerna kring HTML5

För ett par dagar sedan publicerade Club Ajax ett föredrag om hur de upplever W3C och utvecklingen av HTML. Ett tankvärt inlägg i debatten för oss www-nördar som inte har bättre saker för oss (eller vill slippa att programmera hemsidor för fem olika webbläsare).

Ni hittar både video och presentationsmaterialet nedan:

Club Ajax, The fight over HTML5

http://clubajax.org/videos/the-fight-over-html5/

Vad händer nu?

Jag kan inte undgå att tänka att vi snart kan vara tillbaka till eländet när olika webbläsare utvecklade funktionalitet på olika håll, utan att de andra följer efter. Låt oss slippa det tack! En fördel är att det finns ett större samarbete mellan utvecklare av olika läsare idag.

Men hur var det nu? Kan vi börja använda HTML5, eller jag menar HTML, ännu?!

Tabell-layouter, inline CSS och ”divitis”

De flesta som pysslar med webbutveckling, vare sig det är på professionell nivå eller amatörnivå kan nog hålla med mig om att tabeller och inline CSS inte bör användas när en webblayout skapas. Det är inte heller bra att använda överdrivet många div-element, sk. ”divitis” för att skapa en layout. Hela tanken ju att använda den uppmärkning som är nödvändig först och främst och sedan gruppera med några div.

Men ibland går det riktigt riktigt snett. Jag snubblade över en länk där jag behövde titta lite på källkoden för att kunna svara riktigt på en fråga på ett forum.

http://www.yebhi.com , ett indiskt klädföretag på nätet.

webbplatslayout gone bad

Det där var inte vackert. Den som utvecklat sidan borde faktiskt skämmas lite. 😉