Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ThunderCls

#121
Segun veo la web tiene una proteccion anti-scraping, esto es dado que tienen API de pago y por consiguiente es de esperar que no te vayan a dejar simplemente tomar el contenido asi tan facil. El metodo que utilizan es que la web hace una peticion a su API en https://www.xe.com/es/api/rates_table.php y el server responde con un payload "rates" cifrado, me imagino que sea una especie de json con los datos de todas las conversiones que luego algun codigo js en la pc cliente se encargara de descifrar y de esta forma actualiza la web. Lo ideal en este caso seria poder interceptar la funcion decifradora e implementarla en tu propia aplicacion para luego hacer simples peticiones a su API sin necesidad de hacer parse o scraping a la web, pero esto necesita ciertas habilidades que, desde el respeto, no creo que poseas, por consiguiente, te aconsejaria ir por una ruta mucho mas sencilla y es usando Selenium y/o algun motor de navegador web+js como:

SimpleBrowser(https://github.com/SimpleBrowserDotNet/SimpleBrowser)
CefSharp(https://github.com/cefsharp/CefSharp)
Optimus (https://github.com/RusKnyaz/Optimus)
Puppeteer Sharp(https://github.com/kblok/puppeteer-sharp)
PhantomJS (descontinuado).
Aqui tienes una lista entera (https://github.com/dhamaniasad/HeadlessBrowsers)

Aqui puedes tener una idea de como implementar Selenium con PhantomJS para hacer scraping
https://stackoverflow.com/questions/24288726/scraping-webpage-generated-by-javascript-with-c-sharp/24289395#24289395

Suerte
#122
Supongo que IndexOfAny haria el trabajo, si estas usando VB.NET seria algo como

Código (vbnet) [Seleccionar]
Dim Cadena as string = "tu cadena iria aqui"
' especificas los simbolos que deseas buscar
Dim sSimbolos() as String;

If Cadena.IndexOfAny(sSimbolos) = 0 Then
  ' Simbolos encontrados
  ' ...
Else
  ' Simbolos no encontrados
  ' ...
End If
#123
Cita de: Dany Zir en  4 Noviembre 2019, 02:00 AM
Tengo planes de usar este script: https://www.directorylister.com/ para descargas

Pero ocupo implementar estas características:

- Primero incrementar un sistema de Login (para el cual ya tengo la idea)
- Incrementar condicional de descargas (es decir los usuarios y visitantes no registrados puedan ver los archivos pero no descargar hasta estar registrados)
- Incrementar una protección de links para que no exista forma de descargar NADA hasta no estar registrados (obvio no quiero que sin registro exista forma de descargas archivos)

Pues que bien por ti, suerte  :xD
#124
Cita de: Diesan Romero en  4 Noviembre 2019, 03:49 AM
No me sirve, porque en la que dices ser para Linux el usuario debería de descargar una cliente, mientras que las demás son para implementar push notifications en web y etc. La idea es que los dispositivos que se conecten a mi red puedan recibir las notificaciones que yo les mande sin que estos tengan que descargar un software o aplicación.

Como menciona engel lex, no creo que estes muy claro de lo que quieres hacer. Es imposible que tu celular Android o iOS reciban una notificacion push (no web) por arte de magia, sin ninguna aplicacion instalada, registrada y relacionada con dicha notificacion y ademas con permisos de mostrarla. Pero igual yo tambien podria estar equivocado.

https://en.wikipedia.org/wiki/Push_technology#Push_notification
#125
Programación C/C++ / Re: Punteros en estructuras
1 Noviembre 2019, 19:56 PM
Cita de: Desiresportal en  1 Noviembre 2019, 13:15 PM
Resulta que al pasar la estructura a la funcion, independientemente de si lo hago por referencia o por copia, la funcion hacia uso del constructor de copia por defecto. Yo creia (y mal creido porque nunca hice pruebas ni encontré documentacion para entenderlo) que usaba el "=".

En C++ siempre al pasar un objeto como parametro por valor a una funcion se invoca al constructor de copia de dicho objeto. Si el programador no tiene uno definido, el compilador genera un constructor de copia por defecto, el tema esta en que dicho constructor hace "shallow copy" y en este caso no es lo ideal por lo que ya explique anteriormente. Como no sabia lo que estabas intentando hacer ni las restricciones con las que estabas escribiendo tu codigo te di dos posibles soluciones, una de ellas era que te crearas tu propio constructor de copia usando "deep copy".

Cita de: Desiresportal en  1 Noviembre 2019, 13:15 PM
En cuanto a un libro, claro que me lo estudiaría de cabo a rabo. Aunque tienen varias pegas:
- Cuestan una pasta que no tengo (y en las bibliotecas publicas no hay o son de los que no profundizan nada)
- Lo explican todo de una forma muy dificil de digerir (incluso investigando un poco para arreglar este problema que ya he solucionado, no he encontrado nada que fuese facil de entender)
- Los mejores están en inglés y cualquier cosa que no sea codigo (a veces incluso el codigo) no la entiendo

- Si sabes usar un buscador en internet no necesitas pagar una fortuna por ningun libro
- Estos temas no son temas basicos o de principiantes, se supone que domines el lenguaje y varios conceptos llegado a este punto
- Te aconsejaria empezar a estudiar ingles si quieres dedicarte profesionalmente a esto o si deseas llegar a algun lado con la programacion y las tecnologias en general. Para todo lo demas esta Google Translator

Cita de: Desiresportal en  1 Noviembre 2019, 13:15 PM
En resumen:
Tema resuelto. Muchas gracias por la ayuda.

Me alegro. Suerte
#127
Programación C/C++ / Re: Punteros en estructuras
31 Octubre 2019, 20:08 PM
Si no me equivoco el error que obtienes es al hacer un double "delete" sobre la misma memoria dinamica. Primero tu sobrecarga del operador de asignacion no deberia trabajar con copias de los objectos sino con referencias:

Código (cpp) [Seleccionar]
void datos::operator=(datos rDatos){}

deberia ser

Código (cpp) [Seleccionar]
void datos::operator=(const datos &rDatos){}

Tambien te aconsejaria que para poder usar asignaciones en cadena modifiques tu funcion a

Código (cpp) [Seleccionar]
datos &datos::operator=(const datos &rDatos)
{
   // ...
   return *this;
}


Luego, mi teoria de tu error es que al enviar tu estructura como parametro a la funcion lo estas haciendo por valor (por defecto), lo que crea una copia de los valores de dicha estructura en memoria al pasar a dicha funcion, cuando el tiempo de vida del parametro termina al salir de la funcion, se invoca a tu destructor sobre el mismo puntero de tu estructura original (ambos punteros apuntan a la misma memoria), luego al terminar tu funcion principal y concluir el ambito de tu variable de estructura original, se volvera a destruir el objeto llamando a tu destructor el cual intentara realizar otro "delete" sobre la misma posicion de memoria ya liberada antes, provocando una excepcion.

Posibles soluciones
Solucion 1: Intenta pasar tu estructura a la funcion por referencia y cuenta que tal:

Código (cpp) [Seleccionar]
miFuncion(miVariable);

void miFuncion(const datos &miVariable)
{
   datos miOtraVariable;
   
   miOtraVariable = miVariable;
}


Solucion 2: Create un constructor de copia para tu estructura

Código (cpp) [Seleccionar]
datos::datos(const datos &copy)
{
   // tu copia aqui
}

Saludos
#128
Lo mas probable es que te hayas contagiado con el ransomware nakw, en cuyo caso lamento decirte que todos tu ficheros han sido cifrados. Puedes leer mas informacion aqui

https://geeksadvice.com/remove-nakw-ransomware-virus/
https://cfoc.org/nakw-virus-file-nakw-how-to-remove-restore-encrypted-files/
https://howtoremove.guide/nakw-virus-file/
#130
Opino igual que NEBIRE, no es necesario usar software de terceros para hacer lo que deseas. De igual manera y habiendo dicho lo anterior, si de todas formas deseas seguir usando 2jpeg te puedo dar un par de ideas:

1- Solucion tanto facil como cutre  :-\
    Utiliza la redireccion de entrada de consola de windows con un fichero. Te creas un fichero con la respuesta que espera 2jpeg (en este caso 1) y luego modificas tu linea de comandos para que tome la
    entrada desde ese fichero algo como:
   
Código (cpp) [Seleccionar]
system("2jpeg -src rutaInput -dst rutaOutput -jpeg mode:quality:100 < fichero.txt");

2- Solucion preferible  ;-)
    Usa CreateProcess/Pipes para poder redireccionar la entrada y/o salida de un child process
    https://docs.microsoft.com/en-us/windows/win32/procthread/creating-a-child-process-with-redirected-input-and-output

Suerte!