miércoles, 10 de septiembre de 2008

PHP 6 o como liarla parda!

Para aquellos que programáis en PHP, cada día se acerca más PHP 6, y con esta versión su característica estrella: todo el interior ha sido adaptado para trabajar en UNICODE (UTF-8, UTF-16 ó UTF-32) y con esta maravillosa característica empieza la riada de problemas:
  • Por supuesto miles de scripts que hay ahí fuera dejarán de funcionar -ya lo tienen hecho antes por chorradas menos importantes-.
  • Por ejemplo, todo aquel script que partía del hecho de que muchas de las rutinas de gestión de cadenas eran binary-safe, lo cual nos brindaba la posibilidad de usarlas sobre datos binarios... a la porra... ahora todas esas rutinas son o serán compatibles con UNICODE, por lo que a nada que nos despistemos tendremos una rutina haciendo de las suyas.
  • Luego hay incoherencias -era inevitable-. Un ejemplo: urlencode y urldecode ya se niegan a funcionar sobre cadenas UNICODE, pese a estar, aparentemente homologadas en la lista de funciones UNICODE.
  • En general auguro un pesado y doloroso devenir de PHP 6... se va a tener que programar con pies de plomo muchas de las rutinas, con especial cuidado de controlar en cada momento que estamos haciendo: la mayoría del software para versiones anteriores dejará de funcionar por esta misma razón (varios paquetes actuales que he probado hacen aguas por todos los lados).
Pese a todo lo dicho, estoy totalmente a favor de adoptar UNICODE como nuevo juego de caracteres, ya que es más universal y flexible.

Sin embargo -desde mi punto de vista- la manera en que PHP 6 ha implantado este en su núcleo es más bien una especie de dictadura que de seguro hará rechinar los dientes a más de uno.

Lo más normal en estos casos en crear funciones "paralelas" de manera que quien guste puede ir adoptando el nuevo sistema, poco a poco, sin sobresaltos y además sabiendo que tiene entre manos en cada momento.

El problema empieza cuando PHP decide que en lugar de hacerlo así, todas las cadenas y ficheros de código fuente se pasan a UNICODE, de manera, por decirlo de alguna manera unilateral. Además, y por si fuera poco lo hace de forma transparente, de manera que ahora ya no sabemos si tratamos con datos ASCII ó UNICODE (por lo menos provee nuevas rutinas is_unicode y is_buffer) pero lo curioso es que probándolo en seguida vemos que el core tiene una inherente manía de pasar todo a UNICODE, claro, a nada que adjuntemos alguna cadena definida en el código, esta será UNICODE y convertirá todo a UNICODE.

Por suerte tenemos la posibilidad de hacer casts hacia lo que queramos $variable2=(unicode)$variable1; convierte el contenido de la variable 1 a UNICODE, mientras que $variable2=(binary)$variable1; convierte el contenido a ISO-8859-1 binario. Con esto podemos deshacer algo el entuerto.

Los ficheros se leen en UNICODE siempre que espeficiquemos que es un fichero de texto (con la opción "t" en fopen, si leemos binario con la opción "b" se tratará como binario/ISO-8859-1 lo que leamos).

Por último el código debe estar codificado en UTF-8 también, de lo contrario a la primera "á" tilde o similar que haya (salvo en comentarios) la compilación se detendrá y habrá error. Para usar código ISO-8859-1 debemos declarar en la primera orden que el fichero es de este tipo con:

declare(encoding='iso-8859-1');

Al principio de todos nuestros ficheros de código con tildes y en ISO-8859-1, y pese a ello se convertirá dinámicamente todo a UNICODE. Un show vamos, yo ya estoy adaptando el código que tengo hecho en PHP a este nuevo sistema... no se cuanto tardará en publicarse la versión 6, pero dudo que tarde mucho.

Enlaces:
Lista de compatibilidad de funciones con UNICODE: http://www.php.net/~scoates/unicode/render_func_data.php

miércoles, 3 de septiembre de 2008

Google Chrome... me pone los pelos de punta

Supongo que ya sabéis que Google ha sacado su navegador, creo que hace menos de una hora, puede que algo más...

Se puede descargar en http://www.google.com/chrome (yo lo he visto en la página principal de Google, aunque ya había leído antes sobre el detalle).

Lo que más sorprende es que dispone de gestión de memoria, recursos y CPU por cada pestaña y permite matar pestañas, vamos, que más que navegador es un sistema operativo dentro del sistema operativo.

Más allá de que integre un 90% de elementos de otros navegadores y plug-ins de navegadores... tiene muchas novedades. Es sin duda un pequeño paso para Google, pero un gran paso para los navegadores (LEER ACTUALIZACIÓN 1).

También tenemos este vídeo que creo que os resultará muy interesante: las razones para desarrollar el "artilugio" de la mano de sus creadores, o de sus portavoces, vamos, de parte de Google:



Es curioso cómo se ha llevado todo lo referente a Chrome, el secretismo y todo eso frente a los autobombos, noticias hinchadas, globos sonda y demás que se suelen ver por la red últimamente.

Y sobre eso, la chorrada del día: la anécdota de los pelos de punta... leed esto:

http://barrapunto.com/~iagofg/journal/30155

¿No le encontráis un leve parecido?

Voy a ponerme a leer posos del café un día de estos y espero no ver nada acerca del LHC xDDDD

ACTUALIZACIÓN (1): desde mi punto de vista, una vez probado, y aunque todavía no lo he usado mucho, ya he probado lo de "vista de aplicación separada", sin el navegador y todo eso... es una pena que no se hallan puesto a integrar más el tinglado en el sistema operativo, escritorio o que lo hallan hecho más al estilo de los applets de Opera... me recuerda mucho al Prism. Realmente lo único bueno y novedoso que introduce este navegador es el tema del Administrador de Tareas. ¿Conocéis algún otro navegador con algo similar?

ACTUALIZACIÓN (2): respecto al rendimiento y avidez de recursos, al parecer es más liviano que el Firefox. Sin embargo en lo referente al rendimiento me confunde: parece que también va más ligerillo, pero sin embargo parece que echa el freno para determinadas tareas... debe ser control de prioridad de ráfaga. Si realmente implementa control de ráfagas... es la caña (para aquellos que les suene a chino, con esto me refiero a que si un Javascript de una página se vuelve muy ávido momentáneamente, el navegador lo controla de cerca regulando su %CPU asignado).

ACTUALIZACIÓN (3): Sinceramente el Chrome se va a volver un experimento de como una empresa poderosa puede introducir un producto... está puesto en la página principal de Google... me pregunto hasta que % de penetración llegará... dudo que supere a Firefox pero sí será interesante ver hasta que tasa llega.