Tag Archives: StatusNet Sverige

Utveckling av “fedsocweb” både stagnerar och frodas

Jag har som bekant ett projekt aktivt med stöd från Internetfonden. Målet är att förbättra den existerande mjukvaran StatusNet, en fri mjukvara för federerade sociala nätverk – eller “federated social web” (fedsocweb). Källkoden jag publicerar går självklart att läsa och projektets resultat går förstås även att använda.

Tillgängliga, liknande mjukvaror

Mycket har hänt sedan jag påbörjade projektet, i detta inlägg ska jag fokusera kring de alternativa mjukvaror som finns inom fedsocweb.

Min utgångspunkt har varit StatusNet, som i mina ögon har en väldigt stor kodbas (228k rader faktiskt kod) som helt enkelt inte är särskilt smidig att uppdatera och bygga vidare på. Det är tydligt att mycket kod hänger kvar “från förr” och orsakar en del kompatibilitetsproblem och huvudvärk när man försöker skapa ny funktionalitet – och inte minst när man försöker standardisera och effektivisera koden.

Sedan november förra året, då jag tog mina första stapplande steg i kodstrukturen för detta stora projekt så har jag försökt bidra med buggfixar och har fått en del av dessa beviljade. Många fler har inte antagits, mestadels eftersom StatusNets huvudutvecklare arbetar på ett annat projekt, Pump.io. Detta nya projekt bygger även det på s.k. “ActivityStreams” och ska implementera OStatus fullt ut, fast i en mindre tungrodd infrastruktur på serversidan. I ett försök att “göra om göra rätt” kanske, men jag har inte hakat på det just det spåret.

Denna stagnation i utvecklingskraft på sociala federerade nätverk är inte unikt för StatusNet. Diaspora* verkar ha fått slut på sitt kapital och riktar in sig på en mer tumblr-remix-aktig satsning än Diaspora-projektets ursprungliga “Facebookdödande” inriktning. Deras nya projekt är helt enkelt nischat för specifika typer av användare och Diaspora* lämnades över “till communityn” i ett mycket ofärdigt skick, om än behändigare kodstruktur än exempelvis StatusNet.

Dessa två plattformer, StatusNet och Diaspora*, har varit de största att dominera sfären av federerad social media. En hittills mer lågmäld spelare har varit Friendica som har varit mer av en satsning på att binda samman separata nätverk för privat bruk än att fungera som en federerad plattform i sig. Sedan StatusNets utveckling stagnerade strax efter sommaren 2011 verkar mycket intresse från bidragande utvecklare ha gått över till Friendica istället. Tyvärr har Friendica en ännu större kodbas än StatusNet (>500k rader kod, mer än dubbelt så stor).

Mycket kod gör projekt jobbiga att sätta sig in i, underhålla och utveckla. Vilket är tre oerhört viktiga egenskaper att bibehålla för projekt med fri mjukvara. Ju högre tröskel in i utvecklingen, desto färre kommer att hjälpa till. Fokus borde alltså ligga på att underhålla lätta, smidiga kodbaser som gör vad de ska på ett enkelt sätt. Mitt mål har därför varit att kapa och meka i StatusNet för att underlätta underhåll. Ett direkt resultat i början var det enkla måttet på antal rader kod men sedan dess även utbyggbarhet och standardisering.

Att mäta resultaten

Jag passade på att nyttja kod-och-projekt-analysatorn på Ohloh för Free & Social, vilket inkluderar all historik från StatusNet (som också finns där). Det syns tydligt när jag började skära som hårdast, i månadsskiftet juni-juli 2012, där 70,000 rader så gott som onödig kod togs bort. Sedan dess har utveckling skett för att separera utseende från funktion, vilket i det stora hela inte lagt till särskilt mycket kod alls. Strax är jag dessutom redo att radera väldigt mycket kod som för tillfället endast ligger kvar som “fallback” om min kod inte täcker upp ett visst användningsområde.

Målet är att kunna byta ut den kod som är skriven i PHP mot något helt valfritt, modul för modul. Det ska bli lättare att köra sin egen StatusNet-instans, eller vilken mjukvara man vill, för att kommunicera federerat med OStatus-protokollet (och även andra förstås).

Det jag inte gjort hittills är att paketera Free & Social-forken för enklare installation på slumpmässiga datorer. Detta kommer när man inte längre behöver paketera hela frontend-motorn med allt vad det innebär för människor som t.ex. vill ha en installation man endast interagerar med via API och tredjepartsklienter.

Projektet tar absolut mer tid än jag hade förväntat mig. Fast då resulterar det även i en mycket större förbättring än vad jag först hade tänkt mig.

Conversations in “social” media (and why OStatus rocks)

So, what’s more social than having a conversation? Two or more participants in an exchange of words or acts that relate to a common subject. It’s called communication and as human beings we have a natural born talent for maintaining several subjects in our mind at once.

The conversation is very important for humans and our social life. We not only want to interact with others – we want to understand the context of a conversation we’re not immediatly being a part of. Be it a political debate, people on the street passing by or when reading posts on an internet forum. Quotations are a great example of how maintaining the intended context is important, as many phrases have multiple interpretations. With the age of books, physically printed literature, keeping the context has been a hard task – but with computers, the internet and hypertext on the world wide web it is no longer difficult.

So one may wonder why websites that are portrayed as “social” are so bad at presenting communication. Lately we have started seeing one-level threads that contain comments and mentions in the “social media”. Not much more than bulletin board systems did during the ’70s and ’80s. The visual representations, event the metadata, of these digitally stored conversations are limited to relatively short bursts of chaotic chatter in the realtime-adapted webservices. Not a very socially sustainable style of communication.

The two major players in the area of asocial media services in Europe and the US are Facebook and Twitter. Both fail to respect human conversation in their own particular way:

  • Facebook has a single-thread style conversation. A user initiates this with a post or link. This notation may be quite long and occasionally sparks an intense debate. However, any replies that are made are only linked to the original post.
    Should a thread get multiple conversation participants that reply on several invisible subthreads it doesn’t take long before it is too chaotic to follow. Even for a trained robot or human being.
  • Twitter conversations are built on reply-to notifications. An original tweet, limited to 140 characters, can often gain attention and be subject to discussions. Any replies to this post will be required to contain a multi-character mention (@username) of the user replying to, while still being subject to a character limit.
    Assuming, contrary to experience, that a 140 char-limit is enough the available characters are quickly reduced with conversation participant, effectively disorienting any third-party that tries to follow up.
    To make matters worse there’s not even a method of linking tweet follow-ups in metadata, which has caused some clients to add any “>>”-like signature to indicate humans to continue reading in the next tweet.

Compare it to mailing lists. Any mailing list or e-mail client can handle threads, replies, carbon-copies and even blind carbon copies since decades ago. That’s like space-age technology compared to the asocial media services’ scrapbooking kit which even lacks a proper glue.

Google+ also uses the single-thread style. There are of course also many other services out there, even some of which have learned from (or even incorporate) mailing lists. Usenet for example should reasonably be an early example of an open social media, lacking only a flashy front-end, a marketing department and better anti-spam measures to be successful.

WordPress is probably the best example of a social web media and sports appealing multi-threaded comments with proper computer-readable markup. However, WordPress currently lacks integrated federation. It’s more of a social oasis, where you park your camel and talk for a while before you head off to the next water hole. Besides, that structure is better used for the topic of a discussion rather than the place of a discussion.

So welcome OStatus, the federated social web protocol. Its main implementation, the software StatusNet (see it in action on identi.ca or freesocial.org), already does threading and proper in-context metadata. It has the backbone for cross-domain notifications and replying without clogging the post with the @-mentions. As opposed to WordPress, the social bit is integrated both up- and downstream so feeds you subscribe to get pushed into your timeline and from there you can post comments upstream and interact with replies.

The OStatus protocol is open and free for anyone to use, works across domain-names and gives you control over what you share, how your data flows and especially where it is stored. You’d never give up control of your “real” social life to someone else – so why give up the digital representation of it? OStatus is an easy solution to maintaining this control.

So if one wants a true social media service, I think it is important to choose one that is not only open and free as in speech but also compatible with how humans really interact with each others. A system that not only respects the user by keeping the user in control, but also something that understands our social interactions – where conversations are a very important part.

The social web is nothing but communication anyway, so why not make sense out of it and keep its context open, transparent and clear?

SNS: Vad innebär federering?

StatusNet Sverige är en del av ett globalt omspännande nätverk som kallas internet. Det finns ingen enskild leverantör, ingen samlad användardatabas och heller inga användaravtal. Till skillnad från centraliserade tjänster som Facebook och Twitter, slutna nätverk med användaravtal, så har internet – och även det decentraliserade StatusNet – en öppen policy ämnad för fri användning. Så vad är för- och nackdelarna med en centraliserad jämte decentraliserad modell?

Först och främst vill jag förklara begreppet “federering”, något så gott som alla internetanvändare har stött på. Med största sannolikhet har du som nätanvändare åtminstone en federerad identitet. Alltså en lagrad profil med vilken du kan verifiera dig själv med en personlig eller hemlig detalj (typ lösenord). Det bästa exemplet är e-post, något nästan alla har stött på – och kanske rentav har fler än en instans av. Med e-post kan du välja vilken leverantör du litar på (ditt företag, Gmail, Yahoo!, etc. eller vara din egen leverantör (med eget domännamn, typ mmn-o.se). Därefter finns inga begränsningar, mer än spam-filtrering, att skicka meddelanden till andra identiteter hos andra leverantörer. E-post är decentraliserad och federerad.

De “sociala” tjänster som erbjuds av ex. Facebook, Twitter och Google+ är slutna och begränsade nätverk med centraliserad kontroll. För att använda dessa sidor måste du ha ett konto hos den enskilda leverantören! Vill du diskutera en bild med dina vänner på Facebook – ja då måste dina vänner också registrera sig hos dem med allt vad det innebär! Jämför detta med e-post, där konkurrenterna Gmail och Hotmail tillåter användare att konversera även utan lokalt konto!

I en liknelse med köttvärlden kan de slutna tjänsterna jämföras med privata utrymmen vars regler dikterar vilka som får vara där och hur platsen ska användas. Tänk herrklubbar, sektmöten etc. där kvinnor och oliktänkande utesluts – förutom att i “sociala media” handlar det om 12-åringar och personer med skyddad identitet. Bland annat därför är det konstigt att offentliga organisationer använder dessa tjänster alltmer i sin verksamhet, om man egentligen ska tjäna hela samhället.

Fria och öppna sociala nätverk som StatusNet fungerar istället på slutanvändarens villkor. Precis som med e-post kan du välja leverantör utan att uteslutas från gemenskapen (communityn). Istället för att tvingas på ett ansiktslöst, privatägt amerikanskt företag som vill tjäna pengar på din privata information (Facebok, Twitter, Google etc.) så väljer användare leverantör baserat på förtroende. I ett öppet, federerat, socialt nätverk kan man som användare välja vem man ska lita på.

Federerade nätverk: Antingen gör man allt själv och har absolut kontroll över sin egen information – eller så överlåter man detta till någon man respekterar och har förtroende för.

Är du sugen på att pröva ett öppet socialt nätverk som drivs av mjukvaran StatusNet kan du registrera dig hos t.ex. den tjänst jag själv driver tillsammans med Piratpartiet – Free & Social – eller någon av huvudutvecklarens egna instanser: Status.net och Identi.ca. Vill du “skända sociala medier” kan du använda quitter.se! Oavsett vilken du väljer kan du prata fritt över gränserna! Leve Internet!

SNS: Workshop med federerade sociala nätverk

Jag hade tänkt göra en öppen förfrågan till folk som är intresserade av att betatesta, utveckla eller bara komma med idéer till Internetfonden-finansierade projektet StatusNet Sverige.

Imorgon, tisdag 24 juli, klockan 19.00 i Umeå Hackerspaces lokaler tänkte jag gå igenom tanke och funktionalitet med ett öppet, fritt och federerat socialt nätverk. Dessutom är tanken att visa lite på vad StatusNet idag klarar av och fråga om vilken funktionalitet som vore mest efterfrågad av det som idag inte hanteras.

Ett federerat nätverk byggt på ex. StatusNet uppfyller redan idag flera syften som helt förbises och ibland rentav aktivt motarbetas av “sociala” media som används i huvudsak idag. Bland annat möjligheten till pseudonym, en icke centraliserad användardatabas och möjligheten att skapa ett helt eget nätverk för slutna grupper.

Workshopen är tänkt att bestå av att folk tar med egna surfprylar (laptop, handdator, cyborg-HUD-magi etc.) och helt enkelt noterar buggar, önskad funktionalitet och krånglande användarerfarenheter. Framöver, sannolikt på andra workshops i framtiden, kommer det att spånas på FAQ, beskrivande texter etc. som enkelt förklarar varför ett federerat nätverk är önskvärt att användas.

SNS: QnA-pluginet patchat mot DoS

Igår petade jag lite på QnA-pluginet för StatusNet, vilket resulterade i en patch som tar bort 7 rader och lägger till 1 rad. Först och främst märkte jag att när man besökte sidrepresentationen för en fråga gjordes ett SQL-anrop för “SELECT * FROM notice” vilket effektivt låste den php-cgi-processen under ett par minuter. En enkel måltavla för DoS-attacker alltså.

Det har säkert fungerat någon gång tidigare, eller så har funktionaliteten bara testats dåligt. Kodmässigt verkade ju den tidigare använda algoritmen funka, nämligen att göra ett manuellt SQL-anrop med det definierade DB-objektet. Problemet var att när man anropade query() så utfördes anropet _utan_ att ladda in resultatet som moderklassen “Notice”. Istället ställdes endast en variabel in för att ange antalet rader i svaret.

PEAR DB-klassen som används i funktioner som de ovannämnda är ganska gammal kod och avverkas förmodligen närsomhelst till förmån för MDB2. Dessa två kodbibliotek är abstraktionslager för databaser och används i StatusNet bl.a. för att integrera dataobjekt-hantering samt cachning. Alltså en enorm del av den bakomliggande infrastrukturen och således inget man byter i en handvändning. Men någon gång kommer det att ske förhoppningsvis.

Nu hoppas jag bara att min patch läggs till i den officiella kodbasen snart!

Att arbeta med snabbutvecklande teknologi

StatusNet implementerar det egendesignade “protokollet” OStatus. Tack vare ett mycket utbredd standardiseringsarbete i övrigt på internet, tycka vad man vill om XML och HTTP, så är OStatus mycket kortfattat beskriven. Allt som behövs för att implementera OStatus är i princip färdigutvecklat dessutom, i form av kodbibliotek och exempelimplementationer.

Jag är personligen negativt inställd till många nya standardrelaterade påhitt på internet, allt från Google’s native-client (NaCl) till det brutalhemska WebSockets. Dessa idéer och tankar är förstås användbara om man vill bygga operativsystem och allt annat i “molnet”, genom din webläsare. Frågan är dock varför allt detta ska definieras när man redan har en dator med ett operativsystem – kan inte webläsaren bara få vara en webläsare?

Så frågan är hur långt en standard bör gå i att återuppfinna hjulet. Förslagsvis endast det absolut minsta nödvändiga – varför jag lyfter fram OStatus här. Även om några refererade delar i utkastet till standard som StatusNet Inc. i sig är nydesignade hjul kanske det ändå är okej att man till viss del anpassar specifikationen till resten av världens homogena inriktning mot HTTP-dominans. WebFinger tror jag är ett sådant exempel, där nyutvecklingen ändå är positiv.

Så vad för problem kan man stöta på med något som OStatus? En föreslagen standard som i princip bara består av referenser till andra standarder. VoxPelli (som jobbar på Flattr) påpekar bland annat att alla dessa standarder har ett eget liv – och för tillfället finns inga specifikationer på vad för versioner som ska användas av t.ex. ActivityStreams – som framöver kanske inte stöder XML-strukturen som idag är vad som används uteslutande i StatusNet.

Att bolla med så differentierade standarder som OStatus gör – och med den snabbt framskridande teknologi som webben innebär – är absolut en givande utmaning. Som tur är har man inom fri mjukvaru-världen inte bara alla specifikationer att tillgå utan även väldigt många, väldigt kunniga individer runtom i världen som bistår med hjälp på sina egna sätt och vis. Antingen genom kod, svara på frågor, felsöka eller bara finslipa de standarder som finns att tillgå.

Att leta buggar och grejer

Jag försöker som bekant utveckla och förbättra mjukvaran StatusNet i syfte att göra den mer lättanvänd, bättre integrerad med slutna tjänster (för att hjälpa migrering till öppna nätverk) och inte minst förbättra och förnya funktionalitet. Min slafsiga test-utveckling av Free & Social-instansen kan man följa på Gitorious för närvarande, i framtiden kommer jag även att publicera kod och projekt på GitHub.

Ett par utmaningar för min del är bl.a. att detta är den största mjukvaran jag arbetat med hittills, dvs flest rader av kod i projektet. Således tar det ett tag att sätta sig in allt. Dock känns det som att de senaste månaderna har inneburit stora steg för att förstå strukturen tillräckligt för att kunna modifiera kärnfunktionalitet i StatusNet.

Den största delen av min utveckling hittills, sedan jag sökte stöd för projektet i februari, har varit för pluginet “FacebookBridge” där min version för närvarande slurpar i sig det mest relevanta från anslutna användares “home timelines”. Inlägg, användarprofiler och bildbilagor importeras till större delen, men eftersom Facebook verkar ha sjuttielva olika TYPER av bilagor och liknande kommer det behövas mer arbete på den fronten.

Twitter finns det redan ett närmast komplett stöd, där har jag mest skrivit buggfixar så att användarupplevelsen är mer konsekvent samt att StatusNet 1.1.0 fortfarande har ett par buggar. Inte minst har jag snyggat till kod, men sådana patchar är svåra att få med i originalmjukvaran, varför jag egentligen borde fokusera mest på småfixar snarare än större omskrivningar.

Men så kommer man förstås till den stora problematiken med detta projekt, att dessa slutna användarsidor verkligen försöker stänga ute sådana projekt som StatusNet från att nyttja informationen. Jag tror det endast är en tidsfråga innan t.ex. Twitter stänger av sitt API för 3:e-partsklienter (om de inte betalar för sig) och dylikt.

Jag välkomnar varmt fler att testa StatusNet och försöka locka över användare till ett öppet och decentraliserat socialt nätverk. Dock kommer det framöver att behövas ett bättre lockningsrop, som även ickeprogrammerare kan uppskatta. Hur förklarar man bäst varför det är bra att kontrollera sin egen information och decentralisera infrastruktur? Inte ens majoriteten inom Piratpartiet och Ung Pirat förstår ju poängen och fortsätter gladeligen att bruka de enorma, slutna nätverken i direkt motsats till den politiska ideologin.

Internetfonden ger stipendie till StatusNet Sverige

Jag har tillsammans med Umeå Hackerspace gett mig in på att utveckla den fria mjukvaran StatusNet. Beskrivning av projektet finns hos Internetfonden. Ni kan även lyssna på ett radioinslag i P4 Västerbotten med mig pratandes om fritt flöde av information på nätet:


20120611 – P4 Västerbotten – Internetfonden stöder StatusNet Sverige

För att möjliggöra decentraliserad sociala media har OStatus-protokollet utvecklats och implementerats i AGPLv3-form genom mjukvaran StatusNet. Det är med detta i grunden som StatusNet Sverige vill bidra till en fri, decentraliserad communityplattform för att göra det användarvänligt, tilltalande och allra mest sömlöst att migrera.

Projektledaren ska i samarbete med Umeå Hackerspace buggrapportera, laga buggar, förbättra användarvänligheten i StatusNet samt skriva ny funktionalitet. Arbetet sker i en egenkontrollerad upplaga av StatusNet-källkoden, men aktiv kommunikation och syncning kommer att ske tillsammans med StatusNet Inc, ett litet utländskt företag som idag är de huvudsakligen drivande.

Målet är att 2013 ha en mjukvaruversion av StatusNet som dels har egen valbar funktionalitet motsvarar slutna communitys mest populära funktionaliteter samt att det även ska vara lätt att migrera till för nybörjare. En ännu djupare integration med andra communitys API:er ska också utvecklas, där StatusNet Sveriges mjukvara i praktiken går att använda som en klient mot de slutna sidorna samtidigt som man är en nod i ett decentraliserat globalt OStatus-community.

Om man vill börja experimentera och testa StatusNet kan jag rekommendera huvudutvecklarens egna instans identi.ca samt den jag driver med hjälp av Piratpartiet, Free & Social.

Vi kommer att hålla i hacknights hos Umeå Hackerspace där vi letar buggar, mekar och trixar för att skapa en bättre och mer lättanvänd mjukvara utifrån StatusNet med ny och förbättrad funktionalitet.