sábado, 29 de octubre de 2016

Empezando con Scala


Scala es un leguaje de programación funcional orientado a objetos que permite la integración con Java y que cuenta con muchas características que lo hacen único. Su propósito principal es el de permitir crear aplicaciones elegantes mediante el empleo conciso de patrones y estructuras claras.

Instalación

Antes de empezar a trabajar con Scala debemos tener instalado en nuestro sistema una serie de componentes así como (opcionalmente) un entorno de desarrollo que nos permita fácilmente trabajar con este lenguaje.

Linux


En el caso de que trabajemos utilizando un sistema operativo basado en Linux tendremos que comenzar comprobando la instalación de Java.

java -version
java version "1.8.0"

 En el caso de contar con una versión anterior a la 1.8.x deberemos instalar o actualizar nuestra instalación. Dependiendo de nuestro sistema (Ubuntu, Fedora) utilizaremos uno de los siguientes comandos:

sudo apt-get install openjdk-8-jdk

su -c "yum install java-1.8.0-openjdk-devel"

Mac OX


En primer lugar hay que instalar el JDK 1.8 de Java. Para comprobar que versión es la que tenemos instalada en nuestro equipo solo 

java -version
java version "1.8.0_111"

En el caso de que no contemos con la versión 1.8 tan solo es necesario descargarla en instalarla en nuestro sistema.

El siguiente paso es instalar SBT (Scala Building Tool), que es la herramienta que se encarga en convertir  Scala en bytecode de Java. Para instalarlo tan solo debemos escribir. 

brew install sbt

Después de realizar la instalación deberemos ejecutar el comando sbt about para comprobar la versión de nuestra instalación. El proceso durará un momento ya que la primera vez se descargarán y desempaquetarán todas las herramientas en nuestro sistema. Una vez finalizado obtendremos la información sobre la versión de nuestra instalación.

sbt about
Getting org.scala-sbt sbt 0.13.11 ...
downloading https://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt/0.13.11/jars/sbt.jar ...
[SUCCESSFUL ] org.scala-sbt#sbt;0.13.11!sbt.jar (2235ms)
...
...
...
[info] Set current project to kstopa (in build file:/Users/kstopa/)
[info] This is sbt 0.13.11
[info] The current project is {file:/Users/kstopa/}kstopa 0.1-SNAPSHOT
[info] The current project is built against Scala 2.10.6
[info] Available Plugins: sbt.plugins.IvyPlugin, sbt.plugins.JvmPlugin, sbt.plugins.CorePlugin, sbt.plugins.JUnitXmlReportPlugin
[info] sbt, sbt plugins, and build definitions are using Scala 2.10.6

El siguiente paso será instalar el entorno. En este caso trabajaremos con IntelliJ aunque también Eclipse nos podría valer perfectamente. Tan solo es necesario descárgalo e instalarlo en nuestro sistema. 

Windows


Para los usuarios de Windows recomiendo este tutorial.

Primera aplicación


Si ya tenemos todo instalado, para crear el primer proyecto en IntelliJ solo tenemos que abrir el entorno y crear un proyecto de SBT nuevo. Si es la primera vez que ejecutamos el entorno, en una de las páginas iniciales de configuración se nos permitirá instalar la extensión para el soporte de Scala

Si ya contábamos con una versión instalada de IntelliJ, para instalar la extensión desde el menú superior debemos seleccionar la opción File | Settings si usamos Windows o Linux o bien el menú IntelliJ IDEA | Preferences en el caso de que seamos usuarios de Mac. Después solo debemos acceder a la pestaña de Plugins, activar la extensión de Scala y reiniciar el entorno.
Después podremos crear nuestro primer proyecto, bien desde el dialogo de inicial que presenta el entorno o bien desde el menú File | New project. En el dialogo de configuración de proyecto debemos seleccionar la pestaña de Scala y la opción de SBT en el tipo de proyecto que deseamos crear y completar los campos típicos con el nombre de proyecto, ubicación, etc. Dejando por defecto los valores de versiones (o de modo que coincidan con las versiones instaladas aunque no siempre será posible ya que suelen retrasarse un poco con las actualizaciones). También debemos indicar el SDK de Java con el que queremos trabajar. Para ello pulsamos sobre el botón New y automáticamente nos situara en la carpeta de Java 1.8 por defecto por lo que nuevamente deberemos pulsar sobre el botón de aceptar. 

Finalmente pulsamos el botón Finish y la plataforma creará nuestro proyecto. Si es nuestro primer proyecto esto puede llevar un también un rato.

Una vez acabado el proceso, desde la vista de proyecto accedemos a src/main/scala y pulsando el botón secundario seleccionamos la opción New/Scala Worksheet. Esto nos permitirá trabajar cómodamente con Scala y observar los resultados de nuestro script a mediada que lo vamos creando.


También es posible crear un proyecto normal (con sus objetos y clases). Para ello tan solo tenemos que pulsar con el botón secundario y seleccionar la opción New/Scala class. Para crear una aplicación deberemos seleccionar la opción objeto y después añadir un código similar a:

/**  * Aplicación simple en Scala
  */
object Example extends App{
  print("Hello Scala")
}

Al extender de la clase App nos creará una aplicación que podrá ser ejecutada como tal. Y una vez la ejecutemos nos mostrará un mensaje por pantalla.

Objetos, clases y rasgos (traits)


Una de las peculiaridades de Scala es que a parte de clases típicas de la orientación a objetos incluye dos elementos adicionales junto al típico class, siendo estos object y trait.

  • Si creamos un elemento de tipo class estaremos creando un elemento similar al de cualquier otro lenguaje orientado a objetos que estará definido por sus propiedades y métodos. 
  • En el caso de los elementos object lo que tendremos en realidad es una clase que puede ser instanciada una única vez. Es decir se comporta como un objeto único dentro de una aplicación siguiendo un patrón de tipo singleton. Normalmente usaremos esta clase por ejemplo para definir nuestra clase principal (que además como en el caso del ejemplo anterior extender de App).
  • Por último, en el caso de los trait (rasgos o comportamientos) estaremos creando clases que pueden ser usadas como clases que permiten herencia múltiple. Es decir cualquier otra clase puede ser extendida de múltiples traits pero no de más de una clase u objeto. En cierto sentido se comportan igual que los interfaces de Java pero permitiendo añadir cierta funcionalidad. 
Una descripción más extensa sobre cada uno de estos tipos esta disponible en este post.

domingo, 26 de julio de 2015

Compilar e instalar Orfeo Toolbox 5.0 en Ubuntu


Orfeo Toolbox (OTB) es una biblioteca para el procesamiento de imágenes de teledetección (por ejemplo imágenes por satélite) desarrollada por el Centro Nacional de Estudios Espaciales Frances (CNES).


Antes de empezar debemos instalar cmake (y opcionalmente cmake-gui), así como las librerias zlib, boost, curl y QT4:

sudo apt-get install cmake cmake-gui zlib1g-dev libboost-all-dev libcurl4-openssl-dev libqt4-dev libqt4-gui g++ libtinyxml2.6.0

Ahora descargamos y descomprimimos los sources de la última versión (5.0.0) de OTB: http://sourceforge.net/projects/orfeo-toolbox/files/OTB-5.0.0.tgz/download

Orfeo requiere muchas dependencias para funcionar (GDAL, OSSIM, etc) pero por suerte para facilitarnos la vida el paquete incluye un modo de compilación llamado Super Build. Para ello tan solo tenemos que entrar en la carpeta Super Build y configurar y generar los makefiles que nos permitirán compilar e instalar la librería para lo que escribimos:

cmake -G "Unix Makefiles"

Después debido a que han movido el repositorio de MuParser y aun no han actualizado (en la versión 5.0.0) los makefiles, debemos editar el archivo ./SuperBuild/CMake/External_muparser.cmake, cambiando las línea:

URL "http://downloads.sourceforge.net/project/muparser/muparser/Version%202.2.3/muparser_v2_2_3.zip"
URL_MD5 9de40ec1dab5bd2787ee344fce5846ad


por

URL "https://www.orfeo-toolbox.org/packages/muparser_v2_2_4.zip"
URL_MD5 ab5d86af1c75e3946314e76e6018f78d


Y compilamos e instalamos

sudo make

Esperamos un buen rato y listo. En el próximo post cómo crear el primer programa con OTB.

jueves, 23 de julio de 2015

Desinstalar todos los paquetes de brew

De vez en cuando hay que hacer limpieza de los paquetes instalados con Homebrew. Para ello solo hay que escribir:

$ brew remove --force $(brew list)

lunes, 6 de julio de 2015

Compilando OpenCV 3.0 en MacOS/Linux

OpenCV es una biblioteca libre de visión artificial que nos permite realizar desde un procesado simple de imágenes hasta la detección de caras y objetos.

Recientemente se ha publicado su versión 3.0 que incluye entre otras novedades:

  • Más de 1500 parches.
  • Reconocimiento de texto.
  • Integración con la librería VTK (visualizaciones 3D).
  • Uso transparente de GPU en varios algoritmos.
  • Nuevos algoritmos usados en fotografía (HDR, inpainting, edge-aware filters, superpixels, …)
  • La documentación usa ahora Doxygen.

A continuación os dejo una serie de pasos para poder utilizar todas estas funcionalidades en nuestros programas tanto en MacOS como en Linux:

Paso 0. Descargar lo que necesitamos

Para trabajar con ella en primer lugar debemos compilarla e instalarla en nuestro sistema. Para ello necesitamos descargar:

. Código fuente OpenCV para UNIX/MacOs
. Descargar e instalar CMake
. En MacOs también necesitaremos tener instalado XCode.

Paso 1. Configure y Generate

Después solo necesitamos abrir el interfaz de CMake, seleccionar el directorio donde hallamos descomprimido OpenCV, el directorio donde queramos generar los makefiles  y configurar y generar los makefiles. El interfaz de CMake nos permite también seleccionar opciones adicionales. Después pulsamos Configure y seleccionamos el compilador de UNIX (para que nos genere los makefiles) y si todo va bien CMake se encargará de buscar automáticamente las referencias a las librerías adicionales necesarias.

Si todo va bien podremos generar el proyecto pulsando Genreate. Si algo va mal tendremos que configurar a mano las rutas a las librerías que falten.


Paso 2. Make install

Así de simple, abrimos el terminal, vamos a la carpeta en la que hallamos generado nuestros makefiles y escribimos:

$ make install

Paso 3. Probarlo

Para ello escribimos un sencillo programa que muestra la captura de nuestra web cam. Para ello en primer lugar escribimos el programa:

#include "opencv2/highgui/highgui.hpp"
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char* argv[])
{
    VideoCapture cap(0); // Abre la captura de la webcam. 
    namedWindow("Captura",CV_WINDOW_AUTOSIZE); // Crea una ventana
    while (1) {
    Mat frame;
        bool bSuccess = cap.read(frame); // realiza captura
        imshow("Captura", frame); 
  if (waitKey(30) == 27) // Lee la entrada y si pulsamos Esc sale del programa
        {
            cout << "esc key is pressed by user" << endl;
            break; 
        }
    }
    return 0;
}

Por otro lado generamos un archivo CMakeLists.txt para generar los makefiles para este programa del mismo modo que lo hicimos para compilar OpenCV:

cmake_minimum_required(VERSION 2.8)

project( TestCV )
find_package( OpenCV REQUIRED )
add_executable( TestCV cvtest.cpp )
target_link_libraries( TestCV ${OpenCV_LIBS} )


Y finalmente los generamos y compilamos usando make. El resultado obtenido será similar (o mejor) a:




domingo, 21 de diciembre de 2014

Comandos básicos Bower

Bower es un manejado de paquetes para la Web. Aquí os dejo los comandos básicos para no olvidarlos cuando estamos trabajando en alguno de nuestros proyectos:

Instalación de bower

> npm install -g bower

Instalación de paquetes 

> bower install <package>

> bower install <package>#X.X.X

> bower install git://package/addres/package.git

Instalación de paquetes después de hacer init

> bower install <paquete> —save

Instalación de paquetes de un proyecto

> bower install 

Mostrar paquetes instalados 

> bower list —path

Para iniciar un nuevo fichero de configuración 

> bower init


martes, 16 de diciembre de 2014

Cambiar resolución Ubuntu 14.04 en VirtualBox

Desde hace poco trabajo en OsX y me ha tocado instalar una maquina virtual en Linux para trabajar en un proyecto. Pero me he encontrado con el primer problema y es que la resolución por defecto es de 640 x 480 y así no hay quien trabaje. Por suerte siguiendo unos pocos pasos podemos solucionar este problema:
  1. Desactiva el soporte 3D en la configuración gráfica de la máquina virtual.
  2. Ejecutar esto:
    sudo apt-get update  
    sudo apt-get upgrade  
    sudo apt-get install dkms  
    sudo apt-get install build-essential
    
  3. En la maquina virtual dentro de los dispositivos añadir la imagen de cd  de Guest Additions (menu Devices-Insert Guest Additions CD (Host+D)). Con ello aparecerá un mensaje indicando si queremos continuar con la instalación. Obviamente continuamos y listo.
  4. Reinicia Ubuntu.
  5. Ahora la resolución de la pantalla se modificará de manera automática.


    * Si durante la instalación de los Guest Additions os aparece un warning indicado que no se ha reconocida la versión de X Windows del tipo:

    Warning: unknown version of the X Window System installed.  Not installing
    X Window System drivers.


    La instalación no funcionará. Se debe a que probablemente estéis usando una versión antigua de VirtualBox. Actualizarlo y volver a instalar las Guest Additions debería solucionar el problema. 

    Fuente: http://askubuntu.com/questions/240745/how-do-i-get-a-larger-screen-resolution-in-virtualbox-on-mac-os-x

jueves, 5 de diciembre de 2013

Instalar VTK con soporte de Qt y Python en Windows


0. Descargar e instalar Visual Stuido 2010, CMake, Qt4.x y Python con Setup Utils y Easy_install

1. Descargar y descomprimir VTK.

2. Abrir CMake y configurar el proyecto, debemos:
  • establecer la herramineta de compilación (VS2010) 
  • marcar las opciones de generación para el Wrapper de Python y el uso de Qt
  • establecer los directorios donde se encuentra nuestra instalación de Python, la herramienta qt-make y el directorio de instalación.
3. Configurar y generar. Que nos generara una solución para Visual Studio que es con la que trabajaremos a partir de ahora.

4. Abrimos la solución y la construimos a nuestro gusto (es decir en modo Debug, Release, etc).

5. Después buscamos el proyecto INSTALL dentro de la solución y lo ejecutamos. Si todo va bien ya podremos empezar a trabajar con VTK en C++ pero para poder usarlo en Python nos quedan un par de pasos mas.
  • Si nos da un error indicando que no se ha establecido la variable PYTHONPATH, debemos añadirla al sistema con el valor de la ruta en la que se esta intentando copiar el paquete .egg de python (nos lo indica el error)

6. Ahora vamos a Python e instalamos el paquete .egg generado para lo que escribimos:
  • easy_install C:\Ruta_paquete_dado_por_PYTHONPATH\VTK-6.0-py2.7.egg
7. Añadir al path del sistema los directorios bin de la instalación de Qt (por ejemplo C:\Qt\4.8.5\bin) y VTK (normalemente algo como C:\nuestro_directorio_salida_VTK_cmake\bin ).

8. Para probar que funciona todo bien entramos en la consola de python y escribimos "import vtk" .