Abrir todos los links externos en nueva ventana
Hace un tiempo atrás, necesitaba que todos los links externos fueran abiertos en una nueva ventana. Primero hice una función en PHP que cuando construía el link, detectaba si el mismo era interno o externo y si era externo, lo dejaba con el famoso target="_BLANK". Sin embargo, al poco tiempo después me di cuenta que ésta no era la solución ideal ya que fallaba en dos aspectos fundamentales: Si el link era construido mediante TinyMCE (o sea, por el usuario), no pasaba por el "constructor" de links. Por otro lado, el código generado no era compatible con la W3C en el modo estricto (En este modo, se elimina el atributo "target").
Así que me puse a investigar qué necesitaba para que cumpliera con los dos propósitos... ¿La respuesta? JavaScript, y si podía utilizar el poder de selección de la librería jQuery, aún mejor. El resultado fue que todos los links externos de la página, independiente de quién las haya creado, se abren en otra ventana y lo mejor de todo es que el código de la página es compatible con la W3C.
$(document).ready(function(){$('a:not([href^="http://blog.unreal4u.com/"])').attr("target","_BLANK");});
Obviamente tiene que reemplazar http://blog.unreal4u.com/ con la ruta de su aplicación.
Nueva class publicada: HTML Utilities
Hace ya cerca de un mes atrás, publiqué una nueva Class en phpClasses. Esta class posteriormente fue nominada en un sitio del cual todavía no cacho cuál es el propósito, pero la imagen se ve genial:
Los detalles de la class están después del salto.
Configuración de PHP testing vs producción vs hosting
Frecuentemente me he dado cuenta de que sobretodo en algunos hostings masivos, la configuración de PHP quizás no es la más adecuada en cuanto a rendimiento y seguridad. Lo primero por lo general es por un tema de retrocompatibilidad, mientras que lo segundo es para que no los tapen a llamadas debido a que algo no funciona como debe (y no revisan los logs).
Este post tratará fundamentalmente de este tema: se explicarán algunas de las opciones más extrañas o menos documentadas de PHP (última versión de la rama 5.2) y se comparará su uso en un ambiente de testing versus un ambiente de producción. Así que dale a "continuar leyendo" que esto no es fácil de encontrar!
Es mejor cURL o file_get_contents?
Históricamente, siempre he tenido problemas con estas dos funciones. De repente está desactivada la directiva de poder obtener contenido remoto y eso producirá un montón de problemas si dependemos de file_get_contents() para nuestro sitio. Por otro lado, también es bastante inseguro y por lo mismo se le desactiva.
Las directivas que controlan en php.ini la inclusión de archivos remotos son dos:
allow_url_fopen = Off
allow_url_include = Off
Que por lo general se encuentran predeterminadamente en Off, especialmente en las últimas versiones de PHP. La diferencia entre ambas es que la primera permite tratar archivos con un protocolo determinado (tal como http:// o ftp://) como un archivo, y la segunda directiva establece si acaso se puede ocupar la función include() o require() con este tipo de archivos.
Búsqueda de PHP.net en Firefox y trucos de vim
Hoy me di cuenta de algo que no me había dado cuenta. (duuuh)
Siempre, cuando necesitaba buscar alguna función en PHP.net, hacía la típica: iba a Google, tipeaba el nombre de la función, ubicaba PHP.net y hacía click.
Bueno, como casi todos los grandes descubrimientos de la humanidad, estaba en la portada de PHP.net y por accidente hice clic donde no debía. Descubrí esto:

Sin embargo, el verdadero potencial de este post está por verse, veamos algunos comandos semi-avanzados de vim que nos hará la vida mucho más fácil al trabajar con este editor.
Cómo ocupar ob_start(), ob_get_contents() y otros relacionados
Pensando en qué truco podría ser útil, me acordé de los famosos ob_* que en un principio me parecían bastante complicados e inútiles.
Sin embargo, hoy constituyen un pilar fundamental en mi ambiente de desarrollo, puesto que me permiten ejecutar código, y poder redirigir a alguna página en específico incluso después de haberse ejecutado la página completa. Por supuesto, también me permite insertar contenido Javascript en los headers después de haber ejecutado la página.
¿Pero cómo se ocupa? Para esto es este post.
Y tenemos nueva casa!
Gracias a que terminé antes de tiempo un proyecto que tenía en carpeta, hoy me pude dedicar a algo que me tenía dando vueltas hace rato: el cambio de servidor. Ahora sí estoy en un server de verdad, y no uno de casa haciéndolas como de server. Sin ningún tuning, es un 25% más rápido, con tuning yo creo que lograría fácil un 50% a un 60% extra con respecto al antiguo.
Así que espero que ahora el sitio se reactive un poco más junto con algunos otros proyectos personales que tenía un poco botados.
Saludos !!
CMD+Q y Mac OS X… cómo eliminar ese shortcut
Hace meses que no escribo y ha sido por una razón: Hace meses que quiero cambiar de hosting, pero no me he dado la paja de hacerlo. Tengo un respaldo de hace un par de meses y todavía no lo monto. Prometo que hoy en la noche respaldo nuevamente y subiré todo al nuevo hosting. Bueno, quizás no hoy en la noche, pero sí durante el fin de semana.
En estos meses que llevo en Santiago, la vida me ha cambiado. Ya no trabajo en el mismo escritorio que tenía de los 15 años, sino que trabajo en un piso 15. La vista a la pared fue reemplazada por una vista hacia la cordillera por un lado y hacia el cerro Santa Lucía por otro. Por supuesto, en vez de mi PC ahora tengo Macbook Pro, y ha sido una de las mejores máquinas en las cuales he trabajado: si bien es cierto al cabo de algunas semanas igual tengo que reiniciar, no se pega como Windows lo hace. El trackpad es lejos de lo más filete que he tenido: funciona a la perfección y en general no me ha decepcionado para nada. Los que alegan contra Apple es sólo porque nunca han trabajado con una máquina de Apple, se nota que le pusieron mucho empeño al crear máquinas tan maravillosas.

