Cómo reparar wp_redirect cuando no funciona

Cómo reparar wp_redirect cuando no funciona

Como sabes, he desarrollado muchísimos sitios web con WordPress ya que es un CMS (content management system) muy fácil de usar y es ideal para programar funcionalidades personalizadas según las necesidades de cada cliente. Hace poco, estuve desarrollando un plugin y me encuentro que wp_redirect está teniendo un comportamiento inesperado y si te ha pasado este problema antes, acá te explico cómo reparar wp_redirect cuando no funciona.

WordPress sin duda es muy poderoso y el líder absoluto a nivel mundial para la creación de sitios web, pero cuando queremos ir más allá, puede ser que algunas cosas no funcionan como esperamos o necesitamos ajustar nuestro código recurriendo a algunos trucos.

wp_redirect es una función nativa de wordpress que nos permite redireccionar a otra página. En la documentación podemos encontrar la definición de los parámetros que recibe esta función.

Sólo el primer argumento es requerido y es la URL a donde queremos redireccionar la respuesta que vamos a visualizar.

El problema es que la función wp_redirect() no detiene la ejecución automáticamente sino que una vez llamada, sino que continúa la ejecución normal del script. Para solucionar esto debemos agregar el llamado a exit;justo después de llamar a wp_redirect(), de esta manera podemos detener la ejecución del script y esperar la respuesta de la función wp_redirect.

Veamos un poco cómo vamos a usar wp_redirect, y cómo debemos inmediatamente usar exit

Es un poco extraño pensar que la ejecución se va a mantener en curso pero así sucede. Si tienes problemas utilizando esta u otras funciones no dudes en escribirme y te daré una mano.

¡Hasta un próximo post!

Como optimizar Ubuntu 14.04 LTS al máximo

optimizar Ubuntu 14.04 LTS

Bueno, necesito optimizar Ubuntu 14.04 LTS al máximo, debido a que tengo poca memoria RAM y cada MB cuenta, he estado investigando cómo optimizar y exprimir al máximo los recursos, para que con equipos de gama media y baja, les resulte más fácil su ejecución.

Eliminar unity-music-daemon

Descripción: Es una aplicación que permite buscar música desde el Dash de Unity

Memoria RAM que consume: 30MB

Eliminar el Scope de las tiendas de Música Online

Descripción: Algo parecido a lo de arriba, yo lo desinstale porque no me hace ninguna falta.

Memoria RAM que consume: 30MB

Eliminar el Ubuntu One Sync Daemon

Descripción: Sirve para almacenar archivos en la nube con Ubuntu One ofreciendo 5Gb gratis para quien los quiera pudiendo almacenar Documentos, Música etc… Yo lo elimine.

Memoria RAM que consume: 18MB

Eliminar el proceso bluetooth-applet

Descripción: Es un proceso que está siempre encendido esperando que algún dispositivo con Bluetooth se conecte, yo no lo uso así que también lo elimine:

Memoria RAM que consume: 3MB

Eliminar el proceso indicator-printers-service

Descripción: Lo mismo que lo anterior, al parecer este proceso está relacionado con la impresión, es un indicador del panel superior y el mismo se hace visible al conectar una impresora, para así brindar acceso a la configuración de la misma. Para que no se ejecute le cambiamos el nombre a su ejecutable.

Eliminar deja-dup-monitor

Descripción: Sirve para programar copias de seguridad automáticas, yo esto no lo necesito así que lo elimine.

Memoria RAM que consume: 500KB

Eliminar el demonio de Gnome Online Accounts

Descripción: Ahora mismo no estoy seguro si el paquete gnome-online-accounts está instalado por defecto en la instalación, solo sé que casi no he instalado nada y de vez en cuando me topaba con este proceso corriendo sin que nadie lo llame, Gnome Online Accounts es una nueva vía que incorporó GNOME 3 para almacenar a servicios en la nube donde tenemos documentos, correo electrónico, etc. Es una magnífica funcionalidad pero que la gran mayoría no la usamos.

Memoria RAM que consume: 2.1MB

Eliminar el servicio One Conf Service

Descripción: Está relacionado con Ubuntu One y por lo tanto no lo necesito.

Memoria RAM que consume: 13.2MB

Eliminar la comprobación automática de actualizaciones

Descripción: Sirve para que cada vez que Ubuntu encuentra nuevas actualizaciones no te esté avisando en todo momento.

Memoria RAM que consume: 35MB

Sustituir el Software Center por Synaptic

Descripción: Haciendo este paso noté mucha diferencia, el equipo mejoró notablemente.

Memoria RAM que consume: 60MB

Nota: Al desinstalar el Centro de Software también necesitarán utilizar una herramienta para instalar a mano los .deb que tengan en sus PCs, esos que instalamos al hacer doble clic sobre ellos, para eso deben instalar ahora el programa Gdebi.

Modem Manager: (2.7 MB)

Update Notifier: (3 MB)

Con eso ya lo tendremos casi todo si lograste optimizar Ubuntu 14.04 LTS cuentame como te fué.

¡Hasta un próximo post!

Como crear archivos PDF con PHP Laravel 5.x

Estoy usando una librería que me llamó mucho la atención para generar PDF a partir de una view PHP Laravel 5.x

El plugin en cuestión es: https://packagist.org/packages/mpdf/mpdf

Añade esto en tu composer.json

Y actualiza

Crea un archivo php para colocar el snippet que está abajo. Yo estoy usando Helpers para guardar esto.

De esta forma tienes un Wrapper de mPDF para usar en Laravel 5.x

Puedes usarlo de esta forma:

¡Hasta un próximo post!

Exception with message proc_open() ¡lo arreglamos!

message proc_open()

PHP Fatal error: Uncaught exception ‘ErrorException‘ with message proc_open(): fork failed – Cannot allocate memory in phar

Eso significa que composer.phar se quedó sin swap. Ahora, ¿cómo lo arreglamos?.

Esta es una solución para los usuarios de Ubuntu 14.04 y similares, en mi caso tengo una pequeña partición para el manejo de swap, por eso suceden este tipo de errores. Esta solución te va a permitir añadir ese extra de swap que necesitas sin modificar mucho.

Verifica que tienes espacio suficiente en el disco

Antes de hacer cualquier cosa, asegúrate que tengas espacio disponible:

Crear un archivo Swap

Ahora que tienes suficiente espacio en el disco para trabajar, vamos a crear un archivo llamado swapfile en la raíz del disco  (/). El archivo debe reservar la cantidad de espacio que queremos usar para nuestra swap.

Aquí viene la magia

Hay 2 formas de configurar esta swap, la forma tradicional reservando y creando una partición en el disco, y la forma rápida donde vamos a usar el programa fallocate. Este comando crea un archivo con un tamaño preasignado instantáneamente, sin tener que escribir mucho.

Vamos a crear un archivo de 4 Gigabytes:

La creación de este archivo es casi inmediato. Podemos confirmar que la cantidad de espacio fue reservado efectivamente.

Habilitando el archivo Swap

Ahora que el archivo está creado, debemos indicarle a nuestro sistema que ese archivo tiene el propósito de ser usado para Swap. Antes de hacer eso, debemos añadirle permisos para que solo pueda ser accedido por root. Permitir que otros usuarios puedan leer o escribir en el archivo sería un riesgo de seguridad enorme.

Verifica que el archivo tiene los permisos correctos:

Ahora nuestro archivo es mas seguro y podemos decirle al sistema que lo configure para swap.

Ahora nuestro archivo esta listo para ser usado como swap y podemos habilitarlo.

Verificamos que el procedimiento fue satisfactorio chequeando que nuestro sistema tiene mayor espacio de swap ahora:

Nuestro swap fue configurado y aumentado correctamente dejando que nuestro sistema pueda comenzar a usarlo si es necesario, sin tener el ‘ErrorException‘ with message proc_open(): fork failed.

Hasta aquí todo marcha bien, podemos dejar ese archivo swap solo para momentos que así se requieran o podemos usarlo permanentemente configurando añadiendo en el /etc/fstab.

¡Hasta un próximo post!

Denormalización

Esto es algo de lo cual quería hablar, muchos colegas me han comentado muy interesados acerca del mundo NoSQL y su uso. Lo que he podido comentarles es que deben entender bien lo que significa la Denormalización y que todo lo que aprendieron con base de datos relacionales no funciona de la misma manera.

Vamos a ver un poco de que se trata, según Wikipedia tenemos que:

La denormalización es el proceso de procurar optimizar el desempeño de una base de datos por medio de agregar datos redundantes. A veces es necesaria porque los actuales SGBD implementan el modelo relacional pobremente. Un verdadero SGBD relacional debe permitir una base de datos completamente normalizada a nivel lógico, mientras proporciona el almacenamiento físico de los datos afinado para alto rendimiento…

Ahora, buscando en Internet me encontré con estos excelentes artículos que les ayudará a entender un poco mas de que se trata:

https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html

 

 

http://es.discovermeteor.com/chapters/denormalization/

Como siempre, si te gustó este contenido y lo encontraste útil, ¡compártelo en tus redes sociales!

¡Hasta un próximo post!

Error leyendo /home/user/.nano_history: Permiso denegado Pulsa intro para continuar iniciando nano

Algunas veces al tratar de editar o crear un archivo de texto utilizando editores de texto como «nano» nos encontramos con un mensaje de error que si bien no es importante, es molesto. Basta con presionar la tecla Enter para que el mensaje desaparezca y entremos en el programa para editar dicho archivo.

Este mensaje de error esta causado por no tener permisos para escribir en el archivo /home/usuario/.nano_history, si se fijan bien, el nombre de archivo comienza con un «.» (punto), lo que en Linux significa que es un archivo oculto.

Para solucionarlo es necesario devolverle los permisos a dicho archivo (ya que fueron cambiados accidentalmente por lo general). Basta con ejecutar el comando chmod 755 como root, o con sudo para distribuciones basadas en debian.

:~$ nano ./archivo.txt

Error leyendo /home/usuario/.nano_history: Permiso denegado

Pulsa intro para continuar iniciando nano

:~$ sudo chmod 775 ./.nano_history
Password: (pon el password correcto)

y listo !

Ya no molestara mas este mensaje la próxima vez que deseemos crear o editar archivos de texto con nano.

Nano es un editor de texto muy potente para la terminal de linux. Carece de interfaz gráfica lo que lo hace una excelente opción para editar archivos de configuración cuando las cosas van mal y no pueden acceder al escritorio o manejador de ventanas.

Lowercase y Uppercase no son suficientes

Lowercase y Uppercase no son suficientes

Javascript es un lenguaje muy potente y versátil, nos permite expandir las posibilidades de uso al máximo de nuestras necesidades y creatividad. Muchas veces las funciones de Lowercase o Uppercase no son suficientes a la hora de formatear contenido, cuando todo está en mayúsculas y necesito que tenga formato de título, es decir, la primera letra en mayúscula.

Todos los objetos en JavaScript tienen una propiedad especial llamada prototype que es una referencia a otro objeto simulando una herencia (recordemos que en JavaScript no existe la herencia basada en clases), si queremos agregar métodos o propiedades a un objeto podemos hacerlo mediante el prototype, esto es muy útil para encapsular y reutilizar el código, dando la posibilidad de adaptar tus códigos al diseño orientada a objetos.

Ahora volviendo un poco al propósito de este Post, cuando necesitamos usar un Title Case para que cada palabra comience con mayúscula, este método fue creado precisamente para solucionar este problema.

A continuación les dejo una solucion para javascript de Title Case.

Si quieres que sea una función nativa de String podríamos agregarlo en prototype:

Si probamos la función anterior tendremos:

¿Donde más podemos usarlo?

Esta solución puede ser nuestro mejor aliado si tenemos un poco de ingenio. Podríamos aplicarlo en Handlebars.js, un motor de plantillas muy popular, potente y fácil de utilizar separando el diseño HTML del resto de tu Javascript, para así escribir código mucho más limpio. Este motor de plantillas permite crear o customizar funciones por medio de helpers.

Podemos registrar un helper en Handlebars.js que permita aplicar el método aprendido más arriba:

Si probamos el helper declarado anteriormente tendremos:

¿Sabes de algún otro lugar donde las funciones de Lowercase o Uppercase no sean suficientes y necesitas usar un formato de Título?

Espero les sea tan útil como a mi.

¡Hasta un próximo post!

Chequear una cadena vacia en bash

En Bash muy a menudo debemos comprobar si una variable tiene un valor distinto de una cadena vacía. Esto se puede hacer usando los operadores de comparación de cadenas -n o -z.

El operador -n comprueba si la cadena no es nulo. Efectivamente, esto devolverá True para todos los casos, excepto cuando la cadena no contiene ningún carácter. es decir:

Similar, el operador -z chequea si la cadena es null, ejemplo:

Tenga en cuenta los espacios alrededor de los corchetes. Bash se quejará si los espacios no están allí.

¡Hasta un próximo post!

Configuración esencial de Grunt

Hace algunos años atrás un desarrollo requería añadir en nuestro proyecto de producción muchísimas hojas de estilo, scripts en javascript, e imágenes de diferentes tamaños. Esta cantidad de requests consumen muchísimo tiempo de carga en el servidor y de descarga del lado del browser, además, Google comenzó a penalizar en su Page Rank las páginas no optimizadas.

Luego se comenzó a escribir todo en 1 solo archivo CSS o JS, solucionando la cantidad de requests y obteniendo archivos enormes que hacían sumamente tedioso el mantenimiento de estos archivos.

Al pasar del tiempo y buscando soluciones, se comenzó a minificar los archivos para mantener todo en 1 solo archivo y optimizando el tamaño de los mismos, de igual forma no se lograba solucionar la facilidad de mantenimiento.

Hasta que finalmente comenzaron a salir a la luz los preprocesadores como LESS, SASS, COFFEE SCRIPTS entre otros, estos permiten optimizar los estilos y scripts para luego ser compilados y obtener archivos minificados, optimizados y de fácil mantenimiento en el tiempo.

Pero surge otro problema, hacer esta compilación y minificación constantemente consume muchísimo tiempo y durante el tiempo de desarrollo se convierte en algo tedioso de realizar por ser una tarea repetitiva.

Por ello se buscó optimizar y automatizar estas tareas, llegando asi GRUNT a solucionar esta labor, empleando menos horas de trabajo en tareas repetitivas como minificación, compilación, pruebas unitarias, validaciones, etc. Utilizando NodeJS como motor de compilación, y un archivo de configuración, es capaz de realizar múltiples tareas en paralelo y de forma asíncrona, al igual que añadir nuevas mejoras y plugins de forma facil ya que basicamente es Javascript.

Las configuraciones son variadas y dependen del desarrollo en el cual te encuentres, a continuación te dejo una configuración básica para cualquier proyecto.

Y por supuesto, si le sacaste provecho a este post, ¡no olvides compartirlo en tus redes sociales!

¡Hasta un próximo post!

Try Git

Para aquellos que quieren iniciarse en GIT, siempre les recomiendo este enlace:

Es un excelente acercamiento e iniciación.

¡Hasta un próximo post!