miércoles, 23 de marzo de 2016

Migración a bytefrio.com

Hola lectores o interesados en el blog

Solo confirmar que soy el dueño del dominio bytefrio.com y que las siguientes publicaciones serán en ese sitio, he mudado las entradas a este dominio y este blog queda aquí para propósitos de archivo

Gracias y saludos

miércoles, 3 de junio de 2015

Compilar e Instalar Node.js y npm en Ubuntu 14.04

Probando con unos video-tutoriales de Laravel 5 (un framework en php muy elegante) me encontré con la necesidad de instalar node js en una maquina virtual que corre Ubuntu 14.04.

Si bien hay formas de instalar node.js como utilizando repositorios, no hay garantía de que sea la ultima versión porque node.js es bastante fresco y es actualizado muy rápido.

Primero descargamos las fuentes de la ultima versión estable (v0.12.4 a la hora de este escrito) desde el sitio de node.js esta ya incluye el gestor de paquetes npm
Creamos el directorio de instalacion
mkdir ~/src
cd ~/src


wget http://nodejs.org/dist/v0.12.4/node-v0.12.4.tar.gz

Luego descomprimimos el paquete

tar -zxvf node-v0.12.4.tar.gz



Cambiamos al directorio de instalación y podremos ver los archivos de instalación con ls

cd node-v0.12.4
ls



Antes de compilar lo mas probable es que se necesiten las dependencias  nos ponemos como root:

sudo su
#apt-get update
#sudo apt-get install git-core curl build-essential openssl libssl-dev




Lo siguiente es compilar (va a tomar un par de minutos dependiendo de tu equipo):

# ./configure

# make



Al terminar se podrá ver algo similar a lo siguiente



# make install


Y si todo salio bien no mostrará ningún error


Podemos probar que node funciona tecleando node y luego escribiendo un poco de javascript.

node 
function pruebaNode(){
 console.log("Node funciona");
}
pruebaNode();


Y probar npm basta con (o simplemente npm)

sudo npm install -g javascripting


Y listo ya puedes trabajar con nodejs.

lunes, 1 de junio de 2015

Tecnologías de autenticación

Uno de los elementos mas importantes de la información (de las empresas y particulares) es la confidencialidad, es decir solo las personas autorizadas deben de tener acceso a la información necesaria.

Para esto es necesario autenticarse (o autentificarse, en inglés solo es "authenticate")

De manera sencilla podemos decir que autenticarse (para una persona) es probar de manera razonable que uno es quien dice ser.

Cuando entras a un edificio (donde tenes permiso de estar) y te piden tu identificación si no te conocen comprueban tu foto con tu cara y si se te pareces lo suficiente al que está en la foto te dejan pasar la mayoría de veces, o si les caes bien ;-).

En el caso de los sitios web también funcionan de una forma similar -de acuerdo es un poquito mas técnico y complicado- tu usuario es para saber quien sos y tu contraseña para poder comprobar de forma razonable que sos quien decís ser luego de dar tu usuario.

Luego de dar tu usuario y contraseña el sitio te deja acceder al contenido que tu usuario tiene permiso.

Los passwords/contraseñas por ejemplo son una tecnología muy antigua y mucho antes de que existieran computadoras y siempre han habido razones para que terceras personas no sepan un mensaje, desde preparar sorpresas, mantener romances prohibidos, ocultar planes de guerra.

Pero lo cierto es que utilizas tecnologías de autenticación mas de lo que se te podría ocurrir y de hecho muchas de estas tecnologías de autenticación están allí protegiéndote a cada momento, protegiendo tu privacidad creadas por gente muy ingeniosa.

Desde los sistemas de firma de documentos (probablemente una tecnología de autenticación muy obsoleta -dicen dale la vuelta a una firma y es mas fácil falsificarla, pero uno que sabe), pasando por los cajeros automáticos, las llaves y cerraduras de las casas de las personas, cifrados SSL con criptografía de curvas elípticas donde admito ya no es mi dominio

Y así pasamos a las tecnologías utilizadas para autenticación

Las formas de autenticarse consideran una o varias de las siguientes cosas: algo que sabes, algo que tenes y algo que sos.

Contraseñas:
La contraseña que te piden para entrar en un club, el pin de tu tarjeta de crédito, de tu correo, de tu facebook estas entran en la categoría de algo que sabes (o deberías saber, a veces uno pone las contraseñas y luego se te olvidan :-( )

Tu Documento de Identidad (algo que tenes): 
DNI, DUI, Licencia de Conducir, Pasaporte entre otros tienen un montón de datos personales que pueden ser comprobados en bases de datos gubernamentales y como sabemos es mala idea perderlos.

Firmas (algo que sabes -hacer?):
En teoría solo una persona es capaz de hacer su firma aunque ya mencionamos que siempre existe la posibilidad de falsificarla utilizada para dar validez a documentos legales (y probablemente arbitraria, hoy en día al dar clic en aceptar en términos y condiciones de usuarios también te ata legalmente según el país en el que te encontrés).

Biometrica (algo que sos) :
Utilizas uno o varios de tus rasgos físicos para comprobar tu identidad como huellas digitales, reconocimiento facial, reconocimiento de iris. Es probable que el smartphone, pc o laptop desde donde estés leyendo este articulo utilice algunas de estas tecnologías

Autenticación un solo factor: Solo considera uno de los 3 factores, solo ingresas tu usuario y contraseña para acceder a una red social (solo utilizas algo que sabes) o a tu correo y los passwords son algo debil y dificil de asegurar también recomendaría un gestor de contraseñas como lastpass, mucho mas practico que recordar todas las contraseñas.
 
Autenticación de múltiples factores: combinan 2 o mas de las 3 consideraciones:
  • Un cajero automático requiere que sepas el pin de tu tarjeta, pero también requiere tengas la tarjeta en tu mano para poder acceder a los fondos e información de tu cuenta.
  • Una red social que solicita un sms cuando ingresas tu contraseña, si no has habilitado autenticación de multiples factores e inicias sesión desde lugares desconocido o poco confiables es una buena idea activarla.
Como siempre acepto correcciones (gran admirador) y aclaraciones en los comentarios (y si hay tecnologías de autenticación interesantes también compartirlas con nosotros).

Photo credit: Dev.Arka / Foter / CC BY-ND

sábado, 6 de diciembre de 2014

Implementación de una centralita telefonica con asterisk y freepbx

(Para el curso cos115 del 2014)
Instalación de Linux en una memoria SD
Utilizaremos una memoria sd de 8Gb para la instalación
Se descargará la imagen del sitio web de raspbian (Distribución linux escogida para la instalación del software que correrá la centralita)
clip_image002
Desde la terminal se ejecutará el siguiente comando
Se descargará el archivo 2014-09-09-wheezy-raspbian.zip
Luego se ejecutará desde una terminal
#unzip 2014-09-09-wheezy-raspbian.zip
y se copiará la imagen hacia la memoria microSD
#dd if= 2014-09-09-wheezy-raspbian.img /dev/mmcblk0
Donde 2014-09-09-wheezy-raspbian.img es la imagen descomprimida y /dev/mmcblk0 es la memoria microSD en donde instalaremos el sistema operativo
dd no muestra ningún mensaje de error pero si todo salió bien se podrá ver algo como lo siguiente:
clip_image004
Luego insertamos la sd en la raspberry pi y deberá iniciar sin problemas
Para conectarnos vía ssh hacia la raspberry pi es necesario habilitar el servidor de ssh

y contar con un cliente ssh (en linux es probable que se encuentre instalado, en windows se puede utilizar putty)

Para conectarnos utilizaremos el comando
$ ssh pi@10.42.0.62
En donde pi es el usuario con el que iniciaremos sesion y 10.42.0.62 es la dirección ip de la raspberry.
Nos saldrá el siguiente mensaje
clip_image006
Aceptamos que si y veremos lo siguiente con lo cual todos los comandos que ejecutemos en esta consola serán ejecutados en la raspberry pi.
clip_image008
Instalación del software necesario para asterisk (librerías y soporte de hardware)
Primero necesitaremos descargar todo el software necesario para la instalación
Como son asterisk, freepbx, la librería dahdi, la libreria ss7 (libss7), la libreria pri (libpri)
Estas sirven para que la centralita se pueda comunicar con otro hardware de pbx dedicado asi como tener salida a la red de telefonia publica
Crearemos una carpeta en donde estará descargado todo el software que no instalemos desde los repositorios de debian
$mkdir software
clip_image010
Luego nos dirigimos al sitio web de asterisk en la sección de descargas podremos ver listadas las librerías y el software necesario para instalar
clip_image012
cambiamos al directorio donde guardaremos las descargas con $cd software y realizamos la descarga del software
DAHDI
$wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz
clip_image014
Libss7
$wget http://downloads.asterisk.org/pub/telephony/libss7/libss7-2.0.0.tar.gz
clip_image016
Libpri
$wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-1.4-current.tar.gz
clip_image018
Asterisk (versión 11 por cuestiones de estabilidad)
$wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-11-current.tar.gz
clip_image020
Descomprimimos el software descargado con
DAHDI
$ tar -xzvf dahdi-linux-complete-current.tar.gz
Libss7
tar -xzvf libss7-1.0-current.tar.gz
Libpri
$ tar -xzvf libpri-1.4-current.tar.gz
Asterisk
$ tar -xzvf asterisk-11-current.tar.gz
movemos los archivos descomprimidos a la carpeta donde se encuentran las fuentes
moviendo las fuentes al directorio de fuentes /usr/local/src
# mv dahdi-linux-complete-2.10.0.1+2.10.0.1/ /usr/local/s
sbin/ share/ src/
# mv dahdi-linux-complete-2.10.0.1+2.10.0.1/ /usr/local/src/
# mv asterisk-11.14.1/ /usr/local/src/
# mv libpri-1.4.15/ /usr/local/src/
# mv libss7-1.0.2/ /usr/local/src/
root@raspberrypi:/home/pi/software# ls /usr/local/src/
asterisk-11.14.1 dahdi-linux-complete-2.10.0.1+2.10.0.1 libpri-1.4.15 libss7-1.0.2
Compilación DAHDI
Es posible que al querer compilar DAHDI no se encuentren disponibles las fuentes del kernel para la versión instalada de raspbian.
Por cuestiones de compatibilidad y ciertos errores que se dan al compilar DAHDI con el kernel instalado por defecto se utilizará el kernel 3.6 de linux y su respectivo código fuente con:
apt-get install linux-image-3.6-trunk-rpi linux-headers-3.6-trunk-rpi
editar el archivo /boot/config.txt
agregar las siguientes líneas al final del archivo
kernel=vmlinuz-3.6-trunk-rpi
initramfs initrd.img-3.6-trunk-rpi followkernel
Reiniciar la raspberry pi para que cargue este kernel 3.6
cambiarse al directorio /usr/local/src/dahdi-linux-complete-2.10.0.1+2.10.0.1
ejecutar los comandos
# make
# make install
# make config
compilación libpri (Es necesario antes haber instalado la libreria DAHDI)
cambiarse al directorio /usr/local/src/libpri-1.4.15/
ejecutar
# make
# make install
compilación librería libss7-1.0.2
cambiarse al directorio /usr/local/src/libss7-2.0.0/
ejecutar
# make
# make install
compilación asterisk
instalamos dependencias para compilación de asterisk
# apt-get install libsqlite3-dev libxml2-dev libncurses5-dev
iniciamos sesión como root o adquirimos permisos de root con sudo su
Nos movemos al directorio donde se encuentran las fuentes de asterisk
#cd /usr/local/src/asterisk-11.14.1/
se ejecuta el comando make
# make
y luego make install
# make install
Seguido de make config
# make config
clip_image022
Make config se encarga de agregar asterisk al inicio del sistema modificando los scripts rc.d
Instalación de freepbx
Freepbx es una interfaz gráfica web para configurar asterisk
Se obtiene la direccion de descarga a partir del sitio web de freepbx (http://www.freepbx.org/)
clip_image024
desde la raspberry se descarga el freepbx (Versión 2.11 por razones de estabilidad)
pi@raspberrypi ~/software $ wget http://mirror.freepbx.org/freepbx-2.11.0.40.tgz
clip_image026
se instalan los requerimientos de freepbx (un servidor apache, mysql y)
sudo apt-get install apache2 mysql-server php5 php5-cli php5-mysql php-pear libapache2-mod-php5 php5-gd php5-curl mysql-client
se agrega usuario de asterisk
Creamos el usuario para asterisk y asignamos los permisos necesarios
adduser asterisk --disabled-password --gecos "Asterisk User"
chown asterisk. /var/run/asterisk
chown -R asterisk. /etc/asterisk
chown -R asterisk. /var/{lib,log,spool}/asterisk
chown -R asterisk. /usr/lib/asterisk
mkdir /var/www/html
chown -R asterisk. /var/www/
Luego creamos las bases de datos de asterisk
# mysql -u root -p
create database asteriskcdrdb;
create database asterisk;
agregamos los permisos de acceso a la base de datos
mysql> GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskuser@localhost IDENTIFIED BY 'cos215';
mysql> GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY 'cos215';
Creamos la base de datos de asteriskcdrdb en base a los archivos de ejemplo de SQL de freepbx
mysql -u asteriskuser -pcos215 asteriskcdrdb < usr/local/src/freepbx/SQL/cdr_mysql_table.sql
Creamos la base de datos de asterisk en base a los archivos de ejemplo de SQL de freepbx
mysql -u asteriskuser -pcos215 asterisk < usr/local/src/freepbx/SQL/newinstall.sql
ejecutamos ./install_amp y seguimos las instrucciones
clip_image028
clip_image030
Freepbx funcionando
Si todo ha salido bien se tendrá asterisk funcionando y freepbx también para acceder a la interfaz de freepbx solo se tiene que poner la ip del dispositivo
y se verá la siguiente interfaz
clip_image032
Poniéndolo en español
Seleccionamos Advanced settings en el menu settings
clip_image034
Nos dirigimos a la sección GUI Behavior
clip_image036
y ponemos Show Language setting en true y guardamos haciendo click en la icono verde de cheque save
clip_image038
Se podra ver un menú de idiomas a la par de la opción de logout
clip_image040
Al seleccionar Spanish la interfaz cambiará a español (nota: la traducción al español de freepbx parece ser un tanto incompleta)
clip_image042
Creando extensiones
Seleccionamos Extensiones en Applications
clip_image044
Se mostrará una pantalla para añadir una extensión, para nuestro ejemplo crearemos una extensión utilizando SIP pero si desea crear una extensión IAX2 solo tiene que seleccionarlo del menú.
clip_image046
Las siguientes configuraciones sirven tanto si selecciono SIP o IAX.
Agregamos el número de la extensión y el nombre a mostrar
clip_image048
Y en la sección de dispositivo seleccionamos la contraseña para la extensión en la sección secret
clip_image050
Todos los demás valores se dejan con los valores por defecto. Finalmente seleccionamos enviar.
clip_image052
Podremos ver el numero y nombre de la extensión abajo del cuadro de cerrar sesión
clip_image054
INSTALANDO CLIENTES
Para revisar el funcionamiento de las extensiones creadas en asterisk por medio de FreePBX ocuparemos programas como EKIGA y ZOIPER que sirven para hacer videoconferencias, llamadas por VOIP entre otros.
Para instalar EKIGA en Debian se procede de la siguiente manera:
EKIGA se encuentra en los repositorios de debian por lo que ejecutamos lo siguiente en consola:
# aptitude install ekiga
Nos aparecera lo siguiente:
#Se instalarán los siguiente paquetes NUEVOS:
ekiga libcapi20-3{a} libodbc1{a} libopal3.10.4{a} libpt2.10.4{a}
Se ELIMINARÁN los siguientes paquetes:
gnash-common{u} libboost-program-options1.49.0{u}
libboost-thread1.49.0{u} libmozjs24d{u} xulrunner-24.0{u}
0 paquetes actualizados, 5 nuevos instalados, 5 para eliminar y 1 sin actualizar.
Necesito descargar 16,0 MB de ficheros. Después de desempaquetar se liberarán 23,0 MB.
¿Quiere continuar? [Y/n/?]
Presionamos Y y continuamos la instalación.
Una vez instalado habrimos EKIGA
Cuando es primera vez nos aparecera la siguiente ventana:
clip_image056
Presionamos adelante en toda la configuración. Habrán opciones que pedirá usuario y contraseña para los servicios que posee EKIGA en Internet pero podemos decirle que no los necesitamos.
Así lucirá la ventana de EKIGA:
clip_image058
Para agregar una cuenta SIP Editar->Cuentas:
clip_image060
Luego Cuentas-> Añadir Una cuenta SIP
Llenamos con los datos correspondientes de la extensión, y luego click en Aceptar, no olvidar que en servidor de registro se pone la direccion ip de la central telefonica para este caso 192.168.0.102
clip_image062
Si el servidor esta de asterisk esta correctamente configurado en la columna Estado aparece como Registrado.
clip_image064
Realice estos mismos pasos en cada máquina cliente, es decir una por extensión.
Para poder realizar llamadas escriba (en la pantalla principal de Ekiga) la extensión destino y haga clic en el icono del teléfono (verde). El cliente destino debe aceptar la llamada para que haya comunicación.
clip_image066
Por el momento Ekiga no soporta el protocolo IAX por lo que si creamos este tipo de extensiones debemos usar como cliente a Zoiper (que ademas soporta SIP tambien).
Para agregar la cuenta IAX nos dirigimos a Settings -> Create new account, en el nuevo menú seleccione, como tipo de cuenta, IAX y haga clic en NEXT. LLene el formulario con sus credenciales y vuelva hacer clic en NEXT y nuevamente en NEXT, si todo marcho bien su cuenta habrá sido verificada y agregada.
clip_image068
Referencias

domingo, 28 de julio de 2013

Porque Aprender Assembler

Primero una consideración, si estas leyendo este post es probable que tengas alguna motivación adicional para aprender el lenguaje ensamblador que podría ser tienes algún curso de ensamblador en la universidad, queres impresionar a tu novia mostrandole tu "leetness", o no tenes novia y simplemente queres aprender ensamblador (supongo que han de haber otras razones...).
 
Razones para aprender ensamblador
  • Tiene cierta belleza realizar programas con un tamaño muy pequeño y muy rápidos
  • Se tiene un mayor conocimiento de las computadoras así no te pones tan extrañado cuando ves un mensaje tipo:
 "The instruction at "0x00ccd2cd" referenced memory at "0x00000000", The memory could not be "written" "
  • Es un reto, y si sos de las personas que disfrutan de un buen desafío aprender ensamblador requiere cierto conocimiento de como funciona a bajo nivel el ordenador, el direccionamiento de la memoria, registros de CPU, uso de segmentos.
  • Los programadores con experiencia en ensamblador suelen producir un código mas rápido en lenguajes de alto nivel.
  • Los si programás en ensamblador vas a ser mas disciplinado (si no tenes cuidado de lo que escribís tu programa va a morir de forma muy dolorosa).
  • Es divertido
  • Software de calidad puede ser escrito en ensamblador, sino preguntenle a Steve Gibson creador de Spinrite.
  • Nikolaus Wirth y su "El software se ralentiza mas deprisa de lo que se acelera el hardware", o que la computadora que envió al hombre a la luna el Apolo Guidance Computer tenia 64Kbyte de memoria (muy poquita memoria) y operaba a 0.043Mhz (muy poquita capacidad de procesamiento). Un cliente de twitter utiliza mas memoria que la utilizada para enviar a un hombre a la luna y mas recursos de procesamiento son utilizados en el conjunto de maquinas que se encargan de la transmisión de un tweet que los que se utilizaron para enviar a un hombre a la Luna! solo para que alguien inmortalice el estado de su estomago twitteando "tengo hambre" oh!, la humanidad!.
Para que vas a utilizar ensamblador

  • Para hacer demos!

  • Programar drivers para dispositivos, si te gusta la electronica y te inventas algún dispositivo interesante vas a tener que utilizar C o ensamblador para controlarlo desde la PC.
  • Optimizar ciertas segmentos de codigo en lenguajes de alto nivel.
  • Divertirse, hay proyectos muy interesantes escritos completamente en ensamblador como MenuetOS
Para que no vas a utilizar ensamblador
  • Programarte un "Crisis" por completo.
  • Crear aplicaciones multiplataformas porque los programas en ensamblador varían de un Sistema Operativo a otro y de una Arquitectura de Hardware a otra.
  • Sustituir a un lenguaje de alto nivel como java o .net
En conclusión programar en ensamblador te concede un vasto poder sin embargo no es para los débiles de mente, para forjar programitas para gobernarlos a todos se requiere mucha experiencia, en estos tiempos en que las plataformas móviles y el desarrollo web están en auge, puede que pareza un poco pasado de moda  y hablando desarrollo web luego hablamos sobre asm.js.

Recursos recomendados

  • El projecto MASM32: que incluye una gran cantidad de librerias optimizadas para el desarrollo de aplicaciones de forma mas rapida y sus archivos de ayuda como masm32.chm donde está la historia del proyecto y una introducción al uso de las librerias y el archivo masmlib.chm donde esta referencia de las librerias.
  • El libro The INTEL Microprocessors de Barry B. Brey es un buen libro sobre programación en ensamblador aunque un poco veterano es facil encontrar en internet.
  • Un buen editor de  texto yo recomiendo Vim.