Oct 25 2007

XML no PHP5

Tag: PHPdavid @ 10:55 pm
XML

Hoje em dia XML já não pode ser mais considerada uma palavra da moda, é um padrão sólido usado e aceito por empresas em aplicações de ponta no mundo todo, base para uma série de inovações como os Webservices e o recente XAML da Microsoft, é uma tecnologia que mudou a cara da internet e que surpreendentemente muitas pessoas não sabem muito bem como funciona, mesmo sendo extremamente simples.

Não vou falar sobre estruturas básicas de um arquivo XML, é uma informação que você pode tirar de muitas outras fontes, como por exemplo o livro Learning XML da O’reilly que aborda muitos outros aspéctos relacionados ao tema de forma profunda (adianto que como outros livros da O’reilly esse também é muito teórico, e se aprofunda no tema sem mostrar muitos exemplos práticos).

Aqui vou falar basicamente sobre como é o suporte nativo do PHP ao XML, como funcionam as ferramentas padrão da linguagem, evolução dessas ferramentas e no final uma abordagem OOP para a questão.

Continue lendo: “XML no PHP5″


Oct 23 2007

The Missing “LINQ”

Tag: C#david @ 4:19 pm

Functional programming is complexer than imperative (that’s what we do right now). You need to understand the algorithm when implementing it in a functional language. Otherwise you won’t success. You need to understand function calls and recursive calls (you won’t believe how many don’t know how that works). You need to look at the problem from a different viewpoint, which most never did and which might therefore be harder for some. It needs a deeper knowledge!

Enquanto alguns programadores com mais tempo de janela comparam a tecnologia LINQ com os antigos recursos encontrados no Visual FoxPro em vários artigos pelo mundo afora eu particularmente não posso me dar a esse luxo, quando FoxPro ainda era comercialmente viável e estava presente em muitas grandes empresas eu estava no meu quarto jogando Sonic 2 no MegaDrive (esse pessoal de internet gosta mesmo de provocar os mais velhos não?) e acabei perdendo toda essa grande festa da era pré .Net, de qualquer forma chegar mais perto da linguagem C# justamente agora, quando os primeiros recursos de “linguagens funcionais” são implementados me deixa muito satisfeito, provavelmente porque eu nasci no Javascript e o conceito de programação funcional foi o meu primeiro paradigma de programação. Com a introdução dos novos recursos da versão 3.0 da linguagem C# vou poder fazer coisas sofisticadas de uma forma que eu pelo menos acho bastante intuitiva, a tecnologia LINQ permite acessar informação em um objeto ou estrutura de dados através de consultas diretas, select statements literalmente falando, muito similar com T-SQL. A diferença elementar aqui é poder fazer uma consulta em qualquer estrutura de dados, um objeto, um XML e é claro em datasets e outros modelos de dados.

fig01_l.gif

Continue lendo: “The Missing “LINQ””


Oct 23 2007

Linguagens mais populares em Out/2007

Tag: Web Developmentdavid @ 12:46 pm

O ranking da TIOBE Programming Community do mês de Outubro mostra as 20 linguagens mais populares do mundo, não se trata propriamente de um ranking das melhores linguagens, é um índice que mostra as linguagens em que mais linhas de código foram escritas, mais cursos foram disponibilizados e mais referências foram feitas (Java deve aparecer em primeiro porque ganha linhas de código sempre que um universitário brasileiro usa 138 linhas para escrever um Hello World =P).

Interessante notar que o ranking mundial não tem absolutamente NADA a ver com o mercado brasileiro, aqui praticamente não existe espaço para desenvolvimento com Python e Ruby e eu poderia chutar que temos o Java (refletindo a tendência mundial) e o Visual Basic com percentuais muito maiores.

Continue lendo: “Linguagens mais populares em Out/2007″


Oct 18 2007

Javascript Magic Closures

Tag: Javascriptdavid @ 8:06 pm

Quando eu comecei a fazer meus primeiros códigos em Javascript ainda com meu O’reilly do rinoceronte a tira colo uma das coisas que mais me intrigavam eram as chamadas ”closures”, certamente me intrigavam menos do que programação OOP com prototypes mas ainda assim levei algum tempo para me acostumar com essa caracteristica da linguagem. Pra explicar de um jeito MUITO, mas muito simplista mesmo, podemos dizer que uma closure é uma variável criada dentro de uma função e que continua a existir na memória mesmo depois que a função já foi executada. Em uma análise mais profunda poderiamos dizer que as closures tem muito mais a ver com a forma como a memória é gerenciada no Javascript do que com uma váriável teimosa, vejamos o exemplo:

try {
     alert(closureDemo);
}
catch(err) {
    alert("A closure ainda não existe, mas na próxima...");
}
var theDemo = function () {
    closureDemo = "Aqui foi criada uma closure, essa string ainda vai existir quando a função terminar";
}
theDemo();
alert(closureDemo);

Continue lendo: “Javascript Magic Closures”


Oct 16 2007

CSS Sprites

Tag: Web Developmentdavid @ 12:48 pm

Uma das mais importantes recomendações de Steve Souders no livro High Performance Web Sites e em sua palestra citada em um dos meus posts recentes é diminuir tanto quanto possível o número de requisições HTTP feitas durante o carregamento do site, uma das técnicas para isso é usar CSS Sprites, mas o que são CSS Sprites?

Existe uma quantidade considerável de webdesigners que não conhecem essa técnica, eu já conhecia e já tinha visto aplicações práticas muito antes de conhecer esse “apelido”, um dos meus mentores (tomo como mentores as pessoas mais experientes e que tem boa vontade de ensinar) costumava me dizer que “Eu poderia fazer um layout inteiro usando uma única imagem”, é mais ou menos disso que se tratam os CSS Sprites. 

É especificamente um meio de substituir todas aquelas imagens recortadas por uma solução que aproveita o meio como o CSS funciona, podemos construir uma espécie de grid de imagens em um único arquivo e aproveitar cada uma das “células” desse grid como imagens individuais, fazendo isso podemos armazenar todos os botões, bordas, backgrounds, e qualquer outro elemento em uma única imagem mestre.

A técnica usa exatamente os MESMOS princípios utilizados na técnica de Fast Rollovers e em técnicas derivadas para criar abas de tamanhos automaticamente ajustáveis…

Continue lendo: “CSS Sprites”


Oct 10 2007

JQuery UI - A onda dos componentes client-side

Tag: Javascriptdavid @ 7:47 pm

jqui.jpg

Seguindo o mesmo caminho do Yahoo! UI e da EXTJS nasce o projeto JQuery UI, um set de widgets customizáveis (você pode aplicar temas assim como na EXTJS) e interações programadas para componentizar o desenvolvimento de aplicações sofisticadas no lado client (browser). Obviamente criada com base na biblioteca JQuery (core) o pacote da JQuery UI inclui as interações padrão de interface como drag and drop, ordenação, seleção e redimensionamento de elementos, e um pacote de widgets que inclui accordions, calendário, sliders, grids e tabs, nada muito diferente do que existe nas outras bibliotecas de widgets em termos de recursos.

Existem alguns efeitos novos como magnifier (efeito zoom ou lupa) e shadow (sombras) e os demos do site oficial realmente chamam a atenção apesar de apresentarem bugs em diferentes browsers, conhecendo um pouco do histórico da biblioteca é uma questão de tempo até que esses bugs estejam solucionados.

É uma grande mudança de paradigma para quem vinha acompanhando a JQuery e seu modelo de plugins externos, em termos de sintaxe nada mudou e o acesso as instâncias dos componentes contina sendo feito com aquele jeitão curto e grosso da JQuery.

  $(document).ready(function(){
    $("#example > ul").tabs();
  });

A documentação ainda não é das melhores, ainda tem um longo caminho pela frente para bater a Yahoo! UI nesse campo, mesmo porque a YUI nasceu com os componentes e tem muito mais tempo de estrada. Ficam como pontos positivos ser mais leve que a EXTJS e seguir o modelo de sintaxe curta da JQuery.

Acesse o demo da galeria de fotos.

Site oficial: http://ui.jquery.com/


Oct 09 2007

14 passos para construir sites de alta performance

Tag: Web Developmentdavid @ 3:40 pm

Steve Souders é o Chief Performance do Yahoo! Inc. e como parte de seu trabalho durante os últimos anos conseguiu determinar 14 regras vitais para melhorar a performance e a usabilidade de sites para o usuário final, basicamente apostando em otimizações no frontend e boas práticas de construção. O trabalho detalhado está em seu livro High Performance Web Sites, publicado pela O’reilly e também conta com exemplos práticos e a “dissecação” dos maiores portais dos EUA em volume de pageviews. Steve também criou a extensão YSlow, um analisador de performance integrado ao Firebug.

Para aproveitar e conhecer mais a fundo o trabalho de Steve e sua equipe no Yahoo! o ideal é mesmo ler o livro, mas aproveitando a deixa e a palestra sobre o assunto adicionada ao Yahoo! UI Theater vou fazer um resumo breve das 14 “dicas” com exemplos.

Steve Souders

Continue lendo: “14 passos para construir sites de alta performance”


Oct 08 2007

Copenhagen Comprehensive Collection Classes for C#

Tag: C#david @ 7:41 am

Ou C5 para resumir, é uma biblioteca de classes genéricas para coleções implementada no .Net 2.0 (também compatível com Mono) para C# e outras linguagens CLI. Foi desenvolvida pela IT University of Copenhagen.

Comparando com outras bibliotecas para collections, incluindo a biblioteca padrão System.Collections.Generic, a C5 possui estruturas de dados mais ricas, na classe da Microsoft algumas coleções como array lists e linked lists possuem funcionalidades similares mas não implementam uma interface em comum. Isso pode dificultar um pouco as coisas no momento do entendimento de como a biblioteca funciona.

A C5 nesse aspécto é mais fácil de entender, já que o desenvolvimento foi feito sob uma política restrita de codificar visando interfaces comuns entre as estruturas de dados.

Why yet another generic collection library?

There are already other generic collection libraries for C#/CLI, including the System.Collections.Generic namespace of the CLI or .NET Framework class library (included with Microsoft Visual Studio 2005), and the PowerCollections library developed by Peter Golde . The CLI collection library as implemented by Microsoft .NET Framework 2.0 provides a limited choice of data structures. In general, the CLI Framework library has a proliferation of method variants and rather poor orthogonality. Collection implementations such as array lists and linked lists have much the same functionality but do not implement a common interface. This impairs the learnability of the library. Some of these design decisions are well-motivated by the use of the CLI class library in contexts where nano-second efficiency is more important than rich functionality, and the need to support also rather resource-constrained run-time systems.

Thus, in our opinion, C5 provides the most powerful, well-structured and scalable generic collections library available for C#/CLI. However, although the size of the compiled C5.dll is only about 300 KB, you probably would not choose to use it on your .NET 2.0 Compact Framework wristwatch just now.

Exemplo simples de implementação:

using System;
using C5;
using SCG = System.Collections.Generic;
 namespace GettingStarted {
 	class GettingStarted {
 		public static void Main(String[] args) {
 			IList names = new ArrayList();
 			names.AddAll(new String[] { “Hoover”, “Roosevelt”,
				    “Truman”, “Eisenhower”, “Kennedy” });
 			// Print list:
 			Console.WriteLine(names);
 			// Print item 1 (”Roosevelt”) in the list:
 			Console.WriteLine(names[1]);
 			// Create a list view comprising post-WW2 presidents:
 			IList postWWII = names.View(2, 3);
 			// Print item 2 (”Kennedy”) in the view:
 			Console.WriteLine(postWWII[2]);
 			// Enumerate and print the list view in reverse chronological order:
 			foreach (String name in postWWII.Backwards())
 			Console.WriteLine(name);
 		}
 	}
}

O exemplo mostra o uso de uma ArrayList<T> através da interface IList<t>, e mostra como imprimir a lista inteira, como indexar a lista e como ordena-los de forma reversa. Para compilar e rodar o programa exemplo você vai precisar ter instalada a versão compilada da bilbioteca, C5.dll.

Binários, source code e uma detalhada documentação podem ser encontrados aqui.


Next Page »