Jan 09

Simple Invoices: factures i prou

Reading time: 1 – 2 minutes

simple invoices logoA través de twitter i més concretament gràices a un enllaç que va publicar l’Oriol he descobert una aplicació que té molt bona pinta, es tracta de SimpleInvoices. La seva finalitat poder fer i gestionar les factures, l’aplicació esta molt lluny d’un ERP o quelcom semblant simplement fa factures. Aquesta és la gràcia, hi ha molts autònoms que no volem grans eines complicades sinó simplement una forma senzilla i ajustable a les nostres necessitats.

Poder fer factures, pressupostos, guardar-los, imprimir-los, exportar-los a PDF i enviar-los als clients i ben poca cosa més. Tot plegat accessible via web, basat en LAMP i Open Source com no podia ser de cap altre manera. Per si tot això no fos poc també suporta diversos idiomes a l’interficie i ens podem personalitzar les plantilles de les factures.

De fet, encara no he començat a usar l’eina ni he decidit del tot si ho faré o no, però ús puc assegurar que té força números que ho acabi fent amb aquesta eina.

Dec 28

Introducció a RestMS

Reading time: 2 – 4 minutes

RestMS schemaXMPP és un protocol de missatgeria no només orientat a mantenir converses entre usuaris sinó també a ser usat com a sistema RPC entre diferents aplicacions. Malgrat això res és perfecte i AMQP més orientat a la segona funció que no pas a la primera es perfila com estàndard  corporatiu molt més potent i eficient que XMPP en diversos aspectes. Però AMQP peca per ser força inaccessible degut a que no és trivial d’entendre i usar.

En tot aquest món de la missatgeria entre aplicacions hi ha un altre protocol no tan conegut però que preten tenir el millor d’XMPP i d’AMQP: RestMS. De fet, RestMS és realment una simplifiació d’AMQP que usa com a sistema de transport REST.

Es tracta d’un estàndard obert, amb una implementació Open Source força sòlida. Aquest estàndard ens aporta:

  • sistema d’enrutat de missatges
  • models de cues
  • fàcil d’extendre la seva semàntica
  • simple, perquè és precís i petit
  • segur, usa els sistemes de seguretat estàndards d’HTTP
  • escalable, perquè usa servidors, caches, proxies, etc. del món HTTP
  • resol la dicotomia ‘polling vs events’ usant long-polling, igual que BOSH
  • en principi no disposa de sistema de presència, tot i que es podria montar fàcilment
  • pot codificar durant el transportar les dades en XML o JSON
  • portable en diferents sistemes operatius
  • ofereix interoperatibilitat entre diferents llenguatges de programació

Per tot plegat RestMS es perfila com una alternativa interessant per alguns entorns, aportant una solució simple i potent en molts aspectes. Tot i que teoria en mà, el trobo força més lent que no pas AMQP. De fet, des de que vaig veure com s’usava un sistema AMQP per fer balanceix de càrrega en aplicacions de video usant GStreamer per fer una prova ‘fast and dirty’ em vaig quedar impresionat.

Dec 26

Tipus de pantalles tàctils

Reading time: 4 – 7 minutes

Després de treballar força anys en el món dels kioskos i del digital signage, mai se m’havia passat pel cap mirar-me quines eren les diferències reals entre els diferents tipus de pantalles tàctils que hi ha al mercat. Així doncs, finalment he decidit fer-ho i descriure-ho en aquest article.

Resistive Touch Screen

  • La tecnologia amb la millor relació qualitat preu de totes les tecnologies tàctils
  • Disponible per pantalles desde 5.7″ fins a 22″
  • Compost per diferents capes:
    • les més importants són dues capes fines: una metàlica i l’altre formada per capes conductores de l’ectricitat, aquestes capes són molt fines i estan separades entre elles molt poc espai
    • quan un objecte, per exemple un dit, prem la pantalla llavors les capes metàliques es toquen i passen l’electricitat
    • quan hi ha la connexió en aquest punt, el pantell actua com un divisor de voltatges en les sortides que tenen la connexió i registren l’event comunicant a la controladora que algú ha tocat la pantalla
  • la tecnologia és força confiable, durable i acostuma a tenir un temps de vida llarg
  • és la tecnologia més resisten en entorns ostils
  • és económica
  • és molt estable, és a dir no cal recalibrarla mai o quasi mai
  • compatible en diferents tipus de tocs: dit, stylus, llapís, etc.
  • ideal per aplicacions amb alta intensitat d’ús
  • pot arribar a suportar els estàndars NEMA 4/4x/12 i IP 65
  • si ens fixem bé en el tàctil a contrallum podem arribar a veure els minifilaments que el formen
  • susceptible a rallades o esquerdes a la superficie de toc

Surface Acoustic Wave (SAW)

  • la principal virtud és la seva transparència
  • mides de 6.4″ a 42″
  • usa ones ultra-sòniques que passen per sobre de la pantalla táctil
  • quan es toca el tàctil una part de les ones és absorvida
  • llavors es registre on han estat absorvides les ones i es comunica a la controladora el punt del toc
  • la superfie de toc pot estar danyada i continua funcionant (ralles o vidre trencat)
  • la brutícia sobre la superficie de toc pot interferir en el seu funcionament
  • els tàctils d’aquest tipus que estan fets en vidre funcionen millor que els altres
    • a més això fa que siguin més transparents
  • no cal calibrar-los més d’una vegada
  • poden ser usades de qualsevol manera: dit, guants, stylus, etc.

Capacitive

  • llarga duració
  • bona relació qualitat preu
  • inpermeable a la pluja i a la brutícia
  • mides de 5.7″ a 32″
  • sovint fabricats en vidre
  • funcionen a través d’uns sensors que actuen com a capacitors
  • les parets dels capacitors dels eixos horitzontals i els verticals es solapen
  • aprofitant que el cos humà és conductor de l’electricitat, al tocar amb el dit la superficie del sensor el camp elèctric canvia i es produeix un canvi en la capacitància
  • funcionen per proximitat, no cal arribar a tocar el tàctil
  • tecnologia amb força durabilitat i que s’usa a força sistemes POS, industrials, kioskos públics, etc.
  • és força més transparent que la tecnologia resistiva
  • només funciona amb el contacte amb el dit, o amb stylus que siguin conductors
  • suporten sistemes multi-touch
  • una capa dura en el vidre proporciona resistència al desgast
  • força resistent a la brutícia
  • funciona força bé quan hem d’arrossegar elements en la interficie
  • es considera que té un coeficient de transparència a la llum del ~91.5%

Infrared

  • Ideal per entorns ostils i aplicacions a l’exterior
  • Mides de 8.4″ a 17″
  • usa una xarxa d’emisors d’infra-rojos basats en LEDs que estan repartits pels eixos horitzontals i verticals de la pantalla, a més d’uns fotosensors col·locats en els costats inversos dels emisors
  • la idea és crear una xarxa de rajos infra-rojos i quan aquests es tallen ja tenim el toc
  • no s’usa per elements portables només per instal·lacions fixes
  • es pot usar amb el dit, guants, stylus, etc.
  • és estable, no cal calibrar-la
  • no té perquè treballar amb superficies fines, poden ser rugoses
  • poden combinar-se fàcilment amb sistemes antivandàlics
  • usades en estàndards Ingress Protection (IP) i NEMA
  • durant molt

3M MicroTouchTM DST Touch System

  • Superficies tàctils molt grans
  • mides de 32″, 40″, 42″ i 46″
  • vides tractats químicament
  • no cal stylus per usar-la, funciona amb qualsevol objecte o element que toqui la pantalla
  • resposta ràpida
  • no són massa susceptibles a la brutícia
  • 3M Dispersive Signal Technology (DST): bàsicament permet calcular les ondes de reflexió que es produeixen en el vidre tractat al haver-hi un toc
  • Ràpid, precís i molt confiable
  • Suporta esquerdes, rallades o fins hi tot objectes recolzats sobre la pantalla i continua funcionant amb precisió sobre les interaccions
  • Idea per aplicacions multi-usuari
  • Transparència excepcional

Nov 27

Cues del postfix i informacions relacionades

Reading time: 3 – 5 minutes

Per defecte les cues que té el postfix són:

  • hold: missatges que no s’intenten entregar mai
  • incoming: cua d’entrada de missatges
  • active: cua en la que es decideix amb quin delivery agent s’itenta entregar un missatge
  • defer/deferred: missatges que no s’han pogut entregar per un error temporal es posen en aquesta cua
  • bounce: on es generen els missatges d’error cap al remitent dels missatges que no s’han pogut entregar
  • corrupt: cua que conté missatges danyats amb els que no es pot fer res

Accions que podem fer amb els missatges d’una cua:

  • Listing messages
  • Deleting messages
  • Holding messages
  • Requeuing messages
  • Displaying messages
  • Flushing messages

Gestió de les cues:

  • Mostra l’estat de totes les cues.
mailq
  • Mostrar els 10 dominis amb més missatges pendents d’enviar, sovint va bé per controlar quan ens han usat per fer un email i hi ha molts correus enganxats per enviar.
qshape -s deferred|head -n 10
  • Borrar un missatge de les cues.
postsuper -d ID_MSG
  • Borrar tots els missatges de les cues.
postsuper -d ALL
  • Script per borrar missatges de les cues segons origen o destí:
#!/usr/bin/perl -w
#
# pfdel - deletes message containing specified address from
# Postfix queue. Matches either sender or recipient address.
#
# Usage: pfdel 
#                                                                                         

use strict;

# Change these paths if necessary.
my $LISTQ = "/usr/sbin/postqueue -p";
my $POSTSUPER = "/usr/sbin/postsuper";

my $email_addr = "";
my $qid = "";
my $euid = $>;      

if ( @ARGV !=  1 ) {
die "Usage: pfdel \n";
} else {
$email_addr = $ARGV[0];
}                                    

if ( $euid != 0 ) {
die "You must be root to delete queue files.\n";
}                                               

open(QUEUE, "$LISTQ |") ||
die "Can't get pipe to $LISTQ: $!\n";

my $entry = ;    # skip single header line
$/ = "";                # Rest of queue entries print on
# multiple lines.
while ( $entry =  ) {
if ( $entry =~ / $email_addr$/m ) {
($qid) = split(/\s+/, $entry, 2);
$qid =~ s/[\*\!]//;
next unless ($qid);

#
# Execute postsuper -d with the queue id.
# postsuper provides feedback when it deletes
# messages. Let its output go through.
#
if ( system($POSTSUPER, "-d", $qid) != 0 ) {
# If postsuper has a problem, bail.
die "Error executing $POSTSUPER: error " .
"code " .  ($?/256) . "\n";
}
}
}
close(QUEUE);

if (! $qid ) {
die "No messages with the address <$email_addr> " .
"found in queue.\n";
}

exit 0;
  • Borrar missatges segons email origen o destí.
/root/bin/pfdel email
  • Hold a message / Retenir missatges, no intentar servir-los. Posar-los a una cua congelats.
postsuper -d ID_MSG
  • Hold all messages
postsuper -d ALL
  • Moure un missatge de la cua ‘hold’ a la cua ‘active’.
postsuper -H ID_MSG
  • Moure tots els missatges de la cua ‘hold’ a la cua ‘active’.
postsuper -H ALL
  • Re-encuar missatges, per exemple si el postfix tenia un erro de configuració després de corregir-los podem re-encuar els missatges perquè es corregeixin els possibles errors de classificació que hagin patit. Per exemple, canvi de ‘delivery agent’.
postsuper -r ID_MSG
o
postsuper -r ALL
  • Veure el contingut d’un missatge que esta a la cua:
postcat -q ID_MSG
  • Per forçar el re-enviament de missatges a la cua.
postqueue -s
o
postfix flush
  • Per forçar l’enviament de missatges a la cua per un domini.
postqueue -s domini.com

Oct 07

Nagios external commands

Reading time: 1 – 2 minutes

Tan de temps usant nagios i mai havia tingut la necessita de recorrer als Nagios External Commands. Escencialment es tracta d’una named-pipe que usa Nagios per rebre comandes via shell.

  • Sintaxis per injectar les comandes. Per suportar aquesta funcionalitat previament cal haver-la habilitat al fitxer de configuració de nagios, això també ho trobareu a l’anterior enllaç.
  • Comandes suportades, la llista és força gran i hi podem trobar coses com ara forçar un check per host o fins hi tot deshabilitar els checks sobre un servei o un host.

A continuació adjunto la comanda que podeu llençar desdel prompt per llençar una ordre al nagios al cap de deu segons. En aquest cas forcem que es verifiquin tots els serveis d’un host.

# des del directori on hi ha la 'named-pipe' sovint anomenada 'nagios.cmd'
now=$(date +%s); next=$(expr $now + 10); echo "[$now] SCHEDULE_FORCED_HOST_SVC_CHECKS;nom_host;$next" > nagios.cmd

Per veure el resultat de la comanda i si aquesta ha estat rebuda pel nagios només cal que mirem el fitxer nagios.log. La sortida del log serà algo així:

data host_server nagios: EXTERNAL COMMAND: SCHEDULE_FORCED_HOST_SVC_CHECKS;nom_host;unix_ts

Jul 13

Tuning d’un servidor MySQL

Reading time: 2 – 2 minutes

Aquesta última setmana he tingut alguns problemes de rendiment amb un servidor MySQL, de fet, hi havia en concret una taula que tenia fins a 53 milions de registres, malgrat el seu espai tampoc era tan gran al voltant de 4Gb l’accés de lectura i escriptura a la taula era molt lent, sobretot per funcions de filtrat una mica complexes.

Doncs bé, coses que he aprés que potser ús poden anar bé són:

  1. Cal habilitar les ‘slow_query_logs’ i tenir indexats tots els camps que apareixen després dels WHERE’s, això millora considerablement el rendiment.
  2. Cal incrementar el innodb_log_file_size fins a un 25% del valor del innodb_buffer_pool_size; això redueix considerablement el temps d’escriptura.
  3. Usar JFS, com a sistema de fitxers del directori ‘data’ del MySQL. És substancialment més ràpid que el ext3. Exemples de rendiment.
  4. Posar els logs en un disc dedicat, diferent del disc que té les dades.
  5. Usar el paràmetre ‘noatime’ en la partició que conté les de dades del MySQL.
  6. Deshabilitar la partició de SWAP, usar un ‘innodb buffer spool’ ben gran, sempre pensant amb la RAM disponible.
  7. Montar els directori temporal de MySQL sobre una partició RAM.
  8. Reduir el key_buffer size a 1-2Mb si no s’usen taules MyISAM.
  9. Usar el kernel 2.6 amb SMP amb processador multi-cos, és especialment important per aplicaions multithread com el MySQL.
  10. Usar RAID0 (stripped disks) i usar un servidor de replicació per les còpies de seguretat. Millora els temps d’I/O del disc, com és lògic.

Mar 03

Netgear ProSafe SSL VPN Concentrator SSL312

Reading time: 4 – 6 minutes

NetGear SSL312Havia tingut l’oportunintat de veure funcionar aquest tipus de concentradors d’VPN en diverses ocasions però mai n’havia configurat cap. De fet, el model en concret del que us parlo el vaig descobrir a través de Tecnología Pymes. El que més em va sorprendre és la quantitat d’VPNs que gestionava i el seu preu, són 25 VPNs concurrents per uns 350€ de PVD. Després vaig estar mirant-me a fons el manual i les seves especificacions tècniques i crec que és una de les solucions més competitives per montar VPNs a usuaris remots (roadwarriors) de forma senzilla. En aquest cas, senzilla vol dir que no s’hagi d’anar usuari per usuari a configurar-los l’VPN. Sinó que ells mateixos simplement accedint a una pàgina web i amb un simple usuari/password més el suport d’un plug-in Java/ActiveX passin a ser un client de l’VPN.

Al accedir via web després de l’autenticació el dispositiu facilita un portal d’enllaços als usuaris on poden amb un simple clic accedir a aplicacions a través del navegador, per exemple, usant VNC, RDP, Telnet, SSH, IE i d’altres protocols l’usuari pot iniciar per exemple una sessió amb una aplicació que estigui en un servidor local: Word, Excel, ERP, CRM, Web,  etc. O sigui, que és ideal per quan tenim usuaris amb coneixements molt bàsics perquè els podem donar accés directe a les típiques coses que usaran i per l’usuari és molt senzill d’entendre. Obviament si no volem accedir via web a la xarxa remota ho podem fer des del sistema, o sigui, que per exmemple si obrim una consola podem llençar un ping sense problemes als servidors remots. No deixa de ser una VPN de les de sempre, però usant com a client el navegador.

Pel que fa al firmware que usa després de connectar-hi via RS232 he pogut veure que és un Linux, al qual pel mateix CLI serie podem tenir-hi accés i tocar el que ens convingui. Per cert, enlloc he trobat la configuració del port serie per connectar-hi però fent proves la que m’ha funcionat ha estat: 9600 8N1 no control de fluxe per hardware ni tampoc per software.

Al iniciar el router aquest portava un firmware força antic que no suportava Windows Vista i que només podia treballar amb clients IE via ActiveX. Però després d’actualitzar el firmware a la versió 2.3.03 no només ja es suporta el Windows Vista sinó que també funciona amb clients Linux amb Firefox usant un applet de Java. Això si hem de tenir permisos d’administrador perquè sinó no pot crear les rutes i d’altres similars al sistema.

# uname -a
Linux vpn0 2.4.20-br264 #25 Fri Nov 14 12:23:42 IST 2008 POLO unknown

Els usuaris de l’VPN poden estar guardats en diversos llocs:

  • Local user database
  • Microsoft Active Directory
  • LDAP directory
  • NT domains
  • RADIUS (PAP, CHAP, MSCHAP, MSCHAPv2)

A més disposa d’un sistema de grups i de polítiques de permisos que malgrat no ser res de l’altre món ens permet crear certs tipus de perfils restringint els accessos de forma simple i fàcil de gestionar als grups o usuaris.

Quan montem aquesta solució podem treballar de diverses formes. Diposa de dues sortides ethernet i podem treballar amb només una sortida:

topologia 1

o usant dues interficies de xarxa:

topologia 2

a partir d’aquí podem adaptar el sistema d’VPN al que més ens interessi dins de l’empresa.

Abans d’acabar només un apunt sobre el tema de la configuració. Cal dir que no és complicat de configurar, però en primera instància és una mica engorrós tenir tantes opcions i tan poc intuitives. Una bona recomanació és que no deixeu de llegir-vos atentament l’ajuda en línia (apareix a la part dreta) que es mostra en la WebUI de configuració.

Un altre cop doncs NetGear ens ha presentat un producte molt decent i recomanable, he de dir que és una marca que al igual que Linksys m’acostuma a deixar un bon gust de boca.

Pàgina del producte:  ProSafe SSL VPN Concentrator SSL312

Feb 12

Google sync: GNOME Evolution + Gmail/GCalendar/GContacts + Windows Mobile

Reading time: 2 – 4 minutes

google syncLa meva il·lusió quan vaig tenir l’HTC Kaiser (o la Cruise) era tenir-les sincronitzades amb l’Evolution. Al cap de poc temps van començar a posar-se de moda eines com el GCalendar i el Gmail va començar a oferir funcions de POP3 i IMAP cosa que el van fer molt més atractiu. Obviament tenir el correu, contactes i l’agenda completament sincronitzats amb aquests tres elements ja era tot un somni i vaig estar provant i plantejant montar combinacions realment costoses per tal de aconseguir això que comento. Però cap de les combinacions em donava un grau de confiança suficient ja que les sincronitzacions bidireccionals de tot plegat deixaven molt que desitjar. Com sempre passa amb Linux aquest tipus de coses sempre van amb retard.

Finalment aquesta setmana he posat en marxa la trilogia i de moment n’estic molt content del resultats. Anem a pams:

  • GNOME Evolution 2.24.2 finalment incorpora funcions que permeten:
    • Usar l’agenda de contactes del GMail de forma nativa i tenir-la en còpia en local per quan treballem sense connexió a internet.
    • Treballar amb un canal del calendari connectat contra GCalendar i sincronitzar-se periodicament de forma transparent. Com en el cas de l’agenda també permet tenir el canal en còpia per quan estem offline.
    • Pel tema correu ja no hi havia problema perquè sempre he usat IMAP i a través de Vodafone Push Mail rebo el mateix correu que veig al Evolution al Telèfon i a la compte de GMail. El que de moment no he resolt és que es vegin les carpetes que no són ‘inbox’, però això és més un problema de mandra que no de la tecnologia.
  • Google Mail, Address Book i Calendar des de fa uns dies disponsen d’un servei de sincronització amb compatibilitat per Windows Mobile, així doncs, només m’ha calgut seguir les instruccions que hi havia a la web de Google Sync i a funcionar.
  • Windows Mobile, escencialment el que diu Google Sync és que afegit un nou servidor Exchange contra el que farem les configuracions i gràcies a la connexió de Vodafone Mail Push puc connectar a aquest servei amb la mateixa tarifa plana de correu de 15€/mes. Realment genial, perquè tinc els 3 calendaris, agenda i correu sincronitzats per un preu increible.

Com veieu tècnicament la cosa no té cap mèrit per la meva part, i amb uns pocs minuts ho he tingut tot funcionant. De fet, he invertit molt més temps en fer recerca durant tot aquest temps que no pas en configurar aquest sincronització que comento. Per cert, com a nota fríbola afegir que, sense fer cap extra es sincronitzen perfectament els accents en qualsevol dels dispositius!