Mer SPF till folket!

Lämnade in ett medborgarförslag till Umeå kommun idag. Det gäller att:

  • Implementera SPF (Sender Policy Framework) för domännamnet @umea.se och på så vis att motverka falsifierade mail som utger sig för att vara Umeå Kommuns nätidentitet.

Detta görs genom att lägga till ett TXT-record för domännamnet ‘umea.se’ som anger vilka mailservrar som har rätt att skicka med avsändare “@umea.se”. Specifikationer finns på openspf.org

Inget mjukvarubyte eller omkonfigurering behöver göras (om man inte önskar själv verifiera SPF på _inkommande_ mail, men det är sekundärt). Allt som behövs är en minimal ändring i DNS i stil med följande (vilket gör att endast MX-servrar för den aktuella domänen får skicka mail från just den domänen):

umeahackerspace.se. 86400 IN TXT "v=spf1 mx:umeahackerspace.se -all"

På detta vis kan man underlätta (hos mottagande servrar, t.ex. @svt.se eller @umeahackerspace.se) att identifiera falska avsändare, såsom rapporterat från SVT Västerbottensnytt gällande Lennart Holmlunds “ungjävlar”-skriverier.

Ok att publicera mailadresser på bloggportal?

lennart_holmlund_vs_pul-mailadress_raderadSkickade just iväg detta till Datainspektionen och den omskrivna Lennart Holmlund, kommunalråd i Umeå kommun. Jag tycker inte att det är ok att man publicerar folks mailadresser som han gör, när det är kopplat till åsikter och yttrandefrihet.

Dessutom gör kommunalrådet tankefelet att denne på något sätt skulle äga plattformen han skriver på. Det gör han ju inte. Västerbottens Kuriren gör det, bär ansvar för den etc. etc. Ifall Lennart Holmlund vill lära sig att hosta sin egen blogg på egen hårdvara på egen uppkoppling så är han (och alla andra) välkommen att höra av sig till Umeå Hackerspace. Vi kan hjälpa till att decentralisera och låta människor återta kontrollen över sin data – istället för att outsourca makten till någon tredjepart såsom VK.

Hejsan Datainspektionen!

Jag har en fråga kring publicering av epostadresser och om dessa faller under PUL-skydd eller ej. Är det ok att maila in frågan? Annars kan jag absolut ringa upp på er juristlinje.

Om det är ok så vänligen läs vidare:

Västerbottens Kuriren, största tidning i Västerbotten, driver en blogg-hosting för så gott som vem som helst som vill skriva och publicera på deras reklamdomän. De som bloggar där är allt från privatpersoner till politiker och varje användare får administrera sina egna kommentarstrådar, där användarna får se kommentarskribenters epostadresser bland annat.

Den som kommenterar på bloggarna får veta att eposten är obligatorisk och det står även uttryckligen: “E-postadressen publiceras inte.”

Nu är fallet så att en av dessa bloggare på VKs portal publicerar epostadresserna från de som kommenterar – vilka ofta t.o.m. använder pseudonym för att skydda sin riktiga identitet utåt sett.

Detta har skett i fall som såväl jag (se bifogad bild), som SVT Västerbottensnytt i en annan nyhet: http://www.svt.se/nyheter/regionalt/vasterbottensnytt/de-ska-sta-for-vad-de-tycker

Så till den konkreta frågan: Skyddas epostadresserna i ovanstående exempel av PUL? Får bloggaren återpublicera på detta vis i kommentarsdiskussionerna.

(Jag CC:ar den ansvariga blogginnehavaren tillika personuppgiftsdistributören Lennart Holmlund, som är kommunalråd i Umeå kommun. Så om mailsvar kommer från Datainspektionen uppskattas det om det svaras till alla inblandade så jag slipper vidarebefordra meddelandet själv. Ni som fått en BCC-kopia har fått det för ev.
nyhetsvärde.)

– Mikael Nordfeldth, Piratpartiet
http://blog.mmn-o.se/
XMPP/mail: mmn@hethane.se

Mitt engagemang i Piratpartiet (peppa Amelia till EU#1)

Jag har börjat tappa motivationen på riktigt när det gäller engagemanget i Piratpartiet.

Inte bara för att majoriteten man kommer i kontakt med fullt ut skiter i att leva som man lär och nyttjar övervakningsapparaturer hejvilt och tycker det är helt okej (Facebook, Skype, Twitter…).

Inte bara för att välgödda, arga vita män i Piratpartiet av egoistiska skäl stöder övriga välgödda, arga vita män och odlar en typisk herrklubb.

Inte bara för att partiets demokratiska verktyg i form av ett oöversiktligt nätforum innebär att endast de som saknar aktiviteter på sin fritid (eller de som blir avlönade för syftet) har möjlighet att hänga med och delta i två flera veckor långa medlemsmöten per år.

Inte bara för att de i ovannämnda paragraf som inte kan hänga med men är fanboys till välgödda vita män klickar på sina idolers länkar till omröstningsforumet endast i syftet att uppfylla den välgödda arga vita mannens önskan.

Det finns en massa anledningar också som jag inte ids ta upp.

Det viktiga med detta inlägg är snarare att påtala att mitt engagemang hänger kvar i princip endast tack vare Amelia och hennes stab. De gör – så gott som – allt rätt, på rätt sätt och med rätt ideologiska drivkraft.

För att citera Ásta Helgadóttir, från det isländska Piratpartiet:

Amelia is badass.

Amelia Andersdotter har fucking balls:

Kommer Engström på förstaplats så är det trist och tråkigt. Inte för att han skulle vara nämnvärt dålig egentligen. Utan för att Amelia är så jävla bäst. Hon är den utan tvekan främsta förmågan inom Piratpartiet för att göra det jobb som görs i EU-parlamentet.

Överklagan till Radiotjänst om dator-avgift

Har skickat in en överklagan till Radiotjänst som uppföljning på ärendet “teknisk utrustning avsedd för tv-mottagande eller ej“. Läste efter att jag gjorde det Jörgen Städjes senaste Radiotjänst-artikel där han litegrann tar upp min poäng kring mjukvara, men med ett för ämnet dåligt underbyggt rättsfall. Dessutom bör läsare vara medvetna om att min uppfattning av situationen stämmer överens med Piratpartiets åsikter kring Radiotjänsts verksamhet.

20131027-beslut_fran_radiotjansts_omprovning-s1_2 20131027-beslut_fran_radiotjansts_omprovning-s3-upplysningDeras beslut på omprövningen att jag ska betala tv-avgift för att jag har en “dator” och tillhörande “internet”. Att jag sedan inte förstår argumentationen bakom vad som är en “dator” (enligt mig är mobiltelefoner och mikrokontrollers lika mycket datorer som PCs, men dessa är tydligen inte avgiftsbelagda?) gör mig förvirrad. Och faktumet att “internet”-kommunikation kan färdas över brevduva och/eller bongotrumma – eller för den delen grannens öppna trådlösa nätverk – verkar de inte ta i beaktning vid deras telefonsamtal.

Poängen jag för fram är i alla fall fortfarande att det enda som kan betraktas som en “tv-mottagare” (och alltså det enda avgiftspliktiga, oberoende av kringutrustning) är mjukvaran som initierar och hanterar kommunikationen med den tv-sändande motparten.

Läs gärna min överklagan kombinerat med bestridande av deras faktura nedan. Förhoppningsvis löser man det genom att t.ex. SVT börjar sända över internet med öppna och fria format samt distribuerar fri mjukvara i egenskap av tv-mottagare. Då betalar jag gärna tv-avgift!

Till: Radiotjänst i Kiruna AB
Datum: Umeå, 2013-10-26

Angående er faktura nr 1020176340100165 (519kr, 2013-10-08)

Härmed tillbakavisar jag ert krav på betalning för ovanstående faktura, eftersom det inte finns något avtal mellan er och mig. Detta är således även en överklagan på beslut med ert registreringsnummer 20131504759002.

Skäl till beslutet

Fakturan skickades i samband med ett telefonsamtal från en tjänstemän. I en omprövning beslutade ni att telefonsamtalet från tjänstemannen utgjorde grund för att hävda att jag innehar teknisk utrustning för tv-mottagning, eller som lagen (1989:41 2§) lyder, ”utrustning som är avsedd för att ta emot tv-sändningar”.

Som jag har förstått det syftar ni på att jag har ”dator” med ”internet”. Detta är inte på något sätt i sig teknisk utrustning avsedd för att ta emot tv-sändingar. Nedan kommer jag att gå igenom min tekniska utrustning. Ni får ursäkta om jag inte ger källreferenser till varje specifikation, protokoll och standard som nämns, men de bör rimligen vara allmänkunskap för vem som helst i dagens Sverige som har nått högstadieålder (åk 7-9).

Som teknisk utrustning ”dator” åsyftas förmodligen en processor (CPU) med tillhörande kringutrustning för att nyttja denna beräkningsenhet. Detta har jag förstås, i form av såväl mikrokontrollers (”AVR”-chip), mobiltelefon (CPU med ARM-arkitektur) och PC (x86 samt dess 64bitars motsvarighet). Tillhörande detta finns även RJ45-anslutningar för ethernet, så jag kan programmera datorerna att kommunicera TCP/IP med fastighetens lokala nätverk. Dessutom äger jag 802.11b/g/n-kompatibla enheter som kan anslutas till flera av datorerna.

Alltså: jag har möjlighet att med mina datorer kommunicera med andra datornätverk – vilket vi förstås alla i dagligt tal refererar till med begreppet ”internet”. Men lagen kräver mer.

Låt oss försöka förstå varför jag bestrider fakturan i egenskap av att jag inte innehar ”teknisk utrustning” som lagen menar ska innebära avgiftsplikt till Radiotjänst. För att ta emot ”tv-sändningar” över internet idag så finns det förstås särskilda tekniska förutsättningar. För att bäst förstå dessa kan vi skapa analoger till icke-internetsänd televisionsteknologi:

Metod/utrustning ”Gammal” tv-sändning Internetsändning av tv
Antenn Koppartråd (el. annan metall) Internetanslutning
Sändningsinfrastruktur Trådlöst/kabelburet Trådlöst/kabelburet
Sändningsmetod (trådlöst) Broadcast (samma till alla) Unicast (endast en mottagare)
Sändningsmetod (kabelburet) Broadcast (samma till alla) Unicast (endast en mottagare)
Mänskligt gränssnitt (A/V) Skärm/monitor/högtalare Skärm/monitor/högtalare
Tv-mottagare Signalomvandlare i hårdvara (”integrerad krets” ofta kallat) Förfrågan + behandling i mjukvara (datorprogram)

Ovan kan vi se att tv-mottagaren, det enda relevanta för den avgift Radiotjänst avkräver mig, i internetsändningar numera är mjukvara. Mig veterligen räknas en tv-mottagare (de äldre hårdvarubaserade signalomvandlarna) som avgiftsbelagd oavsett kringutrustning. Lagen ska vara teknikneutral och därför bör endast mjukvaran i sig vara avgiftspliktig.

De jag känner som konsumerar tv över internet bekräftar att den mjukvara som behövs är Adobe Flash, vilken är proprietär (sluten källkod) och där man behöver ingå ett avtal med leverantören (Adobe) för att få nyttja den. Ingen av mina datorer har denna mjukvara.

Vore det så att tv-sändningar skedde med öppna och fria standarder och format skulle ovanstående argument inte vara lika övertygande. Sannolikt skulle en webbläsare med mediautbyggnaderna av HTML5 kunna räknas som ”tv-mottagare”, även om tv-mottagande inte är en webbläsares huvudsakliga syfte. Dock är så inte fallet idag och för att ta emot de sändningar som sker krävs mycket specifik mjukvara installerad på en användares dator.

Med ovanstående resonemang kring vad som utgör ”utrustning som är avsedd för att ta emot tv-sändningar” vill jag att Radiotjänst beslutar att inte kräva mig på avgift.

Mvh,
Mikael Nordfeldth
E-post: mmn@hethane.se

PS. Vore faktum sådant att sändningar skulle börja genomföras med öppna och fria format och standarder implementerade i fri mjukvara hade jag gladeligen installerat den utrustningen för mottagande av tv-sändning och betalat radio- och tv-avgiften. För jag vill gärna (i mitt hem) titta på SVTs kvalitetsproduktioner av utbildningsprogram, djupgående grävande reportage och samhällsanalytiska program. Att installera osäker, proprietär mjukvara och ingå i avtal med amerikanska företag känns dock inte som en förutsättning jag gärna uppfyller. DS.

Har jag teknisk utrustning avsedd för tv-mottagande eller ej?

Har initierat ett ärende om omprövning till Radiotjänst:

Det ringde någon till mig idag som hävdade att jag måste betala tv-avgift. Detta utan att förklara vilken tv-sändning jag kan ta emot med den utrustning jag har i hemmet.

Jag har ingen tv-mottagare i hemmet och har, som lagen beskriver det, ingen hårdvara (“teknisk utrustning”) som är avsedd för att ta emot utsändning eller vidaresändning av tv-program.

På något sätt försökte denna person få det till att innehav av dator och internetuppkoppling räckte för att uppfylla detta.

Dock är det allmänkunskap att en ordinarie persondator inte gör något utan tillhörande mjukvara, så för att undvika fördomar från Radiotjänst om min dators – eller dess programs – avseddhet till tv-mottagande vill jag förtydliga:

Jag har INTE mjukvara i någon av mina datorer som gör det möjligt för mig att efterfråga Internet-sändningar från dagens Internet-sändande tv-kanaler.

Alltså: om “teknisk utrustning” inte bara är hårdvara, så måste ju MJUKVARAN vara det som är avsett att ta emot tv-sändning. Jag har dock varken hårdvara eller mjukvara som är avsedd för tv-mottagande. Särskilt inte när det, i dagsläget, endast finns i form av resurser man uttryckligen behöver efterfråga med särskild mjukvara.

Ovanstående tycker jag är tydligt nog för att förtydliga att jag ej innehar tv-mottagare i mitt hushåll.

Notera att jag inte har något emot tv-licensen, jag tycker att SVT gör jättebra arbete. Jag har bara valt att inte inneha tv-utrustning i min lägenhet av privatekonomiska skäl.

Däremot tycker jag inte att Granskningsnämnden gör särskilt bra jobb. Det finns ju reklam för privata företag i var och varannat SVT- och SR-program som sänds (de där “sociala medierna” ni vet, som ägs av privata USA-baserade företag och samarbetar med underrättelsetjänster). Fler public service-program borde åka dit på sådan skitreklam.

GNU Social now supports WebFinger (RFC7033)

So, (slightly more than) another week has passed and GNU Social has received a couple of stability and feature updates. Nothing very visible for the end-user, but administrators may appreciate it. Going chronologically through the shortlog:

First I did some minor fixes, mostly language and specifications to make more clear that we’re working in the GNU Social software. This includes removing some StatusNet names here and there, specifying our system requirements (PHP5.3) and preferring a local url shortener to a remotely hosted one (privacy issue). The “8 chars was too little” apprehends queue handlers which in the future may use longer frame-identifiers (more declarative names).

b62ac25 PHP 5.3 dependency declared in INSTALL file
f009499 minor fixes and cleanups in the scripts directory
4c6803a GNUSOCIAL is the new defined indicator
c906ab1 8 chars was too little, 32 should be enough.
c3001ff url shortening fixes for api config and not ur1.ca
792e1ae StatusNet_HTTPResponse now prefixed with GNUSocial_
a35344e instanceof instead of is_a is faster (thanks quix0r)

One goal I have with code updates are making better use of OOP, object oriented programming. It results in prettier code, which is easier to read and harder to get wrong (what with proper typing and all that). One part in this was clearing up a remnant of old times, the ‘subs.php’, and implement the same functions in the Subscription class.

There were small problems during the execution of this patch, but it was fixed in the following commits. Among these fixes were the introduction of Managed_DataObject::listFind, which instead of an array returns the actual multiple matches in an extended DB_DataObject class.

93e878d Make better use of Subscription class
39f21d6 New Managed_DataObject retrieval: listFind
6330608 Subscription "get by" functions now don't use ArrayWrappers

Proper exception handling is also a neat thing. So I introduced the ‘MethodNotFoundException’ which is thrown whenever a class hasnot implemented a function. Usually that’s handled through abstract classes and class interfaces, but abstract declarations are apparently not allowed for static functions. So instead they throw the mentioned exception. Then there was also some regression and neatness fixing to do, where the regression was related to javascript functionality.

50e611a Shouldn't define static classes as abstract.
f711f9e Fixed regression in bookmark.js that caused double-submits (jquery 2.x stuff)
5f1fea1 FavorAction upgraded to extend FormAction
e9f2a18 Wrong call signature used for Event::handle
4ca1c10 IMPORTANT: 'GNUSOCIAL' defined, or daemons wouldn't work
8205c56 Stylesheet event now removed of StatusNet-remnants
9d3abc3 $_PEAR now defined globally as new PEAR, so no static calls are made
4015a58 Sometimes there's no text content, so pad the array (thanks mrvdb)

We now support PHP5.5, at least after the following series of patches. 5.5 makes sure that PHP is not a _pure_ steaming pile of dung anymore. So I had to clear up some old programming mistakes that didn’t convert types and shut down data streams properly.

In the middle of all of this, I took the chance to update some PHP libraries too because stuff like OpenID wasn’t PHP 5.5 compatible.

1744fec Array to string conversion in queuemanager logger
1c6f9df PHP5.5 fix: Better use of startXML for Action classes (mostly AJAX)
f268c3f Completing extra-element-without-text patch from 4015a58d1cfaa257fcf2b01aa6b1c9daa268c997
f01c478 htmLawed extlib updated
49b7559 Updating Janrain OpenID auth library
f7719b5 phpseclib extlib updated from phpseclib.sf.net
64df40e Filling in missing endHTML calls for Action AJAX
3ffe0e4 Added queue daemon notice about disabled forking functions
e9cc87f Updated some of the INSTALL documentation

A problem regarding URL shortening I noticed – if allowed notice length is infinite, then we ALWAYS shorten links (because two config settings were compared, where ’0′ meant entirely different things).

858d9cc maxNoticeLength test for url-shortening failed on maxContent==0

Some minor problems I managed to introduce earlier were fixed here. Also, I applied several patches by Joshua Judson Rosen (rozzin). Thank you for these (one year old) patches!

80c6af0 Uncaught exception when no subscribers/subscriptions in ProfileList
633191d Making sure scripts and tests check for GNUSOCIAL defined (instead of STATUSNET)
981295f Autocomplete action must exist on user registration
562d5bc Remove bad common_path() call in context of cssLink().
8e5d58f Make paging work correctly in the user-directory even with the default filter set (i.e.: `all' = `no filter', so intrepret `filter=all' as `no filter').
9844ec7 Make the ForceGroup plugin work consistently for notices from remote users.
9085880 Allow the hostmeta to indirect from one domain to another. e.g.: rozzin@hackerposse.com => rozzin@status.hackerposse.com.
8e53eb2 Correct a logic-inverting typo in handling of replies to group-posts. The typo causes a tautology, which makes replies to group-posts always (or almost-always) go to the group(s). cf. http://status.net/open-source/issues/3638
44f7ad6 Correctly distribute notices from remote posters through local groups to remote group-members via OStatus. Allow the OStatus queue-handler to handle all posts, and give it the smarts required to make correct decisions about whether it should or shouldn't relay notices over OStatus. cf. http://status.net/open-source/issues/3540

…and now to the big implementation of the week – WebFinger. GNU Social now properly supports, I believe, RFC7033. Plus of course the former RFC6415 (Web Host Metadata), which StatusNet supports (but only XRD format). GNU Social supports both with both JSON and XML resource descriptors (JRD and XRD). It was followed-up by some regression fixes which were caught rather quickly thanks to debugging with postblue who tracks the master branch.

What WebFinger does is simplify and standardise metadata retrieval for users, websites, devices etc. using unique URIs – such as acct:mmn@social.umeahackerspace.se or https://social.umeahackerspace.se/mmn. What we don’t do is make use of the ‘rel’ parameters. Yet.

This also removed the previously available StatusNet hack ‘xrd.php’, replacing it with the PEAR XML_XRD library. We could probably also use Net_WebFinger for lookups, but so far no one has contributed RFC7033-compatible changes to it. It means more lines of code, but less maintenance. Code reuse is awesome.

As a bonus, or rather instead of implementing Quitter’s API changes, I pushed some Avatar class fixes. These simplify a lot of the code, as can be seen in commit b0dfc70 which replaces multiple get-avatar-check-if-it-is-there-and-get-the-url-otherwise-get-the-default-avatar-url (+ I could get rid of Twitter-specific hacks that returned 73×73 sized avatars when they sometimes should’ve been 96×96 pixels).

a0e107f Implemented WebFinger and replaced our XRD with PEAR XML_XRD
a23c4aa Avatar resizing improvements and better code reuse
24e0535 Fix regression from WebFinger update for singleuser sites
cced063 Fixed regression in latest Avatar fixes
a7e7484 Fixed regression in OStatus sub from WebFinger/XML_XRD update
b0dfc70 Properly unlink all old avatars when deleting/uploading a new

Then I made some minor fixes to avoid filling up the avatar directory over time, and spamming the PHP error log with unnecessary notices.

1d46ca4 PHP Notice:  Undefined variable: logo
3e15bab PHP Notice:  Trying to get property of non-object

And lastly, I just now fixed a problem with a new behaviour in lib/plugin.php where all the Plugin extended classes (i.e. all plugins) automatically load files from their directory if they match desired class names. During WebFinger updates I introduced (for the LRDD methods) a snippet of code that replaces ‘_’ with ‘/’ so we can have a better directory structure for plugins which act like the LRDD plugin.

ba5e901 Plugin onAutoload replaces _ with / in lib paths, this renames some classes.

Thanks for reading. Now go federate!

Next week in GNU Social

I’ll post my little todo-list for the coming week’s development of GNU Social here:

  • Proper WebFinger support (draft 18). Preferrably both JRD and XRD style.
  • Add a Profile_prefs class, to avoid separate tables for every plugin’s preferences.
  • Implement qvitter’s API improvements

If I have time I’d also like to do:

  • Generic Avatar size retrieval (generate + cache on demand)
  • Notice retrieval interface through WebFinger.
  • Implement parent retrieval for orphaned posts.

Parent retrieval would of course not work until others also upgrade to GNU Social from StatusNet, or patch their installations with that specific functionality. However, considering the amount of broken conversations that comes with more federated users I think it’s very desirable.

First month of GNU Social fixes

In August I began the commit spree on the temporary GNU Social ‘master’ branch over at Gitorious. Temporary because the repository will likely in the future be under the ‘social’ project on that site.

Erkan recently asked for a roadmap of GNU Social development, but unfortunately I’m right now just going to give the next best thing – a summary of what’s been done the latest month. Starting after Evan’s currently last StatusNet commit at Tuesday July 16 2013, 2a70ed2: Merge branch '1.1.x', it was merged into the stone-age stuff of previous GNU Social code from 2010… and new development began. This is the story of our commits from 2013-08-12 to 2013-09-17.

First up, updating some libraries

I guess noone had dared touch the old piece of legacy PHP code that’s called “DB”, i.e. the ancient database abstraction layer StatusNet uses (and doesn’t really get used properly as there are many manual SQL queries in the code still). I didn’t dare do this either, but updates are always nice. So the first essential commit was updating the external library DB to its latest version:

7d8e199 Update to DB_DataObject 1.11.2

There was the idea to migrate everything to MDB2, which would still be able to handle the DataObject classes. However, since it still wouldn’t take care of the biggest problem – functions that are internally called by static methods but aren’t declared static – I figured it wasn’t worth the hassle. And the OpenID plugin supposedly would need lots of work… Anyway, if there’s anything we should do (besides drop PHP!) it’s to migrate over to PDO.

Long-standing merge requests

Then there was work to integrate some fixes from the list of merge requests and such which had not been taken into StatusNet master yet:

3ad3535 Merge commit 'refs/merge-requests/230' of git://gitorious.org/statusnet/mainline into merge-requests/230
ea837ce added missing return statement after showForm call
f433f7c if parameters are not 0, null then limit will be PROFILES_PER_PAGE
56cfd2b comparing a url scheme should be done case insensitively
1095f7a new plugin to check, store and migrate password hashes to crypt()
2e8b729 Issue 3636 request clarity for users without validated emails on instances with RequireValidatedEmail active
7eecd93 _m function for translation seems to be what we use
e47d9ad Added author name to modified file
d6cf6e8 letting the noticeform at the top show, to fix broken reply button javascript
bd60ab2 fix typo on provider_url
f11d157 visual presentation of group's homepage href was its local stream url
20bad68 Added SSL option to web and cli installers
38ac5a7 Automatic memcache support enabler for config
542f00f printf tries to evaluate "%" in paths, echo does not

This felt like a relief for me personally, having written some of those myself. Several other good people had submitted merge requests as well which were taken care of in this round. All the details are in the commit log.

One big problem for new users was also the extreme sluggishness that arises from such a huge, dynamic piece of software as StatusNet. So we automatically enabled Memcache detection if PHP has the module. It requires the administrator to run a local memcache server, but at least no further configuration has to be done after ‘apt-get install memcached’.

What makes GNU Social GNU Social?

And so it became time for a distinction that separates GNU Social from StatusNet somewhat. Something which bothered me in every fresh install I ever made, too:

794163c Default to NOT ask for current location for new users

Privacy. At least we shouldn’t stalk fresh users by asking them where they live everytime they try to post stuff! Another privacy change had already been made (20bad68 regarding SSL-on-install), but this was the first that would immediately affect user experience. SSL improvements were made later as well (commit 81a357e), where a site configured as SSL ‘sometimes’ would never redirect users to http://.

Major overhaul of dataobjects

In a couple of steps to reduce code redundancy and ease future migration to better DB abstraction layers, many of the following commits were directed at the ‘classes/’ directory, finally taking some of the dataobjects to inherit “Managed_DataObject”. Which means that everything from caching to specifying data structure becomes much easier not to say more flexible.

0cb5b6f No need for newline when running 'echo'
3394efc staticGet is a static function
d115cdd Managed_DataObject gets dynamic class detection for staticGet
1a9a8ea staticGet for sub-Managed_DataObject classes now calls parent
6c4c431 Plugins with classes that extend Managed_DataObject get better code reuse
c36608b Some statically called functions in plugins now declared statically
e95f77d Updating all Memcached_DataObject extended classes to Managed_DataObject
2a4dc77 The overloaded DB_DataObject function staticGet is now called getKV
ade2bdc Bookmark class now has schemaDef (for Managed_DataObject)
1710a61 Magicsig class now Managed_DataObject with nicer schemaDef
861e838 pkeyGet is now static and more similar to getKV
3ce5631 Memcached_DataObject::multicache is now properly defined static
7e4718a IMPORTANT - fixed Magicsig to properly overload getKV (prev. staticGet)
761a849 Added shared default plugin list between profiles
923f16a Properly definingStatusNet class static functions with 'static'
97ce71e Managed_DataObject now has listGet for all classes
0785cc2 Don't use DB_DataObject::factory (statically at least)
d5f82bb Class wasn't used anywhere, and file contained wrong class
e40044e Further static declarations of functions
6f4c572 Unnecessary UTF-8 declaration for database
b1465a7 We can now do late static binding (PHP >= 5.3)
3a7261f IMPORTANT: Making prev. Memcached_DataObject working again with schemaDef
66997f2 OStatus classes now has modern schemaDef
0bbcfa7 IMPORTANT - fixed HubSub to properly fetch primary keys
4fab7a9 GNU Social extensions fixes (please read note)
40fe10e Woops, forgot auto_increment (comes with 'serial')
b6cfcfb More info for a proper, fancy-url lighttpd setup

…and during this time the code was broken several times. Part of the fixes also included depending on PHP >= 5.3, which means we can rely on much better object orientation and snazzier functionality (such as late static binding). Unfortunately several problems still exist internally in the DB abstraction layer, where it calls its own non-statically defined functions with static methods. So the ‘PHP Strict Standards’ warning bells keep going off all the time – and still do even after all of the commits in this post.

One important thing that changed during these commits however was the Memcached/Managed_DataObject API, where instead of calling the DB_DataObject function staticGet (which wasn’t static!) it has been renamed getKV (for getKeyValue). Some other related data-fetching functions were also renamed and changed throughout the codebase.

Code reuse is a good thing, viva la OOP!

Then there was a big one. Standardising the way class files are autoloaded, which had already been kinda-maybe-half-made in previous StatusNet code, I went through a lot of the code for plugins and could remove tons of lines of code with statically assigned ‘include_once’ lines. Instead it is all generally handled in the Plugin parent class for the event onAutoload. Many files were moved and renamed in the course of this commit, as they all would fit the same pattern, which can be seen in lib/plugin.php.

de55d8f plugins onAutoload now only overloads if necessary (extlibs etc.)

And then some more cleanup and fixing

More merge requests and general fixes that had been noticed while digging around in the code were implemented.

cb94a29 Syntax error in XMPP config example
fac7371 pivotGet moved into Managed_DataObject
b3e61ce Stronger typing, require array where param array
79e3acf Moved multiGet into Managed_DataObject
f042eea removing empty "planned" GNU Social plugins
07ca304 Changes to GNUsocial plugins
bd24ab6 Fixed comment description in STS plugin
47eb3cf db/core.php lacked User_username (Issue 3299)

And some new parent classes

When working on Free & Social, I rewrote some major parts of the code. A lot of it isn’t quite finished yet (like the theme engine migration), but many bits and pieces can be put back in to GNU Social. Like the fact that just about every Action where one interacts with a form can inherit, and standardise to, a ‘FormAction’ class:

8d57fb7 Added a FormAction extension
cfa699e NewgroupAction converted to extend FormAction
83000f6 Proper definition of $args array in NewgroupAction->prepare
c735a83 Conforming to code layout
0612e5e NewnoticeAction converted to extend FormAction
89b1066 IMPORTANT: parent::handlePost() in NewnoticeAction
e5e3aeb newmessage (and Message class) fixed for FormAction
f0e967f needLogin renamed checkLogin and made a property
b2a0aa2 NewapplicationAction converted to FormAction
c5bf6cb Using a bit more of $this->scoped (Action parent class)

As you can see I migrated a couple of actions as well, but many still need work. And an introduction of a SettingsAction parent class would also be very good!

Tidying up, cleaning and implementing merge request

Back to house cleaning. Some code improvements were made where little effort was needed. Strict typing is very important if one doesn’t enjoy headaches while reading and debugging code. So some of that was introduced (and a little bit more would come later):

747fe9d Tidying up getUser calls to profiles and some events
a9c4bcd Removing unnecessary require_once lines (autoload!)
99312c8 Declaring some more static functions properly
81a357e Putting in functionality so that sites with the "Sometimes" SSL setting allow for users with plugins such as HTTPSEVERYWHERE who wish to use HTTPS to do so without having errors pop up. Specifically this references this issue: http://status.net/open-source/issues/3855#comment-48988.
ade8c69 Twitter cards implementation. Currently only supports 'photo' cards.
f0d86cd Add 'twitter:title' meta tag support.

jbfavre’s Twitter updates were also implemented. I actually haven’t tested these, but jbfavre is a good person whom we can all trust.

The Big JQuery Update

Yes, the web uses Javascript incredibly much today. And unfortunately GNU Social currently even depends on it for full functionality. That’s something I wish to change, to avoid a dependency on automatically executing programs in the browser. But it can undoubtedly increase usability. So updating JQuery to its latest version was next on the todo list:

1eead02 Changed bind() and unbind() to on() and off(). Shortcut for (document).ready().
6fa9062 Changed bind() and live() to on(). Changed .attr() to .prop() for checked and disabled. Shortcut for (document).ready(). This is the first attempt to convert live() elements to on() according to http://api.jquery.com/live/.
af4f2a1 Changed .attr() to .prop() for checked and disabled. Removed "style" removal which I assume was tied to opacity setting on line 9. Replaced "style" setting via attr() on line 12 with css().
1757a65 Shortcut for (document).ready(). Changed .attr() to .prop() for checked and disabled.
3efa107 json2 extlib updated to 2013-05-26 version
a56ad2c Updated jquery extlib to v2.0.3
a4d04d2 Fixed regression from util.js updates + syntax cleanup
3858897 farbtastic removed along with userdesign stuff
dfa1b15 Changing js .live calls to .on for jquery 2.x
438685b jquery javascript was moved to js/extlib
2da9288 jquery-ui updated and moved to js/extlib
56ebe91 jquery form updated and moved to js/extlib
4f065d6 Removed jOverlay as it's outdated and not referenced
0731207 updated jquery-infieldlabel from 0.1.2 to 0.2.1
31bace8 updated and moved jquery-jcrop (no longer .min.js)
3604924 updated and moved jquery-cookie
11f4363 Fixed regression from jquery-cookie update
6de3fc0 jquery 2.x update related fix (.die no longer defined)
5e24600 Minified javascripts are evil! Human readable source, please!
1775fce Added new config for lighttpd.conf that worked on my 1.28 setup.
4822965 Event::handle only takes array $args
83b8523 Events on user registrations now strictly typed
d480ed4 Gravatar pretty much equals disregarding privacy
8935a2f Autocomplete migrated to jquery-ui autocomplete
8140c4f Bad call to joinAdd in Profile.php

It seems to have worked well for me, at least! I believe many of these commits can be imported without any of the previously listed ones, as they should only touch javascript files and some small portions of fairly static code. A modern JQuery library can help a lot to make GNU Social clientside development interesting for more people!

Some of the commits in the latest list are unrelated to JQuery updates (essentially all of the last ones except 8935a2f), but are instead part of tidying up and making the code stricter and less redundant. Many scripts are even thrown away, as they were never referenced anywhere in the code (such as farbtastic and jOverlay).

My favorite commit was “5e24600 Minified javascripts are evil! Human readable source, please!”. In the future we should also have a closer look at LibreJS for compatibility and compliance!

NOTE: A regression was made in jquery 2.x fixes, so please cherry-pick commit f711f9ee7551ac0fe59f1cdc5a375d4825d93e3c too if you’re annoyed with double-submitting favor forms and such ;)

…I leave it to the future to come up with a roadmap for the future :)

Projektrapport StatusNet Sverige (Internetfonden vt2012)

Projektrapport StatusNet Sverige

Mottagare av Internetfonden-stipendium vt2012.

Projektansvarig: Mikael Nordfeldth, mmn@hethane.se

Målsättning

”Målet är att 2013 ha nått 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.”

Resultat

På grund av nedvarvning av företaget StatusNet Inc, vilka hanterar inkommande patchar för mjukvaran StatusNet, så implementerades väldigt få rader kod i den officiella programdatabasen. Detta hanterades genom att starta en egen förgrening, som kom att kallas ”Free Social”1. Med denna metod kunde utvecklingen fortgå med samma kodbas som StatusNet och på så vis kunna bidra till communityn, som består av många separata serveradministratörer vilka tack vare den fria licensen (AGPL) kan modifiera sina egna installationer.

Mål Specifikation/mått Antal Uppnått
Att nå ut till fri mjukvaru-utvecklare Antal utvecklare som bidragit till SNS 15 4
Integrerad klient gentemot slutna communitys procentandel av antalet större/unik funktionalitet 80 50
Mediauppmärksamhet Antal mediala omnämningar av projektet i rikstäckande/internationell media 30 2

 

Mätetalen uppnådde absolut inte projektets önskade värden, vilket var synd. Det upplevdes signifikanta problem med att nå ut till fri mjukvaru-utvecklare, mycket eftersom mjukvaran StatusNet på egen hand är ett mycket stort projekt och således tidskrävande att sätta sig in i.

Procentandelen större/unik funktionalitet från slutna communities utvecklades till nivån där tvåvägskommunikation var fullt genomförbar mellan individer. Däremot t.ex. uppnåddes inte önskvärd funktionalitet för tvåvägskommunikation till motsvarande ”Sidor”/”Grupper”. Mycket eftersom konceptet ”sida” (som fungerar både som grupp och användare samtidigt) inte hade en analogi i StatusNets implementation. Detta var alltså en begränsning i mjukvaran och inte protokollet Ostatus.

Funktioner som ”fotoalbum” och dylikt implementerades i grundläggande form som plugins till StatusNet men nådde aldrig tvåvägskommunikation med någon sluten tjänst.

Mediauppmärksamhet var svårt att fånga till sig. Sverige Radio P4 Västerbotten visade intresse för projektet eftersom det var lokalt. Projektmedlemmarna upplevde att det var svårt att kommunicera nyttan för en decentraliserad och självdriven webbtjänst till allmänheten.

Kostnader

Hacknights blev billigare än väntat per tillfälle, så vi höll helt enkelt fler av dem istället. C:a 2st i månaden blev det i genomsnitt. Lokalhyran blev som planerat eftersom det var en förförhandlad kostnad.

Aktivitet Budget Kostnad
Hacknights (12st) 5000 4800
Lokalhyra 20000 20000

Utvärdering

Medan projektets mål inte har nått upp till den nivå som behövts har verksamheten definitivt bidragit till utökad verksamhet inom gemenskaper på nätet som arbetar för federerade, decentraliserade nätverk. De som varit involverade i projektet genom Umeå Hackerspace tycker att utvecklingen möjligen sker långsamt, men det är samtidigt en bra egenskap i processerna för standardisering. För närvarande finns det en uppsjö olika, helt separata, projekt för att uppnå så gott som samma mål. Av dessa kommer framöver någon gång en eller ett par att ställa sig över de andra i funktionalitet, när de mer praktiska fördelarna istället för teoretiska kommer fram.

OStatus som protokoll står sig dock fortfarande starkt eftersom det är direkt kompatibelt med existerande nyhetsflöden som levereras genom RSS och Atom-format. Tyvärr har många av de slutna ”sociala” tjänsterna, såsom Facebook och Twitter, upphört att leverera data på detta vis. Något som givetvis känns som ett direkt slag mot interoperabilitet mellan tjänster och valfrihet för slutanvändare.

Vidare har Umeå Hackerspace utvecklats som organisation och förening genom dessa möjligheter att samarbeta kring ett gemensamt projekt och dessutom hålla öppet i sina lokaler för även andra nyfikna. Det i sig gynnar absolut internet eftersom fler ideella krafter med öppenhet som mål träffas och kan planera tillsammans.

Bonuspoäng

I och med att StatusNet började avveckla sin verksamhet, i förmån till en ny satsning som kallas ”Pump.io”, tyvärr inkompatibel med samtliga tidigare federerade nätverk, så innebar det att kodbasen inte längre utvecklades av de som innehöll varumärkesrättigheterna. Ett samarbete inleddes mellan StatusNet och Free Software Foundation, där rättigheter under 2013 ska lyftas över från StatusNet Inc. till Free Software Foundation och namnet bytas ut till ”GNU social”2. Mikael Nordfeldth valdes tack vare sitt arbete genom StatusNet Sverige-projektet till co-maintainer för ”GNU social” tillsammans med Matt Lee3.

Fotnötter

1 https://www.ohloh.net/p/freesocial – Free Social is a fork of StatusNet which aims to make the codebase smaller, leaner, neater and more modular.
2 https://www.gnu.org/software/social/ – GNU social, true to the Unix-philosophy of small programs to do a small job, will be a federated social network that you can install on your own server.
3 https://www.gnu.org/software/social/merge.html – Free Social developer and founder, Mikael Nordfeldth and GNU social founder, Matt Lee will co-manage the project.

Skrafsplatta för mmn-o.se