jueves, 26 de mayo de 2011

Un pequeño capítulo sobre Asterisk para entender algunas cosas

 


Russell Bryant acaba de anunciar su colaboración en un libro llamado “La arquitectura de aplicaciones software libre” donde se recogen diversos capítulos donde se explican el funcionamiento interno de algunas aplicaciones bastante conocidas algunas y otras no tanto, pero todas ellas bastante importantes en su campo:


Aplicaciones como Bash, Audacity, Berkeley DB, Eclipse, CMake, NoSQL, SendMail, Telepathy, y muchísimas más, son explicadas desde el punto de vista de arquitectura de software, manteniendo una profundidad básica como para hacerlo muy interesante, pero sin pasarse para evitar aburrir al lector, lo que confiere a este libro un interés extraordinario para aquellos que quieren saber cómo funcionan algunas aplicaciones por dentro sin llegar a ver código.


Este libro en el que Russell ha participado explicando cómo funciona Asterisk por dentro, está licenciado como Creative Common y se vende en Amazon y Lulu.com, aunque todos los beneficios por “royalties” serán donados a Amnistía Internacional (todo un detalle).


Si queréis saber más, podéis ver la página/presentación del libro:

http://www.aosabook.org/


Cómo programar un AGI en PHP sin librerías raras

Un excelente artículo que Elio Rojano nos comparte en su blog de Sinologic. Una de las personas que más respeto en este ambito de la voz ip


 


Muchas personas que están aprendiendo Asterisk y que ya conocen las posibilidades de esta aplicación, quieren 


 


 


 


empezar a desarrollar sus propias soluciones para que Asterisk pueda interactuar con bases de datos, archivos del sistema de ficheros y en función de algún valor, conseguir que Asterisk haga una llamada, reproduzca una locución, o mil cosas más.


 


 


Esto se realiza gracias a un concepto en Asterisk llamado AGI (Asterisk Gateway Interface) y que viene a ser un programa desarrollado por nosotros (o por otro usuario) que Asterisk ejecuta (importante esto último) y que sirve para que interactúe Asterisk con el sistema Linux, pudiendo acceder a archivos locales, puertos físicos (usb, puertos series, paralelos, etc.), bases de datos, páginas webs, y prácticamente cualquier otra cosa que pueda manejar nuestro sistema Linux.


 


No voy a entrar en la “profundidad” en la que se entra en el curso Asterisk Advanced, pero sí ofrecer un esqueleto básico de un AGI programado en PHP sin necesidad de librerías externas y utilizando una programación muy sencilla (ideal para empezar a familiarizarse con este tipo de sistemas de integración Asterisk-*)


A continuación tenéis un ejemplo ultra-básico sobre cómo puede ser un AGI programado en PHP y sin necesidad de librerías tipo “php-agi” ni “AstPHPAGI”, ni ninguna otra, tan solo tu Asterisk, tú y PHP con sus modulitos.


Debo decir que este ejemplo no lo he programado yo, pero para ilustrar el ejemplo sirve igualmente.


Los comentarios sí son míos y creo que ayudan bastante a entender cómo funciona y qué precauciones debemos tomar antes, durante y después de programar un AGI.


También sé que para muchos, programar un AGI no tiene ninguna ciencia, pero hay que entender que muchos lectores se consideran muy, muy novatos, así que para seguir aprendiendo, aquí tenéis este ejemplo:


#!/usr/bin/php
<?php

// Lo primero es entrar en el Asterisk y ejecutar el comando: "agi set debug on" para ver 
// qué va haciendo el AGI.

// Hay que evitar enviar por la "salida estandar" nada, salvo los comandos para el Asterisk.

// El Asterisk nada más ejecutar el AGI, nos envía información para aburrir...
$agivars = array();
while (!feof(STDIN)) {
$agivar = trim(fgets(STDIN));
if ($agivar === '') {
break;
}
$agivar = explode(':', $agivar);
$agivars[$agivar[0]] = trim($agivar[1]);
}

// la variable $agivars es un array bidimensional con los datos recogidos por el Asterisk
// Un ejemplo de esto puede ser:
// exten=>00,1,AGI(prueba.php,600123456)
/*
Array
(
[agi_request] => prueba.php    ;; Nombre del archivo que contiene el AGI que está ejecutando.
[agi_channel] => SIP/100-00000008   ;; Canal SIP que llama al AGI. (canal, que no usuario)
[agi_language] => en           ;; Idioma por defecto del canal
[agi_type] => SIP              ;; tipo de Tecnología utilizada para llamar al AGI
[agi_uniqueid] => 1305795790.9 ;; UniqueID de la "llamada al AGI"
[agi_version] => 1.8.4         ;; Versio? del sistema AGI utilizado. ¿coincide con el Asterisk?
[agi_callerid] => 100          ;; CallerID del usuario que ejecuta el AGI
[agi_calleridname] => 100      ;; CallerIDname del usuario que ejecuta el AGI
[agi_callingpres] => 0         ;; ...
[agi_callingani2] => 0         ;; ...
[agi_callington] => 0          ;; ...
[agi_callingtns] => 0          ;; ...
[agi_dnid] => 00               ;; Número marcado en el dialplan para llamar al AGI
[agi_rdnis] => unknown         ;; ...
[agi_context] => salientes     ;; Contexto donde se ejecuta el AGI
[agi_extension] => 00          ;; Extensión donde se ejecuta el AGI
[agi_priority] => 1            ;; Prioridad donde se ejecuta el AGI
[agi_enhanced] => 0.0          ;; Agi "mejorado" 
[agi_accountcode] =>           ;; El AccountCode (si lo hemos definido)
[agi_threadid] => -1239581840  ;; ...
[agi_arg_1] => 600123456       ;; Argumento 1 del AGI (el Argumento 0 es el nombre del AGI)
[agi_arg_2] =>                 ;; Argumento 2 del AGI
...                     ;; ...
)
*/

// Vamos a decirle a Asterisk que haga un Dial al número que le hemos pasado por parámetro:

echo "EXEC Dial DAHDI/g1/".$agivars[agi_arg_1];

// Podemos usar los comandos propios de los AGI (como hemos usado el 'EXEC') que podemos obtener
// ejecutando en la consola "agi show commands" o "agi show commands topic <comando>" para una
// información más detallada de cada comando.

// Importante... despues del "?" y el ">" del 'fin del PHP' no debe haber ni siquiera un [ENTER]... 
// ya que en caso contrario, Asterisk devolverá un error del tipo:
// ERROR[24598]: utils.c:1133 ast_carefulwrite: write() returned error: Broken pipe
?>

El código no puede ser más sencillo, quizá lo más interesante pueden ser los comentarios que explican el comienzo y los comandos básicos para programar un AGI.


Sin más me queda agradecer de nuevo a Elio Rojano por sus grandes aporte a la comunidad de Asterisk


Fuente: Sinologic.net

AVISO DE SEGURIDAD PARA ELASTIX 1.5 Y 1.6

Se informa a todos los usuarios de Elastix 1.5 y 1.6, que se ha descubierto un mecanismo que posibilitaría a usuarios remotos escribir archivos en el disco duro del servidor a través de FreePBX.



El mecanismo consiste en la combinación de dos tretas diferentes. La primera permite acceso de administrador a la interfaz de FreePBX "no embebido" y la segunda permite la escritura en el sistema de archivos a través de la interfaz Web de FreePBX "no embebido". La primera treta fue ya solucionada a finales de 2010. La solución de la segunda se está lanzando junto con la publicación del presente aviso y los detalles se encuentran disponibles en el siguiente link:



http://elx.ec/secalert052011



Estos dos problemas de seguridad no se encuentran presentes en Elastix 2.0 y versiones superiores.



La actualización que corrije los problemas antes mencionados está disponible en el repositorio de actualizaciones de Elastix y se puede actualizar desde la consola ejecutando el comando "yum update freePBX" o desde la interfaz Web de actualizaciones que posee Elastix. Los usuarios de Elastix 2.0 no necesitan hacer esta actualización. 



Se recuerda también a los usuarios que bajo ningún motivo se recomienda actualizar FreePBX desde la interfaz "no embebida", la manera correcta es a través de los paquetes RPM que posee Elastix. Actualizar FreePBX desde la interfaz "no embebida" puede sobreescribir cambios importantes en los paquetes RPMs distribuidos con Elastix


Fuente: Blog Elastix.org 

Cómo instalar Asterisk en un gateway Mediatrix

 


 


Mediatrix se ha convertido en el primer fabricante que le permite a los usuarios instalar un sistema Asterisk dentro de sus dispositivospara hacer uso de todos los puertos que trae el susodicho como si de una tarjeta se tratase.


Este fabricante de gateways ha puesto a disposición de los usuarios una API de desarrollo (SDK) para realizar aplicaciones y funciones personalizadas para que sean los propios usuarios los que puedan programárselas, y basándose en este SDK, ha elaborado un tutorial para que cualquier usuario pueda instalar Asterisk en el interior.


De momento, los únicos modelos que soportan esta característica son:



Hay que avisar que, debido al hardware que trae incorporado estos dispositivos, compilar Asterisk en esta arquitectura, requiere de tener instalado el SDK que nos permita crosscompilar para el sistema Mediatrix, por lo que, para facilitar esto, el equipo de desarrolladores del SDK de Media5 ya han elaborado una versión específica compilada especialmente para la arquitectura que utilizan los gateways y cuya explicación es la que se explica en el tutorial.


 


Si eres uno de los afortunados poseedores de uno de estos gateways, ahora puedes tener tu Asterisk incluido, siguiendo el siguiente tutorial:

http://mediatrixsdk.media5corp.com/index.php?title=Installing_Asterisk


Fuente: Sinologic.net :D

lunes, 9 de mayo de 2011

Multi-videoconferencia móvil con Fring

 


Estos de Fring no paran de innovar y es que a partir de la versio? 1.5 de su cliente para Android han lanzado una característica bastante deseada: multivideoconferencia.


No hay mucho más que decir, salvo que se recomienda un móvil con Android y con un procesador mínimo de 1Ghz. Recibe 4 señales, por lo que también es recomendable tener al menos cobertura HDSPA para que el vídeo vaya más o menos fluido.


Aquí os dejo el vídeo promocional que merece la pena ver:



Más información: http://www.fring.com


Publicado el RFC para la transición de IPv6

 



Acaba de ser publicado el RFC (6157) para la transición del protocolo SIP a IPv6, un paso más para solucionar el tremendo inconveniente que supone el nuevo sistema de direcciones IP para un protocolo tan importante como es SIP.


Del IPv6 ya hemos hablado e incluso hemos explicado cómo configurar IPv6 en nuestro sistema y cómo configurar Asterisk para cuando tengamos una dirección IP de este tipo, el siguiente paso es esperar a que los operadores empiecen a dar direcciones IP estáticas para los usuarios, pero visto lo visto vamos a tener una temporada mala en cuanto a direcciones IP se refiere hasta que se estabilice el asunto.


Una vez llegado el día que dispongamos de nuestra dirección IPv6, la transición será dura ya que la mayoría de las aplicaciones que utilizamos a diario no están suficientemente preparadas para este tipo de direcciones y habrá que actualizar muchas de ellas.


El RFC-6157 puedes verlo aquí: http://www.rfc-editor.org/rfc/rfc6157.txt


Fuente: Sinologic.net :)

martes, 26 de abril de 2011

Hacer la tarea es necesario y habrá una prueba

 


donald trumpLas personas que piensan alcanzar el éxito es un proceso lineal de la A a la Z, una linea recta hacia la cima, simplemente no están en contacto con la realidad. Hay muy pocas historias de éxito de la noche a la mañana. Simplemente no funciona así.


El éxito parece ser de un día para otro, porque todos vemos historias en los periódicos y en la televisión acerca de las personas desconocidas que de repente se convirtieron en famosa. Pero consideremos un árbol secuoya que ha estado creciendo durante varios siglos. El hecho de que un equipo de televisión un día decide hacer una historia sobre ese árbol no significa que no existiera antes.


En 1955, Glenn Gould, el pianista de música clásica de Toronto, saltó a la fama internacional con su album Bach’s Goldberg Variations. Era joven y poco común, pero ya había estado tocando el piano durante casi veinte años. Pudo haber parecido como un éxito de la noche a la mañana para el público en general, pero cualquiera que ha estado trabajando en algo durante veinte años, es probable que no este de acuerdo con esta apreciación.


Tengo que admitir que mi conocimiento de la música clásica es limitada, pero por lo poco que he leído sobre el tema, sé que el proceso de convertirse en un músico clásico es largo y exigente. La cantidad de horas de práctica necesarias para dominar un instrumento es asombrosa, y además nunca termina. ¿Cómo lo hacen? No estoy seguro, pero me imagino que la pasión juega un rol muy importante.


Cada industria y profesión tiene cosas fundamentales que se requieren para tener éxito. Si no puedes soportar la práctica todos los días, ser un músico está fuera de lugar. Si usted odia hacer ejercicio, ser un atleta no es para ti.


En los negocios, (todos los negocio) lo fundamental es entender el proceso. Si usted no entiende el proceso, nunca cosecharás los frutos del proceso. Usted nunca va a durar el tiempo suficiente para lograr su éxito “de noche a la mañana”


Parte del proceso es hacer su tarea. Usted tiene que saber en lo que se está metiendo en primer lugar. Ese fue uno de las creencias más fuertes de mi padre. Todos hemos oído la frase “Estás ladrando al árbol equivocado.” Trae a la mente una imagen divertida, pero en realidad puede ser embarazoso. No hacer la tarea puede resultar en algo análogo, así que haga algo para evitar eso.


Podemos aprender de nuestros errores, pero es mejor aprender de nuestros éxitos. Cuando oigo a gente decir: “Bueno, fue una experiencia interesante”, por lo general se puede asumir con seguridad que se están refiriendo a algo que no salio como lo habían planeado.


¿Se imagina escuchar a un cirujano decir: “Bueno, no iba del todo bien, pero estoy seguro que aprendí mucho”? No quisiera que ese tipo me operará. Lo mismo se aplica a cualquier persona en los negocios, porque si estás en el negocio, no es sólo tu dinero el que esta involucrado, muy a menudo es el dinero y el bienestar de los demás también. En mi negocio, no puedo correr riesgos. Si algo no está del todo bien con el diseño o la construcción de una superestructura, una gran cantidad de personas podrían resultar heridas o muertas. Tengo que saber lo que está pasando. En pocas palabras, esa será mi responsabilidad.


La gente ve el producto terminado. Wow, un rascacielos! Lo que sucede por dentro de él es otra historia. La construcción no es nada glamoroso. Es un esfuerzo serio y a menudo peligroso. Afortunadamente, he entendido esto desde mis primeros días en el negocio, así que hay una cierta gravedad en mi acercamiento a la construcción de cualquier edificio.


Ahí es donde el haber aprendido a hacer mi tarea se vuelve útil. Es un requisito necesario, no un curso extracurricular para mejorar mi productividad. No sólo tengo que saber exactamente lo que estoy haciendo, sino también tengo que asegurarme de encontrar contratistas que saben exactamente lo que están haciendo. Es por eso que soy duro con ellos; y es por eso soy igualmente de duro conmigo mismo. Muchas vidas están en juego en nuestro trabajo. No queremos ninguna “experiencia interesante!”


Todos sabemos lo que es pretender estudiar. Hay algunos cursos en la escuela que no te llaman la atención. Si usted está eligiendo una carrera, ten eso en mente. Qué es lo que más te llama la atención?


Considera una pirámide. ¿Te has dado cuenta de lo grandes y sólidos que son sus cimientos? ¿Notaste los niveles cuidadosamente graduados que eventualmente llevan a la cima? Ahora déle vuelta a la pirámide para ponerlo de cabeza. Eso es una representación de pensar al revés. Usted no comienza en la parte superior. Usted comienza con los cimientos, entre más fuertes mejor.


El mundo se mueve a lo largo de un clip tan rápido que tenemos poca de paciencia cuando las cosas son lentas, ya sea en la línea de un supermercado o el acceso a Internet. Nos hemos convertido en intolerantes de esas cosas que no se puede acelerar o esquivar. No puedo acelerar el trabajo de hacer los cimientos para un edificio, tampoco puedo esperar a tocar el piano como Glenn Gould sólo porque quiero.


Conoce las limitaciones, así como las posibilidades de todo lo que hagas. Averigüe tanto como puedas por ti mismo sobre lo que planeas hacer, y no esperes que nadie actue como tu abuela favorita en querer lo mejor para ti. La mayoría de la gente quiere lo mejor para sí mismos, no para ti. Si esas personas ya han gastado una gran cantidad de esfuerzo en hacer su tarea, ¿por qué habrían de compartirlo contigo?


Fragmento de “Como hacerse rico” de Donald Trump


Fuente: Escuela para Ricos