Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Usuario Invitado

#481
A mí me parece un memory leak, aunque desconozco si el manejo de archivos multimedia grandes pueda consumir tanta RAM. Vamos a hacer un análsis de memoria.


CONFIGURAR LA VM PARA VOLCADO DE MEMORIA




Luego, procedamos a hacer un volcado de memoria (dump) cuando se detecte un OutOfMemoryError:

  • Agrega el argumento en VM arguments:

    -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/ruta/al/directorio/deseado

    Corre el programa. Cuando se produzca un OutofMemoryError, la VM hará un volcado de memoria para su posterior análisis.


    ANALIZANDO EL VOLCADO DE MEMORIA




    Instalar MAT (Memory Analyzer Tool) que Eclipse Founation



    Para mayor comodidad nos descargamos MAT independiente desde aquí

    Abrimos MAT y nos dirigimos al menú file y seleccionamos la opción Open Heap Dump.


    Navegas hacia la ruta donde has especificado guardar el memory dump (VM arguments en Eclipse) y seleccionas el archivo de volcado (extensión .hprof).

    Se nos mostrará una ventana para seleccionar la opción de análisis que deseamos. Seleccionamos la primera y le damos finish:


    MAT hará su trabajo y nos mostrará el análisis del memory dump.


  • A partir de ésta pestaña principal puedes ir muy profundo. Puedes ver como usar MAT a detalle en éste blog.

  • También dispones de VisualVM, una herramienta gratuita de Java para analizar el rendimiento de aplicaciones y mucho más: http://visualvm.java.net/features.html

  • Si deseas puedes establecer más RAM a tu aplicación, prueba a 2048m o si tienes 4GB de RAM 4096m. Recuerda que deben ir en VM arguments y no en Program arguments.

    Saludos.
#482
Java / Re: Filtro en J2ME
26 Febrero 2015, 14:57 PM
  • ¿Por cuál clase está representada tu entidad Cliente?
  • ¿Qué representa RecordStore?

    Puedes usar una clase llamada Cliente que sea la abstracción de un cliente en la realidad. Ésto se llama entidad o clase de dominio. Los pasos serían:

    1) Registrar un cliente como un Objeto Cliente:

    Código (java) [Seleccionar]
    Client someClient = new Client("nombre", "apellido", fechaNac, "dirección");


    2) En tu condición, buscas por el objeto cliente:

    Código (java) [Seleccionar]
    public Client login(String userName,String password){
        getRecStore();
        filter = new Filter(userName+"#"+password); // create a filter on the search text
        recordEnum= recordstore.enumerateRecords(filter, null, false);
        if (recordEnum.numRecords() > 0)
        {
            // buscas el cliente y si existe lo devuelves
        }else{
            // retorna null para indicar que no se han encontrando resultados
        }
    }


    No sé si será posible usar JPA con Java ME, sería muy útil en éstos casos, ya que buscarías un registro de la siguiente manera:

    Código (java) [Seleccionar]
    TypedQuery<Client> query = em.createQuery("SELECT * FROM Clients c WHERE c.username = :username");
    query.setParameter("username", clientUsername);
    Client client = query.getSingleResult(); // retorna el cliente buscado



    Básicamente la idea es que hagas la consulta a la BBDD buscando por el usuario actual y lo devuelvas. Puedes hacer un método para ésto también:

    Código (java) [Seleccionar]
    public Client buildClientFromCredentials(String username, String password) {
    Client client = null;
    try(PreparedStatement ps = connection.prepareStatement
    ("SELECT * FROM clients WHERE username = ? AND password = ?") {
    ps.setString(1, username);
    ps.setString(2, password);

    try(ResultSet rs = ps.executeQuery()) {
    while(rs.next()) {
    client = new Client();
    client.setId(rs.getInt("id"));
    client.setUsername(rs.getString("username"));
    client.setPassword(rs.getString("password"));
    }
    }
    } catch(SQLException ex) {
    logger.info("Error: "+ex.getMessage());
    throw new RuntimeException("Something was wromg, see the log for more details");
    }
    return client;
    }


    Y desde tu método lo llamas:

    Código (java) [Seleccionar]
    public Client login(String userName,String password){
        getRecStore();
        filter = new Filter(userName+"#"+password); // create a filter on the search text
        recordEnum= recordstore.enumerateRecords(filter, null, false);
        if (recordEnum.numRecords() > 0)
        {
            return buildClientFromCredentials(username, password);
        }else{
            return null;
        }
    }


    Así retornas el todos los datos del cliente en un objeto para trabajar más fácil con él. Por su puesto, si estás trabajando con listas para simular BBDD, la metodología es la misma.

    Salu2.
#483
De nada compañero. No olvides colocarle el check verde al título del tema :), saludos.
#484
Sí, como dice MinusFour, con selectionStart obtienes la posición del cursor en un textbox. Puedes ver un ejemplo aquí
#485
Debes de iniciar la búsqueda desde el context path de la aplicación. Por ejemplo:

Código (java) [Seleccionar]

URL imageUrl = this.getClass().getResource("/images/Imagen.png");
ImageIcon image = new ImageIcon(imageUrl);


Salu2.
#486
¿Qué es exactamente lo que deseas hacer? Supongo que algo complicado para usar una biblioteca externa.
#487
1) Te recomiendo leer el libro Código limpio de R. C. Martin.

2) Acostúmbrate a hacer expresivo el código no los comentarios. Cuando un código es limpio es expresivo y fácil de entender. Coloca nombres a las variables de manera que se sepa que valores guardan.

Respecto a tu duda. puedes hacerlo de ambas formas pero por comodida y practicidad puedes hacerlo con ArrayList. No sé si estarás enterado pero en la actualidad ArrayList es una de lae colecciones más eficientes que tenemos disponibles en Java, incluso en algunas ocasiones es mucho más eficiente que arrays convencionales.

Usa ArrayList, dudo que afecte el rendimiento de tu aplicación.

PD: Disculpa si encuentras errores ortográficos, estoy en móvil.
#488
Java / Re: Random de 0 a 10 con dos decimales
25 Febrero 2015, 11:41 AM
Quizás en este ejemplo tan pequeño no es necesario abastraer y encapsular. El objetivo de ello es ocultar la implementacion de generateNumber, por ello lo definimos private. En ocasiones más avanzadas, tendrás que hacerlo para abstraer tu capa de acceso a datos por ejemplo con el uso de servicios que oculten la implementación del DAO o factorías. Ésto ya lo entenderás más adelante ^^.
#489





Descripción: Cada año, se invierten innumerables horas y se pierden numerosos recursos debido a código mal escrito, ralentizando el desarrollo, disminuyendo la productividad, generando graves fallos e incluso pudiendo acabar con la organización o empresa. El reconocido experto de software Robert C. Martin, junto con sus colegas de Object Mentor, nos presentan sus óptimas técnicas y metodologías ágiles para limpiar el código sobre la marcha y crearlo de forma correcta, de este modo mejorará como programador. Esta obra se divide en tres partes. La primera describe los principios, patrones y prácticas para crear código limpio. La segunda incluye varios casos de estudio cuya complejidad va aumentando. Cada ejemplo es un ejercicio de limpieza y transformación de código con problemas. La tercera parte del libro contiene una lista de heurística y síntomas de código erróneo (smells) confeccionada al crear los casos prácticos. El resultado es una base de conocimientos que describe cómo pensamos cuando creamos, leemos y limpiamos código. Imprescindible para cualquier desarrollador, ingeniero de software, director de proyectos, jefe de equipo o analista de sistemas interesado en crear código de mejor calidad. ¡El libro que todo programador debe leer!.




Si cuentas con los medios para comprar el libro, te recomiendo que lo hagas. Vale totalmente los $60 que cuesta. Si no cuentas con los medios, lo puedes descargar desde aquí (escaneado).
#490
Cita de: Nac-ho en 24 Febrero 2015, 16:22 PM
JavaFX no me gusta! BUUUUH (hasta que implementen bien las funcionalidades de CSS para posicionar elementos no me gustara

Pides mucho hermano :xD. No es el objetivo de un programa de escritorio valerse de CSS, pero me parece buena idea. Cierto es que aún la comunidad de Java no logra adaptar completamente CSS a JavaFX, imagino que será un arduo trabajo y esperemos que al final lo consigan porque viendo como van ahora, da muy buenas señales de avanzar en el futuro.

Igual, JavaFX es un muy buen framework. Debería adoptarse más por los programadores, ya es hora de dejar a Swing y utilizar JavaFX para los proyectos desktop ;)