De regreso a los applets en Java

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 :P , 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:

Free Image Hosting at www.ImageShack.us

QuickPost
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 :P .

Califica el tema:
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

Netbeans 6.5

Desarrollo web, GNU/Linux, Gentoo, Programación No Comments

Hace ya algunas semanas que salió a la luz la versión 6.5 de Netbeans. Podemos ver un par de screencast de las nuevas características (sobre todo para el entorno de programación web):

http://blogs.sun.com/netbeansphp/entry/demo_of_the_php_distribution

Podemos ver cómo instalarlo de forma generalizada para cualquier distribución GNU/Linux en Wikipedia: http://es.wikipedia.org/wiki/NetBeans_IDE#Instalaci.C3.B3n_en_Linux. En Gentoo, por el momoento, es necesario pasar a rama inestable ~x86 el paquete (y sus respectivas dependencias) con autounmask:

# Necesitamos que portage >= 2.1.6
autounmask -n sys-apps/portage-2.1.6_rc2
emerge portage
autounmask dev-util/netbeans-6.5-r2
emerge netbeans

Podemos también seleccionar que módulos se van a instalar para dar soporte a las diferentes características de netbeans: http://en.gentoo-wiki.com/wiki/Netbeans#Selecting_NetBeans_Modules. Nota: Que si activan nuevos módulos es necesario volver a ejecutar autounmask para que resuelva las nuevas dependencias ( aunque lo correcto sería primero seleccionar los módulos y después ejecutar autounmask :P ).

Califica el tema:
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

GCC - Generando código en lenguaje ensamblador

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!! :D . 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:
1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 5 out of 5)
Loading ... Loading ...

Notepad++ y TASM II

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 principal


Directorio build

Directorio build


Directorio exes

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:
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

Desinstalar correctamente Adobe Flash CS3

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

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

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:
1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 4 out of 5)
Loading ... Loading ...

« Previous Entries