- Recent
- Popular
- Tags (2)
- Subscribers (1)
- Modularização de Aplicativos – Single PackageNovember 4 2008
-
Quem desenvolve aplicativos modularizados, pode já ter se deparado com uma desvantagem comum quando se trata de distribuir pacotes de runtime: como controlar quais packages distribuir junto com o aplicativo/módulos e suas versões e facilitar suas atualizações?
Normalmente quando compilamos um aplicativo com a opção “Build with runtime packages” marcada, no mínimo teremos que redistribuir os pacotes rtlxx.bpl e vclxx.bpl (onde o “xx” equivale à versão do Delphi, pelo menos até o Delphi 7), mais os pacotes referenciados pelas units da vcl e/ou de terceiros.
Agora imagine um projeto grande, onde temos vários componentes de terceiros empregados. Quantos arquivos extras se tornariam dependências para o aplicativo?
Procurando uma maneira simples para minimizar o número de arquivos a serem distribuídos em conjunto com um aplicativo que use runtime packages, me deparo com o excelente tutorial de Keith Johnson, ao qual não posso acrescentar muita coisa, por já ser muito completo e didático. Contento-me a simplificá-lo e torná-lo útil para a realidade de muitos aqui.
Direto ao ponto
Figura 1 – Aplicativo com pacotes d
- Delphi 2009 Disponível para DownloadSeptember 9 2008
-
A versão trial do Delphi 2009 já está disponível para download. Não deixe de experimentar a nova versão.
© TechTips - Google Chrome – O Browser do GoogleSeptember 1 2008
-
Aparentemente o Google esteve trabalhando em segredo em um novo browser, chamado Google Chrome. Não, o link ainda não funciona, e não foi anunciado oficialmente. Mas algumas pessoas receberam uma história em quadrinhos, desenhada por Scott McCloud, um cartunista da DC Comics. A história tem os funcionários do Google como personagens e mostra os recursos do novo browser, dos quais eu destacaria:
- Completamente nova engine de JavaScript, chama V8, prometendo performance extremamente superior às existentes.
- Abas isoladas em processos separados, com a finalidade de melhorar a estabilidade e segurança.
- Modelo de segurança onde páginas rodam em uma sandbox especial, sem contato com nada. O ponto fraco ainda são os plugins.
- Renderização de HTML feita pelo WebKit.
- Google Gears integrado
- Várias pequenas melhorias técnicas em relação aos browsers atuais.
O projeto é prometido para ser completamente open source. Acho interessante a engine de JavaScript, em particular, por não ser acoplada ao browser e plugável em outros projetos.
Ainda é extremamente cedo para tirar qualquer tipo de conclusão, principalmente apenas a partir de uma história em quadrinhos, mas
- Anonymous Methods e Closures no Delphi 2009August 28 2008
-
Já conhecemos a sintaxe dos anonymous methods do Delphi 2009. A parte interessante deste novo recurso é que eles são closures.
Closure é a união do código com o seu escopo. Isso quer dizer que o novo método tem acesso às variáveis locais do método que o criou, mesmo depois que ele terminou. Vamos ver como isso funciona com um exemplo:
type TContador = reference to function: Integer; function CriaContador(Inicial, Final: Integer): TContador; var i: Integer; begin i := Inicial; Result := function: Integer begin Result := i; Inc(i); if i > Final then i := Inicial; end; end; var Contador: TContador; i: Integer; begin Contador := CriaContador(5, 12); for i := 0 to 20 do WriteLn(Contador); end.Antes de ver a listagem da saída do programa, Vamos entender o código. TContador é um tipo que representa uma referência a uma função que retorna um número. Neste caso, vai retornar uma sequência de números, um número novo cada vez que for chamada. CriaContador é uma função que retorna um método desse tipo, recebendo os valores inicial e final que a sequência vai ter. Repare que o corpo de CriaContador tem apenas duas linhas de código que serão executadas quando ela for chamada: ela inicializa o contador, e atribui um novo m
- Anonymous Methods no Delphi 2009August 28 2008
-
Um dos novos recursos no Delphi 2009 é anonymous methods. É também chamado de “referências a métodos”, pois a declaração de um tipo procedural é feita com a sintaxe “reference to function/procedure”:
type TComparaString = reference to function(const S1, S2: string): Integer;Esse tipo pode ser usado como qualquer outro tipo procedural:
procedure TLista.Ordena(Compara: TComparaString); var i, j: Integer; begin for i := 0 to FItems.Count - 2 do for j := FItems.Count - 1 downto i + 1 do if Compara(FItems[j], FItems[i]) < 0 then Troca(i, j); end;(Perdoem-me o Bubble Sort)
Não precisamos mais declarar um método separadamente para cada forma diferente de ordenação que for necessária. O código abaixo ordena uma lista alfabeticamente, depois de forma inversa, e finalmente de acordo com o tamanho da string:
Lista := TLista.Create; try Lista.Adiciona('Um'); Lista.Adiciona('Dois'); Lista.Adiciona('Tres'); Lista.Adiciona('Quatro'); Lista.Adiciona('Cinco'); Lista.Ordena(function(const S1, S2: string): Integer begin Result := CompareStr(S1, S2); end); WriteLn(Lista.Texto); Lista.Ordena(function(const S1, S2: string): Inte
