miércoles, 16 de diciembre de 2009

Sueños

Han soñado en estar en lugar en donde no hay nada pero nada que los preocupe.
Han soñado con estar donde siempre tuvieron que haber estado.
No mires nunca hacia atrás. olvídalos.
- Pero cuando regresare nunca?
- Nunca es demasiado tiempo.
Con pasos titubeantes y una mirada un poco triste, regresaras.
- Jamas, donde voy no existe el tiempo.
El tiempo no es importante por ahora, promete que no me vas olvidar.
- Olvidarte jamas.
Quiero que hagas algo por mi que cuentes mi historia a todos, que le digas quien realmente quien soy.
- Quieres volar.
La verdad me marean las alturas.
- Si nunca lo intentas jamas lo sabrás.
Nunca digas nunca.
Ok, prométeme que no me vas a soltar.
- Mira es este el lugar que he creado para ti, te gusta.
No veo nada.
- Tienes que creer y aparecerá justo enfrente de ti.
Como lo haces.
- Jamas guardo nada para el regreso.
Nunca me habías dicho eso.
- Nunca preguntaste.
Quiero regresar este lugar me da miedo.
- Vete, regresa.
Pero dime que sientes.
Miedo.
- Crecer.
Sueños.
- Mi mundo.
Sentimientos, Amor.
- Yo no se que es eso.
Lo sabes lo has sentido por alguien o por algo.
- Jamas
- Vete
Pero necesito que este conmigo....

-No te acuerdas verdad la primera vez que vi tu mundo, era extraño llenas de reglas estúpidas

Pero son mis Padres entiende, lo tengo que hacer, es para cuando sea grande tenga una buena educación, un empleo.

-Solo que lo mejor se hacer mejor es vender sueños.
-Solo que lo mejor de mi eras tu.
-Siempre digo cosas estúpidas, pero en realidad nunca quise lastimarte.
-Este es mi mundo...tu eres mi mundo.
-Siempre los fuiste desde el primer día que te vi brincando y cantando tan feliz, quizas algún día escribire una canción con tu nombre...

Continuara.......



FIN

miércoles, 30 de septiembre de 2009

Mew en México

Es muy difícil decir que muchas veces tienes un aspecto agradable, puede ser...
Es fácil saber que esta vez no me tomaste en encuenta quizás sea tu manera de decir superarlo,..,quizás sea la única manera que conoces para decir que es lo que me merezco...

Alguna vez hace no mucho tiempo solías ser tímida y aburrida, una especie de criatura rara,...,me acuerdo, pero quizás no vale la pena, no se si sueles dar besos tan apasionados, durante viajes cortos, quizás solo dices que soy tierno cuando hay algún camino junto a la ventana...

Siempre suelo hacer muchas cosas sin pensar en ti, pero realmente hoy me di cuenta que nunca recurro a ti, muchos deseos están por el aire, pero serán olvidados, porque quizás siempre tuvieron que estar muertos, pero
los verdaderos recuerdos viajan atravez del tiempo en una especie de maquina, se detienen en el momento menos indicado,
solo para recordarte quien eres,....

....Tiempo..

Hace tres semanas, estaba nuevamente ahí aparado escuchando un sonido tan espectacular, que tengo que recordar por el resto de mi vida..
no importo soportar la lluvia, al llegar valió la pena, era como estar en una cascada, como si alguien corriera tan veloz que nadie pudiera verlo,
como cuando tenia clase de Biología,...,

Me tiraría al piso para sentir el frió sobre mi mejilla, brincaría hasta caer nuevamente de la resbaladilla, caminaría de vez en cuando hasta las tres de la mañana justo antes de amanecer justo cuando esta el alba,...

martes, 23 de junio de 2009

Copiar archivos de maquina a otra con scp (sh)

Hace un par de días me tope con el problema de enviar archivos de una maquina a otra y ocupe el siguiente comando:

isaac@mew:~/Escritorio$ scp -r /home/isaac/xml_redes/redcolego_q/ usuario@dominio_o_ip:/usr/local/apache-tomcat-5.5.17/webapps/redes/xml/

y el comando funciona a la perfección solo con un detalle que copio la todos los archivos incluyendo a la carpeta redcolego_q/ dentro de xml/, y yo solo necesitaba copiar el contenido.

Con este comando solo copias el contenido.

scp /home/isaac/xml_redes/redcolego_q/* usuario@dominio_o_ip:/usr/local/apache-tomcat-5.5.17/webapps/redes/xml/

También lo podemos hacer con un .sh le mostrare como, aunque es mas sencillo con con el ejemplo de arriba, con el .sh podemos incluir mas funcionalidades.

Primero necesitamos un keygen y manera de optenerlo es:
Esto es para la maquina donde copiaremos los archivos, de esta manera cuando ejecutemos el comando no pediran el password con cada archivo.
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@dominio_o_ip

acontinuación les pedira el password

martes, 16 de junio de 2009

Itex en una aplicación web (Generar pdf)

Por fin encontré como enviar un documento pdf generado de manera dinámica desde el servidor al cliente, pues resulta que encontré un código en la web que según lo hacia pero tenia un linea mal y quizás la mas importante por lo general cuando llamamos a un servlet lo hace por metodo

public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{....}

el cual realiza una acción según sea el caso puede responder con texto plano, html, xml, json ect, pero también puede ocupar el método

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}

También puede responder de la misma manera que goGet, si nosotros queremos responder con html,json, xml, texto plano, o con un pdf que es al final de cuentas es resp.setContentType("application/pdf") que es un objeto de tipo HttpServletResponse resp que es lo que el servlet de responderá al cliente, como nosotros no sabemos como un cliente puede solicitar nuestro pdf nosotros tendremos que generar un método para ambos

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}

Que en el caso de netbeans lo hace al crear un servlet, bueno si lo hacen con netbeans borren lo que tenga dentro de ese metodo.

El código es el siguiente:


package pdf.servlet;



import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.Paragraph;


/**
*
* @author isaac
*/

public class CrearPdf extends HttpServlet {

/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.

* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

try {

response.setContentType("application/pdf"); // Code 1
Document document = new Document();
PdfWriter.getInstance(document,response.getOutputStream()); // Code 2
document.open();
float[] widths = {25f, 25f, 20f,15f,15f};
PdfPTable table = new PdfPTable(5); //Code 3
table.setHorizontalAlignment(Element.ALIGN_LEFT);
table.setWidthPercentage(100);
PdfPCell cell =new PdfPCell(new Paragraph("Prueba"));
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setColspan(5);
table.addCell(cell);
table.addCell("Scanned Fax FileName");
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell("Corporate Name");
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell("Corporate Account");
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell("Credit");
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
table.addCell("Debit");
cell.setHorizontalAlignment(Element.ALIGN_CENTER);



document.add(table);
document.close();

}catch(DocumentException e){
e.printStackTrace();
}catch (Exception e) {

// TODO: handle exception

}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}



/**
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}


/**
* Returns a short description of the servlet.
* @return a String containing servlet description
*/

@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>

}

El web.xml es el siguiente en el caso de Netbeans no es necesario puesto que lo mapea cuando creas el servlet.

<servlet>
<servlet-name>CrearPdf</servlet-name>
<servlet-class>pdf.servlet.CrearPdf</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>CrearPdf</servlet-name>
<url-pattern>/creaPdf</url-pattern>
</servlet-mapping>

y final mente run...

jueves, 11 de junio de 2009

JPanel transparente (Parte 4)

Lo primero que quiero decir es que ya limpie mi escritorio, bueno primero quiero reconocer que algunas ideas que tome para el panel transparente por no decir todo el código lo tome de este blog http://edisoncor.wordpress.com/2007/10/06/jpanel-con-imagen/, un punto mas corregí el código de la parte tres para que quede mejor el borde, después agregare los códigos, bueno antes quiero que observen como van mejorando la interfaz.



Este es el cogido del borde mejorado:

package vista;

/**
*
* @author isaac legorreta
*/

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JLayeredPane;


public class IPanel extends JLayeredPane
{
private Color color1 = new Color(255,255,255);
private Color color3 = new Color(1,1,1);
private Color color2 = new Color(0,0,0);
private int arcw=25;
private int arch=25;

@Override
protected void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g.create();
float x=getWidth();
float y=getHeight();
g2.setPaint(new GradientPaint(0.0f, 0.0f, getColor1().darker(),
0.0f, getHeight(), getColor2().darker()));
g2.fill(new RoundRectangle2D.Double(0, 0, x, y, getArcw(),getArch()));
g2.setPaint(new GradientPaint(0.0f, 0.0f,getColor3(),
getWidth(), getHeight(),getColor3()));
g2.drawRoundRect(0, 0, getWidth()-1 , getHeight()-1, getArcw()-2,getArch()-6);
g2.setPaint(Color.black);
}

public Color getColor3() {
return color3;
}

public void setColor3(Color color3) {
this.color3 = color3;
}



public int getArch() {
return arch;
}

public void setArch(int arch) {
this.arch = arch;
}

public int getArcw() {
return arcw;
}

public void setArcw(int arcw) {
this.arcw = arcw;
}

//Métodos set y get que nos permiten modificar los colores

public Color getColor1() {return color1;}

public void setColor1(Color color1) {this.color1 = color1;}

public Color getColor2() {return color2;}

public void setColor2(Color color2){this.color2 = color2;}

}

Este el código para que el panel sea transparente:


package vista;

import java.awt.AlphaComposite;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;


/**
*
* @author Edisoncor
*/
public class IPanelTrans extends IPanel{

private float tran= 0.8f;



@Override
protected void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
AlphaComposite old = (AlphaComposite) g2.getComposite();
g2.setComposite(AlphaComposite.SrcOver.derive(getTran()));
super.paintComponent(g);
g2.setComposite(old);
}

public float getTran() {
return tran;
}

public void setTran(float tran) {
this.tran = tran;
}

}

Como agragarlo por si tienen duda en su palette hay una opción beans dan click en choose bean, aparecera una pantalla como la siguiente y escriben lo siguiente vista.IPanelTrans despues la arrastran hasta su FormPanel y listo


En la propiedades aparecera un atributo llamado tran por defecto tiene .5 pero pueden cambiarlo...




Bueno en la parte uno explico como agregarlo a un FormPanel y despues a un Frame, como pueden notar no parece transparente, bueno en blog donde tome este codigo esta un JPanel con imagen de fondo tome el código y lo mejore un poco para que puedan agregar una imagen desde las propiedades (ruta), pero eso lo explicare en la parte 5...

miércoles, 10 de junio de 2009

JPanel con Gradiente redondeado (Parte 3)

Bueno la parte dos de este pequeño tutorial tiene solo la elección de dos colores este nuevo tiene la elección de tres colores, también pueden elegir el color del borde, este es el código:

package vista;

/**
*
* @author isaac legorreta
*/

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JLayeredPane;


public class IPanel extends JLayeredPane
{
private Color color1 = new Color(255,255,255);
private Color color3 = new Color(1,1,1);
private Color color2 = new Color(0,0,0);
private int arcw=25;
private int arch=25;

@Override
protected void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g.create();
float x=getWidth();
float y=getHeight();
g2.setPaint(new GradientPaint(0.0f, 0.0f, getColor1().darker(),
0.0f, getHeight(), getColor2().darker()));
g2.fill(new RoundRectangle2D.Double(0, 0, x, y, getArcw(),getArch()));
g2.setPaint(new GradientPaint(0.0f, 0.0f,getColor3(),
getWidth(), getHeight(),getColor3()));
g2.drawRoundRect(0, 0, getWidth()-1 , getHeight(), getArcw(),getArch());
g2.setPaint(Color.black);
}

public Color getColor3() {
return color3;
}

public void setColor3(Color color3) {
this.color3 = color3;
}



public int getArch() {
return arch;
}

public void setArch(int arch) {
this.arch = arch;
}

public int getArcw() {
return arcw;
}

public void setArcw(int arcw) {
this.arcw = arcw;
}

//Métodos set y get que nos permiten modificar los colores

public Color getColor1() {return color1;}

public void setColor1(Color color1) {this.color1 = color1;}

public Color getColor2() {return color2;}

public void setColor2(Color color2){this.color2 = color2;}

}




Espero hacer el panel transparente, pero que no tenga problemas al agregar widgets

lunes, 8 de junio de 2009

JPanel con Gradiente redondeado con widgets de swing para Netbeans (Parte 2)

En la primera parte vimos como hacer un gradiente con un JLayeredPane, ahora el siguiente paso es hacer los bordes redondeados. el código es el siguiente.

package vista;
/**
*
* @author isaac legorreta
*/

import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JLayeredPane;


public class IPanel extends JLayeredPane
{
private Color color1 = new Color(255,255,255);
private Color color2 = new Color(0,0,0);
private int arcw=25;
private int arch=25;

@Override
protected void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g.create();
float x=getWidth();
float y=getHeight();
g2.setPaint(new GradientPaint(0.0f, 0.0f, getColor1().darker(),
0.0f, getHeight(), getColor2().darker()));
g2.fill(new RoundRectangle2D.Double(0, 0, x, y, getArcw(),getArch()));
g2.setPaint(new GradientPaint(0.0f, 0.0f,getColor2(),
getWidth(), getHeight(),getColor1()));
g2.drawRoundRect(0, 0, getWidth() , getHeight(), getArcw()+2,getArch()+2);
g2.setPaint(Color.black);
}

public int getArch() {
return arch;
}

public void setArch(int arch) {
this.arch = arch;
}

public int getArcw() {
return arcw;
}

public void setArcw(int arcw) {
this.arcw = arcw;
}

//Métodos set y get que nos permiten modificar los colores

public Color getColor1() {return color1;}

public void setColor1(Color color1) {this.color1 = color1;}

public Color getColor2() {return color2;}

public void setColor2(Color color2){this.color2 = color2;}

}


Y para agregarlo a su JFrame esta en la parte 1 de este pequeñito tutorial, mas o memos le debería quedar algo como esto.

viernes, 29 de mayo de 2009

JPanel con Gradiente con widgets de swing para Netbeans (Parte 1)

Que tal hace unos días tuve la necesidad de crear una interfaz de tipo escritorio por supuesto en java, pero no me gustan la apariencia de sus widgets así que me puse a investigar un poco y encontré como hacer un panel con gradiente cosa que explicare más adelante, después un amigo donde trabajo encontró una libreria de widgest para swing


después quede muy sorprendido puesto que la GUI que hice se ve bastante mejor bueno; les explico primero como hacer un panel con gradiente el código fue tomado de muchos blogs el código es este:


package vista;
/**
*
* @author isaac
*/
import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.JLayeredPane;

/**
* @author Salazar Reque Miguel
*/
public class IPanel extends JLayeredPane
{
private Color color1 = new Color(255,255,255);
private Color color2 = new Color(0,0,0);

@Override
protected void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g.create();
Rectangle clip = g2.getClipBounds();
float x=getWidth();
float y=getHeight();
g2.setPaint(new GradientPaint(0.0f, 0.0f, getColor1().darker(),
0.0f, getHeight(), getColor2().darker()));
g2.fillRect(clip.x, clip.y, clip.width, clip.height);
}

//Métodos set y get que nos permiten modificar los colores

public Color getColor1() {return color1;}

public void setColor1(Color color1) {this.color1 = color1;}

public Color getColor2() {return color2;}

public void setColor2(Color color2){this.color2 = color2;}

}

se preguntaran porque hereda de JLayeredPane y no de JPanel la respuesta es porque lo vamos a agregar a un panel form de netbeans y este panel se pueden soltar y arrastrar puesto que tiene propiedades diferentes a un Jpanel.

Paso 1.

Crear un proyecto en Netbeans.


2. Crear un paquete que se llame vista o como se les de la gana por ejemplo:
influenza.porcina
influenza.marciana

3. Crear una clase que se llama IPanel y copiar el código de arriba.




4. Crear un JPanel Form -> dan click derecho en el paquete de su proyecto, si no aparece esa opción, hay mismo busquen other...

aparecerá una ventana como esta:


den next y pongan el nombre que ustedes quieran en este caso se llamara Panel, el proyecto hasta ahora esta mas o menos así:



4.1 * Vayan por un refresco al Oxxo mas cercano o por una cerveza, y me invitan una vale.



5. Despues como diablos agregar nuestra clase a nuestro Panel una es hacer una jar y agregarlo a la palette de netbeans y otro es ocupar Beans en especial la opción de choose bean, antes compilen todo el pequete vista quieren...

aparecera una venta con un campo de texto:

escriban vista.IPanel y listo tienen su panel con gradiente super chido.




6. pueden hacer mas grande el IPanel o combiar sus colores




click derecho en panel propiedades color1 y color2, como pueden notar los los atributos de nuestra clase IPanel.



7. agregarlo a un JFrame Form
Esta en las opciones del paso 4:

Compilar el paquete vista ir a la papeleta en Beans elegir nuevamente Choose beans escribir ahora vista.Panel



Dar Ok, arrastrarle hasta el JFrame form y listo.





Después vayan a la clase Ventanita denle run y listo, tiene que aparecer algo mas o menos asi.




* el paso 4.1 no es necesario pero te ayudara a relajarte, pero puede hacer que te encuentres con un embotellamiento alcoholico y no te permita terminar este pequeñito proyecto

miércoles, 22 de abril de 2009

wxPython

Hola, si alguien esta interesado en en aprender wxPython encontre un tutorial bastante bueno para aprender a manejar widgests, eventos, es muy básico pero a mi me funciono para entender aqui el codigo y el link :http://www.retronet.com.ar/?q=node/148

#!/usr/bin/python
try:
import wx
except ImportError:
raise ImportError,"Se requiere el modulo wxPython"

class simpleapp_wx(wx.Frame):
def __init__(self,parent,id,title):
wx.Frame.__init__(self,parent,id,title)
self.parent = parent
self.initialize()

def initialize(self):
grilla = wx.GridBagSizer()
self.entrada = wx.TextCtrl(self,-1,value=u"Ingrese un texto:", style=wx.TE_PROCESS_ENTER)
grilla.Add(self.entrada,(0,0),(1,1),wx.EXPAND)
self.entrada.Bind(wx.EVT_TEXT_ENTER, self.SiPulsaEnter)
boton = wx.Button(self,-1,label="Pulsame !")
grilla.Add(boton, (0,1))
boton.Bind (wx.EVT_BUTTON, self.SiCliqueaBoton)
self.etiqueta = wx.StaticText(self,-1,label='Hola !')
self.etiqueta.SetBackgroundColour(wx.BLUE)
self.etiqueta.SetForegroundColour(wx.RED)
grilla.Add(self.etiqueta, (1,0),(1,2), wx.EXPAND )
grilla.AddGrowableCol(0)
self.SetSizerAndFit(grilla)
self.SetSizeHints(-1,self.GetSize().y,-1,self.GetSize().y )
self.entrada.SetFocus()
self.entrada.SetSelection(-1,-1)
self.Show(True);

def SiCliqueaBoton(self,event):
self.etiqueta.SetLabel(self.entrada.GetValue() + "Cliqueo el boton!")
self.entrada.SetFocus()
self.entrada.SetSelection(-1,-1)

def SiPulsaEnter(self,event):
self.etiqueta.SetLabel(self.entrada.GetValue() + "Pulso enter!")
self.entrada.SetFocus()
self.entrada.SetSelection(-1,-1)

if __name__ == "__main__":
app = wx.App()
frame = simpleapp_wx(None,-1,'Mi aplicacion')
app.MainLoop()

En esta pagina se explica cada metodo, y como ejecutarlo desde la terminal, les tiene que abrir una ventana como la siguiente:


Adios......

martes, 31 de marzo de 2009

Como configurar GWT-EXT en NetBeans

Como configurar GWT-EXT, primero tienen que descargar el jar de Gwt-Ext y la libreria de java script que nos permite manejar widgets (Js-Ext), de este sitio http://gwt-ext.com/download/


Paso 1: El mas importante, tener ganas de terminar este pequeñito tutorial.

Paso 2: Copiamos las libreria de js-ext, pero se preguntaran donde diablos esta,
http://yogurtearl.com/ext-2.0.2.zip , la reombramos con js y la copiamos a nuestro proyecto dentro de Web Pages



Después debería estar así:


3. Agregamos el jar de gwtext.jar que esta en el zip en libreries de nuestro proyecto:

Dar click derecho en libreries, ADD jar/Folder.



4. Configuar Main.gwt.xml este archivo esta nuestro MainEntryPoint, este tiene quien es la clase principal que contiene el metodo para iniciar una aplicación gwt, debemos colocar lo siguiente tag :

<inherits name="com.gwtext.GwtExt"/>

<?xml version="1.0" encoding="UTF-8"?>
<module>
<inherits name="com.google.gwt.user.User"/>
<entry-point class="
org.yournamehere.client"/>
<!-- Do not define servlets here, use web.xml -->
<inherits name="com.gwtext.GwtExt"/>
</module>



5. Tomen un descanso

6. Configuarar las librerias de js en html o jsp donde va a estar alojada nuestra aplicación gwt, para este ejemplo sera: welcomeGwt.html, primero borren lo que tienen y copian lo siguiente:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta name='gwt:module' content='org.yournamehere.Main=org.yournamehere.Main'>
<title>Main</title>
<link rel="stylesheet" type="text/css" href="js/resources/css/ext-all.css"/>
<link rel="stylesheet" type="text/css" href="js/resources/css/xtheme-gray.css" />
<script type="text/javascript" src="js/adapter/yui/yui-utilities.js"></script>
<script type="text/javascript" src="js/adapter/yui/ext-yui-adapter.js"></script>
<script type="text/javascript" src="js/ext-all.js"></script>
</head>
<body>
<script language="javascript" src="org.yournamehere.Main/org.yournamehere.Main.nocache.js"></script>
</body>
</html>

7. Llamen a ala policía escucho ruidos extraños en mi cubículo...
En este paquete org.yournamehere.client hay una clase que es la principal-> MainEntryPoint remplacen su código por este:

/*
* MainEntryPoint.java
*
* Created on 17 de junio de 2009, 06:39 PM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package org.yournamehere.client;

import com.google.gwt.core.client.EntryPoint;
import com.gwtext.client.core.RegionPosition;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.TabPanel;
import com.gwtext.client.widgets.Window;
import com.gwtext.client.widgets.layout.BorderLayout;
import com.gwtext.client.widgets.layout.BorderLayoutData;

/**
*
* @author isaac
*/
public class MainEntryPoint implements EntryPoint {

/** Creates a new instance of MainEntryPoint */
public MainEntryPoint() {
}

/**
* The entry point method, called automatically by loading a module
* that declares an implementing class as an entry-point
*/
public void onModuleLoad() {

TabPanel tabPanel = new TabPanel();
tabPanel.setActiveTab(0);

Panel tab1 = new Panel();
tab1.setTitle("Bogus Tab");
tab1.setHtml(getBogusMarkup());
tab1.setAutoScroll(true);

Panel tab2 = new Panel();
tab2.setTitle("Another Tab");
tab2.setHtml(getBogusMarkup());
tab2.setAutoScroll(true);

Panel tab3 = new Panel();
tab3.setTitle("Closable Tab");
tab3.setHtml(getBogusMarkup());
tab3.setAutoScroll(true);
tab3.setClosable(true);

tabPanel.add(tab1);
tabPanel.add(tab2);
tabPanel.add(tab3);

//west panel
Panel navPanel = new Panel();
navPanel.setTitle("Navigation");
navPanel.setWidth(200);
navPanel.setCollapsible(true);

BorderLayoutData centerData = new BorderLayoutData(RegionPosition.CENTER);
centerData.setMargins(3, 0, 3, 3);

BorderLayoutData westData = new BorderLayoutData(RegionPosition.WEST);
westData.setSplit(true);
westData.setMargins(3, 3, 0, 3);
westData.setCMargins(3, 3, 3, 3);

final Window window = new Window();
window.setTitle("Layout Window");
window.setClosable(true);
window.setWidth(600);
window.setHeight(350);
window.setPlain(true);
window.setLayout(new BorderLayout());
window.add(tabPanel, centerData);
window.add(navPanel, westData);
window.setCloseAction(Window.HIDE);
window.show();
}

private static String getBogusMarkup() {
return "
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. " +
"Sed metus nibh, sodales a, porta at, vulputate eget, dui. " +
"In pellentesque nisl non sem. Suspendisse nunc sem, pretium eget, " +
"cursus a, fringilla vel, urna.";
}

}

Primero crea un TabPanel con tres pestañas y después es agregado ala ventana en la posición del centro atravez de:
BorderLayoutData centerData = new BorderLayoutData(RegionPosition.CENTER);
centerData.setMargins(3, 0, 3, 3);
También contiene otro panel en zona oeste que es agregado a la ventana con:
BorderLayoutData westData = new BorderLayoutData(RegionPosition.WEST);
westData.setSplit(true);
westData.setMargins(3, 3, 0, 3);
westData.setCMargins(3, 3, 3, 3);

8 . Run al archivo welcomeGwt.html despues tendran algo como esto:


Como ven es facil se pueden hacer aplicaciones bastantes vistosas, ademas de ser rapidas, depues explicare como comunicar estas GUI mediante RPC con aplicaciones cliente servidor...

Continuara

ComboBox remoto con GWT-EXT (json,jsp) con Java

Bueno supongamos que tenemos una tabla en alguna bd, y lo único que nos interesa es hacer un combobox que muestre un nombre y que tenga como value una clave:

sql:
select cvetpocit,nomtpocit from reftpocit

el modelo seria algo como esto:

/**
*
* @author isaac
*/
public class Citacion {

private String cve;
private String nombre;

public String getCve() {
return cve;
}
public void setCve(String cve) {
this.cve = cve;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
}

el contenedor hecho con una conexion jdbc de java:


import conexion.connectionSelGWT;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import xxx.xxx.client.referencia.modelo.Citacion;

/**
*
* @author isaac
*/

public class ContenedorTpoCitacion {

private Connection conexion;
private Statement instruccion;

public ContenedorTpoCitacion() throws SQLException {
connectionSelGWT conectaBase = new connectionSelGWT();
conexion = conectaBase.conectBase();
}

public List<Citacion> getTpoCitacion() throws SQLException{
List<Citacion> list = new ArrayList<Citacion>();
String query = "select cvetpocit,nomtpocit from reftpocit";
instruccion = conexion.createStatement();
ResultSet resultados2 = instruccion.executeQuery(query);
while (resultados2.next()) {
Citacion citacion = new Citacion();
citacion.setCve(resultados2.getString(1));
citacion.setNombre(resultados2.getString(2));
list.add(citacion);
}
resultados2.close();
conexion.close();
return list;
}

}


Esta es clase de la conexion aunque pueden ocupar la suya, despues voy a hacer un ejemplo con hibernate:


import java.sql.*;
import java.util.Vector;


/**
* A Class class.
*


* @author Mew
*/


public class connectionSelGWT{

private Connection conexion;
public Connection conectBase(){
String URL = "jdbc:oracle:thin:@suip_o_localhost:1521:su_SID";
String userid = "su_usuario";
String password= "su_pass";
connect();
try {
conexion = DriverManager.getConnection(URL, userid, password);

}catch (SQLException E) {
return conexion=null;
}

return conexion;
}

}

El contenedor:

import conexion.connectionSelGWT;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import xxxx.xxx.referencias.modelo.Citacion;

/**
*
* @author isaac
*/
public class ContenedorTpoCitacion {
private Connection conexion;
private Statement instruccion;

public ContenedorTpoCitacion() throws SQLException {
connectionSelGWT conectaBase = new connectionSelGWT();
conexion = conectaBase.conectBase();

}

public List getTpoCitacion() throws SQLException{
List list = new ArrayList();

String query = "select cvetpocit,nomtpocit from reftpocit";

instruccion = conexion.createStatement();



ResultSet resultados2 = instruccion.executeQuery(query);
while (resultados2.next()) {
Citacion citacion = new Citacion();
citacion.setCve(resultados2.getString(1));
citacion.setNombre(resultados2.getString(2));
list.add(citacion);

}
resultados2.close();
conexion.close();
return list;
}

}

La clase que crea la estructura del json para la vista:



import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import xxx.xxx.client.referencia.modelo.Citacion;

/**
*
* @author isaac
*/
public class JsonCitacion {

public String getTpsCitacion() throws JSONException, SQLException{
ContenedorTpoCitacion con = new ContenedorTpoCitacion();
List<Citacion> list = con.getTpoCitacion();
JSONObject jsonObj = new JSONObject();
jsonObj.put("totalCount",list.size()+"");
JSONArray array = new JSONArray();
for(Citacion ci:list){
JSONObject jsonDatos = new JSONObject();
jsonDatos.put("cve",ci.getCve());
jsonDatos.put("nombre",ci.getNombre());
array.put(jsonDatos);
}

jsonObj.put("datos",array);
return jsonObj.toString();
}

public static void main(String[] args) {
JsonCitacion json = new JsonCitacion();

try {

System.out.println(json.getTpsCitacion());

} catch (JSONException ex) {

Logger.getLogger(JsonCitacion.class.getName()).log(Level.SEVERE, null, ex);

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


la estructura que recibiria el combo de GWT-EXT seria la siguiente:

{"totalCount":"2","datos":[{"nombre":"Periodica","cve":"1"},{"nombre":"No Periodica","cve":"2"}]}

* las xxx son paquetes con nombre de mi trabajo pero bien le pueden poner otro nombre, es para que no vean donde trabajo jijijiji+++++.

el jsp llamado jsoncitas.jsp


<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="xxx.xxxx.referencias.mc.JsonCitacion"%>
<%@page import="java.sql.SQLException"%>
<%@page import="org.json.*"%>



<% JsonCitacion json = new JsonCitacion(); try { out.print(json.getTpsCitacion()); } catch (JSONException ex) { } catch (SQLException ex) { } %>

y por ultimo el combox solo pondre el codigo del combo, solo lo tienen que agregar a un panel y listo:

HttpProxy dataProxy = new HttpProxy("jsoncitas.jsp");
RecordDef recordDef = new RecordDef(new FieldDef[]{
new StringFieldDef("cve", "cve"),
new StringFieldDef("nombre", "nombre")
});
JsonReader reader4 = new JsonReader(recordDef);
reader4.setRoot("datos");
reader4.setTotalProperty("totalCount");
Store store5 = new Store(dataProxy, reader4);
store5.load();

final ComboBox cbCitacion = new ComboBox();
cbCitacion.setStore(store5);
cbCitacion.setForceSelection(true);
cbCitacion.setMinChars(1);
cbCitacion.setFieldLabel("Tipo citación");
cbCitacion.setDisplayField("nombre");
cbCitacion.setMode(ComboBox.REMOTE);
cbCitacion.setTriggerAction(ComboBox.ALL);
cbCitacion.setEmptyText("Enter tpo citación");
cbCitacion.setLoadingText("Searching...");
cbCitacion.setTypeAhead(true);
cbCitacion.setSelectOnFocus(true);
cbCitacion.setWidth(200);
cbCitacion.setHideTrigger(false);
cbCitacion.addListener(new ComboBoxListenerAdapter() {

public void onSelect(ComboBox comboBox, Record record, int index) {

String tpoCita = Integer.parseInt(record.getAsString("cve"));
MessageBox.alert("hola "+tpoCita);
}
});

y por ultimo les debe quedar algo como esto:


jueves, 26 de marzo de 2009

exist base de datos nativa

Es muy facil de instalar solo tienen que descargarla de este link http://exist.sourceforge.net/ y colocar lo siguiente:

isaac@mew:~$ java -jar eXist-setup-1.2.5-rev8668.jar

claro antes deben posicionarse en la ruta donde esta el jar

para levantar la base:

isaac@mew:~$ cd /home/isaac/eXist/bin/
isaac@mew:~/eXist/bin$ nohup ./startup.sh &
[1] 15683
isaac@mew:~/eXist/bin$ nohup: se ignora la entrada y se añade la salida a «nohup.out»

isaac@mew:~/eXist/bin$

la linea un rojo es muy importante puesto que crea un proceso que no depende del proceso que lo lanzo en este caso el shell asi cuando cierren la terminal, la bd exist seguira viva



y para matarla


isaac@mew:~/eXist/bin$ ./shutdown.sh

Cosechador OAI en java

Bueno voy a empezar un proyecto con repositorios OAI pero antes debo crear un programita para cosecharlos aqui esta el link para descargar un API que te permite hacerlo:

http://www.oclc.org/research/software/oai/harvester.htm

miércoles, 25 de marzo de 2009

Pincel de firefox, prototipos

Esta es una aplicación bastante padre para realizar prototipos en caso de que en tu escuela o tu trabajo,imagina si te los piden de un día o otro, en pocas palabras los pantallasos..

miren quedan bastantes padres:


https://addons.mozilla.org/es-ES/firefox/addon/8487


grid en jquery con jsp y json (java)

Bueno un amigo me dijo que le ayuda a hacer un grid con jquery me paso el link de donde descargarlo y estaba en php pero yo lo voy a hecer en java con la ayuda de json (deben descargar el jar de json,ok) y la repuesta se hara con un jsp.
de este link lo pueden descargar http://www.trirand.com/blog/?page_id=6

Bueno primero creamos un proyecto web en cualquier IDE yo ocupe Netbeans, para ese ejemplo lo llamaremos Cliente (Es un clásico):



Como un tip cuando vayan a crear un bean con sus getters y setters no es necesario crear cada get y set por cada atributo netbeans milagrosamente nos ayuda (jijiji+++)



solo den click derecho y después insert code y despues crear getter y setter

Bueno esto los ayudara mucho pero de todas maneras pongo el código:

package modelo;

import java.util.Date;

/**
*
* @author isaac
*/
public class Cliente {

private String cve;
private Date date;
private String nombre;
private double cantidad;
private double tax;
private double total;
private String notas;

public double getCantidad() {
return cantidad;
}

public void setCantidad(double cantidad) {
this.cantidad = cantidad;
}

public String getCve() {
return cve;
}

public void setCve(String cve) {
this.cve = cve;
}

public Date getDate() {
return date;
}

public void setDate(Date date) {
this.date = date;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public String getNotas() {
return notas;
}

public void setNotas(String notas) {
this.notas = notas;
}

public double getTax() {
return tax;
}

public void setTax(double tax) {
this.tax = tax;
}

public double getTotal() {
return total;
}

public void setTotal(double total) {
this.total = total;
}




}

depues para crear el json el codigo es el siguiente: bueno antes la estructura del json que debemos crear es la siguiente:

{"total":"1","page":"1","rows":[{"id":"1","cell":["1","Wed Mar 25 15:16:35 CST 2009","Josue Isaac 0"
,"100.0","10.0","110.0","Salva al mundo usa JAVA 0"]},{"id":"2","cell":["2","Wed Mar 25 15:16:35 CST
2009","Josue Isaac 1","101.0","11.0","112.0","Salva al mundo usa JAVA 1"]},{"id":"3","cell":["3","Wed
Mar 25 15:16:35 CST 2009","Josue Isaac 2","102.0","12.0","114.0","Salva al mundo usa JAVA 2"]}],"records"
:"3"}

Pueden crear esta estructura con su base datos, pero no entrare en detalles:

package json;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import modelo.Cliente;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
*
* @author isaac
*/
public class Json {

public static String construlleJson() throws JSONException{
List listCliente = new ArrayList();
for(int i=0;i < cliente =" new">
cliente.setCve((i+1)+"");
cliente.setDate(new Date());
cliente.setNombre("Josue Isaac "+i);
cliente.setCantidad(100+i);
cliente.setTax(10+i);
cliente.setTotal(cliente.getCantidad()+cliente.getTax());
cliente.setNotas("Salva al mundo usa JAVA "+i);
listCliente.add(cliente);
}

JSONObject jsonObj = new JSONObject();
jsonObj.put("page","1");
jsonObj.put("total","1");
jsonObj.put("records", listCliente.size()+"");

JSONArray array = new JSONArray();
for(Cliente cliente:listCliente){
JSONObject jsonDatos= new JSONObject();
jsonDatos.put("id",cliente.getCve());
JSONArray arrayCell = new JSONArray();
arrayCell.put(cliente.getCve());
arrayCell.put(cliente.getDate());
arrayCell.put(cliente.getNombre());
arrayCell.put(cliente.getCantidad()+"");
arrayCell.put(cliente.getTax()+"");
arrayCell.put(cliente.getTotal()+"");
arrayCell.put(cliente.getNotas()+"");

jsonDatos.put("cell",arrayCell);

array.put(jsonDatos);
}
jsonObj.put("rows",array);


return jsonObj.toString();
}

public static void main(String[] args) throws JSONException {
System.out.println(Json.construlleJson());
}

}

Las lineas en rojo es donde creo una lista de clientes la cual servirá para crear la estructura del json pero ustedes pueden crear un cotenedor que les retorne una lista de Clientes, o con lo quieran llenar su grid, desde su bd. La linea en azul es el objeto principal json y el que retornamos al final, el código de jsp es este:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="json.Json"%>
<%@page import="org.json.*"%>
<%
String stringJson="";
try {
stringJson = Json.construlleJson();
} catch (JSONException ex) {
out.print("{\"totalCount\":0,\"datos\":[]}");
}
out.println(stringJson);
%>

el html o jsp que contrenda el grid de jquery tendra lo siguiente:

<html> <head> <title>jqGrid Demo</title>
<link rel="stylesheet" type="text/css" media="screen" href="eder/themes/basic/grid.css" />
<link rel="stylesheet" type="text/css" media="screen" href="eder/themes/jqModal.css" />
<script src="eder/jquery.js" type="text/javascript"></script>
<script src="eder/jquery.jqGrid.js" type="text/javascript"></script>
<script src="eder/js/jqModal.js" type="text/javascript"></script>
<script src="eder/js/jqDnR.js" type="text/javascript"></script>
<script type="text/javascript">


function load()
{
jQuery("#list2").jqGrid({ url:'json.jsp', datatype: "json", colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'], colModel:[ {name:'id',index:'id', width:55}, {name:'invdate',index:'invdate', width:90}, {name:'name',index:'name asc, invdate', width:100}, {name:'amount',index:'amount', width:80, align:"right"}, {name:'tax',index:'tax', width:80, align:"right"}, {name:'total',index:'total', width:80,align:"right"}, {name:'note',index:'note', width:150, sortable:false} ], rowNum:10, rowList:[10,20,30], imgpath: 'eder/themes/basic/images', pager: jQuery('#pager2'), sortname: 'id', viewrecords: true, sortorder: "desc", caption:"JSON Example" }).navGrid('#pager2',{edit:false,add:false,del:false});
}



</script>
</head>
<body onload="load()">
<table id="list2" class="scroll"></table>
<div id="pager2" class="scroll" style="text-align:center;"></div>
</body>
</html>


la estructura del proyecto seria la siguiente:


Al final el grid se debe paser a este:



Adios...

martes, 24 de marzo de 2009

TOMCAT Character Encoding

Hola este es un error comun cuando se trabaja con tomcat, es la codificación, para solucionar este problema hay dos maneras, pero yo recomiendo utilizar ambas, en GlassFish solo puedes utilizar la primera:

En tu jsp:

String paramEncoding =application.getInitParameter("PARAMETER_ENCODING");
request.setCharacterEncoding(paramEncoding);

Despues configura el arhivo web.xml de tu aplicación con lo siguiente:



La otra opcion es editar el archivo server.xml que se encuentra por lo general en ubuntu en:

isaac@mew:~$ cd /var/lib/tomcat5.5/conf
isaac@mew:/var/lib/tomcat5.5/conf$ ls
Catalina context.xml server-minimal.xml tomcat-users.xml
catalina.policy logging.properties server.xml tomcat-users.xml~
catalina.properties policy.d tomcat5.5 web.xml
isaac@mew:/var/lib/tomcat5.5/conf$

lo pueden abrir con vi o gedit y agregar la siguiente linea en Connector

URIEncoding="UTF-8"

aqui esta el ejemplo:
<context-param>
<param-name>PARAMETER_ENCODING</param-name>
<param-value>UTF-8</param-value>
</context-param>



Adios....

viernes, 13 de marzo de 2009

Tutorial de hibernate

La conexion de hibernate la tome de este blog, este super chido te explica, paso a
paso, como crear un proyecto con hibernate con eclipse.

http://renevielma.blogspot.com/2008/05/tutorial-de-hibernate.html

bueno adios.

C3PO

Recuperar sesiones hibernate con c3po

Hola:

Hace un par de días me encontré con un problema con hibernate ocupando en pool mi clase anterior era esta.

package org.util;

/
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
*
* @author mew
*/
public class SessionFactorySingleton {
private static SessionFactory sf = null;
/**
* crea una sesion que utiliza todo el programa
*/
private SessionFactorySingleton(){
}
public static SessionFactory getSessionFactory(){
if(sf == null){
sf = new Configuration().configure().buildSessionFactory();
}

return sf;
}
}

Pero lo que pasaba esque el pool de c3po no administraba bien las conexiones, y en un blog encontre este conexion

package org.util;

/**
*
* @author isaac
*/

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;

/**
* Configures and provides access to Hibernate sessions, tied to the
* current thread of execution. Follows the Thread Local Session
* pattern, see {@link http://hibernate.org/42.html }.
*/
public class SessionFactory {

/**
* Location of hibernate.cfg.xml file.
* Location should be on the classpath as Hibernate uses
* #resourceAsStream style lookup for its configuration file.
* The default classpath location of the hibernate config file is
* in the default package. Use #setConfigFile() to update
* the location of the configuration file for the current session.
*/
private static String CONFIG_FILE_LOCATION = "hibernate.cfg.xml";
private static final ThreadLocal threadLocal = new ThreadLocal();
private static Configuration configuration = new Configuration();
private static org.hibernate.SessionFactory sessionFactory;
private static String configFile = CONFIG_FILE_LOCATION;

private SessionFactory() {
}

/**
* Returns the ThreadLocal Session instance. Lazy initialize
* the SessionFactory if needed.
*
* @return Session
* @throws HibernateException
*/
public static Session getSession() throws HibernateException {
Session session = (Session) threadLocal.get();

if (session == null || !session.isOpen()) {
System.out.println("<<<<<<<<<>>>>>>>");
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession()
: null;
threadLocal.set(session);
}

return session;
}

/**
* Rebuild hibernate session factory
*
*/
public static void rebuildSessionFactory() {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.err
.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}

/**
* Close the single hibernate session instance.
*
* @throws HibernateException
*/
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);

if (session != null) {
session.close();
}
}

/**
* return session factory
*
*/
public static org.hibernate.SessionFactory getSessionFactory() {
return sessionFactory;
}

/**
* return session factory
*
* session factory will be rebuilded in the next call
*/
public static void setConfigFile(String configFile) {
SessionFactory.configFile = configFile;
sessionFactory = null;
}

/**
* return hibernate configuration
*
*/
public static Configuration getConfiguration() {
return configuration;
}

}

Esta conexion es mucho mas eficiente y con la ayuda de c3po ayuda bastante.

Mi configuracion de C3PO es la siguiente:

<property name="hibernate.c3p0.acquire_increment">1</property>

<property name="hibernate.c3p0.idle_test_period">120</property>

<property name="hibernate.c3p0.timeout">180</property>

<property name="hibernate.c3p0.max_size">20</property>

<property name="hibernate.c3p0.min_size">0</property>

<property name="hibernate.c3p0.max_statements">0</property>

<property name="hibernate.c3p0.preferredTestQuery">select 1;</property>




Le puse en 0 hibernate.c3p0.min_size porque aquí donde trabajo se ponen locos si ven una conexión mucho tiempo, pero ustedes deben hacer sus pruebas, dependiendo de muchos factores:

* Su mapeo de hibernate (contiene muchos Many-to-Many,lazy,ect)
* El hql,o sql mas pesado, de su proyecto,para saber el costo de su qury pueden ocupar en oracle esto:

explain plan for SELECT campos FROM tabla
y para ver el peso del query select * from plan_table

* Tomar el tiempo del Query mas pesado.

En los controles, contenedores, cerrar las conexiones este es muy importante.

miércoles, 4 de marzo de 2009

TIM BURTON - La Melancólica Muerte del Chico Ostra y Otras Historias

Personalmente espero que
a este artista de pensamiento macabro,con pelo enmarañado y gesto turbado,que nos cuenta historias de personajes insanos
que tienen tijeras y aletas en lugar de manos,nunca jamás se le ocurra disfrazarse de humano- Tim burton

jueves, 19 de febrero de 2009

EL día perfecto (HULK)

Muchos nos preguntamos como es día perfecto la verdad yo pienso que depende de color de cada día:

Mmmm, si por ejemplo hoy me pare a las 8 de la mañana, como ya termine la Fac. ni modo a trabajar si no despues no hay para las fiestas, bueno salgo de mi casa escuchando algo de musica empiezo bien el dia escuchando algo de aerosmith, algo de pixies, bueno despues de un rato escucho una canción que me hace recordar la prepa, enserio y sin pensarlo derrepende me acuerdo de todas las estupideses que hacia, bueno en particular me acorde hoy de una:

Ya lo denomino LA HULK

Pero diran que pex, como que HULK si no es el tipo verde, que se pone como loco cuando alguien quiere tirarse a su vieja (jijiji+++), es broma, bueno resulta que es una chava, bueno la ecuación seria algo como esto:


alcohol + chava(judith) + pleitos de amor = HULK

Si la chava se puso bien ebria, un cuate creo que Simon le quito su zapato, derrepente cambio su color se puso verde, empezo hablar idiomas bastante raros incluso para alguien que estudia lenguas, bueno empezo a correr como loca, y como buenos cuates la empezamos a corretear, cuando derrepente paso lo peor, se metio al baño y su novio con una mangera la baño con agua, salio un moustruo verde con ojos rojos, como yo era el mas cerca que le digo a la bestia verde -oye Judith ya callate o te.... el moustruo contesto o te... que babaso me vas a golpear (bueno si lo pense, pero nunca lo haría), cuando volteo HULK que me da un golpaso en mi cara, corrio sangre de mi labio, y las vestias verde se fue (bueno de hecho se quedo piendome disculpas , pero estaba tan enojado que no la pelaba)....


Bueno depues relatare mas estupides, noñadas de la fac, y cosas que voy recordando...

martes, 10 de febrero de 2009

Confortantes sonidos

La verdad no recuerdo muy bien el día pero si me acuerdo que no tenia mucho tiempo que habia llegado de la escuela, prendi la t.v en MTV,y escuche una extraña banda de rock que era diferente, si enserio, la canción se quedo en mi mente por mucho tiempo, la verdad olvide el nombre de la banda, un día platicando con un cuate en la Fac. me pregunto si habia escuchado a Mew le dije por supuesto que no, pero no sabia que era la banda de rock que habia visto en MTV hace tiempo...

Como pude conseguí el disco frengers... y de inmediato mi percepción musical cambio para siempre...

Recuerdo la primera vez que escuche comforting sounds:

La voz suave , pensando en que diria la letra... si hablaría de ira, amor, celos o quizas traición...

Poco a poco, encontré mi canción perfecta para pensar en ella, para correr baja la lluvia, para quitarme la ropa y decir que no me siento bien pesando en la dulzura de ella, por que nada es tan perfecto, ya, mas que la soledad, y por cada segundo que pasaba escuchándola le encontraba nuevos significados...

Como si alguien a travez del lente estuviera mirando todo aquello que tire todo por la borda, que siempre hacemos promesas que rompemos, que quizas jugamos sucio, para llegar a verla, o mejor aun pensamos que nada tiene sentido mas que la soledad...

Corriendo y jugando como cuando eres niño, mintiendo de aquello de lo que no queremos ser lastimados, para nunca jamas tener sucias las manos,...

Estando en el lugar de siempre, junto a mi familia y niki, tratando de entender el mundo, todo parece ser raro, extrañas reglas, tan estúpidas como tontas, pensando y recordando todas las aventuras que vivi por tres años con mis amigos, parece que el tiempo se detuvo en ese instante la canción...


La voz de Jonas deja de sonar, para dar parte a lo mejor de la canción, se llena de notas musicales, el teclado, la bateria, el bajo, la guitarra...Forman una ecuación diferencial perfecta, una ecuación rara de la place con la que puedes crear con las terminos perfectos una vida ideal, se llena de alegría y nostalgia, dan ganas de volar, al mismo tiempo llorar, no sabes cuando terminara, pero la gozas con tanta emoción que quisiera que fuera eterna...

Y cuando termina te dan ganas de intentarlo de nuevo...

viernes, 23 de enero de 2009

GWT-EXT, Combo box, remoto con jsp's

Lo primero que necesitamos es crear HttpProxy y un store con la estructura de nuestro json, aunque por default este metodo se encarga de mandarle parametros con query, para este ejemplo no los tomaremos

HttpProxy dataProxy = new HttpProxy("EvaluacionJson.jsp?respuesta=revista");
RecordDef recordDef = new RecordDef(new FieldDef[]{
new StringFieldDef("clave", "clave"),
new StringFieldDef("name", "name"),});

JsonReader reader = new JsonReader(recordDef);
reader.setRoot("datos");
reader.setTotalProperty("totalCount");

Store store = new Store(dataProxy, reader, true);
store.reload();

ComboBox cbRevista = new ComboBox("Revista");

cbRevista.setStore(store);
cbRevista.setTitle("Revistas existentes");
cbRevista.setDisplayField("name");
cbRevista.setId("clave");
cbRevista.setMode(ComboBox.REMOTE);
cbRevista.setTriggerAction(ComboBox.ALL);
cbRevista.setLoadingText("Buscando...");
cbRevista.setWidth(300);
cbRevista.setEmptyText("-SELECCIONE UNA REVISTA-");
cbRevista.addListener(new ComboBoxListenerAdapter() {

public void onSelect(ComboBox comboBox, Record record, int index) {


String cveRev = record.getAsString("clave");

}
});

Podemos agregar el combo a un formpanel o aun panel, despues esta el listener del combo que escucha los eventos del combo con record.getAsString("clave") extraen el clave del combo.

El jsp :

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="org.siir.json.JsonEvaluacion"%>
<%@page import="org.json.*"%>

<%

String respuesta = request.getParameter("respuesta");

if(respuesta.equals("revista")){
JsonEvaluacion jsonEvaluacion= new JsonEvaluacion();
String stringJson="";
try {
stringJson = jsonEvaluacion.obtenRevistasCandidatas();
} catch (JSONException ex) {
out.print("{\"totalCount\":0,\"datos\":[]}");
}
out.println(stringJson);
}


%>

el json:

package org.siir.json;

import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.siir.client.modelo.hemeroteca.RevistaExistente;
import org.siir.contenedor.ContenedorRevistaCandidata;

/**
*
* @author isaac
*/
public class JsonEvaluacion {

public String obtenRevistasCandidatas() throws JSONException{
ContenedorRevistaCandidata contenedorRev= new ContenedorRevistaCandidata();
List listRev = contenedorRev.getAllRevistaExistente();
JSONObject jsonObj = new JSONObject();
jsonObj.put("totalCount", listRev.size()+"");
JSONArray array = new JSONArray();


for(RevistaExistente rev:listRev){

JSONObject jsonDatos = new JSONObject();

jsonDatos.put("name",rev.getNombreRevista());
jsonDatos.put("clave",rev.getClave()+"");


array.put(jsonDatos);
}

jsonObj.put("datos",array);


return jsonObj.toString();


}


public static void main(String[] args) throws JSONException {
JsonEvaluacion jsonEvaluacion= new JsonEvaluacion();
System.out.println(jsonEvaluacion.obtenRevistasCandidatas());
}


}
el contenedor: claro esta tienen que iniciar una session hibernate, y todo ese choro, pueden reemplazar todo esto por un contenedor con sql, y con resultset construllen la lista de RevistaExistente

public List getAllRevistaExistente() {
Session s = sF.openSession();
Transaction tx = s.beginTransaction();
Query q = s.createQuery("from RevistaExistente p where p.estadoRevista = 1" );
List respuesta=q.list();
tx.commit();
s.close();
return respuesta;
}

el modelo:

public class RevistaExistente implements IsSerializable {
private Long clave;
private String nombreRevista;

con sus getters y setters...