Inércia Sensorial

28 de April de 2007

O paradigma de programação afeta a performance de aplicativos Web?

Filed under: Programação — inerte @ 17:19

Rafael de Camillis, desenvolvedor do Garimpar, envou uma interessante pergunta à lista brasileira no Google Groups do Django:

Pessoal queria saber o que vcs acham, o que é melhor pra programação web: Procedural ou Orientação à Objeto.

Um site todo procedural tem a mesma performance de um site feito com Orientação a Objeto?

Minha resposta à pergunta dele estava ficando kilométrica e decidi colocar aqui no blog. Segue a dita cuja!

A performance é independente do paradigma usado para fazer o programa. O que acontece é que certas técnicas em certas linguagens de programação são mais eficientes dependendo dos requerimentos.

Por exemplo, a programação funcional é teoricamente ótima para processadores com mais de um núcleo, entretanto você provavelmente só verá ganhos enormes quando você estiver utilizando uma linguagem que faça esse lado funcional de maneira “pura“. É possível programar de maneira funcional em Lisp e Python, mas devido à características da linguagem, você não verá os mesmos ganhos que em Haskell ou Erlang.

C++, por exemplo, provavelmente vai ser uma das linguagens onde você vai conseguir maiores velocidades, independentemente do paradigma utilizado e contra quais linguagens. Procedural ou OOP, C++ bate Java em 99.99% das vezes, se feita direito.

Ah, mas então a pergunta é, dentro da mesma linguagem (vamos assumir Python), qual é mais rápido, Procedural ou OOP? Novamente, tudo depende 🙂 Em Python, tudo é um objeto, então qualquer coisa que saia de código a gente poderia dizer que já é OOP. Mas aí entra o estilo do programador, a competência dele. Felizmente, ou infelizmente, esse é o principal fator. Imaginemos que conseguíssemos chegar à solução que determinado algoritmo (perceba o escopo do problema, é micro, e não macro como _todo_ o desenvolvimento Web) é mais rápido quando feito de forma Procedural. Se déssemos o problema para ser solucionado por N programadores, divididos entre uso de técnicas procedural e OOP, a verdade é que a performance das soluções dependeria da competência das pessoas. Poderia muito bem sair o OOP como vencedor.

De qualquer jeito, deixe-me voltar ao foco 🙂 Os gargalos de performance em aplicativos web raramente estão na linguagem de programação utilizada (tirando aplicar aberrações como Cobol :), mas sim, na ordem:

1) Banco de dados;
2) Servidor de páginas;
3) Erros de programação;

Isso acontece pois é relativamente fácil resolver problemas de escalabilidade em aplicativos web. Quando a linguagem é lerda, geralmente basta jogar mais uma máquina com uma instância do servidor web para distribuir as requisições. Na verdade, esse lerdeza é geralmente irrisória se comparada às outras linguagens, e irrelevante levando em conta outras soluções. É possível decuplicar a performance fazendo cache das páginas dinâmicas. Duplicar dobrando a memória RAM do servidor. Triplicar separando o banco de dados do servidor web em uma máquina exclusiva.

Essa mensagem não pretende exemplificar quais procedimentos você poderia tomar para aumentar a performance nos três pontos que eu passei, mas a verdade é que umas das últimas de suas preocupações deve ser qual linguagem de programação utilizar para aplicativos web, e menos ainda qual paradigma ou técnica utilizar. Não se preocupe com isso, e ataque o problema de outra maneira.

Se alguém quiser, eu posso fazer um novo post dando uma visão geral sobre como melhorar a performance de aplicativos web.

23 de April de 2007

Script do Harry Potter

Filed under: Imagem — inerte @ 23:07

Semelhanças impressionantes! Pior de tudo que eu sou muito fã de Harry Potter. Pra falar a verdade, mais fã da série e universo que de Guerra nas Estrelas (menos, claro, do Darth Vader).

Script do Harry Potter

Como é o desenvolvimento de software

Filed under: Geral — inerte @ 00:48

E essa é a verdade.

Desenvolvimento de software

16 de April de 2007

AdSense em diretórios de links

Filed under: Geral — inerte @ 13:52

Irei lançar nos próximos dias um diretório de escritórios de advocacia. É meio estranho fazer isso fora do trabalho, já que ali eu passo o dia codificando um software jurídico, mas o diretório não cabe na proposta do site de qualquer jeito.

Tenho visto bastantes diretórios estrangeiros construídos especificamente para mostrar propagandos. Só para constar, não é isso que eu desejo. Eu estou fazendo o site de uma maneira que realmente vai ser útil. Para começar, não peguei um script pronto. A intenção não é colocar no ar o mais rápido possível nem que seja feito nas coxas. Estou construindo a partir do zero toda a infraestrutura necessária usando o Django.

Mas depois de olhar os preços das palavras chaves envolvendo o mundo jurídico, decide que ao menos demanda por essa informação existe. E procurar, por exemplo, pelo termo “advogado trabalhista” é encontrar páginas individuais de escritórios. Hey, que bom para quem sai no topo dessas pesquisas. Mas em um termo assim tão genérico, eu não acredito que os usuários estão procurando por um escritório específico. Lógico que no final os usuários vão ficar com um escritório, mas por enquanto eles estão procurando as alternativas. E o Google, ou quaisquer outros mecanismos de busca, não estão retornando o que eu acho que deveriam retornar para essas palavras-chaves.

Já que é assim, vou lá eu e construirei eu mesmo 🙂

Quando eu tiver sucesso no lançamento, aviso quanto dinheiro que estarei ganhando.

Estilo de listas com CSS

Filed under: CSS — inerte @ 01:09

As seguintes propriedades modificam estilos de listas usando Cascading Style Sheets:

  • list-style-image: imagem como marcador;
  • list-style-position: posição do marcador;
  • list-style-type: tipo de marcador;
  • list-style: abreviação para múltiplas propriedades;

Como preencher os valores das propriedades:

  • list-style-image
    1. none
    2. URL: url(diretorio/imagem.extensao)
  • list-style-position
    1. outside: marcador desalinhado do texto
    2. inside: marcador alinhado com texto
  • list-style-type
    1. none: sem marcador
    2. disc: círculo (bola pintada)
    3. circle: circunferência (bola vazia)
    4. square: quadrado pintadi
    5. lower-alpha: letra minúscula a, b, c, d, …
    6. upper-alpha: letra maiúscula A, B, C, D, …
    7. decimal: números 1, 2, 3, 4, …
    8. decimal-leading-zero
    9. lower-roman: romano minúsculo i, ii, iii, iv, …
    10. upper-roman: romano maiúsculo I, II, III, IV, …

13 de April de 2007

Declaração de CSS na página

Filed under: CSS — inerte @ 16:53

Eu costumo colocar todo o código de CSS em arquivos separados mas de vez em quando surge a necessidade de colocá-los no corpo da página, dentro do <head>. Para que eu nunca mais esqueça então, é assim:

[html]

[/html]

Powered by WordPress