É preciso saber programar para conferir título de capitalização

Em primeiro lugar eu queria dizer que títulos de capitalização são a maior safadeza já inventada. É a típica parceria Caracu, onde o Banco entra com a cara.

Tendo dito isto, talvez você não saiba como é feito o sorteio dos tais prêmios. Um infeliz amigo que foi obrigado pelo seu gerente a fazer um título de capitalização pediu um help ontem e coloco abaixo a forma como resolvi.

Vamos às regras do título de capitalização do Banco Maldito (você sabe qual é):

  1. Só valem os sorteios da Loteria Federal feitos no último sábado do mês.
  2. Se o mês for Março, Junho, Setembro ou Dezembro vão ser escolhidos dois números. Um tradicional e outro especial.
  3. O número tradicional é formado pela dezena simples e unidade simples do primeiro prêmio da loteria federal e pela unidade simples do 2o, 3o, 4o e 5o prêmios da loteria federal.
  4. No caso do sorteio especial o segundo número é formado pela centena simples do primeiro prêmio da loteria federal e pela dezena simples do 1o, 2o, 3o, 4o e 5o prêmio.

Para resolver você precisa de uma tabela de resultados da loteria federal que pode ser conseguida aqui: http://www1.caixa.gov.br/loterias/loterias/federal/download.asp

Com isto em mãos e o programa em Python que vai abaixo você resolve seu problema. (obviamente os mestres de Python que leem o blog terão soluções melhores).

Mas o melhor conselho é *nunca* fazer título de capitalização.

Título de Capitalização é safadeza

#!/usr/bin/env python
import urllib
import time
import calendar
from bs4 import BeautifulSoup
 
fhtml = open("D_LOTFED.HTM").read()
soup = BeautifulSoup(fhtml)
meus_numeros = [
394465,558487,
572418,640294,
439592,329068,
368570,765895,
023206,847826]
 
l = []
for i in soup.table.tbody.findAll("tr"):
        a = []
        for k in i.findAll("td"):
                a.append(k.text)
        l.append(a)
 
def modalidadeMensal (a1):
        return int(a1[2][3:]+a1[3][4]+a1[4][4]+a1[5][4]+a1[6][4])
 
def modalidadeEspecial(a1):
        return int(a1[2][2:3]+a1[3][3]+a1[4][3]+a1[5][3]+a1[6][3])
 
def isLastSaturday(st):
        tupl = time.strptime(st,"%d/%m/%Y")
        if tupl[6]==5:
                if ((tupl[2])+7) > calendar.monthrange(tupl[0],tupl[1])[1]:
                        return True
        return False
 
def isEspecial(st):
        if (isLastSaturday(st)):
                tupl = time.strptime(st,"%d/%m/%Y")
                if tupl[1] in [3,6,9,12]:
                        return True
        return False
 
for i in l[1:]:
        if isLastSaturday(i[1]):
                print i[0],i[1],modalidadeMensal(i)
                if modalidadeMensal(i) in meus_numeros: print i
        if isEspecial(i[1]):
            print "*",i[0],i[1],%modalidadeEspecial(i)
            if modalidadeEspecial(i) in meus_numeros: print i

Santander – Uma falha horrível de segurança

Havia no Brasil um Banco, não monstruoso mas muito competente. Chamava-se Banco Real. O Banco Real tinha um sistema de Web Banking muito legal, tinha suporte a acesso via celular, funcionava redondo, era seguro. Talvez fosse o melhor sistema de internet de um banco brasileiro.

Acontece que o Banco Real foi comprado pelo Santander e as coisas começaram a ficar esquisitas. Primeiro não pediam mais o token de segurança (tudo bem que avisaram, mas isto reduz muito a segurança).

Depois o sistema passou a dar uns bugs esquisitos no Firefox (você liga lá e eles dizem que não suportam Firefox mais).

Ai veio a consagração:

Sabe aquele teclado na tela, chato, que você tem que ficar clicando nas letras? Bom, ele serve para proteger você de invasões, pois uma pessoa pode instalar um programa em seu computador que grava o que você digita no teclado e aí pegar sua senha. Para isso os bancos, empresas de cartão de crédito e outros inventaram o teclado na tela.

Pois este teclado que está presente no site novo do Real (depois de clonarem o site do Santander para cima do Real) aceita que você digite no teclado normal!!!

Tente fazer isso em qualquer banco decente (Itaú, Bradesco, HSBC) que o sistema avisará que você deve, para sua segurança, usar o teclado virtual.

Ligue para seu gerente. Reclame! Diga que você quer o sistema do Real de volta e que pode mandar todas as porcarias espanholas para a Espanha.

Um comentário que vale um post

Um leitor, o Eduardo que tem o blog
evolubit.com.br fez o comentário que vai abaixo no post “grandes empresas, pequenos programadores” – muito bom argumento que comento ainda hoje.


Cara, assim como o TIRANOREX te informou que isso é normal eu te digo que tanto é normal como o exemplo batido das faculdades de informática (sou formado em Sistemas de Informação) é péssimo para explicar o sentido da transação.

Eu já trabalhei em uma empresa que cria software para essas máquinas e o que os “gersons” conseguem fazer é inimaginável. Olha esse caso que eu vou contar e tu vais entender por que mesmo com um erro na entrega das notas o valor deve ser debitado.

A máquina possui as seguinte peças (que são importantes para esse caso):
– Os cartuchos (onde ficam separadas uma pilha de notas, contadas. E cada cartucho possui notas de somente um valor). Na hora que a máquina é carregada o software (que possui um backoffice) solicita que tal quantidade de quais notas seja inserida e o número deve bater com o cadastro no banco de dados central do banco)
– O selecionador de notas (que junta as notas que vêm de cada cartucho e as conta. Alguns equipamentos possuem identificação óptica através daquele conjunto de símbolos que há nas notas – no canto esquerdo da face da cédula)
– O dispenser, um equipamento externo que disponibiliza as notas.

Bom, diminuindo a explicação:
Se o erro acontece no cartucho (notas grudadas por exemplo), ou no selecionador (a contagem não condiz com o valor) essas notas são descartadas (há um local dentro da máquina que recebe esses valores e um ticket é registrado, a máquina pode tentar novamente ou até mesmo bloquear a opção de saques. Agora, se o erro é no dispenser, como por exemplo o cliente esquecer de pegar o dinheiro (é, acontece) a máquina recolhe as notas e conclui a transação (bancária).

Parece burro né? Pois é, mas já teve gente que faz o seguinte: Como a máquina identifica apenas que “há” ou não notas no dispenser, o cara manda sacar R$200, aí a máquina disponibiliza 2 notas de R$50, 3 notas de R$20 e 4 notas de R$10, o cara cuidadosamente retira as notas centrais, a máquina recolhe o dinheiro por que ele não foi pego e se não fosse debitado o cara repetia essa operação até terminar o dinheiro da máquina.

Hoje se tu tentar alegar que pediu R$200 e não veio os caras vão identificar o tíquete, conferir nas câmeras e te devolver só os R$60, isso se não acionarem as autoridades.

É meu amigo, duvido que tu tinhas pensado nisso.

Grandes empresas pequenos programadores

Da mesma forma que não existe uma mulher ligeiramente grávida, ou um homem meio Padre, em computação há operações que ou ocorrem totalmente ou não ocorrem. São conhecidas como transações.

O exemplo clássico de transação é uma operação bancária onde A saca dinheiro no caixa eletrônico. As seguintes operações devem ocorrer de forma atômica ou seja indivisíveis:

– Conferir a senha e o cartão

– Aprovar o valor

– Remover o valor da conta do cliente

– Entregar o dinheiro para o cliente.

Se uma destas operações falhar todas elas tem que ser desfeitas como se nunca tivessem ocorrido. Qualquer aluno de computação ou que tenha o mínimo conhecimento de Banco de Dados sabe disto.

Bem, pelo menos deveria saber….  O Banco Santander é um dos maiores bancos do mundo, no entanto já não é a primeira vez que vejo um bug horrível no sistema deles.

Hoje fui sacar dinheiro no caixa eletrônico de uma agência do Santander: senha, código de segurança, pedi 100 paus, confirma, abençoa, autoriza de novo, tem certeza mesmo, e pimba autorizado.

Ouvi o ruído caracteristico da máquina contando dinheiro e para minha surpresa aparece uma tela do Windows XP avisando que o sistema estava sendo reiniciado.

Esperei um pouco para ver se voltava, como demorasse fui ao caixa ao lado para sacar o dinheiro. Saquei o dinheiro e ia indo embora quando tive um estalo: será que eles debitaram da minha conta os primeiros 100 paus? Minha cabeça de engenheiro de computação disse:

– Claro que não, transações são atômicas.

No entanto como sou doutor em Medicina também, meu alter ego disse: vai lá e confere. Tirei um extrato e dito e feito, dois saques de cem paus e recebi apenas um deles.

Agora tenho que ir discutir com o gerente para recuperar meu suado dinherinho.

Para quem duvida, tirei algumas fotos.

Transação Maluca

Santander #Fail