bogosort e técnicas realmente avançadas de programação
DESCRIPTION
Palestra apresentada no FISL 12.TRANSCRIPT
![Page 1: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/1.jpg)
BS&TRAP#bstrap
Ikke PereiraRodolpho Eck
![Page 2: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/2.jpg)
![Page 3: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/3.jpg)
NinjaSort
![Page 4: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/4.jpg)
MonkeySort
![Page 5: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/5.jpg)
EstouComSort
![Page 6: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/6.jpg)
Fluxograma
![Page 7: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/7.jpg)
![Page 8: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/8.jpg)
Comentários
![Page 9: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/9.jpg)
![Page 10: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/10.jpg)
Seja descritivo#!/usr/bin/env python# -*- coding: utf-8 -*-## Autor: Rodolpho Eckhardt <[email protected]># Data: 29/06/2011"""BogoSorter Meta Super Class Super meta classe da qual todas as demais nesse projeto herdam. Não ouse inserir uma classe nesse projeto que não herde dessa aqui. Infratores serão detectados, mortos e listados aqui para humilhação pública: Michael Jackson Érico Andrei Guido Van Rossum
![Page 11: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/11.jpg)
Nome de Variáveis?
![Page 12: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/12.jpg)
Seja descritivo também!
strNome
intIdade
blnLogado
dctValores
![Page 13: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/13.jpg)
Mas não f*&&*!!
strNumeroDoPedido
varValor
blnPago = ‘S’
objConjuntoDosValoresCujosNomesNaoCabe
![Page 14: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/14.jpg)
Bound methods
![Page 15: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/15.jpg)
O que acontece?
• Bound methods são callables locais:
>>> s = []>>> s_append = s.append>>> s_append(1)>>> s_append(2)>>> s_append(3)>>> s[1, 2, 3]
![Page 16: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/16.jpg)
Por que??
• Substitua lookups globais com lookups locais!!
![Page 17: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/17.jpg)
Exemplo(não otimizado)
def one_third(x): return x / 3.0
def make_table(pairs): result = [] for value in pairs: x = one_third(value) result.append( format(value, '9.5f’)) return '\n'.join(result)
![Page 18: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/18.jpg)
Exemplo(otimizado)
def make_table(pairs): result = [] # bound method result_append = result.append # localized _format = format for value in pairs: # in-lined x = value / 3.0 result_append(_format(value, '9.5f')) return '\n'.join(result)
![Page 19: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/19.jpg)
Inferno de uma letra
![Page 20: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/20.jpg)
#!/usr/bin/env pythonimport os,sysC=os.chdirS=os.systemM=os.mkdirJ=os.path.joinA=os.path.abspathD=os.path.dirnameE=os.path.existsW=sys.stdout.writeV=sys.argvX=sys.exitERR=lambda m:W(m+"\n")PRNT=lambda m:W(m+"\n") assert len(V)==2,"you must provide a sandbox name"SB=V[1]H=A(D(__file__))SBD=J(D(H),SB)C(SBD)PST=J(SBD,'bin/paster')VAR=J(SBD,'var')ETC=J(SBD,'etc')S("mkdir -p "+VAR)PRNT("restarting "+SB)CMD=";".join(['source %s'%J(SBD,'bin/activate'),PST+" serve --daemon --pid- file=%s/sandbox.pid --log-file=%s/sandbox.log %s/sandbox.ini start"% (VAR,VAR,ETC)]) PRNT(CMD)S(CMD)PRNT("All done!")X(0)
![Page 21: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/21.jpg)
Vetorização
![Page 22: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/22.jpg)
Por que??
Substitua um loop “for” com uma chamada de função C!
![Page 23: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/23.jpg)
Exemplos!!
[[ord ord(c) for c in long_string]]
list(map(ord, long_string))
![Page 24: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/24.jpg)
Exemplos!!
[i**2 for i in range(100)]
list(map(pow, count(0), repeat(2, 100))
![Page 25: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/25.jpg)
Lambda infection!
![Page 26: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/26.jpg)
Mmm...lstRollOut = lstRollOut + filter(lambda x: x[-1] == '0', filter(lambda x: x != '0|0', lstMbrSrcCombo))
if not filter(lambda lst, sm=sm: sm in lst, map(lambda x, dicA=dicA: dicA.get(x, []), lstAttribute)):
![Page 27: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/27.jpg)
FFFFUUUUU......_make_keys = lambda cc, pm: tuple(map (lambda m, c=cc: ("%s.%s" % (c, m), m), pm))
return [map(lambda l: l[0], lstResults),map(lambda l: l[1], lstResults)]
sum = lambda lst: lst and reduce(lambda x, y: x + y, lst) or 0
assert reduce(lambda x,y: x or y, [z.id == event.id for z in events])
![Page 28: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/28.jpg)
kwargs mutáveis
![Page 29: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/29.jpg)
Why brother?
def nao_faz_o_que_vc_acha(item, lista=[]): ... lista.append(item) ... return lista
![Page 30: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/30.jpg)
Why brother?
>>> print nao_faz_o_que_vc_acha(1)[1]>>> print nao_faz_o_que_vc_acha(2)[1, 2]>>> print nao_faz_o_que_vc_acha(3)[1, 2, 3]>>> print nao_faz_o_que_vc_acha(4)[1, 2, 3, 4]>>> print nao_faz_o_que_vc_acha('wtf')[1, 2, 3, 4, 'wtf']
![Page 31: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/31.jpg)
Mas tio....
def aprendi_tio(item, lista=None): l = lista or [] ... l.append(item) ... return l
![Page 32: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/32.jpg)
LRU Cache
![Page 33: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/33.jpg)
Fibonacci
•fibonacci(n):
•n <= 1: n
•n > 1: fibonacci(n-1) + fibonacci(n-2)
![Page 34: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/34.jpg)
n00b
def fibonacci(n): if n <= 1: return n return (fibonacci(n-1) + fibonacci(n-2))
![Page 35: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/35.jpg)
LRU Cacheimport functools
@functools.lru_cache()def fibonacci(n): if n <= 1: return n return (fibonacci(n-1) + fibonacci(n-2))
![Page 36: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/36.jpg)
Código bonito de se ver
![Page 37: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/37.jpg)
from regrets import unfortunate_choices
class AnotherBadHabit(object): short_name = 'foo' much_longer_name = 'bar'
def __init__(self, x, y, z): self.x = x self.y = y self.dictionary = { ‘foo‘ : ‘bar’, ‘bar‘ : ‘baz’, ‘baz‘ : ‘quux’}
![Page 38: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/38.jpg)
from regrets import unfortunate_choices
class AnotherBadHabit(object): short_name = 'foo' much_longer_name = 'bar'
def __init__(self, x, y, z): self.x = x self.y = y self.z_is_a_silly_name = z self.came_later = 42 self.leftover = ‘timewaster’ self.dictionary = { ‘foo‘ : ‘bar’, ‘bar‘ : ‘baz’, ‘baz‘ : ‘quux’}
![Page 39: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/39.jpg)
from regrets import unfo...
class AnotherBadHabit(object): short_name = 'foo' much_longer_name = 'bar'
def __init__(self, x, y, z): self.x = x self.y = y self.z_is_a_silly_name = z self.came_later = 42 self.leftover = ‘timewaster’ self.dictionary = { ‘foo‘ : ‘bar’, ‘bar‘ : ‘baz’, ‘baz‘ : ‘quux’}
![Page 40: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/40.jpg)
![Page 41: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/41.jpg)
Metodologia
![Page 42: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/42.jpg)
eXtreme Go Horse (extreme)http://gohorseprocess.wordpress.com/
![Page 43: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/43.jpg)
Pensou, não é XGHx.
![Page 44: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/44.jpg)
Não existe refactoring.Apenas rework.
![Page 45: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/45.jpg)
Se tiver funcionando, não rela a mão.
![Page 46: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/46.jpg)
Testes são pros fracos.
![Page 47: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/47.jpg)
Fear Driven Development
![Page 48: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/48.jpg)
Bogosort!
![Page 49: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/49.jpg)
Bogosort
• Está em ordem?
• Não: embaralhe a lista
• Sim: PROFIT!
![Page 50: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/50.jpg)
Desempenho
Matador!
![Page 51: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/51.jpg)
Análise (número de Shuffles)
0
1000
2000
3000
4000
3 elementos 4 elementos 5 elementos 6 elementos
MínimoMédiaMáximo
![Page 52: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/52.jpg)
+ Análise (número de Shuffles)
0
10000
20000
30000
40000
3 4 5 6 7
MínimoMédiaMáximo
![Page 53: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/53.jpg)
+ Análise (número de Shuffles)
0
375000
750000
1125000
1500000
3 4 5 6 7 8 9
MínimoMédiaMáximo
![Page 54: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/54.jpg)
10 elementos!
0
1750000
3500000
5250000
7000000
3 4 5 6 7 8 9 10
MínimoMédiaMáximo
![Page 55: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/55.jpg)
Extrapolando um pouco
![Page 56: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/56.jpg)
![Page 57: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/57.jpg)
FFFFFFFFFUUUUUUUUUUUUUUUUU
![Page 58: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/58.jpg)
![Page 59: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/59.jpg)
![Page 60: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/60.jpg)
Perguntas?
• Ikke Pereira ([email protected])@ikkebr
• Rodolpho Eckhardt ([email protected])@rodolphoeck
![Page 61: Bogosort e Técnicas Realmente Avançadas de Programação](https://reader036.vdocuments.pub/reader036/viewer/2022062319/554f7a7fb4c905d25b8b474d/html5/thumbnails/61.jpg)