Hemsideoptimering

Den hemsidan jag är med och utvecklar på jobbet har en mängd olika javascript-filer beroende på vilken del av sidan de bidrar med funktionalitet till. Eftersom vi är ganska många som jobbar med sidan utvecklar vi våra javascript separat i en egen fil och lägger sedan till den i head-taggen. Detta har fått mig att fundera över följande

  1. Om två (eller fler) användare använder sig utav samma id-attribut för att binda ett event vid användet av jQuery så kommer det innebära ett race-condition, där den funktion som ”är definierad först” kommer att exekveras. I alla fall är det min gissning. En enkel lösning är ju att skapa funktioner som anropas vid respektive händelse i till exempel en div-tag och undvika exponering av id och klasser på detta vis.
  2. Head-taggen kommer innehålla en massa filer vilka måste laddas även fast de inte används. Å andra sidan kanske dessa cachas och klienten behöver inte ladda ner dessa varje gång. Alternativt är att ladda javascriptfilerna on demand, alltså när den vy som använder sig av filen efterfrågas.

Anledningen till min fundering var, som oftast för programmerare: prestanda. Deta hör troligtvis till kategorin premature optimization, vilket jag vet är en fallgrop. Prestanda förbättring fås genom testning och profilering, testning och profilering och test….

Det gäller att hitta var applikationen lägger krutet, optimera om möjligt och sedan fortsätta. Detta kan dock drivas in absurdum men så klart finns det gränser på vad som är möjligt att optimera i koden (tror han ja säger någon säkert).

 

mySQL Workbench

Igår på jobbet stötte jag på ett problem, mer en tankeställare kanske, när jag skulle designa en tabell för att hantera regler för ett specifikt ändamål. Denna regel är (i skrivande stund) unikt bestämd av värdet i fyra databasfält och att sätta dem som primary keys (primärnyckel?) var inte aktuellt då det kunde generera en primary key sammansättning på uppemot 800 tecken och alla föremål för ändring om verksamheten ändras. Just i detta fall kan det hända ganska frekvent.

Jag använder mySQL workbench vilket är ett utmärkt verktyg för att på ett grafisk sätt hantera databaser och om antalet tabeller blir stort är det lätt att skapa sig en överblick. Fram för allt möjligheten att gå från databaskod till grafiska tabeller där restriktionerna (primary och foreign key constraints) är visualiserade beroende på dess karaktär (kan inte utveckla detta mer eftersom jag inte vet exakt vilka dessa är :).

Hur som helst i mySQL workbench hittade jag ingen vy för att skapa min lösning, att definiera en unik restriktion för flera kolumner/fält och ha en artificiellnyckel som primary key. Så jag skrev harangen i kommandoraden och löste problemet. Efter kollade jag hur min restriktion såg ut i workbench och det var inte helt intuitivt hur det skulle sättas, enligt min åsikt i alla fall.

Illustration från mySQL Workbench

Illustration från mySQL Workbench om flerkolumn unik restriktion

Jag skrev kommandot [code] ALTER TABLE x ADD UNIQUE (col1, col2, col3, col4) [/code] och detta gav som bilden ovan visar.

Index finns till för prestandaökningen vid uppslagning och flerkolumn unik restriktionen är utav datakaraktär

Internetentreprenörer

När Internet blev kommersiellt insåg några att där fanns pengar att tjäna medan några ansåg att Internet bara var en fluga; som Foppatofflor eller spikmattor.

Idag kan vi alla vara överrens om vilken gruppering som hade fel… Internet är idag hemplats för några av världens största företag och har vid senaste notering över två miljarder användare världen över. Ett par tjänar pengar genom annonsering, andra säljer produkter av olika slag och några förmedlar tjänster och kan med hjälp av Internet nå en bred massa.

Men för att kunna sälja tjänster, måste man synas och det bästa sättet att synas är en när en potentiell kund söker efter tjänster du förmedlar: hittar just dig! Det är här sökmotoroptimering kommer in i bilden och det handlar om att skapa en sida på ett sådant sätt att den hamnar högt upp vid sökningar du vill ”ha”. Sökmotorer har applikationer som söker igenom hemsidor och algoritmer som bedömer hur många poäng den bör ha givet ett visst sökord. Denna bransch är en sådanom vuxit fram i och med med Internets spridning och sysselsätter många och det verkar som att jobbmöjligheterna är stora.

Antingen vill du ha besökare för att de

  1. Ska köpa något från din sida
  2. Besöka den för öka att reklamintäkter
  3. Skapa en starkt sida som kan lyfta andra sidor via dess länkkraft

Jag är på något sätt ingen expert, men finner området intressant och i mångt och mycket handlar det om att skriva texter som är sådan att de finnes lättlästa och matnyttiga för en människa att läsa. För den intressanta finns det många forum och seforum.se är en av många!

Brödsmulor i CodeIgniter

Hade tänkt länge på att skriva en brödsmule-hjälpare till ett projekt jag arbetar med på jobbet. Projektet skrivs i PHP och använder sig utan ramverket CodeIgniter och det fanns ett par brödsmulor-program klara men jag behövde bara något väldigt simpelt.

Med inspiration från denna artikel tog jag tag i saken. Efter 40 minuter bussfärd till jobbet och 40 minuter bussfärd hem var jag i princip färdig.

Skrev en klass Breadcrumbs.php som initieras antingen via manuell laddning eller autoladdning i konfigurationsfilen i CodeIgniter. Denna klass tar antingen indata manuellt via en metod append eller, om inget är specificerat via append, URI-segmenten.

Till exempel www.example.com/datortillbehor/tangentbord-och-moss/microsoft/intelli-mouse skulle generare Example > Datortillbehör > Tangentbord och möss > Microsoft > Intelli mouse

Den är inte specielllt noggrant testad ej heller särskilt mångsidig i att den kan hantera partiella översättning eller översättning som å,ä,ö i exemplet ovan. Vid behov kan den dock utvecklas relativt enkelt, hoppas jag..

Tornado webserver och REST

Igår var det dags att sätta sig ner och sätta sig in i webserver Tornado som är skriven i Python. Tornado är en event-baserad, asynkron webserver som klarar av väldigt många anrop, en bit över 8000 per sekund om den är rätt konfigurerad och i en miljö som klarar av att distribuera resurserna. Den utvecklades från början av FriendFeed som senare köptes av Facebook och de vidarutvecklar den fortfarande.

Hur som helst så var det dags för mig att börja på ett skolprojekt och efter en liten stunds läsande av online-resurser och Pascals kod så hade jag fått kläm på det elementära för att skriva färdigt den back-end API med ett REST interface.

I och med detta, för att testa POST/PUT, fick jag för första gången användning av cURL vilket visade sig vara ett välidgt smidigt sätt att testa så att datan på serversidan blev ordentligt omhändertagen.

Så fort API är färdigt är det dags att implementera den del som ska genomföra klassificiering av datan via olika maskininlärningsmetoder. Här kommer NLTK-paketet väl till användningen då det håller allt möjligt inom maskininlärning: sannolikhetsalgorithmer, gömda markovmodeller, beslutsträd, kluster-algorithmer med mera. Gäller bara att hitta det som krävs, plöja igenom API och sedan testa, testa och testa – det vanligaste inom programmering (och kanske den tråkigaste delen enligt många).

Matlagning

Dags att inviga den nya traktörpannan inhandlad på IKEA nyligen! Premiärmaten för den blir köttfärsås innehållande tomatpuré, passerade tomater, vitlök och en massa gullök för det är min favorit lök.

Snart är den färdig och då blir det att avnjuta den på den inglasade balkongen med hemkomna Sofia som varit i stallet! Blir riktigt varmt och skönt på balkongen, men skulle nästan kunna göra om den till ett giganstiskt självuppvärmande akvarium med fiskar i!