sábado, agosto 25, 2007

Google es grande en talento

Google es el modelo a seguir de muchos y esto no es porque si, hay una larga lista de razones. Una de las razones que puedo dar para responder porque me gusta esta empresa es que sus soluciones son eso, soluciones. Es una de las pocas empresas que tuvieron éxito en algo (en este caso su buscador) y no se quedaron en eso solo, siguieron y sacaron un montón de nuevos servicios. También hicieron muchos aportes a la comunidad de Software Libre, liberando código, invirtiendo en fundaciones de Software Libre y demás. Una de las cosas que también llama mucho la atención de ellos es que no siguen la corriente del mercado y hacen cosas muy originales (a veces no, pero es como toda empresa) y por suerte gran mayoría de esas cosas les sale bien.
Hoy sin querer encontré este link y en este link podemos ayudar a Google a mejorar su buscador de imagenes. En este servicio tenemos dos minutos y en esos dos minutos nos van pasando algunas imagenes y a medida que nos aparecen vamos clasificandolas con los tags que mas nos parecen que corresponden a la imagen. Lo mejor de todo es que es un tipo de juego on-line y que jugas contra otra persona, el que asigne la mayor cantidad de tags correctos gana (con cada tag correcto se nos asigna puntos, y si la otra persona lo asigno nosotros no podemos asignarla). Estuve un ratito, pero me fue de lo mas placentero "ayudar a Google" y fue esta sensación la que me decidió postear este articulo, tranquilamente ellos pudieron poner una pagina insulsa, y vas asignando tags y pasando foto a foto, pero no es divertido eso. Ellos fueron mas lejos e hicieron un juego, que además de ser original es una forma de incentivar a que te quedes mas tiempo del que planeabas. Y lo mejor de todo que hasta hay una tabla de posiciones.
Por lo que pude deducir se van guardando los tags nuevos que se le asignan a cada foto, luego hacen un conteo y si la foto obtuvo suficientes se coloca dicho tag a la lista de "los correctos" y se le asigna un puntaje (para el juego) según su relevancia.

Estas cosas hacen la diferencias y ellos lo saben.

Dario Ocles.

martes, agosto 07, 2007

Yo y mis "regex's" - Parte 1

Hace mucho que no usaba las expresiones regulares y justamente y a una semana de entrar, les di un buen uso. Para muchos las regex son una ciencia oscura... empezaré explicando que son. Las expresiones regulares no son otra cosa que un tipo de filtro pero "formal". Mucho de nosotros usamos este tipo de expresiones sin darnos cuenta, un ejemplo de eso pude ser cuando estamos esperando a alguien en un aeropuerto (bueno! No es tan común para muchos incluyendome, pero la acción si) para esperarla tenemos un patrón (la expresión regular). Dicho patrón es una descripción de la persona, "mide 1,70 y es hombre", habría muchas coincidencias, no? Sigamos, "tiene mas de 50 años, es totalmente canoso, es flaco y tiene un tatuaje de un dado en la palma de la mano"... Ahora es fácil encontrarlo, verdad?
Bueno, las regex hacen lo mismo pero con otra finalidad, la que se necesite en el momento, por ejemplo me piden q encuentre todas las palabras que tengan una letra a de una frase, muy simple las busco con la regex "a". Si bien lo anterior no es tan simple tampoco es muy complicado pero no entra dentro de esta entrega.
Si somos complices y aceptamos una definición simplista podemos decir que las regex no son mas que unos moldes especiales y que todo lo que encaje en dicho molde sera lo que se devuelva (en caso de hacer una búsqueda, también podemos reemplazar con regex).

Bueno, como estoy llegando a destino XD doy por finalizado este primer post, aparte de que no tenia planeado extenderme mas :-P

sábado, agosto 04, 2007

Mis primeras "ultimas impresiones"

Raro el titulo, no? Bueno, en realidad no es tan raro, ayer en el camino de vuelta a casa después de un día laboral termine de leer libro de la certificación. Haciendo un balance general sobre el libro diría que las cosas que aprendí con el pagaron con creces el valor del libro (tengo un post pendiente con algo relacionado a esto) si bien no fueron muchas cosas las que aprendí, mas bien fueron pocas, valieron la pena. Otra impresión que tengo es que este libro me parecía más una lectura para la "elite" de la programación y que yo me embarcaba en un proyecto un poco ambicioso y con pocas esperanzas de lograr algo muy importante, pero realmente no era algo del otro mundo, obviamente es mejor que mucho de lo que anda dando vueltas.
Ahora me quedan dos cosas... hacer un repaso del libro y algunos puntos concretos y lo segundo leer y terminar de estudiar (y aprender) sobre aquello que no conozco mucho como los web services y XML. Si bien conozco sobre XML hay muchas formas de hacer las cosas con PHP y no las conozco todas y ni siquiera conozco una forma completa de trabajar con ellos.

Una vez que termine de hacer el repaso seguramente escriba algunos artículos más sobre el tema, pero realmente no hay mucho de que hablar. Empezare a escribir algunos post pero estos los escribiré desde el celular y durante el transcurso del viaje a mi casa, cuando llego a ella no me dan muchas ganas de sentarme frente a la compu y escribir algo.

En mi "read list" tengo varios títulos y cosas que quiero leer, veremos, en los próximo días me decidiré por alguno y seguiré desasnandome un poco mas. Los libros que más resuenan en mi cabeza hoy por hoy son 3, "UML Gota a Gota", "Java para celulares" (J2ME pero me interesa más que nada la programación para equipos moviles) y algún libro sobre Python. Tengo muchas ganas de aprender Python pero para aprender a programar se necesita programar y en el trabajo no lo hago con Python (ya hice una propuesta, veremos si en algún momento me dan un poco de bola y me dejan hacerlo) y en casa los fines de semana tengo ganas de descansar o de salir a dar un paseo, y si me quedo cerca de la compu me pongo a practicar un par de horas pero seamos sinceros, 4 o 5 horas a la semana con 6 días de diferencia no ayuda mucho :-(

Dario Ocles.

domingo, julio 29, 2007

"Memcached: un alivio para las bases de datos"

"Memcached: un alivio para las bases de datos" este es el nombre de un artículo muy bueno sobre Memcached escrito por Pichongol (Daniel López) en "Maestros del Web". Memcached es una de las cosas nuevas que empecé a ver en la empresa donde empecé a trabajar, si bien ya conocía algo sobre este no lo había usado anteriormente porque nunca trabaje en un proyecto que valiera algo de esta talla. Aquí esta Memcached en la Wikipedia (Ingles) que practicamente no agregada nada al artículo anterior.

Dario Ocles.

sábado, julio 28, 2007

Nueva etapa, nuevos tiempos.

Desde el lunes anterior empecé a trabajar en una nueva empresa ésta es Fnbox. Por el tema del viaje tengo poco tiempo por día libre y que obviamente no lo paso adelante de una pantalla. A lo anterior sumemos que estoy terminando de leer el libro de la certificación (si, quiero terminarlo de una vez por todas) así que mucho tiempo para escribir aquí no tengo. Como estoy viendo cosas nuevas en el trabajo y como tengo poco tiempo creo que voy a escribir menos cantidad de artículos pero tratare de que la calidad mejore, por lo pronto tengo varias ideas para escribir un articulo como pueden ser mis queridas y amadas "regex" (el miércoles después de muchos meses las pude volver a usar en algo :-D ).

Dario Ocles.

sábado, julio 21, 2007

"PythonChallenge"

PythonChallenge es una web donde se nos presenta varios desafíos que hay que ir resolviendo con Python (en realidad se puede solucionar con cualquier lenguaje). La idea es dar un "incentivo" para que se aprenda el lenguaje de una forma divertida y practica. La verdad es que la idea esta buena y es bastante adictivo tener un desafío adelante, empiezas con el primero "bueno, vamos a probar" y después de dos horas dices "soluciono este y ya lo dejo... lo prometo... bueno uno mas solamente" :-P


Ya llevo algunos hechos y seguiré haciendo hasta que me aburra o me agarre sueño (lo que ocurra primero). Los primero 3, 4 son fáciles y de a poquito va aumentando la dificultad y en cada desafío tienes que usar algo en especial con lo cual esta bueno para practicar aquellas cosas que conoces o es la excusa perfecta para estudiar algún tema que no conoces. De todas formas invito a todo aquel que se quiera divertir un rato programando y solucionando "problemas de programación" xD no importa si quieres o no estudiar Python, no necesariamente necesita ser Python, con cualquier lenguaje se puede... eso si, solo pasaras algunos niveles si usas bien la cabeza y piensas antes de actuar (no vale buscar ayuda en el foro!!! :-P ).

Veamos hasta donde llego.

Dario Ocles.

viernes, julio 20, 2007

Tabla de comparación de tipos en PHP

Hoy de casualidad encontré algo bastante copado, una "Tabla de comparación de tipos" y que es eso con tan lindo nombre te preguntaras, bueno es muy simple es una tabla donde se muestra como se comportan distintos tipos de datos en PHP ante las comparaciones (flexibles como estrictas).
En realidad esta tabla no tiene nada del otro mundo, pero nunca la había visto y me parece algo bastante lindo para tener a mano cuando te encontras en las primeras etapas del aprendizaje de PHP. Si la vez atentamente y la consultas te podes evitar algunos "comportamientos no deseados" aún que sean totalmente racionales.

Dario Ocles.

jueves, julio 19, 2007

Jerarquía de las Excepciones en Python

Las Excepciones en Python son bastante fáciles de manejar y nos dan una forma muy buena de manejar los errores que pueden ocurrir en nuestros programas.
Hay que tener cuidado cuando se intenta atrapar algunas excepciones, siempre debes tratar de agarrar algún tipo especifico de excepciones y mucho mejor si son excepción definidas por ti. Cuando se intenta agarrar cualquier tipo de excepciones podemos estar enmascarando algún error grave en un "error previsto". Por el motivo anterior es bueno que conozcas la Jerarquía de las Excepciones en Python.
Un ejemplo del porque debes conocer lo anterior y tienes que tener cuidado es el siguiente:

  1. >>> while 1:

  2.     try:

  3.         numero = input("ingresa un numero: ")

  4.         if numero < 10:

  5.             raise Exception("ErrorNumerico", "No me gusto el numero.")

  6.         else:

  7.             raise Exception("ErrorNumerico2", "Tampoco me gusta este numero.")

  8.     except:

  9.         print "Se produjo un error y puede ser de cualquier tipo."


Si lo ejecutastes te darás cuenta que no hay forma de salir, ni con "Ctrl + D"!!!!... esto se debe a que lo anterior lanza una excepción KeyboardInterrupt y esta deriva, como todas las demás, de la clase BaseException y cuando intentas agarrar todas las excepciones con except sin argumentos atrapas todo aquello por debajo de BaseException.

Dario Ocles.

miércoles, julio 18, 2007

Que imprime?

No vale probarlo y responder... respondan lo que crean correcto y luego lo verifican si quieren (atentos despistados!).


<?php

$trece 
chr(13);

switch (
$trece) {
  case 
"\r":
    echo 
1;
    break;
  case 
"\n":
    echo 
2;
    break;
  case 
"\n\r":
    echo 
3;
    break;
}

?>


Dario Ocles.

lunes, julio 16, 2007

CURL y PHP

Muchas veces necesitamos abrir alguna pagina remota y tomar algo de su contenido, para eso existen varias funciones como fopen(), file_get_contents(). Pero existe un problema, que pasa si la pagina/script que intentamos abrir necesita de algún parámetro que vaya por POST? (si fuera GET se coloca en la URL) para estos casos se puede abrir un socket con fsockopen() e enviar las cabeceras HTTP correspondientes (un poco difícil, no?) o simplemente hacer uso de una genial librería llamada CURL. Con esta librería estas cosas son muy fáciles, y no hay nada mejor para mostrar su potencial que con un ejemplo "real". En el ejemplo se hacen uso de dos script para mostrar como funciona, el primero es el que abre la sesión CURL e envía los parámetros y la segunda la que los recibe.

Código del script curl.php:


<?php

$array_post 
= array("Nombre" => "Dario""Apellido" => "Ocles""Edad" => 20);

$ch curl_init("http://localhost/parametros.php?titulo=".urlencode("Este es el titulo pasado por GET."));
curl_setopt($chCURLOPT_USERAGENT$_SERVER['HTTP_USER_AGENT']);
curl_setopt($chCURLOPT_POSTtrue);
curl_setopt($chCURLOPT_POSTFIELDS$array_post);
curl_setopt($chCURLOPT_COOKIE"cookie[0]=dario;cookie[1]=ocles;hola=mundo;");
$postResult curl_exec($ch);

if (
curl_errno($ch)) {
   print 
curl_error($ch);
}
curl_close($ch);
?>



Código del script parametros.php (el que recibe):

<?php

echo '$_POST:<br />'.nl2br(print_r($_POST,true)).'<br /><br />';
echo 
'$_GET:<br />'.nl2br(print_r($_GET,true)).'<br /><br />';
echo 
'$_COOKIE:<br />'.nl2br(print_r($_COOKIE,true));

?>



Y lo anterior imprime lo siguiente:
$_POST:
Array
(
[Nombre] => Dario
[Apellido] => Ocles
[Edad] => 20
)


$_GET:
Array
(
[titulo] => Este es el titulo pasado por GET.
)


$_COOKIE:
Array
(
[cookie] => Array
(
[0] => dario
[1] => ocles
)

[hola] => mundo
)


Como ven, nada difícil... pruebenlo y jueguen un rato. En la sección del manual de curl_setopt() se muestran todas las constantes que se pueden usar, vean un poco así saben que tienen a su disposición.

Dario Ocles.