elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Java [Guía] Patrones de diseño - Parte 1


  Mostrar Temas
Páginas: [1] 2 3 4 5 6 7 8 9 10
1  Programación / Scripting / Amigo Batchero en: 12 Diciembre 2012, 04:16
Hola a todos, espero y estén bien todos.

He estado ausente durante mucho tiempo (aún me sigo preguntando por qué sigo de moderador :p ...), me he dado una pasada por el foro a ver qué tal va.

¿por qué siguen programando en Batch?

Durante mi estudio en algunas tecnologías he visto que son tecnologías que requieren de mucho tiempo y estudio ... y siempre pienso
"*****, debí haber empezado con esto hace años ..." y me viene a la mente todo aquel tiempo que "desperdicié" programando en Batch.

Por una parte sí creo que fue un desperdicio y por otra no, programar en Batch no te traerá ningún, absolutamente ningún beneficio en el ámbito laboral, salvo el conocimiento de algunos comandos, pero hasta ahí, sería sumamente raro que te pidieran alguna vez un script que hiciera X cosa, entonces ¿por qué seguir programando en Batch? en estos momentos deberían estar aprediendo otra cosa que les pudiera ser muchisimo más útil en un futuro. Si están utilizando Batch para aprender programación podrían hacerlo directamente en c, o en perl, o en python, o en ruby, o en Java, cualquier otra Cosa!!!

¡Aprendan un lenguaje que les deje algo!

Yo programé mucho tiempo en Batch, sin llegar a ningún lado, los conocimientos que adquirí en Batch no me han servido en lo absoluto.

Lo que daría yo en retroceder el tiempo y haber empezado a programar en Java.

Entonces, ahí está mi consejo, abandonen Batch y aprendan otra cosa, cualquier otra cosa.

Saludos.
2  Programación / Scripting / MOVIDO: Repetir canción en Ubuntu en: 8 Agosto 2012, 02:09
El tema ha sido movido a GNU/Linux.

http://foro.elhacker.net/index.php?topic=368613.0
3  Programación / Java / acceder componentes en JDialog | eclipse en: 6 Julio 2012, 01:38
Hola a todos.

Estoy usando Eclipse para construir una interfaz más cómodamente.

Tengo un JFrame y un JDialog, necesito acceder a la información o a los componentes del JDialog, pero no puedo a menos obviamente que utilice modificadores de acceso con static y public  :xD

¿Cuál es la manera en que esto se maneja en Eclipse? En Netbeans todo este manejo estaba por default, podías acceder a los componentes de otras ventanas desde el mismo JFrame.

Saludos.
4  Programación / Programación General / ¿Y si creamos un lenguaje de programación? [ACTUALIZADO] en: 4 Julio 2012, 10:34
Hola a todos, en estas vacaciones me he dedicado a escribir un intérprete para un lenguaje de programación, el cuál llamé "Yare".

Está escrito en C, con ayuda de lex y yacc.

El lenguaje que estoy haciendo aún es muy limitado, pero ya tiene algunas cosas algo "rescatables", como por ejemplo:

- Ciclos: for, while, do-while, unless.
- Condicional if y algunas expresiones se pueden procesar así:

Código
  1. expresion == expression && sentencia;

Un ejemplo:
Código
  1. 1 == 1 && "Ok\n";
-Sentencia tipo "read(var)"
-Inicialización con valor aleatorio, ejemplo:
Código
  1. x = ?;

- Lo he hecho bastante "rico" en comentarios, es decir, se admiten comentarios de la forma
Código
  1. /* hjkhjkasd
  2. asdasd
  3. */
Código
  1. rem Comentario de una sóla línea
Código
  1. # Comentario de una sóla línea
Código
  1. -- Comentario de una sóla línea
Código
  1. // Comentario de una sóla línea
Código
  1. :: Comentario de una sóla línea

- Caracteres especiales en la sentencia "puts(string)", los mismos que en C:
\n, \t, \s(este es de Perl), \b, \r, \f.
Añadí uno propio así:
\q el cuál inserta una doble comilla '"'.

- Además añadí unos caracteres de escape de nueva línea numéricos, es decir.

Código
  1. puts("Hola\1mundo") <- Haría que se insertara un \n
  2. puts("Hola\2mundo") <- Haría que se insertara dos \n
  3. puts("Hola\3mundo") <- Haría que se insertara tres \n
  4.  
y así hasta el 9.

No hay tipos de datos por ahora, el tipo de dato que manejo es "double".

Hay 26 variables por default, las variables son de la "a" a la "z" y no es sensible a mayúsculas y minúsculas. Estas variables siempre están ahí disponibles.

-Se pueden definir variables propias de este modo:
Código
  1. :suma: = 2^3;
ó así:
Código
  1. declare(:suma:, 2^3);
Código
  1. declare(:suma:);

Los identificadores pueden ser bastante flexibles, ejemplo:
Código
  1. : _Hola mundo # 123342432 : = 123;
  2. printn(: _Hola mundo # 123342432 :);

Se pueden definir bloques de código:
Código
  1. {
  2.   sentencias...
  3. }

-Constantes numéricas:
número pi, número e, logaritmo en base 2 de el número e, y varias más, se pueden utilizar así:
Código
  1. printn(cos(const.pi^2));

-Operadores:
+, -, *, /, ^, %, <<, >>, |, &, &&, ||, ! y ~ para negación, XOR.

-Funciones matemáticas:
Código
  1. factorial(expr), abs(expr), ln(expr), cos(expr), sin(expr), tan(expr), atan(expr), asin(expr), acos(expr), floor(expr), sinh(expr), sumatoria(expr, expr), etc.

-Operadores de posdecremento y posincremento, de esta manera:
Código
  1. a = 1;
  2. a+@;
  3. a-@;
  4.  
  5. ó incr(variable), decr(variable)

-Operador variable, lo que llamé operador variable no es más que un operador global que puede ser modificado, algo así:
Código
  1. _@_= *;
  2. _@_ = /;
  3. _@_ = -;
  4. etc...

Y que luego pueda ser usado de esta manera:

Código
  1. _@_ = *;
  2. printn(1 + 2 _@_ 3);
  3.  
¿Para qué podría servir esto? no lo sé :)

-Inicialización por medio de smileys....  ;D, algo así:
Código
  1. x = :);   # Lo inicializa a 1
  2. x = :|;  # Lo inicializa a 0
  3. x = :(;  # Lo inicializa a -1.

-Sentencia break para los ciclos, aún no hallo como implementar la sentencia continue.

-Ciclo foreach de esta manera:
Código
  1. foreach(1 ... factorial(5), k) {
  2. printn(k);
  3. }

-Sentencia system(CADENA).

-Asignaciones flexibles:
Código
  1. let x to 1+2;
  2. set x to 1+2;
  3. move 1+2 to x;
  4. x = 1+2;
  5. mov x, 1+2;
  6. x <- 1+2;
  7. let x = 1+2;
  8. set x = 1+2;
  9. x := 1+2;
  10.  
Todas ellas son equivalentes.

-Sentencias tipo assembly:
Código
  1. mov x, factorial(6);
  2. sub x, -123;
  3. add x, 1+2;

-Sentencia "swap" para intercambiar valores:

Código
  1. x = 1;
  2. y = 2;
  3. x <-> y;
  4.  

-Sentencia exit:
Código
  1. exit(-1);

-Sentencia read(variable) para leer desde el teclado, ejemplo:
Código
  1. read(x);
  2. for i = 0, i < x, +1 {
  3. printn(i);
  4. }

-Asignaciones abreviadas:
Código
  1. x += 1;
  2. x -= 1;
  3. x *= 1;
  4. x ^= 3;
  5. x /= 2;
  6. x <<= 1;
  7. x >>= 1;
  8. x |= 1;
  9. x &= 1;
  10. x %= 2;
  11.  

-Función par(expr) para saber si el número resultado de la expresión es par.

-Definición de procedimientos por el usuario, en la forma:
Código
  1. proc $suma$ {
  2. a += b;
  3. # Demás sentencias ...
  4. }
  5.  
  6. a = 1;
  7. b = 2;
  8.  
  9. # Imprime 3
  10. # El valor retornado por el procedimiento o función es
  11. # el resultado de la última sentencia o expresión.
  12. printn(call $suma$);
  13.  

-Soporta recursión, obviamente no tan flexible, un ejemplo de cálculo del factorial con algoritmo recursivo:
Código
  1. # Intento de recursion
  2. proc $factorial$ {
  3. if(a != 1) {
  4. r *= a;
  5. a-@;
  6. call $factorial$;
  7. }
  8. }
  9.  
  10. # Calculando el factorial de 5:
  11. a = 5;
  12. r = 1;
  13.  
  14. call $factorial$;
  15. printn(r);
  16.  
  17. .
  18.  

Da por resultado 120.

La ejecución de algunos programas no es tan lenta, por ejemplo, calculemos el número pi en perl y luego calculemoslo en Yare.
Código
  1. #!/usr/bin/env perl
  2. my $suma = 0.0;
  3. my $i = 0.0;
  4. for($i = 1; $i <= 1000000; $i++) {
  5. $suma += (-1)**($i + 1)/(2 * $i - 1);
  6. }
  7. $suma *= 4.0;
  8. print($suma . "\n");
  9.  
Código:
3.14159165358978

real 0m0.646s
user 0m0.572s
sys 0m0.004s

Ahora en Yare:
Código
  1. :suma: = 0;
  2. for i = 1, i <= 1000000, +1 {
  3. :suma: += (-1)^(i + 1)/(2 * i - 1);
  4. }
  5. :suma: *= 4.0;
  6. puts("pi = ");
  7. printn(:suma:);
  8. .
  9.  
Código:
pi = 3.141592

real 0m0.641s
user 0m0.564s
sys 0m0.000s

Los tiempos de ejecución son muy similares. Obviamente no pretendo decir que la calidad de mi código es superior o si quiera igual que el de Perl, sería una estupidez, pero bueno... .
Estas son algunas cosas que he implementado en Yare, es muy muy limitado, pero bueno, quizás alguien quiera hacerlo crecer junto conmigo.

Lo primero en qué hay que pensar cuando se quiere hacer un lenguaje es "¿para qué va a servir?", "¿qué objetivo tiene?", yo no tengo objetivo, sólo aprender, ver cómo funcionan las cosas, y he aprendido muchisimo, no todo ha sido "miel sobre ojuelas", he batallado mucho con esto, han sido horas y horas de programar y a veces de dedicarle un día entero a algo y ver al final que las cosas no funcionan, y ni modo, a seguir adelante con otra cosa.

Por ahora estoy añadiendo soporte para arrays, pero les soy sincero, ya me aburrí de esto, porque son muchas horas dedicadas a esto y tengo otras cosas que hacer :).


Entonces ahí está la petición, si alguien quiere unirse a desarrollar esto, yo encantado.

Saludos.
5  Informática / Hardware / Pila de alta duración.... en: 2 Julio 2012, 20:23
Hola a todos.

Recién compré una pila o bateria para mi laptop, según lo que me dijeron, duraba hasta 6 horas la pila, ayer que la usé por primera vez después del primer ciclo de carga (14 horas) me duró casi 4 horas. El manual dice para alcanzar su máximo rendimiento se deben realizar de 3 a 4 ciclos de carga/descarga siendo el de carga de 14 horas..... pero les soy honesto, me da miedo, jaja.

Qué piensan?, que por ser la primera carga/descarga sólo me duró 4 horas o que con más ciclos durará más según el manual? ....


PD: La probé sobre linux, no he visto el rendimiento sobre Windows.
6  Sistemas Operativos / GNU/Linux / Necesito su ayuda para encontrar un software de consola en: 14 Febrero 2012, 07:37
Hola a todos.

Hace mucho había visto que había una aplicación que corría en la terminal que era básicamente un visor o creador de presentacioness, algo así como power point, pero solo para terminal, quizás alguien sabe de alguno... estaría muy agradecido, llevo buscándolo varios días.

Saludos.
7  Programación / Scripting / MOVIDO: Vaya ...vaya............aqui no hay playa!! en: 23 Enero 2012, 22:59
El tema ha sido movido a Programación Visual Basic.

http://foro.elhacker.net/index.php?topic=351411.0
8  Programación / Programación General / Un compilador para un lenguaje de programación sencillo en: 8 Enero 2012, 05:57
Hola a todos.

Hola a todos, bueno, les cuento, como parte de un trabajo en la universidad, tuve que crear un "compilador", o por lo menos avanzarlo, sin utilizar flex, lex, bison, yacc y todo eso, desde 0 totalmente. Pues bueno, quería compartirles el código.

El compilador no tiene mucho, pero algo es algo  :P

Tiene su analizador léxico, analizador sintáctico, unas pequeñas comprobaciones de tipos de datos y demás..., el compilador crea correctamente su propio árbol sintáctico para el código fuente dado, que ya es un avance, y para ver si funcionaba la lectura del árbol sintáctico, hice un poco de generación de código intermedio para las expresiones aritméticas básicas, genera código P y pseudocódigo ensamblador (un código artesanal que hace movimientos con registros con nombres de tipo R[0-9]), pero solo para expresiones aritméticas sencillas.

Quiero compartirlos con ustedes y si quieren unirse a mi, adelante, son bienvenidos, ya que creanme que para mi no ha sido nada fácil, me ha resultado bastante complejo esto, y eso que aún no llego plenamente a la generación de código. En fin.

El "compilador" está hecho en Java, con la ayuda de NetBeans. ¿por qué en Java? porque tenía que hacer esto lo más pronto posible, en menos de 3 meses :s y en periodo escolar, por lo que no tenía mucho tiempo de dedicarle tiempo exclusivamente a esto :s, Java provee un fácil manejo con Strings, además de estructuras de datos que no iba a tener que armas desde 0, como las listas y las tablas de dispersión, además que es con lo que más se llevan mis compañeros.

Bueno, les comento un poco cómo se estructura el lenguaje, algunos ejemplos:

Código:
inicio miPrimerProgramaEnGLHBR
entero x = 3;
leer(x)
fin;

El código debe empezar por inicio ID sentencias fin;, siempre.

Código:
inicio Hello_Shit
entero x = 123;
inc(x, 2 * 3)
fin;

Código:
inicio X
entero x = 1;
write(x);
repetir
x = x + 5;
x = x - 4
hasta x == 10
fin;

Código:
inicio X
entero z = 1234 + 234 + 56 + 78;
infinito hacer
z = z + 12
porsiempre
fin;

El compilador procesa las operaciones aritméticas (obviamente las operaciones aritméticas se hacen checando precedencia de operadores) y hace el cálculo, por ejemplo esto:

Código:
inicio X
entero x = (3 * 69 - (5 * 85 - 14))
fin;

Y el código que se genera:

Código P:

Código:
;Código P para las sentencias enteras sencilla para el programa final.glhbr
ldc 3
ldc 69
mpi
ldc 5
ldc 85
mpi
ldc 14
sbi
sbi

Y el pseudocódigo ensamblador:

Código:
; Código ensamblador para el programa "final.glhbr"
MOV R0,#3 ; Cargamos 3
MOV R1,#69 ; Cargamos 69
MUL R0,R1     ;  Multiplicamos
MOV R1,#5 ; Cargamos 5
MOV R2,#85 ; Cargamos 85
MUL R1,R2     ;  Multiplicamos
MOV R2,#14 ; Cargamos 14
SUB R1,R2        ; Restamos
SUB R0,R1        ; Restamos
MOV x,R0    ; fin de la sentencia de asignación
; Rutina para mostrar el resultado de x
;        R = -204.0

Todo esto recorriendo el nodo de árbol sintáctico correspondiente a una operación aritmética en postorden y luego la evaluación por medio de una pila.

Quizá alguien que sepa assembly pueda ayudar a traducir el pseudocódigo ensamblador a assembly real.

Son algunos de los usos, por supuesto, como ya les he dicho, no se ejecuta nada, porque no hay generación de código.... y para eso pido su ayuda, si alguno quiere unirse y aportar ideas, bienvenido! así aprendemos todos.

Bueno, les dejo el link el link y una captura:



El proyecto está en github por si quieren ver ahí los cambios que he hecho:
https://github.com/leogtzr/glhbr

Saludos.
9  Programación / ASM / Pasar a código ensamblador [Ayuda] en: 6 Diciembre 2011, 04:46
Bueno, les cuento. Estoy haciendo un compilador para un lenguaje de programación que inventé (En realidad es una ****, pero bueno, algo es algo, es como parte de un trabajo final de una materia que estoy llevando en la universidad, tengo que entregarlo dentro de una semana), ya hice mi analizador léxico, el analizador sintáctico, el semántico y demás, ahora estoy en la parte de generación de código. Hice un algoritmo que genera código ensamblador basándose en mi árbol sintáctico. El problema es que genera un código ensamblador que no es "ensamblador" :p, lo simula, ya que NO sé ensamblador. Entonces, necesito ayuda para pasar de algo como esto:

Código:
inicio X
entero a = 1 + 2 * 3 - 5
fin;

A esto:

Código:
mov R0,#1 ; Movimiento
mov R1,#2 ; Movimiento
mov R2,#3 ; Movimiento
mul R1,R2     ;  Multiplicamos
add R0,R1     ; Sumamos
mov R1,#5 ; Movimiento
sub R0,R1        ; Restamos
mov a,R0    ; fin de la sentencia

SENTENCIA PARA MOSTRAR a

Que es lo que genero con el algoritmo que hice (sé que no es muy eficiente), ¿cómo quedaría en assembly real y qué más necesito para poder generar el ejecutable?

Disculpen mi ignorancia en este rubro pero es que estoy totalmente perdido en esto, necesito un poco de ayuda.

Saludos.
10  Programación / Scripting / Proyecto para los Batcheros en: 22 Noviembre 2011, 07:09
Hola, chicos, ¿qué tal?

Bueno, les explico....

Hace como un mes, una maestra me pidió que le ayudara ya que había perdido sus documentos (aparentemente) en su memoria USB, un virus o lo que sea le había transformado sus documentos en accesos directos. Así que me pidió que lo arreglara, así que usé el cmd.exe teclee algunos comandos y listo, pero bueno, me dijo: "y por qué no lo automatizas?, haces un programita en Batch que detecte las unidades, le de al usuario a elegir en cuál arreglar y listo...", según ella les serviría muchisimo, ya que a cada rato le joden la memoria las computadoras del laboratorio.

Así que hagamos algo, desarrollemos eso, así les serviría a muchos de aprendizaje y sería algo de utilidad, además se trata de que quede realmente bien. Con mensajes al usuario, que se le muestre la debida información de lo que se está haciendo..., podríamos utilizar wbat para que se vea bonito:




Podemos utilizar listas, mostrar texto en colores, botones, campos de texto, radio buttons, entre otras cosas en Batch con Wbat.

Esto se hace para que ganen unión entre ustedes, que se haga algo, que no seamos tan individualistas..., quizá a nosotros no nos sirva en absoluto esto, pero creanme que otras personas les hallarán utilidad.

A los que les guste programar en Batch, diganme si quisieran realizar esto (Yo solo resolvería dudas...).

Saludos.
Páginas: [1] 2 3 4 5 6 7 8 9 10
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines