Posts encontrados en Programacion

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,46 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.