Categoría: Programacion

Un mapa con el clima actual

Google cierra Google Weather y me tuve que inventar mi propio mapa con clima, le quedan pocos días a esa API y es una lástima, proveía de un muy buen mapa (el de Google Maps) con datos climáticos de distintas ubicaciones, pero he aquí que, evidentemente, no es rentable y matan la API en un mes.

Por ende tuve que inventarme uno, si, utilizando Google Maps, pero en vez de recurrir a su set de datos lo hago con el propio. En Catchweather ya tengo muchas ubicaciones guardadas, así que pensé en lo siguiente, si tomo las que tengo en una zona delimitada, busco las más importantes (por tamaño), consulto el clima de cada una y lo muestro como marcadores, puede llegar a funcionar.



El trabajito no es simple, por cada ubicación debo consultar los RSS de un máximo de 20 localidades, se toma su tiempo, entre 2 y 3 segundos máximo, lo que frena un poco la velocidad de carga de la página. Esto con muchos usuarios no se nota, pero como somos poquitos por hora se nota, los status de clima los mantengo por cinco minutos así que, salvo que entremos todos cada un minuto, se nota cuando debe cargar todo de nuevo. Pero al no tener volumen no importa demasiado crear un cron o algo así.

Crear este mapa me permite, además, tener una nueva sección en Catchweather con el clima de zonas aledañas, lo que no quiero, todavía, agregarle es que puedas moverte por el mapa y vaya cargando dinámicamente más ciudades, el costo no lo justifica (y no soy Google!). Debería, eso sí, mejorar los íconos, pero por el momento estoy usando el mismo set de siempre, más adelante lo modernizo un poco, probablemente con algunos PNG con transparencias o algo así.

La idea es, también, ver si se puede proveer el servicio para los demás, no lo pensé en un comienzo pero si funciona para mí podría liberar el script, no es muy complicado, cada ciudad es un marcador, el ícono en vez de ser una flecha es el del clima local. El rango de coordenadas en el que busca es de dos grados en cada dirección y toma ciudades mayores, así que los pueblos chicos no debería mostrarlos. El sistema de posicionamiento y cálculo de tamaños es el de la API Places de Yahoo.



Lo bueno de hacerlo así separable es que puedo pasar el mapa a OpenStreetMap en cualquier momento, no es que lo prefiera porque es más lento, pero en algún momento Google decide que no es negocio para ellos que tengas su mapa y te lo baja. Es una pena que le quiten atención a servicios tan buenos que tienen pero, lo dan gratis! no puedo reclamar demasiado :P

Otro experimento que por ahí a algún nardogeek programador le interese.

Seguir leyendo el post »

MySQL: Full Text Search para palabras pequeñas



Si, ya se, ahora está de moda usar MongoDB y abandonar SQL a las patadas porque la moda así lo indica, pero a los hechos, el lenguaje SQL es genial y sirve para mucho, así que hago un minipost para programadores que hacen búsquedas Full Text Search (hice esa nota hace 10 años!!) en sus MySQL.

Como sabrán es pesadito hacer este tipo de consultas pero a veces tenemos una cantidad de datos que es manejable, por ejemplo un sitio web, ahora bien, MySQL viene configurado para no buscar palabras menores a 4 caracteres pero he aquí que MUCHAS siglas utilizan sólo tres.

AMD, ARM, OSX, iOS, ADN, RPG, JPG, mierda, no pararía de terminar de enumerarlas, las palabras o siglas de tres caracteres estan por todos lados así que para permitirlo hay que habilitar la cantidad:

en /etc/mysql/my.cnf (o donde tengan el archivo de configuración)

[mysqld]
ft_min_word_len=3

[myisamchk]
ft_min_word_len=3



Y reiniciar el server. Ahora bien, hay que reconstruir los índices y para una tabla con 100.000 registros con texto que pesa 400Mb no es nada raro que se vaya al doble, lo digo por experiencia personal. El índice será enorme porque ahora contendrá muchas, muchas palabras más que si se quedaba en el límite de 4 carateres.

Para reiniciar los índices:

REPAIR TABLE tbl_name QUICK;

A todo esto, me sirvió para incorporar la búsqueda en el Lector de RSS de LinksDV. Si, ahora tienen un lector de feeds con buscador y todo Guiño

Seguir leyendo el post »

Se buscan developers!


Cabeza real de hacker en uso


Así es, esta vez soy yo el que está buscando desarrolladores para un proyecto en el que estoy trabajando hace un tiempo, es para el Ministerio de Modernización del Gobierno de la Ciudad de Buenos Aires, el área de Gobierno Electrónico que más innova y donde se pueden hacer muuuuuchas cosas muy interesantes.

Pero como siempre hacen falta cerebritos y programadores, es por ello que los convoco, porque se que a más de uno de ustedes les interesa jugar con nuevas tecnologías, cosas libres y abiertas (si, acá todo es Open Source), datos, sitios y muchas cosas más.

Andamos necesitando lo siguiente, en todos los casos perfiles Senior...

Web:

Senior backend Python / PHP / Javascript Preferentemente Conocimientos en Drupal, Django o expressjs son un plus.

Mobile:

Android nativo, un programador que realmente maneje Android como se debe. Plus los que sepan Titanium, JS y apps para iOS. Si ya tienen apps, envien url.

En ambos casos Git también es un plus porque todo se maneja con repositorios y mucho del código es publicado y forkeado libremente.

Se que no es muy específico porque estamos buscando perfiles "Senior" donde muy probablemente alguno no sepa alguna cosa pero pueda aprenderla rápidamente, además de lo buscado trabajamos con MUCHAS más cosas pero ya saben, es algo variadito.

Si estan interesados no duden en enviar su CV tanto a mí o al mail de Mariano Carballal marianocarballal(at)gmail(punto)com con el titulo "DEV GCBA", luego los contactaremos y habrá entrevistas y todo ese rollo, pero lo principal es que, si les interesa, envíen CV y nos comunicamos.

Seguir leyendo el post »

Bill Gates, BASIC y la escuela vendehumo



Era enero de 1975 y en el número de ese mes de Popular Electronics se mostraba la Altair 8800. Bill Gates apenas de 20 años se contactó con la gente de MITS (Micro Instrumentation and Telemetry Systems), creadores de la Altair y les comentó que él estaba trabajando en un itérprete de BASIC junto a su equipo para la plataforma.

Mentira, ni tenía una Altair 8800, tan sólo quería llamar la atención de MITS y no fue que Ed Roberts, presidente de la empresa, le pidió a Bill una demo.

Ante el apremiante pedido esa inicial "Microsoft" tuvo que escribri un emulador de Altair (para una minicomputadora) y luego el intérprete de BASIC, dos por uno, porque sino imposible hacer la demo. Al final fueron a las oficinas de Albuquerque de MITS y lograron firmar un acuerdo para distribuír el intérprete de BASIC en dicha computadora.

Paul Allen fue contratado por MITS y Bill Gates dejó por unos meses Harvard para trabajar con él en noviembre de 1975, más bien se fue para siempre de la universidad y llamaron a la sociedad "Micro-Soft", al año le quitaron el guión al nombre y el 26 de noviembre de 1976 registraron Microsoft en Albuquerque, Nuevo Mexico (eran como Breaking Bad pero del software)

De ahí en más el Microsoft BASIC fue el número uno de los intérpretes más usados. El tema es que ya desde el principio don Gates tuvo que lidiar con la libre distribución del software. Tan pronto como en febrero de 1976 escribió una carta a los hobbistas que usaban la Altair y se habían copiado entre sí el BASIC de MS. En dicha carta les reclamaba que los developers merecían cobrar por su trabajo y que no estaba bien que se lo copien, no les cayó muy bien pero ya tan pronto Bill sabía que su negocio estaba en vender software. A fines de 1976 Microsoft se independizaba de MITS y en 1979 se mudaron a Bellevue en Washington (el estado, no la ciudad).

En los primeros cinco años de MS el viejo Bill chequeaba cada línea de código que enviaba la compañía y era de escribir código y corregir, no como don Steve Jobs que no sabía ni que era una línea de código :D pero esa es otra historia que cuenta mejor Woz...

Bill Gates supo desde el principio cómo hacer esto, vender aunque no lo tengas, luego hacerlo si te compraron, un genio del vendehumismo :D

Via Wikipedia

Seguir leyendo el post »

Más y más cambios en LinksDV.com



Esto se los cuento aunque no les interese, es que estuve trabajando bastante en el código de LinksDV.com y estoy contento con el progreso aunque sean cosas que poco se ven.

Cuando uno dedica tanto tiempo a algo le quiere contar al resto, pero bueno, seguramente es más para developers y usuarios interesados, así que acá adentro del post les cuento los detalles de la última semana.

Para el que no sabe qué es LinksDV, es una pequeña comunidad de intercambio de enlaces y cosas interesantes que vemos en la web donde los usuarios seleccionan, "curan" contenidos, votan y también tienen un lector de RSS.

Seguir leyendo el post »

Para programadores: Limpiar la base de datos

Estuve trabajando ayer y hoy con la limpieza de datos sin usar del RSS Reader y noté que había un exceso de material inútil ocupando megas y megas de datos, así que pensé en hacer un poco de limpieza y explicar algunos truquitos a usar antes de que se te llene la base de datos.

Como es de esperar, es un post típico para programadores así que lo dejo chiquito y pase el que quiera o esté interesado en el tema Guiño y si no entendés nada pero te interesa el tema, te puedo explicar en los comentarios Guiño

Seguir leyendo el post »

Importador de Feeds para el RSS Reader

Me lo habían pedido unos cuantos y ya está listo y funcionando. Gracias a código de Patricio Marín que me envió una muestra de cómo hacerlo, ya pude implementar la importación de los viejos feeds del Google Reader (si es que recuperaste esos datos antes de que cierre) en el lector de feeds de LinksDV.com



Así es, si todavía lo tenés podés importarlo, en los pocos días que lleva activo ya se sumaron unos 750 feeds nuevos al sistema, andábamos por los 300. Ante la importación notarán que muchos estan muertos, algo muy curioso, muchos feeds en sus colecciones estan fallecidos hace rato y nadie los borraba Guiño

Pues bien, eso más o menos se filtra, ahora bien, nada indica que funcione perfecto pero con las primeras pruebas, gracias a los datos de Miro Cardozo, Lucas Martín Treser y Leandro Rotela que me enviaron los suyos para probar.

Durante la semana que viene estaré trabajando en varias actualizaciones que van por detrás, no se ven, pero ayudan al mantenimiento general, como el eliminar los feeds ya muertos, pasar a modo "pasivo" a usuarios que se inscribieron y llenaron de feeds pero no lo usan nunca y quitar sus feeds de la actualización general.

Luego de ver el problema que tuvieron los de The Old Reader noto que es probable que el mayor problema para escalar es no sacarse a los no-usuarios de encima, es decir, los "testeadores compulsivos" que se suman a todo sitio para probar como es. Más de la mitad de los usuarios de mi RSS Reader son así y ocupan recursos al dope.

Esa parte del mantenimiento es un bardo, no es fácil, son muchos megabytes y son consultas pesadas a la base de datos, pero en términos generales se puede automatizar y, por ende, hacer el sistema escalable a más usuarios sin que falle la performance.

Bueno, los invito a sumarse y, de paso, integrarse a la pequeña comunidad de LinksDV.com que si no es por los RSS es por los Links, pero allí estamos Guiño

Seguir leyendo el post »

LDV RSS, el lector de feeds sigue creciendo



Gracias a los aportes de Tomás Perez que me ayuda con todo del debuggeo creo que podemos decir que la versión actual del lector de feeds de los Links de Viernes está funcionando de manera "aceptable".

Según Google queda hasta el 1° de Julio para migrar todos nuestros feeds a otros servicios, algunos optaron por feedly aunque no me convence la "necesidad" de una extensión para poder usarlo en el browser, así pues he migrado todos mis feeds a mi propio lector.

Durante los últimos días estuve trabajando bastante seguido, faltan muchas mejoras pero vamos de a poco, lo primero es lo principal, que se puedan agregar feeds a gusto y leer sus noticias, que el sistema los actualice constantemente, bueno, eso ya está en orden.

Durante los últimos días la mayoría de los arreglos fueron de maquillaje y de performance, esto último es medio complicado porque requiere tiempo de mi parte, pero aun así me animé a mudarme completamente para exigirle lo mismo que requiero de cualquier otro lector de feeds.

Quedan algunas modificaciones por hacer, esas que requieren entender bien JQuery que no es mi fuerte :P para lo que es PHP y MySQL está casi todo resuelto, quedan algunos trucos de performance para agregar, al menos el lector ya está trabajando con más de 90 feeds distintos, capturando información de todos cada media hora y limpiando lo que no se usa una vez al día, todo automático.

Los invito una vez más a sumarse y probarlo al menos, no tiene nada muy especial, la única ventaja es que podemos compartir lo que nos gusta entre los enlaces de los Links de Viernes. A todo esto, en los próximos días mudaré el dominio a uno más corto que ya conseguí, así se vuelve más fácil de buscar, total no es un problema ya que la mayoría del tráfico es el de siempre, una redirección y listo Guiño

En Agosto los LDV cumplirían tres años ya, ya van más de 12.000 linkeos y 74.000 votos de los usuarios, súmense así somos más y conseguimos mejores links todos los días!

Seguir leyendo el post »

Geolocalizar números de IP



Hace un par de años, cuando intenté retomar mi carrera, en un TP (si, me tocó hacer un TP) quise aprovechar el tráfico de este site para armar el proyecto, básicamente había que hacer un sistema que tomase datos reales (las stats de un sitio son un lindo ejemplo de ello) y realizase varas operaciones. Eso servía como dato, pero lo que quería hacer en el proyecto involucraba detectar de qué país era cada número de IP de ustedes.

Lindo problema, nunca me había encontrado con la necesidad, pero hoy por hoy es algo más que necesario, desde campañas de publicidad hasta estadísticas más o menos fieles, la geolocalización te permite mostrar contenido preferencial para algún país, ocultarlo para otro o simplemente avisarle al usuario que hay algo especial si viene de X destino, algo que tan sólo con el número de IP no se puede obtener, hace falta algo más.

Ese algo más es lo que les explicaré en este post con la solución que hay dando vueltas y cómo implementarla en cualquier proyecto.

Seguir leyendo el post »

PHP: Detectar los spiders de los buscadores

Un poquito de programación rápida para comenzar la semana. El otro día me di cuenta que estaba creando sesiones a lo pavote para TODOS los que entraban al blog, algo normal para contabilizar de donde, cuantos activos y esas cosas que sirven a modo estadístico.

Con usuarios normales no es un problema, salvo ataques DDOS donde ese sería el último de mis problemas, jeje, pero con los bots de los buscadores... ah, eso sí que es un drama.

Cuando tu site recibe mucho tráfico o se actualiza seguido los spiders de los buscadores pasan también más seguido, así que te revisan cada rincón, aumenta el tráfico y las sesiones, lo que hice fue buscar una función (aquí en PHacks) para detectarlos y evitar tanto peso en el servidor, en PHP, es sencillo:



Tan sólo cuando entra pregunto si es un bot, ¿Por qué no guardar la lista en una DB? justamente porque lo que quiero eliminar son requests a la base de datos, con un hermoso y cochino if enorme podemos contener la mayoría de los bots que andan dando vueltas.

Contra toda la teoría de sistemas que te enseñan en la facultad, el "hardcodeo" es necesario cuando buscás performance, no está mal, es que hay que saber usarlo, en este caso es algo que se modifica rara vez y para aquellos que modificamos nuestro propio código, es más eficiente. En términos de eficiencia pura esto apenas consume un poquito más de memoria (unos bytes) en el script pero te quita una conexión TCP al servidor MySQL y la posible congestión de este, si la lista fuese más grande, bueno, sería otra historia.

Con esta pequeña función me ahorré un 90% de requests inútiles a la base de datos por parte de los buscadores cuando pasan a explorar el blog, a continuación les dejo una lista de muchos nombres posibles, yo sólo le cargué al mío los más comunes, Google y Bing, más otros tantos.

Seguir leyendo el post »

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