miércoles, 6 de noviembre de 2013

Skype 4.2 en Debian Testing 7 (Jessie)

No soy usuario asiduo de los servicios de VoIP, pero en las peripecias de la vida terminé con una cuenta en Skype [1]. Como Debianita, decidí darle una oportunidad a Skype en mi sistema.

Desde la versión 6.0 de Debian se implementó la modalidad "multiarch"*[2] que permite correr aplicaciones de distintas arquitecturas en un mismo sistema,por ejemplo y como en mi caso, tener el sistema amd64 y correr el Skype que viene destinado a arquitecturas i386.

Deste este enlace es posible descargar Skype, la opción sería "Debian multiarch" lo que nos descargará un .deb que tendremos que instalar con dpkg.
Una manera alternativa sería ejecutar desde la consola el comando

$ wget -O skype-install.deb http://www.skype.com/go/getskype-linux-deb

Para instalar el paquete es preciso habilitar la arquitectura i386. Con permisos de super usuario (root) añadimos la arquitectura usando el comando

# dpkg --add-architecture i386

Luego actualizamos el almacén de paquetes para incluir los paquetes de la arquitectura i386

# apt-get update

Si utiliza el sistema PulseAudio para administrar el sonido ( como lo requiere el entorno XFCE4 por ejemplo) se recomienda instalar la librería libpulse para i386

# apt-get install libpulse0:i386

Ahora, instalamos el paquete .deb que descargamos usando dpkg (Sobra decir que debemos estar en el directorio que contiene dicho archivo, y que el nombre que uso aquí es ilustrativo, para mi caso fue skype-debian_4.2.0.11-1_i386.deb)

# dpkg -i skype-descargado.deb

Reportará que hay dependencias insatisfechas, lo cual resolveremos con

# apt-get -f install

Con lo cual finaliza la instalación.


Edición(04-Abril-2015)
Puede ocurrir que Skype no encuentre alguna librería, en mi caso fue la librería compartida "libGL.so.1".
La solución fue instalar la verión i386 de la librería libgl para mi tarjeta gráfica, disponible en los repositorios de Debian. Si skype no inicia, usando el comando "ldd" en el ejecutable ("/usr/bin/skype") puede revelar las librerías faltantes.


Referencias


  1. www.skype.com
  2. https://wiki.debian.org/Multiarch
  3. https://wiki.debian.org/skype
*La definición que da la Debian-Wiki es la siguiente
Multiarch is the term being used to refer to the capability of a system to install and run applications of multiple different binary targets on the same system. For example running a i386-linux-gnu application on an amd64-linux-gnu system. This example is the most common case, but many other working combinations are possible, such as armel and armhf.
Multiarch also simplifies cross-building, where foreign-architecture libraries and headers are needed on a system during building.

miércoles, 30 de octubre de 2013

Conozcamos la STL (Standard Template Library) de C++ - Primera entrega: std::map - Parte 2 de 2

Introducción

Mucha personas (como yo en el pasado cercano) ignorarán el poder oculto detrás de las siglas STL. Se trata de nada más ni nada menos que una de las "cosas" que convierte a C++ en uno de los lenguajes de programación más poderosos. La STL o Standard Template Library 
La STL proporciona una colección de estructuras de datos contenedoras y algoritmos genéricos que se pueden utilizar con éstas.
Dada la extensión que pretendía dar a este tema, decidí dividirlo en dos entradas independientes y complementarias.
La primera parte de esta entrega (disponible aquí) consiste en la implementación del contenedor std::map con los tipos de datos incluidos en el estándar de C++.
En la segunda parte (este post) abordaré la implementación del contenedor std::map haciendo uso de una clase propia, es decir, una clase que hemos hecho nosotros mismos, tal como lo ilustramos en una entrega previa, donde hemos definido una clase para la manipulación de vectores.

Usando std::map con una clase propia

Supongamos ahora que creamos una clase y queremos usarla en una variable tipo std::map. Para tal fin es necesario crear un criterio de comparación, específicamente, es necesario definir el operador< dentro de nuestra clase, puesto que std::map se basa en el para realizar el ordenamiento.
En una entrega previa hemos definido una clase para la manipulación de vectores y hemos definido el operador< dentro de la misma tal como lo requiere el std::map.

La clase cVector y su código de implementación pueden descargarse usando este enlace.
Mirando el código de ejemplo:


#include <iostream>
#include <map>
#include "cVector.hpp"

int main(void)
{

    cVector I_vector;
    cVector J_vector;
    cVector K_vector;
 
/*
Aqui implementamos un mapa que contiene elementos de la clase cVector,
No debe representar problemas puesto que el operador< ha sido definido para la clase
como puede verse en cVector.hpp
*/

    std::map<int,cVector> mi_mapav;
 
    I_vector.colocarCoordenadas(1,0,0);
    J_vector.colocarCoordenadas(0,2,0);
    K_vector.colocarCoordenadas(0,0,3);

 
mi_mapav[0]=I_vector;
mi_mapav[1]=J_vector;
mi_mapav[2]=K_vector;

    std::cout << "Producto punto entre I y K " << I_vector*K_vector << std::endl;
 
    std::cout << "La magnitud de la suma vectorial entre I y J " << (I_vector+J_vector).normaVector() << std::endl;
 
    if( (I_vector+J_vector)<K_vector)
    {
std::cout << "La magnitud de I + J es menor que la de K " << std::endl;
}
else
{
std::cout << "La magnitud de I + J es mayor que la de K " << std::endl;
}

for(int i=0;i<1;i++)
{
std::cout << "Usando el std::map tenemos la norma de la suma de vectores consecutivos" << (mi_mapav[i]+mi_mapav[i+1]).normaVector() << std::endl;

}
}


Cuando el instalador de Debian falla...

Hoy decidí realizar una instalación limpia de Debian (a la fecha Jessie/Testing), con una lista depurada de los paquetes que si uso.
Para el proceso de instalación descargué la ISO del primer DVD para instalación del Debian Testing (usualmente contiene todos los paquetes necesarios para una instalación sencilla y con cualquier gestor de ventantas) cree una USB booteable ( el típico cat Debian.iso > /dev/sdX hay muchos tutoriales en la red, así que no entraré en detalles)
La instalación funcionaba muy bien hasta llegar a la parte de detección de hardware de red. En este punto la instalación se colgaba y no avanzaba más. 

Cual fue la solución?[1]

Iniciar la instalación en modo experto (expert install) puede ser en modo gráfico o en modo consola, una vez allí, seleccioné la opción 

Selección del modo experto.
A continuación buscamos una opción para abrir una consola (Execute a shell)

Execute a shell - la penúltima opción.
Se abre una consola de bash que debemos utilizar para editar un script interno del instalador

$ nano /bin/check-missing-firmware

Se abrirá un editor de texto donde la primera línea debe decir

#!/bin/sh

bajo esta línea escribimos

exit 0

para que el script termine antes de ejecutarse. Acto seguido, presionando Ctrl+o y luego Ctrl+x  salimos del editor. En la terminal escribimos 

$ exit

Para continuar con el proceso de instalación, seleccionamos la opción "choose language" (Elegir lenguaje) y continuamos cada item de la lista en secuencia hasta llegar a "Load installer components from CD"

Execute a shell - la penúltima opción.
Al abrir esta opción, no seleccionamos nada y le damos continuar, de ahí en adelante seguirá el proceso estándar de instalación. Estos simples pasos me sacaron de un gran lío y por ello merecieron una entrada en este blog.

Fuentes