Skip to content

Instantly share code, notes, and snippets.

Flávio Lisbôa flisboac

Block or report user

Report or block flisboac

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
View declaracao-definicao.md

O que segue é um breve resumo, aplicável a ambos C e C++, na medida do possível.

Em C e C++, há o conceito de translation unit (TU) (C, C++). Cada arquivo que vc compila para um arquivo-objeto (com extensao .o, ou no Windows com extensao .obj), é oriundo de uma TU.

Primeiro, sua TU é preprocessada -- é neste estágio que o seu arquivo externo é incluído, via diretiva de processador #include (C, C++). Uma vez preprocessada, sua TU é compilada para um arquivo-objeto. Ao contrário do Python, que considera "arquivos externos" como módulos, a inclusão de arquivos no C++ é feita no pré-processamento, e por isso é uma inclusão meramente textual.

Depois o linker une todos os arquivos-objeto em um único binário, seja executável ou não.

No C/C++, também é p

@flisboac
flisboac / crtp_template.cpp
Created Aug 16, 2019
Example of usage of CRTP for compile-time polymorphism. https://glot.io/snippets/ff2rlis81s
View crtp_template.cpp
#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:
View sobre-git-e-github.md

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

View ts-type-guards-cast.ts
/**
* Models a type guard function.
*/
export interface Guard<T> {
readonly name: string;
(value: any): value is T;
}
/**
View amplify-helper.ts
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
A simple and quick frankensteined/projectified Raspbian/RaspberryPi provisioner and tester helper sorta-thing.
View rpi-helper.sh
#!/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"}"
View console-info-gather-example.ts
interface IValidQuestionValidation {
success: true;
value: string;
}
interface IInvalidQuestionValidation {
success: false;
message: string;
}
View maybe.ts
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 Feb 25, 2019
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).
View construct-string-from-templ-string.ts
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 Oct 31, 2018
Some ideas about type shaping from other types, applied to form data handling/type-safety. Please, use Yup instead, makes much more sense. :)
View FormDataUtil.ts
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]>
You can’t perform that action at this time.