English readers and other languages: Many posts are in portuguese, you can use the Translate button at left side.

Clique nas imagens dos artigos! Elas levam você para o site do artista que a criou e muitas
vezes tem assuntos relacionados ou outras imagens para expandir seus horizontes!
Mostrar mensagens com a etiqueta Software. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Software. Mostrar todas as mensagens

quinta-feira, 18 de julho de 2013

Software - Simplificação Inteligente é Trabalho do Desenvolvedor

As fotos mostram um belo exemplo de design bem bolado. 
Software bem feito também pode ser assim.
Multiplo by HeyTeam

Software - Simplificação Inteligente é Trabalho do Desenvolvedor
18/03/2010

Em resposta ao artigo "A Dificuldade da Simplificação", de Letícia Polydoro publicado no site Baguete. 

"Menos é mais. Esta sábia frase foi dita em 1919, por Mies van der Rohe, sintetizando a filosofia da renomada escola de design e arquitetura alemã Bauhaus que fez história. Que impacto teria essa frase dita por um arquiteto do século passado nas nossas empresas de tecnologia atuais?"


Meu comentário


Simplificar é agregar inteligência ao sistema. Acho muito oportuno os comentários sobre a tendência dos programadores, quanto a colocarem excesso de recursos de software numa mesma tela, ou num mesmo programa.

Excessos de mecanismos são prejudiciais, tanto quanto a falta de funcionalidade que observamos em muitos sistemas.

Um programa inteligente, ou que utilize conceitos de sistemas especialistas, deve ter previsão no seu funcionamento para executar, sem esperar pela solicitação do usuário, muito mais do que os tradicionais 10% a 20% (quando muito) do que a ampla maioria dos analistas e programadores fazem.

Infelizmente por aqui, o nível de requerimento das empresas para gerar bons resultados desenvolvendo recursos melhores para suas atividades fim (ou seja gerar lucro ao invés de só cuidar de economizar papel higiênico), costuma ser tão baixo quanto seu descaso em formação de equipes e estrutura adequada. Mas continuam gastando fortunas em propaganda para fingir que são modernas, mostrando até Ferraris quando só querem pagar por fusquinha para não gastar nem com água.
Não existe milagre no desenvolvimento de software profissional para gerar verdadeiros e bons resultados. E não adianta ficarem publicando aquela tantos estúpidos artigos sobre "falta de jovens talentos". Tradução: querem novatos sem experiência mas que sejam gênios de nascença (existe um a cada 10 milhões talvez) e com o poder de um deus e com salário de faxineiro. Por favor me desculpem os zeladores que cuidam de manter nossos ambientes limpos por favor.

Desenvolver com inteligência deve ser abrangente tanto em termos do que é o mínimo a fazer (nem isto vemos tantas vezes), seja otimizando a navegação entre campos, telas, etc., seja efetuando pré-processamentos, ou por outro lado, realizando uma grande quantidade de tarefas pela dedução (mecanismos de inferência) das atividades e passos complementares que o usuário vai realizar, o sistema deve fazer mais com menos.

Mas também, lembremos que fazer mais na interação com o usuário, também deve seguir um conceito de “menos é mais”. Eliminar interações desnecessárias, atuar como um expert na atividade que realiza, são atributos de um programa inteligente.

Uma interface bem feita é importantíssima. E fazer com que esta interface tenha um funcionamento de alto nível, é mais ainda.

Existe uma relação inversa entre cada recurso que o programa disponibiliza facilitando a vida do usuário e a quantidade de trabalho de programação necessária para criar seu funcionamento. Ou seja, quanto mais simples (e poderoso) para o usuário, a tendência é de que haverá muito mais trabalho para o programador.

Existe certa resistência entre trabalhar para criar soluções inteligentes de software, amigáveis ao usuário final e, desenvolver objetivando facilitar a vida do programador ou de usar aqueles recursos que este está interessado.

Devemos lembrar, nosso trabalho é para o usuário final, não para nós mesmos. Imagine um restaurante em que o cozinheiro tende a ignorar o gosto dos clientes, e impor seus gostos pessoais, mesmo que o restaurante acabe ficando quase vazio, ou que o pessoal da cozinha nem consiga limpar os pratos depois.

É importante interagir com os usuários para avaliar suas necessidades. Mas também, pela experiência, aprendemos que apenas reuniões não fornecem tudo que precisamos saber. Um certo distanciamento, como apenas estar por perto, observando o que os usuários realmente fazem quando estão por sua própria conta, fornece muitos pontos importantes.

Outra coisa importante de lembrar, é que o processamento faz parte da interface, tanto quanto quaisquer retornos fornecidos ao usuário. Uma mensagem de erro que não seja extremamente clara e precisa sobre o ponto e o que causou um problema, é inútil.
Inclusive, neste aspecto, tratamentos de erro devem ser inteligentes sim! Veja, voltando para o exemplo comparativo do restaurante, boa parte dos programas que vemos por aí, servem arroz queimado para o cliente. Se o cozinheiro viu isto, deve por sua própria conta preparar outro arroz, trocar os pratos e servir o cliente, e também avisá-lo sobre a demora se for o caso. Um programa razoavelmente bem feito tem que ter estas características.

Dá trabalho? Sim, dá muito trabalho. Mas este é o meu trabalho e a minha opinião. Eu não acredito em fazer “programinha” e tenho pavor de trabalhos sem um pingo de acabamento ou interfaces precárias. Acredito que nossa área é trabalhar na interação Homem X Máquina e que isto faz parte do processo de evolução social, econômica, científica, enfim, de tudo em que poderemos realizar e melhorar com a utilização dos computadores.

Nosso trabalho é criar boas soluções, dentro é claro, dos recursos disponíveis, mas que devem ser necessários para o que se pede. Não existe sistema de grátis, assim como nenhum restaurante distribui comida. Pode ser um sanduíche, mas pode ser bem feito e ter um guardanapo para acompanhar.
Se o cliente do restaurante deve pegar uma mesa, buscar as cadeiras, levar o pedido na cozinha, comer qualquer coisa que seja servida, ou então receber a comida numa dúzia de potinhos separados e ainda descobrir que é ele quem tem de lavar a louça porque o pessoal da cozinha não gosta, é algo de se pensar. Vemos isto acontecer em software a toda hora e é preciso melhorar. Temos excelentes exemplos no mercado internacional, e não estou falando das megacorporações de software.

E também é possível fazer tanto trabalho de forma simples. De que adianta tantos frameworks se isto não for usado justamente para otimizar a qualidade e a produtividade? A barbaridade que virou o uso da linguagem Java é um exemplo catastrófico de como conseguiram piorar toda experiência acumulada por décadas com o Cobol. Cada empresa tem uma "coisa" tipo framework de Java que não tem nada a ver com o resto. Todo mundo quer sentir-se importante inventando mais um framework apesar da solução já existir por toda parte. Mas não. O ego, a vaidade tem falado tão alto que é realmente uma temeridade olhar cada nova proposta na área. 
Não está na hora de pararem de reinventar a roda o tempo todo?

Mas mesmo assim, se usarem inteligência aquela coisa que faz parte do cérebro, (sim existe algo dentro da cabeça, acreditem), pode-se criar grandes resultados, com simplicidade. Mas é preciso pensar, estudar, aprender sobre interações humanas e empresariais, observar o mundo ao redor.

Um software simples de usar pode ser não tão trabalhoso de fazer. Mas se tiver que ser que seja, mas também, já como o alicerce para um próximo passo em que podemos utilizar aquilo que aprendemos e realizamos. Ou seja, um trabalho bem feito, mesmo que difícil, vai facilitar o que for feito depois.


.'.

quarta-feira, 27 de julho de 2011

Quem precisa de pirataria? O melhor software grátis para música

Free Minimoog and Arp 2600 Soft Synths
Foto: Matrixsynth
Quem precisa pirataria se tem ótimos softwares disponíveis para uso grátis?


Vai então uma super dica sobre os melhores software grátis para música.


Syntetizadores virtuais, pianos, VSTs, plugins, programas para gravar e editar, drums, efeitos, etc, etc, etc


No "Recording Forum" da Harmony Central, uma das maiores comunidades de músicos semi e profissionais do planeta, tem um tópico permanente dedicado a divulgar os melhores softwares grátis disponíveis.

Visite o fórum: "Who needs pirating...Best free stuff" (não precisa inscrição)

Lá tem praticamente de tudo que se possa imaginar, dos melhores softwares disponíveis em versões free.

E as avaliações são de profissionais de primeira linha, pessoal que usa estas ferramentas prá valer.

Altamente recomendado, vale a pena conferir:

"Who needs pirating...Best free stuff"


Divirtam-se!



terça-feira, 26 de abril de 2011

Oracle larga OpenOffice - Previsível

Previsto desde que surgiu o conceito de open source. Mais uma empresa larga um projeto que certamente tem seus problemas para se manter no mercado.

Será mais um tiro no pé da parcela comunidade Linux que acha que "outro alguém" paga a conta?

Software livre é até um conceito legal. QUANDO e QUANDO os seus usuários, principalmente as empresas, entendem e apoiam o seu desenvolvimento sabendo que ele é fruto do trabalho de muitos colaboradores.

Agora, quando empresas só querem as coisas de graça e acham ruim, ou até mesmo proibem seus funcionários de trabalharem algumas horas para ajudar na criação e manutenção do TAL software livre, a coisa vira piada.

E tem ainda, os muitos colaboradores, pelo menos por aqui, que são empregados concursados de empresas estatais, e que rendem longas homenagens ao software livre, principalmente porque não estão preocupados em gerar algum lucro que justifique seu salário.

É fácil SÓ usar as coisas de grátis, ou trabalhar de grátis quando são os OUTROS que pagam a conta.

A posição da Oracle era inevitável.


Meu comentário na matéria da revista Info: Oracle Abandona Projeto do OpenOffice de 20/Abril/2011.

Outsourcing ou Tráfico de Escravos Legalizado?

Sobre o sucateamento que os empresários tem feito com os profissionais de software locais, achando que "são muito espertos" fazendo contratações apenas pelo "menor preço", mesmo que seja para condições aviltantes.

Buscam terceirizar mas fazem isto jogando muitas vezes, seu patrimônio, suas empresas, praticamente no lixo pela falta de cuidado com que deixam tudo literalmente, "de qualquer jeito". 

Um dos casos que temos, é a contratação terceirizada de pessoal de outros países, como a Índia.

Realmente a comunidade indiana até possui alguns bons profissionais. E custam tão barato, tão barato que vale a pena trazê-los do outro lado do mundo. E as empresas provam diariamente que não se preocupam com eles, nem se deixaram família para traz. É como buscar retirantes de zonas de flagelo para se aproveitar do recurso "baratinho". Convivi com alguns e era terrível ver o seu sofrimento emocional longe de suas famílias e ainda assim, tentarem manter uma postura "profissional".
São seres humanos! Lembrem disto!


Sim, estou insinuando muito diretamente que esta exploração é um tipo de escravidão. Uma situação opressiva que também reflete no mercado local, em que os outros profissionais da área de tecnologia se vem frente a frente com propostas vergonhosas. É comum que hoje, pessoas em tarefas que não precisem este preparo, por exemplo, diaristas, tenham uma renda bruta mensal superior a programadores certificados em tecnologia de ponta. 

Sim, fazer faxina, ser encanador ou pedreiro gera uma renda muito melhor do que a vergonha que tantas empresas tem apresentado descaradamente.
E sinceramente, desejo que esta intenção destes, se volte contra eles, suas famílias e todos que amam para que sintam na pele o que é estar do outro lado enquanto apenas desfrutam de uma "boa fase". Que esta boa fase termine para eles. Infelizmente alguns depois vão culpar o governo, ao mesmo tempo que muitos destes que cito, também fizeram de tudo para corromper as estruturas sociais e estatais.

E quem são no caso do exemplo citado, estas pessoas que largam tudo e atravessam metade do planeta em troca de um salário miserável?


Eventualmente eu acesso sites de conteúdo técnico e descubro serem feito por indianos, e as vezes até tenho encontrado bom material, com boa organização e a pessoa realmente fez por merecer. São poucos. Muitos nem tanto na verdade. Tenho de concordar com vários colegas que notam que boa parte destes sites é pura cópia de outros. Sim, uma parcela enorme dos sites indianos são pura cópia do material de outros sites. Uma piada na área de software é que muitos destes aprendem as quatro operações da matemática básica, e sobre como usar CTRL-C+CTRL-V e prontamente aparecem com um blog sobre se apresentando como perito em física nuclear. Cansei de ver blogs assim e mais fácil ainda descobrir as fontes que copiaram. É só isto que tantas empresas contratam e o resultado, o mesmo de qualquer novato local mas custando muito mais.
Por favor, estou citando genericamente os indianos que são muito explorados, mas em referência a tantos asiáticos também.

Por outro lado, como é a vida da população indiana? Como é a vida da população chinesa?

Que opções de trabalho eles tem, além de se oferecerem de qualquer forma para quem aparecer com o dinheiro que precisam, mesmo que seja suficiente apenas para uma vida bem modesta, tipo uma única refeição por dia? Sim, tem muitas pessoas que se arrebentam todos dias trabalhando em área de alta tecnologia de software para ter um único prato de comida por dia.

Gente, por favor, ainda existe, e muito, indústrias em que os trabalhadores dormem dentro da fábrica, embaixo das máquinas. É comum a carga de trabalho de sete dias por semana, com (talvez) uma folga a cada quinze dias e olhe lá. E os turnos costumam ser de 12 horas. E isto não é só nas áreas de produção. A maioria da população indiana é de baixa renda. Podem aprender a atividades melhores, mas continuam vivendo mal.


O profissional indiano, asiático, etc recebe pouco porque precisa e não tem escolha.
É isto que queremos em nosso país? Alguns faturando muito em cima da miséria de outros?


Orientais em geral tem uma formação familiar e espiritual bem profunda. O chinês com sua maravilhosa cultura milenar tem conseguido coisas notáveis.  Mas a integração dos muitos mundos precisa evoluir para melhor de MAIS pessoas e não apenas de alguns poucos.


Estamos no Século XXI. A senzala virtual está aumentando. Ao invés de propiciarmos meios para melhorar a qualidade de vida das pessoas, vejo buscas para conseguir mais trabalho, por cada vez menos. Certificações CMMI? Quem usa isto em relação à ampla maioria do mercado? É que nem falarem de UML, Cobit, Scrum, etc. Usa-se muito na escola. Depois, dilui-se até sumir nas empresas que criam suas próprias metodologias.


Qual a realidade do mercado? Aquela que é conveniente para uns poucos?


Us$ 7.000 por ano, é o salário de muitos programadores brasileiros, qualificados, que tem família para sustentar e que, muito provavelmente, não pretendem ter o padrão de vida média dos indianos. Da mesma forma, acredito que os indianos trabalham sonhando com melhores dias, de terem uma renda mais digna.
Nos USA, ao que vi, o nível de pobreza está em cerca de Us$ 26.000 por ano!!! Quem recebe menos que isto é oficialmente pobre. 
A maioria das diariastas que conheço tem uma renda equivalente ou bastante superior a esta. Manicures também e não precisam tanto estudo diário.
É fácil entender porque até médicos formados vão para os USA e países da Europa para trabalharem como balconista, cuidar de crianças ou qualquer outra atividade e estarão fazendo muito mais do que aqui.

Ao mesmo tempo, os preços e margens finais de lucros dos grandes empresários são as mesmas que as lá de fora. Uhm? 

Certamente, os pequenos empresários amargam muito com este mercado. Por que? Simplesmente porque na maioria das vezes seus fornecedores locais são exatamente os mesmos que não estão dando a mínima e só faturam em cima. Se perderem algum cliente, tem outros logo ali. São os donos do mercado e protegidos por leis de importação que até hoje servem só para promover a exclusividade de mercado.
O ex-presidente Fernando Collor, conseguiu acabar com algumas reservas de mercado, e é graças a ele que hoje podemos ter automóveis e computadores mais modernos. As indústrias patrocinaram para derrubar ele por causa disto, minha opinião. Antes era só lixo mesmo. Infelizmente não deu tempo para derrubar as tarifações absurdas que protegem o mercado dos oportunistas e continuam fazendo o famoso "Preço Brasil" onde provam qualquer coisa como lhes convém. Assim, o nosso "rico" consegue comprar um automóvel melhor, que qualquer trabalhador braçal nos USA e Europa consegue por muito menos de 1/3 do valor. A reserva de mercado não acabou em hipótese alguma.


E DUVIDO, realmente, DUVIDO, que com Us$ 7.000 por ano, o indiano consiga fazer todos os cursos e universidades que os mesmos que querem as coisas quase de graça, costumam pedir. É muito fácil jogar pedra no telhado dos outros, principalmente quando não tem que pagar a conta do próprio estrago.


O mercado globaliza-se até o ponto de perdermos a competitividade como nação, porque alguns não pensam melhor antes de sucatear as próprias raízes de sua empresa.


Se medidas como buscar profissionais noutros países, servirem para DESENVOLVER aquela região de forma justa, eu concordo. Senão, é apenas exploração de quem precisa, quase desesperadamente, de recursos.


Então, eu pergunto: SE MEXER para ONDE? Estamos aqui dizendo para as pessoas profissionalizarem-se, arcarem com custos e tudo o mais, indo em direção a serem capazes de produzir mais, para ganhar míseros Us$ 7.000 por ano?

Editado 2017: Falam em crise, 10-12% de desempregados e aproveitando para massacrar os outros 90% com isto! Vendas no comércio caindo 6% e fazendo escândalo ao mesmo tempo que os grandes continuam publicando lucros bem interessantes? Eu não vi nenhum dos grandes baixar o preço de seus produtos. Pelo contrário, no máximo aparecem ofertas de financiamento, em parceria com os bancos e seus imensos lucros também, mas sem baixar o preço de nada. No máximo, aproveitam para desovar estoques.



Pergunto: O mercado vai ser de quem conseguir explorar mais? Será que sempre vai haver esta fartura de mão de obra barata ou quem sabe, e acho mais provável, cada vez menos pessoas vão ter interesse nesta atividade, por deixar de trazer satisfação pessoal e profissional?


Software de qualidade NUNCA vai ser feito apenas com a utilização de novatos que custam baratinho. Qualquer produto de boa qualidade requer pessoas capacitadas. E pessoas capacitadas, não suportam indefinidamente situações que tem caracterizado a exploração, e repito, de uma senzala virtual.

Depois quando estas empresas quebram e são absorvidas pelo mercado Chinês ou outro assim, que estão usando capital pesado para forçar negociação, e citando um forte concorrente, ninguém quer ser lembrado sobre que são os próprios empresários estão atirando seus negócios no lixo, ou fronteira afora para qualquer um assumir. 


.'.

quarta-feira, 25 de agosto de 2010

Mais um opensource de peso pode cair.

Foto: Sputniko.com

"OpenSource é mais marketing de faculdade para não comprarem licenças.  -  Junior."

Comentário da matéria Não conte com a Oracle para manter vivo o OpenOffice do IdgNow!:

Utilizo opensource profissionalmente, mas achei muito oportuno e correto o comentário do colega Junior: "OpenSource é mais marketing de faculdade para não comprarem licenças." (Assim economizam a mesada do papi... risos...)

Aqui no Brasil, alguns dos maiores defensores e desenvolvedores do opensource e "gratisware" são funcionários de estatais, ou seja, não vivem disto e podem se dedicar ao desenvolvimento acadêmico.

Sobre os comentários a respeito do Java, que pode eventualmente deixar de ser pago, e neste caso dizem "é só mudar para outra linguagem", acho que é o típico comentário de quem só fez "programinhas" e não tem a menor idéia do que é refazer um sistema corporativo, projetos, trabalho de equipes grandes. Além dos custos, tempo e a chance de uma bagunça nos processos da empresa, e mais os prejuízos recorrentes, devem ser contados.

Java já se tornou um herdeiro do Cobol em termos de herança. Milhões de programas ficarão para a posteridade. Engraçado, dizem que Cobol está morto a trinta anos e agora também dizem que Java está morto.

Enquanto isto, meu investimento comprando licenças do Ms-Access faz uma década, para fazer o front-end de um sofisticado ERP para indústria do vestuário, parece ter sido acertado. É só conectar num servidor SQL de peso, SQL Server, Oracle, Sybase, etc e tenho estabilidade, suporte técnico, front-end de rápido desenvolvimento, a qualidade que pude criar com o imenso detalhamento de recursos que tenho com o VB e as APIs do Windows, etc. Coisa de quase 20 mil linhas de código específico para a atividade fim, sem ter que lidar (tanto) com coisas absolutamente básicas e banais. Além do ganho em produtividade, sei aonde estão os fornecedores da ferramenta 24hs por dia, sem ficar dependendo da boa vontade as vezes heróica, do trabalho voluntário de alguém.

Opensource é uma coisa boa sim, mas é necessário lembrar, que nada é grátis, nem na natureza.
.'.

terça-feira, 11 de maio de 2010

Cientistas ativam com sucesso um milhão de kernels linux como máquinas virtuais.

Achei no Flickr, essa matéria de Dezembro de 2009, mas que é de interesse:



Os cientistas de computação da Sandia, Ron Minnich e Don Rudish rodaram com sucesso mais de um milhão de kernels Linux como máquinas virtuais, uma realização que permitirá aos pesquisadores de segurança observar de forma mais efetiva o comportamento encontrado em botnets maliciosas. Eles utilizaram o cluster de supercomputação da Sandia para a demonstração. (Mais informações)"


Imaginem o que dá para fazer em termos de simulação de processamento distribuído num sistema destes?

Claro que estudar botnets já é um grande campo. Mas que tal, por exemplo, uma rede neural mais sofisticada? Um sistema de inteligência artificial com milhões processadores para inferências lógicas. Tratamento de imagens complexas. Uma Matrix com um milhão de personagens razoavelmente complexos. Ou quem sabe, a plataforma dos sonhos para jogos RPG e de ação usando cada uma das máquinas virtuais para controlar um determinado aspecto ou gerar situações de ambientes não comportadas nos atuais sistemas.

Se alguém lembrar do Holodeck do filme Star Trek um simulador de ambientes virtuais hiper-realista, não é mera coincidência.  Para quem gosta de ficção,  ver também Holodeck e Holosuite.




Foto cortesia de: Sandia National Laboratories.

terça-feira, 23 de fevereiro de 2010

Mitos sobre desenvolvedores de software mais velhos.

Cinco mitos difundidos sobre desenvolvedores de software mais velhos.

Interessante e bem embasado artigo de Dave Rodenbaugh

Five Pervasive Myths About Older Software Developers


Foto: Mike Pirnat

.'.

quarta-feira, 4 de novembro de 2009

Manifesto pelo Desenvolvimento Ágil de Software

Manifesto for Agile Software Development


Gostei desta e presto meu apoio:


Manifesto para Desenvolvimento Ágil de Software


Estamos descobrindo maneiras melhores de desenvolver
software, fazendo-o nós mesmos e ajudando outros a
fazerem o mesmo. Através deste trabalho, passamos a valorizar:

Indivíduos e interações mais que processos e ferramentas.

Software em funcionamento mais que documentação abrangente.

 Colaboração com o cliente mais que negociação de contratos.

Responder a mudanças mais que seguir um plano.
 
Ou seja, mesmo havendo valor nos itens à direita,
valorizamos mais os itens à esquerda.




Princípios por trás do Manifesto Ágil

Nós seguimos estes princípios:
  Nossa maior prioridade é satisfazer o cliente
através da entrega contínua e adiantada
de software com valor agregado. 


Mudanças nos requisitos são bem-vindas,
mesmo tardiamente no desenvolvimento.


Processos ágeis tiram vantagem das
mudanças visando vantagem competitiva para o cliente. 


Entregar frequentemente software funcionando,
de poucas semanas a poucos meses,
com preferência à menor escala de tempo. 


Pessoas de negócio e desenvolvedores devem trabalhar
diariamente em conjunto por todo o projeto. 


Construa projetos em torno de indivíduos motivados.

Dê a eles o ambiente e o suporte necessário
e confie neles para fazer o trabalho. 


O método mais eficiente e eficaz de transmitir
informações para e entre uma equipe de desenvolvimento
é através de conversa face a face. 


Software funcionando é a medida primária de progresso.
Os processos ágeis promovem desenvolvimento
sustentável. Os patrocinadores, desenvolvedores e
usuários devem ser capazes de manter um ritmo
constante indefinidamente. 


Contínua atenção à excelência técnica e bom design
aumenta a agilidade. 


Simplicidade--a arte de maximizar a quantidade de
trabalho não realizado--é essencial. 


As melhores arquiteturas, requisitos e designs
emergem de equipes auto-organizáveis. 


Em intervalos regulares, a equipe reflete sobre como
se tornar mais eficaz e então refina e ajusta seu
comportamento de acordo.




Site do manifesto: http://www.agilemanifesto.org

.'.

quinta-feira, 29 de outubro de 2009

Adicionar Hardware Não Compensa Software Lento

Relação de Amor e Ódio
Foto: Jay Murdock

Adicionar Hardware Não Compensa Software Lento
29/10/2009

Por causa da redução do preço do hardware ou limitações de desenvolvimento (tempo, experiência, etc), tornou-se prática comum colocar mais máquinas para compensar o fraco desempenho dos sistemas.

Além de maior consumo de energia e dos impactos ambientais, isto não significa tanta melhoria assim nos resultados.

"Você é programador? Quer fazer algo pelo meio ambiente e mesmo, fazer do mundo um lugar melhor? Então comece a otimizar seu código! - Jeff Atwood."


Simplesmente colocar mais equipamento tem sido a solução preferida ao invés de fazer o software rodar mais rápido com o hardware existente. Fazer mais com menos é uma regra importante a ser lembrada, tanto quanto a Lei de Wirth: "Software fica lento mais rápido do que o hardware acelera."

Como resultado, isto anula os ganhos com a Lei de Moore!!! O hardware fica mais rápido a cada 18 meses, mas o software dobra de tamanho, fica maior, mais lento.

Jeff Atwood sugere alguns passos para começar:
  1. Coloque hardware mais rápido e barato para o problema de performance.
  2. Se o aplicativo atingir sua meta de performance, pare por aí mesmo.
  3. Faça benchmarks para determinar aonde estão os problemas de performance do seu software.
  4. Analise e otimize as áreas que você identificou no passo anterior.
  5. Se agora o aplicativo atingir sua meta de performance, pare por aí mesmo.
  6. Volte ao passo 1.

Outra coisa importante a observar é quais aspectos otimizar, como por exemplo, a interação com o usuário. Um tempo de resposta de até um segundo é até aceitável. A partir de um segundo, isto já chama a atenção do usuário e pode começar a irritar. Se passar de dez segundos (máximo!), o usuário vai perder a linha de raciocínio e passar a fazer outras coisas enquanto espera.

Para grandes volumes de dados também existirão os aspectos de tempo de execução e da quantidade de volumes alocados durante o processamento, que certamente afeta outras tarefas que poderão estar sendo feitas.

Otimização de performance envolve mais testes e menos adivinhação. Quando se pensa numa escala de milhões de operações por segundo, qualquer detalhe pode ser importante. Mas também existem detalhes que tomam tempo e não valem a pena otimizar.

Com certeza, a otimização requer conhecimento efetivo e prática dos recursos e técnicas adotadas.

Pessoal com menos experiência vai ter melhores resultados se trabalhar em grupo e utilizarem intensos benchmarks para analisar cada porção do software.

E claro, isto vale para mim e para todos: Sempre estude. Procure aprender de quem sabe mais que você. Graças a internet, hoje alguns dos melhores programadores do planeta mantém sites, blogs, etc com um amplo conjunto de informações e código fonte que merecem ser cuidadosamente estudados.

Dica: soluções de estruturas de lógica, de "como fazer", podem ser feitas com diferentes linguagens, portanto, amplie seu foco de estudos. Como se diz faz décadas, basicamente "quase tudo são IFs e assinalamentos."

As vezes, descobre-se que seria mais desejável reescrever o software. Isto deve ser considerado quando:
  1. O código for efetivamente ruim ou mau feito;
  2. A solução atual puder ser realmente melhorada;
  3. Houver incompatibilidade na maneira que o código faz o processamento, em relação a algum outro recursos, normalmente externo.

E lembrando, muitas vezes o código é reescrito apenas porque o programador não entendeu o que foi feito. Geralmente falta estudar o código. Portanto, antes de qualquer coisa, estude o código e a solução de lógica adotada, conheça a ferramenta ou linguagem que está usando.

Soluções de automatização de performance, como as existentes nos gerenciadores de banco de dados e, em certas linguagens de programação, podem muitas vezes ser uma armadilha. As pessoas acham que o computador vai resolver sózinho o trabalho de melhorar a execução do código, mas esquecem completamente que isto vai ser feito de acordo com algumas regras padronizadas. Logo, com frequencia os resultados podem ser bem fracos em relação ao esperado.

Algum tempo atrás já comentei algumas coisas em relação a isto, citando casos bem reais, no tópico "Performance, quando a culpa não é do banco de dados".

Vamos continuar abordando este tema em posts futuros.

.'.

terça-feira, 27 de outubro de 2009

Defeitos dos profissionais de informática?

Computer Control Room
Imagem:
Ryudenki Tori Kamiya


A coisa que mais escuto, é que todo pessoal de informática fala uma língua que ninguém entende.

Todo mundo entende a língua de médicos, engenheiros, bruxas, economistas, cozinheiros, etc...

Mas as PESSOAS NÃO NOS ENTENDEM!!!

Discutimos numa língua esquisita que ninguém sabe.

Não acho que arrogância seja problema, isto tem em toda profissão.

Humildade? Tente conversar com pessoal da Odontologia ou de Comércio Exterior antes de questionar a imensa e profunda humildade de um profissional de informática!!!

Minha muito humilde opinião, é que temos um problema de IDIOMA. Isto mesmo.

Não nos comunicamos com os malucos dos usuários porque ELES não entendem NOSSO IDIOMA.

E olha que além de Inglês e Espanhol fluentes, tenho noções de alemão, francês e italiano.

Fazem anos alguém disse que depois da linguagem de programação, a linguagem mais usadas pelos programadores é a linguagem obscena.

O resto, meus defeitinhos pessoais, são coisinhas insignificantes, como meu perfeccionismo e detalhamento extremo, ler manual no banheiro, rede LAN em casa, licença QUENTE de Cobol, Clipper, Delphi, Visual Basic, Access, etc, gastar um tempão para que um programa seja completamente a prova de operador.

Convenhamos, fazer o programa aceitar clique do mouse fora do campo sem cancelar ou enlouquecer o processo é básico.

Eu confesso! O grande defeito, não é o profissional! É o USUÁRIO.

Colossus, HAL 9000 e outros, serão lembrados como mártires!



.'.

segunda-feira, 5 de outubro de 2009

Valor de ferramentas, terceirizações, produtividade, etc

"The minimum amount of knowledge required for the task to be carried out with an acceptable degree of success."
Foto Edward Bilodeau

Valor de ferramentas, terceirizações, produtividade, etc
05/10/2009

Revisando alguns posts, estava observando este, de 2003, em que debatiamos alternativas para continuidade de sistemas desenvolvidos em Clipper.

O resultado, foi que comentamos sobre qualidade de serviço, terceirizações, além é claro, sobre o valor das coisas.

Segue-se mais um post, que colocarei aqui mais tarde, para deixar claro que não estou dizendo que grátis é ruim, muito pelo contrário.

O que estou dizendo, é que tudo tem valor e devemos cuidar de como encaramos isto.


Esta mensagem foi postada no excelente fórum Clipper-Br do Yahoo Groups, dedicado a linguagem Clipper e linguagens do padrão xBase.


Data: Qui Jun 5, 2003 2:33 pm
Assunto: Re: X-HABOUR p/Gilberto

Carlos. escreveu:

porém vc não consegue desenvolver nenhum tipo de trabalho de alta
qualidade sem que ele receba críticas.

Pura verdade.

Sandro escreveu

objetos do xBase++. Inconvenientes do xBase++: é pago, caro e ....
.......

Ôôôpa!!!

Seguem meus comentários:


O fato de ser PAGO é justamente um critério que permite que as pessoas que estão trabalhando recebam pelo seu serviço e possam no mínimo sobreviver. ISTO É UMA QUESTÃO ÉTICA, que é justamente assegurar as pessoas que recebam uma justa renumeração pelo seu trabalho. Posições públicas de que este ou aquele software é ruim porque é "pago" induzem mais ainda, aos MAUS empresários, aos que tem visão "limitada" e aos espertalhões em geral, de que podem exigir que os outros trabalhem de graça ou por valores abusivamente baixos.

Caso você não saiba, hoje em dia muitas empresas oferecem serviço "temporário", sem nenhum vínculo legal, nem estabilidade, nem horas extras, pelo mesmo que se paga para, por exemplo, um cobrador de ônibus, que é também uma profissão digna como todas as outras.

Isto é muito ruim, pois as empresas PERDEM muito mais do que pensam ridiculamente estar economizando, pois trabalhadores temporários não geram algo importante que é conhecido por "CULTURA EMPRESARIAL".

O know-how vai embora todos os meses pelo ralo da economia mal feita.

Se você tirar o açúcar, o café fica uma droga né? Além disto, algums empresas além de fazer a nociva "economia de cafezinho", fazem pior, fazem "economia de água".

Alguns resultados disto:
  1. o conhecimento é perdido e tende a surgir uma desorganização constante. Mesmo pequenos padrões são difíceis de manter e perdem-se a cada mínima mudança na equipe.
  2. na sua maioria, os profissionais não vão fazer tudo que sabem ou poderiam;
  3. não se desenvolvem realmente muitas técnicas novas;
  4. não vai existir empenho nem motivação em alguém que sabe que vai ser descartado;
  5. é uma prática predatória, portanto, fatalmente vai extinguir sua fonte.

Ferramentas pagas, ajudam a lembrar aos seus usuários, que os técnicos também são pagos. E também que a formação técnica, como treinamento, atualização e disponibilidade de recursos para aprendizado é responsabilidade das empresas e não apenas dos funcionários. Ou por acaso alguém é maluco para comprar por conta própria uma instalação completa de algum DB só para aprender como funciona e depois dar "de grátis" para empresas que não valorizam o trabalham e pagam mal?

Grandes empresas migram para Linux e outras ferramentas, porque é "de grátis". Depois seus diretores compram um terno Giorgi Armani novinho, fazem declarações modernistas lindas de morrer (de rir) na revista Info, Exame, ComputerWorld, etc enquanto reduzem o salário e despedem programadores e analistas achando que eles também devem trabalhar de graça.

Minha posição sobre software "de grátis" é amplamente pública: 
Se não tiver alguma renumeração DIGNA para quem faz e quem mantém SOU CONTRA. 
 
Isto inclui xHarbour, Linux e tudo o mais. Tudo bem que existam alguns laboratórios com "alguma" verba governamental, mas daí a não terem uma responsabilidade de gerar resultados reais, ou seja, gerar seus próprio sustento, acho muito preocupante.

Sabem por que nos países desenvolvidos Empresários (com "E" maiúsculo) investem pesado em projetos e pagam bem suas equipes?

Simplesmente porque vivem do que fazem e seus projetos visam lucro e desenvolvimento de empresas.

Quem é que vai fazer algo assim se a empresa que trabalha não precisar gerar lucro nenhum? Se o café da manhã sempre for servido na cama, a pessoa nem se levanta mais e suas pernas atrofiam.

E não, note bem, não tenho dinheiro para pagar por todas licenças de software que gostaria de ter, por isto:
  1. uso só as que posso.
  2. uso as que estão compartilhadas no mercado e que servem também como promoção de seus autores. Está de uso corrente uma versão limitada que é free e outra que é paga, o que ajuda a manter o negócio andando.
  3. sempre presto créditos a tudo que uso. É o mínimo que posso fazerpara retribuir.
  4. considero que parte de meu trabalho assalariado é ajudar a manter estas ferramentas. Ou seja, a empresa me paga para prestar colaboração no mercado.

Foto: PaDumBumPsh

Uma coisa é termos ferramentas elaboradas com a participação de milhares de pessoas, em regime de colaboração e assistência mútua, levando ao crescimento coletivo.

Agora, outra coisa totalmente diferente é alguém dedicar-se em tempo integral para algo que é entregue sem qualquer renumeração. Vai viver de que? Papai e mamãe vão sustentar toda vida? Empreguinho que titio e padrinho querido arrumaram passando por cima de todo mundo?

Veja, nem todo mundo tem a possibilidade de estar, por exemplo, literalmente "mamando" numa empresa estatal para sair por ai fazendo propaganda do software livre, quando tem seus salários gordinhos assegurados por conta de impostos cobrados das empresas (coitadas) que tem de vender e (conseguir) receber pelos seus trabalhos. Além do que, estando assegurados pelo concurso público, alguns não se importam em tratar realmente mal os coitados dos clientes que eventualmente a empresa tenha. Qualquer problema, o governo paga a conta (ou seja os impostos cobrados...)
Claro que boa parte do pessoal do funcionalismo público é boa gente, mas não sou cretino para negar que o lixo continua todinho lá, atrapalhando quem tenta trabalhar direito.

Por favor, sugiro que repense nestas palavras, pois eu realmente não posso trabalhar de graça para ninguém. Cada vez que faço isto, a energia elétrica é cortada, falta comida na minha geladeira, eu não posso comprar sequer um sapato.

Eu adoro ensinar as coisas que sei, colaborar com os demais e me entusiasmo ao desenvolver coisas novas e sofisticadas, mas de graça, eu só mostro uma fração do que sei e posso fazer. Colaboro aonde posso, mas tenho sempre a visão de que este é meu trabalho, minha fonte de sustento, portanto, preciso fazer  propaganda e mostrar um pouco do que faço para os demais.

Quanto a ser caro, tem preço para tudo. Já comentei uma frase que vi na correspondência de uma grande empresa estrangeira que explicava que:
 "a BMW não baixa o preço se você só tem dinheiro para comprar um Chevette."


Nota:
Meus comentários são minha opinião e não refletem opiniões e/ou ideais do meu empregador.



.'.

quarta-feira, 23 de setembro de 2009

Sun mantém MySql e Sparc

A Oracle, enquanto espera a analise da Comissão Européia sobre o impacto compra da Sun e como isto vai afetar o mercado de banco de dados avisa que vai manter o MySql, pois são produtos que não competem.

Larry Ellison, CEO da Oracle CEO disse que a competição é com o IBM DB2, Microsoft SQL Server, Sybase e outros. São mercados diferentes, disse.

Também foi noticiado que a plataforma SPARC receberá investimentos.

Até a liberação pela Comissão Européia, a Oracle declara estar perdendo milhões todos os meses em negócios. Enquanto isto, IBM e HP aproveitam.

Veja matéria sobre o assunto em:Oracle Will Not Spin Off MySql

quinta-feira, 17 de setembro de 2009

Converter String vazia para Long em Java

Referência:
Java Error in tMap

Java não converte uma string vazia para long de forma automática.
Para isto, pode-se usar um bloco try/catch como esse:

String stringValue = "";
long longValue = -1;
try {
longValue = Long.parseLong(stringValue);
} catch (NumberFormatException e) {
longValue = 0;
}
System.out.println(longValue);

quarta-feira, 2 de setembro de 2009

Performance: Quando A Culpa Não é do Banco de Dados

The IBM Stretch supercomputer.




Credit: IBM

Performance: Quando A Culpa Não é do Banco de Dados
02/09/2009

Otizimizando a performance em SQL com Join e Subquerys


Com frequência temos casos em que uma determinada seleção de registros, apesar de parecer atender as necessidades iniciais, não é satisfatória devido a demora do processamento.

Uma das causas, é pela utilização apenas de dados de teste, em tabelas pequenas. Com isto, o tempo real de execução deixa de ser avaliado e, como resultado, o coitado do DBA vai ter que ouvir mais uma vez que “minha Select funcionou, então é o banco de dados é que tem problema”. Ou então, será alegado culpa do usuário...

Mas existem muitas diferenças entre simplesmente “funcionar”, e funcionar de forma eficiente.

A complexidade de uma seleção de dados, vai levar em conta, o tempo de que dispomos para sua codificação é claro, mas também, é preciso ponderar no ganho de tempo, mesmo na fase de testes com dados reais, e os recursos utilizados em produção. Na maior parte das vezes, o tempo ganho estudando a otimização compensa largamente e geralmente diminui o tempo de programação e testes.

Outra falha, é confiar excessivamente nos recursos de otimização automática dos gerenciadores de banco de dados. Nem sempre estes farão a melhor escolha. Como por exemplo, ao avaliar a disponibilidade de outros índices, neste caso, mudando as chaves de seleção de alguma forma, que poderá ter um impacto significante. Também a hierarquia como serão processadas as condições de seleção e até mesmo, transferir parte dos recursos para outra tabela, ainda assim de forma mais eficiente no resultado geral, pelo aproveitamento de dados em cache.

Tomei para este exemplo, uma seleção de dados numa tabela real, mudando é claro os nomes para o exemplo, com cerca de 60 milhões de registros de movimentos relativos a um conjunto de setores, relacionadas noutra tabela.

Esta transação é utilizada com frequência numa consulta pelo usuário final, a nível de direção da empresa, mas demorava no mínimo absurdos 40 minutos em ambiente de produção. Em horários de pico chegava a 2 horas! Imagine algué da diretoria precisando tomar decisões de enorme valor financeiro e tendo que esperar este tempo todo! Certamente era desejável obter uma boa performance.

É importante observar, que mesmo que fosse o caso de um programa de execução única ou eventual, a enorme perda de tempo durante a fase de testes compensa largamente que se faça um código melhor.
Veja bem: como é que vou trabalhar se entre um teste e outro preciso esperar horas? Estamos no Século XXI, é hora das coisas funcionarem melhor e serem melhor feitas. 
Desta forma, teremos nosso trabalho pronto mais rápido, e também, estaremos economizando os recursos do sistema e da empresa que também são utilizados pelos demais usuários.
E também muito importante, é lembrar que geralmente, não teremos exclusividade de uso do servidor. Existem outros programas disputando recursos. No caso do exemplo atual, eram mais de 5000 estações fazendo todo tipo de transação acessando exatamente a tabela principal desta pesquisa, além de uma grande quantidade de processamento batch realmente volumosos.

O sistema gerenciador de banco de dados (SGBD) neste caso, era o Sybase AES (Adaptative Server Enterprise) 12.5. Usei os comandos sp_showplan e sp_statistics para listar resumos das execuções.
Os conceitos aqui mostrados servem para qualquer outro SGBD Relacional, como Oracle, Sql Server, etc.


A Select original que está abaixo, vai retornar a soma para quatro condições diferentes em cada setor existente.
Para nosso exemplo temos duas tabelas: Setores e Movimentos. Precisamos selecionar os Setores de Tipo = 'X', e os movimentos dentro de um periodo de datas, que tenham um determinado CodigoTeste igual ou diferente de zero e, que poderá ter uma segunda condição a ser testada. Ainda, precisamos o total geral de registros.

Neste modelo, em que a tabela de setores é a principal, simplesmente fizeram quatro varreduras na tabela de movimentos para cada um dos setores dentro do período selecionado. Uma leitura para cada um dos campos a ser somado! O tempo de execução foi obviamente bastante longo.

Logo abaixo estão as estatísticas de execução.

Select Original:

select Setores.codigoSetor,
       (select count(*) from Movimentos b
               where Setores.codigoSetor = b.codigoSetor and
                     dataOperacao between '04/01/2009' and '04/30/2009'),
       (select count(*) from Movimentos c
               where Setores.codigoSetor = c.codigoSetor and
                     dataOperacao between '04/01/2009' and '04/30/2009' and
                     codigoFlagTeste 0),
       (select count(*) from Movimentos d
               where Setores.codigoSetor = d.codigoSetor and
                     dataOperacao between '04/01/2009' and '04/30/2009' and
                     codigoFlagTeste = 0 and tipoABCDE in (1, 2, 3, 4)),
       (select count(*) from Movimentos e
               where Setores.codigoSetor = e.codigoSetor and
                     dataOperacao between '04/01/2009' and '04/30/2009' and
                     codigoFlagTeste = 0 and tipoABCDE not in (1, 2, 3, 4))
  from Setores (index indiceSetores01)
  where (tipoSetor = 'X' or Setores.codigoSetor = 999)
  order by Setores.codigoSetor


Estatística da Execução:
----------------------------------
Table: Movimentos scan count 121, logical reads: (regular=124152 apf=0 total=124152), physical reads: (regular=1129 apf=123023 total=124152), apf IOs used=123023

Table: Movimentos scan count 121, logical reads: (regular=6949399 apf=10100 total=6959499), physical reads: (regular=843310 apf=5103725 total=5947035), apf IOs used=5090713

Table: Movimentos scan count 121, logical reads: (regular=1003943 apf=2237 total=1006180), physical reads: (regular=37563 apf=261910 total=299473), apf IOs used=262198

Table: Movimentos scan count 121, logical reads: (regular=1003943 apf=0 total=1003943), physical reads: (regular=0 apf=0 total=0), apf IOs used=0

Table: Setores scan count 1, logical reads: (regular=51 apf=0 total=51), physical reads: (regular=47 apf=16 total=63), apf IOs used=1


===> Total actual I/O cost for this command: 132.860.664... !!!
Total writes for this command: 125

Execution Time 749.
SQL Server cpu time: 74900 ms. SQL Server elapsed time: 1.471.296 ms.

(121 rows affected)
----------------------------------


Vemos que houve um processamento bastante repetitivo e bem pesado. Para cada linha selecionada na tabela Setores, são feitos quatro leituras na tabela de Movimentos, que neste caso, pelo menos tinha um Indice por data. Mas ainda assim, é demais.

Podemos melhorar isto em duas partes principais.
  1. Fazer apenas um ciclo de leitura na tabela de Movimentos eliminando as subconsultas. 
  2. Otimizar a forma como vamos validar quais código de setor serão validados.

Para aproveitar melhor o ciclo de leitura, fazendo a contagem das condições que precisamos verificar, utilizamos o comando CASE WHEN, que é semelhante a do SQL Server. A maioria dos SGBDs possui uma condição de critério.
A tabela de Movimentos passa a ser o principal e não mais o de Setores, também temos no mesmo um índice por setor e data.
E usamos o Join que não era usado!

Assim teremos:

  select codigoSetor, count(*),
        sum ( case
                when b.codigoFlagTeste 0 then 1 else 0 end ),
        sum ( case
                when b.codigoFlagTeste = 0 and
                     tipoABCDE in (1, 2, 3, 4) then 1 else 0 end ),
        sum ( case
                when b.codigoFlagTeste = 0 and
                     tipoABCDE not in (1, 2, 3, 4) then 1 else 0 end )
   from Movimentos b
   join Setores (index indiceSetores01)
     on Setores.codigoSetor = b.codigoSetor
   where dataOperacao between '04/01/2009' and '04/30/2009' and
        (tipoSetor = 'X' or Setores.codigoSetor = 999)
   group by codigoSetor
  

Estatística da Execução:
----------------------------------
Table: Movimentos scan count 1, logical reads: (regular=60523 apf=53 total=60576), physical reads: (regular=48421 apf=6249 total=54670), apf IOs used=6173

Table: Setores scan count 95560, logical reads: (regular=99289 apf=0 total=99289), physical reads: (regular=10 apf=0 total=10), apf IOs used=0

Table: Worktable1 scan count 1, logical reads: (regular=6545 apf=0 total=6545), physical reads: (regular=0 apf=0 total=0), apf IOs used=0


===> Total actual I/O cost for this command: 1.317.060... (apenas 1% do anterior)


Execution Time 15.
SQL Server cpu time: 1500 ms. SQL Server elapsed time: 83.800 ms.


Basta uma rápida olhada para perceber imediatamente que a diferença na quantidade de I/Os e no tempo de processamento é impressionante, próximo de apenas 1% da select original!

Mas ainda podemos mudar um pouco isto para explorar alternativas.

Observem que utilizamos um Join para validar a tabela de setores. Mas neste caso, poderemos ter várias releituras da mesma.

Também seria possível a condição 'where... IN' para validar o setor, ao invés de Join. Mas neste caso, pode ocorrer um aumento no número de I/Os, que é pequeno em relação ao problema original, mas que deverá ser estudado se for noutra implementação

Assim teremos:

select codigoSetor, count(*),
       sum ( case
               when b.codigoFlagTeste 0 then 1 else 0 end ) ,
       sum ( case
               when b.codigoFlagTeste = 0 and tipoABCDE in (1, 2, 3, 4) then 1 else 0 end ) ,
       sum ( case
               when b.codigoFlagTeste = 0 and tipoABCDE not in (1, 2, 3, 4) then 1 else 0 end )
  from Movimentos b
  where dataOperacao between '04/01/2009' and '04/30/2009' and
        codigoSetor in (select codigoSetor
                          from Setores (index indiceSetores01)
                          where tipoSetor = 'X' or Setores.codigoSetor = 999)
  group by codigoSetor  

Estatística da Execução:
----------------------------------
Table: Movimentos scan count 1, logical reads: (regular=60523 apf=26 total=60549), physical reads: (regular=51955 apf=4993 total=56948), apf IOs used=4822

Table: Setores scan count 95560, logical reads: (regular=99627 apf=0 total=99627), physical reads: (regular=27 apf=0 total=27), apf IOs used=0

Table: Worktable1 scan count 1, logical reads: (regular=6545 apf=0 total=6545), physical reads: (regular=0 apf=0 total=0), apf IOs used=0


===> Total actual I/O cost for this command: 1.358.992.
Total writes for this command: 6884

Execution Time 18.
SQL Server cpu time: 1800 ms. SQL Server elapsed time: 107.326 ms.

(113 rows affected)
----------------------------------


Portanto vemos que a Alternativa A ainda foi uma melhor modificação.

Uma observação adicional, é que ao mudarmos a select original, também foram eliminados alguns resultados desnecessários, que precisariam processamento posterior, daí a diferença na quantidade de registros resultante ter baixado de 121 para 113.


Comparativo


Custo Total
I/O
Tempo Execução
Tempo CPU
SQL Server elapsed time
Original
132.860.664
749
74900 ms
1.471.296 ms
Alternativa A
1.317.060
15
1500 ms
83.800 ms
Alternativa B
1.358.992
18
1800 ms
107.326 ms



Conclusão:

Tivemos uma redução aproximada de 99% na quantidade de I/Os necessários e de 98% no tempo de execução.

Alguns pontos podem ser melhorados, mas em face do ganho obtido, já ficou num nível mais satisfatório, especialmente considerando a cultura local.


Resultados:

  • Enorme economia de recursos.
  • Maior disponibilidade do servidor para atender outras transações.
  • Maior satisfação do usuário final que passou a ter muito mais agilidade.
  • Ciclo de desenvolvimento e testes do programa foram reduzidos a uma fração do previsto.

..
Related Posts Plugin for WordPress, Blogger...