eBookserver v0.9 is here!

Het heeft enige voeten in de aarde gehad, maar de eBookserver lijkt bijna af te zijn! Bijna, zeg ik wel. Voordat v1.0 kan toegekend worden, moeten enkele bugs/features nog worden aangepakt. Dingen zoals: een pdf toevoegen bij het aanmaken van een nieuw ebook lukt niet, je moet eerst een ebook aanmaken, en dan de pdf aanpassen. Of: tags kunnen wel aangepast/toegevoegd worden, maar niet verwijderd.

De voeten in de aarde hadden vooral te maken met het leren kennen van de frameworks, en dan nog de integratie met elkaar. Itereren over een array bijvoorbeeld, kan in javascript al op verschillende manieren, maar ook jQuery en Knockout.js hebben hun eigen helpers hiervoor. Soms is het pure voorkeur, maar met observable arrays werkt enkel de Knockout-helper, en de rest niet. Of met de specifieke asynchronous-manier van werken: op zich werkt dat zeer prettig, maar als je er één synchronous call achter zet kan je zeer vreemde resultaten krijgen. Vooral omdat je niet per sé ziet of een functie sync of async is: je moet het eigenlijk zelf weten.

Andere leerpunten: door alles met AJAX-calls te doen, stuur je data steeds in JSON over en weer. Heel makkelijk, maar als je ineens bestanden moet oversturen, gaat dat niet met JSON. Met de form POST methodes ging dit wel gewoon: nu moeten er dus 2 calls gebeuren, 1 om de files via een multiform/data post  te versturen, en 1 met de JSON data (dit zorgt dan echter voor problemen met de PDF van een nieuw ebook).

Oja, nog een feature die op het lijstje van de v1.0 release staat: type-ahead voor de search functionaliteit en tag-invoer. Maar dat zou moeten lukken, net als de rest. Natuurlijk, zoals altijd, eerst zien en dan geloven 🙂

eBookserver v0.9 is here!

Frameworks, frameworks, frameworks…

Ongelooflijk om je nog eens te verdiepen in de “hippe” front-end frameworks. Meestal JavaScript-based, wat toch een ander programming model (asynchroon, event-based) is waar even aan gewend moet worden.

Hoewel ik eerst dacht er met node.js en een DB-module voor MongoDB te zullen geraken, bleek dat vrij naïef. Om niet zelf een webserver te moeten opzetten werd Express ingeschakeld, wat eigenlijk een beetje een standaard lijkt te zijn bij het werken met Node. Om HTML te renderen, gebruikt Express standaard een template engine, Jade genaamd. Deze voert echter een andere syntax in, die dan omgezet wordt in HTML. Het voordeel daarvan ontgaat me volledig, en de syntax is dan nog eens positie-gevoelig (als je een indent van 3 spaties ipv 2 spaties gebruikt kan hij er al niet meer aan uit), waardoor ik er al helemaal niet aan wou beginnen. Gelukkig kan je in Express andere template engines opgeven, waarvan Hogan me het meeste leek aan te staan. Eigenlijk schrijf je gewoon HTML, en voeg je variabele waarden toe volgens de Moustache.js manier (ook dat framework moest dan eens bekeken worden). Eigenlijk een makkelijke manier van redeneren als je server-side PHP gewoon bent.

De UI leek dus in orde te komen. Langs de DB-kant is er ook wat gezocht. Er lijken 3 voorname package-opties te zijn voor het gebruik van MongoDB binnen Node.js: mongodb, monk en mongoose. mongodb deed me het meeste denken aan een gewone DB-driver, waarbij je letterlijk vanuit node je DB aansprak. Het tegenovergestelde leek Mongoose te zijn, wat voorgesteld wordt als een echte object-relational mapper (ORM). Monk zit er wat tussenin. Voorlopig ben ik gesetteld voor Mongoose. Deze leek het simpelste in configuratie en gebruik, hoewel hij ook zijn eigen complexiteit meebrengt.

Op basis van deze frameworks begon ik de ebook-server op te bouwen. Al snel had ik een REST-api voor de DB draaiende, op basis van Node, Express en Mongoose. So far so good. Bij het ontwikkelen van de UI bleek toch dat de opbouw die ik in gedachten had tot een vrij complexe structuur leidde, die me niet ideaal leek. Veel van wat in de UI gebeurde, werd terug naar de server gestuurd, die een nieuwe template moest renderen, enz. Het leek logischer om meer van die template-logica bij de UI in de browser te houden. Vandaar: nieuw framework: Knockout.js. Dit levert een variant op het Model-View-Controller patroon, wat ze een model-view-viewmodel noemen. Op deze manier kan ik aan de DB-kant enkel de REST-services doen, en de UI-kant hier koppelen via AJAX-calls.

De huidige koers ligt dus voor de server-side: node + express + mongoose (en hogan, maar die doet eigenlijk niets), en voor de client-side: jquery + knockout + bootstrap (voor snelle styling).

Zoals gezegd, ik wou wat bijleren, maar moest ik bij Apache, MySQL, PHP en HTML gebleven zijn zou het al wel lang klaar geweest zijn 🙂 Natuurlijk, dan waren er geen REST services of one-page-apps. En minder fun 🙂

Frameworks, frameworks, frameworks…

Installing software components

De voorbij 2 avonden bezig geweest met een nieuwe image voor de RaPi aan te maken met de nieuwste Raspbian en een basis-set van componenten draaiende te krijgen. Enkele nota’s voor toekomstige installs:

Volgende stap: tutorial op http://cwbuecheler.com/web/tutorials/2013/node-express-mongo/  overlopen om vertrouwd te geraken met de express en jade libraries van Node.

Installing software components

Exploring Software Components

Omdat de raspberry pi geen volwaardige server is, leek het me beter om wat light-weigt serversoftware te onderzoeken voor de eBook server. (Eigenlijk wou ik gewoon enkele frameworks verkennen :-))

Als webserver zou ik, in plaats van Apache, Node.js uitproberen. Hierover is veel documentatie beschikbaar, ook ivm gebruik op de Pi.

De database zou MySQL kunnen zijn, maar om een eerste kijk te nemen in de NoSQL-wereld, dacht ik om MongoDB eens te proberen. Hiervoor zouden reeds binaries ter beschikking zijn, dus installatie zou moeten lukken.

Exploring Software Components

RIP, Birthday Card?

Net nog eens een paar testen gedaan met het geboortekaartje voor lotte, maar de display geeft geen krimp meer. Het lijkt erop dat deze getoast is, waarschijnlijk door kortsluiting tijdens het bijeensteken (“proppen”?) van de draden in de behuizing.

Bij de volgende bestelling een nieuwe 8×8 matrix en MAX 7219 bestellen, en verder proberen! Never give up, never surrender!

Front van het geboortekaartje, 1e Dremel job ooit :-)
Front van het geboortekaartje, 1e Dremel job ooit 🙂
Teveel draden in een te kleine ruimte? (om niet geïsoleerd te zijn)
Teveel draden in een te kleine ruimte? (om niet geïsoleerd te zijn)
RIP, Birthday Card?