Configurar un servidor SMTP de correo saliente con Postfix

Postfix es lo que se denomina un MTA (Mail Transfer Agent), una aplicación usada para enviar y recibir emails. En este tutorial, instalaremos y configuraremos Postfix de modo que permita enviar emails a las aplicaciones que tengamos instaladas nuestro servidor.

¿Para qué nos sirve un servidor SMTP de envío?

Si ya usas un servicio de email de terceros para enviar y recibir correos, está claro que no necesitas un servidor de email propio. Sin embargo, si tienes un servidor en el que instalas aplicaciones que necesitan enviar notificaciones de correo, como por ejemplo, una instalación de wordpress con un formulario de contacto. Tener tu propio servidor de envío es una buena alternativa a utilizar servidores de terceros, los cuales pueden cambiar las condiciones de uso en cualquier momento.

Requisitos

Los requisitos necesarios para poder completar el tutorial son los siguientes:

  • Servidor con Ubuntu (En mi caso un droplet de digital ocean con Ubuntu 15.04.
  • Tener acceso root al servidor.
  • Un dominio válido apuntando a tu servidor, en mi caso appdev.es

Paso 1 – Instalar Postfix

En este paso aprenderás como instalar Postfix. La forma más eficiente de instalar Postfix y otros programas necesarios para testar el servidor de correo es instalando el paquete mailsutils, para ello tan sólo debemos escribir el siguiente comando:

Tras ejecutar el comando, nos aparece el siguiente mensaje:

Indicamos que queremos continuar y se instalarán los nuevos paquetes. Antes de terminarse la instalación de dependencias, nos aparecerá la ventana de configuración inicial de Postfix, tal como se muestra en la siguiente imagen. La opción por defecto es Internet Site, la misma se recomienda en este tutorial, la seleccionamos.

Postfix configuración

Tras seleccionar la configuración por defecto, nos aparece una ventana en la que debemos introducir el nombre de nuestro servidor de SMTP saliente, le podemos nombrar como nos apetezca. Por convención sería smtp.midominio.com, pero como digo es opcional.

Postfix configuración 2

Una vez completada la instalación podemos proceder al paso 2.

Paso 2 – Configurar Postfix

En este paso configuraremos Postfix para que permita procesar el envío de  emails desde el servidor en el que está ejecutándose, es decir, desde localhost. Para que esto sea posible, es necesario configurar Postfix para que sólo escuche la interfaz “lookback”, una interfaz de red virtual que se usa para comunicarse internamente. Para ello editamos el fichero de configuración con nano.

Con el fichero listo para editar, nos vamos hasta las lineas dónde se encuentra el siguiente bloque de código:

Cambiamos la línea inet_interfaces = all por inet_interfaces = loopback-only, quedando el fichero tal que así:

En caso de querer usar en lugar de loopback-only, localhost, sería de la siguiente manera:

Una vez guardada la configuración, sólo nos queda reiniciar el servicio Postfix.

Paso 3 – Probar nuestro servidor  SMTP de envío

Para probar que hemos instalado y configurado Postfix de forma correcta, enviaremos un correo desde la terminal utilizando el comando mail, el cual forma parte del paquete mailtuils instalado en el paso 1.

Para enviar el mensaje escribiremos los siguiente:

Si todo ha salido deberías haber recibido el correo enviado, en caso de que no lo tengas en tu bandeja de entrada comprueba tu carpeta de spam ;).

Referencias

http://www.postfix.org/documentation.html

ASP.NET MVC en OSX con dotNet version manager

En esta entrada trataré de realizar una pequeña guía en la que configuraremos el entorno de Mac OS X para poder desarrollar y ejecutar aplicaciones ASP.NET MVC con Visual Studio Code y .Net Version Manager.

.NET version manager (DNVM) y .NET Execution Environment (DNX)

DNVM y DNX forman parte de ASP.NET5; DNVM es el conjunto de utilidades de linea de comando que nos permite actualizar y configurar el runtime de .NET, mientras que DNX nos proporciona los elementos necesarios para poder compilar y ejecutar la aplicación.

Para poder instalar DNX y DNVM necesitamos disponer en nuestro mac del famoso gestor de paquetes Homebrew.

Una vez que tenemos listo homebrew instalaremos DNX y DNVM.

Nota: Windows por defecto trae instalado el Framework .NET, mientras que en OSX,  gracias a brew, podemos instalar una versión particular de Mono que trabaja con ASP.NET5

Si todo ha salido bien debería aparecer la siguiente pantalla tras ejecutar en la terminal el comando dnvm.

DNVMA continuación tenemos que añadir a nuestro bash profile las siguientes líneas:

Cuando terminemos de editar el .bash_profile, descargamos DNX:

Visual Studio Code

Siguiendo las instrucciones que propone Microsoft, una vez descargado Visual Studio Code debemos añadir el siguiente código a nuestro bash profile.

Tras añadir el código anterior al bash profile tan solo tenemos que ejecutar el siguiente código en el directorio del proyecto en el que estemos trabajando para abrirlo.

vscode_aspnet_03_visual_studio_code-100582527-large.idge

Proyectos de ejemplo

Nos situamos en nuestro directorio de trabajo y clonamos el siguiente repositorio repositorio de ASP.NET 5: https://github.com/aspnet/home

Una vez clonado el repositorio actualizamos las dependencias necesarias para poder ejecutar los ejemplos:

Proyecto de consola:

Nos situamos en el directorio que contiene el proyecto de ejemplo:

Lo ejecutamos

Si todo ha salido bien este debería ser el resultado:

DNX . RUN

Proyecto Web:

Al igual que en el caso anterior nos situamos en el directorio que contiene el proyecto web de ejemplo:

A diferencia del proyecto de consola debemos ejecutar el proyecto sobre el servidor que integrado que nos proporciona DNX:

Screen Shot 2015-05-19 at 06.17.21

Tras ejecutar el proyecto nos vamos al navegador y escribimos http://localhost:5004.

Screen Shot 2015-05-19 at 06.14.45

Referencias:

 

Varios sitios WordPress en Ubuntu.

En este artículo vamos a configurar dos instancias de WordPress en un sólo VPS con Ubuntu, cada una de estas instancias tendrá su propio nombre de dominio. Hay que tener en cuenta, que no vamos a utilizar la configuración multisite que propone WordPress.

Requisitos

  • Servidor VPS con Ubuntu 15.04 (o cualquier otra versión), en mi caso usaré un droplet de digitalocean.
  • Disponer de dos dominios apuntando al servidor.
  • Instalar el stack LAMP en Ubuntu (Digital Ocean nos ofrece imágenes de droplets con el stack listo).

Descargar WordPress

Una vez tengas los requisitos, logueate en tu servidor, sitúate en tu directorio home y descarga wordpress:

Descomprime el fichero utilizando mediante el siguiente comando:

Crear las bases de datos y los usuarios

Antes de continuar necesitamos configurar una base de datos MySQL para cada uno de los sitios.

Para configurar la base de datos usaremos la información mostrada en la siguiente tabla:

Nombre del sitiofirstsite.comsecondsite.com
Nombre BDFirstDatabaseSecondDatabase
Usuario BDFirstUserSecondUser
Contraseña BDFirstPasswordSecondPassword

Accede a MySQL como root:

Crea dos bases de datos:

Crea un usuario asociado a cada base de datos:

Establece la contraseña de acceso para cada cuenta:

Finalmente, concede los permisos adecuados a cada uno de los usuarios:

Refresca la información de los privilegios de MySQL.

FLUSH PRIVILEGES;

Salimos de MySQL y volvemos a la consola:

Configurar el directorio raiz de Apache

Instalaremos ambos sitios en directorios individuales dentro del directorio raíz de apache.

Nos movemos hacia “/var/www/”:

Creamos dos directorios, uno para cada sitio.

Realizamos una copia del fichero de configuración de prueba de wordpress:

Copiamos los ficheros de wordpress a cada uno de los directorios raíz de nuestros sitios:

Finalmente asignamos los permisos necesarios a todo el contenido del directorio raíz de Apache:

Configurar wordpress

Configuraremos la información de cada uno de nuestros sitios WordPress.

Primer sitio

Vamos al directorio raiz del primer sitio:

Abrimos el wp-config:

Editamos la sección que contiene la información referente a la base de datos (nombre, usuario y password):

Guardamos y salimos.

Segundo sitio

Nos vamos al directorio raíz del segundo sitio:

Abrimos el fichero de configuración de WordPress:

Tal como hicimos con el sitio anterior, editamos la información referente a la base de datos, quedando en este caso tal que así:

Configurando Apache

Necesitamos configurar Apache para que redireccione el tráfico de cada dominio a su respectivo directorio. Para ello debemos crear un fichero  con la configuración de cada host virtual.

Nos situamos en el directorio de sitios disponibles de Apache

Creamos un nuevo fichero de virtual host para cada uno de los sitios, para ello copiamos el fichero default:

Virtual host del primer sitio

Editamos el fichero de virtual host del primer sitio:

Debe quedar tal que así:

Si quieres tener la opción de poder habilitar los “permalinks” de wordpress, necesitas cambiar  dentro de “<Directory /var/www/FirstSite>” “AllowOverride None” por “AllowOverride All”.

Virtual host del segundo sitio

Abrimos el fichero de virtual host del segundo sitio:

La configuración del virtual host de nuestro segundo sitio debe quedar de la siguiente manera:

Guardamos y cerramos el fichero.

Configuración final

Los siguientes pasos son necesarios para que nuestro sitio funciones correctamente.

Primero debemos instalar un modulo de PHP que necesita wordpress para funcionar correctamente:

A continuación habilitamos los host virtuales que hemos creado:

Finalmente, reiniciamos el servicio de Apache.

Resultado

Vamos a ver como han quedado nuestros nuevos sitios WordPress, para ello navega a cada uno de tus dominios, y, si has seguido los pasos correctamente, debería aparecer en cada uno de ellos el la famosa “instalación de 5 minutos”.

wordpress

Para finalizar la instalación tan solo debes introducir los campos requeridos para cada sitio.

WordPress is_home vs is_front_page

WordPress ofrece múltiples funciones condicionales que nos permiten gestionar la forma en que se muestra un contenido u otro de manera eficiente y clara. Sin embargo, dos de las más utilizadas pueden resultar bastante confusas a la hora de elegir cual usar, son is_home() e  is_front_page(). En este post voy a intentar explicar cuando usar una u otra.

Funcionamiento

Con estas funciones condicionales, se puede comprobar si se está visualizando la página de inicio (is_home), o si la pagina que se está utilizando es una página estática (is_front_page). Este comportamiento lo podemos definir en el menú Ajustes -> Lectura.

condicional wordpress

Veamos como funcionan realmente estas dos etiquetas condicionales dependiendo de la configuración que selecciones para nuestra página frontal.

1. Configuración por defecto:

En la configuración por defecto WordPress nos muestra en la pagina de inicio las últimas entradas.

  • URL : nuestraweb.com
  • is_home: TRUE
  • is_front_page: TRUE

En esta configuración no hay ningún problema.

2. Página frontal estática:

La página de inicio utiliza una de nuestras páginas estáticas.

  • URL: nuestraweb.com
  • is_home: FALSE
  • is_front_page: TRUE

No hay  problema con la página estática: is_front_page devuelve true

3. Página de blog

Una de nuestras páginas estáticas se usa para mostrar todas las entradas.

  • URL: nuestraweb.com/pagina
  • is_home : TRUE
  • is_front_page : FALSE
En esta configuración hay  algunos problemas: is_home devuelve TRUE, pero esta pagina no es la de inicio, es una página que lista todas las entradas, tal como sucedería cuando listamos los post de una categoría, etiqueta o archivo.

Uso correcto

Cuando creamos un plugin o un tema, debemos tener en cuenta que los usuarios pueden cambiar la configuración de la página frontal. Por lo tanto, cada vez que utilicemos is_home, debemos comprobar is_front_page antes. Si no lo hacemos, es posible que tengamos problemas con algunos usuarios. Por ejemplo, si sólo comprobamos is_home para mostrar el contenido de su página de inicio, habrá problemas con la página estática ya que como hemos visto no mostraría el contenido correcto.

Veamos como quedaría la anidación de condicionales:

Espero que esta pequeña entrada te haya aclarado las dudas.

“Hola mundo!” con Swift

El pasado mes de Junio, Apple anunció el lanzamiento de su nuevo lenguaje de programación Swift. Un lenguaje que, comparado con Objective-C, posee una sintaxis más moderna y limpia.

En este artículo, vamos a realizar la típica aplicación de ejemplo”Hola Mundo!” en Swift, además cubriremos algunos de los fundamentos básicos del desarrollo de apps para iOS.

Requisitos

Para este pequeño tutorial, necesitamos un equipo con OSX (mac o hackintosh) y la última versión de Xcode, el cual podemos descargar gratuitamente de la Mac App Store.  Xcode es el IDE más utilizado para desarrollar aplicaciones para iOS o Mac.

Paso 1: Crear el proyecto

Abrimos Xcode y hacemos clic en  el menú “Archivo -> Nuevo -> Proyecto”.

Nos aparece una pantalla con una serie de plantillas para la creación de aplicaciones iOS. Dichas plantillas incluyen código por defecto que nos pueden ayudar a ahorrar tiempo. Para nuestro ejemplo vamos a elegir la opción “Single View Application”. Esta opción es la mejor para el aprendizaje de los conceptos básicos.

Hacemos clic en el botón “Next” y rellenamos los siguientes datos:

  • Product Name: Nombre de la aplicación
  • Organization Name. Tu nombre o el de tu compañía.
  • Organization Identifier. Este campo suele escribirse como un nombre de dominio inverso. (ej. es.appdev)
  • Language. Elegimos “Swift”.
  • Devices. Elegimos “iPhone”.
  • Use Core Data. Lo mantenemos sin marcar.

Una vez rellenados los datos volvemos a hacer clic en “Next” , aparecerá un cuadro de diálogo para guardar el proyecto,  elegimos la ubicación que queramos y guardamos. Una vez que guardado el proyecto, aparecerán una serie de opciones, no nos asustemos, para este ejemplo vamos a pasar por alto la mayor parte de lo que vemos en pantalla. Por ahora solo nos preocuparemos de lo básico.

Paso 2: Diseño de la interfaz

En el lado izquierdo de la pantalla, podemos ver el panel “Navigator”. Este nos permite navegar a través de los ficheros que componen nuestro proyecto. Como podemos observar hay algunos archivos que Xcode genera automaticamente, para empezar hagamos click sobre el fichero “Main.storyboard”.

Debería aparecer lo siguiente:

La imagen anterior nos muestra un “View Controller” en blanco. Un “View Controller” es  básicamente el equivalente a una pantalla. Por ejemplo, la app “Reloj”  del iPhone, consta de cuatro pantallas principales, y por lo tanto, al menos, cuatro view controllers:

  • Reloj Mundial
  • Alarma
  • Cronómetro
  • Temporizador

Esta no es una definición purista de lo que es un “View controller”, pero por el momento nos basta para comprender básicamente para que sirven.

Por defecto la ventana del “View controller” aparece cuadrada,  Apple la dispone de esta manera para que realicemos una interfaz adaptativa, pero esto se escapa del alcance de este tutorial. Nosotros vamos a hacerla rectangular, para ello seguimos los siguientes pasos:

  1. Hacemos clic en cualquier lugar dentro del cuadrado blanco, para seleccionar el view controller.
  2. En la barra de herramientas de la derecha seleccionamos “Attributes Inspector”.
  3. En la opción “Size” seleccionamos algún tamaño de iPhone.

En este punto, vamos a crear nuestra interfaz  añadiendo un botón para el medio de ella. Para ello, nos vamos a la “Biblioteca de objetos”. Esta biblioteca contiene una serie de objetos que se pueden introducir en nuestra interfaz, si nos desplazamos a través de la lista podemos encontrar el objeto “Button”:

Arrastramos el objeto botón de la biblioteca al view controller. Para cambiar el texto del botón, hacemos doble clic en él y escribimos, por ejemplo, “Click Me”. Una vez situado, hacemos clic en “run” en la esquina superior izquierda de Xcode. Esto ejecutará nuestra aplicación dentro de un simulador de iOS:

Paso 3: Escribir código Swift

Para empezar a escribir algo de código Swift, abrimos el “Assistant Editor“. Podemos encontrar el botón para ello en la esquina superior derecha de la pantalla. Después de hacer clic en el botón, aparecerá un archivo con algo de código.

Por el momento, ignoramos todo el código, excepto esta parte:

En el código anterior, tenemos una función llamada viewDidLoad,  esta función se ejecutará inmediatamente después de que se cargue nuestra vista, en nuestro caso, como solo tenemos una vista, se ejecutará una vez se haya cargado la aplicación.

Para ver esto en acción, vamos a escribir lo siguiente dentro de la función:

La función println se utiliza para enviar texto a la consola. En este caso, “Hello world!”. Si nos fijamos, no hemos utilizado un punto y coma al terminar la declaración, en Swift no son necesarios, pero se pueden escribir opcionalmente.

Ejecutamos el simulador de nuevo, una vez cargada la aplicación,  aparece otro panel en la parte inferior de la ventana de Xcode. Este es el panel de “depuración” , en el lado derecho del mismo, podemos ver la consola con nuestro texto “Hello world!”.

Paso 4: Crear una acción

El siguiente paso es hacer que aparezca un mensaje en la consola cuando el usuario haga clic en el botón “Click Me”, en lugar de cuando se carga la vista.

Para ello:

  1. Mantenemos pulsada la tecla CTRL.
  2. Hacemos clic en el botón “Click Me”.
  3. Arrastramos el cursor hasta el fichero ViewController.swift.

Aparecerá una ventana con una serie de opciones. Vamos a cambiar dos de ellas:

  1. En “connection” seleccionamos “action”.
  2. En “name” escribimos “buttonPressed”.

De esta manera se crea una acción. Las acciones permiten que los elementos de la interfaz respondan a los eventos. En este caso, el botón “Click Me” va  a responder al evento “Touch Up Inside”. Una vez le damos a conectar aparece el siguiente código:

Vamos a comprobar que sucede con esta función, para ello vamos a agregar el siguiente código dentro de ella:

Si volvemos a ejecutar el simulador, debería aparecer dentro de la consola el mensaje “Ha hecho clic en el botón”.

Paso 5: Crear un Outlet

En este último paso vamos a mostrar en la interfaz de usuario el resultado de pulsar el botón, para lograr esto, vamos a utilizar los “Outlets”. Los Outlets nos permiten modificar partes de nuestra interfaz a través de código. Para ver cómo funcionan, vamos a arrastrar un objeto “label” de la biblioteca. En este objeto simplemente vamos a mostrar una cadena de texto.

A continuación repetimos los pasos que seguimos con el botón:

  1. Mantenemos pulsada la tecla CTRL.
  2. Hacemos clic en el botón “Click Me”.
  3. Arrastramos el cursor hasta el fichero ViewController.swift.

Esta vez no cambiamos la opción “Connection”, simplemente la dejamos en Outlet. Ló unico que vamos a cambiar es el nombre, para ello escribimos en name “ourLabel”. Una vez le damos a conectar debería aparecer el siguiente código:

Gracias a esta declaración, ahora podemos hacer referencia a la variable ourLabel desde código, lo que nos permite modificar nuestra label programaticamente. Vamos a comprobarlo para ello escribimos lo siguiente dentro de la función buttonPressed:

¿Qué hemos hecho?

  1. Referenciamos el objeto ourLabel.
  2. Modificamos la propiedad text del objeto.
  3. Asignamos el string “Has hecho clic en el botón” a dicha propiedad.

Si volvemos a ejecutar el simulador y hacemos haga clic en el botón “Click Me” se va a cambiar el valor de label por el texto que hemos escrito.

Hasta aquí este tutorial, he tratado de cubrir algunos aspectos básicos del desarrollo de apps para iOS con el lenguaje Swift.

Novedades WordPress 4.0

Finalmente he decidido retomar el blog, y, por petición de algunos de mis alumnos, voy a empezar a escribir algún que otro articulo dedicado a WordPress. Aunque como he dicho muchas veces WordPress no es “santo de mi devoción”, hay que reconocer que para sacar adelante proyectos sencillos es, sin duda, una opción más que interesante. Voy a aprovechar que hoy liberan la última versión, para hablar sobre sus novedades más importantes.

La versión 4.0 de WordPress, llamada “Benny” en honor del clarinetista de jazz y director de orquesta de Benny Goodman, está disponible para descarga o actualización en tu panel de WordPress. Esta versión mejora en muchos aspectos la usabilidad del panel de gestión del CMS.

Principales mejoras incluidas en WordPress 4.0:

  • Posibilidad de elegir el idioma de instalación de WordPress.
  • Además de la “Vista de lista”, se añade, la biblioteca multimedia “vista de cuadrícula” o rejilla.
  • Renovación del instalador de plugins donde se añade vista en bloques y previa en ventana modal, así como mejoras en la búsqueda.
  • Renovación en las funciones de formato,  la interacción de cursor y teclado con vistas TinyMCE como la vista previa de la galería.
  • El editor de WordPress cambia el tamaño de su fondo y barras superiores siempre que sea necesario.
  • Los widgets dentro del personalizador se cargan en un panel separado.
  • Sustitución de la API JSON REST que sustituye la anterior y a XML-RPC.
  • Mejoras en las funciones de formato.

Selecciona el idioma en la instalación

Traducir WordPress a otros idiomas siempre ha sido un proceso un poco desconocido y complicado para usuarios que no tienen mucha experiencia. Con la nueva versión 4.0 podrás seleccionar el idioma antes de completar la instalación, así todo el proceso y uso posterior será con la opción que se elija.

Además de esto, una vez instalada la plataforma se podrá seleccionar y cambiar el idioma rápidamente en la opción de Ajustes > Generales.

Esto sin duda va a favorecer a que más temas y plugins sean traducidos y encontrados en diferentes idiomas. Un paso adelante en el uso global de la plataforma.

wp40_1

Céntrate en el contenido

En el editor se han introducido unas mejoras de usabilidad muy interesantes.

La primera mejora es que la barra de herramientas aparece visible cuando hacemos scroll vertical, disponiendo de ella en todo momento, algo que echaba en falta cuando editaba artículos largos, como este.

wp40_2

 Otro cambio muy interesante es que desaparece la barra de scroll dentro del editor visual, de tal forma que el contenedor donde visualizamos el trabajo va ampliando su tamaño a medida que lo necesita. Ahora solo tenemos una barra de scroll, que es la de la propia ventana. Además en esta versión de WordPress se añade la funcionalidad de previsualización de vídeos, tweets y otros elementos de tipo embed (incrustado). Puedes ver todos los tipos soportados en este enlace.

Vista previa de Widgets

Si un tema tiene las áreas de widgets disponibles ahora estos son manejables con la vista previa en vivo. Añadir, editar y reordenar los widgets de tu sitio desde el personalizado de temas será más sencillo. No guardes y te sorprendas; previsualiza primero los cambios en vivo y guárdalos solo cuando estén listos.

wp40_3

Biblioteca multimedia

Aunque ya se podía antes, ahora podrás ver toda tu librería multimedia de WordPress con una interfaz moderna y thumbnails (Media grid view). Esto permitirá que cualquier usuario de WordPress pueda manejar y administrar sus medios de forma más eficiente.

wp40_4

Instalador de plugins

Otra de las ventanas de administración que ha sufrido importantes mejoras es la del instalador de plugins, que hereda el aspecto del instalador de temas para hacerlo más visual y atractivo. También se ha mejorado enormemente la ventana de información de cada plugin, como no podía ser de otro modo, incorporando un sistema de iconos.

wp40_5

 

La última versión estable de WordPress 4.0 está disponible en dos formatos, zip o tar.gz.

Como siempre, antes de actualizar a la última versión estable del CMS, te recomiendo que realices una copia de seguridad para garantizar la seguridad y estabilidad de nuestro Blog.

Pinceladas de Objective-C para Rubyistas

 RubyMotion nos permite desarrollar aplicaciones para iOS sin necesidad de escribir código Objective-C. Sin embargo, es muy importante aprender a leerlo, ya que nos facilitará el aprendizaje del SDK de Apple.

A primera vista, Objective-C y Ruby no podrían ser más diferentes el uno del otro. Mientras que Ruby es hermoso y elegante, Objective-C parece un entresijo de corchetes. Sin embargo, si miramos más allá de las diferencias sintácticas, podemos observar que en realidad no difieren mucho uno del otro, ya que ambos lenguajes heredan características de Smalltalk

Mensajes

Al igual que con todos los lenguajes basados ​​en Smalltalk, el modelo de POO de Objective-C se basa en enviar mensajes a instancias de objetos. Veamos la sintaxis:

Equivalente en Ruby:

Ej. Instancia de un NSMutableArray de Cocoa.
En Objective-C

En Ruby:

Clases y objetos

Diseño
El diseño de clases en Objective-C es similar al de C++, ya que ambos requieren que la interfaz e implementación de una clase estén en bloques de códigos separados. Por convención, la interfaz se sitúa en un archivo de cabecera (.h) y la implementación en un archivo de código (.m).
Interface implementation
Veamos la sintaxis:

Equivalente en Ruby:

Instancia
La instanciación de clases en Objective-C es un proceso que consta de dos pasos: primero se  debe asignar una cierta memoria para el objeto llamando al método alloc, y luego lo inicializamos con el método init.
En Objective-C

En Ruby:

Propiedades

Las propiedades de un objeto permiten a otros objetos acceder o cambiar su estado. Como sabemos, en un programa bien diseñado, no es posible acceder directamente al estado interno de un objeto, para ello usamos los métodos de acceso ( getters y setters ).

Properties

Declaración
En Objective-C

En Ruby:

Acceso
En compilador de Objective-C genera un getter y setter para la propiedad. Una vez declara la propiedad, puede llamar a estos métodos como si estuvieran incluidos en la interfaz de la clase y en el fichero de implementación:

Equivalente en Ruby:

Atributos más importantes de las propiedades

getter=Permite usar un nombre personalizado para el método getter.
setter=Permite usar un nombre personalizado para el método setter.
readonlyPropiedad de solo lectura
nonatomicNo garantiza la integridad de los accesores en un entorno multihilo, pero es más eficiente que atomic
strongCrea una relación fuerte entre la propiedad y el valor asignado. Es el valor por defecto.
weakCrea una relación débil entre la propiedad y su valor.
copyCrea una copia del valor asignado en lugar de hacer referencia a la instancia actual

Métodos

En la declaración de métodos se deben especificar varias cosas: el tipo de método (de clase o de instancia) el tipo del valor de retorno, su nombre y sus parámetros (con sus tipos incluidos).
A diferencia de otros lenguajes, el nombre de los métodos en Objective-C es una combinación de su nombre y sus parámetros.
Veamos un ejemplo del SDK de Apple:

  • El guión “-” nos indica que se trata de un método de instancia.
  • El tipo devuelto es un NSInteger.
  • Los parámetros son tableView, y numberOfRowsInSection:section

Equivalente en ruby:

 

Resumen

En este post hemos visto pequeñas pinceladas del runtime de Objective-C, algunas peculiaridades de su sintaxis, y lo excesivamente “verbose” que es en comparación con Ruby.
Hasta la próxima entrada!

“Code Golf” con Ruby

“Code Golf” es el arte de escribir código utilizando el menor número de caracteres posibles. La idea es originaria del mundo Perl (“Perl Golf), aunque en Ruby también se pueden conseguir muy buenos resultados.

La obsesión por tratar de minimizar el número de bytes utilizados en un programa proviene de tiempos pasados, cuando la memoria era un bien escaso y cada byte era importante. En realidad hoy en día esto no tiene demasiado sentido, pero esto no quiere decir que no se haga. Un ejemplo podrían ser las competiciones 1k de JavaScript o Perl Apocalypse.

Desafortunadamente, el código que se produce en este tipo de competiciones a menudo es muy difícil de entender, ya que por lo general se basa en el uso de diversos hacks y accesos directos. La idea de este post es recoger algunas técnicas para lograr disminuir el número de caracteres utilizados en nuestro código pero sin perder la legibilidad del mismo.

Prerequisitos:

  • Un equipo con Ruby instalado.

Tips:

Veamos algunos consejos para reducir el tamaño de nuestro código Ruby:

  • Asignación masiva Casi todo el mundo conoce esta técnica, la idea es inicializar todas las variables en la misma línea.
  • Crear arrays utilizando la notación %w Podemos crear arrays de strings de la siguiente forma:
  • Utilizar el operador ternario para las operaciones lógicas
  • Utilizar el operador ternario de forma encadenada
  • Usar la notación científica para números grandes Si vas a usar números grandes mejor escribir 1e6 que 1000000.
  • Usar “->” para las expresiones lambdasDesde ruby 1.9 podemos utilizar “->” para la sintaxis de las expresiones lambdas en vez de la palabra reservada “lambda”.
  • Usar “Map” para iterarLos iteradores suelen ser mejores que los bucles, y “map” es mejor que “each”, no solo porque tiene menos caracteres sino porque además crea una nueva proyección del contenido iterado.

Ejemplo:

Para finalizar, a modo de ejemplo, voy a escribir un método que recibe por parámetro dos números y calcula la suma de todos los múltiplos del primer número hasta el valor del segundo parámetro. Sum(3, 14) calculará la suma de todos los múltiplos de 3 hasta 14 (3 + 6 + 9 + 12 = 30).

Primeros pasos con Ruby

Este artículo va a ser el primero de una serie de entradas dedicadas al aprendizaje del lenguaje Ruby. Nos centraremos en los aspectos básicos y levantaremos una pequeña aplicación web utilizando el framework Sinatra.

¿Qué es Ruby?

Ruby es un lenguaje de programación orientado a objetos simple pero muy potente. Fue creado en 1995 por Yukihiro ‘Matz’ Matsumoto, desde entonces Ruby ha atraído a desarrolladores de todo el mundo. En el 2006, Ruby alcanzó reconocimiento masivo, gracias a Rails su framework web por excelencia.

Instalando Ruby

La instalación de Ruby es bastante sencilla, se realiza de forma diferente dependiendo del sistema operativo utilizado.
Si usas linux, te recomiendo que uses Ruby Version Manager (RVM). Para ello pega la siguiente linea de código en tu terminal:

En caso de usar windows lo ideal es usar Ruby Installer. Esta aplicación es un instalador que nos permite instalar Ruby con todo lo que necesitas a través de un asistente.
Si usas Mac puedes usar RVM al igual que en linux, o usando Homebrew , con el siguiente comando:

Para comprobar que todo funciona correctamente, abrimos la terminal y escribimos lo siguiente:

Esto comprueba la versión de ruby que tenemos instalada:

 

Probando la consola interactiva de Ruby

La consola interactiva de Ruby, también conocida como IRB, nos permite experimentar de manera rápida con Ruby. Para ello accedemos a la terminal y ejecutamos lo siguiente:

Debería aparecer algo similar a esto:

Una vez que estamos en la IRB vamos a escribir nuestro primer “hello world” en Ruby, para ello escribiremos lo siguiente:

Salida:

Para salir de la consola interactiva tan solo tenemos que escribir el comando exit.

Escribiendo nuestro primer fichero Ruby

Una vez que hemos escrito nuestro primer trozo de código Ruby en IRB, es el momento de aprender a almacenar nuestro trabajo en un archivo. Para empezar vamos a crear un fichero de texto y lo vamos a guardar como “hello_ruby.rb”, y luego escribimos lo siguiente:

Esto es lo mismo que hemos escrito en la IRB, la diferencia es que la IRB evalúa el código al pulsar enter, y para ejecutar este programa debemos usar el comando “Ruby”. Para ello volvemos a la consola, nos situamos en el directorio en el cual se encuentra nuestro fichero y escribimos lo siguiente:

Debería producirse la siguiente salida:

 

Las gemas de Ruby

Las gemas de Ruby son librerías de código que ayudan a extender Ruby añadiéndole nuevas funcionalidades. Normalmente están escritas en Ruby, aunque algunas veces se usan otros lenguajes como C. Existen miles de gemas disponibles que nos pueden ayudar añadir todo tipo de funcionalidad a nuestros programas.

Sinatra, toma de contacto

Sinatra es una gema, que nos facilita la creación de aplicaciones web, de forma sencilla y muy ligera.
Antes que nada debemos instalar esta gema, para ello nos vamos a la consola y escribimos lo siguiente:

Volvamos a nuestro fichero “hello_ruby” y escribamos lo siguiente:

get ‘/hello’ do
“Hello Sinatra!”
end

“require ‘sinatra'” se usa para cargar la gema sinatra, añadiendo de esta manera añadimos sus funcionalidades a nuestro programa.
La siguiente parte del programa es lo que se conoce en Sinatra como un “manejador” de rutas. El funcionamiento de nuestro código es sencillo, cuando hagamos una petición get HTTP a la ruta “/hello” nuestro programa nos devolverá en el navegador “hello sinatra!”. Vamos a ejecutar nuestro programa para ver que sucede:

Resultado:

Ahora nos vamos a nuestro navegador y escribimos localhost:4567/hello. Si todo ha salido bien podremos ver nuestra aplicación web funcionando.

Recursos

Existe una gran cantidad de recursos para el aprendizaje de Ruby. A continuación se muestra una pequeña selección que he encontrado particularmente útil.

En resumen

En esta primera entrada de esta serie hemos introducido el lenguaje de programación Ruby de manera muy superficial, seguiremos profundizando en próximas entradas. Happy coding!

Hola mundo! en RubyMotion

Este es el primer post de mi nuevo blog, en él voy a tratar temas relacionados con el desarrollo de aplicaciones web y móviles. Actualmente estoy profundizando en varios frameworks para el lenguaje de programación Ruby, así que los primeros post estarán relacionados con el mundo Ruby. En este post voy a explicar como crear un “hello world” en iOS con uno de estos frameworks, Rubymotion.
Rubymotion es un framework comercial basado en MacRuby, creado por Laurent Sansonetti, para construir aplicaciones nativas para iOS usando el lenguaje de programación Ruby.
RubyMotion compila el código Ruby a código máquina (ARM) utilizando un compilador estático basado en LLVM. La API estándar de iOS está disponible en RubyMotion, lo que significa que todas las funciones disponibles para los desarrolladores de Objective-C en la plataforma iOS, también están disponibles para los desarrolladores de Ruby.

Prerequisitos:

  • Un Mac con OS X 10.6 o superior.
  • Instalar el SDK de iOS, actualmente viene con Xcode, el cual puedes obtener gratuitamente a través de la Mac App Store.
  • Una vez instalado necesitas el Command Line Tools, lo puedes descargar a través de las preferencias del propio Xcode.
  • Por último, instalar Rubymotion, el cual puedes adquirir desde aquí.

Hello World!:

Una vez configurados los prerequisitos ya estamos listos para crear nuestra primera app con Rubymotion. Para ello abre el terminal y dirígete al directorio donde quieras crear el proyecto, luego escribe el siguiente comando.

Este comando creará un proyecto RubyMotion en un nuevo directorio llamado HelloWorld. En caso de que el directorio exista, el comando devolverá un error.
Si accedemos al directorio generado por motion create, podemos comprobar que contiene dos ficheros: Gemfile, en el cual vamos a agregar las gemas que vamos usar en nuestra aplicación, el fichero de configuración Rakefile; y tres directorios: app, resources y spec. El directorio app contiene el código de la aplicación, resources contendrá los ficheros de recursos del proyecto, iconos, imágenes o ficheros de sonido y en spec almacenaremos nuestras clases de test.
Nosotros tan sólo vamos a modificar el archivo que se encuentra dentro del directorio app, app_delegate.rb, el cual es creado por defecto. Este implementa la clase AppDelegate, la cual es responsable de controlar la aplicación.

Abrimos el fichero app/app_delegate.rb con el editor que prefieras, yo voy a usar Sublime Text, y agregamos lo siguiente:

Para ejecutar la aplicación volvemos a la terminal y ejecutamos dentro del directorio del proyecto el comando rake.

Si todo ha salido bien veremos como se ejecuta una alerta dentro del simulador de iOS ;).
Saludos y hasta la próxima!