Bienvenido a Java Mexico

Java México es una comunidad de desarrolladores mexicanos en el lenguaje Java.

Este sitio es colaborativo, automáticamente al registrarte obtienes un Blog para compartir tus conocimientos o información acerca del lenguaje. Antes de publicar en tu blog o los foros por favor lee los lineamientos de publicación.

Para dudas y problemas con respecto al lenguaje Java puedes visitar los Foros de Discusión.

También puedes responder nuestra encuesta para saber en que estado vives!

OOP, Refactoring, y Android

Este articulo fue escrito con el fin de explicar la oop y varios conceptos relacionados con ella, como el polimorfismo, y la la asignacion de responsabilidades aplicando alta cohesion y bajo acoplamiento y el patron strategy. Para hacer este articulo me baso en el codigo que es explicado en otros dos articulos, los cuales les recomiendo que lean, para que puedan entender a la perfeccion lo que voy a explicar, las ligas son las siguientes:

http://blog.vidasconcurrentes.com/android/dibujando-figuras-en-un-canvas...

http://blog.vidasconcurrentes.com/android/detectando-drag-drop-en-un-can...

El codigo es hecho para la plataforma Android, pero creo que a la mayoria le ayudara, ya que esta bien explicado.

MapReduce con apache hadoop

Introducción

En esta entrada (y como continuación a Apache Hadoop) se empleará Apache Hadoop para realizar procesamiento de grandes cantidades de datos en sistemas de archivos distribuidos usando Spring y MapReduce.

Descripción

MapReduce es un framework (modelo de programación) utilizado para dar soporte a la computación paralela sobre grandes colecciones de datos en grupos de computadoras; es por esta razón por la que este framework suele ejecutarse en sistema de archivos distribuidos (HDFS).

Función Map()

Map toma uno de estos pares de datos con un tipo en un dominio de datos, y devuelve una lista de pares en un dominio diferente:

Map(k1,v1) -> list(k2,v2)

La función map(): se encarga del mapeo y es aplicada en paralelo para cada ítem en la entrada de datos. Esto produce una lista de pares (k2,v2) por cada llamada.

Función Reduce()

La función reduce es aplicada en paralelo para cada grupo, produciendo una colección de valores para cada dominio:

Reduce(k2, list (v2)) -> list(v3)

Pequeña aplicación para crear un cliente FTP en commons net

/* Que tal compañeros del foro bueno pues ya tenía rato que no entraba y me di cuenta que mi post se eliminó por una extraña razón y tenía ya un código puesto, el cual vuelvo a subir para saber si alguien sabe como añadir un arbol directorios para crear por completo el cliente ftp, lo que tengo es un pequeño ejemplo pero que añadiendole esa clase de arbol directorios funcionará perfectamente, bueno de antemano gracias compañeros aquí está mi código para el cliente FTP*/

package prueba_botones;

import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.swing.*;
import org.apache.commons.net.ftp.FTPClient;

public class Boton_java extends JFrame implements ActionListener
{
   private JButton boton1,boton2,boton3,boton4,boton5;
   
   private JLabel usuario,servidor,pass;
   
   private JTextField users,servi;
   

Instalación de Apache Hadoop

Intruduccion

Hadoop es un framework que permite el procesamiento distribuidor de una gran cantidad de datos atraves de clusters usando un modelo simple de programación. Hadoop puede ser visto también como un sistema de archivos distribuido.

Hadoop tiene como objetivo solucionar el problema de almacenar la información que supera las capacidades de una única máquina, para lo cual, hadoop gestionará y permitirá el almacenamiento de la información en diferentes máquinas conectadas a través de una red.

HDFS es un sistema de archivos pensado para el almacenamiento de archivos "grandes" (por encima de 100 MB) y en la que el acceso a esa información está orientado hacia procesamiento en batch o lectura de tipo "write once"-"read-many-times" (ideal para temas de MapReduce -concepto que detallaré más en proximos articulos-) y cuyo diseño está pensado para ser ejecutado en máquinas "baratas".

En un cluster de HDFS encontramos dos tipos de nodos diferentes:

  • Namenodes: son los encargados de gestionar el espacio de nombres del sistema de archivos
  • Datanodes: son los que almacenan los bloques de información y los recuperan bajo demanda

Certificación SCJP 6 Objetivo 1.1

Hace mucho que surgió en mi cabeza la necesidad de tener la certificación de Java, por el momento no cuento con alguna, desgraciadamente no había tenido espacio de dar una leída al libro de Katy Sierra recomendado, pero aprovechando las circunstancias de mi actual trabajo trataré de publicar a diario un avance de los objetivos del libro con tres propósitos:

Publicaré las notas de estudio para que los interesados en realizar esta certificación sirva de refuerzo o impulso, esperando que algunos de los que ya están certificados puedan ayudar a temas que sean importantes, difíciles o se vayan escapando.

Objetivo 1.1 Declaración de interfaces

Una interfaz es un contrato (Conjunto de requisitos que deben satisfacer las clases que se ajusten a esa interfaz).

Al crear una interfaz, estamos definiendo un contrato para lo que una clase puede hacer, pero sin indicar como lo va a hacer.

Se puede pensar en una interfaz como en una clase que es 100 % abstracta.

El usuario tiene la culpa

No importa el tiempo que invertiste en revisar cada línea de código, las pruebas unitarias, las horas de desvelo y la frustración para que tu proyecto funcione correctamente. El usuario siempre se encargará de hallarle un problema.

Te preguntas ¿qué hice mal y/o qué pude haber omitido?. Vuelves a revisar el código, realizas varias pruebas más. Todo parece funcionar bien.

De pronto el usuario aparece de la nada y te dice que hay un nuevo problema. No puede llenar los formularios por que el sistema le marca un error. Le preguntas que datos trato de introducir, el responde que solo siguio las instrucciones que le dijeron.

"... me marca error al introducir los datos en el formulario"

De nueva cuenta te desvelas tratando de hallar la causa de los problema, realizas más pruebas y de nuevo todo parece funcionar bien. ¿Qué estaré haciendo mal?

Migrar de Subversion a Git, sin mirar atrás

Este post no es realmente acerca de Java, pero quiero dejarlo en este sitio de todas maneras, ya que realmente no tengo otro blog y además no deja de ser algo muy técnico.

En mi trabajo desde hace varios años utilizamos Subversion, pero decidimos pasarnos a Git. El mismo Git incluye herramientas para integración con svn, pero son algo limitadas. Además creo que es un buen pretexto para aprovechar y reorganizar el repositorio, partiéndolo en varios repositorios distintos, abandonando algunas cosas obsoletas, ramas que llevan años abandonadas, etc.

En mi búsqueda por lograr esto, me encontré con esta herramienta llamada svn2git:

http://www.gitorious.org/svn2git

Parece que la desarrolló el equipo de KDE, para realizar lo mismo que yo estaba buscando: migrarse de una buena vez de svn a git, sin mirar atrás, reorganizando su código en varios repositorios, etc.

Esta herramienta está hecha en C++ y requiere Qt para poderse compilar, aunque no tiene interfaz gráfica. Debe ejecutarse en el servidor que contiene el repositorio de Subversion que se quiere migrar (no una copia de trabajo).

Subir un archivo por FTP librería commons net (nuevamente otro ejemplo).

/*No olvides darle permisos a tu firewall de windows o a tu antivirus antes de ejecutar la aplicación, por que si no lo haces te arrojará un error en el socket Exception y unas cuantas lineas de errores, simplemente desactiva o da permisos en el cortafuegos y con esto estará funcionando de maravilla la aplicación. Hasta luego y espero que les sirva de algo esta pequeña ayuda. :D */

package subiendo_archivo;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

public class Subiendo_archivo
{

public static void main(String[] args)
{
FTPClient client = new FTPClient();
try
{
client.connect("tuservidor.com");

boolean login = client.login("ususario", "contraseña");
if (login)
{
System.out.println("Iniciando sesión Satisfactoriamente");
int replay = client.getReplyCode();
if (FTPReply.isPositiveCompletion(replay))
{

Tipo de Pruebas para Desarrollo de Software

Tema: Explicación sobre los diferentes tipos de pruebas que se pueden hacer en el desarrollo de software.
Categoría: Explicación concreta / Calidad - Integración Continua
Tecnologías / Componentes: XUnit, Sonar, PMD, Findbugs, Thucydides, Checkstyle, Cobertura


Contenidos

1 Introducción
2 Pruebas Unitarias
3 Pruebas de Aceptación de Usuario
4 Pruebas de Regresión
5 Pruebas Funcionales
6 Pruebas de Integración
7 Pruebas No Funcionales
8 Pruebas de Stress
9 Pruebas de Calidad de Código
9.1 Cobertura:
9.2 Análisis de Líneas de Código:
9.3 Complejidad:
9.4 Diseño de Clases:
9.5 Violaciones de Calidad:
9.6 Sonar:
10 Resumen

El garbage collector y los memory leaks

Antecedente

Una de los aportes más relevantes de Java es la inclusión del recolector de basura ( garbage collector) tanto que hoy en día es un estándar y ni se menciona como una característica del lenguaje. Java no lo inventó, pero si aportó mucho para su adopción.

El GC corre automáticamente en la JVM cada cierto tiempo. No hay forma de proveer cuando lo hará (o si lo hará) ni de forzar a que corra (o que no lo haga). Existen varias estrategias de implementación y es todo un tema que sigue en desarrollo e investigación. Lo mejor de todo es que como usuarios de la plataforma tenemos muy poco que hacer para utilizarlo.

Referencias

La regla para que un objeto pueda ser recolectado es sencilla, no debe de haber referencias al objeto.

....
Empleado a = new Empleado("God"); // a es la 1ra referencia
Empleado b = a; // b es la segunda referencia al mismo objeto "God"
...

En el ejemplo anterior se creó un objeto de tipo Empleado y hay dos referencias a él (a y b). Este objeto no será recolectado por el gc y su memoria seguirá en uso.

Cuando ya no hay referencias al objeto:
 

Distribuir contenido