Skip to content

Instantly share code, notes, and snippets.

View gimenete's full-sized avatar

Alberto Gimeno gimenete

View GitHub Profile
// src/app/client.ts
import { z } from "zod";
import { api } from "./api/routes";
import {
UseMutationOptions,
UseMutationResult,
UseQueryOptions,
UseQueryResult,
useQuery,
} from "@tanstack/react-query";
@gimenete
gimenete / index.tsx
Created September 18, 2023 07:02
Example of code generator that uses JSX
import prettier from "prettier";
namespace CodeGen {
export function createElement(
tagFunction: (
attributes: Record<string, unknown>,
children: string[],
) => string,
attributes: Record<string, unknown>,
...children: string[]
@gimenete
gimenete / safeParse.ts
Last active March 15, 2024 16:05
A wrapper around the fetch function that validates the response body against a Zod schema
import z from "zod";
export async function safeFetch<T>(
schema: z.Schema<T>,
input: RequestInfo,
init?: RequestInit
): Promise<T> {
const response = await fetch(input, init);
if (!response.ok) {
@gimenete
gimenete / webcrypto-interop.js
Last active July 11, 2022 09:51
Interoperability between webcrypto and crypto modules in Node.js
const crypto = require('node:crypto')
const {webcrypto} = crypto
const {subtle} = webcrypto
async function generateKeys() {
const {
publicKey,
privateKey
} = await subtle.generateKey({
name: 'RSA-OAEP',
@gimenete
gimenete / readme.md
Last active March 9, 2024 16:36
Notas para orientación profesional como programador

Tras este tweet que publiqué

He sido freelance, emprendedor y trabajo desde hace años para empresas USA de diversos tamaños en remoto como programador fullstack. Ahora en GitHub. Si puedo ayudar a alguien en orientar su carrera, mis DMs están abiertos. Ask me anything.

he recibido muchos mensajes y escribo aquí algunos de los consejos que he dado en resumen. Nota: algunas cosas son concretas de trabajar en España. Si vas a trabajar desde Sudamérica sólo una nota: tienes la ventaja de la zona horaria para trabajar con EEUU.

Inglés

Tener un buen nivel de inglés es fundamental para poder trabajar con clientes extranjeros. El conocimiento del idioma tiene que mantenerse en el tiempo. Es como mantenerse en forma física; si lo dejas, lo pierdes. Personalmente aunque trabajo 100% en inglés desde hace bastantes años, intento crearme un entorno diario con el idioma para no perderlo:

@gimenete
gimenete / index.d.ts
Last active August 26, 2023 21:58
Typescript definitions for @octokit/rest.js with response types
/**
* This declaration file requires TypeScript 2.1 or above.
*/
import * as http from "http";
declare namespace Github {
type json = any;
type date = string;
@gimenete
gimenete / inferred.ts
Created February 12, 2018 17:37
Calculate inferred types from a typescript file
import * as ts from 'typescript'
import * as util from 'util'
const program = ts.createProgram(['src/foo.ts'], {
target: ts.ScriptTarget.ES5,
module: ts.ModuleKind.CommonJS
})
const typeChecker = program.getTypeChecker()
const findFunctions = (parent: ts.Node) => {
@gimenete
gimenete / 2018.md
Last active December 31, 2017 15:19

2017

Cuando pienso en el pasado suelo utilizar años de referencia. Por ejemplo en 2002 empecé la universidad, en 2008 volví de vivir un tiempo en Madrid y en 2014 viví en EEUU. Son años que mentalmente me sirven para situar cosas en el tiempo. Recuerdo fácilmente qué ocurrió antes y después de estos años. Bien pues 2017 ya sé de antemano que va a ser uno de esos años.

En 2017 he sido padre de un niño precioso, super activo y adorable, Bruno. Tras un par de sustos durante el embarazo todo ha salido estupendamente y he aprendido muchísimo a nivel personal. Está siendo increíble. Supongo que no cuento nada nuevo a los que ya son padres.

A nivel profesional en enero cambié súbitamente de proyecto. Después de 2 años haciendo la UI de una aplicación de gestión de infraestructura de fibra óptica para Verizon y Frontier, pasé a liderar un equipo para desarrollar una aplicación desktop (electron) para la empresa con más datos deportivos probablemente del mundo: STATS.com. Ha sid

#!/usr/bin/env node
const express = require('express')
const graphqlHTTP = require('express-graphql')
const { buildSchema } = require('graphql')
const gql = `
type Message {
id: Int!
text: String!