lunes, 29 de octubre de 2012

instalar y configurar cliente subversion AnkhSVN en Visual Studio 2012

Visual Studio permite varias formas de control código fuente. Por defecto Microsoft nos ofrece su plataforma team foundation server. Esta plataforma es suministrada con la compra de cualquier licencia visual studio 2012 que incluya el MSDN.

No obstante algunos desarrolladores están acostumbrados a manejar proyectos en lo que se mezclan plataformas de desarrollo incluso IDEs y cada miembro del proyecto tiene acceso a una parte del código. 
En estos casos un sistema de repositorios de versiones suele ser más indicado para un entorno de trabajo más heterogéneo.
También simplemente puedes decidir usar un subversion porque te sientes más a gusto con este sistema.

NOTA: este pequeño tutorial parte de la idea de que el usuario ya tiene instalado el visual studio 2012 (el cual no conlleva dificultad alguna)

Como dijo Jack el destripador vamos por partes:

Lo primero de todo es descargarse el programa.

  • Para ello accedemos en Visual Studio, accedemos a  HERRAMIENTAS->Extensiones y actualizaciones...
  • Una vez abierto el dialogo, podremos ver a la derecha varias opciones, entre ellas, "En linea" 
  • Arriba a la derecha aparece un pequeño buscador. podemos buscar "subversion" o directamente AnkhSVN.
  • Una vez aparece la extensión si la seleccionamos nos saldrá la opción "descargar" nos abrirá una ventana de navegador y nos bajaremos el programa.
  • Instalamos el programa en nuestro sistema operativo.
  • En principio una vez instalado AnkhSVN, visual studio debería reconocerlo, pero a veces no lo reconoce a la primera, así que mejor reiniciamos visual studio.
  • Una vez reiniciado Visual Studio accedemos a HERRAMIENTAS->opciones y en la opción "Control del código fuente" si pinchamos aparecerán 3 opciones.
    • La primera opción en la lista de complemento de control elegimos AnkhSVN. Esto hará que a partir de ahora aparezcan las opciones de subversion en el visual studio (luego diré donde)
    • la segunda pestaña que aparecerá si hemos elegido AnkhSVN será "Subversion Environment" si ves que no te aparece esta pestaña revisa que elegiste bien el complemento de control de código. En  esta pestaña puedes configurar opciones de proxy (si navegas a través de uno) Autenticaciones (si accedes a repositorios privados con claves, etc) Además de otras opciones de comportamiento que son a gusto del desarrolador.
    • La tercera pestaña permite elegir otros programas para tareas como diferenciación y mezcla de archivos incluso te da opciones para que elijas que programas quieres que lleven a cabo la tarea.
  • Si le damos a aceptar se salvaran los datos y a partir de entonces podremos trabajar con subversion.
Para poder acceder a un repositorio podemos acceder directamente desde "ARCHIVO->Subversion->open for subversion" en el dialogo introducimos la dirección (ya sea ip o dns) del repositorio y listo, ya tendremos acceso al repositorio. 
En caso de que el repositorio sea privado antes de acceder te pedirá usuario y contraseña.


martes, 21 de febrero de 2012

Básico:¿que es un token?

un token es un carácter o cadena de caracteres que identifican un ente que queremos reconocer.


La tarea de Flex es dividir una cadena de entrada en unidades elementales, los denominados tokens.


así por ejemplo podemos reconocer un dígito como digito [0-9]
  

viernes, 23 de septiembre de 2011

ARtoolkit modo pantalla completa (glut)

Durante el desarrollo de aplicaciones con ARtoolkit básico es probable que queramos que la ventana que muestra el vídeo se mueve en pantalla completa.
Cuando usemos glut como manejador de gráficos.

Para inicializar hay que modificar los parámetros de entrada de la llamada <argInit(...)>

Esta función está incluida en el fichero gsub.h y es la encargada de inicializar la librería gsub.

Sus parámetros son los siguientes:
argInit( ARParam *cparam, double zoom, int fullFlag, int xwin, int ywin, int hmd_flag)
  • cparam estructura que contiene los parámetros intrínsecos de la cámara.
  •  
  • zoom  parámetro que define el zoom, es decir como de grande se verá la imagen final en la ventana.
  • fullFlag Parámetro que define la pantalla completa (1 activo, 0 inactivo).
  • xwin XXXBK. 0 si es indiferente.
  • ywin XXXBK. 0 si es indiferente. 
  • hmd_flag activar el modo de visualización en estéreo.
Si marcamos fullFlag a 1. lo que conseguiremos es que la ventana se abra en modo pantalla completa. pero ojo, la imagen no se pondrá en modo pantalla completa. la forma de aumentar el tamaño de la imagen es usando el parámetro zoom. 
Esta variable es de tipo doble, por defecto el valor es <1.0>, es decir valor igual a la imagen recibida por la cámara. si queremos aumentar el tamaño de la imagen deberemos aumentar su valor hasta conseguir un tamaño adecuado al de nuestra pantalla. Ojo, poner el valor <2.0>  duplica su tamaño de zoom, y eso también implica pérdida de calidad de imagen, ya que al fin y al cabo es un zoom digital.

Aquí tenéis un vídeo que describe que pasa si cambias la variable zoom.


miércoles, 21 de septiembre de 2011

Instalar OpenCV 2.3.1 en ubuntu 11.04


Después de pasarme un día entero peleándome con la instalación de OpenCV creo conveniente, dejar aquí las instrucciones de como realizar la tarea. 
IMPORTANTE: este artículo es una traducción al español, con solo un par de correcciones insignificantes. Podéis ver el original (en inglés) en el blog de Sebastian Montabone, al que he de agradecer su aportación y que me salvara el día, que ya tenía pinta de ser totalmente improductivo.

He de decir que la mayoría de los problemas detectados por la gente que intenta instalar OpenCV en ubuntu 11.04 son debidos a la librería ffmpeg. La solución aquí planteada será bajárnosla e instalarla nosotros mismos.
Lo primero que necesitas es instalar un montón de dependencias, tales como soporte de lectura y escritura en archivos de imágenes. dibujo en pantalla, algunas librerías necesarias, etc... Este paso es bastante sencillo. solo necesitas escribir el siguiente comando en un terminal
  1. sudo apt-get install build-essential libgtk2.0-dev libjpeg62-dev libtiff4-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy libtbb-dev libeigen2-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev
Ahora necesitamos descargar y compilar el código de ffmpeg para que los archivos de vídeo funcionen correctamente en OpenCV.
Ejecutamos las siguientes instrucciones en el terminal.

  1. cd ~ 
  2. wget http://ffmpeg.org/releases/ffmpeg-0.7-rc1.tar.gz 
  3. tar -xvzf ffmpeg-0.7-rc1.tar.gz 
  4. cd ffmpeg-0.7-rc1 
  5. ./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libxvid --enable-x11grab --enable-swscale --enable-shared 
  6. make
  7. sudo make install
En el siguiente paso conseguimos la versión más reciente de OpenCV.

  1.  cd ~
  2. wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.3.1/OpenCV-2.3.1a.tar.bz2
  3. tar -xvf OpenCV-2.3.1a.tar.bz2
  4. cd OpenCV-2.3.1/
Ahora tenemos que generar el fichero Makefile usando cmake. Es en este apartado donde podemos definir que partes de OpenCV queremos compilar. Como queremos usar Python y TBB con OpenCV, aquí es donde establecemos estos parámetros. Solo hay que ejecutar la siguiente linea de comándos en el terminal para crear el makefile apropiado. El punto al final de la linea del comando es un argumento para cmake y significa en el directorio actual, así que no lo borres.
  1. cmake -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=OFF -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON .

Asegúrate de que el comando no ha producido ningún error, sobretodo si hay reportes con FFMPEG. Este apartado debería aparecer como YES y que Phyton informa con un YES. Comprueba también que en el apartado use TBB aparace un YES. Si todo está correcta el makefile se hizo correctamente, si no es así, revisa las dependencias quizás haya algo que te falte por instalar y de nuevo ejecuta el comando cmake. Deberías ver algo como esto.












Ahora, ya estás listo para compilar OpenCV 2.3.1
  1. make
  2. sudo make install
Ahora tienes que configurar OpenCv. Primero de todo abre el archivo de configuración.
  1. sudo gedit /etc/ld.so.conf.d/opencv.conf
Añade al final del fichero la linea "/usr/local/lib" Puede ser que el fichero esté vacío, no te preocupes, Salva los cambios.
Ahora abre este otro fichero.
  1. sudo gedit /etc/bash.bashrc
Añade las siguientes lineas al final del fichero.
  1. PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
  2. export PKG_CONFIG_PATH














Finalmente, reinicia el ordenador. Una vez reiniciado el paso final es configurar Phyton con OpenCv. Necesitarás copiar el archivo cv.so en el sitio correcto. Con ejecutar el siguiente comando debería de bastar.

  1. sudo cp /usr/local/lib/python2.7/site-packages/cv.so /usr/local/lib/python2.7/dist-packages/cv.so
Ahora ya tienes OpenCV 2.3.1 totalmente instalado y con soporte para Phyton y TBB.
FIN TRADUCCIÓN.

En la web de Sebastian Montabone el tutorial se extiene con ejecución de las demos. Te invito a visitar su blog.

viernes, 16 de septiembre de 2011

Bibliotecas Boost C++

Empezando a leer la documentación básica sobre openCV he descubierto como la propia API proporciona un manejador de memoria dinámica. 
En la documentación hace referencia a que es una variante de std::shared_ptr. 


Esta clase manejadora de punteros dinámicos fue añadida al estándar C++ después de pasar por las bibliotecas Boost. De hecho los creadores de estas bibliotecas tienen entre sus filas a algunos miembros del comité ISO de estándares C++.

Boost es un conjunto de más de 80 bibliotecas individuales, las cuales proporcionan una gran diversidad de soluciones ya implementadas para una gran variedad de campos. Según la wikipedia Boost tiene en su haber más de 20 tipos módulos específicos (ahí es nada..)
Hay que destacar que todas las bibliotecas incluidas en Boost, están dotadas de una alta calidad técnica, y por si fuera poco son libres.

Más información en Boost.

lunes, 12 de septiembre de 2011

Expresiones regulares básicas en Flex


El analizador Flex define las siguientes normas para identificar Expresiones regulares (expresiones regulares):
  1. Primero intentará asociar una e.r con la cadena más larga posible.
  2. En caso de conflicto entre expresiones regulares, es decir, que varias e.r sean capaces de reconocer una misma cadena de entrada. Flex elegirá la declaración con mayor prioridad, que será la que más arriba del archivo esté definida.
Ejemplo con cadena de entrada: [abb]
ab* {printf("reconozco las cadenas que empiezan en \"a\" y acaban en ninguna o varias \"b\" \n");}
ab+ {printf("reconozco las cadenas que empiezan en \"a\" y acaban en 1 o varias \"b\" \n");}

La cadena sería aceptada por las dos e.r pero por cuestión de prioridad se elige {ab*}
Las primeras e.r que se aprenden a detectar con Flex suelen referirse a la identificación de números.
  • Reconocer un dígito:  digito [0-9]
  • Reconocer un número entero: entero {digito}+
  • Reconocer un número real: real {digito}+"."{digito}*
     Es importante remarcar que en "." las comillas hacen que nos refiramos al símbolo del punto. Existe una e.r que se refiere a <cualquier carácter> y su símbolo es precisamente el punto.
  • Reconocer un número en notación científica: cientifico {real}[eE][\+\-]?{entero}
     
    Los símbolos suma y resta llevan el "\" antecediéndoles para no confundirlo con operandos que usan el mismo símbolo en una e.r

jueves, 8 de septiembre de 2011

Diferenciar un entero de un real ( Programación C/C++)

Un método sencillo para distinguir si un número es entero o real es usando la operación módulo.

Cualquier número real o entero al que se le aplique la operación módulo 1. dará 0 si es entero.

es decir:
SI( modulo(número,1)==0) escribe"ES ENTERO";   
para aplicar esta función usaremos el método incluido en la librería cmath (match.h) fmod

float fmod (float x, float y) ;

código C++

if (fmod(x,1)==0) cout<<"El número "<<x<<" es entero, no tiene decimales significativos"<<endl;



NOTA: En C/C++ existe el operador modulo (%) pero esta operación solo funciona con operandos enteros (int)