Hace unos días entré al sitio de http://www.rowetel.com para bajar OSLEC que es un cancelador de eco por software para Asterisk que funciona excelente en tarjetas de telefonía IP que no traen hardware de cancelación de eco y que me ha funcionado bastante bien hasta con 10 puertos FXO. Como andaba de ocioso entré a su blog y leí un post que hizo David Rowe quién es el desarrollador de OSLEC entre otros proyectos como un Auto Solar y también de un PBX con 4 FXO totalmente abierto de software & hardware, y ví en su blog acerca de un proyecto que le llaman The Mesh Potatoes, el cuál me parece muy interesante y platico porqué..
The Mesh Potatoe es un proyecto de Sofware & Hardware completamente abierto que permitiría a comunidades marginadas tener una red de telefonía local, ¿Cómo? Su idea es tener ruteadores inalámbricos 802.11bg el cuál aproveche B.A.T.M.A.N (Better Approach To Mobile Ad-hoc Networking) software basado en herramientas que corren sobre Linux, de tal forma que la idea es que un dispositivo tenga un chip inalámbrico basado en Atheros ya que las librerías son abiertas, así como también un módulo FXS de hardware abierto desarrollado por David Rowe, así como un códec speex y oslec como cancelador de eco. De tal forma que la conjunción de todas estas tecnologías permitan tener un dispositivo el cuál calculan su costo sería de $100 dlls en un inicio y permitiría intercomunicar todas las casas de algún pueblo o villa, haciendo saltos entre si mediante un ruteo inteligente proporcionado por BATMAN.
En la foto David Rowe ingeniero australiano creador de OSLEC y desarrollador de hardware abierto.
El proyecto realmente es interesante y vaya que es de aplaudir el interes de la Fundación Shutleworth quién tiene a cargo el desarrollo de Ubuntu por apoyar un proyecto como este que bien ayudaría a pueblos de Africa y también algunas regiones de America Latina que hasta el día de hoy permanecen marginadas. Ojalá este proyecto se lleve a la práctica y pronto veamos que con Software Libre, Hardware Libre y Personas con calidad humana logren que muchas personas marginadas tengan un mundo mejor.
Puede leerse más sobre este proyecto en el blog de David Row:
Hace unos días desarrollando un sistema el cuál requiere generar facturas, estuve buscando una manera de poder hacerlo práctico, esto ya que la factura se mandaría a un formato preimpreso, por lo que la información debería coincidir con el formato, lo primero que me recomendaron es usar FPDF el cuál es una librería que funciona en PHP y que es relativamente fácil de usar, digo relativamente porqué hay que usar coordenadas para poder generar el documento lo que la vuelve algo complicada, más aun si se quiere dejar libertad al usuario que genere sus propios formatos.
Imaginaba que se podía hacer algo con OpenOffice (OO), ya que usa ODF(Open Document Format) el cuál es un formato abierto en XML. Los archivos generados por OpenOffice vienen comprimidos en formato .zip, al descomprimirlos genera varios archivos, de los cuáles el principal es content.xml, el cuál contiene la información que hemos capturado en el archivo, esto aplica para archivos de Hojas de Calculo, Procesador de Textos o una presentación de OO.
Despues de desmenuzar los archivos de OpenOffice se me ocurrieron varias mafufadas que no tiene caso comentar aquí, pero lo cuál me llevó a encontrar una Librería Abierta llamada TinyButStrong [http://www.tinybutstrong.com/] , la cuál tiene un plugin para OpenOffice llamada TinyDoc [http://tinydoc.unesolution.fr/] que permite rellenar una plantilla de OpenOffice fácilmente y en unas cuantas líneas, lo que nos ahorra mucho trabajo al generar reportes.
El concepto es muy fácil, definir variables en nuestro documento que luego serían sustiuídas. Por ejemplo si en nuestro documento de OpenOffice pusiéramos en alguna parte:
[factura.fecha]
En TinyDoc tendríamos que tener un arreglo que contenga la llave fecha para que la sustituya en OpenOffice
$_factura=array("fecha"=>"2009-01-01");
De tal forma que ese arreglo lo asignamos al "parser" de plantillas de TinyDoc, algo como lo que se hace en los templates de smarty
$doc->mergeXmlField('factura',$_factura);
Si queremos listar información por ejemplo el detalle de una factura (productos) usaríamos el método
$doc->mergeXmlBlock('detalle',$_detalle);
En Open Office usaríamos [detalle;block=table:table-row] para indicar que es un bloque de datos, y luego poner en alguna parte del documento[detalle.cantidad][detalle.descripcion][detalle.preciounitario][detalle.importe] para que liste el contenido del arreglo de arreglos, dónde el arreglo de detalle sería un arreglo como la siguiente manera
Y con esto se sustituiría la información en OpenOffice, respetando el estilo, posición, etc., por lo que tendríamos un reporteador WYSIWYG( Waht You See Is What You Get - Lo que ves es lo que obtienes).
Por ejemplo aquí muestro como sería el archivo plantilla en OpenOffice usando la "sintaxis" de TinyButStrong, De Lado derecho vemos como quedaría el archivo de OpenOffice despues de que se parseo con TinyButStrong.
(Click para ver la imagen más grande)
Un código de ejemplo de como procesar archivos de Open Office con PHP y TinyButStrong sería:
<?php //llamamos a las librerias de formateo de plantillas de Open Office include('lib/tinyButStrong.class.php'); include('lib/tinyDoc.class.php'); //Creamos un Objeto de la Clase $doc=new tinyDoc(); //Indicamos que OpenOffice esta en formato .zip, en linux hay que verificar que tengamos instalado unzip: sudo apt-get install unzip $doc->setZipMethod('ziparchive'); //Indicamos que el directorio temporal dónde descomprimira el archivo OD* de Open Office $doc->setProcessDir('./tmp'); //Le indicamos el archivo de Open Office que creamos como plantilla $doc->createFrom('formato_factura.odp'); //Indicamos el archivo que escribirá, OpenOffice guarda en content.xml la información capturada en el archivo $doc->loadXml('content.xml'); //Funcion que formateara la plantilla de Open Office
crea_factura($doc); //Indicamos que genere uan descarga del archivo para el usuario $doc->sendResponse(); //Elimina toda la información que fué creada temporalmente $doc->remove();
function crea_factura($doc) { //En el archivo plantilla de de openoffice tenemos [factura.fecha], [factura.subtotla], [factura.iva], [factura.total], [factura.totaltext] //Lo que hace la clase es cambiar la información por la que asinemos aquí, si vemos asignamos el arreglo a factura y el método usado es mergeXmlField $doc->mergeXmlField('factura', array( 'id'=>'1', 'fecha'=>date('Y-m-d'), 'subtotal'=>10250, 'iva'=>1537.5, 'total'=>10787.5, 'totaltext'=>'Diez Mil Setecientos Pesos Cincuenta Centavos', ) ); //Al igual que en factura a cliente le asignamos el arreglo de cliente que tiene las llaves que seran sustituidas en la plantilla //usamos el metodo mergeXmlField ya que es un arreglo unidimensional $doc->mergeXmlField('cliente', array( 'id'=>'1001', 'nombre'=>'OaxRom SA de CV', 'direccion'=>'Encuentranos en http://www.oaxrom.com', 'rfc'=>'OAX090101C45' ) ); //Este método es interesante, ya que nos permitirá mostrar listados en la plantilla //En la plantilla tenemos [detalle.cantida] [detalle.descripcion][detalle;block=table:table-row] [detalle.preciounitario] [detalle.importe] //Usando la funcion mergeXmlBlock, podremos listar información de un arreglo de arreglos en forma de listas, esto es práctico cuándo se intenta //mostrar informacion de productos en una factura por ejemplo, donde el numero de productos puede ser 1 o varios, esto lo que comunmente se llama detalle $doc->mergeXmlBlock('detalle', array( array( 'cantidad'=>2, 'descripcion'=>'Adaptador SPA3102', 'preciounitario'=>1450.00, 'importe'=>2900 ), array( 'cantidad'=>3, 'descripcion'=>'Modulos FXO', 'preciounitario'=>1400.00, 'importe'=>4200.00 ), array( 'cantidad'=>1, 'descripcion'=>'Router Inalambrico WRT54G ', 'preciounitario'=>650, 'importe'=>650 ), array( 'cantidad'=>1, 'descripcion'=>'Tarificador Web Asterisk', 'preciounitario'=>2500, 'importe'=>2500 ), ) ); //Ya que la clase asigna los valores, guarda la información $doc->saveXml(); /*
$doc->loadXml('styles.xml');
$doc->mergeXmlField('header',
array(
'title' => 'made with tinyDoc and',
'img' => 'images/samples/openoffice-by-benjamin-bois.png',
)
);
$doc->mergeXmlField('footer',
array(
'signature' => 'image credit : Benjamin Bois',
)
);
$doc->saveXml();
*/ //cerramos el archivo $doc->close(); } ?>
He subido un proyecto de ejemplo a http://files.mexrom.net
entra con login:invitado y password:invitado
Entra a la carpeta TinyButStrong y descarga el archivo factura.zip
Descomprime la carpeta en algún directorio de tú servidor web y desde tu navegador abre por ejemplo:
http://localhost/factura/formato_factura.php
Y esto debería generarte un archivo de OpenOffice como muestro en la parte derecha de la imagen de arriba.
Con tinyDoc es fácil crear reportes en PHP y obteniendo datos de MySQL, solo es cuestión de crear la plantilla y listo..
Puedes obtener más información en : http://tinydoc.unesolution.fr/
Hace algunos días un contacto en internet me adquirió un SPA3102 y me preguntó como se configuraba este SPA3102 para poder conectarlo a Asterisk y poder sacar y recibir llamadas usando el SPA3102 y conectándolo alguna aplicación de FreePBX tal como un IVR, Grupo de Marcación, Correo de Voz, etc.
Para esto hice un pequeño tutorial gráfico paso a paso que se lo envíe y lo pongo aquí por si alguien le puede interesar.
Hace unos días estuve peléandome para instalar Postfix+Dovecot+SASL con soporte de dominios y usuarios virtuales con MySQL, pero tuve algunos detalles para integrar SASL con Postfix y no encontré mucha información al respecto, pero como me urgía tener soporte de correo electrónico para un dominio en específico estuve buscando opciones y una que me gustó fué la que me ofrece mi proveedor de dominios godaddy, el cuál tiene un plan de 20 dlls anuales por 2 GB distribuidos como quieras en 5 cuenta de correos, considerando que el dominio me cuesta $ 8.95 dlls, entonces por menos de $ 30 dlls ya tengo mi dominio y ellos se encargan de darte el servidor de correo, por lo que puedes accederlo directamente desde la web o a traves de imap o pop para gestionarlos con clientes de correo como Thunderbird o si eres Windowzero con Outlook.
Ya tendré tiempo para documentarme más sobre Postfix e integrarlo con las otras soluciones OpenSource pero por ahora he salido del apuro.. Si alguien tiene info de como instalar Postfix+Dovecot+SASL les agradecería que me la enviaras a phylevn arroba oaxrom punto com
Hace tiempo instalè Firefox 3.0 pero desde que lo instalè algo que no me gusto de esta versiòn fuè su nueva barra de direcciones, a muchos les parece novedoso y bonito, lo novedoso si lo es, pero para mi no es tan bonito, esto porquè la nueva barra de firefox permite hacer bùsquedas en el historial o los bookmarks de las palabras que pongamos en el navegador, quizà para muchos esto les funcione pero en mi caso no, ya que siempre inicio poniendo en la barra de direcciones el principio del url.
Entonces por ejemplo si pusiera phylevn, para buscar phylevn.binniza.com, con la actual barra de firefox 3 me listaría todas las páginas dónde tengo las URL o tìtulos de las páginas lleven phylevn como flickr.com/phylevn, youtube.com/phylevn, twitter/phylevn, etc., pero esto no es práctico ya que solo busco la url que empieza con phylevn.
Por lo que buscando en internet encontré en un foro que la forma fácil y rápida de asemejar la barra de direcciones de firefox 3 a la versiòn 2 es editando la configuraciòn, para esto solo basta escribir en la barra de direcciones:
The GIMP es un software bastante avanzado para edición de imágenes en Linux o Windows, se le puede comparar incluso con Photoshop, pero para ser honestos creo que The GIMP sería más bien para uso casero, mientras que Photoshop si es un editor de imágenes mucho más profesional, pero aun así The GIMP no le pide nada a Photoshop, ya que tiene sin fin de herramientas, aparte que tiene una tecnología que la hace mucho más práctica la cuál son los scripts.
Los scripts permiten aplicar ediciones rápidas a las fotos, de tal forma que lo que hiciéramos a mano como por ejemplo desenfoque, cambio de color, capas, etc, todo eso que son una serie de pasos se encapsulan en un script y se hacen posteriormente de forma automática.
Para no hacer el cuento largo The GIMP ya trae varios script preconfigurados, pero podemos añadirle varios más que nos permitirían editar nuestras fotos de manera rápida y sencilla dándole un toque interesante, para ellos hay unos scripts en sourceforge GimpFX foundry que pueden agregarse a The Gimp.
Para esto solo basta ir al sitio de GimpFX Foundry y bajarlos http://sourceforge.net/projects/gimpfx-foundry/
mkdir fxfoundry cd fxfoundry wget http://downloads.sourceforge.net/project/gimpfx-foundry/gimpfx-foundry-scriptpack/gimpfx-foundry-2.6-1/gimpfx-foundry-2.6-1.tar.gz?use_mirror=softlayer tar-xzvf gimpfx-foundry-2.6-1.tar.gz #copiamos los script al directorio dónde pudieran estar los scripts en linux, para ubicar los directorios de The Gimp usamos "whereis gimp" cp*.scm /usr/share/gimp/2.0/scripts
En Windows deberían en el directorio de The GiMP bajo archivos de programa.
Con estos scripts rápidamente ya podemos editar una foto con The GIMP y luego con el botón derecho seleccionar FX Foundry y aplicar el script que pudiera ser ideal para nuestra foto.
LXDE es un entorno de escritorio ligero para Linux, hace tiempo lo tengo instalado en mi laptop como escritorio alternativo.
Uno de los detalles que se me presentó con este entorno de escritorio es que no tiene activada la tecla "Imprimir Pantalla", por lo que cuándo quería capturar algunos screenshots simplemente no podía, por lo que busqué como poder hacerlo.
Para esto tuve que instalar scrot que es una aplicación de consola que realiza la captura de pantalla.
Ahora solo reiniciar la sesión con el escritorio de LXDE para que tome los cambios.
Lo que hará esta configuración es que se usará scrot para tomar la captura de la pantalla cuándo se presione la tecla de "Imprimir Pantalla" y lo mandará al editor de imágenes de kolourpaint.
Por default scrot guarda las imágenes en el directorio home del usuario.
En un estudio realizado por The Easter Management Group acerca de Fabricantes de PBX, han llegado a la conclusión de que Asterisk PBX ya tiene el 18% del mercado mundial de conmutadores de Voz sobre IP.
Algunos fabricantes de PBX en el 2008 tuvieron que cerrar sus plantas tal como fué el caso de Siemens, mientras que otros tuvieron perdidas y otros no tanto muchas ganancias, pero sin embargo Asterisk PBX llegó a crecer hasta un 40 % tan solo en el 2008 a nivel mundial llegando a tener una cuota del mercado del 18%, una cifra bastante respetable y positiva para este proyecto que lleva menos de 10 años de haber surgido y que en los últimos 2 ha visto su despegue.
Como podemos ver en la gráfica tiene mucho mayor número de PBX que Avaya, Cisco, Nortel, Mitel, Nec y solo por debajo de la conjunción de otros, 2.85 millones de Asterisk en oficinas, call centers, empresas, etc., es una cifra realmente sorprendente.
Los fabricantes de PBX han subestimado a Asterisk pensando que solo algunos hackers, geeks y unos cuántos seguidores lo estarían usando, más sin embargo en la industria ya es bien conocido este poderoso proyecto que es Asterisk por su innumerable de características positivas. Esto ya que los fabricantes de PBX actuales en la mayoría su tecnología es cerrada tal cuál sus protocolos por lo que siempre se dependerá de un solo proveedor, en cambio en Asterisk debido a la libertad de elección que se tiene hay muchos desarrolladores certificados que podrían dar soporte a la tecnología al igual que muchas empresas que soportan el protocolo estándar de Asterisk, otra de las características es la flexibilidad que tiene Asterisk para su integración con diversas aplicaciones de telefonía, de datos y de conexión a dispositivos lo que la hace sumamente poderosa a la hora de integrar la tecnología en un ambiente empresarial.
Hace unos días adquirí vía internet una aplicación para probarla, hice mi pago, baje el software y al probarlo verifiqué que era un LiveCD el cuál se encarga de hacer Bluetooth Marketing, al echarlo andar vi que usaba software libre para enviar publicidad electrónica a dispositivos bluetooth, tal como rfcomm, sdptool, hcitool, hciconf, etc., pues vi que los ejecutaba al momento de arrancar el LiveCD.
El LiveCD corre sobre un Debian, pero venía cerrado es decir no te daba consola, solo mantenía la ejecución del software y listo no podías entrar, por lo que quise saber como funcionaba este software tan interesante para hacer bluetooth marketing y lo primero que se me ocurrió fué abrir el LiveCD y lo monté en un directorio
Hasta aquí todo bien chequé los directorios el cuál venía un isolinux dónde se cargan los archivos de booteo, así como también live donde viene un archivo llamado filesystem.squash, el cuál es el sistema de archivos de Linux comprimido en un solo archivo de tipo squashfs.
Cómo por ingeniería el iso es de solo escritura lo copié a otro directorio
Con eso ya tenía el directorio del sistema listo para ser explorado, igual como el directorio aquí es de solo lectura lo copié a otro directorio y le cambié permisos.
Con esto ya podría explorar y modificar los archivos para luego poder regresarlo a formato sqush y de ahí crear mi iso personalizado.
Al ver el directorio del LiveCD que me entregaron lo primero que quise buscar fué el drectorio de configuraciones de linux, el cuál no estaba en /etc si no más bien oculto, para lo cuál solo bastó una búsqueda con el comando find
sudofind/-iname"init.d"
busqué init.d porqué es generalmente donde se ponen los archivos que arrancan el sistema en este caso lo encontré dentro de subdirectorios de /opt y de ahí ya podía empezar con modificar el modo de arranque que por default estaba en 2 y lo cambié a 4 en el archivo de /etc/inittab
en el directorio /etc/rc.2 igual encontré los comandos de autoejecución y entre ellos los de arranque del sistema de envíos de bluetooths, que igual estaban escondidos y desparpajados, pero fué fácil encontrarlos usando el comando
find/-type f | xargsgrep"cadena-a-buscar-dentro-de-archivos"
Con esto bastó para encontrar cada uno de los archivos del sistema de bluetooth marketing, solo los copié a un directorio de mi pc y de ahí los dejé instalados en mi Ubuntu 7.10, al ejecutarlo me pidió algunas librerías que solo bastó copiarlas de /usr/lib del directorio del LiveCD abierto y listo ya tenía ejecutando el sistema de bluetooth.
Pero todavía me encontré con otra prueba, el sistema de bluetooth solo permitía enviar los archivos que yo les había mandado, y esto los generaba al instante que se ejecutaba el sistema de bluetooth marketing, lo que hice fué usar otros archivos con el mismo nombre solo ponerles modos de solo lectura así el sistema al ejecutarse no podría crearlos pues tomaba los ya creados y que no podían sobreescribirse debido a los permisos.
Con esto ya pude tener el sistema de bluetooth marketing en mi laptop para usarlo sin un live cd o máquina virtual y pudiendo modificar las campañas publicitarias con los archivos que yo quiero
También como comentario adicional se puede usar la línea de comandos mkisofs para poder crear un iso en base a un directorio e igual isomaster que es una aplicación gráfica para su uso en linus y crear isos y livecds.
Básicamente la idea del post es comentar sobre como abrir un live cd y poder crear otro a tu antojo.
Por default Asterisk guarda los registros de llamadas en un archivo llamado Master.csv el cuál es un archivo de texto separado por comas, pero para otros fines a veces es necesario tenerlo en una base de datos para su posterior consulta, por ello pongo aquí un tutorial de como conectar Asterisk a MySQL para guardar los CDRs.
Sobre entendiendo que ya se tiene instalado Asterisk, MySQL y todas las librerías requeridas continuamos.
Por cuestión de licencias de MySQL, Asterisk ya no incluye la opción de guardar los registros en una base de datos de MySQL, por lo que ahora esa opción viene en Asterisk-addons el cuál se tiene que bajar para la versión de Asterisk a usar y compilarla.
wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-addons-1.4.9.tar.gz sudotar-xzvf asterisk-addons-1.4.9.tar.gz cd asterisk-addons-1.4.9 #Ya que se descargue y se descomprima la versión de Asterisk Addons se tendrán que editar los siguientes archivos sudo editor cdr/cdr_addon_mysql.c #agregar al principio la siguiente línea tal como está #define MYSQL_LOGUNIQUEID sudo editor cdr/Makefile #agregar al final la siguiente línea tal como está
CFLAGS+=-DMYSQL_LOGUNIQUEID #ahora si compilamos asterisk-addons sudomake clean &&sudo ./configure &&sudomake&&sudomakeinstall #si es una instalación nueva tendrías que ejecutar despues sudo make samples, si no no es recomendable para que no borre configuraciones ya realizadas. #si todo salió bien en la compilación ahora edita el archivo sudo editor /etc/asterisk/modules.conf # y agrega al final
load => cdr_addon_mysql.so
#ahora crea un usuario con su password y una base de datos de mysql que será para el cdr de asterisk
mysql -u root -p
create database asteriskcdrdb;
grant all privileges on asterisk.* to asterisk@localhost identified by "password";
flush privileges; exit; sudo editor asterisk.sql # crea un archivo y agrega lo siguiente
CREATE TABLE `cdr`( `calldate` datetime NOT NULL default '0000-00-00 00:00:00', `clid` varchar(80) NOT NULL default , `src` varchar(80) NOT NULL default , `dst` varchar(80) NOT NULL default , `dcontext` varchar(80) NOT NULL default , `channel` varchar(80) NOT NULL default , `dstchannel` varchar(80) NOT NULL default , `lastapp` varchar(80) NOT NULL default , `lastdata` varchar(80) NOT NULL default , `duration` int(11) NOT NULL default '0', `billsec` int(11) NOT NULL default '0', `disposition` varchar(45) NOT NULL default , `amaflags` int(11) NOT NULL default '0', `accountcode` varchar(20) NOT NULL default , `uniqueid` varchar(32) NOT NULL default , `userfield` varchar(255) NOT NULL default );
ALTER TABLE `cdr` ADD INDEX (`calldate`);
ALTER TABLE `cdr` ADD INDEX (`dst`);
ALTER TABLE `cdr` ADD INDEX (`accountcode`);
#ahora ejecutemos el script de sql
mysql -u asterisk -p asteriskcdrdb < asterisk.sql #ahora solo falta editar la conexión de asterisk a mysql, para eso editar el siguiente archivo sudo editor /etc/asterisk/cdr_mysql.conf #aqui editar los siguientes valores [global] hostname = localhost dbname=asteriskcdrdb table=cdr
password = password
user = asterisk port=3306 sock=/var/run/mysqld/mysqld.sock userfield=1 #es importante que en sock= asignes dónde mysql coloca ese arhivo en Debian y ubuntu por default lo pone en /var/run/mysqld/mysqld.sock #Ahora ya teniendo casi todo listo solo inicia asterisk sudo asterisk start #si usas freepbx entonces sudo amportal restart #verificamos que se haya cargado el módulo de mysql para asterisk sudo asterisk -rvvv
PhylevnMobile*CLI> module show like mysql #y debería mostrar algo como lo siguiente
Module Description Use Count
cdr_addon_mysql.so MySQL CDR Backend 0
app_addon_sql_mysql.so Simple Mysql Interface 0
res_config_mysql.so MySQL RealTime Configuration Driver 0 3 modules loadedI> #ahora vemos el status de la conexión de MySQL
PhylevnMobile*CLI> cdr mysql status #y mostraría algo como lo siguiente
Connected to asteriskcdrdb@localhost, port 3306 using table cdr for1 hours, 1 minutes, 0 seconds.
Wrote 1 records since last restart. -- Registered IAX2 '300'(AUTHENTICATED) at 127.0.0.1:32768 #Si dice Not Connected entonces verificar los parámetros de conexión a la base de datos e igual checar que la base de datos esté dada de alta. #salimos
PhylevnMobile*CLI>exit #ahora marcamos algún número desde un Softphone o teléfono IP para verificar que esté trabajando. #Checamos el registro de la base de datos
mysql .u asterisk -p asteriskcdrdb
mysql>select* from cdr;
+---------------------+-------------+-----+--------+-----------+------------------+
| calldate | clid | src | dst | dcontext | channel
+---------------------+-------------+-----+--------+-----------+------------------+
| 2009-07-2121:36:44 | "1103"<Support> | 1103 | vmu101
+---------------------+-------------+-----+--------+-----------+------------------+ 1 row inset(0.00 sec)
Comentarios Recientes