Česky   |  Deutsch   |  English   |  Español   |  Français   |  Indonesia   |  日本語   |  한글   |  Polski   |  Português (BR)   |  Türkçe   |  中文   |  正體中文   |  Tu idioma  
PlanetNetbeans
Planet NetBeans es un rama de NetBeans relacionado con toda la Blogosphere.
Feeds
[RSS 1.0 Feed] [RSS 2.0 Feed]
[FOAF Subscriptions] [OPML Subscriptions]
¿Tienes un blog acerca de NetBeans? Agrega tu blog a PlanetNetBeans.
Feed Subscripciones

Powered by:    Planet

Última actualización:
May 24, 2013 08:01 AM
All times are UTC

Sponsored by
sponsored by Oracle

visit NetBeans website
AVBravo - March 22, 2013 03:09 PM
Desarrollo de Aplicaciones Web NetBeans(JSF,DataClassG, JSFGenerator) Parte 3


Desarrollo de Aplicaciones Web NetBeans(JSF,DataClassG, JSFGenerator) Parte 3

Generar las clases con DataClassG
DataClassG, gestionar todas las operaciones sobre la base de datos, generando las clases, y controladores necesarios para realizar C.R.U.D.
Descargar el plugin DataClassG desde



e instalarlo en NetBeans IDE, se mostrará el icono del plugin

Agregar la base de datos a Servicios  de NetBeans.
Creamos una base de datos llamada scrum en el motor MySQL
Desde NetBeans, Services->Drivers->MySQL(Connector/J driver)



dar Clic derecho y seleccionar Connecting using...

Se muestra la conexión a la base de datos


Seleccionar el proyecto y dar clic en el icono



Seleccionar el proyecto y la conexión

indicar  el alcance de los Beans, Controller, Persistencia.
Seleccionar si se usar  @Inject, y si se desea reemplazar la clase LoginBean.java





Se generar los paquetes

paquetes

  • anotaciones
  • beans
  • controller
  • data
  • generales
  • interfaces
  • menu
  • persistencia
  • services

AVBravo - March 18, 2013 05:11 PM
Desarrollo de Aplicaciones Web NetBeans(JSF,DataClassG, JSFGenerator) Parte 2

Desarrollo de Aplicaciones Web NetBeans(JSF,DataClassG, JSFGenerator) Parte 2
Se mostrara como configurar el proyecto Web con NetBeans
Ahora seleccionamos Dependencias


clic derecho y seleccionar Agregar dependencias



escribimos mysql y seleccionamos mysql:mysql-connector-java y buscamos la versión a utilizar
se agrega la dependencia



ahora agregamos los temas de primefaces. primefaces all-themes


Dependencias






Otras dependencias para Exportar a pdf desde primefaces
itext  2.1.7


apache poi 3.8



commons-fileupload 




Dependencias agregadas


Editar el archivo pom.xml



Ajustamos las dependencias de maven
<dependency>
           <groupId>org.primefaces</groupId>
           <artifactId>primefaces</artifactId>
           <version>3.4</version>
       </dependency>

por la versión 3.5
<dependency>
           <groupId>org.primefaces</groupId>
           <artifactId>primefaces</artifactId>
           <version>3.4</version>
       </dependency>


Dar clic en el nombre del proyecto, y seleccionar Build


Se descarga el jar primefaces-3.5.jar


commons-io



commons-fileupload




Listado de dependencias



AVBravo - March 16, 2013 03:45 PM
Desarrollo de Aplicaciones Web NetBeans(JSF,DataClassG, JSFGenerator) Parte 1

Desarrollo de Aplicaciones Web NetBeans(JSF,DataClassG, JSFGenerator) Parte 1
Se mostrara la creación de un proyecto Web con NetBeans y establecer la configuración basica
Desde NetBeans creamos un proyecto nuevo en Categorias seleccionamos Maven y en Proyectos Web Application


indicar el nombre del proyecto


Seleccionar el Servidor GlassFish






Propiedades del proyecto


Project Properties: facilscrumjsf

Fuentes
Formato de fuentes/binarios: 1.7





Configuraciones , seleccionar configuración predeterminada y presione el botón Activar


Frameworks

Presionar el boton Add..
Seleccionar Java Server Faces



Framework agregado



y en componentes Primefaces


Se genera el esqueleto del proyecto







Héctor - March 08, 2013 06:13 AM
7 AÑOS

Bueno, el blog en febrero cumplió 7 años :headbang: :hat: :drunk: :wizard: ya no escribo con la regularidad de antes ya que mis actividades me han llevado por otros rumbos, por casualidad o accidente me fui involucrando con temas de educación y tecnologías de la información y tengo un blog que trata sobre eso, en ese tampoco soy taaan activo ya que aun me encuentro aprendiendo sobre la forma de integrar las TIC en el entorno educativo y no hablo de infraestructura, es integrarla a lo pedagógico, generación de conocimiento y esas cosas.

Y respecto al tema de TIC y educación, eventualmente escribo algunos artículos para serdigital.cl, hasta el momento van 4 y espero que pueda contribuir con mas.

En fin, ya 7 años escribiendo cosas que me parecen interesante, experiencias que a muchos les han sido de utilidad :cheers: a otros no tanto :down: y a otros les parece que lo que he publicado simplemente no aporta nada :nervous:

Continuaré escribiendo ya que me parece que no solo hay que consumir información, hay que ser generadores de ella y si a mi me es de utilidad existirá algún despistado al que le sirva lo que escribo en mis ratos de inspiración.

No me queda mas que agradecer a la comunidad de My.Opera, a los planetas: Linux, Netbeans y openSuSE que en gran medida aportan lectores a este blog

Héctor - March 08, 2013 06:13 AM
7 AÑOS

Bueno, el blog en febrero cumplió 7 años :headbang: :hat: :drunk: :wizard: ya no escribo con la regularidad de antes ya que mis actividades me han llevado por otros rumbos, por casualidad o accidente me fui involucrando con temas de educación y tecnologías de la información y tengo un blog que trata sobre eso, en ese tampoco soy taaan activo ya que aun me encuentro aprendiendo sobre la forma de integrar las TIC en el entorno educativo y no hablo de infraestructura, es integrarla a lo pedagógico, generación de conocimiento y esas cosas.

Y respecto al tema de TIC y educación, eventualmente escribo algunos artículos para serdigital.cl, hasta el momento van 4 y espero que pueda contribuir con mas.

En fin, ya 7 años escribiendo cosas que me parecen interesante, experiencias que a muchos les han sido de utilidad :cheers: a otros no tanto :down: y a otros les parece que lo que he publicado simplemente no aporta nada :nervous:

Continuaré escribiendo ya que me parece que no solo hay que consumir información, hay que ser generadores de ella y si a mi me es de utilidad existirá algún despistado al que le sirva lo que escribo en mis ratos de inspiración.

No me queda mas que agradecer a la comunidad de My.Opera, a los planetas: Linux, Netbeans y openSuSE que en gran medida aportan lectores a este blog

AVBravo - February 21, 2013 03:12 PM
NetBeans 7.3 Disponible

Ya esta disponible la versión de NetBeans 7.3
http://netbeans.org/kb/docs/ide/overview-screencast.html

AVBravo - January 28, 2013 08:31 PM
NetBeans IDE 7.3 Release Candidate 1

NetBeans IDE 7.3 Release Candidate 1, ya esta disponible para descarga

Es una buena oportunidad para probar lo que traera el IDE en la proxima versión.

AVBravo - January 27, 2013 06:11 PM
Crear un jar con dependencias en NetBeans con Maven

Fuente:
http://maven.apache.org/plugins/maven-assembly-plugin/usage.html


Creamos un proyecto Maven con NetBeans



Proyecto 

Listado las las dependencias que contiene este proyecto


Agregamos Dependencias maven-assembly-plugin
 seleccionar Add Dependency..

Agregar
maven-assembly-plugin



Editamos el archivo pom.xml, 
agregamos el plugin maven-assembly-plugin. especificamos la clase principal      <mainClass>org.javscaz.tallersoft.App</mainClass>

 <build>
        <plugins>
        <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.4</version>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
           <archive>
            <manifest>
              <mainClass>org.javscaz.tallersoft.App</mainClass>
            </manifest>
          </archive>
        </configuration>
        <executions>
          <execution>
            <id>make-assembly</id> <!-- this is used for inheritance merges -->
            <phase>package</phase> <!-- bind to the packaging phase -->
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
     
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
        </resources>
    </build>
 
En el proyecto seleccionar construir con dependencias

Se genera el jar que se agregara al repositorio Maven y el archivo jar que contendrá todas las dependenecias.
Archivo jar generado

en las propiedades del proyecto indicamos el numero de versión

Solo necesitamos copiar a la carpeta el archivo .jar ya que contiene todas las dependencias








AVBravo - January 26, 2013 02:09 AM
Incluir archivos properties en proyectos maven

Para incluir los archivos properties en el archivo .jar, generado agregamos al archivo pom.xml
<build>
<resources>
<resource>
      <directory>src/main/java</directory>
      <excludes><exclude>**/*.java</exclude></excludes>
    </resource>
 </resources>
</build>

AVBravo - January 23, 2013 03:17 AM
Corregir el error el archivo de manifiesto en proyectos maven

Corregir el error en el archivo de manifiesto en proyectos maven
Si creamos un proyecto maven con NetBeans e intentamos ejecutarlo encontraríamos el siguiente error


Agregamos el plugin   <artifactId>maven-jar-plugin</artifactId>


 <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.4</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>org.javscaz.maven1.App</mainClass>
                        </manifest>                      
                    </archive>
                </configuration>
            </plugin>



Luego al construir el proyecto con dependencias, podemos ejecutar el .jar





AVBravo - January 23, 2013 02:34 AM
Empaquetar dependencias de maven

Cuando desarrollamos un proyecto Maven, se generara el archivo .jar o .war segun el tipo de proyectos


archivo generado, en la carpeta target


Para distribuir este archivo necesitamos agregar las dependencias. para esto utilizamos el plugin

Editamos el archivo pom.xml

Copiamos en la seccion <build> </build>
  <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>target/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>


Construimos el proyecto con dependencias

Se genera la carpeta lib donde se copiaran las dependencias.





















AVBravo - January 12, 2013 11:14 PM
JavscazGChat v2.0.0

Esta disponible la versión 2.0.0 de javscazGChat , el plugin que permite establecer comunicación por chat para los usuarios de gmail desde NetBeans.
Este versión corrige el problema al limpiar los mensajes , agrega el avatar del usuario cerca del mensaje para identificar rápidamente el usuario actual.
Se valida si el usuario esta conectado o no para enviarle mensajes.
Se puede descargar desde
http://plugins.netbeans.org/plugin/39307/?show=true




Listado de contactos

Ventana de chat






Héctor - December 18, 2012 11:34 PM
DESARROLLO WEB

Desde hace como año y medio he estado trabajando por mi cuenta como freelance y la verdad creo que no me va mal, he aprendido mucho sobre procesos de negocio y de cosas que no enseñan en la uni, creo que es lo que mas he disfrutado y del lado de la tecnología los proyectos que he desarrollado se enfocaron al desarrollo web.

El desarrollo con PHP no era algo que me llamaba la atención, pero desde que hice mis prácticas en el INAOE me gusto lo "practico" que es, si se lleva un buen control de lo que se hace ;) y si se cuenta con un control de versiones.

A lo largo de este año y medio ya puedo decir cuales herramientas me facilitan el desarrollo y en especial el diseño, creo que desde antes de salir de la uni siempre dije que nos debieron dar clases de diseño, teoría del color o algo que nos permita desarrollar esa apreciación del diseño que no todos tenemos, las herramientas que uso son:



Lo malo es que Muse y Expression Web no se pueden usar en Linux, pero con el control de versiones no importa el SO o equipo en el que desarrolle, el hecho de usar java.net es que se integra muy bien a Netbeans y con Komodo IDE y los dos son multiplaforma así que no tengo problemas.

Sería interesante saber que herramientas usan para proyectos de desarrollo web.

Héctor - December 18, 2012 11:34 PM
DESARROLLO WEB

Desde hace como año y medio he estado trabajando por mi cuenta como freelance y la verdad creo que no me va mal, he aprendido mucho sobre procesos de negocio y de cosas que no enseñan en la uni, creo que es lo que mas he disfrutado y del lado de la tecnología los proyectos que he desarrollado se enfocaron al desarrollo web.

El desarrollo con PHP no era algo que me llamaba la atención, pero desde que hice mis prácticas en el INAOE me gusto lo "practico" que es, si se lleva un buen control de lo que se hace ;) y si se cuenta con un control de versiones.

A lo largo de este año y medio ya puedo decir cuales herramientas me facilitan el desarrollo y en especial el diseño, creo que desde antes de salir de la uni siempre dije que nos debieron dar clases de diseño, teoría del color o algo que nos permita desarrollar esa apreciación del diseño que no todos tenemos, las herramientas que uso son:



Lo malo es que Muse y Expression Web no se pueden usar en Linux, pero con el control de versiones no importa el SO o equipo en el que desarrolle, el hecho de usar java.net es que se integra muy bien a Netbeans y con Komodo IDE y los dos son multiplaforma así que no tengo problemas.

Sería interesante saber que herramientas usan para proyectos de desarrollo web.

AVBravo - December 13, 2012 02:25 AM
Leer dbf desde Java

Cuando necesites leer bases de datos de Foxpro desde Java, mi amigo Diego Silva creo hace un tiempo una librería muy útil para comunicarnos con los archivos dbf
http://www.apuntesdejava.com/2007/09/dbf-2-java-library.html

Descargamos el archivo .jar  desde https://code.google.com/p/dbf2java-library/
Agregamos el jar al proyecto, y seguimos los siguientes pasos

 public static void main(String[] args) throws IOException {
       try {
           // TODO code application logic here
           DbfFile bfile;
      bfile = new DbfFile("/home/avbravo/empresas.dbf");
// abrir el archivo
           bfile.open();
          System.out.println(" contador " + bfile.getCount());
//recorrer los registros
           for (int i = 0; i < bfile.getCount(); i++) {
//colocar el cursor en el registro
               bfile.go(i);
               Map<String, String> map = bfile.scatter();
               Iterator it = map.keySet().iterator();

               while (it.hasNext()) {
                   // Get Clave
                   String clave = (String) it.next();
                   String valor = map.get(clave);
                   System.out.println(clave+ " --> "+valor);

                 

               }
           }
       } catch (FileNotFoundException ex) {
           Logger.getLogger(Foxpro.class.getName()).log(Level.SEVERE, null, ex);
       }

   }


AVBravo - October 04, 2012 12:23 AM
NetBeans 7.3 Beta

Ya esta disponible para descarga la versión 7.3 Beta de NetBeans
http://dlc.sun.com.edgesuite.net/netbeans/7.3/beta/


Algunas características puedes observarlas aquí



AVBravo - October 01, 2012 07:10 PM
JUnit con DataClassG

JUnit con DataClassG
0. ESQUEMA




Services:

Por cada beans crearemos una clase Services que se encargará de interactuar con el controller para realizar las operaciones de la base de datos.
Se crearan los métodos insert, update,delete y los demas metodos para realizar las diversas operaciones.

Test:
Se crearán las clases para test de las clases Services.

Form:
Los formularios para la interactuar con el usuario.
ProvinciasServices.java colocamos los métodos, insert, update,delete

public class ProvinciasServices {
   ProvinciasController provinciasController = new ProvinciasController();

   public ProvinciasServices() {
   }
   public Boolean insert(Provincias provincias){
       try{
           if(provinciasController.insert(provincias)){
             return true;
           }else{
               Mensajeria.MensajeWarning(provinciasController.getMensaje(), "insert()");
           }
        } catch (Exception ex) {
           Mensajeria.MensajeError(ex,"insert()");
       }
       return false;
   }
   
   public Boolean update(Provincias provincias){
       try{
           if(provinciasController.update(provincias)){
             return true;
           }else{
               Mensajeria.MensajeWarning(provinciasController.getMensaje(), "update()");
           }
        } catch (Exception ex) {
           Mensajeria.MensajeError(ex,"update()");
       }
       return false;
   }
   


   public Boolean delete(Provincias provincias){
       try{
           if(provinciasController.delete(provincias)){
             return true;
           }else{
               Mensajeria.MensajeWarning(provinciasController.getMensaje(), "delete()");
           }
        } catch (Exception ex) {
           Mensajeria.MensajeError(ex,"delete()");
       }
       return false;
   }
}

Ahora creamos el test a partir de la clase existente.
Antes de crear la clase en el paquete pruebas seleccionar JUnit Test, y en categorías Test for 
Existing Class



Seleccionamos la clase
Clase de test generada

Se generan los métodos con la palabra test al inicio

public class ProvinciasServicesTest extends TestCase {
      public ProvinciasServicesTest(String testName) {
       super(testName);
   }
   
   @Override
   protected void setUp() throws Exception {
       super.setUp();
   }
   
   @Override
   protected void tearDown() throws Exception {
       super.tearDown();
   }
   /**
    * Test of insert method, of class ProvinciasServices.
    */
   public void testInsert() {
       System.out.println("insert");
       Provincias provincias = null;
       ProvinciasServices instance = new ProvinciasServices();
       Boolean expResult = null;
       Boolean result = instance.insert(provincias);
       assertEquals(expResult, result);
       // TODO review the generated test code and remove the default call to fail.
       fail("The test case is a prototype.");
   }

   /**
    * Test of update method, of class ProvinciasServices.
    */
   public void testUpdate() {
       System.out.println("update");
       Provincias provincias = null;
       ProvinciasServices instance = new ProvinciasServices();
       Boolean expResult = null;
       Boolean result = instance.update(provincias);
       assertEquals(expResult, result);
       // TODO review the generated test code and remove the default call to fail.
       fail("The test case is a prototype.");
   }
   /**
    * Test of delete method, of class ProvinciasServices.
    */
   public void testDelete() {
       System.out.println("delete");
       Provincias provincias = null;
       ProvinciasServices instance = new ProvinciasServices();
       Boolean expResult = null;
       Boolean result = instance.delete(provincias);
       assertEquals(expResult, result);
       // TODO review the generated test code and remove the default call to fail.
       fail("The test case is a prototype.");
   }
}

Agregar debajo de la definición de la clase
   DataGManager dataGManager = new DataGManager();
       Connection OpenConnection = dataGManager.OpenConnection();
Esto es para utilizar DataGManager




Ahora comentados todos las instrucciones fail de todos los métodos
comentados

En el  método testInsert()
En la línea   Boolean expResult = null; indica el valor de retorno del método
esperamos que el método insert() devuelva true.asíi que colocamos el valor que esperamos que retorne el método si la operación fue exitosa
Boolean expResult = true;

public void testInsert() {
       System.out.println("insert");
       Provincias provincias = null;
       ProvinciasServices instance = new ProvinciasServices();
       Boolean expResult = null;
       Boolean result = instance.insert(provincias);
       assertEquals(expResult, result);
       // TODO review the generated test code and remove the default call to fail.
      // fail("The test case is a prototype.");
  }

Localizamos el objeto provincias
Provincias provincias = null;
usamos el operador new al objeto provincias
Provincias provincias = new Provincias();

y le asignamos valores al objeto que será pasado al método insert
provincias.setProvincia("Los Santos");
        provincias.setIdprovincia("7");

Quedaría de la siguiente manera
 public void testInsert() {
       System.out.println("insert");
       Provincias provincias = new Provincias();
        provincias.setProvincia("Los Santos");
        provincias.setIdprovincia("7");
       ProvinciasServices instance = new ProvinciasServices();
       Boolean expResult = true;
       Boolean result = instance.insert(provincias);
       assertEquals(expResult, result);
       // TODO review the generated test code and remove the default call to fail.
      // fail("The test case is a prototype.");
   }

Ajustamos los métodos update y delete.


Clase terminada

public class ProvinciasServicesTest extends TestCase {
   
   public ProvinciasServicesTest(String testName) {
       super(testName);
   }
   
   @Override
   protected void setUp() throws Exception {
       super.setUp();
   }
   
   @Override
   protected void tearDown() throws Exception {
       super.tearDown();
   }

   /**
    * Test of insert method, of class ProvinciasServices.
    */
   public void testInsert() {
       System.out.println("insert");
       Provincias provincias = new Provincias();
        provincias.setProvincia("Los Santos");
        provincias.setIdprovincia("7");
       ProvinciasServices instance = new ProvinciasServices();
       Boolean expResult = true;
       Boolean result = instance.insert(provincias);
       assertEquals(expResult, result);
       // TODO review the generated test code and remove the default call to fail.
      // fail("The test case is a prototype.");
   }

   /**
    * Test of update method, of class ProvinciasServices.
    */
   public void testUpdate() {
       System.out.println("update");
       Provincias provincias = new Provincias();
      provincias.setProvincia("Los Santos.");
        provincias.setIdprovincia("7");
       ProvinciasServices instance = new ProvinciasServices();
       Boolean expResult =true;
       Boolean result = instance.update(provincias);
       assertEquals(expResult, result);
       // TODO review the generated test code and remove the default call to fail.
      // fail("The test case is a prototype.");
   }

   /**
    * Test of delete method, of class ProvinciasServices.
    */
   public void testDelete() {
       System.out.println("delete");
       Provincias provincias = new Provincias();
        provincias.setIdprovincia("7");
       ProvinciasServices instance = new ProvinciasServices();
       Boolean expResult = true;
       Boolean result = instance.delete(provincias);
       assertEquals(expResult, result);
       // TODO review the generated test code and remove the default call to fail.
     //  fail("The test case is a prototype.");
   }
}


Ejecutamos el test




Podemos ver el resultado del test


No pasó el testInsert(), Indica que no se insertó, ya que había un registro con ese idprovincia en la tabla,testDelete no lo paso ya que el registro estaba relacionado u otra situación indicandonos que debemos revisar esos métodos.


Otra prueba del test, funciono el metodo testInsert, indicando que se inserto el registro, pero no lo puedo eliminar ni actualizar.

Si se ejecutan las pruebas nuevamente

si el test falla se enviaran mensajes de dialogo como este, esto puede ser un inconveniente si deseamos usar un sistema de integración continua.  Más adelante mostraremos la otra forma de hacerlo.


La ventaja de usar el Warning en el controller es que el invocar el services no tendríamos que generar estas advertencias en el método que realiza el llamado.
En la clase donde se invoca sólo usaríamos el siguiente código.


AVBravo - September 26, 2012 12:49 AM
DataClassG+JSF+Primefaces Dataexplorer

Creamos un proyecto Web Maven desde NetBeans
Agregar las depedencias itext, apache poi


En el codigo .xhtml
 <p:dataTable id="tblReservacion" var="var1" value="#{reservacionServices.reservados}" paginator="true"
                                     rows="35" 
                                     selection="#{talleresController.selectedTalleres}"  
                                     >
                            <p:column>

                                <f:facet name="header">
                                    <h:outputText value="#{mensajes.prioridad}" />
                                </f:facet>
                                <h:outputText value="#{var1.prioridad}" />
                            </p:column>

                            <p:column>
                                <f:facet name="header">
                                    <h:outputText value="#{mensajes.taller}" />
                                </f:facet>
                                <h:outputText value="#{var1.talleres.taller}" />
                            </p:column>
                           

                        </p:dataTable>
                        <f:facet name="footer">
                            <p:commandButton action="#{loginServices.logout}" value="Salir" ajax="false"/>
                            <h:commandLink>  
                                <p:graphicImage value="/resources/imagenes/botones/pdf.png" />  
                                <p:dataExporter type="pdf" target="tblReservacion" fileName="reservacion"/>  
                            </h:commandLink>  
                        </f:facet>
                    </p:panelGrid>


Podemos imprimir el contenido de la tabla

AVBravo - September 20, 2012 02:02 PM
Felicidades a Pack Publishing

En esta ocasión no escribo sobre Java o NetBeans, directamente , pero si lo hago para felicitar a nuestros amigos de Packt http://www.packtpub.com/ 
Quienes han publicado libros sobre IT de gran calidad, y se acercan a los 1000 títulos publicados prontamente.


Una gran colección de libros sobre Java
Sin duda una editorial que ha colaborado mucho con Open Source.






AVBravo - September 20, 2012 03:43 AM
JUnit con DataClassG

Para realizar los test de JUnit con DataClassG en  NetBeans, tenemos varias alternativas.
Tenemos el proyecto rigemapi que contiene los beans, generados


Ahora en el proyecto principal
copiamos el paquete org.rigemapi.properties con sus archivos


Creamos nuestro clase de test con JUnit para comprobar un usuario y password de la tabla usuarios.


la clase test para validar el usuario y password


Ejecución






AVBravo - September 12, 2012 01:20 AM
Actualizar la version libreria en maven local

Actualizar la version libreria en maven local
Proyecto:rigemapi



En las propiedades del proyecto, cambiamos el numero de versión

ejecutamos Build with Dependencies

En el otro proyecto

en Dependencias, se muestran la nueva versión y seleccionamos la versión actualizada


AVBravo - September 11, 2012 02:30 AM
Agregar nuestro jar al repositorio local de Maven desde NetBeans

Tenemos un proyecto maven


dar clic derecho seleccionar Buid with Dependecies

esto hara que el jar se almacene en el directorio .m2 de maven.
y en la carpeta target del proyecto


En el otro proyecto seleccionamos Dependencias-> Agregar dependencias

y nos aparece la dependencia.




AVBravo - September 06, 2012 02:14 PM
Apache Maven con NetBeans

INSTALAR MAVEN

  • Descargarlo desde
http://maven.apache.org/download.html
descomprimir el archivo y copiarlo en /home/avbravo

  • Editar profile
sudo gedit /etc/profile
Agregar
export MAVEN_HOME=/home/avbravo/apache-maven-3.0.4
export PATH=$PATH:${MAVEN_HOME}/bin


Verificar la versión de maven con
mvn –version


En NetBeans
Crear un nuevo proyecto. 
Categorías: Maven
Proyectos: Web Application


Indicamos el nombre del proyecto, el id del grupo

Servidor: Seleccionamos GlassFish Server


Tenemos el esqueleto del proyecto creado
En propiedades del proyecto. Seleccionamos las diversas categorías

Fuentes
 Seleccionamos la versión del JDK que estemos usando

En Configuraciones. 
Seleccionar < configuración predeterminada> y dar clic en Activar

Frameworks
Dar clic en el botón Add, y seleccionar Java Server Faces
En componentes  seleccionar PrimeFaces

Podemos agregar las dependencias desde Maven
En el proyecto. Dar clic derecho en Dependencias y escoger Agregar dependencias

En la pestaña Buscar, y en la casilla de Consulta: escribimos mysql, y seleccionamos el mysql connector


Observamos que el driver se agrego al proyecto


Ejecutamos el proyecto




AVBravo - August 25, 2012 01:50 AM
@Inject con DataClassG

La versión 2.7.5 de DataClassG, soporta la generación de Inyección de Dependencias.
http://plugins.netbeans.org/plugin/39424/?show=true


Tenemos el Beans

En el Controller, se genera automaticamente la inyección.





AVBravo - August 25, 2012 01:05 AM
Video Conferencia con Bruno Souza desde Berlin

En el día de hoy realizamos una vídeo conferencia con nuestro amigo Bruno Souza que se encuentra en Berlin, quien hizo una pausa en el Campus Party Berlins ,  para compartir con un grupo de amigos que estamos formando para aprendizaje de Java, NetBeans, y estos se conviertan difusores de Java, NetBeans y Open Source.


Una conferencia muy amena, en la cual Bruno compartió sus experiencias, hablo del trabajo que se realiza en la comunidad, Java ,Open Source.



Mostró el soporte de Maven dentro del IDE NetBeans.


Parte del grupo de desarrolladores.


Agradecemos enormemente a Bruno por su tiempo para compartir con el equipo.


AVBravo - August 08, 2012 02:59 AM
NetBeans 7.2 en varios idiomas

Ya esta disponible NetBeans 7.2 en varios idiomas http://netbeans.org/downloads/index.html


Menú de opciones


AVBravo - August 05, 2012 06:41 PM
Personalizando el Primefaces Selector de Temas

Si deseamos personalizar el selector de temas de primefaces para mostrar algo como esto.


Pasos:
1. Descargar los temas desde (archivos .jar)
agregarlo a las bibliotecas del proyecto
2.  En el archivo web.xml, agregar
<context-param>
<param-name>primefaces.THEME</param-name>
<param-value>#{cambiadorTemas.tema}</param-value>
</context-param>


3. Creamos la clase CambiadorTemas.java

@Named(value = "cambiadorTemas")
@SessionScoped
public class CambiadorTemas implements Serializable {

     private static final long serialVersionUID = 1L;
private String tema="afterdark";
     private Map<String, String> themes;
     public Map<String, String> getThemes() {
         themes = new TreeMap<String, String>();
         themes.put("aristo", "aristo");
         themes.put("black-tie", "black-tie");
         themes.put("blitzer", "blitzer");
         themes.put("bluesky", "bluesky");
         themes.put("casablanca", "casablanca");
         themes.put("cupertino", "cupertino");
         themes.put("dark-hive", "dark-hive");
         themes.put("dot-luv", "dot-luv");
         themes.put("eggplant", "eggplant");
         themes.put("excite-bike", "excite-bike");
         themes.put("flick", "flick");
         themes.put("glass-x", "glass-x");
         themes.put("hot-sneaks", "hot-sneaks");
         themes.put("humanity", "humanity");
         themes.put("le-frog", "le-frog");
         themes.put("midnight", "midnight");
         themes.put("mint-choc", "mint-choc");
         themes.put("none", "none");
         themes.put("overcast", "overcast");
         themes.put("pepper-grinder", "pepper-grinder");
         themes.put("redmond", "redmond");
         themes.put("rocket", "rocket");
         themes.put("sam", "sam");
         themes.put("smoothness", "smoothness");
         themes.put("south-street", "south-street");
         themes.put("start","start");
         themes.put("sunny", "sunny");
         themes.put("swanky-purse", "swanky-purse");
         themes.put("trontastic", "trontastic");
         themes.put("ui-darkness", "ui-darkness");
         themes.put("ui-lightness", "ui-lightness");
         themes.put("vader", "vader");
     return themes;
}

 public void setThemes(Map<String, String> themes) {
     this.themes = themes;
 }

public CambiadorTemas() {
}

public String getTema() {
    return tema;
 }

 public void setTema(String tema) {
     this.tema = tema;
 }

public String cambiar(){
   return null;
 }

}

4.En el menu invocamos el dialogo

 <p:menuButton value="#{mensajes['msg.tools']}">
                <p:menuitem onclick="dlgTheme.show();" value="#{mensajes['msg.theme']}" immediate = 
        </p:menuButton>

5. Agregamos el dialogo
<h:form id="formtema" >
     <p:dialog header="Theme" widgetVar="dlgTheme" showEffect="bounce" hideEffect="explode" width="400"
                height="200">  
     <h:panelGrid columns="2">

          <p:selectOneMenu  value="#{cambiadorTemas.tema}" immediate = "true"   editable="true">
            <f:selectItems value="#{cambiadorTemas.themes}" />
          </p:selectOneMenu> 
          <p:commandButton value="Change" action="#{cambiadorTemas.cambiar}" ajax="false"/>
   </h:panelGrid>
  </p:dialog>

</h:form>

Héctor - August 04, 2012 09:12 PM
LINEAS EN BLANCO

Me encuentro trabajando en proyecto en el que hay que "hacer pequeños" cambios a una aplicación ya hecha y añadir unos módulos más, a mi y a mi experiencia nos parece mas un proceso de reingenieria, pero para otras personas solo son "pequeños cambios" que impactan al funcionamiento del sistemita.

En fin, no discutiré el impacto o no de los cambios que estamos haciendo, pero algo que si me genera conflictos es la forma en la que esta programada, nombre de variables como:

$n1 = (n2 * $n3) / 100;


Es evidente que los nombres son poco descriptivos a lo que la se almacena en esas variables :bandit: la distribución de los archivos también es confusa pero lo que si me desespera es la cantidad de espacio que dejaron entre cada linea, eso... eso si me enoja, creo que tengo una manía con ver tanto espacio en blanco entre una linea y otra, ejemplo:

$n4 = (n3 * $n2) / 100;





$n5 = ($n3 + $n1)


Lo que hacia es que primero eliminaba esos espacios para ya poder rastrear a las variables esas y ponerles un nombre mas adecuado, pero si perdía mucho tiempo haciendo esta tarea, el IDE que uso es Netbeans y eliminaba todo con un Ctrl+x linea por linea, pero dicen que un buen administrador y/o programador es flojo, preferí usar una expresión regular que haga ese trabajo por mi.



Con la siguiente combinación de teclas le indican a netbeans que busque algo y lo reemplace por otra cosa:

Ctrl + h


Indicamos que busque una expresión regular, en mi caso use la siguiente

^[\s]*$


Y de 9893 lineas que indicaba el archivo nos quedamos con 1400, despues de esto le damos formato al archivo y ya queda listo para trabajar con el :up: y señores hagan caso y/o recuerden lo que sus maestros cuando les decían sobre como nombrar a las variables y no dejen tanto espacio en sus lineas de código

Héctor - August 04, 2012 09:12 PM
LINEAS EN BLANCO

Me encuentro trabajando en proyecto en el que hay que "hacer pequeños" cambios a una aplicación ya hecha y añadir unos módulos más, a mi y a mi experiencia nos parece mas un proceso de reingenieria, pero para otras personas solo son "pequeños cambios" que impactan al funcionamiento del sistemita.

En fin, no discutiré el impacto o no de los cambios que estamos haciendo, pero algo que si me genera conflictos es la forma en la que esta programada, nombre de variables como:

$n1 = (n2 * $n3) / 100;


Es evidente que los nombres son poco descriptivos a lo que la se almacena en esas variables :bandit: la distribución de los archivos también es confusa pero lo que si me desespera es la cantidad de espacio que dejaron entre cada linea, eso... eso si me enoja, creo que tengo una manía con ver tanto espacio en blanco entre una linea y otra, ejemplo:

$n4 = (n3 * $n2) / 100;





$n5 = ($n3 + $n1)


Lo que hacia es que primero eliminaba esos espacios para ya poder rastrear a las variables esas y ponerles un nombre mas adecuado, pero si perdía mucho tiempo haciendo esta tarea, el IDE que uso es Netbeans y eliminaba todo con un Ctrl+x linea por linea, pero dicen que un buen administrador y/o programador es flojo, preferí usar una expresión regular que haga ese trabajo por mi.



Con la siguiente combinación de teclas le indican a netbeans que busque algo y lo reemplace por otra cosa:

Ctrl + h


Indicamos que busque una expresión regular, en mi caso use la siguiente

^[\s]*$


Y de 9893 lineas que indicaba el archivo nos quedamos con 1400, despues de esto le damos formato al archivo y ya queda listo para trabajar con el :up: y señores hagan caso y/o recuerden lo que sus maestros cuando les decían sobre como nombrar a las variables y no dejen tanto espacio en sus lineas de código

AVBravo - July 24, 2012 07:46 PM
Probando NetBeans 7.2

En la pestaña Servicios, aparece Cloud




En refactorización podemos mover los atributos


En la búsqueda presionamos Ctrl-Space y se activa el auto completado 


 En la vista de paquetes existen las opciones: List,Tree, Reduced Tree

Vista de paquetes Tree


AVBravo - July 24, 2012 01:23 PM
NetBeans 7.2

Esta disponible para descarga NetBeans 7.2.



La lista de características las puedes encontrar en http://wiki.netbeans.org/NetBeans_72_NewAndNoteworthy

AVBravo - May 28, 2012 03:16 AM
javscazGChat v1.5

Esta versión se corrigió el error que mostraba en la barra de mensajes todos los mensajes, ahora, se muestran los mensajes sin mezclarlos en la vista.
http://plugins.netbeans.org/plugin/39307/?show=true


AVBravo - May 26, 2012 01:39 AM
javscazGChat v1.4

Version 1.4 de javscazGChat con soporte para notificaciones incorporado.
http://plugins.netbeans.org/plugin/39307/?show=true

Una vez instalado en el ménu Tools->Options->Miscellaneous




Muestra notificación en la barra indicándonos que tenemos un nuevo chat.

AVBravo - May 24, 2012 12:10 AM
NetBeans 7.2 Beta

Ya esta disponible la versión 7.2Beta de NetBeans




Héctor - December 07, 2011 11:52 PM
XDEBUG Y NETBEANS 7.0.1

Resulta que me encuentro haciendo un desarrollo en PHP y como usuario de Netbeans es el IDE que uso para este proyecto. Pero me enfrento a un problema, al momento de hacer un debug del código (Netbeans usa Xdebug para esta tarea) resulta que no se detiene en los breakpoints que indico :irked: realmente algo raro pasa. Pensé que era la configuración de para el uso de xdebug, pero no, todo en la configuración esta bien, entonces ¿cuál es el problema?, buscado en diferentes sitios la solución la encontré, bueno no del todo, pero al menos ya puede hacer ese seguimiento del código. Por lo que veo netbeans se queda esperando la conexión con xdebug, pero la url de la página a debuggear no no muestra: ?XDEBUG_SESSION_START=xdebug por lo que siempre se queda esperando:
Pero si de manera manual completamos la dirección, es decir, debe de lucir de la siguiente manera:

localhost/modificar.php?XDEBUG_SESSION_START=xdebug
En mi caso dice =xdebug ya que cambie la configuración, normalmente dice netbeans-xdebug, con esta modificación a la url se logra hacer la conexión con xdebug y netbeans se detiene en los puntos indicados. Si alguno sabe que puede estar pasando seria interesante que lo mencionara, por ahora creo que ingresare de manera manual la url para poder hacer el debug, en lo que encuentro una solución mas adecuada.

Héctor - December 07, 2011 11:52 PM
XDEBUG Y NETBEANS 7.0.1

Resulta que me encuentro haciendo un desarrollo en PHP y como usuario de Netbeans es el IDE que uso para este proyecto. Pero me enfrento a un problema, al momento de hacer un debug del código (Netbeans usa Xdebug para esta tarea) resulta que no se detiene en los breakpoints que indico :irked: realmente algo raro pasa. Pensé que era la configuración de para el uso de xdebug, pero no, todo en la configuración esta bien, entonces ¿cuál es el problema?, buscado en diferentes sitios la solución la encontré, bueno no del todo, pero al menos ya puede hacer ese seguimiento del código. Por lo que veo netbeans se queda esperando la conexión con xdebug, pero la url de la página a debuggear no no muestra: ?XDEBUG_SESSION_START=xdebug por lo que siempre se queda esperando:
Pero si de manera manual completamos la dirección, es decir, debe de lucir de la siguiente manera:

localhost/modificar.php?XDEBUG_SESSION_START=xdebug
En mi caso dice =xdebug ya que cambie la configuración, normalmente dice netbeans-xdebug, con esta modificación a la url se logra hacer la conexión con xdebug y netbeans se detiene en los puntos indicados. Si alguno sabe que puede estar pasando seria interesante que lo mencionara, por ahora creo que ingresare de manera manual la url para poder hacer el debug, en lo que encuentro una solución mas adecuada.

Programa en Java y disfruta de un café lojano » Java – Netbeans - November 17, 2011 04:43 AM
JDialog con imagen de fondo

Luego de varias preguntas relacionadas al tema (ubicar una imagen de fondo a un JDialog) me puse a trabajar en el tema y les presento una solución, la misma que sigue lo explicado en el post JFrame con Imagen de Fondo.

El proyecto está estructurado como muestra la imagen a continuación:

Imagen con la estructura del proyecto en NetBeans

Imagen con la estructura del proyecto en NetBeans

La descripción de la misma es la siguiente:

  • El JFrame – FrmPrincipal.java tiene un botón cuya función es mostrar el JDialog.
  • El JDialog – JDiFondo.java, muestra un JPanel
  • Un JPanel – PnlFondoJDialog.java, que muestra la imagen y un botón.

Veamos el código más importante de cada uno de los elementos, empecemos por el JFrame –  FrmPrincipal.java

public class FrmPrincipal extends javax.swing.JFrame {
   /** Creates new form FrmPrincipal */
   public FrmPrincipal() {
      initComponents();
   }

   private void btnMostrarActionPerformed(java.awt.event.ActionEvent evt) {
      int ancho = 300;
      int alto = 300;
      JDiFondo jdiFondo = new JDiFondo(this, true);
      jdiFondo.setSize(ancho, alto);
      jdiFondo.setPreferredSize(new Dimension(ancho, alto));
      jdiFondo.configurar();
      jdiFondo.setVisible(true);
   }
   ...
}

Usamos setSize y jdiFondo.setPreferredSize, el primero nos permite que la imagen y la ventana del JDialog tengan el mismo tamaño, también se invoca la método configurar del JDialog que lo explicaremos más adelante.

Ahora veremos el JDialog - JDiFondo.java

public class JDiFondo extends javax.swing.JDialog {
   /** Creates new form JDiFondo */
   public JDiFondo(java.awt.Frame parent, boolean modal) {
      super(parent, modal);
      initComponents();
   }

   public void configurar(){
      PnlFondoJDialog pnlFondo = new PnlFondoJDialog();
      pnlFondo.setSize(this.getSize());
      this.add(pnlFondo, BorderLayout.CENTER);
      this.pack();
   }
   ...
}

Lo que debemos destacar de está clase es el método configurar, que no existía cuando trabajamos en el post anterior (ubicar la imagen en un JFrame – JFrame con Imagen de Fondo) es necesario éste método por que si ubicamos sus líneas de código en el constructor el panel toma la medida por defecto del JDialog ya que hasta ese momento no le asignamos un tamaño al JDialog (Ver el método btnMostrarActionPerformed del JFrame).

Finalmente el JPanel – PnlFondoJDialog.java este no ha cambiado y sigue el mismo principio que se mencionó en el post: JFrame con Imagen de Fondo.

public class PnlFondoJDialog extends javax.swing.JPanel {
   /** Creates new form PnlFondo */
   public PnlFondoJDialog() {
      initComponents();
   }

   @Override
   public void paintComponent(Graphics g){
      Dimension tamanio = getSize();
      ImageIcon imagenFondo = new ImageIcon(getClass().
      getResource("/los/imagen/DSC00857.jpg"));
      g.drawImage(imagenFondo.getImage(), 0, 0,
      tamanio.width, tamanio.height, null);
      setOpaque(false);
      super.paintComponent(g);
   }
   ...
}

El resultado final lo pueden ver en la siguiente imagen:

Ejemplo de un JDialog con imagen de Fondo

El resultado final

El código completo lo pueden descargar aquí.

Espero que les ayude


Programa en Java y disfruta de un café lojano » Java – Netbeans - November 15, 2011 12:25 PM
Loxa Web Site Export – Plugin para Gephi

Un post luego de muchooooooo tiempo.

Hace algún tiempo ya conocí y trabajé con Gephi, una herramienta open source para realizar análisis de redes sociales o SNA por sus siglas en inglés. Gephi está construido sobre la plataforma de  NetBeans, lo que le permite que sea extensible agregando nuevos plugins, de hecho existen ya varios plugins y siguen creciendo.

Es así como iniciamos la construcción de un plugin que nos permita visualizar el resultado de los análisis que se realizan en Gephi. El plugin lo denominamos Loxa Web Site Export y es un plugin que exporta el análisis realizado a un sitio Web, que es fácil de personalizar (a través de hojas de estilos) y enriquecer con descripciones de cada uno de los gráficos (editando un archivo JSON). Una imagen que muestra un sitio publicado con nuestro plugin:

Loxa Web Site Export una demostración

Un ejemplo del uso de nuestro plugin

Usámos Gephi para realizar un meta-análisis del proyecto TAEE aplicando análisis de redes sociales, y lo resultados los publicamos usando el plugin y lo publicamos aquí.

Obviamente el plugin fue desarrollado en JAVA usando las siguientes tecnologías:

  • JSOUP: para armar la página principal del sitio Web
  • GSON: para transformar un objeto a un archivo json
  • Seadragon: que nos permite crear imágenes con nivel de zoom-in bastante alto. Si bien no es tecnología Java, existe una implementación Java.
  • PDF-Renderer: que permite crear un documento pdf en memoria y luego usarlo para crear la imágenes que se usaran Seadragon
En el sitio Web generado se usan varios plugins de jQuery, json, etc.
En próximas entradas iré explicando como se usó algunas de las tecnologías para construir el plugin. Empezaremos explicando cómo generar una imagen que sirve de leyenda para explicar el significado de los colores que se usaron en un análisis.
Fue mi primera experiencia con la plataforma de NetBeans y me pareció una experiencia enriquecedora como programador

Héctor - February 22, 2011 03:00 AM
TOUR UNIVERSITARIO

:hat: Muchas veces me pregunte cuando Opera Software vendría a México a impartir una platica, como parte de sus Opera Tours que son comunes en Europa, pero esta vez visitarán por primera vez latinoamericana!! :cheers: :hat:



Estarán en la UNAM y el IPN, en el momento que me entere de esto me dije a mi mismo, mi mismo debes de de estar ahí :cool: aun no se que día exactamente iré, lo mas probable es que sea cuando estén en la UNAM (por si me quieren conocer :lol: ) ;) aun no pido permiso en el trabajo pero debo de estar ahí, soy usuario de Opera desde el 2005 y desde ese mismo año tengo mi blog en My.Opera y me han mandado regalos, lo menos que puedo hacer es difundir su uso y estar presente :happy:

Héctor - February 22, 2011 03:00 AM
TOUR UNIVERSITARIO

:hat: Muchas veces me pregunte cuando Opera Software vendría a México a impartir una platica, como parte de sus Opera Tours que son comunes en Europa, pero esta vez visitarán por primera vez latinoamericana!! :cheers: :hat:



Estarán en la UNAM y el IPN, en el momento que me entere de esto me dije a mi mismo, mi mismo debes de de estar ahí :cool: aun no se que día exactamente iré, lo mas probable es que sea cuando estén en la UNAM (por si me quieren conocer :lol: ) ;) aun no pido permiso en el trabajo pero debo de estar ahí, soy usuario de Opera desde el 2005 y desde ese mismo año tengo mi blog en My.Opera y me han mandado regalos, lo menos que puedo hacer es difundir su uso y estar presente :happy:

Héctor - February 21, 2011 04:12 AM
SuSE Studio

En noviembre del año pasado me encontré un mensaje en mi facebook

You are one of the first 25 "Likers" of the Dister contest on Facebook. Thank you for your participation in the contest.

Me había ganado una playera de SuSEStudio :hat: y esta semana llego a casa :drunk: :hat: Por lo que me puse a pesar que cosas he ganado en los concursos en internet o que me han enviado a casa con el solo hecho de pedirlas. Lo primero que pedí en internet fue los CD's de Ubuntu, ¿Aun los envían? y en el 2006 pedí que me enviaran el NetBeans WorldTour CD, preste ese CD y ya no regreso a mi :worried: desgraciadamente NetBeans ya no envia mas CD's igual pedí OpenSolaris. Me he ganado pins, lapiceros y 2 posters de Opera

Me han enviado la Opera Magazine

Y en un concurso de My.Opera me gane una sudadera y lapiceros :hat:

Y esta semana pedí que me envien DVD's de OpenSUSE, espero esten a tiempo para regalarlos en mi examen profesional

Héctor - February 21, 2011 04:12 AM
SuSE Studio

En noviembre del año pasado me encontré un mensaje en mi facebook

You are one of the first 25 "Likers" of the Dister contest on Facebook. Thank you for your participation in the contest.

Me había ganado una playera de SuSEStudio :hat: y esta semana llego a casa :drunk: :hat: Por lo que me puse a pesar que cosas he ganado en los concursos en internet o que me han enviado a casa con el solo hecho de pedirlas. Lo primero que pedí en internet fue los CD's de Ubuntu, ¿Aun los envían? y en el 2006 pedí que me enviaran el NetBeans WorldTour CD, preste ese CD y ya no regreso a mi :worried: desgraciadamente NetBeans ya no envia mas CD's igual pedí OpenSolaris. Me he ganado pins, lapiceros y 2 posters de Opera

Me han enviado la Opera Magazine

Y en un concurso de My.Opera me gane una sudadera y lapiceros :hat:

Y esta semana pedí que me envien DVD's de OpenSUSE, espero esten a tiempo para regalarlos en mi examen profesional

Héctor - February 13, 2011 05:27 PM
KENAI Y KOMODO IDE

En junio del año pasado me encontraba contento de que me titulaba por promedio (:lol: pobre tonto), pero resulta que la semana pasada me dicen que "Dice la SEP que no te puedes titular promedio" entre que es responsabilidad de la uni y tontas reglas de SEP tengo que hacer tesis :worried: cuando solo restaba iniciar el pago del titulo :doh:

En fin, para la tesis requiero de un sistema de control de versiones y el que uso es Kenai que es un proyecto impulsado por SUN y ahora por Oracle, tiene muchas características que lo hacen interesante, como lo resume la imagen:

Como se puede ver se integra con Netbeans que hasta ahora era suficiente ya que los proyectos que he desarrollado son con PHP y Java, que son soportados por este IDE, pero para la tesis uso Perl y el IDE que uso es Komodo IDE y la forma de integrarlos es así:

Primero que nada es tener una cuenta en Kenai y Netbeans instalado, ya que desde el IDE crearemos el proyecto, pues que si se crea el proyecto desde el sitio no crea de manera correcta el repositorio (svn+) y para esto en Netbeans vamos a File->Open Team Project y se abrira una ventana en la que se hará click en Create New Project y se llena el formulario con la información necesaria.

Con esto ya podemos pasar a Komodo para configurarlo, para esto se crea un nuevo proyecto, Project->New Project, una vez creado buscamos el siguiente icono:

Se ingresa la información necesaria en el asistente:

Después se hace click en:

Y veremos el siguiente mensaje:

/usr/bin/svn add
    file:///home/hreyes/Programas/Perl/tesis/tesis.komodoproject

Con esto ya podremos usar Kenai para el control de versiones del código generado con Komodo IDE, espero les sea de utilidad :)

Héctor - February 13, 2011 05:27 PM
KENAI Y KOMODO IDE

En junio del año pasado me encontraba contento de que me titulaba por promedio (:lol: pobre tonto), pero resulta que la semana pasada me dicen que "Dice la SEP que no te puedes titular promedio" entre que es responsabilidad de la uni y tontas reglas de SEP tengo que hacer tesis :worried: cuando solo restaba iniciar el pago del titulo :doh:

En fin, para la tesis requiero de un sistema de control de versiones y el que uso es Kenai que es un proyecto impulsado por SUN y ahora por Oracle, tiene muchas características que lo hacen interesante, como lo resume la imagen:

Como se puede ver se integra con Netbeans que hasta ahora era suficiente ya que los proyectos que he desarrollado son con PHP y Java, que son soportados por este IDE, pero para la tesis uso Perl y el IDE que uso es Komodo IDE y la forma de integrarlos es así:

Primero que nada es tener una cuenta en Kenai y Netbeans instalado, ya que desde el IDE crearemos el proyecto, pues que si se crea el proyecto desde el sitio no crea de manera correcta el repositorio (svn+) y para esto en Netbeans vamos a File->Open Team Project y se abrira una ventana en la que se hará click en Create New Project y se llena el formulario con la información necesaria.

Con esto ya podemos pasar a Komodo para configurarlo, para esto se crea un nuevo proyecto, Project->New Project, una vez creado buscamos el siguiente icono:

Se ingresa la información necesaria en el asistente:

Después se hace click en:

Y veremos el siguiente mensaje:

/usr/bin/svn add
    file:///home/hreyes/Programas/Perl/tesis/tesis.komodoproject

Con esto ya podremos usar Kenai para el control de versiones del código generado con Komodo IDE, espero les sea de utilidad :)

Héctor - February 08, 2011 05:27 AM
5 AÑOS

Al principio fue por el gusto de tener donde hablar sobre Linux y de los programas que hacia en la uni, después para calmar a los demonios internos :p y ahora es mas por inspiración divina, sea cual sea la razón para mantener un blog por 5 años, es grato cumplirlos con 38000 visitas :hat: :drunk:



38000 visitas en 5 años considero que han de ser pocas en comparación a blogs mas populares, pero al menos he identificado algunos temas que son mas visitados.

negritas en latex
diferencias entre linux y windows
quitar linux e instalar xp
tiro parabólico
soporte de php en netbeans
R&OS: pdf class y acentos

No están en orden pero que importa :whistle: y sin duda los planetas a los que esta suscrito el blog contribuyen a estas visitas, gracias a Planeta Linux, Planeta Netbeans y a Planeta OpenSuSE y espero el blog continué por mas tiempo y que la creación de contenidos sean de utilidad para la comunidad, digo al final de cuentas de eso trata la web 2.0 y finalmente a Opera por tener esta gran comunidad y navegador :cheers: :yes: y mis operamigos no crean que me olvido de ustedes :D son sin duda personas muy interesantes.

feliz cumpleaños a mi blog :hat:

Héctor - February 08, 2011 05:27 AM
5 AÑOS

Al principio fue por el gusto de tener donde hablar sobre Linux y de los programas que hacia en la uni, después para calmar a los demonios internos :p y ahora es mas por inspiración divina, sea cual sea la razón para mantener un blog por 5 años, es grato cumplirlos con 38000 visitas :hat: :drunk:



38000 visitas en 5 años considero que han de ser pocas en comparación a blogs mas populares, pero al menos he identificado algunos temas que son mas visitados.

negritas en latex
diferencias entre linux y windows
quitar linux e instalar xp
tiro parabólico
soporte de php en netbeans
R&OS: pdf class y acentos

No están en orden pero que importa :whistle: y sin duda los planetas a los que esta suscrito el blog contribuyen a estas visitas, gracias a Planeta Linux, Planeta Netbeans y a Planeta OpenSuSE y espero el blog continué por mas tiempo y que la creación de contenidos sean de utilidad para la comunidad, digo al final de cuentas de eso trata la web 2.0 y finalmente a Opera por tener esta gran comunidad y navegador :cheers: :yes: y mis operamigos no crean que me olvido de ustedes :D son sin duda personas muy interesantes.

feliz cumpleaños a mi blog :hat:

Héctor - October 31, 2010 05:31 AM
TIRO PARABOLICO -ACTUALIZACIÓN-

El post sobre Tiro Parabólico en Java es de los que mas visitas ha tenido desde que lo publique :D y la mayoría ha sido pidiéndome que reescriba ese código en C++ :rolleyes: pero por cuestiones de tiempo no lo he hecho :whistle:

Al igual que ha tenido contribuciones ese código, una persona (JOAC) lo reescribio para C# :yes: y otra (Luis) agrego un JOptionPane para que ya no se tenga que ingresar los datos desde consola, gracias a los dos por sus contribuciones :up:

Y como es de los post mas populares y por la petición de uno de los que lo visitaron, agregue lo que Luis había hecho al hacer uso del JOptionPane y el resultado es:

Main.java

/**
 * @author Héctor
 * @colaborador luis (perdon por no poner mas datos pero solo se que se llama luis :D )
 * @creado el 11 Deciembre 2006
 * @modificado el 24 de Junio de 2010
 *
 */
package tiroparabolico;

import javax.swing.JOptionPane;

public class Main {

    static String temp = "";

    public static void main(String[] args) {
        temp = JOptionPane.showInputDialog(null, "Velocidad", "Datos", JOptionPane.QUESTION_MESSAGE);
        double velocidad = Double.parseDouble(temp);
        temp = JOptionPane.showInputDialog(null, "Angulo", "Datos", JOptionPane.QUESTION_MESSAGE);
        double angulo = Double.parseDouble(temp);
        Calculos calculos = new Calculos();
        calculos.Operaciones(angulo, velocidad);
    }
}

Calculos.java
/**
 * @author Héctor
 * @creado el 11 Deciembre 2006
 * @modificado el 31 de Octubre de 2010
 *
 */

package tiroparabolico;

import javax.swing.JOptionPane;

public class Calculos {

    double Angulo;
    double Altura;
    double Velocidadi;
    double Distancia;
    double Velocidadx;
    double Velocidady;
    double Velocidadf;
    double Tiempo;

    public void Operaciones(double angulo, double velocidad) {
        Angulo = angulo;
        Velocidadi = velocidad;
        JOptionPane.showMessageDialog(null, "Distancia recorrida : " + Distancia() + " m"
                + "\nTiempo de recorrido : " + Tiempo() + " s"
                + "\nA una velocidad de  : " + Velocidad() + " m/s"
                + "\nCon una altura maxima de : " + Altura() + " m");
    }

    double Distancia() {
        Distancia = ((Math.pow(Velocidadi, 2) * (Math.sin(Math.toRadians(Angulo * 2)))) / 9.8);
        return Distancia;
    }

    double Tiempo() {
        Tiempo = ((2 * Velocidadi) * (Math.sin(Math.toRadians(Angulo)))) / 9.8;
        return Tiempo;
    }

    double Velocidad() {
        Velocidadx = (Velocidadi * Math.cos(Math.toRadians(Angulo)));
        Velocidady = (Velocidadi * Math.sin(Math.toRadians(Angulo)) - 9.8 * Tiempo);
        Velocidadf = (Math.sqrt(Math.pow(Velocidadx, 2) + Math.pow(Velocidady, 2)));
        return Velocidadf;
    }

    double Altura() {
        Altura = ((Math.pow(Velocidadi, 2) * Math.pow(Math.sin(Math.toRadians(Angulo)), 2)) / (9.8 * 2));
        return Altura;
    }
}

La recomendación continua siendo la misma que Luis nos había hecho:

... no valida nada así que abusados con meterle letras o numeros negativos esta es la clase ...



Los cambios son mas esteticos que nada, ya que se pasa de esto:

A esto:

Espero les sea de utilidad :D

Héctor - October 31, 2010 05:31 AM
TIRO PARABOLICO -ACTUALIZACIÓN-

El post sobre Tiro Parabólico en Java es de los que mas visitas ha tenido desde que lo publique :D y la mayoría ha sido pidiéndome que reescriba ese código en C++ :rolleyes: pero por cuestiones de tiempo no lo he hecho :whistle:

Al igual que ha tenido contribuciones ese código, una persona (JOAC) lo reescribio para C# :yes: y otra (Luis) agrego un JOptionPane para que ya no se tenga que ingresar los datos desde consola, gracias a los dos por sus contribuciones :up:

Y como es de los post mas populares y por la petición de uno de los que lo visitaron, agregue lo que Luis había hecho al hacer uso del JOptionPane y el resultado es:

Main.java

/**
 * @author Héctor
 * @colaborador luis (perdon por no poner mas datos pero solo se que se llama luis :D )
 * @creado el 11 Deciembre 2006
 * @modificado el 24 de Junio de 2010
 *
 */
package tiroparabolico;

import javax.swing.JOptionPane;

public class Main {

    static String temp = "";

    public static void main(String[] args) {
        temp = JOptionPane.showInputDialog(null, "Velocidad", "Datos", JOptionPane.QUESTION_MESSAGE);
        double velocidad = Double.parseDouble(temp);
        temp = JOptionPane.showInputDialog(null, "Angulo", "Datos", JOptionPane.QUESTION_MESSAGE);
        double angulo = Double.parseDouble(temp);
        Calculos calculos = new Calculos();
        calculos.Operaciones(angulo, velocidad);
    }
}

Calculos.java
/**
 * @author Héctor
 * @creado el 11 Deciembre 2006
 * @modificado el 31 de Octubre de 2010
 *
 */

package tiroparabolico;

import javax.swing.JOptionPane;

public class Calculos {

    double Angulo;
    double Altura;
    double Velocidadi;
    double Distancia;
    double Velocidadx;
    double Velocidady;
    double Velocidadf;
    double Tiempo;

    public void Operaciones(double angulo, double velocidad) {
        Angulo = angulo;
        Velocidadi = velocidad;
        JOptionPane.showMessageDialog(null, "Distancia recorrida : " + Distancia() + " m"
                + "\nTiempo de recorrido : " + Tiempo() + " s"
                + "\nA una velocidad de  : " + Velocidad() + " m/s"
                + "\nCon una altura maxima de : " + Altura() + " m");
    }

    double Distancia() {
        Distancia = ((Math.pow(Velocidadi, 2) * (Math.sin(Math.toRadians(Angulo * 2)))) / 9.8);
        return Distancia;
    }

    double Tiempo() {
        Tiempo = ((2 * Velocidadi) * (Math.sin(Math.toRadians(Angulo)))) / 9.8;
        return Tiempo;
    }

    double Velocidad() {
        Velocidadx = (Velocidadi * Math.cos(Math.toRadians(Angulo)));
        Velocidady = (Velocidadi * Math.sin(Math.toRadians(Angulo)) - 9.8 * Tiempo);
        Velocidadf = (Math.sqrt(Math.pow(Velocidadx, 2) + Math.pow(Velocidady, 2)));
        return Velocidadf;
    }

    double Altura() {
        Altura = ((Math.pow(Velocidadi, 2) * Math.pow(Math.sin(Math.toRadians(Angulo)), 2)) / (9.8 * 2));
        return Altura;
    }
}

La recomendación continua siendo la misma que Luis nos había hecho:

... no valida nada así que abusados con meterle letras o numeros negativos esta es la clase ...



Los cambios son mas esteticos que nada, ya que se pasa de esto:

A esto:

Espero les sea de utilidad :D

Programa en Java y disfruta de un café lojano » Java – Netbeans - August 14, 2010 04:21 PM
Consultas DBpedia con Java – Linked Data

Dentro de la Web semántica, una de las iniciativas que de a poco va ganando relevancia es la Web de datos o también conocida como Linked Data o también como Linked Open Data, aquí una presentación que explica Linked Data, que a través de 4 principios determina la forma en la que los datos deben ser descritos y publicados. Bajo estos preceptos se han generado varios Datasets, uno de ellos es DBpedia que es la versión semántica de la wikipedia. La mayoría de los Dataset poseen mecanismos de consulta que a través de SPARQL nos permiten tener acceso a la información que ahí se publica. Los mecanismos de consulta son servicios Web basados en REST.

En este post mostraremos como realizar consultas a la DBPedia a través de Java. Para ellos usaremos Jersey que es un API que no permite trabajar con servicios REST. Antes de pasar a realizar cualquier explicación les describiré brevemente la aplicación, el objetivo de la aplicación es encontrar el país al cual pertenece un punto cardinal expresado en latitud y longitud. Para ello vamos a realizar la siguiente consulta:

SELECT ?pais ?lat ?long WHERE {
?pais rdf:type <http://dbpedia.org/ontology/Country>.
?pais geo:lat ?lat FILTER (datatype(?lat) = xsd:float && (?lat-0.2273363048115043) < 0.005 && (-0.2273363048115043-?lat) < 0.005).
?pais geo:long ?long FILTER (datatype(?long) = xsd:float && (?long-78.892578125) < 0.005 && (-78.892578125-?long) < 0.005)
}

Para ejecutar la consulta y ver los resultados click aquí. Podemos ver en la consulta que estamos consultando los países (rdf:type <http://dbpedia.org/ontology/Country) que tenga sus valores de latitud y longitud como números tipos float (datatype(?lat) = xsd:float  y datatype(?long) = xsd:float) y ademas calculamos la diferencia en la latitud y longitud de cada país con los valores que los obtenemos de alguna manera (yo los obtuve con google maps). Si bien este método no es el mejor ha sido el que relativamente a funcionado mejor y según leí en algún lugar es una recomendación de la dbpedia.

Actualización 19/08/2010: La consulta anterior no dio buenos resultados por lo que busqué otras formas de consultar el país y encontré dos. La primera y que uso es invocando a un servicio, obviamente REST, CountryCode / reverse geocoding cuyo detalle lo pueden encontrar aquí – GeoNames. La segunda opción es usar Google Maps con su clase GClientGeoCoder y su método getLocations, detalles aquí. Que tiene su contraparte con la librería de Maps en GWT.

Con la consulta ya estructurada es hora de armar la URL del servicio que consumiremos. La URL tiene la siguiente forma: http://dbpedia.org/sparql?default-graph-uri=<valor>&query=<consulta>&output=<tipo_salida>

Para el ejemplo los valores son (para <consulta> el valor es la consulta SPARQL que les mostré anteriormente):

<valor> = http://dbpedia.org

<tipo_salida> = json

Veamos el código Java del programa

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import javax.ws.rs.core.MediaType;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
/**
*
* @author jorgaf
*/

public class ClienteDBpedia {
   public static final String WS_URL_DBPEDIA = "http://dbpedia.org/sparql";
   public static void main(String[] args) {
      String defaultGraph = "http://dbpedia.org";
      String qry = "SELECT ?nombre ?tGobierno ?capital ?area ?moneda "
                + "?imagen ?descripcion\n WHERE { \n"
                + "?pais rdf:type <http://dbpedia.org/ontology/Country>. \n"
                + "OPTIONAL{?pais dbpprop:areaKm ?area.\n"
                + "?pais dbpprop:currencyCode ?moneda.\n"
                + "?pais dbpedia-owl:capital ?capital}.\n"
                + "OPTIONAL{?gobierno rdf:type <http://dbpedia.org/class/yago/FormsOfGovernment>.\n"
                + "    ?pais dbpedia-owl:governmentType ?tipoGobierno FILTER (?tipoGobierno = ?gobierno)}.\n"
                + "?pais rdfs:label ?nombre FILTER langMatches( lang(?nombre), \"ES\" ).\n"
                + "OPTIONAL{?gobierno rdfs:label ?tGobierno FILTER langMatches(lang(?tGobierno), \"ES\")}.\n"
                + "?pais rdfs:label ?nombreEng FILTER (langMatches( lang(?nombreEng), \"EN\" ) && ?nombreEng = \"Ecuador\"@en).\n"
                + "?pais dbpedia-owl:abstract ?descripcion FILTER (langMatches( lang(?descripcion), \"ES\" )).\n"
                + "?pais dbpedia-owl:thumbnail ?imagen\n"
                + "}";
      String salida = "&output=json";
      String url = "";
      try {
         defaultGraph = URLEncoder.encode(defaultGraph, "UTF-8");
         prefijos = URLEncoder.encode(prefijos, "UTF-8");
         qry = URLEncoder.encode(qry, "UTF-8");
      } catch (UnsupportedEncodingException ex) {}

      Client client = new Client();
      url = WS_URL_DBPEDIA + "?default-graph-uri=" + defaultGraph
         + "&query=" + qry + salida;
      WebResource resource = client.resource(url);
      String result = resource.accept("application/sparql-results+json").
         get(String.class);
      //String result = resource.accept("MediaType.APPLICATION_JSON").
      //   get(String.class);</pre>
   try {
      procesar(result);
   } catch (JSONException ex) {}
 }

 private static void procesar(String res) throws JSONException{
    JSONObject result = new JSONObject(res).getJSONObject("results");
    JSONArray bindings = result.getJSONArray("bindings");
    JSONObject pais;
    JSONObject lat, lon;

    for (int i = 0; i < bindings.length(); i++) {
       pais = bindings.getJSONObject(i).getJSONObject("pais");
       lat = bindings.getJSONObject(i).getJSONObject("lat");
       lon = bindings.getJSONObject(i).getJSONObject("long");
       System.out.printf("País: %s Lat: %s Lon: %s\n",
       pais.get("value"),
       lat.get("value"),
       lon.get("value"));
    }
  }
}

Podemos ver como es necesario codificar los valores de las default-graph-uri, query y output. El programa muestra también como trabajar con información en formato JSON que fue el valor que le asignamos para la salida, vea le método procesar para ver como se pueden obtener los datos. La salida que se obtiene son las siguientes:

{ "head": { "link": [], "vars": ["pais", "lat", "long"] },
"results": { "distinct": false, "ordered": true, "bindings": [
{ "pais": { "type": "uri", "value": "http://dbpedia.org/resource/Gabon" }        , "lat": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#float", "value": "0.3833333253860474" }        , "long": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#float", "value": "9.449999809265137" }},
{ "pais": { "type": "uri", "value": "http://dbpedia.org/resource/Kenya" }        , "lat": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#float", "value": "-1.266666650772095" }        , "long": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#float", "value": "36.79999923706055" }},
{ "pais": { "type": "uri", "value": "http://dbpedia.org/resource/S%C3%A3o_Tom%C3%A9_and_Pr%C3%ADncipe" }        , "lat": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#float", "value": "0.3333333432674408" }        , "long": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#float", "value": "6.733333110809326" }},
{ "pais": { "type": "uri", "value": "http://dbpedia.org/resource/Rwanda" }        , "lat": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#float", "value": "-1.943883299827576" }        , "long": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#float", "value": "30.05945014953613" }},
{ "pais": { "type": "uri", "value": "http://dbpedia.org/resource/Royal_Audience_of_Quito" }        , "lat": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#float", "value": "-0.25" }        , "long": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#float", "value": "-78.58333587646484" }},
{ "pais": { "type": "uri", "value": "http://dbpedia.org/resource/Ecuador" }        , "lat": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#float", "value": "-0.1500000059604645" }        , "long": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#float", "value": "-78.34999847412109" }},
{ "pais": { "type": "uri", "value": "http://dbpedia.org/resource/Somalia" }        , "lat": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#float", "value": "2.033333301544189" }        , "long": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#float", "value": "45.34999847412109" }} ] } }

Mientras que la salida ya procesada es la siguiente:

País: http://dbpedia.org/resource/Gabon Lat: 0.3833333253860474 Lon: 9.449999809265137
País: http://dbpedia.org/resource/Kenya Lat: -1.266666650772095 Lon: 36.79999923706055
País: http://dbpedia.org/resource/S%C3%A3o_Tom%C3%A9_and_Pr%C3%ADncipe Lat: 0.3333333432674408 Lon: 6.733333110809326
País: http://dbpedia.org/resource/Rwanda Lat: -1.943883299827576 Lon: 30.05945014953613
País: http://dbpedia.org/resource/Royal_Audience_of_Quito Lat: -0.25 Lon: -78.58333587646484
País: http://dbpedia.org/resource/Ecuador Lat: -0.1500000059604645 Lon: -78.34999847412109
País: http://dbpedia.org/resource/Somalia Lat: 2.033333301544189 Lon: 45.34999847412109

Hasta aquí no existe complicación alguna, pero lamentablemente y no sé porqué algunas veces el programa no funciona y presenta una excepción 406 Not Acceptable Actualización 19/08/2010: el problema anterior se resolvió cambiando la línea: resource.accept(MediaType.APPLICATION_JSON).get(String.class) por resource.accept(“application/sparql-results+json”).get(String.class); . La única forma de que trabaje es copiando la URL a la barra de dirección del navegador y luego de un par de intentos funciona en el navegador y luego en el programa Java. Si alguno de ustedes me puede ayudar con alguna solución se los agradeceré mucho.

Espero que les ayude y les sirva como base para futuros trabajos.


Héctor - May 23, 2010 05:52 PM
MICROSOFT SQL SERVER 2005 + APACHE + PHP

Tengo la costumbre de que cuando algo no me sale (un proyecto en java :furious: ) lo dejo temporalmente y me pongo a hacer otra cosa, esta vez intente trabajar en Windows ya que casi no lo uso y se olvidan como se manejan unas cosas en este SO. :no:

Resulta que durante mis practicas trabaje con Apache + PHP + MySQL sobre GNU/Linux y decidí usar el patrón de Modelo, Vista, Control para separar toda la parte gráfica, representación de datos, manejo del negocio y el acceso a la base de datos.

Precisamente uno de los punto que mas recalcaron en la uni cuando nos explicaron en que cosistia el MVC fue que podíamos cambiar de manera facíl el acceso al manejador de base de datos, asi que tome el la DB que estaba en MySQL y la pase a SQL Server, en teoria solo tenia que modificar algunas cosas y para el resto del sistema seria transparente el cambio de manejador. Pero me encontré con un problema que no logro entender a que se debe. ...

Héctor - May 23, 2010 05:52 PM
MICROSOFT SQL SERVER 2005 + APACHE + PHP

Tengo la costumbre de que cuando algo no me sale (un proyecto en java :furious: ) lo dejo temporalmente y me pongo a hacer otra cosa, esta vez intente trabajar en Windows ya que casi no lo uso y se olvidan como se manejan unas cosas en este SO. :no:

Resulta que durante mis practicas trabaje con Apache + PHP + MySQL sobre GNU/Linux y decidí usar el patrón de Modelo, Vista, Control para separar toda la parte gráfica, representación de datos, manejo del negocio y el acceso a la base de datos.

Precisamente uno de los punto que mas recalcaron en la uni cuando nos explicaron en que cosistia el MVC fue que podíamos cambiar de manera facíl el acceso al manejador de base de datos, asi que tome el la DB que estaba en MySQL y la pase a SQL Server, en teoria solo tenia que modificar algunas cosas y para el resto del sistema seria transparente el cambio de manejador. Pero me encontré con un problema que no logro entender a que se debe.

Héctor - March 31, 2010 11:56 PM
XDEBUG + NETBEANS IDE 6.9M1

Estos ultimos meses he estado trabajando en un proyecto usando Perl + MySQL + PHP y en la etapa del desarrollo web me he enfrentado a algunos problemas con el manejo de algunas variables con php :D

El problema es que no logro rastrear donde se queda un valor mientras es procesado :o buscando la forma de rastrearla, recorde que con Netbeans podemos hacer un debug de codigo php :up:

Y como no se me quita la costubre de usar versiones en desarrollo :rolleyes: instale la version 6.9 Milestone 1


Netbeans hace uso de xdebug para poder hacer un debug. Para su instalacion en OpenSuSE descargamos el software desde el Build Service de openSUSE, una vez ahi buscamos xdebug y lo instalamos con unos cuantos clicks :up:

Una vez instalado se configura para que pueda funcionar con Netbeans, para esto se edita:

/etc/php5/apache2/php.ini

y se agrega lo siguiente:

zend_extension=/usr/lib/php5/extensions/xdebug.so
xdebug.remote_enable = on
xdebug.remote_handler = dbgp
xdebug.remote_host = localhost
xdebug.remotes_port=9000

Con esto ya podemos hacer un debug de codigo php.

Héctor - March 31, 2010 11:56 PM
XDEBUG + NETBEANS IDE 6.9M1

Estos ultimos meses he estado trabajando en un proyecto usando Perl + MySQL + PHP y en la etapa del desarrollo web me he enfrentado a algunos problemas con el manejo de algunas variables con php :D

El problema es que no logro rastrear donde se queda un valor mientras es procesado :o buscando la forma de rastrearla, recorde que con Netbeans podemos hacer un debug de codigo php :up:

Y como no se me quita la costubre de usar versiones en desarrollo :rolleyes: instale la version 6.9 Milestone 1


Netbeans hace uso de xdebug para poder hacer un debug. Para su instalacion en OpenSuSE descargamos el software desde el Build Service de openSUSE, una vez ahi buscamos xdebug y lo instalamos con unos cuantos clicks :up:

Una vez instalado se configura para que pueda funcionar con Netbeans, para esto se edita:

/etc/php5/apache2/php.ini

y se agrega lo siguiente:

zend_extension=/usr/lib/php5/extensions/xdebug.so
xdebug.remote_enable = on
xdebug.remote_handler = dbgp
xdebug.remote_host = localhost
xdebug.remotes_port=9000

Con esto ya podemos hacer un debug de codigo php.

Programa en Java y disfruta de un café lojano » Java – Netbeans - March 11, 2010 05:16 AM
Problemas con Jena y Google App Engine

A los tiempos un post.

Ahora no presento soluciones sino un problema.

Estamos desarrollando un proyecto en el cual trabajamos con Jena (para hacer unas consultas a una ontología). La aplicación es Web y estamos trabajando con GWT 2 (como la han mejorado a la esta herramienta, al fin pude hacer debbug desde la Mac!) la GUI full Ajax y RPC sin problemas. Necesitamos subirla a un servidor público y se me ocurrió subirla al Google App Engine, desde un principio tuve dudas relacionadas sobre las restricciones que impone Google (número de archivos y clases restringidas) y las dudas se convirtieron en problemas.

El problema se da en el método hasNext() de la clase ResultSet para versión 2.5.7 del Jena al parecer deriva de algunas clases no permitidas. Cambié los .jar del Jena a la versión 2.6.2 y el problema se dio en el método create(String) de la clase QueryFactory.

He encontrado los siguientes links que mencionan el algo el problema:

Aquí se detallan los Frameworks y APIs  soportados parcial, total o definitivamente por Google App Engine

Mientras que en éste link se habla sobre un problema que se presenta.

Finalmente aquí se presenta una solución (aunque no estoy seguro que sea para mi problema) trataré de implementar lo que se recomienda.

Por ahora el problema está sin solución, si alguien ha logrado solucionar o tienes más detalles del problema y quiere compartir sus ideas o soluciones, les pido su ayuda.


Héctor - March 05, 2010 02:47 AM
ANIVERSARIO

:hat: el blog cumplio 4 años :hat:

Héctor - March 05, 2010 02:47 AM
ANIVERSARIO

:hat: el blog cumplio 4 años :hat:

Programa en Java y disfruta de un café lojano » Java – Netbeans - January 25, 2010 02:27 AM
Un cliente Jersey que consume Google AJAX search API – Rest & Java

Uno de los API’s, dentro del mundo Java, que permiten trabajar con servicios Web basados en REST se denomina Jersey. Este API viene incluido con NetBeans desde ya hace algunas versiones atrás. Inclusive en el sitio de NetBeans existe documentación en donde se muestra como crear un servicio Web Rest basado en una tabla de una base de datos. Pero no existe ninguna documentación, al menos en sitio de NetBeans, que muestre como crear un cliente Jersey que consuma algún servicio Rest.

Buscando en la Web encontré un par de ejemplos. Uno de ellos Consuming RESTful Web Services With the Jersey Client API, desarrolla un cliente (en modo consola) de Twitter.

Otro ejemplo bastante sencillo, pero no menos ilustrativo se llama Yahoo Search Restful Client using Jersey, aquí se desarrolla un cliente que consume el servicio de búsqueda de Yahoo. Dicho servicio de búsqueda devuelve los resultados en XML así que es necesario usar JAXB Binding para obtener las clases que representaran la información.

No he encontrado un ejemplo en donde se trabaje con JSON, tomando en cuenta que ese formato es bastante popular hoy por hoy. Así que me decidí a elaborar un cliente Jersey que consuma el API de Google AJAX search que devuelve información en JSON. El código desarrollado es el siguiente:

package ecc.edu.utpl;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import java.util.Scanner;
import javax.ws.rs.core.MediaType;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
 *
 * @author jorgaf
 */
public class ClienteGoogle {

    public static void main(String[] args) {
        Scanner lector = new Scanner(System.in);
        String consulta;
        char opc = 'S';
        String URI = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=";
        Client cliente = Client.create();
        do {
            do {
                System.out.print("Ingrese el texto a buscar: ");
                consulta = lector.nextLine();
                consulta = consulta.trim();
                consulta = consulta.replace(" ", "%20");
            } while (consulta == null || consulta.length() == 0);

            URI += consulta;
            WebResource recurso = cliente.resource(URI);
            String result = recurso.accept(MediaType.APPLICATION_JSON).get(String.class);
            try {
                System.out.printf("---RESULTADOS:%s---\n", consulta);
                mostarResultados(result);
                System.out.printf("---%d páginas aprox.---\n",
                        obtenerTotalResultados(result));
            } catch (JSONException ex) {
                ex.printStackTrace();
            }
            System.out.println("\n-------------------------------");
            System.out.println("¿Desea realizar otra búsqueda?");
            System.out.print("Presione S(Si) o N(No): ");
            opc = lector.next().charAt(0);
            System.out.println();
        } while (opc != 'N');

    }

    public static void mostarResultados(String respuesta) throws JSONException {
        JSONObject objJSON = new JSONObject(respuesta);
        JSONObject responseData = objJSON.getJSONObject("responseData");
        JSONArray results = responseData.getJSONArray("results");
        for (int i = 0; i < results.length(); i++) {
            JSONObject link = results.getJSONObject(i);
            System.out.printf("URL: %s\n", link.getString("url"));
            System.out.printf("Title: %s\n", link.getString("title"));
            System.out.printf("Contenido: %s\n", link.getString("content"));
            System.out.println();
        }
    }

    public static long obtenerTotalResultados(String respuesta){
        long total = 0;
        try {
            JSONObject objJSON = new JSONObject(respuesta);
            JSONObject responseData = objJSON.getJSONObject("responseData");
            JSONObject cursor = responseData.getJSONObject("cursor");
            total = cursor.getLong("estimatedResultCount");
        } catch (JSONException ex) {
            ex.printStackTrace();
        }
        return total;
    }
}

Para poder realizar este cliente tuve que agregar las siguientes librerías adicionales:

Las tres primeras librerías se pueden descargar desde la Web haciendo clic en cada uno de los enlaces. Pero el último lo agregué desde NetBeans. La siguientes imágenes les guiarán en ese proceso.

Menu a utilizar para agregar la librería

Librería que debe agregar

Los métodos mostrarResultados y obtenerTotalResultados, son los encargados de trabajar con JSON. Para conocer la estructura JSON de la información devuelta por Google hagan clic aquí y busquen el tema “Entornos Flash y otros entornos que no utilizan JavaScript” que casi se encuentra al final.

Espero que este post les ayude.


Programa en Java y disfruta de un café lojano » Java – Netbeans - November 10, 2009 03:26 AM
Slideshow de Imágenes con JavaFX

En ésta ocasión Scott Hommel nos muestra en 6 pasos (un tutorial corto pero bueno) como crear una aplicación JavaFX que muestra un grupo de fotografías con transición automática y efectos entre transición, al estilo diapositivas. En realidad resulta bastante sencillo el ver cómo se realiza la aplicación con pocas líneas de código.

La herramienta que ha utilizado en éste caso es NetBeans, y a propósito de NetBeans ya está disponible para la descarga la versión 6.8 Beta y en el blog de Avbravo pueden encontrar una entrada NetBeans 6.8 Beta JavaFX Ubuntu 9.10 el nombre es por demás descriptivo de lo que encontrarán. Sería interesante hacer el slideshow con las herramientas del post de Avbravo.

Los 6 pasos que se muestran en el post Creating an Image Slideshow:

  1. Crear el proyecto Slideshow
  2. Crear el Stage y Scene
  3. Configurar el color de fondo
  4. Cargar y mostrar las imágenes
  5. Agregar una línea de tiempo
  6. Agregar la transición

El post de Hommel es interesante porque al final se muestran otros recursos relacionadas con cada una de las actividades realizadas para crear el post.

Espero que sea de su interés.


NetBeans Community Docs Blog - October 17, 2009 07:21 PM
Who's Who?

Hello all,

This team has seen some changes in the recent past. James Branam, NetBeans Community Docs Manager (March 2007 - August 2009) had stepped down from this program on August 31st, 2009.

He had made an announcement as well, you may read it over his blog. To quote,

"After two and a half years of managing the NetBeans Community Docs program, I've decided to step down."
While James decided to step down, he passed the torch to another technical writer from his NetBeans Documentation Team, Jeff Rubinoff. So, let us give him a warm welcome and the cooperation, he may require to make the program, better for you and the community.

In the end, I would like you all to thank James for initiating this program and helping to increase the adoption of the NetBeans IDE through the documentation created for the community, by the community.

Programa en Java y disfruta de un café lojano » Java – Netbeans - September 28, 2009 04:19 AM
Combinando JavaFX y Swing

Como ya lo mencionó Charles Ditzel en su post What’s Wrong With JavaFX and What Needs Fixing? una de las falencias de JavaFX es la ausencia de ciertos controles (ejemplo: árboles y tablas), ésta debilidad se acrecienta cuando lo comparamos con Swing que cuenta con muchos más. (Para ver una lista de los componentes JavaFX visiten: Top 5 most Important Features in JavaFX 1.2).

Para cubrir de cierta forma ésta debilidad, es posible utilizar dentro de una aplicación JavaFX componentes Swing; también se lo puede hacer en sentido contrario, en una aplicación Swing usar JavaFX, pero a través del hacking lo que no garantiza que siga funcionando en versiones posteriores. Para conocer más visiten: How to use JavaFX in Your Swing aplicaciones. Ésta característica, la capacidad de JavaFX de soportar componentes Swing, ha sido explotada en el JavaOne en las conocidas sesiones “Extreme GUI Make Over”, en donde se hace un cambio extremo a una aplicación Swing, ésta vez, para las mejoras se ha utilizado JavaFX dando como resultado una aplicación hibrida entre JavaFX y Swing.

Amy Fowler ha colaborado en el cambio extremo de GUI y ha elaborado un post resumen, en el cual muestra una lista de 10 + 1 pasos necesarios para incluir controles Swing dentro de una aplicación JavaFX. Los 10 pasos son los siguientes:

  • Tocar las bases del lenguaje
  • Descargar el SDK JavaFX
  • Crear un proyecto en NetBeans
  • Crear el “Stage”
  • Definir el layout
  • Embeber los componentes Swing
  • Enganchar los Listeners
  • Agregar efectos
  • Agregar movimiento
  • Hacer tus conclusiones

Para leer el post completamente lee el post: Insider’s Guide to Mixing Swing and JavaFX