Archivos Mensuales: septiembre 2007

Editores para PHP5 – OpenKomodo y Eclipse PDT

Mucha gente se dedica a programar usando bluefish o quanta; en mi caso muchas veces recomiendo screem (aunque por alguna razón extraña en debian y fedora (mis distros) screem es medio “buggy”); sin embargo, todos ellos son editores (x)html con algo de coloreado de sintaxis y autocompletado de tags y esas cosas (screem tiene una funcionalidad “parcial” de autocompletado de funciones de php).

Sin embargo, como programador eso es una “infima” parte de lo que necesitas; necesitas autocompletado real de código, tanto de tu código como el de funciones de php (estaremos de acuerdo que a falta de namespaces, los nombres de funciones en php5 son a veces una pesadilla); se necesita ayuda contextual sobre parámetros; administración (si es posible) automática de los comentarios (sobre todo bloques PHPDoc y Doxygen), descubrimiento de bloques, depuración, resaltado de errores y una gran cantidad más de adiciones que se agradecen.

Komodo Edit 4.0 (alias: OpenKomodo):

Hace algún tiempo me dediqué notablemente a usar Komodo Edit 3.5 (hasta llegar a la 4); era bueno, basado en xpcom+XUL (engine Mozilla), es rápido, ligero y viene con todas esas características de resaltado de sintaxis, completado de código, etc.

Veamos algunas características interesantes:

  • Find all functions: permite listar todas las funciones declaradas en tu archivo php.
  • Crear snippets de código para pegar con solamente arrastrar y soltar (o asignarle un key-binding para amantes del teclado)
  • posee una característica de “vim-emulation” bastante interesante.
  • Trabajar con múltiples proyectos a la vez
  • Indicar que haga un “scanning” de nuestros proyectos para que el auto-completado de código funcione correctamente
  • Indicar donde queda nuestro php para realizar autocompletado (se extraña la caracteristica de agregar xdebug y permitir profiling y debugging de código que tenia la versión propietaria de Komodo ActiveState).
  • Crear macros para automatizar tareas
  • Manejo de multiples tipos de documentos XML, Doctype, Namespaces y Schemas (util a la hora de crear documentos XML)
  • Si te detienes en una llave, resalta donde ha iniciado ese bloque de código
  • Resaltado de errores html (por si estas diseñando templates)
  • Puedes agregar schemas y DOCTYPE propios para que comprenda las nuevas tags
  • Sistema de templates para no repetir la construcción de archivos, html, hojas xslt o clases php.

Cosas que se extrañan:

  • No auto-completa las llaves de apertura o cierre de funciones, tampoco autocompleta los cierres de paréntesis ni actualiza los parámetros al escribirlos
  • Es mas un “editor con vitaminas” que un IDE; pero al compararlo con bluefish, se agradece que lo hayan liberado.
  • Necesitas definir el tipo de documento para que pueda hacer correctamente el code-folding (cerrar un bloque de declaración para ahorrar espacio, muy util!).
  • Algo de cariño a PHP, sigue siendo un editor que tiende más a Python o a Perl

Algunos screenshots:

inicial.png
Pantalla inicial de Komodo Edit

index.png

Pantalla en modo editor – a la izquierda, un proyecto de Komodo

preferencias.png

Hay que “configurar” en preferencias a php para que funcione el auto-completado, pero podemos agregar proyectos propios
autocomplete_komodo21.jpg

El auto-completado se puede hacer incluso de clases propias de nuestro proyecto (realmente ahorra tiempo cuando el proyecto es grande) 

autocomplete_komodo.jpg

El autocompletado se puede realizar incluso con el objeto ya creado (un circulo verde para métodos, un triangulo azul para propiedades del objeto)

auto_komodo3.jpg
El auto-completado tambien incluye los parámetros de nuestras funciones de usuario. 

snippets-komodo.jpg

No tenemos bloques doxygen o phpDoc, pero podemos “crearlos” usando un snippet, podemos incluso agregarle un icono distintivo a dicho snippet y hasta un acceso de teclado.

xml_komodo.jpg

Se agradece la cantida increible de modos para trabajar con archivos XML (para ser un xml editor, screem es algo “laxo” en estas cosas).

En fin, un muy buen editor, si se pudieran agregarle algunas cosas IDE (como profiling, debugging, gestión desde el subversión, etc); por su rapidez (usa XUL, como firefox) sería la maravilla de los editores/IDE para PHP5.

Pagina Oficial: http://www.activestate.com/openkomodo/ 

Eclipse PDT:

Con algunas ideas del Zend Editor (Zend e IBM trabajan colaborativamente en este IDE/Plugin para Eclipse) el Eclipse PDT es totalmente un serio compromiso como un IDE para programación en PHP.

Características Interesantes:

  • Verdadero auto-completado (escanea el proyecto, no se necesita incluir el objeto)
  • Outline (muestra la estructura en métodos, propiedades de nuestra clase)
  • Puede mostrar la herencia de nuestras clases
  • Inserta bloques PHPDoc útiles para comentarios
  • Auto-completa llaves, paréntesis, auto-tabula el código de acuerdo a reglas pre-definidas o propias
  • Muestra los errores de PHP incluyendo un tooltip mostrando cual es el error
  • Code-Folding, podemos “cerrar” bloques de código como funciones, clases o incluso comentarios
  •  Auto-Format Document (CRTL+SHIFT+F) no es la panacea, pero auto-indenta y formatea nuestroa archivos automágicamente (una maravilla si se te olvida indentar correctamente).
  • No importa si 200 lineas atrás comenzó el bloque de código, si insertas una llave cerrando, el sabrá cual és.
  • Auto-completa tags, atributos html, incluso auto-completa comentarios de PHPDoc
  • Multiples proyectos a la vez
  • El Proyect Explorer es algo engorroso a veces, pero despues te acostumbras a su forma de organizar archivos y carpetas
  • Refactor: Mover o renombrar un archivo re-acomodará (a veces no) todas las declaraciones de este archivo dentro de tu proyecto actual

Contras:

  • Java: su sola ejecución me pone en el techo el consumo de recursos (casi 200MB de RAM se consume el Eclipse PDT)
  • Profiling es algo dificil de activar (al menos para PHP)
  • No reconoce javascript y CSS, asi que te llena la ventana de “Errors & Warnings” de supuestos “errores de sintaxis” de PHP en documentos javascript.
  • El debugger es una maravilla en aplicaciones sencillas, en un entorno MVC es casi inusable

 Algunos ScreenShots:

 

inicial_pdt.png

 Pantalla completa del Eclipse PDT, se agracede un coloreado de sintaxis bastante entendible (y poco vistoso, util para las largas horas de programación no cansen la vista).

comments.jpg

Son útiles la administración de bloques de comentarios, sobre todo de bloques PHPDoc y Doxygen

explorer.jpg

El  Proyect Explorer muestra todos nuestros documentos y los archivos contenidos en él (aunque a veces prefiero que se comportara como el de Komodo).

outline.jpg

Outline: Muestra la estructura de nuestra(s) clase(s) de nuestro archivo actualmente abierto (en foco en el área de documentos); es de hacer notar que gestiona correctamente las herencias entre clases (comos se muestra e los circulos verdes con una “c”, indicando clases (e I para las interfaces)), vale de resaltar la notación de PDT para esto, circulo verde: funciones publicas, rombo amarillo, funciones privadas, rombo más pequeño, métodos privados, circulo pequeño verde con un punto blanco en el centro, métodos publicos, Si la definición agrega una S en superindice de color rojo, indica que el método o propiedad es estático.

code_folding.jpg

Code Folding: por defecto todas las funciones aparecen en un modo “cerrado” (Fijense en el circulo con el icono + dentro); lo que ahorra mucho espacio en pantalla y evita confusiones.

code_folding2.jpg

Cuando te paras sobre un icono de Code-Folding; veremos un tooltip con el código que el code-folding está ocultando. 

autocomplete_pdt.jpg

El autocompletado de código incluye funciones de usuario, mostrando incluso los parámetros de cada método; usa la misma notación que el Outline para representar cuales son privados, públicos o protegidos. 
El Autocompletado tambien  incluye las variables y propiedades, cada vez que coloquemos el simbol de variable ($) aparecerá esta lista de selección en pantalla.

find.jpg

Entre la ayuda contextual que podemos encontrar, está la posibilidad de ver donde fue declarada una función, incluyendo la posibilidad de ir a la declaración de la misma (Menu Contextual -> open Declaration).

phpdoc.jpg

Podemos agregar bloques de comentario PHPDoc, para poder comentar nuestras funciones.

doc.jpg

PDT puede (al reconocer un bloque PHPDoc) autocompletar las directivas de PHPDoc con simple escribir un @ (el inicio de una directiva PHPDoc).

task.jpg

Podemos gestionar las Tags (etiquetas) que usaremos para marcar nuestras “tareas” (por ejemplo TODO), al agregar un comentario con dicha etiqueta (ej: //TODO: terminar esta funcion) PDT generará la lista de tareas pendientes de la aplicación.

task2.jpg

Y generar la lista de “tasks” que son las tareas pendientes de la aplicación.

Página Oficial: http://www.eclipse.org/pdt/ 

Como verán, no necesitamos conformarnos con un “simple editor de texto” (he visto gente trabajando con gedit, sin recordar las nefastas consecuencias de las “copias de seguridad” que hace gedit y varios editores bajo gnome y kde) cuando contamos con par de herramientas que pueden no solamente servirnos de editor de código, sino como un completo administrador de proyectos para PHP.

Si alguien es amante de las recomendaciones personales, en mi caso uso ambos, cuando necesito dedicarme exclusivamente a programar (y de repente a escuchar música) sin más nada, puedo usar Eclipse, que aunque es pesado, como hemos visto posee una y mil características que lo hacen un IDE muy util (y hasta necesario); si voy a trabajar varias aplicaciones a la vez (cssed para editar hojas de estilo, preview en el browser (swiftfox) y una serie de aplicaciones más abiertas, evidentemente me decanto por openKomodo.

Pero la decisión queda en ustedes …

mySQL functions: Paro Forzoso (II parte)

Y bueno, del anterior post (SSO) vamos a presentar el código que calcula el Paro Forzoso, es bastante más sencilla que la anterior función asi que la posteo completa y sin comentarios adicionales:

 

DELIMITER $$
 DROP FUNCTION IF EXISTS `nomina`.`paro_forzoso`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `paro_forzoso`(sueldo DECIMAL(8,2)) RETURNS decimal(8,2)
READS SQL DATA
BEGINDECLARE porcentaje DECIMAL(2,2);
DECLARE lunes INT;
DECLARE mes INT;
DECLARE fecha DATE;
DECLARE primero DATE;
DECLARE quince DATE;
SELECT curdate() INTO fecha;
SELECT DAYOFMONTH(fecha)  INTO mes;
SELECT STR_TO_DATE(CONCAT(YEAR(fecha), '-', MONTH(fecha), '-', 1), '%Y-%m-%d') INTO primero;
SELECT STR_TO_DATE(CONCAT(YEAR(fecha), '-', MONTH(fecha), '-', 15), '%Y-%m-%d') INTO quince;
SELECT valor INTO porcentaje FROM parametros WHERE parametro = 'paro';
IF mes <= 15 THEN
BEGIN
SELECT (WEEK(quince,5) - WEEK(primero,5)) INTO lunes;
END;
ELSE
BEGIN
SELECT (WEEK(LAST_DAY(fecha),5) - WEEK(quince,5)) INTO lunes;
END;
END IF;
return TRUNCATE((((sueldo*12)/52)*(porcentaje*lunes)), 2);
END$$
DELIMITER ;

Lo unico importante de comentar es agregar a la tabla parametros el porcentaje del paro forzoso (0.005) o lo que es igual:

 

INSERT INTO parametros VALUES('paro', 0.005, 0);

y es todo! … para calcular ambos (paro forzoso y sso) desde una tabla, digamos “empleados”, donde tenemos el sueldo base, eso sería:

 

SELECT sueldo_base, sso(sueldo_base, 0) as seguro, paro_forzoso(sueldo_base) as paro FROM empleados.

Calculando el Seguro Social con un procedimiento almacenado de mySQL 5

Hace algún tiempo atrás habia realizado esta y otras funciones para mySQL 5 en un proyecto de nómina (no sé como les terminó de ir) y quise publicarlo ahora ya que algunas personas me habian pedido esta función.

La función almacenada de mySQL consiste en un simple calculo de la cuota del Seguro Social Obligatorio Venezolano; hacerlo en procedimiento almacenado?, claro!, todos los datos necesarios para realizar el cálculo se encuentran del lado del servidor, por qué llevarlo al lado de la aplicación (Lenguaje de programación) para realizar un calculo que enteramente puede realizar la DB?.

Habia hecho esta función junto con otras 15 de conceptos de nómina para unos amigos que estaban desarrollando un sistema.

Primero; vamos a comentar el código; despues aparecerá integramente.

Concepto de Funciones en mySQL 5.

Una función es un pequeño “script” de código SQL (si fuera postgresql; pudiera ser en python o hasta en php) que puede ser convocado en la línea de una instrucción SQL; ejemplo:

SELECT md5(password), CURDATE() as fecha_actual, CURTIME() as hora_actual FROM usuarios

En el ejemplo anterior, las resaltadas son funciones internas de mySQL (una calcula el checksum md5 de una cadena; las otras devuelven la fecha y la hora actual).

Se pueden crear funciones propias, la diferencia entre una función y un procedimiento almacenado en mySQL es que una función SIEMPRE debe devolver un valor y este valor debe ser un escalar (un número, una cadena, el valor de un campo de una fila, etc); un procedimiento almacenado puede devolver escalares, filas, resultsets completos o simplemente no devolver nada.

SSO (Seguro Social Obligatorio) for Dummies.

El SSO Venezolano se calcula en base a los lunes contabilizados del mes, la formula suele ser:

 

((sueldo*12 meses) / Semanas laborales(default: 52)) * (retención SSO (defecto: 0.04)*lunes del mes)) <-redondeado a 2 cifras

Bien; ahora describamos el asunto:

La tabla parámetros:

Es un verdadero fastidio tener que modificar una costante (lease IVA, SSO, retención ISLR, algún gravamen) cada vez que el gobierno decide modificarla; por ende, es mejor guardar este valor en una tabla de parámetros; en dicha tabla, podremos guardar los porcentajes y valores de los distintos conceptos; de esta manera no tendremos que editar la función si de repente estos valores cambian:

La forma de la tabla es como sigue:

 

CREATE TABLE  `nomina`.`parametros` (
  `parametro` varchar(10) NOT NULL default '',
  `valor` decimal(3,3) NOT NULL default '0.000',
  `patronal` decimal(3,2) NOT NULL default '0.00',
  PRIMARY KEY  (`parametro`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

e Insertamos un registro como el siguiente:

 

INSERT INTO parametros VALUES ('sso',  0.04,  -0.87);

A los patronos se les retiene el doble de lo que se le retiene al empleado.

La función Almacenada SSO:

Oficialmente el delimitador de sentencias de mySQL es el punto y coma (;), por ende, debemos cambiarlo antes de poder escribir una función almacenada (que termina todas sus sentencias en punto y coma) para ello escribimos:

DELIMITER $$

Y ahora cuando terminemos de escribir la función almacenada escribimos:

END$$ (en vez de END;)

Ahora viene el cuerpo de declaración de la función:

DELIMITER $$

DROP FUNCTION IF EXISTS `nomina`.`sso`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `sso`(sueldo DECIMAL(8,2), tipo INT) RETURNS decimal(8,2)

Inicialmente ejecuto un DROP IF EXISTS que me permite verificar si la función existe y borrarla (en caso que estuviera editandola; no existe ALTER FUNCTION o ALTER PROCEDURE, por lo que hay que borrar primero un procedimiento si deseamos cambiarlo).

La directiva SQL SECURITY DEFINER nos indica que la función se ejecutará en un ámbito de permisos igual a quien creó la función (forma por defecto); la otra forma INVOKER hace que la función se ejecute en el ámbito de permisos de quien la ejecuta; para un ejemplo:

Tengo permisos sobre la tabla A y creo una función con DEFINER que lee esa tabla -> resultado -> La función puede leer la tabla A
Creo una función que intenta leer la tabla B y no tengo permisos para leer esa tabla -> resultado -> La función no puede leer la tabla B
Creo una función con INVOKER que lee la tabla B y usuario que invoca la función puede leer B -> resultado -> la función puede leer B
Creo una función con INVOKER que lea la tabla A y usuario que invoca NO puede leer la tabla A -> resultado -> La función no puede leer la tabla A.

DEFINER pide el usuario que deseamos colocar como DEFINER.

FUNCTION sso() es la declaración de función y pide algunos parámetros (dentro del paréntesis); estos son sueldo (de tipo DECIMAL(8,2), longitud integer 8 con 2 decimales de precisión) y un tipo (que es un entero 1 o 0); la situación es que en Venezuela, hay 2 cotizaciones de SSO; la nacional (0.04) y la estadal (0.02, es menor porque por lo general en las zonas rurales no hay Seguro Social, asi que para que te voy a retener algo que no existe?); la función retorna un valor escalar (el SSO calculado) de tipo DECIMAL(8,2).

Las funciones de mySQL repito, tienen 3 limitantes:

 

  • No pueden conectarse (por defecto) a datos en otras tablas.
  • No pueden recibir parámetros de salida (todos los parámetros son de entrada)
  • Solo pueden devolver escalares

Para obviar la primera observación (para que nuestra función pueda obtener datos desde otras tablas) entonces agregamos a la declaración:

READS SQL DATA

Y eso permite a nuestra función ejecutar sentencias SQL dentro del código.

El cuerpo de la función:

BEGIN
DECLARE porcentaje DECIMAL(2,2);
DECLARE lunes INT;
DECLARE mes INT;
DECLARE fecha DATE;
DECLARE primero DATE;
DECLARE quince DATE;
SELECT curdate() INTO fecha;
SELECT DAYOFMONTH(fecha)  INTO mes;
SELECT STR_TO_DATE(CONCAT(YEAR(fecha), ‘-‘, MONTH(fecha), ‘-‘, 1), ‘%Y-%m-%d’) INTO primero;
SELECT STR_TO_DATE(CONCAT(YEAR(fecha), ‘-‘, MONTH(fecha), ‘-‘, 15), ‘%Y-%m-%d’) INTO quince;
IF tipo=0 THEN
SELECT valor INTO porcentaje FROM parametros WHERE parametro = ‘sso’;
ELSE
SELECT valor INTO porcentaje FROM parametros WHERE parametro = ‘sso-estado’;
END IF;
IF mes <= 15 THEN
BEGIN
SELECT (WEEK(quince,5) – WEEK(primero,5)) INTO lunes;
END;
ELSE
BEGIN
SELECT (WEEK(LAST_DAY(fecha),5) – WEEK(quince,5)) INTO lunes;
END;
END IF;
return TRUNCATE((((sueldo*12)/52)*(porcentaje*lunes)), 2);
END$$

DELIMITER ;

Algunas observaciones útiles:

DECLARE sirve en ANSI DB2 SQL (la base de mySQL) declarar variables a ser usadas dentro del código.

SELECT INTO … permite hacer un SELECT de un escalar y devolverlo a una variable interna:

SELECT valor INTO porcentaje FROM parametros WHERE parametros = 'sso'

La función calcula el SSO quincenalmente, determinando primero a partir de la fecha actual, en que quincena estamos y retornando la cantidad de lunes de esa semana:

IF mes <= 15 THEN
    BEGIN
    SELECT (WEEK(quince,5) - WEEK(primero,5)) INTO lunes;
    END;
ELSE
    BEGIN
    SELECT (WEEK(LAST_DAY(fecha),5) - WEEK(quince,5)) INTO lunes;
    END;
END IF;

Posteriormente computa el resultado y lo devuelve con dos cifras de precisión usando TRUNCATE().

Le faltan muchas cosas a esta función (como que la fecha sea parametrizada y no que la tome de la actual) y cosas así; pero tomemos en cuenta que no tengo mucha experiencia en administración y esta función la construí con una experta en nómina sentada a mi lado.

Espero que entiendan algunas cosas más de la construcción de procedimientos almacenados y funciones almacenadas en mySQL.

QNX libera su código fuente de sus Sistemas “Real-Time”

Esto ya habia sucedido hace algún tiempo pero no habia tenido tiempo de responder; MySQL AB ya habia adquirido derechos para distribuir mySQL sobre QNX (El sistema Operativo (microkernel-based) de tiempo real) y este (QNX) habia liberado código para un storage-system para mySQL (llamado Falcon y que está disponible en el mySQL 6 preview) para manejo de datos en verdadero “Tiempo Real” (respuestas por el orden del microsegundo).

Ahora QNX Sorprende liberando a la comunidad el código fuente de su microkernel en tiempo Real; QNX Neutrino RTOS; bajo una licencia híbrida y flexible (para desarrolladores, comunidades, versión comercial y versión partners); si eres desarrollador, puedes acceder a todo el código fuente de un verdadero Sistema Operativo en Tiempo Real para sistemas imbuidos; servidores de multiples cores; sistemas de respuesta crítica, dispositivos móviles y demás.

Además; QNX libera su “Eclipse-based” IDE; un entorno de desarrollo basado en C++ y Embedded C++ para el desarrollo de aplicaciones para QNX; la plataforma llamada QNX Momentics está disponible en su sitio de descargas (tambien incluyen un port de gcc 4.2 para QNX Neutrino).

Al igual que Java; QNX ha enfrentado algunos problemas de liberar completamente el código; pues contribuciones previas de partners (como Oracle) han venido en licencias bastante restrictivas, mientras otros partners (como mySQL) ofrecen licencias menos restrictivas (como Licencia Apache o incluso BSD); en la sección Open Source; explican algunas de las razones de su sistema “híbrido” de Licencias.

Para todos aquellos proyectos que desean analizar un Sistema Operativo Embebido de tiempo Real y una Base de datos de respuesta en Tiempo Real, es hora de ir probando a QNX Neutrino + mySQL Falcon.

Nota: Se podrá hacer un port (así como Debian-Hurd) para un Debian-QNX?.

Microsoft da 10 razones para no usar Google Apps

He leido en el blog de Enrique Dans, un artículo sobre las “10 razones por las que una empresa no debe usar Google Apps”; intentando pensar en una “mala y libre” traducción, decidí leer el articulo original (no pensé que en su FUD, Microsoft pudiera llegar a ser tan demagogo); pero sí, lo es! (aun cuando hay ciertas dudas de la veracidad del articulo de ZDNet), asi que decidí hacer algunos comentarios al respecto.

Google nunca ha sido santo de mi devoción, ni tampoco pienso que algunas cosas las estén haciendo bien, su uso indiscriminado del Software Libre y escudandose detrás de él es a veces un poco “inmoral”; pero bueno, a veces así son los negocios.
Google Apps es un sistema de aplicaciones que aun le falta mucho por ser y por “hacer”, no son la panacea ni lograrán vencer el hambre en africa; de tal manera que no pienso defender mucho a Google; sin embargo, odio cuando alguien despues de haberle metido el dedo a la crema de la torta; a ver que otros hacen lo mismo grita “epa! epa!” con aquella cara de hipocresía… como puede Microsoft acusar a Google de mal ejemplo corporativo?, veamos sus 10 argumentos en contra y mis comentarios:

1. Google se pavonea de tener clientes empresariales, pero ¿cuántos usuarios de sus aplicaciones existen realmente en las empresas?

Pues no es argumento; si mañana desarrollo un sistema XML más completo y acorde y mejor preparado que su “mal llamado XML” usado en .NET; van a usar de excusa “epa!, por qué van a usarlo si nadie lo usa?.
O sea, acaban de lanzar la propuesta al mercado y ya lo estás acusando de que “nadie lo usa, nadie lo usa!”, o sea, no tiene 15 años en el mercado; por favor, criticas más costructivas para la próxima.

2. Google tiene una tradición de lanzar productos incompletos, llamarles â??betasâ?, y actualizarlos cuando le da la gana sin un calendario anunciadoâ?¦ ¿es eso lo que las empresas necesitan?

Concepto de “Beta Perpetua”; quiere decir que google (como muchos proyectos de la nueva era de la informática) tienden a ser “sinceros” y a declararse en una “beta perpetua”; es decir, se asegura que los productos “siempre” serán actualizados, con cada vez nuevas y mejores características y no en “ciclos constantes” con “fechas de caducidad” donde uno va a gastar miles de dólares sin saber si los bugs serán corregidos mañana o en el próximo “service pack” y cualquier persona sensata prefiere “una beta perpetua” a un producto que se degrada y dejas de darle soporte; obligando a comprar “el nuevo y mejorado”; Por qué si a algunos les gusta Windows XP tienen “obligatoriamente” que dejarlo para comprar Windows Vista?.
Más vale malo conocido?…
Update: me comentaron que precisamente “esto” es lo que dice la clausula de “beta perpetua” de Microsoft Live Services; hay que ser hipócrita de acusar a Google de “irresponsable” por lanzar productos fuera de garantía y fijense lo que dice la clausula 15 de Garantías sobre los productos Windows Live:
15. MICROSOFT NO OTORGA NINGUNA GARANTÍA.

Microsoft proporciona el servicio â??tal cualâ?, â??con todos los defectosâ? y â??como está disponibleâ?. Microsoft no otorga ninguna garantía sobre la exactitud o la oportunidad de la información que pueda facilitar el servicio. Las entidades Microsoft no proporcionan ninguna garantía ni condición expresa. La legislación local aplicable puede concederle otros derechos como consumidor que este contrato no puede modificar. Microsoft excluye toda garantía implícita, incluidas las de idoneidad para un fin genérico o específico, competencia profesional y ausencia de infracciones.

3. Google afirma que sus soluciones ofrecen costes más bajos por la no necesidad de almacenamiento, hardware o mantenimiento. Pero si Google Apps es un complemento a Microsoft Office, los costes en realidad serán mayores, por la necesidad de supervisar y mantener dos sistemas en lugar de uno, incrementando complejidad y coste.
En eso Microsoft es especialista; en incrementar “ocultamente” la complejidad y los costes de mantenimiento; ¿Cual aplicación en MS FoxPro se vendió sin que requiriera que la empresa contratara un programador en FoxPro para que le diera “mantenimiento” a la aplicación?.
Office Live + Outlook para que funcione necesita un servidor sharepoint + un servidor Exchange Server + un Servidor de directorio con IIS, eso no es tener que supervisar 4 sistemas (en vez de uno o dos) y tener que contratar “administradores Microsoft”?.

Acusa al otro de arrojar piedras; pero esconde las tuyas primero …
4. El negocio de Google es vender publicidad en las búsquedas. Su línea de empresas sólo supone un 1% de sus ingresos, ¿qué pasará si lo hacen mal? Cerrarán su línea sin consecuencias. ¿Deben los clientes simplemente confiar en que esto no va a ocurrir?
MS Atacó duramente a Skype (un servicio gratuito) cuando este lo culpó de los daños causados por su “Patch Thuesday”; claro que ocultamente promocionaba su plataforma de VoIP propia; ahora bien, esa plataforma supone menos del 1% de los ingresos de MS; que pasa si lo hacen mal?, cerrarán sin problemas cierto?; como los cupones de servicio del convenio Novell?, o los reproductores Mp3 Zune?, Microsoft tiene un ámbito de acción mucho más amplio que cualquier empresa y ha cerrado plataformas de negocio sin consecuencias “para ellos”.
Mateo 16:15 … no mireis la paja en el ojo ajeno …
5. Google Apps sólo funcionan si la empresa no tiene usuarios avanzados, si los empleados están siempre online, si las empresas no han construido aplicaciones a medida sobre Office� ¿no es este un minúsculo porcentaje de los trabajadores de hoy? En una comparación de prestaciones, no es sorprendente que Microsoft tenga hoy un gran liderazgo.
Claro; si la aplicación es “on-line” siempre estarán on-line; no es “acaso” a donde llevan las tecnologías MSN Live?, Office Live, Sharepoint?, etc? … en qué parte MS se dió cuenta que las tecnologías sobre Internet son “el futuro”?, o sea, son el futuro para ustedes pero otros en el mercado antes que ustedes no lo son?…
Por qué entonces desean un formato “inter-operable” con formatos de Internet si no desean poner sus aplicaciones On-line?, para eso quedense binarios…
Lo que es bueno para la pava …. es bueno tambien para el pavo …

6. Las Google Apps no tienen funciones esenciales en la creación de documentos, como cabeceras, pies, tablas de contenidos, notas al pie� Aunque se puede trabajar de esta manera en documentos básicos, el trabajo con documentos complejos exige un proceso en dos partes: trabajar el documento conjuntamente, guardarlo en Word o Excel, y enviarlo por e-mail para la edición final. Valdrá $50, pero sólo con las ineficiencias creadas por este proceso, ¿cuanto cuesta realmente? ¿Puedes permitirte la pérdida de fidelidad?
Enviarlo por email para la edición final?, en que época vive el que redactó este documento?, El estado del arte en sistemas de versiones (incluido documentos) está en el software libre con sistemas como SVN y DARCS; es verdad que aun se puede mejorar muchisimo el proceso de construcción de documentos muy complejos usando solo estandares XML (incluido ODF); sin embargo, que es más dificil?; estar sincronizando documentos a punta de “email” o trabajarlo colaborativamente en ambientes on-line y en tiempo real entre cientos de usuarios?.
Y les parece poco 50$, claro!, como sus aplicaciones cuestan cientos de dólares!, he visto aplicaciones que hacen secuenciamiento de genoma más baratas que su MS Works!.

7. Las compañías tienen que pensar todo el tiempo en la regulación y los estándares gubernamentales. Google puede guardar un montón de datos de empresas en sus servidores, pero no existe una manera sencilla y automatizada para borrar datos con regularidad, solicitar un embargo legal para un documento, etc. ¿Qué ocurre si una empresa tiene que responder ante las autoridades regulatorias? Google presume de un 99.9% de disponibilidad de sus servidores, pero pocas personas se dan cuenta de que esa promesa sólo aplica para Gmail. Igualmente alarmante es la definición de Google para downtime: diez minutos seguidos de caída. ¿Qué pasa si a lo largo del día, Google se cae siete minutos cada hora? ¿Cuánto le cuestan siete minutos cada hora durante todo un día a una empresa?
Ahí no voy a defender a Google; pero que yo sepa, Hotmail tampoco es la perita en dulce que pretenden mostrar … puros “supuestos” …
Supongase que cae una de esas nuevas “bombas de vacio”; sobre redmont, y suponga además, que incinera todos los programadores (y solo aquellos) que se sabian de memoria las aplicaciones MS Office; cuanto le costará a su empresa quedar sin soporte técnico y sin su suite de ofimática favorita?…

8. En el mundo de los negocios, todo es always on y always connected. Por tanto, el acceso a soporte 24/7 es esencial. Si una compañía implanta Google Apps y hay un problema a las ocho de la tarde� lo siento, el soporte de Google sólo abre de lunes a viernes, de 1AM a 6PM PST. ¿Es ese el horario de los negocios globales? Y si no hay un administrador disponible en el lado del cliente (un requerimiento), ¿qué hago? ¿Paro mi negocio?
Todo es “always on” y “always connected”?; emmm … no entendí, pero si arriba dijiste que eso era MALO, que era DEMONIACO, que era la perversión de la red; que solo las empresas locas se iban a mantener “siempre conectadas” y que esa es una proporción minuscula?…
Claro, MS te atenderá; a un elevado “sobre-precio” en el soporte, porque estás llamando fuera de su “horario de soporte”:
Horario de Soporte Microsoft:
Lunes a Viernes: 8am-8pm
Sábado, Domingo y Feriados: 9am-7pm
Nos contactaremos con usted en un plazo de 24 horas hábiles.
Y por qué el ejemplo no lo pusieron “que pasa si se me daña el registro de Windows a las 9 de la noche?” … no se preocupe, deje su mensaje y en “24” horas “habiles” lo llamaremos.
Espere sentado …

9. Google dice que los clientes corporativos usan sólo un 10% de las funcionalidades en las aplicaciones de productividad de hoy, lo que implica según ellos que todo el mundo necesita el mismo 10% de funcionalidades. Los hechos son claros, en todas las compañías hay determinadas funciones que necesitan acceso a información específica. ¿Cómo da respuesta la estrategia genérica de Google a estas necesidades?
Un pensamiento muy “gnome” que tambien discuto; el hecho de que solo un 5% tenga impresoras tabloide doble cara; no significa que mi cuadro de dialogo de impresión sea genérico y no reconozca las opciones avanzadas de mi impresora; pero vamos a estar claros; en el caso de herramientas de ofimática (no estamos comprando software para disparar misiles) las oficinistas usan un real 10% de la aplicación que le pongas, de hecho, muchas no usan ni eso; rara vez usan combinación de correspondencia y mucho menos usan control de cambios; por ende, voy a comprar herramientas super-costosas para todo mi staff, o solamente aquella con las cosas que necesito?.
Para los usuarios “super-profesionales”; la API de Google es libre y descargable, como para ponerse a hacerle nuevas cosas; ahora bien, donde está el código fuente de Microsoft Office?…
Retrocedamos 20 años; cuando las aplicaciones de ofimatica eran rudamente complejas (wordstar, wordperfect) y viene una aplicación que no hacia “nada más” que transcribir textos y pam!, se gana el mercado, recuerdan?, MS Word?, ahora que la aplicación es un gran elefante blanco, llega una aplicación y le hace la misma jugada y ellos se quejan de “falta de funcionalidad para usuarios complejos”, no es irónica la vida?.

10. Con Google Apps en beta perpetua y Google controlando cuándo y cómo lanza funcionalidades extra, los clientes no tienen el mínimo control sobre los lanzamientos de nuevos productos y prestaciones. ¿Cómo 1) planificar y formar estratégicamente, 2) conseguir las funcionalidades y prestaciones que he solicitado? ¿Cuál es el coste de no saber?

Microsoft dando enseñanzas de como “enseñar a llevar control a los clientes”?, de cuando acá uno a tenido control sobre los lanzamientos?, las empresas solo tienden a “botar las viejas versiones” y “comprar nuevas versiones” y cada nueva funcionalidad implica “espere al próximo service pack o a la nueva versión”; un concepto de beta perpetua, indica que esa mejora estará disponible sea a partir de la comunidad o a partir de google mismo (incluso a partir de tu propio equipo de desarrollo) sin tener que esperar un “futuro y lejano” service pack.

En conclusión, estamos en la época de la web 2.0; controles distribuidos, beta perpetua, sistemas inter-operables (o acaso, por qué querían tanto un estandar ISO XML?), aplicaciones web “siempre conectadas”, trabajo colaborativo, ambientes abiertos y mensajería instantánea, hilos de conversación en vez del viejo y clásico “email” (por muy Ajax que le pongas); MS en este artículo, sin querer, pelea todo lo que la Internet ha logrado desarrollar en los últimos años y discurre a través de su herida; toda la hiel del mundo corporativo (lease Chevrolet, Ford) y no nombra para nada los movimientos del codigo abierto, las redes colaborativas y los sistemas interconectados.
(Y si no quieren google Apps, cambiense a Zimbra!).

¿Cuando terminamos el proyecto?

Así titula Víctor Munzenmayer un post de su autoría donde habla de las posibles “excusas” que los desarrolladores de Software podremos emitir a esos jefes (dignos de Dilbert) inútiles que a veces nos gastamos y que podremos “confundir” con estas respuestas:

respuestas.jpg

Ya sé para decir en mi última entrevista “Es que estamos instalando el último parche del sistema de colas del proxy inverso”!, suena tan bien que mi jefe preguntará “y desde cuando estamos trabajando en un proxy inverso?” … 😉

Libertad versus apertura en Silverlight (o II parte de No a OOXML)

No habia pensado ni planeado escribir algo sobre los licenciamientos, patentes ni nada por el estilo hasta que me dió por leer Planetalinux Mexico (ya que Planeta Linux Venezuela está “parado” desde hace algún tiempo) y me dí cuenta de la “campal batalla” que entre dimes y diretes se destapa en contra y a favor de Silverlight (y el port Moonlight para Mono.NET).

Creo que ha pasado lo mismo con OOXML; la discusión sobre si ser “libre” implica estar “libre de patentes” es incierta; claro está que podemos estar en contra del trato “preferencial” que recibe Novell por sobre otras empresas (Red Hat, Canonical) y fundaciones (Debian) en la obtención única y exclusiva del acceso a codigo fuente; procedimientos y herramientas de las tecnologías Microsoft; pero bueno, eso es otra historia.

Lo que nos compete aquí discutir es el hecho de si la actual licencia de uso de “Silverlight” es compatible con el procedimiento “habitual” de los modos de licenciamiento de *nix/BSD.

La razón de la discusión deviene del hecho que la implementación “moonlight” (para Mono) se basa en el acuerdo “comercial/tecnológico” entre Microsoft y Novell y por ende en “exclusividad” Microsoft cederá a Novell todas las especificaciones, codecs y demás artilúgios que necesita “moonlight” para parecerse a “Silverlight” más lo que algunos denominan “el trabajo sucio”; es decir, sacar las versiones para “otros sistemas” (incluyendo Linux) de sus tecnologías “punta” sin tener que ensuciarse las manos con codigo abierto.

Discuto en primera parte a los “demonizadores” de Microsoft; todavia en las mentes de muchos en el área de software libre no se nos ha olvidado la gran cantidad de “basura” que Steve Ballmer (actual CEO de Microsoft) ha lanzado en contra del movimiento de Software Libre; ahora que tienen un “nice guy” (Bill Hilf, aun cuando no tan bueno desde que dijo que “el Software libre está muerto, Linux no existe ya en el 2007”) y que han “comprado una cooperativa trasera” (Novell) para hacerles el trabajo de porting de sus aplicaciones a Linux, creo que mucha gente está “a la espera” de una imagen “retractada” de Steve Ballmer o al menos un acuerdo oficial de que “estaba equivocado” y que compartir en vez de demandar es la premisa.
Por ende solo falta “esperar” a lo que sucede; creo sensato entonces hacer lo que yo llamo “retar al destino”; es decir, que Canonical o alguna empresa grande “descargue, utilice y modifique” Silverlight o alguna tecnología de Microsoft marcada como “open source” y esperar a ver si Microsoft acepta con buen ojo el movimiento libre o en su defecto vuelve a la “old-school” y comienza a demandar.

Lo que pasa es que a veces da risa cosas como esta:

“Our customers have been asking for enterprise ready Open Source Software on Windows. We are pleased to be working with Microsoft and the Open Source community to deliver this choice to customers.”
â?? Ali Shadman, Vice President, Unisys

En la página web de OpenSource Microsoft; Unisys?, esa empresa infame que demandó a todo el mundo por su bendito algoritmo LZW para Gif y que planeaba “demandar a todos los web sites del planeta tierra” por usar Gif?, puede hablar Unisys de Software Libre? … o sea … sin comentarios ..

El otro inconveniente es que la “Open Promise”no es la panacea ni es refrescante agüita de coco;bajo ella no estan TODAS las tecnologías detrás de aplicaciones como .NET, .NET framework, Silverlight; todas ellas bajo el porting hacia Mono y programar en esas tecnologías “fuera de la open promise” te hace caminar en un limbo legal parecido al de la piratería.

Sin embargo, puede que estemos equivocados y que Microsoft esté “virando al camino correcto” del mundo del “shared source” (como prefiere llamar al Open Source) y creo que en el aspecto “politico” deberíamos dejar a Microsoft en paz un tiempo.

Donde no debemos dejar en paz y seguir luchando para que se tome en cuenta a la gente es en la parte tecnológica; no podemos seguir en el mismo jueguito de OOXML; 6000 páginas, como 15 formatos distintos; todos “sustituibles y reemplazables” por formatos ya existentes (y muy parecidos), estandares abiertos (algunos formatos ya ISO) y otras tecnologías ya implantadas que en vez de ser mejoradas son tomadas a la fuerza, re-convertidas en algo a gusto y criterio (re-invención de la rueda) y re-implementadas bajo otro nombre, otra licencia, otro estandar.

Y esto no hace más que levantar mis sospechas; no es ese el antiguo modus-operandi de Microsoft (Copiar, Cambiar, Aniquilar) de tomar cosas que ya existen, cambiarlas y ponerle otro nombre “mas comercial”, hacer que todos usen “su versión” en vez de la “oficial” y terminar adueñandose de la tecnología y aniquilando al contrario; esta vez el contrario es el Software Libre.

Ya en un post anterior habia hecho una comparativa entre MathML y SpreadsheetML; mostrando diferencias y semejanzas; en vez de hacer una “ampliación” de un estandar existente; a Microsoft siempre le parecerá mejor ser “el dueño de la torta” y no “un invitado más a la fiesta” y prefirió hacer uso de un lenguaje propio (spreadsheetML) para hacer “lo mismo” que un lenguaje que ya existia venia haciendo por años (MathML).

Ahora; ocurre lo mismo con Silverlight; pero esta vez se fueron “al techo” de copiones y deciden trabajar (supuestamente de cero) en una implementación de un “mejor y único” sistema de vectores, me imagino que combinado con el actual lenguaje de definición de interfaces XAML; es la “única coca-cola del desierto”; negando que desde hace mucho tiempo (y recuerdo que luego de 1200 días de estudios y correciones en ISO) existe SVG; por qué no usarlo?; nooo!, es que EL NUESTRO (XAML) es mejor … pero, en donde es mejor?, veamos:

Primero, veamos una Elipse:

Primero en SVG:

 

<ellipse cx="80" cy="80" rx="50" ry="50" style="fill:rgb(255,229,242); stroke:rgb(242,0,125); stroke-width:5"/>

Ahora en XAML:

 

<Ellipse CenterX="80" CenterY="80" RadiusX="50" RadiusY="50" Fill="PaleGreen" Stroke="DarkBlue" StrokeThickness="5"/>

Como vemos, simplemente se dignaron a “cambiarle el nombre” a los atributos; y crear “atributos propietarios” (como el conocido <body bgcolor=””> en vez de usar un lenguaje “ya existente” de atributos de estilo (CSS).

Ahora veamos una “shape” más compleja:

Primero en SVG:

<svg xmlns=”http://www.w3.org/2000/svg&#8221; viewBox=”0 0 105 95″>

  <path fill="#7B4" d="M106,13c-21,9-31,4-40-2l-10,35c9,6,20,11,40,2l10-35z"/>
  <path fill="#49c" d="M39,83c-9-6-18-10-39-2l10-35c21-9,31-4,39,2l-10,35z"/>
  <path fill="#E63" d="M51,42c-5-4-11-7-19-7c-6,0-12,1-20,5l10-35c20-8,30-4,39,2l-10,35z"/>
  <path fill="#FD5" d="M55,52c9,6,18,10,39,2l-10,35c-21,8-30,3-39-3l10-34z"/>

</svg>

ahora en XAML:

 <Canvas xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”&gt;

  <Path Data="M106,13c-21,9-31,4-40-2l-10,35c9,6,20,11,40,2l10-35z" Fill="#7B4"/>
  <Path Data="M39,83c-9-6-18-10-39-2l10-35c21-9,31-4,39,2l-10,35z" Fill="#49c"/>
  <Path Data="M51,42c-5-4-11-7-19-7c-6,0-12,1-20,5l10-35c20-8,30-4,39,2l-10,35z" Fill="#E63"/>
<Path Data="M55,52c9,6,18,10,39,2l-10,35c-21,8-30,3-39-3l10-34z" Fill="#FD5"/>

 </Canvas>


Las únicas evidentes “novedades” es llamar en una shape Data en vez de d (violando una norma de XML de uso de tag-elements y atributos en minuscula, pero bueno) y Fill en vez de fill; por lo demás, se nota “A leguas” que las Shapes de XAML son un simple fork de SVG y que Ian Griffiths (el creador de el “Avalon Vector Graphic”) lo que hizo fue comprarse un libro de SVG y hacerle un “porting” a .NET pero sin aceptar la autoría inicial.

Esto me recuerda a un episodio de la guerra fría; cuando la Unión Soviética denunció a Francia e Inglaterra por espionaje de su proyecto de avión supersónico comercial (conocido como “Tupolev 144” en Rusia y como Concorde en Francia) a lo cual los ingenieros Franceses contestaron:
“Cuando las grandes mentes piensan en grande, llegarán a las mismas conclusiones” … una burda excusa para decir que “se copiaron un trabajo” y no le van a dar crédito a verdadero creador de la obra.

Que Silverligh/Moonlight/XAML es más rápido que SVG?, bueno, si estas corriendo en tu propia “maquina virtual” (como flash o como java) en vez de “usar los recursos del browser” entonces EVIDENTEMENTE que XAML va a ser mucho más rápido que SVG; pero si SVG es TAN SEMEJANTE (por no decir igual) al sistema de shapes de XAML; por qué no aceptar tambien SVG dentro de Silverlight?; a la final son más las aplicaciones que guardan SVG (Corel, Painter, Photoshop, InkScape) que las que guardan en XAML (?)… veamos “la respuesta”:

On the face of it, it seems strange to invent a new way of representing vector graphics in markup when a standard already exists. However, the principal advantage of these shape classes is that they have been designed to integrate into the Avalon programming model. The vector drawing elements derive from the same FrameworkElement base class as all other XAML elements, and follow the same naming conventions…

By not using SVG, Avalon ensures that vector graphics can be mixed in with any other kind of markup in your XAML, and can take advantage of all of the same layout facilities.”

Notas:

  1. Claro que suena extraño!, crear un nuevo lenguaje de vectores (y algo TAN PARECIDO A SVG que abruma), más extraño suena viniendo de Ian Griffiths (sin siquiera mencionar que se basaron de SVG) que no le dijo a nadie que su “genial invento” era un simple fork de SVG.

  2. Han sido diseñadas para integrarse a Avalon Model?; y por qué no adaptaron a Avalon Model para que se “integrara” con el resto del mundo?, eso no lo hace más “universal y aceptable” por todos?, acaso no les enseñó Daniel Robbins nada cuando se fué para Microsoft a enseñarles XML?, parece ser que por lo visto … NO.

    Nota: luego de su “inmensa frustración” por no lograr hacer entender a Microsoft y poder utilizar su experiencia dentro del mundo corrupto y corporativo de MS; Daniel Robbins renunció solo un año más tarde, ahora trabaja para FSLabs.

  3. Etiquetas CamelCase, UpperCase y Capitalize son de las cosas que siempre se negaron de HTML y que XML quiso erradicar; a parecer, a los programadores de Microsoft les encantan los documentos XML mal formados y unas convenciones de nombres únicas para ellos solamente y por ende; necesitan re-escribir TODO para ser compatible con su motor XML incompatible con DOM, DTD, RelaxNG y otros schemas de la W3C (y por ende, no soporta XPATH, XINCLUDE, XLINQ, etc) (en vez de re-escribir su UNICO Y MAL FORMADO motor XML para aceptar documentos basados en las convenciones de nombres de la W3C).

  4. No usar SVG asegura el triunfo?, pero si su sistema de vectores es IDENTICO salvo el uso de esas convenciones extrañas de nombres (únicas de microsoft) y eso de que SVG no puede ser mezclado es otra falacia; acaso no existe XBL? (mezcla de SVG+javascript); acaso SVG en vez de usar atributos para cada cosa imaginable, usa CSS (otro lenguaje) que es más escalable?; sigo sin endender la filosofia Microsoft.

y con gentes como Ian Griffiths, Bill Hilf, Steve Ballmer y Brad Smith (el que dijo que linux violaba 235 patentes) es con las cuales Novell, el proyecto Mono, Gnome y Miguel de Icaza nos quieren casar?, o sea, por qué camino vamos?.

De hecho, creo que el permitir SVG se reduce simplemente a hacer un “Svg.load()” o algo por el estilo (mas una simple y sencilla transformación XSLT), en vez de cargar su “original” sistema; pero como ya estamos acostumbrados; Microsoft siempre “re-inventará la rueda”; para que podamos “olvidarnos” de los estandares existentes y “acogernos” a sus “nuevos, remozados y más prácticos” estandares.
Nota: tal vez microsoft considera a SVG un formato “de la compentencia” (algo asi como OpenDocument) y de hecho, NINGUNA de sus aplicaciones da soporte para apertura de SVG (y creo que en modo Export, solo Visio lo hace); Cuando una empresa confunde un “estandar abierto y aceptado” (SVG, XML DTD, openDocument) con un “estandar enemigo y de la compentencia” es cuando se demuestra que una empresa con una fuerte visión competitiva y corporativa NO PUEDE dedicarse al software libre y no de buenas a primeras.

Pero una cosa es la “visión corporativa” muy discutible pero a pleno derecho de tenerla y otra cosa muy distinta es que un proyecto de Software Libre como Mono, fork de un proyecto corporativo como lo es .NET; por qué si son proyecto libre en vez de seguir “las pautas corporativas” de una empresa se dedican a crear “el puente largo de la migración” entre una tecnología y otra?; lo digo porque:

    • Donde están los deseos del proyecto Mono de implementar SVG en Moonlight?

      SVG se caracteriza por utilizar solo “estandares existentes” (como casi todas las implementaciones de la W3C); no habia que re-escribir un nuevo core DOM/XML para que Firefox, Safari u Opera soportaran SVG; pero para Silverlight necesitaré Mono; es esa interesante caracteristica del “para usar esto debes tener lo otro” que siempre ha caracterizado a Microsoft; nada de estandares, todo yo.
      Mientras, el único Browser que queda sin soportar SVG es Internet Explorer.
      Por ende, aun cuando el uso de Cairo o AntiGrain les asegura la posibilidad de ser “independientes de lo que rasterizan”; es evidente que el no nombrar a SVG en ninguna parte de la pagina de Moonlight (http://www.mono-project.com/Moonlight) los hace sospechosos de todas las críticas (fundadas o infudadas) que reciben; que en vez de ser un proyecto “puente” para permitir la implementación de tecnologías Microsoft usando estandares libres (XAML=>SVG, MPEG=>Theora, MP3=>Ogg); son simplemente un proyecto de “marionetas” siguiendo las directivas de Microsoft.

      Por cierto, por qué no Ogg para la web?, el hecho que silverlight no lo soporte, no significa que Mono no pueda, por qué negar esa posibilidad?
      Update: Some folks are asking whether they could use OGG for the video rendering in Moonlight. Today this is already possible because the media engine we use to prototype is ffmpeg which has support for this. From the standpoint of a desktop developer this might be enough, but for the web, the problem becomes an issue of compatibility with the Microsoft Silverlight implementation.  (Miguel de Icaza’s Blog)

      Claro, la implementación de MS nunca aceptará OGG, como no acepta SVG; por qué no aceptarlas Mono?, van a seguir siendo los “imitadores” de oficio?.

      Claro, es que resulta ser, que de los “formatos soportados”; ninguno es libre  (a la vista, solo soportan WMA, WMV y MP3; de este último irónicamente (ya no tan irónicamente viniendo de Microsoft) dicen que no soportan el “free variable bit-rate” (ISO/IEC 11172-3 clause 2.4.2.3); eso no lo convierte entonces en un mpeg-layer II? (los que no soporta variable bit-rate de modo libre) pero se publicitan como un layer III?.)
      Bueno, eso último fue un chiste de mal gusto; pero bueno, es que las empresas “comerciales” te dicen “si soportamos mpeg-layer 3” y en unas clausulitas bien pequeñas dice “excepto aquellas partes de layer III donde somos incompatibles”; ¿en que proyecto de Software Libre se ve tal hipocresia de soporte?. Y donde quedan los otros formatos?, incluso aquellos que nacieron junto a él? (lease: ASF, ASX, AVI, mpeg-capa1, etc) …
      Y peor!, quien dijo que algún proyecto libre debería tener componentes “compatibles” con DRM?

      En conclusión a esto, Microsoft NUNCA ayudará (como ayudamos en el Software Libre los unos a los otros) a mejorar, ampliar o re-implementar tecnologías y estandares existentes (pasó con mathML/SpreadSheetML, XBL/VML, OOXML/OpenDocument, SVG/XAML, etc); el SIEMPRE se construirá un nuevo estandar, una nueva tecnología y una nueva forma de pensar; para siempre llevarnos a donde “ellos quieren” y no hacia donde “la libertad” nos debería llevar; o acaso con la “inutilidad suprema” de MonoDevelop para desarrollos serios y corporativos; no está llevando Mono a los programadores a usar MS VisualStudio?, una suite de desarrollo propietaria con miles de patentes y licencias detrás?, un proyecto libre llevandonos a usar proyectos y aplicaciones propietarias?; hay que ver hasta donde llega esto.

      y bueno, al final de cuentas decir que un “producto Microsoft” es “libre” porque le van a poner “una licencia MIT+GPL+Apache+de Conducir+de Matrimonio+X” es una completa falacia si tomamos en cuenta que todo software, contenido, emisión o aplicación desarrollada por Microsoft viene con sus licencias muy bien descritas, ejemplo:

      La licencia de Silverlight (uso el vinculo a la licencia Mac porque la licencia para usuarios PC no está disponible), dice que SOLO lo puedo instalar en los S.O y navegadores que ellos me indiquen (asi Epiphany queda completamente descartado, o Camino, o cualquier otro navegador); su licencia se parece a la de Oracle; “no puedo hacerle benchmarks, ni indicar si estos fueron desfavorables”; no puedo hacerle “forks (como otras aplicaciones libres” (a menos que trabajes para Novell ;)), no puedo “revelar bugs o fallos de seguridad”, no puedo “trabajar sobre ninguna limitación tecnica del Software”, no puedo “publicar el software para que otros lo copien” (pero si es gratuito, que hay de malo que lo ponga en mi server para que otros lo copien?) y además, todo lo que yo haga “con él” hereda sin excepción, las clausulas de la licencia.
      Pero como toda licencia Microsoft; por muy “GPL-Like” que sea; siempre empieza con una “hermosa clausula que dice” (dicha clausula puede ser encontrada incluso en sus clausulas “abiertas”):
      “EXPORT RESTRICTIONS. The software is subject to United States export laws and regulations. You must comply with all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see http://www.microsoft.com/exporting.&#8221;

      Las actuales licencias “libres” de Microsoft (Reference, Permissive y Community) dicen que “por encima de todo el palabrerio de abajo”; están las leyes de “copyright” de Estados Unidos y su sistema de patentes (“Under the U.S. copyright law”); por ende; no estan libres de patentes; simplemente sus patentes “podrian ser” royalty-free; pero reservandose el derecho Microsoft de cambiar esto cuando le dé la gana; y ya todos sabemos que no son “aceptadas Open-Source“; pero; puede un Venezolano programar con alguna aplicación licenciada bajo las normas de Microsoft?; si puede, ahora, si mudamos el caso a Cuba?, Iran, Bielorrusia, Corea del norte, Irak, Pakistan, Afganistan y otras naciones en conflicto, con bloqueos económicos, con cierres o embargos o en guerra o enfrentamiento, intervención armada o invasión de EUA u otra nación aliada que haga valer los privilegios norteamericanos sobre los de los paises intervenidos?; ciertamente NO; y aun cuando nos dé “pereza” de leer estos acuerdos y tratados de leyes de derechos de autor y patentes de USA; podemos leer cosas como esta:

      1. Ninguna tecnología MS (u otra que acepte las normas americanas, como el EAR, la OFAC y otros tratados de bloqueo) puede ser usada por “Ningun instituto de física, química, o de investigación de Rusia” (aun existe el temor de que renazca la URSS?).
      2. Los institutos Medeleyev y Kremlev y el Instituto de Energía Atómica de Rusia (aunque no creo que vayan a hacer páginas web con silverlight es bueno notar esto)
      3. La Universidad del Estado Báltico (en Krasnoarmeiskaya); tal vez la CIA la considera un nido infernal de hackers, crackers y pornógrafos de la Europa Oriental
      4. Aun cuando los USA es “supuesto” aliado de Pakistan, ninguna empresa de Islamabad (su capital) debería usar Windows; pues es blanco de Bloqueo por la EAR.
      5. Todos los grupos industriales Iraníes (incluyendo los de Shahid Bakeri, con los cuales Venezuela tiene convenios operativos e incluso algunas han construido industrias mixtas en Venezuela) quedan excluidos del uso de aplicaciones Windows.
      6. Me quedé sorprendido al saber que la Universdad “Ben Gurion” de Israel, está vetada por el departamento del Tesoro; Será que les deben plata?
      7. Las industrias físicas y aeronáuticas de la India y China (con las cuales Venezuela tiene convenios operativos y China es “dueña” de nuestro satelite Simón Bolivar”)
      8. Alguien me puede decir si las grandes narco-empresas “2000-DODGE S.L” (españa), “Café Andino” (españa) o “AG Representaciones” (Colombia) usan Windows?
      9. Yo recuerdo este caso; “C.A. V.J. CORPORATION”; es una empresa que existía en las cercanías de mi casa (Barquisimeto); fue cerrada por la DEA/FBI porque supuestamente era “fachada del Cartel de Calí”; habrán llevado su contabilidad con Microsoft Excel?.
      10. La empresa “COMPANIA FENIX INTERNACIONAL, S.A” de Caracas, Venezuela, no puede usar ningún software bajo leyes americanas por tener “posibles nexos con Castro y la Cuba Comunista” (y la hipocresía que?, por qué no bloquean entonces a PDVSA?)
      11. Sabian que colaborar con cualquier empresa, persona, entidad o nación bajo signo de bloqueo por ALGUNA de las dependencias del gobierno norteamericano es automáticamente penado con 5 años de prisión?

      Lo que trato de decir no es que USA no tiene derecho a bloquear supuestos “terroristas”, “narcotraficantes”, “criminales”, “hampa común” o “pro-comunistas”; son país soberano y tiene pleno derecho; lo que trato de decir con esto es que la Libertad de un software se puede comparar con la libertad de desempeño de un cuchillo; lo puedo usar para abrir una arepa (pan de maiz venezolano), untar mantequilla y cortar jamón; pero también lo puedo usar para matar; prohibir los cuchillos porque “posiblemente” pueden ser usados para el mal es como prohibir “los cifrados de alto nivel” solo porque “malvadas y siniestras naciones” pueden usar esos cifrados de alto nivel para ocultarnos información crítica y de vital importancia para la seguridad nacional o para la lucha anti-terrorismo.

      El software libre no debe ser en este sentido “político” (aunque es bastante político en el sentido de defender su plena libertad); decidir quien usa un software y quien no puede usarlo (a nivel mundial) es injusto y debería ser ilegal (pues viola la plena soberanía de las naciones); claro, las personas que vivimos en paises fuera de esas listas (creo que aun estamos fuera de esa lista … 😉 ) ni nos preocupamos; pero esas otras naciones, que se encuentran bloqueadas por dichos tratados; ¿pueden acceder a software médico?, ¿de gestión administrativa?, ¿aplicaciones de conectividad?, son un pueblo igual que otros, ¿acaso no tienen pleno derecho?; dejemos las luchas políticas para el terreno político y hagamos que el software sea libre para todos.

      En conclusión, algo que nace “libre” en algún punto (pero no en todos); seguirá siendo “libre” (hasta cierto punto) y no puede ser catalogado “completamente” libre a nuestro antojo; solo porque se ve bonita la palabra “libre”; simplemente no lo és y punto.

      Y hoy se tiró 3 el CNE

      Pues si; tambien las aplicaciones libres tienen propensión a fallos, sobre todo cuando se trabaja con un código que usa “eval” y no está plenamente validado; pero bueno, aqui va el fallo:

      Warning: pg_query() [function.pg-query]: Query failed: ERROR: relation “electores” does not exist in /www/httpd/conexiones/connection.php(134) : eval()’d code on line 1

      Warning: pg_num_rows(): supplied argument is not a valid PostgreSQL result resource in /www/httpd/conexiones/connection.php(166) : eval()’d code on line 1

      Y aqui el screenshot:

      cne.png

      KVM (Intel-VT) desactivado en la BIOS HP?

      Bueno; si, está confirmado, aun cuando el foro “oficial” donde HP hizo la declaración está off, algunas cosas pueden ser obtenidas a través de la caché de google, y es que depues de intentar magias y malabares para poder tener virtualización completa con KVM + un Intel Core Duo + una portatil HP nx6320; he descubierto según algunos foros de HP que ellos “desactivan por hardware” la virtualización completa en todos sus equipos, desktops y portátiles, para que te veas “obligado” a “parchear” la BIOS (si eres de esos osados que se atreven a “re-flashing” la BIOS de sus portatiles) o a “comprar VMWare” de la cual, evidentemente son partners y no pueden dejar de venderlo como solución de virtualización si todos los microprocesadores traen esa “posibilidad”.

      Cabe destactar que la misma gente de HP informa

      ” In view of the fact that HP actually both sells and supports VMWare virtualization technology software, it is a bit hard to imagine that the testing required to allow the VT-capabilities of the Intel Core Duo design to be comfortably enabled would be such an overwhelming effort.”

      Por qué bloquear Intencionalemente las capacidades de virtualización de los microprocesadores Intel? (los microprocesadores AMD no tienen directivas dentro de sí que puedan desactivar sus capacidades de virtualización); por qué agregar esta característica y por que “temer tanto” a la virtualización por hardware integrada en el kernel linux?; algunos dicen “inocentemente” sobre las posibles “desventajas” en virtualización que existe entre los Intel y los AMD (que estos últimos llevan una gran morena en ese campo) y lo “experimental” de la tecnología Intel comparada con la AMD; sin embargo, el una misma versión de CPU (intel Core Duo) pero en un computador distinto (un IBM T60) he logrado virtualizar Windows XP usando unica y exclusivamente KVM+Intel VT; entonces cual es el miedo?.

      ¿Automatización de procesos o “Computarización” de la burocracia?

      Alguna vez ha necesitado que obtener algún documento público?, solicitar su declaración de impuestos?, solicitar una entrevista con un prefecto?, en nuestro país está ocurriendo algo bastante interesante y es que múltiples organismos públicos se han dado a la tarea de “informatizar” (si es que se puede verbalizar a la informática) sus respectivas instituciones; pero hasta que punto se “automatizan” los procesos y hasta cual otro se sigue continuadamente “computarizando” la burocracia?.

      El término de “computarizar la burocracia” es un concepto que acuñé cuando me encontraba asesorando a algunos empleados de una institución pública (me reservo el nombre) y descubrí la “macabra verdad”; los informáticos de hoy en día muchas veces conocen mucho de sus herramientas de programación, crean sus objetos orm con hibernate, crean clases bellamente decoradas y les encanta usar solo “lo top de lo top” en sistemas, soap, wsdl y más; pero cuando se trata de pensar en “la gente, los usuarios”; nos quedamos de último en las listas de accesibilidad, intuitividad y facilidades al usuario.

      Siempre que les hablo de intuitividad a mis alumnos recuerdo la receta FoxPro; ¿cual es la mejor forma de hacer una buena gestión de usuarios?, una grilla!, una funesta y fatal grilla con todos los campos es lo que siempre los programadores le ponen a su secretaria; olvidando que la secretaria jamás se sabrá nos nombres, numeros de cedula, sso, numero de fila del registro y demás periquitos de la persona (notemos además que tardará más tiempo paseando entre 10 mil registros en una grilla que escribiendo cuatro constantes de busqueda en un formulario contextualizado); donde están los buscadores contextuales?.

      Para qué les ponemos computadores a las secretarias si igualmente va a cometer errores ortográficos, sintácticos y semánticos en sus oraciones?, se tiene el recurso pero no se entrena al usuario, recordemos que es la persona quien escribe la carta, no el computador.

      Pero vamos más allá del simple intento de colocar “un computador” para solucionar las cosas y llevemoslo al punto de la “organización gerencial” de una empresa; pongamos para ellos algunos ejemplos:

      Caso 1: Oficina del SENIAT: “por favor joven, debe traer las cuatro ultimas planillas del ISLR, original y copia de su RIF ya actualizado, planilla de actualización de recaudos y planilla impresa que encontrará en Internet”; ahora bien, para que te voy a traer esa cantidad pasmosa de papel cuando ustedes son SENIAT, ya ustedes tienen TOOOODA esa información; ¿para que seguir manteniendo viva esa burocracia de si antes pedian 10 planillas, ahora siguen pidiendo las mismas 10, pero esta vez hay que llenarlas en el computador?. La excusa más básica es que aunque ellos ya tengan esa información, necesitan validar la de el usuario; ¿y es que acaso en mi casa va a salir distinto?, o sea, para que toche lleno un bendito formulario si despues de llenado lo tengo que imprimir y llevar en papel al SENIAT?.

      Lo más triste del caso, es que las planillas descargadas de internet son un vulgar PDF, sin firma ni huella digital, como pueden entonces “aceptar” un documento que yo facilmente puedo falsificar en mi casa?, acaso no confían en los datos que “recolecta” su hermosa aplicación de 2 millones de dólares?

      Esto ocurre, porque “oficial y burocráticamente”, antes de la “automatización”, se requerian 10 planillas, 4 pro-formas y dos cartas de solicitudes dirigidas a dos gerentes distintos, 4 sellos, 2 visitas al Avila y una a Sorte; en vez de “re-evaluar” los procesos para descubrir los puntos debiles y fuertes del sistema; la simplificación de procesos y la verdadera “automatización” de funciones; debemos llenar ahora 10 formularios web (que ni siquiera son de facil uso como para decir que un panadero va a poder llenar esa aplicación a la primera); las 4 pro-formas se deben seguir llenando, pero esta vez con datos de 4 formularios web que debiste llenar e imprimir; el sistema te imprimirá las cartas que van a los gerentes que deberás firmar y poner tu huella dactilar (como si el instituto contara con lectores dactiloscopicos), las 4 secretarias de los 4 sellos siguen ahi para sellarte unas planillas que AUN debes seguir entregando aun cuando en los servidores de la institución ya esté TOODA la información que tu traes en papel y las visitas a Sorte y al Avila son opcionales pero puedes hacerlas virtualmente a través del portal de la institución.

      Caso 2: “Las enfermeras por lo general, en los cambios de ronda, se dan el parte de personas en espera, ingresados, pacientes en terapia, etc”; automatizar este proceso sigue por “crear una planilla” que las enfermeras llenan, un “encargado” de sistemas (por lo general el primer doctor de guardia) llenará esos datos en un “sistema” que generará una “planilla-reporte” que será retirada cada 8 horas (durante los periodos de cambio de guardia de las enfermeras) y con esto “facilmente” tendremos los datos de disponibilidad de camas y pacientes en espera por hospital”.
      ¿Que problema hay en eso?…. TODO!, se está completamente des-orientando la situación ya que se trata de “computarizar” un proceso manual existente en vez de “automatizar”el problema que existe; si el número de camas por hospital es una cifra conocida y las enfermeras pueden ir “ingresando” en un sistema de facil uso, el número de personas que van llegando a espera en emergencia y el jefe de piso de hospitalización va a ir registrando a quienes ingresa (el sistema automáticamente sacará a la persona de la lista de espera y lo pasará a ocupar una cama); eso ya no me está reportando la cantidad de camas ocupadas y la cantidad de personas en espera?, y acaso no es en tiempo real en vez de ser “cada vez que las enfermeras salen de guardia”?.

      El problema en este caso ocurre porque la gente trata de “automatizar” un proceso que ya existe, que es manual y “conocido”; tratando de evitar un “impacto” en la forma de trabajo de las personas; o porque simplemente le es “más cómodo” generar un UML de un sistema conocido de trabajo que “quemarse las pestañas” en descubrir una mejor y más eficiente forma de hacer las cosas.

      Caso 3: “fui a comprar unas botas en una industria de calzado, de entre todos los empleados, noté que habia un único empleado que pegaba la suela, cosia la suela, cortaba la suela y remachaba los puntos, dicho empleado (tardaron en atenderme así que me dió tiempo para ello) tardaba aproximadamente 6 minutos por calzado en ese proceso; el motivo consistía en que la persona que armaba el zapato, debia llenar una “cesta” y entregarla a este empleado; tomar un zapato de ahi, coserlo, caminar par de metros hacia la “remachadora”; luego, cruzar TOOODO el edificio para encontrarse con la cortadora de suela; que refilaba el zapato; luego, iba a “OTRA” esquina, donde se encontraba la vulcanizadora, que dejaba la suela lista y con sus sigulares “figuritas” del anti-resbalante”.

      El caso tiene que ver con la burocracia, pues aunque siendo empresa privada; se ve tambien “afectada” por las decisiones de los gerentes, que dicen que un “proceso conocido” es mejor que estudiar algo “nuevo y posiblemente mejor” porque puede que les cueste dinero, detener procesos, parar la fabrica, etc. Del ejemplo anterior deduje; primero, en algún tiempo pasado este empresario tuvo más empleados (porque no creo que sea tan animal para haber puesto las máquinas en ese orden tan “aleatorio”, creo que ni /dev/urandom pudo haber colocado más aleatorias las máquinas) y luego de alguna reducción de personal (para incrementar ganancias) solo quedaron unos pocos empleados haciendo el trabajo de 3 o más. Lo segundo que deduje fue que si SIMPLEMENTE movia las maquinas más cerca para que el empleado no tuviera que caminar tanto y si por ejemplo, evitaba la “cesta” y ponia a ambos empleados juntos en una real linea de producción; podia reducir el tiempo de creación de un zapato a menos de 3 minutos; sin embargo, como buen empleado usurero; se dará el lujo de cerrar su fábrica para re-ordenar su maquinaria y re-plantear su producción, mejorando notablemente su producción, a costa de perder un par de dias de ganancias?…
      Hace un par de semanas volví a comprarle unas botas con puntera a mi hermano; el empleado sigue caminando del rincón a la esquina …

      Acaso por retirar una simple aceituna de los cocteles de primera clase american airlines se ahorró 40 mil US$ al año?.

      Caso 4: Replicando lo malo: “Por lo general para poder solicitar una compra, en el estado se siguen unos pasos burocráticos definidos; pero por lo general, como en toda burocracia, algunos pasos pueden ser saltados “bajo cuerda” y permitirse el lujo (si eres amigo del gerente, del de administración, el contable, etc) de seguir adelante con el proceso incluso incumpliendo pasos o saltando por encima de otros que ya estan en el proceso; en nuestro caso, en un instituto público donde trabajé a la gente de administración se les permitía realizar “compras de urgencia” sin tener que montar orden de compra, incluso podian hacer pagos sin necesidad de haber recibido una orden de servicio; con la factura bastaba para hacer el pago; segun ellos era algo “facil y rapido”, para poder ser eficientes; el inconveniente ocurria cuando empresas llegaban a venderles soluciones en sistemas administrativos; solo aquella (muy famosa y conocida) que permitia este tipo de “vagabunderias” fue la que ganó la licitación para el sistema administrativo del Instituto”.

      Este caso ocurre cuando las instituciones se hacen “enemigas” de su propia burocracia y crean “canales irregulares” para obtener la solución a sus problemas; sin embargo, eso causa que solo “aquellas empresas” que puedan “permitirles las desviaciones irregulares” en vez de “re-estudiarle los procesos para automatizar y simplificar esos canales regulares” fueron las que ganaron; permitiendoles mantener su burocracia sin perder “su libertad de pasarse por el forro dicha burocracia”; no era más práctico para el instituto re-evaluar sus procesos y determinar sinceramente que cosas eran inutiles, que pasos podian ser plenamente automáticos y que cosas podian ser hechas sin la intervención del usuario en vez de tener que comprar el “unico sistema” que les permitia mantener su burocracia intacta y debajo de ella un panal de tuneles de irregularidad?.

      La burocracia se perpetúa, pero esta vez, viene automatizada …

      A %d blogueros les gusta esto: