Det finns några saker som jag aldrig lär mig utantill. Sånt som jag måste Googla.  Varje. Gång. Att öppna upp Mysql för remote-anslutningar under utvecklingsperioden är en sådan sak. Det skall nämnas redan nu att en frisk människa egentligen inte bör göra detta men under utvecklingsperioder kan det vara mycket skönt att köra med t.ex. Webyog istället för PhpMyAdmin.

Då är det några steg man måste gå igenom. Jag hamnar alltid på den här sidan när jag Googlar. Jag funderar på att göra ett bokmärke av den.

http://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html


För en tid sedan snubblade jag över YQL när jag hittade den här bloggposten som visar hur man med hjälpa pseudo-SQL kan göra uppslagningar över alla OS-medaljer genom tiderna. Jag blev lite nyfiken och började gräva lite i YQL som detta exempel är baserat på. Det är en rätt intressant tjänst från Yahoo! som bygger på att man utifrån en strukturerad datakälla som t.ex. ett CSV-dokument kan göra SQL-uppslagningar och få svaret i form av XML eller JSON. Eftersom YQL cache’ar datakällan så kan man om jag förstått saken rätt använda detta för storskalig drift. Vid drift använder man en specifik url för att plocka ut svaret från uppslagningarna men under utveckling kan man arbeta i deras konsoll för att testa datan. Prova själv här: http://developer.yahoo.com/yql/console

Den här sliden från Slideshare.net gör ett ganska bra jobb av att beskriva vad det handlar om.

Vid sidan av att själv använda CSV-filer som datakälla kan man använda något av alla de API’er som exponerar sig själv mot YQL som t.ex. Yahoos egna tjänst Flickr. Där kan man t.ex. söka upp bilder från en viss användare med följande exempel:

select id from flickr.photos.search(10) where text=’donkey’ and license=4

Eller hämta headlines från CNN och deras webbplats med följande uppslag:

select * from html where xpath=”//a” and url=”http://cnn.com”

Rätt intressant tjänst på det hela taget. För att testa tjänsten lite mer testade jag att lägga den här listan över Sveriges kommuner i en egen CSV-fil och göra lite uppslagningar mot den. Efter lite trixande fick jag till det. Exemplet nedan plockar ut en lista över alla kommuner med under 10 000 invånare.

http://developer.yahoo.com/yql/console/#h=select%20*%20from%20csv%20where%20url%3D%22http%3A//utveckling.swedmedia.se/extra/yql/kommunlista.csv%22%20AND%20col3%20%3C%2010000

Man kan ju fundera över om detta har någon riktigt användning i den riktiga världen men jag tänker att så länge jag själv vill göra komplexa uppslagningar ur t.ex. ett exceldokument kan jag enkelt göra detta genom att exportera dokumentet till CSV och använda konsollen på YQL.

Någon som har erfarenhet av att använda YQL i den riktiga världen?


När jag för några år sedan började jobba med Dagen.se hade vi många långa och infekterade diskussioner om vad som faktiskt var ”unika besökare”. Varje verktyg som analyserade loggarna från IIS sa en sak, TS-statistikverktyg en annan och Google Analytics en tredje. Även begreppen unika besök, unika besökare och om de skulle räknas per dag eller vecka var mycket förvirrat. Det blev riktigt rörigt när olika personer började slänga sig med olika siffror i marknadsföring, styrelsemöten etc. Till slut har dock branschen landat i att vad man räknar är unika besökare per vecka. Alltså hur många olika personer besöker min webb under en och samma vecka. Detta mäts med olika klientbaserade verktyg som bara räknar faktiska mänskliga besökare, verktyg som duckar för Google-botar och andra ting.

Det är väldigt skönt att det råder någon typ av branschstandard i detta och att de flesta är överens. Därför var det märkligt när jag började gräva i veckan efter en allmän uppfattning om vad som är samtidiga användare. Ni vet den där siffran som brukar stå på vissa forum: ”användare online: xxx st”. Den siffran mäter oftast antalet aktiva sessioner, en siffra som varierar beroende på hur lång timeout man har på sina sessioner. 20 minuter är inte helt ovanligt. Vilket betyder att en session räknas som aktiv i 20 minuter från och med den sista sidladdningen hos en användare. Så om en användare har varit inne på en sida i 5 minuter och klickat runt kommer denne hanteras som ”online” i ytterligare 20 minuter. Totalt lever sessionen i 25 minuter. 20 minuter är inte någon standard utan bara vanligt förekommande så för t.ex. en sajt som har en sessionstid på 60 minuter kommer att framstå som mer välbesökt än en med 20 minters timeout.

Detta kan tyckas vara ett problem av akademisk karaktär men det kan faktiskt bli ganska problematiskt när man skall lasttesta en ny webbplats i förhållande till hur stor trafik den gamla har. Jag har i veckan gjort en rad lasttester med verktyget www.loadstorm.com. En av många sajter som låter mig simulera verkliga trafikflöden/riktiga besökare. Där kan jag beställa tester för att simulera 100 samtidigt pågående användareflöden. Något som på riktigt mäter vad som händer när 100 personer samtidigt besöker en sida.

Men hur många samtidiga besökare har den gamla sajten  om det står att den har 100 samtidiga sessioner? Eftersom många av dem är i idle-mode och inte aktivt besöker sidan just nu borde ju 100 sessioner inte vara samma sak som 100 samtidiga användare i loadstorm eller andra verktyg.

Jag tänker därför så här: Att om den genomsnittliga besökstiden på en sajt är 5 minuter och sessionstiden är inställd på 20 minuter borde varje session leva i genomsnitt 25 minuter. Av dessa är 20 minuter dödtid då besökaren faktiskt inte genererar någon trafik mot webbplatsen. Med det antagandet borde ju rimligtvis det verkliga antalet besökare vara: 5 minuter/25 minuter = 0.2*100 antal användare online just nu = 20st.

Så om en sajt motsvarar de siffror jag mäter ovan borde ju det verkliga antalet samtidiga användare utgöra ca en femtedel av de sessioner som för närvarande är aktiva. Till saken skall dock nämnas att detta bara gäller för genomsnittet. Topparna är ju rimligtvis högre än så men för att utföra tester som motsvarar den trafik en sajt har idag behöver man fundera lite över detta för att kunna plocka fram bra mätvärden.

Detta är ju sällan något problem för gemene man utan bara något som utgör ett huvudbry för IT-chefen. Men ändå. Det är icke desto mindre intressant att fundera över.


Som tidigare skrivit arbetar vi just nu med ett störe videoprojekt där vi skall publicera flera hundra timmar video. Vi kommer enbart att använda oss av flashvideo då helst MP4 med H264-encodning. Själva encodningen av filmer i stor skala har vi löst och nu har vi fokuserat på att försöka lösa streaming av filmfiler på ett bra sätt. Anledningen till att vi vill ha streaming istället för bara buffrade filmfiler(som t.ex. Vimeo kör) är att man vill kunna hoppa in i en filmfil var som helst för att dels kunna skapa bokmärkning av filmer men även ge en bättre användarupplevelse så man kan hoppa i filerna utan att behöva invänta buffring av hela filen.

Länge var vi inställda på att hyra in en extern tjänst för streaming eller att använda oss av det öppna alternativet Red5(andra alternativ som vi inte undersökt vidare: FMS, Wowza). Båda vägarna skulle helt klart vara möjliga även om jag tycker det är skönt att slippa blanda in externa leverantörer om man inte måste. Red5 har vi tittat på några gånger men det känns lite som att jaga älg med bazooka. Lite overkill, halvtaskigt dokumenterat och känns inte helt färdigt. Detta gjorde att vi länge övervägde en extern streamingtjänst ända till vi upptäckte ett par andra intressanta alternativ.

H264 Streaming Module för Apache/Lighttpd samt PHP-streaming av FLV-filer. Den senare metoden är den enklaste att komma igång med då den bara kräver att man lägger in ett PHP-script(XMoov-PHP) och konfigurerar JW Media Player. Detta gör att man har fejkad streaming inom några minuter. Nackdelarna med detta är att det dels belastar PHP men även bara fungerar på FLV-filer. Vi vill använda oss av MP4. Därför testade den ovan nämnda streamingmodulen för Apache. Och den tog inte mycket längre tid att installera. Efter 10 minuter hade vi lyckats få till en väl fungerande streaming av MP4 bara genom att installera en modul till Apache.

Modulen fungerar så att den fångar all hantering av MP4-filer och streamar dem till klienten. Genom att skicka in query-parametrar direkt på filanropet kan man välja om man vill starta en bit in i filmen eller bara visa ut delar av filmklippet. Det senare är riktigt användbart då vi vill reducera antalet filmklipp som används och skapa klipp genom att peka på delar av en större film snarare än att klippa upp längre filmer i kortare klipp.

Resultatet är helt klart tillfredsställande . Ett par exempel nedan:

Stream en helt film på 20 minuter
http://tvinterplay.swedmedia.se/streamtest/readme.html

Visa bara 20 sekunder av filmen från: 00:40 till 00:60
http://tvinterplay.swedmedia.se/vischan.mp4?start=40&end=60


Vi driver ett större projekt hos oss just nu där vi skall tillgängliggöra totalt 200 timmar filmat material i ett webbgränssnitt. Dels är själva gränssnittet rät väl utarbetat men en av de största nötterna att knäcka har varit hur vi rent praktiskt skall hantera enkodning och streaming av filmfiler. Vi kommer att använda oss av Flash i H.264-enkodning men har velat fram och tillbaka om hur vi skall hantera automatisering av uppladdat material. Men hur automatiserar man detta på bästa sätt?

Totalt har vi 200 timmar färdigt material som över tid skall kompletteras med användargenererade filmer. Det ställer krav på bra automatisering och skalbarhet. Efter många noggranna övervägningar föll valet på Encoding.com. Vi valde den tjänsten på grund av följande anledningar:

  • Pay-as-you-go-modell. Vi betalar bara för det vi faktiskt använder.
  • Tjänsten har både admin-gränssnitt och SOAP-API
  • Tjänsten är lastbalancerad i Amazon EC2
  • Tjänsten kan läsa och skriva filmfiler till Amazon S3 resp. FTP-konton.
  • Gott om parametrar för inställning av enkodning

Genom att teckna Premiumkonto hos Encoding.com är vi garanterade relativt snabba hanteringstider på varje film och även om det kostar pengar per film vi bearbetar är det helt klart överkomliga summor pengar.

Ett annat praktiskt problem som vi stötta ihop med var hur vi skulle tillgängliggöra filmerna för Encoding.com att hämta upp och koda om dem. Planen var frrån början att lägga ut dem på en egen FTP vilket kändes som en bra idé tills vi om fram till att 200 timmar råmaterial tar upp flera terabyte med data och att köpa in fler hårddiskar bara för ett engångsarbete kändes onödigt. Lösningen i detta fall blev att teckna ett Amazon S3-konto och placera alla filer där innan de laddas ned för encodning. Obegränsat lagringsutrymme till en kostnad som understiger inköp av och arbete med nya egna hårddiskar.

Nu har vi en bra lösning som är helt oberoende av serverlast eller diskutrymme. Det är nog första gången som jag är med och bygger något krävande som till stora delar är direkt beroende av molntjänster.

Kul!


Videoklipp har en otroligt förmåga att suga åt sig uppmärksamhet och det är ett otroligt effektivt sätt att fånga användarna på sin webbplats. Dock är en av nackdelarna med detta att man inte riktigt får belöninge för detta i Google. En film är betydlig svårare att indexera än en brödtext. Dock har vi mixtrat en del med att tagga upp avdelningar i filmer och jobba med textningar för att både taggar och texterna skall kunna användas för att bättre indexera videoklippen. Taggningen(avdelningar på utsatta tider i videoklippet) är relativt enkelt att hantera medan textningen kan vara mer tidsödande och kräver en del tekniskt kunnande.

Därför är det verkligen intressant att båda Google(YouTube) och SubPLY erbjuder tjänster för automatisk textning(automatic transcription) av videoklipp. YouTube erbjuder tyvärr detta bara på sina egna videoklipp medan SubPLY är en komersiell webbtjänst där du bara länkar till en publik FLV-film så kommer du att få en fil med textningarna utplacerade på rätt tidpunkter i SRT eller XML-format.


Igår skulle jag flytta en Wordpress-installation som delade databas med en övrig webbplats och dessutom skulle byta url. Det efter att vi laddat upp massor av bilder i installation. Samlat innebar detta att jag hade två problem.

  • Hur flyttar man smidigast enbart Wordpress-tabellerna från den ursprungliga databasen
  • Hur byter man enklast url’er på de uppladdade bilderna?

Den första uppgiften fick jag leta ett tag innan jag löst men den här bloggen har ett riktigt bra förslag. Man gör en uppslagning på databastabeller som matchar prefixet på Wordpresstabellerna. Detta borde vara smidigt om man vill exportera t.ex. en specifik databas ur en Wordpres Multiuser-installation.

mysql databasename -u [root] -p[password] -e ’show tables like ”wp_153_%”‘ | grep -v Tables_in
| xargs mysqldump [databasename] -u [root] -p[password] > [target_file]

mysql databasename -u [root] -p[password] -e ’show tables like ”wp_%”‘ | grep -v Tables_in | xargs mysqldump [databasename] -u [root] -p[password] > wpdump.sql

Vad bildadresserna beträffar är det inte speciellt krångligt. Den här SQL-koden löser det mesta:

update wp_posts set post_content = REPLACE(post_content, ‘http://oldurl.se’, ”http://newurl.se”);

Då ersätts alla bildadresser till att referera till den nya servern.

Helst vill man ju inte byta domännamn på det här sättet men ibland måste man.


En sak som irriterat mig länge är det faktum att Magento använder sig av ”Skr” som valutakod för svensk valuta istället för den mer vanliga ”SEK” som används i många sammanhang. Det må vara hänt att amerikanarna inte har koll på detta men vad som är mer märkligt är att det är så svårt att ändra denna valutakod.

Anledningen till detta är att Magento förlitar sig på det underliggande ramverket Zend för detta och det är här som dessa konfigurationer hanteras. Om du vill ändra denna inställning i Magento söker du upp filen:

lib/Zend/Locale/Data/root.xml

Ungefär på rad 3050 ligger där den svenska valutakoden som i normalfallet är ”Skr”. Man kan enkelt ändra denna genom att byta ut Skr mot t.ex. SEK eller ”Kr”


Jag gillar Chromium-gängets approach. Föreslå grundläggande förändringar i hur webben fungerar. Även om det är långt bort och långsökt så försöker man styra agendan och få lite fart på utvecklingen av Internet.

I dessa tider av ”realtids-webb” är varje hundradels sekund i anropstider värda att diskutera och om det är frågan om halvering av laddningstider tycker jag att det är en diskkussion so är värd att fortsätta.

http://blog.chromium.org/2009/11/2x-faster-web.§html


Kirkenorge.no - Startside

I måndags öppnades dörrarna för en webbplats vi, sedan i våras, jobbat med åt den norska tidningen Vårt Land. Kirkenorge.no är en webbplats som drivits av eldsjälen Trond Laxå som har ett geniunt intresse för kyrkobyggnader och har själv ett bildarkiv på över 10 000 bilder som han och andra tagit runt om i landet. Detta är något jag tror är avgörande för denna och andra webbplatser. Att man har en engagerad beställare som förmår att fånga upp det engagemang som finns för intresseområdet.

Nu har vi hjälpt Vårt Land att bygga om Kirkenorge.no till en interaktiv kartsajt där man kan navigera bland de tusentals kyrkor som finns runt om i norge. Den har fått en ansiktslyftning, integrerats i Vl.no’s redaktionella arbete och fått bättre styrfart i annonsförsäljningen.

I sverige finns några motsvarande laternativ. Ted Valentin har sin Kyrkokartan.se som gör ungefär samma sak liksom Kyrktorget.se som drivs av Fredrik Edin.

www.kirkenorge.no

Projektgrupp: Christian Cederwall, P-M Nordkvist, Maroun Sleiman, Ingrid Fagervik, Kristoffer Rekstad & David Brabrand