domingo, 5 de agosto de 2018

Technology-Hellín ahora en GitHub

Desde el inicio de mi blog, (Cuando pasó de ser un blog personal a centrarse en la tecnología) siempre que he tenido la necesidad de subir algún contenido, ROM, o código fuente he recurrido a Google Drive. Pero hoy día, con el grado en ingeniería informática ya terminado y años de experiencia realizando proyectos (No solo en mi blog) ya iba siendo hora de recurrir a una plataforma mas profesional.



Aparte de algunos proyectos que ya tenía en el blog, he creado algunas 'cosicas' nuevas que os pueden gustar:

-JVideo (Extensión Google Chrome): Permite ver sin anuncios y descargar vídeos y pelis de internet.

-Librería Jsocket (C++): Una librería que permite crear conexiones e implementar servidores con sockets TCP. La principal diferencia respecto a otras librerías es que es muy muy fácil de usar y el mismo código fuente os sirve para Windows y Linux.

-Librería JJSON (Java, C++): Una librería para manejar y generar cadenas JSON.

-SOCKS2HTTP (C++): Genera un proxy HTTP a partir de un proxy SOCKS5 como puede ser Tor. Es el resultado de haber perdido el código fuente en Java de mi anterior proyecto.

Si tenéis tiempo echadles un vistazo y me comentáis ;)

viernes, 13 de abril de 2018

Motor 3D para GameBoy Advance: Consiguiendo lo imposible

Versión 2:
Descarga ROM y código fuente aquí.
Esta versión ya se mueve fluida a 60fps y permite girar la cámara.
Cambios:
Aparte de las optimizaciones de la versión 1, he añadido mas optimizaciones, y he implementado la rotación de la camara.
-Todo el código es copiado a la RAM y se ejecuta desde ahí. Se usa código ARM en vez de Thumb.
-Para ganar mas velocidad utilizo el modo5, que baja un poco la resolución y permite tener dos framebuffer en la memoria de video evitando tener que usar la RAM para luego copiarla a la VRAM en cada frame. También uso las técnicas de escalado y desplazamiento de la GBA para crear un par de frames intermedios mientras se renderiza el siguiente frame final.

Para la rotación utilizo aproximaciones rápidas de lo que serían los auténticos cálculos de la rotación. Ademas, cada vez que se gira, desplazo la posición de referencia para evitar aun mas cálculos al transformar las coordenadas durante el dibujado.

Para evitar aun mas perdidas de velocidad, he replicado la función crítica Render para cada angulo posible, de forma que las transformaciones de coordenadas están hard-coodeadas dentro de las funciónes Render-n, evitando llamadas a funciones y comprobaciones de angulo cada vez que se procesa un pixel.

Versión 1:
Descarga ROM y código fuente aquí.
La GameBoy Advance fue una de las primeras videoconsolas portatiles que intentó en algunos de sus juegos simular el efecto 3D. Juegos como Driv3r, Asterix y Obelix XXL, o Craxy Taxi. No obstante en la mayoría de dichos juegos el efecto 3D era muy, muy básico. Es por eso que yo, como friki ingeniero informático que soy me puse a investigar de que manera se podría conseguir un motor 3D decente. Tras un día investigando y picando código...¡Este fue el resultado!
Como habréis comprobado, la calidad del efecto 3D casi no se puede comparar con la de ningún otro juego de GBA. El motor es de tipo voxel space y el video fue acelerado algo así como x200 ya que la demo en su versión original (la del vídeo) tardaba 11 segundos en generar cada frame. Esto es debido a la gran cantidad de multiplicaciones y divisiones que debía hacer el motor en cada frame. Para los que no sepáis muy bien como funciona un motor voxel space os lo explico de manera muy sencilla:

Tenemos una imagen de color y otra imagen de profundidad. Dibujamos el entorno desde el frente hacia atras aplicando perspectiva (podeis ver el triangulito con el campo de visión en el GIF), para ello trazamos en la pantalla lineas verticales del color proporcional al pixel horizontal de la pantalla y el pixel horizontal de la linea de campo de visión actual. Esta linea vertical empezará desde la ultima altura dibujada hasta un nuevo valor calculado a partir de la altura en el mapa de profundidad y la distancia con el punto de vista (Si el valor obtenido es menor, no se dibuja la linea).

Optimizando el código:
Pues seguramente la baja potencia del procesador de la GameBoy fue lo que hizo que no apareciera ningún juego usando este tipo de motor, las multiplicaciones y divisiones son muy lentas en su procesador. Estas operaciones son vitales tanto para calcular las posiciones horizontales del campo de vision y pantalla como las de las alturas. ¿Que solucion tenemos? ¡Crear una estructura de datos con estos valores precalculados! En el archivo comprimido podeis encontrar generarmatriz.c que puede ser compilado para PC y usando los datos de matrizalturas.h (compartido con el proyecto devkit) generar una estructura de datos con las alturas precalculadas matrizalturas.raw y posiciones horizontales matrizx.raw las cuales se añaden al ROM. También, para realizar otras divisiones y multiplicaciones con multiplos de 2, utilizo a ser posible las operaciones de desplazamiento << y >> las cuales son mas rápidas.
Ademas, calcularemos el campo de visión menos frecuentemente en posiciones alejadas y limitamos la distancia de dibujado a 512 pixeles.
Estos cambios, junto con otras cuantas optimizaciones de código, permiten tras un gran esfuerzo y sudor conseguir unos gloriosos...
¡5fps!
Lo cual supone aproximadamente un speedup del 3000% y seguiría siendo insuficiente para cualquier juego en condiciones, pero al menos se mueve decentemente.
Se podría decir que la optimización es del 95% ya que los limites técnicos de la consola están ahí. Estas son algunas otras optimizaciones menores posibles que ni me he molestado en hacer:
  • Alinear matrizx.raw a 256 bytes cada linea para asi a la hora de leer sus datos podamos cambiar SCREEN_WIDTH*(step-minstep) por (step-minstep)<<8 aunque esto nos hará desperdiciar 16 bytes de memoria en la estructura de datos en la ROM por cada linea.
  • Dibujar las lineas verticales una por una, de forma que si una alcanza el valor maximo se haga un break y se pase a la siguiente sin seguir avanzando en profundidad. Solo habría aceleración en los casos que el mapa alcanzase la parte de arriba de la pantalla y la aceleración sería irregular. Habría que almacenar los valores de step en una estructura de datos.
  • Si se os ocurriese alguna mas, ¡comentad!
Curiosidad:
Uso de memoria en la demo:

ElementoEspacio (KB)PorcentajeNotas
Código9.790.18%El corasón de la demo. La parte que controla todo el funcionamiento.
Imagen Background39.10.72%La imagen del cielo tan bonica para la mitad superior de la pantalla (240x80) a 16 bit bgr555
Mapa colores204838.07%1024x1024 a 16 bit bgr555
Mapa profundidad102419.03%1024x1024 a 8 bit (valores 0-255)
Matriz x2384.42%Valores para cada pixel horizontal (1-240) en cada profundidad (8-512) de la posición horizontal del campo de visión (valores de 16 bit)
Matriz Alturas202137.57%Valores de altura en la pantalla de 8 bit para cada altura del mapa (0-255) en cada profundidad (8-512) para distintas alturas de camara posibles (16)
Total5379.89100%

sábado, 2 de diciembre de 2017

Frikada del día: SOCKS5->HTTP, navega por la deep web desde IOS/Edge/IE

¿Quien no ha querido nunca navegar por la deep web desde su navegador favorito Internet Explorer?
Tanto IOS, como Edge, como el obsoleto Internet Explorer tienen un problema con los proxys en común, y es que no traen soporte para el protocolo SOCKS5 que es el tipo de proxy que utiliza tor.

Ahora es posible hacerlo gracias a un programa en Java creado por mi, que en unas 160 lineas de código, se conecta a un proxy SOCKS5 (como puede ser tor) y devuelve un proxy HTTP al que nos podemos conectar desde los navegadores de Microsoft o nuestros dispositivos de Apple.

Problema con IOS: Por alguna razon en las ultimas versiones de IOS, cuando intentas acceder a un sitio .onion, en Safari, te muestra un mensaje de que no tienes conexión a internet y el navegador ni se molesta en conectarse a traves del proxy. Se puede navegar anonimamente por el resto de paginas en cualquier caso.
Este problema no ocurre en cambio con mi antiguo Iphone 4 con IOS7.

Actualización:
Tras perder el código fuente original en Java, el cual aun tenía algunos fallos por resolver, he re-escrito el programa en C++ (Más eficiente) con mi librería Jsocket. Podeis encontrar el código fuente y ejecutable para Windows en https://github.com/juanmv94/SOCKS2HTTP.

miércoles, 4 de octubre de 2017

Presentacion de diapositivas (PowerPoint) en 3D desde el navegador

Como de costumbre, vuelvo a sorprenderos con una nueva app. En este caso se trata de una aplicación web (funciona a través del navegador) en la que podréis mostrar vuestras presentaciones de diapositivas PowerPoint en un entorno 3D totalmente personalizable. Ademas, de diapositivas PowerPoint, también se pueden añadir otros elementos como fotos, vídeos, aplicaciones, paginas web,...



De momento no voy a hacer pública la app por ausencia total de interés por parte del publico. Podéis contarme vuestra opinión en los comentarios, y como sería vuestro entorno 3D favorito.

sábado, 30 de septiembre de 2017

Manejando la Raspberry Pi desde un ebook (tinta electronica)

Tenemos una Raspberry Pi conectada por LAN a un router Wifi con un teclado inalambrico y un pendrive conectados al USB (y un altavoz conectado a la salida 3,5mm).
Gracias a shellinabox (https://github.com/shellinabox/shellinabox) podemos crear una terminal accesible desde el navegador integrado del ebook.

Para poder redirigir la entrada del teclado USB a la tty de shellinabox uso un programa de creación propia.

He aquí el resultado. Os muestro la ejecución del reproductor multimedia omxplayer a través de esta interfaz.


viernes, 1 de septiembre de 2017

Un videojuego 3D con tecnologia WebGL: Flappy Adventure 2

Descarga aplicación android aquí.
Windows, IOS, Mac y Linux acceded a versión online aquí.




Solo una semana es lo que he tardado en hacer el juego que tantos deseabais poder jugar. Flappy adventure 2 no solo es el primer videojuego 3D 100% hellinero, sino que es uno de los muy pocos implementados en tecnologia web (La mayoria de los juegos Indie 3D se crean en Unity) Esto significa que podeis jugarlo practicamente en cualquier sitio: PC, Mac, Iphone, Ipad, Android, Linux,...


Ademas dentro de la aplicación web tambien podeis jugar a la ya conocida Aventura de Flappy en su versión 2D la cual he mejorado en su versión 1.2, o jugar a la ya anticuada version GB o al Retro Stack Tower 2017 mediante su emulador de gameboy incluido.

Problemas relativos al lag:
-La velocidad de avance se ve reducida impidiendo pasar el primer nivel. Solucion: multiplicar velocidad x delta en control.js pasando delta como parametro a la funcion update.
-Al caer se puede atravesar el suelo si el lag es muy grande. Solución: RaycasterDown= Math.max(la distancia que flappy baja en el siguiente frame , 10).

Mejoras para touchscreen:

-La sensibilidad de los controles depende de la resolucion de la pantalla. Solución: usar ScreenHeight como referencia.
-Camara podría estar quieta al desplazar el dedo a una posicion (2º cuadrado). Solucion: actualizar posicion touchstart a la actual en cada update. (En Galaxy S8 funciona bien, vaya misterio)

Otros:

-Mirar si se puede arreglar spawn inicial.

Si experimentais problemas y teneis especial interes en una version 1.0.1 hacedmelo saber.


Actualización 1 aniversario de Flappy Adventure 2
Para celebrar el 1 aniversario de Flappy Adventure 2, aparte de solucionar la mayoría de los problemas apuntados anteriormente, he implementado la versión VR (Virtual Reality) del juego. Esta versión era mi principal intención cuando decidí hacer FA2, y que lamentablemente tuve que descartar por varios motivos:

  • No tenia gafas VR. Hace un año eran caras, la mayoría eran de cartón, y habría supuesto que mi juego no llegase a ningún publico.
  • Era novato usando WebGL y Three.js y solo me faltaba complicarme aun más la vida con FA2 (El cual quería tener hecho en menos de una semana)
  • No tenía de idea de como poder controlar a Flappy sin poder tocar la pantalla tactil.
Tras abrir el código por primera vez desde 1 año del lanzamiento, me quedé sorprendido de que no tuviera mas fallos. Era la primera vez que usaba Three.js y que desarrollaba un juego en 3D (Ademas con prisas). Arreglé los fallos que pude, e implementé la versión VR sin preocuparme demasiado en dejar el código bonito.

¿Como solucioné el problema del controlador?
Para controlar a Flappy finalmente se me ocurrió poder utilizar un dispositivo móvil auxiliar como controlador y que mediante Websockets se comunicaran con un servidor Java (también creado por mi).

Dudo mucho que nadie quiera probar Flappy Adventure 2 VR así que os adjunto el vídeo y vais sobraos.

sábado, 8 de julio de 2017

Mod-Emulación

No hace falta que busqueis la palabra en Google, lo mas probable es que no salga nada.
Se trata de un nuevo concepto que un día se me ocurrió y que consiste en lo siguiente:
¿Por que no modificar el código fuente de un emulador para que actúe de forma especial en ciertas rutinas de un videojuego? El objetivo de esto será mejorar la jugabilidad y apariencia anteriormente limitada por el hardware de la consola.



Podemos mostrar cuadros de dialogo, mostrar graficos mejorados, sonidos mejorados, interfaz touchscreen... Todo esto sin modificar el ROM del juego.
En el siguiente video podeis ver un ejemplo de mod-emulación que hice para el juego de "Pokemon Gold".

Aunque de momento casi todo es conceptual, pueden existir infinidad de tipos de mod-emulación:

-Mod-emulación grafica: Altera los graficos sin afectar a la jugabilidad.
-Mod-emulación sonido: Altera el sonido o música del juego sin afectar a la jugabilidad.
-Mod-emulación interfaz: Permite utilizar interfaces como touchscreens.
-Mod-emulación avanzada: Afecta a la jugabilidad (Ej: video).


Tambien se pueden diferenciar por la forma en la que se ejecutan los mods:

-CPU: Por ejemplo en una determinada llamada a procedimiento del ROM (Ej: video).
-RAM: Por ejemplo cuando la VRAM o un cierto byte de la RAM tenga un valor. (mas fáciles de implementar).

Como siempre me gustaría que comentaseis para dar vuestra opinión al respecto. ¿Creeis que la mod-emulación es una buena idea o estropea el concepto de retro-gaming?

domingo, 2 de julio de 2017

Frikada del verano: Tower Stack en Gameboy Color??


DESCARGA ROM -> AQUÍ

Terminan los examenes, comienza el verano y como viene siendo tradición me apetece hacer un nuevo juego retro para gameboy.
Esta vez, uno de los juegos de moda (seguido de flappy bird, 2048...) se llama Stack Tower, en el que vas haciendo caer de forma alineada plataformas en 3D que se van haciendo cada vez mas pequeñas.

¿¡Pero como voy a hacer un juego 3D en una consola cuyas capacidades graficas eran... Bueno...
Y es que la Gameboy y la Gameboy color son consolas con graficos basados en tiles con un único background sin escalado ni rotación, y que de forma resumida estan limitadas a un 2D bastante basico.
La cuestión es que como soy friki ingeniero informatico me pongo a diseñar un "motor grafico" para Gameboy que permita crear tiles de forma dinamica via software con los bloques 3D renderizados mediante unas rutinas software. Algo nunca visto. Estoy loco, sí.
Y sí... ¡funcionó! no me digais que no me ha quedado bonico.

No lo hice para Gameboy Original por dos motivos:
  • Aunque funciona, la potencia de la CPU en la Gameboy original se queda escasa.
  • En blanco y negro el juego queda bastante feo.
Como os habreis fijado, el contador de puntos tiene antialiasing, lo cual tampoco se habia visto hasta ahora en Gameboy.
Y este es el resultado :') ayy que lloro... Ahora solo me falta ponerle una imagen de portada bien fea.


Los bloques se imprimen por dos lados:

  • El bloque en movimiento, se dibuja en los sprites. Como sabreis (o no) hay un límite de 10 sprites por scanline, son solo 40 y pueden tener un tamaño de 8x8px o 8x16px. Para dibujar los bloques lo mas grandes posibles, alineo todos los sprites en modo 8x16 px en un único "objeto" de 10x4 sprites. ¡Apuro los límites tecnicos al maximo!
  • Los bloques ya colocados se dibujan en el background. Mi "motor grafico" se encarga de dibujar unos encima de otros y de actualizar el tilemap de forma dinamica.

sábado, 6 de mayo de 2017

J-Music: la aplicación de música para Android (Soporte finalizado)

¡Descarga APK haciendo clic aquí!

Ya esta disponible para Android la app que tantos me habíais pedido, y que tanto retraso ha tenido su lanzamiento: J-Music

Esta aplicación permite:
-Escuchar canciones de Youtube descargando solo el audio. ¡Ideal para ahorrar datos moviles!
-Descargar las canciones en formato MP3
-Explorar las canciones buscando ya sea el cantante o nombre de la canción

La aplicación esta desarrollada con PhoneGap, por lo que el codigo fuente se encuentra dentro del propio APK para los curiosos. Ademas, ¡no tiene publicidad!

La aplicación, a pesar de que los conversores Youtube-MP3 son legales de momento (siempre que sea únicamente para uso personal) no estaría aprobada para la Play Store (ya que es de Google) por lo que descargar el APK desde aquí es la única manera de instalarla. Recordad que podeis comentar aqui si tenéis alguna duda.

En caso de producirse un mínimo problema legal por parte de la aplicación, esta sera retirada de inmediato del blog.

Es posible que la aplicación no sea totalmente compatible en versiones antiguas de Android aunque siempre deje instalarla.


lunes, 1 de mayo de 2017

DInput key switcher. Personaliza el teclado en tus videojuegos.

Descarga el proyecto haciendo click aquí.
¿Quien no ha jugado nunca al Rayman 2 y no ha deseado poder cambiar los controles? Algunos videojuegos (sobre todo los que tienen ya tiempo) no permitían re-mapear las teclas de ningún modo, y no siempre era sencillo hackearlos para cambiar los controles. El videojuego anteriormente mencionado NUNCA vio una forma de cambiar los controles de teclado.

Esto se acabo... Gracias a mi como de costumbre.
Con mi nueva aplicación podréis generar un fichero DINPUT.DLL "hackeado" que al copiarse al directorio donde tenéis instalado vuestro juego cambiará vuestros controles de teclado a los que vosotros queráis.

De momento solo tiene versión de 64 bits, aunque si alguno por casualidad estuviese interesado en una versión de 32 bits, decidmelo, y me plantearía portarla a 32 bits.

Edición: Codigo fuente disponible a peticion de "Rayman Pirate Community"

Algunos juegos donde funciona dinput.dll:

-Rayman 2
-DosBox
-.....

Algunos juegos donde funciona dinput8.dll:

-Rayman 3
-Crazy Taxi
-.....

¡Sugerid mas juegos!

jueves, 20 de abril de 2017

(OBSOLETO) Vulnerabilidad de phishing en Chrome y Firefox

Demostración aquí.

¡Hola a todos!
Aunque tengo esto un poco abandonado por motivos académicos, quería escribiros un post sobre una vulnerabilidad presente en Google Chrome y Firefox (entre otros navegadores), y que hasta que se solucione, puede ser un gran problema a la hora de seguir cualquier enlace desde el PC. Estos enlaces por lo general se mostrarán como seguros a pesar de ser paginas totalmente diferentes.


Se trata de ataques phishing basadas en direcciones Unicode, y es que los navegadores implementan esta funcionalidad Unicode para que puedan haber direcciones web con caracteres chinos, por ejemplo.

El problema es que mediante estos caracteres podemos suplantar sitios web. Aunque se ha puesto de moda el ejemplo de apple.com (aquí) lo cierto es que tambien se pueden aplicar a paginas tipo Tumblr o Blogspot donde nuestro nombre pueda ir al principio de la URL, llegando a reemplazar incluso a "www" (Como en mi ejemplo de arriba)

Os animo a los usuarios de PC a que hagais click en el enlace que hay puesto al principio y me digais si podeis diferenciar la pagina de Tumblr real de la falsa.

sábado, 25 de febrero de 2017

Crear fotos con emojis

Seguro que mas de uno ya conocía alguna pagina web para convertir imagenes a caracteres ASCII.

Esto tuvo cierta popularidad hace tiempo.

Ahora en la epoca del Whatsapp donde lo que esta de moda son los emojis me pregunté... ¿Existe alguna pagina para convertir una imagen a emojis? Como vi que no, decidi crear una yo mismo.  La comparto con vosotros:
Enlace Versión nueva (2019)
Enlace versión antigua

Si teneis algun comentario o duda sobre su funcionamiento comentad abajo.

Si os gustan las chorradas con emojis, probad también Lovewords.


sábado, 18 de febrero de 2017

Descargar canciones de Youtube con la maxima calidad posible (audio nativo sin recodificar)

Como sabéis existen gran cantidad de paginas web que permiten descargar las canciones de los vídeos de Youtube en formato MP3.
Partiendo de que la calidad de audio de Youtube es bastante baja de por si, al recodificarlo a MP3 se pierde aun mas calidad*, por lo que no hace falta ser un audiofilo para darse cuenta incluso con unos auriculares básicos.
Muchas veces el MP3 llega a ocupar bastante y la velocidad de descarga en estos sitios suele ser baja.

¿Cual es la alternativa? Descargar el audio en formato nativo. Esto se puede hacer mediante youtube-dl.

Para los usuarios de Windows os adjunto un archivo *.zip que podeis extraer en una carpeta con los binarios y unos pequeños scripts *.bat que os simplificará el proceso:
Descarga aquí.

Solo hay que abrir los *.bat y pegar la URL del vídeo (ej: https://www.youtube.com/watch?v=uh6TKlo_BFM) o el ID del vídeo (uh6TKlo_BFM). ¡Veréis que la descarga va rapidísima!

Los vídeos de Youtube se pueden descargargar en distintos formatos de audio nativo cada uno: AAC, OGG Vorbis, y en la maxima calidad OPUS**

-Para reproducir en moviles android podeis usar OGG
-Para reproducir con Windows Media, y Itunes/IOS usad AAC
-Si vuestra intención es reproducirlo con VLC en el ordenador, usad el script de maxima calidad

Si han pasado meses desde que escribí este post, y veis que ya no funciona actualizad a la ultima version de youtube-dl con actualizar.bat.

No todos los videos tienen disponibles todos los formatos. Si por ejemplo un video no esta disponible en OGG probad la descarga en AAC.

* Os recomiendo mi post sobre como detectar MP3 recodificado
** Os recomiendo mi post comparativa de distintos formatos de audio

domingo, 8 de enero de 2017

Experimentos con la Raspberry Pi

¡¡Feliz año nuevo followers!!
En esta ocasión como no se me ocurre nada que publicar, os pongo dos experimentos recientes que hice recientemente con mi Raspberry Pi a ver si os inspiran.

El primero se trata de un ejemplo de Domotica muy simple, en el que creamos un portal web con PHP desde el cual podemos hacer cosas como abrir la puerta del garaje desde un ordenador o un telefono movil ¿Quien necesita llevar el mando encima?



El segundo se trata de la modificación del código fuente de un videojuego para que actue con los GPIO, pudiendo hacer cosas como añadir un segundo display, aunque se podría hacer que activasen motores, encendiesen bombillas, y mas cosas dependiendo de lo que ocurre en el videojuego. ¿Se os ocurren ideas? Bajad el volumen cuando pongais el video :')


sábado, 7 de enero de 2017

Bots: resolviendo los re-capchas: human-tunnel by Juanmv94

Antes cuando los captchas eran simples textos deformados con lineas pintadas por encima no era demasiado complicado mediante OCR obtener una determinada tasa de acierto resolviendo los catchas en los bots.

Ahora con la tecnología re-captcha de Google, implementada en muchísimos sitios esta tarea es casi imposible, ya que las técnicas de visión artificial aunque han avanzado mucho estos últimos años, siguen siendo insuficientes para la complejidad que este tipo de capchas presentan.

Nos podríamos calentar la cabeza haciendo unos algoritmos de visión artificial super avanzados... O podríamos resolver este problema de una forma sencilla, eficiente, y que nadie se esperaba. Como dijo Bill Gates: “Siempre escojeré a un vago para hacer un trabajo difícil… porque, encontrará una manera sencilla de hacerlo”


Pues bien: tenemos un servicio (pagina) web con usuarios que pueden registrarse, loguearse, interactuar,... Y aparte tenemos nuestro bot encargado de hacer alguna función repetitiva (buscar en Google, registrar cuentas, publicar comentarios,...) que puede estar o no relacionada con nuestra web.

Cuando a nuestro bot le aparezca un captcha, solo tendremos que enviar ese captcha a la primera persona de nuestra web que vaya a hacer algo, ya sea registrarse, loguearse, o cualquier otra actividad (esta decisión dependerá de la cantidad de actividad de nuestra web en proporcion con la del bot). ¡Esa persona lo resolverá por nosotros! Aparte le daremos mayor seguridad a nuestra web de una forma gratuita.

La forma de hacerlo sería algo así: 
-Nuestro servidor establece una conexion HTTPS con re-capcha y le mostramos al usuario ese mismo re-capcha desde nuestra web, (normalmente tambien desde HTTPS) creando una conexion parecida a un proxy en la que nuestro servidor hace un man-in-the-middle.
-Cuando el usuario resuelva correctamente el captcha (A veces puede darse el caso de que lo fallase) nuestro servidor que intercepta la comunicación lo sabrá, permitiendole acceso al usuario, y continuando la ejecución del bot.

De momento es solo un concepto, que no debería ser muy dificil de implementar.
Comentad cualquier duda que tengáis, comentario, o agradecimiento.

martes, 13 de diciembre de 2016

Problema de informatica para pensar (pero sin pasarse): El fichero "llave"

En esta ocasión os quería traer otro problema en este caso mucho mas sencillo que el anterior.

Venga chicos, ¡a por el premio! ;) Espero vuestras respuestas en los comentarios

En la empresa "Soluciones informaticas de Tedelche SA" Tienen en mente un proyecto importantisimo, contenido en 2 PDFs totalmente distintos de 20mb cada uno.

No obtante ocurre que algunos empleados solo tienen el PDF 1, y otros solo tienen el PDF 2 y necesitan tener los dos. El director decide mandarles a todos el PDF que no tienen en un correo que será el mismo para todos. En este correo, que tiene un limite de 21mb el director adjunta un fichero "llave" de 20mb y un EXE de muy pocas Kilobytes.

-Los empleados que tienen el PDF 1 abren el EXE introduciendo el fichero "llave" y el PDF 1 y... ¡les aparece el PDF 2!

-Los empleados que tienen el PDF 2 abren el EXE introduciendo el fichero "llave" y el PDF 2 y... ¡les aparece el PDF 1!

Los empleados, que no entienden mucho de informatica/matematicas/ciencia creen que es magia, ¿Que hace el pequeño EXE en realidad?

martes, 29 de noviembre de 2016

Web 3D - El futuro de las paginas web moviles

Todos nos hemos fijado que muchas paginas web tienen su propia adaptación para dispositivos moviles en las que el texto sale mas grande, los botones son mas vistosos...

La cuestión es que algo que permite HTML5 y que apenas se utiliza actualmente es el uso de los acelerometros que detectan la inclinación del dispositivo. Esto permitiría hacer paginas web con efectos como los que traen muchos fondos de pantalla "dinamicos" que nos vienen con el movil y que cambian conforme a la inclinación.

En el caso de las paginas web permitirían hacer que los elementos varíen levemente de posición al mover el dispositivo dando una sensación 3D.
En el mes de Octubre realicé una demo en la que mi pagina web te daba distintas "frases diarias" en un cuadrado que variaba de posición al inclinar el dispositivo, a lo que llamé Web 3D.

Teneis el enlace aquí.
Teneis otra demo para enviar en San Valentin aquí.

Ademas os comento que hacer una pagina web que de frases diarias que cambien cada vez que accedes a la pagina es un ejemplo sencillísimo de cosas que se pueden hacer en Javascript sin necesidad de apenas experiencia y que si alguno tiene alguna idea parecida y no sabe como empezar a hacerlo me puede preguntar.

Otras cosas que permite HTML5 y que apenas se usan en web son:
- Detectar nivel de batería del dispositivo
- Localización GPS en tiempo real

En realidad, cualquier pagina web puede perfectamente hacer estadisticas sobre la inclinación de nuestro dispositivo y de nuestro nivel de batería. En el caso de la localización GPS nos saldrá un aviso de si queremos autorizar la web a usar la ubicación, al que podremos decir que no.

¿Que pensais de todo esto? comentad ;)

sábado, 5 de noviembre de 2016

Problema de matematicas: El chip del Bonillo

Bueno chic@s, esta vez quería cambiar el tema en el que se centra mi blog y proponeros un problema de matemáticas que yo inventé recientemente que os pondrá a prueba, y que seguramente ninguno de vosotros resolverá :') Así que... ejejem...

En la nación/república independiente del Bonillo (Albacete) han decidido implementar por primera vez su propio DNI Electrónico, que permitirá mediante unos pines metálicos obtener un ID único para cada DNI.
El problema es que en el Bonillo no tienen ni idea de electrónica, como era de esperar, así que deciden implementarlo conectando los pines entre si directamente, y creando así distintas combinaciones.
Como veis en la imagen, con 3 pines se pueden obtener 5 combinaciones distintas, y con 4 pines 15 combinaciones.

A partir de 8 pines ya es posible tener al menos una combinación por habitante del Bonillo, pero... ¿Cuantas combinaciones son? O mejor dicho... ¿Como se calculan? (Sin fuerza bruta ehhh)

Si no os sale (lo mas probable) teneis la solución en PDF aquí.
Ademas podeis calcular las distintas soluciones del problema desde vuestro navegador gracias a mi implementación en Javascript aquí:

Introduzca numero de pines: 






FAQ:
P: ¿Quien inventó el problema?
R: Yo.

P: ¿Funcionaría en la vida real?
R: Tecnicamente sí, pero para ello sería necesario altos niveles de aburrimiento.



P: ¡Guapo!
R: Grasia.

jueves, 18 de agosto de 2016

(OBSOLETO) Como encontrar un pokemon que aparece en el radar de Pokemon GO

Como sabreis, hace un tiempo quitaron la funcionalidad de los pasos de la popular aplicación Pokemon GO. Asi que imaginaos que pasaría si os encontrais un pokemon legendario en el radar. ¿Como encontrarlo? ¡Es pura matematica!
Pues bien, es tan sencillo como tener en cuenta que el radar muestra los pokemon en un radio de 200 metros. Cuando excedemos este radio el pokemon desaparece. Y mirad por donde... He  creado una aplicación web que os encontrará a esos pokemon ;)
Podeis acceder en http://juanmv94.tumblr.com/pokemon acordaos de marcar como favorito el enlace en el navegador de vuestro movil.


Los pasos a seguir son:

1.Caminar hasta que el pokemon deje de aparecer en el radar.
2.Introducir nuestra ubicación y dar media vuelta para que vuelva a aparecer.
3.Cuando vuelva a desaparecer, volver a introducir nuestra ubicación.
4.¡El pokemon aparecerá en el radar! (Muestra dos posibles ubicaciones) Ahora solo hay que ir a por él.

lunes, 15 de agosto de 2016

(OBSOLETO) Como ver y descargar todas las fotos de Tuenti en el 2016: Tuenti explorer 1.0

Por fin esta terminada la herramienta que tanto esperabais!
Ya es posible ver y descargar todas nuestras fotos de Tuenti y las de nuestros amigos a 2016 que estamos.
A pesar de que ya no es posible acceder a estas fotos desde la aplicacion movil o desde el navegador, la API (Cosas que nunca entendereis) si permite acceder a estas!!
Por ello he creado una aplicación web que permite verlas.



INSTRUCCIONES:

1. Copiar el siguiente codigo fuente en un fichero nuevo HTML (basicamente es copiarlo todo, pegarlo en el bloc de notas y guardarlo con extension *.htm)

Código fuente eliminado

2. Abrir el fichero con Internet Explorer y pulsar F12 para acceder al modo desarrollador
3. En la pestaña emulación cambiar el User-Agent por el que aparece en la esquina (Mirar imagen). Hecho esto pulsamos en cualquier otra opcion para que IE valide los cambios y ya podemos minimizar si queremos el modo desarrollador ¡Importante no cerrarlo mientras usemos la aplicacion!
4. Introducimos nuestro email y contraseña de Tuenti y pulsamos "obtener sesion"
5. Si todo ha ido correcto, nos saldran unas letras en el recuadro de sesion, si es asi, le damos a acceder.
6. Esperamos a que cargue la lista de amigos. Es importante no tocar nada hasta que termine... ¡YA LO TENEMOS!

Ahora podemos navegar en todas las fotos  de nuestros amigos y ver todas sus fotos etiquetadas, subidas,...
Tenemos una casilla para decidir entre organizar o no las fotos por fechas, y un boton que nos permite al pulsarlo descargar todas las fotos del album que estemos viendo!

En fin, cualquier duda sobre su funcionamiento o sugerencia aqui.
Ya se que la aplicación de por si es fea, pero es lo que pasa cuando quieres hacer una aplicacion muy compleja en 2 dias XD