Direcciones en Solidity

El blockchain de Ethereum esta construido de cuentas, que puedes razonar como cuentas de bancos. Una cuenta tiene balance de Ether, la moneda usada en el blockchain de Ethereum. Puedes utilizar estas cuentas para enviar y recibir Ether, así como puedes hacerlo con cuentas de bancos que transfieren dinero a otras cuentas de banco.

Cada cuenta tiene una dirección, exactamente igual que las cuentas de banco. Es un identificador único que apunta a tu cuenta, y se así:

0x1B0fcE686a0A3d46c7838d5a3fb39A506e40Bf6f

(Esta dirección es mía, puedes enviar Ether si quieres 😉 )

Estas direcciones pertenecen a un usuario único (o un contrato inteligente).

Source: https://cryptozombies.io/en/lesson/2/chapter/2

También te puede interesar

Eventos: https://alanhurtarte.com/eventos-en-solidity/

Funciones puras: https://alanhurtarte.com/funciones-puras-en-solidity/

Eventos en solidity

Los eventos en solidity son como en cualquier otro lenguaje, emisor y receptor. Se usan para comunicar que algo paso en el blockchain hacia tu frontend, el cual estará «escuchando» para ciertos eventos y tomara acción cuando suceda.

Por ejemplo:

// declarando el evento
event EnterosSumados(uint x, uint y, uint resultado);

function sumar(uint _x, uint _y) public returns (uint) {
  uint result = _x + _y;
  // disparar el evento hacia el app
  emit EnterosSumados(_x, _y, result);
  return result;
}

Tu frontend podría estar escuchando el evento. Una implementación en Javascript podría verse así:

TuContrato.EnterosSumados(function(error, result) {
  // haz algo con el resultado
})

Source: https://cryptozombies.io/en/lesson/1/chapter/13

También te puede interesar:

Funciones puras en solidity: https://alanhurtarte.com/funciones-puras-en-solidity/

Funciones puras en Solidity

En solidity hay funciones llamadas puras o pure en ingles, que es cuando no se accede al app ni se escribe sobre ella, solo se usa lo que se mande por parámetros.

Por ejemplo

function _multiply(uint a, uint b) private pure returns (uint) {
  return a * b;
}

Esta función ni siquiera lee el estado del app. El valor a retornar depende solo de los parámetros de la función.

Cabe mencionar que puede ser difícil de recordar cuando marcar una función como pure/view. Por suerte el compilador es bueno para recordar con warning de cuándo deberías usar uno de estos modificadores.

Source: https://cryptozombies.io/en/lesson/1/chapter/10

Lo que aprendí del Toptal JS Speeding Challenge

El toptal js speeding challenge concluyo ya hace unas semanas, y tenía premios geniales como $1000 gift card en amazon y unos airpods para el primer lugar. Lo que aprendí yc de cómo podrías ganarlo.

Muchos como a mí les habra salido la publicidad del challenge de toptal, apelaban al orgullo de si podías resolver algo con js rápido, y no me convencían, paso una semana con estos anuncios constantes hasta que decidí participar. Lo curioso es que la publicidad que funciono fue una que apelaba a mi nacionalismo. Algo tipo «ayuda a que tu país rankee mas alto». Me parece curioso que eso me llevo a la acción.

El primer intento

Bueno dije yo, participe y resultaron ser los típicos ejercicios de JS que hacen en las entrevistas laboras. Algunos mas fáciles como retorno un numero al cubo, o sacar la raíz cuadrada de un número. Otros un poco más complejos como encontrar anagramas y palíndromos.

En mi primer intento saque 15 puntos, fueron 3 ejercicios acertados en 2:30 minutos. Me pareció muy poco tiempo pero pensé, de esto se ha de tratar, quién typea mas rapido. Al terminar mi tiempo me llevo a mi scoreboard nacional, solo habían unos 8 participantes y estaba sexto en el listado de Guatemala, pero el primer lugar tenía 4500 puntos. Eso es imposible dije yo, o logro hackear el timer o esta haciendo algo más, porque no hay manera de escribir tan rápido. Luego vi el score global y era lo mismo, arriba de 4000 puntos.

Lo que necesitaba era automatización

Después de ver los scores más altos encontré que esto tenía que ser un bot, o algo similar. Investigue un poco y decidí probar https://github.com/puppeteer/puppeteer. Resulta que esta herramienta se utiliza para automatizar pruebas y acciones en un navegador tal y como la haría una persona, pero mucho más rápido. Pase dos días perdido probando e investigando como niño que descubrió algo nuevo.

Resulto que el Toptal JS Speeding Challenge resulto ser mas un concurso de velocidad de automatización que de Javascript.

Solución

Ya con esta solución solo fue cuestión de tiempo para encontrar el patrón y automatizar todas las respuestas. Yo entre el penúltimo día de la competencia, logre una puntuación alta, mas no perfecta. Logre quedar en el puesto 15 de América y como en el 97 a nivel global. Mi solución puede encontrarse aquí https://github.com/kenny08gt/toptal-speed-coding-challenge-js

Leaderboard en América
Leaderboard en Americas (mejor posición que llegue, luego quede 15)

Que queda por mejorar y aprendí

Realmente creo que mis soluciones se pueden mejorar para dar un mejor tiempo de respuesta, sin embargo creo que es más fundamental encontrarse en un lugar con poca latencia. En un concurso tan competido, donde el tiempo es la medida de calificación, sería perfecto tener una conexión con poca latencia. Donde en vez de tardarse 300ms la conexión pudiera darse en menos de 100ms. Multiplica eso por 36 ejercicios y ya son mas de 3 segundos menos, por dar un ejemplo. Esta podría ser la clave para ganarlo o rankear mas alto.

No te olvides de pasar otros de mis posts

La importancia de tu primer trabajo y como define tu carrera

El primer trabajo definirá tu carrera por los siguientes años, y si no peleas por el cambio, por el resto de tu vida.

Yo tuve mi primer trabajo a los 17 años, salí del bachillerato, listo para enfrentar al mundo laboral, no había logrado entrar a la universidad así decidí buscar trabajo para no perder un año sin hacer nada en mi casa. Me tope con que nadie contrata a menores de edad. Supongo que por posibles implicaciones legales y demás. Busque varios procesos y el ultimo que me quedó donde si contrataban menores fue pizza hut.

Trabaje un año en pizza hut, de mesero, de lavaplatos, de limpia mesas, de hacer masa, de hacer pizza, de «barista», de hacer el corte y servir los platos, de armar pasta. Pase por casi todas las areas. Fue duro el trabajo, tocaba trabajar días de feriados o descanso que mi familia tenía y yo no. Era trabajar más de 12 horas seguidas los fines de semana. Si te toca cierre era trabajar hasta la 1 o 2 de la mañana.

En esta etapa fue la primera vez que lo escuche de un compañero: «El problema que ahora solo de esto vas a poder trabajar» me dijo, y yo con un futuro totalmente diferente planeado en mi cabeza le pregunte porque. Me respondió: «si porque de esto tienes experiencia, si vas a buscar de bodeguero o en oficina te van a decir que no tienes experiencia, que mejor aplique a servicio al cliente, si vas a un Mcdonalds o algo así si te darán porque ya tienes esta experiencia«

En ese momento solo pensé, hell no, mi futuro tiene que ser mas que esto. Ganar Q700 quincenalesNo que tenga nada de malo trabajar en un restaurante. Respeto mucho la profesión y conocí grandes amigos y personas ahí. Pero yo soñaba con más, con mucho más.

Seguía sin ganar la entrada a la universidad, por lo que entre a un programa para prepararme para entrar. Otro año mas, aprendiendo lo que tuve que haber aprendido hace años. Tuve la fortuna de poder entrar a la universidad el siguiente año. Pasaron los 5 años, largos y tormentosos por momentos. Hasta que tuve que volver a solicitar trabajo. Ahora como futuro ingeniero en sistemas.

El primer trabajo en tecnología

Mi familia no estaba pasando por un mal momento financiero así que me apresure a buscar trabajo, pero no era una búsqueda enfocada, era lo primero que saliera y me aceptaran. No tenía experiencia laboral. Era un trabajo de Jr. por lo tanto es complicado también. Un día un amigo me dice yo tenía entrevista aquí pero ya me salió trabajo, prueba aplicar. Lo hice y me aceptaron.

Este trabajo era usando PHP un lenguaje de programación que es usado por el 70% de la web, pero que tiene mala fama entre programadores y mamadores de la tecnología. A mí no me importo, trabajo es trabajo dije yo.

php for web development
https://w3techs.com/technologies/details/pl-php

Pasaron los año ya, tengo 5 años de estar trabajando profesionalmente con Php y otras tecnologías y ya tengo una experiencia que podría decirse ser de Sr. Pero esta experiencia solo aplica a trabajo en Php, si quisiera un mejor sueldo en otra tecnología, no tengo la experiencia para aplicar en ellos, en especial como Sr pues piden experiencia.

Viendo para atrás debí escoger mi primer trabajo con mas cuidado. Puede que tengas suerte y te toque una empresa o un jefe que te ponga el path para trabajar en diferentes areas y logres experiencia en otras. Puede que tengas suerte y te puedas mover entre areas internas de la empresa sin mayor problema. Pero también puede ser que no, y te quedes atorado en la misma tecnología, por varios años si no estas consciente de ello.

También puedes leer https://alanhurtarte.com/eso-nunca-funcionara-la-historia-de-netflix/

La historia de Netflix: Eso nunca funcionará.

Netflix

Eso nunca funcionará fue la respuesta de la esposa de Marc Randolph, el fundador de netflix, cuando le contó la idea renta de películas por correo.

Estos son mis aprendizajes del audiolibro https://www.beek.io/libros/eso-nunca-funcionara.

Marc narra cómo nació la idea. Estuvo buscando ideas en su viaje diario al trabajo junto Reed, a quien quería convencer para invertir e iniciar su idea.

En sus ideas iniciales estaba:

  • Comida de perro personalizada
  • Bates de béisbol personalizados
  • Shampo personalizado

Ninguna convenció a Reed, el problema de lo personalizado es que no es escalable, cada solución es única y no se podría llevar a producción masiva, aparte imagina se muere un perro con la comida. Todo el problema de PR que podría haber.

La idea del bate de béisbol es porque su hijo estaba en las ligas menores y en etapa de crecimiento, no todos los bates funcionaban para todos.

El inicio de Netflix

La historia que cuentan del inicio de netflix es que Reed encontró una película (vhs) en su casa y cuándo la devolvió tuvo que pagar una multa de $40. Mas adelante cuenta que no fue tan así, pero que la mantuvieron porque era mágica, era corta y concisa. Permitía a cualquier identificarse con la marca.

Inicialmente era demasiado caro enviar un vhs, pesaba demasiado y peleaban contra gigantes, no era rentable. El DVD era un formato no tan conocido pero hacía bulla. Así que la estrategia fue empezar a comprar todos los dvd’s que hubieran en el mercado para poder decir que tenían todos. Y así tener un ventaja competitiva contra blockbuster.

Lograron alianzas con fabricantes de dvd’s para que incluyeran un sticker de 10 rentas gratis al registrar su código único por reproductor. Algo que fue difícil de conseguir debido a que esas empresas grandes y llenas de burocracia no eran tan flexibles a cambios como una startup. Esto lo vemos hoy en día con stickers de Netflix de dispositivos.

Cualquiera pensaría que al tener una alianza con Sony y toshiba ya sería un gran paso. Resulto que no funciono tan bien, los códigos iban afuera del empaque y cualquiera con una pluma y un papel podría copiar los códigos y canjear sus películas gratis.

No había retención de clientes

El otro gran problema que encontraron es que la gente no regresaba como cliente, no tenían retención. Al inicio vendían y alquilaban dvd’s, y las ventas eran muchos mayores que los alquileres, pero Marc sabia que ese era un callejón sin salida. En el momento que amazon, walmart y cualquier otro gigante del retail vendiera dvd’s les iba a matar el negocio. Netflix quería ser el servicio de renta, no de venta.

Hicieron varias pruebas de envíos al día siguiente. Cuenta que alguien metía todos los pedidos hasta las 3:30pm en su auto, manejaba media ciudad, para luego bajar con una carreta todos los pedidos y llevarlos a la oficina postal para que pudieran ser entregados al día siguiente.

Netflix fue el primero: La clave fue el plan de subscripción

Lo que hizo que resultara la renta de dvd’s fue el plan de subscripción. En un momento desesperado y de no mas tiempo para probar ideas, decidieron probar 3 ideas al mismo tiempo. Recordemos que en esos tiempos no existían subscripciones mensuales, no había streaming ni plataformas para hacerlo.

  • no limites de tiempo de renta
  • pagos único mensual y ver todo lo que puedas
  • y no recuerdo la tercera

El libro es una maravilla narrada, parece un historia de ficción. Si tienen la oportunidad léanlo o escuchen.

El escándalo de Bill Clinton y una película porno

Cuenta la historia de cómo quisieron subirse a la ola del escándalo de Bill Clinton y Monica Lewinsky. Y terminaron enviando una película porno a sus clientes. Se resumen en correr literal para encodear y grabar el juicio de Bil en tiempos record, noche de no dormir y ahorrar tiempo en etiquetas. Enviaron los dvds equivocados. Emitieron un comunicado de disculpa, y que cubrirían el retorno de la película porno. Curiosamente, nadie retorno la película porno.

Otros puntos importantes:

  • En un momento inicial Amazon los quiso comprar pero Reed no le pareció la oferta.
  • Blockbuster les negó la compra cuando estaban pidiendo ser rescatados porque los números no funcionaban.
  • Tuvieron que despedir a mucha de gente inicial porque ya no se podia mantener.
  • Cuando lograron hacer rentable los dvd’s llego el stream. Ya había internet de altas velocidades y accesible para muchos. Tuvieron que tirar todo su sistema de renta y adaptarse. Solo imagen eso.
  • Su cultura se basa en la responsabilidad. Tienen personas adultas y confían en ellos. No importa cómo o cuándo trabajes, pero lo tienes que hacer.
  • Nadie sabe nada. Hay que probar todas las ideas.

Gracias por tomarte el tiempo de leer. No olvides subscribirte y ver otros de mis posts como:

Laravel y el Service Layer

Laravel y Service layer

Recientemente me tope con este termino aplicado a Laravel. Al aprender Laravel desde su documentación te da una guía recomendada y funcional de como usarla de una manera exitosa. Sin embargo su eslogan es:

The PHP Framework for Web Artisans

https://laravel.com/

El framework para artesanos Web. Entonces debemos tomar la documentación como una guía y nada más. El resto esta en nuestras manos de artesanos.

Aquí entra el paso extra del service layer. El proceso de un request http en grandes rasgos es así:

Ahora con el service layer sería así

La idea es separar la parte de la lógica del controlador, logrando así tener responsabilidades únicas en cada elemento, el controlador solo tendrá la tarea de llamar a los elementos necesarios y retornar resultados, convirtiéndose es solo un mensajero, manteniendo una arquitectura de software limpia y fácil de mantener.

Service layer es un patrón de diseño que nos permite no repetir código. Permite abstraer la lógica cuando necesitas usar la lógica con diferentes front end. Permite abstraer la lógica de la aplicación a un servicio común.

Ejemplo

Sin service layer

UsersController.php

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;

class UsersController extends Controller
{
     public function create(Request $request){
           $validator = $this->validate($request->all(), [...]);

         User::create([
        'email' => $request->get('email'),
        'name' => $request->get('name'),
        'password' => $request->get('password')
    ]);

        return redirect('users')->with('user', $user);
     }
}

Con service layer

CreateUserService.php

public function make(Request $request)
{
   $user = User::create([
     'email' => $request->get('email'),
     'name' => $request->get('name'),
     'password' => $request->get('password')
   ]);
   return $user; 
}

UsersController.php. Inyecta en el nuevo servicio en el constructor.

public function __construct(CreateUserService $createUserService)
{
    $this->CreateUserService = $createUserService;
}

public function store(Request $request)
{
    $this->CreateUserService->make($request);

    return back()->with(['success' => 'Congratulations!']);
}

Así que ahora sabes, puedes crear usuarios desde diferentes lados, por ejemplo un API y un frontend tradicional con blade. O hasta en proyectos con multiples dominios con ui limitadas o diferentes. Ante cualquier cambio solo tendrás que actualizar tu servicio.

El Vue js más util, Laravel Inertia + Vue JS

Yo aprendi a programar usando vanilla JS y jquery, me convertí un gran fan de jquery. Luego surgieron estos frameworks de frontend, angular, react js, vue, svelte, etc. Y cada año surgen nuevos.

Mi primer acercamiento con esto fue un: pero que necesidad de complicar esto, con jquery ya lo hubiera terminado. Porque al inicio había que hacer muchas cosas para hacerlo correr, aparte de la curva de aprendizaje, el paso inicial era raro y complicado.

Para iniciar no era solo incluir un script tag como jquery, literal copias y pegas una linea y ahí esta jquery listo para usar. Necesitaba utilizarlo con npm, más webpack, más un main.js. Claro luego descubrí que si habían mas opciones, que no solo era webpack, y que si habían script tag para angular, etc.

Esta semana me tope con un curso de Platzi sobre Inertia + Vue Js, aplicaciones single page. Era corto y me pareció interesante pues no conocía Inertia.

The Inertia stack provided by Jetstream uses Vue.js as its templating language. Building an Inertia application is a lot like building a typical Vue application; however, you will use Laravel’s router instead of Vue router. Inertia is a small library that allows you to render single-file Vue components from your Laravel backend by providing the name of the component and the data that should be hydrated into that component’s «props».

https://jetstream.laravel.com/1.x/stacks/inertia.html

En resumen Inertia provee una stack para usar vue js template junto a Laravel pero le quita toda la complejidad extra y excesiva (a mi gusto) de las redes en frontend. Permite usar las rutas de laravel ya establecidas y permite enviar parámetros desde php cómo props a las paginas de Vue js.

Esto te da todas las ventajas de Vue js, componentes, reactividad, velocidad, acceso a plugins desarrollados por la comunidad, documentación, etc, etc. Pero con el sistema ordenado y funcional de Php + Laravel. Reduce el tiempo de desarrollo de un api para comunicar frontend con backend. Permite ser una aplicación completamente funcional unificada. Permitiendo un approach fullstack completamente funcional.

Claro, para gustos hay colores, dime que piensas tú de inertia + vue js.

La espiritualidad y la religión

Crecimos en hogares religiosos, hablando de Guatemala, hogares cristianos, católicos o protestantes en su mayoría, y nuestros padres, abuelos y demás generaciones anteriores no tienen separados los criterios de espiritualidad y religión es lo mismo para ellos. No ven cómo podrían vivir sin la religión, cuando ahí han encontrado fortaleza para los tiempos difíciles, amor incondicional en un ser superior, orden y perdon.

Todo esto por vivir en una burbuja impuesta desde sabe cuando, quizas desde la conquista española a nuestras tierras y la imposición del catolisismo a la fuerza. Los miedos y tradiciones se heredan.

La globalización afecta no solo los trabajos, productos y bienes, también afecta el acceso a la información. Somos una generación que creció con el internet en sus manos, que ante la duda se googlea, se compara y se concluye en cuestión de minutos. Tenemos las opciones y diferencias a un teclado de distancia. Y creo que esta gran muestra de opciones no le ha favorecido nada a la religión tradicional. Solo muestra la incongruencia y desactualización de la misma. Crecimos con algo que nuestros padres y abuelos no: opciones e información.

Entendimos que la espiritualidad es más que seguir ciegamente los mandatos de dos milenios escritos y manipulados por el hombre a antojo y conveniencia. Es encontrar ese lugar que nos de paz, y nos ayude a sobrellevar la incertidumbre del futuro. No tiene que ser un lugar físico, basta que le de paz a nuestra mente. Ese lugar es para nuestros antepasados la religión, el lugar donde un ser superior todopoderoso, nos ama, protege y tiene todo planeado.

La espiritualidad es de mucha importancia, pero importa mas que la escojas y te sientas bien con ella. Si ya la encontraste, no importa donde, si en los grupos de tu iglesia local, al servir a tu dios, o con un grupo de hippies. Cuidala, cuida a tu mente y cuerpo, que al final es lo que único que tenemos.

No creer en Dios es para valientes y el futuro de la religion

La idea de tener un espiritualidad fuerte es algo que creo más cada día. Hay personas que encuentra esta espiritualidad en la religión, y en mi caso crecer en una familia que practica una religión cristiana como la católica.

Pero es un problema que te fuercen a practicar y creer enseñanzas dirigidas, escritas y promulgadas por hombres para hombres y que cuando preguntas el porqué de las cosas no te pueden explicar. La religión cristiana esta desactualizada y cada vez mas las nuevas generaciones tienen más problemas para identificarse con la problemática expuesta, más todavía con ese lenguaje arcaico que es la traducción de la interpretación del cuento oral escrito facil 100 años después de que paso.

La fe cristiana te enseña que tienes un propósito, que hay alguien que te ama y te diseño para algo, que si te portas bien tendrás una vida eterna con todo lo bueno, pero para eso tienes que sufrir ahorita.

Cuando eliges no creer en la religión, escoges renunciar a la idea del propósito y amor incondicional, también renuncias al castigo eterno. Cuando escoges entender que somos intransigentes, que no tenemos propósito real, que en realidad la vida no se trata de nosotros sino somos meros espectadores de lo que pasa. Que la vida se acaba en un parpadea y ahí queda, no hay mas. Entendemos que no tienes deuda con nada ni nadie.

La gente dice que cree en dios pero no en la religión, pero creen en un dios descrito por la biblia, un texto creado por hombres, escrito años después que pasaran los sucesos y basado en cuentos orales. Todos hemos jugado teléfono descompuesto y sabemos cómo termina, no?

La religión cristiana debería reinventarse, actualizar sus textos y tradiciones. Adaptarse a nuevas generaciones. La ley de la vida es eso, adaptarse o morir. Probablemente yo no alcanse a ver morir el cristianismo, pero estoy seguro que un dia lo hara sino deciden actualizarlo. La cuestión ahí se vuelve interesante y estoy seguro quebrantaria la fe de muchos, porque quien estaría a la altura de modificar tradiciones y escrituras antiguas? Eso partiria la fe de muchos y fragmentaria muchos mas a sus creyentes, así que no veo un futuro prometedor a la religión convencional.

De seguro surgirá algo nuevo, con otro nombre pero más de lo mismo. Porque es una industria trillonaria, quien dejaría ir ese dinero y el control sobre los pobres y desamparados.

Todos necesitamos un refuerzo de que no estamos solos y nos aman. Asi sea mintiendonos a nosotros mismos, incapaces de explicar las bases de lo que creemos, pero eso nos da paz mental y es suficiente. Yo no me considero superior por ni un poco al no creer en la religión o el dios cristiano, solo no encontré paz ni confort en esas creencias, solo encontre promesas de tormento e incongruencias contra la naturaleza humana. Si tu espiritualidad esta ahí, en el cristianismo, te felicito, se fuerte y construye más sobre ella. Lo que te haga bien, esta bien.