PuSH deel 4

Ik had beloofd nog 1 of 2 delen te publiceren over PuSH, het realtime publicatiesysteem van OBA. Die teksten waren er al, maar er zijn inmiddels wel wat nieuwe ontwikkelingen en getackelde problemen.

Hier komt de oorsronkelijke tekst, met hier een daar wat nieuwe ontwikkelingen :

De laatste stap was het integreren van de PuSH feed in de voorpagina van OBA.
OBA gebruikt een plugin om RSS en Atom feeds te lezen, en de code van de voorpagina steunde op faciliteiten die de plugin beschikbaar stelt, zoals het veranderen van “the_permalink”. The_permalink is een wordpress functie die een link naar je bericht naar het scherm schrijft. Heel handig voor als je een voorpagina met samenvattingen hebt, dan kun je overal een linkje naar de volledige tekst plaatsen. Als je daarentegen feeds publiceert die vaak uit niet meer dan een samenvatting bestaan, is die link nutteloos. Hij zou moeten verwijzen naar de website waar de feed vandaan komt. Daarom heeft de feed-reader plugin de mogelijkheid om “the_permalink” om te zetten naar zo’n externe link.
Als ik echter via XML-RPC publiceer, wordt dat door wordpress niet gezien als “extern”.
Ik kon natuurlijk ook gewoon “the_permalink” overschrijven, zodat de template-code van de OBA-voorpagina niet hoefde te worden aangepast, maar ik heb een andere oplossing gekozen. Omdat de al gebruikte feed-reader software een functie “is_syndicated” beschikbaar stelt, kon ik bestaande feeds apart behandelen.Is_syndicated is gebaseerd op het feit dat posts die via de feed-reader plugin geproduceerd zijn worden opgeslagen met een extra kenmerk in de postmeta tabel. Dat leek me handig, want dan kon ik de template verbouwen zonder dat bestaande functionaliteit er iets van zou merken. ( uiteindelijk bleek deze oplossing niet praktisch, omdat de “permalink” ook via de uitgaande mails verstuurd werd. Het werkt nu zo dat PuSH eveneens “the_permalink” gebruikt, zodat andere plugins werken alsof te aangestuurd worden door feedwordpress i.p.v. PuSH )

1 Van de dingen die ik veranderde, was het gebruik van “the_shortlink” in plaats van “the_permalink”. Dat biedt de mogelijkheid om 2 alternatieve links te gebruiken.
Maar wat ik vooral wilde veranderen, was het toevoegen van een afbeelding. WordPress kan bij elk bericht een “featured image” opslaan. In het begin van OBA was dat een grote afbeelding boven het blogbericht, maar daar zijn we snel van afgestapt, omdat het te druk was en teveel ruimte innam. Maar een klein plaatje leek me toch wel leuk, in verband met de vele fotobloggers die er maar bekaaid afkwamen met alleen hun naam op de voorpagina. Ina was snel overtuigd van de toegevoegde waarde.

XML-RPC staat het uploaden van afbeeldingen toe. De afbeelding wordt daadwerkelijk als XML verstuurd, zoals bij podcasts ook het geval is. Hoe ik het werkend moest krijgen was wel even puzzelen, want in eerste instantie werd het plaatje verminkt door XML-RPC. XML-RPC verwacht tektsdata, geen binary, maar er bleek geen codeer/decodeer mechanisme aanwezig te zijn, althans, ik kon het niet werkend krijgen. Uiteindelijk heb ik het opgelost door te ontvanger voor plaatjes base64 coded data te laten uitpakken. Zo kan ik alles opsturen wat ik wil, al moet ik het plaatje aan de zendende kant natuurlijk met dezelfde methode inpakken. Base64 gecodeerde data kent een overhead van 33 %, maar bij plaatjes van hooguit 2 kilobytes waarvan ik er 50 per dag verstuur is dat nauwelijks relevant.

De fat-ping ontvanger kijkt nu dus tijdens het maken van de samenvatting of er een image tag in het bericht zit, en zo ja, dan haalt hij het plaatje op ( zoals een browser dat zou doen ), verkleint het m.b.v. in PHP ingebouwde grafische functies en verstuurt het naar de OBA XML-RPC server als media-object. Door een aanpassing die ik daarin aangebracht heb, maakt het bericht dat ik daarna stuur een featured image van het eerste niet-gekoppelde media object. Dat gaat goed, omdat het plaatje en het bericht direkt achter elkaar verzonden worden. Omdat WordPress voor de “featured image” een aparte template functie heeft, konden we die mooi uitlijnen op de voorpagina. Waar de afbeelding in het oorspronkelijke bericht stond is niet relevant. Afbeeldingen worden ongeacht het oorspronkelijke bestandstype omgezet naar JPG, dus we worden niet getrakteerd op o zo leuke knipperende GIF’s.

Wat verder nog nodig bleek, was een functie om “dubbelen” te filteren. Telkens als iemand “Publish” zegt, krijg ik een ping. Er zijn mensen die na de eerste publish nog 5 keer wat aanpassen. Gelukkig kan ik aan het “guid” veld in de feed zien om welk bericht het gaat. Ik sla de guid’s en subscriber-nr op in een databasetabel, die ik raadpleeg voordat ik het bericht doorstuur naar de OBA server. Als het niet nieuw is, wordt het genegeerd. Voorlopig is het dus zo dat de oorspronkelijke titel niet automatisch gewijzigd kan worden op OBA. Een filtering op meerdere berichten van dezelfde auteur is op OBA als eerste ingevoerd, maar het is als laatste gemaakt. Beslist nodig, als je alles automatisch maakt. Wat er ook bij moest, was een aanpassing in de categorieën. De software die de oude feeds verwerkt had de mogelijkheid om een categorie toe te voegen aan een gebruiker, omdat sommige gebruikers altijd fotoblogs produceren, maar dat niet in hun categorie of tags zetten.

Bestaande problemen
Web-log.nl ondersteunt het PuSH protocol in theorie, maar in de praktijk komen pings met 6 uur vertraging of helemaal niet door.
VKblog ondersteunt PuSH helemaal niet. Bloggers met eigen software moeten nog meewerken door een PuSH ondersteunende plugin te installeren. ( weblog en vkblog zijn inmiddels overleden )
De samenvatting pakt soms een verkeerd stukje tekst mee van een blog. De “verder lezen” links worden in sommige gevallen veranderd in gewone tekst.

Extra mogelijkheden bij subscription
Ik heb een extra tabel toegevoegd waarmee de onderhoudsvriendelijkheid en flexibiliteit van de oplossing flink toenemen. Tijdens het testen waren veel dingen hard gecodeerd. Op het moment dat we in productie gingen, heb ik een extra tabel gecreeerd waarin die dingen konden worden vastgelegd.
– er is nu een veel <-> veel relatie tussen blogs en OBA user-nummers
– er is een onbeperkt aantal categorieën per subscription mogelijk
– er zijn nu 2 ontvangende websites, OBA en testblog kunnen naast elkaar posts ontvangen

Toekomstige aanpassingen
Veel dingen kunnen nu veranderd worden zonder iets te wijzigen aan de OBA website, maar een nadeel is, dat de gebruikte server altijd aan moet staan. ( m.u.v. tijden waarop gegarandeerd niemand publiceert )
Het eerste dat er moet komen, is een backup-optie, zodat die server af en toe uit kan. Liefst helemaal automatisch, zodat ik niet met de hand ip-adressen of NAT-tabellen in de firewall hoef aan te passen. Het zou ook mooi zijn als we de software konden hosten bij een cloud-dienst zoals Google die aanbiedt, zodat ik me geen zorgen hoef te maken of die server het nog wel doet. PuSH gaat heel groot worden.
OBA gaat ook heel groot worden 🙂
( naschrift : dit artikel is al een paar weken geleden geschreven. We hebben nog wat toegevoegd : sommige mensen willen niet dat je alles wat ze publiceren op OBA zet. Voor die mensen is de “filter-optie” die ook in de oude feed-reader software zat, toegevoegd, zodat ze zelf met een category of tag kunnen aangeven wat gepubliceerd moet worden. Pings blijken weleens gemist te worden. Ik heb een “alles lezen” optie toegevoegd, die op de oude manier een RSS feed ophaalt en die behandelt als een fat-ping. Dat heeft als voordeel dat de plaatjes mee komen en dat de administratie blijft kloppen.

Naschrift 2 :
We hebben oneindig veel problemen gehad, doordat een verbinding via HTTP niet gegarandeerd is. In 10 % van de gevallen komt er gewoon geen antwoord op een XML bericht, terwijl het bericht dan in 99 van de 100 gevallen wel ontvangen is. Gewoon nog een keer sturen levert dan een probleem op, vooral omdat er ook een koppeling tussen de plaatjes en de berichten moet blijven bestaan. Het probleem is aangepakt door bij “geen antwoord” niet hetzelfde bericht nog een keer te sturen, maar te vragen wat het laatst ontvangen bericht is. En die vraag net zo lang te herhalen tot er een antwoord komt.

Er blijken veel pings ontvangen te worden met meerdere berichten er in. Er moest iets gebouwd worden om te zorgen dat het meest recente bericht op de voorpagina kwam. De bestaande software stuurde van elk gevonden bericht een verkleinde versie van de afbeelding naar OBA. Dat leverde veel afbeeldingen op die we niet nodig hadden. Ze worden nu onderdrukt, door het versturen van afbeeldingen uit te stellen tot alle berichten in een ping beoordeeld zijn.
Van sommige blogs krijgen we een hele serie identieke pings tegelijk. Het ontworpen locking-mechanisme bleek niet te werken en is vervangen door een ander.

We hebben problemen gehad met beveiligingssoftware van sommige blogs, en met spontaan beeindigde subscriptions. Vooral dat laatste blijft ons veel werk bezorgen.

De software die de mailtjes verstuurt kan niet omgaan met diacritische tekens in titels. Laatst probeerde ik er wat aan te doen, en toen ging de site op zwart. Het probleem zit op een gevaarlijke plek.

Read Offline:
This entry was posted in Wordpress and tagged , , . Bookmark the permalink.

Leave a Reply

Your email address will not be published.