Categoría: Programacion

Un Feed Reader para los Links de Viernes



El lunes pasado llegué de vacaciones y me puse a programar cual adolescente con ideas, si, esas ideas que seguro ya tuvieron todos antes que vos, pero lo que estaba buscando era, como siempre pasa cuando programo, una solución a un problema mío que, por extensión, seguramente iba a beneficiar a otros.

Aun existiendo ofertas por todos lados como Feedly para reemplazar Google Reader (próximo a cerrar) quería tener mi propia solución dentro del site de Links de Viernes porque es el lugar lógico donde la gente pueda intercambiar enlaces interesantes. La cuestión es sencilla, yo siempre puedo disponer de mi propio código y no tengo que depender de la decisión caprichosa de un tercero, a la vez, por razones obvias, quien use mi sistema se encontrará igualmente desprotegido que si usase el de google, pero bueno, no puedo con todo tampoco :P

En mi caso tal vez pueda liberar el código algún día, primero tengo que hacerlo funcionar bien. A continuación les cuento qué hice, qué funciona y qué queda por delante (mucho).

Seguir leyendo el post »

Enumerando y actualizando posts en MySQL

El otro día me puse a contar posts de Ruleta Rusa y Links de Viernes, resulta que Google en ese afán de querer decirnos cómo debemos bloguear y no respetar un cuerno que a nosotros nos pasemos por el traste sus "reglas" optó por penalizar a cada site cuyos posts tengan el mismo nombre.

He aquí que con más de 400 posts que compartían el nombre tuve que hacer algo para renombrarlos y, al menos, enumerarlos.

No tenía ganas de hacer tablas temporales ni nada por el estilo, así que opté por una forma un tanto cochina que permite MySQL, primero hice una prueba para ver si más o menos podía hacerlo, como si uno estuviese programando en PHP pero esta vez dentro del MySQL, creamos una variable, la seteamos a cero y ésta será nuestro contador, es fácil:

SET @inc :=0;

Nótese el ; (punto y coma) para separar instrucciones, no se lo olviden porque no va a funcionar, el SET es una función separada del SELECT.

De esta manera @inc será una variable que incremente, su valor inicial será cero, ahora hagamos un SELECT de prueba, para ello en el primer campo agrego uno al contador, en el segudo muestro el título, tercero la noticia y cuarto uno que concatene el título, un guión y numeral (porque me place) y luego el número. Como verán usé CONCAT para armar el string final pero también CAST para pasar el número a char porque si no en algunos casos hacía cualquier cosa.

SELECT @inc := @inc +1 AS a, title, id_noticia, CONCAT( title, ' - #' ,CAST(@inc AS CHAR)) AS titulomejorado
FROM `posts`
WHERE title LIKE 'Links de Viernes%' and title <> 'Links de Viernes toda la semana'
ORDER BY time ASC
LIMIT 0 , 300


Busqué todos los LDV y de paso dejé afuera el post donde hablaba del nuevo sitio de los LDV, porque claro, no era lo mismo y me iba a quedar mal numerado.

Una vez que vi que estaba todo ok le agregué una columna temporal a la tabla, a veces hago esta grasada, sirve bastante, algunos hacen toda una tabla paralela y luego la renombran, preferí este cochino método. Obviamente antes de hacer algo así recomiendo hacer backup de la base, uno nunca sabe cuando se olvida de poner el WHERE en el UPDATE :P

Ahora con la idea encaminada me dispuse a actualizar ese nuevo campo, creo un VARCHAR del mismo tamaño que los títulos, con el nombre "titulomejorado" y me dispongo a rellenarlo con lo que corresponda:

SET @inc :=0;
UPDATE posts A
INNER JOIN (
SELECT @inc := @inc +1 AS a, title, id_noticia, CONCAT( title, ' - #' ,CAST(@inc AS CHAR)) AS titulomejorado
FROM `posts`
WHERE title LIKE 'Links de Viernes%' and title <> 'Links de Viernes toda la semana'
ORDER BY time ASC) X
ON X.id_noticia = A.id_noticia
SET A.titulomejorado = X.titulomejorado; 


En este caso hago un join con la búsqueda anterior, la razón es simple, al ya tener todos los ID de noticia ya puedo actualizar uno por uno, funciona bien, es rápido y sólo afecto a las filas de los posts que me interesan, el resto ni se entera.

A muchos les cuesta un poco hacer querys dentro de querys pero donde le tomás la mano sale muy bien, el problema es cuando estás practicando y arruinás todo :D

Una vez ejecutado este UPDATE deja en el campo "titulomejorado" el nuevo título, podemos chequear que todo esté bien y ahí disponernos a usarlo definitivamente:

UPDATE posts
SET title = titulomejorado
WHERE titulomejorado IS NOT NULL; 

Obviamente la condición es importante una vez más, si no ponemos ese where dejando afuera todos los otros posts básicamente les vamos a borrar el título a todas las notas, algo que nos haría entrar en pánico :P

Luego de esto podemos borrar la columna temporal "titulomejorado", ahora todos los posts de Links de Viernes y Ruleta Rusa estan perfectamente numerados, por ahí hay otros posts más viejos que usaron otro título, pero esos no afectan en Google.

Para ver el tema de posts con títulos duplicados usen Webmaster Tools y ahí les dirá donde hay un problemita

Ah ¿se pensaban que ya no posteaba estas cosas en el blog? no se olviden de donde vengo mis muchachos :P, se aceptan correcciones e ideas más performantes a lo que sugiero, esto tan sólo me dio resultado Guiño

Seguir leyendo el post »

Una ayudita con expresiones regulares

A ver, que a veces me toca a mí pedirles una ayudita a los lectores programadores.

Resulta que estoy trabajando con el código del blog para que las urls del mísmo no aparezcan duplicadas para Google, actualmente el buscador me voló del índice unos 3000 posts, como se imaginarán no me pone muy contento. Una de las posibles razones son los duplicados, no es algo intencional, sólo que desde que puse la posibilidad de que los posts se vean como: http://www.fabio.com.ar/5014 esto generó un problema

La url original era más bien fea: http://www.fabio.com.ar/verpost.php?id_noticia=5014 y por eso la idea fue acortarla a algo más sencillo.

El tema es que Google ve dos ahora, http://www.fabio.com.ar/verpost.php?id_noticia=5014 y http://www.fabio.com.ar/5014 para una misma nota, considera que estoy haciendo algo sucio duplicando contenidos aun cuando ambos son exactamente el mismo.

Para ello ahora hago un redirect en php y le envío un código 301, éste implica que es contenido "movido" y no duplicado. OK, hasta ahí bárbaro y si hacen click en una url larga y vieja los llevará a la corta simplificada.

Pero aquí tengo un problema, herencia del código viejo de mi blog, esta es la regla que ajusta la url:

RewriteRule ^([0-9_]+)$ verpost.php?id_noticia=$1&vieja=1 [L]

Hasta ahí todo perfecto, Apache se encarga de pasarle el parámetro si es que viene un numerito (el id del post) y se lo pasa a la vieja estructura.

El problema es cuando, por ejemplo, para emitir un mensaje de error (onda, escribiste una palabra spammera o te equivocaste el código de seguridad) le pasaba un parámetro, la url quedaría así:

http://www.fabio.com.ar/5014&mensaje=4

El problema con esto es que 5014&mensaje=4 no significa nada para esa expresión regular y directamente me lo desecha como error 404, un despropósito.

Por esto necesito cambiar:

RewriteRule ^([0-9_]+)$ verpost.php?id_noticia=$1&vieja=1 [L]

de manera tal que contemple no sólo el número de ID del post si no los parámetros extra como "mensaje" y lo pase a la vieja url, de esta manera yo sería un blogger muy feliz y, tal vez algún día, Google considere este blog digno nuevamente en su totalidad y no sólamente para 1800 posts :P

¿Mi problema? nunca entendí bien las expresiones regulares, así es, soy bastante burro con las malditas y no sabría como hacer para que me genere el parámetro $2 para mensaje, no es difícil, lo se, pero zoy ezpezial :P ¿me ayudan?

Seguir leyendo el post »

Cuantas palabras tienen tus posts

Hoy estaba pensando en esto ¿como cuernos cuento las palabras en mis posts? es que nunca me puse a hacerlo y de pronto me di cuenta que en MySQL no hay funciones para esto ¡hay que googlear! ya mismo, pásenme la googlera.

Así fue que encontré una forma, pero resulta que no sólo tengo que contar palabras si no que tengo que, primero, sacarle todo el HTML que yo le agrego a mis posts.

Así es, en el viejo y querido PostRev el código se agrega a mano lo que complica identificar una palabra y los números no me daban, así que a crear dos funciones, wordcount y strip_tags.

La cuestión también está en que una base de datos no es precisamente para hacer cuentas, esas debería hacerlas aparte, pero salvo que sean sumatorias estas eran cosas para hacer aparte. ¿como hacerlo y seguir dentro de MySQL? creando funciones y utlizándolas en la consulta.

Es un poco intensivo y recomiendo hacerlo solamente con una copia local de la base de datos, así si tienen que esperar no bloquean el blog durante un rato.

A continuación se las comento

Seguir leyendo el post »

Stardust, pequeño experimento



Estaba con necesidad de "programar algo", vieron, para el día del programador, así que publiqué ayer a la tarde un nuevo site, no es que pretenda actualizarlo muy seguido, pero era un experimento para crear una especie de "youtube" propio sin las restricciones impuestas en dicho servicio de video.

No es código pensado para difundir, apenas hay una base de datos de fondo para guardar los videos, no hay ni tags ni comentarios, sólo videos que me gustaron, bajo el mp4, lo preparo, lo subo, cito la fuente y lo alojo.

Más de una vez me encuentro con videos que me gustan y a la semana Youtube bajó por alguna regla idiota o le bloquean el poder distribuírlo o compartirlo entre sitios, todo para forzarnos a ver una cierta cantidad de publicidad o un canal de video en particular. O te censuran el audio porque en 10 minutos de video hay un sólo minuto de una canción, algo ridículo y que, al menos en la mayoría de los países del mundo (estoy incluye a los EEUU) es completamente legal porque entra en el esquema de "Fair use".

Bueno, pero no era sólo por cuestión de principios si no para ver si podía hacerlo, le dediqué unas 3-4 horitas algo espaciadas para ver si lo hacía de tal o cual manera, escribí un poco de código y me fue gustando la idea. Así publiqué Stardust.

Repito, la idea no es usarlo demasiado fuerte, ya tengo demasiados proyectos activos, Fabio.com.ar, Tecnogeek.com (mis dos blogs principales), Cake Division (mi agencia digital de publicidad), LinksDeViernes.com (comunidad online), Elección Argentina (wiki), PicPetz (imagenes de animales), No Al Canon (muy desactualizado blog de protesta), y un largo etcétera, la idea no es sumar más quilombo pero fue un divertido ejercicio de programación rápida "a las patadas" como me divierte hacer.

Así que disfrútenlo, cada tanto actualizaré videos y sumaré más, no hay nada ilegal, no se trata de un cuevana ni nada que contenga material "protegido", la idea es más bien boludeces y cosas entretenidas para ver.

Como siempre se aceptan sugerencias, ideas, aportes de código y críticas.

Seguir leyendo el post »

Arreglando el problema (parcialmente) de los Like de Facebook



Las redes sociales sumaron sus botoncitos para republicar/recomendar contenido en ellas mísmas pero esos botoncitos no siempre funcionan bien, más bien, apestan.

El de Twitter nunca muestra los resultados hasta tres o cuatro días después, el de Google ahora está andando mejor pero el "like" no se refleja en ningún lado, ni en el timeline de Google+ (hay que entrar en un submenú de cada usuario, WTF?) y el de Facebook venía funcionando bien hasta hace unas semanas.

¿que pasó? ni idea, definitivamente no es un error de nuestros sitios ya que sin hacer cambios por este lado comenzó a fallar, pero en tres-cuatro semanas nadie de Facebook se molestó en arreglarlo y, como siempre, en estos casos hay que recurrir a algún vericueto para solucionarlo "a medias".

Como buen Argentino siempre atamos todo con alambre y buscando por ahí encontré una forma de apaliar el tema, primero que nada el problema se parece al de un ping que no llega a destino. "algo" en Facebook identifica mal nuestra URL y por ende no accede a darle el "like".

El botón de "like" dispara ciertos mecanismos dentro de Facebook, va hasta el sitio que lo solicita, toma la url, la descarga, identifica encabezados, busca la imagen del post, la public en tu muro. Todo eso debe hacer el botoncito que como verán es mucho más que un simple botón.

El primer tip es, entonces, que la URL sea fácil de identificar para Facebook y si son de programar en PHP como yo, hay que convertirla con urlencode:

urlencode(the_permalink()); // para Wordpress

urlencode($url); // para PostRev Guiño


Al menos esto solucionaría una parte del problema pero no lo es todo, el segundo son los encabezados y acá la culpa es TODA de Facebook pretendiendo que en nuestros blogs sumemos headers que no son estándar.

El Open Graph Protocol. ¿necesidad? ninguna! el HTML ya cuenta con todas las propiedades que Facebook require duplicar, algo absolutamente ridículo. Pero es así, primero es un protocolo abierto, segundo, sirve para identificar cosas, así que si queremos ser "Facebook Like" deberíamos implementarlos en el blog.

Tercero, si todo falla, hay una opción más: forzarlo. Entre las herramientas de Facebook está el URL Linter que permite cargar tu url, analizarla y "habilitarla" para Facebook. Cualquier URL que previamente fallase, la cargan en el Linter, Lint y listo, ya se encuentra "catalogada".

Ahí mísmo verán cómo te muestra los "errores" o faltantes (de ahí confirmé lo del Open Graph) y cómo ve Facebook tu blog.

Y listo, más información no sabría darles, con esto funciona aunque suele fallar también, seguramente en este blog termine implementando los headers de Open Graph al menos en una versión simplificada pero suficiente.

Seguir leyendo el post »

Frases para programadores



Como soy de los enfermos que disfrutan de programar un viernes a la noche, y cuando digo disfrutar, es que anoche tenía como opciones ver tele, masacrar gente jugando un FPS, navegar aburridamente o programar y elegí esto último.

Navegando por ahí encontré hace un tiempo esta extensa lista con grandes frases de programadores para programadores y, sepan disculpar los que no comprenden demasiado el tema, hoy tengo un post para nardogeeks de buena ley :D

Junté aquí las que más me gustaron, si no siempre pueden consultar la fuente que tiene 50 grandes citas.

Seguir leyendo el post »

Posts Favoritos

Funcionalidad que me pidieron hace años y siempre me dio fiaca programar.

Ahora la importé desde el código de Links de Viernes.com y pueden marcar como favoritos los posts que más le gusten.



Al pie de cada nota hay una pequeña estrellita, sólo se ve cuando estás dentro de una nota, no en la portada del sitio, allí pueden marcar o desmarcar un post que les guste.



En el menú de usuario, ya que esta funcionalidad sólo es para usuarios registrados, tendrán un link a los post marcados y allí podrán ver un listado con todo lo que les gustó.



No es la gran cosa pero al menos funciona!

Seguir leyendo el post »

Video en HTML5

Luego de leer un excelente artículo sobre estos temas me dieron ganas de escribir al respecto, al menos para probar un poco del tag VIDEO de HTML5 que tanto se ha ido mencionando en el ambiente de desarrollo web y que pocos estan usando todavía.

Justamente este post es para aquellos que utilizan un browser moderno, y cuando digo moderno me refiero a, en algunos casos, experimentales, como Fireofx 4 Beta 7 o el recientemente lanzado Chrome 8, son browsers muy nuevos y que todavía no conforman la mayoría.

Para aquellos que no entienden de que se trata, un breve repaso, hasta ahora ver un video en la web significa que el browser tiene que llamar a un plugin o aplicación externa para hacerlo, un "objeto" extraño que se mete entre el browser y vos para mostrarte algo tan básico como un video o un audio.

La adopción de HTML5 agrega dos nuevos tags, AUDIO y VIDEO justamente para suplir este hueco y que el mismo browser pueda integrar correctamente el video. En poco tiempo tendremos a Youtube con todos sus videos en WebM, el formato propuesto por ellos, pero he aquí el problema, no todos los browsers usarán el mismo codec/container para sus navegadores ¡que rompehuevos! así es, lo discutimos varias veces en el blog cuando Apple y Nokia insistieron en no definir el formato default cuando definían HTML5, así que pasamos de un draft con el OGG/Theora a uno que no dice nada sobre este combo indispensable.

Adentro del post les cuento como se puede "resolver" esto para el usuario, no para nosotros, claro :P

Seguir leyendo el post »

Post Revolution 0.8.0 Alpha

¿Hace cuanto no posteo nada del PostRev en mi blog? respondo yo mismo, hace más de un año. Es que los vaivenes de la vida entre los que se incluyen: independización, matrimonio, radio, blogs, redes sociales, familia, negocios y un largo etcétera dejan poco tiempo para programar.

Pero me lo hice y si bien todavía es una versión muy primitiva como para recomendar su uso, muchos me pedían que libere el código y ahí lo tienen.

No sólo liberé el código, estreno sitio nuevo con el dominio propio, postrev.com.ar y un wiki para ir completando a medida que tenga tiempo con cada detalle del sistema.

Los más jóvenes se preguntarán ¿que es el postrev? pues bien, el Post Revolution es el sistema que utiliza este blog. Ni Wordpress ni Blogspot, acá usamos PostRev! :D desde 2004 es el encargado de que el blog funcione y tan mal no se portó.

Está mal programado, su código es una basura, no respeta ningún patrón, pero sin embargo tiene algo que pocos, funciona, lo hice yo y me gusta seguir cambiándole cosas cada tanto. Es mi herramienta de aprendizaje y gracias al mismo entendí que la mayoría de los bloggers no entiende cómo funciona su propio blog, algo imprescindible para un nardogeek.

Los kakers estarán de parabienes, espero que aporten código, el wiki está para ellos, para que me reporten cada cagadita del código y yo pueda arreglarla. También a futuro planeo abrir públicamente el SVN y si algún programador se quiere sumar pasando código, bienvenido sea, es 100% software libre. Obviamente, hay muchos huecos que estaría bueno cubrir, sean piadosos :P

Otro detalle, el diseño default que tiene es horrible, es mi intención crear uno nuevo pero se me ocurrió ¿que tal si hago un concurso para diseñadores? no tengo grandes premios todavía, más bien, tengo una cajita llena de porquerías, pero... probablemente más de un diseñador lo aprecie :D así que proximamente habrá concurso y los mejores diseños serán adaptados al PostRev. Lo único que hace falta es HTML+CSS, del resto me encargo yo Guiño

Para aquellos viejos usuarios del sistemita, pueden divertirse un par de minutos recordando como era, total... el panel de administración es el mismo desde hace 6 años :D

Seguir leyendo el post »

125 Noticias (13 páginas, 10 por página)