jueves, 26 de diciembre de 2013

Capítulo 2. Conectar nuestro terminal Android al ordenador con Ubuntu (V)

Accesos rápidos:

 En la entrada anterior vimos como conectar nuestros teléfonos para volcar nuestros desarrollos desde un entorno en Windows(tienes el enlace justo arriba). Ahora vamos a mostrar lo mismo pero desde Ubuntu. Tenemos que usar los comandos que lleva el SDK para la gestión del emulador. Podéis consultar la documentación oficial aquí. Para ello tenemos que ir a la carpeta platform-tools donde se encuentra instalado el SDK y usaremos el comando

xxx@xxx:~/xxx/android-sdk-linux/platform-tools $ ./adb devices 

Capítulo 2. Conectar nuestro terminal Android al ordenador en Windows (IV).


Accesos rápidos:
 Si pudiste seguir con éxito el post anterior (aquí), ya habrás sido capaz de volcar tu primero proyecto en el emulador, viendo en la pantalla el mensaje Hello World!. Ahora vamos a volcar el desarrollo a un terminal conectado al ordenador desde un sistema Windows. Lo primero que tenemos que hacer es habilitar nuestro teléfono que permita instalar aplicaciones que no son del Market. Para ello tenemos que ir a Ajustes-Aplicaciones y seleccionamos Orígenes desconocidos. Además tenemos que permitir la depuración por USB desde Ajuste-Aplicaciones-Desarrollo y seleccionamos Depuración de USB.



Una vez que hemos realizado estos pasos desde el Administrador de dispositivos veremos que nuestro teléfono ha sido correctamente reconocido. Normalmente los drivers de los teléfonos al ser por USB vienen preinstalados en Windows y no hay que hacer ningún otro paso que conectar el terminal.
Si intentamos cargar nuesta aplicación en un terminal veremos entonces que tenemos dos dispositivos disponible, el emulador que nos hemos creado anteriormente y el terminal que hemos insertado por USB.


Como podéis ver se trata de un terminal Android de Sony bastante barato. Ahora si cargamos la aplicación en el terminal podemos ver que se muestra el mismo mensaje. En la siguiente entrada veremos como realizar esta misma operación pero desde Ubuntu


LIBRO RECOMENDADO PARA APRENDER ANDROID

Uno de los libros fundamientales y que recomiendo para aprender Android y llegar a hacer aplicaciones profesionales es: Android 2 Application Developement de Reto Meier




lunes, 23 de diciembre de 2013

Capítulo 2. Usando el emulador de Android en Eclipse (III)

Accesos rápidos:
Vamos a realizar un pequeño repaso para no perder el hilo del capítulo. Lo comenzamos creándonos nuestro primer proyecto Android llamado Hola Mundo! (aquí), después explicamos los detalles fundamentales de la aplicación que vamos a usar para programar(aquí), es decir Eclipse, y ahora vamos a ver funcionando este primer proyecto en un Emulador de un terminal Android. El paso que tendremos que dar para cargar nuestra aplicación en el emulador sería pulsar el botón con flecha blanca y verde que mostramos en la imagen siguiente. Mediante este botón podemos cargar nuestro desarrollo en un terminal conectado a nuestro ordenador o a un emulador.


domingo, 15 de diciembre de 2013

Capítulo 2. Principales componentes de Eclipse para Android (II)

Accesos rápidos:
En el capítulo anterior (enlace arriba) comenzamos el primer proyecto Android empleando Eclipse. Si todo ha ido con éxito, verás una pantalla con un montón de secciones como la que mostramos a continuación y que iremos explicando con detalle:
Esta es la distribución de componentes de Eclipse para un proyecto Android por defecto, pero podemos configurarcomo deseemos. Vamos a ir explicando los componentes que podemos ver ahora y algunos que nos serán de interés. Si recordamos, en la entrada anterior comenzamos un proyecto llamado Hola Mundo. Por defecto, y por regla general, los proyectos que tenemos almacenados en nuestro workspace se muestran en la izquierda de la pantalla en una sección llamada Package Explorer.

jueves, 12 de diciembre de 2013

Capítulo 2. Nuestro primer proyecto Android en Eclipse (I)

Accesos rápidos:
En las dos entradas anteriores instalamos todo lo necesario para comenzar a programar en Android, tanto en Windows (aquí) como en Ubuntu (aquí). En este tema vamos a comentar los aspectos fundamentales de nuestra herramienta de programación, en este caso Eclipse, comenzando por nuestro primer proyecto.
Para comenzar un proyecto tenemos que abrir Eclipse e irnos a File-New-Other y seleccionaremos Android Application Project


martes, 10 de diciembre de 2013

Como instalar IIS Server en Windows 2003 Server sin el CD

Esta mañana me he topado con un problema, he tenido que instalar IIS en un Servidor con Windows 2003 Server 64 bits y no tenía el CD.
Tras Googlear un rato he encontrado esto y por ahora me está funcionando:
http://www.microsoft.com/web/downloads/platform.aspx
Te bajas el instalador y te pregunta por todo aquello que quieres instalar: Visual Studio Express, SQL Server Express, PHP, IIS Express, etc.

Espero que os sirva y si os funciona compartir sin miedo!

viernes, 6 de diciembre de 2013

Capítulo 1. Instalación del entorno de desarrollo de Android en Ubuntu (IV)

Accesos rápidos:
Una vez que hemos realizado la instalación de todo el entorno de desarrollo en Windows, vamos a realizar la instalación en Ubuntu. La instalación es similar a la de Windows, tenemos que instalar los mismos componentes. Estos son:
  • SDK de Java
  • SDK de Android
  • Entorno gráfico de programación: Eclipse
  • Plugin para Eclipse.
Los pasos para la instalación son casi los mismos pero de forma un poco distinta :-),  lo vimos en el post anterior (aquí). Lo primero que vamos a instalar es Java, concretamente el OpenJDK. Para ello sudo apt-get install openjdk-7-jdk desde una consola. Si todo va de forma correcta podemos y veremos que se nos ha instalado la versión 1.7.09 tal y como muestra la imagen siguiente:

sábado, 30 de noviembre de 2013

Capítulo 1. Instalación del entorno de desarrollo de Android en Windows (III)

Accesos rápidos:

Como hemos comentado en el post anterior de este capítulo (aquí) vamos a comenzar a explicar como se instala el entorno de desarrollo para Android, tanto en Windows como en Linux, comenzando con Windows. 
Para poder programar Android con Windown necesitamos instalar los siguientes componentes:
  • SDK de Java
  • SDK de Android 
  •  Entorno gráfico de programación: Eclipse
  • Plugin de Eclipse para programar Android

miércoles, 27 de noviembre de 2013

Capítulo 1. El SDK de Android (II)


Accesos rápidos:
En el post anterior (aquí) hicimos una primera aproximación sobre la arquitectura de Android, repasando los principales componentes que forman el sistema operativo. Ahora vamos a dedicar este post a comenzar la explicación del entorno de desarrollo para poder genera nuestras propias aplicaciones. Todas las herramientas necesarias para programar Android son de libre distribución, comenzando por el SDK(Software Develpment Kit) y terminando por la herramienta de desarrollo o IDE (Integrated Development Enviroment). Dentro del SDK tenemos el núcleo y las librerías Android. A estas librerías las llamaremos desde nuestras aplicaciones que tenemos que desarrollar en Java, pero no es Java exactamente sino que se emplean muchas librerías y clases nativas de Java que son extendidas mediante otras librerías propias de Android. Por lo tanto si los lectores de este curso tienen experiencia en el desarrollo de aplicaciones en Java les resultará fácil aprender sobre su desarrollo. La documentación sobre el SDK de Android se puede consultar en este enlace (aquí).
Junto con el SDK tenemos que emplear un IDE que nos dará el soporte para crear las aplicaciones mediante herramientas gráficas. Existen múltiples IDEs para crear aplicaciones Android, entre ellos los más empleados son Eclipse, Netbeans o el Android Studio. Los tres son herramientas de libre distribución y pueden ser descargadas y empleadas por cualquiera. Eclipse y Netbeans son empleados para programar en múltiples lenguajes, por lo que mediante plugin o complementos se pueden emplear para programar Android. Concretamente para programar Android en Eclipse se tiene que instalar el ADT (Android Develpment Tools). Por el contrario Android Studio es una herramienta que nace para emplearse en la programación de Android a partir de otro IDE llamado IntelliJ.
En los siguientes puntos del capítulo vamos a explicar como instalar el SDK y Eclipse con el ADT para el desarrollo de aplicaciones Android tanto en Windows como en Ubuntu con el fin de que los lectores del curso decidan que sistema operativo desea emplear en su equipo de desarrollo.
LIBRO RECOMENDADO PARA APRENDER ANDROID

Uno de los libros fundamientales y que recomiendo para aprender Android y llegar a hacer aplicaciones profesionales es: Android 2 Application Developement de Reto Meier




sábado, 23 de noviembre de 2013

Capitulo 1. Arquitectura Android (I)

Si entramos a analizar el sistema operativo Android, se trata de un entorno de aplicaciones móviles desarrollado a partir de un kernel de Linux destinado para ser utilizado en plataformas móviles. Pero aunque se trata de un núcleo de Linux y por lo tanto se encuentra desarrollado en C/C++, las aplicaciones para Android se desarrollan en Java junto con XML para la definición de las interfaces.

viernes, 22 de noviembre de 2013

Oracle: ¿En qué tabla se encuentran estos campos?

Esta semana he tenido que buscar dentro de un gran base de datos oracle unas columnas que no conocía en que tabla se encontraban. Para ello podemos usar la siguiente instrucción:
select table_name from all_tab_columns where column_name='columna_que_buscamos'

Espero que os sirva ;-)

miércoles, 30 de octubre de 2013

PostgreSQL: como realizar un insert con UUID

Si tenemos que realizar un insert en una tabla cuyo id viene determinado por el tipo UUID tenemos que hacer uso de la función uuid_generate_v4(). Pero para ello tenemos que usar antes la expresión CREATE EXTENSION "uuid-ossp";. Vamos por partes, supongamos que nuestra tabla la hemos creado de la siguiente forma:
CREATE TABLE permiso
(
  id uuid NOT NULL,
  opcion character varying(255),
  control character varying(255),
  CONSTRAINT permiso_pkey PRIMARY KEY (id)
)
Para introducir un nuevo registro en la tabla tenemos que ejecutar lo siguiente:
CREATE EXTENSION "uuid-ossp";
insert into permiso (id, opcion,control) values(uuid_generate_v4(), 'empleado', 'ver');
Y ya podemos ver nuestro nuevo registro en la tabla:


Si os gustado/servido, que no te de miedo difundir a destajo ;-)

martes, 29 de octubre de 2013

.NET. RadioButton, como implementar y guardar en base de datos

Cuando trabajamos con RadioButton en .NET, no existe un control al que le digamos que queremos, por ejemplo, 4 opciones y que solamente se puede seleccionar una, sino que tenemos que arrastrar cuatro componentes del tipo RadioButton a nuestro formulario y agruparlos mediante un componente del tipo GroupBox o Panel. Símplemente es arrastrarnos este componente al formulario y arrastrar dentro del mismo los RadioButton. Ya tendremos así el comportamiento que deseamos. Algo así como os muestro en la imagen siguiente:
En este caso los tengo agrupados en un Panel. Este componente no es visible al usuario de forma que el marco no es visible en la interfaz. Con este gesto ya solamente puede seleecionar uno de los componentes del RadioButton. Ahora, a la hora de almacenarlos, si tenemos una clase Usuario con una propiedad del tipo bool llamada Funcionario, podemos hacer algo así:

if (rbFuncionario.Checked){
   empleado.Funcionario = true;

}
else {
    empleado.Funcionario = false;

}
Y ya tenemos nuestra propiedad inicializada. Recuerda que puedes consultar un listado con las entradas relacionadas con .NET en este enlace.

lunes, 28 de octubre de 2013

SEO en el título. 7 opiniones de 7 grandes expertos de SEO

Esta tarde he pensado en si estaba eligiendo bien el título para los post con el fun de tener buen SEO. ¿Y qué hace una persona como yo que no tiene ni idea de SEO ante esa pregunta? Pues intentar aprender. Entonces me ido a por el libro de @sicodeandres que tengo en casa y que podéis comprar en Amazon aquí, luego he buscado en las que conozco como http://www.vivirdelared.com/ o http://www.marketingguerrilla.es/ y luego he hecho una búsqueda en Google limitando a páginas con un año de antigüedad como máximo.
  • Según Sico de Andrés en su libro: pongase en lugar de su potencial cliente e intente crear un título que le sirva de reclamo en relación a lo que ofrece. El título debe de atraer al usuario con frases que le inciten a visitarle pero no confundirle con algo que luego no van a encontrar. La recomendación de los buscadores a la hora de crear los títulos es que no sobrepasen 170 caracteres. Debe intentar que el usuario lea todo el título, sin frases cortadas ni puntos suspensivos. Intente situar su termino clave principal lo más a la izquierda posible.

How to ... Cómo crear un formulario de autenticación en .NET

Continuamos con la serie de entradas relacionadas con .NET. (Puedes ver un resumen de todas las entradas relacionadas con .NET aquí). En la última entrada hicimos una SlashScreen o lo que es lo mismo, mostramos un mensaje de bienvenida mientras que se carga nuestra aplicación (podemos ver esta entrada aquí). Una vez que se muestra este mesaje vamos a mostrar un formulario donde recoger el login y password. Ese formulario será algo así:
A este formulario lo vamos a llamar Autenticacion.cs y si recordamos el fichero program.cs, será de la siguiente forma:

viernes, 25 de octubre de 2013

How to... Como crear una pantalla de carga de nuestro proyecto en .NET, SplashScreen

Continuamos con .NET en el blog, recuerda que puedes ver una lista completa de las entradas relacionadas con .NET aquí.
En este post vamos a crear una pantalla de inicio de nuestra aplicación que vamos a mostrar antes de que arranque nuestro proyecto. Esto servirá para mostrar un mensaje mientras se abre nuestra aplicación y así darle una apariencia profesional a nuestro desarrollo. Para ello lo primero que vamos a hacer es crearnos un nuevo proyecto, en mi caso lo llamaré EjemploSplash.

En el Form principal del proyecto he puesto un label con el texto Formulario Principal para que quede identificado solamente. 

jueves, 24 de octubre de 2013

Como implementar la relación one to one con NHibernate

Seguimos a la carga con NHibernate y .NET. Podéis encontrar más apuntes sobre NHibernate aquí. Ahora toca como implementar una relación del tipo one to one para, en mi caso, mapear la tabla de empleados con la de contraseñas. A mi particularmente me gusta separar estas tablas, para no tener tablas muy grandes y para separar los datos del usuario de los datos de acceso. Este sistema permite mayor flexibilidad para poder facilitar el acceso a nuestra aplicación a otro tipo de entidades como por ejemplo a clientes o proveedores. Estos  que tenemos dados de alta en otra tabla y se puedan loguear teniendo que hacer no muchas modificaciones. El esquema que vamos a implementar es el siguiente:

Como hemos dicho, si por ejemplo tenemos otra tabla con los clientes y queremos darles acceso a nuestra aplicación solamente tendremos que añadirle una columna con el usuario_id en la tabla clientes y la relación con la tabla usuario.
Partimos de que tenemos las tablas creadas y las relaciones correctamente implementadas apra centrarnos en los ficheros que necesitamos para crear estas clases en .NET. Si nos interesa, podemos hacer que NHibernate nos cree las tablas por nosotros como mostramos en esta entrada. El fichero Empleado.cs será tal y como mostramos a continuación:
public class Empleado : Entity
    {      
        public virtual string Nombre { get; set; }
        public virtual string Apellidos { get; set; }
        public virtual string Extension { get; set; }
        public virtual string Telefono { get; set; }
        public virtual string Email { get; set; }
        public virtual Usuario Usuario_id { get; set; }
    }
Y el fichero Usuario.cs será así:
    public class Usuario : Entity
    {
        public virtual string Loggin { get; set; }
        public virtual string Password { get; set; }
    }
Podemos ver que en la clase Empleado tiene un atributo que es un usuario donde almacenaremos el Id del objeto Usuario. Además podemos ver que ambas clases extiendes de otra llamada Entity. En la clase Entity es donde defino el Id, la versión y otras características necesarias. Esto lo hago siguiendo las recomendaciones de este libro NHibernate 3.0 Cookbook. Los ficheros hbm.xml que nos mapeará los objetos con la base de datos y donde implementaremos las relacciones serán los siguientes. Primero el Empleado.hbm.xml:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
    assembly="OtraPrueba"
    namespace="OtraPrueba">
  <class name="Empleado">
    <id name="Id">
      <generator class="guid.comb" />
    </id>
    <version name="Version" />
    <property name="Nombre" not-null="true" />
    <property name="Apellidos" not-null="true" />
    <property name="Extension" not-null="true" />
    <property name="Telefono" not-null="true" />
    <property name="Email" not-null="true" />
    <many-to-one name="Usuario_id"        unique="true"     column="Usuario_id"/>
   
  </class>
</hibernate-mapping>
Y ahora el fichero Usuario.hbm.xml:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
    assembly="OtraPrueba"
    namespace="OtraPrueba">
  <class name="Usuario">
    <id name="Id">
      <generator class="guid.comb" />
    </id>
    <version name="Version" />
    <property name="Loggin" not-null="true" />
    <property name="Password" not-null="true" />

<one-to-one name="Empleado"        class="Empleado"/>

  </class>
</hibernate-mapping>
Podemos ver en el fichero Empleado.hbm.xml como se implementa la relación one to one y donde le indicamos la clase Usuario y el nombre de la columna, en nuestro clase Usuario_id. Ya podemos entonces hacer los siguiente:
Usuario usuario = new Usuario();
usuario.Loggin = txtLogin.Text.ToString();
usuario.Password = txtPassword.Text.ToString();


Empleado empleado = new Empleado();
empleado.Nombre = txtNombre.Text.ToString();
empleado.Apellidos = txtApellidos.Text.ToString();
empleado.Extension = txtExtension.Text.ToString();
empleado.Email= txtEmailText.ToString();
empleado.Telefono = txtTelefono.Text.ToString();
empleado.Usuario_id = usuario;


var nhConfig = new Configuration().Configure();
var sessionFactory = nhConfig.BuildSessionFactory();

var session = sessionFactory.OpenSession();
var tx = session.BeginTransaction();


session.Save(usuario);
session.Save(empleado);

tx.Commit();
Iré posteando como implementar el resto de relaciones a medida que tenga que ir empleándolas.
Espero que os sirva y si es así, compartir y difundir! No os de miedo usar los comentarios si tenéis algún problema o comentario que hacer

miércoles, 23 de octubre de 2013

NHibernate crea las bases de datos automáticamente

Si eres un lector habitual del blog sabrás que tengo algunas entradas relacionadas con .NET y NHibernate. Las puedes consultar aquí todas enlazadas. Pues relacionado con este tema, hoy he descubierto que NHibernate es capaz de crear las tablas por ti, sin que tengas que crear las tablas ni relaciones ni nada por el estilo previamente al proyecto. Una vez que tienes tus clases y sus correspondientes archivos de mapeo hbm.xml junto con el archivo hibernate.cfg.xml, mediante las siguientes líneas en el Main del punto de entrada de tu aplicación puedes crear las tablas y sus relaciones automáticamente:
var nhConfig = new Configuration().Configure();
var sessionFactory = nhConfig.BuildSessionFactory();
var schema = new SchemaExport(nhConfig);
schema.Create(false, true);
Esto se puede lograr gracias a la herramienta hbm2ddl y en el ejemplo que pongo anteriormente se crean todas las tablas relacionadas con el proyecto, pero también podemos usar otras expresiones como SchemaUpdate para que solamente se creen las modificaciones en las tablas. 
Si os sirve, difundir sin miedo por favor y si hay alguna duda o problema, no dudes en emplear los comentarios.

jueves, 10 de octubre de 2013

How to... Como ampliar el tamaño de una partición en una instancia de Amazon con CentOS

Si habéis leido la entrada sobre como ampliar el volumen de una instancia en Amazon que escribí hace unos días (aquí) es posible que lo hayáis probado con una instancia con Plesk tal y como escribí también (aquí). Si lo probais, comprobaréis que en este caso no funciona del todo bien y voy a intentar explicar el por qué.
Tenemos una instancia de Amazon con Plesk y CentOS con un volumen de 100 Gb tal y como mostramos en la imagen siguiente:


Pero si hacemos un df -h de nuestra instancia veremos que solamente tenemos disponibles 10 Gb de esos 100.


miércoles, 9 de octubre de 2013

How to ... Como instalar y configurar una instancia de Amazon AWS con Plesk

Por circunstancias del trabajo me toca hacer unas pruebas con Parallels Plesk y necesito poner en marcha una instancia de Amazon con Plesk para probar unas configuraciones que necesitamos modificar y validar con un cliente. Es por ello que he estado esta semana familiarizándome con AWS y sus características. Puedes ver las entradas de este blog relacionadas con AWS en el siguiente enlace (aquí).
Para los que no sepáis que es Plesk, se trata de una aplicación muy extendida en el mundo del hosting para gestionar servidores, tanto propios como de resellers. Mediante una interfaz gráfica vía web permite gestionar multitud de opciones como dominios, DNS, correo, hosting, etc, así como automatizar tareas. No vamos a hacer una explicación profunda en este post sobre Plesk, sino vamos a ponerlo en marcha mediante una instancia de Amazon del AWS Marketplace. De hecho como solamente tengo que hacer unas pruebas voy a emplear esta instancia (esta) con una licencia de evaluación para 14 días que conseguiremos posteriormente. 

martes, 8 de octubre de 2013

How to... Como cambiar el Volume de nuestra instancia por uno superior

Ya llevamos algunas entradas del blog hablando sobre Amazon. Primero creamos un servidor de manera gratuita con Ubuntu Server (aquí), luego accedimos a él mediante SSH en Windows (aquí) y luego le dimos una IP estática mediante Elastic IP (aquí).
Ahora vamos a comentar y aprender algo sobre como se almacena la información en las instancias de Amazon. Si recordamos cuando creamos la instancia, hemos creado un disco duro de 8 Gb que podemos ver en Volumes. 


How to ... Como tener IP estática en Amazon

En las dos entradas anteriores en las que hablábamos de Amazon ya teníamos instalado un servidor Ubuntu Server 12.04 de manera gratuita (aquí) y además teníamos acceso al mismo por ssh mediante Putty (aquí). Ahora vamos a seguir configurando nuestro servidor para poder tener en él lo que deseemos, un blog con wordpress, un servidor de aplicaciones, etc. 
Una de las primeras tareas que debemos realizar es asignarle una IP estática ya que de lo contrario la IP de conexión cada vez que paramos y arrancamos la instancia nos cambiará. Podemos comprobar como sucede esto deteniendo nuesta instancia y volviéndola a arrancar.
NOTA: los parámetros de conexión los vemos en Actions de la instacia, en Connect:


lunes, 7 de octubre de 2013

How to ... Como acceder a nuestra instancia de Amazon desde Windows

En el post anterior (aquí) vimos como crear una Micro Instancia de forma gratuita a través de Amazon. Pero una vez que hemos creado la instancia, ¿ahora qué? Lo primero que tenemos que hacer es poder acceder a ella. En este post voy a explicar como acceder a nuestra instancia desde Windows usando Putty.
La primera vez que accedemos a nuestra intancia tenemos que usar la clave privada que nos creamos anterioremente, aunque para acceder con el Putty tenemos que realizar unos pequeños ajustes. Si recordamos, la clave que nos creamos era del tipo .pem. Pues bien, lo primero que tenemos que hacer es cambiar nuestra clave de tipo .pem a tipo .ppk. Para ello tenemos que descargarnos PuttyGen de la misma página que descargamos Putty. Una vez que lo hemos hecho, lo arrancamos y veremos una pantalla como la que mostramos a continuación

How to... Como tener un servidor dedicado en Amazon de forma gratuita

Amazon no es solo una tienda que opera en Internet, es también una de las empresas de Hosting más afamadas del mundo, con multiples servicios que nos permiten desde alojar un sencillo blog con una instancia de Linux y Wordpress hasta procesos y plataformas de tamaño ingente con multitud de servicios y procesos tipo Pinterest, Reddit, etc tal y como ellos mismos anuncian en su web. La parte de Amazon que se encarga de ello se llama Amazon Web Service y se puede encontrar desde http://aws.amazon.com/es/.
Si bien tienen múltiples servicios con millones de configuraciones posibles, es un poco más complejo de utilizar que el resto de servicios de Hosting tipo OVH, Arsys, etc. Es por ello que ofrecen un servicio de microinstancias gratuito para aprender sobre su funcionamiento y familiarizarnos con su entorno y, en el caso de que te decidas a usarlo, pasar a un plan de pago. Hay un año de uso del servicio de forma gratuita. En este post vamos a explicar el funcionamiento de la capa gratuita de Amazon llamadas microinstancias y del que podemos encontrar información en el siguiente enlace aquí. Lo primero que tenemos que realizar es la creación de una cuenta, para ello vamos al enlace anterior y tenemos que ir a comenzar de forma gratuita:

Como cambiar blogspot a un dominio propio

En esta entrada voy a explicar como cambiar nuestro blog de una dirección blogspot a un dominio propio. Vamos a partir de la base de que tenemos nuestro dominio comprado y acceso al panel de gestión del mismo. Para ello tenemos que ir a Configuración -- Añadir un dominio personalizado.


viernes, 4 de octubre de 2013

Cambiar las fuentes de blogger: Google Fonts. Gracias a @oloman

Estos días ando de cambios en el blog, intentando cambiar la plantilla y dejar una apariencia un poco más elegante. Una de las cosas que he aprendido gracias al crack de @oloman es cambiar las fuentes del blog. En blogger no solo se pueden usar las fuentes por defecto sino que están accesibles todas las de Google Fonts. Hay unas 629 fuentes disponibles a fecha de hoy y en mi caso voy a usar Oswald para cambiar los títulos de las entradas.
 Lo primero que vamos a hacer es darnos un paseo por las fuentes disponibles o buscar directament la que deseamos:

martes, 1 de octubre de 2013

De profesión "mal-gestor acomodado" via @adelgado y @euribor_com_es

No suelo escribir sobre estos temas en el blog, intento que solamente sea un blog de tecnología, pero esta tarde no lo he podido resistir. Tras leer la entrada de hoy de uno de mis blog de cabecera www.euribor.com.es (aquí) y la noticia que colgaba en su twitter uno de los mejores periodistas relacionados con la tecnología en habla hispana @adelgado.

En el tuit se puede leer la noticia de http://www.zoomnews.es/ sobre como está preparando el Ministro Soria su salida del Ministerio y como está poniendo en el organismo Red.es a personas de su confianza para ello. 
Hecha esta introducción solo me queda un sentimiento, el de como se puede tener la cara tan dura. Luego se les oye pidiendo sacrificios, diciendo que hemos vivido por encima de nuestras posibilidad, que se acabo el  café para todos y otros muchos ejemplos que podemos encontrar sobre lo mal que lo hemos hecho y que por ello estamos donde estamos. 

Como poner analytics en Blogger

Hace un par de días que cambié la plantilla del blog y se me perdió la conexión con Analytics. Para volver a establecerlo en Blogger es muy sencillo. Primero tenemos que obtener el código de seguimiento en Analytics, para ello tenemos que ir a Administración - Información de seguimiento:


viernes, 6 de septiembre de 2013

Como consumir servicios web con Tapestry5 y JAXB

En el post anterior aquí (aquí) vimos como se creaba un servicio web que nos devolvía en XML las direcciones que tenemos almacenadas. Ahora vamos a consumir el servicio web mediante un DefaultHttpClient y un HttpGet que nos traerán la información. Una vez realizado este paso tenemos que usar de nuevo el Unmarshall para extraer un objeto DireccionResponse y tendremos así en su interior una lista con las direcciones que tenemos en base de datos. El código que tenemos que emplear es el siguiente:

Como crear servicios web con Tapestry5 y JAXB


En las anteriores entradas del blog que hablábamos de JAXB hemos mostrado como realizar las operaciones de marshalling y unmarshalling, es decir como obtener archivos XML a partir de una serie de objetos y como obtener una colección de objetos a partir de ficheros XML. Podéis encontrar el primer post de la serie (aquí)
Ahora vamos a implementar un servicioWeb en Tapestry usando JAXB y las clases que nos creamos en los post anteriores. Primero vamos a crear un servicio web que nos devuelva todas las direcciones que tenemos almacenadas en la base de datos. Para ello vamos a usar las clases Direccion.java y DireccionResponse.java. Si recordamos, Direccion.java mapeaba mediante Hibernate la tabla direccion de PostgreSQL mientras que DireccionResponse.java nos permitía crearnos un único objeto que contenía una lista de objetos Direccion de modo que al marshall de JAXB solamente le pasábamos un objeto. Estas dos clases las tenemos en la carpeta entities de nuestro proyecto y su contenido es el siguiente. Primero Direccion.java:

JAXB. Realizar el mapeo a XML con relaciones cruzadas. El error com.sun.istack.internal.SAXException2: A cycle is detected in the object graph. This will cause infinitely deep XML

Si habéis seguido los ejemplos anteriores sobre JAXB (aquí, aquí, aquí y aquí), tenemos creadas una clase Cliente y una clase Direccion relacionadas entre si, donde uno de los atributos de la clase Direccion es un Cliente, de modo que podemos tener identificadas las múltiples direcciones de un cliente almacenadas en base de datos. Además creamos XML a partir de una lista de direcciones y creamos una lista de objetos Direccion mediante un fichero XML empleando en ambos casos una clase intermedia que llamamos DireccionResponse que nos permitía pasar al Marshall un solo objeto aunque este tenga en su interior una lista.

JAXB. Realizando XML de una Lista de objetos

Si hemos seguido los ejemplos anteriores  de como obtener ficheros XML a partir de objetos y como obtener objetos a partir de ficheros XML que vimos en los dos post anteriores (aquí y aquí), ya conocemos un poco sobre el Marshalling y Unmarshalling de este tipo de componentes.
Ahora vamos a ir complicando un poco el tema. Vamos a crearnos una tabla que se llama direcciones y que está relacionada con la tabla clientes, de modo que podemos guardar varias direcciones asociadas a un mismo cliente. Nos crearemos por lo tanto la siguiente tabla en PostgreSQL junto con su relación:

JAXB. Obtener una lista de objetos a partir de un XML

Ya vimos en el post anterior (aquí) como se obtiene un XML de una lista de objetos, ahora vamos a realizar el paso inverso, vamos a obtener una lista de objetos a partir de un fichero XML. Pare ello usaremos el fichero salidaDirecciones.xml que creamos en el ejemplo anterior.
Para ello tenemos que volver a emplear la clase DireccionResponse ya que obtendremos un objeto de esta clase y tendremos entonces que acceder a la lista que contiene para poder crearnos los objetos que deseamos. 
El código que necesitamos es el siguiente:

JAXB. Introducción. Crear un objeto a partir de un XML en Java

Como vimos en la entrada anterior (aquí), podemos crear un fichero con el contenido en XML de un objeto. Ahora vamos a realizar la operación contraria. Partimos de un fichero que vamos a leer con el contenido en XML y vamos a crearnos un objeto.

El fichero con el xml del que partimos es el mismo que en la entrada anterior y el siguiente:

JAXB. Introducción. Crear un archivo XML a partir de un objeto en Java

JAXB (Java Architecture for XML Binding) es un paquete del estándar Java que permite realizar mapeos entre clases Java y ficheros XML. Es bastante empleado, por ejemplo, a la hora de realizar servicios web como veremos en entradas posteriores. Como me toca empollarme este paquete para realizar una implementación vamos a ir poniendo ejemplos que me permita documentar lo aprendido y a la misma vez sirvan a la comunidad para aprender más rápido. 
Como habitualmente trabajo contra PostgreSQL, iré poniendo las sentencias para crear las tablas que posteriormente mapearemos con clases Java para terminar viendo como se implementan las anotaciones con JAXB y posteriormente lo que se conoce como Marshalling y unMarshalling, es decir, de objetos Java a XML y de ficheros con XML a objetos Java.  Además emplearé Annotations e Hibernate, herramientas ampliamente empleadas y que seguramente serán de sobra conocidas.

miércoles, 28 de agosto de 2013

Como solucionar el error javax.xml.bind.MarshalException - with linked exception: [com.sun.istack.internal.SAXException2: A cycle is detected in the object graph. This will cause infinitely deep XML

Si intentas montar un servicio Web y empleas JAXB para hacer el serializado de objetos hacia XML y viceversa, puedes encontrar un error del tipo "A cycle is detected in the object graph" como indicamos en el título de la entrada.

Este error ocurre porque tienes una relacción en ambos sentidos entre dos clases. Es decir, supongamos que tienes una clase Persona y otra que se llama Equipo con una relación como sigue:

lunes, 8 de julio de 2013

Como crear ficheros .exe de aplicación en Matlab.

En una entrada anterior creamos una interfaz gráfica (GUI) de usuario en Matlab (aquí). Si recordamos creamos una calculadora que nos sumaba dos campos que el usuario introduce en dos EditText. Ahora vamos a crearnos un archivo .exe que nos permita usar nuestra fantástica calculadora en un ordenador sin tener Matlab instalado. Lo primero que tenemos que usar es el comando deploytool para abrir el asistente de creación del .exe:


Como crear interfaces gráficas de usuario (GUI) con Matlab

Hace unas semanas que no he podido escribir nada en el blog por mil lios, incluyendo un hijo, mucho trabajo, unso cursos que estoy impartiendo, etc. Pero esta semana he tenido que hacer una interfaz gráfica de usuario con Matlab para una aplicación de una compañera y quería compartirlo con vosotros. Para ello vamos a implementar una pequeña calculadora que nos sirva como ejemplo de como crear GUI.
Lo primero es seleccionar el workspace de trabajo y luego hacemos click en File-New-GUI tal y como mostramos en la imagen siguiente:


lunes, 3 de junio de 2013

How to... Como cargar ficheros de texto grandes en PostgreSQL

Esta semana nos hemos tropezado con un problema de rendimiento de base de datos. Hemos intentado introducir en PostgreSQL un fichero con 6.500.000 de filas leyendo el contenido de cada una de las filas y realizando a continuación un insert para cada una de ellas. El proceso consistía en crear un objeto con la línea leida y mediante Criteria realizar la inserción en la base de datos y tardaba algo así como una semana. Tras buscar con Google y sobre todo en Stackoverflow encontramos que PosgreSQL tiene un comando para realizar estas tareas de forma mucho más efectiva llamado COPY
Para conocer mejor como funciona, pondremos un ejemplo. Supongamos que tenemos en fichero_datos tres columnas separadas por ; que queremos introducir en "tabla" en las columnas value1, value2 y value3. Con el siguiente comando podemos hacer la inserción de forma rápida.
copy tabla (value1,value2,value3) from 'ruta_fichero/fichero_datos.txt' with delimiter ';';
Además se puede hacer también la operación inversa, desde una tabla exportar los valores a un fichero separando cada una de las columnas por un delimitador que especifiquemos.
¿Has tenido algún problema similar?¿Conocías el comando COPY?

miércoles, 29 de mayo de 2013

Ayudas Acción Estratégica de Economía y Sociedad Digital - Antiguo Plan Avanza

Esta mañana  ha explicado Ana Pérez Sánchez (Coordinadora de Servicios Públicos Digitales de la Subdirección General de Fomento de la Sociedad de la Información del Minetur) en las instalaciones del Info el funcionamiento de las ayudas de la Acción Estratégica Economía y Sociedad Digital (AEESD), el antiguo Plan Avanza.
Os hago a continuación un pequeño resumen con las características más importantes de esta ayuda para proyectos de I+D este año:
  • Proyectos con un importe mínimo de 300.000 €
  • La intensidad de la ayuda es como máximo de 20% a fondo perdido (solamente si PYME)
  • El resto de las partidas financiables (el 80%) en préstamo con interés del 0.5%
  • El préstamo tiene 2 años de carencia y se amortiza en los 3 años siguientes.
  • A realizar como mucho en 3 años: 2013, 2014 y 2015
  • Los proyectos no pueden empezar hasta que se realizar la solicitud
  • Se financiarán solamente proyectos que estén cercanos al mercado, es decir, que se puedan comercializar rápidamente.
  • El pago se producirá en 2 fases, 75% antes de fin de 2013 y 25% restante en 2014.
  • Importe máximo de las subcontrataciones el 50% de la ayuda
  • Se tienen que presentar electrónicamente mediante la EcoFirma del Minetur.
  • Las garantías que se tienen que presentar para poder recibir la ayuda son del 25% del total de la financiación recibida. Solamente se permite presentar garantías en forma de aval.
  • Un factor crítico a la hora de la evaluación de la propuesta es el impacto socioeconómico del proyecto. Básicamente se puede resumir en que la solución a obtener se encuentre cercana al mercado y con proyección internacional.
  • Se tiene que seleccionar solamente una línea de investigación de entre las siguientes: 1) Industrias del futuro. Sistemas y dispositivos electrónicos 2) Industrias del futuro. Infraestructuras de Internet del futuro. 3) Ciberseguridad 4) Confianza digital 5) Aplicaciones TIC orientadas a mejorar la competitividad de la PYME 6) Evolución de la administración electrónica 7) Soluciones TIC para la eficiencia energética 8) Habitabilidad y movilidad urbana 9) Aplicaciones y soluciones relacionadas con los contenidos digitales
  • Se cambia la forma de presentación de la ayuda. Este año se tiene que presentar antes del día 6 de Junio una primera versión que incluya el presupuesto global del proyecto, la idea básica, el problema técnico a resolver y la oportunidad existente en el mercado, una descripción de la solución propuesta, las tecnologías más significativas a utilizar, ventajas de la solución con respecto a las existentes y el impacto potencial de la solución en la empresa y el mercado. Además se deberá de aportar el currículum del investigador responsable
  • Una vez presentada la primera versión se producirá una entrevista con el investigador para resolver las posibles dudas del tribunal. Se producirá entonces una notificación sobre la segunda quincena de Julio y se tendrán 15 días para la redacción final de la memoria en el caso de que la resolución haya sido favorable.
  • La resolución definitiva se hará pública sobre la segunda quincena de Septiembre
  • Se valorará además la solvencia financiera de las empresas solicitantes, teniendo peso específico en la evaluación que los fondos propios de la ayuda sobrepasen el 25% de la ayuda recibida y el ratio de endeudamiento de la empresa.
En el siguiente enlace podéis encontrar la orden de bases (aquí) y en este otro la convocatoria (aquí) por si se desea ampliar la información. En el caso de que tengáis un proyecto en mente que queráis poner en marcha, puede ser un buen momento para ello. El plazo es muy corto, por lo que no dudes en ponerte en contacto si quieres que te echemos un cable.
Espero que os sirva!

martes, 14 de mayo de 2013

Como evitar un ConcurrentModificationException en Java

Esta mañana he tenido que lidiar con un error del tipo ConcurrentModificationException en una aplicación en Java. Esto sucede cuando se intenta borrar un elemento de una lista que se está iterando, como por ejemplo en el siguiente código:
List<String> myList = new ArrayList<String>();
myList.add("1");
myList.add("2");
myList.add("3");
myList.add("4");
myList.add("5");

Iterator<String> it = myList.iterator();
while(it.hasNext()){
   String value = it.next();
   System.out.println("List Value:"+value);
    if(value.equals("3")) myList.remove(value);
}
Mi caso no ha sido exactamente igual al que muestro aquí, este caso lo he sacado de la web donde encontré la solución a mi error y que os pondré más abajo. Como vemos estamos borrando un elemento de una lista a la misma vez que la iteramos. Esto es lo que nos provoca el pete ConcurrentModificationException ya que estamos accediendo a la lista con el iterator y a la misma vez borrando un elemento de la misma. 
Para solucionarlo tenemos que declararnos la lista de la siguiente forma:
List<String> myList = new CopyOnWriteArrayList<String>();
Ya no usamos un ArrayList sino CopyOnWriteArrayList. Esta clase hará que no veamos las modificaciones de nuestra lista hasta que no salgamos del bucle while y por lo tanto evitamos el error. 
Esta información la puedes encontrar también en aquí y aquí, estas fueron las fuentes que empleé para aprender.
Espero que os sirva!