Tip de trabajo: Da trabajo, quita trabajo.

Recientemente luego de una reunión de trabajo mi jefe me recomendó “quitarle” trabajo. Yo había retomado un tema viejo y esto requería que compañeros leyeran un hilo de correo largo y aburrido. En principio lo entendí como un comentario rudo o mal educado. Se me quedó en la cabeza dando vueltas.

Me gusta creer que una dificultad que yo resuelvo es la de interactuar con personas de idiosincracias diferentes. Y creo que esto es a lo que mi jefe se refería. Al forzar a que mis compañeros leyeran ese hilo de correo, sin querer los forze a hacer mi trabajo por mi. Les di mi trabajo.

En el futuro, voy a pensar un poco más lento antes de responder. Un resumen breve del problema, y de la posible solución puede quitarle trabajo de encima a un compañero. Es importante aprender a delegar, y también es importante aprender a apropiarse.

Transductor fuerza vs desplazamiento

Estos días estoy con el bichito electrónico otra vez. Mi trabajo no está muy relacionado a lo que estudié en la Uni, y estoy haciendo proyectos personales que corrijan eso xD

Todo comenzó con este twitt:

El problema es que cuando se prueba la calidad de un teclado, muchas cualidades entran en consideración. Subjetivo vs Objetivos. Dos aspectos que comunes son el sonido de las teclas al escribir, y la sensación de las teclas al presionarlas.

Dependiendo del tipo del interruptor, unas suenan, unas son silenciosas, otras dan un golpecito cuando las presionas, unas son duras, unas suaves, unas duras y después suaves.

Normalmente los switch de los teclados mecánicos tienen un perfil de comportamiento. Este perfil es una curva que presenta el desplazamiento de la tecla en función de la fuerza que se le aplica. Estas gráficas son normalmente proporcionadas por el fabricante de la tecla.

Tener el perfil de fuerza-desplazamiento ayuda a tener una idea de cómo se va a comportar una tecla antes de usarla. Si tenemos dos perfiles parecidos, entonces las teclas parecidas en la sensación que dan al presionarlas.

Hay otras cosas que influencian esto: si la tecla está montada en una base plástica va a tener un perfil ligeramente diferente al de una montada en una base metálica. O dependiendo del material de construcción de la tecla y de su forma, cada tecla puede sonar diferente.

Con esto dicho, tengo dos ideas que pueden ayudar a caracterizar una tecla, y por extensión, a un teclado.

  1. un creador de perfiles mecánicos de teclas: un sensor para hacer las gráficas de movimiento vs fuerza aplicada.
  2. un creador de perfiles acústicos de las teclas. un sensor para analizar cómo suena una tecla. Esto también podría usarlo para analizar el sonido de un teclado.

La ventaja es entender mejor cómo interactúan diferentes elementos del teclado, objetivamente.

Sensor de movimiento vs. fuerza

El algo que empuje estoy pensando que sea algo así:

Rotary to Linear Motion | MISUMI Blog

para poder hacer muchas series de movimientos.

El sensor son dos sensores en realidad. Primero una celda de carga para medir la fuerza que se está ejerciendo sobre la tecla:

Typical Binocular Spring Beam Load Cell [4] | Download Scientific Diagram

Un sensor de desplazamiento. Esto puede venir incorporado en el algo que empuje, o puede ser un acelerómetro que registre la variación de movimiento.

Opcional podría tener un micrófono conectado junto a la tecla para registrar los sonidos y construir un perfil de sonido de cada tecla.

Primer intento

Usando el acelerómetro de un microbit. No estoy muy seguro de que medir posición con un acelerómetro puede no ser la solución acá para este intervalo tan corto.

El pico en la imagen de arriba es un empujón que le di al acelerómetro para moverlo un varios centímetros. Pero para leer un movimiento de menos de 1 cm que ocurre lentamente, creo que esta idea no va a servir.

Intento número 2

La siguiente idea fue hacer un dispositivo de movimiento lineal. Hora de sacar mis habilidades con bloques de lego:

Supongo que con un poquito de trigonometría puedo convertir ángulos a distancia. Ahora necesito integrar una galga extensiométrica ahí en alguna parte.

PD: el motor lo pegué a una pieza de lego con silicona.

Efectos de espectro de luz rojo lejano en las plantas.

Este post es una interpretación del vídeo Far-red: The Forgotten Photons https://www.youtube.com/watch?v=sS7aAcacfgk donde el Dr. Bruce Bugbee explica las implicaciones de el espectro de luz infrarroja en las plantas.

La definición tradicional de fotosíntesis normalmente considera los fotones en el rango de 400 a 700 nm de longitud de onda. Ademas, típicamente la luz se divide en tres colores: Rojo (400-500 nm), Verde (500-600 nm) y Azul (600-700 nm).

Es común que la luminaria comercial para cultivos se comercialice como Azul-Roja, debido a que tradicionalmente se considera que la luz verde no favorece tanto a la fotosíntesis. La ventaja de no usar luz verde es que una lámpara Azul-Roja consume menos energía, al no tener que generar el color verde.

En esta gráfica se aprecia cuánta energía absorbe la clorofila A (en azul) y la clorofila B (en rojo) en función de la longitud de onda. Nótese que en el rango de 500 a 600 nm hay muy poca absorción de luz.

Pero la luz del sol tiene presente también luz verde, y en la bibliografía más actualizada, se incluyen otros pigmentos vegetales que absorben luz en otros segmentos de longitud de onda más complejos:

Tomado de http://hyperphysics.phy-astr.gsu.edu/hbase/Biology/ligabs.html

Aunque la fotosíntesis en el rango de 500 a 600 nmm es baja, la luz verde puede utilizarse, y no es que se pierda. La ventaja de usar luz verde es que mejora mucho la visibilidad de la planta, y hace más facil

Efectos de la luz en las plantas según el espectro utilizado

Azul: inhibe la expansión celular. Más luz azúl, plantas más pequeñas, con hojas más pequeñas.

Verde: Facilita la visión humana. Es mucho más fácil realizar diagnósticos, ubicar desórdenes nutricionales, o ver insectos.

Rojo: Fotosíntesis eficiente.

Rojo-lejano: Promueve la expansión celular. Plantas más altas, hojas más grandes. Los tallos se mantienen del mismo grosor. Floración temprana.

Cuál es la función de la luz roja en la naturaleza

En la naturaleza, la luz roja existe principalmente debajo de las sombras de los árboles. El árbol refleja la luz verde y la luz roja le atraviesa, y llega al suelo. Las plantas que crecen en la sombra tienen normalmente dos respuestas:

  1. Algunas plantas crecen con tallos alargados: buscando sobrepasar a la planta que les hace sombra
  2. otras plantas crecen con hojas más grandes: buscando capturar más luz.

Está característica puede utilizarse para fines comerciales. Tallos más altos permiten mejor circulación de aire y prevenir enfermedades. Hojas más grandes hacen más productivas a las plantas cuyo producto es la hoja misma.

No todas las especies reaccionan igual, así que hay que probar con la variedad de planta en cuestión.

¿Es nuestra definición de luz sintética correcta?

Una búsqueda rápida en google nos mostrará que mucha de la luminaria led actual tiene espectros de generación de luz como el siguiente:

El problema de la luz blanca led

Note que hay un pico grande en el espectro de luz azul, y otro pico más grueso en el segmento de los 500 a 700 nm. no hay una participación importante arriba del espectro de los 700 nm. Esto se debe principalmente a dos hechos: primero, se considera que ese espectro no aporta nada positivo a la planta, y segundo generar luz en ese espectro hace que la luminaria sea más costosa de fabricar y consume más electricidad.

Obviamente no estaríamos hablando de la luz si no existiera algún tipo de incentivo. Tomemos en cuenta la siguiente gráfica de eficiencia en función color de luz que incide sobre la planta:

How to Measure Horticultural Lighting Performance - Part Two - Growers  Network

La gráfica nos dice que mayormente las plantas aprovechan el espectro de luz arriba de 300 nm, y debajo de 800 nm. Si tuviéramos una fuente lumínica que generara luz afuera de ese espectro (luz infrarroja y luz ultravioleta) esta luz sería desperdiciada. Esa fuente de luz sería más costosa porque requiere energía eléctrica adicional para generar esos espectros. Por esto, la luz comercial se concentra en un espectro definido entre 400 y 700 nm:

Layer Birds Light Led Poultry Shed Lighting In Layers - Buy Layer Birds  Light,Led Poultry Shed,Lighting In Layers Product on Alibaba.com

La luz más eficiente será la que tenga un espectro que la planta pueda usar, y que rechace los espectros que la planta no use. Pero ¿cómo determinar el espectro optimo?

Si consideramos el siguiente diagrama del proceso de la fotosíntesis:

En el lado izquierdo de la imagen (fotosistema 2) tenemos 4 fotones que excitan los electrones del agua a un estado de mayor energía, esta energía es aprovechada para almacenarla en forma de ATP, luego una segunda etapa de fotosíntesis (en la derecha, fotosintesis 1) toma luz tradicional, o luz roja, para estimular 4 electrones a un nuevo nivel de energía que es almacenada como NADPH.

Entonces, incluir una fuente de luz roja puede ser útil para la fotosíntesis.

Async / Await?

Este post es una transcripción para estudiar de este vídeo de Fireship 🔥🔥🔥

Cómo funciona el event loop?

Tanto el browser como NodeJS corren siempre un hilo de proceso.

En una vuelta van a correr todo el código sincrónico. Pueden haber eventos asincrónicos que se correran luego como macrotareas y micro tareas.

Las macro tareas se ejecutan al comienzo del próximo ciclo del hilo. Las microtareas (p.e. promesas) se ejecutan antes de que el ciclo presente termine.

Promesas

fetch: es un API del navegador que ‘pide’ a una dirección y nos deja ver cuál es la respuesta (como una promesa).

const url = 'https://jsonplaceholder.typicode.com/todos/1'
const promesa = fetch(url)

Promesa no va a tener el valor de la respuesta hasta que no sea resuelta (es asincrónica) por lo que tenemos que ponerla en cola (queue, o esperar a que se resuelva)

const promesa = fetch(url);
promesa.then( res => res.json() );
// mapear a json tambien es una promesa porque puede
// tomar mucho tiempo

Una caracteristica de esta promesas encadenadas (primero el fetch, luego el json, luego otra cosa) es que se pueden ‘desencadenar’

promesa.
  then( res => res.json() ).
  then( user => console.log('😀', user.title ) )

Por ejemplo,  atrapar un error durante la resolución de las promesas es una promesa especial llamada catch

promesa.
  then( res => res.json() ).
  then( user => console.log('😀', user.title ) ).
  catch(err => console.error('😰',err))

Non-Blocking code

Imagina esto:

const Bloqueadora = () => {
  let i =0;
  while(i<1000000000) i++;
  return 'ya terminé de entorpecer tu hilo de proceso'
}

Esta tarea frenará el hilo de proceso hasta que culmine de contar. Como es algo que nos va a retrasar, podemos hacerla una promesa, y que retorne luego en el futuro

const Bloqueadora = () => {
  return new Promise((resolve, reject) => {
    let i =0;
    while(i<1000000000) i++;
    return 'ya terminé de entorpecer tu hilo de proceso'
  })
}

Pero hacerlo de esta forma está metiendo a la promesa en el ciclo principal. Lo que necesitamos que esté en el ciclo es la resolución  de la promesa.

const Bloqueadora = () => {
  return Promise.resolve().then( x => {
  let i =0;
  while(i<1000000000) i++;
  return 'ya terminé de entorpecer tu hilo de proceso'
})

Async / await y la magia de ES6 🔮🔮🔮

async y await son una forma de hacer más bonita la sintaxis de promesas, sobre todo cuando hay promesas encadenadas:

promiseHell.png

para evitar esto se pueden crear funciones que retornen promesas así:

const getFruta = async (name) => {
  const fruta = {
  pineapple: '🍍',
  peach: '🍑',
  strawberry: '🍓'
  }
  await delay(1000)
  return fruta[name];
}

const hasJugo = async () => {
  const a = await getFruta('pineapple');
  const b = await getFruta('peach');
  return [a, b];
}

Pero esto introduce otro problema, que ahora hasJugo está creando dos promesas consecutivas, en vez de ser paralelas. Para hacer promesas concurrentes no hay magia :(:

const hasJugo = async () => {
  const a = getFruta('pineapple');
  const b = getFruta('peach');
  return Promise.all([a, b]);
}

Ese Promise.all hace que todas las promesas se realicen de manera concurrente.

Normas de buena educación

Es de buena educación que toda la promesa tenga manejo de posibles errores:

const hasJugo = async () => {
try{
  const a = getFruta('pineapple');
  const b = getFruta('peach');

  throw 'la fruta estaba rancia!!!'

  return Promise.all([a, b]);
} catch(err){
    console.error(☠,err)
    //y aca se puede o lanzar un error ó
    //retornar un mensaje
    //return 'el cliente no se va a dar cuenta'
    //throw 'sabe a 💩'
    //return: no modifica la lógica del programa
    //throw: el programa tendrá que hacer un catch
  }
}

Tips de cierre:

hacer await dentro de un map, o cualquiera de esas higher order functions no espera a la resolución de la promesa, la deja ejecutando concurrentemente.

Si se quiere que un loop espere a la resolución de cada promesa antes de continuar con la siguiente se debe hacer un ciclo for:

const fruits = ['peach', 'pineapple', 'strawberry']
const getPromesa = async () => {
  for(const f of fruits){
    const emoji = await getFruta(f);
    console.log(emoji)
  }
}

si se quiere que la cosa sea concurrente, se puede usar el map (que dije que no se usaba)

const fruits = ['peach', 'pineapple', 'strawberry']

const promesas = fruits.map(v=>getFruta(v));
const forFrutas= async () => {
  for await (const fruta of fruits){
  console.log(fruta)
  }
}

o se pueden ejecutar ciertas partes del programa a que esperen la resolución de una promesa sin bloquear así:

const inspection = async () ={
  if(await getFruit('peach') === '🍑'){
    console.log('tiene forma de pompis')
  }
}

#TodayILearned React and external components interaction in codepen.

TL;DR: React is not that bad.

I started learning React a month ago and completed the freecodecamp React section. IDKW but had this feeling that I won’t get too far in case I needed to develop a form on my own, let alone an application. So I decided to deepen a little further into the React parallel universe.

I come from a vanilla background (plain html, js and css… maybe a little bootstrap). I decided to take that route with the intention of mastering the basics and to grow my knowledge from there. The thing is besides HTML, CSS and JS are two humongous beasts to conquer, and that the more that I studied them, the less I felt I was able to accomplish.

Enters React.

React gave me the impression to be more a lego set than a beast. It felt more like a set of pieces to build purple lizards, winged houses and underwater motorcycles.

Compared with other technologies like JS the react learning curve seems sorter and shallow. I’m super humble when saying this because I know that my knowledge is really (really really) finite, and I know I might change my opinion in the future 1.

My point here is I don’t remember the last time I was this excited and committed that I studied 6 hours a day something and started filling my notebooks with sketches and findings.

One particular step I found to be hard was to use React in my favourite prototype platform: Codepen. And it was actually not that difficult, to to came to this realization is. So lets get to the recipe, shall we?

First you’ll need to add the JS external references:

Second, and this is the tricky part, you’ll need to add a CSS reference for the semantic-ui components. Normally when you import a component via npm, it comes with its style sheet, but in codepen you’ll need to do that part manually:

And the one last part of the trick is that I needed to create this quick references for each component I needed to use

 

Post-it! css colors via custom properties via javascript

So today i was finnishing up one of my FCC projects (the random quote machine generator) and I thought this idea where each quote would be writen in a post-it note.

After a couple of weeks procastinating I finally came up with a solution for wich I needed the hex representation of each post-it color:

Post it Super Sticky Lined Notes Miami Collection 4 x 6 ...

Then I duckduckgogled for a tool and came up with a free color picker tool wich I find handy since it depends a lot on you having to use the Win + Shift + S screen capture trick. This tool allows for a quick way to get each color hex representation:

With everything setted up, I created my css constants (custom properties) for each collection:

:root{
--miami-blue : #71CAC4;
--miami-green : #E1E646;
--miami-red : #F3778F;
--miami-pink : #F49EBB;
--miami-orange : #FBAD4B;
}

I’m starting to think all this idea might be a bit overkill, because then I needed to do an array in JS with the names of each collor, so I could pick one at random:

const _background = ['--miami-blue',
'--miami-green',
'--miami-red',
'--miami-pink',
'--miami-orange'];

let background = _background[Math.floor(Math.random()*_background.length)];

Only to then be able to asign it to something:

 var colorValue = styles.getPropertyValue(background);

I’m starting to think this is too much hassle, and that maybe just creating a color array in JS and call it a day…

CSS + JS Día 1

Si no puedes hacer un curso a la vez, mejor intenta hacer dos cursos a la vez.

box-shadow inset: se proyecta la sombra hacia adentro del elemento, como si el botón fuera una depresión.

Transition: los argumentos son all (?), el tipo de transición y el tiempo de transición. El tiempo tiene que ponerse en unidades de tiempo con una ‘s’ al final o la cosa no funciona.

Document.querySelectorAll puede:

  • Encontrar un div con una clase.
  • Encontrar un boton con la misma clase que el div
  • Pero si le preguntas que encuentre todos los elementos de la clase, sólo va a retornar el div. El botón se le olvida en el camino.

Tengo una teoría:

  • o no se le puede adjuntar un evento de transitionend a un botón,
  • o no sé cómo hacerlo

Abrir una empresa en Perú.

Un amigo y yo contratamos un gestor para abrir una empresa en el Perú. La idea del gestor vino porque los dos trabajamos y no tenemos mucho chance de hacer diligencias, y bueno, porque somos venezolanos malacostumbrados a los gestores.

De lo que he entendido, no hace falta que nadie te ayude, y buscando en internet hay bastante información En teoría los pasos son

  1. Búsqueda y reserva de nombre 
  2. Elaboración del Acto Constitutivo (Minuta)
  3. Abono de capital y bienes
  4. Elaboración de Escritura Pública
  5. Inscripción en Registros Públicos
  6. Inscripción al RUC para Persona Jurídica

Pero en la práctica, hay un par de cosas que no te explican.

1) Necesitas PTP, carnet de extranjería o un socio peruano

Sin esto, estás muerto en el agua. Sin embargo, cuando vayas a hacer el acta constitutiva puedes poner algún amigo peruano, y asignarle un porcentaje bajo de participación, o puedes sacarlo luego de que termines todo el registro.

2) La reserva de nombre la puedes hacer desde tu casa.

Creo que esto no lo sabe el gestor que nos está ayudando. Para lo de la reserva necesitas pagar 20 soles en el registro publico donde vayas a buscar la reserva. La dirección para el registro es acá

3) La minuta la tiene que hacer un abogado (?)

Imagino que si yo hubiera ido a la notaría ellos me ofrecían el servicio. La verdad no estoy muy seguro, pero sí estoy seguro de que un abogado me cobró (~100$) por hacer eso de la minuta. Por si acaso, voy a poner una copia de mi minuta acá. El documento que está al final es el abono de capital y bienes.

Si no tienes una cuenta o si no tienes dinero, simplemente no abonas capital, si no que abonas bienes. Esto lo llevas a una notaría. El costo de la notaría varía, pero va a ser algo cercano a 100$ en Perú. Ese día tienen que ir todos los socios, y sus conyugues, así que pila con esto. Mi socia/conyugue tiene un horario de trabajo restrictivo y le fue muy difícil cuadrar para ir.

2) Tienes que sacar tu permiso para firmar contratos otra vez

Lo tienes que sacar cuando vayas a llevar la minuta a la notaría porque ahí vas a firmar.

4) No hace falta un gerente peruano si eres venezolano

Lo que sí hace falta es que al menos un socio sea peruano. Tener una empresa en Perú no te da derecho a carnet de extranjería ni modifica de ninguna manera tu condición migratoria.

5) no hace falta tener una visa de inversionista ni 25000$

Con un socio peruano, así sea con 1% de las acciones es suficiente.

Espero que esto aclare algunas dudas. Si todavía no estás muy claro de qué hacer, deja una pregunta en los comentarios.

Suerte!

 

 

Apagar backlight VELOCIFIRE TKL78

TL;DR: Fn + ↑ o ↓

teclado

No sé decir exactamente qué tienen los teclados mecánicos. El primero que vi fue un Das de cherrys rojos sin el layout de las teclas que un amigo se compró hace unos 10 años, y fue una mezcla entre amor a primera vista y ¿qué le pasó a mi pana que boto 100$ en esta mierda que ni teclas tiene?

En lo personal, he pasado de un Reddragon de switch azules al que le instalé switches negros, a un Velocifire de switchs marrones en un periodo de unos 5 años… Supongo que en total he gastado unos 80$ en total.

Recientemente un amigo me preguntó porqué gastaba dinero en eso. La verdad en el momento no supe responder. Mi trabajo consiste entre otras cosas en redactar manuales, informes, correos y programo como hobby. Paso unas 8 horas al día en frente de mi computadora, así que de verdad mi intensión es mi experiencia de uso del computador sea lo mejor posible, y tengo una buena PC, una silla horrible que pienso cambiar, y ya le estoy echando el ojo a otro monitor.

El teclado es una herramienta. Es chévere tener buenas herramientas, pero no es indispensable para mi trabajo.

Este teclado tiene como una textura rara en las teclas que no me gusta mucho. La tecla baila cuando la tocas, y esto era algo que no tenían ni las teclas azules del Reddragon, ni los switches negros que compre luego.

Estoy en mi primera semana de uso, así que no me hago juicios… Todavía.