Skip to content

Instantly share code, notes, and snippets.

View fernandosavio's full-sized avatar

Fernando Sávio fernandosavio

View GitHub Profile
@fernandosavio
fernandosavio / README.markdown
Last active August 29, 2018 14:08
Regex úteis. Vou incorporando mais regex a medida que for necessário.

Número com separador decimal e de milhar opcionais

REGEX: ^\d{1,3}(?:(?:\.\d{3})*|(?:\d{3})*)(?:,\d{1,4})?$

Explicação:

  • \d{1,3}: os números mais a esquerda podem ser de 0 a 999
  • (?:(?:\.\d{3})*|(?:\d{3})*): garante que o separador de milhar seja sempre usado ou nunca. Quebrando em duas partes:
  • (?:\.\d{3})*: ou tem um ponto seguido de 3 números repetidos de 0 a N vezes
<?php
class Gtin
{
/**
* Testa se a string é um GTIN válido nos seguintes termos:
* - É uma string
* - Contém apenas dígitos numéricos
* - Possui 8, 12, 13 ou 14 dígitos
*
@fernandosavio
fernandosavio / CpfCnpjUtils.php
Created May 30, 2018 15:47
Validadores de CPF e CNPJ mais legíveis e PHP 7.
<?php
class Utils
{
/**
* Tira qualquer caracter que não seja número da string
* @param string $str
* @return string
*/
public static function onlyNumbers(string $str) : string
@fernandosavio
fernandosavio / open_with_sublime_text.bat
Last active May 24, 2018 19:30
Add "Open with Sublime Text 3" to files and folders context menu on Windows. (Tested on Windows 8.1)
@echo off
SET st3Path=%PROGRAMFILES%\Sublime Text 3\sublime_text.exe
rem add it for all file types
@reg add "HKEY_CLASSES_ROOT\*\shell\Sublime Text" /t REG_SZ /v "" /d "Open with Sublime Text 3" /f
@reg add "HKEY_CLASSES_ROOT\*\shell\Sublime Text" /t REG_EXPAND_SZ /v "Icon" /d "\"%st3Path%\"" /f
@reg add "HKEY_CLASSES_ROOT\*\shell\Sublime Text\command" /t REG_SZ /v "" /d "\"%st3Path%\" \"%%1\"" /f
rem add it for folders
@reg add "HKEY_CLASSES_ROOT\Folder\shell\Sublime Text" /t REG_SZ /v "" /d "Open with Sublime Text 3" /f
@fernandosavio
fernandosavio / striptags.js
Created August 4, 2017 22:04
Simple regex-based strip_tags in Javascript
/*
regex example(strips 'i' and 'em' tags): /(<(?!\/?em|\/?i).*?>)/ig
*/
/**
* @param string html
* @param string allowed_tags space-separated allowed tags
*/
function strip_tags(html, allowed_tags){
allowed_tags = allowed_tags.trim()
@fernandosavio
fernandosavio / _ingredientes-ativos-agrofit-scraping.md
Last active July 9, 2021 18:29
Scraping do site do governo, Agrofit, com programação síncrona e assíncrona utilizando corrotinas e asyncio.queue no python 3.6.

python 3.6

Raspagem de dados Agrofit

Foram feitos 2 scripts para a raspagem de dados. Um síncrono e outro assíncrono.

  • Síncrono: foram utilizadas as bibliotecas [requests] e [BeautifulSoup];
  • Assíncrono: foram utilizadas as bibliotecas [aiohttp], [BeautifulSoup] e [asyncio] ([corrotinas] e [filas]).

Dados raspados

import socket, subprocess
def connect():
ip = "192.168.0.100"
port = 6000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
while True:
command = s.recv(1024)
@fernandosavio
fernandosavio / mozilla-mdn.md
Last active June 28, 2017 19:08
Comandos mais usados para editar e traduzir as páginas da MDN. (https://developer.mozilla.org/)

Linkando para Reference

jsxref

{{ jsxref("Math.random()") }} => Math.random()

{{ jsxref("Math.random()", "Random link") }} => Random link

cssxref

{{ cssxref("background-color") }} => background-color

@fernandosavio
fernandosavio / sublime3.json
Created June 20, 2017 17:22
General settings
{
"always_show_minimap_viewport": true,
"auto_complete_delay": 400,
"auto_find_in_selection": true,
"bold_folder_labels": true,
"color_scheme": "Packages/Darkula Color Scheme/darkula.tmTheme",
"copy_with_empty_selection": false,
"drag_text": false,
"draw_minimap_border": true,
"draw_white_space": "selection",
@fernandosavio
fernandosavio / triangulo.py
Last active June 7, 2017 18:06
Escreva um programa que solicite ao usuário o valor de N, um número natural. N será a altura do triângulo retângulo a ser desenhado na tela pelo seu programa, usando apenas o caractere * (asterisco).
# recebe um input do usuário
n = int(input("Altura do triângulo: "))
# se não for um número natural não faz nada
if n <= 0:
print("Número deve ser positivo")
else:
# Documentação da função range: https://docs.python.org/3/library/stdtypes.html#typesseq-range
# cria um range que retorna números ímpares a cada iteração,
# ou seja, 1, 3, 5, 7, 9, 11, ...