Skip to content

Instantly share code, notes, and snippets.

@flisboac
flisboac / crtp_template.cpp
Created August 16, 2019 05:20
Example of usage of CRTP for compile-time polymorphism. https://glot.io/snippets/ff2rlis81s
#include <iostream>
#include <string>
using namespace std;
// Utility class, mostly.
// The secret sauce is static_cast.
// as_subclass() is there only to help deduce when to const things.
template <typename TSubclass>
class crtp_template {
protected:

Uma breve explicação sobre repositórios locais e remotos

Repositórios Git são completamente independentes uns dos outros. Quando vc clona um repositório, vc está efetivamente copiando todo o repositório de origem para uma cópia local completamente independente da original. Ainda assim, é desejável ter um certo nível de sincronismo entre a "cópia de trabalho" e o repositório de origem (chamado de "upstream", ou "origin"). Por este motivo, existe um conceito chamado repositório remoto no git.

Seu repositório local pode ter quantos remotos forem necessários. Vc pode associar seus branches locais com branches de algum repositório remoto qualquer, e o Git te ajuda a manter os dois sincronizados através dos mecanismos de fetch (atualizar as referências/estado do repositório remoto no local, e.g. quais branches/refs existem no remoto, etc), push (envio de alterações/commits de um branch local para o repositório remoto) e pull (obtenção de alterações/commits remotos para um branch no repositório

import { Injectable } from '@angular/core';
import API, { graphqlOperation } from '@aws-amplify/api';
import * as Observable from 'zen-observable';
import { GraphQLResult } from '@aws-amplify/api/lib/types';
export type GqlOperationKind = 'query' | 'mutation' | 'subscription';
export type GqlKindFromOper<O extends GqlOperation<any>> = O extends GqlOperation<any> ? GqlOperation<any>['kind'] : never;
export type GqlResultFromOper<O extends GqlOperation<any>> = O extends GqlOperation<infer R> ? R : never;
@flisboac
flisboac / rpi-helper.sh
Created May 1, 2019 00:31
A simple and quick frankensteined/projectified Raspbian/RaspberryPi provisioner and tester helper sorta-thing.
#!/bin/sh
RPI_PIVERSION="${RPI_PIVERSION:-""}"
RPI_PIMODEL="${RPI_PIMODEL:-""}"
RPI_IMAGE_URLPREFIX="${RPI_IMAGE_URLPREFIX:-"https://downloads.raspberrypi.org/raspbian_"}"
RPI_IMAGE_VARIANT="${RPI_IMAGE_VARIANT:-"lite"}"
RPI_IMAGE_VERSION="latest"
RPI_GUEST_SHELL="${RPI_GUEST_SHELL:-"sh"}"
interface IValidQuestionValidation {
success: true;
value: string;
}
interface IInvalidQuestionValidation {
success: false;
message: string;
}
class MonadError extends Error {}
class EmptyMonadError extends MonadError {}
class Maybe<T> {
protected value?: T;
constructor(value?: T) {
this.value = value;
@flisboac
flisboac / construct-string-from-templ-string.ts
Created February 25, 2019 22:44
Generic method to (re-)construct a string from a tagged template string literal. Useful for shims (e.g. fool your editor into thinking there's a `gql` tag).
function s(strings: ReadonlyArray<string>, ...exprs: any[]): string {
return strings.reduce((accum, elem, idx) => `${accum}${elem}${idx < exprs.length ? exprs[idx] : ''}`, '');
}
// Example:
// s`a_${10}_b` -> "a_10_b"
@flisboac
flisboac / FormDataUtil.ts
Created October 31, 2018 22:13
Some ideas about type shaping from other types, applied to form data handling/type-safety. Please, use Yup instead, makes much more sense. :)
type FormFieldTuple<T> = { value: Required<T>, valid: boolean, message?: string };
type FormFieldData<T>
= T extends undefined ? FormFieldTuple<T> | undefined
: FormFieldTuple<T>
;
type FormFields<F, K extends keyof F = keyof F> = { [KK in K]:
F[KK] extends object ? FormFields<F[KK]> : FormFieldData<F[KK]>
@flisboac
flisboac / quickmonad.ts
Created October 17, 2018 22:48
A quick and dirty Monad/Maybe type in TypeScript
class MonadError extends Error {}
class EmptyMonadError extends MonadError {}
class Maybe<T> {
protected value?: T;
constructor(value?: T) {
this.value = value;
@flisboac
flisboac / ws.sh
Last active September 12, 2018 23:30
#!/bin/sh
readonly wsconfig_env_home="$(cd "$(dirname "$0")" && pwd -P)"
{ WS_DOCKERFILE_CONTENTS="$(cat)"; } <<"_DOCKERFILE_"
FROM ubuntu:bionic
ENV DEBIAN_FRONTEND="teletype"
# Update system and install essential developer tools