Hagamos que México crezca..

Prefiere el consumo de lo Hecho en México

Visitantes








Conversación

  • Samantha Santin: ola me pueden ayudar con lo basico para un examen de linux , estoy en 10 mo de basica , por favor , gracias  
  • alexandra: hola...tengo problemas para configurar las llamadas y crear los troncales....uso elastix 2.0.3 con asterisk 1.6...y soy nueva en esto..puedo relizar llamadas dentro de una misma oficina, pero no puedo sacarlas fuera, es decir locales e internacionales...necesito asesoria...gracias  
  • Ben: Welcome to visit www.vogue4biz.com and www.seekjersey.com! Wholesale Jordan Shoes and NFL/NHL jerseys!New Arrival ! Free Shipping !
    Consequently, a Avirex jacket variety evolved into winner fashion4biz already in the market, mainly with their variety of air travel puma shoes women jackets which in turn for the most part mimics those of journey outdoor jackets put on around WWII. Due to its results, Avirex make have in addition enhanced by jackets to other common attire outlines including t shirts, hoodies, along with jeans.
    A great number of completely new attire lines also gained plenty of celebrity inside entertainment world. To its captivating pattern in addition to level of quality attire, Avirex includes received its own head connected with celebrity followers which include: Ruben Travolta, Will certainly Henderson, Puffy Hair combs, Chad Good ole', Shaquille O'Neal, Busta Rhymes,, puma shoes ladies Sylvester Stallone, Missy Elliott, Eminem, Nas, All 5, Procedure Guy,, Make Nubian, Lmost all Awesome L, David Cena, as well as Georgio Armani. Start off your individual from suppliers avirex company by www.vogue4biz.com
    Avirex regarding todayIn women s puma shoes 2008, this Avirex make has been bought in 3 entire ladies puma shoes suede puma shoes world districts, United states of america, European countries puma shoe sale along with The japanese. A brand new owner of Avirex brand in the us cat puma shoes can be Draw Ecko Corporation. According to a lot of people, each one districts possess their own libraries regarding Avirex garments range. Not really a pair of parts get identical types associated with outfits. His or her just likeness is with their particular usage of brand.
    Even puma ladies shoes so, the availability associated with flight handling outdoor jackets were quit afterwards that year. In line with Mark, all of Avirex printed government and timeless apparel had been discontinued along with used a new Clymans firm, Cockpit U . s .. Start out your own from suppliers avirex company by Sevenwholesale.com.  
  • Fernando Hernández: Hey! Ya no estan disponibles los posts sobre facturación electrónica en México, podrías pasarme el tutorial o la clase en php? Por favoooor. Gracias  
  • daniel nuñez: buenas soy de venezuela y tengo una duda yo lo que quiero es hacer una iso debian que tenga todos los paquetes necesarios completos y programas como synaptis fortran java los pluging de video y sonido ya instalados osea que tenga todo lo necesario instalado pero sin que sea una instalacion con un cd netinst, es posible ?  
  • Cesar villegas: Buenas!!! oye no tienes programado algún curso?  
  • Urbano: Hola soy de Argentina.
    Desde hace un tiempo tengo instaldo Asterbilling SL y me parece un rpoyecto útil e interesante. Ahora me compré un AT 530 con la intension de pasar la tarifa al telefono pero seguramente algo estoy haciendo mal ya que despues de configurar el script con los datos del AMI; MySQL y ejecutar el comando que indica el manual.. no pasa nada, todo sigue igual y no se muestra la tarifa en la pantalla del telefono. Tal vez deba configurar algo tambien en el telefono.. la verdad no se, es que tampoco soy un experto en la materia. Les dejo algunos datos que talvez sean utilespara que me puedan ayudar: Tengo Elastíx 2.0.3 con Asterisk 1.6; FreePBX 2.7.0.3; A2Billing 1.8.1; Astercc 1.4 y Asterbilling SL. Espero que me puedan ayudar; desde ya muchas gracias.  
  • kike: Oye filein.. necesito una cotización de unas FxO para analógicas porfa..
    saludos  
  • cristy: hola por favor tengo problemas para conectar agi con asterisk me sale un error de broken pipe, sabes de que se trata???  
  • Jose: Heyu como podria funcionar con el CM15?
    Gracias  

Escribe el código Captcha que estás viendo

Trabajo y Proyectos

  • De RoIP a PSTN

    Hace unos días estuve leyendo curioseando en internet encontré un blog dónde hablan sobre RoIP , la cuál es una forma de nombrar los enlaces entre sistemas de Radio con Tecnología de Voz sobre IP, en este caso Asterisk .

    RoIP prácticamente necesita una gateway del lado de asterisk que sirve como interfaz de conexión entre los sistemas de radioaficionados con la tecnología de Voz sobre IP, tal como puede ser una tarjeta de puertos FXO, FXS, GSM, SIP, IAX, etc.,

    Una de las ventajas de los sistemas de radio es su alcance, esto ya que las frecuencias en muchos casos son más bajas y más amplias que el uso de un WiFi o Microondas por ejemplo, aparte que son menos quisquillosas que las anteriores por así decirlo, por lo que el alcance puede ser mucho mayor y la cobertura puede llegar alcanzar a sitios remotos dónde las compañías telefónicas no han puestos sus servicios por cuestiones de costos.

    Por lo que tengo entendido las conexiones entre los sistemas de radio y el gateway es PTT( Push To Talk), tal como funcionan los sistemas de Radio de Nextel en la actualidad.

    La ventaja de meter un sistema de Radio en Asterisk, es que se puede usar el dialplan cuándo se abre un canal entre los 2 puntos, por lo que creo entender y quiero que asi pudiera funcionar es que al estar abierto el canal pudieran recibirse tonos DTMF, de tal forma que se pudieran leer esos tonos DTMF y abrir un canal adicional para poder hacer una llamada en base a los dígitos recibidos y rutearlo a traves de troncales SIP, IAX, FXO o GSM, muy similar a como funciona un DISA.

    esquema_roip


    De hecho hace un par de meses desarrollé una aplicación basada en AMI y AGI que hace esto, pero mediante teléfonos públicos que envían a un número fijo los números a marcar mediante tonos DTMF y secuencias de control, de tal forma que Asterisk recibía la llamada, abría otro canal y dependiendo la respuesta la enlazaba con el canal abierto proveniente del teléfono público.

    Entonces pensando en algo similar creo que sería factible poder implementar un sistema de radio que haga convergencia con VoIP a traves de Asterisk.

    Para poder hacer la convergencia ya existen tarjetas de radio compatibles con Asterisk, de hecho existe un canal específico para esta tecnología ya implementado en Asterisk, por lo que solo falta encontrar algún proyecto y patrocinador para poder echar andar esta tecnología en alguna de las tantas regiones marginadas de México.

    Puede verse más información sobre RoIP en el Blog Alex Casanova quién es un experto en el tema de RoIP :
    http://www.bicubik.net .

    También una presentación en la siguiente url:

    http://www.slideshare.net/alexbogus/barcamp-2010
  • DAHDI con FreePBX 2.5.2

    Desde hace años vengo usando FreePBX como configurador de las funciones básicas de PBX de Asterisk, siempre de la mano con Zaptel y Wanpipe para la instalación de drivers de tarjetas Sangoma.

    Hace un par de días quise romper con mi tradicional instalación de Asterisk que la baso en Asterisk 1.4.18, Zaptel 1.4.12 y FreePBX 2.5, en este caso comencé a usar DAHDI preparándome ya para las nuevas instalaciones con Asterisk 1.6 o a futuro con 1.8, el detalle es que FreePBX no está configurado para DAHDI desde instalación, pero si ya está listo desde hace más de un año para soportarlo con un par de ligeros cambios en la configuración, los cuales comento enseguida.

    Despues de haber compilado Asterisk, DAHDI, Wanpipe, oslec en su caso, e instalado y configurado FreePBX solo hay que editar el archivo /etc/amportal.conf para usar DAHDI con FreePBX.

    #Editamos el archivo de configuraciòn de freePBX
    sudo nano /etc/amportal.conf
    #Descomentar la siguiente linea y poner a true
    ZAP2DAHDICOMPAT=true
    #Guardar el archivo
    #Aplicamos los cambios, depende del directorio de instalaciòn de freepbx
    sudo /usr/src/freepbx*/apply_conf.sh
    sudo nano /etc/asterisk/asterisk.conf
    #buscar despues de [options] la siguiente línea
    dahdichanname = no ; Ponerlo a no para que use renombre a Zap en vez de nombrar los canales como DAHDI
    #guardar el archivo
    #crear una liga dinámica de chan_dahdi.conf a zapata.conf
    sudo ln -s /etc/asterisk/chan_dahdi.conf /etc/asterisk/zapata.conf
    #Reiniciamos Asterisk+FreePBX
    sudo amportal restart
     


    Con esto ya tendremos listo freepbx para usarlo con los canales de DAHDI, asi como también al hacer el enlace dinámico podremos ver en el Flash Operator Panel la info de los canales de DAHDI como si fueran troncales zap, la configuración de troncales de DAHDI se hacen igual que como si tuvieramos los drivers de zaptel.
  • Waiting for Dahdi /dev/dahdi .../etc/wanpipe/scripts/start: 9: Syntax error: Bad for loop variable

    Hoy instalando el último driver de Sangoma para funcionar con DAHDI en Asterisk 1.4, seguí todo el proceso normal hasta llegar a la parte de instalación del GUI, pero al intentar hacerlo me mandaba que el puerto AMI 5038 de Asterisk no estaba abierto.

    Revisando los logs vi que había una línea que me indicaba lo siguiente:

    Asterisk has detected a problem with your DAHDI configuration and will shutdown for your protection. You have options:

    Pero revisando la configuración de /etc/dahdi/system.conf y /etc/asterisk/chan_dahdi.conf, vi que todo estaba bien configurado.

    Por lo que intenté reiniciar asterisk, pero había un loop de reinicio, por lo que volví a reinstalar dahdi, asterisk y drivers de sangoma.

    Despues de reinstalar los drivers de sangoma, quise inicializar wanrouter, pero veía que me mandaba un error como el siguiente en el script de inicialización /etc/wanpipe/scripts/start :

    Waiting for Dahdi /dev/dahdi .../etc/wanpipe/scripts/start: 9: Syntax error: Bad for loop variable

    en la línea 9 estaba el siguiente código

    for ((i=0;$i<=$max_delay;$i++))
     


    Lo que hice fué cambiarlo por la siguiente sintaxis
    for i in `seq 1 $max_delay`; do
     


    Con eso ya quedo resuelta la inicialización de los drivers de sangoma y ya la instalación continuó exitosamente. face-smile.png
  • ¿ Como generar PDFs de páginas web dinámicas ?

    Hace algunos 6 años trabajé para una compañía que distribuye equipo de Symbol Motorola, recuerdo que en ese tiempo la gente de ventas hacia las cotizaciones a mano a veces en una hoja de excel otras en word, por lo que se me ocurrió desarrollarles un sistema de cotizaciones de tal forma que los clientes podían entrar al sitio web, validarse y desde ahí elegir los productos que requerían cotizar.

    En ese tiempo me surgió el detalle de saber de como generar PDFs al vuelo de las cotizaciones generadas por los clientes, ya que los clientes al seleccionar sus productos y presionar el botón de cotizar, el sistema lo que hacía era enviarles una liga a su correo desde dónde podían bajar el PDF directamente.

    Para esto eché mano de htmldoc el cuál es un software que permite generar PDF de archivos HTML, al igual convertir PS a PDF y viceversa.

    Lo que hice básicamente fué pasarle la url a htmldoc del script php con los parámetros para generar la cotización, de tal forma que htmldoc leía el archivo html generado por PHP y lo convertía a PDF, y solo modificaba los encabezados para que el usuario obtuviera un archivo a guardar.


    Lo primero fué poner en un script php el encabezado que debería mandar, que indicara que es un archivo PDF y que lo mandaría como cotización-seguido del número de cotización correspondiente, y que lo enviara como archivo adjunto para que el navegador pidiera que se guardara en un archivo o se mostrará, tal como cuándo le picas a un archivo para descargar.

    header("Content-Type: application/pdf");
    header("Content-Disposition: attachment; filename=\"cotizacion-$_GET[num_quote].pdf\"");
     


    Abajo del script mandaba una llamada al sistema que solicitaba ejecutar htmldoc con los parámetros adecuados, tal como se muestra en el siguiente código:

    passthru("htmldoc --format pdf --left 1.5cm --right 1.0cm --top 1.5cm --bottom 1.0cm " .
        "--headfootsize 8   --footer '/D' --jpeg '90' --links  " .
        "--logoimage '".DIR_IMAGES."pdf.png' --linkcolor '#0000FF' " .
        "--size 'a4' --fontsize 10 --charset 8859-15 " .
        "--webpage \"HTTP://URL_DEL_SCRIPT/PHP?QUE_GENERA_LA_COTIZACION\"  ");
     


    los parámetros son los siguientes:
  • htmldoc binario del convertidor de html a pdf
  • --format pdf: formato a convertir el archivo html
  • --left 1.5cm --right 1.0cm --top 1.5cm --bottom 1.0cm : márgenes del documento
  • --headfootsize 8: tamaño del encabezado y pie de página
  • --footer '/D' : indica que pondrá la fecha en el pié de página
  • --jpeg '90' : comprensión de las imágenes
  • --links : activación de links
  • --logoimage '".DIR_IMAGES."pdf.png': colocará el logo en la parte superior de la página
  • --linkcolor '#0000FF' : color de las ligas
  • --size 'a4' : tamaño del documento
  • --fontsize 10: tamaño de letra del documento
  • --charset 8859-15 : conjunto de caracteres a usar
  • --webpage liga del documento html a convertir a formato PDF

    Con esto lo que hacía es que primero el script php generaba la cotización en base a lo requerido por el cliente, htmldoc convertía el documento a pdf y el encabezado que se mandaba al navegador indicaba que ese archivo generado se descargara o se mostrara en el navegador.
  • Cambiar la tabla y base de datos del CDR de FreePBX y Asterisk para un nuevo sistema de Tarificación Telefónico

    En OaxRom Mobile Computing hemos modificado un sistema de tarificación telefónico el cuál está basado en AsterBilling. La modifiación la hemos realizado ya que AsterBilling requiere licencias en la parte de monitoreo de llamadas, pero la parte de la interfaz web del tarificador es OpenSource y es la parte del software que utilizamos para que muestre los datos en base al CDR de Asterisk directamente. Entre otras ventajas que hemos añadido al nuevo software de tarificador para Asterisk PBX que hemos desarrollado y que pronto liberaremos el código es que permite enviar el costo de la llamada en tiempo real a la pantalla de teléfonos SIP que soporten SIP MESSAGE.

    Continuemos con el tema del post. En este caso hemos usado FreePBX como entorno de configuración de Asterisk, pero como FreePBX trae su propia base de datos y tabla para el manejor de CDR, en este caso fué necesario modificar esta configuración para poder apuntar a la base de datos del software del tarificador que concentra al sistema de tarificación telefónica junto con el CDR de Asterisk y de FreePBX.

    Primero para modificar la configuración del CDR de Asterisk es necesario seguir los siguientes pasos descritos en un post anterior aquí:

    http://phylevn.mexrom.net/index.php/blog/show/Configurando-Asterisk-para-guardar-los-registros-del-CDR-en-MySQL.html

    Ya que se hayan hechos los cambios en Asterisk quedaría hacer los cambios sobre FreePBX tal como se indica a continuación.

    Editar el archivo amportal.conf
    sudo editor /etc/amportal.conf
    Agregar las siguientes líneas
            CDRDBHOST=localhost
            CDRDBPORT=3306
            CDRDBUSER=USERTARIFICADOR
            CDRDBPASS=PASSWORDTARIFICADOR
            CDRDBNAME=DBNAMETARIFICAODR
            CDRDBTYPE=mysql
            CDRDBTABLENAME=cdr
    Con esto solo basta aplicar los cambios en freepbx
    /usr/src/freepbx*/apply_conf.sh
    Y por último reiniciar asterisk
    sudo amportal restart
     
    Ahora solo hay que ver la base de datos y verificar que el contenido se muestre en los reportes de FreePBX.

    Aquí vemos el contenido del CDR de FreePBX & Asterisk

    CDR de FreePBX enlazado a Asterisk y Sistema de Tarificación Telefónico


    Y en el tarificador podemos ver las llamadas tarificadas para la cabina 103 que es desde dónde se originaron las llamadas, para esto desde el sistema de tarificación habilitamos que tarifique llamadas con longitud de destino de 3 digitos y el costo de cargo de conexión es por 2 pesos por los primeros 60 segundos y 1 peso adicional por 60 segundos adicionales.
    Captural de Pantala de Interfaz Web de Caseta Telefónica Cabina 103
  • Como cambiar de formato las voces pregrabadas en Asterisk Ej. de GSM a Ulaw

    Hace unos días instalé un Conmutador de Voz sobre IP basado en Asterisk para un cliente, todo jaló bien, su tarjeta Digium de 4 Puertos FXO, su IVR, DISA, Grupos de Marcación, recepción y envío mediante fax virtuales, etc., pero al final había un solo detalle, las voces pregrabadas de Asterisk no se escuchaban bien, esas voces que te dicen que "la extensión no está disponible", "marcación incorrecta", etc, etc. se escuchaban bajas y con mucho ruido.

    Al revisar los Teléfonos VoIP que estaban usando en la configuración noté que solo soportaban los códecs ulaw, alaw, g729 y g723, por lo que de ahí se derivaba el detalle, ya que las voces pregrabadas estaban en formato GSM, entonces asterisk al realizad transcoding de GSM a g711u(ulaw) al parecer el teléfono no lo aceptaba tan bien que por ello se generaba la poca calidad de las voces pregrabadas.

    Para esto no se me ocurrió más que convertir las voces de GSM a ulaw haciendo uso de asterisk mediante el comando :

    rasterisk -x "file convert archivo_origen.gsm archivo_final.ulaw"
     


    Para esto hice un script en PHP que convirtiera al vuelo los más de 1000 archivos en formato gsm, para pasarlos a formato ulaw.

    El script es el siguiente:

    #!/usr/bin/php5
    <?
            //ejemplo de uso : astconvert.php *.gsm .ulaw /var/lib/asterisk/sounds/es
            if($argv[1]!=""){
                    $extension = $argv[1];
                    $extension_salida = $argv[2];          
                    ($argv[3]=="")? $soundsDir = "/var/lib/asterisk/sounds/es_ulaw":$soundsDir = $argv[3];
                    $command = "find $soundsDir -iname \"$extension\" ";
                    exec($command, $_result);
                    $count=0;      
                    foreach($_result as $file){
                            $extension = str_replace("*", "", $extension);
                            $out_file = str_replace($extension, $extension_salida, $file);
                            $command =    "rasterisk -x \"file convert $file $out_file\" ";                        
                            echo $count++." : ".$command."\n";
                            exec($command);
                    }
            }
    ?>
     


    Básicamente como se usa el script es de la siguiente forma

    astconvert.php <*.FORMATO_A_BUSCAR> <.FORMATO_A_CONVERTIR> <DIRECTORIO_DONDE_BUSCAR>
    astconvert.php *.gsm .ulaw /var/lib/asterisk/sounds/es
     


    Con esto básicamente ya podremos convertir nuestros archivos GSM a ULAW, de tal forma que podría sacarnos de un apuro como el que me salió aquella mañana en las oficinas de mi cliente.

    Solo como recomendación es necesario tener permisos de escritura sobre el directorio dónde se va hacer la conversión de formato.
  • Crea tu propio LiveCD personalizado con remastersys

    Hace unos días un cliente me adquirió un sistema de WebSMS Marketing, este sistema permite enviar múltiples SMS personalizados desde una página web lo cuál facilita enviar cientos de mensajes en un solo click a múltiples destinatarios generando mensajes con Nombre, Apellido, Título. Este sistema de mercadotecnia y publicidad usa los puertos seriales de teléfonos móviles que se conectan por USB, pero esto solo funciona en Linux, por lo que para instalar el sistema es requerido tener previamente Linux instalado.
    En este caso mi cliente no tiene conocimiento de linux, por lo que me vi a la tarea de facilitarle las cosas, para esto primero intenté crear una imagen mediante VirtualBox, pero igual el proceso de instalación y configuración no es tan rápido y amigable para un usuario neófito. Por lo que al final decidí crear un LiveCD basado en una instalación de Ubuntu con lo que ya estaba todo preinstalado y solo reiniciaba con el disco para tener toda la plataforma de mercadotecnia por SMS preinstalada sin tener que modificar nada en su computadora.
    Para esto usé una instalación nueva de Kubuntu dónde hice todo el proceso de configuración de los paquetes necesarios, modificación de archivos de configuración, permisos, crontab, etc., y ya que el sistema estaba a punto solo descargue remastersys para poder crear un ISO de la instalación creada.
    Para poder instalar remastersys es necesario agregar el repositorio a /etc/apt/sources.list
    sudo echo "deb http://www.geekconnection.org/remastersys/repository ubuntu/" >>  /etc/apt/sources.list
    sudo apt-get update
    sudo apt-get install remastersys
     
    Ya que esté instalado remastersys, solo basta ejecutar
    sudo remastersys dist
     
    Con lo que comenzará a crear un ISO de nuestra instalación de Kubuntu, esto es muy práctico para hacer respaldos de todo nuestro sistema.
    Como nota adicional remastersys no guarda en el ISO personalizado los directorios debajo de home, unicamente el de /home/remastersys, por lo que si se deseara tener una configuración de escritorio personalizada habría que copiar tus archivos ~/.* a /home/remastersys/
    Si estuvieras corriendo VirtualBox y de tú instalación virtual desearas generar tú iso y ya no tienes mucho espacio en tu disco duro virtual podrías hacer algo como esto:
    sudo apt-get install smbfs
    sudo rm -rf /home/remastersys
    sudo mount -t smfbs \\servidor_windows_samba\directorio /home/remastersys
    sudo chmod -R 0777 /home/remastersys
     
    Remastersys es una forma rápida y fácil de crear un LiveCD personalizado con tu instalación de Linux. Hay muchas otras formas de hacerlo como Debian from Scratch la cuál es muy recomendable aunque un poco más complicada de generar.
  • Las SuperComputadoras más rápidas del planeta corriendo sobre Linux

    Hubo una vez, supercomputadoras usaban modelos de vectores especiales de procesadores para tener una velocidad significante. Entonces a principios del siglo XX1 personas empezaron a trabajar para romper un record en velocidades de computo ligando cientos de procesadores comerciales corriendo linux y conectados a una red de alta velocidas en arreglos PPM(Procesadores paralelos masivos). El supercomputo mundial nunca había sido el mismo. Hoy, Linux es quién manda en las supercomputadoras.
    De las últimas 500 mejores supercomputadoras listadas en las computadoras más rápidas del planeta claramente muestran el poder de Linux, ya que 469 de ellas están corriendo alguna versión de Linux.
    Para ser exactos 391 están corriendo su propia versión de Linux, 62 corren versiones de Novell'S SuSe Linux, incluyendo vriantes como UNICOS/lc y CNL(Nodo de Computo Linux). Red Hat es relativo, incluyendo CentOS viene en segundo con 16 supercomputadoras.
    Los miembros del club Top 500 de Supercomputadoras que no son Linux son IBM's AIX Unix con 22 computadoras es el único serio competidor. Microsfot y Sun con Windows HPC 2008 y OpenSolaris apenas con 5 supercomputadoras para windows y un par para OpenSolaris.
    Linux no es solo un estándar en supercómputo, también está rompiendo los libros de records. El más rápido de los rápidos es ahora la SuperComputadora Cray XT5, conocida como Jaguar. Jaguar que corre CNL, no solo toma el primer lugar si no que se mantiene lejos de los competidores con una velocidad de 1.75 Petaflops por segundo, haciendo polvo al record previo en 1.04 Petaflops por segundo. (Un Petaflop es 1,000 trillones, un cuadrillón, cálculos de puntos flotantes por segundo).

    Foto tomada por laughingsquid con licencia CC en Flickr.com
    ¿ Que es inclusive más increíble que el correcaminos de IBM ? Otro Sistema Linux, el cuál mantiene el record más alto que rompió la barrera del petaflop en el verano del 2008. O Quizás no es tan increíble cuándo se considera que con lidereando el camino, el miembro más lento de esta nueva lista puede hacer 20 teraflop(Trillones de calculos de punto flotante por segundo). En otras palabras esta lista de los sistemas más lentos deberían ser rankeados en el lugar 336 del Top 500 hace seis meses atras.
    Linux y el desarrollo en sistemas PPM basados en linux programan técnicas que no pueden tomar todo el crédito. Jaguar, que está ubicado en el departamento de energía de Oak Ridge, fué actualizado de quad-core a procesadores six-core AMD Opteron. Después de esta actualización, Jaguar corrió un quarto de millones de procesadores. En teoría, Jaguar puede rebasar una velocidad de 2.3 Petaflop por segundo.

    Foto tomada por laughingsquid con licencia CC en Flickr.com
    Entre las mejoras continuas en velocidades de procesadores multi-core, redes y el desarrollo de Linux, podemos esperar ver nuevas supercomputadoras ganando altas velocidades en un corto tiempo. En esta tasa, nosotros deberíamos ver exaflop(Un quintillón de cálcuos por segundo) soportados por Linux antes que finalice este 2010. Eso no es solo teoría. IBM ya está trabajando en el diseño para tal monstruo de supercomputadora para el proyecto del kilómetro cuadrado del arreglo de telescopios. ¿ El sistema propuestro ? Linux por supuesto.
    Leído en http://blogs.computerworld.com/15111/linux_powers_the_fastest_computers_on_the_planet
  • Generando reportes en PHP usando plantillas creadas con OpenOffice (WYSIWYG).

    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
          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
            ),
          )
     
    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.. face-smile.png
    Puedes obtener más información en :
    http://tinydoc.unesolution.fr/
  • ¿Qué es el BlueTooth Marketing?

    Por ahora es una moda electrónica, que consiste en enviar publicidad electrónica a través de dispositivos bluetooth de forma automática e instantánea.
    El Marketing Bluetooth permite enviar audio, imágenes, video, vcards, ringtones, texto, códigos de barras, etc., a dispositivos móviles, aunque no todos los móviles soportan los diversos archivos multimedia, por lo que siempre es recomendable enviar en primer instancia imágenes y texto.
    Con esta tecnología es posible enviar a cualquier móvil cercano al sistema Bluetooth Marketing la publicidad multimedia previamente seleccionada. En la actualidad ya en el mercado existen diversos dispositivos y software para montar publicidad electrónica por bluetooth, solo basta buscar en Mercado Libre Bluetooth Marketing para encontrar diversas soluciones.
  • Anterior página 1 ... 4 5 6 ... 13 Siguiente página
    125 entradas

    Emblemas

    Energizado por Jaws Project
    Soporta RSS2
    Energizado por Software Libre
    Energizado por Mozila Firefox
    Energizado por Ubuntu Linux
    Energizado por PHP
    Energizado por Apache Web Server
    Energizado por MySQL
    Energizado por SQLite
    atom

    ¿ Where The Hell Am I ?

    Mi Flickr







    Aquí Mis Mejores Fotos

    Eventos

    Encuesta

    ¿Que medio de comunicación usas más ?

    Comentarios Recientes