tag:blogger.com,1999:blog-70217268376559909882024-03-13T01:23:29.461-07:00OOPcollihttp://www.blogger.com/profile/03958651874427482292noreply@blogger.comBlogger13125tag:blogger.com,1999:blog-7021726837655990988.post-68649242601800213922011-05-16T22:26:00.000-07:002011-05-16T22:26:59.239-07:00Presentación proyecto final de POOBreve demostración de lo que trata mi proyecto de POO.<br />
<div style="width:425px" id="__ss_7989839"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/colli03/presentacin-poo-7989839" title="Presentación POO">Presentación POO</a></strong><object id="__sse7989839" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=presentacion-110517002527-phpapp01&stripped_title=presentacin-poo-7989839&userName=colli03" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse7989839" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=presentacion-110517002527-phpapp01&stripped_title=presentacin-poo-7989839&userName=colli03" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/colli03">colli03</a>.</div></div>collihttp://www.blogger.com/profile/03958651874427482292noreply@blogger.com6tag:blogger.com,1999:blog-7021726837655990988.post-47598991757849237812011-04-21T15:15:00.000-07:002011-04-21T22:10:34.387-07:00Códigos G en arduinoEste post trata de como cargar códigos g en arduino, para poder controlar una máquina cnc de tres ejes.<br />
<br />
Los links que se muestran en el video son:<br />
<br />
http://arduino.cc/playground/Linux/Ubuntu<br />
Todo el software necesario para instalar arduino en nuestra computadora <br />
<br />
http://www.contraptor.org/motion-control<br />
El script de python que nos permite mandar códigos g al arduino<br />
<br />
http://reprap.org/wiki/Arduino_GCode_Interpreter#Implementation<br />
Una lista de los códigos g que soporta el arduino.<br />
<br />
Algunos comandos que pueden no verse bien en la pantalla.<br />
mv *.deb arduinoFiles/<br />
sudo dpkg -i *.deb<br />
<br />
<br />
Los archivo se llaman:<br />
nc2serial.py (es el que copiamos de la página de contraptor).<br />
prueba.nc (el nombre de este no importa mucho).<br />
Los dos archivos se guardan en la carpeta cnc que creamos en Desktop<br />
<br />
Video...<br />
<br />
<object height="344" width="425"><param name="movie" value="http://www.youtube.com/v/HBKoTSn3qYs?hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/HBKoTSn3qYs?hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
<br />
<br />
Nota: El arduino Duemilanove y uno, no llaman igual al puerto serial (usb)<br />
El arduino Duemilanove tiene nombres como /dev/ttyS0<br />
El arduino uno tiene nombres como /dev/ACM<br />
<br />
De tal manera que tienes que cambiar el nombre del puerto de comunicación en el archivo nc2serial.py al nombre del puerto que tengas en tu arduino.<br />
<br />
Una imagen de que es lo que tienes que modificar...<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtNtWfOIX-Z2T-K94HfjSVmOQr2w6Nq6gfPI08SdM9n3lUj6njU4uErMuaWc9eFKPCXHULqXQtv0XSX7r0qBq-UjYEmU4ZH_mgIaZpE8zacMsp1BjERs4ly0rZndnuFOa-u8nJaH0VUdU/s1600/nc2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="95" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtNtWfOIX-Z2T-K94HfjSVmOQr2w6Nq6gfPI08SdM9n3lUj6njU4uErMuaWc9eFKPCXHULqXQtv0XSX7r0qBq-UjYEmU4ZH_mgIaZpE8zacMsp1BjERs4ly0rZndnuFOa-u8nJaH0VUdU/s400/nc2.png" width="400" /></a></div><br />
<br />
<br />
<br />
<br />
<br />
<br />
Bueno por ahora eso es todo, disculpen la tardanza en poner el post.<br />
Cualquier comentario es bien recibido.collihttp://www.blogger.com/profile/03958651874427482292noreply@blogger.com1tag:blogger.com,1999:blog-7021726837655990988.post-38666922942348082082011-03-31T07:16:00.000-07:002011-03-31T07:20:24.776-07:00Patrones de diseño (clase)Los patrones de diseño en programación ayudan a resolver problemas que se presentan muy a menudo en el desarrollo de un programa. Podemos referirnos a los patrones de diseño en base a :<br />
1.- Nombre: usado para describir el patrón.<br />
2.- Synopsis: nos da una breve descripción sobre los problemas a los que se puede aplicar el patrón.<br />
3.- Solución: breve descripción de la solución.<br />
Existen varios tipos de patrones de diseño, pero yo les voy a mostrar unos cuantos que me parecieron muy importantes.<br />
<br />
Adapter<br />
Este patron se usa cuando se tienen dos objetos los cuales queremos que interactuen, pero ambos tienen interfaces distintas el uno al otro. Uno de nuestros objetos puede ser el cliente (quien recibe servicios) y el otro el servidor (quien presta servicios). Como tenemos metodos que pertenecen a la interfaz del cliente los cuales no son los mismos que los metodos que pertenecen a la interfaz del servidor y en nuestro programa queremos conservar ambas interfaces, necesitamos una manera de comunicar el servidor con el cliente. Esto se realiza por medio de un adaptador el cual permite que los metodos del objeto cliente puedan ser entendidos por el objeto servidor y la tarea que se le encargo a este ultimo se lleve a cabo.<br />
La siguiente imagen sirve para ilustrar la manera en que se aplica este patron de diseño.<br />
<a _mce_href="http://colli03.files.wordpress.com/2010/12/adapterpattern.jpeg" href="http://colli03.files.wordpress.com/2010/12/adapterpattern.jpeg"><img _mce_src="http://colli03.files.wordpress.com/2010/12/adapterpattern.jpeg?w=300" alt="" class="alignnone size-medium wp-image-111" height="63" src="http://colli03.files.wordpress.com/2010/12/adapterpattern.jpeg?w=300" title="adapterPattern" width="300" /></a><br />
<br />
Iterator<br />
Se usa cuando tenemos un objeto que contiene una colección de datos de un cliente, los cuales son guardados en estructuras de datos (arboles, listas enlazadas, vectores, etc) y el cliente quiere acceder a ellos sin preocuparse sobre como son guardados los datos. Por lo cual tenemos que proveer una interfaz que permita acceder a los datos de una manera amigable.<br />
Imaginemos que el cliente quiere realizar un ciclo sobre los datos, como le hemos proveido una interfaz el cliente realiza un ciclo usando los componentes de la interfaz la cual a su vez realiza el trabajo de pasar los datos. De esa manera facilitamos la manipulación de los datos.<br />
<br />
Composite<br />
Trata con el problema de la creación de objetos complejos a partir de objetos mas simples, lo cual se soluciona usando una colección de elementos simples pero que puedan ser unidos entre ellos de varias maneras.<br />
Un ejemplo muy conocido son las ventanas graficas de los programas, las cuales basicamente estan formadas por contenedores y componentes y agrupados de tal manera que se forma la ventana que se desea.<br />
<a _mce_href="http://colli03.files.wordpress.com/2010/12/contenedor.jpeg" href="http://colli03.files.wordpress.com/2010/12/contenedor.jpeg"><img _mce_src="http://colli03.files.wordpress.com/2010/12/contenedor.jpeg" alt="" class="alignnone size-full wp-image-116" height="204" src="http://colli03.files.wordpress.com/2010/12/contenedor.jpeg" title="Composite Pattern" width="422" /></a><br />
<br />
Flyweight<br />
Cuando se tienen muchos objetos que tienen la misma información, se puede ahorrar espacio en memoria creando una clase que se encargue de manejar la información que es común a varios objetos y haciendo que esos objetos obtengan su información la un objeto de la clase anterior.<br />
<a _mce_href="http://colli03.files.wordpress.com/2010/12/flyweight.jpeg" href="http://colli03.files.wordpress.com/2010/12/flyweight.jpeg"><img _mce_src="http://colli03.files.wordpress.com/2010/12/flyweight.jpeg" alt="" class="alignnone size-full wp-image-117" height="172" src="http://colli03.files.wordpress.com/2010/12/flyweight.jpeg" title="Flyweight" width="271" /></a><br />
<br />
Model View Controller (MVC)<br />
Es una manera de descomponer una aplicación en tres partes: el modelo, la visualización y el controlador. originalmente diseñado para la aplicación de una GUI. Se comporta de la siguiente forma.<br />
Entrada --> Procesamiento --> Salida<br />
Controlador --> Modelo --> Visualización<br />
<a _mce_href="http://colli03.files.wordpress.com/2010/12/mvc.jpeg" href="http://colli03.files.wordpress.com/2010/12/mvc.jpeg"><img _mce_src="http://colli03.files.wordpress.com/2010/12/mvc.jpeg" alt="" class="alignnone size-full wp-image-119" height="186" src="http://colli03.files.wordpress.com/2010/12/mvc.jpeg" title="MVC" width="307" /></a><br />
Este patrón es el que pienso usar, en donde la visualización es la ventana donde se ve el laberinto, las entradas son los datos que el robot pasa a el contenedor el cual modela a los muros y guarda sus posiciones y la del robot(s).<br />
<br />
Bibliografía:<br />
An Introduction to Object-Oriented Programming,(3rd Edition)<br />
Timothy Budd<br />
http://ootips.org/mvc-pattern.html<br />
http://www.go4expert.com/forums/showthread.php?t=5127#prototypecollihttp://www.blogger.com/profile/03958651874427482292noreply@blogger.com1tag:blogger.com,1999:blog-7021726837655990988.post-88520198981603970092011-03-29T19:45:00.000-07:002011-03-29T20:12:12.850-07:00Demostraciones de avance parcialTaller de programación orientada a objetos<br />
Semana 8<br />
<br />
Esta vez voy a mostrar un poco del avance que he tenido con el código en mi programa.<br />
<br />
Por el momento el programa solo inicia el sistema principal, que a su vez trata de comunicarse con dispositivos bluetooth ( lo cual aun no he codificado) y se apaga automaticamente dado un tiempo preestablecido por el usuario ( en este caso son 4 iteraciones del programa).<br />
<br />
Para poder tener tiempo de ver lo que el programa hace, agregue un retardo con en while y un for anidados, iterando numeros mayores a 1000, por el momento los retardos representan los tiempos en que se realizan las comunicaciones y demas funciones del sistema.<br />
<br />
<pre class="brush: java">package oop;
/*
*clase base de la mayoria de las clases que se usan en el
*proyecto de oop
*/
public class Comun {
//atributos
int id;
int estado;
//constructor
public Comun(int valorId, int valorActivado){
id = valorId;
estado = valorActivado;
System.out.println("Creando objeto con valores definidos por el usuario");
}
//constructor vacio
public Comun(){
id = 0;
estado = 1;
System.out.println("Iniciando objeto con valores predefinidos");
}
//atributos
public int verId(){
System.out.println("Viendo id del objeto");
return id;
}
public int verEstado(){
System.out.println("Viendo estado del objeto");
return estado;
}
public void Activar(){
System.out.println("Estado");
estado = 1;
}
</pre><br />
<pre class="brush: java">/*
*clase principal del programa, se encarga de coordinar todas las
*demas clases del proyecto, hereda de la clase comun
*/
package oop;
public class Sistema extends Comun {
//atributos
int idContador, modo,tiempoMuestreo,contadorMuestreo;
int tiempoPrendido, contadorPrendido, apagar;
String[] nombres={"Sistema","Informacion","Graficos",
"Comunicador","Usuario"};
//constructor vacio
public Sistema(){
super();
tiempoPrendido = -1; //tiempo indefinido
tiempoMuestreo = 5000; //cada 5000 iteraciones toma un valor
modo = 1; //modo automatico
aumentarIdContador();
apagar = 0; //inicialmente el programa esta prendido
}
//constructor con elementos
public Sistema(int prendido, int muestreo, int modo){
super();
tiempoPrendido = prendido;
tiempoMuestreo = muestreo;
this.modo = modo;
aumentarIdContador();
apagar = 0;
}
//aumenta el valor del contador de muestreo
public void aumentarContadorMuestreo(){
if((++contadorMuestreo%tiempoMuestreo)== 0){
System.out.println("******Conectando con el dispositivo*****");
}
return ;
}
//aumenta el valor del contador de prendido
public void aumentarContadorPrendido(){
//System.out.println("Entrando a aumentarContadorPrendido");
if(tiempoPrendido == -1){
System.out.println("El tiempo de prendido esta indefinido");
}else{
//el programa va a ser apagado
if(++contadorPrendido>= tiempoPrendido){
apagar = 1;
System.out.println("Apagando el sistema");
return;
}else{ // el programa sigue prendido
//contadorPrendido++;
//System.out.println("Aumentamos el contador de prendido");
System.out.print("Valor de tiempo prendido -- ");
System.out.println(contadorPrendido);
}
}
//System.out.println("Saliendo de aumentarContadorPrendido");
return ;
}
//metodo que pausa el sistema para que no termine muy pronto
public void delay(int repeticion){
int i = 0;
//System.out.println("Iniciando delay");
System.out.println("........");
while (i < repeticion){
for(int j=0;j<10000;j++){
}
i++;
}
//System.out.println("Delay finalizado");
return ;
}
//metodo principal
public static void main(String[] args){
System.out.print("--> ");
System.out.println("Sistema prendido");
Sistema principal = new Sistema(4,2,1);
//mantiene el programa activo mientras no se de la orden de apagar el programa
System.out.println("Valores del sistema");
System.out.print("id--");
System.out.print(principal.id);
System.out.print(", tiempoPrendido--");
System.out.print(principal.tiempoPrendido);
System.out.print(", tiempoMuestreo--");
System.out.print(principal.tiempoMuestreo);
System.out.println("");
while (principal.apagar != 1){
principal.delay(100000);
principal.aumentarContadorMuestreo();
principal.aumentarContadorPrendido();
}
System.out.print("--> ");
System.out.println("Systema apagado");
}
//fin del programa
} </pre>La implementación del código da como resultado:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiMOfpAany6WiFwa_vYCbdQBYerwvKx6e1xHoGB6ZzVEi_tekG25wIEJl6D-0iG_hZVOE6C9vK2WiBrxywmebYqQCOO48nveIiN1hKq1XtZjYOdQQWD-VkpZdQfb4ejNwp0EjNpTRdTRM/s1600/Screenshot-2.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="173" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiMOfpAany6WiFwa_vYCbdQBYerwvKx6e1xHoGB6ZzVEi_tekG25wIEJl6D-0iG_hZVOE6C9vK2WiBrxywmebYqQCOO48nveIiN1hKq1XtZjYOdQQWD-VkpZdQfb4ejNwp0EjNpTRdTRM/s400/Screenshot-2.png" width="400" /></a></div><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Como se puede ver el sistema se inicia, luego muestra las variables del sistema.<br />
Después nos muestra el valor de cada iteración con valor de tiempo prendido y cada cierto tiempo<br />
trata de conectar con el dispositivo bluetooth.<br />
Cuando llega al número de iteraciones que tiene que realizar termina el programa.<br />
Por el momento esto es todo lo que tengo, pero conforme pasen los dias pienso agregar la comunicación<br />
bluetooth y la funcionalidad de usuario, usando los eventos y luego guardar datos en un <br />
archivo de texto por el momento.<br />
<br />
<br />
Todos los comentarios y sujerencias son bien recibidos.collihttp://www.blogger.com/profile/03958651874427482292noreply@blogger.com0tag:blogger.com,1999:blog-7021726837655990988.post-61977540641417108192011-03-16T23:39:00.000-07:002011-03-16T23:39:10.608-07:00Diagramas de clase y secuencia de UML<div id="__ss_7290877" style="width: 425px;">Diagramas de mi proyecto de software.</div><div id="__ss_7290877" style="width: 425px;"><br />
</div><div id="__ss_7290877" style="width: 425px;"><b style="display: block; margin: 12px 0pt 4px;"><a href="http://www.slideshare.net/colli03/diagramas-uml2" title="Diagramas uml2">Diagramas uml2</a></b> <object height="355" id="__sse7290877" width="425"> <param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=diagramasuml2-110317013433-phpapp01&stripped_title=diagramas-uml2&userName=colli03" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse7290877" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=diagramasuml2-110317013433-phpapp01&stripped_title=diagramas-uml2&userName=colli03" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed> </object> <br />
<div style="padding: 5px 0pt 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/colli03">colli03</a> </div></div>collihttp://www.blogger.com/profile/03958651874427482292noreply@blogger.com2tag:blogger.com,1999:blog-7021726837655990988.post-50177399659707405752011-03-16T22:33:00.000-07:002011-03-16T22:51:16.439-07:00Herramientas para diagramas de clase y secuencia de UML; autogeneración de códigoExisten muchas herramientas que permiten la creación de diagramas UML, de las cuales yo utilize umbrello.<br />
La instalación en Ubuntu es muy sencilla, basta con teclear desde terminal:<br />
<i>sudo apt-get install umbrello</i><br />
<br />
Para correr el programa, se puede hacer desde terminal tecleando:<br />
<i>umbrello &</i><br />
<br />
Una imagen de como se ve un diagrama en el programa.<i> </i><br />
<i><br />
</i><br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjPRYqQfeYMhS785im713xk70rB6-Ilsnttla66hFJBaNxHPD1qBXyhfl_kHhj9jmdYk0elhgcjuY1mt9rH7X0lKEKqmqFAi8ftuNoLQBSLDqKSQ9vGgzRIL04C4DmgM8wapBH5Kfj12Y/s400/umbrello.png" width="400" /> </div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div style="text-align: left;">Código generado en base al diagrama de clases de la foto anterior.</div><div style="text-align: left;"> </div><div style="text-align: left;"> </div><br />
<pre class="brush: java">//
/**
* Class elemento
*/
public class elemento {
//
// Fields
//
public boolean activo; /**
* Clase principal del sistema
* */
public String nombre;
//
// Constructors
//
public elemento () { };
//
// Methods
//
//
// Accessor methods
//
/**
* Set the value of activo
* @param newVar the new value of activo
*/
public void setActivo ( boolean newVar ) {
activo = newVar;
}
/**
* Get the value of activo
* @return the value of activo
*/
public boolean getActivo ( ) {
return activo;
}
/**
* Set the value of nombre
* Clase principal del sistema
*
* @param newVar the new value of nombre
*/
public void setNombre ( String newVar ) {
nombre = newVar;
}
/**
* Get the value of nombre
* Clase principal del sistema
*
* @return the value of nombre
*/
public String getNombre ( ) {
return nombre;
}
//
// Other methods
//
/**
*/
public void apagarElemento( )
{
}
/**
*/
public void prenderElemento( )
{
}
}
</pre><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;">Documentación sobre el uso de umbrello.</div><div class="separator" style="clear: both; text-align: left;"><a href="http://docs.kde.org/stable/en/kdesdk/umbrello/working-with-umbrello.html">http://docs.kde.org/stable/en/kdesdk/umbrello/working-with-umbrello.html</a></div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;">Documentación para leer sobre diagramas UML.</div><div class="separator" style="clear: both; text-align: left;"><a href="http://www.agilemodeling.com/artifacts/">http://www.agilemodeling.com/artifacts/</a></div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><i> </i>collihttp://www.blogger.com/profile/03958651874427482292noreply@blogger.com1tag:blogger.com,1999:blog-7021726837655990988.post-16418591334647816672011-02-14T22:21:00.000-08:002011-02-14T22:21:11.087-08:00Presentación del proyectoEsta es la presentación de mi proyecto, donde muestro una breve descripción sobre lo que trato de hacer.<br />
<br />
<br />
<div style="width:425px" id="__ss_6927795"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/colli03/proyecto-final-de-poo-6927795" title="Proyecto final de POO">Proyecto final de POO</a></strong><object id="__sse6927795" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=opp2-110215000410-phpapp02&stripped_title=proyecto-final-de-poo-6927795&userName=colli03" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse6927795" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=opp2-110215000410-phpapp02&stripped_title=proyecto-final-de-poo-6927795&userName=colli03" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/colli03">colli03</a>.</div></div>collihttp://www.blogger.com/profile/03958651874427482292noreply@blogger.com2tag:blogger.com,1999:blog-7021726837655990988.post-53266204090774868642011-02-10T08:16:00.000-08:002011-02-10T08:34:50.085-08:00Herencia y polimorfismo: modularidad reutilización de códigosemana 3<br />
Laboratorio de programación orientada a objetos.<br />
<br />
<pre class="brush: java">// clase padre de las demas clases
public abstract class Activo {
//variables
boolean prendido;
int tiempo;
public void prender(){
prendido = TRUE
}
public void apagar(){
prendido = FALSE
}
public void modificarTiempo(int tiempo){
this.tiempo=tiempo
}
}
</pre><br />
<br />
<br />
<br />
<pre class="brush: java">// recibe entrada desde teclado y llama a clase control
public class Controles extends Activo implements ActionListener {
super(TRUE,n); // n número de milisegundos que toma un objeto en ejecutar un proceso
public void actionPerformed(){
// código para detectar las teclas que pulsa el usuario
ejecutar(algo-pasa);
}
public void ejecutar(algo-pasa){
if(algo-pasa == x-cosa){
Control.interpretaDatos(algo-pasa);
}
}
}
}
 </pre><p>El código anterior muestra como aplico la herencia en mis clases. </p>collihttp://www.blogger.com/profile/03958651874427482292noreply@blogger.com1tag:blogger.com,1999:blog-7021726837655990988.post-37216973720690074212011-02-10T07:23:00.000-08:002011-02-10T07:47:52.919-08:00Herencia y polimorfismo: modularidad reutilización de código<b>Semana 3</b><br />
<b>clase de programación orientada a objetos.</b><br />
<b><br />
</b><br />
En esta semana se vieron los conceptos de herencia y polimorfismo, en mi proyecto tengo clases que heredan metodos y/o atributos, hago una breve descripción de ellas.<br />
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg6X9lOLq_DhdNhyphenhyphen8uXsp81wnvHvruUjhoRknAkzHkaaXdKiPcXZ0s8T6fmlv50lk23iF1bHaOhqNk8uJdmNVlri2T6zV5yPLXmPCtpRDO7sX34UROzmOckg6ByZWih5VckOLZRMkztds/s1600/herencia.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="186" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg6X9lOLq_DhdNhyphenhyphen8uXsp81wnvHvruUjhoRknAkzHkaaXdKiPcXZ0s8T6fmlv50lk23iF1bHaOhqNk8uJdmNVlri2T6zV5yPLXmPCtpRDO7sX34UROzmOckg6ByZWih5VckOLZRMkztds/s400/herencia.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td><td class="tr-caption" style="text-align: center;"><br />
</td></tr>
</tbody></table>Breve explicación. Tengo una clase llamada activo la cual se encarga de activar o desactivar cada objeto y de cuanto tiempo van a estar tomando para ejecutar su proceso ( multihilos). De esa clase heredan todas las demas clases que tengo en mi programa.<br />
<br />
<br />
Además la clase comunicador hereda de una clase de la api de java para comunicación via bluetooth y la clase reporte hereda de la clase JPanel.<br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><b><br />
</b>collihttp://www.blogger.com/profile/03958651874427482292noreply@blogger.com1tag:blogger.com,1999:blog-7021726837655990988.post-61922131273550349352011-02-02T21:59:00.000-08:002011-02-02T22:17:36.847-08:00Instalando leJOS NXT en UbuntuSucede que existen unos dispositivos llamados Lego Mindstorms, los cuales pueden ser programados en Java usando una librería llamada leJOS NXT.<br />
<br />
En este tutorial vamos a aprender a instalarla en Ubuntu.<br />
<br />
<b>Pasos para instalar leJOS NXJ. </b><br />
<br />
1) Primero ocupamos instalar las siguientes librerias: libusb,libusb-dev, libbluetooth-dev, ant y gcj.<br />
<i>sudo apt-get install libusb libusb-dev libbluetooth-dev ant gcj</i><br />
<br />
En caso de que libusb no se instale directamente desde la terminal, descargamos el archivo de la siguiente pagina.<br />
<a href="http://sourceforge.net/projects/libusb/files/libusb-1.0/">http://sourceforge.net/projects/libusb/files/libusb-1.0/</a><br />
<br />
Luego extraemos el archivo.<br />
<i>cd /Downloads</i><br />
<i>tar -xvf libusb-1.0.8.tar.bz2</i><br />
<br />
Vamos a la carpeta que contiene la librería. <br />
<i>cd libusb-1.0.8/</i><br />
<br />
Instalamos la librería con los siguientes comandos. <br />
<i>./configure</i><br />
<i>make</i><br />
<i>sudo make install </i><br />
<br />
2) Luego descargo la versión de leJos desde la siguiente dirección: <a href="http://sourceforge.net/projects/lejos/files/lejos-NXJ/0.8.5beta/lejos_NXJ_0_8_5beta.tar.gz/download">http://sourceforge.net/projects/lejos/files/lejos-NXJ/0.8.5beta/lejos_NXJ_0_8_5beta.tar.gz/download</a><br />
<br />
Extraemos el contenido del archivo.<br />
<i>tar -xvf lejos_NXJ_0_8_5beta.tar.gz</i><br />
<br />
Cambiamos el nombre a la carpeta.<br />
<i>mv lejos_NXJ_0_8_5 lejos</i><br />
<br />
Movemos la carpeta a otra dirección, en mi caso es la siguiente. <br />
<i>mv lejos /opt/</i><br />
<br />
3) Necesitamos añadir las variables de entorno de las nuevas librerias.<br />
Nos dirigimos a la carpeta /etc/profile.d/<br />
<i>cd /etc/profile.d/</i><br />
<br />
Creamos un script llamado <i>nxt.sh</i>, que tenga lo siguiente:<br />
<br />
<i>export NXJ_HOME="/opt/lejos"<br />
export PATH=$PATH:$NXJ_HOME/bin<br />
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$NXJ_HOME/bin</i><br />
<br />
Hay que asegurarnos de darle permisos de ejecucion al script<br />
<i>sudo chmod u+x nxt.sh</i><br />
<br />
4) Compilamos la librería.<br />
<i>cd /opt/lejos/build</i><br />
<i>ant</i><br />
<br />
Inicialmente no tenemos permiso de escribir sobre el dispositivo usb o bluetooth, por lo que no podemos programar el lego. Esto es por motivos de seguridad. Para cargar el programa en el lego hacemos lo siguiente.<br />
<br />
5) Creamos un grupo de usuarios llamado "lego", los cuales pueden cargar programas al dispositivo.<br />
<i>sudo addgroup lego</i><br />
<br />
Nos agregamos al grupo "lego":<br />
<i>sudo usermod -a lego tuusuario</i><br />
<i> </i> <br />
Creamos el siguiente archivo. <br />
<i>sudo gedit /etc/udev/rules.d/70-lego.rules</i><br />
<br />
Escribimos lo siguiente:<i> </i><br />
<i># Lego NXT</i><br />
<i>BUS=="usb", SYSFS{idVendor}=="03eb", GROUP="lego", MODE="0660"</i><br />
<i>BUS=="usb", SYSFS{idVendor}=="0694", GROUP="lego", MODE="0660"</i><br />
<br />
6) Guardamos el archivo y ya estamos listos para programar nuestro lego.<br />
<br />
Para confirmar que todo funciona bien tecleamos en la terminal:<br />
<i>nxjc</i><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqRhyphenhyphenIqQ8srCOViLRX3PokMCOTI2mBH1tWuv5lJe5t9DJtibZ7c6npsdvDqprNhRKeUqhglLBhoJvenzOZz8zyeJbR0SLdGkt4X6vqEoKmYT87_lEdui93Ev14gJnpdw7acvcTF-KRj8E/s1600/terminal3.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="163" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqRhyphenhyphenIqQ8srCOViLRX3PokMCOTI2mBH1tWuv5lJe5t9DJtibZ7c6npsdvDqprNhRKeUqhglLBhoJvenzOZz8zyeJbR0SLdGkt4X6vqEoKmYT87_lEdui93Ev14gJnpdw7acvcTF-KRj8E/s400/terminal3.png" width="400" /></a></div><br />
Si en la terminal aparece el mismo contenido que se ve en la imagen, entonces todo salio bien.<br />
<br />
Referencias:<br />
<a href="http://robobyte.blogspot.com/2010/02/instalar-lejos-en-ubuntu-910.html">http://robobyte.blogspot.com/2010/02/instalar-lejos-en-ubuntu-910.html</a>collihttp://www.blogger.com/profile/03958651874427482292noreply@blogger.com1tag:blogger.com,1999:blog-7021726837655990988.post-48725059765044100912011-02-02T21:48:00.000-08:002011-02-02T22:16:13.755-08:00Semana 1 (laboratorio): Herramientas para el desarrollo del proyecto<b>Lenguajes de programación.</b><br />
<br />
Java y/o Python. El hecho de que exista una aplicación de Java para programar los legos Mindstorms (leJos) y que existan muchos proyectos desarrollados con esa aplicación me hizo optar por usar Java como lenguaje principal de mi proyecto (en lo personal me gusta mas Python), pero podria mezclar un poco de Java y Python para el proyecto.<br />
<br />
Python ya viene por defecto en Ubuntu Linux, para comprobarlo abrimos una terminal y tecleamos python. Nos aparecera la versión que tenemos instalada, significa que podemos hacer código en Python sin mayor problema.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFCfQeb-RdhkClaD2Qo_bB0PxhnIRlzkUzqn6ADMOCBKftq6GjD9FsgTrR9szOWaWGPb8T1QlL1-QCJNzMrN8VYbGNnD0tR7TpNNiU9Yt_QMprTkn3FOanwKsBpqj9C0ICl4FJw-r23dA/s1600/terminal1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="116" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFCfQeb-RdhkClaD2Qo_bB0PxhnIRlzkUzqn6ADMOCBKftq6GjD9FsgTrR9szOWaWGPb8T1QlL1-QCJNzMrN8VYbGNnD0tR7TpNNiU9Yt_QMprTkn3FOanwKsBpqj9C0ICl4FJw-r23dA/s400/terminal1.png" width="400" /></a></div><br />
Para poder ejecutar codigo en Java ocupamos Java Development Kid (JDK), para instalarlo tecleamos en la terminal:<br />
<i>s</i><i>udo apt-get install sun-java6-jdk</i>.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoD2xMPSKjELiB7MWBgtIeTl6uQHk5-hmaRKiC2itn685ft0H30ef5q62CWJmyucnNpa3fk-eOuLsLrZGWdMOg9eu1_CGYQqDtIx8x3V-LDRdaCsJacGqQrRRyHAePTs3nZhHAxIUUMp4/s1600/terminal2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="131" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoD2xMPSKjELiB7MWBgtIeTl6uQHk5-hmaRKiC2itn685ft0H30ef5q62CWJmyucnNpa3fk-eOuLsLrZGWdMOg9eu1_CGYQqDtIx8x3V-LDRdaCsJacGqQrRRyHAePTs3nZhHAxIUUMp4/s400/terminal2.png" width="400" /></a></div><br />
<b><span style="font-family: Arial,Helvetica,sans-serif;">Editores.</span></b><br />
<br />
Principalmente emacs. <br />
<i>sudo apt-get install emacs</i>.<br />
<br />
<div style="font-family: Arial,Helvetica,sans-serif;"><b>Librerias principales.</b></div><br />
leJOS NXJ. Necesito esta librería para programa el robot (lego). <br />
<br />
Para instalar leJOS NXJ en ubuntu ver el siguiente tutorial.<br />
<a href="http://yoyo-yoyo01.blogspot.com/2011/02/instalando-lejos-nxt-en-ubuntu.html">http://yoyo-yoyo01.blogspot.com/2011/02/instalando-lejos-nxt-en-ubuntu.html</a><br />
<br />
<b>Libros y tutoriales.</b><br />
<br />
tutorial para programar en leJOS NXT: <b><br />
</b><br />
<a href="http://lejos.sourceforge.net/nxt/nxj/tutorial/index.htm">http://lejos.sourceforge.net/nxt/nxj/tutorial/index.htm</a><br />
<br />
libros de programación para Java y Python:<br />
<a href="http://www.openbookproject.net/thinkcs/">http://www.openbookproject.net/thinkcs/</a><br />
<br />
Estas son las principales herramientas que voy a usar para hacer mi proyecto.collihttp://www.blogger.com/profile/03958651874427482292noreply@blogger.com0tag:blogger.com,1999:blog-7021726837655990988.post-46763569966823011812011-02-02T20:30:00.000-08:002011-02-08T06:32:42.566-08:00Semana 2 (clase): Clases necesarias del softwareDe las principales clases que creo son necesarias, hasta ahora tengo estas:<br />
<br />
Clase comunicador. Esta clase se encarga de comunicar entre los dispositvos bluetooth de la computadora y el lego mindstorm.<br />
<br />
Clase controlador. Se encarga de mandar las señales de control al dispositivo, las cuales pueden venir de parte del usuario.<br />
<br />
Clase controles. Se encarga de recolectar los datos de entrada del usuario (puede ser por medio del teclado, un joystic o algun otro dispositivo) e interpretarlos para luego conectar con la clase control y pasarle los datos de entrada.<br />
<br />
Clase sensores. Se encarga de guardar la información recibida por algunos sensores, para luego guardarla en una base de datos (lo relacionado a la posición del robot y la dirección por mencionar algunos atributos no va incluido aqui).<br />
<br />
Clase movil. Guarda algunos datos del robot, como pueden ser: estado de la bateria, distancia recorrida, posición, velocidad, dirección, por mencionar algunas.<br />
<br />
Clase reporte. Muestra una gráfica de los datos que recibe la computadora, ademas de realizar algunos análisis a los datos y mostrarlos al usuario.<br />
<br />
Ademas de los gráficos, esto por ahora lo que tengo en mente y a partir de lo cual voy a empezar a desarrollar. Conforme avance el proyecto hare algunos cambios, pero hasta entonces esto es lo principal.collihttp://www.blogger.com/profile/03958651874427482292noreply@blogger.com1tag:blogger.com,1999:blog-7021726837655990988.post-410236355966667392011-02-02T20:01:00.000-08:002011-02-02T20:10:45.684-08:00Semana 1: Definición de tema de proyectoEl proyecto que quiero realizar en este semestre trata acerca de controlar un lego nxt desde una computadora, usando para ello comunicación via bluetooth.<br />
<br />
La computadora mandara instrucciones instrucciones de control al lego, y este a su vez comunica a la computadora y manda datos recolectados por los sensores que tiene agregados.<br />
<br />
Ademas de lo ya mencionado, quiero añadir una función que grafique los datos que el lego manda a la computadora. De tal manera que estos datos puedan ser analizados aplicando tecnicas de control y procesamiento de señales.<br />
<br />
<br />
La intención de realizar este proyecto es que posteriormente se añadan mas funcionalidades a este software y pueda ser un sistema de control y procesamiento de datos de sistemas integrados, via remota. Puesto que actualmente el desarrollo de vehiculos no tripulados y sistemas inteligentes esta teniendo mucho desarrollo.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8zNMRqVjxOrB-cPYCvY8dEykR_427rVoQCDQU_KtWAYMIkqYfS3h_yqCDMNg2T50u3HH9odb-PiuhXc0VpSacvf7LSYQeMIgkwlUEbWRpDeF1rr5fao08mElHCHMAYTDvvLYff3Ri5MI/s1600/nxt.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8zNMRqVjxOrB-cPYCvY8dEykR_427rVoQCDQU_KtWAYMIkqYfS3h_yqCDMNg2T50u3HH9odb-PiuhXc0VpSacvf7LSYQeMIgkwlUEbWRpDeF1rr5fao08mElHCHMAYTDvvLYff3Ri5MI/s1600/nxt.jpeg" /></a></div>collihttp://www.blogger.com/profile/03958651874427482292noreply@blogger.com0