jueves, 29 de octubre de 2009

migración de netbeans.org

Netbeans.org cambiará de hosting y de todo sus contenidos y servicios.
Según lo planeado, esto van a migrar:

  • Sistema de seguimiento de errores. Usarán el Bugzilla (bien por ello!)
  • Proyectos y usuarios. Algunos proyectos van a tener que ser retirados porque son obsoletos. La lista completa está aquí:
  • Listas de correo: ya están trabajando con las subscripciones, moderadores y más.
  • Contenido de la web. Puf! la web en español sigue en menos de 95%. Espero que nos podamos dedicar en ello algún día. Aunque mencionan que ahora usarán subversion para actualizar el contenido, y no los .html estáticos.
  • Archivos y descargas.
  • Wiki: Conversion de JSPWiki a MediaWiki. El MediaWiki es el usado por wikipedia.org.
Es muy probable que también ofrezcan el servicio de mensajería instantánea.

Más información aquí: http://wiki.netbeans.org/NewNBOrg

miércoles, 28 de octubre de 2009

Plugins curiosos para NetBeans 6.8

Considero que la capacidad de un software también se mide por la de sus complementos.

Aún no sale la versión oficial de NB 6.8 (en este momento está en versión Beta) y he podido ver algunos plugins que me llaman la atención.

Para este post, estoy utilizando la versión construida el 28/10/2009 (o sea, el día que escribo este post).

Los plugins (en orden alfabético, y no por preferencia) que considero interesantes hoy, son los siguientes:

  1. Entity Relationship Diagrama Support
  2. Explore from here
  3. Graphical Class View
  4. Java Go to implementation
  5. Run Terminal
  6. User tasks

 

Comencemos...

Previa instalación de los plugins desde Tools > plugins, y previa lectura de la licencia (la que nadie lee ninguno leemos), y después del reinicio del IDE, nos pondremos  probar cada uno de estos plugins, y ver si son buenos o no. Ya ustedes hacen su veredicto.

1. Entity Relationship Diagrama Support
Tenemos una base de datos, con relaciones, contraints, foreing keys y demás cosas propias de una base de datos. Le podriamos pedir al DBA que nos dé su diagrama de entidad-relación, pues para saber qué vamos a trabajar. O quizás se hizo la base de datos usando la capacidad mental de un DBA: de memoria. (Recomiendo usar mejor una diagrama ER antes de crear las tablas). Existen diagramadores de ER que hacen ingenieria inversa a una base de datos creada, por ejemplo el MySQL Workbench, y otros más para otros más. Este plugin de NB no hace ingeniera inversa (ya que no vamos a hacer un modelo editable) solo nos muestra cómo está la base de datos en este momento. Y esto es lo que haremos:

  1. Debemos tener una conexión desde NB a una base de datos en el panel Services (Ctrl+5). Naturalmente, el JDBC de una base de datos ya debe existir.
  2. También debemos tener un proyecto ya trabajando. Desde ahí, creamos un nuevo archivo (File > New File o Ctrl+N) y seleccionamos la categoría "Persistence" y el tipo de archivo "ER Diagram"













  3. Clic en "Next". Indicamos el nombre del archivo y la ubicación.









  4. Clic en Next. Seleccionamos la conexión de la base de datos que vamos a trabajar. Este debió de haberse creado previamente, como se mencionó en el paso 1.






  5. Clic en Finish. Encontraremos el archivo creado en el explorador del proyecto.






  6. Y al abrirlo, veremos la tablas de la base de datos y sus respectivas relaciones.






2. Explore here
¿El proyecto es tan grande que necesitamos concentrarnos en una carpeta o en un paquete?


Bueno, aquí está la solución. Clic derecho sobre la carpeta, seleccionar "Explore here"...


... y listo.


3. Graphical Class View
"Una imagen vale más que mil palabras" (dicho popular)
"Perdimos una imagen, consigan mil palabras" (Dr. House).
Tenemos asociaciones de clases, interacciones entre ellas, variables de tipo clase, etc.. y perdimos el rastro.

Clic derecho sobre una clase, y seleccionar "graphical view"


Y después de un instante, se verán las asociaciones



OJO: no es un diagrama de clases UML, es solo una representación de cómo interactúan con la clase seleccionada.

4. Java Go to implementation
Esta funcionalidad la vi en Eclipse, y recién vi un plugin de NB en la versión 6.7.
Tenemos una interfaz o una clase abstracta con métodos abstractos. Queremos saber y ver las clases que lo implementan. Clic derecho sobre el método que el método abstracto. Seleccionar Navigate > Go to implementation


Se mostrará los métodos que lo implementan.


Seleccionamos uno y el NB nos mostrará la implementación.


5. Run Terminal
Para mi es muy útil: Quiero entrar desde la consola del sistema operativo al contenido de una carpeta o paquete. Tendría que abrir una ventana del consola del sistema operativo, y luego hacer cd hasta llegar al directorio. Con este plugin es más fácil. Solo hacemos clic derecho sobre la carpeta que queremos acceder en la consola, y seleccionamos Tools > Run Terminal.

Y listo.





6. User tasks
 Si no tenemos una lista de lo que tenemos que hacer, no sabremos qué vamos hacer. Es mejor tener una lista de tareas.. y además saber cuánto demoramos en resolver una tarea... y cuánto no hacemos nada.
Este plugin lo vi desde la version 6.1. Es muy útil. Permite al desarrollador listar todas las tareas que tiene que hacer, y también permite definir subtareas. Todas estas pueden estar asociadas a una línea de código especial.
Podemos acceder a él, desde Window > Other > User tasks.


Es un panel inferior al editor. Ahí demos declarar nuestras tareas. Y cuando queremos hacer seguimiento a nuestro trabajo, presionamos en el botón verde (o clic derecho y seleccinamos Start). El plugin detectará cuanto tiempo estamos trabajando en el IDE. Y cuando seleccionamos "Pause", no registrará el tiempo. Se supondrá que hemos detenido nuestro trabajo. Luego, podemos indicar cuánto del trabajo hemos avanzado. Cuando esté el 100% de la tarea, el plugin nos dirá cuánto tiempo realmente nos hemos dedicado a esta tarea.
Así que con esto podemos asegurar a nuestro jefe que hemos trabajo....  o nos puede condenar.

Hay muchos más plugins, que ya no me dió tiempo de postearlo. Así que después seguiré continuando con este tipo de artículo.

miércoles, 7 de octubre de 2009

Symfony en NetBeans 6.8

 Ya sé que este blog se llama "Apuntes de Java", pero el objetivo es también dar apuntes sobre NetBeans (ya que también fue hecho en Java... y apoyo al proyecto)
Así que este post está referido al framework para PHP Symfony. Espero que les agrade

Symfony en NetBeans 6.8

(También se encuentra en la documentación de NetBeans: http://wiki.netbeans.org/NB68symfony_es)

Symfony es uno de los mejores frameworks para PHP que permite desarrollar aplicaciones web basado en MVC. Ayuda enormemente en la construcción de aplicaciones web complejas en PHP.
Aunque Symfony fue ideado para trabajar desde la línea de comandos, NetBeans 6.8 lo incluye dentro sus complementos a fin de ayudar al desarrollador en la elaboración de aplicaciones complejas.

Instalación del componente Symfony

La instalación es bastante simple. Se puede descargar desde el centro de actualización (Herramientas > Complementos). Debemos tener instalado el complemento para PHP. Si no lo tenemos instalado, este es el mejor momento para hacerlo.



... y si es la primera vez que instala el PHP, es probable que le pida la instalación del JavaScript Debugger






Lo dejamos que cocine, y cuando termine nos preguntará que si deseamos reiniciar el IDE. Y eso haremos: reiniciar el IDE.

Instalando Symfony

Ahora bien, lo que hemos instalado solo fue el complemento de NB para Symfony. Lo que debemos es instalar el mismo framework. Para ello debemos hacer lo siguiente
  1. Descargar symfony desde aquí http://www.symfony-project.org/installation/1_2
  2. Aunque existan las instrucciones de instalación que explica Symfony nosotros seguiremos nuestro propio rumbo. Extraeremos el contenido del .zip en c:\ de tal manera que se haya creado una carpeta llamada c:
    symfony-1.2.9
    . Cuando digo "contenido" me refiero a no usar la opción "descomprimir en symfony-1.2.9..." que consiste en crear una carpeta con el mismo nombre del .zip y dentro descomprimir el contenido del .zip. En su lugar, usar "descromprimir aquí..." (desde c:\).
Listo, eso es todo referente al Symfony.
Si ya has tenido instalado el Symfony en otro lado, no importa, igual sirve. Lo importante es recordar donde está.

Configurando el componente Symfony

Ahora, en el NetBeans entremos a Herramientas > Opciones y seleccionemos la opción "PHP". Luego, abrimos la ficha "Symfony". Lo que debemos hacer aquí es seleccionar el script principal de Symfony.




Notemos que es el archivo que no tiene extensión. Realmente (si lo abrimos desde un editor de texto) es un archivo .php, solo que no tiene extensión.

Creando un proyecto

Ahora, crearemos un nuevo proyecto PHP usando el Symfony. Presionemos Mayus+Ctrl+N (Archivo > Nuevo proyecto)


Clic en Siguiente. Establecemos el nombre del proyecto. Para nuestro ejemplo será MiApp






Dejamos las demás opciones por omisión. Clic en Siguiente
Establecemos la ruta que se mostrará en el navegador cuando ejecutemos la aplicación.


Clic en Siguiente.
Ahora, seleccionamos el framework "Symfony"




Notemos que está pidiendo una clave especial, por fines de seguridad para evitar ataques CSRF con tokens en formularios. Para fines de este tutorial, usaremos la misma clave propuesta: UniqueSecret.
Clic en finish
Dejemos que cocine nuevamente, y listo. Ya tenemos nuestro proyecto.

Preparando el proyecto

Configurando el Apache

Esta aplicación debe ejecutarse en el Apache Web Server que deberiamos tenerlo instalado. Lo que recomienda Symfony es ejecutar la aplicación de desarrollo en otro host. Este host será local y virtual, de tal manera que se ejecute bajo otro nombre de host y en otro puerto. En nuestro caso lo ejecutaremos en el puerto 9090 En el margen izquierdo de nuestro proyecto, abramos el archivo config/vhost.sample el cual tendrá un código similar a este:
# Be sure to only have this line once in your configuration
    NameVirtualHost 127.0.0.1:80

    # This is the configuration for MiApp
    Listen 127.0.0.1:80

    
      ServerName MiApp.localhost
      DocumentRoot "D:\home\DSILVA\Mis documentos\NetBeansProjects\MiApp\web"
      DirectoryIndex index.php
      
        AllowOverride All
        Allow from All
      

      Alias /sf "C:\symfony-1.2.9\data\web\sf"
      
        AllowOverride All
        Allow from All
      
    
Pues, lo que haremos primero será editar este archivo para que ejecute se ejecute en el archivo 9090, de la siguiente manera:
# Be sure to only have this line once in your configuration
    NameVirtualHost 127.0.0.1:9090

    # This is the configuration for MiApp
    Listen 127.0.0.1:9090

    
      ServerName MiApp.localhost
      DocumentRoot "D:\home\DSILVA\Mis documentos\NetBeansProjects\MiApp\web"
      DirectoryIndex index.php
      
        AllowOverride All
        Allow from All
      

      Alias /sf "C:\symfony-1.2.9\data\web\sf"
      
        AllowOverride All
        Allow from All
      
    
Las rutas de la carpeta del proyecto ya han sido establecidas por el Symfony. Ahora,
  1. copiemos este contenido,
  2. abramos el archivo httpd.conf que se encuentra en el directorio $APACHE_HOME\conf,
  3. pegamos,
  4. lo guardamos,
  5. y reiniciamos el servicio de Apache.
Para ver si se ha configurado correctamente el Apache, abramos el navegador en http://localhost:9090, o ejecutemos el proyecto con la tecla F6.


Configurando la base de datos

Ahora, nos toca crear la base de datos. Desde una consola de MySQL (puede ser útil el de la línea de comandos, o el más sofisticados que uses) ejecutemos (como root) lo siguiente:
create database tienda_virtual; #crea la base de datos
grant all on tienda_virtual.* to tienda_virtual@localhost identified by "tienda_virtual"; #crea un usuario con acceso a esa base de datos
Ejecutarlo desde el NetBeans también es más que suficiente.
Recomiendo que no se use el usuario root para acceder a una base de datos desde la aplicación. Por ello recomiendo crear un usuario por cada base de datos que se va a crear. Es por fines de seguridad.
A continuación, debemos establecer la configuración de nuestra aplicación con la base de datos. Para ello, hagamos clic derecho sobre el ícono del proyecto y seleccionemos Symfony > Run command...






Nos mostrará una consola especial para ejecutar los comandos de Symfony. En la entrada del filtro escribiremos "config" y se mostrarán los comandos asociados a configure. Seleccionamos de la lista a configure:database y escribimos como argumentos "mysql:host=localhost;dbname=tienda" tienda tienda




Luego, clic en "Run"
Podremos ver que se ha actualizado el archivo config/databases.yml

Creando las tablas

Las tablas se pueden crear desde el archivo config/schema.yml. Un archivo .yml es una serialización estándar y amigable para los lenguajes de programación. Tendremos dos tablas: tipo_producto y producto. Para ello, editaremos el archivo config/schema.yml con lo siguiente:
propel:
  tipo_producto:
    id_tipo: ~
    nombre_tipo: {type: varchar(255)}
  producto:
    id_producto: ~
    id_tipo: {type: integer,foreignTable: tipo_producto, foreignReference: id_tipo,required: true}
    nombre_producto: {type: varchar(255)}
    stock: {type: integer}
    precio: {type: double(10,5)}
Notar los espacios que hay entre cada declaración, tipo y el valor.
Ahora, haremos que el symfony cree las tablas. Para ello, desde la consola de symfony, buscamos filtramos los comandos propel:, seleccionamos propel:insert-sql






Con esto, creará el esquema para nuestra aplicación y también las tablas en nuestra base de datos






Si ya tienes una base de datos creadas, ignora la edición de config/schema.yml y ejecuta desde el symfony el comando propel:build-squema
Y para finalizar con la base de datos, debemos crear el modelo de datos, que consiste en un mapeo entre clases php con las tablas de nuestra base de datos. Para ello ejecutemos el comando propel:build-model
Después de ello, veremos el resultado en la carpeta lib






Vaya, hasta ahora no hemos escrito ni un archivo .php.

Ejecutando la aplicación

La aplicación no está del todo terminada. Faltan los estilos, colores, etc. Pero ya se puede ver algo. Antes de eso, debemos construir la aplicación. Para ello ejecutemos el comando propel:build-all. Con esto construye todo lo referente al esquema, hasta los formularios.




Luego, ejecutamos propel:generate-module con los parámetros como se ven en la imagen.




Y así tendremos el mantenimiento para la tabla "tipo_producto". Clic aquí para ver http://localhost:9090/frontend_dev.php/tipo










Finalmente

Como el fin de este tutorial no era un curso de Symfony, sugiero leer el manual práctico http://www.symfony-project.org/jobeet/1_2/Propel/es/ que en 24 dias (a razón de una hora cada día) uno puede hacer un proyecto funcional con Symfony.