quinta-feira, 29 de janeiro de 2009

Ergonomia

Criar um site para a Web ou desenvolver qualquer outro tipo de aplicação envolve, acima de tudo, uma boa organização dentro da equipa de concepção. Este conceito aplica-se de duas formas: do programador para o utilizador e do programador para a sua equipa.

Como utilizadores regulares da Internet, todos sabemos como é fácil existir redundância de informação, pouca clareza na navegação, longos tempos de espera, inconsistência do ponto de vista gráfico, entre outras contrariedades que, com o pouco tempo do dia-a-dia, nos faz fechar a janela e procurar outra alternativa, tendo em conta que existem actualmente mais de mil milhões de páginas na internet.

Visto isto, é essencial tirar partido do nosso próprio usufruto da Web e pensar no utilizador final e na forma como este vai interagir com o produto. Há que ter em consideração:

Usabilidade – A utilização da aplicação deve ser o mais amigável possível de forma a entender-se rapidamente como usá-la.
Navegabilidade – A partir de uma boa estrutura hierárquica da aplicação deve pensar-se na navegação na tentativa de ser lógica, intuitiva, clara e não redundante.
Simplicidade – Manter a aplicação simples. Demasiada informação ou informação repetida torna-se inconsistente para o utilizador e desvia a sua atenção do que é essencial reter.
Consistência – Criar uma aparência consistente, sem utilizar muitos tipos de fontes, muitas cores que não se conjuguem nem se relacionem com a informação a ser passada.

Como programadores, acontece regularmente haver a necessidade de se modificar linhas de código realizadas por outro programador. Quando estamos a falar em grandes projectos, é fácil perdermo-nos naquela que será a organização de outra pessoa.

Como tal, o ideal é estandardizar o mais possível o desenvolvimento de um projecto elaborado em equipa. Para isso é essencial ter em conta algumas situações:

Nomenclatura – É conveniente ter alguma atenção aos nomes de variáveis, métodos, classes, funções, etc. Devem ser coerentes e facilmente identificáveis com a informação que disponibilizam. É também importante que a escrita seja igual em toda a aplicação, como por exemplo utilizar só letras minúsculas ou o identificador de um controlo começar pelo diminutivo do tipo de controlo (Ex: btnClicar, em que o controlo é um botão)
Formatação – Para uma mais fácil formatação de tabelas ou controlos utilizam-se folhas de estilo em cascata, CSS. Estas permitem controlar tamanhos, espaçamentos, cores entre outras propriedades. A utilização de CSS leva a uma diminuição de propriedades atribuídas directamente aos controlos e abre a possibilidade da reutilização do mesmo estilo em todo o site tornando-o assim mais consistente.
Comentário – Nas situações de menor evidência do resultado de uma parte do código é fundamental colocar comentários que permitam uma maior clareza do funcionamento do mesmo.
Funcionalidade – Para existir funcionalidade é indispensável reduzir a redundância. Se um excerto de código vai ser reutilizado mais vezes ao longo do projecto então será mais fácil desenvolver um método ou uma função que depois seja chamada ao longo do projecto ao invés de repetir as mesmas instruções várias vezes.

Nem sempre se consegue cumprir todas estas regras, e tantas outras, à risca. Mas se no desenvolvimento de software tivermos em conta que também poderemos ser nós utilizadores da aplicação ou programadores da equipa que está sujeita a proceder a alterações no projecto torna-se mais fácil entender o quão essencial é cumpri-las.

quinta-feira, 1 de janeiro de 2009

Videos de formação para Aspx, Ajax e MOSS

Quem já não sentiu que é cada vez menor o tempo disponível, para acompanhar os novos produtos e soluções que emergem no mercado, inclusive os directamente relacionados com o nosso negócio. O que na maior das vezes leva-nos a tomar decisões erradas relativas à sua correcta utilização.

Quantas vezes, demos por nós sem tempo para podermos apoiar da melhor forma, os novos elementos da equipa. Algo que a médio prazo pode trazer problemas sérios, sem contar com a produtividade, que nunca consegue atingir o nível ideal.

Existe sempre a solução de formações pós-laborais, mas para além de serem dispendiosas, trazem uma sobrecarga adicional aos colaboradores. Sendo que muitas delas, principalmente as baseadas em tecnologias recentes no mercado Português, não passam de um debitar de informação do manual, sem nenhuma mais valia em termos de experiências do formador.

Como o nosso país ainda tem um pequeno gap (e ainda bem) na adopção das últimas tecnologias, existe uma solução que temos adoptado com cada vez maior frequência – Vídeos de formação – apresentados por alguém com experiência comprovada nos produtos que está a apresentar. Acabam por ser sessões explicativas relativamente curtas mas que focam os pontos essenciais.

Deixo aqui uma referência para um site que tem alguns excelentes vídeos de formação em tecnologia Microsoft, www.traincert.net. Tem inclusive alguns vídeos de oferta muito interessantes. Se quiser fazer o download de todos os restantes vídeos, o custo é de 19 dólares.

Deixo aqui uma lista resumida dos vídeos (existe também uma enorme lista para os interessados em DotNetNuke):

SharePoint 2007 Developer Vídeos
SharePoint #1 : Developing WebParts (24:15)
SharePoint #2 : Developing Features (29:55)
SharePoint #3 : Application Pages (13:47)
SharePoint #4 : Feature Receivers (10:55)
SharePoint #5 : Ajaxified WebParts with Gaia (33:13)

Various New TrainCert.NET Videos
Ajax : Getting Started with Ajax on ASP.NET (30:37)
Ajax : Intro to Gaia Ajax Widgets for ASP.NET (27:40)
Ajax : SharePoint 2007 Ajax WebParts (33:13)

ASP.NET 2.0
ASP.NET 2.0: Data Access (30:18)
ASP.NET 2.0: Data Access (25:49)
ASP.NET 2.0: Master Pages (7:46)
ASP.NET 2.0: Skins and Themes (5:13)
ASP.NET 2.0: Profiles (6:44)
ASP.NET 2.0: Localization (11:6)
ASP.NET 2.0: Site Navigation (11:29)

C# 2.0 Language Enhancements
C# 2.0 : Generics (21:0)
C# 2.0 : Anonymous methods (9:45)
C# 2.0 : Partial Types (9:48)
C# 2.0 : Iterators (9:47)
C# 2.0 : Minor enhancements (12:43)

Visual Studio 2005 IDE enhancements
VS.NET 2005 : Class Designer (16:44)
VS.NET 2005 : Snippets & Intellisense (15:10)
VS.NET 2005 : New debugger features (11:3)
VS.NET 2005 : Refactoring (13:58)

VB.NET 2.0 Enhancements
VB.NET 2005 : IDE Enhancements (12:40)
VB.NET 2005 : Language Enhancements (12:5)
VB.NET 2005 : My Namespace (10:48)

Microsoft Search Server 2008

Um produto muito interessante que tem passado um pouco ao lado do mercado português. Este Search Server 2008 tem tudo para resultar nos projectos que vamos implementando.

Quem não se lembra de usar soluções CMS com Sharepoint 2003, apenas porque tinha necessidade de criar uma pesquisa sobre os conteúdos criados. Este novo produto vem resolver isso mesmo, ou seja, reutilizaram a funcionalidade de pesquisa do Sharepoint numa solução bastante light. Ainda por cima a versão base não tem quaisquer custos associados.

Este software funciona com uma série de fontes:
• Partilha de ficheiros
• Bases de dados Lotus Notes
• Motores de pesquisa como a Wikipedia
• Existem conectores para FileNET
• E claro, tudo o que criares nos teus sites. Inclusive conteúdos de ficheiros

Ainda tem que ser submetido à prova mas parece que a Microsoft acertou mais uma vez no caminho certo!

Deixo aqui alguns links onde podem retirar mais informação:
http://www.microsoft.com/EnterpriseSearch/
http://www.microsoft.com/enterprisesearch/flash/MSSX.html

Alguns cuidados a ter com a performance de websites

Um assunto já amplamente discutido tem a ver com a optimização da performance das aplicações ASP.Net. Ninguém pode descurar a definição de regras básicas tendo em vista o melhor funcionamento das suas aplicações.

Principalmente na fase inicial de cada projecto, devem ser adoptadas soluções adequadas aos seus requisitos, de modo a que não hajam desagradáveis surpresas numa fase mais avançada, o que na maior parte dos casos vai acarretar a custos não previstos e elevados.

Um dos grandes objectivos deste blog é dar conhecimento de algumas formas e soluções para optimizar a performance das aplicações Web. Começo por deixar aqui alguns conselhos, já antigos, mas que nunca devem ser esquecidos.

1. Evitar idas desnecessárias ao servidor
Sempre que possível utilizar Javascript para controlar o aspecto e funcionalidade das páginas. É impressionante o número de aplicações que fazem uma ida ao servidor apenas para mostrar um controlo, ou fazer pequenas validações, obrigando a reconstruir toda a página.

Utilizar o “Page.IsPostBack” no load das páginas para evitar processamento desnecessário.

Se ainda não usas metodologia Ajax, deves começar o mais rápido possível. Além do melhor aspecto funcional das aplicações, evita em muito, a sobrecarga de trabalho e informação que é gerada para cada construção integral da página.

2. Usar o viewstate apenas quando necessário
Apesar de muito simpático, facilmente podemos perder o controlo do viewstate. Basta olhar para o html gerado daquelas páginas mais pesadas, principalmente as que fazem uso de datagrids ou repeaters, para ver aumentar exponencialmente o tamanho da nossa página.

Por defeito está activo, mas caso não precisemos dele, podemos sempre desactivá-lo das seguintes formas:
• Ao nível do controlo – colocar a propriedade EnableViewState=”false”
• Ao nível da página – colocar a directiva de página EnableViewState=”false”
• Ao nível da aplicação – colocar no Web.config a chave

3. Não usar excepções para fazer validações
Este tipo de código pode trazer complicações ao servidor, basta fazer um pequeno debug e ver o tempo que ele demora a gerar a excepção.

public bool IsNumeric(string val) {
  try {
    int number = int.Parse(val);
    return true;
  }
  catch {
    return false;
  }
}

4. E antes de colocar em produtivo…
Tirar o trace e o debug. Por incrível que pareça, é tão fácil de esquecer que já vi bastantes aplicações em produtivo com estas chaves activas.

No Web.config coloca:
<configuration>
<system.web>
<trace enabled="false" pageOutput="false" />
<compilation debug="false" />
</system.web>
</configuration>

Javascript: Activar o Debug no lado do cliente

Não sei porquê, mas continua a passar ao lado de muitos programadores a possibilidade que têm de fazer debug em javascript, no Visual Studio.

Muito simples a configuração:
• No IE, em propriedades avançadas, desmarcar a opção “Disable Script Debugging (Internet Explorer)”.

Depois basta colocar “debugger” onde quiser na sua função de javascript e está pronto. Da próxima vez que esta função for evocada irá despoletar o debug.

Javascript: Mostrar um alerta sempre que abandona um formulário sem gravar

Uma das grandes limitações que as aplicações Web sempre tiveram, foi a facilidade com que um utilizador pode perder informações introduzidas num formulário (apenas por seleccionar um link que não era suposto).

Se bem que este problema já começou a ser um pouco ultrapassado com a nova moda de colocar um “div de fundo”, dando a impressão que está a usar um formulário modal, em muitas situações esta limitação continua a ser bem real.

Há alguns anos atrás participei num projecto em que um dos requisitos era alertar o utilizador sempre que carregava num link, sem antes ter guardado a informação alterada. Depois da equipa muito pesquisar na Net sobre a melhor forma de implementar este requisito em Javascript, encontrámos uma propriedade muito interessante – defaultValue – disponível para qualquer elemento de um Form.

Baseámo-nos num script do Bob Mattler (infelizmente perdi a referência) com alguma modificações nossas.

Para implementar basta:
• Colocar uma referência na Master Page para o JS.
• Em cada link da vossa aplicação, nomeadamente nos menus, colocar a instrução onclick="formAlterado=true;" e já está.


/*********************************
** Verifica Alterações em Form **
*********************************/

window.onbeforeunload=verificaAlteracoes; //regista o evento para correr no unload de qualquer página

var formAlterado = false;
var msgAlterado = 'Colocar aqui a mensagem de erro';

function verificaAlteracoes() {
if (formAlterado){
//só queremos validação nos forms que são para gravar
if (document.getElementById('lnkGravar') && isFormChanged()) {
event.returnValue = msgAlterado;
}
formAlterado = false;
}
}

function isFormChanged() {
var rtnVal = false;
var frm = document.forms[0];
var ele = frm.elements;

//Percorre todos os elementos do Form
for ( i=0; i < ele.length; i++ ) {
if ( ele[i].type.length > 0 ) {
if ( isElementChanged( ele, i ) ) {
rtnVal = true;
break;
}
}
}
return rtnVal;
}

function isElementChanged( ele, i ) {
switch ( ele[i].type ) {
case "text" :
if ( ele[i].value != ele[i].defaultValue )
return true;
break;
case "textarea" :
if ( ele[i].value != ele[i].defaultValue )
return true;
break;
case "radio" :
if ( ele[i].checked != ele[i].defaultChecked )
return true;
break;
case "select-one" :
if (ele[i].options.selectedIndex != -1 &&
ele[i].options[ele[i].options.selectedIndex].selected !=
ele[i].options[ele[i].options.selectedIndex].defaultSelected){

if (ele[i].options.selectedIndex == 0 && ele[i].options[0].value == ''){
for ( var x =0 ; x < ele[i].length; x++ ) {
//verifica se existia algum default selected
if ( ele[i].options[x].defaultSelected )
return true;
}
}
else
return true;
}
break;
case "select-multiple" :
if (ele[i].options.selectedIndex != -1 &&
ele[i].options[ele[i].options.selectedIndex].selected !=
ele[i].options[ele[i].options.selectedIndex].defaultSelected){

if (ele[i].options.selectedIndex == 0 && ele[i].options[0].value == ''){
for ( var x =0 ; x < ele[i].length; x++ ) {
//verifica se existia algum default selected
if ( ele[i].options[x].defaultSelected )
return true;
}
}
else
return true;
}
break;
case "checkbox" :
if ( ele[i].checked != ele[i].defaultChecked )
return true;
break;
}
return false;
}



Bem vindo ao blogue da Simple Solutions

Ano novo, vida nova!

Ao iniciar um novo ano, olho com saudades para 2008, um ano em que estivemos envolvidos em vários projectos de relevo, com especial destaque para o MOSS 2007. Fortalecemos a nossa equipa com três novos elementos jovens de grande valia técnica e conseguimos construir as bases para que 2009 seja um ano ainda de maior sucesso para a Simple Solutions.

Um dos grandes objectivos que tenho desde que criámos a nossa empresa é demonstrar a qualidade técnica dos nossos elementos. E que melhor forma de confirmar essa qualidade do que a criação de um blog!

Iremos falar sobre os mais variados assuntos ligados ao desenvolvimento de software em Portugal. Desde novos produtos, formas de facilitar a resolução de problemas que nos surgem no dia-a-dia, performance, trabalho em equipa... No fundo, tudo aquilo que achamos interessante e que gostaríamos de partilhar com os nossos parceiros, fará parte deste blog.

Espero que gostem!

Um excelente ano de 2009.
Carlos Teixeira