Sun Microsystems, la empresa que desarrolla Java y Solaris entre otros proyectos, intenta ahora adquirir (comprar) MySQL AB, la mayor aplicación libre de base de datos. Al parecer han llegado un acuerdo para que el proyecto MySQL AB pase a poder de Sun.

Este hecho puede llevar a cosas buenas y cosas malas. Por un lado, puede aumentar la calidad de MySQL y también mejorar el sistema de conexión entre Java y MySQL, permitiendo crear un nuevo LAMP donde seria SGMJ, donde en lugar de ser LAMP (Linux, Apache, MySQL y PHP) se convierta en SGMJ (Solaris, GladeFish, MySQL y Java).

Esperemos que esta adquisición sea beneficiosa para el software libre y todos los proyectos que se basan en MySQL y quien sabe si no se termina convirtiendo en un nuevo Oracle.

En .Net existe una aplicación llamada ngen.exe que se encuentra dentro de la versión del Framework en la carpeta Windows (generalmente C:\windows\Microsoft.Net\Framework\vXXXXXX, donde las X son la versión) que precompila a código nativo un código de .Net.

Las aplicaciones desarrolladas en .Net pueden llegar a ser mas rápidas en algunos casos que las programadas en C o C++, porque a diferencia de estos lenguajes, no compila todo el código para ser ejecutado todo a la vez, sino que se realiza una compilación a un código intermedio IL que luego sera ejecutado por el JIT, y es aquí donde radica su velocidad, en que el JIT compila nativamente el código según lo vaya necesitando y se va almacenando en memoria para no tener que compilar algo 2 veces. Aparte de lo ya dicho que acelera la ejecución de una aplicación que no llame a cientos de métodos en poco tiempo (1 segundo o así). También hay que sumar a lo anterior el hecho de que JIT aplica ciertas optimizaciones sobre el código, antes de compilar este, por lo que esta realmente optimizado en comparación con C o C++.

Hay ocasiones, en que el uso de JIT reduzca mucho la velocidad de nuestra aplicación y necesitariamos hacerla en un lenguaje nativo. Por ejemplo, si tenemos una aplicación desarrollada en C# (es indiferente que sea en C#, VB o cualquier otro lenguaje de .Net) y necesite de un gran cantidad de microprocesador para procesar datos, es posible que nos interese precompilar nuestra aplicación para evitar la compilación JIT y así ahorrarnos tiempo de ejecución. Esto es posible gracias a NGen.

NGen es una aplicación que precompila a código nativo nuestra aplicación de .Net, realizando la misma función que JIT pero antes de ejecutar una aplicación, por lo que es posible que si se realiza con cabeza, nuestra aplicación se ejecute más rápidamente.

Para precompilar nuestra aplicación con NGen, abriremos la consola de DOS y añadiremos al PATH si no lo está ya la ruta donde se encuentra NGen (la ruta esta escrita más arriba). Una vez añadida la ruta, iremos donde esta nuestra aplicación y ejecutaremos el siguiente comando:

ngen install miaplicacion.exe

Con esto precompilaremos en una carpeta de cache de .Net nuestra aplicación para que se ejecute como código nativo.  Existen otras opciones aparte del install que apareceran al ejecutar ngen sin ningún parámetro.

Tengo instalada aunque no la uso la libreria de SQLite para PHP en el trabajo. Como estoy viendo que esta empezando a coger fama y según lo que he leído es como un Access pero bien hecho, me llamo la atención y me puse a instalarlo en casa. Como de costumbre a la hora de añadir una nueva extensión de PHP, abro el php.ini para descomentar la linea de la extension.

   extension=php_sqlite.dll

Cual es mi sorpresa que la extensión no funciona pero no me aparece ningún error. Hago un phpinfo pero no me muestra la extensión ni sus funciones, pruebo con get_loaded_extensions, y la extensión no aparece. Como me ha pasado otras veces, he probado a quitar alguna extensión por si no estuviera editando el php.ini correcto asi que al quitar extensiones, se quitan correctamente.

Como no encuentro información en internet acerca de este problema, habilito algunas extensiones mas y de repente funciona la extensión de SQLite, así que empiezo a descartar extensiones y me encuentro con la extensión extension=php_pdo.dll, y es que al parecer, a partir de cierta versión de PHP5 para hacer funcionar la librería de SQLite, es necesario tener habilitada la librería PDO.

Finalmente las extensiones cargadas en el php.ini para poder usar la extensión de SQLite debe de ser:

   extension=php_sqlite.dll
   extension=php_pdo.dll

Es algo que me ha sorprendido y me he visto en la necesidad de escribir sobre esto, ya que es la primera vez que me encuentro que una extensión de PHP compilada en C requiere de otra extensión.

Desde C# podemos hacer fácilmente un formulario transparente o semitransparente. Un formulario de WindowsForms que están dentro del nombre de espacio System.Windows.Forms (lo que viene siendo el típico formulario) tiene una propiedad de tipo doble que se llama Opacity. Con esta propiedad, podemos indicar un valor entre 0 y 100, el valor 0 indica completamente transparente y 100 indica que es opaco (como son los formularios por defecto).

Este efecto puede ser útil para realizar efectos visuales que hagan mas agradable el uso de nuestra aplicación, como por ejemplo mostrar mensajes de alerta con un toque de transparencia con por ejemplo entre 90% y 95% de transparencia o por ejemplo capturar el evento cuando se mueve un formulario y efectuar una transparencia mientras este se encuentre en movimiento.

No hace mucho descubrí JOGL, es una librería de Java para poder acceder directamente a , gracias a los plugins de NetBeans. Con JOGL podemos crear desde juegos tridimensionales, en 3D, hasta aplicaciones con una mayor funcionalidad y mayor vistosidad en cuanto a gráficos se refiere.OpenGL

JOGL es una libreria que utiliza el JNI de Java para acceder a las funcionalides de C, por lo que el acceso a las funciones implementadas de OpenGL en JOGL, son realmente rápidas. Además de ofrecer todas las funciones de OpenGL, tiene una perfecta implementación con las librerías gráficas de Java AWT y Swing, por lo que podemos llegar a embeber OpenGL no solo dentro de la ventana, sino en controles, como por ejemplo crear efectos tridimensionales en botones.

Desde la página de plugins para NetBeans, podremos instalar el plugin de JOGL para NetBeans que nos ofrece ademas de una plantilla de aplicaciones JOGL, multitud de ejemplos para poder empezar a desarrollar. El sistema para instalar el plugin es descargar dicho plugin desde la página de NetBeans y luego en paquetes disponibles dentro de la sección de actualizaciónes (plugins) de NetBeans, encontramos una nueva categoría de JOGL desde la que podemos instalar todo lo que necesitamos. Si queremos instalar las librerías de JOGL independientemente de NetBeans o queremos ver algunos ejemplos o descargas como el JavaDoc de JOGL, que viene muy bien, podemos buscarlo en la página oficial del proyecto JOGL.

A partir de aquí, ya podemos empezar a realizar nuestras primeras pruebas y el resto ya depende de nosotros. Yo personalmente, tengo un libro de OpenGL para C y puedo decir que el 95% de las sentencias que aparecen en dicho libro, pueden implementarse sin dificultad en JOGL.

Como hace poco he reinstalado todo el sistema operativo y he sustituido mi Ubuntu 7.10 por PCLinuxOS que me va mucho mejor, estoy todavía instalando aplicaciones. Ya instalé como escribi en una entrada anterior juntando Eclipse con Aptana, pero ahora le toca el turno a NetBeans que me gusta más como editor de Java y como no, para probar los nuevos juguetes que tiene como el plugin de OpenGL de NetBeans 6 que promete mucho.

El caso es que cuando me bajo el instalador y lo ejecuto, sorprendentemente la ventana del instalador esta vacia. Todo esta en blanco, sin nada. Me daba algunos errores de ClearLook, pero el problema no era ese. Buscando y probando muchas cosas al final doy con la clave. El problema es que tengo Beryl corriendo (al parecer tambien ocurre con Compiz-Fusion) y parece ser que he ahí el problema, ya que tenemos que declarar la siguiente variable en el sistema:

AWT_TOOLKIT="MToolkit"

Esto lo haremos añadiendo la linea anterior en el archivo /etc/environment. Con esto ya podemos instalar NetBeans 6 Beta 2 con normalidad y usarla.

Hace ya algunos años que me dedico a la programación en exclusiva de PHP en entornos web, pero a pesar de tratarse de entornos web, no son páginas web, sino webservices, donde la presentación gráfica esta de sobra porque todo se transmite por XML. Durante este tiempo he pasado por diferentes IDE's de programación, terminando en el Zend Studio 5.2 y 5.5, ya que para entornos de desarrollo complejos donde el numero de clases, interfaces, variables, etc. es enorme y se mueven multitud de datos, es el mejor con diferencia.

Es cierto que el Zend Studio es maravilloso si lo comparamos con el resto de IDE's de PHP que hay en el mercado, sobre todo y algo que los demás no tienen es el reconocimiento de las clases que nosotros mismos desarrollamos y su documentación al estilo PHPDoc. Hace algunos meses, redescubrí el plugin PDT de Eclipse, que había dejado de estar verde, para tener un autocompletado del código casi equiparable con el del propio Zend Studio, pero con la gran ventaja de ser mas ligero a pesar de que Eclipse consume más memoria  RAM.

Hace un par de días, vi por primera vez Aptana, un IDE basado en Eclipse que incorpora interesantes funcionalidades como una mejor cobertura del autocompletado de código en cuanto a HTML y CSS se refiere y algo que me ha maravillado, un autocompletado y reconocimiento de clases y funciones de Javascript. Esto me ha maravillado porque para desarrollar una web gráfica, es lo mejorcito que he visto.

Lo que había pensado y efectivamente se puede hacer, es que si PDT es un plugin de Eclipse y Aptana es otro plugin de Eclipse, quizás se pudieran mezclar creando un conjunto realmente bueno por no decir el mejor para el desarrollo web.  Lo más curioso, es que analizando un poco las funcionalidades de Aptana, me he dado cuenta o eso me ha parecido, que la parte de PHP usa el plugin PDT (al menos es igualito) pero de una versión vieja, que por mi experiencia creo que se trata de la 0.7. Así que aventurandome a mezclar los dos plugins y cruzando los dedos para que los apartados de PHP no se den de ostias, los instale.

El resultado de mi experimento es un Eclipse con el plugin de PDT y Aptana instalados a la perfección, si creo un nuevo proyecto de PHP con la vista de PHP (PDT) utiliza todo el entorno de PDT para las páginas PHP y el sitema de Aptana para todas las paginas de Javascript, HTML, CSS, etc. por lo que podemos tener el que sería para un profesional, el mejor IDE de desarrollo para PHP, HTML, CSS y Javascript que podemos encontrar, completamente gratuito y multiplataforma.

Llevo ya bastante tiempo utilizando PHP-GTK 2 para hacer alguna que otra aplicación. En Windows me va de maravilla, ya que tienes Gnope que es autoinstalable y es de agradecer porque las primeras versiones de PHP-GTK 1 para mi eran un infierno. Otra alternativa son las últimas versiones compiladas de PHP-GTK para Windows, ya que es copiar y pegar, no hay que hacer nada para hacerlas correr.

Al dar el paso de Linux me encontre con un problema, y es que por mas que buscara, no había o no encontraba ningún paquete instalable de PHP-GTK. Buscando por internet veia como todo el mundo que lo utilizaba simpelemente hacia un:

  ./configure
  make
  make install

Al intentarlo yo, ingenuo de mi por ver la facilidad con que lo hacia el resto de la gente, lo intente, y lo único que consegui fue una consola llena de errores por todos lados.

Como me paso al compilar Wine, pense que podría ser que necesitara los sources de las diferentes librerias que quería instalar. Fui en busca de Synaptic e instale los paquetes dev de Gtk, SourceView, Mozilla Firefox, GtkHtml, GtkExtra, GtkExtra y LibSexy.

Una vez tengamos instalados todos estos paquetes dev (para el desarrollo), procedi a un configure completo, copilarlo e instalarlo.

  ./configure --enable-php-gtk --with-extra --with-html
     --with-libsexy --with-mozembed --with-sourceview
     --with-spell
  make
  make install

Aparte de esto, me aventure a crear mi primer paquete .deb que he hecho nunca, que a pesar de ser muy chapucero, al menos instala php-gtk en el sistema y funciona perfectamente, salvo por unas modificaciones de configuración que debemos de realizar a manita. Por si alguien se quiere ahorrar compilarlo, se puede descargar el paquete .deb de php-gtk 2.

Para finalizar la instalación deberemos de activar el modulo en el php.ini. En mi instalación de PHP, no hay un php.ini global, sino que hay uno pequeño y muchos, uno por cada extensión. Yo lo he creado donde las extensiones, creando un nuevo archivo que he llamado gtk.ini, pero podeis ponerlo en el php.ini principal. Lo unico que deberemos de hacer es añadir la linea:

  extension=php_gtk2.so

A continuación os detallo las librerias que se pueden encontrar con la instalación de PHP-GTK.

  • Gtk: todos los componentes básicos de Gtk, tales como GtkWindow por ejemplo, por decirlo de alguna manera, es lo básico para crear cualquier aplicación.
  • LibSexy: no lo he probado y me baso solo en la teoría que he visto por la web. Se trata de clases especiales para poner iconos en los GtkEntry, corrección ortografica, etc. (las pijerias).
  • GtkHtml: es un motor de renderización de HTML. El HTML lo pinta bien, pero los enlaces no funcionan, supongo que habrá que programar todos los posibles eventos que puedan surgir.
  • GtkExtra: tampoco lo he podido probar, pero supuestamente da Widget extra como los GtkSheet al estilo excel o algunos de diseño lineal que creo que no estan incluidos en PHP-GTK.
  • MozEmbed: se supone que es el motor de renderizado de HTML de Gecko (el de Mozilla Firefox), pero no he conseguido hacerlo funcionar ya que me da un error en el nucleo de GTK, que creo que es debido a que necesita unas cuantas librerias que utiliza el propio Firefox para que funcione.
  • SourceView: es una parte bastante interesante de Gtk, ya que se trata de un Widget que hereda directamente de GtkTextView pero que provee de un coloreado de sintaxis para multitud de lenguajes de programación, incluidos por supuesto PHP, C#, C, Java, Ruby, Xml, etc. Tambien provee de algunas mejoras al GtkTextView como una regla para marcar el número de linea o algunos eventos como el coloreado de la llave enlazada por ejemplo cuando es una función o clase. Este modulo funciona a la perfección.
  • GtkSpell: un corrector ortografico que subralla de una linea roja las palabras mal escritas. Lo he probado y funciona a la perfección, supongo que tendra soporte de lenguajes.

Si alguien quiere ver algo más de información sobre el tema, que le eche un vistazo a la página del proyecto PHP-GTK.

Algo que me gusta de PHP es su control de errores, ya que a pesar de no tener un tipo de error común, sino que tenemos que luchar contra errores y excepciones, dispone de dos funciones para controlaras como set_error_handler y set_exception_handler.

Cuando desarrollo aplicaciones en C# echaba de menos estos algún método similar para capturar excepciones, probé varias cosas lógicas, entre ellas antes de hacer nuestro Application.Run, englobarlo todo dentro de un try y catch al siguiente estilo:

try {
  Application.Run(new Formulario());
} catch {
  Application.Run(new Formulario());
}

Esto controlaba cualquier excepción, pero me cerraba la aplicación, una opción era volver a hacer un Application.run en el catch. Si fuera una calculadora hubiera valido, pero cuando se trata de una aplicación grande, no es una solución. Tampoco podemos dejarla al aire, puesto que cuando se lance una excepción, se cerrará la aplicación.

Buscando, buscando, encontré un evento llamado Application.ThreadException, que controlara todas aquellas excepciones que se produzcan dentro de Application.Run. Controlando este evento, no tendremos que catchear todo nuestro código, sino que definiremos una ventanita que recogerá la excepción y avisara al usuario de que se ha producido un error. Dentro de esta ventana, dependiendo de cuanto queramos trabajárnosla, podremos dar opción al usuario para enviar la traza de la excepción para que el equipo de desarrolladores, pueda reparar el error para futuras versiones o actualizaciones y así poco a poco, generar una aplicación grande desde el principio y robusta poco a poco si se van controlando aquellos errores que no son los más comunes.

A continuación os dejo el código de como controlar cualquier excepción desde el principio.

using System
using System.Windows.Forms;
using System.Threading;namespace myespacio {
 
  internal sealed class MiPrograma {
 
    [STAThread]
    private static void Main(string[] args) {
      Application.ThreadException +=
      new ThreadExceptionEventHandler
        (MiPrograma.excepcion);
 
      Application.Run(new Formulario());
    }
 
    public static void excepcion(object sender,
          ThreadExceptionEventArgs excepcion) {
      MessageBox.Show("Se ha producido un error");
    }
  }
}

Por esas casualidades de la vida y probando un sistema de funcionamiento en una aplicación de Java a partir de la hora del servidor, hicimos pruebas cambiando la hora del sistema para probar que todo funcionaba correctamente. Mientras modificábamos la hora del sistema para comprobar el buen funcionamiento, encontrábamos algún que otro bug, que corregíamos recompilando sobre la marcha.

Después de 30 minutos de constantes pruebas, y cuando nos disponíamos a realizar la compilación definitiva para realizar un pequeño parche en el sistema nos encontramos con un problema, ¡No podemos compilar! Tenemos un problema, Java nos dice al intentar compilar que tenemos una versión más reciente ya compilada. Con las prisas y las pruebas y arreglos sobre la marcha, compilamos sin querer en el año 2008 y claro, ahora en el año 2007, Java no nos permite compilar ya que una compilación posterior ya se encuentra en el sistema.

La solución aunque un poco drástica, se nos ocurrió en cuanto se nos paso la cara de tontos, ya que realizamos un backup y borramos todas las clases compiladas para volver a generarlas.

Es un poco curioso que Java no nos permita compilar, o mejor dicho, recompilar una clase que ya se compilo en el futuro. Si alguien os dice que sois vosotros mismos que viene del futuro para daros una versión superior de alguna clase vuestra, no se la toméis, porque no os dejara compilarla.