Skip to content

Instantly share code, notes, and snippets.

View scardine's full-sized avatar

Paulo Scardine scardine

View GitHub Profile
@scardine
scardine / cpf_cnpj.php
Last active October 6, 2015 14:38
CPF/CNPJ Validation
/*
O algoritmo para validação do CPF e CNPJ é
bem conhecido, portanto a preocupação de tornar
o código legível foi sacrificada em prol de tornar
o código compacto.
Ambas as funções recebem uma string e retornam
TRUE ou FALSE dependendo do dígito de verificação
bater ou não.
@scardine
scardine / log_transacao_srph.sql
Created August 3, 2012 18:45
example audit trigger for django model that inserts to another model
CREATE OR REPLACE FUNCTION log_transacao_srph() RETURNS TRIGGER AS $$
BEGIN
IF TG_OP = 'UPDATE' THEN
INSERT INTO sla_mudancastatus (datahora, numero_os, anterior, novo, abertura, orcamento, aprovacao, emissao, cancelamento, reabertura, operador)
VALUES(NOW(), NEW.numero_os, OLD.status_viagem, NEW.status_viagem, NEW.abertura, NEW.orcamento, NEW.aprovacao, NEW.emissao, NEW.cancelamento, NEW.reabertura, NEW.operador);
RETURN NEW;
END IF;
IF TG_OP = 'INSERT' THEN
INSERT INTO sla_mudancastatus (datahora, numero_os, anterior, novo, abertura, orcamento, aprovacao, emissao, cancelamento, reabertura, operador)
VALUES(NOW(), '', 'ABE', NEW.status_viagem, NEW.abertura, NEW.orcamento, NEW.aprovacao, NEW.emissao, NEW.cancelamento, NEW.reabertura, NEW.operador);
@scardine
scardine / bootstrap.py
Created August 15, 2012 23:17
python script bootstrap
import logging
import argparse
import datetime
import sys
FORMAT = '%(asctime)-15s [%(levelname)s] %(message)s'
LOGLEVEL = logging.INFO
parser = argparse.ArgumentParser(description='Program descriptiom.')
parser.add_argument('-sf', '--someflag', const=True, action='store_const', help='Option description')
@scardine
scardine / aescipher,py
Created September 21, 2012 06:26
AESCipher
class AESCipher:
def __init__( self, key ):
self.key = key
def encrypt( self, raw ):
raw = pad(raw)
iv = Random.new().read( AES.block_size )
cipher = AES.new( self.key, AES.MODE_CBC, iv )
return base64.b64encode( iv + cipher.encrypt( raw ) )
@scardine
scardine / urllib2_with_cookies.py
Created September 25, 2012 16:47
Exemplo de URLLib2 com cookies
import urllib2, cookielib
url = 'https://www2.itm.tur.br/th/default.aspx'
txheaders = {'User-agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}
cj = cookielib.LWPCookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
req = urllib2.Request(url, None, txheaders)
@scardine
scardine / PuTTY-Solarized.reg
Created October 1, 2012 16:22
Putty-Solarized
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\Default%20Settings]
"Colour0"="101,123,131"
"Colour1"="88,110,117"
"Colour2"="253,246,227"
"Colour3"="238,232,213"
"Colour4"="238,232,213"
"Colour5"="101,123,131"
"Colour6"="7,54,66"
@scardine
scardine / marker.php
Created November 1, 2012 21:17
Generate a marker with a given background and foreground colour.
<?php
/* .htaccess
RewriteRule markers?/([0-9a-fA-F]{6})/([0-9a-fA-F]{6})/([^/]+)/marker.png markers/index.php?bg=$1&fg=$2&icon=$3
*/
header('Content-type: image/png');
// read parameters: icon file, foreground and background colors
$bgc = sscanf(empty($_GET['bg']) ? 'FFFFFF' : $_GET['bg'], '%2x%2x%2x');
$fgc = sscanf(empty($_GET['fg']) ? '000000' : $_GET['fg'], '%2x%2x%2x');
@scardine
scardine / validate_cnpj.py
Created November 27, 2012 00:12
CNPJ (Brazilian tax id) format validation
#-------------------------------------------------------------------------------
# Name: validate_cnpj
# Purpose: check formal validity of a cnpj number (brazilian tax id)
# this only checks if the digits match, not if the number is
# valid at Receita Federal (Brazilian IRS)
#
# Author: Paulo Scardine <paulo@scardine.com.br>
#
# Created: 26/11/2012
# Copyright: (c) PauloS 2012
@scardine
scardine / gist:5269738
Created March 29, 2013 09:15
Exemplo de pycairo.
import cairo
pol = 72.0
mm = pol / 25.4
surface = cairo.PDFSurface('teste.pdf', 210*mm, 297*mm)
ctx = cairo.Context(surface)
ctx.set_source_rgb (0, 0, 0)
@scardine
scardine / quebra_linhas.py
Created April 17, 2013 20:29
Algorit. para quebrar linhas dada uma largura.
def quebra_linha(frase, largura):
linha = ""
linhas = []
for palavra in frase.split():
largura_atual = text_extents(linha + palavra)
if largura_atual > largura:
if not linha:
raise Exception('Frase não cabe nesta largura')
linhas.append(linha)
linha = palavra