Un softphone libre para Elastix (o algo parecido)

Hace un par de días encontré un código mal parqueado en mi computador. Era un softphone que había escrito en Python y que sirvió de prueba de concepto para un proyecto que nunca llegó a ver la luz.

Como no conocía mucho de Python cuando lo escribí (tampoco ahora) tuve muchas dudas si colgarlo de algún repositorio de código, pues el programa estaba hecho al apuro y con funcionalidad a medio terminar.

La cosa es que me decidí a colgarlo de github.com… Hace tiempo que quería obtener una cuenta allí y probar la plataforma, así que se me ocurrió que era la oportunidad perfecta.

Bueno, volviendo al softphone…

La idea de este softphone es que, aparte de hacer y recibir llamadas VoIP, se comunique con un servidor Elastix para consumir servicios Web, de tal manera que pueda sincronizar la información de contactos local con los contactos almacenados en Elastix. Del mismo modo también se puede tener acceso a los eventos que se crean en el servidor, dentro del menú Agenda.

Un softphone libre para Elastix (o algo parecido) Un softphone libre para Elastix (o algo parecido) Screen Shot 2013 05 28 at 4

Me decidí a usar Python por la sencilla razón de que quería aprender a usarlo. El problema es que Python no es precisamente el lenguaje de elección cuando se quieren hacer interfaces GUI. Exploré algunas alternativas de librerías GUI que se pudieran usar desde Python y que también sean cross platform (es un requerimiento que tenía) y me llamó la atención Qt y WxWidgets, pero finalmente me decidí por TkInter.

Si bien es cierto, TkInter no es un paquete tan poderoso como Qt o WxWidgets, tenía algunas ventajas como ser el GUI de facto de Python (viene junto con Python) y ser relativamente sencillo de aprender… Claro, hay muchas limitantes, pero pensé en “sacarle el jugo” a TkInter hasta donde me fuera posible.

Para la pila SIP no me compliqué y utilicé el conocido PJSIP, pues tiene un puerto para Python.

En fin… ya con todas las herramientas sobre la mesa comencé a codificar y terminé en un producto con el cual experimentar, pero incompleto… todavía hace falta mucho para que sea algo que se pueda considerar estable.

Cabe destacar que para que el teléfono funcione correctamente hay que usar Elastix 3 o instalar un paquete de servicios Web en Elastix 2. Ya explicaré más detalles de esto en los próximos días.

El código del teléfono lo publiqué aquí:

https://github.com/elandivar/elastiphone

El estado actual es “alpha”.

Al final, espero ir mejorando el producto en las grietas de tiempo que encuentre… a paso lento, pero seguro 😉

Recordando a Yubox: La primera distribución linux ecuatoriana

Navegando en Internet me topé con un artículo donde se menciona a Yubox como distribución Linux sudamericana.

Todavía recuerdo cuando fui parte de este proyecto que perseguía mantener una distribución Linux de escritorio. Nostalgia…

Si mal no recuerdo iniciamos el desarrollo en 2004 y en 2006 decidimos abandonar el proyecto debido a la poca acogida local. En esa época todavía muchos veían a Linux como tabú… Por suerte parte de la experiencia sirvió para que naciera Elastix.

Los dejo con la imagen que encontré en dicho artículo, que dicho sea de paso es este: http://www.logalia.net/Megapost-Distros-Hispanas_333445.aspx

Al menos Yubox será parte de la historia… y después de todo, para ser 2005, no se veía nada mal, verdad?

Recordando a Yubox: La primera distribución linux ecuatoriana Recordando a Yubox: La primera distribución linux ecuatoriana yubox desktop 0

Cómo obtener los “trend topics” de Twitter usando jQuery

En un artículo anterior expliqué cómo utilizar el API de twitter para obtener los resultados de una búsqueda de una palabra clave (keyword). En esta ocasión he modificado el sencillo script de aquel artículo para realizar una consulta diferente al API de twitter… obtener los 10 “trend topics”.

Decidí realizar esta modificación porque el tema está en boga y he visto inclusive programas o servicios en el Web para realizar esta tarea. Uno de ellos es http://trendsmap.com, el cual incluso muestra los “trend topics” por ubicación geográfica.

Esto último es posible debido a que el API de twitter nos permite obtener “trend topics” por ubicación geográfica. En nuestro caso haremos una búsqueda global y eso es lo que significa el número 1 en el URL del API de twitter que verán en el siguiente script.

En esta ocasión no explicaré el script debido a que es muy similar al anterior. A continuación lo copio.


<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
Listado de los 10 trend topics
<div id="twbox"><ul></ul></div>
<script type='text/javascript'>
  var varSal = "";
  function leerEntradas(jsonptrends) {
		$.each(jsonptrends[0].trends, function(key, val) {
			 varSal += "<li>"+val.name+"</li>";
		});
    $("#twbox ul").html(varSal);
  }
</script>
<script  src="https://api.twitter.com/1/trends/1.json?callback=leerEntradas"></script>

Como siempre he tratado de ser minimalista para propósitos didácticos… al final los dejo con una imagen de ejemplo de la salida. Espero les sirva!

twitter trend topics Cómo obtener los "trend topics" de Twitter usando jQuery Cómo obtener los "trend topics" de Twitter usando jQuery trendtopics2

twitter trend topics

Micro lector de twitter usando javascript (jQuery)

OJO: Este artículo fue escrito usando el REST API versión 1. Actualmente Twitter tiene disponible el API versión 1.1, por lo que puede ser que en un futuro cercano este ejemplo no funcione. Actualizaré el ejemplo cuando tenga algo de tiempo.

Hace unas semanas me vi en la tarea de escribir un módulo “ligero” para un sitio Web, con el objeto de poder leer una cuenta de twitter vía Javascript. Al final terminamos instalando uno de esos modulitos para WordPress que ya resuelven el tema gráfico de maravilla y mi código terminó tirado en una esquina 🙂

Sin embargo, me puse a retocar el código con el objetivo de dejarlo al mínimo (o casi) y así utilizarlo con fines didácticos. Aquí les dejo el código en cuestión, el cual usa jQuery y lee los tweets de la cuenta @Elastix.


  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
  Script de prueba de modulo para Twitter
  <div id="twbox"></div>
  <script type='text/javascript'>
    function leerEntradas(json) {
      var varSal = "<ul>";
      $.each(json.results, function(key, val){
        varSal += "<li>"+val.text+"</li>";
      });
      varSal += "</ul>";
      $("#twbox").html(varSal);
    }
  </script>
  <script src="http://search.twitter.com/search.json?q=from%3AElastix&callback=leerEntradas&rpp=10"></script>

El archivo anterior lo podemos grabar con extensión .html y ver desde cualquier navegador. Debería mostrar los 10 últimos tweets de la cuenta @elastix.

Analicemos un poco el código anterior.

En el BODY de la página Web vemos un DIV con nombre “twbox”. Es este cajón el que llenaremos con el texto de los tweets.

Al final del script veremos que estamos invocando al API de twitter a través del URL http://search.twitter.com/search.json

A este URL le estamos pasando 3 parámetros:

  • El nombre de la cuenta de twitter de la cual queremos obtener los tweets
  • El nombre de la función callback (leerEntradas en nuestro caso) a la cual el API de twitter le pasará los resultados de la búsqueda
  • El número de tweets que queremos que nos devuelva la consulta

La funcion leerEntradas es bastante sencilla y simplemente se barre los resultados y les da un formato de lista simple (Los tags LI). Finalmente la función llena el DIV “twbox” con la lista.

Hay que tener en cuenta que la consulta al API de twitter es una simple búsqueda por el término “elastix”. En realidad no son los tweets del usuario @elastix, por lo que también veremos en los resultados cualquier tweet (no necesariamente de @elastix) que incluya la palabra “elastix” dentro de el.