Monthly Archives: January 2008

El test ACID3 esta listo

Al parecer, el test ACID3 esta listo. Se publico hoy que Ian Hickson, ya tiene listo el test ACID3. Este test prueba capacidades que aun no están listas en los navegadores, como CSS3, SVG, entre otras. Aunque no he podido encontrar confirmación aun de esto, ni en el blog de Ian, ni en la pagina del Web Standards Project.

Suponiendo que este test es el final, la pregunta siguiente es: En que estado se encuentran los navegadores el día de hoy?

Haciendo unas pruebas rápidas, ninguno de los navegadores mas populares (IE, Firefox, Opera) tiene soporte completo, pero algunos fallan mas espectacularmente que otros.

Estas son screenshots del test en una máquina con Windows XP. Hacer click para agrandar la imagen.

IE 6
Tiene flojera de siquiera empezar
acid-ie6
IE7
Falla espectacularmente, solo un punto mejor que el anterior
acid-ie7
Opera 9.25 (versión oficial)

Ahora si ya empezamos a ver resultados. Se comenta que la versión de desarrollo llega a 60%

acid-opera
Firefox 2.0.0.11
Aquí ya empezamos a ver un progreso de como se vería el test, pero todavía le faltan muchas cosas
acid-ff2
Firefox 3.0 B2
Por fin, un navegador que falla con estilo. La animación corre, aunque todavía le falta mucho.
acid-ff3
Firefox 3.0 B3pre
W00t!! Tenemos un ganador.
Ok, no llega al 100%, pero deja mordiendo el polvo a todos los demás 🙂
acid-ff3b3

Se supone que el test estará completo pronto, si no es que este es el final. Pone la vara bastante alta para los navegadores actuales y mucho para aquellos que van muy retrasados (te estoy viendo [con odio] a ti IE).

Y a tu navegador, como le va? 🙂

P.D. Están fregones los nuevos iconos para el FF3, no? 🙂

Enterprise

Si “Orientado a Empresas” (A.K.A. Enterprise), significa:

  1. Lento para ejecutarse
  2. Lento para desarrollar
  3. Lento para ESCRIBIRSE

Entonces si, Java es Enterprise y no hay quien le gane.

Creo que esto debió ir en mi twitter, mas que en mi blog, ofrezco mis disculpas

Curiosidades de la programación

Para el articulo anterior hice un poco de investigación para algunas definiciones y me encontré cosas muy curiosas, aquí les presento algunas de estas.

  1. Cuantos lenguajes de programación conoces? 10? 30? 50? Novato. Que te parece 1150 lenguajes diferentes de programación?. En la pagina http://99-bottles-of-beer.net/ muestran 1150 lenguajes diferentes haciendo una sola cosa: Un programa que imprime la canción “99 botellas de cerveza”. No conozco un listado mas grande de lenguajes.
  2. Sabes cual es el lenguaje de programación mas difícil que existe? Tache si contestaste “Perl”. El lenguaje de programación mas difícil se llama Malbolge. Entre las peculiaridades de este lenguaje están:
    1. En el 98, su programador lo lanzo al dominio publico.
    2. Desde su aparición, se tardo mas de 2 años en aparecer su primer programador.
    3. Porque digo “aparición”? Malbolge es un lenguaje de programación generado por un programa escrito en LISP, fue pues, generado por una máquina.
    4. Cada instrucción es encriptada (le resta 33, le suma el puntero y le realiza mod 94) después de que se ejecuta. Por lo que cada instrucción es diferente cada vez que se ejecuta. Es altamente impredecible.
    5. Crees que exagero? Esta seria la versión de hello world de Malbolge.
         1: (=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk**
         2: hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O< 
    6. Existe también la versión de 99 bottles of beer para este lenguaje. El propio creador del lenguaje no creía que esto fuera posible. Solo por curiosidad, velo. Es impresionante
    7. Alguien planteo crear un convertidor de Brainfuck a Malbolge. Brainfuck probablemente es el segundo lenguaje mas complicado que existe. Y esta, la idea mas masoquista que se me puede ocurrir. Casi como programar en java 😛
  3. El primer lenguaje de programación no fue en una computadora. Los primeros lenguajes de programación, o mas específicamente lenguajes de dominio especifico fueron los telares o los pianos del siglo 19.
  4. Existe un lenguaje de programación basado en las obras de Shakespeare. Usa palabras reservadas como Juliet, Romeo y Ophelia.
  5. Has oído hablar del “Spaghetti code”? Si crees que PHP es el rey en ese campo, no conoces el lenguaje Spaghetti.
  6.   
                           
                               
                                         
                                
                                         
                                       
                                         
                       
             
                                                       
                                        
                                 
                                        
                   
                                               
                                                       
                     
                
                                                       
                                         
                                         
                                         
                                         
                                                
                        
             
                                         
                          
                                                
                               
                                                
                        
                                                       
       
           
                 

               

                             

                      
           
                
              

             

               

    [hello world en Whitespace]

  7. No todos los lenguajes tienen for, do, while, etc. Hay lenguajes que se programan con colores. Si, con colores. El lenguaje Piet recoge colores para realizar sus instrucciones. Sus programas parecen pinturas abstractas. Este es el ejemplo de un hello world:

    Piet_hello_big 

    Y este es un programa que parece una pintura de Mondrian… y lo que hace es imprimir “Piet”.

    Piet

    Su nombre viene de Piet Mondrian, un pintor abstracto.
    Y por supuesto, también tiene su programa de 99 botellas de cerveza.

    1269

  8. Por supuesto, se tiene que mencionar el LOLCODE, basado en los Lolcatz. Este es un hello world escrito en LOLCODE.
       1: HAI
       2: CAN HAS STDIO?
       3: VISIBLE "HAI WORLD!"
       4: KTHXBYE [8]

    531257569_e405cb8660 524925307_5a372d5dd3

  9. Así como el primer lenguaje de programación no fue una computadora, la primer computadora no era … err.. una computadora como hoy las conocemos. Vamos ni siquiera era una máquina. La primer noción de la palabra computadora viene del siglo 17, que significa precisamente, “aquel que computa. Una computadora pues era, una persona que computaba, que hacia cálculos.
  10. Para finalizar, el programa de las 99 botellas de cerveza, en perl:
       1: ''=~(        '(?{'        .('`'        |'%')        .('['        ^'-')

       2: .('`'        |'!')        .('`'        |',')        .'"'.        '\\$'

       3: .'=='        .('['        ^'+')        .('`'        |'/')        .('['

       4: ^'+')        .'||'        .(';'        &'=')        .(';'        &'=')

       5: .';-'        .'-'.        '\\$'        .'=;'        .('['        ^'(')

       6: .('['        ^'.')        .('`'        |'"')        .('!'        ^'+')

       7: '_\\{'      .'(\\$'      .';=('.      '\\$=|'      ."\|".(      '`'^'.'

       8: (('`')|    '/').').'    .'\\"'.+(    '{'^'[').    ('`'|'"')    .('`'|'/'

       9: '['^'/')  .('['^'/').  ('`'|',').(  '`'|('%')).  '\\".\\"'.(  '['^('(')).

      10: "'.('['^  '#').'!!--'  .'\\$=.\\"'  .('{'^'[').  ('`'|'/').(  '`'|"\&").(

      11: ^"\[").(  '`'|"\"").(  '`'|"\%").(  '`'|"\%").(  '['^(')')).  '\\").\\"'.

      12: '^'[').(  '`'|"\/").(  '`'|"\.").(  '{'^"\[").(  '['^"\/").(  '`'|"\(").(

      13: |"\%").(  '{'^"\[").(  '['^"\,").(  '`'|"\!").(  '`'|"\,").(  '`'|(',')).

      14: "\\}'.+(  '['^"\+").(  '['^"\)").(  '`'|"\)").(  '`'|"\.").(  '['^('/')).

      15: ,\\",'.(  '{'^('[')).  ('\\$;!').(  '!'^"\+").(  '{'^"\/").(  '`'|"\!").(

      16: |"\+").(  '`'|"\%").(  '{'^"\[").(  '`'|"\/").(  '`'|"\.").(  '`'|"\%").(

      17: ^"\[").(  '`'|"\$").(  '`'|"\/").(  '['^"\,").(  '`'|('.')).  ','.(('{')^

      18: ).("\["^  '+').("\`"|  '!').("\["^  '(').("\["^  '(').("\{"^  '[').("\`"|

      19: ).("\["^  '/').("\{"^  '[').("\`"|  '!').("\["^  ')').("\`"|  '/').("\["^

      20: ).("\`"|  '.').("\`"|  '$')."\,".(  '!'^('+')).  '\\",_,\\"'  .'!'.("\!"^

      21: ).("\!"^  '+').'\\"'.  ('['^',').(  '`'|"\(").(  '`'|"\)").(  '`'|"\,").(

      22: |('%')).  '++\\$="})'  );$:=('.')^  '~';$~='@'|  '(';$^=')'^  '[';$/='`';

Guerra de lenguajes? Irrelevante

Cual es mejor? Php o Ruby? Java o C#? Python o Perl? La respuesta definitiva es: No importa.

Me resulta muy divertido como la mitad del Internet se puede resumir en discusiones irrelevantes como esta. (La otra mitad se dedica a otra cosa). Lo dudas? Mira esta tabla:

búsqueda en Google Numero de resultados
Php sucks 286,000
Perl sucks 298,000
Java sucks 139,000
C# sucks 248,000
You suck 10,300,000

Tal vez decir “la mitad” fue una exageración, pero aun así, litros y litros de tinta se han escrito sobre si tal o cual lenguaje es mejor o porque java apesta o porque Php es un lenguaje de juguete. Pero todas esas discusiones están respondiendo a la pregunta incorrecta:

¿Para que me sirve ese lenguaje?

Un lenguaje de programación no es mas que una herramienta para lograr un fin. Así como puedo escribir un CRM en ensamblador o en bash, si eres lo suficientemente masoquista, también puedes escribir un script para shell en C#. O en cobol. O en whitespace.

Dadas las suficientes herramientas, cualquier lenguaje es capaz de cualquier cosa. La diferencia es el esfuerzo necesario para lograrlo.

¿Que quiero decir con todo esto?

Conoce tu lenguaje.

Y no me refiero a que te aprendas todos los namespaces o clases o funciones del lenguaje, sino que aprendas los conceptos que son posibles con el lenguaje y que entiendas para que sirve.

En especifico:

  1. Paradigma: Es procedural? OOP? Funcional? Lógico?
  2. Acepta programación funcional (aunque no sea lenguaje puramente funcional)?
  3. Es compilado o interpretado?
  4. Es tipado o no tipado?
  5. Es estáticamente tipado cada expresión tiene un tipo)  o dinámicamente tipado (solo los valores tienen tipo)?
  6. Es fuertemente tipado (no puedes convertir un valor sin un cast) o es débilmente tipado (se puede convertir el tipo dinámicamente)?
  7. Es latentemente tipado (no es necesario escribir la declaración de tipo) o manifiestamente tipado (debes explícitamente declarar el tipo)?
  8. Es nominalmente tipado o estructuralmente tipado (similar al duck typing)?

Tu sabes a que categoría pertenece tu lenguaje de preferencia?

Para que me sirve esto (a parte de la cultura general)? 
Para crear código mas eficiente, o para hacernos la vida mas fácil.

Por ejemplo:

Si necesitas hacer un programa que recibe datos del usuario, un lenguaje fuertemente tipado hace mas fácil la programación en cuanto a seguridad, ya que si el dato que recibes, no concuerda con el dato que esperas, simplemente lanzas una excepción. En comparación, si tu lenguaje es dinámicamente tipado tienes que hacer comprobaciones extras. Sin embargo en el segundo ejemplo es mas fácil de programarlo y en muchas menos líneas de código, ya que te ahorras toda la conversión de tipos.

Caso especifico: Quieres construir una cadena de SQL y no sabes que campos usaras y tampoco los tipos de estos campos (por ejemplo, si quieres construir tu ORM). En un lenguaje latente, dinámico y débilmente tipado (como Php, por ejemplo), es un trabajo sumamente sencillo . En un lenguaje como Java que es prácticamente todo lo contrario, se requieren líneas y líneas de definiciones de tipos, casts y otras cosas. Y a mas líneas de código, mas posibilidad de errores y dificultad de mantenimiento.

O tocando el punto de los lenguajes funcionales. En un lenguaje funcional (o que acepta programación funcional) típicamente se pueden escribir funciones con mucho menos líneas de código.

Por ejemplo, estas dos funciones en Python son equivalentes:

   1: target = [] # create empty list
   2: for item in source_list: # iterate over each thing in source
   3:    trans1 = G(item) # transform the item with the G() function
   4:    trans2 = F(trans1) # second transform with the F() function
   5:    target.append(trans2) # add transformed item to target
   1: compose2 = lambda F, G: lambda x: F(G(x))
   2: target = map(compose2(F,G), source_list)

Tal vez la segunda función parezca mas complicada, para aquellos expertos en programación funcional, les parecerá de lo mas sencillo. Y justamente ese es el objetivo.

Volviendo al punto, y concluyendo. No importa que lenguajes uses: Aprende a usarlo. Y si vas a discutir por cual es el mejor o por cual tiene la declaración de tipos mas grande[jeje], por lo menos conocelo bien a fondo. Así por lo menos las discusiones irán mas allá del típico “java sucks”.

 

Google deshabilita IMAP

Al parecer google esta deshabilitando IMAP para algunas cuentas. El síntoma es que tu cliente de correo manda un mensaje que dice algo como “Tu cuenta no tiene IMAP habilitado”.

Si entras a Gmail, en opciones – pop/imap, te desaparecerá la opción de IMAP.

Para los que tengan ese problema, basta con que entren a Gmail desde HTTPS.

https://mail.google.com

Y al entrar a settings verán activado de nuevo la opción de imap.

Es un problema muy raro. No parece que google quiera deshabilitar la opción de imap definitivamente, probablemente sea solo un bug. Esperaremos a ver si próximamente no hay cambios al respecto.

Mas info aqui: http://groups.google.es/group/Gmail-POP-and-Forwarding/browse_thread/thread/933c9b2fc9f643aa/ee85f1445aa09d5d#ee85f1445aa09d5d

Update:

Si sigues teniendo problemas con IMAP, sigue estos pasos:

  1. Entra a Gmail en tu navegador
  2. Sal de tu sesión (logout)
  3. Vuelve a entrar a Gmail con tu usuario y contraseña
  4. Verifica que en Settings la opción de IMAP se encuentra habilitada

Primeras imagenes del USB 3.0 reveladas

En el CES de las vegas se acaban de revelar las primeras imagenes de lo que sera el USB 3. En Register Hardware nos muestran primeras fotos que reproducimos aqui:

usb_3_1 usb_3_2
usb_3_3 usb_3_4
usb_3_5 usb_3_6

Estos son los detalles importantes de la presentacion:

  1. USB 3.0 sera compatible con USB 1.1 y USB 2.0. Para esto se añadiran unos pines extras que estaran en la parte trasera del jack, y seran pines mas pequeños.
  2. Tendra velocidades de hasta 4.7Gb/s
  3. La especificacion deberia estar lista a mediados de este año
  4. Se espera que este disponible comercialmente para 2009 o 2010.
  5. Todavia no se sabe si tendra un nombre especial, como el USB 2.0 que fue HighSpeed. Ya se les estan acabando los nombres. 🙂

Problemas en Google Reader

Al parecer hoy en la mañana empezó a haber problemas con algunos feeds de Google Reader. Manda errores de JavaScript, especialmente este:

   1: H.getBroadcastFriendsTag is not a function

   2: null

Al parecer el único workaround es meter los feeds en una carpeta/tag. Pero no siempre funciona.

Al parecer hay problemas con los feeds que estan ordenados del mas antiguo al mas nuevo. Si cambias el orden del feed, deja de funcionar.

Alguien puede confirmar?

 

Update:

Al parecer si hay un workaround. Solo sucede si tienes tu interfaz en español. Cambia tu idioma a ingles y debe solucionarse.