He estado leyendo y tratando de aprender como encriptar y luego decriptar información de manera segura (y tal vez algún día pueda decir: en la manera correcta).
Sin entrar a detalles que podrían mandarme por un agujero de conejo, describo lo que quiero hacer y luego lo que he encontrado:
Contexto:
Se usa una llave privada y una llave pública (correspondientes)
La llave privada la tiene una webapp
La llave pública la tiene un servidor
El proceso:
La webapp hace un request a un primer endpoint (algo así como /knock)
El servidor recibe el request y genera una frase de manera random, entonces cifra la frase con la llave pública, guarda un hash de la frase y envía el texto cifrado como respuesta
La webapp recibe el challenge, lo decifra usando la llave privada y entonces genera un hash (usando el mismo proceso que el servidor para generar el hash) y manda al server el hash al siguiente endpoint (algo como /answer)
El servidor recibe los datos y compara los hashes, si son iguales entonces sabemos que la webapp tiene la llave privada correspondiente a la llave pública usada para cifrar el challenge
Para facilidad saqué otros puntos del proceso, pero esto describe la parte núcleo a resolver.
Encontré varias librerías que pueden hacer esto, pero, hay un requisito extra: el par de llaves tienen que ser del tipo correspondiente a Ethereum: ECDSA.
Por ahora tengo una implementación funcional que usa eth-crypto PERO (gran pero), solo puede encriptar/decriptar mensajes de menos de 16 letras :( Le dejé un issue acerca de esto y no me han respondido (capaz nunca lo hagan), así que sigo aprendiendo para ver como resolver esto de manera genérica.
De la misma manera que se pueden hacer proyecciones de circulos 3D a 2D lo mismo se puede hacer para “elementos” de 4D (y dimensiones superiores) a gráficos 3D.
La idea que tuve es graficar los digitos de PI en un espacio de 3 ejes (potencialmente no se verá nada), pero esta podría ser una proyección de algo más, algo “causal” en 4D y lo que entendemos en PI es sólamenta la proyección en 3D (y por eso no “vemos” nada).
Bueno, ya veré si en algún momento me pongo a jugar con esto.
Ex-Apple Engineers turn your iPad into an extra display. Duet
Una vez que usas un segundo monitor no hay manera de volver atrás y cuando no lo tienes lo extrañas - todo el tiempo.
En el mientras decido donde y como va a ser mi escritorio de trabajo, como me gustaría tenerlo para “ser más productivo” (o on realidad estar más cómodo). Estuve viendo opciones de usar un iPad como segunda pantalla.
Eventualmente descubrí Duet Display. Es una app que se instala en el iPad y en la computadora y (importante) usando cable (en la versión gratuita) se puede usar el iPad como un segundo moitor.
Tiene muy buen performance - hace unos años intenté con otra app y fue tan malo el performance que no volví a ver opciones de apps hasta ahora. No me sentí cómodo usando el touch en el iPad, pero la respuesta del mouse es muy buena.
Lo único que no me gusta es que no puedo usarlo de manera wireless - la versión de paga lo permite por $20 USD al año.
Es una buena opción para tener en cuenta, me gustaría un segundo monitor más grande pero “en el mientras” tengo uno tamaño iPad (mini).
El mes pasado publiqué uno más de mis experimentos. Era un viernes cualquiera y como otras veces decidí compartir en varios lugares el link para ver si conseguía algún tipo de feedback. Cual fue mi sorpresa cuando el post consiguió tracción en Hacker News y se quedó todo el día en la front page y luego fue trending en GitHub/JavaScript. Tremenda nerd-felicidad.
Les doy un poco de contexto:
Para hacer una conexión WebRTC se necesita intercambiar información de cada uno de los devices (entre otras cosas imagino que datos de IPs y similares) y hay diferentes maneras de hacer este intercambio. Lo más “normal” es un usar un servidor que se llama servidor de signalling. El dispositivo A se conecta al servidor y le dice soy A, luego llega el dispositivo B, que se conecta y hace lo mismo (me llamo B). B le pregunta al servidor: “¿conoces a A?” y el servidor le dice si, y se encarga de pedirle a cada dispositivo la info correspondiente, la intercambia entre ellos y así al final A se conecta directamente a B (y puede intercambiar datos directamente sin usar el servidor). Así se establece una conexión en tiempo real (Web Real Time Communication).
Mi problema es usar un servidor de signalling. Tiene demasiado “poder” ya que al final es quien decide que dispositivos se conectan entre sí. Si fuera “malicioso” podría hacer un ataque en el cual conecta a A <-> C <-> B, sin que A o B lo sepan y sus comunicaciones podrían ser escuchadas y hasta alteradas.
Mi experimento busca establecer una conexión WebRTC sin usar un servidor de signalling. Para eso busqué la manera de intercambiar los datos de signalling usando códigos QR. La información es más de lo que se puede transmitir en un sólo código QR por lo que tuve que hacer una secuencia de códigos (uno tras otro), donde cada uno transmite la parte que le toca y más información (el total de slides y el índice de si mismo para que el dispositivo que está leyendo sepa como va y cuanto falta).
El experimento funciona y se puede, de manera completamente descentralizada establecer una conexión WebRTC en una red ad hoc.
Tuve la suerte de que aceptaron mi propuesta de charla en el JSDayEs 2018. Fue una experiencia fantástica.
Pude compartir con personas de la comunidad JS en España, hablar de temas importantes el día de hoy y escuchar charlas de personas que saben mucho y que ahora sigo para seguir aprendiendo de lo que comparten.
Pero mejor les dejo el video para que vean la charla:
Feedback
Entre las cosas que me preguntaron y que considero para el futuro: no hice un demo de la marioneta. He estado trabajando en un refactor donde cambio el motor de física que usa y no logré tenerlo listo para el día de la presentación - pero si logré publicar otro experimento que ya contaré después. Si puedo volver a dar la charla trataré de incluir un demo.
Hace unos días me compré uno de estos. Le tenía ganas hace rato y había pensado que compraría el que tiene integrado red de celular (al final no fue así).
La correa es de silicona, así que es de buena calidad y se puede meter bajo el agua - sin confirmar si se puede bucear o no, el librito dice hasta 50 metros pero no confío. Fui a ver otras correas y salí corriendo, osea la que me gustó está en 160€ (más de un tercio de lo que cuesta el reloj en sí).
Hay varias cosas que disfruto:
Tener las notificaciones a la mano (pun intended), en serio, es muy fácil ver que es lo que está “llamando tu atención”.
Me recuerda que tengo que respirar (tiene integrada una app que se llama Breathe), a veces lo hago y otras no, pero está bueno parar un minuto y respirar.
Puedo nadar con el reloj puesto y me guarda la rutina. Esto me encanta. Me fascina la idea de llevar una bitácora de ejercicio y ya lo hacía antes (después de ir a nadar abría una app donde ponía la info manualmente). Pero este reloj lleva la cuenta en automático y se integra con las apps de Health.
Lo mismo para correr y otro tipo de ejercicios, además de llevar la cuenta de pasos al caminar.
Ayuda a ver tipo, calidad y cantidad de sueño al dormir. No lo he probado porque me parece incómodo para dormir pero te da la opción de analizar el tipo de sueño.
Música “on the go”, tampoco lo he usado porque me falta comprar un buen par de audífonos bluetooth (o apple buds). También se pueden usar para atendar llamadas (¿quién usa el celular para llamar hoy en día?). Si esto va bien seguro me consigo unos audífonos para usar mientras nado.
Control remoto de la música (con spotify), esto es algo cómodo, si lo tienes viene bien porque el reloj está contigo y no tienes que buscar el celular que también lo tiene integrado - viene bien cuando escucho música en la ducha.
Siri, no la uso pero la idea es que con levantar el reloj le puedes pedir cosas, y con los nuevos shortcuts cosas más interesantes.
Apple Pay, muero de ganas pero mi banco no lo tiene integrado así que por ahora esto no.
Lo único que podría decir en contra es que las notificaciones se volvieron incómodas, osea, todo el tiempo te vibra el reloj y la respuesta automática es ver que pasó.
Así que eso, es un buen chiche y tiene muy buenas aplicaciones y espero que mientras pase el tiempo salgan más y mejores.