Para aquellos programadores que llegan a .Net de la mano de PHP o Java, verán algo diferente el hecho de heredar métodos de clases. Cuando heredamos una clase en Java o PHP los métodos se sobrescriben redeclarándolos en la clase hija y cuando queremos evitar que una clase hija implemente un método, lo establecemos con la palabra reservada final.

Por ejemplo PHP se utilizaría para evitar la herencia:

public final function miMetodoNoHeredable() {
   //Codigo del metodo
}

En el caso de java es muy similar:

public final void miMetodoNoHeredable() {
   //Codigo del metodo
}

Pero en .Net aunque la base sigue siendo la misma es algo diferente. Para heredar un método, debemos de declarar el método como virtual y para declarar un método como final, usaremos la sentencia sealed (NotOverridable en VB). Para hacer un símil podríamos decir que la palabra reservada final de Java o PHP equivale en cierta medida a la sealed (NotOverridable en VB) de .Net.

Hay que apuntar que por defecto los métodos declarados en .Net son sealed, así que para heredarlos deberemos de declararlos como virtual e indicar a sus hijos que los métodos son override para que sobrescriban los valores del padre.

El caso de .net

// Ejemplo de C#
public sealed void miMetodoNoHeredable() {
   //Codigo del metodo
}
'Ejemplo de Visual Basic .Net o VB.Net
Public NotOverridable Sub miMetodoNoHeredable()
   'Codigo del metodo
End Sub

Esta a punto de llegar una gran noticia para los programadores de PHP. La versión actual de desarrollo y que saldrá oficialmente en breve, ademas de otras muchas mejoras, incorpora el tan ansiado espacio de nombres (namespace) que permite definir varios espacios donde puede existir una misma clase del mismo nombre en lugares diferentes, ademas de estructurar mucho más y mejor el código.

Con el desarrollo de los namespaces, PHP da un gran salto hacia lenguajes de programación mas complejos y de mayor calidad. Salvo algunos detalles, a partir de la versión 5.3 de PHP, ya casi se puede equiparar a este con .Net o Java en cuanto a sintaxis y funcionalidad, aunque aún le queda mucho por desarrollar.

Para usar los namespaces es tan sencillo como declarar el namespace y dentro de este declarar todas las clases o funciones

  namespace NombreDeEspacio;  Class Ejemplo {
 
    public function metodoDePrueba() {
 
  }

Y para importarlo tan sencillo como

  use NombreDeEspacio;

Espero poder decir al igual que ahora con los namespaces, que pronto habrá una solución real para crear hilos (Thread) con PHP.

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.

Hace algún tiempo cambié mi viejo movil por un Nokia n70. Este venía con un cable de USB y un software para sincronizarlo con el ordenador de Nokia, el Nokia PC Suite. Salvo algunos problemas menores con Windows, todo me ha ido de maravilla, pero en Linux viene el problema porque no sabía como hacerlo funcionar.

La primera y equivocada opción que pense para conectar mi n70 a mi Ubuntu fue por el Gnome Pilot, pero como ya he dicho, fue equivocada porque lo único que conseguí fue perder el tiempo. Después de investigar durante algún tiempo me topé con el protocolo OBEX que es el usado la comunicación por los moviles y algunas PDA's idependientes del medio de comunicación, lo que quiere decir que da igual si nos conectamos por USB, BlueTooth o IrDA (infrarrojos).

Gracias al Obex, encontré dos aplicaciones que vienen de perlas para conectar por USB al Nokia n70 en Linux y mas concretamente en mi caso en Ubuntu. La aplicación en cuestión es obexftp y obextool, ambos paquetes descargables desde los repositorios de Ubuntu por apt-get o Synaptic.

El primer paso en bajar los paquetes antes mencionados obexftp y obextool. Una vez nos hallamos bajado los paquetes vamos a buscar nuestro movil. En este caso, el mio es un Nokia n70, por lo que lo conecto por USB al ordenador y ejecuto la siguiente sentencia desde consola:

  sudo obexftp -u

Esta sentencia, que ha de ser ejecutada como root, por eso el sudo, nos encontrará en que interface se encuentra el dispositivo movil,

  Interface 0:

      Manufacturer: Nokia

      Product: Nokia N70

      Interface description: SYNCML-SYNC

  Interface 1:

      Manufacturer: Nokia

      Product: Nokia N70

      Interface description: PC Suite Services

Encontramos 2 interfaces, la 0 y la 1. En la 0, es como bien refleja la descripción para SYNC o sincronización, es decir, para intercambiar, contactos, tareas, etc. y la 1, que es la que nos interesa, es la de archivos.

Ya que tenemos reconocido el teléfono y sabemos donde esta, solo tenemos que ejecutar en la linea de comandos:

  sudo obexftp -u 1 -l

De esta forma, para realizar el ejemplo, nos mostrara en formato XML el listado de directorios que hay en el teléfono. Para más información sobre como poder conectar con el teléfono desde la consola, podemos ejecutar cualquiera de los 2 comandos siguiente:

  obexftp --help

  man obexftp

Una vez que ya podemos entrar en el dispositivo movil, vamos a ejecutar una sencilla herramienta gráfica para copiar archivos y explorar directorios. Si instalamos el paquete obextool, podremos ejecutar el siguiente comando en consola:

  sudo obextool --obexcmd "obexftp -u 1"

Desde esta herramienta, dispondremos de un sencillisimo explorador de archivos para poder conectarnos a nuestro telefono o cualquier dispositivo movil y subir o guardar archivos.

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.

Tras configurar Beryl en PCLinuxOS, se hecha en falta la tecla <Super> que, a pesar de haber configurado el idioma del sistema en español, no funciona, perdiendo algunas funcionalidades del propio Beryl. La solución es mas que sencilla, lo que debemos de hacer es ir al Centro de Control (Control Center) de KDE y en el arbol de secciones, buscar la que pone Regionalidad y Accesibilidad. Una vez dentro vamos a Disposición del teclado cambiamos el teclo en formato americano por el nuestro en español (Spain) y aplicamos los cambios. Tras realizar el cambio, ya podemos usar la tecla <Super> la del logotipo de Windows para usarla, que para algo esta en el teclado.