Posts encontrados en Programacion

jun 08 26

MySQL: Ordenar los resultados de una búsqueda por relevancia selectiva con fulltext search

Tiempo estimado de lectura: 2,23 minutos

Entre las numerosas formas de lograr hacer un motor de búsqueda en MySQL, la mejor es el fulltext search. Pocos sitios lo usan y sigue siendo la solución más rápida y más completa de todas las opciones.

La única limitación del fulltext search es el límite de letras de las palabras a buscar ya que en la configuración del MySQL este límite viene por defecto en 4 letras, es decir, no va a tomar palabras menores a 4 letras para realizar la búsqueda. Pero esto puede ser cambiado y no es una excusa de peso para desplazar a las grandes ventajas del fulltext search: velocidad y rendimiento.

En este post intentaré explicar de forma simple como ordenar por relevancia una búsqueda en varios campos seleccionando los campos más importantes.

Continue reading “MySQL: Ordenar los resultados de una búsqueda por relevancia selectiva con fulltext search” »

may 08 30

Easy Up Me – WordPress Plug-in

Tiempo estimado de lectura: 1,04 minutos

“Easy Up Me” surge como necesidad de poder administrar los archivos que se suben en WordPress 2.5.x al mismo tiempo que se escribe un post. Esto, en la nueva versión 2.5.x, no es posible; el lightbox concentra todos los recursos del browser y del usuario en la ventana desplegada haciendo que no se pueda realizar otra tarea mientras se administran los archivos.

Básicamente este plug-in agrega la librería de archivos debajo de la caja de escritura, tal como estaba en la versión anterior pero manteniendo las ventajas del multi-uploading y manteniendo la librería actual.

Ya pasó muchísimo tiempo de mi último plug-in (time2read) que desarrollé para la versión 1.2 de WordPress y que todavía sigue teniendo éxito. Las cosas cambiaron mucho desde entonces y todo me resulta bastante nuevo. Es por eso que pido la ayuda de ustedes para lograr el mayor feedback posible para mejorar este simple pero considerablemente útil plug-in.

De momento publico la beta 0.1 que mejoraré y haré oficial en los próximos días.

Pueden descargarlo siguiendo el siguiente enlace: [download#1#nohits]

Instrucciones

1) Descargar el Plug-in
2) Subir la carpeta completa en la carpeta de plugins de tu wordpress
3) Activar el plug-in en la sección de plug-ins

Listo, debajo de la sección de posteo verán la nueva caja de uploads.

Nota: En caso que no les guste, pueden volver todo como estaba antes simplemente desactivando el plug-in.

Screenshot

easy up me

Update 01: Corregido el bug de “page not found” que sucedía cuando la configuración de la URL de wordpress era diferente a la del blog.

may 08 09

El Tao de la Programación

Tiempo estimado de lectura: 0,52 minutos

El Tao de la programación. Si sos programador, analista o trabajas con programadores, dale un vistazo a esto que tiene cosas como estas:

A manager went to the master programmer and showed him the requirements document for a new application. The manager asked the master: “How long will it take to design this system if I assign five programmers to it?”

“It will take one year,” said the master promptly.

“But we need this system immediately or even sooner! How long will it take if I assign ten programmers to it?”

The master programmer frowned. “In that case, it will take two years.”

“And what if I assign a hundred programmers to it?”

The master programmer shrugged. “Then the design will never be completed,” he said.

Traducción:

Un administrador fue con el maestro programador y le mostró el documento con los requerimientos para una nueva aplicación. El administrador le pregunto al maestro: “Cuanto tiempo llevará desarrollar este sistema si le asigno 5 programadores?”

“Llevará un año” dijo el maestro rápidamente.

“¡Pero lo necesitamos inmediatamente o incluso antes! ¿Cuanto tardaría si le asigno 10 programadores?”

El maestro programador dijo frunciendo las cejas: “En ese caso llevará dos años.”

“¿Y si asigno cien programadores?”

El maestro dijo encogiéndo sus hombros. “Entonces el trabajo nunca se terminará”

may 08 01

Intérprete de Basic hecho en Javascript

Tiempo estimado de lectura: 0,04 minutos

¡Excelente! Se trata de un intérprete Basic hecho en Javascript. ¡Cuántos recuerdos que me trae!

abr 08 08

Google App Engine – La infraestructura de google para tus aplicaciones web

Tiempo estimado de lectura: 0,31 minutos

google app engineGoogle sigue abarcando nichos en la gran red y ahora ofrece su poderosa infraestructura para alojar tus sistemas webs. Se trata de Google App Engine un servicio que ofrece alojar aplicaciones en Python a niveles extraordinariamente escalables y con una performance de lujo.

Si bien por ahora no tiene soporte SQL, el servicio permite utilizar los datastore de google mediante GQL usando la api GQL de google.

Creo que es un movimiento extraordinario, porque dependiendo de las políticas del servicio pueden, en cualquier momento, contar con todo el desarrollo alojado en su mega-infraestructura y re-utilizar conceptos, ideas, algoritmos y cualquier otra cosa que use su infraestrcutura.

Supongo que los Python’s fan como Matías van a estar metiendo mano muy pronto en la infraestructura de google.

BTW… me encanta el isologo.

mar 08 26

Cómo medir la calidad de un código con WTFs

Tiempo estimado de lectura: 0,08 minutos

Un compañero de laburo me pasó esto, sin duda es la verdad de la milanesa (nunca entendí esa frase). Cómo medir la calidad del código en programación con WTF por minuto.

WTF para medir calidad de codigo
mar 08 25

Render 3D en Javascript usando canvas

Tiempo estimado de lectura: 0,34 minutos

Es impresionante lo que se puede hacer con javascript, desde que re-surgió con AJAX, Javascript se ha vuelto imprescindible en el concepto de las apis web 2.0 ya que ofrecen una interfaz desde el lado del cliente para usar un complejo funcionamiento desde el lado del server.

Esta vez, me sorprendió ver este render 3D totalmente hecho en javascript, usando JSon para comunicarse con el server para traer los modelos. Jueguen un rato con las opciones, pueden administrar el zoom con el + y el -

No se cual podría ser la aplicación concreta de esta implementación 3D, pero me pareció genial y si bien la calidad es relativamente pobre ya que el número de caras y vértices es escueto creo que el objetivo de esto es mostrar que con javascript se pueden hacer más cosas de las que creemos.

3d-js.jpg
feb 08 29

Cómo usar tags en expresiones regulares

Tiempo estimado de lectura: 1,47 minutos

Ya hemos hablado acerca del poder de las expresiones regulares en la programación. Sin embargo, extraer información de una cadena con expresiones regulares puede ser un tanto complicado a la hora de navegar por los índices del array generado.

Para solucionar este problema, varios lenguajes implementaron los tags en las expresiones regulares. Estos tags permiten al desarrollador organizar el array de salida en una cadena de coincidencias.

Para ejemplificar este mini tutorial, utilizaré la función preg_match_all() de php, ya que es la que mayormente uso en este tipo de casos. Los que usan python por ejemplo, podrán usar la misma expresión en la función re.findall().

Manos a la obra

Imaginemos por un momento que queremos obtener diferente información de una url y queremos extraer por un lado el protocolo, por otro lado ver si tiene las www, por otro el dominio propiamente dicho y por el otro lado el request.

Si usáramos una expresión regular común, con preg_match_all() que busca todas las coincidencias posibles y las guarda en un array indexado, se nos haría difícil calcular antes de ver el array en que posición está la información que necesitamos.

Por ejemplo:

preg_match_all ('/(.+://)(www.)?([^/]+)(.*)/', 'http://www.google.com.ar/search?q=elezeta', $array);

Nos dará como resultado un engorroso $array que estará compuesto por varios índices en donde cada uno de esos índices son las coincidencias que la función detectó y para utilizar esta información, tenemos primero que ver como es el array y después llamar al índice que nos interesa.

En cambio, usando los tags, podemos decirle que además de crear el array indexado, nos agregue índices asociativos con los tags de nuestra información.

El mismo ejemplo con tags:

preg_match_all ('/(?P<protocolo>.+://)(?P<w>www.)?(?P<dominio>[^/]+)(?P<query>.*)/', 'http://www.google.com.ar/search?q=elezeta', $array);

De esta forma sabemos que:

$array['protocolo']: va a tener el protocolo "http://".
$array['w']: va a tener si usa www "www", si no usa, va a ser nulo.
$array['dominio']: va a tener el dominio: "google.com.ar".
$array['query']: va a tener todo el resto.

Como verán es muy simple el uso de tags en las expresiones regulares en lenguajes que lo soportan. Tan sólo agreguen ?P<tagname> delante del grupo de coinsidencia y la función se encargará del resto.

Esto surge de una charla que tuvimos con Matías acerca de las virtudes de las expresiones regulares en PHP y en Python.

feb 08 21

Expresiones regulares en MySql

Tiempo estimado de lectura: 1,02 minutos

Pocas cosas son tan universalmente útiles como las expresiones regulares en la programación o en la edición de texto. Podemos definir cualquier patrón escrito con estas perlas de códigos ilegibles y aun así pocos programadores las usan e incluso muchos hasta las desconocen.

Esta maravillosa herramienta funciona para casi cualquier lenguaje y MySql no se queda afuera ya que la incorpora a partir de su versión 4 5.

Situación:

Tenemos una tabla de miles registros con diferentes comentarios, cientos de ellos son spam y camuflaron su nombre al mejor estilo Ph3nt3rmine. Pero detectamos un patrón, cambian sólo la i y las e por 1 y 3 pero pueden usar mayúsculas y minúsculas (Ph3nt3rminE, PhentErm1n3, PhEntermIn3…).

Solución:

  1. Generamos una expresión regular que coincida con el nombre malicioso del spammer: Ph(3|e|E){1}nt(3|e){1}rm(1|i|I){1}n(3|e|E){1} o Ph[3eE]nt[3eE]rm[i1I]n[3eE]
  2. si la simplificamos

  3. Generamos la consulta que borre todos las coincidencias:
    DELETE FROM comments WHERE name REGEXP "Ph[3eE]nt[3eE]rm[i1I]n[3eE]"
  4. Ejecutamos la consulta.

Eso es todo, borramos todo el spam indeseado con todas sus combinaciones posibles en una sola consulta. Imaginense todo el tiempo que perderíamos tratando de cubrir todas las combinaciones posibles sin estos preciosos patrones.

Desafortunadamente este comando no puede ser usado en la funcion REPLACE de MySql ya que sólo devuelve true or false, supongo no tardarán mucho en incorporarla al mejor estilo preg_replace de php.

feb 08 20

JQuery – Javascript hecho fácil y estándar

Tiempo estimado de lectura: 1,46 minutos

Los que comenzamos con la programación web hace mas de 5 años atrás realmente conocimos lo complicado que era hacer un script para agregarle algo de dinamismo funcional a nuestros sitios. Luego, con la guerra de los navegadores esto se complicó aun más porque prácticamente teníamos que programar tantas alternativas como navegadores había. Incluso vi en más de un sitio que su página de bienvenida veía que navegador y resolución usabas y te redireccionaba a una página u otra.

El DOM (Document Object Model) viene masticándose desde aquel entonces y hoy más que nunca es un estándar innegable en todos los intérpretes. Y con esto, javascript se convirtió en algo mucho más accesible y preciso.

Existen librerías javascript que le hacen la vida mucho más fácil al desarrollador justamente por aprovechar el DOM en toda su extensión y hay interminables listas de librerías que podríamos usar en nuestra web.

En esta serie de posts voy a ir comentando las virtudes y mis experiencias personales con ellas, dando algunos ejemplos que serían engorrosos de reproducir “from scratch”.

Hoy le toca el turno a JQuery

JqueryJQuery es, para mi gusto, una de las mejores librerías para trabajar con el DOM de un documento. Simplifica el acceso a cualquier elemento del documento con precisos y simples atajos. Así es que, por ejemplo, un campo de texto con el la clase=”text” dentro de un formulario, dentro de un div, dentro del body del documento puede ser accedido con

$("input").filter(".text")

Y si ya entendieron el concepto, sabrán que un click en cualquier link del documento con un id o una clase “determinada” puede ser capturado de manera sencilla como por ejemplo:


$("a")
.filter(".determinada")
.click(function(){
alert("Hiciste click en el link con la clase 'determinada'");
return false;
})

Este es sólo el concepto del JQuery, llegar a todos lados escribiendo poco o nada de javascript. Pero además la misma librería básica de JQuery tiene efectos interesantes como por ejemplo el [element].hide(‘slow’) o el [element].show(slow) que antes requerían de un ciclo “for” donde decrementaba una variable y esa variable era asignada a la propiedad width/high del elemento. Pueden probarlo aquí

Ahi no acaba todo, JQuery tiene también muchos plugins que permiten incrementar su potencia y trabajar validando formularios, utilizando ajax, utilizando eventos entre varias otras cosas.

Como les comenté, es una de mis favoritas y nos hubiera ahorrado varios dolores de cabeza hace tres o cuatro años atrás.