Mi Brain-Training Personal

Para que no se me olviden las cosas…

Nexus One: primeras impresiones

Como algunos sabéis por Twitter, aprovechando la jugada de la ITEXPO me he agennciado el juguete de moda: un Nexus One. Tras unos días jugando con el voy a comentar un poco el feeling que he tenido en diversos aspectos. Es obvio que el Nexus One ha sido diseñado para competir con el iPhone, y como casualmente también tengo uno, no puedo evitar compararlos ;)

Proceso de compra

Un 10 para Google. Hice el pedido un domingo por la tarde y el martes a las 9 de la mañana ya tenía el jueguete. Puedes seguir vía web por dónde va tu paquete, joder ¡solo falta el DNI de las personas que lo manipulan! ¡Y encima con mi nombre inscrito detrás! Me lo trajeron sin problemas al hotel, así que si váis de viaje a Estados Unidos por más de dos días no dudéis ni un segundo :)

Unboxing y primer contacto

Al abrir la caja te encuentras con un embalaje bastante similar el iPhone, sencillo, sin manual. Cuando te compras un Nokia u otro móvil te viene con un super-manual de 100 páginas que no se lee nadie. Cuando te compras un iPhone o un Nexus One no viene manual. Porque no hace falta. Es tan fácil de usar que no necesitas manual, y eso aunque a alguno le parezca un bug es  una feature.

El feeling del terminal es muy bueno: no pesa, parece consistente y robusto… pero le falta algo. Es dificil de explicar, pero podría decirse que veo el Nexus One como diseñado por un ingeniero mientras que el iPhone esta diseñado por alguien con más arte, por decirlo de alguna manera. No obstante, no echarás de menos tu iPhone, créeme.

Pantalla

Aunque la pantalla del N1 es solo 0,2 pulgadas más grande que la de el iPhone da la sensación de ser mucho más grande. Las fuentes son muy claras (de hecho es la que uso en mi desktop, ttf-droid) y se puede visualizar mucha más información que en el iPhone. Parece como si tuviera el doble de resolución o algo. :-O

Aplicaciones

Queridos señores de Apple, más vale que el iPhone OS 4.0 tenga multi-tasking, porque sino… El hardware del N1 es muy potente (procesador a 1GHz y 512MB de RAM) por lo que puedes tener muchas aplicaciones abiertas a la vez y ni te enteras. Personalmente siempre tengo un softphone SIP y un cliente de Jabber funcionando, y no tiene sentido abrir las aplicaciones solo cuando tu quieras hacer una llamada o mandar un mensaje, tienes que poder recibir llamadas…

“Apertura”

Vale, el iPhone funciona con un sistema operativo propietario y el N1 con uno libre, pero me he encontrado con las mismas trabas en ambos casos: si quieres hacer cosas diferentes con tu N1 tienes que ser root, y para eso tienes que realizar un proceso (habrá otro post :) ) que invalida la garantía. Lo mismo que hacer el famoso jailbreak, así que no por utilizar un sistema operativo libre tienes todo el control sobre el terminal… ¿got root?

Concluyendo…

No os rallo más, pero si tenéis la oportunidad de haceros con uno (566$ libre) cogedlo, además ¡ser un early adopter siempre mola! ;) He dejado unas fotos aquí en Flickr.

4299794413_7ffcaf1c1e_m

El viernes es día de VoIP Users Conference

Hoy voy a hablaros un poco de este evento que tiene lugar cada viernes llamado VoIP Users Conference o VUC.

Todos los viernes a las 18:00 (hora de Bilbo) tiene lugar el VUC. Consiste en una conferencia de audio a la que cualquiera se puede unir. Esta multiconferencia la dirige Randy Resnick (al que tuve ocasion de conocer en el AMOOCON) y obviamente trata de VoIP. Cada día hay algun invitado que habla sobre un tema en concreto, por ejemplo hoy Alex Balashov ha hablado sobre Kamailio/OpenSER.

Tras una hora de conversación con en invitado (cualquiera puede participar haciendo preguntas u aportaciones) da comienzo la parte mas distendida en la que la gente simplemente comenta temas de actualidad relacionados con VoIP, como eventos, nuevos productos, etc.

La conferencia se hospeda en el servicio ZipDx y es posible unirse mediante SIP, Skype o la PSTN. Aunque la hora no es la mejor del mundo, os recomiendo que os paséis por allí un dia, siempre se comenta algo interesante y se pasa un rato entretenido escuchando o hablando sobre VoIP. Además de por VoIP, tambien mola conectarse al canal de IRC del VUC (#vuc) ya que alli tiene lugar una conversación paralela en la que la gente comenta lo hablado en la conferencia o simplemente chatea sobre VoIP.

La duración es indeterminada, de hecho el record esta en ¡8 horas! Así que si os encontráis aburridos un viernes por la tarde conectaos al VUC!

Asterisk 1.6 y las nuevas fuentes de timing

Como sabréis no es que yo sea super-fan pro Asterisk 1.6 precisamente, pero por fin he probado algo que me ha gustado, así que voy a comentarlo por estos lares.

Antes de ponernos manos a la obra un poco de teoria rápida. Todo el mundo parece saber que necesitas tener una tarjeta o el driver dummy de DAHDI en Asterisk, pero no todos saben porque. Asterisk necesita una fuente de timing para lo siguiente:

  • Generar el audio saliente. Asterisk utiliza la fuente de tiempo disponible a la hora de enviar los paquetes de audio saliente. En ausencia de una fuente de tiempo fiable Asterisk puede utilizar el audio entrante como referencia, pero si el audio entrante viene con jitter por ejemplo, el saliente tambien lo tendrá, por lo que no es una buena idea ir por la vida sin una fuente fiable de tiempo.
  • IAX trunking. El IAX trunking es un método gracias al cual Asterisk puede ahorrarnos algo de ancho de banda en un enlace entre dos servidores ya que si tenemos 10 llamadas entre el servidor A y el servidor B nos ahorramos mandar 9 de las 10 cabeceras. Para que esto funcione correctamente la temporizacion ha de ser precisa, por lo que necesitaremos una fuente fiable de tiempo. ¿Pero quién usa IAX? Esto en realidad no nos interesa. ;)

Alguno pensara que me he olvidado de MeetMe. Pues no. MeetMe necesita DAHDI por otra razón: el motor de conferencias que usa MeetMe se encuentra en DAHDI. Podría decirse que MeetMe es un wrapper de la aplicación de conferencias de DAHDI. Por lo tanto, MeetMe siempre dependerá de DAHDI, aunque ya veremos que hay algunas alternativas.

2283676770_6b53f8b77f_m

Las mejoras de Asterisk 1.6.2 en cuanto a timing

Asterisk dispone de un API genérico de timing desde la version 1.6.1. La idea es disponer de diversos módulos que provean a Asterisk de una fuente de tiempo fiable, siendo DAHDI un simple módulo más. En Asterisk 1.6.2 tenemos lo siguiente módulos de timing:

  • res_timing_dahdi (desde Asterisk 1.6.1): Utiliza DAHDI como fuente de tiempo. Si no tenemos tarjetas podemos utilizar este módulo junto a dahdi_dummy para tener timing fiable.
  • res_timing_pthread (desde Asterisk 1.6.1): Utiliza la librería POSIX pthread para obtener el timing. Su rendimiento no es el tan bueno como el de DAHDI, pero tiene una ventaja importante: es portable. Con ésta fuente de tiempo es posible utilizar IAX trunking en FreeBSD o MacOSX por ejemplo. How cool is that?! :)
  • res_timing_timerfd (nuevo en Asterisk 1.6.2): Éste es el bueno. Utiliza TimerFD, un nuevo mecanismo del Kernel de Linux (>= 2.6.27) para proporcionar timing. También necesita de una version reciente de glibc (>= 2.8) pero a cambio nos ofrece una fuente de tiempo muy fiable y sin DAHDI. dahdi_dummy, te quedan dos telediarios. :)

Sustituyendo MeetMe

Hasta ahora he comentado el nuevo API de timing, pero no hemos solucionado el que MeetMe dependa de DAHDI. Obviamente no podemos utilizar MeetMe así que tenemos un par de alternativas:

  • AppKonference: Digamos que es un MeetMe con esteroides. Soporta VAD y video y no necesita DAHDI. El único problema (si es que lo consideramos un problema) es que no es una aplicación oficial.
  • ConfBridge: Se trata de una nueva aplicación que incluye Asterisk 1.6.2 perteneciente al nuevo API de bridging. No he hecho unas pruebas demasiado intensas, pero de momento no he tenido problemas.

Habilitar el timing interno

Para terminar, tenemos que habilitar el timing interno en Asterisk. Para ello editamos el fichero asterisk.conf y descomentamos la opción internal_timing=yes de la sección [opcions].

Esto es todo por hoy, es una buena excusa para probar Asterisk 1.6 ¿no? :)

G722 y su interoperabilidad

Nunca hasta hace unos días me había pasado algo similar, así que voy a comentarlo por aqui :)

El tema que hoy nos ocupa es el codec G722 y su interoperabilidad. Algo que en principio no debería preocuparnos, ya que si dos terminales utilizan el mismo codec todo deberia ir bien, ¿no? Pues no.

La semana pasada hablamos de esto en el VUC, porque aparentemente todos los softphones basados en PJSIP sufren del mismo problema: las llamadas en G722 suenan distorsionadas y con algo de superposición en el audio. Ya que en el VUC sólo se usa G722 (aunque se puede conectar por Skype o por SIP con G711 también) esto era importante así que Randy se puso a bombardear las listas de correo intentando encontrar respuesta al problema.

El Problema

En G722 el audio se muestrea a 16KHz con 14 bits. Peeeeero, como lo que nos vienen son 16 bits hay implementaciones que hacen cosas distintas: Asterisk y FreeSWITCH usan los primeros 14 bits y se olvidan de los 2 que sobran, y la cosa funciona. En cambio, PJSIP y VoiceAge hacen un bit-shifting de 2 bits, es decir, desplazan los 16 bits a la izquierda perdiendo los 2 de abajo. La cuestión es que esa diferencia de 2 bits se traduce en 12 dB, por lo que el audio se distorsiona, y al haber “movido” el audio se escuchan chasquidos extraños.

La solución

Obviamente no hay una unica solución, hay que ir a por la mas interoperable, así que he optado por hacer que PJSIP no haga el bit-shifting y así el audio en G722 fluye alegremente. :)

¿Alguna experiencia al respecto?

Now you can Blink!

Como ya estaba anunciado, en diciembre se liberaría la primera beta publica de Blink, y asi ha sido. Ya podeis descargar Blink 0.11 de su pagina web.

Esta primera version es solo para MacOSX y no tiene todas sus funcionalidades habilitadas porque lo que se quería conseguir es tener un core solido y estable sobre el que posteriormente añadir las nuevas nice and cool sexy features. Esta primera version incluye las siguientes funcionalidades:

  • Sesiones de audio con los siguientes codecs: speex, g722, g711a, g711u, ilbc, gsm.
  • Sesiones MSRP: chat y envio de ficheros.
  • Compartir escritorio.
  • Integracion con la agenda de Mac.
  • Soporte para multiples llamadas.
  • Soporte para multiples cuentas de usuario.
  • ICE.
  • Detección de dispositivos de sonido “en caliente”.

Yo al menos llevo usandolo varias semanas todos los dias y tras varias iteraciones en el diseño de su core (su desarrolllo ha llevado varios meses) se ha obtenido algo sólido que funciona.

Proximamente comenzará el desarrollo de una nueva interfaz gráfica en Qt para poder llevar Blink a Windows y GNU/Linux, aunque su core, que también esta disponible, funciona perfectamente en GNU/Linux. Lo siguiente será el soporte de presencia SIMPLE y XCAP para lo cual se ha estado trabajando en los proyectos OpenXCAP y OpenSIPS a fin de tener todo listo.

Aunque no puedo ser 100% objetivo, he de decir que la interfaz gráfica me parece la mas intuitiva que he visto y es muy sencillo gestionar tus diversas cuentas y llamadas sin complicar la apariencia del software. Además, desde el propio Blink es posible crearse una cuenta SIP gratuita en el servicio SIP2SIP.

Happy Blinking!

BlinkScreenshot-AudioSessions

Prueba Asterisk sin “ensuciar” tu sistema

Supongo que a más de uno le habrá pasado lo siguiente: quieres preparar un escenario de prueba e instalas un Asterisk, luego resulta que quieres probar otra versión, así que machacas la que había… y al final no sabes ni lo que tienes.

Lo ideal sería poder tener varias versiones de Asterisk instaladas en nuestra máquina de pruebas y así poder ejecutar la que queramos sin que interfieran unas versiones con otras. Vamos a ver 2 maneras de hacerlo: instalando Asterisk en multiples lugares y utilizando live_ast.

Instalar Asterisk en distintos lugares

Si queremos tener un Asterisk 1.4 y un Asterisk 1.6 en el mismo sistema haremos lo siguiente para tener cada uno instalado en /opt por ejemplo:

cd asteriak14
./configure --prefix=/opt/asterisk14 --sysconfdir=/opt/asterisk14/etc --localstatedir=/opt/asterisk14}/var
make menuselect
make
make install
make samples

cd asteriak16
./configure --prefix=/opt/asterisk16 --sysconfdir=/opt/asterisk16/etc --localstatedir=/opt/asterisk16}/var
make menuselect
make
make install
make samples

En este ejemplo se asume que tenemos las fuentes de Asterisk 1.4 en un directorio llamado “asterisk14″ y las de la 1.6 en “asterisk16″. De esta manera hemos conseguido tener dos versiones completamente aisladas en /opt. Las configuraciones estarán en /opt/asterisk14/etc y /opt/asterisk16/etc respectivamente.

Utilizar live_ast

Ésta es la que he descubierto hoy y me ha gustado ;) live_ast es un script que Tzafir Cohen hizo en bash que nos permite ejecutar Asterisk en el mismo directorio en el que lo hemos descargado. Esta disponible en trunk y en Asterisk 1.6, pero también funciona con Asterisk 1.4 y ya que estaba lo he incluido en la RSP ;) Veamos como funciona:

cd asterisk-1.6.2
cp contrib/scripts/live_ast .
./live_ast configure
./live_ast install
./live_ast samples
./live_ast run -vvvvvvvvvc

Lo que realiza el script es fijar las variables necesarias para que Asterisk quede completamente instalado en el subdirectorio “live”.

Ya no hay excusa para no tener una maquina de pruebas con 50 versiones de Asterisk ;)

HowTo: Usar el móvil de manera remota con Asterisk y chan_sebi

Supongamos que por alguna razón vamos a estar ausentes de nuestra tierra una temporada y no queremos gastarnos una pasta en roaming pero queremos que nuestra gente siga pudiendo llamarnos.

Lo primero que necesitamos es algo con lo que hacer y recibir llamadas y SMS. Ese algo es Asterisk con chan_sebi, un canal que ha desarrollado Odicha, un grande del bare metal.

Muchos modems USB soportan el envio de SMS, pero necesitamos uno que soporte tambien voz. En mi caso utilice el Huawei K3520, que puede encontrarse en eBay por unos 50-70 euros.

Manos a la obra!

Lo primero es descargar y compilar el codigo, que se encuentra en el repositorio RSP:

svn co http://asterisk-es-rsp.irontec.com/svn/asterisk-es-rsp/
cd branches/asterisk/1.4.24
./configure && make && make install
make samples && make config

ahora instalamos los asterisk-addons de Odicha, los que tienen chan_sebi :)

cd team/Odicha/1_4/asterisk-addons-1.4.9
./configure && make menuselect (marcamos chan_sebi)
make install && make samples

Una vez lo tenemos instalado vamos a configurar chan_sebi editando el fichero /etc/asterisk/sebi.conf:

[huawei1]
imei=3534xxxxxxxx ; imei of modem
;pin=12345678 ; pin (use only if sim card has pin request enabled)
csca=+34607003110 ; SMS centre number (Vodafone ES - example)
sms=yes ; Enable sms send/receive
voice=yes ; Enable voice for calls
context=from-sebi ; dialplan context for incoming calls
group=1 ; this phone is in channel group 1
volume=5 ; Modem Volume (1-5)
language=es ; Channel language
;nocallsetup=yes ; set this only if you want override call status notifications
;hidecid=#31# ; if you want outbound calls without caller id
;noincomingcalls=yes ; Reject all voice incoming calls

Solo tenemos que ajustar el IMEI, PIN, numero de servicio de SMS y contexto.

Ahora vamos a crear un sencillo dialplan para hacer/recibir llamadas y SMS:

[from-sebi]
; Incoming calls
exten => s,1,NoOp(Incoming call from ${CALLERID(num)})
exten => s,n,Dial(SIP/saghul,60))
exten => s,n,Hangup
; Incomming SMS
exten => sms,1,NoOp(Incoming SMS from ${SMSSRC})
exten => sms,n,System(/usr/local/bin/recvSMS.sh "${SMSSRC}" "${SMSTXT}")
exten => sms,n,Hangup
[from-ast16]
exten => _6XXXXXXXX,1,NoOp(Outgoing call through the SEBI device to ${EXTEN})
exten => _6XXXXXXXX,n,Dial(Sebi/g1/${EXTEN},60)
exten => _6XXXXXXXX,n,Hangup

Con esto ya podremos hacer y recibir llamadas, pero para los SMS vamos a hacer algo mas elegante:

Utilizaremos el script recvSMS.sh, que nos mandara un email con el asunto “SMS from 6123123123″ a la dirección de email que le indiquemos. Y para rizar el rizo, utilizaremos el script readMail.py cada minuto en el cron,  para que si respondemos al email del SMS esa respuesta se convierta en SMS. How cool is that?!

Para finalizar, si no teneis instalado ningun servidor de correo podeis instalar ssmtp y utilizarlo con una cuanta de GMail por ejemplo. Es tan facil como esto:

remote-mobile:~# cat /etc/ssmtp/ssmtp.conf
root=tu_email@gmail.com
mailhub=smtp.gmail.com:587
rewriteDomain=
hostname=tu_email@gmail.com
UseSTARTTLS=YES
AuthUser=tu_usuario_de_gmail
AuthPass=tu_clave_de_gmail
FromLineOverride=YES

y esto:

remote-mobile:~# cat /etc/ssmtp/revaliases
root:saghul.movil@gmail.com:smtp.gmail.com:587

Enjoy! ;)

PD: Manwe y amigos de la RAE: perdón por los acentos y tal, ando en precario a nivel de teclados y el autocorrector no es que mole mucho… :)

Tulipanes y tiroleses

En esta ocasión vamos a dejar el tema técnico un poco de lado para comentar el aspecto más ¿humano? de Manwe y saghul. Actualmente nos encontramos en Amsterdam y no, no hemos venido a la eComm.

Lo cierto es que estamos aquí porque nos vamos. Nos vamos de Bilbao, nos vamos de Irontec, cambiamos de aires. Yo (saghul) me quedo en Amsterdam y Manwe proximamente iniciará su viaje hacia Viena.

Atrás dejamos familia, amigos, compañeros y demás gente, pero hay trenes (¡y aviones!) que sólo pasan una vez y que no hay que dejarlos pasar. Mucho (o casi todo) de lo bueno que nos ha pasado se lo debemos a familia/novia/amigos que nos han apoyado siempre y a los que estaremos eternamente agradecidos.

Han sido algo más de dos años los que hemos tenido la ocasión de compartir con nuestros compañeros en Irontec y que difícilmente olvidaremos. No todo el mundo tiene la suerte de decir que le gusta su trabajo, ¡joder si también es nuestro hobby! Pero sobre todo el recuerdo que nos llevamos es la gente. Como dijo alguien las empresas las forman personas y eso es precisamente lo que ha hecho de estos dos años algo tan especial. Poder compartirlos con otros 13 guerreros de nivel 15 ha sido todo un lujo, ya que nos ha enriquecido mucho tanto a nivel profesional como personal.

Obviamente no todo ha sido bueno, siempre hay alguna que otra tensión, pero eso es algo que se prefiere olvidar, ya que los momentos buenos superan con creces a los malos.

Para terminar (antes de que nos pongamos sentimentales) nos gustaría desear toda la suerte del mundo a Irontec y desearle que siga llenando armarios de servidores de software libre y haciendo las cosas “con mucha fe y un poco de Linux”. Stay hungry, stay foolish.

499445667_6830758f70

HowTo: Instalar Skype en Debian 64bits

Supongamos que por alguna razón tenemos que instalar Skype en nuestra Debian. Supongamos además que se trata de una Debian 64bits. Pues no es tan fácil como parece, ya que Skype se cerrará continuamente :-/ Vamos a solucionarlo:

Iinstalamos las dependencias necesarias:

apt-get install ia32-libs ia32-libs-gtk libasound2

Descargamos el propio Skype de aquí: http://www.skype.com/go/getskype-linux-beta-deb

Ésto nos descargará Skype de 32bits, así que haremos la cerdada de instalarlo en nuestra Debian de 64bits:

dpkg -i --force-architecture skype*.deb

Debido al bug 546281 en el paquete ia32-libs será necesario hacer algunas chapuzas… descargaremos las librerías de 32bits y las meteremos en /lib32 y /usr/lib32 para que Skype no falle:

wget http://ftp.es.debian.org/debian/pool/main/g/gdbm/libgdbm3_1.8.3-7_i386.deb
wget http://ftp.es.debian.org/debian/pool/main/t/tcp-wrappers/libwrap0_7.6.q-18_i386.deb
dpkg -x libgdm*.deb /tmp/skype_apesta
dpkg -x libwrap*.deb /tmp/skype_apesta
mv /tmp/skype_apesta/lib/* /lib32/
mv /tmp/skype_apesta/usr/lib/* /usr/lib32/

Y ala, ya tenemos Skype funcionando.

skype_linux

Me siento como si acabara de estar nadando desnudo en un pozo séptico…

Nueva versión de YASS con soporte para SIP sobre TCP y SIP MESSAGE

Acabamos de lanzar la versión 0.5.3 de YASS, una nueva versión que aparte de algunos pequeños cambios para mejorar la estabilidad tiene las siguientes mejoras:

  • Soporte para SIP sobre TCP.
  • Soporte para SIP MESSAGE (ahora ya puedes chatear con tus amiguitos ;) )
  • Mejoras en la gestión de dispositivos de audio.

Ésta será probablemente la última versión 0.5.x de YASS, ya que esperamos poder realizar importantes cambios en la gestión de la configuración de toda la aplicación (en las versiones 0.6.x) que nos permitirá una mayor flexibilidad a la hora de añadir nuevas features y acercarnos (algún día) a la 1.0

Podéis descargar los fuentes de YASS o instalarlo desde paquetes deb. Tenéis toda la información aquí: http://dev.sipdoc.net/projects/yass/wiki

Esperamos que os guste. :)