Estadística simple con Spark

Hace unos 20 días lei un articulo titulado “Simple Data Analysis Using Spark” (no publico el enlace ya que el mismo desapareció de dzone de la zona de Big Data y el mismo blog ya no existe, corroborarlo buscando por Internet), lo interesante de este articulo es que el autor hacía cálculos de estadística simple, es decir, calculaba, media, máximo y mínimo, y fue casualidad que justo en ese momento acaba de leer acerca de las operaciones numéricas de los RDD, es esta la razón que me movió a querer hacer un ejercicio similar, con estadística simple pero quería hacerlo con una información que yo considerara valiosa.

Fue entonces que me decidí a buscar alguna fuente de open data española, ya que quería arrojar u obtener datos reales, o no se quizás quería sencillamente obtener algo significativo que se acercara a una tarea real, fue así que llegue al Portal de datos abiertos de la comunidad de Madrid y después de revisar el catalogo me decidí por el padrón municipal, un fichero csv de 22 MB.

He aquí el código:

Hay una cosa que quiero resaltar, Lo simple y corto del código en Scala, tanto para la definición de la clase Padron como en las transformaciones hechas en los RDD, ya Scala esta en mi lista de cosas por aprender porque se que con Java hubiese sido el doble de código.

Por último les dejo parte de la información obtenida, la lista ordenada de población por distrito:

BARAJAS: 46166
VICALVARO: 69709
MORATALAZ: 94785
VILLA DE VALLECAS: 101011
MONCLOA-ARAVACA: 116581
RETIRO: 118390
CENTRO: 131805
USERA: 133579
CHAMBERI: 137454
VILLAVERDE: 141457
CHAMARTIN: 142334
SALAMANCA: 143123
ARGANZUELA: 151061
TETUAN: 152142
SAN BLAS-CANILLEJAS: 153303
HORTALEZA: 176320
CIUDAD LINEAL: 212626
PUENTE DE VALLECAS: 227183
LATINA: 234842
FUENCARRAL-EL PARDO: 234883
CARABANCHEL: 242032

¿Te ha parecido interesante? ¿Qué le agregarías o quitarías al código?

Si quieres acceder al GitHub donde he colgado el código pincha aquí

Primer ejemplo con apache spark

Hace algunas semanas atrás que empezamos a trabajar con apache spark en el máster, brevemente les contare mis impresiones desde mi punto de vista como principiante.

Apache spark me gusto, ¿por qué? porque se puede programar en Scala (además de Python y Java),  la API de Scala lo simplifica mucho y la cantidad de código a teclear es (considerablemente) menor a la necesaria para hacer la misma tarea en Java, aunque aquí debo hacer un paréntesis, ya que con la entrada de Java 8 y las lambda expresión la cantidad de código será menor pero insisto la API de Scala a mi modo de ver lo hace mas sencillo.

Nos permite hacer operaciones con mucha data (quizás no Big Data, es decir no hablamos de TeraBytes) sin necesidad de usar Hadoop, me gustaría hacer hincapié en esto ya que muchos piensan que Big Data es Hadoop y NO, no es así, mi concepto de Big Data es un poco mas amplio y contempla mas cosas, aquí me refiero específicamente a la API MapReduce de Hadoop la cual es mas complicada de usar que la de Spark, no obstante si necesitamos trabajar con una cantidad de datos considerable que requiera del uso de HDFS, podemos desde Spark acceder a este sistema de archivo u algún otro como por ejemplo Amazon S3.

Por último decirles que Spark es mas rapido, esto se debe a su arquitectura, ya que este trabaja en memoria (todo en memoria si tiene la capacidad de cargar todos los datos por completo) y pues si llegamos a hacer varias tareas (lo que técnicamente sería reutilizar los RDD ya guardados en memoria) con los datos en memoria es cuando mas jugo se le sacará a Spark.

Sinceramente si alguien discrepa de mi o coincide me entusiasmaría mucho que comparta su opinión ya que todo este mundo que envuelve el Big Data me tiene super enganchado.

 Ahora bien vamos con los ejemplos, estas formaban parte de la primera tarea de Spark que tuvimos que realizar, y consiste en 2 ejemplos:

  1. Dado un fichero de texto en formato csv con información de medallistas olímpicos, obtener el numero de medallas por edad.
  2. Dado el mismo fichero de texto anterior, y un esquema de puntuación por tipo de medalla obtener un ranking de medallistas olímpicos.

He aqui el código:

 

Una última cosa que es bueno saber para aquellos que como yo están empezando con Spark y sus RDD, Los RDD tienen 2 tipos de operaciones: transformaciones y acciones, las primeras son operaciones que como resultado nos devuelven otro RDD y las acciones son aquellas que hacen “algo” sobre los datos como por ejemplo el foreach de mi código,  utilizado para mostrar por pantalla los valores finales, además los RDD (como hasta ahora lo entiendo) son las instrucciones a realizar sobre los datos, mas no almacenan la información, además estás instrucciones no se realizan de inmediato, sino que al contrario estos tienen un funcionamiento lazy, esto significa que se ejecutan cada vez que se realiza una operación de tipo acción.

Otra sugerencia, no duden en cacharrear con la consola de spark, de hecho el primer ejercicio lo llegue a hacer por la consola (sin los JavaBeans) y el practicar por aquí si que ayuda a conocer los operaciones a utilizar sobre los RDD.

Aquellos interesados en descargar el código, les dejo la dirección del ejercicio en mi repositorio github

El esqueleto del ejercicio esta en el repositorio del que fue nuestro profesor y pueden acceder a el haciendo clic aquí.

Cualquier material, idea o contenido que quieres compartir, no dudes en hacerlo, ya que bien recibido será. Ahora si para cerrar les dejo el enlace a un libro que hasta ahora me esta pareciendo muy bueno para aprender Spark (además con ejemplos elaborados en Java, Scala y Python).

Sabias que el uso de la annotation override nos advierte de errores en el código

Seguramente muchos de ustedes se habrán preguntado ¿que hace? o ¿para qué sirve esa @Override que nos coloca automáticamente el IDE al momento de implementar una interfaz? ¿Tendrá algún beneficio?.

Bueno para aquellos con esa interrogante les traigo la respuesta.

Pues si, si nos da un beneficio  cuando codificamos y consiste en advertirnos de posibles errores de lógica o compilación en los siguientes casos:

  • Cuando no estemos sobrescribiendo o implementando ningún método de la interfaz o superclase.
  • Cuando nos hemos equivocado en la firma del método a sobrescribir.

 Es por estos beneficios que deberíamos asumirlo (sobretodo aquellos que venimos de la vieja escuela de Java 1.1, 1.2 o 1.4) como una convención al momento de programar. Ahora bien vayamos a un ejemplo para ver de lo que estamos hablando.

EL siguiente código consta de una super clase la cual vamos a extenderla pero a propósito de este ejemplo sobrescribiremos erróneamente los métodos de la clase de tal forma que no coincidan en su firma con el original (el de la súper clase) o sencillamente no coincida el nombre del método, de tal forma de poder ver como al usar @Override, esta nos indica que hay algo mal, en nuestro código.

A continuación les dejo par de imágenes donde el IDE nos indica el error

IDE error al sobrescribir el método IDE error al sobrescribir el método

 

Como pudieron darse cuenta el Editor (en este caso eclipse), nos indica que hay un error en los métodos que estamos intentando sobrescribir.

Ya conocemos el significado de @Override y sus ventajas, ahora lo que resta es que hagamos uso de ella y lo asumamos como una buena practica de programación en Java.

Introducción a la clase Objects

Hace algunos meses atrás estudiando para la certificación de java 7, me entere de la existencia de la clase java.util.Objects, esta es una clase utilitaria compuesta en su totalidad de métodos estáticos que aunque lucen bastante simples, si que resultan de ayuda ahorrándonos algo de trabajo (tedioso), entre estos encontramos algunos para realizar comparaciones así como para el calculo del hash de un objeto, o también para evitar asignar null a objetos.

En este caso creo que no hay mejor forma que verlo en el código para que podamos apreciar su utilidad.

Si ejecutamos el main de esta clase obtendríamos el siguiente resultado

Además de los métodos utilizados existen un par más que son para calcular si dos (2) objetos son profundamente iguales y para realizar comparaciones.

¿Qué te ha parecido esta clase? ¿Ya la conocías? ¿La utilizas en tus desarrollos? y sino a que esperas.

Mi receta para aprobar la Oracle Certified Professional, Java SE 7 Programmer

Ayer presente el examen 1Z0-805 de Oracle para obtener la Oracle Certified Professional, Java SE 7 Programmer y con mucho orgullo (producto de muchas horas de estudio) puedo decirles que la he aprobado con 80%. Llevaba preparandome unos 8 meses, con alguno que otro descanso bien merecido en navidad y semana santa, pero en general fui constante y cada semana dedicaba al menos una (1) o dos (2) horas a hacer ejercicios y/o leer al respecto.

Debo admitir que aunque consideraba que habia repasado bastante, el examen fue mas dificil de lo que yo esperaba, pero como ya ven no es imposible. Los objetivos a evaluar en el examen en resumen son los siguientes:

  • Language Enhancements (Mejoras en el lenguaje), que no es más que el project coin: diamond operator (operador <>), try-with-resources, sentencia swith con variables tipo String, etc…
  • Design Pattern (Diseño de patrones): Comprensión del concepto de cohesión, asi como también de los patrones Factory,  Singleton, DAO, diferencia entre un objeto de negocio (Bussiness Object) y un objeto de transferencia de datos (Data Transfer Object o DTO) y Entender los conceptos de herencia, composición y encapsulamiento.
  • Database Applications with JDBC (Desarrollo de aplicaciones utilizando JDBC): Características y métodos de un ResultSet, conocer los distintos tipos de RowSet, poder crear una app de tipo CRUD (Create, Read, Update and Delete) utilando JDBC.
  • Concurrency (Concurrencia): manejo de entorno multihilos, el framework for/join, colecciones seguras para el manejo con hilos, entender los conceptos de starvation, deadlock, liveness.
  • Localization (Localización): Todo lo necesario para poder hacer una aplicación multidioma o como también se le dice, soporte i18n.
  • NIO 2: Conocer las nuevas clases y métodos para el manejo de archivos, tales como la clase Path, FileStore, FileSystem, entre muchas otras.

Ahora bien no perdamos mas tiempo y vayamos al grano ¿Cual es la receta?… Bueno al empezar a preparar esta certificación me tope con que habia un único libro enfocado en la aprobación de la certificación y me refiero a esos libros a los que nos tiene o tenia acostumbrados Kathy Sierra y este era el libro Oracle Certified Professional Java SE 7 Programmer Exams 1Z0-804 and 1Z0-805: A Comprehensive OCPJP 7 Certification Guide (Expert’s Voice in Java) que al revisar por internet los comentarios y opiniones de la gente con respecto al mismo lo que hicieron fue desanimarme a comprarlo asi que opte por yo mismo recabar mi material aunque esto me tomara mas tiempo para preparar la certificación, a continuación se los detallo:

  • The Well-Grounded Java Developer: Es un magnifico libro, en mi opinion digno a estar en la biblioteca de todo buen programador Java, por supuesto es un libro que yo denominaría de nivel intermedio, ya requiere conocimientos fundamentales en Java, pero toca desde cosas basicas del lenguaje (nuevas para Java 7) como el project coin hasta aspectos más avanzados como la concurrencia y el framework fork/join para el trabajo con hilos y otros lenguajes de la JVM tales como Groovy, Scala y Clojure. De este estudie project coin, NIO2 y concurrencia.
  • Java 7 New Features Cookbook: Este libro repasa con bastante detalle las novedades de NIO2, de hecho dedica 5 capítulos del libro a este tema, un libro a recomendar para aquellos que quizás sientan que están un poco desactualizados (digamos que se quedaron en Java 1.4 o Java 5) y quieren de una forma bastante light ir empapandose de las novedades del lenguaje, de este libro estudie los mismos objetivos que del libro anterior (project coin, NIO2 y concurrencia), realmente en mi opinión se complementan muy bien para estudiar.
  • Tutoriales Java de Oracle, específicamente internacionalización, JDBC, Concurrencia, además pueden descargarse en formatos para libro electrónico.
  • Java Practice Questions: Upgrade to Java SE 7 Programmer, este es un libro que consta unicamente de preguntas tipo certificación de todo los objetivos a evaluar en la certificación, por supuesto con sus respectivas respuestas y explicación, a mi este libro me vino muy bien para evaluarme una vez consideraba que ya había cubierto un objetivo especifico y así poder ver si tenia algún tema falto por cubrir.
  • Al final opte por comprar el paquete de whizlabs para actualización a Java 7, no puedo decir que me haya ido mal, porque me permitió hacer simulacros de examen pero si esperaba que tuviese mas preguntas (solo tiene 243) y que estuvieran clasificadas por objetivo/tema, ya que en algún momento tuve interés de solo evaluarme en un tema en especial y no pude.
  • Por ultimo encontre un simulacro de examen gratuito y que sinceramente esta muy bien que de paso se ejecuta mediante JNLP, la página en cuestión es Java Quiz Player.
  • NOTA: Es muy importante programar, programar y seguir programando, sinceramente no conozco otra forma de poder internalizar los conocimientos sobretodo cuando se trata de tantas clases y cada una de ellas con sus respectivos métodos, además de ser una especie de abogado del diablo y plantearse uno mismo interrogantes, intentar conocer en detalle cuando y/o por que un determinado método arroja una exception en particular. En este orden de ideas les diría por ejemplo, ¿Que sucede si a una sentencia switch le paso un String null? ¿Alguna vez han ejecutado un switch donde el case “default” sea el primero de la lista? y así sucesivamente.

No puedo negarles que estoy muy contento de hecho tenia como 3 años que no presentaba un examen de certificación, pero mas que por el resultado del examen, lo que me  contenta y que de hecho considero que es lo más importante de todo este proceso es que “HE APRENDIDO”, y eso haya o no un papel que lo avale es lo que mas me llena y es por eso que por ahora seguiré invitando a la gente a que lo intente ya que siempre todo lo que conlleva la preparación para presentar una certificación entre estudiar, plantearte interrogantes, programar, nos deja conocimiento y el saber, es PODER.

Otros enlaces de interés:

– Sitio Web en Amazon de Esteban Herrera, este ha publicado libros (de preguntas y respuestas) para los exámenes de certificación 1Z0-803, 1Z0-804 y 1Z0-805, este ultimo es el que les mencione arriba llamado Java Practice Questions: Upgrade to Java SE 7 Programmer.

– Página de enlace a los tutorales de preparación para las certificaciones de Oracle.

– Guia para el examen de certificación (la actualización) 1Z0-805 de Mikalai Zaikin, quien ya lleva un largo recorrido preparando guías de certificación para casi todas las certificaciones Java.

Entonces, quien se anima a preparar esta certificación o para aquellos que están haciéndolo, ¿qué tal les va en la preparación? ¿Añadirían algún otro recurso a la lista que les he detallado anteriormente?

Mejorando mi blog WordPress

Hace aproximadamente un mes, inicie esta mejora del blog, motivado en un principio por la ley de cookies española, como les conte en mi última entrada, aunque el paso definitivo que me empujo a llevar a cabo estas mejoras fue el darme cuenta que todas las entradas que incluían segmentos de código se veian mal, sin estilo, en fin,  sencillamente horribles, puedo decirles que me avergüenza ya que ni siquiera tengo una idea de cuanto tiempo llevaban las entradas en dicho estado. Profundizando un poco mas en el asunto creo que tendría alrededor de 2 años o mas sin buscar algún plugin novedoso o revisar algún tema nuevo, pero al menos me contenta decirles que estoy satisfecho con el tiempo dedicado, el resultado obtenido y compartirlo con ustedes.

Antes de empezar y para no alargarme mucho quiero aclarar que no soy un experto ni mucho menos, pero pienso que puede haber personas que al igual que yo no sabrían por donde empezar a la hora de buscar que plugins agregar a su blog WordPress, ni siquiera con que objetivo empezar a buscar e igualmente siempre da un poco de confianza tener una referencia de un plugin antes de descargarlo aunque este tenga 4 estrellas de rating.

Les detallo a continuación que plugins instale:

Plugin para adecuar el blog a la ley de cookies española.

akismetPara evitar el spam en los comentarios, instale Akismet, el cual es un servicio que en el caso de ser utilizado para una web personal es gratis aunque siempre te agradecerán cualquier donación que puedas aportarles, entre otras cosas además de quitarte el dolor de cabeza de los spam te aporta estadísticas al respecto. No dejes de instalarla no te arrepentiras te lo aseguro. Para mejorar aun más la gestión de los comentarios de mis entradas active el plugin SI CAPTCHA Anti-Spam el cual añade un captcha que el usuario ha de ingresar correctamente para poder añadir un comentario.

Con respecto al resaltado de código y su visualización, instale el plugin Crayon Sintax Highlighter, lo cual me sorprendió muy gratamente ya que al activarlo una vez desactivado  el resaltador de sintaxis que tenia previamente, ya se visualizaba el código con un look & feel fantástico, ya que el plugin le aplica un estilo a todo lo contenido dentro de etiquetas <pre></pre>, el único trabajo que tuve que realizar adicionalmente para añadir atributos a la etiqueta como por ejemplo

<pre class=”lang:java”> indicando que el código a mostrar es Java

crayon

Sin lugar ha dudas este plugin ha de estar en este momento en el top 3 de resaltadores de sintaxis, además de la gran cantidad de lenguajes que soporta entre los que puedo nombrarles, C/C++, Java, HTML/XML, CSS …

Para mejorar las funciones de SEO, añadí Google Analytics for WordPress, el cual esta considerado ahora mismo el número 1 en la materia.

yoast seo

Mucho cuidado con tener otro plugin de características similares instalado y activado, ya que puede interferir y dar error al intentar visitar el sitemap.xml de la página.

Para dar características de Social Media, instale Juiz Social Post Sharer, el cual permite compartir en las principales redes sociales y posee un estilo sobrio y sencillo como pueden ver a continuación en la siguiente imagen.

social media

Para aportar esta característica al blog existen muchas otras opciones, yo también estuve probando Social Media Feather, el cual esta muy bien ya que cubre las principales redes sociales y a su vez da la opción de seguir además de la de compartir, aunque yo me decante por la primera por razones de estilo.

Además de las antes mencionadas, añadí el plugin que hasta el momento estaba siendo considerado como el plugin mas popular, el Contact Form 7, este permite de una forma muy sencilla crear formularios de contacto, los cuales recibiríamos por correo electrónico, este es un plugin simple pero que hace muy bien su trabajo.

Era necesario que también llevara a cabo mejoras en cuanto a rendimiento y carga de paginas, sobretodo en estos tiempos donde la navegación a través de dispositivos móviles representa un factor importante y para eso instale W3 Total Cache, el cual además de crear una cache, mejora de forma considerable la velocidad de carga haciendo una compresión de las CSS y el código javascript del blog.

Para finalizar yo siempre me pregunte como hacían los editores de blog related postpara en todos sus entradas hubieran referencias a otras entradas relacionadas entre si (dios que iluso fui), y para ello existen varios plugin aunque yo me decante por Yet Another Related Posts Plugin, que funciona de maravilla, con solo instalarlo ya me doto de esta característica a la mayoría de las entradas de mi blog.

Para aquellos que al igual que yo esten un poco desconectados en las novedades los plugins WordPress espero que esta entrada les haya sido de utilidad y para los que ya estén mas actualizados ¿Han hecho alguna mejora a su blog? ¿Que otro plugin podrían sugerirnos para tener nuestro blog actualizado a las nuevas tendencias?

Plugins WordPress para la ley de cookies española

Transcurría el mes de agosto del año pasado cuando por un tuit me entere de que existía una “ley de cookies”, el tuit hacia referencia a una publicación donde indicaban que ya existía una demanda en contra de una empresa “grande” en España y todo porque alguien (entiendo que un astuto) había introducido la demanda ya que el sitio Web de la empresa no indicaba que introducía cookies en las computadoras de los usuarios que visitaban dicho sitio. Recuerdo también que dicho articulo comentaba que el ente jurídico español no multaría (según sus fuentes) con una cifra escandalosa a la empresa para la compensación del o los usuarios pero si estaban tomando ese caso para elaborar una especie de borrador para que a su vez bloggers y empresas tuviesen una referencia al momento de adaptar sus sitios Web así como también ellos tener una referencia a la cual apegarse a la hora de determinar si un sitio cumplía con la ley o no.

Esta ley de cookies fue aprobada en el año 2012, pero ciertamente creo que éramos pocos los que sabíamos o habíamos empezado a acatar dicha legislación que si no me equivoco es a nivel europeo. Yo particularmente no estoy muy de acuerdo que se diga con dicha ley, de hecho considero que antes de multar empresas y personas e invertir dinero en toda una legislación que vigile su cumplimiento, etc.., preferiría que tales recursos se dedicaran a la educación del internauta para que conozca acerca de las cookies, o sea, me parece bien que se informe al usuario pero no con el hecho de ser tan riguroso hasta llegar al punto de multar (y mas en estos tiempos que corren) a la persona (jurídica y natural) dueña del sitio Web que no informe acerca de las cookies que guarda la página Web en los navegadores de los internautas.

Ha sido hasta este momento que por fin me he dignado a adaptar el sitio y buscar al respecto, y bueno comparto brevemente con ustedes lo que encontré que me ha resuelto el problema. Hay realmente varios pulgins en el sitio Web de WordPress.org pero los dos que les listare a continuación fueron los que mas me gustaron:

  • Ley cookie: Esta muy bien y es sencillo, pero aun esta en etapa de desarrollo, pero lo bueno es la disposición que tiene su creador en mejorarlo con ayuda de la comunidad.
  • Asesor de cookies para normativa española: Muy sencillo y sinceramente (hasta donde llega mi conocimiento en la materia) cumple con lo necesario y realmente hace todo y en menos de 5 min tuve el sitio ya adaptado para el cumplimiento de la ley de cookies. En un principio he dejado todo lo generado por defecto para a su vez hacer algo de justicia a su desarrollador y referencia al plugin entre otras cosas.

Ahora cuéntanos ¿ya tienes tu sitio Web de empresa o blog preparado para el cumplimiento de la ley de cookies?

Algo de información valiosa al respecto

http://www.davidrabaez.com/ley-de-cookies-5-puntos-a-tener-en-cuenta/

Caused by: java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big.

El día de hoy comienzo una nueva categoría llamada “exceptions“, donde compartiré (en medida de lo posible) como resolver o evitar que en nuestras aplicaciones salten excepciones o al menos indicar la razón por la cual es arrojada. En esta oportunidad les traigo la siguiente exception:

Caused by: java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big.

Esta excepción, se obtiene en Java 6 al haber discrepancias entre el tipo de instancia del keystore y el tipo de almacén de claves, al intentar cargar el almacén de claves. Por ejemplo  si intentásemos cargar el almacén de claves desde un fichero .jks (jks es una implementación por defecto de Java  para el almacenamiento de claves, que por ejemplo puede ser creado con el comando keytool del jsdk), habiendo indicado que la instancia del keystore es “pkcs12” en vez de haber utilizado el valor de “jks”. Como el ejemplo a continuación:

Como evitar entonces la excepción? Muy sencillo, hay 2 alternativas.

  1. Utilizar como tipo para obtener la instancia del keystore el valor de “jks” en vez de “pkcs12” (para este ejemplo específicamente), es decir utilizar el tipo adecuado para obtener la instancia del keystore.
  2. Cargar el almacén de claves adecuado, es decir, para este ejemplo sería indicar el path del certificado digital (por ejemplo de tipo .p12, .pfx) en vez de haber utilizado el path del fichero jks.

Espero pueda ser de utilidad y les quite al menos uno que otro dolor de cabeza. Cualquier información que consideres pueda ser de utilidad relacionada con esta excepción, no dudes en compartirla.

Decompilador Java

Hacia mucho tiempo que no me veía en la necesidad de utilizar este tipo de herramientas como lo son los decompiladores, para aquellos que desconocen que son, en palabras sencillas, son herramientas que permiten obtener el código fuente de una clase a partir del Bytecode de la misma. A continuación les dejo un decompilador que he utilizado y hasta ahora me ha ido bien con el, es bastante sencillo, posee versiones para los principales sistemas operativos (Mac Os X, Windows y Linux) y como puntos a resaltar decompila desde Bytecode de la versión 1.1 hasta la versión 1.7 de Java, es gratuito y además posee plugins para eclipse y IntelliJ.

Enlace al sitio web del decompilador. Comparte con la comunidad tus impresiones acerca de la herramienta y si conoces alguna otra que nos puedas sugerir te lo agradeceremos.

Algunos screenshots

Mi primera aplicación en iOS

Desde hace poco tiempo a causa de un nuevo proyecto al que fui asignado me toco empezar a buscar información para desarrollar en iOS, aunque únicamente consistió en una prueba de concepto y viabilidad del proyecto, empece por comprarme un libro y empezar a leerlo en la medida en la que el trabajo me lo permite, ahora quiero compartir con ustedes lo poco que hasta ahora he aprendido, que insisto es poco, pero me esta gustando bastante, no solo el framework (Cocoa Touch) sino también el entorno de trabajo (Xcode).

Intentare guiarles de la manera mas clara posible en la creación de una versión del hola mundo en Xcode para iOS.

Empezaremos ejecutando Xcode y seleccionando la opción de crear un nuevo proyecto. Inmediatamente después debemos seleccionar una plantilla (template), en la parte superior izquierda seleccionamos la opción Application en la sección iOS, seguido seleccionamos en el panel derecho la opción Single View Application y pulsamos el botón Next.

 Luego tenemos que rellenar el nombre del proyecto, el dispositivo para el que se elabora la App con los datos de la siguiente gráfica.

De los valores ingresados una muy breve descripción:

Product name: Nombre de la aplicación

Class Prefix: Prefijo dado a las clases para evitar conflictos de nombre.

Una vez realizados los pasos anteriores, Xcode nos habrá generado un conjunto de archivos, desplegar la carpeta de nombre HelloWorld para poder visualizarlos, entre ellos podrán ver un fichero de nombre BIDViewController.xib. Al seleccionarlo observarán como en el editor aparece lo que será la interfaz gráfica sin ningún componente.

En el panel inferior derecha del Xcode se encuentra ubicada la biblioteca de componentes, de allí arrastraremos a la interfaz los componentes necesarios para poder construir una GUI parecida a la imagen.

Empezaremos arrastrando una etiqueta (label) y la ubicaremos en la parte superior izquierda veremos como el editor tiene una especie de asistente que nos ayudara a la ubicación mostrando unas lineas azules para marcarnos los bordes, el centrado, alineación con otros componentes, etc. Una vez ubicada la etiqueta hacemos doble click en el componente y editamos el valor de la etiqueta y escribimos “Nombre:”.

Seguido ahora arrastraremos un campo de texto (text field) y luego ajustaremos su longitud alargando el campo por los bordes y de igual manera apoyandonos de estas lineas azules que nos indican cuando estamos en el limite de los bordes de la pantalla.

Por ultimo arrastramos un botón y lo ubicamos centrado en la parte inferior. Hacemos doble clic en el botón y le asignamos el texto “Saludar”.

Terminado el diseño de la GUI vamos a aprovechar alguna de las ventajas del IDE (Xcode) que de forma transparente realizando unos sencillos pasos nos generara el código necesario para nuestra aplicación.

  1. Ir al menu yView->Assistant Editor->Show Assistant Editor, podremos ver como la vista donde editábamos la GUI se ha dividido en 2.
  2. Hacemos clic en el campo de texto y pulsando la tecla ctrl lo arrastramos hacia el lado derecho donde se esta el código y soltar antes del @end. Nos aparecerá una pequeña ventana y deberemos rellenar los valores como lo indica la siguiente imagen. Al terminar presionar el botón connect.
    agregando outlet
  3. Seguido realizamos el mismo paso pero con el botón “Saludar” y rellenamos lo datos de la ventana con los datos que aparecen en la siguiente imagen.
    agregamos action

 

Ya casi hemos terminado con la interfaz gráfica (como pueden ver uso de forma intercambiable GUI e interfaz gráfica) pero antes deberemos seleccionar el archivo BIDViewController.m (veremos como en el editor principal se carga el archivo). Agregaremos un método y editaríamos otro antes del @end, como aparece en la siguiente imagen. Siendo más explícito editaremos el action saludar que Xcode nos ha dejado ya el esqueleto del método (lo hizo justo cuando arrastramos el botón saludar al lado derecho del código y nos apareció la ventana a la que le ingresamos información) y agregaremos el action textFieldDoneEditing.

metodos action

El primer action (saludar) que hemos editado será el que llevará a cabo la funcionalidad cuando pulsemos el botón saludar (que aunque no conozcamos el lenguaje podemos interpretar que es lo que hace). La funcionalidad consistirá en arrojar una alerta (especie de ventana modal) concatenando la cadena “Hola ” el contenido que hayamos ingresado en el campo de texto. El segundo action (textFieldDoneEditing) sencillamente hace que se oculte el teclado al pulsar enter, sino agregamos este método y lo enlazamos con la vista al poner el cursor sobre el campo de texto aparecería el teclado y este no se ocultaría.

Seleccionamos de nuevo el archivo BIDViewController.xib, luego en el editor en la parte izquierda veremos 3 iconos, File’s Owner,  First Responder y View, seleccionamos la vista (View) y luego presionamos las teclas cmd+alt+6 y en la parte derecha de nuestra ventana se mostrara el connections inspector. Seleccionamos el botón “Saludar”, nos aparecerán todos los eventos del botón debajo del titulo Send Event, luego seleccionamos el circulo correspondiente al evento Touch Up Inside y lo conectamos (arrastrando) al File’s Owner, nos deberá aparecer el método saludar y lo seleccionamos.

Para terminar seleccionamos el campo de texto y aun mostrandose el panel connections inspector (en caso que no este repetimos los pasos para que aparezca) seleccionamos el circulo correspondiente al evento Did End On Exit y lo conectamos con el File’s Owner y seleccionamos el action textFieldDoneEditing e inmediatamente después guardamos (cmd+s).

Finalmente ya hemos terminado, ahora de haber podido seguir todos las indicaciones antes señaladas en el post podremos ejecutar nuestra primera App para Iphone, que esperas!!! vamos a probarla, pulsemos cmd+r.

simulador iphone

¿Qué tal? yo si les soy sincero a mi lo que me asombro la primera vez fue el entorno, es muy amigable ya desearía yo que algún editor Java me generara un código legible y de forma tan sencilla para generar y darle funcionalidad a una GUI, se que a mucho les gusta quizás el modo mas largo, codificando todo y así ya luego al usar estos asistentes saber donde, cuando y como se genera el código, pero bueno mi intención en un principio es hacer un Hola Mundo, Hola Pedro u Hola María que se desarrollase de forma sencilla, rápida y así tener un primer acercamiento con esta tecnología. Espero que les haya parecido interesante, ¿conoces algún recurso que quieras compartir con nosotros?, a que esperas, la información es poder, compartela y así todos podemos beneficiarnos.