Funciones anónimas en la programación orientada a objetos

Ya queda poquito para terminar con la serie de artículos del curso de programación orientada a objetos. Si has llegado hasta aquí sin desfallecer enhorabuena, tendrás ya una base solida para empezar a programar. Como queda poco es hora de ir metiendo la puntillita y contarte cosas que harán que tus scripts sean mas elaborados por eso hoy vamos a hablar de las funciones anónimas o closures.

¿Qué son las funciones anónimas?

Puedes llamarlas de diferentes formas y te vamos a entender igualmente. Desde funciones anónimas a clausuras o closures en el idioma de William Shakespeare pero todas estas formas hacen referencia a la habilidad de los lenguajes modernos para crear funciones sin un nombre definido.

Al no tener un nombre definido no vas a poder invocarlas todas las veces que te den la gana sino que su uso tradicionalmente ha sido utilizado para las llamadas de retorno o los conocidos callbacks aunque obviamente tienen muchos otros usos.

Ponte en la situación de que creas una conexión a una base de datos y que después de realizar cualquiera de las acciones típicas del CRUD quieres que automáticamente escriba en un fichero de log lo que acabas de hacer. Pues esa función de retorno después de atacar la base de datos la podrías montar perfectamente con una función anónima, por ejemplo…

Es importante conocer que el motor de PHP internamente convierte este tipo de expresiones a instancias de la clase Closure.

Pero no solo podemos utilizar las funciones anónimas como callbacks sino que también las podemos asignar a variables. Si, la función entera, no solo el valor devuelto mediante un return desde la función. Así cuando el motor del lenguaje encuentre una referencia a esa variable ejecutará automáticamente la función anónima.

Se podría decir que es como darle un alias a la función pero no para que me entiendas…
https://gist.github.com/gorkamu/ba7dda22ffcd8d4703561f97744db9ca.js
En este ejemplo se ve perfectamente lo que acabo de explicar de asignar funciones anónimas a las variables. Pero no nos quedamos solo ahí ya que las closures de vez en cuando cuando le sale de los huevos al desarrollador pueden heredar variables del ámbito padre para ser utilizadas dentro de las mismas.

Me explico, si defines una variable de tipo string con un mensaje y a continuación defines una función anónima, puedes pasarle como argumento la variable a la clausura, ya sea por referencia o por valor. Pero que no te confunda, que tu función herede variables del ámbito padre no es lo mismo que hacer uso de variables globales. Todo tiene que ver que con el scope.

Eso si, si vas a hacer que tus funciones anónimas hereden variables acuérdate de de utilizar la palabra reservada use o de lo contrario recibirás un bonito y elegante pete 😉
https://gist.github.com/gorkamu/42e54f569b26e5639e437e08c94e0d53.js
Es posible que no todavía no veas la diferencia entre heredar variables del ámbito padre y usar variables globales aunque realmente creo que por su nombre es fácil de entender.

En cualquier caso, usar una variable global implica que da igual desde dónde la uses, ya sea desde dentro de una función, el método de una clase o desde otro fichero que forme parte de la arquitectura de tu programa.

Por el contrario el ámbito padre de las funciones anónimas es la función en la que la closure fue declarada que no es necesariamente la función desde la que se le invocó.

Pero hay más porque lo mismo que pasa con las funciones “normales”, el lenguaje también nos permite crear funciones anónimas estáticas y que cuando las definimos en el contexto de una clase nos permite evitar que automáticamente la clase se vincule a la función. Es como romper el nexo de unión con la clase.

Lo malo de esta técnica es que al no estar la clase vinculada con la función anónima no podremos usar la palabra reservada $this para hacer referencia a la propia clase.
https://gist.github.com/gorkamu/1202dca9dae5dde8d5ba0fec560bca22.js
Ahora la decisión y el uso o no de funciones anónimas y funciones anónimas estáticas queda en tu mano. Por supuesto has de encontrar una finalidad justificada para usarlas ya que no es plan de que metas clausuras a muerte en todos tus scripts por que eso disminuye la optimización de tu código. Cuando compila el motor le asigna un nombre interno a esa función, si no es anónima y ya posee nombre le estarás quitando trabajo al compilador 😉

Pues nada chavales, a dejarme la dudas, peticiones y sugerencias en los comentarios o a través de twitter mediante el siguiente banner.

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

Hala a cascarla!

Un montón de proxys y footprints gratis

¿Que pasa chamaquitos animados?

Hoy vengo con un artículo cortito pero de máxima calidad. Vengo con lo que vengo y es con un montonazo de proxys y footprints gratis ademas de un par de fuentes de proxys para que los uséis en Scrapebox u otros programas de automatización.

Ya hablé en su momento de qué son los proxys y cuales son los diferentes tipos de proxys que existen. Puedes leer el artículo en el que hablo de ellos desde este link.

Pero así a modo de recordatorio tenéis que saber que un proxy nos sirve como intermediario para hacer peticiones. Es decir, imagínate que en tu empresa han bloqueado forocoches y no puedes entrar pero quieres hacerlo claro. Pues te conectas a un proxy y el proxy se conecta a forocoches y todas las páginas que veas realmente será el proxy el que te las devuelva.

Así a grosso modo tenemos los siguientes tipos de proxys:

  • Proxys transparentes
  • Proxys anónimos
  • Proxys élite
  • Proxys Google Passed
  • Proxys privados

Insisto, si quieres saber mas sobre los proxys o sobre cómo encontrar proxys gratuitos date una vuelta por el artículo mencionado anteriormente.

Por otro lado tenemos los footprints. También hablé de ellos en este artículo en el que además os ‘regalaba’ un listado super grande de estos.

Para el que no lo sepa los footprints son cadenas de texto que nos van a permitir hacer acciones muy específicas en un buscador. Por ejemplo con ciertos tipos de footprints podemos hacer que Google nos devuelva solo aquellas páginas que pertenecen al gobierno.

Aunque no solo eso porque también podemos pedirle a Google que nos diga si una página esta indexada o no, en fin, que se pueden hacer muchísimas cosas con los footprints correctos.

Pero, si visitas el blog a menudo o estas metido en el mundillo del SEO no te estaré contando nada nuevo y posiblemente los uses en tu día a día, si por el contrario eres nuevo y has caído en este artículo de pura casualidad te repito que le eches un vistazo a los artículos que he mencionado antes, por que no es objetivo de este post explicar que son los footprints y los proxys.

Objetivo de este post son daros un montonazo de proxys y footprints by the face pero a cambio os pido que hagáis una acción social para desbloquear el contenido. Bien de gitaneo bien 😛

[sociallocker id=446]
descarga
[/sociallocker]

Es posible que algunos proxys estén ya un poco quemados, todo es cuestión de que los probéis y si no tira pues al siguiente.

Para reclamaciones y/o sugerencias tenéis el twitter y mi pequeño oompa loompa se encargará de avisarme con cada notificación nueva 😉

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

Hala a mamarla!

P.D: Lo sé cabrones, no es de mis mejores post ni de mis mejores imágenes. No había mucho tiempo y había que sacar contenido pero por lo menos os doy algo gratis así que no quejarse cohoné!

Paamayim Nekudotayim y la palabra final en la programación orientada a objetos

Tal vez te estés preguntando qué coño significa el concepto Paamayim Nekudotayim y lo qué supone para la programación. Pues tranquilo por que en este nuevo capitulo del curso de programación orientada a objetos te lo voy a explicar de forma detallada junto con la palabra reservada final. Un dos por uno en un solo artículo, todo un lujazo 😉

Paamayim Nekudotayim durante el Sabbat

Paamayim Nekudotayim es la traducción hebrea para “doble dos-puntos”, token muy utilizado en la programación para hacer referencia a elementos estáticos, constantes de clase o para sobrescribir las propiedades y los métodos de cualquier clase durante la herencia.

Pero lo mas probable es que estés prestando mas atención a este nombre de difícil memorización que a su significado técnico. Pues bien, la anécdota que hay detrás de el y por que recibe este nombre es una chorrada.

Muchos lenguajes de programación conviven con frameworks específicos para ellos y en PHP no podía ser de otra manera. Si todavía no sabes cuál es la diferencia entre lenguaje de programación y framework recuerda esto. El lenguaje es la base y el framework es un conjunto de herramientas y abstracciones construidas que nos facilitan el trabajar con la base, es decir, el lenguaje de programación.

Siempre ha existido el debate de qué es mejor para un programador si especializarse en un lenguaje o en un framework. Pues bien, sinceramente creo que es mejor dominar un lenguaje debido a que los frameworks están sujetos a modas y sobre todo que si aprendes bien un lenguaje de programación después podrás comprender los mecanismos internos de cualquier framework basado en ese lenguaje.

Te vas a encontrar con muchos gilipollas gurús que se las dan de framework master pero después no tienen ni puta idea de cómo hace la resolución de ámbito el motor del lenguaje, por ejemplo…

Pues bien, que me pierdo, Paamayim Nekudotayim surgió cuando Zeev Suraski y Andi Gutmans creadores del framework Zend Engine tuvieron que nombrar al operador de resolución de ámbito en PHP y como te habrás fijado, estos dos pollos no tienen nombres típicos de Albacete, son israelíes y como es lógico utilizaron su lengua materna para darle nombre a algo en lo que estaban trabajando.

Esa es la historia, fin del tema. Ahora sí, vamos a entrar a nivel de detalle técnico para explicar qué es esto.

Como decía antes, el Paamayim Nekudotayim es la forma que tenemos si queremos hacer referencia y usar ciertos elementos de las clases.

Ya lo has visto anteriormente sobre todo cuando explicábamos qué son las constantes de clase. Cuando defines una constante y la quieres utilizar por narices vas a tener que usar el “doble dos-puntos”. Por ejemplo:
https://gist.github.com/gorkamu/199da13787caa67e9edfcddf40f8481f.js
Para pintar el valor de la constante BLOG estamos usando el operador de resolución de ámbito, nuestro querido Paamayim Nekudotayim y a lo mejor te pienses que solo se puede utilizar para acceder a constantes desde fuera de la clase. Pues no. También lo podemos utilizar dentro de la misma clase cuando por ejemplo queremos acceder a elementos estáticos de la misma.

https://gist.github.com/gorkamu/0c9271716ddbb3482aa226184ab2d101.js
Este ejemplo es muy bueno por que se puede ver que accedemos a elementos estáticos desde dentro y desde fuera de la clase. El primer caso es cuando hacemos una llamada al método cualEsMiBlog desde fuera de la definición de la clase utilizando el Paamayim Nekudotayim ya que el método está definido como estático.

El otro ejemplo es cuando dentro de la definición del método estático estamos accediendo al valor de la constante de clase. Lo hacemos también usando el operador de resolución de ámbito.

Ya tenemos dos elementos que cubren el Paamayim Nekudotayim:

  • Constantes de clase.
  • Elementos estáticos de clase.

Pero todavía queda una tercera aplicación para el “doble dos-puntos” y se utiliza cuando queremos invocar propiedades y métodos de una clase padre desde una clase hija. Mira:
https://gist.github.com/gorkamu/b334afe1d346d31a614e3069a674a737.js
¿Lo ves no? Para poder utilizar el método saluda desde la clase hija, en este ejemplo Gorkamu y PutoAmo es necesario hacer una llamada al método padre utilizando la palabra reservada parent junto con el Paamayim Nekudotayim y seguido del nombre de la propiedad o método que queremos invocar.

¿Sencillito verdad? Venga, pues pasemos ahora al otro concepto de este artículo…

Usando la palabra reservada final

Aunque todavía no he hablado extensamente sobre el concepto de herencia en la programación orientada a objetos ya hemos visto una primera aproximación en este artículo y he puesto varios ejemplos durante la serie de artículos. Sin ir mas lejos en este post hay uno.

Pues bien, cuando salió la versión 5 PHP, de entre todas las novedades que presentó, se introdujo la palabra reservada final y que se utiliza para impedir que una clase hija que forma parte de una arquitectura basada en la herencia pueda sobrescribir el método de su clase padres.

Es como si cogiéramos al motor de PHP y le dijéramos: “Oye cuando vayas a procesar esta clase que hereda de esta otra clase comprueba que la primera contiene este método, este y este pero que en ningún caso tenga el método que tiene la palabra final“.

Si por un casual se te va la pinza y sobrescribes un método que está definido como final, cuando ejecutes el script vas a recibir un bonito pete al igual que ocurre si intentas definir una propiedad como final.

Únicamente las clases y los métodos pueden ser definidos así y para el caso de las clases se aplica el mismo concepto. Si una clase contiene la palabra final implica que ésta no puede ser heredada por nadie.

Es posible que con esta explicación tan chapucera te hayas quedado con cara de WTF así que vamos a ver un ejemplo que seguro que lo entiendes mucho mejor 😉
https://gist.github.com/gorkamu/4ce57bb1b7f1f1340a37a5a8425d3287.js
Pues ahí tenéis el último ejemplo del artículo en el que se perfectamente cómo la ejecución del programa peta si intentas sobrescribir un método declarado como final de una clase padre desde una clase hija y ya solo me queda decir lo que digo siempre al final de los posts.

Si tenéis dudas o queréis hacer alguna pregunta o sugerencia tenéis los comentarios de debajo para ello y si por el contrario eres mas de utilizar las redes sociales hazme llegar tu feedback a través de twittah mediante el siguiente banner.

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

Hala a mamarla!

Métodos mágicos en la programación orientada a objetos

Como cantó Alfredo Mercurio en su album Kind Of Magic, hoy vamos a hablar de magia y la magia en la programación orientada a objetos la podemos encontrar gracias a los métodos mágicos, valga la redundancia, así que vamos a ver un listado de diferentes métodos mágicos que podemos utilizar en nuestras aplicaciones para hacerlas mas ricas. Ale a darle…

¿Qué son los métodos mágicos?

Lo primero que tenemos que tener claro sobre los métodos mágicos es que son métodos que se invocan en nuestra aplicación cuando suceden ciertos eventos y que podemos aprovechar para realizar acciones en nuestros objetos.

Es como cuando automáticamente Miquel Iceta se pone a bailar sin poder remediarlo cada vez que escucha La Gozadera sintiendo el ritmo in the body.

Pues lo mismo pasa con los métodos mágicos, existe un desencadenador y una acción a realizar.

En PHP tenemos un conjunto de 15 métodos mágicos que se agrupan por su finalidad y cuyos nombres son reservados por el motor del lenguaje lo que quiere decir que no podremos crear nosotros otros métodos que se llamen igual.

Un método mágico es fácil de reconocer porque su nombre viene precedido de dos barras bajas y según las buenas prácticas en la programación se recomienda no utilizar este tipo de nombrar métodos a no ser que tengamos que utilizar algunos de estos métodos mágicos.

Métodos __sleep() y __wakeup()

Tipicamente utilizamos el método mágico __sleep() para confirmar datos pendientes o para hacer funcionalidades similares a la limpieza de datos. Como a lo mejor esto no se entiende mucho tenemos que saber que cuando vamos a serializar un objeto, el método serialize() va a buscar si existe este método mágico en nuestra clase para ejecutarlo antes de la serialización por lo que podríamos utilizarlo como si se tratase un de evento de tipo PRE_EVENT.

Si escribes este método mágico en tu clase pero haces que no devuelva nada, cuando sea ejecutado va a devolver un NULL y si intentas serializar un NULL ahí si que vas a tener un pete de tres pares de cojones de tipo E_NOTICE.

Al igual que cuando se serializa un objeto se invoca al método __sleep(), pues cuando se deserializa un objeto mediante unserialize() también se ejecuta otro método mágico y en este caso se trata del __wakeup().

El uso típico que se da al método __wakeup() es restablecer la conexión con la base de datos que se haya podido perder durante el proceso de serialización/deserialización.
https://gist.github.com/gorkamu/9a0a14ead73179730cf295c65c963e3d.js

Método mágico __toString()

Este método me gusta especialmente y permite a las clases definir como se tienen que comportar cuando se les trata como si fuera un objeto de tipo string. Por ejemplo, si hacemos un echo de un objeto es este método el encargo de imprimir los valores de sus propiedades.

Obviamente no es obligatorio imprimir los valores de sus propiedades, puedes hacer que devuelva un saludo por ejemplo pero lo típico es eso y siempre ha de devolver un string, sino petará con el error fatal E_RECOVERABLE_ERROR.
https://gist.github.com/gorkamu/d55f7dabbb58bcf0b44a6b3a1f60e9ed.js

Método __invoke()

Este método se ejecuta cuando se utiliza un objeto como si fuera una función. Puede parecer un poquito lioso pero con el siguiente ejemplo lo vas a ver muy claramente.
https://gist.github.com/gorkamu/8afcca0e6c9e0814522b95ad4eb17e54.js

Método __set_state()

De entre todos los métodos mágicos este es ejecutado en aquellas clases que han sido exportadas mediante var_export(). ¿Y qué coño hace var_export() te preguntarás?

Pues es una función que obtiene información estructurada sobre la variable que le pasemos como argumento, el resultado que obtenemos con var_export() es parecido a var_dump() salvo que el código que se obtiene es código PHP válido.

Así pues, cuando en nuestro código hagamos una llamada a var_export() podremos controlar la salida de este si definimos su comportamiento en el método mágico __set_state().

Internamente al llamar a var_export() y a diferencia de otros métodos mágicos, no se comprueba si existe __set_state() en nuestra clase por lo que es nuestra responsabilidad comprobar que solamente se reimporten los objetos cuyas clases declaren este método mágico.
https://gist.github.com/gorkamu/93005c2f3e58345fd222f46667d4f414.js

Método mágico __debugInfo()

Si el método __set_state() se ejecuta cuando se llama a var_export(). El método __debugInfo() se ejecutará cada vez que hagamos una llamada a var_dump() así de simple. Por defecto al llamar a var_dump() y no definir el método mágico en nuestra clase se mostrarán todas las propiedades de nuestra clase, las públicas, las protegidas y las privadas.

Este método mágico es una buena oportunidad para controlar qué propiedades de la clase han de mostrarse.
https://gist.github.com/gorkamu/bdcb95d367aa619bc33105210fea6477.js

Método __clone()

En artículos anteriores ya hemos hablado del proceso de clonación de objetos. Pues este es el método mágico que se invoca cuando se clona un objeto. Pero a diferencia de otros métodos mágicos que actúan como un evento de tipo PRE_EVENT este método se ejecutará después de que la clonación se haya realizado para permitirnos hacer cambios sobre las propiedades del objeto, como si de un evento POST_EVENT se tratase.
https://gist.github.com/gorkamu/9aa957ea198f2e4e13c729e92bd5b9e6.js

Métodos mágicos __isset() y __unset()

Cuando queremos evaluar si un nodo existe en un array o cuando queremos saber si una variable tiene contenido o esta vacía, lo solemos hacer con las funciones isset() y empty() respectivamente. Pues bien el método mágico __isset() es invocado automáticamente (si existe) cuando hacemos uso de estas dos funciones.

Por otro lado, si en nuestra clase hemos definido el método mágico __unset(), este se ejecutará cuando hagamos uso de la función unset() sobre un miembro de nuestra clase.

Utilizamos la función unset() para destruir una variable dada. Esta función se comportará de una manera o de otra en función del ámbito y del tipo de variable. Para saber cómo se comportará puedes echar un vistazo a este link en el que se cuenta con detalle el funcionamiento de la función.

Métodos __set() y __get()

Utilizamos estos métodos mágicos cuando queremos redefinir el comportamiento al establecer y acceder a valores de propiedades inaccesibles y lo hacemos sobrecargando los métodos.

Para que se entienda, si quieres que cada vez que se establezca un valor para una propiedad de una clase se imprima un mensaje por pantalla, tendríamos que sobreesccribir el método __set() y escribir allí el nuevo comportamiento.

Con el método mágico __get() pasa lo mismo pero para cuando accedes al valor de una propiedad.

Métodos útiles que podemos utilizar para crear los getter y setters de una clase de una forma dinámica sin tener que escribir cada conjunto para cada propiedad de una clase, por ejemplo…
https://gist.github.com/gorkamu/d5c736c208db994e3b25a0bac8767601.js

Métodos mágicos __call() y __callStatic()

El método __call() es invocado cuando intentamos acceder a métodos inaccesibles en el contexto de un objeto mientras que el método __callStatic() se invoca cuando accedemos a un método inaccesible en un contexto estático.

Como a lo mejor esto es un poquito güatdefak de entender, estoy seguro que con el siguiente ejemplo lo ves perfectamente.
https://gist.github.com/gorkamu/90f84a044b1c777683994ad734e906fb.js

Métodos __construct() y __destruct()

De estos métodos ya hablamos en artículos previos al curso y son invocados cuando instanciamos un objeto a partir de una clase o cuando destruimos un objeto respectivamente.

Tal vez el método destructor no lo utilices mucho, pero si tienes cierta experiencia en la programación orientada a objeto tendrás ya los huevos pelados de utilizar el constructor para inicializar variables de tu clase.
https://gist.github.com/gorkamu/8e9b8b3d0e01a967f8b3f271b4bd79f8.js

Es importante saber que si tienes una clase padre con un constructor que acepta dos argumentos mientras que la clase hija tiene un constructor con cinco no te va a fallar, así que tranquilo. Además para ejecutar el constructor de la clase padre desde el de la clase hija tendrás que hacerlo de la siguiente forma:

parent::__construct()

Por otro lado, el método destructor de una clase se ejecutará siempre cuando el motor de PHP ya no encuentre referencia alguna al objeto, así pues tipicamente los podemos utilizar para cerar conexiones a bases de datos o liberar memoria por ejemplo.
https://gist.github.com/gorkamu/c2ac43faec6e340f49f8492e865f7167.js

El método mágico destructor será invocado siempre sin ninguna excepción incluso cuando se detenga la ejecución del script mediante la función exit() pero si se llama a esta función dentro de un destructor se provocará que dejen de ejecutarse el resto de rutinas restantes a la finalización. Recuérdalo.

Pues nada, con esto ya hemos tocado el tema de los métodos mágicos. Si tienes dudas déjamelas a través de los comentarios o mediante twitter siguiendo el siguiente banner 😉

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

Hala a mamarla!

Vamos al cine, enlace DOFOLLOW con DA 100

¿Qué pasa amigos del metal?

¿Qué? ¿Cómo te quedas después de haber leído el título del artículo? Un enlace DOFOLLOW con DA 100, o lo que es lo mismo, con la autoridad de dominio mas alta que existe y todo eso para ti. ¿Acojonante que no? Pues nada, sigue leyendo y aprende a conseguir este backlink.

¿Vamos al cine? No, mejor conseguimos un enlace DOFOLLOW con DA 100

Pues bueno la cosa es que perfectamente puedes utilizar este backlink en tu estrategia de creación de enlaces al igual que el resto que os he ido contando y que se encuentran etiquetados con la tag de linkbuilding. Puedes revisar el resto desde aquí. Para conseguir este enlace vamos a utilizar las fuerzas de los foros y la técnica del underline. La veremos un poco mas adelante.

El sitio que nos regala estas maravillosas características es nada mas y nada menos que IMDB. Una página que sirve como base de datos para todo el espectáculo formado alrededor del mundo del faranduleo. Dicho así suena a mierda pero posiblemente si eres un poquito amante del cine ya la conocerás.

Esta página, propiedad de Amazon, te ofrece información sobre películas, reparto, personal de producción, series, videojuegos y actores de doblaje. Aquí tienes de todo. desde la película mas mierder que te puedas imaginar hasta obras de arte como por ejemplo la de esta ficha.

Ficha de mierda pero con un enlace dofollow con da 100
Ficha de mierda pero con un enlace dofollow con da 100

Personalmente utilizo esta página junto a filmaffinity para buscar información de la próxima película/serie que quiero ver y saber si merece la pena gastar ese tiempo viéndola o no.

A por el enlaceeeerrrll…

Pero bueno, que me voy por las ramas, para conseguir ese bonito enlace dofollow con da 100 lo primero que tendremos que hacer es dirigirnos al foro del sitio y registrarnos, obviamente…

Lo hacemos desde este enlace: https://www.imdb.com/registration/signin?u=http%3A%2F%2Fwww.imdb.com%2Fboards%2F

Podemos utilizar las redes sociales para completar el registro o hacer uso del email. Como sabréis, yo prefiero utilizar un email debido a mi manía persecutoria pero aquí cada uno es libre de elegir el método.

Cuando hayamos terminado, nos mandaran un email con un enlace en el que tendremos que confirmar nuestro correo electrónico. Lo hacemos y ya podremos exprimir a tope el foro.

El siguiente paso no es necesario pero no estaría de mas que fuerais a vuestros perfiles y perdierais un ratito en darle cierta autenticidad y naturalidad.

Al ser un sitio gestionado y mantenido por Amazon los moderadores son mas activos que en el resto de foros y no queréis que vuestro perfil huela a spammer a kilometros y os borren los comentarios.

Otro perfil fake mas en IMDB :P
Otro perfil fake mas en IMDB 😛

Fijaos en el cuadrito amarillo de la derecha, esa es la información que deberíais tener rellena para tener un perfil guay.

Si os da pampurrias tanto trabajo simplemente para conseguir un enlace dofollow con da 100 podéis subir solo una imagen y hacer públicas vuestras votaciones.

Una vez hecho esto, vamos a irnos al foro y buscar un hilo con las condiciones propicias para dejar nuestro backlink. Estas condiciones suelen ser:

  • Hilos con bastante visitas, lo ideal sería de 10k para arriba.
  • Hilos con un mínimo de replys. Yo suelo buscar como mínimo aquellos en los que ya hay 4 comentarios como poco. Para que no se vea muy feo todo…
  • Hilos con 7 días de antigüedad en el último comentario. Esto sería la polla pero no siempre es posible y menos en una web con tanta actividad.
Estos serían buenos hilos
Estos serían buenos hilos

Estas condiciones son para que nuestro comentario spam pase un poquito mas desapercibido entre los moderadores.

Una vez que hayas localizado el hilo perfecto, vamos a escribir un comentario.

Yo soy bastante vago para pensar un comentario original así que lo que suelo hacer es buscar un comentario que vaya al hilo de lo que se esta hablando y copiarlo xD

Tal vez no sea la mejor práctica pero hoy aquí estamos hablando de spam así que se jodan los de mi pueblo…

Para hacer la técnica del Underline tenemos que simular de alguna forma la firma en nuestros comentarios. La gran mayoría de foros añaden la firma, configurada previamente desde nuestros perfiles, al final del comentario y separada por una barra horizontal.

Para aquellos foros que no tienen sistema de firmas lo podemos simular haciendo uso del caracter de la barra baja.

Me explico, ponemos nuestro comentario, hacemos un salto de línea y le metemos la barra baja a todo lo que de, por lo menos hasta que se complete el ancho de la caja de texto en el que estamos comentando, metemos otro salto de línea y dejamos nuestros enlaces.

La gran mayoría de veces este truco de mierda funciona y los moderadores de los foros se lo comen.

Si habéis seguido la técnica al pie de la letra, al final conseguiréis un comentario como el que sigue y para que veáis que no es fake lo de las estadísticas os meto pantallazo.

Enlace dofollow con da 100 en IMDB
Enlace dofollow con da 100 en IMDB

Pues nada, ya solo os queda inflar la autoridad de página haciendo enlaces a mansalva con No Hands Seo o GSA y podéis volver a repetir.

Y ya sabéis si tenéis dudas dejádmelas en los comentarios o hacédmelas llegar a twitter a través del siguiente banner 😉

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

Hala a mamarla!

Traits en la programación orientada a objetos

Continuamos con otro artículo mas sobre el curso de programación orientada a objetos. Si estas siguiendo los post día a día segurísimo que ya tienes unos conocimientos bastante avanzados y sino ¿a qué esperas gandul? Hoy vamos a explicar qué son los traits y cómo podemos utilizarlos así que… vamos allá!

¿Qué son los Traits?

Lo primero que tenemos que saber es que los traits son una característica propia de PHP y que fueron implementados en su versión 5.4. En otros lenguajes de programación te puedes encontrar con aproximaciones a los traits pero no como tal lo vamos a ver con PHP.

Los traits son un método que podemos utilizar para reutilizar código, ya sabes filosofía DRY y todo eso…

Como por su propia naturaleza PHP no implementa la herencia múltiple, podemos utilizar esta característica para solventar ese problema.

Así pues la naturaleza de un trait es reducir las limitaciones de la herencia simple permitiendo que nosotros, los programadores, podamos reutilizar fragmentos de código en un conjunto de clases independientes y jerárquicas una y otra vez y toooodas las veces que queramos, todo un lujazo para evitar duplicar código y trabajar mas 😛

Los traits son parecidos a las clases. Ellos agrupan funcionalidades muy específicas y de una forma coherente. Imagina que tienes una función que se conecta a la base de datos y escribe en una tabla de log la fecha y el nombre de cada una de las clases cada vez que se instancian.

Pues si no existieran los traits tendrías que escribir esta funcionalidad, con su complejidad, en todas las clases y sería un error porque si quisieras sustituir algo de la función tendrías que ir clase a clase y cambiando lo que quisieras on the fly y luego revisar que no te has olvidado nada y que no la has cagado en ninguna parte, un coñazo vamos…

Creando un solo ficherito con la funcionalidad y después añadiéndolo a tus clases como un trait ya tenemos apañao el problema.

Decía antes que un trait es como si fuera una clase, como si fuera ya que no lo es exactamente y por lo cual jamás vas a poder instanciar directamente un trait. Piensa en ellos como en un añadido a la herencia tradicional que nos habilita la composición horizontal de comportamientos, quiero decir, puedes añadir tantas funcionalidades transversales a las clases como te de la gana y sin tener que recurrir a una arquitectura compleja de herencia.

Pero… ¿cómo hago un trait?

Bueno pues si quieres empezar a abstraer los comportamientos de tu aplicación (trabajo difícil pero que denota inteligencia) y comenzar a crear traits no te asuste que es super sencillo. Mira el siguiente ejemplo que lo vas a ver todo mucho mas claro.
https://gist.github.com/gorkamu/b12c4da18d0952e8d2ba11158e2a126d.js

¿Ves? En el trait del ejemplo podemos agrupar aquellas funcionalidades que van a ser comunes para un conjunto de clases. En este trait hemos puesto los movimientos de andar, correr y nadar. Movimientos que van a realizar todos los animales de nuestro universo y después para que estos movimientos estén disponibles en nuestros animales solo tenemos que hacer uso de la palabra reservada use dentro de la clase.

Por suerte no solo podemos usar un trait por clase sino que podemos incluir tantos traits como nos de la gana, eso si separandolos entre ellos por punto y coma y utilizando use.

Sencillo que no?

¿Pero qué pasa si en el ejemplo que he puesto, tuviéramos un método que se llamase correr dentro de la clase Animal (clase padre) y otro igual dentro del trait?

Pregunta del millón y según la lógica de la programación todo nos indica a pensar que este escenario provocaría un pete en la aplicación. Pues no.

Aquí entra en juego lo que se llama el orden de procedencia y es que los miembros, ya sean constantes o métodos heredados desde una clase base se sobrescriben cuando se inserta otro miembro que se llama igual desde un trait.

Así pues y para que lo veas claro, si tenemos un esquema de una clase padre, una clase hija y un trait con métodos que se llaman igual, la clase hija va a sobrescribir los métodos del trait que a su vez va a sobrescribir los métodos de la clase padre.

Apúntate bien esta anotación porque puede caer en examen 😛
https://gist.github.com/gorkamu/5d7bb69fe3bb5aa68a8a17c7273cf2d8.js
Hablábamos antes de lo posibles petes en el orden de procedencia al utilizar métodos con el mismo nombre entre una clase padre y un trait pero existe una problemática y es que si decidimos dar el mismo nombre a dos métodos diferentes que se encuentren en dos o mas traits eso si que nos va a dar un pete y de los gordos, un error fatal siempre y cuando no lo hayamos prevenido mediante el uso de insteadof.

Aquí tienes un poquito mas de info sobre la resolución de conflictos en los traits.

Pero todavía hay un montón de cosas chulas que podemos hacer con los traits.

Origen, inception, traits que tienen traits…

Al igual que con las clases podemos definirnos una arquitectura jerárquica en nuestros traits y hacer que un trait implemente otro trait o un conjunto de traits e ir bajando en diferentes niveles de funcionalidades agrupadas.

Cuando un trait usa otro trait en su definición este puede estar formado parcial o completamente de los miembros definidos en esos otros traits.

Miembros abstractos y estáticos en los traits

No me canso de repetirlo, un trait es como una clase y por ende podemos hacer casi las mismas cosas que con las clases como por ejemplo definirnos nuestros miembros abstractos para que al utilizar el trait en una clase este le obligue a implementar los métodos que hayamos definido.

Pero también podemos utilizar y definir variables estáticas, métodos estáticos y propiedades.

A diferencia con los nombres de los métodos y el orden de procedencia, si definimos en el trait una propiedad tenemos que saber que no podemos volver a definir una propiedad con el mismo nombre en la clase que va a hacer uso del trait o de lo contrario PUM! vamos a obtener un bonito pete.

Por último y para cerrar el tema de los traits os voy a enseñar otra cosa muy chula que podemos hacer con ellos y es modificar la visibilidad de cualquier método de un trait desde la clase. Pero.. ¿cómo? Magia!

magic en los traits

Al hacer referencia a un trait en una clase mediante la palabra reservada use, podemos indicar entre corchetes el método al que queramos cambiar su visibilidad mediante el operador as.

Que tenga su utilidad, por supuesto, pero yo soy de la opinión que al igual que pasa con el casting de tipos, si tenemos que estar cambiando la visibilidad de los métodos es que tal vez no hayamos definido bien la aplicación y tengamos que darle una vuelta…

Pero es una opinión y a continuación tienes un ejemplo de esto que te acabo de contar.
https://gist.github.com/gorkamu/e2485407891179d4d658da8dd92bec3d.js
Hala, pues nada chachos, a seguir estudiando programación orientada a objetos y si tenéis alguna duda hacédmela saber en los comentarios o en twitter a través del siguiente banner.

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

A mamarla!

#3 Plataforma como Servicio: Heroku vs Amazon Web Services

No te equivoques,  Amazon Web Services, AWS de ahora en adelante, y Heroku, no son dos plataformas como servicio, solo una de ellos pero ambas nos van a permitir implementar, supervisar y escalar aplicaciones web y móviles de manera completamente diferente. Pero antes de seguir hablando vamos a recopilar un poquito de información.

¿Que coño significa Plataforma como Servicio?

Según la Wikipedia una plataforma como servicio o PaaS es lo siguiente:

Es una categoría de servicios en la nube que permiten a los clientes desarrollar, ejecutar y manejar aplicaciones sin la complejidad de construir y mantener la infraestructura típica asociada con el desarrollo y lanzamiento de la aplicación.

Vamos que es tener, en cierto sentido, a un DevOps, o chico de sistemas, en tu equipo. Aunque algo mejor ya que no vas a tener que tratar con otra persona y ni te vas a comer la cabeza averiguando que falla cuando se romper algo.

Delegas esas tarea o al chico de sistemas o a una plataforma como servicio. ¿Que quieres hacer una build y desplegar? Pues la haces y te olvidas de compatibilidades, de versiones y librerías que fallan.

Así de primeras suena muy bonito y actualmente en el mercado tenemos varias soluciones que nos cubra esta necesidad. Desde soltar los billeticos y contratar a alguien que se encargue de la infraestructura o utilizar uno de estos servicios.

Debido a su baje coste y su fácil gestión si estas montando una startup vas a elegir casi el 100% de veces una de las siguientes plataforma como servicio pero… ¿Cuál es mejor?

Heroku contra Amazon Web Services

Vale, si echas un vistazo a los productos y servicios que te ofrece Amazon Web Service posiblemente te de un tabardillo debido a la gran cantidad de palabras y cosas que no te suenan hay para elegir. Es normal que te pierdas.

Diferentes Productos AWS
Diferentes Productos AWS

AWS ofrece una amplia cantidad de productos en los que elegir por lo que es difícil hacer una buena elección si no sabes ni de que va todo esto ni que solución es la idónea para tus necesidades.

Y ni siquiera has comenzado a considerar Heroku!

Pero bueno, relaja las tetas, no te agobies que es normal que te sientas abrumado. Vayamos poco a poco para ver las diferencias entre estas dos Plataformas como Servicio.

¿Qué Plataforma como Servicio escoger para mi Startup?

Si buscamos una comparativa de Heroku y Amazon Web Services veremos un montón de artículos que hablan de los beneficios de uno y de otro. Pero, ¿es lógica esta comparación? Intentar cruzar estos dos productos no tiene mucho sentido por las razones que iremos viendo a continuación.

AWS Elastic Compute Cloud

El Elastic Compute Cloud, también conocido como EC2 es una infraestructura como servicio (lo sé, otro actor mas en los …como servicio) y es el buque insignia de los productos ofrecidos por Amazon.

Antes de que existieran estas herramientas cuando uno quería montar, mantener y gestionar todo lo que existe al rededor de una aplicación tenía que desarrollar la infraestructuras de servidores que soportase la aplicación en cuestión.

Pero, ¿qué pinta tiene una plataforma com servicio? Bueno pues en pocas palabras si trabajamos con una PaaS, vamos a tener que configurar y mantener los servidores virtualizados que ejecuten nuestra aplicación, vamos a tener que agregar instancias de bases de datos, elegir y configurar el sistema operativo y configurar un balanceador de carga para distribuir la carga a través de varios servidores de aplicaciones.

Además, debemos seleccionar la CPU y unas cantidades mínimas de memoria RAM y almacenamiento tales que satisfagan nuestras necesidades.

Ah! Y lo mas importante, tenemos que instalar un servidor de copias de seguridad por si hay algo que se va a la wea!

Elastic Compute Cloud nos proporciona sólo los “bloques de construcción”. Nuestra tarea es seleccionar los mejores bloques para nuestra aplicación y gestionarlos activamente, no solo tener que configurarlos.

En muchas empresas de desarrollo es bastante habitual encontrarse con la figura del DevOps que en grandes rasgos es el encargado de aprovisionar las instancias de EC2, controlar el despliegue de las aplicaciones y orquestar la infraestructura de los servidores.

Algo así como el que se encarga de decidir cómo estos “bloques de construcción” van a interactuar entre sí.

Pero bueno, ahora pasemos a ver qué es lo que nos ofrece Heroku.

Diferencias entre plataforma como servicio e infraestructura como servicio
Diferencias entre plataforma como servicio e infraestructura como servicio

Heroku, aquella plataforma como servicio con nombre japonés

Heroku es también otra plataforma como servicio (PaaS) basada en Amazon Web Services pero es totalmente diferente a Elastic Cloud Compute (EC2)

Es de vital importancia saber diferenciar entre las soluciones basadas en Infraestructuras como Servicio (IaaS) y Plataformas como Servicio sobre todo cuando al considerar deployar y mantener nuestra aplicación en una de estos dos soluciones.

Heroku es mucho mas sencilla de usar que AWS, es quizá demasiado simple pero hay una buena razón para que esto sea así.

Esta plataforma nos equipa con un entorno de ejecución y un conjunto de servidores de aplicaciones ya preparados. Además, nos beneficiamos de una integración perfecta con varias herramientas de desarrollo, un sistema operativo preinstalado y servidores redundantes.

Con esto no tenemos que “perder tiempo” pensando en la infraestructura tal y como haríamos con AWS EC2, tan solo escogemos un plan de subscripción y lo cambiamos si nos quedamos cortos.

Heroku se encarga convenientemente de los detalles. Por lo tanto, podemos apuntar todos nuestros esfuerzos al desarrollo de la aplicación.

Sólo se necesita un desarrollador web o varios desarrolladores para crear una aplicación y enviarla a Heroku usando un control de versiones como GIT.

Toda la gestión del despliegue de la aplicación se realiza a través de la terminal.

Así pues comparar Heroku con AWS EC2 es como comparar una tostadora con un microondas. Ambas máquinas las usamos para calentar (y a veces tostar) pan, pero funcionan de manera completamente diferente.

Así pues tanto con Amazon Web Service EC2 como con Heroku vamos a alcanzar objetivos distintos peeeeeero hay algo de lo que todavía no te he hablado y se trata de otro producto de Amazon que funciona igual que una plataforma como servicio y es el competidor directo de Heroku.

SERVICIOS AMAZON WEB SERVICE HEROKU
Ofrecido por Amazon Salesforce
Precio Pagas por lo que usas Pagas por lo que usas
Qué te ofrece Plataforma como Servicio (Elastic Beanstalk) e Infraestructura como Servicio (AWS EC2) Plataforma como Servicio
Concepto Plataforma lista para el deploy (Elastic Beanstalk) e infraestructura (AWS EC2) Plataforma lista para el deploy
Lenguajes soportados Ruby, NodeJS, Python, Go, Docker, PHP y .NET Ruby, Python, PHP, Clojure, Go, Java, Scala y Node.js
Capacidad de escalar Escalado automático en EC2 y Elastic Beanstalk basado en tiempos y métricas aunque puedes configurar el autoescalado antes de deployar Escalado manual a través de la terminal o del panel de administración
Disponibilidad geográfica En todo el mundo Estados Unidos y Europa
Características principales Aprovisionamiento, Balanceador de carga, Autoescalado, Monitor basado en métricas, múltiples configuraciones y plantillas de despliegue Aprovisionamiento, Rollback de base de datos y de aplicación, Escalado vertical y horizontal manual, Integración completa con Github y Monitor basado en métricas
Herramientas integradas Consola de administración, Terminal y AWS CloudWatch Heroku Command Line, Heroku Application Metrics, Heroku Connect, Heroku Status

Elastic Beanstalk, un nuevo jugador se unió a la partida

Si decíamos que usar AWS era complejo para hacer un deploy mientras que con Heroku no tanto, este nuevo producto de Amazon simplifica la manera en la que desplegamos nuestras aplicaciones en AWS.

Con AWS Elastic Beanstalk vamos a ser capaces de deployar la aplicación ejecutando comandos en una terminal proporcionada por AWS o utilizando la consola de administración y sin tener que preocuparnos de la gestión de la infraestructura, ya que de ello se ocupa Elastic Beanstalk.

Por lo general, no es necesario que configuremos el aprovisionamiento, el balanceador de carga o el escalado, aunque con esta herramienta es posible obtener acceso a la infraestructura si lo necesitamos.

También vamos a poder guardar múltiples opciones de configuración para nuestra aplicación y cargarlas cuando el entorno cambie a golpe de ratón.

Elastic Beanstalk utiliza instancias de EC2 para alojar su aplicación, por lo que la migración de AWS Beanstalk a EC2 es mucho fácil y eso es la leche.

Conclusión

Cuando te planteas escoger una de estar plataformas como servicio lo primero que tienes que considerar es el coste. ¿Qué es lo que mas va a costarte? ¿Manejar y gestionar la infraestructura por ti mismo o abstraerte de todo eso aunque el precio suba un poquito mas?

Así pues y a modo de resumen deberías usar AWS EC2 cuando:

  • Necesitas flexibilidad en la infraestructura para hacer el primer deploy de la aplicación
  • Tienes a mano a un (o unos) DevOps que te gestionen la infraestructura.
  • Si deployas constantemente nuevas versiones de tu aplicación
  • Tu aplicación exige grandes cantidades de recursos.

Y usar una solución basada en Plataforma como Servicio cuando:

  • Necesitas deployar lo que se conoce como MVP (Producto Mínimo Viable)
  • Necesitas mejorar la aplicación rápidamente después del feedback de los usuarios.
  • No puedes pagar a DevOps.
  • Tu aplicación no chupa tantos recursos.

Así pues, si estas montando una startup te recomiendo que tires hacia el camino de Heroku, aunque no es la única solución en el mercado de las plataformas como servicio pero si decides por alguna razón utilizar Amazon Web Service Elastic Cloud Compute asegúrate de que tienes a un buen DevOps porque si no vas a llorar como si fueras un chiquillo de 3 años 😛

Y nada, eso es todo. ¿Tu con cuál te quedas? ¿Has utilizado alguna vez una de estas herramientas? Si es así no dudes en dejarlo en los comentarios y si tienes alguna pregunta que sepas que puedes hacérmela usando twitter a través del siguiente banner.

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

Hala a cascarla!

Namespaces en la programación orientada a objetos

Seguimos con otro artículo mas sobre la programación orientada a objetos y hoy concretamente toca aprender qué son y cómo podemos utilizar los namespaces. Algo de mucha utilidad si estas siguiendo el curso y sobre todo si ya has visto el artículo dedicado a la autocarga de clases. Así que vamos para allá…

¿Qué son los namespaces?

Su traducción mas literal sería espacios de nombre, pero entiendo que esto no te diga nada así que vamos a ver una forma de entenderlo.

Imagina que estás re ordenando tu escritorio ya que lo tienes lleno de fotos, archivos y juegos. Como sería normal en una persona ordenada, empezarías a crear carpetas y directorios en el que agrupar los distintos ficheros por tipo por ejemplo o por fecha yo que sé, en cualquier caso estas agrupando ficheros relacionados bajo un criterio definido.

Así pues podemos tener el siguiente árbol de directorios:

  • /home/usuario/gorkamu/Escritorio/fotos/fotovacaciones.png
  • /home/usuario/gorkamu/Escritorio/no-mirar-aqui/esto-no-es-porno.mpg

Como ves hemos organizado nuestros ficheros según dos criterios, ficheros que no nos importan que vean y ficheros que no queremos que otras personas vean (vale, ya sé que no es la mejor solución pero es un ejemplo coño)

Dentro del directorio de fotos podemos tener tantas fotografías como nos de la gana pero lo que nunca podemos tener son dos ficheros con el mismo nombre dentro del mismo directorio.

Pues extendiendo este concepto a la programación orientada a objetos conseguimos los namespaces, se entiende no?

Los namespaces los utilizamos para agrupar de una manera lógica nuestras clases y evitar los conflictos entre nombres debido a que podemos utilizar alias en ellos para renombrar una clase.

Definiendo namespaces

Aunque podemos definir cualquier script mediante los espacios de nombre, en la práctica solo se ven afectadas por los namespaces las clases, las interfaces, los traits, las funciones y las constantes. Si queremos definir un espacio de nombres para nuestra clase tenemos que haces uso de la palabra reservada namespace y siempre al principio del script.

No puede existir otra cosa antes salvo la sentencia declare utilizada para declarar la codificación del fichero.

<?php

namespace AplicacionLibreriaComponents as Componentes;

class PredectiveSearch 
{
...
}

¿Ves el ejemplo? Pues así de sencillo es definir un namespace. Ah y le hemos dado un alias como ves por la palabra as. Esto viene guay por si tienes diferentes namespaces con el mismo nombre pero en “rutas” distintas, para que no pete y tal… Y viene a ser como manejan los sitemas Unix los enlaces simbólicos

Como he dicho mas arriba, utilizamos los namespaces para “agrupar” clases, interfaces, funciones, traitrs y constantes y parece lógico que cada una de estas estructuras tenga únicamente un único espacio de nombres, algo así como el camino hacia su casa, pero… ¿qué pasa si te digo que podemos hacer que puedan tener varias casas? Por ejemplo, la residencia habitual en Madrid y luego el chabolo en Torrevieja.

Pues de hecho podemos declarar varios namespaces para estas estructuras sin que se rompa nada, mira el ejemplo anda:
https://gist.github.com/gorkamu/45baf2690e990d059d54c4e2f89610b3.js

Como ves podemos utilizar varios namespaces dentro del mismo fichero. Existen varias sintaxis diferentes para hacer esto y de ellas esta es la menos mala. Digo esto porque se desaconseja su uso con las buenas practicas. Un fichero únicamente debería tener un solo espacio de nombres pero bueno hay que conocer la mierda para tratar de evitarla.

En cualquier caso, tenemos que conocer como funciona el motor de PHP a la hora de resolver espacios de nombres y es que y es que para referenciar el nombre de una clase podemos hacerlo de diferentes formas:

  • Con nombres no cualificados, es decir, si el namespace actual es AplicacionLibreria la clase se resolvería con: $search = new PredectiveSearch()
  • Con nombres cualificados o con el nombre de la clase con prefijo, por ejemplo: $seach = new LibreriaPredectiveSearch()
  • Con nombres completamente cualificados o el nombre de la clase con prefijo con el prefijo de operador global: $seach = newAplicacionLibreriaPredectiveSearch()

Es un pelín lioso pero si utilizáis IDEs ultrainteligentes como PHPStorm no os tenéis que preocupar de esto ya que os lo resolverá el solito 😛

PHP ofrece dos mecanismos para acceder de una forma bastante abstracta a elementos que se encuentren en un namespace, esto es mediante la palabra reservada namespace y mediante la constante reservada __NAMESPACE__ cuyo valor será el espacio de nombres que hayas definido para ese fichero.

<?php
namespace AplicacionLibreria;

echo '"'.__NAMESPACE__.'"'; // imprime "AplicacionLibreria"

Es importante saber que si no se define ningún namespace, todas las clases, funciones, métodos, interfaces y constantes tendrán un ámbito global.

Como curiosidad no está de mas saber como PHP resuelve los espacios de nombres con estas seis reglas:

  • Cualquier elemento con un nombre completamente cualificado se resuelve durante la compilación.
  • Los elementos con nombres cualificados o no cualificados (no completamente cualificado) se resuelve durante la compilación en función de las reglas de importación presentes.
  • Dentro de un espacio de nombres, todos los nombres cualificados no traducidos según la reglas de importación llevan antepuesto el espacio de nombres actual.
  • Los elementos con nombres no cualificados son traducidos en la compilación según las reglas de importación actuales.
  • Dentro de un namespace, las llamadas a funciones con nombres sin cualificar se resuelven durante la ejecución.
  • Dentro de un namespace, las llamadas a funciones con nombres no cualificados o cualificados (no completamente cualificados) se resuelven durante la ejecución.

Así pues con estas reglas y un poquito de sentido común vais a ser capaz de construir aplicaciones muy organizadas, algo primordial cuando la complejidad crece. Se que el tema de los namespaces no es tan sencillo como definir una “ruta” al principio del fichero y a correr, por eso os voy a dejar este enlace con preguntas y respuestas típicas contestadas por si os liáis y también lo que os digo siempre, si tenéis cualquier duda, necesitáis mas ejemplos o simplemente me queréis poner a parir podéis hacerlo en los comentarios mas abajo o en twitter a través del siguiente banner.

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

Hala a mamarla!

El truco definitivo para ocultar enlaces de afiliados en tu blog

Hace un par de semanas hablaba de la importancia de los inbound links y de qué plugins puedes utilizar para ocultar enlaces ultrabuenos que apunten a tu Money Site para que así otras personas con malas intenciones no puedan copiar tu estrategia de linkbuilding . Tu planteate la situación de que pasas semanas enteras scrapeando los motores de búsqueda para encontrar buenos enlaces y llega el listo de turno y utiliza Ahrefs o Majestic para robártelos.

Pues es una putada!

Bueno pues hoy no vamos a seguir hablando de enlaces entrantes xD hoy vamos a ver un plugin para WordPress que nos ayuda a ocultar enlaces que son de afiliados en nuestro blog o página web.

¿Pero y qué motivo puede existir para querer ocultar enlaces de afiliados? Pues la razón es la confianza. La confianza que van a depositar los usuarios al hacer click o no sobre el enlace de afiliado.

Es verdad que los enlaces creados desde un sistema de afiliados suelen ser bastante feos, por ejemplo, el enlace que se genera desde el sistema de afiliados de Amazon luce tal que así:

https://www.amazon.es/gp/product/B0186FET66/ref=as_li_ss_tl?pf_rd_m=A1AT7YVPFBWXBL&pf_rd_s=&pf_rd_r=Y8NX0FPBQXCE5R2Y8Y82&pf_rd_t=36701&pf_rd_p=48981d88-86bf-4a74-9a61-c5f5c474bc31&pf_rd_i=desktop&linkCode=ll1&tag=elaceidearga-21&linkId=24ff977e0382faee28ce8da6de525e7f

¿Es feo de narices que no? Y es bastante probable que cuando un usuario vea ese link le entren pampurrias y no quiera hacer click por eso vamos a utilizar el plugin Pretty Link para ocultar ese enlace y que el usuario no sospeche de nuestras intenciones 😛

Ocultar enlaces como un pro

Lo primero que haremos será descargar e instalar el plugin. Puedes buscarlo desde el propio sistema de plugins dentro de tu WordPress o puedes descargarlo desde este enlace. Una vez lo tengas instalado ya podemos empezar a trabajar con el y para ello tendremos que hacer click sobre el botón de “Add new link”.

Se nos abrirá un formulario con diferentes campos pero la configuración básica es la siguiente:

  • Target URL: en este campo pondremos la url a la que queremos apuntar, es decir, tendremos que poner aquí el enlace de afiliado que queremos ocultar
  • Pretty Link: nos permite escribir el slug que deberá tener nuestro enlace enmascarado. Una primera parte es el dominio y la segunda será el slug personalizado
  • “Nofollow” this link: esta opción es importante y se encuentra dentro de la pestaña de Opciones. Es recomendable que lo marquemos si no queremos perder link juice a través de los enlaces saliente.
Plugin para ocultar enlaces de afiliados
Plugin para ocultar enlaces de afiliados

Por último le das al botón de Create y ya tendrás tu enlace de afiliado completamente enmascarado.

¿Cómo funcionan realmente los enlaces enmascarados?

Gracias a los plugins de terceros no tenemos que preocuparnos de hacer las cosas manualmente ni bajarnos al barro para ocultar enlaces pero no está de mas que sepamos como funciona internamente el cloacking de enlaces.

Todos los sitios que estén basados en Apache tienen un fichero oculto llamado htaccess que permite realizar ajustes personalizados para cada una de nuestas webs. Es un archivo de configuración bastante complejo con el que podemos hacer un montón de cosas y también podemos cagarla de la manera mas gigantesca si no sabemos manejarlo correctamente. Su explicación daría no para un post sino para un curso entero…

Pues bien, para ocultar enlaces de una forma manual sin utilizar plugins vamos a editar el fichero htaccess.

Es recomendable que abras el fichero y lo que tengas que añadir lo hagas al final del mismo sin tocar ninguna otra cosa mas. Si la cagas y editas algo que no deberías y tu página deja de funcionar, como no tengas conocimientos necesarios, te va a resultar mas agradable una patada en los huevos que meterle ano al htaccess, eso es así xD

Lo que vamos a hacer es utilizar las redirecciones 302 del protocolo HTTP para ocultar enlaces. Las redirecciones 302 también son conocidas como redirecciones temporales.

Para una mayor organización vamos a categorizar nuestros enlaces de afiliados dentro del directorio /link de la jerarquia de rutas nuestro blog.

Metemos nuestros enlaces de afiliado bajo el directorio /link
Metemos nuestros enlaces de afiliado bajo el directorio /link

Tenemos que seguir esa estructura por cada enlace. Primero la instrucción Redirect, después el tipo de redirección a aplicar, la nueva URL y por último la URL que queramos redirigir.

El siguiente paso es bloquear el acceso a los robots al directorio virtual /link y con el que acabamos de asociar nuestros enlaces de afiliados. Para ello abriremos el fichero robots.txt y escribiremos lo siguiente:

Disallow: /link/

Con esto estaremos diciéndole a las arañitas que no indexe los enlaces cloacked recién creados.

¿Y qué ventajas tiene ocultar enlaces?

Pues ya he mencionado una ventaja muy importante al inicio del enlace y es la de generar confianza al usuario de nuestro sitio, pero hay varias mas:

  • Al usar enlaces enmascarados podremos decidir si queremos que hagan traspaso de link juice o no. Es decir, podremos añadirles el atributo rel=”nofollow” o en su caso el atributo rel”dofollow”.
  • Podemos trackear diferentes enlaces para un mismo link de afiliado para saber cual es el que nos da mayores beneficios.
  • Como he dicho antes, generamos mayor confianza en el usuario y por lo cual el ratio de click aumentará al no haber enlaces “extraños”.

 

Y esto es todo majos. Si tenéis dudas hacédmelas saber en los comentarios o a través de Twitter mediante el siguiente banner, ya esta todo preparadico así que no seáis tímidos que es gratis 😉

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

Hala a mamarla!

Autocarga de clases en la programación orientada a objetos

Si estas siguiendo a pies juntillas los artículos dedicados a la programación orientada a objetos es muy posible que ya tengas unos conocimientos técnicos bastante avanzados, de hecho es posible hasta que ya hayas hecho algún programita y si has seguido las buenas prácticas habrás creado un fichero por cada clase no? Es lo típico vamos… Y no te has encontrado con el problema de querer utilizar varias clases en un script y ver que el comienzo del fichero se te llenan de mas y mas requires e include ?

Jajajaja ya te contesto yo. Si. A no ser que hayas utilizado lo que vamos a ver en este artículo que no es nada mas y nada menos que…

Usando la autocarga de clases

La autocarga de clases viene a solucionar precisamente el problema anterior. Tener que incluir todas las clases que vayamos a utilizar en cada uno de nuestros scripts. Tal vez para scripts pequeñitos o POC no sea un problema pero ya te digo yo que cuando estas desarrollando una aplicación empresarial grande se vuelve un coñazo.

Desde la versión 5 de PHP se incluye un mecanismo para auto cargar las clases automáticamente y es mediante la función spl_autoload_register() que se encarga de registrar cualquier número de cargadores.

Esto tiene varias ventajas como el hecho de que podemos hacer que se carguen clases e interfaces automáticamente si no están definidas actualmente. Haciendo uso de los autocargadores estamos dando una última oportunidad al motor de PHP de cargar los recursos necesarios antes de que pete por omisión.

Lo chulo de la función que gestiona la autocarga de clases es que internamente hace uso del método mágico __autoload() que es proporcionada por la spl. Si en tu script aparece esta función (damos por hecho que si aparece es porque estás haciendo autocarga de clases) es necesario que la función esté explicitamente registrada en la cola __autoload para que no falle.

Ahora bien, como sabes, cuando desarrollamos con PHP podemos hacer scripts que se presenten en el navegador como páginas web o podemos hacer utilidades para la consola. Si señores, podemos hacer nuestros propios programitas con PHP para correrlos desde la terminal, el CMD, la consola o como quieras llamarlo.

Pues si haces una utilidad para el Command Line Interface has de saber que la autocarga de clases no te va a funcionar si lo utilizas en el modo interactivo. Echa un vistazo al enlace anterior para saber que es el modo interactivo de la CLI anda 😉
https://gist.github.com/gorkamu/6abe2d3c7a99b9f96883983ca1aca4dc.js

Como ves en el ejemplo no estoy haciendo uso de ningún include o require, tan solo hago una llamada a la función spl_autoload_register.

Pues nada chachos esta vez ha sido un artículo cortito, si tienes dudas o necesitas mas ejemplos o ejercicios pídemelos en los comentarios o en twitter a través del siguiente banner .

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

Hala a mamarla!