Webbstatistik på skrivbordet med Piwik & Geektools

Piwik har jag skrivit lite om förut. Det är ett opensource web analys script (php/mysql) som man kan köra på sin egen webbserver.

Piwik har ett eget API som man kan få fram olika data från. Jag gjorde ett enkelt script som frågar efter besökare, unika besökare och actions. Actions är en sammanslagning av nedladdningar, sidvisningar och utgående länkar. Typ hur många saker en besökare klickar på. Jag visar denna info på skrivbordet med Geektools. Är du inte en Mac användare så finns det säkert någon annan lösning. På min Mac är också PHP version 5.3.4 installerat, php version 5.2 eller högre behövs för jag använder json_decode i mitt script. Nedan visas hur scriptet ser ut på skrivbordet.

Så här ser scriptet ut för att fråga Piwiks API om dessa uppgifter.

$myworld_json = file_get_contents('URL_TO_YOUR_PIWIK_INSTALLATION/index.php?module=API&method=VisitsSummary.get&idSite=3&period=day&date=today&format=JSON&token_auth=YOUR_API_TOKEN');

$myworld_obj = json_decode($myworld_json);

$myworld_action_json = file_get_contents('URL_TO_YOUR_PIWIK_INSTALLATION/index.php?module=API&method=VisitsSummary.getActions&idSite=3&period=day&date=today&format=JSON&token_auth=YOUR_API_TOKEN');

$myworld_action_obj = json_decode($myworld_action_json);

print "myWorld.se - Visits: " . $myworld_obj->{'nb_visits'} . ", Unique: " . $myworld_obj->{'nb_uniq_visitors'} . ", Actions: " . $myworld_action_obj->{'value'};

Svaren får man i JSON och beroende på vad man skickar med i urlen så kan man få daglig, veckovis, månadsvis statistik. I exemplet ovan så frågar jag bara efter daglig statistik.

&method=VisitsSummary.get&idSite=3&period=day&date=today
&method=VisitsSummary.get&idSite=3&period=week&date=today


Ersätter man &period=day med &period=week i exemplet ovan får man veckovis rapportering. &method anger vilken statistik man frågar efter, VisitsSummary.get är olika besöksstatistik. &idSite=3 är vilken webbsida man vill ha statistik för. Jag har Piwik installerat på 5-6 olika webbar och myWorld.se har id 3. &date=today är vilken dag man frågar efter. today, yesterday eller YYYY-MM-DD är tillåtna.

Geektools sätter man upp som vanligt. Command pekar på scriptet, börja med php så scriptet körs med php. Sen kan det vara bra att sätta en längre refresh så man inte frågar var 3’e sekund. 1200 sekunder är 20 minuter. Timeout satte jag på 8 sekunder så det avbryts rätt snabbt om jag tex inte har någon internet förbindelse.

Piwik (1.4) visar din besökares nyckelord rankning

Nu när jag har fixat min nginx installation efter uppgraderingen till ubuntu 11.04 och Piwik äntligen fungerar igen hittade jag en nyhet.

När en besökare kommer från en webbsökning så kan man se vart i besökarens resultat nyckelordet som tog besökaren till min sida hamnat. Så på bilden nedan har en besökare sökt på ”btrfs” i google. Min webbsida hamnade då på resultat 3 för besökaren. Jag vet inte om det är en nyhet i Piwik 1.4 men jag tror inte jag sett det förr.

Det konstiga är att inte alla nyckelords placeringar registreras. Som bilden nedan. En besökare har också sökt på ”btrfs” med google men där har Piwik inte loggat vart i resultatet min webbsida hamnat.

Jag hittar ingen information om det här på Piwiks hemsida så jag vet inte varför vissa resultat loggs men inte andra.

Så lätt är det att lägga till ytterligare en disk i en btrfs pool

Jag köpte en till disk som jag tänkte lägga till i min btrfs pool. En sata ”Green” 1.5Tb blev det. Så här lätt är det att lägga till den i en befintlig btrfs multi drive pool.

När den är installerad och systemet känner igen disken.

sudo btrfs device add /dev/disk /mnt/namn

För att kolla om den nya disken är med. Observera att den nya disken inte har lagrar någon data ännu.

sudo btrfs filesystem show

För att balansera data på alla tre diskar måste man köra.

screen -S btrfs sudo btrfs filesystem balance /mnt/namn


Jag körde det sista kommando i en screen eftersom det tar några timmar och jag kan inte vara uppkopplad via ssh så lång tid i sträck.

Viking_Olof skriver twitter historia

I början av sommaren ville jag lära mig lite om Twitters api. Viking_Olof som retweetar och postar länkar från utvalda rss feeds (postar saker om twitter/fb/html5/css3/jquery) blev resultatet av det. För någon vecka sen postade han sin 15.000 tweet. Lyckligtvis så lyckades jag få en screen på just den tweeten. Viking_olof körs från min server dator här hemma och jag har inte kollat till han så mycket de senaste månaderna vilket har resulterat i att vissa funktioner gått sönder. Nu kan han inte retweeta så det stängde jag av. Tanken är att jag ska få till en liten smartare retweet funktion som inte retweetar så mycket spam/affiliate/sälj länkar.

Viking_Olof har fått mer followers än jag kunde tänka mig. Vissa av dom är spam konton, de värsta har jag blockat manuellt men jag skulle också vilja få till en funktion som kan göra det automatiskt. Tex om man märker att ett konto postar många spam/sälj länkar så slutar han att retweeta tweets från den användaren. Vi får se om han lyckas komma upp i 20-25 tusen tweets till 1års dagen.

Kom igång med IMAPFilter

För några dagarsen hittade jag det utmärkta programmet Imapfilter. Detta lilla program filtrerar mailboxen på en IMAP server efter några enkla regler man kan göra själv. Jag vill ha min inbox filtrerad från en server (min fil server som står hemma) så att jag bara ser det viktigaste mailen på min iPhone eller andra mail klienter som inte har en vettig filter funktion.

Här är en liten introduktion till IMAPFilter och reglerna som ska skrivas i LUA kod.

Vi börjar med att installera programmet, i Ubuntu skriver du bara.

sudo apt-get install imapfilter

Kör sen programmet med syntax -v så skapas katalogen för config filen.

imapfilter -v

Nu ska du ha en .imapfilter katalog i din hemkatalog.

cd .imapfilter

Om det inte finns en config.lua fil i den katalogen skapa en med valfri texteditor, jag kör vi på min server.

vi config.lua

Nu ska vi redigera config filen och göra ett enkelt filter på en mailbox. Högst upp i filen skriver vi.

options.timeout = 60
options.subscribe = true

myworld = IMAP {
        server = 'mail.myworld.se',
        username = 'spam',
        password = 'supersecretpassword',
        ssl = 'ssl3'
        }

option.timeout säger till hur lång tid imapfilter ska försöka ansluta till mail servern. option.subscribe gör så att om en mapp skapas på mail servern så kan du använda den direkt. Dom andra raderna säger till hur vi ska ansluta till min mailserver. Sen kan vi hänvisa till den här anslutningen med myworld

Nu börjar det roliga, nu ska vi göra ett enkelt filter.

my_slask = myworld.INBOX:match_from('.*@nutshellmail.com')
myworld.INBOX:move_messages(inuse['Tmp'],my_slask)

Denna regel kollar i inboxen på kontot myworld efter brev från domänen @nutshellmail.com. Breven läggs i variabeln my_slask. Andra raden gör så att dom brev som hittades och finns i variabeln flyttas till en mapp som heter Tmp. Så lätt är det att skapa ett filter med lua i imapfilter.

Det går att göra så att imapfilter körs som en deamon men jag kör det hellre med cron. Så här ser min crontab ut.

*/5 6-20 * * * /usr/bin/imapfilter -l /home/henrik/.imapfilter/ifilter.log > /dev/null 2>&1
*/30 20-6 * * * /usr/bin/imapfilter -l /home/henrik/.imapfilter/ifilter.log > /dev/null 2>&1

Imapfilter körs var 5’e minut mellan kl 06:00 och 20:00. Mellan 20:00 och 06:00 körs det varje halvtimme. Under jobbtid och någon timme till vill jag ha mina mail sorterade rätt snabbt, kvällstid och på natten räcker det gott och väl med 2 ggr i timmen. Läs igenom manualen för att skapa lite fler filter.

Jag har en mapp där alla nyhetsbrev och andra massutskick hamnar. Alla mail äldre än 7 dagar markeras som läste och efter 14 dagar tas breven bort.

Ny version av Dropbox upload form för WordPress

Inställningar för WordPress pluginet Dropbox upload formFör några veckor sen var jag på WordCamp Stockholm. På hacker natten tittade jag över mitt WordPress plugin: Dropbox upload form. Tyvärr så verkade det inte fungera riktigt i WordPress 3.0. Nu kommer jag inte ihåg vad som var trasig men det var nått med php classen jag använde. Dropbox har nu också en egen API. Det hade dom inte när jag gjorde pluginet. Jag tittade lite på vad man kunde göra med API och bestämde mig för att använda det. Det finns en nackdel med den nya API’n om man gör en webbapp, man måste registrera en egen app för att få en API nyckel.

För att skaffa en API nyckel som kan användas till mitt plugin gör man följande.

  • Registrerar en ny Dropbox app
  • Hitta på ett namn och välj webb som platform
  • Kopierar sen app nycklarna, längst ner. Både Key och Secret behövs.
  • Klistrar in Key och Secret i inställningarna för pluginet.
  • Nu ska pluginet fungera som förr fast med Dropbox API

Lite jobbigare installation blir det men efter man satt upp allting så fungerar det bra. Kanske kommer det lite mer funktioner till pluginet snart. Jag hade först en tanke på att lägga till ett val att skicka ut ett mail till valfri adress när en ny fil laddas upp. Nu blev det bara en omskrivning av uppladdnings funktionen så den använder Dropbox API istället för den tidigare hackiga lösningen.

Bättre Btrfs i kernel 2.6.35

Efter att ha sett att Btrfs fått några viktiga fixar i linux kernel 2.6.35 testade jag att uppgradera till den versionen på min Ubuntu linux server. Det fungerade finfint efter att ha följt guiden på ubuntu forum. Främst var det -ENOSPC fixen som verkar vara löst i den kernel versionen. -ENOSPC är vad jag förstått hur filsystemet hanterar fel när diskutrymmet är slut. Btrfs är fortfarande beta och har inte hanterat detta riktigt bra innan. Jag tror att jag råkat ut för den buggen när jag gjort en balansering ( ”btrfs filesystem balance” ) av mitt system på två diskar. Nu med den nya kernel så fungerar det bra utan kraschar. En balansering ( finns det ett vettig Svenskt ord? ) använder magi och gör så att viktig metadata finns på båda diskarna och lagrade filer sprids ut på båda diskarna. Den ska nog främst användas om man lägger till en ny disk i ett befintligt filsystem

Jag använder btrfs som filsytem på två diskar (1Tb och 500Gb) som jag sen delar ut via samba för fildelning och netatalk för Apple time machine backup. Klart bästa funktionen är att jag kan lägga till en ny disk i mitt filsystem om jag behöver öka lagringen. Funderar lite på om jag ska köpa en ny sata 1.5 eller 2Tb disk och byta ut min lilla ide 500Gb’are. Inte för att jag behöver mer utrymme nu utan mer för att hårddiskar är billig och det går.

Åäö i buggig beta av iOS 4.2

Eftersom vi har ett Apple dev konto på jobbet så kunde jag testa ny iOS 4.2 för iPad. Har du inget dev konto så går det att googla denna firmware också. Åäö är ju roligt att kunna skriv men buggigare blev det. Mina nätverks inställningar verkar försvinna ibland och jag kan inte knäppa på nätverket med knappen för det slår av automatiskt igen. Appar kraschar lite mer frekvent. Åäö i mail programet verkar inte skickas med rätt teckenkodning. Åäö fungerar i tex Evernote så det verkar vara nått med iPadens mail. Och förut kunde man låsa skärmens position (liggande/stående) med en knapp, nu mutar den knappen bara volymen. En klar nackdel eftersom jag ibland vrider och låser min iPads skärm ganska mycket. Nu måste man göra en dubbel tryck på ”hem” knappen och där kan man via programvaran låsa skärmen inte alls lika smidigt och snabbt som förr. Om någon vecka kommer nog beta 2 av iOs 4.2 och förhoppningsvis så har många av de här buggarna försvunnit till dess. Kanske lite mer drivrutiner för skrivare finns med också. Nu ska det vara ynka 3 st.

Här finns info om hur man får 3g och iOS 4.2 att fungera. Jag hade inte märkt att det slutat fungera eftersom jag bara surfat på wlan.