Re: [delphi-br] [MAF] Processamento de informações em lote

2010-05-21 Por tôpico Dirlei Dionisio
Isse é o tipo de problema que me dá água na boca! Vamos lá.

Seu problema pode ser resolvido com a estrutura de dados FIFO (First In
First Out), também conhecida como FILA (o primeiro que entra é o
primeiro que sai). O Delphi tem uma classe pra lidar com essa estrutura,
se chama TQueue e fica na unit Contnrs.

Nessa estrutura, há dois métodos principais: 

Push - para colocar um item no final da fila
Pop - para remover o item que está no início da fila

Na implementação em Delphi, os itens são do tipo Pointer. Você pode
criar uma classe para encapsular as informações que recebe via socket.
Se essa classe herdar de TInterfacedObject você nem precisará se
preocupar com a desalocação desses objetos.

O problema com a sua solução:

Arrays dinâmicos precisam ser realocados na memória cada vez que você
aumenta o tamanho dele. Dependendo da quantidade de itens no array e do
quanto cada item ocupa em memória, isso pode ser uma operação cara.
Independente do tamanho que chega o seu array e do quanto ele ocupa em
memória, com certeza a solução usando uma FILA terá um desempenho melhor
(além de ser bem mais elegante).

Espero ter ajudado.

Um abraço,
Dirlei Dionísio
http://MaisQueBomCodigo.blogspot.com



Em Sex, 2010-05-21 às 13:47 +, Marcos Abreu Ferreira escreveu:
   
 Pessoal,
 
 tenho a seguinte situação: Recebo informações de um sistema via socket
 e essas informações teem que ser processadas na ordem que chegam e não
 podem ser processadas sem que o processamento da anterior termine. 
 
 Tentei fazer usando o ClientDataSet, onde criei um campo autoincrement
 e outro com a informação a ser processada. Como posso receber umas 200
 linhas de informações por segundo, o ClientDataSet se mostrou lento,
 pois preciso de uma resposta super rápida no processamento.
 
 Resolvi então trabalhar com array dinâmico, onde a cada vez que recebo
 uma informação, crio um elemento novo no array e salvo a informação
 lá. Tenho uma variável global onde controlo qual foi o último array
 processado e verificando quantos elementos tem o array, processos os
 faltantes. Coloquei um timer varrendo o array de 1 em 1 milisegundo.
 
 Qual a opinião de vocês quanto a minha solução? Teriam alguma dica
 sobre como melhora-la?




Re: [delphi-br] SVN - Ambientes de Homologação e Produção

2010-05-20 Por tôpico Dirlei Dionisio
Alexandre,

Aqui onde trabalho fazemos commit mesmo antes de ter concluído uma
implementação grande. Isso, de certa forma, é um backup dos trabalhos em
desenvolvimento. Quando liberamos uma versão para teste, fazemos commit
de tudo para o repositório, mesmo antes dos testes. Se os testes
detectarem algum problema, corrigimos, liberamos nova versão e fazemos
commit de tudo novamente. Quando os testes são concluídos, adicionamos
uma Tag com o número da versão (no formato n.n.n.n) aos fontes que estão
no repositório.

Se antes de concluírmos a implementação for necessário resgatar a última
versão estável, baixamos o repositório o projeto com o Tag da versão
estável.

Não creio ser uma boa idéia ter mais de um repositório para o mesmo
projeto. Você pode seguramente isolar a versão estável da que está em
manutenção usando Tags.

Um abraço,
Dirlei Dionísio
http://MaisQueBomCodigo.blogspot.com

Em Qui, 2010-05-20 às 15:39 -0300, Alexandre escreveu:
   
 Pessoal,
 
 aqui eu uso o svn como controle de versões.
 O método que estamos usando no momento é:
 
 1. o desenvolvedor corrige bugs e coloca o .exe pra teste.
 Alguem testa, da ok, entao ele comita eta em produção.
 
 2. o desenvolvedor tem uma implementação grande para fazer.
 Ele dá um update e inicia. Dá os updates para atualizar seus fontes ao
 decorrer do tempo.
 Ao fim, coloca o.exe em testes. Alguem faz o teste e da o ok. Entao
 ele
 comita e fica em produção.
 
 Gostaria de saber se há uma forma melhor de se fazer isso, seja usando
 o svn
 (branch), seja criando um novo repositorio para produção e deixando o
 atual
 como testes.
 
 O que os senhores conhecem a respeito?
 
 Att.
 
 Alexandre Pedroto
 ASP Informatica
 (21) 2667-4488





Re: [delphi-br] Ajuda para definir valor de projeto

2010-05-18 Por tôpico Dirlei Dionisio
Isso é, provavelmente, a parte mais crítica do projeto. Estimar o preço
baseado no tempo de desenvolvimento x custo por hora é o que quase todo
mundo faz (inclusive a empresa onde trabalho), mas pressupõe que o
cliente sabe exatamente o que ele precisa antes de o projeto começar e
que a análise e o projeto serão feitos sem falhas.

Nessa abordagem, muitas vezes se acrescenta um percentual de gordura
sobre o preço final para cobrir eventuais falhas na estimativa. Às vezes
funciona, às vezes não. A margem de acerto é maior em projetos muito
pequenos (de alguns dias a 1 ou 2 semanas).

O que tenho insistido para conseguir implantar onde trabalho é o
Contrato de escopo variável (ou negociável). Talvez seja de ajuda pra
você ler sobre o assunto.

[ ]'s
Dirlei Dionísio
http://MaisQueBomCodigo.blogspot.com



Em Ter, 2010-05-18 às 14:06 -0300, Eduardo Melo escreveu:
   
 Ola Pessoal,
 
 Eu vou desenvolver um sistema para uma loja de material de construção,
 o
 sistema terá cupom fiscal, cadastros, parte financeira.
 
 Gostaria de ter uma base de como cobrar por um sistema.
 
 Eu devo cobrar pelo projeto a desenvolver mais uma mensalidade?
 
 Exemplo penso em cobrar pelo sistema como um projeto que irei no
 cliente
 coletar as informações, sempre estarei em contato com o cliente para
 desenvolver o sistema adequado, pensei no valor de R$ 3.000,00 (três
 mil
 reais) pelo projeto e mais uma mensalidade para questão de suporte,
 gostaria
 de saber se esta errado o método de cobrar esse valor, ou cobrar só
 implantação e a mensalidade.
 
 Gostaria da opinião do pessoal do grupo.
 
 Desde de já agradeço.
 
 -- 
 Atenciosamente
 
 Eduardo Melo
 Bacharelado em Sistemas de Informação




Re: [delphi-br] Hibernate

2010-05-05 Por tôpico Dirlei Dionisio
Existem o DObject e o tiOPF. Você deve encontrar outras opções
procurando por ORM Delphi no Google.

PS: Suponho que você tenha um motivo para querer usar ORM (Mapeamento
Objeto-Relacional) no Delphi.

[]'s
Dirlei.

Em Qua, 2010-05-05 às 17:28 +, adauri_jr escreveu:
   
 Boa tarde a todos, para o Java e o .Net existe um framework, chamado
 Hibernate( http://pt.wikipedia.org/wiki/Hibernate ), alguem sabe se
 existe algo parecido pro Delphi ?
 
 Obrigado
 
 Jr. 




Re: [delphi-br] ZLib+Winzip

2010-05-05 Por tôpico Dirlei Dionisio
Jhosef,

Se você não deseja utilizar componentes de terceiros, vejo algumas
alternativas:

1 - Compreender a estrutura de um arquivo ZIP e criar você mesmo uma
forma de gerar arquivos compactados que possam ser extraídos pelo
Winzip/Winrar.

Um arquivo no formato ZIP contêm um ou mais arquivos compactados com o
algoritmo DEFLATE (geralmente), porém no final do arquivo há metadados
como o nome e tamanho original/compactado de cada arquivo.

A biblioteca ZLib do Delphi usa o algoritmo DEFLATE, mas não gera esses
metadados necessários ao ZIP, apenas gera a sequência de bytes
compactada. Você precisa adicionar os metadados para gerar um legítimo
arquivo ZIP. Informações sobre esses metadados você certamente
encontrará na internet.

2 - Você também pode olhar o código de algum componente que já faça isso
e escrever o seu próprio código. Ou pode copiar o código para a sua
aplicação - se a licença do componente permitir isso (ou se você não
liga pra violar licenças).

3 - Ainda outra alternativa é levar junto com o seu software algum
programa command-line que faça esse trabalho por você (Já usei o 7zip
para isso).


Um abraço,
Dirlei.


 On 05/05/2010 10:36, Jhosef Marks wrote:
  E ai galera, é o seguinte...
 
  Com a Zlib do delphi eu consegui compactar um arquivo, mas não
 consigo
  descompacta-lo com o Winzip ou Winrar...
 
  Já procurei na lista e no google alguma forma de fazer isso sem
 componentes
  ou bibliotecas de terceiro, quero usar apenas o ZLIB nativo do
 delphi e mais
  nada.
 
  Estou usando o Delphi 2010.
 
  Isso é possível
 
  Att,
 
  Jhosef Marks de Carvalho
  Blog: http://www.jhosefmarks.com.br
  Jesus está voltando
 
  E se o meu povo, que se chama pelo meu nome, se humilhar, e orar, e
 buscar
  a minha face e se converter dos seus maus caminhos, então eu ouvirei
 dos
  céus, e perdoarei os seus pecados, e sararei a sua terra. (2 Cr
 7:14)




Re: [delphi-br] Qual o limite de tamanho para um executável?

2010-05-04 Por tôpico Dirlei Dionisio
Fellipe,

O que esse programa faz?


Agora comentanto o comentário do amigo Walter

- Acho que imagens não precisam ser restritas, desde que fiquem fora do
executável.

- Racionar forms é perigoso pois pode diminuir a usabilidade do
software e/ou aumentar a complexidade dele. Usar herança visual de
formulários pode ser uma alternativa.


[ ]'s
Dirlei.


Em Ter, 2010-05-04 às 09:25 -0300, Walter Chagas (Bol) escreveu: 
 Executáveis muito grandes são mal sinal.
 
 Sinal de que o projeto/programação/codificação está mal estruturado.
 Sinal de que o compilador ou o Linkeditor estão mal configurados.
 Sinal de que o projeto está muito gordo ou cheio de coisas que nunca serão 
 usadas.
 
 Executáveis muito grandes, são lentos, dão problemas de alocação de memória 
 e recursos, dentre outros.
 
 Quase todos aqui são unânimes em propor a modularização. Quebrar seu exe em 
 dll's ou Bpl's que, inclusive, facilitam muito a manutenção visto que 
 dependendo do que for, voce só mexe na dll e pronto. Não compromete o resto 
 do sistema.
 
 Convem sempre analisar as configurações do compilador e do linkador antes de 
 gerar o exe final para implantar. Pode-se perfeitamente, por exemplo, 
 desabilitar as opções de debugação. Outra coisa que incha executavel é 
 mandar incluir parametros e mapeamento interno para usar o Turbo Debugger da 
 borland (Include TD32 Debug Info). Verifique se isto está habilitado.
 
 A regra básica é: O executavel passou de 4MB, é hora de revisão. Revise se 
 há rotinas que podem ser incorporadas em módulos, bem como funções. Revise 
 se há redundância de código e se fragmentos de código comuns em vários 
 pontos não podem ser convertidos em uma função a ser armazenada em uma dll 
 que faça a mesma coisa. Imagens, devem ser restritas ao mínimo possível e, 
 preferencialmente, de baixa resolução. Imagens grandes = executaveis grandes 
 = alocação maior de memória. Forms podem ser racionados. Verifique se um 
 processo/Rotina em seu sistema que use 5 forms não podem cair pra pra 2 
 forms ou mesmo 1 com abas. Componenetes de acesso a dados (Queries, DSPs e 
 CDS´s) podem ser reaproveitados. Verifique se voce não está usando 
 componentes demais pra coisas de menos.
 
 E por aí vai...
 
 
 []s
 
 
 Walter Alves Chagas Junior
 Belo Horizonte - MG - Brazil
 wchagasj bol.com.br
 http://delphitocorporerm.blogspot.com/
 http://twitter.com/wchagas
 MSN: whitesock...@hotmail.com
 SKYPE: WalterChagasJr
 
 
 - Original Message - 
 From: Fabiano Moura mctbrasil gmail.com
 To: delphi-br@yahoogrupos.com.br
 Sent: Monday, May 03, 2010 11:48 PM
 Subject: Re: [delphi-br] Qual o limite de tamanho para um executável?
 
 
 E eu que pensei que o meu programa de 8 MB era grande, rsrsrs!!!
 
 Em 3 de maio de 2010 19:29, Marcos Alexandre Lemos Rodrigues 
 marcosalexandre.rodrigues gmail.com escreveu:
 
  Limite não existe, já vi executáveis com mais de 300 MB. Só não é prático.
  Melhor separar em pacotes bpl mesmo ou então em dlls, que além de ficar
  mais
  fácil trabalhar, existe opção de carregar na memória apenas quando o
  usuário
  realmente precisar do módulo, economizando memória geral.
 
  Em 3 de maio de 2010 19:14, Rubem Rocha rubem.rocha dtmanaus.com.br
  escreveu:
 
  
  
   35MB? Meu amigo, considere ‘para ontem’ separar sua aplicação em 
   módulos,
   preferencialmente em pacotes BPL. Tem material a botão na Internet
  falando
   sobre isso.
  
   Sds.
  
   De: delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.br
  [mailto:
   delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.br] Em
   nome de Fellipe Henrique
   Enviada em: segunda-feira, 3 de maio de 2010 16:16
   Para: delphi-br@yahoogrupos.com.br delphi-br%40yahoogrupos.com.br
   Assunto: [delphi-br] Qual o limite de tamanho para um executável?
  
  
   Amigos, tenho um executável, que está chegando perto dos 35MB... existe
   algum limite? se passar dele começa a dar problemas? que tipos de
   problemas?
  
   Att.
  
   --
   _
   T.·.F.·.A.·.
   Fellipe Henrique




Re: [delphi-br] OFF TOPIC-Multiprocessamento com Firebird

2010-04-29 Por tôpico Dirlei Dionisio
Dê uma olhada na configuração CpuAffinityMask. Há algo a respeito dela
em http://www.janus-software.com/fbmanual/manual.php?book=admintopic=8

[]'s
Dirlei.

Em Qui, 2010-04-29 às 00:10 -0300, Yahoo escreveu:
   
 Verifiquei que em computadores com multiprocessadores, o Firebird só
 usa um núcleo do processador quando acessa o banco de dados. Dessa
 forma a performance do servidor não é totalmente aproveitada. Como
 fazer para que o firebird use todos os núcleos do processador? Existe
 alguma versão especial, alguma configuração ou modo diferente de fazer
 a instalação do Firebird para isso?




Re: [delphi-br] URGENTE: Problema com Exceções

2010-04-29 Por tôpico Dirlei Dionisio
Se uma exceção acontece dentro de um bloco try..except, por padrão ela
será capturada pelo Debugger e exibida dentro da IDE. No Debugger
Options do Delphi7 há um configuração Stop On Delphi Exceptions que
desabilita esse comportamento. Deve haver algo equivalente no lazarus.

Dirlei.

Em Ter, 2010-04-27 às 19:49 -0300, Paulo César escreveu:
   
 Pessoal,
 
 Uso o Lazarus e desenvolvi o seguinte código:
 procedure TForm1.Button1Click(Sender: TObject);
 begin
 try
 Edit3.text:=floattostr(strtofloat(edit1.text)/strtofloat(edit2.text));
 except
 on E:Exception do
 begin
 ShowMessage(E.message);
 end;
 end;
 end;
 
 Quando ele executa, ele dá o seguinte erro: project1.exe raised
 exception
 class 'External: SIGFPE'
 Porém, se eu executo ele pelo .exe, ele não causa o erro.
 
 Quem pode ajudar? É urgente pessoal!!!
 
 Abraços,
 
 Atenciosamente,
 
 Paulo César de Oliveira,



Re: [delphi-br] OFF TOPIC-Multiprocessamento com Firebird

2010-04-29 Por tôpico Dirlei Dionisio
Dê uma olhada na configuração CpuAffinityMask. Há algo a respeito dela
em http://www.janus-software.com/fbmanual/manual.php?book=admintopic=8

[]'s
Dirlei.

Em Qui, 2010-04-29 às 00:10 -0300, Yahoo escreveu:
   
 Verifiquei que em computadores com multiprocessadores, o Firebird só
 usa um núcleo do processador quando acessa o banco de dados. Dessa
 forma a performance do servidor não é totalmente aproveitada. Como
 fazer para que o firebird use todos os núcleos do processador? Existe
 alguma versão especial, alguma configuração ou modo diferente de fazer
 a instalação do Firebird para isso?