Aprende a utilizar mongodb en node js como un PRO

Las bases de datos relacionales son para pussies. Muerte a MySQL y que vivan las bases de datos NoSQL. Si las grandes tecnológicas dieron el salto en su día por algo será y hoy vamos a aprender a utilizar MongoDB en Node JS!!

Jajajaja realmente la afirmación anterior no es tan tajante, no te vayas a pensar que las bases de datos relacionales han muerto para dar paso a este nuevo tipo de concepción. Eso es falso y si hay algún recruitmen de consultora que te lo dice huye rápido de su despacho.

Estos dos tipos de bases de datos están pensadas para solucionar problemas diferentes. Ya hice un artículo en el que hablaba de las diferencias entre MySQL y MongoDB y que puedes leer aquí así que échale un vistazo antes de utilizar MongoDB en Node JS 😉

Cómo instalar MongoDB en nuestra máquina

El primer paso como es lógico será instalar MongoDB en nuestra máquina. No quiero entrar mucho en detalle porque en la página de la comunidad de mongodbspain esta muy bien explicado así que me voy a limitar a dejar los enlaces:

Una vez lo tengas instalado hay un punto clave que tienes que tener en cuenta.

Para utilizar MongoDB en tu máquina es necesario que el demonio esté ejecutándose. Obviamente al igual que con otras bases de datos pero con MongoDB lo tienes que levantar tu mismo.

En la documentación de mongodbspain está profundamente ampliado pero quédate con los siguientes comandos:

$ mongod --config /usr/local/etc/mongod.conf

Este comando ejecuta el demonio y si le añades el flag –fork harás que mongo corra en segundo plano.

$ mongod --config /usr/local/etc/mongod.conf --fork

Si quieres hacer que mongo se ejecute de manera automática cuando enciendes el ordenador lanza los siguientes comandos.

//Iniciar el proceso principal mongod de MongoDB al iniciar sesión:
$ ln -sfv /usr/local/opt/mongodb/*.plist ~/Library/LaunchAgents
 
//Iniciar MongoDB ahora en background y dejarlo en ejecución
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mongodb.plist

Bien, con esto anterior ya habrás configurado esta base de datos no relacional y orientada a objetos en tu máquina. Ahora viene lo divertido y vamos a ver como utilizar MongoDB en Node JS.

Cómo utilizar MongoDB en Node JS

El primer paso para utilizar mongodb en node js es crearnos una base de datos, para ello abrimos una terminal y escribimos mongo. Esto nos conectará con el sistema de base de datos.

A diferencia con MySQL en la que para crear una nueva base de datos teníamos que pelearnos con los CREATE TABLE y definir una estructura con MongoDB eso no pasa.

Una vez conectados tenemos que indicar que queremos usar una base de datos e insertar un registro para que el sistema la construya on-the-fly. Sigue los pasos 😉

$ mongo
> use base-de-datos-de-prueba
> db.albums.insert({id: 1, band: 'Las Bistecs', album:'Oferta'});

Con esto ya habremos creado la base de datos y habremos insertado un nuevo registro en la colección de albums.

Vale ya tenemos lo básico pero… ¿cómo hacemos para conectar MongoDB con Node JS?

Pues eso lo vamos a hacer utilizando Mongoose que es un ORM.

Para el que no conozca qué son y cómo funcionan los ORM le dejo este enlace de la Wikipedia.

Conectar MongoDB a Node JS mediante Mongoose

Para ello vamos a instalar Mongoose tirando del gestor de dependencias NPM. Así pues en la terminal escribimos lo siguiente:

$ npm install mongoose --save

Ya sabéis, el flag –save para que guarde una copia en el directorio node_modules y actualice el package.json.

Una vez se haya instalado deberías tener el entrypoint de tu aplicación node parecido al que voy a poner a continuación. (En el post anterior expliqué cómo organizar un proyecto con node js y qué es eso del entrypoint, échale un vistazo desde aquí)

  • Línea número 3: incluímos el módulo mongoose para poder utilizarlo dentro de nuestra aplicación.
  • Línea número 8: hacemos uso del método connect. Este método acepta dos argumentos. El primero es la cadena de conexión a dónde tenemos que conectarnos y el segundo es la función callback. Fíjate en la cadena de conexión. Lo primero que hay que indicar es el protocolo (mongodb en este caso), después el nombre del host donde esté la base de datos (localhost, nuestra máquina local en este caso), después el puerto por defecto de MongoDB (27017 en este caso) y por último la base de datos a la que queremos conectarnos (base-de-datos-de-prueba en este caso)
  • Línea número 9: comprobamos si ha habido algún error de conexión y en caso contrario levantamos el servidor node

Y ya está, eso es todo.

Con esto ya podrás utilizar MongoDB en Node JS, es lo mínimo en cuanto a configuración se refiere. En el próximo artículo veremos cómo hacer las operaciones típicas de lectura, escritura, actualización y borrado sobre nuestro proyecto.

Y ya sabéis, si tenéis algún tipo de dudas o preguntas hacédmelas llegar en la sección de comentarios o a través del siguiente banner de Twitter.

[xyz-ips snippet=”FAQS-GORKAMU-TW-YELLOW”]

Hala a cascarla!

Anuncios

Cómo organizar un proyecto Node.js según MVC

Que Node.js sea una moda de desarrollo (esperemos que haya venido para quedarse) no lo discute nadie y como no podía ser de otra forma en esta serie de artículos vamos a aprender a trabajar con este entorno. Ya hemos visto los conceptos básicos en un post previo pero en este nuevo artículo vamos a ver como organizar un proyecto node.js siguiendo un patrón de diseño muuuuy conocido, el MVC.

Cómo organizar un proyecto Node.js de la mejor forma

Antes de entrar en materia deberías saber qué son los patrones de diseño.

Un patrón de diseño es un conjunto de reglas que nos indican cómo tenemos que organizar los ficheros de un proyecto para que este sea efectivo, reutilizable y escalable y siempre buscando la solución a un problema dado.

Existen miles de patrones de diseño diferentes y cada uno se ajusta a una casuística dada pero pongo la mano en el fuego si digo que en el ámbito del desarrollo web el que mas se utiliza es el patrón MVC.

Todos los que trabajamos con frameworks web como podrían ser Spring, Symfony o Angular (por citar diferentes tecnologías…) sabemos qué es el patrón Modelo-Vista-Controlador pero si has caído nuevo en este artículo y no sabes muy bien de que te hablo te recomiendo que le eches un vistazo a esta página de la Wikipedia.

Una vez que te hayas leído la entrada y entiendas el concepto de patrón MVC vamos a empezar a organizar nuestro proyecto Node.js 🙂

Definiendo la estructura básica de la aplicación

Deja de preguntarte ya cómo organizar un proyecto Node.js y dirígete al directorio que contendrá tu aplicación.

Ahí inicializaremos el proyecto con el comando npm init con el objetivo de crear el package.json que definirá toda nuestra aplicación. Cuando el comando termine y tengamos los ficheros básicos creados vamos a montar los siguientes directorios: /controllers,  /models y /routes

  • Directorio controllers: aquí guardaremos los ficheros que se encargarán de controlar cada parte de nuestra aplicación. Tenemos que ser capaces de abstraernos y saber atomizar la app y en consecuencia crear un controlador para cada una de estas partes. Los controladores contendrán la lógica de negocio.
  • Directorio models: en este directorio vamos a guardar lo que son los modelos de datos de la aplicación. Si tu aplicación trata sobre discos de música aquí crearemos una entidad con todas sus propiedades y métodos. Es lo que en Symfony se conoce como Entidad, en Java una POJO y en PHP una POPO.
  • Directorio routers: para hacer mas mantenible la exposición de rutas de cada controlador de tu aplicación en este directorio vamos a guardar la definición de estas rutas. Piensa que si estas construyendo una API a poco que sigas el modelo de API Restful como mínimo vas a tener 4 rutas por cada controlador (método GET, método POST, método PUT y método DELETE)

Una vez creados los directorio mínimos pasaremos a crear el fichero entrypoint (index.js) y el fichero de configuración de la aplicación.

En el fichero que hace la función de punto de entrada de nuestra aplicación, el fichero index.js, vamos a poner la configuración del servidor y a levantarlo.

Pero… y ¿cómo podemos hacer que este fichero “llame a otros”?

Pues como se ve en la línea numero 3 del script haciendo uso del require le estamos indicando a node que queremos que nos cargue el core de nuestra aplicación pero con esto no es suficiente ya que tenemos que indicar algo mas que veremos a continuación.

Este fichero es en el que configuraremos todos los aspectos de nuestra aplicación.

Como puedes leer, en el script estamos cargando el framework express, cargamos el middleware body-parser y si te fijas en la línea 7 cargamos el archivo de rutas.

A raíz de la pregunta anterior, si queremos hacer que un fichero “llame a otro”, a parte de hacer uso de la sentencia require en el fichero destino tenemos que exportarlo mediante el mecanismo de module.exports (última línea)

Una vez exportado ya podremos utilizarlo en cualquier parte de la app siempre y cuando lo carguemos con require.

Vale, hasta aquí todo correcto. Vamos a ver ahora como organizar un proyecto Node.js con sus rutas, sus controladores y sus modelos de datos.

Definiendo uno de los controladores de nuestra app

El controlador es el encargado de contener toda la lógica de negocio de nuestra aplicación. Tiene que actuar como una caja negra, le entran unos datos, los procesa y nos devuelve otros datos.

Hay varias formas de plantear y crear un controlador pero para el ámbito organizativo (no programático) de este artículo vamos a hacer funciones en lugar de clases, solo tenemos un controlador.

Fíjate en la estructura y no en el código, de hecho hace mas bien poco o nada.

Este es sería un controlador típico en un modelo de CRUD en el que implementamos las cuatro operaciones típicas, lectura de datos, creación, actualización de datos y borrado.

Cada función de este controlador hará una tarea diferente por lo que decimos que serán funciones atómicas.

Peeeeero lo importante de toda esta película esta al final del script. Fíjate que al igual que hacíamos en el fichero app.js, en este estamos exportando las funciones que nos interesan para que puedan ser llamadas desde otro fichero, como por ejemplo desde el fichero de definición de rutas.

pERO CUANTAS RUTAS TIENE ESTE TIO???

Ha llegado el momento de definir las rutas de nuestra aplicación.

Y al igual que en el fichero anterior habíamos creado cuatro funciones (bueno en realidad 5 pero dos de ellas internamente sirven para lo mismo, getAlbum y getAlbums, lectura de datos) ahora vamos a crear también 4 rutas y cada una de ellas matcheará con un método HTTP diferente.

Para que no te pierdas este va a ser el esquema de la relación métodos HTTP (API Restful) y funciones:

  • Método GET -> getAlbum() y getAlbums()
  • Método POST -> saveAlbum()
  • Método PUT -> updateAlbum()
  • Método DELETE -> delteAlbum()

Lo mas importante y lo primero de todo es crear el fichero album.js en el directorio de /routes.

Mira bien:

  • Línea número 3: cargamos el framework express.
  • Línea número 4: cargamos el controlador de álbum.
  • Línea numero 5: nos traemos el sistema para definir rutas del framework.
  • Línea 7: definimos una ruta GET para la función getAlbum().
  • Línea 8: definimos una ruta GET para la función getAlbums().
  • Línea 9: definimos una ruta POST para la función saveAlbum().
  • Línea 10: definimos una ruta PUT para la función updateAlbum().
  • Línea 11: definimos una ruta DELET para la función deleteAlbum().

Y con esto ya tendríamos la estructura básica y el artículo montado sobre como organizar un proyecto Node.js.

Por supuesto que faltan muchas cosas, de primeras el modelo de datos (eso lo dejaré para cuando empecemos con MongoDB) pero podríamos meter un directorio para la realización de test unitarios, otro para las vistas en caso en que quisiéramos ampliar la API… otro para utilidades, no sé…

El patrón MVC mínimo sería este, a partir de aquí tu ya Feel Free

Y nada, si tenéis algún tipo de preguntas no dudéis en hacérmelas llegar en los comentarios o a través del siguiente banner de Twitter.

[xyz-ips snippet=”FAQS-GORKAMU-TW-YELLOW”]

Hala a cascarla!

Aprender Node.js – Realizar el primer setup inicial

Toca renovarse. Después de muchos años usando una tecnología es normal que te hayas podido quedar un poquito estancado en cuanto a los referentes del mercado aunque por otro lado es muy seguro que hayas conseguido dominar esa tecnología y hoy vamos a empezar a aprender Node.js.

En el mundo tecnológico existe una máxima que dice que aproximadamente cada dos años se duplica el número de transistores que soporta un microprocesador. Hablo de la Ley de Moore. Esto es vertiginoso, trata de imaginar lo que supone, la tecnología avanza a pasos exponenciales y con las tendencias de desarrollo pasa casi lo mismo.

Lo que hoy sirve para desarrollar mañana ya no y por eso es muy importante que no caigamos en nuestra zona de comfort y salgamos a aprender lenguajes y tecnologías nuevas.

Por eso el sentido de estos artículos, vamos a aprender a programar con Node.js bajo una configuración de MEAN Stack y para que no nos perdamos empezaremos por el principio de todo.

¿Qué es Node.js?

Antes de entrar en materia y aprender Node.js deberíamos saber como hemos llegado hasta aquí, conocer un poquito la historia del desarrollo de aplicaciones web (tema en el que estoy especializado)

Tipicamente cuando desarrollabas una aplicación web dividías el trabajo en dos mundos. Por un lado tenías la parte Frontend y por otra la parte Backend. Normalmente se empezaba a trabajar primero en el Backend con lenguajes típicos de Backend como PHP, ASP o Java.

Ahí definías tus modelos de datos, tus controladores, servicios y básicamente la lógica de tu aplicación.

Por otro lado y de forma paralela había que ir construyendo la parte Frontend con lenguajes típicos como HTML, CSS y Javascript.

Ahí definías la parte visual, la estructura y la lógica de cara al cliente de tu aplicación/página web.

Esta dicotomía en el desarrollo de una aplicación/página web hizo que a medida que avanzaba la tecnología el mercado y los puestos de trabajo se dividieran en estas dos vertientes.

O te peleabas con la parte visual de la página o te peleabas con las tripas de la aplicación y por lo general el que trabajaba en el back no se entrometía en el front y viceversa. Esto generó muchos puestos de trabajo y muchos profesionales especializados en su “parte”.

Pero y aquí es cuando la matan, llegó un día en el que se “estandarizó” un lenguaje de programación para unir estos dos mundos tan diferentes.

Una herramienta que te permitía con el mismo lenguaje de programación trabajar en la parte Frontend y en la parte Backend. Hablo de Javascript y de Node.js.

Pero para entender qué es Node.js vamos a ver su definición formal de la Wikipedia:

Node.js es un entorno en tiempo de ejecución multiplataforma, de código abierto, para la capa del servidor (pero no limitándose a ello) basado en el lenguaje de programación ECMAScript, asíncrono, con I/O de datos en una arquitectura orientada a eventos y basado en el motor V8 de Google

Esto quiere decir que con Node.js vamos a tener la misma o parecida capacidad de desarrollo que tienen otros lenguajes de programación del lado del servidor pero trabajando con Javascript.

Suena fantástico para todos aquellos Frontend que quieren dar el salto a las aplicaciones de servidor ya que no van a necesitar aprender un lenguaje nuevo sino que se pueden adaptar a Node.js con su experiencia previa y con una de aprendizaje bastante baja.

¿Pero qué ventajas tiene aprender Node.js como para plantearme hacer el cambio?

Pues bueno, uno de sus puntos fuertes es la concurrencia. A diferencia de PHP o Java en el que cada petición genera un hilo de ejecución, con Node.js te tienes que despreocupar de eso ya que funciona de forma asíncrona con un único hilo de ejecución orientado a eventos.

Cuando llega una petición esta se pasa a un pool de eventos. Este pool va consumiendo las peticiones sin bloquear la I/O mientras que el script que lanzó la petición sigue trabajando.

Solo cuando el pool ha terminado de procesar la petición envía un evento que es capturado por el script original y ordena que se ejecute algo definido en la función de callback.

Si quieres profundizar en el funcionamiento interno de Node.js este enlace (ojo, en inglés) te ayudará a entender como funciona toda esta película 😉

http://www.journaldev.com/7462/node-js-architecture-single-threaded-event-loop

Algo que en mis años como programador Symfony siempre me ha encantado es el sistema de bundles que existe.

Un bundle no deja de ser un paquete de código atómico y reutilizable que solventa un problema y que cualquiera puede instalar en su proyecto sin necesidad de reinventar la rueda.

Como no podía ser de otra forma Node.js también tiene algo parecido y son los módulos.

Existen módulos básicos para el manejo de ficheros, de protocolos de red, de Timers, de Streams… pero también existen otros módulos desarrollados por la comunidad y que puedes usar en tu proyecto sin ningún tipo de problemas.

En este enlace puedes ver un listado de módulos típicos y útiles en una aplicación Node.js

https://www.codementor.io/ashish1dev/list-of-useful-nodejs-modules-du107mcv3

Estas dos características y la potencia que tiene el escribir en el mismo lenguaje todas las partes de tu página/aplicación web deberían ser suficientes como para que te plantees el aprender Node.js pero por si todavía tienes dudas aquí puedes ver una comparación de rendimiento entre una aplicación Java y otra construida con Node.js.

Cómo instalar Node.js

Instalar Node.js es muy sencillo, ya estés utilizando Windows, Linux o Mac OS lo único que tienes que hacer es dirigirte a su página de descargas y seleccionar el paquete que te interesa.

Una vez entres en este enlace podrás decidir si descargarte una versión LTS de largo soporte o la última versión liberada. Si vas a utilizar Node.js para producción te recomiendo que te descargues la versión LTS.

Su instalación es muy sencilla, te aparecerá un asistente y realmente tendrás que ir haciendo click en el botón de siguiente (a no ser que quieras configurar algo mas avanzado como el directorio de instalación…)

Junto con Node.js se te va a instalar también NPM que es el gestor de paquetes que utilizamos para manejar las posibles dependencias que tendrá nuestro proyecto.

Cuando haya terminado la instalación podemos comprobar la versión tanto de Node.js como de NPM con los siguientes comandos:

$ node -v 
v7.9.0

$ npm -v
4.2.0 

Si por un casual ha salido una versión nueva de NPM y queremos actualizarnos tenemos estos dos comandos:

$ npm install -g npm
$ npm update -g npm

El flag -g es para instalar/actualizar a nivel global.

Hasta aquí la parte mas sencilla de empezar a aprender Node.js 🙂

Primer script de consola en Node.js

En el camino al zen de aprender Node.js estamos en el primer nivel. Ya hemos configurado todo lo necesario para poder correr aplicaciones hechas con este entorno de desarrollo y lo que vamos a hacer a continuación es crear una pequeña aplicación de prueba.

Al ser Node.js un entorno para programar aplicaciones javascript del lado del servidor parece razonable que todos nuestros scripts sean scripts JS, ¿no?

Personalmente me encantan las aplicaciones de consola, ya sean desde procesos en bash y/o C, C++, los potentes comandos de Symfony o los scripts en Javascript. No hay límite, se puede construir lo que uno quiera pero para este ejemplo vamos a escribir una calculadora sencilla que acepta tres parámetros de entrada.

En el directorio en el que se encuentre nuestro workspace vamos a crear el siguiente fichero:

Vamos a explicar las líneas mas significantes del script:

  1. La primera línea, la declaración del ‘use strict’, sirve para indicar a los navegadores que en el momento de interpretar el código sean mas “estrictos” a la hora de permitir ciertas licencias al programador como por ejemplo el uso obligatorio en la declaración de variables o la captura de errores y excepciones. En definitiva, hacer que tu código sea mejor. Para mas información échale un vistazo a este enlace.
  2. Con la siguiente línea estamos capturando los argumentos pasados en la ejecución del script. Para ello invocamos al método process.argv.slice(2) y lo guardamos en una variable que será un array. El porqué del número 2 dentro de la función slice tiene significado. Piensa en arrays, cuando ejecutemos el script en la terminal, el primer nodo del array estará reservado para el interprete (node), el segundo nodo del array será para el script (calc.js) y el tercer nodo para los argumentos a pasar al script.
  3. El resto de líneas creo que no hace falta explicarlas, javascript y programación básica, asignaciones, casting de datos y sentencias de control. Primero de programación oye!

Para ejecutar este primer script tendremos que hacerlo de la siguiente forma:

$ node calc.js 1 + 4

Decir que los parámetros se tienen que pasar separados, es decir, primer parámetro un número, segundo parámetro un operador y tercer parámetro otro número.

Ah! y son recibidos como strings así que acuérdate siempre de hacer la conversión de tipos (si es que tu script lo necesita)

Hala a jugar! 😛

¿Qué es y cómo instalar Express en Node.js?

Otro tema interesante y necesario en el proceso de aprender Node.js es el uso de Express. ¿Pero qué es Express me preguntaréis…?

Bueno pues Express es una infraestructura para aplicaciones hechas en Node.js que nos provee un conjunto de utilidades como el enrutado de la aplicación, el uso del protocolo HTTP y la capacidad de crear APIs Restful entre otras cosas. A día de hoy no concibo una aplicación node sin express.

Para instalar Express en nuestro proyecto tendremos que echar mano de la terminal y del gestor de dependencias NPM, para ello escribimos lo siguiente:

$ npm install express --save

Y ya está, una vez terminé la instalación ya podremos utilizar Express en nuestro proyecto.

El flag –save indica a NPM que guarde una copia del paquete a instalar dentro del directorio del proyecto y que lo añada a la lista de dependencias. Util cuando le pasamos el proyecto a un nuevo miembro del equipo de desarrollo y tal…

Desde este enlace puedes consultar todas las referencias que nos provee este framework de desarrollo.

¿Qué es y cómo instalar BodyParser?

Es un middleware (es una capa que se ejecuta antes de nuestro código) que nos va a permitir manejar y parsear en objetos JSON las request que hagamos a nuestra aplicación.

Pero no solo va a convertir a objeto JSON la request sino que podemos configurarlo para que haga un parseo a RAW, a texto plano o a lo que en inglés se conoce como “URL-encoded form body” (vale, no se el equivalente en castellano xD)

En su repositorio de github tienes un montonazo de información útil, te recomiendo que le eches un vistazo y que lo utilices en tus proyectos si o si.

Para instalarlo hay que utilizar el gestor de dependencias NPM tal que así:

$ npm install body-parser

Y ya está!

¿Qué es y cómo instalar Nodemon?

¿Sigues queriendo aprender Node.js? Pues una de las utilidades que vas a necesitar en tu camino al zen es Nodemon. ¿Y qué es me preguntarás?

Pues Nodemon es un demonio (o un daemon tal y como se conoce en informática a este tipo de programas) que te permite recargar toda tu aplicación web al detectar un cambio en tus ficheros sin necesidad de tener que parar a mano el servidor y volver a levantarlo. Lo hace automáticamente!

Es muy sencillo de instalar como de utilizar, para ello tecleamos los siguiente en la terminal:

npm install -g nodemon

Cuando acabe la instalación y para añadirlo a nuestro proyecto podemos configurar la sección de scripts de nuestro package.json.

Esta sección nos permite definir nuestros propios comandos dentro de la aplicación. Me explico: si por ejemplo tenemos una suite de test unitarios que se ejecutan y generan un report de cobertura mediante tres comandos diferentes (por ejemplo) desde esta sección podríamos definir un “alias” para toda la secuencia de comandos y así lanzando uno solo se ejecutaría todos.

Pero vamos a ver el ejemplo de como añadir Nodemon para que se levante cada vez que arrancamos el servidor de nuestro proyecto:

"scripts": {
 "start": "nodemon index.js",
 "test": "echo "Error: no test specified" && exit 1"
 },

El primer comando que hemos definido es el start indicándole a nodemon que mire el entrypoint index.js y así pues cuando lancemos un npm start sobre la raíz de nuestro proyecto se levantará de manera automática este demonio 😉

Crear un servidor con Node.js

Ahora si que si. Ya estamos preparados para aprender Node.js de verdad. Hasta este punto hemos estado instalando lo básico para comenzar a trabajar pero a partir de aquí ya si que vamos a bajar al barro y vamos a codificar nuestra primera aplicación 🙂

Y lo primero que tenemos que hacer es lanzar el comando npm init para que se nos genere el fichero package.json. Este fichero es el que contiene el manifiesto de nuestra aplicación, algo así como un resumen. Aquí se define desde el autor, la versión, la licencia de la aplicación, las dependencias tanto de desarrollo como de producción entre otras cosas.

Uno de los puntos que nos va a preguntar la consola cuando lancemos el comando npm init es por el entrypoint, es decir, el punto de entrada que ejecutará el servidor web. Por defecto nos lo deja en index.js dentro de la raíz del proyecto pero si por cambios organizativos en el directorio de la aplicación este punto de entrada se encuentra en otro lugar podemos indicárselo perfectamente.

Se me ha olvidado decir que con Node.js no necesitamos instalar un Apache o un Tomcat como hacíamos con PHP o Java si no que ya nos ofrece métodos para crear y levantar un servidor web escribiéndolo con Javascript.

Mira el script anterior, es un ejemplo muy sencillo de servidor hecho con Node.js y la definición de una ruta GET. Pero vamos a explicarlo poco a poco.

  1. La primera línea es la declaración del modo estricto tal y como hemos comentado antes.
  2. La segunda línea es la inclusión de Express en el script. A partir de ahora podremos utilizarlo en toda la aplicación.
  3. Siguientes líneas vamos a obviarlas de momento.
  4. En la línea 13 del script definimos una ruta en la raíz principal. Esta ruta aceptará peticiones GET. Lo primero que hay que indicar es la URI de la ruta y después una función de callback a la que le pasamos los objetos request y response.
  5. En la línea 20 levantamos el servidor y hacemos que escuche por el puerto definido en su primer argumento. El segundo argumento es para la función callback que podemos utilizar para imprimir por consola el estado del servidor (o hacer otras cosas interesantes!)

Ahora si todo ha ido bien y nos dirigimos a http://localhost:3000 deberíamos ver lo siguiente.

Eso significa que tanto la instalación de Node.js como sus dependencias y que el proyecto están funcionando correctamente.

A partir de aquí nos queda ir aprendiendo el resto de componentes de esta tecnología pero será poco a poco en otros artículos

Si tienes algún tipo de preguntas o tan solo quieres ponerme a parir no dudes en hacerme llegar tus comentarios a través del siguiente banner de Twitter.

[xyz-ips snippet=”FAQS-GORKAMU-TW-YELLOW”]

Hala a cascarla!

Entendiendo el funcionamiento del protocolo HTTP

Pongámonos técnicos para conocer y entender uno de los protocolos mas importantes y que se han vuelto esenciales en nuestra vida. ¿Protocolos de actuación en caso de emergencia? Bah eso son chorradas, hablamos de Internet y cómo el HTTP ha conseguido que dependamos completamente de el.

¿Qué narices es el protocolo HTTP?

Buena pregunta mi pequeño padawan. Y según su definición mas técnica de la Wikipedia:

HTTP, también conocido como Protocolo de Transporte de Hipertexto es un protocolo en la capa de aplicación del modelo OSI que se utiliza para transmitir prácticamente todos los archivos y datos de Internet, ya sean archivos HTML, imágenes, resultados de consultas u otras cosas.

Pues así es. Casi todo lo que recibes en tu smartphone, desde la foto de la chica que te gusta de Tinder hasta los mensajes de Whatsapp de tu madre llegan a través este protocolo.

Podríamos llegar a imaginar que el HTTP es como si fueran las carreteras del Interné pero al tratarse de un protocolo es mas bien un manual, un tutorial, una serie de reglas de cómo se tiene que comportar la información cuando viaja desde un punto A a un punto B.

Por lo general, HTTP se realiza a través de unos canales de comunicación llamados sockets TCP/IP.

Pero párate a pensar en cómo funciona el HTTP, no hace falta que entres en cuestiones técnicas, tan solo trata de imaginar que pasa cuando ves la foto de la chica del Tinder.

Cuando abres la aplicación en tu smartphone y quieres consultar el perfil de una usuaria tu móvil pide la información a un sitio indefinido de la “nube”, esa información se procesa y te llega una respuesta de ese sitio indefinido en forma de foto de perfil y demás información relativa a esa usuaria.

Esa información no te llega por arte de magia sino que alguien te la da cuando la pides.

Pues bueno siguiendo con el paralelismo, ya sea un navegador web o una aplicación, es un recurso que se comporta como cliente HTTP porque envía solicitudes a un servidor HTTP que se encarga de enviar respuestas al cliente.

EL GRAN ORÁCULO

A no ser que se indique otra cosa, toda esta información va a llegarte por el puerto 80 que es el estándar y el predeterminado que se utiliza en HTTP.

¿No sabes qué es un puerto? Imagínatelo como un gran puerto marítimo en el que van llegando barcos y el número indica el muelle de descarga y el tipo de mercancía que espera recibir. En el muelle 443 un barco traerá llaves, en el muelle 22 zapatos y en el muelle 80 libros y fotos.

Pues eso son los puertos informáticos (a muuuuuy grandes rasgos)

Una vez aclarados los conceptos básicos del HTTP hay que saber que existen diferentes formas de pedir y dar esta información.

Paradigma del cliente y del servidor

Para que toda esta red funcione es necesario que haya siempre alguien escuchando lo que necesitamos y aquí es cuando entra este modelo.

Como ya hemos visto antes, tu ordenador, tablet y smartphone sois los clientes y al otro lado hay un servidor que te facilita información. A nivel técnico cada uno de los extremos finales lo denominamos Hosts.

El cliente inicia el contacto con el servidor para solicitar un servicio, una vez que le llega la petición al servidor, este hará X operaciones con esa petición y al final de todo el servidor proporcionara una respuesta con la información pedida.

Puede ser un email, una página web, una fotografía o el acceso a un servicio expuesto.

Paradigma de entre iguales

También conocido como Peer to Peer o también conocido como “mierda, el eMule no me descarga”.

Cuando antes teníamos por definición una figura que siempre pedía y otra que siempre daba, con este paradigma todas las figuras piden y dan por igual.

Es como si en lugar de ir a una cafetería tradicional fueras a otra con autoservicio.

Con este paradigma se entiende que cada host puede entrar y salir de la red en cualquier momento, por eso pasamos a convertirnos en clientes y servidores a la vez.

Una ventaja crucial de este tipo de red es la escalabilidad.

Pero el protocolo HTTP también admite uno o mas protocolos de aplicación que utilizamos constantemente y sin saberlo.

Por ejemplo, cuando enviamos un email lo hacemos a través del protocolo SMTP. Cuando llamas a tu madre a través de Skype estas utilizando el protocolo de VoIP.

Así que para que termine de quedar claro, el protocolo HTTP puede utilizar muchos otros protocolos que van a definir el tipo de mensaje y la sintaxis que van a utilizar así como la información de los resultados.

Identificando aplicaciones

Cuando el proceso de comunicación tiene que ser realizado hay dos cosas que son importantes conocer.

  1. Dirección IP: es una dirección única y númerica del ordenador que va a ejecutar el proceso.
  2. Número de puerto: por dónde va a realizar la conexión. La combinación de dirección IP y número de puerto es lo que conocemos como socket.

Así pues volviendo al ejemplo del puerto marítimo y los barcos, cuando una empresa importa mercancías y contrata a un capitán de barco, este tiene que saber a que ciudad dirigirse y en que muelle atracar para cargar los productos para después saber a que ciudad de origen volver y en que muelle descargar.

Con esto, para que una conexión HTTP salga satisfactoria es necesario conocer los siguientes 4 datos:

  1. Dirección IP del cliente
  2. Número de puerto del cliente
  3. Dirección IP del servidor
  4. Número de puerto del servidor.

El protocolo HTTP utiliza el protocolo TCP para crear una conexión fiable entre el cliente y el servidor y todos los comandos que se utilizan dentro de este protocolo se envían en texto plano a través del puerto 80 (por lo general)

Hemos dicho antes que las direcciones IP son necesarias para establecer conexiones y también hemos dicho que son direcciones numéricas. Pero ¿cómo es posible que todos los días nos conectemos a facebook sin saber ni conocer a que dirección numérica tenemos que conectarnos?

Es una pregunta razonable ya que a lo mejor nunca en tu vida has visto una dirección IP.

Pues aquí es cuando entra otro actor mas en todo este panorama y se trata de los servidores de DNS. Algo así como el abuelete del pueblo que cuando paras con el coche para preguntar por una dirección sabe guiarte a la perfección hasta tu destino.

Un servidor de DNS se ocupa de traducir un nombre de dominio, en este caso facebook.com, a una dirección IP.

Si no existieran los servidores DNS las pasaríamos puta para navegar por Internet…

Las cosas se complican. Cuando antes solo tratábamos con el servidor para pedirle la foto de la chica con la entrada de los servidores DNS el camino hacia el recurso se alarga. Ahora tenemos que hacer lo siguiente:

  1. El cliente pregunta al servidor de DNS por la dirección de un nombre de dominio (wikibooks.org)
  2. El servidor DNS traduce wikibooks.org y le devuelve al cliente el valor 91.198.174.192
  3. El cliente monta una petición con esa dirección IP y la envía al servidor
  4. El servidor procesa la petición y devuelve una respuesta al cliente.

Internamente para una petición de consulta se hace lo siguiente:

GET 91.198.174.192/wiki/Communication_Systems/HTTP_Protocol HTTP/1.1

La primera parte de la consulta, la palabra “GET” es el comando HTTP a ejecutar. La segunda parte es la dirección URL del recurso que pedimos y la última parte es la versión del protocolo que va a utilizar la petición.

Cuando el servidor recibe la petición lo primero que va a hacer es respondernos si ha recibido bien o no la petición. Por lo general esperaremos siempre lo siguiente:

HTTP/1.1 200 OK

Esto significa que ha recibido la petición bien, pero si encuentras por ejemplo uno de los siguientes códigos ya puedes echarte a temblar…

HTTP/1.1 404 Not Found
HTTP/1.1 503 Service unavailable

Al igual que con la petición, la primera parte es la versión del protocolo a utilizar y la segunda parte de la respuesta es el número del código de respuesta junto con su mensaje en formato humano.

La web

Lo que conocemos como la Web o Internet no es mas que una gigantesca red interconectada de servidores que sirven recursos. Ya hemos comentado que esos recursos pueden ser de muchos tipos diferentes pero los típicos, las páginas web, no son mas que documentos escritos en HTML a los que accedemos a través de una URL.

Esquema básico del funcionamiento de la web
Esquema básico del funcionamiento de la web

Según los diferentes paradigmas, el usuario envía una solicitud de una página a un servidor dado a través de un navegador. Cada navegador tiene una firma a la que conocemos como User Agent que da información útil al servidor sobre quién ha hecho la petición.

Así pues, el HTTP es el protocolo de la capa de aplicación del modelo OSI que funciona con la tecnología Cliente-Servidor.

El servicio de transporte HTTP/TCP utiliza sockets para transferir datos.

El cliente inicia una conexión TCP utilizando sockets en el puerto 80 del servidor. A continuación el servidor acepta la conexión desde el cliente.

Nuevamente el cliente pide los recursos necesarios, en este caso los documentos HTML, las imágenes, los estilos… Una vez que el servidor le devuelve esta información, la conexión TCP es cerrada.

Como HTTP es un protocolo sin estado, no mantiene la información del usuario sobre las solicitudes anteriores. Así pues, este protocolo es muy simple pero si como programador quieres mantener el histórico de peticiones es posible que se te complique un poco la tarea.

Conexiones HTTP

Una página web está formada por una URL y por diversos objetos. Como puede haber uno o varios objetos o URLs, el tipo de conexión HTTP determina el orden en el que se solicitan los objetos.

Dado que la tecnología avanza a ritmo vertiginoso, el protocolo HTTP no podía ser menos y constantemente evoluciona para mejorar su rendimiento.

Existen diferentes tipos de conexiones HTTP:

  • HTTP/1.0: conexiones no persistentes. Esta conexión requiere que cada objeto sea entregado por una conexión TCP individual. Suele ser habitual un retardo en las entregas.
  • HTTP/1.1: conexiones persistentes. También llamadas HTTP keep-alive o HTTP Reuse. La idea es usar una misma conexión TCP para enviar y recibir múltiples peticiones y respuestas.

La principal diferencia entre una conexión persistente y otra que no es el número de conexiones TCP que se necesitan para transmitir los objetos.

Step by step de las conexiones
Step by step de las conexiones

Pero esto aún se puede enredar mas ya que dentro de las conexiones persistentes podemos encontrar la siguiente clasificación:

  • HTTP persistente sin pipelining: en este caso cada cliente tiene que esperar que el objeto previamente solicitado sea recibido antes de emitir una nueva solicitud para otro objeto.
  • HTTP persistente con pipelining: se permite que el cliente envíe todas las solicitudes de golpe por lo que el servidor las recibirá, las encolará y e irá devolviendo las respuestas una a una. Este es el método predeterminado en HTTP/1.1

Modelando el tiempo de respuesta

En todo este mundo de las conexiones HTTP entra en juego otro concepto clave y es el RTT. El RTT, conocido como Round Trip Time, es el tiempo transcurrido al enviar un paquete a un host remoto y recibir una respuesta.

Es un tiempo que utilizamos para medir el retardo en la red en un momento dado.

Este tiempo de respuesta indica el tiempo requerido para iniciar la conexión TCP y la siguiente respuesta o petición de vuelta que le cuesta llegar a un recurso.

Fíjate en la siguiente para entenderlo mejor.

Explicación de tiempo de respuestas durante el protocolo HTTP
Explicación de tiempo de respuestas durante el protocolo HTTP

Formato de los mensajes HTTP

Recapitulemos antes de desarrollar mas el tema.

Lo que conoces como Internet está basado en diferentes protocolos que indican cómo ha de enviarse la información.

Cuando tu quieres acceder a una página web, sigamos con el ejemplo de facebook, lo primero que va a hacer tu ordenador es enviar un mensaje a unos servidores DNS para preguntarles cual es la dirección IP de la página de facebook.

Una vez conseguida esa dirección IP, lo siguiente que va a hacer tu ordenador es enviar un mensaje a esa IP preguntando si puede conectarse, en caso de que el servidor conteste que si, que puede conectarse, tu ordenador va a enviar un segundo mensaje pidiendo el recurso solicitado y el servidor devolverá otro mensaje con ese recurso.

Bien, si hasta aquí esta todo claro pasemos a ver el formato de estos mensajes.

Existen dos tipos de mensajes, los mensajes de las peticiones y los mensajes de respuesta.

Mensajes de peticiones

Un mensaje de solicitud y/o petición tiene tres partes separadas por espacios, la primera el método o acción a realizar, la segunda el recurso pedido y la tercera la versión del protocolo que se va a utilizar.

El formato de los mensajes se escribe en ASCII para que pueda ser entendido por las personas.

Por ejemplo:

GET /path/to/the/file.html HTTP/1.0

El método GET es el mas utilizado, aunque no el único. Esto le indica al servidor que quieres obtener un recurso. La parte de la URL también se denomina URL de solicitud y el protocolo ha de estar siempre en mayúsculas.

A continuación puedes ver el esquema completo de un mensaje de petición.

Esquema de mensaje de petición HTTP
Esquema de mensaje de petición HTTP

Según el esquema, las líneas de cabecera o encabezado incluyen el tipo de navegador, el host, el número de objetos y el nombre del archivo y el tipo de idioma de la página solicitada. Por ejemplo:

Cabecera de una petición
Cabecera de una petición

Llegados a este punto tal vez te preguntes para que sirven el resto de campos del esquema del mensaje de petición ¿no?

Por ejemplo, cuando enviamos información a una página, al rellenar un formulario, esa información viaja en el cuerpo del mensaje bajo el método POST.

Y es que el protocolo tiene diferentes métodos o acciones a realizar.

Mientras que HTTP 1.0 solo tiene los métodos GET, POST y HEAD, la versión HTTP 1.1 tiene los métodos GET, POST, HEAD, PUT y DELETE.

Aunque esto ya se explicará mas adelante.

Mensajes de respuesta

Al igual que con los mensajes de petición, las líneas de respuesta de los mensajes HTTP también tienen tres partes separadas por espacios; la versión HTTP, un código de estado dando el resultado de la solicitud y una frase en inglés del código de estado.

Mensaje de respuesta HTTP
Mensaje de respuesta HTTP

Esta primera línea también se llama línea de estado.

Hay muchos códigos de estado que trataremos en un artículo a parte pero a continuación te dejo un par de ellos:

  • 200 OK: la solicitud se realizó correctamente y el recurso se devuelve en el cuerpo del mensaje.
  • 404 Not Found: el recurso solicitado no se encuentra.
  • 301 Moved Permanently: el recurso se ha movido permanentemente a otra URL.
  • 302 Moved Temporarily: el recurso se ha movido temporalmente a otra URL.
  • 500 Server Error: el servidor ha petado, revisa tus logs xD

Mecanismos para identificar al usuario en el servidor

El protocolo HTTP es un protocolo sin estado así que debería existir alguna forma de poder identificar a un usuario utilizando el servidor.

Ahora os voy a contar varias técnicas:

  1. Autenticación: siempre que el cliente solicita una página web al servidor, este mismo autentica al usuario pidiendo un nombre y una contraseña. Existe la necesidad de autenticación para que el servidor pueda tener control sobre los documentos. Esta autorización se realiza en la línea del encabezado de la solicitud.
  2. Cookies: también se utilizan para identificar a un usuario. Las cookies son pequeños trozos de datos que se guardan en el cliente y así el servidor es capaz de acceder a estas cada vez que necesita consultar esa información.

Pero… ¿Cómo funcionan las cookies?

Existen miles y miles de tutoriales hablando sobre las cookies pero un ejemplo claro para que lo visualices es el mensaje de la LOPD que te aparece en ciertas páginas obligándote a aceptar el uso de estas. Si lo aceptas cuando vuelvas a la web no volverás a ver el mensaje.

Eso está hecho con cookies.

Así pues las cookies tienen cuatro componentes principales:

  1. Línea de encabezado del mensaje de la respuesta HTTP.
  2. Línea de encabezado del mensaje de solicitud HTTP.
  3. Cookie propiamente dicha. Archivo almacenado en la máquina del usuario.
  4. Referencia a la web a la que pertenece.

Con esto podemos decir que las cookies las utilizamos para que una página web guarde información en el ordenador del cliente ya puedan ser unas credenciales, un carrito de compra u opciones de configuración entre otros usos.

Cuando vemos una cookie nos la podemos encontrar de dos sabores diferenes. Estas puedes ser persistentes o no persistentes.

Creo que es la diferencia es clara pero por si hay dudas, una cookie persistente es aquella que se almacena en el ordenador tanto tiempo como haya sido programada mientras que las cookies no persistentes desaparecen una vez que se cierra la página web de origen.

Pero gracias a estos mecanismos (cada vez mas puestos en duda) las páginas web, grandes empresas y gobiernos pueden trackear completamente al usuario así como sus hábitos de consumo digital.

Uno de los sectores que tanta mala fama ha dado a las cookies es el de la publicidad. Las empresas de anunciantes las han utilizado para obtener todos los datos posibles de los usuarios y así después poder segmentar los anuncios.

Cacheando la web con proxys

El principal objetivo del servidor proxy es satisfacer la solicitud del cliente sin involucrar al servidor web original. Este proxy es un servidor que actúa como un búfer entre el navegador del cliente y el servidor web.

El servidor proxy acepta las solicitudes del usuario y devuelve la información cacheada que pide el cliente. Si no encuentra el recurso que se está solicitando es cuando entonces se lo pide al servidor web original.

Funcionamiento de un proxy caché y GET condicionales
Funcionamiento de un proxy caché y GET condicionales

Los dos propósitos principales de un servidor proxy son:

  • Mejorar el rendimiento: a medida que va guardando el resultado de las solicitudes, cuando un nuevo cliente solicita un recurso que previamente ya se ha consultado es capaz de servirlo directamente desde la memoria caché del servidor. Esto hace que la velocidad de respuesta sea baja y la petición se pueda cumplir en menos tiempo.
  • Solicitudes filtradas: también se pueden utilizar para filtrar solicitudes, es decir, mediante un proxy se pueden restringir a los usuarios al acceso de un conjunto específico de sitios web.

Pero existen otros métodos para mejorar la velocidad de respuesta de las solicitudes y uno de esos métodos es el uso de los métodos GET condicionales.

Este método es el mismo que el GET visto hasta ahora, solo se difiere al incluir un campo en el encabezado con los siguientes posibles valores:

  • If-Modified-Since
  • If-Unmodified-Since
  • If-Match
  • If-None-Match
  • If-Range

Una solicitud del método condicional GET se satisfará siempre cuando cumplan las condiciones del nuevo campo del encabezado.

Este método se utiliza para reducir el uso de la red y para que las entidades de caché se puedan utilizar para satisfacer las solicitudes de los recursos si no han sido modificados y así evitar una transferencia innecesaria de datos.

Teniendo esto en cuenta, cuando un cliente pide una página web al servidor proxy, este comprueba que tenga la página pedida en su sistema de caché, comprueba la última fecha de modificación del encabezado y sirve el recurso.

Si la página pedida es modificada o cambia en el registro de caché el servidor proxy devolverá la página desde el servidor web principal. Una vez que el cliente ha recibido esta página modificada, el servidor web actualiza al servidor proxy para que así siempre tenga la última versión disponible.

Pues nada chachos, para ir terminando os dejo un par de recursos por si queréis ampliar información y si tenéis dudas podéis utilizar los comentarios o ponerme un tweet a través del siguiente banner 😉

Recursos:

https://en.wikibooks.org/wiki/Communication_Networks/HTTP_Protocol

https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol

[xyz-ips snippet=”FAQS-GORKAMU-TW-YELLOW”]

Hala a cascarla!

Herencia en la programación orientada a objetos

Que pasa churritas!

Ya estamos a puntito de terminar los artículos dedicados al “curso”… si curso… sobre programación orientada a objetos y si has seguido todos y cada uno de los posts ya serás capaz de entender los conceptos de la programación y de desarrollar un programa to’ flama. En el artículo de hoy vamos a volver a ver la herencia.

Es verdad que ya hable de ella y bastante bien por cierto en este primer artículo pero como en este post estaba rankeando por otra palabara clave pues toca marcarme la del partner y hacer un artículo en el que la palabra clave sea la herencia. Yeah bitches!

Así que vamos a ellos!

¿Qué coño es la herencia?

Es la primera pregunta obligatoria que te tiene que pasar por la cabeza y no hace referencia a la dota que te deja la bruja de tu tía cuando muere.

La herencia en la programación orientada a objetos hace referencia a la habilidad que tiene una clase para derivarse de otra clase. Cuando digo derivarse quiero volver a decir herencia pero es que no veas lo que me esta costando explicar este concepto que con su nombre ya lo dice todo…

Tenemos una clase, a la que típicamente se le conoce como clase base o clase padre. Esta clase tiene sus propiedades, sus métodos y sus constantes ¿no? Pues justamente podemos hacer que otra clase diferente tenga acceso a esas propiedades, métodos y constantes haciéndolos suyos y sin tener que volver a escribirlos en esta nueva clase.

Es esta la gracia de la herencia y de un sistema basado en la jerarquía. Podemos organizar nuestro código para que unas clases cuelguen de otras pero que a su vez puedan utilizar los métodos de las clases superiores, ahí está la ventaja de la herencia, en poder reutilizar código ya existente.

Además si lo hacemos bien y a medida que vamos creando clases padres estaremos creando abstracción en la lógica de nuestro programa. ¿Y esto que significa? Pues que estaremos entendiendo cada vez mejor el problema que tratamos de solucionar y a su vez estaremos preparando el programa para enfrentarnos a nuevos requerimientos o problemas ya sean esperados o no.

Pasar de lo genérico a lo abstracto. Y esto siempre es mejor y ya 😛

Querer buscar la abstracción en tu programa no significa que nos pongamos a hacer clases padres y clases hijas a lo loco. Tiene que existir un sentido lógico o de lo contrario estaremos llenando de mierda el código.

Ese sentido lógico lo encontramos a preguntarnos si una clase “es un” de otra clase, es decir, ¿un bolígrafo es una herramienta de escritura? Si. ¿Y un lápiz? ¿Es también una herramienta de escritura? Pues también. Ahí hay herencia, ¿la veis? Pero.. ¿y una pelota es una herramienta de escritura? Pues hombre, podríamos untar la pelota en pintura y dar pelotazos en la pared hasta que salga alguna palabra pero por lo general no, no es una herramienta de escritura y por ende ahí no hay herencia.

Así pues mediante este ejemplo tendríamos una jerarquía en la que existiría una clase padre llamada HerramientaDeEscritura.class.php por ejemplo y dos clases hijas llamadas Bolígrafo.class.php y Lapiz.class.php. Estas dos últimas clases van a compartir ciertas propiedades y ciertos métodos que vienen directamente heredados de la clase padre, aunque hay que aclarar que es puede que nos encontremos con métodos o propiedades que no pueden ser heredados ya que aquí entra en juego la visibilidad y el acceso. Si te perdiste esa parte te dejo aquí el enlace para que le eches un vistazo 😉

¿Qué gano si aplico herencia?

¿Que qué ganas al hacer herencia? Pues muchas cosas, aunque ya he mencionado una arriba y posiblemente sea de las mas importantes. Entender mejor el problema que tratamos de solucionar. Y esto sirve para hacerte el chulo porque si eres el único que entiende el problema y tus compañeros te preguntan tu jefazo tendrá una mejor visión de ti.

Hago herencia pa haserme el shulo
Hago herencia pa haserme el shulo

Pero fuera de todo esto a nivel de código el utilizar herencia tiene bastantes ventajas:

  • Si no somos unos paquetes conseguiremos reutilizar el código de forma eficiente. Write Once Run Anywhere, mas o menos. Escribes un método en una clase padre y lo utilizas en todas las clases hijas que te de la gana. El cenit de la vaguería…
  • Propagación de los cambios. Si quieres cambiar el valor de una constante, lo cambias en la clase padre y se aplica en todas las clases heredadas, pero ten cuidado porque las cagadas también se propagan!
  • Poder heredar propiedades y métodos de todas las clases superiores. Hacer una mega clase con toooodo lo anterior incluido, hasta el infinito y mas allá. No sería raro llegar a encontrarnos una clase hija que pinte de la siguiente forma:

https://gist.github.com/gorkamu/f451e5d678c1b689363141fbffc4ddf4.js
Clase hija que tiene mucha herencia y que no hace nada.

Pero en PHP la herencia es una putada porque solo tenemos disponible la herencia simple. A diferencia de otros lenguajes como por ejemplo con Java que una clase hija puede heredar de tantas clases padres como les de la gana, PHP únicamente puede heredar de una sola clase padre. Por supuesto esto evita la complejidad del programa pero también es verdad que se pierden muchas características del polimorfismo y por supuesto se pierde un poquito el dinamismo en tiempo de ejecución.

Pero bueno, hay que sacrificar unas cosas para ganar otras. Yo la verdad es que hubiera preferido que existiera herencia múltiple en PHP pero que le vamos a hacer…

Podría hablar de muchas otras cosas que influyen y ayudan en la herencia como por ejemplo los constructores y destructores, la visibilidad de los métodos y propiedades y la sobrescritura pero esos temas ya los he tocado en artículos anteriores así que te recomiendo que si no los has visto eches un vistazo a este link en el que aparecen todos los posts pasados.

Y si tienes dudas o quieres aportar alguna sugerencia pues lo dejas en los comentarios y yo ya responderé cuando tal y sino puedes utilizar twitter a través del siguiente banner que en el fondo siempre es mas directo.

[xyz-ips snippet=”FAQS-GORKAMU-TW-YELLOW”]

Hala a chuparla!

Mi top five de herramientas de programación

Es bien sabido que un buen profesional se apoya en diversas herramientas para cumplir con su trabajo. En este post te quiero enseñar cual es mi top five de herramientas de programación. Y no, no me valen los listos que puedan decir que el ordenador o la cafetera. Eso es una completa obviedad así que dejemos los chistes a parte y comencemos 😉

Las herramientas de programación que mas utilizo

Algunos son servicios online, otros son programas y otros extensiones:

  • Online JSON Viewer: empecemos por un clásico. Este visor de documentos JSON es una herramienta de programación que siempre tengo anclado en la barra de favoritos. De por sí su nombre ya lo dice todo, visor online de JSON, eso es todo, no esperes mucho mas. Viene de puta madre cuando quieres visualizar de una forma mas amigable un JSON. Por lo general yo lo uso copiando en la primera pestaña el contenido del documento y dándole a visualizar en la segunda pestaña aunque también tienes otras opciones como la carga de un fichero, borrar los espacios en blanco, formatear el documento, etcetera… Una de las cosas que mas me gusta de esta web es la forma de mostrar los datos en forma de árbol. La suelo utilizar cada dos por tres.
  • PHP Sandbox: pasemos al lado backend. Esta página te permite correr código PHP directamente desde el navegador. Ayuda mucho cuando quieres probar un snippet y no quieres estar metiéndolo en el proyecto antes de probarlo o tener que tener instalado todo un servidor web para probar pequeños cachos de código. Tiene casi todas las versiones de PHP y van desde la 4.4.9 hasta (en estos momentos) la 7.1.0.  Además tiene una biblioteca de funciones útiles que puedes utilizar a modo de chuleta y que están categorizadas según su tipología. También tiene tutoriales.
  • JSFiddle: Lo mismo que PHP Sandbox pero orientado al frontend. Páginas como esta hay miles pero yo definitivamente la elegí por su interfaz limpia. Te permite probar tus códigos HTML, CSS y Javascript y si te registras puedes versionar y compartir con tus compañeros los snippets que quieras probar. Una de las cosas que mas me gustan de esta herramienta es la transparencia de su roadmap de desarrollo. Tienen un enlace a un tablero púbico Trello (lo puedes ver desde aquí) en el que van anotando todas las mejoras que deberían desarrollar. Olé por ellos.
  • Postman: extensión disponible para Chrome que te ayudará a probar APIs. Pero no solo te permite probar APIs esta extensión, su poder va mucho mas allá y con ella podrás construir, realizar test y documentar todas tus APIs. Entre todas las funciones que tiene, Postman incluye un histórico de peticiones hechas, capacidad para montarte tus propias requests, agrupar tests por proyectos,  automatizar colecciones y en fin, un montón de cosas mas. Si en tu día a día trabajas con APIs y no la conocías ya estas tardando en descargártela 😉
  • PHPStorm: obviamente no podía faltar esta maravilla de la ingeniería. Hablar de las bondades de este IDE daría para una serie de artículos ya que después de un montonazo de años utilizándolo (realmente empecé con IntelliJ Idea) todavía no he descubierto todas sus funcionalidades pero os tengo que decir que debido a sus herramientas integradas, sus plugins y sus atajos de teclado no necesitas mas herramientas de programación para comenzar a realizar tu trabajo. Al principio se que la interfaz es difícil y tira para atrás, pero creedme de verdad, una vez que comencéis a utilizarlo no querréis trabajar con otra cosa, ni Sublime, ni Netbeans ni muchísimo menos Eclipse. Una maravilla vamos.

Faltaría por poner un control de versiones, en mi día a día el único que utilizo es SourceTree de MS….. jajajajaaja NO. Obviamente GIT pero no voy a explicarlo en este artículo ya que me estoy planteando sacar un curso dedicado a el.

Conozco muchísimas alternativas a los puntos anteriores pero después de años dedicándome a esto de los ordenadores, este es el pequeño set-up que me he conseguido construirme.

¿Y tu qué? ¿Conocías estas herramientas? ¿Si, no? ¿Conoces y utilizas otras tal vez? No dudes en dejar tu opinión en los comentarios o en twitter a través del siguiente banner 😉

[xyz-ips snippet=”FAQS-GORKAMU-TW-YELLOW”]

Hala a mamarla!

Enlace estático en tiempo de ejecución en la programación orientada a objetos

Pues ya hemos llegado al final de los artículos dedicados a la programación orientada a objetos. A estas alturas ya comprenderás todos los conceptos de este tipo de programación. Obviamente me he dejado muchas cosas en el tintero pero siempre he intentado explicar las diferentes partes con un poquito de humor y con ejemplos fuera de los típicos que puedes encontrar por Internet. Para el último artículo he querido dejar la explicación sobre el enlace estático en tiempo de ejecución y es de lo que vamos a hablar, así que… let’s go madafakas!

Entendiendo el enlace estático en tiempo de ejecución

Para ser sinceros desconozco si otros lenguajes de programación implementan esta funcionalidad. Desde hace años mi carrera laboral ha ido por PHP en general y en los últimos años por Symfony en particular así que no estoy seguro, pero para el que no lo sepa, PHP incorporó la funcionalidad a partir de la versión 5.3 ea!

Básicamente el enlace en tiempo de ejecución consiste en poder hacer referencias a la clase en uso desde un contexto de herencia estática.

Da fuq?

WTF? Si la frase anterior te ha dejado con el culo torcido te recomiendo que le eches un vistazo a los links en los que hablo de herencia y sobre clases y métodos estáticos. Están un poquito atrás en el tiempo, tal vez un par de semanas pero por si acaso te has despertado con el vago puesto te dejo este y este link. De nada 😉

Antes de que metieran el enlace estático en tiempo de ejecución había problemas con la herencia y los métodos estáticos. Es decir, si una clase padre definía un método estático toda clase hija que heredase de esa clase obviamente iba a heredar ese método mágico pero cuando el motor de PHP intentaba resolver la palabra reservada self:: daba un pete porque la palabra reservada hacía referencia a la clase en la que se definía el método estático y no a las clases heredadas, con el ejemplo se va a ver mejor…
https://gist.github.com/gorkamu/c952a7a86a51e8123531b1844513eec3.js
Eso era antes claro y por lo tanto los desarrolladores nos sacamos de la manga un par de soluciones para resolver el problema:

  • Copiar y pegar los métodos estáticos de las clases padre en todas las clases hijas. Toma eficiencia claro que sí…
  • Convertir los métodos estáticos a métodos dinámicos. Toma parche claro que si…

Cuando el señor PHP se dio cuenta de este ‘error’ decidió implementar el enlace estático en tiempo de ejecución y para ello pensó en añadir una nueva palabra reservada pero viendo la realidad se decidió a utilizar otra técnica que ya tenemos bastantes palabras reservadas y meter una mas sería un follón.

Por eso la solución a toda esta película que os estoy contando fue ampliar el significado lógico de la palabra reservada static.

Si estas programando en PHP ya a partir de la versión 5.3 y con el enlace estático en tiempo de ejecución a tope de power, la palabra static permite obtener el valor de la clase desde donde se esta ejecutando en lugar de la clase base de la que hereda. Es como si la palabra reservada static se centrara y supiera donde se encuentra.

Así pues como vais a ver en el siguiente ejemplo, ya somo capaces de hacer referencia a la propia clase que ejecuta un método estático o accede a una propiedad estática sin tener que hacer malabares. Yeeaaah!! 😀
https://gist.github.com/gorkamu/f56a8d82a5ac4515eedc3978ae631d77.js

Y esto es todo muchachos, se acabó el último post sobre programación orientada a objetos. Ahora yo voy a descansar, que me metido un currazo en escribir todo el ‘curso’ y me voy a disfrutar de mis dolars ganados a las montañas del Pirineo junto a un par de buenas bitches.

Si tenéis dudas o sugerencias o simplemente queréis llorarme pidiendo que escriba algún curso nuevo hacédmelo saber en los comentarios o a través de twitter mediante el siguiente banner.

[xyz-ips snippet=”FAQS-GORKAMU-TW-YELLOW”]

A mamarla!

Guía del autosurfer galáctico

Si, lo sé, el título es un chiste malo y barato pero es que me ha venido como anillo al dedo para explicar qué es un autosurfer y cómo nosotros, hijos del metal webmasters, podemos beneficiarnos de ellos.

A raíz de este chiste y como introducción al post voy a hacer una clasificación del tipo de persona que va a leer el artículo:

  1. No has pillado el chiste y mucho menos el título de este artículo. Para ello te recomiendo que leas mas a Douglas Adams, que por lo menos te echarás unas buenas risas 😉
  2. Sabes de qué va el título, no te ha hecho ni puta gracia pero no sabes qué es un autosurfer. Bien, pues sigue leyendo tal vez aprendas algo nuevo.
  3. Conoces la referencia del título y manejas autosurfers. Pues en este caso tal vez no te enseñe nada nuevo. Puedes leer el artículo por supuesto, pero a lo mejor te es mas productiva la tarde poniéndote un par de vídeos de mi canal de Youtube.

Introducciones y clasificaciones demigrante hechas vamos a ver en qué consiste un autosurfer y para ello vamos a consultar a la madre de todas las enciclopedias:

En el ámbito de la comercialización del Internet, los autosurfs son sistemas que permiten realizar intercambios de tráfico rotando automáticamente los sitios web inscritos en el sistema. Por lo tanto, son capaces de llevar una gran cantidad de tráfico a los sitios web anunciados. Los miembros ganan créditos por cada sitio que ven, que luego se puede gastar para anunciar sitios web agregándolos a la rotación autosurf. Los sitios también pueden ser añadidos por anunciantes externos que pagan a los operadores de autosurf.

¿Entendido? ¿Si? ¿No? Es cierto que la definición, pese a ser correcta, no dice mucho a una persona que no conoce estos sistemas así que os lo voy a tratar de contar con my own words 😛

¿Qué es un autosurfer?

Los autosurfers son generalmente páginas web, aunque también existen en versión software de escritorio, que te permite realizar un intercambio de tráfico con otros usuarios. Me explico. Con los autosurfers puedes enviar tráfico hasta tu página web sin tener que esperar a que llegue por si solo.

Cuando te registras en uno de estos tienes que indicar una, o varias, páginas web a las que quieras enviarles el tráfico y desde este momento es cuando comienza el juego.

Como es lógico no te van a enviar todo el tráfico que tu quieras por tu cara bonita, vas a tener que ganártelo de alguna manera. Por lo general todos estos sitios tienen dos sistemas para conseguir tráfico.

Una es pagándolo, soltando las ganillejas, gastando los ahorros de la abuela y según la cantidad de dinero que inviertas así será tanto la calidad como la retención de las visitas que envíen a tu web.

La otra forma es entrar en el juego del autosurfer y realmente generar intercambio de tráfico. Tendrás que visitar las páginas web de otras personas para ganar puntos que después podrás canjear por minutos de visualización de tu web.

Es un toma y daca.

Es habitual entre estos intercambiadores de tráfico poder configurar diferentes opciones en relación a cada una de las visitas que van a enviarte, también llamadas hits, pero como mínimo te tienen que dar la posibilidad de elegir el tiempo que quieres que un hit pase en tu web, aunque también hay otros que te permiten incluso indicar el referer desde el cual enviarte la visita.

Ah, ¿qué no sabes que es un referer?

Básicamente es el lugar de origen desde el que una visita llegó a tu web. Por ejemplo si accedes a una página desde una búsqueda de Google, pues Google sería el referer de esa visita, aunque como te puedes imaginar existen tantos referer como páginas existen. Fuentes de tráfico le llaman en entornos analíticos.

Bueno pues en resumidas cuentas en eso consiste un autosurfer, visitas las webs de otras personas y otras personas visitan tu web.

Y ahora es cuando viene la pregunta del millón.

¿Cómo podemos beneficiarnos de un autosurfer?

Pues obviamente y debido a la naturaleza del propio sistema no tiene mucho sentido utilizar estas webs para ganar tráfico de calidad y mucho menos suscriptores. Si tienes en mente hacerte una base de lectores fiel que visiten con regularidad tu blog mediante los autosurfers ya te puedes ir quitando la idea de la cabeza porque no sirven para eso.

Tal y como yo los veo tienen dos finalidades claramente diferenciadas:

Ayudarte a posicionar

Es bien sabido que si una web no tiene visitas difícilmente va a ser capaz de posicionar en los buscadores mientras existan otras webs que por lo menos reciban una visita. Y es que el algoritmo que te posiciona tiene muchísimas variables, y  el de cada motor es completamente diferente, pero todos se basan en la calidad de la web y en la retención de la audiencia.

Si eres capaz de hacer que tus visitas pasen un tiempo medio de 10 minutos en tu web, por ejemplo, vas a aparecer mas arriba que otra web cuyas visitas solo estén durante 2 minutos.

Por supuesto que existen muchísimos otros factores a tener en cuenta para posicionar como las señales sociales, el porcentaje de rebote, el número de páginas vistas o la calidad de las visitas pero si puedes enviar tráfico de una manera “natural” te estarás asegurando tener cubierto un porcentaje de uno de los factores de posicionamiento.

Puedo asegurar que el 99% del tráfico enviado mediante un autosurfer es tráfico malo proveniente de bots por eso es importante no cagarla e intentar hacer que esas visitas parezcan naturales.

Si tu web tiene una media de 100 visitas mensuales no se te ocurra enviarle solo durante un día 3000 visitas, es mejor ir enviando menos durante todos los días que un chorrazo en un momento puntual y ya está. Si no haces esto es bastante probable que Google te acabe pillando y mas si tienes Adsense en tu sitio.

También es muy importante que configures correctamente el tiempo que cada hit va a permanecer en tu sitio. Mira tus analíticas antes de hacerlo. Te recomiendo que cada visita pase entre el 70-80% del tiempo medio que suelen pasar los usuarios en tu web. Aunque dependiendo de cómo sea tu sitio esto te puede arruinar o en minutos del autosurfer o en dinerico comprando minutos…

Ganar dinerico

Esta es la parte que ibas buscando eh perro!!?? jejejeje 😛

Pues si, haciendo uso de un autosurfer puedes ganar dinero pero aquí entra tu imaginación y cómo seas capaz de aprovechar ese chorrazo de visitas.

Por mi experiencia te digo que vienen de puta madre si tienes un blog, al que no le tengas mucha estima todo sea dicho, monetizado mediante sistemas de CPM, es decir, que te paguen X cantidad por cada mil visitas que consigas. A cuantas mas visitas lleguen a tu web mas te van a pagar, es algo básico.

Pero existe otra alternativa a los sistemas CPM y son los CPC y es que también puedes utilizar este sistema de cobro para utilizarlo con un autosurfer pero tienes que ingeniártelas un poco mas.

Habíamos dicho que por lo general las visitas enviadas desde estos sistemas suelen ser bots automatizados pero siempre existirá un porcentaje de esas visitas generadas que vengan de usuarios normales.

Ya te puedes ir haciendo a la idea de que las visitas generadas de esos usuarios normales no van a navegar por tu web pero como mínimo si que van a hacer un scroll hasta el final, hay autosurfers que exigen que se haga una navegación mas o menos natural.

Pues bien, en ese scroll es dónde te puedes aprovechar para ganar dinero con el CPC.

Como regla general para hacer scroll primero hay que hacer click en la web para después poder darle a la ruletica del ratón, es decir, hay que poner el foco en la página. Pues es en ese click en el que insertaremos la publicidad y así cuando una visita quiera hacer scroll estará haciendo click en un anuncio y din din din los dollars llamarán a tu cuenta bancaria.

Lo sé, es un método muy gitano de ganar dinero, pero gitano de los de robar cobre, pero que quieres que te diga, a mi me ha funcionado de maravilla…

La forma de colar el anuncio en el click te lo dejo a ti para que pienses un poco 😛

Y ahora es cuando la matan. Ya has visto qué es un autosufer y de qué dos formas podemos beneficiarnos con ellos, pueeeesss toca ver un listado de diferentes intercambiadores de tráfico para terminar de poner la guinda al artículo.

Listado de autosurfers

De nada sirve todo este tochazo que me he marcado si no os pongo el listado de sitios disponibles para intercambiar tráfico y los que me leéis con cierta regularidad ya sabéis que odio los listados pero en este caso esta completamente justificado y por supuesto de nada sirve toda esta información si no llega a los usuarios interesados.

Por eso para poder ver los enlaces os pido que me ayudéis a difundir el artículo haciendo un me gusta en Facebook, en Google Plus o poniendo un Tweet a través de los siguientes botones, ya sabéis contenido oculto y tal… ya vengo rumaneando otra vez 😛

[sociallocker]

  • HitLeap: este de es de los que mejor conozco ya que lo utilizo a menudo en un par de proyectos. Tiene muchísimas opciones para configurar unos hits óptimos siempre y cuando pagues la suscripción. Ya hablé de el en este artículo.
  • AlexaSurfing: muy activo y de rápido crecimiento. Te permite obtener una gran cantidad de visitas satisfactorias. Tiene un buen sistema de referidos e incluso te pagan por hacer autosurfing. Otra opción de las que dispone es interactuar con páginas y vídeos de Facebook al estilo de Addmefast.
  • BeeHits: otro sistema mas para hacer autosurf.
  • Smileytraffic: pues otro mas…
  • 247autohits: autosurfer estable que proporciona hits rápidos.
  • Ebesuche: autosurf alemán con membresía. Entre otras configuraciones te ofrece el poder seleccionar la orientación geográfica de las visita (algo muuuy importante)  y otras grandes características.
  • Otohits: otro gran conocido entre los foros gringos del blackhat. Las visitas suelen ser estables.
  • AutoWebSurf: gran Autosurf, realiza la entrega rápida.
  • 10KHits: página rápida, fiable y con un buen programa de afiliación.
  • FeelingSurf: no lo he podido probar…
  • GlobalBlaster: autosurfer estable con entrega rápida de hits.
  • Surfmore otro autosurfer alemán con membresía y muy estable.
  • ClickEvolution otro mas para la lista que puede presumir de ser bastante estable y con entrega rápida de hits.
  • Le1er: pues no lo conocía…
  • Hit4Hit.org: autosurf limpia y rápida.
  • AutosurfTraffic: sistema estable y proporciona visitas rápidas.
  • Ablazetraffic: rápida y fiable.
  • AbcVisiteurs: otro autosurfer francés.
  • AlexaSurf: autosurfer estable, proporciona accesos muy rápidos.
  • AutosurfMyth: ni puti de este…
  • GlobalEHits: otro mas para la lista autosurfers estables.
  • Lautosurf: NS/NC
  • AutosurfExchanger: rápido y fiable.
  • TopAutoHits: al parecer de reciente creación.
  • EasyHits4U: El mejor intercambio de tráfico manual. La membresía al parecer es carilla…. Tiene una relación de 1:1 hits.

De todos estos os recomiendo por experiencia propia HitLeap. Si os lo sabéis montar bien no tenéis porque tener problemas con el tito Google…

[/sociallocker]

Y hasta aquí chumachos.

Lo que iba a ser un post con el listado guarro de sitios para hacer intercambio de visitas se ha convertido en un artículo de casi 2000 palabras, toma ya!!

Así que ya sabéis, explotad todo lo que podáis este método pero con cuidadito y lo que os digo siempre, si tenéis dudas hacédmelas llegar en los comentarios o a través de Twitter mediante el siguiente banner.

[xyz-ips snippet=”FAQS-GORKAMU-TW-YELLOW”]

Hala a cascarla!

Sobrecarga en la programación orientada a objetos

Hoy dentro del ciclo de artículos sobre programación orientada a objetos vamos a ver otro concepto tan importante como la herencia o la sobrescritura de métodos. Hablo de la sobrecarga de métodos que en líneas generales se trata de re-definir el comportamiento de ciertos métodos para adaptarlos a tus necesidades.

Basta ya de introducciones y demosle ya chicha!

¿Qué es la sobrecarga?

Antes de explicarte a mi manera qué es la sobrecarga y poner un par de ejemplos vamos a ver cuál es la definición mas precisa que podemos encontrar en internet sobre el concepto. Según la definición de la wikipedia:

Sobrecarga es la capacidad de un lenguaje de programación, que permite nombrar con el mismo identificador diferentes variables u operaciones.

En programación orientada a objetos la sobrecarga se refiere a la posibilidad de tener dos o más funciones con el mismo nombre pero funcionalidad diferente. Es decir, dos o más funciones con el mismo nombre realizan acciones diferentes. El compilador usará una u otra dependiendo de los parámetros usados. A esto se llama también sobrecarga de funciones.

Bien, como dice el párrafo de arriba, es la posibilidad de tener varios métodos con el mismo nombre pero diferenciados entre ellos por el número de argumentos pasados, pero también es la posibilidad de alterar el comportamiento de otros tipos de métodos o propiedades.

Por ejemplo, si vienes del mundo de Java esto lo habrás visto ya muchísimo y si vienes del mundo de C/C++ te sonará la sobrecarga de operadores, cosa que me flipa muchísimo pero que por desgracia todavía no ha llegado a PHP.

A lo mejor te cuesta visualizar qué es el concepto de sobrecarga como para encima hablar de sobrecargar operadores pero es que el concepto es tan chulo que tengo que explicarlo.

Imagínate una suma de dos valores. Cada valor se encuentra entre un operador numérico ¿no? En este caso el operador es el símbolo de la suma (+) pero en otras operaciones el operador será otro obviamente. Pues bien, con C/C++ puedes hacer que cuando aparezca el operador de la suma se imprima un mensaje por consola y en lugar de hacer la suma, internamente se produzca una resta, por ejemplo.

Es el maximun trolling de la programación jejeje.

Como decía esto todavía no lo tenemos en PHP pero lo que si que tenemos y podemos utilizar desde ya es la sobrecarga de métodos.

Sobrecargando métodos en PHP

La sobrecarga en PHP nos ofrece herramientas para crear de una forma dinámica métodos y propiedades que después serán procesadas mediante alguno de los métodos mágicos que ya vimos en este artículo.

Básicamente el concepto va a ser el mismo en todos los lenguajes de programación pero PHP incluye la restricción de que no podemos tener varios métodos con el mismo nombre. Cada lenguaje tiene sus cosicas al igual que C/C++ tiene sobrecarga de operadores y Java no…

Cuando vamos a realizar sobrecarga de métodos en PHP nos tenemos que asegurar que aquellos métodos que queremos sobrecargar han de ser declarados como públicos y jamás de los jamases pasarle argumentos de estos métodos mágicos por referencia o de lo contrario hará un BUM Headshoot!

Para hacer esto se utilizan dos métodos mágicos en concreto:

  • __call(): se lanza cuando se invoca un método inaccesible desde un objeto.
  • __callStatic(): se lanza cuando se invoca un método estático inaccesible desde un objeto.

Ambos métodos mágicos van a recibir dos parámetros por narices, el primero de ellos corresponde al nombre del método que queremos sobrecargar y el segundo argumento es un array con los parámetros que pueda llegar a aceptar el método sobrecargado.
https://gist.github.com/gorkamu/f6c60c96029c7fbf81c1b2635de39c90.js
Decía antes que en PHP no existe la sobrecarga de métodos como se entiende en otros lenguajes, pues bueno, no es del todo así ya que como veis en el ejemplo se puede simular de cierta manera contando el número de argumentos que le llegan al método mágico __call() para después invocar una función u otra en función de esos argumentos.

Te recomiendo que te pilles el script, lo ejecutes y juegues con el para entenderlo bien 😉

Sobrecargando propiedades

Bien, toca el siguiente paso, aprender a sobrecargar las propiedades de una clase. Si con la sobrecarga de métodos utilizábamos los métodos mágicos __call() y __callStatic() con la sobrecarga de propiedades se utilizan los siguientes métodos mágicos:

  • __set(): se invoca cuando se escriben valores sobre propiedades inaccesibles.
  • __get(): se invoca cuando se consultan valores de propiedades inaccesibles.
  • __isset(): se invoca cuando se ejecutan los métodos isset() o empty() sobre propiedades inaccesibles.
  • __unset(): se invoca cuando se llama a unset() sobre propiedades inaccesibles.

Todos estos métodos mágicos van a esperar recibir un parámetro que represente el nombre de la propiedad sobre la que se quiere actuar pero, en el caso del método __set() recibe dos argumentos, uno con el nombre de la propiedad y otro con el valor que ha de asignarse.

Si declaras una propiedad como estática y después intentas sobrecargarla te pasará como con los métodos no públicos sobrecargados que también recibirás un bonito y elegante pete 😉
https://gist.github.com/gorkamu/8f3a9a320dcee5bfb9f83a5c4498dd96.js
Como perro que soy y rigiéndome siempre por la ley del mínimo esfuerzo este último ejemplo es el mismo que aparece en la documentación oficial de PHP pero eso no quita para que si tenéis dudas o queréis mas ejemplos me lo hagáis saber a través de los comentarios o por twittah mediante el siguiente banner.

[xyz-ips snippet=”FAQS-GORKAMU-TW-YELLOW”]

Es importante que os bajéis los ejemplos del cada artículo del repositorio habilitado para ello y que probéis y juguéis con los scripts para que entendáis bien los diferentes conceptos…

Hala a cascarla!

Los 10 mejores sitios para hacer ping a tu web

¿Que pasa chumachos?

Si sueles leer el blog es porque eres un apasionado de los temas que escribo aquí. Tal vez no un apasionado como tal pero si que te gusta el desarrollo, el SEO o el blackhat. Y si haces SEO seguro que ya sabrás sobre lo que vamos a hablar hoy y es nada mas y nada menos que sobre el ping de sitios.

Ya tengo por ahí un viejo post en el que os doy sitios también para meter en vuestra configuración de WordPress y poder hacer ping cada vez que publicáis un post nuevo. Hablo de este artículo.

Bien pues hoy traigo un listado (si, un listado pese a odiarlos) de sitios en los que puedes hacer ping de tu web. Varios de ellos los utilizo casi a diario y otros no tanto.

Pero antes de enseñaros el listado tenemos que saber qué es hacer ping de un sitio.

¿Qué significa hacer ping?

Pues hacer ping de una página web es un proceso por el cual se le informa a los principales motores de búsqueda y directorios de RSS que se ha actualizado el contenido en una web y que se debe revisar para indexar. Como es obvio esto tiene muchas ventajas. Si los motores de búsqueda saben que hay contenido nuevo, tu público objetivo también. Pero la gracia de hacer ping masivo a una web es que ayuda y en gran medida a posicionar en las SERPs.

Tal vez al haber leído el párrafo anterior se te ha encendido una bombillita y pienses que si hacer ping ayuda a posicionar, cuantos mas pings hagas mejor vas a posicionarte.

Es un plan perfecto, sin fisuras
Es un plan perfecto, sin fisuras

Bueno pues siento decirte que no. Que casi mejor que ni lo intentes. Google, principal amo y señor de nuestras web, penaliza todas aquellas webs que reciben un chorrazo de pings sin que haya contenido nuevo. Así que ten cuidado, tampoco te flipes.

Bien pues una vez aclarado el concepto vamos con ese listado rico 😛

Pingler

Este es mi servicio número uno cuando quiero hacer pings. Esta web es una de las páginas mas antiguas de este tipo. Permite hacer el envío un huevo de motores de búsqueda y directorios RSS aunque lo mejor de todo es que puedes definir si quieres tus propios servidores de ping.

Enlace

Ping-O-Matic

Otro que dicen que es de los mejores. Mediante esta web puedes informar a varios servicios y motores de búsqueda sobre las actualizaciones en el contenido de tu web. Tienen menos servicios en su lista en comparación con Pingler pero todos ellos son legítimos e importantes.

Enlace

Google Ping

Pues de los mejores y mas sencillos servicios que vas a utilizar en tu vida para hacer ping.

Enlace

Ping Farm

Otro servicio gratuito para hacer la tarea que nos ocupa. Esta web notifica a todos los motores de búsqueda que tiene agregados sobre el contenido nuevo que hay en tu web. Muy fácil de utilizar también.

Enlace

Feed Shark

Esta web promueve fácilmente tu blog o página web enviando varios pings a sus sitios asociados. Contiene una variedad alta de servicios web para notificar a todos los motores de búsqueda que tu blog, página web, feed RSS o podcast ha sido actualizado.

Enlace

Pingoat

Otra web que notifica a varios servicios que debe realizar un seguimiento de tu página web aunque lo curioso de este es que trae incorporado un servidor XML-RPC.

Enlace

Bulk Ping

Otro de mis favoritos, de hecho lo estoy utilizando ahora mismo huehuehue. Este es el único servicio que permite hacer lo que se conoce como massive ping o lo que es lo mismo, promover varias url para que notifiquen de sus cambios.

Enlace

Pingates

Otra web que nos permite notificar a mas de 40 motores de búsqueda y servicios que realizan un seguimiento de los blogs y páginas web que mas publican.

Actualización: parece que el sitio ya murió 😦

Enlace

PingMyBlog

Permite notificar a todos los principales directorios de blogs de una sola pasada para que todo el mundo se entere de que tienes contenido fresco en tu página web.

Enlace

Ping.in

Es un servicio de pings de blogs que notifica a los motores de búsqueda y directorios de que existe algo nuevo que han de rastrear. Te permite indexar tu blog mas rapidamente y hacer que tu contenido este disponible para un público mas amplio.

Enlace

 

El hacer ping a través de estos sitios supone una gran manera de mejorar la popularidad de tu sitio web y asegurarte de que los motores de búsqueda rastrean e indexan tu página correctamente.

¿Y tu qué piensas? ¿Conocías estos servicios? ¿Trabajas con alguno en concreto que no haya mencionado? Si es así házmelo saber a través de los comentarios o mediante twitter haciendo click en el siguiente banner 😉

[xyz-ips snippet=”FAQS-GORKAMU-TW-YELLOW”]

Hala a cascarla!