martes, 31 de julio de 2007

Aprendiendo Ensamblador con Software Libre

Actualmente estoy intentando usar Software Libre en todas mis clases, como un intento de avanzar con la revolución que apoyamos los amantes del SL, aquí les va mi experiencia con ensamblador:

Este semestre me tocó ser profesor de la unidad de Ensamblador en la Universidad. Al principio pensaba usar MacroAssembler de Micro$oft para mis clases, como el resto de mis compañaros, pero al final después de buscar un ensamblador libre me topé con NASM (NetWide Assembler) en la version 0.98.39, realmente fue una buena opción, me sentí más cómodo que trabajando con el MASM aunque por su puesto encontré algunas complicaciones como en las macros y procedimientos, pero después de todo nada se compara con la 'LIBERTAD', es decir sentir que estás haciendo las cosas legalmente.

Al inicio pensé que sólo era bueno para Linux, pero después de 'surfear' y de 'dolores de muela' al fín pude empezar a trabajar en DOS.
Trabajamos en DOS por ahora, pero aspiro al siguiente módulo (si Dios quiere) hacerlo ya sobre Linux.
Otra de las gratas sorpresas que tuve fue cuando encontré que Jeff Duntemanns usaba también en su libro "Assembly Language Step by Step" las herramientas que yo había seleccionado.


Aquí lo que usé para mis clases:

NASMIDE 1.8: Un ide para NASM en DOS, parecido a mi recordado Turbo Pascal.
http://home.comcast.net/~fbkotler/nasmide.zip

NASM 0.98.39: El Ensamblador más comodo para programar en Linux y DOS
http://sourceforge.net/projects/nasm

ALINK 1.6: Un linker o enlazador libre
http://alink.sourceforge.net

viernes, 20 de julio de 2007

Ultima Tarea

PRIMERA PARTE: Cree un programa llamado 'Keboard' en donde realice lo siguiente:
  • Cree un objeto Scanner llamado 'scn' utilizando la sentencia:
    Scanner scn = new Scanner(System.in);
  • Añada además a esta sentencia un comentario que indique que constructor de la clase Scanner está utilizando. y Desde donde se van a leer los tokens.
  • Cree una para almacenar objetos de tipo 'Person' (la clase creada en la tarea anterior)
  • Dentro de un ciclo repetitivo pida al usuario que ingrese cada uno de los datos necesarios para construir un objeto 'Person' y luego añadirlo a su lista.
  • El ciclo repetivo debería ejecutarse hasta que el usuario decida no ingreasr más datos.
  • Finalmente presente su lista con todos sus elementos.
    OJO: La ejecución del programa debe realizarla desde una
    consola de DOS (sí­mbolo del sistema) para que sea satisfactoria y no desde eclipse.



SEGUNDA PARTE: Cree en su clase 'ListaEmpleados' un método llamado grabarDatos(): void que realice lo siguiente:
  • Cree un flujo (stream) de SALIDA hacia cada uno de los archivos de texto: 'asalariados.txt', 'porhoras.txt' o 'porcomision.txt'
  • Busque las Clases de Stream adecuadas para escribir datos de manera sencilla a través de los métodos conocidos print, println o printf y construya los objetos necesarios para conectar a los stream que referencian a los archivos de texto mensionados.
  • Dentro de un ciclo repetitivo escriba los valores de todas las propidades (estado) de todos los objetos 'Empleado' contenidos en el atributo 'lista' de su clase ListaEmpleados.
    OJO: Antes de escribir los datos necesita usar el operador 'instanceof' (Que debe ser investigado por Ud) para determinar a que archivo de enviar los datos.
  • Tenga en cuenta los separadores entre datos que debe usar al escribir en los archivos, para una adecuada lectura posterior.
  • Pruebe el funcionamiento del método desde una clase cualquiera.
*** SUERTE EN EL EXAMEN CHICOS ***
/\/\;/

miércoles, 18 de julio de 2007

SOLUCION A PROBLEMAS DE LA TAREA

Animo chicos, tranquilos que tiene solución, aquí van algunas pautas:

FileNotFoundException: El (los) archivo(s) .TXT tienen
que ubicarlos en la carpeta de su proyecto, no en 'src' ni en 'bin'.

Ojo con el . (punto decimal) en los 'Doubles', depende de la configuración de su Window$
si tienen problemas tienen que usar la , (coma).

Cada archivo de texto tiene que tener ubicados los datos correactamente
para que el scanner los pueda tomar sin problemas.

PDTA: Espero que tengan listas las exposiciones para maniana.

lunes, 16 de julio de 2007

Uso de la Clase Scanner

PRIMERO: Cree un proyecto denominado ArchivosConScanner, en el mismo codifique las siguientes clases:

/******************************
* File Name: TestFile.java *
* Class Name: TestFile *
* (c) Milton Labanda *
*******************************/
import java.util.Scanner;
import java.io.File;

/**
* Clase que lee datos del Archivo de texto 'persons.txt'
* y crea objetos 'Person' para luego presentarlos como tal
*/

public class TestFiles{
public static void main(String [] args){
File file = new File("persons.txt");
Scanner scanner = null;
try{
scanner = new Scanner(file);
}catch(java.io.FileNotFoundException ex){
System.out.printf("%s",ex);
}
while (scanner.hasNext()){
String id = scanner.next();
String name = scanner.next();
Integer age = scanner.nextInt();
Double weight = scanner.nextDouble();
Person person = new Person(id,name,age,weight);
System.out.printf("%s",person);

}
System.out.printf("%n");
}
}

/********************************
* File Name: Person.java *
* Class Name: Person *
* (c) Milton Labanda *
*********************************/

/**
* Encapsula los datos de una Persona
*/
class Person{
private String id; //codigo
private String name; //nombre
private Integer age; //edad
private Double weight; //peso


public Person(){
}

public Person(String id, String name, Integer age, Double weight){
this.id = id;
this.name = name;
this.age = age;
this.weight = weight;
}

public String toString(){
return String.format(" ID\t: %10s %n" +
"name\t: %10s %n" +
"age\t: %10d %n" +
"weight\t: %10.3f" +
"%n%n",id,name,age,weight);
}
}

SEGUNDO: Cree el archivo de texto 'persons.txt' en el mismo directorio que se creó 'TestFiles.java'
con el siguiente contenido (utilice eclipse o bloc de notas):

1224 Juan 25 60.79
1456 Sara 23 65.789
3456 Carlos 12 50.8

NOTA: los datos están separados con tabuladores


TERCERO: Ejecute la clase TestFiles y Conteste las siguientes preguntas :
1. Que constructor de Scanner está usando?
2. Por qué se maneja la excepción FileNotFoundException?
3. Qué hace el método nextInt() y nextDouble()?
4. Cual és el resultado si los datos de las personas en el
archivo están en una sola línea?
5. Qué sucede si los datos de una persona en el archivo
no se separan con tabulador o espacio?

T A R E A:
Tomando como referencia el ejemplo desarrollado cree un método denominado 'cargarDatos():void' en
su clase 'ListaEmpleados' del proyecto 'Rol de Pagos', el cuál permita leer datos desde un 3 archivos diferentes dnominados 'asalariados.txt', 'porhoras.txt' y 'porcomision.txt', a partir de los cuales cree los objetos 'Empleado' paral luego agregarlos a 'lista'.

NOTA: Cualquier duda o pregunta puede realizarla a través de un comentario sobre esta entrada.*/