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

 

 


Tema destacado: Curso de javascript por TickTack


  Mostrar Mensajes
Páginas: 1 ... 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 [399] 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 ... 432
3981  Programación / Programación General / Re: ¿Como programar un depurador avanzado? en: 23 Mayo 2017, 00:19 am
Créeme, no te compliques con tonterías, escribirás código infinito y siempre habrá errores imperceptibles y será muy lento, largo y complejo. cualquier cambio te dará una pereza enorme.

Describe tu lenguaje en notación BNF, luego te será tremendamente sencillo tratar semántica y sintaxis, incluso el mismo lenguaje ampliado te vale hasta para colorear (si asocias colores a cada identidad individual).

Lo mejor del BNF, es que puedes adaptarlo a tus necesidades e incluso sirve como ayuda para los usuarios al mostrar el BNF de tu lenguaje, pués sirve para saber qué se puede y qué no se puede hacer en él...

He editado mi mensaje anterior, para extenderme un poco y con más explicaciones...

Te adjunto, un ejemplo de como se describió, por ejemplo el lenguaje Algol 60, menos potente que el Algol 68, pero te sirve de ejemplo:
https://web.archive.org/web/20060925132043/https://www.lrz-muenchen.de/~bernhard/Algol-BNF.html



-----------------------------
----------------------------
Mensaje ORIGINALMENTE publicado en: Fecha del día 23 de mayo (por la tarde, hora de España) -------------
Me he molestado en buscar la especificación del EBNF (Extended-BNF), es más legible, cuando se describe en EBNF, que en BNF y las descripciones son más breves. Otra ventaja es que el analizador léxico, queda mucho más aproximado con EBNF.
El enlace de descarga (dentro del zip está el pdf):
http://standards.iso.org/ittf/PubliclyAvailableStandards/s026153_ISO_IEC_14977_1996(E).zip

Dado que (BNF) es tremendamente sencillo usarlo (bastan unas pocas horas para entenderlo bien), luego puedes ampliarlo y adaptarlo a tus necesidades.

MOD: Ya deberías saber que debes hacer doble post.

--------------------------------------------------------

Mensaje para el MOD: Por doble post, yo entiendo duplicar el mismo contenido de un mensaje en otra parte del foro (ya sería feo, hacerlo en el mismo sitio). Publicar un mensaje un día y otro mensaje otro día (aunque no haya un mensaje de nadie por medio, en le mismo hilo, JAMAS podré entenderlo como hacer doble post... la razón es muy simple: EDITAR un mensaje, no avisa a los interesados del cambio, publicar un nuevo mensaje posiblemente se vea, en cualquier caso son publicaciones distintas.
Por otro lado, determinados foros, reúnen en un mismo mensaje dos mensajes publicados por la misma persona en el mismo hilo, si no ha pasado cierta cantidad de tiempo, al momento de enviar.

Yo acostumbro a escribir mi mensaje y salvo que ponga código y crea conveniente repasarlo para corregir algún posible error, salto a otro lado, sin llegar a ver si hizo una u otra cosa. Los automatismos del foro, no me competen, creo que hay cierta capacidad de control desde el panel de administración del foro... y supongo que estará en las opciones que dueño del foro, le haya parecido más aceptable.
3982  Foros Generales / Foro Libre / Re: IBM revela su procesador cuántico más potente en: 22 Mayo 2017, 23:01 pm
Hombre decir eso y no decir nada es lo mismo. Algo se podrá hacer.
De momento no, porque necesitan profundizar en la tecnología, y sobretodo hacerla más fiable y diseñar soluciones para poder programarlo. De momento, sólo han creado los qubits, es decir han logrado la miniaturización adecuada para escribir y leer y punto (salvo que nos oculten información que seguramente sea así). Ahora tendrán que empezar a pensar en sistemas de controlar los qubits (para que sean fiables) y fnalmente pueda programarse.

Comparativamente es como cuando a mediados de los años 50, se lograron hacer chips de unas pocos biestables... (aún guardo alguna revista de aquellos hitos, que aparecían de cuando en cuando perdidos en algunas revistas de electónica).

Cuando se afiance la tecnología 16 qubits, sería una potencia de cálculo enorme, mucho mayor (unas 1000 veces) que la actual con los modernos procesadores de 64 bits... a 3-4Ghz. pero eso cuando se afiance... Es la diferencia entre hacer un motor de explosión en el garage de tu casa que tienes algún torno y producir en serie motores en una fábrica... Sin duda tu te sentirías orgulloso, solo con que las piezas de ese motor encajaran entre si, aunque luego ni siquiera arrancara, o arrancara pero por efecto del calor se derritiera alguna pieza y tal... démosle tiempo, 10 añitos dan para mucho.
3983  Programación / Java / Re: Abrir archivo, leer datos y modificarlos en otro archivo. en: 22 Mayo 2017, 22:43 pm
Nota que describo dos funciones traducir... hay sobrecarga...

Una traduce un texto, la otra traduce un fichero (y lo guarda en otro).
Pero si te produce confusión, puedes explicitar un nombre diferente para cada una:
TraducirFichero(...)
TraducirTexto(...)
3984  Programación / Programación General / Re: ¿Como programar un depurador avanzado? en: 22 Mayo 2017, 22:24 pm
La notación "Backus Naur Form", es un metalenguaje que se utiliza para describir lenguajes, de ahí es tremendamente fácil verificar errores.

Si tienes descrito, por ejemplo:
<numero> = <numero> <digito>
<digito> = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
entonces resulta tremendamente fácil verificar que FF, no es un número y sí 135. Pero si describes:


<separador> = [[<separador>]] <espacio> | <tabulador>
<espacio> = " "
<tabulador> = "    "
<numero> =  <separador> (<numerodecimal>| "h" <numerohexadecimal>)
<numerodecimal> = [[<digitodecimal>]] | <numerodecimal> <digitodecimal>
<numerohexadecimal> = [[<digitohexadecimal>]] | <numerohexadecimal> <digitohexadecimal>
<digitodecimal> = <digito>
<digitohexadecimal> = <digito> | <digitohex>
<digito>   = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
<digitohex> = "A" | "B" | "C" | "D" | "E" | "F" | "a" | "b" | "c" | "d" | "e" | "f"

Es fácil ver si un número cumple las normas y si en ese caso es decimal o hexadecimal, etc... por ejemplo: 135, hFF, y por ejemplo es fácil ver que hFFJ no es un número ni decimal ni hexadecimal, así como tampoco 134p0, pero no hemos definido un número decimal, por ejemplo 234'456.

Como se puede ver, ahí está definido que es un número, y se puede ver que acepta números decimales y hexadecimales y es relativamente fácil verificar.
Básicamente hay que escribir una función por cada definición, que chequea sus partes llamando a su vez a cada una de las funciones de las partes de que se compone... (hasta llegar a la básica que son letras, digitos, etc... cuando una funciópn devuelva false, se señala el punto donde está operando y se marca el error (cada función conoce por la expesión que trata, en qué consiste el error).

Igualmente es relativamente fácil describir, operadores, operaciones, funciones, propiedades, clases, etc...


Cuando se cambia de línea se verifica la que se acaba de editar. Además se puede (si es correcto) al final si se detecta una construcción especial, autocompletar partes de esa construcción, o sugerir opciones... al tiempo que si es incorrecto, señalar que falla.

Si nunca has oído hablar de ello, será por que nunca has estudiado teoría de compiladores.

p.d.: Un poco más completo, para ver mejor la potencia del sistema BNF. Tú mismo puedes describir las reglas de tu propio BNF, que eso lo hace además insuperable.
3985  Programación / Programación General / Re: ¿Como programar un depurador avanzado? en: 22 Mayo 2017, 18:49 pm
Si declaraste tu lenguaje en un formato BNF, (o EBNF), no debería serte complicado chequear la semántica ni la sintaxis.

de hecho, eso te servirá luego para poderlo compilar, pués esa fase será necesaria (suponiendo que el lenguaje sea compilable e/(o no sólo) interpretado).
3986  Seguridad Informática / Criptografía / Re: cómo funciona basicamente el descifrado (mediante crackeo) en general? en: 22 Mayo 2017, 18:44 pm
Básicamente hay dos formas:
- Prueba y error (hasta que dé acierto, o te canses)
- Puro analisis (de las claves generadas y del algoritmo que las genera). A veces contienen fallos, nada obvios pero que facilitan resolver claves. Una forma fácil de analizarlas es usar claves en la forma: "AAAAAA", "ABCDEFG", para cifrar conteniedo como AAAAAAAAAAAAA... y ver qué resultado cifrado arroja.
- Mezcla de ambas. Si por análisis puedes deducir ciertas partes, luego una fase de prueba y error puede ser considerablemente más corta.
3987  Foros Generales / Dudas Generales / Re: Que lenguaje me recomendais para empezar? en: 22 Mayo 2017, 18:01 pm
Para empezar, C, no me parece el lenguaje más adecuado... lleva una curva de aprendizaje bastante larga.
En general, si vas a aprender por tí mismo, si tras cierto tiempo, no logras avances significativos, es muy fácl que te desmoralice. Como mínimo, empieza con C#, es la misma filosofía, pero con poco puedes tener resultados y esa sensación de comprender, aprender y avanzar te da energía para seguir adelante...

Incluso te recomendaría Visual Basic, para empezar, luego que comprendas algunos fundamentos básicos y logres idear cosas y ver que eres capaz de llevarlas a cabo correctamente, puedes saltar (con más conocimiento), hacia otro lenguaje si lo ves necesario.

Para comenzar, lo ideal es hacerlo con un lenguaje que te enseñe lo básico, sin exigirte demasiado conocimiento previo...
3988  Programación / .NET (C#, VB.NET, ASP) / Re: Problema con un string en: 22 Mayo 2017, 17:44 pm
Vuelta a lo mismo... Qué contiene ese fichero????

Tu problema seguramente yace en el contenido dle fichero, y que se refleja luego aquí:
Código:
string[] numbers = Regex.Split(texto, @"\D+");
            foreach (string value in numbers)
foreach ... value = 0 strings?. Seguro que Regex, no devolvió un array vacío???
Al menos saca por consola, qué contiene value, incluso si numbers.lenght es mayor que 0... Son preguntas demasiado tontas, cuya solución deberías ser capaz de resolver por tí mismo.
Visual Studio, es muy potente, tiene muchas facilidades para saber en cada momento, cual es el contenido de cada variable, puedes ejecutar paso a paso, puedes poner puntos de interrupción incondicionales (líneas), o condicionales de modo que cuando se cumpla la condición se pare ahí en ese punto la ejecución... revisas que debiera tener y si es preciso, moverte paso a paso por instrucciones hasta ver dónde ocurre el fallo.

Creo que lo que te pasa es que no conoces ni de lejos el IDE de Visual Studio (examina el menú DEBUG, que sea tu amigo íntimo, más que éste foro, ahí tienes infinidad de respuestas inmediatas), sin mencionar claro está el lenguaje, que ahí es natural que no quede todo claro.... pero con las facilidades que ofrece el IDE, encontrar ciertos errores es sumamente fácil...
3989  Programación / Java / Re: Abrir archivo, leer datos y modificarlos en otro archivo. en: 22 Mayo 2017, 16:33 pm
Normalmente cuando alguien empieza, ni se explica bien, ni pone código (o pone solo 4 líneas), y suele ser un refrito de tripas revueltas. Así que lo primero es felicitarte, porque no caes en ninguna de esas cuestiones.

De entrada, yo te sugeriría que usaras tu alfabeto 1337 tanto en minúsculas como en  mayúsculas. Es decir:
Tal como tienes:
0 1 2 3 4 5 6 7 8 9
o i  z e  a s g t b p

Pero también:
0 1 2 3 4 5 6 7 8 9
O I Z E A S G T B P

de hecho, mucho mejor si todo el texto quedara en mayúsculas, pero bueno... cuando te funcione ya decidirás...

Lo segundo, es señalarte que hacerlo en la forma de 'Replace', en realidad exige recorrer 10 veces el texto, para hacer el cambio. En cada ocasión recorre todo el texto, buscando cada vez una determinada letra que cambiar.
Si el texto es corto (que es lo habitual), no importa, será tan rápido que no se aprecia  ninguna tardanza. Si el texto fuera largo, o lo haces con muchos ficheros podría ser hasta 10 veces más lento de lo que realmente necesita ser.


Para ello, habría que generar un alfabeto, para traducir de uno a otro sistema:
Código:
// Esta función podría llamarse al principio, cuando se crea la clase, que alberga el código (se genera una sola vez, se invoca una sola vez).
Funcion CrearTablasDeTraduccion
    //Primero se hace una equivalencia con el ASCII.
    Bucle K desde 0 a 255
        AlfabetoToLeetSpeak(k) = k
        AlfabetoFromLeetSpeak(k)= k
    Fin bucle

    //Luego se hacen los cambios que proceden (manualmente), yo pongo el cambio para 3 caracteres, tu completa el cambio para los 7 restantes...
    AlfabetoToLeetSpeak(111)=48 ' o =0
    AlfabetoToLeetSpeak(79)=48 ' O = 0

    AlfabetoToLeetSpeak(105)=49 ' i =1
    AlfabetoToLeetSpeak(73)=49 ' I = 1

    AlfabetoToLeetSpeak(122)=50 ' z =2
    AlfabetoToLeetSpeak(90)=50 ' Z = 2
   .... resto de letras asignarles desde 3-9

    // Y la traducción de vuelta, es intercambiar los valores previos, elegimos números por mayúsculas, es imposible regresar de números a myúsculas y minúsculas al mismo tiempo, tal como estaban en origen, hay que decantarse y lo hacemos por mayúsculas, porque se parecne más a los números que las minúsculas.
    AlfabetoFromLeetSpeak(48)=79 ' 0 =O

    AlfabetoFromLeetSpeak(49)=73 ' 1 = I

    AlfabetoFromLeetSpeak(50)=90 ' 2 =Z
   .... resto de letras asignarles desde 3-9
Fin funcion
NOTA: que yo solo he puesto la traducción para 3 caracteres, te falta poner las de los otros 7 restantes...


Luego ya se puede usar la tabla (que proceda) en una funcion de traducir.
Código:
// Una enumeración para señalar la dirección de traduccion (podría ser remplazado por un valor buleano, eso al gusto, lo dejo así por más claridad).
Enumeracion TipoDeTraduccion
    TraducirALeetSpeak = 0
    TraducirDeLeetSpeak = 1
Fin enumeracion

Funcion Traducir(Texto tipo String, Alfabeto tipo TipoDeTraduccion) Devuelve String // o un array de bytes, según se precise.
     ArrayTexto() tipo Array
     ArrayTexto= Convertir(Texto a bytearray)

     Si Alfabeto = TraducirALeetspeak entonces
         Bucle k desde 0 a ArrayTexto.Longitud
             ArrayTexto(k)= AlfabetoToLeetSpeak(ArrayTexto(k))
         fin bucle
     si no // Tradicr desde LeetSpeak
          Bucle k desde 0 a ArrayTexto.Longitud
             ArrayTexto(k)= AlfabetoFromLeetSpeak(ArrayTexto(k))
         fin bucle
      fin si
      Devolver Convertir(ArrayTexto a String) //no es absolutamente necesario La conversión) si se va a guardar a fichero, al fichero se escriben bytes, poco le importa que tu lo consideres string, char o bytes...
fin funcion

-----------------------

Y ahora mirando tú código... qué falla?.

Bueno falla que tu lees una línea de código, la conviertes y nada más convertirla la escribes a UN NUEVO FICHERO Cada VEZ.
Lo que debes hacer primero es crear el fichero de salida, y luego simplemente es mandar escribir al final del fichero, es decir la acción es APPEND (añadir al final), tu sobrescribes el mismo fichero con cada línea que lees y traduces del origen, y lo cierras con cada vez.
Cuando escribas todas las líneas, (es decir al final del bucle de lectura), es cuando debes cerrar el fichero de escritura.

Por tanto tus pasos (simplificados), serían:
Código:
Funcion Traducir(FicheroOrigen, otrosparametros...)
    Si ficheroOrigen no esta vacío ni presenta otros problemas.
        Abrir fichero de escritura: FileWrite
        Abrir fichero de lectura: FileRead
        Por cada Linea en FileRead: LeerLinea
             LineaWrite = Traducir(Linea, DireccionTraduccion)
             FileWrite.Append(LineaWrite)
        fin Cada
        Cerrar FileWrite
    si no
       advertir al usuario: "el fichero introducido, tiene tal o cual problema"
    fin si
fin funcion

Como ves el código es bien sencillo y claro... ahora tu traduce de pseudocódigo...
No olvides controlar las posibles excepciones. que yo no ponga (casi) nada al respecto, obedece a que puedas verlo y entenderlo con claridad....

No he mirado nada más en tu código (solo por encima) y tras ver ese fallo, asumo que no tienes más... en cualquier caso, corrige/modifica y ya veremos si tienes más fallos.
3990  Seguridad Informática / Seguridad / Re: Como han podido hackearme? en: 22 Mayo 2017, 02:21 am
Entonces es muy probable que tengas un troyano con keylogger incluído...
Actualiza tu antivirus, luego corta la conexión y pasa toda la batería antivírica que tengas instalado. Si no encuentra nada, es probable que debas usar otras herramientas (ningún antivirus es eficaz al 100%, intenta con otros, si no quieres instalar y desintalar otros, también los hay online.

Si a pesar de todo sigue sin encontrar nada, pásate por el foro http://www.forospyware.com/ allí pueden ayudarte, sigue sus indicaciones para dejar completamente limpio tu PC (incluso si tu antivirus encuentra algo, sigue siendo buena idea visitar el foro y pedir que te ayuden a limpiarlo bien de infecciones, di que sospechas que tienes un troyano dentro, por la cuestión del robo de tu clave...)
Páginas: 1 ... 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 [399] 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 ... 432
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines