December 8, 2008
soullost
General, Programación
2 Comments
Nada interesante. Me ha llegado un “pedido de programa” al correo, es de un tal Eric Villanueva, el correo dice:
Hola que tal, buscando en la web encontre tus datos, y es que necesito de tu ayuda si me la otorgas por favor con un ejercicioo de java, el cual consiste en que tengo dos listas una con paises y la otra con sus capitales, y mi tope ahorita que es que no puedo hacer correctamente el codigo para que cuando selecciones un pais te de su capital y se impriman en su cuadro de texto correspondiente, hasta el momento llevo esto:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class paises extends Applet implements ItemListener
{
Choice pais,ciud;
TextArea pai,ciu;
String cad;
public void init()
{
pais=new Choice();
ciud= new Choice();
pai=new TextArea();
ciu=new TextArea();
pais.add(”MEXICO”);
pais.add(”BRASIL”);
pais.add(”ARGENTINA”);
pais.add(”INGLATERRA”);
pais.add(”CANADA”);
pais.add(”USA”);
pais.add(”JAPON”);
pais.add(”EGIPTO”);
pais.add(”ESPAÑA”);
pais.add(”ALEMANIA”);
ciud.add(”D.F.”);
ciud.add(”BRASILIA”);
ciud.add(”BUENOS AIRES”);
ciud.add(”LONDRES”);
ciud.add(”OTTAWA”);
ciud.add(”W.D.C.”);
ciud.add(”TOKIO”);
ciud.add(”EL CAIRO”);
ciud.add(”MADRID”);
ciud.add(”BERLIN”);
setLayout( null );
pais.setBounds (10,10,100,30);
pai.setBounds (120,10,100,200);
ciud.setBounds (310,10,100,30);
ciu.setBounds (420,10,100,200);
add (pais);
add (pai);
add (ciud);
add (ciu);
pais.addItemListener (this);
ciud.addItemListener (this);
}
public void itemStateChanged (ItemEvent ie)
{
cad = pais.getSelectedItem();
pai.append(cad);
cad = ciud.getSelectedItem();
ciu.append(cad);
}
}
gracias
Anda ps. No es que me guste hacer las tareas de otros
, pero he aprovechado para probar un poco Netbeans, que lo tengo recién instalado (además, espero limpiar mi lista de mal karma). Como sea, tenía bastante tiempo de no tocar Java y sobre todo, los applets (que tampoco fue gran cosa, un puñado de programas de ejercicio en la universidad). Para empezar, se me hace más fácil agregar los elementos de una lista por medio de un arreglo:
String [] paises = {"MEXICO", "BRASIL","ARGENTINA",
"INGLATERRA","CANADA", "USA", "JAPON","EGIPTO",
"ESPAÑA","ALEMANIA"};
String [] capitales = {"D.F.", "BRASILIA", "BUENOS AIRES",
"LONDRES", "OTTAWA", "W.D.C.", "TOKIO", "EL CAIRO",
"MADRID", "BERLIN" };
for(int i=0; i<10; i++)
{
LPaises.add(paises[i]);
LCapitales.add(capitales[i]);
}
En base a la lógica de los arreglos, el problema se vuelve más fácil de realizar por medio de los indices de dichos elementos. Es obvio que el applet requiere del control de los eventos de la lista, es por eso que se utiliza implements ItemListener (que tenía una vaga idea de lo que significaba, pero tardé un rato buscando en google). Después de dibujar los elementos de applet (dos Listas y un TextArea) y sus respectivas características (que por cierto, Netbeans tiene su editor gráfico de GUIs, al puro estilo de Visual Studio), sólo falta programar la parte de los eventos (cuando el usuario seleccione un elemento de la lista). Se hace de la siguiente forma:
public void itemStateChanged (ItemEvent e){
System.out.println(e.getItemSelectable());
if(e.getItemSelectable()==LPaises){
LCapitales.select(LPaises.getSelectedIndex());
textArea1.setText(LPaises.getSelectedItem() + "\n" + LCapitales.getSelectedItem());
textArea1.setEditable(false);
}
}
En esta parte, se verifica que el evento proviene de la Lista de los países (if(e.getItemSelectable()==LPaises)), si es así, se selecciona el mismo índice de la Lista LCapitales que el elemento seleccionado en la Lista LPaíses (LCapitales.select(LPaises.getSelectedIndex());) y después, se agrega el texto de los dos elementos seleccionados al TextArea (textArea1.setText(LPaises.getSelectedItem() + “\n” + LCapitales.getSelectedItem());). Por último, se desactiva la posibilidad de hacer uso del TextArea (textArea1.setEditable(false);).
Imagen:


http://img393.imageshack.us/img393/2323/applet01va8.png
Espero con esto solventar la duda. Y espero, que no me sigan enviando correos de ese tipo
.
Califica el tema:

Loading ...
December 4, 2008
soullost
GNU/Linux, Lenguaje Ensamblador, Programación
No Comments
Esta entrada es sólo como dato curioso sobre una de la funciones de gcc. A través de gcc podemos generar código ensamblador, más específicamente, un archivo .s a partir de un archivo de código fuente como el lenguaje C. Por ejemplo, teniendo el siguiente código:
#include <stdio.h>
int main(){
int a=10;
int b=5;
a = a + b;
return 0;
}
Generamos el código ensamblador correspondiente con: gcc -S suma.c , esto nos crea un archivo suma.s con lo siguiente:
.file "suma.c"
.text
.globl main
.type main, @function
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $16, %esp
movl $10, -12(%ebp)
movl $5, -8(%ebp)
movl -8(%ebp), %eax
addl %eax, -12(%ebp)
movl $0, %eax
addl $16, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
.size main, .-main
.ident "GCC: (GNU) 4.1.2 (Gentoo 4.1.2 p1.0.2)"
.section .note.GNU-stack,"",@progbits
Podemos ver las asignaciones a las variables y la operación suma:
movl $10, -12(%ebp)
movl $5, -8(%ebp)
movl -8(%ebp), %eax
addl %eax, -12(%ebp)
El código ensamblador que ha generado usa por default la sintaxis de AT&T. Para generar en sintaxis de Intel podemos usar la opción -masm=intel (-masm=att, para AT&T), lo que da como resultado:
.file "suma.c"
.intel_syntax
.text
.globl main
.type main, @function
main:
lea %ecx, [%esp+4]
and %esp, -16
push DWORD PTR [%ecx-4]
push %ebp
mov %ebp, %esp
push %ecx
sub %esp, 16
mov DWORD PTR [%ebp-12], 10
mov DWORD PTR [%ebp-8], 5
mov %eax, DWORD PTR [%ebp-8]
add DWORD PTR [%ebp-12], %eax
mov %eax, 0
add %esp, 16
pop %ecx
pop %ebp
lea %esp, [%ecx-4]
ret
.size main, .-main
.ident "GCC: (GNU) 4.1.2 (Gentoo 4.1.2 p1.0.2)"
.section .note.GNU-stack,"",@progbits
Como dije al inicio del post, sólo escribo esto como dato curioso. De hecho, el compilador pasa de código C a un archivo preprocesado (.i), luego a código ensamblador, genera después un archivo objecto (.o) y posteriormente crea el ejecutable. Se pueden observar las diferentes etapas usando las siguientes opciones:
# Genera archivo preprocesado
gcc suma.c -E -o suma.i
# Código ensamblador
gcc suma.c -S
# Archivo objeto
gcc suma.c -c
Por lo que llegamos a una conclusión, todos alguna vez, hemos escrito programas en ensamblador!!
. Gracias a la abstracción de lenguajes de alto nivel podemos crear programas sin tener mucha idea de como funciona nuestra computadora (mas aún, el procesador, la memoria, la tarjeta gráfica, .., etc). Digan-le ustedes a un programador en ActionScript que escriba sus mismos programas en ensamblador XD.
Califica el tema:

Loading ...
November 25, 2008
soullost
Lenguaje Ensamblador, Programación
No Comments
Después del mi primer post (http://soullost.org/programacion/notepad-y-tasm/) sobre Notepad++ y la posibilidad de poder compilar/ejecutar programas hechos en ensamblador (con Turbo Assembler) mediante archivos batch, he modificado los archivos para así poder tener un mejor orden. Anteriormente, los archivos generados mediante la compilación quedaba en la misma carpeta que el archivo fuente, ahora, se crean dos directorios nuevos: build y exes. En build, contendrá los archivos de listados, los archivos objetos y los archivos map. En exes, contendrá todos los ejecutables generados.
Imágenes:

Directorio principal

Directorio build

Directorio exes
También antes solo usaba dos archivos batch para tales motivos, ahora son tres, uno para compilar y enlazar, otro para correr el programa y uno más para llamar a mandar al depurador. Los archivos son los siguiente:
Nombre: tasm.bat
Ejecutar: $(NPP_DIRECTORY)\tasm.bat $(NAME_PART) $(CURRENT_DIRECTORY) $(NPP_DIRECTORY)
echo off
PATH="%3\tasm\"
TITLE COMPILANDO %1
CLS
CD %2
if NOT EXIST build mkdir build
echo Compilando...
tasm /l %1 build\ build\
echo Link...
if NOT EXIST exes mkdir exes
tlink build\%1, exes\%1.exe, build\%1.map
echo.
pause
Nombre: execute.bat
Ejecutar: $(NPP_DIRECTORY)\execute.bat $(NAME_PART) $(CURRENT_DIRECTORY)
echo off
TITLE EJECUTANDO %1
CLS
CD %2\exes\
echo Ejecutando...
echo.
%1.exe
echo.
pause
Nombre: td.bat
Ejecutar: $(NPP_DIRECTORY)\td.bat $(NAME_PART) $(CURRENT_DIRECTORY) $(NPP_DIRECTORY)
echo off
PATH="%3\tasm\"
CLS
CD %2\exes\
td -jn %1.exe
Para terminar, ya no utilizo un “tasm instalado”, tengo los ejecutables correspondiente (tams.exe, tlink.exe, td.exe y rtm.exe) en una carpeta tasm en el directorio apuntado por la variable $(NPP_DIRECTORY).
Califica el tema:

Loading ...
November 9, 2008
soullost
General
2 Comments
Estoy viendo algunas cosas de ActionScript 3 [http://es.wikipedia.org/wiki/ActionScript] y como es lógico necesito la versión de Adobe Flash CS3. Procedí a instalarlo y durante el proceso, se fue la maldita luz xD. Después trate de instalarlo nuevamente pero, me marcaba el error siguiente:
Critical error were found in setup for Adobe Photoshop CS3:
The installer database is invalid: please re-install the product from the original media. Please see the Setup log file for details.
Corrí rápido a desinstalar desde Agregar o quitar programas y nada, el mismo error, no me dejaba hacer nada, ni desinstalar ni reinstalarlo. Después de tanto buscar en Google y casi con ganas de hacer el trabajo sucio manualmente, encontré dos programas que nos ayudaran a desinstalar correctamente todo.
Nota: Este proceso puede aplicar con otros tipos de errores similares al pasar de la versión beta de Adobe Flash CS3 a la versión final (según he visto en muchos foros, existen muchos problemas).
Los programas son:
- Windows Installer CleanUp Utility [http://support.microsoft.com/kb/290301].
- Adobe CS3Clean Script [http://www.adobe.com/support/contact/cs3clean.html].
Proceso
Ejecutamos Windows Installer CleanUp y seleccionamos todo lo referente a Adobe, después, damos clic en Remove. Una vez que termine, ya estamos listos para ejecutar el script de Adobe.

Windows Installer CleanUp Utility
El script trae un asistente con una serie de preguntas, hay que tener especial cuidado en la siguiente:

Script CS3 Clean
Nos pregunta si queremos hacer una vista previa del proceso de desinstalación, si ponemos que si (s), simulara que está desinstalando todo pero, no sera así, debemos dar que no (n), para que el proceso se lleve a cabo.
Despues de todo esto, ya pude reinstalar correctamente Adobe Flash CS3. Como aclaración, tuve que ejecutar primero el Windows Installer CleanUp Utility porque no me dejaba correr el script CleanCS3 correctamente, posiblemente, a alguien le pueda funcionar solo ejecutando dicho script.
Califica el tema:

Loading ...
« Previous Entries