Umf, porto 2 dies sense dormir, i sembla que per fi estic superant aquesta mala costum

. Algun dia hauré de probar
aixo.
Aquests dies he estat molt liat amb el tema del doblog...de vegades em fico amb coses les quals no hauria d'haver començat, ja que el que va començar com un blog minimalista...ara esta creixent de forma considerable en quant a features i possibilitats. I tot mantenint un funcionament unix-like.
Fa uns dies vaig veure el codi de
www.undeadly.org que curiosament han fet algo molt semblant al doblog, pero integrant-lo amb l'htdig i fent-lo tot en una CGI. Cosa que no esta gens malament, pero que...no ofereix els requeriments que necessito i modificar-lo pot ser una feinada terrible.
Aixi que he optat per seguir programant pel
doblog, per tal de tenir-ho enllestit i poder-ho mantenir d'una forma raonablement coherent.®
Overview
doblog esta partit en 4 parts, pero no implica que haguem de tenir les totes instal.lades, ja que dependrà de les nostres necessitats.
doblog.pl - Un petit script en perl que llegeix una base de dades en format MXML
(Minimal XML)(format XML lleuger que m'he inventat per poder emmagatzemar les dades, que consisteix en no tancar mai cap tag excepte l'arrel '<post>'). Quan l'executem el programa llegirà la configuració del blog de:
blog.conf, i utilitzarà els templates que desitgem de
doblog/, per generar-nos finalment tots els .html del index, els posts, les categories, els arxius, comentaris, etc.
doblog-web-admin - La interficie web que mai pot faltar en un blog perque els usuaris imbecils perdin més temps buscant menús i icones que buscant les tecles. Aquesta part esta feta en PHP i requereix (obviament) de PHP a server-side. A partir d'aqui podrem fer qualsevol acció per gestionar el blog, manejar els posts, les categories, la informació de l'usuari, les preferencies del blog, etc... en altres paraules,
data/blog.conf (configuració publica) i
admin/config.php (configuracio privada).
doblog-cmdline - Petita utilitat per linea de comandes que em(ens) permetrà
(encara no està feta) crear usuaris nous, canviar contrasenyes
(aka paraula de pas pels repelents), fer backups, ...
doblogd - Aquesta es una altre de les conyes del doblog

ja que la idea es fer un blog unix-like...doncs que menys que afegir-hi un dimoni. El codi l'he escrit aquesta nit i bé... com tothom sap, les drogues només són bones per programar, aixi que he fet un fitxer de configuració de lexica no fixe, és a dir, que permetem que l'usuari escrigui com a ell li sembli millor les directives i es el daemon l'encarregat d'interpretar-les, aixi l'usuari no s'ha de preocupar en escriure-ho de forma estricta.
Aqui pastejo un fitxer de configuració d'exemple, perquè us masturbeu una mica:
console:
# This is just a sample configuration file
the blog base directory is here : /home/www/blogs/
one blog : decano
another blog here : pancake
# Timers and delays
#comments delay : 2 minutes and 3 seconds and 4 hours
comments delay : 3 second plus 1 second minus 1 second
# Features
mail on new comments : yes
make backup every : 60 seconds
backup directory is : /tmp
No crec que calgui gaire explicació, si us voleu mirar el codi del parser està aqui:
config.c.
Aquest daemon permet la comunicació transparent a partir d'un FIFO, d'aquesta forma el PHP pot tenir deshabilitades les execucions (system(); execve(); ...) i seguir funcionant (activant el mode RPC al config.php o desde l'administració web). El dimoni es l'encarregat de comprobar que tot es faci correctament.
De la mateixa forma el daemon al incloure els comentaris pot cridar a un programa extern per fer un checkeig de spam (p.e. bsfilter), aixi podem evitar que ens entri spam al blog

Encara que porto un bon temps funcionant amb ell i sembla que no entra spam, ja que al ser un protocol no estandard, els spammers no ho detecten i suden

.
Internals
Ara que ja entenem quina es la feina de cada part, ja puc explicar com fer-lo rular

. De bon principi aquest blog el volia per mi i per mantenir alguna web més en plan vago (
bee.es.gnu.org,
www.nopcode.org).
Pero clar, tota l'administració la pretenia fer per linea de comandes, per no pasarme hores i hores fent una cosa que probablement no faria servir mai.. Aixi doncs tot comença editant un nou post enel
data/blog.mxml, omplint l'estructura següent: (i no, no puc posar l'xslt, pq aixo no te res d'xml xD)
console:
|<post>
| <title> TITLE
| <date> `doblog --date or date -R in GNU systems` (in rfc-2822 format)
| <category> CATEGORY
| <body>
|THE BODY OF THE POST
|</post>
A més podem afegir alguns tags opcionals com:
author,
hidden o
filename.
Hidden ens permetra fer un post sense que surti al RSS ni ens generi cap enllaç o referencia a ell, pero generant el .html corresponent.
Author per canviar l'author definit en el blog.conf (perque més d'un usuari pugui postejar en el mateix blog.
Filename per definir el nom de fitxer que ha de tenir un cop acabat tot el procés de
textproc (usease, per pagines estatiques, jo l'utilitzo pel user.html (la pagina de descripcio de l'usuari) i pels meus projectes (acr.html, wistumblere2.html...)
El mateix doblog ja instal.la un
Makefile per que poguem cridar les funcions tipiques simplement fent
make amb algun target:
console:
all:
perl doblog.pl data
comments:
perl doblog.pl -comments data
update:
perl doblog.pl -update data
last:
perl doblog.pl -last data
hidden:
perl doblog.pl -hidden data
clean:
rm -f *.html *.xml comment.php
#install:
#scp * pancake@nopcode.org:/var/www/blogs.nopcode.org/pancake/
#rsync -ucrv . pancake@nopcode.org:/var/www/blogs.nopcode.org/pancake/
console:
$> perl doblog.pl
usage: doblog.pl <-flags|prefix>
-update: only update.Just create new files(do not overwrite)
-hidden: update only hidden posts
-last: update only the last post
-version: shows version information
-comments: only update posts that have queued comments to write
-mkconf: prints a default configuration file to the stdout
-help: show this message
-date: shows date in RFC-2822 format
$>
El fet de tenir tantes flags per fer el 'mateix' es algo que poter amb el temps canviara, pero es per accelerar les regeneracions dels HTMLs, per tal d'evitar que siguin tasques pesades es divideix la feina, si estem editant l'ultim post de 40 que tenim, podem fer
make last i només regenerarà l'últim, cap altre, aixi només haurà de reparsejar els *.MXML i generar només el post que toqui.
(en aquest cas l'ultim).
Podem borrar els .html q volguem i fent
make update només regenerarà els que hem borrat (amb la conseqünt millora de temps
Configuration
Ara mirem una mica per sobre el blog.conf:
console:
$author="pancake";
$title="pancake's blog";
$url="http://news.nopcode.org/pancake";
$description="pancake's blog";
$theme="strict";
#@mxml=( "blog.mxml", "projects.mxml");
##
$predot="> ";
$postdot="<br />";
$inverse=1; # inverse posts (first post in mxml is the last published)
$onepage=0; # show entire post or splitted by tag
$archive=1; # show previous, next links at bottom of the post
$smileys=1; # show/hide rendered smileys
$smileys_theme="wideused"; # no theme by default (prefixes img/smileys/$theme)
$rss1=0;
$rss2=1;
$rss_limit=10; # number of posts to be listed in the RSS
$rss_with_body=1; # include posts body into the RSS
$blog_limit=6; # number of posts to be showed in main page
$blog_list_limit=10; # number of posts to be listed in left bar
$list_is_index=1;
$post_split=1;
$post_page_is_index=1; # TODO buggy when 0
$comments=1; # add support for comments
$comment_add_string=""; # set the 'add comment' string
$comment_view_string=""; # sets the 'view comments' string
$read_more_string="";
$show_number_of_posts_in_categories=1;
1;
En aquest fitxer hem de definir les dades personals de l'usuari, la URL, la descripció i el template que volem utilitzar (theme).
També podem definir una array de tots els fitxers MXML que volem parsejar i amb l'ordre que volguem (per defecte fa un
`cd data & find .| grep \.mxml|grep -v comments`). (usease ordre alfabetic)
Desprès ja definim les normes i directives de creació del blog (aka
html). És a dir, els tags d'abans i després de cada element d'una llista, si volem que ens inverteixi l'ordre dels posts del MXML, es a dir:
Quan $inverse=1 el primer post del MXML sera el ultim introduït (util per editar desde shell), en canvi amb $inverse=0, l'ultim post del fitxer serà l'ultim introduït, util per administracions externs (com la web), ja que per incloure un post nou, només ha de fer un append.
Després podem dirli si volem que ens faci arxius (av.pag/re.pav), que renderitizi els smileys (i amb quin tema), si volem que generi els RSS (recomano que feu servir el 2, pq l'1 no tira gaire bé), el número de posts a mostrar en portada, els de la llista del costat, quants volem que surtin al RSS, si volem que ens fiqui el body o no dins del RSS, si volem comentaris i finalment les strings user-defined dels links hardcoded pel doblog (afegir comentaris).
--
Amb tot aixo fet (blog.conf i blog.mxml) ja podem generar el nostre blog

, ara simplement anem al directori arrel del blog i teclejem:
"make".
Més documentació
Un altre punt xulo del doblog es que ...no el faig sol...
miracle!!, bé, la part de codi em va ajudar helena durant 2 dies per avançar feina, pero ara ho porto tot jo...pero si hi ha una cosa que realment em fa pal es...documentar.
Aixi que el muntar el blog a
porticoluna.org implica que tindre uns 30 blogs funcionant alhora sobre la mateixa maquina amb backups rotatoris, etc. Aixi que ja que són ells qui l'utilitzen...son persones més indicades per documentar, conforme vagin troban typos, correccions ortogràfiques, traduccions, i la documentació d'instal.lació, manteniment i utilització.
Aixi que espero que quedi algo força ben documentat, estable i probat. Pero em caldra optimitzar els algoritmes del doblog per tal fer-lo menys pesat pel sistema (actualment regenerar tot un blog sencer amb uns 50 posts li costa uns 2-3 segons), pero clar, regenerar el blog sencer es molt cafre
Perl tip
Un bug curios que he solucionat avui en el doblog i que mai m'havia fixat... El problema estar amb l'us de variables globals i locals.
Perl et permet identificar les variables locals amb el keyword
my precedint el nom de variable. El fet es que treballant amb fitxers jo sempre havia usar descriptors sense Dollar ($). I clar, resulta que perl no et permet definir com a local un descriptor. I en certa part del codi utilitzava el mateix nom de descriptor dins d'una funció que estava utilitzant-se a la funció superior.
Doncs bé, la solució passa per utilitzar una $variable enlloc d'un descriptor i definir-la local a la mateixa crida de l'open:
console:
..
open( my $fd, "<","$file") or return 0;
close( $fd );
..
Altres...
Un altre cop m'ha sortit un post etern aixi que comentaré
quatre coses que volia explicar.
o flock: L'altre dia l'uri em va passar la url d'aquest navegador que no coneixia i que no està gens malament, està basat en firefox, pero implementa una pila de modificacions sobre la interficie, els menus de configuració i integració amb del.icio.us, blogger, etc, et permet postejar desde dins del navegador i tot amb un editor grafic

...potser implemento el XMLRPC del blogger al doblog-web-admin...
Ara si, m'agradaria saber si aquest efecte l'ha fet voluntariament, o es un bug del programa...perque es el principi del que ja havia llegit d'aplicacions DHTML per l'escriptori, fent finestres sense marcs i on tot el codi sigui interpretat pel motor Gecko.
o wmii : fa un temps vaig probar el wmi, i em va agradar molt ja que es un gestor de finestres basat en frames i usa HJKL per tot amb la configuració per defecte, pero el tema es que ja havia probat el wmii i no m'acabava de fer el pes, perque em faltaven tecles, segmentava algun cop que altre i donava problemes amb segons quines aplicacions quan feien popups. Pero bé...com ja sabem...aquests fallos sempre es solucionen amb temps, aixi que ahir vaig compilar l'ultim snapshot i va dpm...abandono icewm per un temps, com a minim en el laptop intel (aka pl2).
o xbox360 : no tinc ni un puto duro, després d'haver pagat totes les samarretes ara nose com pagaré l'htel del CCC, pero bé..viam si puc vendre les camis i recuperar la pasta... El fet es que l'uri (again) mva dir que xbox360..la proxima consola del innombrable porta 3 processadors PPC dualcore a 3.2GHz. No vull ni pensar quina potencia té.
LA VULL PER COMPILAR!!
o fssconfig : ahir vaig anar a cal xtraeme, ... hi xtraeme !

i la veritat es que té una terrassa molt guapa
(amb 3 wifis obertes), el tema sq entre birra i birra em va ensenyar una utilitat del sistema base de NetBSD que desconeixia i que...si GNU s'enterés ploraria... L'aplicació en qüestió es diu:
fssconfig i et permet crear snapshots de directoris sobre fitxers sparse, es a dir...podem tenir un sistema de fitxers versionat...tal com "pronosticava" Richard en el seu famós manifest.
o nbd : L'altre dia avorrit mirant pel
/usr/src/linux/Documentation vaig trobar un document força xulo que parlava del NBD, Network Block Device. es a dir, el fet de compartir una unitat fisica de blocs a través de TCP, i poder muntar RAIDs remots, etc. Lo xungo del tema es que en GNU/Linux no vaig conseguir fer-lo rular, el dimoni escoltava bé i el client tb es conectava, pero no activava el /dev/nb0...aixi que vaig decidir mirar a NetBSD...i resulta que un tiu ho te implementat desde l'any 2002, pero no se sap res d'ell ni del codi ni de res....Aquestes coses fan rabia..Grrggrgr
BEEP!
[add comment] [view comments] (1849)