Existe um projeto Python que tem uma história sensacional e quase ninguém fala sobre ele.

🧵
O webpy.org é um dos primeiros micro frameworks que surgiu para Python

Foi criado por ninguém menos que o Aaron Swartz @aaronsw para a primeira versão do @Reddit que rodou nesse framework durante algum tempo.

A filosofia por trás do webpy foi a seguinte...
O Django permite que você escreva Django web apps. O TurboGears permite escrever TurboGears web apps. Webpy permite escrever Python Web Apps”

A idéia dele era usar Python da forma mais pura possivel para escrever apps de acordo com o padrão WSGI sem acoplamento excessivo

#noqa
Na época em que surgiu o SSR era a abordagem comum e quase não existia API REST e PHP era a linguagem lider de mercado, portanto no webpy o ponto mais forte era justamente a linguagem de template.

Que tentava imitar um pouco do que se via em PHP
Talvez esse tenha sido o motivo do webpy ter sido duramente criticado, o foco era grande em sua linguagem de template, gerando este tipo de discussão:
E olha só quem deu sua opinião Armin, o criador do Flask, 4 anos antes de criar o Flask e 2 anos antes de criar o Jinja
O webpy foi inspirado no Sinatra/Ruby e continua em desenvolvimento hoje em dia mantendo as mesmas premissas github.com/webpy/webpy porém não enquadra o ranking dos principais frameworks Python
Mas é notavel a influência dele em frameworks que surgiram depois como o Bottle (que foi derivado direto do webpy e inclusive tendo core devs do Reddit como um dos primeiros contribuidores)
Ironicamente o Flask (chamado de Denied), surgiu como uma piada para satirizar o Bottle e Sinatra, mas a piada fez sucesso e acabou virando um dos principais frameworks.

news.ycombinator.com/item?id=1237412
Eu gravei um video a respeito disso
Além disso podemos notar que o Flask, framework que ajudou a popularizar o estilo que hoje é adotado por @FastAPI entre outros, foi ispirado pelas ideias do webpy entre outros como o cherrypy.dev que inclusive completou 20 anos de existência e ainda é mantido.
“[Webpy inspired the] web framework we use at FriendFeed [and] the webapp framework that ships with App Engine…”* — Brett Taylor, co-founder of FriendFeed and original tech lead on Google App Engine

O do FriendFeed (comprado pelo Facebook) era o tornadoweb.org
A história dos frameworks web em Python é cheia de curiosidades:
- O primeiro micro framework que surgiu se chamava "bobo"
- O Django surgiu de um CMS (e vontade dos devs de deixar o PHP)
- O Pyramid é a fusão entre Pylons e Turbogears/Repoze
- O Zope ...
- O Zope já foi o framework/plataforma mais importante do ecossitema web Python e há 20 anos já tinha conceitos de typing e interfaces
- O Zope tinha um banco de dados próprio que botava medo pelo fato de poucas pessoas saberem manter aquilo.
- O web2py (não confundir com webpy) passou de hype, para vencedor de premios, framework mais amado, para framework mais odiado devido a inumeras criticas de devs Python "famosos" e por fim acabou no quase esquecimento
Essa evolução de 20 e poucos anos de Python para web nos trouxe ao cenário atual:

- Django é o lider de mercado
- FastAPI é o mais moderno e promissor

Será que dá para prever o que vem por ai para os próximos 10 anos?
O código fonte do Denied é uma aula github.com/denied/denied/…

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Bruno Rocha ❁

Bruno Rocha ❁ Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @rochacbruno

Aug 24
Did you know you can create an InfiniteLoop using __getitem__ and a for statement in #python?

I just discovered this by accident 🤯

Can´t find it documented have you seem this before?
I am curious on how the for loop decides that this object is an Iterable without having explicit __iter__ or any other impl from the protocol.

This is a good way to crash your computer

print(list(InfiniteLoop()))
If I make a function accepting an iterable and passing this InfiniteLoop() object, mypy claims it is not an iterable.

Argument 1 to "function" has incompatible type "InfiniteLoop"; expected "Iterable[Any]"
Read 5 tweets
Sep 3, 2021
Percebi que grande parte dos projetos que usa versões x.y.z não segue de verdade o versionamento semântico.

Dá trabalho sim, mas é possível fazer múltiplos releases e em ordem cronológicas completamente distintas, e o mais importante: manter a compatibilidade reversa.

🧵
Versão inicial 0.1.0

Na branch main:

- Nova feature super legal
- Outra feature nova que ainda precisa de mais testes
- Bugfix que não influencia na experiência de uso
- Bugfix que altera parametros de função
- Security patch
- Disable a magic function

+ backlog enorme.

🧵
Não precisa ficar esperando o backlog estar todo resolvido ou a branch main estar toda estável para fazer um release 0.2.0.

Para isso existe o z-stream e o cherry picking

🧵
Read 17 tweets
Jul 20, 2021
Testes funcionais são fundamentais!

Mas programar testes é uma grande perda de tempo!

Mesmo as linguagens mais simples como Python ainda tem um nível de complexidade que não condiz com o objetivo de um teste.

Testes deveriam ser declarados e não programados.
A area de automação de testes é onde low-code e no-code deveria reinar e eu mesmo tendo trabalhado durante quase 5 anos como Engenheiro de Qualidade de Software não entendo o motivo de se investir tanto em contratar Devs e Ops para escrever testes.
O profissional de Qualidade deveria focar em entender as funcionalidades do produto, comunicar-se com os envolvidos, sugerir melhorias e não em aprender linguagens, ferramentas e ambientes para rodar os testes.
Read 9 tweets
Jul 20, 2021
Aqui em Portugal não se diz picolé, mas sim Gelado no Pau ou Gelado de Pauzinho.

Chega na padaria e diz: "Gostava de um gelado no pau se faz favor"

magg.sapo.pt/vida-saudavel/…
Já sentiu a incrível sensação de te sentires cheio de pica?

by @CocaCola_PT

cocacola.pt/aquarius/pt/se…
Aqui temos anualmente a feira dos grelos

cm-mira.pt/node/156
Read 5 tweets
Jul 19, 2021
Você usa `print` do #python para depurar durante o desenvolvimento?

Mesmo com vários tipos de debuggers disponíveis e o novo `breakpoint` do Python 3.7, na maioria das vezes um simples `print` é mais fácil para inspecionar uma variavél no Python.

Dá para deixar isso melhor 🧵
Primeiro um exemplo do uso do print nativo do python para debugar objetos complexos.

Como dá para perceber o output não é tão amigável de inspecionar. print do terminal executando um código python e com o outpu
Dá para deixar isso melhor usando `debug` no lugar de `print`

Porém Python não tem essa função debug nativa, você vai precisar **hackear** seu Python local para adicionar a função debug. O mesmo código anterior, porém print foi substituido por d
Read 9 tweets
Feb 10, 2021
Como depurar programas #Python 🐍 através da linha de comando. 🐛 #debugging #debug

#DicaDePythonCodeShow

🧵
A maneira mais fácil de interagir com um script Python é usando o argumento `-i` (interactive) no python ou no ipython.

$ ipython -i script.py

O script é executado e então o terminal interativo abre permitindo a inspeção do estado das variáveis.
Para uma depuração mais estruturada o melhor é o pdb que é o debugger built-in do Python docs.python.org/3/library/pdb.…

Executar e parar na linha 5
$ python -m pdb -c "until 5" script.py

O script é executado e então ao chegar na linha 5 o interpretador pausa.
Read 20 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(