Clitec.org

Blog de Software Libre

Usa google... es más rápido y eficaz!


Clonar Objetos

Hola a todos

Una disculpa por la pausa que tuvimos, pero como saben, el trabajo absorve una enorme cantidad de tiempo.

Continuando con los post de Java este tratará sobre como clonar objetos. La clontación es más frecuente de lo que realmente se piensa, existen dos tipos de clonación, la profunda y la superficial. La superficial copia un objeto del mismo tipo, no copia los miembros static; para los miebros de tipo primitivo, se hace una copia de su valor, las referencias se copian, es decir, siguen apuntando al mismo objeto. La copia profunda duplica todo.

Para clonar objetos hacemos uso de la interfas Cloneable, ya que si omitimos este paso nos lanzará una exception de tipo java.lang.InternalError.

Pues como siempre, después de una breve explicación pasamos a dejar código, el cual es mucho más claro que las palabras, aunque no las sustituye.

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package org.clitec.test.otherCases;

/**
*
* @author lyonn
*/
public class CClaseClonar implements Cloneable{

private String nombre=”Rodrigo”;
private String apellido = “Ramos”;

public Object clone()
{
try {
return super.clone();
} catch (Exception e) {
throw new InternalError(e.toString());
}
}

public String getNombre()
{
return nombre;

}
public String getApellido()
{
return apellido;
}
public void setNombre(String nombre)
{
this.nombre = nombre;
}
public void setApellido(String apellido)

{
this.apellido = apellido;
}
}

EL siguiente código implementa lo ya hecho

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.clitec.test.otherCases;

/**
*
* @author lyonn
*/
public class CMainCloneable {

public static void main(String[] args) {
CClaseClonar cclonar = new CClaseClonar();
CClaseClonar cclonar2 = (CClaseClonar) cclonar.clone();
System.out.println(”cclonar nombre: ” + cclonar.getNombre());
System.out.println(”cclonar apellido: ” + cclonar.getApellido());
System.out.println(”Modificamos nombre y apellido de cclonar”);
cclonar.setNombre(”Frida”);
cclonar.setApellido(”Contreras”);
System.out.println(”cclonar2 nombre: ” + cclonar2.getNombre());
System.out.println(”cclonar2 apellido: ” + cclonar2.getApellido());
System.out.println(”Modificamos nombre y apellido de cclonar2″);
cclonar2.setNombre(”Pancho”);
cclonar2.setApellido(”Pachanclas”);
System.out.println(”cclonar nombre: ” + cclonar.getNombre());
System.out.println(”cclonar apellido: ” + cclonar.getApellido());
System.out.println(”cclonar2 nombre: ” + cclonar2.getNombre());
System.out.println(”cclonar2 apellido: ” + cclonar2.getApellido());
System.out.println(”cclonar nombre: ” + cclonar.getNombre());
System.out.println(”cclonar apellido: ” + cclonar.getApellido());
}
}

Bien, fue un pequeño post, pero creo que es muy claro y va al punto, espero les funcione correctamente y cualquier cosas estamos abiertos a sus comentarios

Saludos

Open Office 3.1 en aquitectura de 64 bits en Debian 5

Hola,

En este post les voy a comentar como instalar Open Office en un sistema Debian 5 de 64 bits, pero en general debe funcionar en los derivados de éste, ya que la magia la hace el manejador de paquetes apt-get.

Los repositorios de Debian solo contemplan la versión dos de Open Office, pero no la tres, ya que sólo existe para la arquitectura de 32 bits, y obviamente cuando tratamos de instalar como normalmente se haría saldrá un mensaje claro y contuntende advirtiendo sobre el problema de la arquitectura.

Lo primero es bajarnos los .deb de Open Office 3.1, una vez abajo lo destarareamos:

lyonn@lyonn-debian:~/Binarios$ tar -zvxf OOo_3.1.0_LinuxIntel_install_es_deb.tar.gz

Entramos a la carpeta DEBS, lo siguiente es forzarlos a instalarse con los parámetros de –force-arquitecture de apt-get, como a continuación:

dpkg -i –force-architecture *.deb

Una vez hecho eso se distribuirán los paquetes donde debe, ahora entramos a la carpeta desktop-integration y aplicamos el mismo procedimiento:

dpkg -i –force-architecture openoffice.org3.1-debian-menus_3.1-9399_all.deb

Para ejecutarlo en consola ya no es el tradicional ooffice (que podemos hacer un enlace simbólico en /usr/bin/)

Y listo!!! Ya tenemos terminado todo y probemos si funciona

pantallazo

Espero les sirva no solo con Open Office y puedan aplicarlo a más cosas (por el momento no me ha funcionado con el plug in de flash) y puedan comentarlo por acá

Saludos a todos

Instalación de Wireless Atheros en Debian 5

Hola,

Por fin y gracias a la perra del mal he sabido el proceso total de como echar a andar una wireless con chipset Atheros en mi sistema operativo que desde hace poco he estado usando, nada más y nada menos que Debian, el cual entre sus caracteristicas es que sus paquetes son libres y no incluye aquellos que no lo sean, por tanto hay que buscar repositorios, binarios o compolar todo aquello que necesitemos. Entre los paquetes que realmente se extrañan son los del chipset de Wireless Atheros.

Calma, no pasa nada, han llegado al lugar exacto, ya que en la red existen muchos, una cantidad estúpida de manuales de como conectar sus wireless, pero son apócrifos o simplemente no sirven.

Sin más misticismos pasemos a la acción de como hacerlo. Lo que necesitamos son unos buenos repos, pero para que no busquen les dejo los mios

#
# deb cdrom:[Debian GNU/Linux 5.0.1 _Lenny_ - Official amd64 CD Binary-1 20090413-02:50]/ lenny main

#deb cdrom:[Debian GNU/Linux 5.0.1 _Lenny_ - Official amd64 CD Binary-1 20090413-02:50]/ lenny main

deb http://security.debian.org/ lenny/updates main
deb-src http://security.debian.org/ lenny/updates main

deb http://volatile.debian.org/debian-volatile lenny/volatile main
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main

deb http://ftp.de.debian.org/debian lenny main
deb http://getswiftfox.com/builds/debian unstable non-free
deb http://ftp.ikimlinux.org stable main
deb-src http://ftp.ikimlinux.org stable main
deb http://mmc.igeofcu.unam.mx/debian/ lenny main contrib non-free
deb-src http://mmc.igeofcu.unam.mx/debian/ lenny main contrib non-free
deb http://security.debian.org/ lenny/updates main contrib non-free
deb-src http://security.debian.org/ lenny/updates main contrib non-free
deb http://www.debian-multimedia.org testing main
deb-src http://www.debian-multimedia.org testing main
deb http://mirrors.kernel.org/debian/ lenny main contrib non-free
deb-src http://mirrors.kernel.org/debian/ lenny main

deb http://security.debian.org/ lenny/updates lenny contrib
deb-src http://security.debian.org/ lenny/updates lenny contrib
deb http://www.debian-multimedia.org/ lenny main

# Debian Lenny/5.0
deb http://ftp.us.debian.org/debian lenny main contrib non-free

Una ves que los agreguen esos repos actualicese con apt-get update

Algunos les van a tronar, como el de multimedia, pero no pasa nada, quitenlos y ya =)

Ahora, lo siguiente es bajar los paquetes que vamos a necesitar:

aptitude install module-assistant wireless-tools

Los dos paquetes anteriores son necesarios para construir el módulo que necesitamos

Mandamos a ejecutar el module assitent, es decir m-a:

m-a prepare
m-a a-i madwifi

Lo siguiente es agregar los módulos al sistema:
modprobe -r ath5k

También cargamos el siguiente módulo:
modprobe ath_pci

Listo, con eso debe andar nuestra wireless, ahora solo falta asociarnos a la wireless, siendo el caso del 2wire de Telmex, cuando nos intentamos asociar debemos cambiar el modo a hexadecimal, ya que de otro modo no funcionará la asociación

Para más información acerca de lo que les he hablado y siendo el documento que me ha funcionado les dejo el link

Pueden referirse a la wiki de debian para obtener más información acerca de los módulos

http://wiki.debian.org/WiFi/ath_pci

echo “Saludos”;

BeeDiff

Hola a todos.

Ahora les queremos comentar acerca de una herramienta gráfica para comparar archivos, tipo araxis, pero siendo de distribución gratuita, ya que está bajo la GPL (no es lo mismo libre que gratuito) y disponible para GNU/ Linux.

Funciona bastante rápido, está desarrollado en QT (C) y es muy personalizable.

Lástima, me quedé con las ganas de programar algo así y que fuera util para las personas, tendré que seguir buscando =)

Descargar

Web Oficial

Saludos

Patrones de Diseño

Hace relativamente poco se prometió que se hablaría un poco acerca de los patrones de diseño, y como dicen, “Promesas son deudas” así que me dediqué en mis pocos tiempos libres a hacer dicho documento, se los dejo y espero que les guste

Descargar

echo “SaludOS”;

Clases Genéricas

Hola que tal, en este tema vamos aver las clases genéricas, las cuales sirven como un conetendor en toda la extensión de la palabra, es decir, no dependen directamente del tipo de dato, ya que lo podemos expresar como un pa?amtetro de la case.

Ejemplos de estas clases son> ArrayList<Integer>, ArrayList<String>, etc

Creo que teoría existe bastante en internet, y sería redundar un poco, mejor pongo un ejemplo peque para que se den idea de lo que hablo

Main>

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package org.clitec.pruebas.clases_genericas;

/**
*
* @author lyonn
*/
public class CMain {

public static void main(String[] args) {
CMatrix<String> mimatrix = new CMatrix<String>(1);
mimatrix.addElement(”hola”);
mimatrix.addElement(”Adios”);
mimatrix.addElement(”Ciao”);
System.out.println(”Size: “+mimatrix.getSize());
mimatrix.getAllElements();
}

}

Clase Generica>

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.clitec.pruebas.clases_genericas;

import java.util.ArrayList;

/**
* @author lyonn
*/
public class CMatrix<R> {

private ArrayList<R> miMatrix;

public CMatrix(int cap) {
System.out.println(”Iniciando el contructor…”);
miMatrix = new ArrayList<R>(cap);

}

public int getSize() {
return miMatrix.size();

}

public void addElement(R e)
{
miMatrix.add(e);
}

public void addElementIn(int index, R e)
{
miMatrix.add(index, e);
}

public void getAllElements()
{
for(R tmp: miMatrix)
{
System.out.println(”valores: “+tmp);
}

}

}

echo “Saludos”;

Habilitar el castellano en teclado Inglés

Ayer instalé mi super XFCE , pero con la novedad que no podía poner acentos ni nada en castellano, ya que mi teclado es americano, pero no el internacional. Cosa rara, ya que mi GNOME sí tenía eso.

Bueno, la forma en que lo corregí es muy sencillo, sólo tenemos que modificar algunos options del xorg.conf…las opciones son las siguientes:

Option          “XkbLayout”     “us”
Option “XkbVariant” “intl”

Reiniciamos las X y tarán!!!!!!!! ya furula como debe.

Saludos

Importancia de los patronesde diseño

Hoy platicaremos acerca de la importancia de los patrones de diseño, los cuales aunados con las buenas prácticas de programación ayudan a crear soluciones de una manera profesional y eficaz.

Los patrones de diseño son técnicas de programación que ayudan a separar componentes, como la lógica de negocio, búsquedas, validaciones, vistas, y todo aquello que sea separable. Son independientes de la plataforma o framework que usemos, por tanto, se pueden aplicar para cualquier desarrollo.

Existen una diversidad de patrones, los cuales atacan diversos problemas que pudiesen llegar a suscitarse, como las búsquedas, conexiones a datos, etc.

Algunos ejemplos muy usados son los:

  • DAO
  • Transfer Objects
  • Value List Handler
  • Service Locator
  • Service Worker
  • Facades

A continuación explicaremos los patrones enumerados anteriormente:

[Ver Contenido]

Conclusiones.

No cabe duda que el uso de los patrones de diseño es muy importante para la codificación de proyectos. Dichas prácticas se reflejaran directamente en el mantenimiento posterior de componentes, además de la efectividad de la solución, y como agregado la mejor detección de errores e incorporación de mejoras, ya que la ingeniería de software dice en sus bases que un software debe ser escalable y robusto (entre otras características)

FLISOL 2009

Hola a todas las personas que nos siguen, este post está dedicado para hacer la invitación a FLISOL 09, el cual se llevará acabo en la universidad tecnológica de Tecámac.

Si pueden darse una vuelta, les dejo el link para que puedan ver el programa.

Flisol

Saludos

Modificadores de Acceso

Regresamos después de un tiempo de poca actividad, pero es justificado ya que el trabajo impide todo desquicio de tiempo para poder blogear, pero lo importante es que estamos de regreso.

Hay muchos detalles en Java que a simple vista no son importantes, pero conforme los proyectos se vuelven más serios existe la necesidad de tomar más variables en cuenta, como es el nivel de protección de los miembros de una clase, para su encapsulamiento y a su vez para la necesidad de la herencia.

Por eso esta vez  les traigo una pequeña tabla donde especifico los niveles de protección y quienes son los posibles candidatos a tener acceso a los miembros con los modificadores de acceso.

Parto de la idea de que serán usados entre paquetes y obviamente con herencia;

Primero defino los siguientes conceptos para estar hablando en el mismo idioma:

Superclase: Clase de la cual derivamos alguna otra

Subclase: Clase que deriva de otra

Ejemplo de una super clase es Object, de quien derivan todas las demás clases.

Para derivar una clase es necesario hacerlo explicitamente, con la palabra reservada extends, ejemplo

MiSubClase extends OtraClase

A diferencia de otros lenguajes orientados a objetos, Java sólo puede heredar de una sola clase.

Pues después de una breve introducción para saber de que estamos hablando

Accesible desde. private predeterminado protected public
Misma clase
Clase o subclase del mismo paquete no
Clase de otro paquete no no no
Subclase de otro paquete no no

Clitec.Org


PageRank Checking Icon