Ahorrando prácticamente: Implantemos una centralita Asterisk

Voy a atreverme a publicar una serie de post con cómo implantar una centralita telefónica de bajo coste, y capaz de dar un servicio muy avanzado. Indicaros que no soy ningún experto en Asterisk, que es el software que vamos a utilizar, aunque he averiguado lo suficiente como para implantar mi propia centralita.

Os comento de dónde parto y a dónde quiero llegar. Dispongo de 4 líneas telefónicas analógicas (sí, de esas que tenéis en casa), que además están configuradas en salto (esto es, tengo 4 números de teléfonos asociados a estas 4 líneas. Llamando a uno de esos números obtengo una de las 4 líneas, y no tiene por qué haber una correspondencia unívoca. Así podría tener 4 llamadas distintas de 4 usuarios que han marcado el mismo número).

Quiero llegar a tener una centralita con operadora virtual (esa locución que se obtiene en algunos teléfonos: “Pulse 1 para…”),  con buzones virtuales por cada extensión, y por supuesto libertad absoluta para configurar mis extensiones, grupos de extensiones…

A los que saben realmente de Asterisk: voy a montar algo muy sencillo y obvio. Pero, muy efectista y además práctico. Vamos a ello

Read more…



Bug en AbanQ: Filtrado de campos double, int o uint desde FLTableDB

Creo haber descubierto un bug en AbanQ. La manera de reproducirlo es la siguiente:

Desde un FLTableDB, pinchamos en la opción Ver/Ocultar filtro. Escogemos ahora cualquier campo del tipo “double”, “int” o “uint”, modificamos la operación a Igual a (cualquier otra también vale para reproducirlo) e introducimos un valor. Al intentar ejecutar el filtro, si tenéis una base de datos PostgreSQL os dará un error, indicando que no se puede ejecutar la función “upper” sobre el campo.

El lugar donde se produce el bug en el código está situado en FLTableDB.cpp, en las líneas 1132 hasta 1137, dentro del método tdbFilterBuildWhere, y es fácil de ver: (código correspondiente al fuente del build 15245 disponible en la web de AbanQ)

case QVariant::UInt:
case QVariant::Int:
case QVariant::Double:
case QVariant::String:
case QVariant::StringList: {
        fieldArg = "upper(" + fieldName + ")";

Si os fijáis se aplica la función de base de datos “upper” a todos los campos. Esta función sirve para poner en mayúsculas una cadena de texto (AbanQ la utiliza para garantizar la comparación de cadenas de caracteres independientemente de que el usuario la introduzca en mayúsculas o minúsculas: se compara siempre en mayúsculas). El error está en que PostgreSQL se queja cuando a una columna integer o double precision se le hace un upper.

Así no es posible aplicar un filtro a este tipo de campos. ¿Solución? Super sencilla. Cambiad ese código por este, y recompilad

case QVariant::String:
case QVariant::StringList: {
        fieldArg = "upper(" + fieldName + ")";
case QVariant::UInt:
case QVariant::Int:
case QVariant::Double:

Así, el upper sólo se aplica a las cadenas.



Buenas prácticas en AbanQ: Usando vistas con PostgreSQL

Una de las características fundamentales de los sistemas ERP es el ofrecer información útil para el usuario. Generalmente, esa información útil surge de cruzar datos de diferentes orígenes (en nuestro caso, tablas de base de datos).

Vamos a poner un ejemplo: En AbanQ tenemos el formulario de artículos dentro del módulo de almacén. Quizás sería interesante añadir una opción para comprobar los movimientos de stocks, entendiendo por los mismos las entradas a almacén (albaranes dados de alta) y salidas (albaranes a clientes). Sería interesante visualizar en un TableDB el resultado de una query que agrupara ambas entradas. Claro, ocurre que para hacer esa query, es necesario utilizar una cláusula SQL, union.  Así por ejemplo, podríamos desear tener una consulta tal como esta

select 'Entrada' as tipo, lp.referencia, lp.cantidad, ap.idalbaran
from albaranesprov as ap inner join lineasalbaranesprov as lp
on ap.idalbaran = lp.idalbaran
union
select 'Salida' as tipo, lc.referencia, lc.cantidad, ac.idalbaran
from albaranescli as ac inner join lineasalbaranescli as lc
on ac.idalbaran = lc.idalbaran

 Read more...


Tiempos de reducción de costes… ¡¡Software libre!!

Realmente, utilizar software libre, implica reducir costes (ojo, software libre no es igual a gratis, pero sí reduce costes). Ejemplo, teníamos necesidad de una nueva centralita de teléfonos. La actual, estaba desfasada y daba problemas. Pidiendo presupuestos a diferentes empresas, cualquier solución suponía un coste de mínimo 2.500 €. Toda una cifra en esta época.

Telefónica oferta propiamente el alquiler de una centralita y sus terminales, pagando un alquiler por teléfono y centralita mensual que es realmente interesante… Pero aun así, pensé en hacer una prueba antes. Utilizar Asterisk, una herramientaen software libre que permite implementar una centralita, utilizando además, protocolos libres (detalle este muy importante para futuras interoperabilidades) como SIP.

Así que manos a la obra, lo único que necesitaba era adquirir una tarjeta que recibiera las líneas de teléfono analógicas que tenemos contratadas. Las reinas indiscutibles en este sector son las Digium, básicamente porque son las tarjetas que desarrolla la empresa del creador y principal motor de Asterisk. Su problema, el precio. 180 euros para una prueba (en cualquier caso, mucho menos que 2.500 euros!!). Así, que adquirí las OpenVox, concretamente la A400P, que es un clon de la TDM410P (la de Digium)… Sí, OpenVox es una empresa china. Además, adquirí un módulo FXS para recibir llamadas.

Y manos a la obra, instalé TrixBox, una distribución Linux que viene ya preparada con todo el software para configurar una centralita… Me reconoció todo el hardware… y configuré.

En unas 6 horas, había configurado la centralita, con operadora virtual, grupos de capturas, múltiples extensiones, franjas horarias, buzones de voz… todo en un ordenador un tanto antiguo (un Pentium III con 256 megas de RAM).

O sea, que probando, he conseguido ahorrar 2.500 €… Y eso es lo que voy a hacer. Ahora dejaré las pruebas, y haré la implementación real de Asterisk en un ordenador algo más potente.  Por supuesto, tuve FUD de algún que otro comercial (“ni te imaginas cuántas de esas asterisk he tenido que quitar…”). Asterisk es una solución tan buena como cualquier otra en este mundo. Hay empresas que se dedican a implementar este tipo de herramientas… y seguro que sale más barato. Por preguntar, y que os hagan una prueba, no perdéis nada.



FUD en Artes Gráficas

FUD son las siglas en inglés de Fear, Uncertainty and Doubt, es decir, “miedo, incertidumbre y duda”. Son siglas muy utilizadas en el mundo de la informática y los sistemas de información, y aplicadas a grandes empresas, que mediante mensajes, declaraciones o campañas de publicidad pretenden sembrar la duda, el miedo y la incertidumbre en el consumidor para evitar que éste adquiera una nueva tecnología de un competidor.

Evidentemente, son prácticas, quizás no muy lícitas pero sí muy usadas en este mundo. Y digo, en este mundo, porque para sembrar MID (vamos a usar las mismas siglas pero en español, Miedo, Incertidumbre y Duda) debe utilizarse un factor importante: el desconocimiento del competidor sobre la nueva tecnología. Y es evidente que hablando tecnológicamente, no todo el mundo tiene porqué ser un experto.

Me sorprende ver, cómo esta práctica es usada intensivamente en el mercado de la maquinaria en Artes Gráficas. Lo normal de muchísimos comerciales (quisiera decir todos pero un principio de prudencia me lo impide) es utilizar expresiones tipo:

  • “El servicio técnico de (TAL MARCA) es absolutamente pésimo. Bueno, yo conozco el caso de fulanito al que se le paró la máquina y estuvieron un mes sin atenderle!!!” (¿y cómo que no quebró?)
  • “La teleasistencia no sirve para nada… eso de las comunicaciones remotas es un bulo” (¡¡Internet es un bulo!! ¿Qué hago escribiendo aquí?)
  • “Esa máquina tiene una tecnología obsoleta, mira, tal sistema es de los años 70″… (en una máquina nueva… ¿y la vuestra que es la misma máquina de hace 10 años????)
  • “Ufff, ¿la máquina de fulanito? Tuvieron que retirar dos en el cliente setanito”… (y las retiradas ni son tales y muchas veces son por otros motivos. Eso sí, nadie retira una máquina por mal funcionamiento, son siempre la de los demás…)

Podría seguir con un listado que tiende a infinito. La verdad, es que no me gusta ese estilo. A mí me gana el agente comercial que llega con la sinceridad y que utiliza argumentos como: “Mi máquina es verdad que flaquea con respecto a la de la competencia en tal aspecto, pero somos superiores en estos otros aspectos por tal, tal y tal” (me indica que el comercial ha estudiado a la competencia y tiene una opinión que dentro de la subjetividad es más real). “Sí, es cierto, la máquina que instalamos en tal cliente tuvimos que retirarla. Pero tiene ya una nueva” (indica que si su máquina me sale mal, me van a responder).

Quiero que establezcan con nosotros una relación de confianza y no de miedo hacia la competencia. Si la competencia hace lo mismo, la sensación final que queda es la de miedo. Iniciar una relación comercial con las bases de Miedo, Incertidumbre y Duda, al menos a mí, me sitúa enfrente de mi proveedor, y no al lado…



El problema de usar software propietario…

He tenido un problema con Contaplus, que cuando menos, hace plantearse el utilizar software propietario. Disponemos de la versión Élite 2008, con las últimas actualizaciones oficiales para la adaptación al nuevo plan contable.

El ordenador en el que Contaplus está funcionando debe ser cambiado: Quiero por tanto, desinstalar la aplicación de este ordenador, e instalarla y llevarla a otro ordenador. Mi licencia, me permite además disponer de varios clientes accediendo al programa. La activación de Contaplús requiere deuna contraclave que proporciona SAGE para poder utilizar el software: Es decir, la secuencia de instalación es:

  • Instalas Contaplús
  • Introduces tu número de serie o de licencia
  • El software te proporciona un número
  • Llamas a Contaplús (a un 902), en el que le das esa número, te proporcionan una contraclave y ya puedes utilizar el software

SAGE internamente marca esa licencia como “bloqueada”, de modo que no podría volver a instalar el programa en ningún otro ordenador, ya que me pediría otra contraclave que SAGE no proporcionaría. Hasta ahí todo correcto, y es un mecanismo más de protección.

Bien, mi problema viene al intentar desinstalar Contaplús del ordenador obsoleto. Ya realizada la copia de seguridad, y tras proceder a iniciar el programa de desinstalación de SAGE, éste provoca un error, y se cierra. Sí, un error como: El programa ha realizado una operación no válida y debe cerrarse.

Llamo al número de atención telefónica de SAGE a ver si pueden darme otra vía, y su respuesta es que no, que si quiero otra vía, contrate el servicio de mantenimiento. “¿Cómo? Oiga, su software genera un error en mi ordenador… ” “No, no tiene usted solución. No le puedo desbloquear la licencia”. “Oiga, la instalación es multipuesto, he comprado la licencia en red…” “No. Sólo puede usted poner una queja”.

Pongo la queja, y atención a la respuesta: Sin desperdicio


Estimado Cliente:
Nos ponemos en contacto con usted para informarle
que una vez recibido su correo electrónico y valorado,
sentimos comunicarle que no podemos proceder a
liberar la licencia ya que el problema con su equipo
es considerado causa ajena a SAGE y para generar nueva
contraclave es necesario el código de desinstalación
o en caso de no tenerlo activar el servicio de
mantenimiento con el cual además podrá realizar
consultas sobre la utilización del programa.

Si está interesado póngase en contacto con
nosotros en el 902 XX XX XX XX

Sin otro particular reciba un cordial saludo

O sea, su software genera un error, y es causa ajena a SAGE… Increíble. Evidentemente, nosotros no vamos a seguir utilizando Contaplús. Buscaremos otros software.  Os adjunto el mail de respuesta:

A la atención del servicio de Postventa,
Nos sorprende negativamente esta respuesta, negando
a los clientes solución a un bug (error) grave de
programación de su sistemas. La no liberación de una
licencia pagada previamente ante un problema técnico
causado por un error en su sistema (propiedad y
responsabilidad de SAGE), supone una violación
clara del contrato de compra-venta y por ello,
es susceptible de reclamación por otras vías.
La no asunción de responsabilidad ante un error
generado por su software, pone en serio peligro
la relación de confianza entre proveedor y cliente
no sólo con nosotros, sino con todos los usuarios de
este sistema.

Su negativa a no proporcionarnos ninguna otra vía
para poder utilizar su software según las vías establecidas,
nos hará llevar nuestra reclamación por otras vías en las
que exigiremos los consiguientes daños y perjuicios ante
el incumplimento del contrato de compra-venta.

Reciban un saludo

Por algo creo en el software libre…



PEFC

Esta mañana he tenido la suerte de asistir a unas interesantísimas jornadas organizada por PEFC España, con el título “El futuro de los bosques está en tus manos”.

PEFC es una de las certificaciones forestales existentes, junto con FSC. La idea subyacente bajo estas certificacioneses garantizar al consumidor final de la industria forestal (que agrupa entre otroas a la maderera y la papelera), que el producto que adquieren provienen de un bosque certificado por una entidad independiente y de confianza como bosque sostenible económicamente, socialmente y medioambientalmente.

Me ha llamado especialmente la atención, la ponencia de un jefe de servicio del Gobierno Navarro (ejemplo de preocupación por la masa forestal), sobre la industria del papel. Creo que no me equivoc citando: “Hace unos 10 años, hubo un movimiento promovido por grupos ecologistas en los que se estigmatizó la tala de un solo arbol. Cierto es que la tala indiscriminada es lesiva e injustificada, pero no es menos cierto que el movimiento de tal viruelencia provocó la no utilización de madera en muchas industrias. Todo ello fue sustituido por aluminio, plástico, y hormigón. Como ejemplo en España, os puedo poner los marcos de las ventanas, todos en aluminio. Todos estos materiales alternativos son mucho más perjudiciales para el medioambiente, que la madera, que además, si proviene de bosques sostenibles aporta la captura de CO2 y paliar los efectos del efecto invernadero”.

También se comentó que es la industria del papel la primera demandante de las certificaciones PEFC. El consumidor, exigiendo que los productos cumplan el estándar PEFC garantizan la sostenibilidad del bosque. Exigiendo PEFC en libros, garantizamos, que ese libro no está perjudicando al medio ambiente. Por otro lado, ¿es biodegradable un aparato electrónico?

Esto me lleva a mis disquisión sobre el futuro del papel: Soy de los que piensa que la tecnología sustituirá al papel, pero que no lo haga a costa del medio ambiente. El papel no es tan perjudicial. Tampoco es tan mediambientalmente bueno el plástico que utilizamos en todos sitios.



Mejorando la experiencia de usuario en AbanQ

La verdad, es que cada día que pasa, me sorprende más gratamente AbanQ. Primero porque examinando el código, es robusto, y está construido con criterio (es raro ver código creado utilizando paradigmas de programación orientado a objetos reales y especialmente utilizandos patrones de diseño adecuadamente, como el objeto FLObjectFactory, que implementa el patrón del mismo nombre…).

Pero siempre hay detalles que son mejorables, especialmente en la interfaz final del usuario, y en la llamada “experiencia de usuario” (qué dificultades o ayudas encuentra el usuario en el programa, siendo simplistas). Partimos de la base de utilizar la versión 2.3 y los módulos 2.2.

Existe una opción en el área de Facturación, dentro de Facturas, en el formulario maestro de Facturas de Proveedores: el botón “Asociar” (nombre mal elegido según mi punto de vista) que permite crear una factura de proveedor a partir de los albaranes emitidos por este. En este formulario, se pueden especificar unos parámetros de búsqueda para así obtener el listado de albaranes que cumplen esos criterios. Esos albaranes se agregan en un control QListView.

El problema de usabilidad viene cuando uno desea consultar algunos datos de ese QListView. Por ejemplo, no presenta ninguna opción de ordenación. ¿Es posible ordenarlo? Veamos como

Read more…



Seguimos con el curso: Introducción a C++

Como parte de un agradabilísimo curso que he terminado de impartir, os dejo aquí la presentación con la introducción a C++. Como otras veces, los tenéis en formato PDF y OpenOffice Impress



Curso programación orientada a objetos: UML

Continuando con el curso, entro en detalle del modelado de sistemas de información utilizando UML. Os dejo la presentación en OpenOffice y PDF, bastante autoexplicativas.